@openclaw/crabline 0.1.0 → 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.
Files changed (50) hide show
  1. package/README.md +68 -1
  2. package/dist/src/cli/program.js +62 -12
  3. package/dist/src/cli/program.js.map +1 -1
  4. package/dist/src/fake-servers/http.d.ts +30 -0
  5. package/dist/src/fake-servers/http.js +130 -0
  6. package/dist/src/fake-servers/http.js.map +1 -0
  7. package/dist/src/fake-servers/index.d.ts +21 -6
  8. package/dist/src/fake-servers/index.js +19 -5
  9. package/dist/src/fake-servers/index.js.map +1 -1
  10. package/dist/src/fake-servers/slack.d.ts +34 -0
  11. package/dist/src/fake-servers/slack.js +445 -0
  12. package/dist/src/fake-servers/slack.js.map +1 -0
  13. package/dist/src/fake-servers/telegram.js +3 -20
  14. package/dist/src/fake-servers/telegram.js.map +1 -1
  15. package/dist/src/fake-servers/whatsapp-socket-factory.d.ts +34 -0
  16. package/dist/src/fake-servers/whatsapp-socket-factory.js +225 -0
  17. package/dist/src/fake-servers/whatsapp-socket-factory.js.map +1 -0
  18. package/dist/src/fake-servers/whatsapp.d.ts +96 -0
  19. package/dist/src/fake-servers/whatsapp.js +474 -0
  20. package/dist/src/fake-servers/whatsapp.js.map +1 -0
  21. package/dist/src/index.d.ts +6 -0
  22. package/dist/src/index.js +3 -0
  23. package/dist/src/index.js.map +1 -1
  24. package/dist/src/openclaw/bridges/slack.d.ts +1 -0
  25. package/dist/src/openclaw/bridges/slack.js +150 -0
  26. package/dist/src/openclaw/bridges/slack.js.map +1 -0
  27. package/dist/src/openclaw/bridges/telegram.d.ts +1 -0
  28. package/dist/src/openclaw/bridges/telegram.js +137 -0
  29. package/dist/src/openclaw/bridges/telegram.js.map +1 -0
  30. package/dist/src/openclaw/bridges/whatsapp.d.ts +1 -0
  31. package/dist/src/openclaw/bridges/whatsapp.js +115 -0
  32. package/dist/src/openclaw/bridges/whatsapp.js.map +1 -0
  33. package/dist/src/openclaw/shared.d.ts +125 -0
  34. package/dist/src/openclaw/shared.js +78 -0
  35. package/dist/src/openclaw/shared.js.map +1 -0
  36. package/dist/src/openclaw.d.ts +3 -76
  37. package/dist/src/openclaw.js +31 -196
  38. package/dist/src/openclaw.js.map +1 -1
  39. package/dist/src/providers/builtin/native-local-mock.d.ts +2 -5
  40. package/dist/src/providers/builtin/native-local-mock.js.map +1 -1
  41. package/dist/src/providers/builtin/slack.js +1 -10
  42. package/dist/src/providers/builtin/slack.js.map +1 -1
  43. package/dist/src/providers/native-ids.d.ts +5 -0
  44. package/dist/src/providers/native-ids.js +2 -0
  45. package/dist/src/providers/native-ids.js.map +1 -0
  46. package/dist/src/providers/slack-ids.d.ts +6 -0
  47. package/dist/src/providers/slack-ids.js +24 -0
  48. package/dist/src/providers/slack-ids.js.map +1 -0
  49. package/docs/channel-setup.md +82 -1
  50. package/package.json +5 -1
package/README.md CHANGED
@@ -15,7 +15,8 @@ provider APIs that OpenClaw live adapters can target during deterministic QA.
15
15
  `whatsapp`, and `zalo`
16
16
  - a `script` bridge for channels that are still exercised by external commands
17
17
  - per-provider local webhook endpoints for inbound events
18
- - fake provider servers for live-adapter smoke tests, starting with Telegram
18
+ - fake provider servers for live-adapter smoke tests, starting with Slack,
19
+ Telegram, and WhatsApp
19
20
  - JSONL recorder files for deterministic wait/watch behavior
