@awangxcode/qiro-baileys 7.0.0-rc14 → 7.0.0-rc16

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.
@@ -0,0 +1,25 @@
1
+ # Qiro Baileys RC16 — MessageBuilder hardening
2
+
3
+ RC16 is the next **unpublished release candidate** for `@awangxcode/qiro-baileys`. It builds on the RC15 source line based on WhiskeySockets/Baileys `7.0.0-rc14`.
4
+
5
+ ## Scope of this candidate
6
+
7
+ This candidate focuses on local payload construction and validation. The socket, session, pairing, reconnect, and message transport source files are not modified by the RC16 changes; no production session needs to be migrated to adopt these builder refinements.
8
+
9
+ - Make `checkNativeFlowButtons` handle malformed JavaScript/untyped inputs without throwing while inspecting them. It reports invalid list, item, name, platform, or `params` shapes as validation errors.
10
+ - Validate native-flow `params` as plain records and validate section titles, row shapes, and optional row text fields before serialization.
11
+ - Convert circular/non-serializable button parameters into a clear `TypeError` rather than exposing a low-level `JSON.stringify` exception.
12
+ - Reject malformed absolute URLs and URLs containing embedded credentials when `Button.addUrl` is called, before a payload is built.
13
+ - Make carousel batch additions atomic: if any supplied card is invalid, none of the cards from that batch are added.
14
+ - Make text guard helpers reject non-string runtime values with a consistent, descriptive error.
15
+ - Add regression tests for malformed runtime inputs, unsafe URL credentials, serialization failures, and carousel batch atomicity.
16
+
17
+ ## Compatibility and scope limits
18
+
19
+ These changes harden local payload assembly. They do not change the core Socket/session/pairing implementation from RC15 and do not claim that WhatsApp will accept or render every native-flow, carousel, or AIRich variant. Server-side feature flags and device/client support remain outside this library's control.
20
+
21
+ ## Verification status
22
+
23
+ The RC15 baseline was previously built and installed from an npm tarball in an isolated directory; baseline MessageBuilder smoke checks passed. RC16 adds new validation behavior and regression tests. Full dependency installation and a build/test run could not be completed in the offline preparation environment, so this archive is a source candidate, not a verified binary release. Build and run the targeted MessageBuilder Jest suite in a compatible environment before publishing. If Jest crashes on a particular Termux host with `illegal hardware instruction`, report that separately from source compilation status rather than treating it as a passing test.
24
+
25
+ If publishing after the RC16 build and focused test gates pass, publish with the `next` dist-tag so existing consumers of `latest` do not automatically move to this candidate.
package/README.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  <div align='center'>Baileys is a WebSockets-based TypeScript library for interacting with the WhatsApp Web API.</div>
4
4
 
5
+ > **Qiro Baileys unofficial distribution**
6
+ >
7
+ > This package is published as `@awangxcode/qiro-baileys`. It is an unofficial fork derived from WhiskeySockets/Baileys, is not affiliated with WhatsApp or the upstream maintainers, and may include experimental additions described in `QIRO-BAILEYS-RC16.md`. WhatsApp controls which message formats and client features are accepted/rendered; no fork can guarantee universal button or device support.
8
+ >
9
+ > Install with `npm install @awangxcode/qiro-baileys` and import with `import makeWASocket, { Button, ButtonV2, Carousel, AIRich } from '@awangxcode/qiro-baileys'`. See the experimental MessageBuilder example below and test changes against a separate account before production rollout.
10
+
5
11
 
6
12
  > [!CAUTION]
7
13
  > NOTICE OF BREAKING CHANGE.
@@ -1310,3 +1316,23 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1310
1316
  SOFTWARE.
1311
1317
 
1312
1318
  Thus, the maintainers of the project can't be held liable for any potential misuse of this project.
