@rennzsync/baileys 10.2.4 → 10.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  <div align="center">
2
2
 
3
- # renz/baileys
3
+ # rennzsync/baileys
4
4
 
5
5
  **Lightweight WhatsApp Bot library — fully rebased onto `@whiskeysockets/baileys` 7.0.0-rc14**
6
6
 
7
- [![Version](https://img.shields.io/badge/npm-10.2.0-25D366?style=for-the-badge&logo=whatsapp&logoColor=white)](https://www.npmjs.com/package/@renz/baileys)
7
+ [![Version](https://img.shields.io/badge/npm-10.5.0-25D366?style=for-the-badge&logo=whatsapp&logoColor=white)](https://www.npmjs.com/package/@rennzsync/baileys)
8
8
  [![Node](https://img.shields.io/badge/Node.js-%3E%3D20.0.0-339933?style=for-the-badge&logo=node.js&logoColor=white)](https://nodejs.org)
9
9
  [![Baileys](https://img.shields.io/badge/Base-Baileys%207.0.0--rc14-blue?style=for-the-badge)](https://github.com/WhiskeySockets/Baileys)
10
10
  [![License](https://img.shields.io/badge/License-MIT%20%2B%20GPL--3.0%20dep-blue?style=for-the-badge)](LICENSE)
@@ -15,7 +15,7 @@
15
15
 
16
16
  A WhatsApp Multi-Device library rebased onto Baileys v7 rc14, using the original Signal Protocol engine (`libsignal`, GPL-3.0) — the same one stock `@whiskeysockets/baileys` rc14 ships with.
17
17
 
18
- > **License note:** `renz/baileys`'s own code is MIT, but it depends on `libsignal` (GPL-3.0) at runtime for the Signal Protocol crypto. If you're publishing or redistributing this package, check what GPL-3.0 compliance means for your use case — this isn't legal advice.
18
+ > **License note:** `rennzsync/baileys`'s own code is MIT, but it depends on `libsignal` (GPL-3.0) at runtime for the Signal Protocol crypto. If you're publishing or redistributing this package, check what GPL-3.0 compliance means for your use case — this isn't legal advice.
19
19
 
20
20
  Project focus: **multimedia WhatsApp bots** — audio, video, image and sticker pipelines, plus **Rich WebUI** (inline HTML interfaces rendered inside chat bubbles), with RAM-friendly defaults.
21
21
 
@@ -27,6 +27,7 @@ Project focus: **multimedia WhatsApp bots** — audio, video, image and sticker
27
27
  - **Standard Signal Protocol engine** — uses `libsignal` directly, same as stock Baileys rc14; no custom native crypto to maintain.
28
28
  - **Centralized multimedia pipeline** — `media-processor` utilities (ffmpeg/sharp/audio-decode, lazy-loaded).
29
29
  - **Rich WebUI** — render HTML/CSS/JS interfaces directly inside chat bubbles via `sendInlineWebUI`.
30
+ - **Widgets & rich menus (10.5.0)** — `sock.sendA2UI` (A2UI widgets), `sock.richMenu`, and `viewOnceV2` / `viewOnceV2Extension` send options.
30
31
  - **RAM-friendly by default** — `syncFullHistory: false`, `enableRecentMessageCache: false`, moderate cache TTLs.
31
32
 
32
33
  ---
@@ -44,7 +45,7 @@ Platform support follows whatever `libsignal` (^6.0.0) supports on your system
44
45
  ## Installation
45
46
 
46
47
  ```bash
47
- npm install @renz/baileys
48
+ npm install @rennzsync/baileys
48
49
  ```
49
50
 
50
51
  ### Optional dependencies (install per feature)
@@ -62,7 +63,7 @@ npm install @renz/baileys
62
63
  ## Quick Start
63
64
 
64
65
  ```js
65
- import makeWASocket, { useMultiFileAuthState } from '@renz/baileys';
66
+ import makeWASocket, { useMultiFileAuthState } from '@rennzsync/baileys';
66
67
 
67
68
  const { state, saveCreds } = await useMultiFileAuthState('auth_info');
68
69
 
@@ -113,7 +114,7 @@ await sock.sendMessage(jid, {
113
114
  ### Convert video/audio before sending (media-processor)
114
115
 
115
116
  ```js
116
- import { convertToWhatsAppVideo, convertToOpusAudio, getVideoThumbnail, resizeImage } from '@renz/baileys';
117
+ import { convertToWhatsAppVideo, convertToOpusAudio, getVideoThumbnail, resizeImage } from '@rennzsync/baileys';
117
118
 
118
119
  // Any video -> WhatsApp-compatible MP4/H.264 (requires fluent-ffmpeg)
119
120
  const mp4 = await convertToWhatsAppVideo(rawBuffer);
@@ -130,7 +131,7 @@ const small = await resizeImage(imageBuffer, { width: 300, height: 300 });
130
131
  ### Probe media metadata
131
132
 
132
133
  ```js
133
- import { probeMedia, getMp4Duration } from '@renz/baileys';
134
+ import { probeMedia, getMp4Duration } from '@rennzsync/baileys';
134
135
 
135
136
  const meta = await probeMedia(buffer, 'audio/mpeg'); // { duration, bitrate, container, codec }
136
137
  const dur = getMp4Duration(mp4Buffer); // no ffmpeg needed — parses atoms directly
@@ -143,7 +144,7 @@ const dur = getMp4Duration(mp4Buffer); // no ffmpeg needed — parses atoms dire
143
144
  Send an HTML/CSS/JS interface that **renders directly inside the message bubble** — great for interactive menus, mini-apps and dashboards:
144
145
 
145
146
  ```js
146
- import { sendInlineWebUI } from '@renz/baileys';
147
+ import { sendInlineWebUI } from '@rennzsync/baileys';
147
148
 
148
149
  const html = `<!DOCTYPE html>
149
150
  <html><head><style>body{background:#111b21;color:#fff;font-family:sans-serif;padding:16px}</style></head>
@@ -166,32 +167,32 @@ await sendInlineWebUI(sock, jid, html, 'Bot Menu', {
166
167
 
167
168
  `interactiveMessage` + `nativeFlowMessage` cards are **no longer rendered** on many WhatsApp clients — `relayMessage` succeeds without error but the message silently doesn't appear. The classic `buttonsMessage` and `listMessage` templates render reliably on **every** client (Android/iOS/Web/Desktop).
168
169
 
169
- `@renz/baileys@10.0.2` ships ready-made builders in `lib/Utils/rich-classic.js`:
170
+ `@rennzsync/baileys@10.5.0` ships ready-made builders in `lib/Utils/rich-classic.js`:
170
171
 
171
172
  ```js
172
- import { buildButtonsMessage, buildListMessage, sendClassicMessage } from '@renz/baileys';
173
+ import { buildButtonsMessage, buildListMessage, sendClassicMessage } from '@rennzsync/baileys';
173
174
 
174
175
  // 1-3 quick-reply buttons (optionally with a location+thumbnail header)
175
176
  const buttons = buildButtonsMessage({
176
177
  text: 'Hello Brother — pick an option',
177
178
  footer: '© My Bot',
178
179
  buttons: [
179
- { buttonId: '.owner', buttonText: '🧀 Owner' },
180
- { buttonId: '.allmenu', buttonText: '💐 Allmenu' },
180
+ { buttonId: '.owner', buttonText: 'Owner' },
181
+ { buttonId: '.allmenu', buttonText: 'Allmenu' },
181
182
  ],
182
183
  locationMessage: { jpegThumbnail, name: 'My Bot', address: 'v10.0.1' },
183
184
  });
184
185
 
185
186
  // Scrollable list with sections and rows
186
187
  const list = buildListMessage({
187
- title: '🍃 Menu — 1271 commands',
188
+ title: 'Menu — 1271 commands',
188
189
  description: 'Pick a category',
189
- buttonText: '🍃 Pilih Kategori',
190
+ buttonText: 'Pilih Kategori',
190
191
  sections: [{
191
192
  title: 'Categories',
192
193
  rows: [
193
- { title: '🏠 main', description: '19 commands', rowId: '.menucat main' },
194
- { title: '🎨 sticker', description: '42 commands', rowId: '.menucat sticker' },
194
+ { title: 'main', description: '19 commands', rowId: '.menucat main' },
195
+ { title: 'sticker', description: '42 commands', rowId: '.menucat sticker' },
195
196
  ],
196
197
  }],
197
198
  });
@@ -211,15 +212,15 @@ Also exports `normalizeUserJid(sockOrUserOrJid)` — `sock.user.jid` never exist
211
212
  `lib/Utils/rich-carousel.js` adds `interactiveMessage`/`carouselMessage` builders (the horizontal-scroll card format), for cases where you specifically need carousel or richer CTA button types (`cta_url`, `cta_call`, `cta_copy`, `cta_reminder`, `single_select`) that the classic templates above don't cover. Same rendering caveat as always: prefer `rich-classic.js` unless you specifically need these.
212
213
 
213
214
  ```js
214
- import { buildCarouselMessage, sendCarouselMessage, sendInteractiveMessage } from '@renz/baileys';
215
+ import { buildCarouselMessage, sendCarouselMessage, sendInteractiveMessage } from '@rennzsync/baileys';
215
216
 
216
217
  // single native-flow bubble (no carousel)
217
218
  await sendInteractiveMessage(sock, jid, {
218
219
  text: 'Choose an action:',
219
220
  footer: '© My Bot',
220
221
  buttons: [
221
- { type: 'quick_reply', displayText: '🧀 Owner', id: '.owner' },
222
- { type: 'cta_url', displayText: '📖 Docs', url: 'https://github.com/RennZSync/baileys' },
222
+ { type: 'quick_reply', displayText: 'Owner', id: '.owner' },
223
+ { type: 'cta_url', displayText: 'Docs', url: 'https://github.com/RennZSync/baileys' },
223
224
  ],
224
225
  });
225
226
 
@@ -262,7 +263,7 @@ await sock.updateProfilePicture(sock.user.id, imageBuffer); // unchanged default
262
263
  `lib/Store/*` ships a chat/contact/message store you can wire into `sock.ev`, plus two auth-state backends:
263
264
 
264
265
  ```js
265
- import makeWASocket, { makeInMemoryStore, useSqliteAuthState, useMultiFileAuthState } from '@renz/baileys';
266
+ import makeWASocket, { makeInMemoryStore, useSqliteAuthState, useMultiFileAuthState } from '@rennzsync/baileys';
266
267
 
267
268
  const store = makeInMemoryStore({});
268
269
  store.readFromFile('./store.json');
@@ -289,7 +290,7 @@ sock.ev.on('creds.update', saveCreds);
289
290
  Send a poll where each option is an image instead of plain text (`pollCreationMessageV3` with `pollContentType: IMAGE`, one `pollCreationOptionImageMessage` per option, associated back to the parent poll via `MEDIA_POLL`):
290
291
 
291
292
  ```js
292
- import { generateWAMessageFromImagePoll } from '@renz/baileys';
293
+ import { generateWAMessageFromImagePoll } from '@rennzsync/baileys';
293
294
 
294
295
  await generateWAMessageFromImagePoll(jid, {
295
296
  name: 'Pilih gambar favorit',
@@ -305,6 +306,72 @@ await generateWAMessageFromImagePoll(jid, {
305
306
 
306
307
  ---
307
308
 
309
+ ## View Once V2 / V2 Extension (new in 10.5.0)
310
+
311
+ ```js
312
+ await sock.sendMessage(jid, { text: 'Secret message', viewOnceV2Extension: true }) // viewOnceMessageV2Extension
313
+ await sock.sendMessage(jid, { text: 'Secret message', viewOnceV2: true }) // viewOnceMessageV2
314
+ ```
315
+
316
+ Wraps the message in `viewOnceMessageV2Extension` / `viewOnceMessageV2`; for text, `viewOnce: true` is set on the inner `extendedTextMessage`.
317
+
318
+ ---
319
+
320
+ ## Rich Menu (new in 10.5.0, risk-aware)
321
+
322
+ Port of `richMenu` from `@vansnowi/baileys` (also exported as `buildRichMenuMessage` / `sendRichMenu` from `lib/Utils/rich-menu.js`). Buttons are CTA widgets with a toast, not quick-replies that send a message back. Uses the internal GenAI `unifiedResponse` format, so it may not render on every WhatsApp client.
323
+
324
+ ```js
325
+ // tombol
326
+ await sock.richMenu(jid, {
327
+ header: { title: 'Main Menu', image: { url: 'https://example.com/banner.png' } },
328
+ body: { title: 'Pick one', buttons: ['Profile', 'Settings', 'Help'], toast: 'opening...' },
329
+ footer: { text: 'Join us', url: 't.me/example' }
330
+ })
331
+
332
+ // kartu geser (carousel: true) / baris (row: true)
333
+ await sock.richMenu(jid, {
334
+ body: {
335
+ carousel: true,
336
+ cards: [
337
+ { title: 'Card 1', buttons: ['A', 'B'], toast: '...' },
338
+ { title: 'Card 2', buttons: ['C', 'D'], toast: '...' }
339
+ ]
340
+ }
341
+ })
342
+ ```
343
+
344
+ `footer.url` is required for the open-URL button (no default link).
345
+
346
+ ---
347
+
348
+ ## A2UI Widget (new in 10.5.0, risk-aware)
349
+
350
+ Declarative widgets (`Text`, `Image`, `Video`, `Button`, `Card`, `Column`, `Row`, `Divider`, `CheckBox`, `TextField`, `ChoicePicker`, plus `listCard`) sent as `interactiveMessage.bloksWidget`. Also exported as `A2UI` / `sendA2UIWidget` from `lib/Utils/a2ui.js`. The proto now includes `InteractiveMessage.BloksWidget` (field 8). Internal WhatsApp format, so it may not render on every client.
351
+
352
+ ```js
353
+ import { A2UI } from '@rennzsync/baileys'
354
+
355
+ const ui = new A2UI()
356
+ const title = ui.text('Halo!', { variant: 'h1' })
357
+ const label = ui.text('Klik saya')
358
+ const btn = ui.button(label, { action: { name: 'noop' } })
359
+ ui.root([ui.card(ui.column([title, btn]))])
360
+
361
+ await sock.sendA2UI(jid, { a2ui: ui, bodyText: 'Widget', footer: 'A2UI' })
362
+
363
+ // list card
364
+ const list = new A2UI().listCard({
365
+ title: 'Menu',
366
+ items: [{ title: 'Nasi Goreng', price: 'Rp15.000' }, { title: 'Es Teh', price: 'Rp5.000' }]
367
+ })
368
+ await sock.sendA2UI(jid, { a2ui: list, bodyText: 'Pesan menu' })
369
+ ```
370
+
371
+ Options: `singleScreen`, `buttons` (native flow `{ name, params }`), `expiration`, `contextInfo`, `quoted`, `wrapped`, `type`.
372
+
373
+ ---
374
+
308
375
  ## Default Configuration (RAM-friendly)
309
376
 
310
377
  ```js
@@ -318,9 +385,9 @@ const sock = makeWASocket({
318
385
 
319
386
  ---
320
387
 
321
- ## Breaking Changes from 9.x (legacy oktz-baileys)
388
+ ## Breaking Changes from 9.x (legacy renzsync-baileys)
322
389
 
323
- - Base rebased to Baileys **7.0.0-rc14** (no longer ourin-baileys 9.0.21).
390
+ - Base rebased to Baileys **7.0.0-rc14**
324
391
  - Removed modules: `lib/VoIP/*` (WebRTC call client), `Modded/message_builder.js`, `Utils/rich-messages.js`, `Socket/dugong.js`, `Utils/sticker-pack.js`.
325
392
  - `rejectCall` remains available (core `messages-recv`).
326
393
  - Replacement for the old rich messages: `rich-webui.js` (`sendInlineWebUI`, `buildWebuiMessage`).
@@ -329,17 +396,18 @@ const sock = makeWASocket({
329
396
  - **10.0.3:** added `rich-carousel.js` (`buildCarouselMessage`, `buildInteractiveMessage`, `buildInteractiveCard`, `buildNativeFlowButton`, `sendCarouselMessage`, `sendInteractiveMessage`) for carousel cards and richer native-flow CTA buttons (`cta_url`/`cta_call`/`cta_copy`/`cta_reminder`/`single_select`). Also extended `generateProfilePicture` (and `updateProfilePicture` / `newsletterUpdatePicture`) with a `{ full: true }` option to upload profile pictures at source resolution/high quality instead of the forced 640×640 quality-50 downscale.
330
397
  - **10.1.0:** merged in `lib/Store/*` (in-memory store, cache-manager store, keyed-db/ordered-dictionary/object-repository) from `@vansnowi/baileys`, plus `useSqliteAuthState` (Node 22.5+ built-in `node:sqlite`, with a clear fallback error on older Node) and `isSecret`/`protected`/`me`-only send filters wired into `sock.sendMessage`.
331
398
  - **10.2.0:** added `generateWAMessageFromImagePoll` / `hashImagePollOption` — client-side builder for WhatsApp's image-poll message type (`pollCreationMessageV3` + `pollCreationOptionImageMessage`, `MEDIA_POLL` association). Experimental — no upstream Baileys fork ships this.
399
+ - **10.5.0:** added `viewOnceV2` / `viewOnceV2Extension` send options (wrap the message in `viewOnceMessageV2` / `viewOnceMessageV2Extension`; text gets `viewOnce: true` inside `extendedTextMessage`); `sock.richMenu` (`rich-menu.js`: `buildRichMenuMessage`, `sendRichMenu` — buttons, carousel/row cards, image header, open-URL footer) ported from `@vansnowi/baileys` without its hardcoded default footer link; A2UI widgets (`a2ui.js`: `A2UI`, `sendA2UIWidget`, `sock.sendA2UI`) sent via `interactiveMessage.bloksWidget`, with `InteractiveMessage.BloksWidget` (field 8) added to WAProto (`WAProto.proto`, `index.js`, `index.d.ts`). `richMenu` and A2UI use internal WhatsApp formats and may not render on every client.
332
400
  - Default config changed: `syncFullHistory` and `enableRecentMessageCache` are now `false`.
333
401
  - `protobufjs-cli` pinned to `^1.1.3` (peer dependency conflict fix); `link-preview-js` to `^5.0.0` (SSRF advisory fix).
334
- - **Rebrand:** package renamed to `@renz/baileys`, now maintained by [RennZz-Dev](https://github.com/RennZSync). No API changes — update your imports from `onigis` to `@renz/baileys`.
335
- - **Signal engine reverted to stock:** dropped the custom `@renz/signal`/`@renz/curve25519` (MIT, native Rust) engine and went back to the original `libsignal` (GPL-3.0) used by stock Baileys rc14 — same Signal Protocol implementation, no more custom native binaries to build/ship. See the license note near the top of this file.
402
+ - **Rebrand:** package renamed to `@rennzsync/baileys`, now maintained by [RennZz-Dev](https://github.com/RennZSync). No API changes — update your imports from `onigis` to `@rennzsync/baileys`.
403
+ - **Signal engine reverted to stock:** dropped the custom `@rennzsync/signal`/`@rennzsync/curve25519` (MIT, native Rust) engine and went back to the original `libsignal` (GPL-3.0) used by stock Baileys rc14 — same Signal Protocol implementation, no more custom native binaries to build/ship. See the license note near the top of this file.
336
404
 
337
405
  ---
338
406
 
339
407
  ## Testing
340
408
 
341
409
  ```bash
342
- npm test
410
+ npm test
343
411
  ```
344
412
 
345
413
  Includes unit tests for: JID utils (PN/LID/hosted), Rich WebUI (build + proto encode/decode roundtrip).
@@ -348,12 +416,11 @@ Includes unit tests for: JID utils (PN/LID/hosted), Rich WebUI (build + proto en
348
416
 
349
417
  ## Credits
350
418
 
351
- - **[RennZz-Dev](https://github.com/RennZSync)** — `renz/baileys` maintainer: rebrand, ongoing upkeep & bot-focused tweaks
352
- - **[KzorArsuy](https://github.com/rozzak2009)** — audit, rc14 rebase, optimization, multimedia & WebUI
419
+ - **[RennZz-Dev](https://github.com/RennZSync)** — `rennzsync/baileys` maintainer: rebrand, ongoing upkeep & bot-focused tweaks
353
420
  - **[WhiskeySockets/Baileys](https://github.com/WhiskeySockets/Baileys)** — upstream library & original Signal Protocol wrapper (`libsignal`-based)
354
421
 
355
422
  ---
356
423
 
357
424
  ## License
358
425
 
359
- **MIT** for `renz/baileys`'s own code — but it depends on `libsignal` (GPL-3.0) at runtime for Signal Protocol crypto. Check what that means for your use case before redistributing.
426
+ **MIT** for `rennzsync/baileys`'s own code — but it depends on `libsignal` (GPL-3.0) at runtime for Signal Protocol crypto. Check what that means for your use case before redistributing.
@@ -2676,6 +2676,7 @@ message Message {
2676
2676
  optional Header header = 1;
2677
2677
  optional Body body = 2;
2678
2678
  optional Footer footer = 3;
2679
+ optional BloksWidget bloksWidget = 8;
2679
2680
  optional ContextInfo contextInfo = 15;
2680
2681
  optional UrlTrackingMap urlTrackingMap = 16;
2681
2682
  oneof interactiveMessage {
@@ -2684,6 +2685,13 @@ message Message {
2684
2685
  Message.InteractiveMessage.NativeFlowMessage nativeFlowMessage = 6;
2685
2686
  Message.InteractiveMessage.CarouselMessage carouselMessage = 7;
2686
2687
  }
2688
+ message BloksWidget {
2689
+ optional string uuid = 1;
2690
+ optional string data = 2;
2691
+ optional string type = 3;
2692
+ optional string fallback = 4;
2693
+ }
2694
+
2687
2695
  message Body {
2688
2696
  optional string text = 1;
2689
2697
  }
@@ -29225,6 +29225,9 @@ export namespace proto {
29225
29225
  /** InteractiveMessage footer */
29226
29226
  footer?: (proto.Message.InteractiveMessage.IFooter|null);
29227
29227
 
29228
+ /** InteractiveMessage bloksWidget */
29229
+ bloksWidget?: (proto.Message.InteractiveMessage.IBloksWidget|null);
29230
+
29228
29231
  /** InteractiveMessage contextInfo */
29229
29232
  contextInfo?: (proto.IContextInfo|null);
29230
29233
 
@@ -29262,6 +29265,9 @@ export namespace proto {
29262
29265
  /** InteractiveMessage footer. */
29263
29266
  public footer?: (proto.Message.InteractiveMessage.IFooter|null);
29264
29267
 
29268
+ /** InteractiveMessage bloksWidget. */
29269
+ public bloksWidget?: (proto.Message.InteractiveMessage.IBloksWidget|null);
29270
+
29265
29271
  /** InteractiveMessage contextInfo. */
29266
29272
  public contextInfo?: (proto.IContextInfo|null);
29267
29273
 
@@ -29363,6 +29369,121 @@ export namespace proto {
29363
29369
 
29364
29370
  namespace InteractiveMessage {
29365
29371
 
29372
+ /** Properties of a BloksWidget. */
29373
+ interface IBloksWidget {
29374
+
29375
+ /** BloksWidget uuid */
29376
+ uuid?: (string|null);
29377
+
29378
+ /** BloksWidget data */
29379
+ data?: (string|null);
29380
+
29381
+ /** BloksWidget type */
29382
+ type?: (string|null);
29383
+
29384
+ /** BloksWidget fallback */
29385
+ fallback?: (string|null);
29386
+ }
29387
+
29388
+ /** Represents a BloksWidget. */
29389
+ class BloksWidget implements IBloksWidget {
29390
+
29391
+ /**
29392
+ * Constructs a new BloksWidget.
29393
+ * @param [properties] Properties to set
29394
+ */
29395
+ constructor(properties?: proto.Message.InteractiveMessage.IBloksWidget);
29396
+
29397
+ /** BloksWidget uuid. */
29398
+ public uuid?: (string|null);
29399
+
29400
+ /** BloksWidget data. */
29401
+ public data?: (string|null);
29402
+
29403
+ /** BloksWidget type. */
29404
+ public type?: (string|null);
29405
+
29406
+ /** BloksWidget fallback. */
29407
+ public fallback?: (string|null);
29408
+
29409
+ /**
29410
+ * Creates a new BloksWidget instance using the specified properties.
29411
+ * @param [properties] Properties to set
29412
+ * @returns BloksWidget instance
29413
+ */
29414
+ public static create(properties?: proto.Message.InteractiveMessage.IBloksWidget): proto.Message.InteractiveMessage.BloksWidget;
29415
+
29416
+ /**
29417
+ * Encodes the specified BloksWidget message. Does not implicitly {@link proto.Message.InteractiveMessage.BloksWidget.verify|verify} messages.
29418
+ * @param message BloksWidget message or plain object to encode
29419
+ * @param [writer] Writer to encode to
29420
+ * @returns Writer
29421
+ */
29422
+ public static encode(message: proto.Message.InteractiveMessage.IBloksWidget, writer?: $protobuf.Writer): $protobuf.Writer;
29423
+
29424
+ /**
29425
+ * Encodes the specified BloksWidget message, length delimited. Does not implicitly {@link proto.Message.InteractiveMessage.BloksWidget.verify|verify} messages.
29426
+ * @param message BloksWidget message or plain object to encode
29427
+ * @param [writer] Writer to encode to
29428
+ * @returns Writer
29429
+ */
29430
+ public static encodeDelimited(message: proto.Message.InteractiveMessage.IBloksWidget, writer?: $protobuf.Writer): $protobuf.Writer;
29431
+
29432
+ /**
29433
+ * Decodes a BloksWidget message from the specified reader or buffer.
29434
+ * @param reader Reader or buffer to decode from
29435
+ * @param [length] Message length if known beforehand
29436
+ * @returns BloksWidget
29437
+ * @throws {Error} If the payload is not a reader or valid buffer
29438
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
29439
+ */
29440
+ public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): proto.Message.InteractiveMessage.BloksWidget;
29441
+
29442
+ /**
29443
+ * Decodes a BloksWidget message from the specified reader or buffer, length delimited.
29444
+ * @param reader Reader or buffer to decode from
29445
+ * @returns BloksWidget
29446
+ * @throws {Error} If the payload is not a reader or valid buffer
29447
+ * @throws {$protobuf.util.ProtocolError} If required fields are missing
29448
+ */
29449
+ public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): proto.Message.InteractiveMessage.BloksWidget;
29450
+
29451
+ /**
29452
+ * Verifies a BloksWidget message.
29453
+ * @param message Plain object to verify
29454
+ * @returns `null` if valid, otherwise the reason why it is not
29455
+ */
29456
+ public static verify(message: { [k: string]: any }): (string|null);
29457
+
29458
+ /**
29459
+ * Creates a BloksWidget message from a plain object. Also converts values to their respective internal types.
29460
+ * @param object Plain object
29461
+ * @returns BloksWidget
29462
+ */
29463
+ public static fromObject(object: { [k: string]: any }): proto.Message.InteractiveMessage.BloksWidget;
29464
+
29465
+ /**
29466
+ * Creates a plain object from a BloksWidget message. Also converts values to other types if specified.
29467
+ * @param message BloksWidget
29468
+ * @param [options] Conversion options
29469
+ * @returns Plain object
29470
+ */
29471
+ public static toObject(message: proto.Message.InteractiveMessage.BloksWidget, options?: $protobuf.IConversionOptions): { [k: string]: any };
29472
+
29473
+ /**
29474
+ * Converts this BloksWidget to JSON.
29475
+ * @returns JSON object
29476
+ */
29477
+ public toJSON(): { [k: string]: any };
29478
+
29479
+ /**
29480
+ * Gets the default type url for BloksWidget
29481
+ * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
29482
+ * @returns The default type url
29483
+ */
29484
+ public static getTypeUrl(typeUrlPrefix?: string): string;
29485
+ }
29486
+
29366
29487
  /** Properties of a Body. */
29367
29488
  interface IBody {
29368
29489