20
21
  - nonce-based `send`, `roundtrip`, `agent`, `probe`, `run`, `watch`, and
21
22
  `doctor` commands
@@ -124,6 +125,30 @@ commands for `probe`, `send`, `waitForInbound`, or `watch`.
124
125
  preferred Smoke CI path because OpenClaw still uses its normal channel adapter,
125
126
  but the provider endpoint is local and deterministic.
126
127
 
128
+ Slack:
129
+
130
+ ```bash
131
+ crabline --json serve slack --ready-file .crabline/slack-server.json
132
+ ```
133
+
134
+ The JSON manifest contains:
135
+
136
+ - `endpoints.apiRoot`: set OpenClaw's Slack API override / `SLACK_API_URL` to
137
+ this value
138
+ - `botToken`: set OpenClaw `channels.slack.botToken` to this value
139
+ - `signingSecret`: set OpenClaw `channels.slack.signingSecret` to this value
140
+ - `adminToken`: send this as the `X-Crabline-Admin-Token` header when posting
141
+ test user messages
142
+ - `endpoints.adminInboundUrl`: authenticated POST endpoint for Events API-shaped
143
+ test user messages
144
+ - `endpoints.eventsUrl`: local Slack Events API endpoint
145
+ - `recorderPath`: JSONL file of fake provider API/admin traffic
146
+
147
+ The admin token is generated randomly unless `--admin-token <token>` is
148
+ provided. Implemented Slack Web API endpoints include `auth.test`,
149
+ `chat.postMessage`, `conversations.open`, `conversations.info`,
150
+ `conversations.history`, and `conversations.replies`.
151
+
127
152
  Telegram:
128
153
 