1319
+
1320
+
1321
+ ## Qiro Baileys experimental MessageBuilder
1322
+
1323
+ The unofficial Qiro distribution exports a lightweight builder API from the package root. This API validates payload structure locally; it does not bypass WhatsApp client/server feature gates. Interactive-message types and rendering may vary by client version.
1324
+
1325
+ ```ts
1326
+ import makeWASocket, { Button } from '@awangxcode/qiro-baileys'
1327
+
1328
+ // `sock` is an authenticated socket created with makeWASocket.
1329
+ const message = new Button(sock)
1330
+ .setTitle('Qiro')
1331
+ .setBody('Choose an action')
1332
+ .setFooter('Qiro Baileys')
1333
+ .addReply('Status', 'qiro_status')
1334
+
1335
+ await message.send('15551234567@s.whatsapp.net')
1336
+ ```
1337
+
1338
+ `Button`, `ButtonV2`, `Carousel`, and `AIRich` are experimental helpers. Carousel cards require pre-prepared media metadata. The validator rejects malformed runtime inputs with descriptive errors, and carousel batch additions are atomic: an invalid card does not leave earlier cards from that batch attached. This improves local payload safety but does not confirm server acceptance or universal client rendering. Only use payload formats supported by the target WhatsApp clients.
@@ -0,0 +1,15 @@
1
+ # Third-party notices and attribution
2
+
3
+ ## WhiskeySockets/Baileys
4
+
5
+ This project is derived from [WhiskeySockets/Baileys](https://github.com/WhiskeySockets/Baileys), copyright Rajeh Taher/WhiskeySockets and other contributors, licensed under the MIT License. The original `LICENSE` file is retained. This fork is unofficial and is not affiliated with, endorsed by, or supported by the upstream maintainers or WhatsApp.
6
+
7
+ ## Public protocol-reference research
8
+
9
+ The companion-registration refresh behavior and socket-test approach in this experimental patch are adaptations of the publicly available implementation approach discussed in [WhiskeySockets/Baileys pull request #2765](https://github.com/WhiskeySockets/Baileys/pull/2765) (doryani-ai, opened August 2026), which describes rotating the advertisement secret in response to `companion_reg_refresh` and re-rendering the existing QR ref. The upstream pull request was open when this patch was prepared; the behavior has not been independently confirmed against all current WhatsApp clients. The upstream project license and attribution are retained. The safe pre-login notification ACK adjustment also follows the small optional-`meId` change discussed in [WhiskeySockets/Baileys pull request #2749](https://github.com/WhiskeySockets/Baileys/pull/2749).
10
+
11
+ The message-builder API and validation rules were designed after reviewing public feature descriptions for `@rexxhayanasi/elaina-baileys` and [FgsiDev/Baileys-MessageBuilder](https://github.com/FgsiDev/Baileys-MessageBuilder). This patch adds a new implementation and does not vendor either dependency's source files. Verify the third-party licenses independently before copying code from either project in future changes.
12
+
13
+ ## AI assistance disclosure
14
+
15
+ Parts of this experimental patch were prepared with AI assistance and require human review, build verification, tests, and live compatibility tests before production use.
@@ -0,0 +1,206 @@
1
+ import type { MessageRelayOptions } from '../Types/Message.js';
2
+ import { proto } from '../../WAProto/index.js';
3
+ type RelaySocket = {
4
+ relayMessage: (jid: string, message: proto.IMessage, options: MessageRelayOptions) => Promise<string>;
5
+ };
6
+ export type NativeFlowPlatform = 'web' | 'ios' | 'android';
7
+ export type NativeFlowButtonInput = {
8
+ name: string;
9
+ params: Record<string, unknown>;
10
+ };
11
+ export type NativeFlowButton = proto.Message.InteractiveMessage.NativeFlowMessage.INativeFlowButton;
12
+ export type NativeFlowButtonValidation = {
13
+ ok: boolean;
14
+ platform: NativeFlowPlatform;
15
+ maxButtons: number;
16
+ errors: string[];
17
+ };
18
+ export type NativeFlowValidationOptions = {
19
+ /** Explicit opt-in for protocol button names that are not in the reviewed allow-list. */
20
+ allowExperimentalNativeFlowTypes?: boolean;
21
+ };
22
+ /**
23
+ * Validate native-flow button combinations against the currently documented WA Web/iOS
24
+ * constraints. This is a client-compatibility check, not a guarantee that WhatsApp will
25
+ * render a server-side or account-gated feature.
26
+ */
27
+ export declare const checkNativeFlowButtons: (buttons: NativeFlowButtonInput[], platform?: NativeFlowPlatform, options?: NativeFlowValidationOptions) => NativeFlowButtonValidation;
28
+ export declare const isWebSupportedNativeFlowButton: (name: string) => boolean;
29
+ export type BuildOptions = {
30
+ platform?: NativeFlowPlatform;
31
+ /** Enable explicitly supplied native-flow names not present in the reviewed allow-list. */
32
+ allowExperimentalNativeFlowTypes?: boolean;
33
+ };
34
+ export type SendOptions = BuildOptions & {
35
+ messageId?: string;
36
+ };
37
+ /**
38
+ * Native-flow button builder integrated into Qiro Baileys. It intentionally builds only
39
+ * protocol payloads that are represented by the bundled WAProto types; it does not try
40
+ * to bypass device or server-side feature gates.
41
+ */
42
+ export declare class Button {
43
+ protected readonly socket: RelaySocket;
44
+ protected titleText: string;
45
+ protected subtitleText: string;
46
+ protected body: string;
47
+ protected footerText: string;
48
+ protected headerPayload?: proto.Message.InteractiveMessage.IHeader;
49
+ protected readonly buttons: NativeFlowButtonInput[];
50
+ protected selection?: {
51
+ title: string;
52
+ sections: Array<{
53
+ title: string;
54
+ rows: Array<{
55
+ header?: string;
56
+ title: string;
57
+ description?: string;
58
+ id: string;
59
+ }>;
60
+ }>;
61
+ };
62
+ protected currentSection?: {
63
+ title: string;
64
+ rows: Array<{
65
+ header?: string;
66
+ title: string;
67
+ description?: string;
68
+ id: string;
69
+ }>;
70
+ };
71
+ constructor(socket: RelaySocket);
72
+ setTitle(value: string): this;
73
+ title(value: string): this;
74
+ /** Fluent alias compatible with common MessageBuilder APIs. */
75
+ header(value: string): this;
76
+ setSubtitle(value: string): this;
77
+ subtitle(value: string): this;
78
+ setBody(value: string): this;
79
+ /** Fluent alias compatible with common MessageBuilder APIs. */
80
+ text(value: string): this;
81
+ setFooter(value: string): this;
82
+ footer(value: string): this;
83
+ /** Set an already-prepared protobuf header; media upload is intentionally not hidden here. */
84
+ setHeader(value: proto.Message.InteractiveMessage.IHeader): this;
85
+ addReply(displayText: string, id: string): this;
86
+ /** Fluent alias for addReply(). */
87
+ button(displayText: string, id: string): this;
88
+ addUrl(displayText: string, url: string): this;
89
+ addCopy(displayText: string, copyCode: string): this;
90
+ addCall(displayText: string, phoneNumber: string): this;
91
+ /** Escape hatch for documented native-flow types not covered by a convenience method. */
92
+ addNativeButton(name: string, params: Record<string, unknown>): this;
93
+ addSelection(title: string): this;
94
+ makeSection(title: string): this;
95
+ makeRow(header: string, title: string, description: string, id: string): this;
96
+ protected getButtonInputs(): NativeFlowButtonInput[];
97
+ build(options?: BuildOptions): proto.IMessage;
98
+ toCard(options?: BuildOptions): proto.Message.IInteractiveMessage;
99
+ send(jid: string, options?: SendOptions): Promise<string>;
100
+ }
101
+ /** ButtonV2 exposes a compact quick-reply API over the same validated native-flow format. */
102
+ export declare class ButtonV2 extends Button {
103
+ addButton(displayText: string, id: string): this;
104
+ }
105
+ /**
106
+ * Carousel builder for already-prepared protobuf cards. Each card must include image or
107
+ * video media metadata; use the normal media preparation utilities before adding it.
108
+ */
109
+ export declare class Carousel {
110
+ private readonly socket;
111
+ private body;
112
+ private footerText;
113
+ private readonly cards;
114
+ constructor(socket: RelaySocket);
115
+ setBody(value: string): this;
116
+ text(value: string): this;
117
+ setFooter(value: string): this;
118
+ footer(value: string): this;
119
+ addCard(card: proto.Message.IInteractiveMessage | proto.Message.IInteractiveMessage[]): this;
120
+ build(): proto.IMessage;
121
+ send(jid: string, options?: {
122
+ messageId?: string;
123
+ }): Promise<string>;
124
+ }
125
+ export type AIRichSourceInput = {
126
+ title: string;
127
+ url: string;
128
+ provider?: proto.BotSourcesMetadata.BotSourceItem.SourceProvider;
129
+ query?: string;
130
+ thumbnailUrl?: string;
131
+ faviconUrl?: string;
132
+ };
133
+ /**
134
+ * Experimental builder for the AIRichResponse protobuf types already bundled in WAProto.
135
+ * This creates a validly-shaped payload only; WhatsApp may gate or change how these
136
+ * internal/experimental message types are rendered on different clients.
137
+ */
138
+ export declare class AIRich {
139
+ private readonly socket?;
140
+ private readonly submessages;
141
+ private readonly sources;
142
+ constructor(socket?: RelaySocket);
143
+ text(value: string): this;
144
+ addText(value: string): this;
145
+ addCode(language: string, code: string): this;
146
+ addTable(rows: string[][], title?: string): this;
147
+ addLatex(expression: string, options?: {
148
+ renderedImageUrl?: string;
149
+ width?: number;
150
+ height?: number;
151
+ }): this;
152
+ addInlineImage(url: string, altText?: string, alignment?: proto.AIRichResponseInlineImageMetadata.AIRichResponseImageAlignment, tapLinkUrl?: string): this;
153
+ addMap(centerLatitude: number, centerLongitude: number, annotations: Array<{
154
+ latitude: number;
155
+ longitude: number;
156
+ title?: string;
157
+ body?: string;
158
+ }>): this;
159
+ addSource(source: AIRichSourceInput): this;
160
+ /** Add a WAProto submessage directly for advanced, version-aware use cases. */
161
+ addSubmessage(submessage: proto.IAIRichResponseSubMessage): this;
162
+ build(): proto.IMessage;
163
+ send(jid: string, options?: {
164
+ messageId?: string;
165
+ }): Promise<string>;
166
+ }
167
+ /** Small, deterministic utilities; unlike remote auto-update helpers, these never fetch or execute code. */
168
+ export declare const Toolkit: Readonly<{
169
+ checkNativeFlowButtons: (buttons: NativeFlowButtonInput[], platform?: NativeFlowPlatform, options?: NativeFlowValidationOptions) => NativeFlowButtonValidation;
170
+ isWebSupportedNativeFlowButton: (name: string) => boolean;
171
+ validateHttpUrl: (url: string) => string;
172
+ textMessage: (text: string) => proto.IMessage;
173
+ cloneMessage: <T>(message: T) => T;
174
+ }>;
175
+ export declare const MessageBuilder: {
176
+ Button: typeof Button;
177
+ ButtonV2: typeof ButtonV2;
178
+ Carousel: typeof Carousel;
179
+ AIRich: typeof AIRich;
180
+ Toolkit: Readonly<{
181
+ checkNativeFlowButtons: (buttons: NativeFlowButtonInput[], platform?: NativeFlowPlatform, options?: NativeFlowValidationOptions) => NativeFlowButtonValidation;
182
+ isWebSupportedNativeFlowButton: (name: string) => boolean;
183
+ validateHttpUrl: (url: string) => string;
184
+ textMessage: (text: string) => proto.IMessage;
185
+ cloneMessage: <T>(message: T) => T;
186
+ }>;
187
+ checkNativeFlowButtons: (buttons: NativeFlowButtonInput[], platform?: NativeFlowPlatform, options?: NativeFlowValidationOptions) => NativeFlowButtonValidation;
188
+ isWebSupportedNativeFlowButton: (name: string) => boolean;
189
+ };
190
+ export declare const MB: {
191
+ Button: typeof Button;
192
+ ButtonV2: typeof ButtonV2;
193
+ Carousel: typeof Carousel;
194
+ AIRich: typeof AIRich;
195
+ Toolkit: Readonly<{
196
+ checkNativeFlowButtons: (buttons: NativeFlowButtonInput[], platform?: NativeFlowPlatform, options?: NativeFlowValidationOptions) => NativeFlowButtonValidation;
197
+ isWebSupportedNativeFlowButton: (name: string) => boolean;
198
+ validateHttpUrl: (url: string) => string;
199
+ textMessage: (text: string) => proto.IMessage;
200
+ cloneMessage: <T>(message: T) => T;
201
+ }>;
202
+ checkNativeFlowButtons: (buttons: NativeFlowButtonInput[], platform?: NativeFlowPlatform, options?: NativeFlowValidationOptions) => NativeFlowButtonValidation;
203
+ isWebSupportedNativeFlowButton: (name: string) => boolean;
204
+ };
205
+ export {};
206
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/MessageBuilder/index.ts"],"names":[],"mappings":"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"}