@openclaw/crabline 0.1.1 → 0.1.3
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 +41 -12
- package/dist/src/cli/program.js +9 -1
- package/dist/src/cli/program.js.map +1 -1
- package/dist/src/fake-servers/index.d.ts +10 -4
- package/dist/src/fake-servers/index.js +9 -1
- package/dist/src/fake-servers/index.js.map +1 -1
- package/dist/src/fake-servers/slack.d.ts +34 -0
- package/dist/src/fake-servers/slack.js +445 -0
- package/dist/src/fake-servers/slack.js.map +1 -0
- package/dist/src/fake-servers/whatsapp-socket-factory.d.ts +34 -0
- package/dist/src/fake-servers/whatsapp-socket-factory.js +225 -0
- package/dist/src/fake-servers/whatsapp-socket-factory.js.map +1 -0
- package/dist/src/fake-servers/whatsapp.d.ts +1 -0
- package/dist/src/fake-servers/whatsapp.js +18 -8
- package/dist/src/fake-servers/whatsapp.js.map +1 -1
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/openclaw/bridges/slack.d.ts +1 -0
- package/dist/src/openclaw/bridges/slack.js +150 -0
- package/dist/src/openclaw/bridges/slack.js.map +1 -0
- package/dist/src/openclaw/bridges/whatsapp.js +1 -0
- package/dist/src/openclaw/bridges/whatsapp.js.map +1 -1
- package/dist/src/openclaw.js +2 -0
- package/dist/src/openclaw.js.map +1 -1
- package/dist/src/providers/builtin/native-local-mock.d.ts +2 -5
- package/dist/src/providers/builtin/native-local-mock.js.map +1 -1
- package/dist/src/providers/builtin/slack.js +1 -10
- package/dist/src/providers/builtin/slack.js.map +1 -1
- package/dist/src/providers/native-ids.d.ts +5 -0
- package/dist/src/providers/native-ids.js +2 -0
- package/dist/src/providers/native-ids.js.map +1 -0
- package/dist/src/providers/slack-ids.d.ts +6 -0
- package/dist/src/providers/slack-ids.js +24 -0
- package/dist/src/providers/slack-ids.js.map +1 -0
- package/docs/channel-setup.md +44 -9
- package/package.json +5 -1
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { adminAuthError, hasAdminToken, jsonResponse, parseRequestBody, queryRecord, readInteger, readTrimmedString, startHttpJsonServer, } from "./http.js";
|
|
5
|
+
import { SLACK_CHANNEL_ID_RULE, SLACK_SEND_TARGET_ID_RULE, SLACK_TS_RULE, SLACK_USER_ID_RULE, } from "../providers/slack-ids.js";
|
|
6
|
+
function slackOk(result = {}) {
|
|
7
|
+
return jsonResponse({ ok: true, ...result });
|
|
8
|
+
}
|
|
9
|
+
function slackError(error, status = 200) {
|
|
10
|
+
return jsonResponse({ error, ok: false }, status);
|
|
11
|
+
}
|
|
12
|
+
function slackRateLimited(retryAfterSeconds = 1) {
|
|
13
|
+
return new Response(JSON.stringify({ error: "ratelimited", ok: false }), {
|
|
14
|
+
headers: {
|
|
15
|
+
"content-type": "application/json",
|
|
16
|
+
"retry-after": String(retryAfterSeconds),
|
|
17
|
+
},
|
|
18
|
+
status: 429,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
function requireSlackToken(request, body, state) {
|
|
22
|
+
const authorization = request.headers.authorization;
|
|
23
|
+
const tokenFromHeader = typeof authorization === "string" && authorization.startsWith("Bearer ")
|
|
24
|
+
? authorization.slice("Bearer ".length).trim()
|
|
25
|
+
: undefined;
|
|
26
|
+
const token = tokenFromHeader ?? readTrimmedString(body.token);
|
|
27
|
+
if (!token) {
|
|
28
|
+
return slackError("not_authed");
|
|
29
|
+
}
|
|
30
|
+
if (token !== state.botToken) {
|
|
31
|
+
return slackError("invalid_auth");
|
|
32
|
+
}
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
function requireSlackChannelId(value) {
|
|
36
|
+
const stringValue = readTrimmedString(value);
|
|
37
|
+
if (!stringValue || !SLACK_CHANNEL_ID_RULE.pattern.test(stringValue)) {
|
|
38
|
+
return slackError("channel_not_found");
|
|
39
|
+
}
|
|
40
|
+
return stringValue;
|
|
41
|
+
}
|
|
42
|
+
function requireSlackSendTargetId(value) {
|
|
43
|
+
const stringValue = readTrimmedString(value);
|
|
44
|
+
if (!stringValue || !SLACK_SEND_TARGET_ID_RULE.pattern.test(stringValue)) {
|
|
45
|
+
return slackError("channel_not_found");
|
|
46
|
+
}
|
|
47
|
+
return stringValue;
|
|
48
|
+
}
|
|
49
|
+
function requireSlackUserId(value) {
|
|
50
|
+
const stringValue = readTrimmedString(value);
|
|
51
|
+
if (!stringValue || !SLACK_USER_ID_RULE.pattern.test(stringValue)) {
|
|
52
|
+
return slackError("invalid_users");
|
|
53
|
+
}
|
|
54
|
+
return stringValue;
|
|
55
|
+
}
|
|
56
|
+
function requireSlackThreadTs(value) {
|
|
57
|
+
const stringValue = readTrimmedString(value);
|
|
58
|
+
if (!stringValue) {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
if (!SLACK_TS_RULE.pattern.test(stringValue)) {
|
|
62
|
+
return slackError("invalid_ts");
|
|
63
|
+
}
|
|
64
|
+
return stringValue;
|
|
65
|
+
}
|
|
66
|
+
function readBoolean(value) {
|
|
67
|
+
if (typeof value === "boolean") {
|
|
68
|
+
return value;
|
|
69
|
+
}
|
|
70
|
+
const stringValue = readTrimmedString(value)?.toLowerCase();
|
|
71
|
+
if (stringValue === "true" || stringValue === "1") {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
if (stringValue === "false" || stringValue === "0") {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
function readStructuredValue(value) {
|
|
80
|
+
if (typeof value !== "string") {
|
|
81
|
+
return value;
|
|
82
|
+
}
|
|
83
|
+
const stringValue = value.trim();
|
|
84
|
+
if (!stringValue) {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
return JSON.parse(stringValue);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return value;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function hasStructuredMessageContent(value) {
|
|
95
|
+
if (Array.isArray(value)) {
|
|
96
|
+
return value.length > 0;
|
|
97
|
+
}
|
|
98
|
+
return Boolean(value && typeof value === "object");
|
|
99
|
+
}
|
|
100
|
+
function messagesForChannel(state, channel) {
|
|
101
|
+
return state.messagesByChannel.get(channel) ?? [];
|
|
102
|
+
}
|
|
103
|
+
function hasThreadParent(state, params) {
|
|
104
|
+
return messagesForChannel(state, params.channel).some((message) => message.ts === params.threadTs || message.thread_ts === params.threadTs);
|
|
105
|
+
}
|
|
106
|
+
function nextSlackTs(state) {
|
|
107
|
+
const index = state.nextTsIndex++;
|
|
108
|
+
return `${1_700_000_000 + Math.floor(index / 1_000_000)}.${String(index % 1_000_000).padStart(6, "0")}`;
|
|
109
|
+
}
|
|
110
|
+
function nextDmChannelId(state) {
|
|
111
|
+
const index = state.nextDmIndex++;
|
|
112
|
+
return `D${String(index).padStart(9, "0")}`;
|
|
113
|
+
}
|
|
114
|
+
function dmChannelForUser(state, userId) {
|
|
115
|
+
const existing = state.userDmChannels.get(userId);
|
|
116
|
+
if (existing) {
|
|
117
|
+
return existing;
|
|
118
|
+
}
|
|
119
|
+
const channelId = nextDmChannelId(state);
|
|
120
|
+
state.userDmChannels.set(userId, channelId);
|
|
121
|
+
return channelId;
|
|
122
|
+
}
|
|
123
|
+
function appendMessage(state, message) {
|
|
124
|
+
const messages = state.messagesByChannel.get(message.channel) ?? [];
|
|
125
|
+
messages.push(message);
|
|
126
|
+
state.messagesByChannel.set(message.channel, messages);
|
|
127
|
+
return message;
|
|
128
|
+
}
|
|
129
|
+
async function appendEvent(state, event) {
|
|
130
|
+
await fs.mkdir(path.dirname(state.recorderPath), { recursive: true });
|
|
131
|
+
await fs.appendFile(state.recorderPath, `${JSON.stringify(event)}\n`, "utf8");
|
|
132
|
+
}
|
|
133
|
+
function redactSlackAuthFields(value) {
|
|
134
|
+
return Object.fromEntries(Object.entries(value).map(([key, entry]) => [
|
|
135
|
+
key,
|
|
136
|
+
key.toLowerCase() === "token" ? "[redacted]" : entry,
|
|
137
|
+
]));
|
|
138
|
+
}
|
|
139
|
+
function redactSlackAuthQuery(value) {
|
|
140
|
+
return Object.fromEntries(Object.entries(value).map(([key, entry]) => [
|
|
141
|
+
key,
|
|
142
|
+
key.toLowerCase() === "token" ? "[redacted]" : entry,
|
|
143
|
+
]));
|
|
144
|
+
}
|
|
145
|
+
function createSlackMessage(state, params) {
|
|
146
|
+
const ts = params.ts ?? nextSlackTs(state);
|
|
147
|
+
return {
|
|
148
|
+
...(params.attachments ? { attachments: params.attachments } : {}),
|
|
149
|
+
...(params.blocks ? { blocks: params.blocks } : {}),
|
|
150
|
+
...(params.bot ? { bot_id: state.botId } : {}),
|
|
151
|
+
channel: params.channel,
|
|
152
|
+
...(params.metadata ? { metadata: params.metadata } : {}),
|
|
153
|
+
...(params.replyBroadcast === undefined ? {} : { reply_broadcast: params.replyBroadcast }),
|
|
154
|
+
text: params.text,
|
|
155
|
+
...(params.threadTs ? { thread_ts: params.threadTs } : {}),
|
|
156
|
+
ts,
|
|
157
|
+
type: "message",
|
|
158
|
+
...(params.unfurlLinks === undefined ? {} : { unfurl_links: params.unfurlLinks }),
|
|
159
|
+
...(params.unfurlMedia === undefined ? {} : { unfurl_media: params.unfurlMedia }),
|
|
160
|
+
user: params.user ?? (params.bot ? state.botUserId : "UCRABUSER"),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
function asSlackEventCallback(message) {
|
|
164
|
+
return {
|
|
165
|
+
api_app_id: "ACRABLINE",
|
|
166
|
+
authorizations: [],
|
|
167
|
+
event: message,
|
|
168
|
+
event_id: `Ev${message.ts.replace(".", "")}`,
|
|
169
|
+
event_time: Number(message.ts.slice(0, 10)),
|
|
170
|
+
team_id: "TCRABLINE",
|
|
171
|
+
token: "crabline-event-token",
|
|
172
|
+
type: "event_callback",
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
async function handleSlackApi(params) {
|
|
176
|
+
const authError = requireSlackToken(params.request, params.body, params.state);
|
|
177
|
+
if (authError) {
|
|
178
|
+
return authError;
|
|
179
|
+
}
|
|
180
|
+
switch (params.method) {
|
|
181
|
+
case "auth.test":
|
|
182
|
+
return slackOk({
|
|
183
|
+
bot_id: params.state.botId,
|
|
184
|
+
response_metadata: {
|
|
185
|
+
scopes: [
|
|
186
|
+
"chat:write",
|
|
187
|
+
"channels:history",
|
|
188
|
+
"groups:history",
|
|
189
|
+
"im:history",
|
|
190
|
+
"mpim:history",
|
|
191
|
+
],
|
|
192
|
+
},
|
|
193
|
+
team: "Crabline",
|
|
194
|
+
team_id: "TCRABLINE",
|
|
195
|
+
url: "https://crabline.slack.test/",
|
|
196
|
+
user: "crabline",
|
|
197
|
+
user_id: params.state.botUserId,
|
|
198
|
+
});
|
|
199
|
+
case "chat.postMessage": {
|
|
200
|
+
if (readBoolean(params.body.simulate_rate_limit) === true) {
|
|
201
|
+
return slackRateLimited(readInteger(params.body.retry_after) ?? 1);
|
|
202
|
+
}
|
|
203
|
+
const channel = requireSlackSendTargetId(params.body.channel);
|
|
204
|
+
if (channel instanceof Response) {
|
|
205
|
+
return channel;
|
|
206
|
+
}
|
|
207
|
+
const text = readTrimmedString(params.body.text) ?? "";
|
|
208
|
+
const attachments = readStructuredValue(params.body.attachments);
|
|
209
|
+
const blocks = readStructuredValue(params.body.blocks);
|
|
210
|
+
const metadata = readStructuredValue(params.body.metadata);
|
|
211
|
+
if (!text &&
|
|
212
|
+
!hasStructuredMessageContent(blocks) &&
|
|
213
|
+
!hasStructuredMessageContent(attachments)) {
|
|
214
|
+
return slackError("no_text");
|
|
215
|
+
}
|
|
216
|
+
if (text.length > 40_000) {
|
|
217
|
+
return slackError("msg_too_long");
|
|
218
|
+
}
|
|
219
|
+
const threadTs = requireSlackThreadTs(params.body.thread_ts);
|
|
220
|
+
if (threadTs instanceof Response) {
|
|
221
|
+
return threadTs;
|
|
222
|
+
}
|
|
223
|
+
if (threadTs && !hasThreadParent(params.state, { channel, threadTs })) {
|
|
224
|
+
return slackError("thread_not_found");
|
|
225
|
+
}
|
|
226
|
+
const message = appendMessage(params.state, createSlackMessage(params.state, {
|
|
227
|
+
attachments,
|
|
228
|
+
blocks,
|
|
229
|
+
bot: true,
|
|
230
|
+
channel,
|
|
231
|
+
metadata,
|
|
232
|
+
replyBroadcast: readBoolean(params.body.reply_broadcast),
|
|
233
|
+
text,
|
|
234
|
+
threadTs,
|
|
235
|
+
unfurlLinks: readBoolean(params.body.unfurl_links),
|
|
236
|
+
unfurlMedia: readBoolean(params.body.unfurl_media),
|
|
237
|
+
}));
|
|
238
|
+
return slackOk({ channel, message, ts: message.ts });
|
|
239
|
+
}
|
|
240
|
+
case "conversations.open": {
|
|
241
|
+
const users = readTrimmedString(params.body.users);
|
|
242
|
+
const firstUser = users?.split(",")[0]?.trim();
|
|
243
|
+
const user = requireSlackUserId(firstUser);
|
|
244
|
+
if (user instanceof Response) {
|
|
245
|
+
return user;
|
|
246
|
+
}
|
|
247
|
+
return slackOk({
|
|
248
|
+
channel: {
|
|
249
|
+
id: dmChannelForUser(params.state, user),
|
|
250
|
+
is_im: true,
|
|
251
|
+
user,
|
|
252
|
+
},
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
case "conversations.info": {
|
|
256
|
+
const channel = requireSlackChannelId(params.body.channel);
|
|
257
|
+
if (channel instanceof Response) {
|
|
258
|
+
return channel;
|
|
259
|
+
}
|
|
260
|
+
return slackOk({
|
|
261
|
+
channel: {
|
|
262
|
+
id: channel,
|
|
263
|
+
is_channel: channel.startsWith("C"),
|
|
264
|
+
is_group: channel.startsWith("G"),
|
|
265
|
+
is_im: channel.startsWith("D"),
|
|
266
|
+
name: "crabline",
|
|
267
|
+
},
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
case "conversations.history": {
|
|
271
|
+
const channel = requireSlackChannelId(params.body.channel);
|
|
272
|
+
if (channel instanceof Response) {
|
|
273
|
+
return channel;
|
|
274
|
+
}
|
|
275
|
+
const oldest = requireSlackThreadTs(params.body.oldest);
|
|
276
|
+
if (oldest instanceof Response) {
|
|
277
|
+
return oldest;
|
|
278
|
+
}
|
|
279
|
+
const latest = requireSlackThreadTs(params.body.latest);
|
|
280
|
+
if (latest instanceof Response) {
|
|
281
|
+
return latest;
|
|
282
|
+
}
|
|
283
|
+
const limit = readInteger(params.body.limit) ?? 100;
|
|
284
|
+
const messages = messagesForChannel(params.state, channel).filter((message) => {
|
|
285
|
+
if (oldest && message.ts <= oldest) {
|
|
286
|
+
return false;
|
|
287
|
+
}
|
|
288
|
+
if (latest && message.ts >= latest) {
|
|
289
|
+
return false;
|
|
290
|
+
}
|
|
291
|
+
return true;
|
|
292
|
+
});
|
|
293
|
+
return slackOk({
|
|
294
|
+
has_more: messages.length > limit,
|
|
295
|
+
messages: [...messages].reverse().slice(0, limit),
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
case "conversations.replies": {
|
|
299
|
+
const channel = requireSlackChannelId(params.body.channel);
|
|
300
|
+
if (channel instanceof Response) {
|
|
301
|
+
return channel;
|
|
302
|
+
}
|
|
303
|
+
const ts = requireSlackThreadTs(params.body.ts);
|
|
304
|
+
if (ts instanceof Response) {
|
|
305
|
+
return ts;
|
|
306
|
+
}
|
|
307
|
+
if (!ts) {
|
|
308
|
+
return slackError("message_not_found");
|
|
309
|
+
}
|
|
310
|
+
const limit = readInteger(params.body.limit) ?? 100;
|
|
311
|
+
const messages = messagesForChannel(params.state, channel).filter((message) => message.ts === ts || message.thread_ts === ts);
|
|
312
|
+
if (messages.length === 0) {
|
|
313
|
+
return slackError("thread_not_found");
|
|
314
|
+
}
|
|
315
|
+
return slackOk({ has_more: messages.length > limit, messages: messages.slice(0, limit) });
|
|
316
|
+
}
|
|
317
|
+
default:
|
|
318
|
+
return slackError("unknown_method", 404);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
async function handleAdminInbound(params) {
|
|
322
|
+
const channel = requireSlackChannelId(params.body.channel);
|
|
323
|
+
if (channel instanceof Response) {
|
|
324
|
+
return channel;
|
|
325
|
+
}
|
|
326
|
+
const text = readTrimmedString(params.body.text);
|
|
327
|
+
if (!text) {
|
|
328
|
+
return slackError("text is required", 400);
|
|
329
|
+
}
|
|
330
|
+
const user = requireSlackUserId(params.body.user ?? "UCRABUSER");
|
|
331
|
+
if (user instanceof Response) {
|
|
332
|
+
return user;
|
|
333
|
+
}
|
|
334
|
+
const threadTs = requireSlackThreadTs(params.body.threadTs ?? params.body.thread_ts);
|
|
335
|
+
if (threadTs instanceof Response) {
|
|
336
|
+
return threadTs;
|
|
337
|
+
}
|
|
338
|
+
const ts = requireSlackThreadTs(params.body.ts);
|
|
339
|
+
if (ts instanceof Response) {
|
|
340
|
+
return ts;
|
|
341
|
+
}
|
|
342
|
+
const message = appendMessage(params.state, createSlackMessage(params.state, {
|
|
343
|
+
channel,
|
|
344
|
+
text,
|
|
345
|
+
threadTs,
|
|
346
|
+
ts,
|
|
347
|
+
user,
|
|
348
|
+
}));
|
|
349
|
+
return slackOk({ event: asSlackEventCallback(message), message });
|
|
350
|
+
}
|
|
351
|
+
async function handleRequest(params) {
|
|
352
|
+
const url = new URL(params.request.url ?? "/", "http://127.0.0.1");
|
|
353
|
+
if (url.pathname === "/crabline/slack/inbound") {
|
|
354
|
+
if (params.request.method !== "POST") {
|
|
355
|
+
return new Response("not found", { status: 404 });
|
|
356
|
+
}
|
|
357
|
+
if (!hasAdminToken(params.request, params.state.adminToken)) {
|
|
358
|
+
return adminAuthError();
|
|
359
|
+
}
|
|
360
|
+
const body = await parseRequestBody(params.request);
|
|
361
|
+
await appendEvent(params.state, {
|
|
362
|
+
at: new Date().toISOString(),
|
|
363
|
+
body,
|
|
364
|
+
method: params.request.method,
|
|
365
|
+
path: url.pathname,
|
|
366
|
+
query: queryRecord(url),
|
|
367
|
+
type: "admin",
|
|
368
|
+
});
|
|
369
|
+
return await handleAdminInbound({ body, state: params.state });
|
|
370
|
+
}
|
|
371
|
+
const query = queryRecord(url);
|
|
372
|
+
const body = params.request.method === "GET" ? query : await parseRequestBody(params.request);
|
|
373
|
+
await appendEvent(params.state, {
|
|
374
|
+
at: new Date().toISOString(),
|
|
375
|
+
body: redactSlackAuthFields(body),
|
|
376
|
+
method: params.request.method ?? "GET",
|
|
377
|
+
path: url.pathname,
|
|
378
|
+
query: redactSlackAuthQuery(query),
|
|
379
|
+
type: "api",
|
|
380
|
+
});
|
|
381
|
+
if (url.pathname === "/slack/events") {
|
|
382
|
+
if (body.type === "url_verification") {
|
|
383
|
+
return jsonResponse({ challenge: readTrimmedString(body.challenge) ?? "" });
|
|
384
|
+
}
|
|
385
|
+
return slackOk();
|
|
386
|
+
}
|
|
387
|
+
const methodMatch = /^\/api\/([a-z]+(?:\.[a-zA-Z]+)*)$/u.exec(url.pathname);
|
|
388
|
+
if (!methodMatch?.[1]) {
|
|
389
|
+
return new Response("not found", { status: 404 });
|
|
390
|
+
}
|
|
391
|
+
return await handleSlackApi({
|
|
392
|
+
body,
|
|
393
|
+
method: methodMatch[1],
|
|
394
|
+
request: params.request,
|
|
395
|
+
state: params.state,
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
export async function startSlackFakeServer(params = {}) {
|
|
399
|
+
const state = {
|
|
400
|
+
adminToken: params.adminToken ?? randomBytes(24).toString("base64url"),
|
|
401
|
+
botId: params.botId ?? "BCRABLINE",
|
|
402
|
+
botToken: params.botToken ?? "xoxb-crabline-slack-token",
|
|
403
|
+
botUserId: params.botUserId ?? "UCRABBOT",
|
|
404
|
+
nextDmIndex: 1,
|
|
405
|
+
nextTsIndex: 100,
|
|
406
|
+
recorderPath: params.recorderPath ?? path.resolve(".crabline", "fake-servers", "slack.jsonl"),
|
|
407
|
+
signingSecret: params.signingSecret ?? "crabline-slack-signing-secret",
|
|
408
|
+
userDmChannels: new Map(),
|
|
409
|
+
messagesByChannel: new Map(),
|
|
410
|
+
};
|
|
411
|
+
const host = params.host ?? "127.0.0.1";
|
|
412
|
+
const httpServer = await startHttpJsonServer({
|
|
413
|
+
handle: (request) => handleRequest({ request, state }),
|
|
414
|
+
host,
|
|
415
|
+
port: params.port ?? 0,
|
|
416
|
+
serverName: "Slack",
|
|
417
|
+
});
|
|
418
|
+
const baseUrl = httpServer.baseUrl;
|
|
419
|
+
const apiRoot = `${baseUrl}/api/`;
|
|
420
|
+
return {
|
|
421
|
+
async close() {
|
|
422
|
+
await httpServer.close();
|
|
423
|
+
},
|
|
424
|
+
manifest: {
|
|
425
|
+
adminToken: state.adminToken,
|
|
426
|
+
baseUrl,
|
|
427
|
+
botToken: state.botToken,
|
|
428
|
+
endpoints: {
|
|
429
|
+
adminInboundUrl: `${baseUrl}/crabline/slack/inbound`,
|
|
430
|
+
apiRoot,
|
|
431
|
+
eventsUrl: `${baseUrl}/slack/events`,
|
|
432
|
+
},
|
|
433
|
+
env: {
|
|
434
|
+
SLACK_API_URL: apiRoot,
|
|
435
|
+
SLACK_BOT_TOKEN: state.botToken,
|
|
436
|
+
SLACK_SIGNING_SECRET: state.signingSecret,
|
|
437
|
+
},
|
|
438
|
+
provider: "slack",
|
|
439
|
+
recorderPath: state.recorderPath,
|
|
440
|
+
signingSecret: state.signingSecret,
|
|
441
|
+
version: 1,
|
|
442
|
+
},
|
|
443
|
+
};
|
|
444
|
+
}
|
|
445
|
+
//# sourceMappingURL=slack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/fake-servers/slack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
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;
|