129
154
  ```bash
@@ -150,6 +175,46 @@ Implemented Telegram Bot API endpoints include `getMe`, `sendMessage`,
150
175
  `deleteWebhook`, `setWebhook`, `setMyCommands`, `deleteMyCommands`,
151
176
  `sendChatAction`, and `answerCallbackQuery`.
152
177
 
178
+ WhatsApp:
179
+
180
+ ```bash
181
+ crabline --json serve whatsapp --ready-file .crabline/whatsapp-server.json
182
+ ```
183
+
184
+ The JSON manifest contains:
185
+
186
+ - `endpoints.apiRoot`: Crabline WhatsApp fake provider API root
187
+ - `accessToken`: bearer token for fake provider requests
188
+ - `adminToken`: send this as the `X-Crabline-Admin-Token` header when posting
189
+ test user messages
190
+ - `selfJid`: fake authenticated WhatsApp user JID
191
+ - `env.CRABLINE_WHATSAPP_ACCESS_TOKEN`: access token for the runtime socket
192
+ factory
193
+ - `env.CRABLINE_WHATSAPP_API_ROOT`: API root for the runtime socket factory
194
+ - `env.CRABLINE_WHATSAPP_RECORDER_PATH`: recorder file followed by the runtime
195
+ socket factory for cross-process inbound delivery
196
+ - `env.CRABLINE_WHATSAPP_SELF_JID`: fake authenticated WhatsApp user JID for
197
+ the runtime socket factory
198
+ - `endpoints.adminInboundUrl`: authenticated POST endpoint for test user
199
+ messages; subscribed Baileys mock sockets receive them as `messages.upsert`
200
+ - `endpoints.messagesUrl`: fake text send endpoint used by the Baileys-shaped
201
+ mock
202
+ - `endpoints.presenceUrl`: fake presence endpoint used by
203
+ `sendPresenceUpdate`
204
+ - `recorderPath`: JSONL file of fake provider API/admin traffic
205
+
206
+ Use the package subpath `@openclaw/crabline/whatsapp-socket-factory` when a
207
+ runtime needs a Baileys-style module with `createWhatsAppSocket()`. The module
208
+ reads the `CRABLINE_WHATSAPP_*` env vars emitted by the manifest, sends outbound
209
+ traffic to the fake provider API, and follows the recorder for inbound
210
+ `messages.upsert` events. The admin token is generated randomly unless
211
+ `--admin-token <token>` is provided.
212
+
213
+ OpenClaw bridge callers should post injected user messages with the
214
+ `providerUrl`, `providerHeaders`, and `providerBody` returned by
215
+ `createOpenClawCrablineInbound()`. For direct in-process tests, the started fake
216
+ server also exposes `createBaileysMockSocket()`.
217
+
153
218
  ## Target IDs
154
219
 
155
220
  Built-in providers accept native channel identifiers. Crabline does not add
@@ -174,6 +239,8 @@ Examples:
174
239
  - Slack threads: `1700000000.000100`
175
240
  - Telegram chats: `-1001234567890` or `@channelusername`
176
241
  - Telegram topics: `42`
242
+ - WhatsApp users: `15551234567@s.whatsapp.net`
243
+ - WhatsApp groups: `120363001234567890@g.us`
177
244
  - Discord channels and threads: Discord snowflake ids such as
178
245
  `123456789012345678`
179
246
 
@@ -6,7 +6,30 @@ import { createRegistry } from "../providers/registry.js";
6
6
  import { formatJson, formatRunResultText } from "../core/reporters.js";
7
7
  import { computeExitCode, runFixtureCommand, runSuite } from "../core/run.js";
8
8
  import { CrablineError, ensureErrorMessage } from "../core/errors.js";
9
- import { startTelegramFakeServer } from "../fake-servers/telegram.js";
9
+ import { isCrablineFakeProviderChannel, startCrablineFakeProviderServer, } from "../fake-servers/index.js";
10
+ const SERVE_PARAM_FACTORIES = {
11
+ slack: (shared, commandOptions) => ({
12
+ ...shared,
13
+ adminToken: commandOptions.adminToken,
14
+ botToken: commandOptions.botToken,
15
+ channel: "slack",
16
+ signingSecret: commandOptions.signingSecret,
17
+ }),
18
+ telegram: (shared, commandOptions) => ({
19
+ ...shared,
20
+ adminToken: commandOptions.adminToken,
21
+ botToken: commandOptions.botToken,
22
+ botUsername: commandOptions.botUsername,
23
+ channel: "telegram",
24
+ }),
25
+ whatsapp: (shared, commandOptions) => ({
26
+ ...shared,
27
+ accessToken: commandOptions.accessToken,
28
+ adminToken: commandOptions.adminToken,
29
+ channel: "whatsapp",
30
+ selfJid: commandOptions.selfJid,
31
+ }),
32
+ };
10
33
  function print(value) {
11
34
  process.stdout.write(`${value}\n`);
12
35
  }
@@ -152,14 +175,17 @@ export function createProgram(setExitCode = (code) => {
152
175
  .option("--host <host>", "Bind host", "127.0.0.1")
153
176
  .option("--port <port>", "Bind port", "0")
154
177
  .option("--admin-token <token>", "Admin token for inbound test messages")
155
- .option("--bot-token <token>", "Fake Telegram bot token")
178
+ .option("--access-token <token>", "Fake WhatsApp access token")
179
+ .option("--bot-token <token>", "Fake Telegram or Slack bot token")
156
180
  .option("--bot-username <username>", "Fake Telegram bot username", "crabline_bot")
157
181
  .option("--recorder <path>", "JSONL recorder path")
158
182
  .option("--ready-file <path>", "Write the server runtime manifest to this path")
183
+ .option("--self-jid <jid>", "Fake WhatsApp self JID")
184
+ .option("--signing-secret <secret>", "Fake Slack signing secret")
159
185
  .option("--once", "Start, print the runtime manifest, and stop immediately", false)
160
186
  .action(async (provider, commandOptions) => {
161
187
  const options = program.opts();
162
- if (provider !== "telegram") {
188
+ if (!isCrablineFakeProviderChannel(provider)) {
163
189
  throw new CrablineError(`Unsupported fake provider server: ${provider}`, {
164
190
  kind: "config",
165
191
  });
@@ -170,14 +196,17 @@ export function createProgram(setExitCode = (code) => {
170
196
  kind: "config",
171
197
  });
172
198
  }
173
- const server = await startTelegramFakeServer({
174
- adminToken: commandOptions.adminToken,
175
- botToken: commandOptions.botToken,
176
- botUsername: commandOptions.botUsername,
199
+ const factory = SERVE_PARAM_FACTORIES[provider];
200
+ if (!factory) {
201
+ throw new CrablineError(`Unsupported fake provider server: ${provider}`, {
202
+ kind: "config",
203
+ });
204
+ }
205
+ const server = await startCrablineFakeProviderServer(factory({
177
206
  host: commandOptions.host,
178
207
  port,
179
208
  recorderPath: commandOptions.recorder,
180
- });
209
+ }, commandOptions));
181
210
  const payload = formatJson(server.manifest);
182
211
  if (commandOptions.readyFile) {
183
212
  await fs.mkdir(nodePath.dirname(commandOptions.readyFile), { recursive: true });
@@ -214,14 +243,35 @@ function waitForShutdown(close) {
214
243
  });
215
244
  }
216
245
  function renderServeText(manifest) {
217
- return [
246
+ const lines = [
218
247
  `${manifest.provider} fake server ready`,
219
248
  ` apiRoot: ${manifest.endpoints.apiRoot}`,
220
- ` adminToken: ${manifest.adminToken}`,
221
- ` botToken: ${manifest.botToken}`,
222
249
  ` inbound: ${manifest.endpoints.adminInboundUrl}`,
223
250
  ` recorder: ${manifest.recorderPath}`,
224
- ].join("\n");
251
+ ];
252
+ const providerFields = renderServeProviderFields(manifest);
253
+ if (!providerFields) {
254
+ throw new CrablineError(`Unsupported fake provider server: ${String(manifest.provider)}`, {
255
+ kind: "config",
256
+ });
257
+ }
258
+ lines.splice(2, 0, ...providerFields);
259
+ return lines.join("\n");
260
+ }
261
+ function renderServeProviderFields(manifest) {
262
+ if (manifest.provider === "telegram") {
263
+ return [` adminToken: ${manifest.adminToken}`, ` botToken: ${manifest.botToken}`];
264
+ }
265
+ if (manifest.provider === "whatsapp") {
266
+ return [
267
+ ` adminToken: ${manifest.adminToken}`,
268
+ ` accessToken: ${manifest.accessToken}`,
269
+ ` messages: ${manifest.endpoints.messagesUrl}`,
270
+ ` presence: ${manifest.endpoints.presenceUrl}`,
271
+ ` selfJid: ${manifest.selfJid}`,
272
+ ];
273
+ }
274
+ return undefined;
225
275
  }
226
276
  function renderProvidersText(payload) {
227
277
  const lines = ["configured providers:"];
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../../../src/cli/program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../../../src/cli/program.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { type IncomingMessage, type Server, type ServerResponse } from "node:http";
2
+ export type FakeServerRequestEvent = {
3
+ at: string;
4
+ body?: unknown;
5
+ method: string;
6
+ path: string;
7
+ query: Record<string, string>;
8
+ type: "admin" | "api";
9
+ };
10
+ export declare const ADMIN_TOKEN_HEADER = "x-crabline-admin-token";
11
+ export declare function jsonResponse(value: unknown, status?: number): Response;
12
+ export declare function readBody(request: IncomingMessage): Promise<Buffer>;
13
+ export declare function parseRequestBody(request: IncomingMessage): Promise<Record<string, unknown>>;
14
+ export declare function queryRecord(url: URL): Record<string, string>;
15
+ export declare function writeResponse(response: ServerResponse, fetchResponse: Response): Promise<void>;
16
+ export declare function closeServer(server: Server): Promise<void>;
17
+ export declare function startHttpJsonServer(params: {
18
+ handle: (request: IncomingMessage) => Promise<Response>;
19
+ host: string;
20
+ port: number;
21
+ serverName: string;
22
+ }): Promise<{
23
+ baseUrl: string;
24
+ close(): Promise<void>;
25
+ }>;
26
+ export declare function readString(value: unknown): string | undefined;
27
+ export declare function readTrimmedString(value: unknown): string | undefined;
28
+ export declare function readInteger(value: unknown): number | undefined;
29
+ export declare function hasAdminToken(request: IncomingMessage, expectedToken: string): boolean;
30
+ export declare function adminAuthError(): Response;
@@ -0,0 +1,130 @@
1
+ import { createServer } from "node:http";
2
+ import { timingSafeEqual } from "node:crypto";
3
+ import { CrablineError } from "../core/errors.js";
4
+ export const ADMIN_TOKEN_HEADER = "x-crabline-admin-token";
5
+ export function jsonResponse(value, status = 200) {
6
+ return Response.json(value, { status });
7
+ }
8
+ export async function readBody(request) {
9
+ const chunks = [];
10
+ for await (const chunk of request) {
11
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
12
+ }
13
+ return Buffer.concat(chunks);
14
+ }
15
+ export async function parseRequestBody(request) {
16
+ const body = await readBody(request);
17
+ if (body.length === 0) {
18
+ return {};
19
+ }
20
+ const contentType = request.headers["content-type"] ?? "";
21
+ const includesJson = Array.isArray(contentType)
22
+ ? contentType.some((entry) => entry.includes("json"))
23
+ : contentType.includes("json");
24
+ if (includesJson) {
25
+ return JSON.parse(body.toString("utf8"));
26
+ }
27
+ const params = new URLSearchParams(body.toString("utf8"));
28
+ return Object.fromEntries(params.entries());
29
+ }
30
+ export function queryRecord(url) {
31
+ return Object.fromEntries(url.searchParams.entries());
32
+ }
33
+ export async function writeResponse(response, fetchResponse) {
34
+ response.statusCode = fetchResponse.status;
35
+ for (const [name, value] of fetchResponse.headers) {
36
+ response.setHeader(name, value);
37
+ }
38
+ response.end(Buffer.from(await fetchResponse.arrayBuffer()));
39
+ }
40
+ export function closeServer(server) {
41
+ return new Promise((resolve, reject) => {
42
+ server.close((error) => {
43
+ if (error) {
44
+ reject(error);
45
+ return;
46
+ }
47
+ resolve();
48
+ });
49
+ });
50
+ }
51
+ export async function startHttpJsonServer(params) {
52
+ const server = createServer(async (request, response) => {
53
+ try {
54
+ await writeResponse(response, await params.handle(request));
55
+ }
56
+ catch (error) {
57
+ await writeResponse(response, jsonResponse({
58
+ error: error instanceof Error ? error.message : String(error),
59
+ ok: false,
60
+ }, 500));
61
+ }
62
+ });
63
+ await new Promise((resolve, reject) => {
64
+ server.once("error", reject);
65
+ server.listen(params.port, params.host, () => {
66
+ server.off("error", reject);
67
+ resolve();
68
+ });
69
+ });
70
+ const address = server.address();
71
+ if (!address || typeof address === "string") {
72
+ throw new CrablineError(`Unable to resolve ${params.serverName} fake server address.`, {
73
+ kind: "connectivity",
74
+ });
75
+ }
76
+ return {
77
+ baseUrl: `http://${params.host}:${address.port}`,
78
+ async close() {
79
+ await closeServer(server);
80
+ },
81
+ };
82
+ }
83
+ export function readString(value) {
84
+ if (typeof value === "string" && value.length > 0) {
85
+ return value;
86
+ }
87
+ if (typeof value === "number" || typeof value === "bigint") {
88
+ return value.toString();
89
+ }
90
+ return undefined;
91
+ }
92
+ export function readTrimmedString(value) {
93
+ const stringValue = readString(value)?.trim();
94
+ return stringValue ? stringValue : undefined;
95
+ }
96
+ export function readInteger(value) {
97
+ const stringValue = readTrimmedString(value);
98
+ if (!stringValue || !/^-?\d+$/u.test(stringValue)) {
99
+ return undefined;
100
+ }
101
+ return Number(stringValue);
102
+ }
103
+ function readBearerToken(authorization) {
104
+ if (!authorization) {
105
+ return undefined;
106
+ }
107
+ const trimmed = authorization.trimStart();
108
+ if (trimmed.slice(0, 7).toLowerCase() !== "bearer ") {
109
+ return undefined;
110
+ }
111
+ return trimmed.slice(7);
112
+ }
113
+ export function hasAdminToken(request, expectedToken) {
114
+ const header = request.headers[ADMIN_TOKEN_HEADER];
115
+ const directToken = Array.isArray(header) ? header[0] : header;
116
+ const providedToken = directToken ?? readBearerToken(request.headers.authorization);
117
+ if (!providedToken) {
118
+ return false;
119
+ }
120
+ const provided = Buffer.from(providedToken);
121
+ const expected = Buffer.from(expectedToken);
122
+ return provided.length === expected.length && timingSafeEqual(provided, expected);
123
+ }
124
+ export function adminAuthError() {
125
+ return new Response("unauthorized", {
126
+ headers: { "www-authenticate": "Bearer" },
127
+ status: 401,
128
+ });
129
+ }
130
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/fake-servers/http.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,25 @@
1
+ import { type SlackFakeServerManifest, type StartedSlackFakeServer, type StartSlackFakeServerParams } from "./slack.js";
1
2
  import { type StartedTelegramFakeServer, type StartTelegramFakeServerParams, type TelegramFakeServerManifest } from "./telegram.js";
