@openclaw/crabline 0.1.9 → 0.1.10
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 +47 -22
- package/assets/crabline-banner.svg +20 -0
- package/dist/src/bin/crabline.js.map +1 -1
- package/dist/src/cli/program.d.ts +25 -1
- package/dist/src/cli/program.js +579 -82
- package/dist/src/cli/program.js.map +1 -1
- package/dist/src/config/load.js +59 -6
- package/dist/src/config/load.js.map +1 -1
- package/dist/src/config/schema.d.ts +116 -92
- package/dist/src/config/schema.js +179 -73
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/core/errors.js +9 -2
- package/dist/src/core/errors.js.map +1 -1
- package/dist/src/core/exit-codes.js.map +1 -1
- package/dist/src/core/matcher.js +7 -6
- package/dist/src/core/matcher.js.map +1 -1
- package/dist/src/core/message-template.js.map +1 -1
- package/dist/src/core/nonces.d.ts +1 -0
- package/dist/src/core/nonces.js +4 -2
- package/dist/src/core/nonces.js.map +1 -1
- package/dist/src/core/reporters.d.ts +1 -0
- package/dist/src/core/reporters.js +42 -4
- package/dist/src/core/reporters.js.map +1 -1
- package/dist/src/core/run.d.ts +3 -0
- package/dist/src/core/run.js +415 -107
- package/dist/src/core/run.js.map +1 -1
- package/dist/src/core/safe-regex.d.ts +3 -0
- package/dist/src/core/safe-regex.js +21 -0
- package/dist/src/core/safe-regex.js.map +1 -0
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/openclaw/artifact-generation.d.ts +38 -0
- package/dist/src/openclaw/artifact-generation.js +314 -0
- package/dist/src/openclaw/artifact-generation.js.map +1 -0
- package/dist/src/openclaw/bridges/matrix.js +97 -12
- package/dist/src/openclaw/bridges/matrix.js.map +1 -1
- package/dist/src/openclaw/bridges/mattermost.js +32 -10
- package/dist/src/openclaw/bridges/mattermost.js.map +1 -1
- package/dist/src/openclaw/bridges/signal.js +55 -18
- package/dist/src/openclaw/bridges/signal.js.map +1 -1
- package/dist/src/openclaw/bridges/slack.js +85 -7
- package/dist/src/openclaw/bridges/slack.js.map +1 -1
- package/dist/src/openclaw/bridges/telegram.js +124 -30
- package/dist/src/openclaw/bridges/telegram.js.map +1 -1
- package/dist/src/openclaw/bridges/whatsapp.js +78 -17
- package/dist/src/openclaw/bridges/whatsapp.js.map +1 -1
- package/dist/src/openclaw/bridges/zalo.js +14 -5
- package/dist/src/openclaw/bridges/zalo.js.map +1 -1
- package/dist/src/openclaw/outbound-contract.d.ts +5 -0
- package/dist/src/openclaw/outbound-contract.js +40 -0
- package/dist/src/openclaw/outbound-contract.js.map +1 -0
- package/dist/src/openclaw/private-file.d.ts +26 -0
- package/dist/src/openclaw/private-file.js +411 -0
- package/dist/src/openclaw/private-file.js.map +1 -0
- package/dist/src/openclaw/shared.d.ts +21 -2
- package/dist/src/openclaw/shared.js +115 -18
- package/dist/src/openclaw/shared.js.map +1 -1
- package/dist/src/openclaw/smoke-lock.d.ts +63 -0
- package/dist/src/openclaw/smoke-lock.js +949 -0
- package/dist/src/openclaw/smoke-lock.js.map +1 -0
- package/dist/src/openclaw.d.ts +16 -8
- package/dist/src/openclaw.js +194 -52
- package/dist/src/openclaw.js.map +1 -1
- package/dist/src/providers/builtin/discord.d.ts +10 -1
- package/dist/src/providers/builtin/discord.js +144 -18
- package/dist/src/providers/builtin/discord.js.map +1 -1
- package/dist/src/providers/builtin/external-webhook-auth.d.ts +11 -0
- package/dist/src/providers/builtin/external-webhook-auth.js +10 -0
- package/dist/src/providers/builtin/external-webhook-auth.js.map +1 -0
- package/dist/src/providers/builtin/feishu.d.ts +19 -2
- package/dist/src/providers/builtin/feishu.js +307 -25
- package/dist/src/providers/builtin/feishu.js.map +1 -1
- package/dist/src/providers/builtin/googlechat.d.ts +20 -1
- package/dist/src/providers/builtin/googlechat.js +178 -19
- package/dist/src/providers/builtin/googlechat.js.map +1 -1
- package/dist/src/providers/builtin/imessage.d.ts +4 -0
- package/dist/src/providers/builtin/imessage.js +26 -11
- package/dist/src/providers/builtin/imessage.js.map +1 -1
- package/dist/src/providers/builtin/loopback.js +92 -30
- package/dist/src/providers/builtin/loopback.js.map +1 -1
- package/dist/src/providers/builtin/matrix.d.ts +11 -1
- package/dist/src/providers/builtin/matrix.js +53 -29
- package/dist/src/providers/builtin/matrix.js.map +1 -1
- package/dist/src/providers/builtin/mattermost.d.ts +10 -0
- package/dist/src/providers/builtin/mattermost.js +38 -15
- package/dist/src/providers/builtin/mattermost.js.map +1 -1
- package/dist/src/providers/builtin/msteams.d.ts +17 -1
- package/dist/src/providers/builtin/msteams.js +113 -14
- package/dist/src/providers/builtin/msteams.js.map +1 -1
- package/dist/src/providers/builtin/native-local-mock.d.ts +2 -9
- package/dist/src/providers/builtin/native-local-mock.js +12 -35
- package/dist/src/providers/builtin/native-local-mock.js.map +1 -1
- package/dist/src/providers/builtin/script.d.ts +11 -15
- package/dist/src/providers/builtin/script.js +566 -104
- package/dist/src/providers/builtin/script.js.map +1 -1
- package/dist/src/providers/builtin/slack.d.ts +6 -0
- package/dist/src/providers/builtin/slack.js +99 -40
- package/dist/src/providers/builtin/slack.js.map +1 -1
- package/dist/src/providers/builtin/telegram.d.ts +6 -0
- package/dist/src/providers/builtin/telegram.js +64 -43
- package/dist/src/providers/builtin/telegram.js.map +1 -1
- package/dist/src/providers/builtin/whatsapp.d.ts +28 -8
- package/dist/src/providers/builtin/whatsapp.js +567 -30
- package/dist/src/providers/builtin/whatsapp.js.map +1 -1
- package/dist/src/providers/builtin/zalo.js +30 -19
- package/dist/src/providers/builtin/zalo.js.map +1 -1
- package/dist/src/providers/catalog.d.ts +3 -3
- package/dist/src/providers/catalog.js +3 -3
- package/dist/src/providers/catalog.js.map +1 -1
- package/dist/src/providers/local-mock.d.ts +11 -2
- package/dist/src/providers/local-mock.js +322 -96
- package/dist/src/providers/local-mock.js.map +1 -1
- package/dist/src/providers/native-ids.d.ts +1 -0
- package/dist/src/providers/native-ids.js +6 -1
- package/dist/src/providers/native-ids.js.map +1 -1
- package/dist/src/providers/recorder.d.ts +30 -2
- package/dist/src/providers/recorder.js +539 -70
- package/dist/src/providers/recorder.js.map +1 -1
- package/dist/src/providers/registry.d.ts +25 -1
- package/dist/src/providers/registry.js +280 -40
- package/dist/src/providers/registry.js.map +1 -1
- package/dist/src/providers/signed-jwt.d.ts +29 -0
- package/dist/src/providers/signed-jwt.js +202 -0
- package/dist/src/providers/signed-jwt.js.map +1 -0
- package/dist/src/providers/slack-ids.js.map +1 -1
- package/dist/src/providers/target-normalizers.d.ts +26 -0
- package/dist/src/providers/target-normalizers.js +276 -0
- package/dist/src/providers/target-normalizers.js.map +1 -0
- package/dist/src/providers/types.d.ts +5 -0
- package/dist/src/providers/types.js.map +1 -1
- package/dist/src/providers/webhook-server.d.ts +2 -0
- package/dist/src/providers/webhook-server.js +72 -25
- package/dist/src/providers/webhook-server.js.map +1 -1
- package/dist/src/servers/http.d.ts +23 -3
- package/dist/src/servers/http.js +213 -20
- package/dist/src/servers/http.js.map +1 -1
- package/dist/src/servers/index.js +20 -21
- package/dist/src/servers/index.js.map +1 -1
- package/dist/src/servers/matrix.js +465 -51
- package/dist/src/servers/matrix.js.map +1 -1
- package/dist/src/servers/mattermost.d.ts +5 -0
- package/dist/src/servers/mattermost.js +306 -58
- package/dist/src/servers/mattermost.js.map +1 -1
- package/dist/src/servers/pending-events.d.ts +2 -0
- package/dist/src/servers/pending-events.js +11 -0
- package/dist/src/servers/pending-events.js.map +1 -0
- package/dist/src/servers/recorder.d.ts +5 -0
- package/dist/src/servers/recorder.js +46 -3
- package/dist/src/servers/recorder.js.map +1 -1
- package/dist/src/servers/signal.d.ts +2 -0
- package/dist/src/servers/signal.js +444 -56
- package/dist/src/servers/signal.js.map +1 -1
- package/dist/src/servers/slack.d.ts +5 -0
- package/dist/src/servers/slack.js +515 -49
- package/dist/src/servers/slack.js.map +1 -1
- package/dist/src/servers/telegram.d.ts +111 -0
- package/dist/src/servers/telegram.js +811 -152
- package/dist/src/servers/telegram.js.map +1 -1
- package/dist/src/servers/webhook-target.d.ts +40 -0
- package/dist/src/servers/webhook-target.js +349 -0
- package/dist/src/servers/webhook-target.js.map +1 -0
- package/dist/src/servers/websocket.d.ts +2 -0
- package/dist/src/servers/websocket.js +29 -0
- package/dist/src/servers/websocket.js.map +1 -0
- package/dist/src/servers/whatsapp-baileys-websocket.d.ts +65 -1
- package/dist/src/servers/whatsapp-baileys-websocket.js +723 -99
- package/dist/src/servers/whatsapp-baileys-websocket.js.map +1 -1
- package/dist/src/servers/whatsapp-jid.d.ts +5 -0
- package/dist/src/servers/whatsapp-jid.js +32 -0
- package/dist/src/servers/whatsapp-jid.js.map +1 -0
- package/dist/src/servers/whatsapp-wire/binary-node.d.ts +5 -0
- package/dist/src/servers/whatsapp-wire/binary-node.js +87 -20
- package/dist/src/servers/whatsapp-wire/binary-node.js.map +1 -1
- package/dist/src/servers/whatsapp-wire/crypto.d.ts +6 -1
- package/dist/src/servers/whatsapp-wire/crypto.js +99 -45
- package/dist/src/servers/whatsapp-wire/crypto.js.map +1 -1
- package/dist/src/servers/whatsapp-wire/handshake.js +39 -4
- package/dist/src/servers/whatsapp-wire/handshake.js.map +1 -1
- package/dist/src/servers/whatsapp-wire/signal.js.map +1 -1
- package/dist/src/servers/whatsapp.d.ts +12 -7
- package/dist/src/servers/whatsapp.js +269 -107
- package/dist/src/servers/whatsapp.js.map +1 -1
- package/dist/src/servers/zalo.d.ts +14 -0
- package/dist/src/servers/zalo.js +521 -88
- package/dist/src/servers/zalo.js.map +1 -1
- package/docs/channel-setup.md +197 -19
- package/fixtures/examples/crabline.example.yaml +10 -0
- package/package.json +20 -15
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createAdminInboundRequest, createOpenClawCrablineProviderBridge, DEFAULT_ACCOUNT_ID, isRecord, qaTargetForInbound, readString, } from "../shared.js";
|
|
1
|
+
import { createAdminInboundRequest, createOpenClawCrablineProviderBridge, DEFAULT_ACCOUNT_ID, isRecord, qaTargetForInbound, readNonBlankString, readString, } from "../shared.js";
|
|
2
2
|
import { slackTargetKey, SLACK_CHANNEL_ID_RULE, SLACK_SEND_TARGET_ID_RULE, SLACK_TS_RULE, SLACK_USER_ID_RULE, } from "../../providers/slack-ids.js";
|
|
3
3
|
function requireSlackSendTargetId(value, label) {
|
|
4
4
|
const trimmed = value.trim();
|
|
@@ -7,6 +7,15 @@ function requireSlackSendTargetId(value, label) {
|
|
|
7
7
|
}
|
|
8
8
|
return trimmed;
|
|
9
9
|
}
|
|
10
|
+
function requireSlackTargetKind(parsed, targetId) {
|
|
11
|
+
if (parsed.native || parsed.threadId !== undefined) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const nativeKind = /^[DUW]/u.test(targetId) ? "direct" : "group";
|
|
15
|
+
if (parsed.kind !== nativeKind) {
|
|
16
|
+
throw new Error("Slack target kind does not match the native conversation id.");
|
|
17
|
+
}
|
|
18
|
+
}
|
|
10
19
|
function requireSlackChannelId(value, label) {
|
|
11
20
|
const trimmed = value.trim();
|
|
12
21
|
if (!SLACK_CHANNEL_ID_RULE.pattern.test(trimmed)) {
|
|
@@ -31,19 +40,85 @@ function requireSlackThreadTs(value, label) {
|
|
|
31
40
|
}
|
|
32
41
|
return trimmed;
|
|
33
42
|
}
|
|
43
|
+
function slackConversationKind(channel) {
|
|
44
|
+
return channel.startsWith("D") ? "direct" : "group";
|
|
45
|
+
}
|
|
46
|
+
function structuredSlackValues(value) {
|
|
47
|
+
if (Array.isArray(value)) {
|
|
48
|
+
return value;
|
|
49
|
+
}
|
|
50
|
+
if (typeof value !== "string") {
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
const parsed = JSON.parse(value);
|
|
55
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function collectSlackFallbackText(value, output) {
|
|
62
|
+
if (Array.isArray(value)) {
|
|
63
|
+
for (const entry of value) {
|
|
64
|
+
collectSlackFallbackText(entry, output);
|
|
65
|
+
}
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (!isRecord(value)) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
for (const key of ["fallback", "title", "alt_text"]) {
|
|
72
|
+
const text = readNonBlankString(value[key]);
|
|
73
|
+
if (text) {
|
|
74
|
+
output.push(text);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const text = value.text;
|
|
78
|
+
if (typeof text === "string" && text.trim()) {
|
|
79
|
+
output.push(text);
|
|
80
|
+
}
|
|
81
|
+
else if (isRecord(text)) {
|
|
82
|
+
collectSlackFallbackText(text, output);
|
|
83
|
+
}
|
|
84
|
+
for (const key of ["blocks", "elements", "fields"]) {
|
|
85
|
+
collectSlackFallbackText(value[key], output);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function slackOutboundText(body) {
|
|
89
|
+
if (typeof body.text === "string") {
|
|
90
|
+
if (body.text.trim()) {
|
|
91
|
+
return body.text;
|
|
92
|
+
}
|
|
93
|
+
if (body.text.length > 0) {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const fallback = [];
|
|
98
|
+
collectSlackFallbackText(structuredSlackValues(body.blocks), fallback);
|
|
99
|
+
collectSlackFallbackText(structuredSlackValues(body.attachments), fallback);
|
|
100
|
+
const unique = [...new Set(fallback)];
|
|
101
|
+
return unique.length > 0 ? unique.join("\n") : undefined;
|
|
102
|
+
}
|
|
34
103
|
export const SLACK_OPENCLAW_CRABLINE_PROVIDER_BRIDGE = createOpenClawCrablineProviderBridge({
|
|
35
104
|
provider: "slack",
|
|
36
105
|
createAdapter(slack) {
|
|
37
106
|
return {
|
|
38
|
-
async probe() {
|
|
107
|
+
async probe(signal) {
|
|
39
108
|
const response = await fetch(`${slack.endpoints.apiRoot}auth.test`, {
|
|
40
109
|
headers: { authorization: `Bearer ${slack.botToken}` },
|
|
41
110
|
method: "POST",
|
|
111
|
+
...(signal ? { signal } : {}),
|
|
42
112
|
});
|
|
43
113
|
if (!response.ok) {
|
|
44
114
|
throw new Error(`Crabline Slack auth.test probe failed with HTTP ${response.status}.`);
|
|
45
115
|
}
|
|
46
|
-
|
|
116
|
+
const result = await response.json();
|
|
117
|
+
if (!isRecord(result) || result.ok !== true) {
|
|
118
|
+
const error = isRecord(result) ? readString(result.error) : undefined;
|
|
119
|
+
throw new Error(`Crabline Slack auth.test probe failed: ${error ?? "unknown_error"}.`);
|
|
120
|
+
}
|
|
121
|
+
return result;
|
|
47
122
|
},
|
|
48
123
|
createBinding() {
|
|
49
124
|
return {
|
|
@@ -90,6 +165,7 @@ export const SLACK_OPENCLAW_CRABLINE_PROVIDER_BRIDGE = createOpenClawCrablinePro
|
|
|
90
165
|
},
|
|
91
166
|
createAgentDelivery(parsed) {
|
|
92
167
|
const to = requireSlackSendTargetId(parsed.id, "Slack target");
|
|
168
|
+
requireSlackTargetKind(parsed, to);
|
|
93
169
|
const threadTs = requireSlackThreadTs(parsed.threadId, "Slack target thread");
|
|
94
170
|
return {
|
|
95
171
|
channel: "slack",
|
|
@@ -100,6 +176,10 @@ export const SLACK_OPENCLAW_CRABLINE_PROVIDER_BRIDGE = createOpenClawCrablinePro
|
|
|
100
176
|
},
|
|
101
177
|
createInbound(input) {
|
|
102
178
|
const channel = requireSlackChannelId(input.conversation.id, "Slack conversation");
|
|
179
|
+
const kind = slackConversationKind(channel);
|
|
180
|
+
if (input.conversation.kind !== kind) {
|
|
181
|
+
throw new Error("Slack inbound conversation kind does not match the native channel id.");
|
|
182
|
+
}
|
|
103
183
|
const user = requireSlackUserId(input.senderId, "Slack sender");
|
|
104
184
|
const threadTs = requireSlackThreadTs(input.threadId, "Slack thread");
|
|
105
185
|
return {
|
|
@@ -115,7 +195,7 @@ export const SLACK_OPENCLAW_CRABLINE_PROVIDER_BRIDGE = createOpenClawCrablinePro
|
|
|
115
195
|
qaTarget: qaTargetForInbound(input),
|
|
116
196
|
stateConversation: {
|
|
117
197
|
id: channel,
|
|
118
|
-
kind
|
|
198
|
+
kind,
|
|
119
199
|
},
|
|
120
200
|
...(threadTs ? { threadId: threadTs } : {}),
|
|
121
201
|
};
|
|
@@ -128,9 +208,7 @@ export const SLACK_OPENCLAW_CRABLINE_PROVIDER_BRIDGE = createOpenClawCrablinePro
|
|
|
128
208
|
return null;
|
|
129
209
|
}
|
|
130
210
|
const channel = readString(event.body.channel);
|
|
131
|
-
const text =
|
|
132
|
-
? event.body.text
|
|
133
|
-
: undefined;
|
|
211
|
+
const text = slackOutboundText(event.body);
|
|
134
212
|
if (!channel || !text) {
|
|
135
213
|
return null;
|
|
136
214
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../../src/openclaw/bridges/slack.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,oCAAoC,EACpC,kBAAkB,EAClB,QAAQ,EACR,kBAAkB,EAClB,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,yBAAyB,EACzB,aAAa,EACb,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AAEtC,SAAS,wBAAwB,CAAC,KAAa,EAAE,KAAa;IAC5D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,kDAAkD,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa,EAAE,KAAa;IACzD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,0CAA0C,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa,EAAE,KAAa;IACtD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,kCAAkC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAyB,EAAE,KAAa;IACpE,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,oCAAoC,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,uCAAuC,GAAG,oCAAoC,CAAC;IAC1F,QAAQ,EAAE,OAAO;IACjB,aAAa,CAAC,KAAK;QACjB,OAAO;YACL,KAAK,CAAC,KAAK;gBACT,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,WAAW,EAAE;oBAClE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,CAAC,QAAQ,EAAE,EAAE;oBACtD,MAAM,EAAE,MAAM;iBACf,CAAC,CAAC;gBACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CAAC,mDAAmD,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;gBACzF,CAAC;gBACD,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC/B,CAAC;YACD,aAAa;gBACX,OAAO;oBACL,SAAS,EAAE,kBAAkB;oBAC7B,OAAO,EAAE,OAAO;oBAChB,2BAA2B,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;wBACrC,GAAG,GAAG;wBACN,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO;wBACtC,eAAe,EAAE,KAAK,CAAC,QAAQ;wBAC/B,oBAAoB,EAAE,KAAK,CAAC,aAAa;qBAC1C,CAAC;oBACF,mBAAmB,EAAE,CAAC,cAAc,GAAG,EAAE,EAAE,EAAE;wBAC3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;wBAClF,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;wBACnE,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;wBACjF,MAAM,mBAAmB,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBAEnF,OAAO;4BACL,GAAG,cAAc;4BACjB,QAAQ,EAAE;gCACR,GAAG,QAAQ;gCACX,KAAK,EAAE;oCACL,GAAG,WAAW;oCACd,OAAO,EAAE,IAAI;oCACb,IAAI,EAAE,MAAM;oCACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;oCACxB,aAAa,EAAE,KAAK,CAAC,aAAa;oCAClC,WAAW,EAAE,eAAe;oCAC5B,QAAQ,EAAE,MAAM;oCAChB,SAAS,EAAE,CAAC,GAAG,CAAC;oCAChB,WAAW,EAAE,MAAM;oCACnB,QAAQ,EAAE;wCACR,GAAG,aAAa;wCAChB,GAAG,EAAE;4CACH,GAAG,mBAAmB;4CACtB,cAAc,EAAE,KAAK;yCACtB;qCACF;iCACF;6BACF;yBACF,CAAC;oBACJ,CAAC;oBACD,iBAAiB,EAAE,CAAC,OAAO,CAAC;iBAC7B,CAAC;YACJ,CAAC;YACD,mBAAmB,CAAC,MAAM;gBACxB,MAAM,EAAE,GAAG,wBAAwB,CAAC,MAAM,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;gBAC/D,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;gBAC9E,OAAO;oBACL,OAAO,EAAE,OAAO;oBAChB,EAAE;oBACF,YAAY,EAAE,OAAO;oBACrB,OAAO,EAAE,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC;iBACtC,CAAC;YACJ,CAAC;YACD,aAAa,CAAC,KAAK;gBACjB,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;gBACnF,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;gBAChE,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;gBACtE,OAAO;oBACL,GAAG,yBAAyB,CAAC,KAAK,CAAC;oBACnC,YAAY,EAAE;wBACZ,OAAO;wBACP,IAAI;wBACJ,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC3D,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACjC,IAAI,EAAE,KAAK,CAAC,IAAI;qBACjB;oBACD,iBAAiB,EAAE,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC;oBACpD,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC;oBACnC,iBAAiB,EAAE;wBACjB,EAAE,EAAE,OAAO;wBACX,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;qBACnD;oBACD,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC5C,CAAC;YACJ,CAAC;YACD,+BAA+B,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE;gBAC/D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC/E,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3E,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC/C,MAAM,IAAI,GACR,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBAC3D,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI;oBACjB,CAAC,CAAC,SAAS,CAAC;gBAChB,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;oBACtB,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAClD,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAC5D,OAAO;oBACL,SAAS,EAAE,kBAAkB;oBAC7B,QAAQ,EAAE,UAAU;oBACpB,UAAU,EAAE,aAAa;oBACzB,IAAI;oBACJ,EAAE,EAAE,sBAAsB,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,iBAAiB;iBACvE,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../../src/openclaw/bridges/slack.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createAdminInboundRequest,\n createOpenClawCrablineProviderBridge,\n DEFAULT_ACCOUNT_ID,\n isRecord,\n qaTargetForInbound,\n readNonBlankString,\n readString,\n} from \"../shared.js\";\nimport {\n slackTargetKey,\n SLACK_CHANNEL_ID_RULE,\n SLACK_SEND_TARGET_ID_RULE,\n SLACK_TS_RULE,\n SLACK_USER_ID_RULE,\n} from \"../../providers/slack-ids.js\";\n\nfunction requireSlackSendTargetId(value: string, label: string): string {\n const trimmed = value.trim();\n if (!SLACK_SEND_TARGET_ID_RULE.pattern.test(trimmed)) {\n throw new Error(`${label} must be a native Slack conversation or user id.`);\n }\n return trimmed;\n}\n\nfunction requireSlackTargetKind(\n parsed: { kind: \"direct\" | \"group\"; native: boolean; threadId?: string },\n targetId: string,\n): void {\n if (parsed.native || parsed.threadId !== undefined) {\n return;\n }\n const nativeKind = /^[DUW]/u.test(targetId) ? \"direct\" : \"group\";\n if (parsed.kind !== nativeKind) {\n throw new Error(\"Slack target kind does not match the native conversation id.\");\n }\n}\n\nfunction requireSlackChannelId(value: string, label: string): string {\n const trimmed = value.trim();\n if (!SLACK_CHANNEL_ID_RULE.pattern.test(trimmed)) {\n throw new Error(`${label} must be a native Slack conversation id.`);\n }\n return trimmed;\n}\n\nfunction requireSlackUserId(value: string, label: string): string {\n const trimmed = value.trim();\n if (!SLACK_USER_ID_RULE.pattern.test(trimmed)) {\n throw new Error(`${label} must be a native Slack user id.`);\n }\n return trimmed;\n}\n\nfunction requireSlackThreadTs(value: string | undefined, label: string): string | undefined {\n const trimmed = value?.trim();\n if (!trimmed) {\n return undefined;\n }\n if (!SLACK_TS_RULE.pattern.test(trimmed)) {\n throw new Error(`${label} must be a native Slack timestamp.`);\n }\n return trimmed;\n}\n\nfunction slackConversationKind(channel: string): \"direct\" | \"group\" {\n return channel.startsWith(\"D\") ? \"direct\" : \"group\";\n}\n\nfunction structuredSlackValues(value: unknown): unknown[] {\n if (Array.isArray(value)) {\n return value;\n }\n if (typeof value !== \"string\") {\n return [];\n }\n try {\n const parsed: unknown = JSON.parse(value);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n}\n\nfunction collectSlackFallbackText(value: unknown, output: string[]): void {\n if (Array.isArray(value)) {\n for (const entry of value) {\n collectSlackFallbackText(entry, output);\n }\n return;\n }\n if (!isRecord(value)) {\n return;\n }\n for (const key of [\"fallback\", \"title\", \"alt_text\"] as const) {\n const text = readNonBlankString(value[key]);\n if (text) {\n output.push(text);\n }\n }\n const text = value.text;\n if (typeof text === \"string\" && text.trim()) {\n output.push(text);\n } else if (isRecord(text)) {\n collectSlackFallbackText(text, output);\n }\n for (const key of [\"blocks\", \"elements\", \"fields\"] as const) {\n collectSlackFallbackText(value[key], output);\n }\n}\n\nfunction slackOutboundText(body: Record<string, unknown>): string | undefined {\n if (typeof body.text === \"string\") {\n if (body.text.trim()) {\n return body.text;\n }\n if (body.text.length > 0) {\n return undefined;\n }\n }\n const fallback: string[] = [];\n collectSlackFallbackText(structuredSlackValues(body.blocks), fallback);\n collectSlackFallbackText(structuredSlackValues(body.attachments), fallback);\n const unique = [...new Set(fallback)];\n return unique.length > 0 ? unique.join(\"\\n\") : undefined;\n}\n\nexport const SLACK_OPENCLAW_CRABLINE_PROVIDER_BRIDGE = createOpenClawCrablineProviderBridge({\n provider: \"slack\",\n createAdapter(slack) {\n return {\n async probe(signal) {\n const response = await fetch(`${slack.endpoints.apiRoot}auth.test`, {\n headers: { authorization: `Bearer ${slack.botToken}` },\n method: \"POST\",\n ...(signal ? { signal } : {}),\n });\n if (!response.ok) {\n throw new Error(`Crabline Slack auth.test probe failed with HTTP ${response.status}.`);\n }\n const result: unknown = await response.json();\n if (!isRecord(result) || result.ok !== true) {\n const error = isRecord(result) ? readString(result.error) : undefined;\n throw new Error(`Crabline Slack auth.test probe failed: ${error ?? \"unknown_error\"}.`);\n }\n return result;\n },\n createBinding() {\n return {\n accountId: DEFAULT_ACCOUNT_ID,\n channel: \"slack\",\n createChannelDriverSmokeEnv: (env) => ({\n ...env,\n SLACK_API_URL: slack.endpoints.apiRoot,\n SLACK_BOT_TOKEN: slack.botToken,\n SLACK_SIGNING_SECRET: slack.signingSecret,\n }),\n createGatewayConfig: (openclawConfig = {}) => {\n const channels = isRecord(openclawConfig.channels) ? openclawConfig.channels : {};\n const slackConfig = isRecord(channels.slack) ? channels.slack : {};\n const slackChannels = isRecord(slackConfig.channels) ? slackConfig.channels : {};\n const defaultSlackChannel = isRecord(slackChannels[\"*\"]) ? slackChannels[\"*\"] : {};\n\n return {\n ...openclawConfig,\n channels: {\n ...channels,\n slack: {\n ...slackConfig,\n enabled: true,\n mode: \"http\",\n botToken: slack.botToken,\n signingSecret: slack.signingSecret,\n webhookPath: \"/slack/events\",\n dmPolicy: \"open\",\n allowFrom: [\"*\"],\n groupPolicy: \"open\",\n channels: {\n ...slackChannels,\n \"*\": {\n ...defaultSlackChannel,\n requireMention: false,\n },\n },\n },\n },\n };\n },\n requiredPluginIds: [\"slack\"],\n };\n },\n createAgentDelivery(parsed) {\n const to = requireSlackSendTargetId(parsed.id, \"Slack target\");\n requireSlackTargetKind(parsed, to);\n const threadTs = requireSlackThreadTs(parsed.threadId, \"Slack target thread\");\n return {\n channel: \"slack\",\n to,\n replyChannel: \"slack\",\n replyTo: slackTargetKey(to, threadTs),\n };\n },\n createInbound(input) {\n const channel = requireSlackChannelId(input.conversation.id, \"Slack conversation\");\n const kind = slackConversationKind(channel);\n if (input.conversation.kind !== kind) {\n throw new Error(\"Slack inbound conversation kind does not match the native channel id.\");\n }\n const user = requireSlackUserId(input.senderId, \"Slack sender\");\n const threadTs = requireSlackThreadTs(input.threadId, \"Slack thread\");\n return {\n ...createAdminInboundRequest(slack),\n providerBody: {\n channel,\n user,\n ...(input.senderName ? { username: input.senderName } : {}),\n ...(threadTs ? { threadTs } : {}),\n text: input.text,\n },\n providerTargetKey: slackTargetKey(channel, threadTs),\n qaTarget: qaTargetForInbound(input),\n stateConversation: {\n id: channel,\n kind,\n },\n ...(threadTs ? { threadId: threadTs } : {}),\n };\n },\n createOutboundFromRecorderEvent({ event, targetByProviderTarget }) {\n if (!isRecord(event) || event.type !== \"api\" || typeof event.path !== \"string\") {\n return null;\n }\n if (!event.path.endsWith(\"/api/chat.postMessage\") || !isRecord(event.body)) {\n return null;\n }\n const channel = readString(event.body.channel);\n const text = slackOutboundText(event.body);\n if (!channel || !text) {\n return null;\n }\n const threadTs = readString(event.body.thread_ts);\n const providerTargetKey = slackTargetKey(channel, threadTs);\n return {\n accountId: DEFAULT_ACCOUNT_ID,\n senderId: \"openclaw\",\n senderName: \"OpenClaw QA\",\n text,\n to: targetByProviderTarget.get(providerTargetKey) ?? providerTargetKey,\n };\n },\n };\n },\n});\n"]}
|
|
@@ -1,28 +1,118 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { createAdminInboundRequest, createOpenClawCrablineProviderBridge, DEFAULT_ACCOUNT_ID, isRecord, qaTargetForInbound, readNonBlankString, readString, } from "../shared.js";
|
|
3
|
+
const TELEGRAM_SYMBOLIC_DIRECT_ID_BASE = 1n << 51n;
|
|
4
|
+
const TELEGRAM_SYMBOLIC_DIRECT_ID_MASK = TELEGRAM_SYMBOLIC_DIRECT_ID_BASE - 1n;
|
|
5
|
+
const TELEGRAM_SYMBOLIC_GROUP_ID_BASE = 1000000000000n;
|
|
6
|
+
const TELEGRAM_SYMBOLIC_GROUP_ID_RANGE = 10000000000n;
|
|
7
|
+
const TELEGRAM_OUTBOUND_METHOD_RE = /\/(sendAnimation|sendAudio|sendDocument|sendMessage|sendPhoto|sendVideo)$/iu;
|
|
8
|
+
const TELEGRAM_USERNAME_RE = /^@[A-Za-z][A-Za-z0-9_]{3,31}$/u;
|
|
6
9
|
function normalizeTelegramChatId(kind, id) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
const value = id.trim();
|
|
11
|
+
if (!value) {
|
|
12
|
+
throw new Error("Telegram target is required.");
|
|
13
|
+
}
|
|
14
|
+
if (/^-?\d+$/u.test(value)) {
|
|
15
|
+
const numericId = BigInt(value);
|
|
16
|
+
if (numericId === 0n || (kind === "direct" ? numericId < 0n : numericId > 0n)) {
|
|
17
|
+
throw new Error("Telegram numeric target sign does not match the declared target kind.");
|
|
18
|
+
}
|
|
19
|
+
if (numericId < BigInt(Number.MIN_SAFE_INTEGER) ||
|
|
20
|
+
numericId > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
21
|
+
throw new Error("Telegram numeric target must be a safe integer.");
|
|
22
|
+
}
|
|
23
|
+
return numericId.toString();
|
|
24
|
+
}
|
|
25
|
+
if (kind === "group" && TELEGRAM_USERNAME_RE.test(value)) {
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
if (value.startsWith("@")) {
|
|
29
|
+
throw new Error("Telegram usernames must contain 4-32 letters, digits, or underscores.");
|
|
30
|
+
}
|
|
31
|
+
const hash = createHash("sha256").update(`${kind}:${value}`).digest().readBigUInt64BE();
|
|
32
|
+
if (kind === "group") {
|
|
33
|
+
return String(-(TELEGRAM_SYMBOLIC_GROUP_ID_BASE + (hash % TELEGRAM_SYMBOLIC_GROUP_ID_RANGE)));
|
|
34
|
+
}
|
|
35
|
+
return String(TELEGRAM_SYMBOLIC_DIRECT_ID_BASE + (hash & TELEGRAM_SYMBOLIC_DIRECT_ID_MASK));
|
|
12
36
|
}
|
|
13
37
|
function telegramTargetKey(chatId, threadId) {
|
|
14
38
|
return threadId === undefined ? chatId : `${chatId}:topic:${threadId}`;
|
|
15
39
|
}
|
|
40
|
+
function canonicalTelegramRecorderChatId(value) {
|
|
41
|
+
const chatId = readString(value);
|
|
42
|
+
if (!chatId) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
if (/^-?\d+$/u.test(chatId)) {
|
|
46
|
+
const numericId = BigInt(chatId);
|
|
47
|
+
if (numericId === 0n ||
|
|
48
|
+
numericId < BigInt(Number.MIN_SAFE_INTEGER) ||
|
|
49
|
+
numericId > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
return numericId.toString();
|
|
53
|
+
}
|
|
54
|
+
return TELEGRAM_USERNAME_RE.test(chatId) ? chatId : undefined;
|
|
55
|
+
}
|
|
56
|
+
function telegramBotCommandEntity(text, commandName) {
|
|
57
|
+
if (!/^[a-z0-9_]{1,32}$/u.test(commandName)) {
|
|
58
|
+
throw new Error("Telegram native command names must contain 1-32 lowercase letters, digits, or underscores.");
|
|
59
|
+
}
|
|
60
|
+
const commandPrefix = `/${commandName}`;
|
|
61
|
+
const token = text.match(/^\S+/u)?.[0];
|
|
62
|
+
if (!token ||
|
|
63
|
+
(token.toLowerCase() !== commandPrefix &&
|
|
64
|
+
!new RegExp(`^/${commandName}@[A-Za-z][A-Za-z0-9_]{4,31}$`, "iu").test(token))) {
|
|
65
|
+
throw new Error(`Telegram native command text must start with ${commandPrefix}.`);
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
length: token.length,
|
|
69
|
+
offset: 0,
|
|
70
|
+
type: "bot_command",
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function parseTelegramThreadTargetId(value) {
|
|
74
|
+
if (value === undefined) {
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
const trimmed = readString(value);
|
|
78
|
+
if (!trimmed || !/^[1-9]\d*$/u.test(trimmed)) {
|
|
79
|
+
throw new Error("Telegram thread target must be a safe positive integer.");
|
|
80
|
+
}
|
|
81
|
+
const threadId = Number(trimmed);
|
|
82
|
+
if (!Number.isSafeInteger(threadId)) {
|
|
83
|
+
throw new Error("Telegram thread target must be a safe positive integer.");
|
|
84
|
+
}
|
|
85
|
+
return threadId;
|
|
86
|
+
}
|
|
16
87
|
export const TELEGRAM_OPENCLAW_CRABLINE_PROVIDER_BRIDGE = createOpenClawCrablineProviderBridge({
|
|
17
88
|
provider: "telegram",
|
|
18
89
|
createAdapter(telegram) {
|
|
19
90
|
return {
|
|
20
|
-
async probe() {
|
|
21
|
-
const response = await fetch(`${telegram.endpoints.apiRoot}/bot${telegram.botToken}/getMe
|
|
91
|
+
async probe(signal) {
|
|
92
|
+
const response = await fetch(`${telegram.endpoints.apiRoot}/bot${telegram.botToken}/getMe`, signal ? { signal } : {});
|
|
22
93
|
if (!response.ok) {
|
|
23
94
|
throw new Error(`Crabline Telegram getMe probe failed with HTTP ${response.status}.`);
|
|
24
95
|
}
|
|
25
|
-
|
|
96
|
+
const payload = await response.json();
|
|
97
|
+
if (!isRecord(payload) || payload.ok !== true) {
|
|
98
|
+
const errorCode = readString(isRecord(payload) ? payload.error_code : undefined);
|
|
99
|
+
const description = readNonBlankString(isRecord(payload) ? payload.description : undefined);
|
|
100
|
+
const detail = description ?? (errorCode ? `error ${errorCode}` : "invalid response");
|
|
101
|
+
throw new Error(`Crabline Telegram getMe probe failed: ${detail}.`);
|
|
102
|
+
}
|
|
103
|
+
const result = payload.result;
|
|
104
|
+
if (!isRecord(result) ||
|
|
105
|
+
typeof result.id !== "number" ||
|
|
106
|
+
!Number.isSafeInteger(result.id) ||
|
|
107
|
+
result.id <= 0 ||
|
|
108
|
+
result.is_bot !== true ||
|
|
109
|
+
!readNonBlankString(result.first_name) ||
|
|
110
|
+
(result.username !== undefined &&
|
|
111
|
+
(typeof result.username !== "string" ||
|
|
112
|
+
!TELEGRAM_USERNAME_RE.test(`@${result.username}`)))) {
|
|
113
|
+
throw new Error("Crabline Telegram getMe probe failed: invalid response.");
|
|
114
|
+
}
|
|
115
|
+
return payload;
|
|
26
116
|
},
|
|
27
117
|
createBinding() {
|
|
28
118
|
return {
|
|
@@ -75,8 +165,12 @@ export const TELEGRAM_OPENCLAW_CRABLINE_PROVIDER_BRIDGE = createOpenClawCrabline
|
|
|
75
165
|
};
|
|
76
166
|
},
|
|
77
167
|
createAgentDelivery(parsed) {
|
|
78
|
-
const
|
|
79
|
-
|
|
168
|
+
const kind = parsed.native &&
|
|
169
|
+
(/^-\d+$/u.test(parsed.id.trim()) || TELEGRAM_USERNAME_RE.test(parsed.id.trim()))
|
|
170
|
+
? "group"
|
|
171
|
+
: parsed.kind;
|
|
172
|
+
const chatId = normalizeTelegramChatId(kind, parsed.id);
|
|
173
|
+
const threadId = parseTelegramThreadTargetId(parsed.threadId);
|
|
80
174
|
const to = telegramTargetKey(chatId, threadId);
|
|
81
175
|
return {
|
|
82
176
|
channel: "telegram",
|
|
@@ -88,23 +182,17 @@ export const TELEGRAM_OPENCLAW_CRABLINE_PROVIDER_BRIDGE = createOpenClawCrabline
|
|
|
88
182
|
createInbound(input) {
|
|
89
183
|
const kind = input.conversation.kind === "direct" ? "direct" : "group";
|
|
90
184
|
const chatId = normalizeTelegramChatId(kind, input.conversation.id);
|
|
91
|
-
const threadId =
|
|
185
|
+
const threadId = parseTelegramThreadTargetId(input.threadId);
|
|
92
186
|
return {
|
|
93
187
|
...createAdminInboundRequest(telegram),
|
|
94
188
|
providerBody: {
|
|
95
189
|
chatId,
|
|
96
|
-
fromId:
|
|
190
|
+
fromId: Number(normalizeTelegramChatId("direct", input.senderId)),
|
|
97
191
|
fromName: input.senderName ?? input.senderId,
|
|
98
192
|
...(threadId !== undefined ? { messageThreadId: threadId } : {}),
|
|
99
193
|
...(input.nativeCommand
|
|
100
194
|
? {
|
|
101
|
-
entities: [
|
|
102
|
-
{
|
|
103
|
-
length: input.nativeCommand.name.length + 1,
|
|
104
|
-
offset: 0,
|
|
105
|
-
type: "bot_command",
|
|
106
|
-
},
|
|
107
|
-
],
|
|
195
|
+
entities: [telegramBotCommandEntity(input.text, input.nativeCommand.name)],
|
|
108
196
|
}
|
|
109
197
|
: {}),
|
|
110
198
|
text: input.text,
|
|
@@ -122,18 +210,24 @@ export const TELEGRAM_OPENCLAW_CRABLINE_PROVIDER_BRIDGE = createOpenClawCrabline
|
|
|
122
210
|
if (!isRecord(event) || event.type !== "api" || typeof event.path !== "string") {
|
|
123
211
|
return null;
|
|
124
212
|
}
|
|
125
|
-
const method = TELEGRAM_OUTBOUND_METHOD_RE.exec(event.path)?.[1];
|
|
213
|
+
const method = TELEGRAM_OUTBOUND_METHOD_RE.exec(event.path)?.[1]?.toLowerCase();
|
|
126
214
|
if (!method || !isRecord(event.body)) {
|
|
127
215
|
return null;
|
|
128
216
|
}
|
|
129
|
-
const chatId =
|
|
130
|
-
const text = method === "
|
|
131
|
-
? event.body.text
|
|
132
|
-
:
|
|
217
|
+
const chatId = canonicalTelegramRecorderChatId(event.body.chat_id);
|
|
218
|
+
const text = method === "sendmessage"
|
|
219
|
+
? readNonBlankString(event.body.text)
|
|
220
|
+
: readNonBlankString(event.body.caption);
|
|
133
221
|
if (!chatId || !text) {
|
|
134
222
|
return null;
|
|
135
223
|
}
|
|
136
|
-
|
|
224
|
+
let threadId;
|
|
225
|
+
try {
|
|
226
|
+
threadId = parseTelegramThreadTargetId(event.body.message_thread_id);
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
137
231
|
const providerTargetKey = telegramTargetKey(chatId, threadId);
|
|
138
232
|
return {
|
|
139
233
|
accountId: DEFAULT_ACCOUNT_ID,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../../../src/openclaw/bridges/telegram.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../../../src/openclaw/bridges/telegram.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport {\n createAdminInboundRequest,\n createOpenClawCrablineProviderBridge,\n DEFAULT_ACCOUNT_ID,\n isRecord,\n qaTargetForInbound,\n readNonBlankString,\n readString,\n} from \"../shared.js\";\n\nconst TELEGRAM_SYMBOLIC_DIRECT_ID_BASE = 1n << 51n;\nconst TELEGRAM_SYMBOLIC_DIRECT_ID_MASK = TELEGRAM_SYMBOLIC_DIRECT_ID_BASE - 1n;\nconst TELEGRAM_SYMBOLIC_GROUP_ID_BASE = 1_000_000_000_000n;\nconst TELEGRAM_SYMBOLIC_GROUP_ID_RANGE = 10_000_000_000n;\nconst TELEGRAM_OUTBOUND_METHOD_RE =\n /\\/(sendAnimation|sendAudio|sendDocument|sendMessage|sendPhoto|sendVideo)$/iu;\nconst TELEGRAM_USERNAME_RE = /^@[A-Za-z][A-Za-z0-9_]{3,31}$/u;\n\nfunction normalizeTelegramChatId(kind: \"direct\" | \"group\", id: string): string {\n const value = id.trim();\n if (!value) {\n throw new Error(\"Telegram target is required.\");\n }\n if (/^-?\\d+$/u.test(value)) {\n const numericId = BigInt(value);\n if (numericId === 0n || (kind === \"direct\" ? numericId < 0n : numericId > 0n)) {\n throw new Error(\"Telegram numeric target sign does not match the declared target kind.\");\n }\n if (\n numericId < BigInt(Number.MIN_SAFE_INTEGER) ||\n numericId > BigInt(Number.MAX_SAFE_INTEGER)\n ) {\n throw new Error(\"Telegram numeric target must be a safe integer.\");\n }\n return numericId.toString();\n }\n if (kind === \"group\" && TELEGRAM_USERNAME_RE.test(value)) {\n return value;\n }\n if (value.startsWith(\"@\")) {\n throw new Error(\"Telegram usernames must contain 4-32 letters, digits, or underscores.\");\n }\n const hash = createHash(\"sha256\").update(`${kind}:${value}`).digest().readBigUInt64BE();\n if (kind === \"group\") {\n return String(-(TELEGRAM_SYMBOLIC_GROUP_ID_BASE + (hash % TELEGRAM_SYMBOLIC_GROUP_ID_RANGE)));\n }\n return String(TELEGRAM_SYMBOLIC_DIRECT_ID_BASE + (hash & TELEGRAM_SYMBOLIC_DIRECT_ID_MASK));\n}\n\nfunction telegramTargetKey(chatId: string, threadId?: number) {\n return threadId === undefined ? chatId : `${chatId}:topic:${threadId}`;\n}\n\nfunction canonicalTelegramRecorderChatId(value: unknown): string | undefined {\n const chatId = readString(value);\n if (!chatId) {\n return undefined;\n }\n if (/^-?\\d+$/u.test(chatId)) {\n const numericId = BigInt(chatId);\n if (\n numericId === 0n ||\n numericId < BigInt(Number.MIN_SAFE_INTEGER) ||\n numericId > BigInt(Number.MAX_SAFE_INTEGER)\n ) {\n return undefined;\n }\n return numericId.toString();\n }\n return TELEGRAM_USERNAME_RE.test(chatId) ? chatId : undefined;\n}\n\nfunction telegramBotCommandEntity(text: string, commandName: string) {\n if (!/^[a-z0-9_]{1,32}$/u.test(commandName)) {\n throw new Error(\n \"Telegram native command names must contain 1-32 lowercase letters, digits, or underscores.\",\n );\n }\n const commandPrefix = `/${commandName}`;\n const token = text.match(/^\\S+/u)?.[0];\n if (\n !token ||\n (token.toLowerCase() !== commandPrefix &&\n !new RegExp(`^/${commandName}@[A-Za-z][A-Za-z0-9_]{4,31}$`, \"iu\").test(token))\n ) {\n throw new Error(`Telegram native command text must start with ${commandPrefix}.`);\n }\n return {\n length: token.length,\n offset: 0,\n type: \"bot_command\",\n } as const;\n}\n\nfunction parseTelegramThreadTargetId(value: unknown): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n const trimmed = readString(value);\n if (!trimmed || !/^[1-9]\\d*$/u.test(trimmed)) {\n throw new Error(\"Telegram thread target must be a safe positive integer.\");\n }\n const threadId = Number(trimmed);\n if (!Number.isSafeInteger(threadId)) {\n throw new Error(\"Telegram thread target must be a safe positive integer.\");\n }\n return threadId;\n}\n\nexport const TELEGRAM_OPENCLAW_CRABLINE_PROVIDER_BRIDGE = createOpenClawCrablineProviderBridge({\n provider: \"telegram\",\n createAdapter(telegram) {\n return {\n async probe(signal) {\n const response = await fetch(\n `${telegram.endpoints.apiRoot}/bot${telegram.botToken}/getMe`,\n signal ? { signal } : {},\n );\n if (!response.ok) {\n throw new Error(`Crabline Telegram getMe probe failed with HTTP ${response.status}.`);\n }\n const payload: unknown = await response.json();\n if (!isRecord(payload) || payload.ok !== true) {\n const errorCode = readString(isRecord(payload) ? payload.error_code : undefined);\n const description = readNonBlankString(\n isRecord(payload) ? payload.description : undefined,\n );\n const detail = description ?? (errorCode ? `error ${errorCode}` : \"invalid response\");\n throw new Error(`Crabline Telegram getMe probe failed: ${detail}.`);\n }\n const result = payload.result;\n if (\n !isRecord(result) ||\n typeof result.id !== \"number\" ||\n !Number.isSafeInteger(result.id) ||\n result.id <= 0 ||\n result.is_bot !== true ||\n !readNonBlankString(result.first_name) ||\n (result.username !== undefined &&\n (typeof result.username !== \"string\" ||\n !TELEGRAM_USERNAME_RE.test(`@${result.username}`)))\n ) {\n throw new Error(\"Crabline Telegram getMe probe failed: invalid response.\");\n }\n return payload;\n },\n createBinding() {\n return {\n accountId: DEFAULT_ACCOUNT_ID,\n channel: \"telegram\",\n createChannelDriverSmokeEnv: (env) => ({\n ...env,\n TELEGRAM_BOT_TOKEN: telegram.botToken,\n }),\n createGatewayConfig: (openclawConfig = {}) => {\n const channels = isRecord(openclawConfig.channels) ? openclawConfig.channels : {};\n const telegramConfig = isRecord(channels.telegram) ? channels.telegram : {};\n const groups = isRecord(telegramConfig.groups) ? telegramConfig.groups : {};\n const defaultGroup = isRecord(groups[\"*\"]) ? groups[\"*\"] : {};\n const messages = isRecord(openclawConfig.messages) ? openclawConfig.messages : {};\n const groupChat = isRecord(messages.groupChat) ? messages.groupChat : {};\n\n return {\n ...openclawConfig,\n channels: {\n ...channels,\n telegram: {\n ...telegramConfig,\n enabled: true,\n botToken: telegram.botToken,\n apiRoot: telegram.endpoints.apiRoot,\n dmPolicy: \"open\",\n groupPolicy: \"open\",\n allowFrom: [\"*\"],\n groupAllowFrom: [\"*\"],\n groups: {\n ...groups,\n \"*\": {\n ...defaultGroup,\n requireMention: false,\n },\n },\n },\n },\n messages: {\n ...messages,\n groupChat: {\n ...groupChat,\n mentionPatterns: [\"\\\\b@?openclaw\\\\b\"],\n visibleReplies: \"automatic\",\n },\n },\n };\n },\n requiredPluginIds: [\"telegram\"],\n };\n },\n createAgentDelivery(parsed) {\n const kind =\n parsed.native &&\n (/^-\\d+$/u.test(parsed.id.trim()) || TELEGRAM_USERNAME_RE.test(parsed.id.trim()))\n ? \"group\"\n : parsed.kind;\n const chatId = normalizeTelegramChatId(kind, parsed.id);\n const threadId = parseTelegramThreadTargetId(parsed.threadId);\n const to = telegramTargetKey(chatId, threadId);\n return {\n channel: \"telegram\",\n to,\n replyChannel: \"telegram\",\n replyTo: to,\n };\n },\n createInbound(input) {\n const kind = input.conversation.kind === \"direct\" ? \"direct\" : \"group\";\n const chatId = normalizeTelegramChatId(kind, input.conversation.id);\n const threadId = parseTelegramThreadTargetId(input.threadId);\n return {\n ...createAdminInboundRequest(telegram),\n providerBody: {\n chatId,\n fromId: Number(normalizeTelegramChatId(\"direct\", input.senderId)),\n fromName: input.senderName ?? input.senderId,\n ...(threadId !== undefined ? { messageThreadId: threadId } : {}),\n ...(input.nativeCommand\n ? {\n entities: [telegramBotCommandEntity(input.text, input.nativeCommand.name)],\n }\n : {}),\n text: input.text,\n },\n providerTargetKey: telegramTargetKey(chatId, threadId),\n qaTarget: qaTargetForInbound(input),\n stateConversation: {\n id: chatId,\n kind: kind === \"group\" ? \"group\" : \"direct\",\n },\n ...(threadId !== undefined ? { threadId: String(threadId) } : {}),\n };\n },\n createOutboundFromRecorderEvent({ event, targetByProviderTarget }) {\n if (!isRecord(event) || event.type !== \"api\" || typeof event.path !== \"string\") {\n return null;\n }\n const method = TELEGRAM_OUTBOUND_METHOD_RE.exec(event.path)?.[1]?.toLowerCase();\n if (!method || !isRecord(event.body)) {\n return null;\n }\n const chatId = canonicalTelegramRecorderChatId(event.body.chat_id);\n const text =\n method === \"sendmessage\"\n ? readNonBlankString(event.body.text)\n : readNonBlankString(event.body.caption);\n if (!chatId || !text) {\n return null;\n }\n let threadId: number | undefined;\n try {\n threadId = parseTelegramThreadTargetId(event.body.message_thread_id);\n } catch {\n return null;\n }\n const providerTargetKey = telegramTargetKey(chatId, threadId);\n return {\n accountId: DEFAULT_ACCOUNT_ID,\n senderId: \"openclaw\",\n senderName: \"OpenClaw QA\",\n text,\n to:\n targetByProviderTarget.get(providerTargetKey) ??\n (threadId === undefined ? chatId : providerTargetKey),\n };\n },\n };\n },\n});\n"]}
|
|
@@ -1,22 +1,49 @@
|
|
|
1
|
-
import { createAdminInboundRequest, createOpenClawCrablineProviderBridge, DEFAULT_ACCOUNT_ID, isRecord, qaTargetForInbound, readString, } from "../shared.js";
|
|
2
|
-
|
|
3
|
-
function requireWhatsAppJid(value, label) {
|
|
4
|
-
const
|
|
5
|
-
|
|
1
|
+
import { createAdminInboundRequest, createOpenClawCrablineProviderBridge, DEFAULT_ACCOUNT_ID, isRecord, qaTargetForInbound, readNonBlankString, readString, } from "../shared.js";
|
|
2
|
+
import { canonicalizeWhatsAppChatJid, canonicalizeWhatsAppUserCorrelationJid, canonicalizeWhatsAppUserJid, } from "../../servers/whatsapp-jid.js";
|
|
3
|
+
function requireWhatsAppJid(value, label, userOnly = false) {
|
|
4
|
+
const canonical = userOnly
|
|
5
|
+
? canonicalizeWhatsAppUserJid(value)
|
|
6
|
+
: canonicalizeWhatsAppChatJid(value);
|
|
7
|
+
if (!canonical) {
|
|
6
8
|
throw new Error(`${label} must be a native WhatsApp JID.`);
|
|
7
9
|
}
|
|
8
|
-
return
|
|
10
|
+
return canonical;
|
|
11
|
+
}
|
|
12
|
+
function requireWhatsAppTargetKind(parsed, targetId) {
|
|
13
|
+
if (parsed.native) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const nativeKind = targetId.endsWith("@g.us") ? "group" : "direct";
|
|
17
|
+
if (parsed.kind !== nativeKind) {
|
|
18
|
+
throw new Error("WhatsApp target kind does not match the native JID.");
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function requireWhatsAppConversationKind(kind, targetId) {
|
|
22
|
+
const nativeKind = targetId.endsWith("@g.us") ? "group" : "direct";
|
|
23
|
+
if (kind !== nativeKind) {
|
|
24
|
+
throw new Error("WhatsApp inbound conversation kind does not match the native JID.");
|
|
25
|
+
}
|
|
9
26
|
}
|
|
10
27
|
export const WHATSAPP_OPENCLAW_CRABLINE_PROVIDER_BRIDGE = createOpenClawCrablineProviderBridge({
|
|
11
28
|
provider: "whatsapp",
|
|
12
29
|
createAdapter(whatsapp) {
|
|
30
|
+
const messagesPath = new URL(whatsapp.endpoints.messagesUrl).pathname;
|
|
13
31
|
return {
|
|
14
|
-
async probe() {
|
|
15
|
-
const response = await fetch(
|
|
32
|
+
async probe(signal) {
|
|
33
|
+
const response = await fetch(whatsapp.endpoints.phoneNumberUrl, {
|
|
34
|
+
headers: {
|
|
35
|
+
authorization: `Bearer ${whatsapp.accessToken}`,
|
|
36
|
+
},
|
|
37
|
+
...(signal ? { signal } : {}),
|
|
38
|
+
});
|
|
16
39
|
if (!response.ok) {
|
|
17
|
-
throw new Error(`Crabline WhatsApp
|
|
40
|
+
throw new Error(`Crabline WhatsApp probe failed with HTTP ${response.status}.`);
|
|
18
41
|
}
|
|
19
|
-
|
|
42
|
+
const payload = await response.json();
|
|
43
|
+
if (!isRecord(payload) || readString(payload.id) !== whatsapp.phoneNumberId) {
|
|
44
|
+
throw new Error("Crabline WhatsApp probe returned an unexpected phone number.");
|
|
45
|
+
}
|
|
46
|
+
return payload;
|
|
20
47
|
},
|
|
21
48
|
createBinding() {
|
|
22
49
|
return {
|
|
@@ -60,7 +87,14 @@ export const WHATSAPP_OPENCLAW_CRABLINE_PROVIDER_BRIDGE = createOpenClawCrabline
|
|
|
60
87
|
};
|
|
61
88
|
},
|
|
62
89
|
createAgentDelivery(parsed) {
|
|
90
|
+
if (parsed.threadId !== undefined) {
|
|
91
|
+
throw new Error("WhatsApp does not support thread targets.");
|
|
92
|
+
}
|
|
63
93
|
const to = requireWhatsAppJid(parsed.id, "WhatsApp target");
|
|
94
|
+
requireWhatsAppTargetKind(parsed, to);
|
|
95
|
+
if (to.endsWith("@g.us")) {
|
|
96
|
+
throw new Error("WhatsApp Crabline WebSocket outbound supports direct targets only.");
|
|
97
|
+
}
|
|
64
98
|
return {
|
|
65
99
|
channel: "whatsapp",
|
|
66
100
|
to,
|
|
@@ -69,8 +103,12 @@ export const WHATSAPP_OPENCLAW_CRABLINE_PROVIDER_BRIDGE = createOpenClawCrabline
|
|
|
69
103
|
};
|
|
70
104
|
},
|
|
71
105
|
createInbound(input) {
|
|
106
|
+
if (input.threadId !== undefined) {
|
|
107
|
+
throw new Error("WhatsApp does not support thread targets.");
|
|
108
|
+
}
|
|
72
109
|
const chatJid = requireWhatsAppJid(input.conversation.id, "WhatsApp conversation");
|
|
73
|
-
|
|
110
|
+
requireWhatsAppConversationKind(input.conversation.kind, chatJid);
|
|
111
|
+
const senderJid = requireWhatsAppJid(input.senderId, "WhatsApp sender", true);
|
|
74
112
|
return {
|
|
75
113
|
...createAdminInboundRequest(whatsapp),
|
|
76
114
|
providerBody: {
|
|
@@ -80,7 +118,10 @@ export const WHATSAPP_OPENCLAW_CRABLINE_PROVIDER_BRIDGE = createOpenClawCrabline
|
|
|
80
118
|
text: input.text,
|
|
81
119
|
},
|
|
82
120
|
providerTargetKey: chatJid,
|
|
83
|
-
qaTarget: qaTargetForInbound(
|
|
121
|
+
qaTarget: qaTargetForInbound({
|
|
122
|
+
...input,
|
|
123
|
+
conversation: { ...input.conversation, id: chatJid },
|
|
124
|
+
}),
|
|
84
125
|
stateConversation: {
|
|
85
126
|
id: chatJid,
|
|
86
127
|
kind: chatJid.endsWith("@g.us") ? "group" : "direct",
|
|
@@ -88,24 +129,44 @@ export const WHATSAPP_OPENCLAW_CRABLINE_PROVIDER_BRIDGE = createOpenClawCrabline
|
|
|
88
129
|
};
|
|
89
130
|
},
|
|
90
131
|
createOutboundFromRecorderEvent({ event, targetByProviderTarget }) {
|
|
91
|
-
if (!isRecord(event) ||
|
|
132
|
+
if (!isRecord(event) ||
|
|
133
|
+
event.type !== "api" ||
|
|
134
|
+
event.accepted !== true ||
|
|
135
|
+
typeof event.path !== "string") {
|
|
92
136
|
return null;
|
|
93
137
|
}
|
|
94
|
-
if (!
|
|
138
|
+
if (!isRecord(event.body)) {
|
|
95
139
|
return null;
|
|
96
140
|
}
|
|
97
|
-
const
|
|
141
|
+
const baileysKey = isRecord(event.body.key) ? event.body.key : undefined;
|
|
142
|
+
const baileysMessage = isRecord(event.body.message) ? event.body.message : undefined;
|
|
143
|
+
const isBaileysSend = event.method === "WEBSOCKET" && event.path === "/ws/chat";
|
|
144
|
+
if (!isBaileysSend && event.path !== messagesPath) {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
const to = isBaileysSend ? readString(baileysKey?.remoteJid) : readString(event.body.to);
|
|
98
148
|
const textPayload = event.body.text;
|
|
99
|
-
const text =
|
|
149
|
+
const text = isBaileysSend
|
|
150
|
+
? readNonBlankString(baileysMessage?.conversation)
|
|
151
|
+
: isRecord(textPayload)
|
|
152
|
+
? readNonBlankString(textPayload.body)
|
|
153
|
+
: undefined;
|
|
100
154
|
if (!to || !text) {
|
|
101
155
|
return null;
|
|
102
156
|
}
|
|
157
|
+
const providerTarget = isBaileysSend
|
|
158
|
+
? canonicalizeWhatsAppUserCorrelationJid(to)
|
|
159
|
+
: (canonicalizeWhatsAppChatJid(to) ??
|
|
160
|
+
(/^\d{7,15}$/u.test(to) ? `${to}@s.whatsapp.net` : to));
|
|
161
|
+
if (!providerTarget) {
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
103
164
|
return {
|
|
104
165
|
accountId: DEFAULT_ACCOUNT_ID,
|
|
105
166
|
senderId: "openclaw",
|
|
106
167
|
senderName: "OpenClaw QA",
|
|
107
168
|
text,
|
|
108
|
-
to: targetByProviderTarget.get(
|
|
169
|
+
to: targetByProviderTarget.get(providerTarget) ?? providerTarget,
|
|
109
170
|
};
|
|
110
171
|
},
|
|
111
172
|
};
|