@openclaw/crabline 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +226 -0
  3. package/dist/src/bin/crabline.d.ts +2 -0
  4. package/dist/src/bin/crabline.js +7 -0
  5. package/dist/src/bin/crabline.js.map +1 -0
  6. package/dist/src/cli/program.d.ts +5 -0
  7. package/dist/src/cli/program.js +295 -0
  8. package/dist/src/cli/program.js.map +1 -0
  9. package/dist/src/config/load.d.ts +6 -0
  10. package/dist/src/config/load.js +41 -0
  11. package/dist/src/config/load.js.map +1 -0
  12. package/dist/src/config/schema.d.ts +1571 -0
  13. package/dist/src/config/schema.js +528 -0
  14. package/dist/src/config/schema.js.map +1 -0
  15. package/dist/src/core/errors.d.ts +12 -0
  16. package/dist/src/core/errors.js +28 -0
  17. package/dist/src/core/errors.js.map +1 -0
  18. package/dist/src/core/exit-codes.d.ts +13 -0
  19. package/dist/src/core/exit-codes.js +13 -0
  20. package/dist/src/core/exit-codes.js.map +1 -0
  21. package/dist/src/core/matcher.d.ts +2 -0
  22. package/dist/src/core/matcher.js +30 -0
  23. package/dist/src/core/matcher.js.map +1 -0
  24. package/dist/src/core/message-template.d.ts +2 -0
  25. package/dist/src/core/message-template.js +20 -0
  26. package/dist/src/core/message-template.js.map +1 -0
  27. package/dist/src/core/nonces.d.ts +2 -0
  28. package/dist/src/core/nonces.js +11 -0
  29. package/dist/src/core/nonces.js.map +1 -0
  30. package/dist/src/core/reporters.d.ts +3 -0
  31. package/dist/src/core/reporters.js +23 -0
  32. package/dist/src/core/reporters.js.map +1 -0
  33. package/dist/src/core/run.d.ts +30 -0
  34. package/dist/src/core/run.js +240 -0
  35. package/dist/src/core/run.js.map +1 -0
  36. package/dist/src/fake-servers/index.d.ts +10 -0
  37. package/dist/src/fake-servers/index.js +12 -0
  38. package/dist/src/fake-servers/index.js.map +1 -0
  39. package/dist/src/fake-servers/telegram.d.ts +29 -0
  40. package/dist/src/fake-servers/telegram.js +346 -0
  41. package/dist/src/fake-servers/telegram.js.map +1 -0
  42. package/dist/src/index.d.ts +15 -0
  43. package/dist/src/index.js +9 -0
  44. package/dist/src/index.js.map +1 -0
  45. package/dist/src/openclaw.d.ts +102 -0
  46. package/dist/src/openclaw.js +289 -0
  47. package/dist/src/openclaw.js.map +1 -0
  48. package/dist/src/providers/builtin/discord.d.ts +15 -0
  49. package/dist/src/providers/builtin/discord.js +92 -0
  50. package/dist/src/providers/builtin/discord.js.map +1 -0
  51. package/dist/src/providers/builtin/feishu.d.ts +10 -0
  52. package/dist/src/providers/builtin/feishu.js +95 -0
  53. package/dist/src/providers/builtin/feishu.js.map +1 -0
  54. package/dist/src/providers/builtin/googlechat.d.ts +11 -0
  55. package/dist/src/providers/builtin/googlechat.js +83 -0
  56. package/dist/src/providers/builtin/googlechat.js.map +1 -0
  57. package/dist/src/providers/builtin/imessage.d.ts +11 -0
  58. package/dist/src/providers/builtin/imessage.js +67 -0
  59. package/dist/src/providers/builtin/imessage.js.map +1 -0
  60. package/dist/src/providers/builtin/loopback.d.ts +63 -0
  61. package/dist/src/providers/builtin/loopback.js +174 -0
  62. package/dist/src/providers/builtin/loopback.js.map +1 -0
  63. package/dist/src/providers/builtin/matrix.d.ts +21 -0
  64. package/dist/src/providers/builtin/matrix.js +84 -0
  65. package/dist/src/providers/builtin/matrix.js.map +1 -0
  66. package/dist/src/providers/builtin/mattermost.d.ts +11 -0
  67. package/dist/src/providers/builtin/mattermost.js +67 -0
  68. package/dist/src/providers/builtin/mattermost.js.map +1 -0
  69. package/dist/src/providers/builtin/msteams.d.ts +13 -0
  70. package/dist/src/providers/builtin/msteams.js +72 -0
  71. package/dist/src/providers/builtin/msteams.js.map +1 -0
  72. package/dist/src/providers/builtin/native-local-mock.d.ts +48 -0
  73. package/dist/src/providers/builtin/native-local-mock.js +119 -0
  74. package/dist/src/providers/builtin/native-local-mock.js.map +1 -0
  75. package/dist/src/providers/builtin/script.d.ts +39 -0
  76. package/dist/src/providers/builtin/script.js +206 -0
  77. package/dist/src/providers/builtin/script.js.map +1 -0
  78. package/dist/src/providers/builtin/slack.d.ts +6 -0
  79. package/dist/src/providers/builtin/slack.js +106 -0
  80. package/dist/src/providers/builtin/slack.js.map +1 -0
  81. package/dist/src/providers/builtin/telegram.d.ts +21 -0
  82. package/dist/src/providers/builtin/telegram.js +123 -0
  83. package/dist/src/providers/builtin/telegram.js.map +1 -0
  84. package/dist/src/providers/builtin/whatsapp.d.ts +19 -0
  85. package/dist/src/providers/builtin/whatsapp.js +90 -0
  86. package/dist/src/providers/builtin/whatsapp.js.map +1 -0
  87. package/dist/src/providers/builtin/zalo.d.ts +17 -0
  88. package/dist/src/providers/builtin/zalo.js +70 -0
  89. package/dist/src/providers/builtin/zalo.js.map +1 -0
  90. package/dist/src/providers/catalog.d.ts +69 -0
  91. package/dist/src/providers/catalog.js +95 -0
  92. package/dist/src/providers/catalog.js.map +1 -0
  93. package/dist/src/providers/local-mock.d.ts +41 -0
  94. package/dist/src/providers/local-mock.js +243 -0
  95. package/dist/src/providers/local-mock.js.map +1 -0
  96. package/dist/src/providers/recorder.d.ts +19 -0
  97. package/dist/src/providers/recorder.js +160 -0
  98. package/dist/src/providers/recorder.js.map +1 -0
  99. package/dist/src/providers/registry.d.ts +8 -0
  100. package/dist/src/providers/registry.js +171 -0
  101. package/dist/src/providers/registry.js.map +1 -0
  102. package/dist/src/providers/types.d.ts +94 -0
  103. package/dist/src/providers/types.js +2 -0
  104. package/dist/src/providers/types.js.map +1 -0
  105. package/dist/src/providers/webhook-server.d.ts +12 -0
  106. package/dist/src/providers/webhook-server.js +118 -0
  107. package/dist/src/providers/webhook-server.js.map +1 -0
  108. package/docs/channel-setup.md +181 -0
  109. package/fixtures/examples/crabline.example.yaml +195 -0
  110. package/fixtures/examples/openclaw-bridge.yaml +125 -0
  111. package/package.json +64 -0
