@openclaw/crabline 0.1.3 → 0.1.4

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.
Files changed (37) hide show
  1. package/README.md +22 -22
  2. package/dist/src/cli/program.js +1 -0
  3. package/dist/src/cli/program.js.map +1 -1
  4. package/dist/src/fake-servers/http.d.ts +1 -0
  5. package/dist/src/fake-servers/http.js +1 -0
  6. package/dist/src/fake-servers/http.js.map +1 -1
  7. package/dist/src/fake-servers/whatsapp-baileys-websocket.d.ts +27 -0
  8. package/dist/src/fake-servers/whatsapp-baileys-websocket.js +555 -0
  9. package/dist/src/fake-servers/whatsapp-baileys-websocket.js.map +1 -0
  10. package/dist/src/fake-servers/whatsapp-wire/binary-node.d.ts +9 -0
  11. package/dist/src/fake-servers/whatsapp-wire/binary-node.js +427 -0
  12. package/dist/src/fake-servers/whatsapp-wire/binary-node.js.map +1 -0
  13. package/dist/src/fake-servers/whatsapp-wire/crypto.d.ts +27 -0
  14. package/dist/src/fake-servers/whatsapp-wire/crypto.js +108 -0
  15. package/dist/src/fake-servers/whatsapp-wire/crypto.js.map +1 -0
  16. package/dist/src/fake-servers/whatsapp-wire/handshake.d.ts +17 -0
  17. package/dist/src/fake-servers/whatsapp-wire/handshake.js +154 -0
  18. package/dist/src/fake-servers/whatsapp-wire/handshake.js.map +1 -0
  19. package/dist/src/fake-servers/whatsapp-wire/signal.d.ts +5 -0
  20. package/dist/src/fake-servers/whatsapp-wire/signal.js +24 -0
  21. package/dist/src/fake-servers/whatsapp-wire/signal.js.map +1 -0
  22. package/dist/src/fake-servers/whatsapp.d.ts +4 -61
  23. package/dist/src/fake-servers/whatsapp.js +15 -163
  24. package/dist/src/fake-servers/whatsapp.js.map +1 -1
  25. package/dist/src/index.d.ts +2 -4
  26. package/dist/src/index.js +1 -2
  27. package/dist/src/index.js.map +1 -1
  28. package/dist/src/openclaw/bridges/whatsapp.js +1 -2
  29. package/dist/src/openclaw/bridges/whatsapp.js.map +1 -1
  30. package/dist/src/providers/catalog.d.ts +1 -1
  31. package/dist/src/providers/catalog.js +1 -1
  32. package/dist/src/providers/catalog.js.map +1 -1
  33. package/docs/channel-setup.md +22 -20
  34. package/package.json +5 -5
  35. package/dist/src/fake-servers/whatsapp-socket-factory.d.ts +0 -34
  36. package/dist/src/fake-servers/whatsapp-socket-factory.js +0 -225
  37. package/dist/src/fake-servers/whatsapp-socket-factory.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"whatsapp.js","sourceRoot":"","sources":["../../../../src/openclaw/bridges/whatsapp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"whatsapp.js","sourceRoot":"","sources":["../../../../src/openclaw/bridges/whatsapp.ts"],"names":[],"mappings":"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"}
@@ -57,7 +57,7 @@ export declare const OPENCLAW_SUPPORT_CATALOG: readonly [{
57
57
  readonly status: "ready";
58
58
  readonly supports: readonly ["probe", "send", "roundtrip", "agent"];
59
59
  }, CatalogEntry, CatalogEntry, CatalogEntry, {
60
- readonly notes: "Built-in local WhatsApp mock with Business webhook shape.";
60
+ readonly notes: "Built-in local WhatsApp mock with Business webhook and Baileys WebSocket shapes.";
61
61
  readonly platform: "whatsapp";
62
62
  readonly status: "ready";
63
63
  readonly supports: readonly ["probe", "send", "roundtrip", "agent"];
@@ -79,7 +79,7 @@ export const OPENCLAW_SUPPORT_CATALOG = [
79
79
  createBridgeEntry("twitch", "OpenClaw plugin channel via script bridge."),
80
80
  createBridgeEntry("webchat", "OpenClaw web channel via script bridge."),
81
81
  {
82
- notes: "Built-in local WhatsApp mock with Business webhook shape.",
82
+ notes: "Built-in local WhatsApp mock with Business webhook and Baileys WebSocket shapes.",
83
83
  platform: "whatsapp",
84
84
  status: "ready",
85
85
  supports: COMMON_BRIDGE_SUPPORT,
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/providers/catalog.ts"],"names":[],"mappings":"AAUA,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAU,CAAC;AAE/E,SAAS,iBAAiB,CAAC,QAA0B,EAAE,KAAa;IAClE,OAAO;QACL,KAAK;QACL,QAAQ;QACR,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,qBAAqB;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC;QACE,KAAK,EAAE,0DAA0D;QACjE,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD,iBAAiB,CACf,aAAa,EACb,gEAAgE,CACjE;IACD;QACE,KAAK,EAAE,8DAA8D;QACrE,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD;QACE,KAAK,EAAE,kCAAkC;QACzC,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD;QACE,KAAK,EAAE,kCAAkC;QACzC,QAAQ,EAAE,YAAY;QACtB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD;QACE,KAAK,EAAE,+BAA+B;QACtC,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD,iBAAiB,CAAC,KAAK,EAAE,qCAAqC,CAAC;IAC/D,iBAAiB,CAAC,MAAM,EAAE,4CAA4C,CAAC;IACvE;QACE,KAAK,EAAE,6BAA6B;QACpC,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD;QACE,KAAK,EAAE,iCAAiC;QACxC,QAAQ,EAAE,YAAY;QACtB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD;QACE,KAAK,EAAE,sCAAsC;QAC7C,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD,iBAAiB,CAAC,eAAe,EAAE,4CAA4C,CAAC;IAChF,iBAAiB,CAAC,OAAO,EAAE,4CAA4C,CAAC;IACxE,iBAAiB,CAAC,QAAQ,EAAE,qCAAqC,CAAC;IAClE;QACE,KAAK,EAAE,sDAAsD;QAC7D,QAAQ,EAAE,OAAO;QACjB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD,iBAAiB,CAAC,cAAc,EAAE,4CAA4C,CAAC;IAC/E;QACE,KAAK,EAAE,gEAAgE;QACvE,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD,iBAAiB,CAAC,MAAM,EAAE,4CAA4C,CAAC;IACvE,iBAAiB,CAAC,QAAQ,EAAE,4CAA4C,CAAC;IACzE,iBAAiB,CAAC,SAAS,EAAE,yCAAyC,CAAC;IACvE;QACE,KAAK,EAAE,2DAA2D;QAClE,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD;QACE,KAAK,EAAE,2BAA2B;QAClC,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD,iBAAiB,CAAC,UAAU,EAAE,6DAA6D,CAAC;CAClD,CAAC"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/providers/catalog.ts"],"names":[],"mappings":"AAUA,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAU,CAAC;AAE/E,SAAS,iBAAiB,CAAC,QAA0B,EAAE,KAAa;IAClE,OAAO;QACL,KAAK;QACL,QAAQ;QACR,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,qBAAqB;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC;QACE,KAAK,EAAE,0DAA0D;QACjE,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD,iBAAiB,CACf,aAAa,EACb,gEAAgE,CACjE;IACD;QACE,KAAK,EAAE,8DAA8D;QACrE,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD;QACE,KAAK,EAAE,kCAAkC;QACzC,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD;QACE,KAAK,EAAE,kCAAkC;QACzC,QAAQ,EAAE,YAAY;QACtB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD;QACE,KAAK,EAAE,+BAA+B;QACtC,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD,iBAAiB,CAAC,KAAK,EAAE,qCAAqC,CAAC;IAC/D,iBAAiB,CAAC,MAAM,EAAE,4CAA4C,CAAC;IACvE;QACE,KAAK,EAAE,6BAA6B;QACpC,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD;QACE,KAAK,EAAE,iCAAiC;QACxC,QAAQ,EAAE,YAAY;QACtB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD;QACE,KAAK,EAAE,sCAAsC;QAC7C,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD,iBAAiB,CAAC,eAAe,EAAE,4CAA4C,CAAC;IAChF,iBAAiB,CAAC,OAAO,EAAE,4CAA4C,CAAC;IACxE,iBAAiB,CAAC,QAAQ,EAAE,qCAAqC,CAAC;IAClE;QACE,KAAK,EAAE,sDAAsD;QAC7D,QAAQ,EAAE,OAAO;QACjB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD,iBAAiB,CAAC,cAAc,EAAE,4CAA4C,CAAC;IAC/E;QACE,KAAK,EAAE,gEAAgE;QACvE,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD,iBAAiB,CAAC,MAAM,EAAE,4CAA4C,CAAC;IACvE,iBAAiB,CAAC,QAAQ,EAAE,4CAA4C,CAAC;IACzE,iBAAiB,CAAC,SAAS,EAAE,yCAAyC,CAAC;IACvE;QACE,KAAK,EAAE,kFAAkF;QACzF,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD;QACE,KAAK,EAAE,2BAA2B;QAClC,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,qBAAqB;KAChC;IACD,iBAAiB,CAAC,UAAU,EAAE,6DAA6D,CAAC;CAClD,CAAC"}
@@ -146,33 +146,35 @@ crabline --json serve whatsapp --ready-file .crabline/whatsapp-server.json
146
146
  Manifest fields:
147
147
 
148
148
  - `endpoints.apiRoot`: Crabline WhatsApp fake provider API root
149
+ - `endpoints.baileysWebSocketUrl`: Baileys-compatible WebSocket URL for
150
+ `waWebSocketUrl`, including the fake provider access token query parameter
149
151
  - `accessToken`: bearer token for fake provider requests
150
152
  - `adminToken`: value for the `X-Crabline-Admin-Token` header on admin ingress
151
153
  - `selfJid`: fake authenticated WhatsApp user JID
152
- - `env.CRABLINE_WHATSAPP_ACCESS_TOKEN`: access token for the runtime socket
153
- factory
154
- - `env.CRABLINE_WHATSAPP_API_ROOT`: API root for the runtime socket factory
155
- - `env.CRABLINE_WHATSAPP_RECORDER_PATH`: recorder file followed by the runtime
156
- socket factory for cross-process inbound delivery
157
- - `env.CRABLINE_WHATSAPP_SELF_JID`: fake authenticated WhatsApp user JID for
158
- the runtime socket factory
154
+ - `env.CRABLINE_WHATSAPP_ACCESS_TOKEN`: same value as `accessToken`
155
+ - `env.CRABLINE_WHATSAPP_API_ROOT`: same value as `endpoints.apiRoot`
156
+ - `env.CRABLINE_WHATSAPP_BAILEYS_WEB_SOCKET_URL`: same value as
157
+ `endpoints.baileysWebSocketUrl`
158
+ - `env.CRABLINE_WHATSAPP_RECORDER_PATH`: recorder file for HTTP traffic and
159
+ Baileys WebSocket stanzas
160
+ - `env.CRABLINE_WHATSAPP_SELF_JID`: fake authenticated WhatsApp user JID
159
161
  - `endpoints.adminInboundUrl`: authenticated admin ingress for test user
160
- messages; subscribed Baileys mock sockets receive them as `messages.upsert`
161
- - `endpoints.messagesUrl`: text send endpoint used by the Baileys-shaped mock
162
- - `endpoints.presenceUrl`: presence endpoint used by `sendPresenceUpdate`
163
- - `recorderPath`: JSONL provider traffic recorder
164
-
165
- Use the package subpath `@openclaw/crabline/whatsapp-socket-factory` when a
166
- runtime needs a Baileys-style module with `createWhatsAppSocket()`. The module
167
- reads the `CRABLINE_WHATSAPP_*` env vars emitted by the manifest, sends outbound
168
- traffic to the fake provider API, and follows the recorder for inbound
169
- `messages.upsert` events. The admin token is generated randomly unless
170
- `--admin-token <token>` is provided.
162
+ messages using the WhatsApp Business webhook payload shape
163
+ - `endpoints.messagesUrl`: text send endpoint for Graph-style callers
164
+ - `endpoints.presenceUrl`: presence endpoint for Graph-style callers
165
+ - `recorderPath`: JSONL provider traffic recorder for HTTP traffic and Baileys
166
+ WebSocket stanzas
167
+
168
+ Pass `endpoints.baileysWebSocketUrl` to Baileys as `waWebSocketUrl` when a
169
+ runtime needs to connect through the fake provider. The fake server completes
170
+ the Baileys Noise handshake, serves bootstrap/device/prekey queries, and records
171
+ encrypted outbound WebSocket stanzas. The WebSocket endpoint rejects clients
172
+ that do not present the access token embedded in the manifest URL. The admin
173
+ token is generated randomly unless `--admin-token <token>` is provided.
171
174
 
172
175
  OpenClaw bridge callers should post injected user messages with the
173
176
  `providerUrl`, `providerHeaders`, and `providerBody` returned by
174
- `createOpenClawCrablineInbound()`. For direct in-process tests, the started fake
175
- server also exposes `createBaileysMockSocket()`.
177
+ `createOpenClawCrablineInbound()`.
176
178
  The admin ingress accepts JSON like:
177
179
 
178
180
  ```json
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/crabline",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "Standalone CLI for deterministic messaging provider E2E tests",
5
5
  "homepage": "https://github.com/openclaw/crabline#readme",
6
6
  "bugs": {
@@ -27,10 +27,6 @@
27
27
  ".": {
28
28
  "types": "./dist/src/index.d.ts",
29
29
  "import": "./dist/src/index.js"
30
- },
31
- "./whatsapp-socket-factory": {
32
- "types": "./dist/src/fake-servers/whatsapp-socket-factory.d.ts",
33
- "import": "./dist/src/fake-servers/whatsapp-socket-factory.js"
34
30
  }
35
31
  },
36
32
  "scripts": {
@@ -54,14 +50,18 @@
54
50
  },
55
51
  "dependencies": {
56
52
  "commander": "^14.0.3",
53
+ "curve25519-js": "^0.0.4",
57
54
  "picocolors": "^1.1.1",
55
+ "ws": "^8.21.0",
58
56
  "yaml": "^2.9.0",
59
57
  "zod": "^4.4.3"
60
58
  },
61
59
  "devDependencies": {
62
60
  "@types/node": "^25.9.2",
61
+ "@types/ws": "^8.18.1",
63
62
  "@typescript/native-preview": "7.0.0-dev.20260503.1",
64
63
  "@vitest/coverage-v8": "^4.1.8",
64
+ "baileys": "7.0.0-rc13",
65
65
  "oxfmt": "^0.47.0",
66
66
  "oxlint": "^1.69.0",
67
67
  "oxlint-tsgolint": "^0.22.1",
@@ -1,34 +0,0 @@
1
- import { type WhatsAppBaileysMockConfig, type WhatsAppBaileysMockSocket } from "./whatsapp.js";
2
- export declare const CRABLINE_WHATSAPP_ACCESS_TOKEN_ENV = "CRABLINE_WHATSAPP_ACCESS_TOKEN";
3
- export declare const CRABLINE_WHATSAPP_API_ROOT_ENV = "CRABLINE_WHATSAPP_API_ROOT";
4
- export declare const CRABLINE_WHATSAPP_RECORDER_PATH_ENV = "CRABLINE_WHATSAPP_RECORDER_PATH";
5
- export declare const CRABLINE_WHATSAPP_SELF_JID_ENV = "CRABLINE_WHATSAPP_SELF_JID";
6
- export type WhatsAppBaileysRuntimeGroupMetadata = {
7
- id: string;
8
- participants: unknown[];
9
- subject: string;
10
- };
11
- export type WhatsAppBaileysRuntimeMockSocket = WhatsAppBaileysMockSocket & {
12
- end(error?: Error | undefined): void;
13
- groupFetchAllParticipating(): Promise<Record<string, WhatsAppBaileysRuntimeGroupMetadata>>;
14
- groupMetadata(jid: string): Promise<WhatsAppBaileysRuntimeGroupMetadata>;
15
- readMessages(keys?: unknown[] | undefined): Promise<void>;
16
- };
17
- export type WhatsAppBaileysRuntimeMockConfig = WhatsAppBaileysMockConfig & {
18
- emitConnectionOpen?: boolean | undefined;
19
- recorderPath?: string | undefined;
20
- recorderPollMs?: number | undefined;
21
- };
22
- export type WhatsAppSocketFactoryOptions = {
23
- fetch?: typeof fetch | undefined;
24
- selfJid?: string | undefined;
25
- };
26
- export declare function startWhatsAppBaileysRecorderBridge(params: {
27
- recorderPath: string;
28
- recorderPollMs?: number | undefined;
29
- socket: WhatsAppBaileysMockSocket;
30
- }): () => void;
31
- export declare function createWhatsAppBaileysRuntimeMockSocket(config: WhatsAppBaileysRuntimeMockConfig): WhatsAppBaileysRuntimeMockSocket;
32
- export declare function createWhatsAppBaileysRuntimeMockSocketFromEnv(env?: NodeJS.ProcessEnv, options?: WhatsAppSocketFactoryOptions): WhatsAppBaileysRuntimeMockSocket;
33
- export declare function createWhatsAppSocket(_printQr?: boolean, _verbose?: boolean, options?: WhatsAppSocketFactoryOptions): Promise<WhatsAppBaileysRuntimeMockSocket>;
34
- export default createWhatsAppSocket;
@@ -1,225 +0,0 @@
1
- import fs from "node:fs";
2
- import fsPromises from "node:fs/promises";
3
- import { createWhatsAppBaileysMockSocket, } from "./whatsapp.js";
4
- export const CRABLINE_WHATSAPP_ACCESS_TOKEN_ENV = "CRABLINE_WHATSAPP_ACCESS_TOKEN";
5
- export const CRABLINE_WHATSAPP_API_ROOT_ENV = "CRABLINE_WHATSAPP_API_ROOT";
6
- export const CRABLINE_WHATSAPP_RECORDER_PATH_ENV = "CRABLINE_WHATSAPP_RECORDER_PATH";
7
- export const CRABLINE_WHATSAPP_SELF_JID_ENV = "CRABLINE_WHATSAPP_SELF_JID";
8
- const DEFAULT_RECORDER_POLL_MS = 50;
9
- const RECORDER_BRIDGE_STATE_KEY = Symbol.for("crabline.whatsapp.baileysRecorderBridge");
10
- function readNonEmptyString(value) {
11
- const trimmed = typeof value === "string" ? value.trim() : "";
12
- return trimmed || undefined;
13
- }
14
- function readRequiredEnv(env, key) {
15
- const value = readNonEmptyString(env[key]);
16
- if (!value) {
17
- throw new Error(`${key} is required to create a WhatsApp Baileys mock socket.`);
18
- }
19
- return value;
20
- }
21
- function readOptionalEnv(env, key) {
22
- return readNonEmptyString(env[key]);
23
- }
24
- function isRecord(value) {
25
- return !!value && typeof value === "object" && !Array.isArray(value);
26
- }
27
- function readRecordedInboundMessage(value) {
28
- if (!isRecord(value) || !isRecord(value.key) || !isRecord(value.message)) {
29
- return undefined;
30
- }
31
- const id = readNonEmptyString(value.key.id);
32
- const remoteJid = readNonEmptyString(value.key.remoteJid);
33
- if (!id || !remoteJid || value.key.fromMe !== false) {
34
- return undefined;
35
- }
36
- return value;
37
- }
38
- function getRecorderBridgeState(recorderPath) {
39
- const globalState = globalThis;
40
- const states = globalState[RECORDER_BRIDGE_STATE_KEY] ?? new Map();
41
- globalState[RECORDER_BRIDGE_STATE_KEY] = states;
42
- const state = states.get(recorderPath) ?? {
43
- cursor: readRecorderLineCountSync(recorderPath),
44
- interval: null,
45
- sockets: new Set(),
46
- syncPromise: null,
47
- };
48
- states.set(recorderPath, state);
49
- return state;
50
- }
51
- function parseRecorderLine(line) {
52
- try {
53
- return JSON.parse(line);
54
- }
55
- catch {
56
- return null;
57
- }
58
- }
59
- function createInboundMessageFromRecorderEvent(event, lineIndex) {
60
- if (!isRecord(event) || event.type !== "admin" || typeof event.path !== "string") {
61
- return null;
62
- }
63
- if (!event.path.endsWith("/crabline/whatsapp/inbound")) {
64
- return null;
65
- }
66
- const recordedMessage = readRecordedInboundMessage(event.message);
67
- if (recordedMessage) {
68
- return recordedMessage;
69
- }
70
- if (!isRecord(event.body)) {
71
- return null;
72
- }
73
- const chatJid = readNonEmptyString(event.body.chatJid ?? event.body.chatId);
74
- const senderJid = readNonEmptyString(event.body.senderJid ?? event.body.from);
75
- const text = readNonEmptyString(event.body.text);
76
- if (!chatJid || !senderJid || !text) {
77
- return null;
78
- }
79
- const messageId = readNonEmptyString(event.body.messageId) ??
80
- `wamid.FAKEQA${String(lineIndex + 1).padStart(8, "0")}`;
81
- return {
82
- key: {
83
- fromMe: false,
84
- id: messageId,
85
- ...(chatJid.endsWith("@g.us") ? { participant: senderJid } : {}),
86
- remoteJid: chatJid,
87
- },
88
- message: {
89
- conversation: text,
90
- },
91
- messageTimestamp: Math.floor(Date.now() / 1000),
92
- pushName: readNonEmptyString(event.body.pushName) ?? "Test User",
93
- };
94
- }
95
- async function readRecorderLines(recorderPath) {
96
- const text = await fsPromises.readFile(recorderPath, "utf8").catch((error) => {
97
- if (isRecord(error) && error.code === "ENOENT") {
98
- return "";
99
- }
100
- throw error;
101
- });
102
- return text.split(/\r?\n/u).filter((line) => line.trim().length > 0);
103
- }
104
- function readRecorderLineCountSync(recorderPath) {
105
- try {
106
- return fs
107
- .readFileSync(recorderPath, "utf8")
108
- .split(/\r?\n/u)
109
- .filter((line) => line.trim().length > 0).length;
110
- }
111
- catch (error) {
112
- if (isRecord(error) && error.code === "ENOENT") {
113
- return 0;
114
- }
115
- throw error;
116
- }
117
- }
118
- export function startWhatsAppBaileysRecorderBridge(params) {
119
- const state = getRecorderBridgeState(params.recorderPath);
120
- state.sockets.add(params.socket);
121
- const sync = async () => {
122
- if (state.syncPromise) {
123
- await state.syncPromise;
124
- return;
125
- }
126
- state.syncPromise = (async () => {
127
- const lines = await readRecorderLines(params.recorderPath);
128
- if (lines.length < state.cursor) {
129
- state.cursor = 0;
130
- }
131
- for (let lineIndex = state.cursor; lineIndex < lines.length; lineIndex += 1) {
132
- const event = parseRecorderLine(lines[lineIndex] ?? "");
133
- const message = createInboundMessageFromRecorderEvent(event, lineIndex);
134
- if (message) {
135
- const payload = { messages: [message], type: "notify" };
136
- for (const socket of state.sockets) {
137
- socket.ev.emit("messages.upsert", payload);
138
- }
139
- }
140
- }
141
- state.cursor = lines.length;
142
- })();
143
- try {
144
- await state.syncPromise;
145
- }
146
- finally {
147
- state.syncPromise = null;
148
- }
149
- };
150
- if (!state.interval) {
151
- state.interval = setInterval(() => {
152
- void sync().catch(() => undefined);
153
- }, params.recorderPollMs ?? DEFAULT_RECORDER_POLL_MS);
154
- state.interval.unref?.();
155
- }
156
- void sync().catch(() => undefined);
157
- return () => {
158
- state.sockets.delete(params.socket);
159
- if (state.sockets.size === 0 && state.interval) {
160
- clearInterval(state.interval);
161
- state.interval = null;
162
- }
163
- };
164
- }
165
- export function createWhatsAppBaileysRuntimeMockSocket(config) {
166
- const socket = createWhatsAppBaileysMockSocket(config);
167
- const stopRecorderBridge = config.recorderPath
168
- ? startWhatsAppBaileysRecorderBridge({
169
- recorderPath: config.recorderPath,
170
- recorderPollMs: config.recorderPollMs,
171
- socket,
172
- })
173
- : () => { };
174
- const openTimer = config.emitConnectionOpen === false
175
- ? null
176
- : setTimeout(() => {
177
- socket.ev.emit("connection.update", { connection: "open" });
178
- }, 0);
179
- openTimer?.unref?.();
180
- let closed = false;
181
- return {
182
- ...socket,
183
- end(error) {
184
- if (closed) {
185
- return;
186
- }
187
- closed = true;
188
- if (openTimer) {
189
- clearTimeout(openTimer);
190
- }
191
- stopRecorderBridge();
192
- socket.ev.emit("connection.update", {
193
- connection: "close",
194
- lastDisconnect: error ? { error } : undefined,
195
- });
196
- },
197
- async groupFetchAllParticipating() {
198
- return {};
199
- },
200
- async groupMetadata(jid) {
201
- return {
202
- id: jid,
203
- participants: [],
204
- subject: "Test Group",
205
- };
206
- },
207
- async readMessages() {
208
- return undefined;
209
- },
210
- };
211
- }
212
- export function createWhatsAppBaileysRuntimeMockSocketFromEnv(env = process.env, options = {}) {
213
- return createWhatsAppBaileysRuntimeMockSocket({
214
- accessToken: readRequiredEnv(env, CRABLINE_WHATSAPP_ACCESS_TOKEN_ENV),
215
- apiRoot: readRequiredEnv(env, CRABLINE_WHATSAPP_API_ROOT_ENV),
216
- fetch: options.fetch,
217
- recorderPath: readOptionalEnv(env, CRABLINE_WHATSAPP_RECORDER_PATH_ENV),
218
- selfJid: readOptionalEnv(env, CRABLINE_WHATSAPP_SELF_JID_ENV) ?? options.selfJid,
219
- });
220
- }
221
- export async function createWhatsAppSocket(_printQr, _verbose, options = {}) {
222
- return createWhatsAppBaileysRuntimeMockSocketFromEnv(process.env, options);
223
- }
224
- export default createWhatsAppSocket;
225
- //# sourceMappingURL=whatsapp-socket-factory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whatsapp-socket-factory.js","sourceRoot":"","sources":["../../../src/fake-servers/whatsapp-socket-factory.ts"],"names":[],"mappings":"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"}