2
- export declare const CRABLINE_FAKE_PROVIDER_CHANNELS: readonly ["telegram"];
3
+ import { type StartedWhatsAppFakeServer, type StartWhatsAppFakeServerParams, type WhatsAppFakeServerManifest } from "./whatsapp.js";
4
+ export declare const CRABLINE_FAKE_PROVIDER_CHANNELS: readonly ["slack", "telegram", "whatsapp"];
3
5
  export type CrablineFakeProviderChannel = (typeof CRABLINE_FAKE_PROVIDER_CHANNELS)[number];
4
- export type CrablineFakeProviderManifest = TelegramFakeServerManifest;
5
- export type StartedCrablineFakeProviderServer = StartedTelegramFakeServer;
6
- export type StartCrablineFakeProviderServerParams = StartTelegramFakeServerParams & {
7
- channel: CrablineFakeProviderChannel;
8
- };
6
+ export type CrablineFakeProviderManifest = SlackFakeServerManifest | TelegramFakeServerManifest | WhatsAppFakeServerManifest;
7
+ export type StartedCrablineFakeProviderServer = StartedSlackFakeServer | StartedTelegramFakeServer | StartedWhatsAppFakeServer;
8
+ export type StartCrablineFakeProviderServerParams = (StartSlackFakeServerParams & {
9
+ channel: "slack";
10
+ }) | (StartTelegramFakeServerParams & {
11
+ channel: "telegram";
12
+ }) | (StartWhatsAppFakeServerParams & {
13
+ channel: "whatsapp";
14
+ });
9
15
  export declare function isCrablineFakeProviderChannel(value: string): value is CrablineFakeProviderChannel;
