@diegoaltoworks/chatter 0.61.0 → 0.63.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 +55 -17
- package/dist/auth/secretStrength.d.ts +1 -1
- package/dist/auth/secretStrength.d.ts.map +1 -1
- package/dist/bin/create-apikey.js +45 -28
- package/dist/bin/wa-pair.js +113 -46
- package/dist/channels/backoff.d.ts +10 -0
- package/dist/channels/backoff.d.ts.map +1 -0
- package/dist/channels/gates.d.ts +15 -8
- package/dist/channels/gates.d.ts.map +1 -1
- package/dist/channels/index.d.ts +1 -1
- package/dist/channels/index.d.ts.map +1 -1
- package/dist/channels/index.js +38 -5
- package/dist/channels/index.mjs +37 -5
- package/dist/channels/matrix/api.d.ts +25 -6
- package/dist/channels/matrix/api.d.ts.map +1 -1
- package/dist/channels/matrix/channel.d.ts +4 -56
- package/dist/channels/matrix/channel.d.ts.map +1 -1
- package/dist/channels/matrix/handler.d.ts +16 -9
- package/dist/channels/matrix/handler.d.ts.map +1 -1
- package/dist/channels/matrix/index.d.ts +2 -2
- package/dist/channels/matrix/index.d.ts.map +1 -1
- package/dist/channels/matrix/index.js +196 -40
- package/dist/channels/matrix/index.mjs +189 -39
- package/dist/channels/matrix/sync.d.ts +4 -1
- package/dist/channels/matrix/sync.d.ts.map +1 -1
- package/dist/channels/matrix/updates.d.ts +39 -10
- package/dist/channels/matrix/updates.d.ts.map +1 -1
- package/dist/channels/pipeline.d.ts +14 -14
- package/dist/channels/pipeline.d.ts.map +1 -1
- package/dist/channels/polling.d.ts +67 -0
- package/dist/channels/polling.d.ts.map +1 -0
- package/dist/channels/telegram/channel.d.ts +2 -56
- package/dist/channels/telegram/channel.d.ts.map +1 -1
- package/dist/channels/telegram/index.js +53 -23
- package/dist/channels/telegram/index.mjs +53 -23
- package/dist/channels/telegram/poll.d.ts +5 -1
- package/dist/channels/telegram/poll.d.ts.map +1 -1
- package/dist/channels/telegram/webhook.d.ts +2 -10
- package/dist/channels/telegram/webhook.d.ts.map +1 -1
- package/dist/channels/whatsapp/authState.d.ts +40 -9
- package/dist/channels/whatsapp/authState.d.ts.map +1 -1
- package/dist/channels/whatsapp/channel.d.ts +39 -4
- package/dist/channels/whatsapp/channel.d.ts.map +1 -1
- package/dist/channels/whatsapp/inbound.d.ts +23 -25
- package/dist/channels/whatsapp/inbound.d.ts.map +1 -1
- package/dist/channels/whatsapp/index.d.ts +3 -3
- package/dist/channels/whatsapp/index.d.ts.map +1 -1
- package/dist/channels/whatsapp/index.js +188 -66
- package/dist/channels/whatsapp/index.mjs +185 -66
- package/dist/channels/whatsapp/pairing.d.ts.map +1 -1
- package/dist/client/src/Chat.d.ts.map +1 -1
- package/dist/client/src/ChatButton.d.ts.map +1 -1
- package/dist/client/src/browser.d.ts.map +1 -1
- package/dist/core/answer.d.ts +8 -0
- package/dist/core/answer.d.ts.map +1 -1
- package/dist/core/buildLock.d.ts +52 -0
- package/dist/core/buildLock.d.ts.map +1 -0
- package/dist/core/pipeline.d.ts +42 -5
- package/dist/core/pipeline.d.ts.map +1 -1
- package/dist/core/prompts.d.ts +2 -0
- package/dist/core/prompts.d.ts.map +1 -1
- package/dist/core/retrieval.d.ts +100 -25
- package/dist/core/retrieval.d.ts.map +1 -1
- package/dist/core/session.d.ts +8 -0
- package/dist/core/session.d.ts.map +1 -1
- package/dist/flows/index.d.ts +1 -1
- package/dist/flows/index.d.ts.map +1 -1
- package/dist/flows/index.js +8 -6
- package/dist/flows/index.mjs +7 -6
- package/dist/flows/intent.d.ts +1 -1
- package/dist/flows/intent.d.ts.map +1 -1
- package/dist/flows/loader.d.ts +1 -2
- package/dist/flows/loader.d.ts.map +1 -1
- package/dist/flows/params.d.ts +1 -1
- package/dist/flows/params.d.ts.map +1 -1
- package/dist/flows/session.d.ts +4 -2
- package/dist/flows/session.d.ts.map +1 -1
- package/dist/flows/types.d.ts +2 -3
- package/dist/flows/types.d.ts.map +1 -1
- package/dist/history/index.d.ts +1 -1
- package/dist/history/index.d.ts.map +1 -1
- package/dist/history/index.js +6 -3
- package/dist/history/index.mjs +5 -3
- package/dist/history/tursoStore.d.ts +6 -4
- package/dist/history/tursoStore.d.ts.map +1 -1
- package/dist/images/index.js +2 -2
- package/dist/images/index.mjs +2 -2
- package/dist/index.d.ts +7 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +596 -295
- package/dist/index.mjs +595 -295
- package/dist/mcp-server/index.d.ts +5 -5
- package/dist/mcp-server/index.d.ts.map +1 -1
- package/dist/mcp-server/logger.d.ts +12 -2
- package/dist/mcp-server/logger.d.ts.map +1 -1
- package/dist/mcp-server/rate-limiter.d.ts +10 -3
- package/dist/mcp-server/rate-limiter.d.ts.map +1 -1
- package/dist/mcp-server/types.d.ts +20 -5
- package/dist/mcp-server/types.d.ts.map +1 -1
- package/dist/mcp-server.js +479 -244
- package/dist/mcp-server.mjs +485 -244
- package/dist/middleware/apiKey.d.ts +10 -0
- package/dist/middleware/apiKey.d.ts.map +1 -0
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/cors.d.ts.map +1 -1
- package/dist/middleware/ratelimit.d.ts.map +1 -1
- package/dist/middleware/referrer.d.ts.map +1 -1
- package/dist/middleware/session.d.ts +1 -1
- package/dist/middleware/session.d.ts.map +1 -1
- package/dist/routes/demo.d.ts.map +1 -1
- package/dist/routes/openai.d.ts.map +1 -1
- package/dist/routes/private.d.ts.map +1 -1
- package/dist/routes/public.d.ts.map +1 -1
- package/dist/scheduler/index.js +1 -1
- package/dist/scheduler/index.mjs +1 -1
- package/dist/scheduler/scheduler.d.ts +9 -1
- package/dist/scheduler/scheduler.d.ts.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +491 -268
- package/dist/server.mjs +497 -268
- package/dist/shortener.d.ts +5 -4
- package/dist/shortener.d.ts.map +1 -1
- package/dist/types.d.ts +129 -75
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -3
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Baileys auth state, encrypted at rest, over an injectable {@link WaAuthKV}.
|
|
3
3
|
*
|
|
4
4
|
* Same contract as Baileys' own `useMultiFileAuthState`, but rows in a
|
|
5
|
-
*
|
|
6
|
-
* session material
|
|
7
|
-
* readable.
|
|
5
|
+
* key-value store instead of files, AES-GCM encrypted (see `crypto.ts`) so
|
|
6
|
+
* session material - which grants full account access - is never stored
|
|
7
|
+
* readable. The store itself only ever sees ciphertext: encryption lives in
|
|
8
|
+
* this module, above the store, so a custom `WaAuthKV` cannot accidentally
|
|
9
|
+
* persist plaintext session material.
|
|
8
10
|
*
|
|
9
11
|
* Only Baileys *types* are imported here (erased at compile time, so they add
|
|
10
12
|
* no runtime dependency); the few Baileys runtime values this module needs
|
|
11
13
|
* (`BufferJSON`, `initAuthCreds`, the app-state-sync-key constructor) are
|
|
12
14
|
* passed in by the caller, which already holds them from the dynamic import
|
|
13
|
-
* in `baileys.ts`
|
|
15
|
+
* in `baileys.ts` - see that module for why the import is dynamic.
|
|
14
16
|
*/
|
|
15
17
|
import type { Client } from "@libsql/client";
|
|
16
18
|
import type { AuthenticationCreds, AuthenticationState, SignalDataTypeMap } from "@whiskeysockets/baileys";
|
|
@@ -30,10 +32,39 @@ export interface AuthStateRuntime {
|
|
|
30
32
|
appStateSyncKeyFromObject: (value: Record<string, unknown>) => SignalDataTypeMap["app-state-sync-key"];
|
|
31
33
|
}
|
|
32
34
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* support is introduced.
|
|
35
|
+
* Raw storage for Baileys auth rows, keyed by an already session-scoped
|
|
36
|
+
* `id` (see `useAuthState`'s `rowId`). Values are opaque ciphertext strings -
|
|
37
|
+
* this layer has no encryption knowledge, only persistence.
|
|
37
38
|
*/
|
|
39
|
+
export interface WaAuthKV {
|
|
40
|
+
read(id: string): Promise<string | null>;
|
|
41
|
+
write(id: string, value: string): Promise<void>;
|
|
42
|
+
remove(id: string): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Deletes every row belonging to `sessionId` and no other session's -
|
|
45
|
+
* use {@link isAuthRowForSession} to decide which stored ids qualify
|
|
46
|
+
* rather than re-deriving the "default" session's unprefixed special case
|
|
47
|
+
* by hand; getting this wrong logs out a sibling number.
|
|
48
|
+
*/
|
|
49
|
+
clear(sessionId: string): Promise<void>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Pure: does row id `id` (as stored - already passed through `rowId`) belong
|
|
53
|
+
* to `sessionId`? Mirrors `useAuthState`'s `rowId` and the SQL in
|
|
54
|
+
* `createTursoWaAuthKV`'s `clear` - keep the three in sync. The "default"
|
|
55
|
+
* session's rows are UNPREFIXED (see `useAuthState`), so its scope is
|
|
56
|
+
* everything *not* claimed by a named session's `s:<sessionId>/` prefix.
|
|
57
|
+
*/
|
|
58
|
+
export declare function isAuthRowForSession(id: string, sessionId: string): boolean;
|
|
59
|
+
/** The shipped `WaAuthKV`: a `wa_auth` table in the same libsql database the rest of chatter uses. */
|
|
60
|
+
export declare function createTursoWaAuthKV(db: Client): WaAuthKV;
|
|
61
|
+
/**
|
|
62
|
+
* Sessions share one `WaAuthKV`, namespaced by row-id prefix. The "default"
|
|
63
|
+
* session uses UNPREFIXED ids - exactly a single-session layout - so an
|
|
64
|
+
* existing default session needs no migration when multi-session support is
|
|
65
|
+
* introduced.
|
|
66
|
+
*/
|
|
67
|
+
export declare function useAuthState(store: WaAuthKV, secret: string, sessionId: string, runtime: AuthStateRuntime): Promise<TursoAuthStateResult>;
|
|
68
|
+
/** Convenience wrapper over `useAuthState` for the shipped Turso-backed `WaAuthKV`. */
|
|
38
69
|
export declare function useTursoAuthState(db: Client, secret: string, sessionId: string, runtime: AuthStateRuntime): Promise<TursoAuthStateResult>;
|
|
39
70
|
//# sourceMappingURL=authState.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authState.d.ts","sourceRoot":"","sources":["../../../src/channels/whatsapp/authState.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"authState.d.ts","sourceRoot":"","sources":["../../../src/channels/whatsapp/authState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AAGjC,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,kDAAkD;IAClD,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE;QACV,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;QACnD,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;KACnD,CAAC;IACF,aAAa,EAAE,MAAM,mBAAmB,CAAC;IACzC,yBAAyB,EAAE,CACzB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC3B,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;CAC9C;AAED;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC;;;;;OAKG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAG1E;AAiBD,sGAAsG;AACtG,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,CAmCxD;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,oBAAoB,CAAC,CA2D/B;AAED,uFAAuF;AACvF,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAE/B"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WhatsApp web-client transport: a {@link Channel} that runs one Baileys
|
|
3
3
|
* socket per configured session id (one WhatsApp number each), auth state
|
|
4
|
-
* encrypted
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* encrypted above an injectable {@link WaAuthKV} (defaults to a table in the
|
|
5
|
+
* host's own database, `deps.db` - no second connection opened), and a
|
|
6
|
+
* deploy lease behind an injectable `WaLeaseStore` so two overlapping
|
|
7
|
+
* instances can never hold the same session's socket at once (WhatsApp
|
|
8
|
+
* treats a second connection as a takeover and logs the first one out).
|
|
8
9
|
*
|
|
9
10
|
* Message INTERPRETATION — mention/reply detection, allowlists, loop guards —
|
|
10
11
|
* is deliberately not this module's job; it hands every raw inbound message
|
|
@@ -18,6 +19,7 @@
|
|
|
18
19
|
import type { WAMessage, WASocket } from "@whiskeysockets/baileys";
|
|
19
20
|
import { type Logger } from "../../core/logger";
|
|
20
21
|
import type { Channel } from "../index";
|
|
22
|
+
import type { WaAuthKV } from "./authState";
|
|
21
23
|
import { type Baileys } from "./baileys";
|
|
22
24
|
import { type WaLeaseStore } from "./lease";
|
|
23
25
|
/** Exponential backoff: 5s, 10s, 20s ... capped at 10 minutes. Hammering
|
|
@@ -31,6 +33,8 @@ export interface WhatsAppMessageEvent {
|
|
|
31
33
|
export interface WhatsAppChannelConfig {
|
|
32
34
|
/** Passphrase that encrypts auth state at rest (AES-256-GCM key material). Keep it stable across restarts and deploys — losing it means re-pairing. */
|
|
33
35
|
sessionSecret: string;
|
|
36
|
+
/** Channel and sender-registry name prefix (see {@link senderNameFor}). Override to run more than one WhatsApp channel in one process. @default "whatsapp" */
|
|
37
|
+
name?: string;
|
|
34
38
|
/** One Baileys connection per id, each a separate WhatsApp number. Defaults to `["default"]`, whose auth rows are unprefixed (a pre-multi-session deployment needs no migration). */
|
|
35
39
|
sessionIds?: string[];
|
|
36
40
|
/**
|
|
@@ -52,6 +56,10 @@ export interface WhatsAppChannelConfig {
|
|
|
52
56
|
waitMs?: number;
|
|
53
57
|
/** Logger for connection/lease lifecycle events. Default: a console logger writing to stderr. */
|
|
54
58
|
logger?: Logger;
|
|
59
|
+
/** Deploy-overlap lease. Defaults to a `wa_lease` table in `deps.db`; inject your own to run this channel without a libsql database (see docs/patterns/adding-a-store.md). */
|
|
60
|
+
leaseStore?: WaLeaseStore;
|
|
61
|
+
/** Baileys auth-state persistence, encrypted above this seam. Defaults to a `wa_auth` table in `deps.db`; inject your own to run this channel without a libsql database. */
|
|
62
|
+
authStore?: WaAuthKV;
|
|
55
63
|
}
|
|
56
64
|
/** A live, leased session: what `stop()` (or losing the lease) must tear down. */
|
|
57
65
|
export interface WaSessionHandle {
|
|
@@ -82,6 +90,15 @@ export interface LeaseGatedConnectDeps {
|
|
|
82
90
|
waitMs?: number;
|
|
83
91
|
schedule?: (fn: () => void, ms: number) => void;
|
|
84
92
|
logger?: Logger;
|
|
93
|
+
/**
|
|
94
|
+
* Recovery for a `connect` that threw, replacing the default (release the
|
|
95
|
+
* session, re-check after `waitMs`). The channel injects one so a thrown
|
|
96
|
+
* connect backs off on the same failure counter a closed connection uses
|
|
97
|
+
* instead of re-attempting at a flat interval. Whatever it does, it must
|
|
98
|
+
* end with another attempt scheduled: a session whose lease is held with
|
|
99
|
+
* no live socket and nothing pending never recovers on its own.
|
|
100
|
+
*/
|
|
101
|
+
onConnectFailed?: (sessionId: string, error: unknown) => void;
|
|
85
102
|
}
|
|
86
103
|
/**
|
|
87
104
|
* Acquire `sessionId`'s lease before connecting — two instances must never
|
|
@@ -91,9 +108,27 @@ export interface LeaseGatedConnectDeps {
|
|
|
91
108
|
* heartbeat ever finds the lease gone (this instance went stale and another
|
|
92
109
|
* took over), the session is torn down and this re-enters the same
|
|
93
110
|
* wait-and-retry loop rather than staying connected alongside the new holder.
|
|
111
|
+
*
|
|
112
|
+
* Every failed connect attempt lands back here too, whether it threw on its
|
|
113
|
+
* first try or on a reconnect: this loop is the only way a session recovers,
|
|
114
|
+
* so an attempt that fails without leaving a socket behind (no socket, no
|
|
115
|
+
* future "close" event) must re-enter it rather than stop at a log line.
|
|
94
116
|
*/
|
|
95
117
|
export declare function acquireSessionLease(sessionId: string, deps: LeaseGatedConnectDeps): Promise<void>;
|
|
96
118
|
/** Sender-registry name for a session — the default session stays unprefixed so single-number deployments see a plain `"whatsapp"` name. */
|
|
97
119
|
export declare function senderNameFor(channelName: string, sessionId: string): string;
|
|
120
|
+
/** `ChannelSender.sendMedia`'s payload shape for this channel: a URL Baileys fetches itself, matching `./images`' own `{ image: { url } }` usage. A bare string is shorthand for the URL, the same convention `./telegram` and `./matrix` use. */
|
|
121
|
+
export interface WhatsAppMediaPayload {
|
|
122
|
+
url: string;
|
|
123
|
+
caption?: string;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Turns the registry's opaque `sendMedia` payload into what `sock.sendMessage`
|
|
127
|
+
* needs. `ChannelSender.sendMedia` types its payload as `unknown` (payload
|
|
128
|
+
* shapes are transport-defined), so this is where that unknown is checked:
|
|
129
|
+
* a malformed payload throws here, which the sender registry reports as
|
|
130
|
+
* `false` rather than sending Baileys a `{ image: { url: undefined } }`.
|
|
131
|
+
*/
|
|
132
|
+
export declare function normalizeWaMediaPayload(payload: unknown): WhatsAppMediaPayload;
|
|
98
133
|
export declare function createWhatsAppChannel(config: WhatsAppChannelConfig): Channel;
|
|
99
134
|
//# sourceMappingURL=channel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../../src/channels/whatsapp/channel.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../../src/channels/whatsapp/channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAgB,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEjF,OAAO,EAAuB,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,OAAO,KAAK,EAAoB,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,EAAE,KAAK,OAAO,EAAmD,MAAM,WAAW,CAAC;AAC1F,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,SAAS,CAAC;AAKjB;gFACgF;AAChF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,uJAAuJ;IACvJ,aAAa,EAAE,MAAM,CAAC;IACtB,8JAA8J;IAC9J,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qLAAqL;IACrL,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,iIAAiI;IACjI,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iGAAiG;IACjG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8KAA8K;IAC9K,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,4KAA4K;IAC5K,SAAS,CAAC,EAAE,QAAQ,CAAC;CACtB;AAED,kFAAkF;AAClF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE;QAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAA;KAAE,CAAC;IACvC,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ9F;AAiCD,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,YAAY,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACvC,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB,8GAA8G;IAC9G,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAwEf;AAED,4IAA4I;AAC5I,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,kPAAkP;AAClP,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,oBAAoB,CAS9E;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAsS5E"}
|
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
* interpretation.
|
|
7
7
|
*
|
|
8
8
|
* Message-shape parsing (text/caption extraction, contextInfo mentions and
|
|
9
|
-
* quoted-reply resolution)
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
9
|
+
* quoted-reply resolution) accounts for a Baileys quirk: text AND contextInfo
|
|
10
|
+
* live in a DIFFERENT place per message shape - plain text carries both on
|
|
11
|
+
* `extendedTextMessage`, but a photo/video/document carries its caption on
|
|
12
|
+
* its own message type and its contextInfo there too. Missing that meant
|
|
13
|
+
* mentions in photo captions were invisible and group photo requests were
|
|
14
|
+
* silently ignored.
|
|
15
15
|
*
|
|
16
16
|
* `createWhatsAppInboundHandler` needs `ServerDependencies`
|
|
17
17
|
* (`client`/`store`/`prompts`), which only exists once `createServer` builds
|
|
@@ -34,11 +34,10 @@
|
|
|
34
34
|
* client: deps.client,
|
|
35
35
|
* store: deps.store,
|
|
36
36
|
* prompts: deps.prompts,
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* transformReply: deps.config.transformReply,
|
|
37
|
+
* // Falls back to deps.config.{answerFn,bucketsFor,rewriteQuery,
|
|
38
|
+
* // rerankContext,fallbackFn,transformReply} for whichever of those
|
|
39
|
+
* // this config doesn't set itself.
|
|
40
|
+
* serverConfig: deps.config,
|
|
42
41
|
* registry: new Map(),
|
|
43
42
|
* logger: deps.logger,
|
|
44
43
|
* });
|
|
@@ -48,14 +47,12 @@
|
|
|
48
47
|
*/
|
|
49
48
|
import type { WAMessage, WASocket } from "@whiskeysockets/baileys";
|
|
50
49
|
import type OpenAI from "openai";
|
|
51
|
-
import type { AnswerFn, TransformReply } from "../../core/answer";
|
|
52
|
-
import type { BucketsFor } from "../../core/buckets";
|
|
53
50
|
import { type Logger } from "../../core/logger";
|
|
54
|
-
import type { RerankContext, RewriteQuery } from "../../core/pipeline";
|
|
55
51
|
import type { PromptLoader } from "../../core/prompts";
|
|
56
|
-
import type {
|
|
52
|
+
import type { Retriever } from "../../core/retrieval";
|
|
57
53
|
import type { HistoryCompactionOptions } from "../../history/compaction";
|
|
58
54
|
import type { HistoryStore } from "../../history/types";
|
|
55
|
+
import type { BrainHooks } from "../../types";
|
|
59
56
|
import { type ChannelMessage, type SessionIdentityRegistry } from "../gates";
|
|
60
57
|
import type { WhatsAppMessageEvent } from "./channel";
|
|
61
58
|
import type { WhatsAppImageHandler } from "./images";
|
|
@@ -127,18 +124,19 @@ export interface ResolvedWaMessage {
|
|
|
127
124
|
* multiplies this work.
|
|
128
125
|
*/
|
|
129
126
|
export declare function resolveWaMessage(event: WhatsAppMessageEvent, registry: SessionIdentityRegistry): ResolvedWaMessage;
|
|
130
|
-
export interface WhatsAppInboundConfig {
|
|
127
|
+
export interface WhatsAppInboundConfig extends BrainHooks {
|
|
131
128
|
client: OpenAI;
|
|
132
|
-
store:
|
|
129
|
+
store: Retriever;
|
|
133
130
|
prompts: PromptLoader;
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
131
|
+
/**
|
|
132
|
+
* Fallback source for the brain hooks above, each consulted only when this
|
|
133
|
+
* config's own field is unset. Pass `deps.config` from the `customRoutes`
|
|
134
|
+
* callback (see the module docstring) so this handler automatically
|
|
135
|
+
* honours a server-level hook, the same precedence `./telegram` and
|
|
136
|
+
* `./matrix` apply internally via `resolveBrainHooks`. Unset: only this
|
|
137
|
+
* config's own fields count.
|
|
138
|
+
*/
|
|
139
|
+
serverConfig?: BrainHooks;
|
|
142
140
|
model?: string;
|
|
143
141
|
/**
|
|
144
142
|
* Own identities per session — share ONE registry across every session
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbound.d.ts","sourceRoot":"","sources":["../../../src/channels/whatsapp/inbound.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"inbound.d.ts","sourceRoot":"","sources":["../../../src/channels/whatsapp/inbound.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,11 +23,11 @@
|
|
|
23
23
|
*
|
|
24
24
|
* @packageDocumentation
|
|
25
25
|
*/
|
|
26
|
-
export type { AuthStateRuntime, TursoAuthStateResult } from "./authState";
|
|
27
|
-
export { useTursoAuthState } from "./authState";
|
|
26
|
+
export type { AuthStateRuntime, TursoAuthStateResult, WaAuthKV } from "./authState";
|
|
27
|
+
export { createTursoWaAuthKV, useAuthState, useTursoAuthState } from "./authState";
|
|
28
28
|
export type { Baileys } from "./baileys";
|
|
29
29
|
export { loadBaileys } from "./baileys";
|
|
30
|
-
export { acquireSessionLease, createWhatsAppChannel, type LeaseGatedConnectDeps, reconnectDelayMs, senderNameFor, shutdownWaSessions, type WaSessionHandle, type WhatsAppChannelConfig, type WhatsAppMessageEvent, } from "./channel";
|
|
30
|
+
export { acquireSessionLease, createWhatsAppChannel, type LeaseGatedConnectDeps, normalizeWaMediaPayload, reconnectDelayMs, senderNameFor, shutdownWaSessions, type WaSessionHandle, type WhatsAppChannelConfig, type WhatsAppMediaPayload, type WhatsAppMessageEvent, } from "./channel";
|
|
31
31
|
export { decrypt, encrypt } from "./crypto";
|
|
32
32
|
export { createWhatsAppImageHandler, type DrawRequestDetectorConfig, drawSubject, isDrawRequest, type WhatsAppImageHandler, type WhatsAppImageHandlerDeps, type WhatsAppImageRequestContext, type WhatsAppImageStrings, } from "./images";
|
|
33
33
|
export { createWhatsAppInboundHandler, extractText, isGroupJid, jidsMatch, jidToPhoneNumber, messageContext, type ResolvedWaMessage, resolveWaMessage, senderPhoneFor, stripOwnMentions, type WaMessageContext, type WhatsAppInboundConfig, } from "./inbound";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/whatsapp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/channels/whatsapp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACnF,YAAY,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,uBAAuB,EACvB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EACL,0BAA0B,EAC1B,KAAK,yBAAyB,EAC9B,WAAW,EACX,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,GAC1B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,4BAA4B,EAC5B,WAAW,EACX,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,KAAK,iBAAiB,EACtB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,KAAK,UAAU,EACf,KAAK,YAAY,GAClB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,2BAA2B,EAC3B,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,GACjC,MAAM,UAAU,CAAC"}
|