@@ -0,0 +1,346 @@
1
+ import { createServer } from "node:http";
2
+ import { randomBytes, timingSafeEqual } from "node:crypto";
3
+ import fs from "node:fs/promises";
4
+ import path from "node:path";
5
+ import { CrablineError } from "../core/errors.js";
6
+ function jsonResponse(value, status = 200) {
7
+ return Response.json(value, { status });
8
+ }
9
+ function telegramOk(result) {
10
+ return jsonResponse({ ok: true, result });
11
+ }
12
+ function telegramError(description, status = 400) {
13
+ return jsonResponse({ description, error_code: status, ok: false }, status);
14
+ }
15
+ async function readBody(request) {
16
+ const chunks = [];
17
+ for await (const chunk of request) {
18
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
19
+ }
20
+ return Buffer.concat(chunks);
21
+ }
22
+ async function parseRequestBody(request) {
23
+ const body = await readBody(request);
24
+ if (body.length === 0) {
25
+ return {};
26
+ }
27
+ const contentType = request.headers["content-type"] ?? "";
28
+ if (Array.isArray(contentType)
29
+ ? contentType.some((entry) => entry.includes("json"))
30
+ : contentType.includes("json")) {
31
+ return JSON.parse(body.toString("utf8"));
32
+ }
33
+ const params = new URLSearchParams(body.toString("utf8"));
34
+ return Object.fromEntries(params.entries());
35
+ }
36
+ function closeServer(server) {
37
+ return new Promise((resolve, reject) => {
38
+ server.close((error) => {
39
+ if (error) {
40
+ reject(error);
41
+ return;
42
+ }
43
+ resolve();
44
+ });
45
+ });
46
+ }
47
+ async function writeResponse(response, fetchResponse) {
48
+ response.statusCode = fetchResponse.status;
49
+ for (const [name, value] of fetchResponse.headers) {
50
+ response.setHeader(name, value);
51
+ }
52
+ response.end(Buffer.from(await fetchResponse.arrayBuffer()));
53
+ }
54
+ function requireTelegramBotPath(pathname) {
55
+ const match = /^\/bot([^/]+)\/([A-Za-z][A-Za-z0-9_]*)$/u.exec(pathname);
56
+ if (!match?.[1] || !match[2]) {
57
+ return undefined;
58
+ }
59
+ return { method: match[2], token: match[1] };
60
+ }
61
+ function toStringValue(value) {
62
+ return typeof value === "string" && value.length > 0
63
+ ? value
64
+ : typeof value === "number" || typeof value === "bigint"
65
+ ? value.toString()
66
+ : undefined;
67
+ }
68
+ function toIntegerValue(value) {
69
+ const stringValue = toStringValue(value);
70
+ if (!stringValue || !/^-?\d+$/u.test(stringValue)) {
71
+ return undefined;
72
+ }
73
+ return Number(stringValue);
74
+ }
75
+ function telegramChatId(value) {
76
+ const stringValue = toStringValue(value);
77
+ if (!stringValue) {
78
+ return undefined;
79
+ }
80
+ return /^-?\d+$/u.test(stringValue) ? Number(stringValue) : stringValue;
81
+ }
82
+ async function appendEvent(state, event) {
83
+ await fs.mkdir(path.dirname(state.recorderPath), { recursive: true });
84
+ await fs.appendFile(state.recorderPath, `${JSON.stringify(event)}\n`, "utf8");
85
+ }
86
+ function createBotUser(state) {
87
+ return {
88
+ can_join_groups: true,
89
+ can_read_all_group_messages: true,
90
+ first_name: "Crabline",
91
+ has_topics_enabled: true,
92
+ id: state.botId,
93
+ is_bot: true,
94
+ supports_inline_queries: false,
95
+ username: state.botUsername,
96
+ };
97
+ }
98
+ function createChat(chatId) {
99
+ const type = typeof chatId !== "number" || chatId >= 0
100
+ ? "private"
101
+ : String(chatId).startsWith("-100")
102
+ ? "supergroup"
103
+ : "group";
104
+ return {
105
+ id: chatId,
106
+ type,
107
+ };
108
+ }
109
+ function createOutboundMessage(state, body) {
110
+ const chatId = telegramChatId(body.chat_id);
111
+ const text = toStringValue(body.text);
112
+ if (chatId === undefined || !text) {
113
+ return undefined;
114
+ }
115
+ const threadId = toIntegerValue(body.message_thread_id);
116
+ return {
117
+ chat: createChat(chatId),
118
+ date: Math.floor(Date.now() / 1000),
119
+ from: createBotUser(state),
120
+ message_id: state.nextMessageId++,
121
+ ...(threadId !== undefined ? { message_thread_id: threadId } : {}),
122
+ text,
123
+ };
124
+ }
125
+ function createEditedMessage(state, body) {
126
+ const chatId = telegramChatId(body.chat_id);
127
+ const text = toStringValue(body.text);
128
+ const messageId = toIntegerValue(body.message_id);
129
+ if (chatId === undefined || !text || messageId === undefined) {
130
+ return undefined;
131
+ }
132
+ const threadId = toIntegerValue(body.message_thread_id);
133
+ return {
134
+ chat: createChat(chatId),
135
+ date: Math.floor(Date.now() / 1000),
136
+ from: createBotUser(state),
137
+ message_id: messageId,
138
+ ...(threadId !== undefined ? { message_thread_id: threadId } : {}),
139
+ text,
140
+ };
141
+ }
142
+ function createInboundUpdate(state, body) {
143
+ const chatId = telegramChatId(body.chatId ?? body.chat_id);
144
+ const text = toStringValue(body.text);
145
+ if (chatId === undefined || !text) {
146
+ return undefined;
147
+ }
148
+ const fromId = toIntegerValue(body.fromId ?? body.from_id) ?? 100001;
149
+ const threadId = toIntegerValue(body.messageThreadId ?? body.message_thread_id);
150
+ const fromUsername = toStringValue(body.fromUsername ?? body.from_username);
151
+ const messageId = toIntegerValue(body.messageId ?? body.message_id);
152
+ const updateId = toIntegerValue(body.updateId ?? body.update_id);
153
+ if (messageId !== undefined) {
154
+ state.nextMessageId = Math.max(state.nextMessageId, messageId + 1);
155
+ }
156
+ if (updateId !== undefined) {
157
+ state.nextUpdateId = Math.max(state.nextUpdateId, updateId + 1);
158
+ }
159
+ return {
160
+ message: {
161
+ chat: createChat(chatId),
162
+ date: Math.floor(Date.now() / 1000),
163
+ from: {
164
+ first_name: toStringValue(body.fromName ?? body.from_name) ?? "QA User",
165
+ id: fromId,
166
+ is_bot: false,
167
+ ...(fromUsername ? { username: fromUsername } : {}),
168
+ },
169
+ message_id: messageId ?? state.nextMessageId++,
170
+ ...(threadId !== undefined ? { message_thread_id: threadId } : {}),
171
+ text,
172
+ },
173
+ update_id: updateId ?? state.nextUpdateId++,
174
+ };
175
+ }
176
+ function queryRecord(url) {
177
+ return Object.fromEntries(url.searchParams.entries());
178
+ }
179
+ function hasAdminToken(request, expectedToken) {
180
+ const header = request.headers["x-crabline-admin-token"];
181
+ const directToken = Array.isArray(header) ? header[0] : header;
182
+ const authorization = request.headers.authorization;
183
+ const bearerToken = typeof authorization === "string" && /^Bearer\s+/iu.test(authorization)
184
+ ? authorization.replace(/^Bearer\s+/iu, "")
185
+ : undefined;
186
+ const providedToken = directToken ?? bearerToken;
187
+ if (!providedToken) {
188
+ return false;
189
+ }
190
+ const provided = Buffer.from(providedToken);
191
+ const expected = Buffer.from(expectedToken);
192
+ return provided.length === expected.length && timingSafeEqual(provided, expected);
193
+ }
194
+ async function handleTelegramApi(params) {
195
+ switch (params.method) {
196
+ case "getMe":
197
+ return telegramOk(createBotUser(params.state));
198
+ case "deleteWebhook":
199
+ case "setWebhook":
200
+ case "setMyCommands":
201
+ case "deleteMyCommands":
202
+ case "sendChatAction":
203
+ case "answerCallbackQuery":
204
+ case "deleteMessage":
205
+ case "pinChatMessage":
206
+ case "unpinChatMessage":
207
+ case "setMessageReaction":
208
+ case "editForumTopic":
209
+ return telegramOk(true);
210
+ case "createForumTopic":
211
+ return telegramOk({
212
+ icon_color: 0x6fb9f0,
213
+ message_thread_id: params.state.nextMessageId++,
214
+ name: toStringValue(params.body.name) ?? "Crabline Topic",
215
+ });
216
+ case "editMessageText": {
217
+ const message = createEditedMessage(params.state, params.body);
218
+ return message
219
+ ? telegramOk(message)
220
+ : telegramError("Bad Request: chat_id, message_id, and text are required");
221
+ }
222
+ case "sendMessage": {
223
+ const message = createOutboundMessage(params.state, params.body);
224
+ return message
225
+ ? telegramOk(message)
226
+ : telegramError("Bad Request: chat_id and text are required");
227
+ }
228
+ case "getUpdates": {
229
+ const offset = toIntegerValue(params.body.offset);
230
+ const limit = toIntegerValue(params.body.limit) ?? 100;
231
+ const updates = offset === undefined
232
+ ? params.state.updates
233
+ : params.state.updates.filter((update) => update.update_id >= offset);
234
+ return telegramOk(updates.slice(0, limit));
235
+ }
236
+ default:
237
+ return telegramError(`Not Found: unsupported method ${params.method}`, 404);
238
+ }
239
+ }
240
+ async function handleRequest(params) {
241
+ const url = new URL(params.request.url ?? "/", "http://127.0.0.1");
242
+ if (url.pathname === "/crabline/telegram/inbound") {
243
+ if (params.request.method !== "POST") {
244
+ return new Response("not found", { status: 404 });
245
+ }
246
+ if (!hasAdminToken(params.request, params.state.adminToken)) {
247
+ return new Response("unauthorized", {
248
+ headers: { "www-authenticate": "Bearer" },
249
+ status: 401,
250
+ });
251
+ }
252
+ const body = await parseRequestBody(params.request);
253
+ const update = createInboundUpdate(params.state, body);
254
+ await appendEvent(params.state, {
255
+ at: new Date().toISOString(),
256
+ body,
257
+ method: params.request.method ?? "POST",
258
+ path: url.pathname,
259
+ query: queryRecord(url),
260
+ type: "admin",
261
+ });
262
+ if (!update) {
263
+ return telegramError("Bad Request: chatId and text are required");
264
+ }
265
+ params.state.updates.push(update);
266
+ return jsonResponse({ ok: true, update });
267
+ }
268
+ const botPath = requireTelegramBotPath(url.pathname);
269
+ if (!botPath || botPath.token !== params.state.botToken) {
270
+ return new Response("not found", { status: 404 });
271
+ }
272
+ const body = params.request.method === "GET" ? queryRecord(url) : await parseRequestBody(params.request);
273
+ await appendEvent(params.state, {
274
+ at: new Date().toISOString(),
275
+ body,
276
+ method: params.request.method ?? "GET",
277
+ path: `/bot<redacted>/${botPath.method}`,
278
+ query: queryRecord(url),
279
+ type: "api",
280
+ });
281
+ return handleTelegramApi({
282
+ body,
283
+ method: botPath.method,
284
+ state: params.state,
285
+ });
286
+ }
287
+ export async function startTelegramFakeServer(params = {}) {
288
+ const state = {
289
+ adminToken: params.adminToken ?? randomBytes(24).toString("hex"),
290
+ botId: params.botId ?? 424242,
291
+ botToken: params.botToken ?? "424242:crabline-telegram-token",
292
+ botUsername: params.botUsername ?? "crabline_bot",
293
+ nextMessageId: 1,
294
+ nextUpdateId: 1,
295
+ recorderPath: params.recorderPath ?? path.resolve(".crabline", "fake-servers", "telegram.jsonl"),
296
+ updates: [],
297
+ };
298
+ const host = params.host ?? "127.0.0.1";
299
+ const port = params.port ?? 0;
300
+ const server = createServer(async (request, response) => {
301
+ try {
302
+ await writeResponse(response, await handleRequest({ request, state }));
303
+ }
304
+ catch (error) {
305
+ await writeResponse(response, jsonResponse({
306
+ error: error instanceof Error ? error.message : String(error),
307
+ ok: false,
308
+ }, 500));
309
+ }
310
+ });
311
+ await new Promise((resolve, reject) => {
312
+ server.once("error", reject);
313
+ server.listen(port, host, () => {
314
+ server.off("error", reject);
315
+ resolve();
316
+ });
317
+ });
318
+ const address = server.address();
319
+ if (!address || typeof address === "string") {
320
+ throw new CrablineError("Unable to resolve Telegram fake server address.", {
321
+ kind: "connectivity",
322
+ });
323
+ }
324
+ const baseUrl = `http://${host}:${address.port}`;
325
+ return {
326
+ async close() {
327
+ await closeServer(server);
328
+ },
329
+ manifest: {
330
+ adminToken: state.adminToken,
331
+ baseUrl,
332
+ botToken: state.botToken,
333
+ endpoints: {
334
+ adminInboundUrl: `${baseUrl}/crabline/telegram/inbound`,
335
+ apiRoot: baseUrl,
336
+ },
337
+ env: {
338
+ TELEGRAM_BOT_TOKEN: state.botToken,
339
+ },
340
+ provider: "telegram",
341
+ recorderPath: state.recorderPath,
342
+ version: 1,
343
+ },
344
+ };
345
+ }
346
+ //# sourceMappingURL=telegram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../../src/fake-servers/telegram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA0D,MAAM,WAAW,CAAC;AACjG,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AA4ElD,SAAS,YAAY,CAAC,KAAc,EAAE,MAAM,GAAG,GAAG;IAChD,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,UAAU,CAAC,MAAe;IACjC,OAAO,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,aAAa,CAAC,WAAmB,EAAE,MAAM,GAAG,GAAG;IACtD,OAAO,YAAY,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;AAC9E,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,OAAwB;IAC9C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,OAAwB;IACtD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC1D,IACE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;QACxB,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAChC,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAA4B,CAAC;IACtE,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACrB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,QAAwB,EAAE,aAAuB;IAC5E,QAAQ,CAAC,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;QAClD,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAgB;IAC9C,MAAM,KAAK,GAAG,0CAA0C,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAClD,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;YACtD,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE;YAClB,CAAC,CAAC,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;AAC1E,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,KAA8B,EAAE,KAA8B;IACvF,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,MAAM,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,aAAa,CAAC,KAA8B;IACnD,OAAO;QACL,eAAe,EAAE,IAAI;QACrB,2BAA2B,EAAE,IAAI;QACjC,UAAU,EAAE,UAAU;QACtB,kBAAkB,EAAE,IAAI;QACxB,EAAE,EAAE,KAAK,CAAC,KAAK;QACf,MAAM,EAAE,IAAI;QACZ,uBAAuB,EAAE,KAAK;QAC9B,QAAQ,EAAE,KAAK,CAAC,WAAW;KAC5B,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,MAAuB;IACzC,MAAM,IAAI,GACR,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,CAAC;QACvC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;YACjC,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,OAAO,CAAC;IAChB,OAAO;QACL,EAAE,EAAE,MAAM;QACV,IAAI;KACL,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAA8B,EAC9B,IAA6B;IAE7B,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACxD,OAAO;QACL,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC;QACxB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QACnC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC;QAC1B,UAAU,EAAE,KAAK,CAAC,aAAa,EAAE;QACjC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,IAAI;KACL,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAA8B,EAC9B,IAA6B;IAE7B,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC7D,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACxD,OAAO;QACL,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC;QACxB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QACnC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC;QAC1B,UAAU,EAAE,SAAS;QACrB,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,IAAI;KACL,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAA8B,EAC9B,IAA6B;IAE7B,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC;IACrE,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAChF,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5E,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;IACjE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,OAAO;QACL,OAAO,EAAE;YACP,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC;YACxB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YACnC,IAAI,EAAE;gBACJ,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS;gBACvE,EAAE,EAAE,MAAM;gBACV,MAAM,EAAE,KAAK;gBACb,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpD;YACD,UAAU,EAAE,SAAS,IAAI,KAAK,CAAC,aAAa,EAAE;YAC9C,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,IAAI;SACL;QACD,SAAS,EAAE,QAAQ,IAAI,KAAK,CAAC,YAAY,EAAE;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,GAAQ;IAC3B,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,aAAa,CAAC,OAAwB,EAAE,aAAqB;IACpE,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/D,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;IACpD,MAAM,WAAW,GACf,OAAO,aAAa,KAAK,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC;QACrE,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;QAC3C,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,aAAa,GAAG,WAAW,IAAI,WAAW,CAAC;IACjD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5C,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACpF,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,MAIhC;IACC,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,OAAO;YACV,OAAO,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACjD,KAAK,eAAe,CAAC;QACrB,KAAK,YAAY,CAAC;QAClB,KAAK,eAAe,CAAC;QACrB,KAAK,kBAAkB,CAAC;QACxB,KAAK,gBAAgB,CAAC;QACtB,KAAK,qBAAqB,CAAC;QAC3B,KAAK,eAAe,CAAC;QACrB,KAAK,gBAAgB,CAAC;QACtB,KAAK,kBAAkB,CAAC;QACxB,KAAK,oBAAoB,CAAC;QAC1B,KAAK,gBAAgB;YACnB,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1B,KAAK,kBAAkB;YACrB,OAAO,UAAU,CAAC;gBAChB,UAAU,EAAE,QAAQ;gBACpB,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE;gBAC/C,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,gBAAgB;aAC1D,CAAC,CAAC;QACL,KAAK,iBAAiB,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC/D,OAAO,OAAO;gBACZ,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;gBACrB,CAAC,CAAC,aAAa,CAAC,yDAAyD,CAAC,CAAC;QAC/E,CAAC;QACD,KAAK,aAAa,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACjE,OAAO,OAAO;gBACZ,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;gBACrB,CAAC,CAAC,aAAa,CAAC,4CAA4C,CAAC,CAAC;QAClE,CAAC;QACD,KAAK,YAAY,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;YACvD,MAAM,OAAO,GACX,MAAM,KAAK,SAAS;gBAClB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO;gBACtB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC;YAC1E,OAAO,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD;YACE,OAAO,aAAa,CAAC,iCAAiC,MAAM,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,MAAoE;IAC/F,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;IACnE,IAAI,GAAG,CAAC,QAAQ,KAAK,4BAA4B,EAAE,CAAC;QAClD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACrC,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5D,OAAO,IAAI,QAAQ,CAAC,cAAc,EAAE;gBAClC,OAAO,EAAE,EAAE,kBAAkB,EAAE,QAAQ,EAAE;gBACzC,MAAM,EAAE,GAAG;aACZ,CAAC,CAAC;QACL,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACvD,MAAM,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE;YAC9B,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,IAAI;YACJ,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM;YACvC,IAAI,EAAE,GAAG,CAAC,QAAQ;YAClB,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC;YACvB,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,aAAa,CAAC,2CAA2C,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,OAAO,GAAG,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACxD,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,IAAI,GACR,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9F,MAAM,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE;QAC9B,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC5B,IAAI;QACJ,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK;QACtC,IAAI,EAAE,kBAAkB,OAAO,CAAC,MAAM,EAAE;QACxC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC;QACvB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IACH,OAAO,iBAAiB,CAAC;QACvB,IAAI;QACJ,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAM,GAAkC,EAAE;IAE1C,MAAM,KAAK,GAA4B;QACrC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAChE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM;QAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,gCAAgC;QAC7D,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,cAAc;QACjD,aAAa,EAAE,CAAC;QAChB,YAAY,EAAE,CAAC;QACf,YAAY,EACV,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,EAAE,gBAAgB,CAAC;QACpF,OAAO,EAAE,EAAE;KACZ,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,WAAW,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;QACtD,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,QAAQ,EAAE,MAAM,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,aAAa,CACjB,QAAQ,EACR,YAAY,CACV;gBACE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,EAAE,EAAE,KAAK;aACV,EACD,GAAG,CACJ,CACF,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;YAC7B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC5B,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,IAAI,aAAa,CAAC,iDAAiD,EAAE;YACzE,IAAI,EAAE,cAAc;SACrB,CAAC,CAAC;IACL,CAAC;IACD,MAAM,OAAO,GAAG,UAAU,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IACjD,OAAO;QACL,KAAK,CAAC,KAAK;YACT,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QACD,QAAQ,EAAE;YACR,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,OAAO;YACP,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,SAAS,EAAE;gBACT,eAAe,EAAE,GAAG,OAAO,4BAA4B;gBACvD,OAAO,EAAE,OAAO;aACjB;YACD,GAAG,EAAE;gBACH,kBAAkB,EAAE,KAAK,CAAC,QAAQ;aACnC;YACD,QAAQ,EAAE,UAAU;YACpB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,OAAO,EAAE,CAAC;SACX;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ export { resolveTelegramAdapterConfig } from "./providers/builtin/telegram.js";
2
+ export { resolveWhatsAppAdapterConfig } from "./providers/builtin/whatsapp.js";
3
+ export { startTelegramFakeServer } from "./fake-servers/telegram.js";
4
+ export { CRABLINE_FAKE_PROVIDER_CHANNELS, isCrablineFakeProviderChannel, startCrablineFakeProviderServer, } from "./fake-servers/index.js";
5
+ export { createOpenClawCrablineAgentDelivery, createOpenClawCrablineChannelReportNotes, createOpenClawCrablineFakeProviderBinding, createOpenClawCrablineInbound, createOpenClawCrablineOutboundFromRecorderEvent, OPENCLAW_CRABLINE_CHANNEL_CAPABILITY_MATRIX_PATH, OPENCLAW_CRABLINE_CHANNEL_SMOKE_PATH, OPENCLAW_CRABLINE_DEFAULT_CHANNEL, OPENCLAW_CRABLINE_MANIFEST_PATH, probeOpenClawCrablineFakeProvider, resolveOpenClawCrablineChannel, resolveOpenClawCrablineChannelDriverSelection, runOpenClawCrablineChannelDriverSmoke, startOpenClawCrablineAdapter, } from "./openclaw.js";
6
+ export { BUILTIN_ADAPTERS, FIXTURE_MODES, INBOUND_AUTHORS, INBOUND_NONCE_MODES, INBOUND_STRATEGIES, ManifestSchema, PROVIDER_PLATFORMS, ProviderConfigSchema, } from "./config/schema.js";
7
+ export { OPENCLAW_SUPPORT_CATALOG } from "./providers/catalog.js";
8
+ export { createRegistry } from "./providers/registry.js";
9
+ export type { CatalogEntry } from "./providers/catalog.js";
10
+ export type { Registry } from "./providers/registry.js";
11
+ export type { BuiltinAdapterId, FixtureDefinition, FixtureMode, ManifestDefinition, ProviderConfig, ProviderPlatform, } from "./config/schema.js";
12
+ export type { InboundEnvelope, NormalizedTarget, ProbeResult, ProviderAdapter, ProviderContext, ProviderSupportStatus, SendContext, SendResult, WaitContext, WatchContext, } from "./providers/types.js";
13
+ export type { StartedTelegramFakeServer, StartTelegramFakeServerParams, TelegramFakeServerManifest, } from "./fake-servers/telegram.js";
14
+ export type { CrablineFakeProviderChannel, CrablineFakeProviderManifest, StartedCrablineFakeProviderServer, StartCrablineFakeProviderServerParams, } from "./fake-servers/index.js";
15
+ export type { OpenClawCrablineAgentDelivery, OpenClawCrablineChannelDriverSelection, OpenClawCrablineChannelDriverSmokeResult, OpenClawCrablineGatewayBinding, OpenClawCrablineInbound, OpenClawCrablineInboundInput, OpenClawCrablineOutboundMessage, StartedOpenClawCrablineAdapter, StartOpenClawCrablineAdapterParams, } from "./openclaw.js";
@@ -0,0 +1,9 @@
1
+ export { resolveTelegramAdapterConfig } from "./providers/builtin/telegram.js";
2
+ export { resolveWhatsAppAdapterConfig } from "./providers/builtin/whatsapp.js";
3
+ export { startTelegramFakeServer } from "./fake-servers/telegram.js";
4
+ export { CRABLINE_FAKE_PROVIDER_CHANNELS, isCrablineFakeProviderChannel, startCrablineFakeProviderServer, } from "./fake-servers/index.js";
5
+ export { createOpenClawCrablineAgentDelivery, createOpenClawCrablineChannelReportNotes, createOpenClawCrablineFakeProviderBinding, createOpenClawCrablineInbound, createOpenClawCrablineOutboundFromRecorderEvent, OPENCLAW_CRABLINE_CHANNEL_CAPABILITY_MATRIX_PATH, OPENCLAW_CRABLINE_CHANNEL_SMOKE_PATH, OPENCLAW_CRABLINE_DEFAULT_CHANNEL, OPENCLAW_CRABLINE_MANIFEST_PATH, probeOpenClawCrablineFakeProvider, resolveOpenClawCrablineChannel, resolveOpenClawCrablineChannelDriverSelection, runOpenClawCrablineChannelDriverSmoke, startOpenClawCrablineAdapter, } from "./openclaw.js";
6
+ export { BUILTIN_ADAPTERS, FIXTURE_MODES, INBOUND_AUTHORS, INBOUND_NONCE_MODES, INBOUND_STRATEGIES, ManifestSchema, PROVIDER_PLATFORMS, ProviderConfigSchema, } from "./config/schema.js";
7
+ export { OPENCLAW_SUPPORT_CATALOG } from "./providers/catalog.js";
8
+ export { createRegistry } from "./providers/registry.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,mCAAmC,EACnC,wCAAwC,EACxC,yCAAyC,EACzC,6BAA6B,EAC7B,+CAA+C,EAC/C,gDAAgD,EAChD,oCAAoC,EACpC,iCAAiC,EACjC,+BAA+B,EAC/B,iCAAiC,EACjC,8BAA8B,EAC9B,6CAA6C,EAC7C,qCAAqC,EACrC,4BAA4B,GAC7B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,102 @@
1
+ import { type CrablineFakeProviderChannel, type CrablineFakeProviderManifest } from "./fake-servers/index.js";
2
+ export declare const OPENCLAW_CRABLINE_CHANNEL_CAPABILITY_MATRIX_PATH = "crabline-fake-provider-capabilities.json";
3
+ export declare const OPENCLAW_CRABLINE_CHANNEL_SMOKE_PATH = "crabline-fake-provider-smoke.json";
4
+ export declare const OPENCLAW_CRABLINE_MANIFEST_PATH = "crabline-fake-provider-server.json";
5
+ export declare const OPENCLAW_CRABLINE_DEFAULT_CHANNEL = "telegram";
6
+ export type OpenClawCrablineChannelDriverSelection = {
7
+ channel: CrablineFakeProviderChannel;
8
+ channelDriver: "crabline";
9
+ capabilityMatrixPath: typeof OPENCLAW_CRABLINE_CHANNEL_CAPABILITY_MATRIX_PATH;
10
+ smokeArtifactPath: typeof OPENCLAW_CRABLINE_CHANNEL_SMOKE_PATH;
11
+ };
12
+ export type OpenClawCrablineChannelDriverSmokeResult = {
13
+ capabilityReport: unknown;
14
+ manifestPath: string;
15
+ smoke: unknown;
16
+ };
17
+ export type OpenClawCrablineConversation = {
18
+ id: string;
19
+ kind: "direct" | "group";
20
+ };
21
+ export type OpenClawCrablineGatewayBinding = {
22
+ accountId: string;
23
+ channel: string;
24
+ createChannelDriverSmokeEnv(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
25
+ createGatewayConfig(openclawConfig?: Record<string, unknown>): Record<string, unknown>;
26
+ requiredPluginIds: string[];
27
+ };
28
+ export type OpenClawCrablineAgentDelivery = {
29
+ channel: string;
30
+ replyChannel: string;
31
+ replyTo: string;
32
+ to: string;
33
+ };
34
+ export type OpenClawCrablineInboundInput = {
35
+ conversation: {
36
+ id: string;
37
+ kind: string;
38
+ };
39
+ senderId: string;
40
+ senderName?: string | undefined;
41
+ text: string;
42
+ threadId?: string | undefined;
43
+ };
44
+ export type OpenClawCrablineInbound = {
45
+ providerBody: Record<string, unknown>;
46
+ providerTargetKey: string;
47
+ qaTarget: string;
48
+ stateConversation: OpenClawCrablineConversation;
49
+ threadId?: string | undefined;
50
+ };
51
+ export type OpenClawCrablineOutboundMessage = {
52
+ accountId: string;
53
+ senderId: string;
54
+ senderName: string;
55
+ text: string;
56
+ to: string;
57
+ };
58
+ export type StartOpenClawCrablineAdapterParams = {
59
+ channel: CrablineFakeProviderChannel;
60
+ openclawConfig?: Record<string, unknown> | undefined;
61
+ recorderPath?: string | undefined;
62
+ };
63
+ export type StartedOpenClawCrablineAdapter = OpenClawCrablineGatewayBinding & {
64
+ close(): Promise<void>;
65
+ createAgentDelivery(params: {
66
+ target: string;
67
+ }): OpenClawCrablineAgentDelivery;
68
+ createInbound(params: {
69
+ input: OpenClawCrablineInboundInput;
70
+ }): OpenClawCrablineInbound;
71
+ createOutboundFromRecorderEvent(params: {
72
+ event: unknown;
73
+ targetByProviderTarget: ReadonlyMap<string, string>;
74
+ }): OpenClawCrablineOutboundMessage | null;
75
+ manifest: CrablineFakeProviderManifest;
76
+ probe(): Promise<unknown>;
77
+ };
78
+ export declare function resolveOpenClawCrablineChannel(input?: string | null): CrablineFakeProviderChannel;
79
+ export declare function resolveOpenClawCrablineChannelDriverSelection(params: {
80
+ channel?: string | null;
81
+ }): OpenClawCrablineChannelDriverSelection;
82
+ export declare function probeOpenClawCrablineFakeProvider(manifest: CrablineFakeProviderManifest): Promise<unknown>;
83
+ export declare function createOpenClawCrablineFakeProviderBinding(manifest: CrablineFakeProviderManifest): OpenClawCrablineGatewayBinding;
84
+ export declare function createOpenClawCrablineAgentDelivery(params: {
85
+ manifest: CrablineFakeProviderManifest;
86
+ target: string;
87
+ }): OpenClawCrablineAgentDelivery;
88
+ export declare function createOpenClawCrablineInbound(params: {
89
+ input: OpenClawCrablineInboundInput;
90
+ manifest: CrablineFakeProviderManifest;
91
+ }): OpenClawCrablineInbound;
92
+ export declare function createOpenClawCrablineOutboundFromRecorderEvent(params: {
93
+ event: unknown;
94
+ manifest: CrablineFakeProviderManifest;
95
+ targetByProviderTarget: ReadonlyMap<string, string>;
96
+ }): OpenClawCrablineOutboundMessage | null;
97
+ export declare function startOpenClawCrablineAdapter(params: StartOpenClawCrablineAdapterParams): Promise<StartedOpenClawCrablineAdapter>;
98
+ export declare function runOpenClawCrablineChannelDriverSmoke(params: {
99
+ outputDir: string;
100
+ selection: OpenClawCrablineChannelDriverSelection;
101
+ }): Promise<OpenClawCrablineChannelDriverSmokeResult>;
102
+ export declare function createOpenClawCrablineChannelReportNotes(selection: OpenClawCrablineChannelDriverSelection | null | undefined): string[];