16
+ export declare function startCrablineFakeProviderServer(params: StartSlackFakeServerParams & {
17
+ channel: "slack";
18
+ }): Promise<StartedSlackFakeServer>;
19
+ export declare function startCrablineFakeProviderServer(params: StartTelegramFakeServerParams & {
20
+ channel: "telegram";
21
+ }): Promise<StartedTelegramFakeServer>;
22
+ export declare function startCrablineFakeProviderServer(params: StartWhatsAppFakeServerParams & {
23
+ channel: "whatsapp";
24
+ }): Promise<StartedWhatsAppFakeServer>;
10
25
  export declare function startCrablineFakeProviderServer(params: StartCrablineFakeProviderServerParams): Promise<StartedCrablineFakeProviderServer>;
@@ -1,12 +1,26 @@
1
+ import { startSlackFakeServer, } from "./slack.js";
1
2
  import { startTelegramFakeServer, } from "./telegram.js";
2
- export const CRABLINE_FAKE_PROVIDER_CHANNELS = Object.freeze(["telegram"]);
3
+ import { startWhatsAppFakeServer, } from "./whatsapp.js";
4
+ import { CrablineError } from "../core/errors.js";
5
+ export const CRABLINE_FAKE_PROVIDER_CHANNELS = Object.freeze([
6
+ "slack",
7
+ "telegram",
8
+ "whatsapp",
9
+ ]);
10
+ const CRABLINE_FAKE_PROVIDER_CHANNEL_SET = new Set(CRABLINE_FAKE_PROVIDER_CHANNELS);
3
11
  export function isCrablineFakeProviderChannel(value) {
4
- return CRABLINE_FAKE_PROVIDER_CHANNELS.includes(value);
12
+ return CRABLINE_FAKE_PROVIDER_CHANNEL_SET.has(value);
5
13
  }
6
14
  export async function startCrablineFakeProviderServer(params) {
7
- switch (params.channel) {
8
- case "telegram":
9
- return await startTelegramFakeServer(params);
15
+ if (params.channel === "slack") {
16
+ return await startSlackFakeServer(params);
10
17
  }
18
+ if (params.channel === "telegram") {
19
+ return await startTelegramFakeServer(params);
20
+ }
21
+ if (params.channel === "whatsapp") {
22
+ return await startWhatsAppFakeServer(params);
23
+ }
24
+ throw new CrablineError("Unsupported fake provider server.", { kind: "config" });
11
25
  }
12
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/fake-servers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,GAIxB,MAAM,eAAe,CAAC;AAEvB,MAAM,CAAC,MAAM,+BAA+B,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAU,CAAC,CAAC;AAYpF,MAAM,UAAU,6BAA6B,CAAC,KAAa;IACzD,OAAO,+BAA+B,CAAC,QAAQ,CAAC,KAAoC,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,MAA6C;IAE7C,QAAQ,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,UAAU;YACb,OAAO,MAAM,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/fake-servers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,GAIrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,uBAAuB,GAIxB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,uBAAuB,GAIxB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,CAAC,MAAM,+BAA+B,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3D,OAAO;IACP,UAAU;IACV,UAAU;CACF,CAAC,CAAC;AAmBZ,MAAM,kCAAkC,GAAG,IAAI,GAAG,CAAS,+BAA+B,CAAC,CAAC;AAE5F,MAAM,UAAU,6BAA6B,CAAC,KAAa;IACzD,OAAO,kCAAkC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAcD,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,MAA6C;IAE7C,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAC/B,OAAO,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,OAAO,MAAM,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,OAAO,MAAM,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,IAAI,aAAa,CAAC,mCAAmC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnF,CAAC"}
@@ -0,0 +1,34 @@
1
+ export type SlackFakeServerManifest = {
2
+ adminToken: string;
3
+ baseUrl: string;
4
+ botToken: string;
5
+ endpoints: {
6
+ adminInboundUrl: string;
7
+ apiRoot: string;
8
+ eventsUrl: string;
9
+ };
10
+ env: {
11
+ SLACK_API_URL: string;
12
+ SLACK_BOT_TOKEN: string;
13
+ SLACK_SIGNING_SECRET: string;
14
+ };
15
+ provider: "slack";
16
+ recorderPath: string;
17
+ signingSecret: string;
18
+ version: 1;
19
+ };
20
+ export type StartedSlackFakeServer = {
21
+ close(): Promise<void>;
22
+ manifest: SlackFakeServerManifest;
23
+ };
24
+ export type StartSlackFakeServerParams = {
25
+ adminToken?: string | undefined;
26
+ botId?: string | undefined;
27
+ botToken?: string | undefined;
28
+ botUserId?: string | undefined;
29
+ host?: string | undefined;
30
+ port?: number | undefined;
31
+ recorderPath?: string | undefined;
32
+ signingSecret?: string | undefined;
33
+ };
34
+ export declare function startSlackFakeServer(params?: StartSlackFakeServerParams): Promise<StartedSlackFakeServer>;