ask-slack-mcp-server 2.2.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server.js +29 -3
- package/dist/server.js.map +1 -1
- package/dist/slack.d.ts +12 -1
- package/dist/slack.js +221 -38
- package/dist/slack.js.map +1 -1
- package/package.json +1 -1
package/dist/server.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import "dotenv/config";
|
|
3
3
|
import http from "node:http";
|
|
4
4
|
import { createRequire } from "module";
|
|
5
|
-
import { sendQuestionAndWait, startBoltApp, stopBoltApp } from "./slack.js";
|
|
5
|
+
import { sendQuestionAndWait, waitForExistingQuestion, startBoltApp, stopBoltApp } from "./slack.js";
|
|
6
6
|
import { getServerPort, getServerApiKey } from "./config.js";
|
|
7
7
|
const require = createRequire(import.meta.url);
|
|
8
8
|
const { version: VERSION } = require("../package.json");
|
|
@@ -64,8 +64,11 @@ const httpServer = http.createServer(async (req, res) => {
|
|
|
64
64
|
description: o.description,
|
|
65
65
|
}))
|
|
66
66
|
: undefined;
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
// Abort when the HTTP client disconnects so we don't leak pending questions
|
|
68
|
+
const abortController = new AbortController();
|
|
69
|
+
req.on("close", () => abortController.abort());
|
|
70
|
+
const result = await sendQuestionAndWait(fullMessage, body.slack_user_id, slackOptions, body.multi_select, abortController.signal);
|
|
71
|
+
sendJson(res, 200, { answer: result.answer, question_id: result.questionId });
|
|
69
72
|
}
|
|
70
73
|
catch (err) {
|
|
71
74
|
const message = err instanceof Error ? err.message : String(err);
|
|
@@ -74,6 +77,29 @@ const httpServer = http.createServer(async (req, res) => {
|
|
|
74
77
|
}
|
|
75
78
|
return;
|
|
76
79
|
}
|
|
80
|
+
// Reconnect to existing pending question (no message resent)
|
|
81
|
+
if (req.method === "POST" && req.url === "/api/wait") {
|
|
82
|
+
const providedKey = req.headers["x-api-key"] ??
|
|
83
|
+
req.headers["authorization"]?.replace(/^Bearer\s+/i, "");
|
|
84
|
+
if (!providedKey || providedKey !== API_KEY) {
|
|
85
|
+
sendJson(res, 401, { error: "Invalid or missing API key" });
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
const rawBody = await readBody(req);
|
|
90
|
+
const body = JSON.parse(rawBody);
|
|
91
|
+
const abortController = new AbortController();
|
|
92
|
+
req.on("close", () => abortController.abort());
|
|
93
|
+
const result = await waitForExistingQuestion(body.slack_user_id, body.question_id, abortController.signal);
|
|
94
|
+
sendJson(res, 200, { answer: result.answer, question_id: result.questionId });
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
98
|
+
console.error("[Server] Error handling /api/wait:", message);
|
|
99
|
+
sendJson(res, 500, { error: message });
|
|
100
|
+
}
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
77
103
|
sendJson(res, 404, { error: "Not found" });
|
|
78
104
|
});
|
|
79
105
|
async function main() {
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,WAAW,EAAuB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,YAAY,EAAE,WAAW,EAAuB,MAAM,YAAY,CAAC;AAC1H,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE7D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAE/E,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;AAC7B,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;AAElC,SAAS,QAAQ,CAAC,GAAyB;IACzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACtE,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CACf,GAAwB,EACxB,MAAc,EACd,IAA6B;IAE7B,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC9D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACtD,eAAe;IACf,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAClD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IAED,6BAA6B;IAC7B,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,cAAc,EAAE,CAAC;QACvD,MAAM,WAAW,GACf,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC;YACxB,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAE3D,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;YAC5C,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IAED,gBAAgB;IAChB,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;QACpD,mBAAmB;QACnB,MAAM,WAAW,GACf,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC;YACxB,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAE3D,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;YAC5C,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAM9B,CAAC;YAEF,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACxD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC,CAAC;gBAClE,OAAO;YACT,CAAC;YAED,0BAA0B;YAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO;gBAC9B,CAAC,CAAC,cAAc,IAAI,CAAC,OAAO,mBAAmB,IAAI,CAAC,QAAQ,EAAE;gBAC9D,CAAC,CAAC,eAAe,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEnC,uCAAuC;YACvC,MAAM,YAAY,GAChB,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBACrC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACvB,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,WAAW,EAAE,CAAC,CAAC,WAAW;iBAC3B,CAAC,CAAC;gBACL,CAAC,CAAC,SAAS,CAAC;YAEhB,4EAA4E;YAC5E,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;YAC9C,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC;YAE/C,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACtC,WAAW,EACX,IAAI,CAAC,aAAa,EAClB,YAAY,EACZ,IAAI,CAAC,YAAY,EACjB,eAAe,CAAC,MAAM,CACvB,CAAC;YAEF,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAChF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC;YAC5D,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,OAAO;IACT,CAAC;IAED,6DAA6D;IAC7D,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;QACrD,MAAM,WAAW,GACf,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC;YACxB,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAE3D,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;YAC5C,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAqD,CAAC;YAErF,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;YAC9C,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC;YAE/C,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAC1C,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,WAAW,EAChB,eAAe,CAAC,MAAM,CACvB,CAAC;YAEF,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAChF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,OAAO,CAAC,CAAC;YAC7D,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,OAAO;IACT,CAAC;IAED,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,KAAK,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;IAEpD,MAAM,YAAY,EAAE,CAAC;IAErB,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QAC3B,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC3C,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,WAAW,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,IAAI,EAAE,CAAC"}
|
package/dist/slack.d.ts
CHANGED
|
@@ -4,4 +4,15 @@ export interface SlackQuestionOption {
|
|
|
4
4
|
}
|
|
5
5
|
export declare function startBoltApp(): Promise<void>;
|
|
6
6
|
export declare function stopBoltApp(): Promise<void>;
|
|
7
|
-
export declare function sendQuestionAndWait(question: string, slackUserId?: string, options?: SlackQuestionOption[], multiSelect?: boolean): Promise<
|
|
7
|
+
export declare function sendQuestionAndWait(question: string, slackUserId?: string, options?: SlackQuestionOption[], multiSelect?: boolean, signal?: AbortSignal): Promise<{
|
|
8
|
+
answer: string;
|
|
9
|
+
questionId: string;
|
|
10
|
+
}>;
|
|
11
|
+
/**
|
|
12
|
+
* Re-attach to an existing pending question without sending a new Slack message.
|
|
13
|
+
* Used by the reconnect flow when the HTTP connection drops before the user answers.
|
|
14
|
+
*/
|
|
15
|
+
export declare function waitForExistingQuestion(slackUserId?: string, questionId?: string, signal?: AbortSignal): Promise<{
|
|
16
|
+
answer: string;
|
|
17
|
+
questionId: string;
|
|
18
|
+
}>;
|
package/dist/slack.js
CHANGED
|
@@ -1,8 +1,32 @@
|
|
|
1
1
|
import { WebClient } from "@slack/web-api";
|
|
2
2
|
import { App } from "@slack/bolt";
|
|
3
|
-
|
|
3
|
+
function createDeferred() {
|
|
4
|
+
let resolve;
|
|
5
|
+
const promise = new Promise((r) => { resolve = r; });
|
|
6
|
+
return { promise, resolve };
|
|
7
|
+
}
|
|
8
|
+
function raceWithAbort(promise, signal) {
|
|
9
|
+
if (!signal)
|
|
10
|
+
return promise;
|
|
11
|
+
if (signal.aborted)
|
|
12
|
+
return Promise.reject(new Error("Client disconnected"));
|
|
13
|
+
return new Promise((resolve, reject) => {
|
|
14
|
+
const onAbort = () => reject(new Error("Client disconnected"));
|
|
15
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
16
|
+
promise.then((answer) => {
|
|
17
|
+
signal.removeEventListener("abort", onAbort);
|
|
18
|
+
resolve(answer);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
}
|
|
4
22
|
const STARTUP_DELAY_MS = 6000; // Wait for stale Slack connections to expire
|
|
23
|
+
const POLL_INTERVAL_MS = 15_000; // Poll every 15s as fallback for dead Socket Mode
|
|
24
|
+
// Keyed by messageTs (unique per question) — supports multiple pending questions per channel
|
|
5
25
|
const pendingQuestions = new Map();
|
|
26
|
+
// Cache of recently answered questions so reconnecting clients can pick up the answer
|
|
27
|
+
const resolvedAnswers = new Map(); // key: messageTs
|
|
28
|
+
const RESOLVED_ANSWER_TTL_MS = 5 * 60 * 1000; // 5 minutes
|
|
29
|
+
let pollTimer;
|
|
6
30
|
const web = new WebClient(process.env.SLACK_BOT_TOKEN);
|
|
7
31
|
const boltApp = new App({
|
|
8
32
|
token: process.env.SLACK_BOT_TOKEN,
|
|
@@ -11,23 +35,39 @@ const boltApp = new App({
|
|
|
11
35
|
appToken: process.env.SLACK_APP_TOKEN,
|
|
12
36
|
});
|
|
13
37
|
// --- Helpers ---
|
|
14
|
-
function resolvePending(
|
|
15
|
-
const pending = pendingQuestions.get(
|
|
38
|
+
function resolvePending(messageTs, answer) {
|
|
39
|
+
const pending = pendingQuestions.get(messageTs);
|
|
16
40
|
if (!pending)
|
|
17
41
|
return false;
|
|
18
|
-
console.error("[Bolt] Resolving pending question
|
|
19
|
-
pending.resolve(answer);
|
|
20
|
-
pendingQuestions.delete(
|
|
21
|
-
//
|
|
42
|
+
console.error("[Bolt] Resolving pending question:", messageTs, "in channel:", pending.channelId, "with:", answer);
|
|
43
|
+
pending.deferred.resolve(answer);
|
|
44
|
+
pendingQuestions.delete(messageTs);
|
|
45
|
+
// Cache the answer so reconnecting clients can still pick it up
|
|
46
|
+
resolvedAnswers.set(messageTs, { answer, channelId: pending.channelId });
|
|
47
|
+
setTimeout(() => resolvedAnswers.delete(messageTs), RESOLVED_ANSWER_TTL_MS);
|
|
48
|
+
// Confirm to the user on Slack that the answer was received (in thread of the original question)
|
|
22
49
|
web.chat.postMessage({
|
|
23
|
-
channel: channelId,
|
|
50
|
+
channel: pending.channelId,
|
|
24
51
|
text: `✅ Your answer: ${answer}`,
|
|
52
|
+
thread_ts: messageTs,
|
|
25
53
|
mrkdwn: true,
|
|
26
54
|
}).catch((err) => {
|
|
27
55
|
console.error("[Bolt] Failed to send confirmation message:", err);
|
|
28
56
|
});
|
|
29
57
|
return true;
|
|
30
58
|
}
|
|
59
|
+
/** Find the most recent pending question for a given channel. */
|
|
60
|
+
function findLatestPendingForChannel(channelId) {
|
|
61
|
+
let latest;
|
|
62
|
+
for (const pending of pendingQuestions.values()) {
|
|
63
|
+
if (pending.channelId === channelId) {
|
|
64
|
+
if (!latest || pending.createdAt > latest.createdAt) {
|
|
65
|
+
latest = pending;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return latest;
|
|
70
|
+
}
|
|
31
71
|
function formatSelected(labels) {
|
|
32
72
|
return `Selected: ${labels.join(", ")}`;
|
|
33
73
|
}
|
|
@@ -129,8 +169,24 @@ boltApp.message(async ({ message }) => {
|
|
|
129
169
|
console.error("[Bolt] Ignoring message subtype:", msg.subtype);
|
|
130
170
|
return;
|
|
131
171
|
}
|
|
132
|
-
|
|
133
|
-
|
|
172
|
+
if (!msg.text) {
|
|
173
|
+
console.error("[Bolt] No text in message, skipping.");
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
// Route reply to the correct pending question:
|
|
177
|
+
// 1. Thread reply (thread_ts set) → find question matching that thread_ts
|
|
178
|
+
// 2. Direct reply (no thread_ts) → find the most recent pending question in this channel
|
|
179
|
+
let pending;
|
|
180
|
+
if (msg.thread_ts) {
|
|
181
|
+
pending = pendingQuestions.get(msg.thread_ts);
|
|
182
|
+
if (pending) {
|
|
183
|
+
console.error("[Bolt] Matched thread reply to question:", msg.thread_ts);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (!pending) {
|
|
187
|
+
pending = findLatestPendingForChannel(msg.channel);
|
|
188
|
+
}
|
|
189
|
+
if (!pending) {
|
|
134
190
|
console.error("[Bolt] No pending question for channel:", msg.channel);
|
|
135
191
|
return;
|
|
136
192
|
}
|
|
@@ -143,20 +199,20 @@ boltApp.message(async ({ message }) => {
|
|
|
143
199
|
}
|
|
144
200
|
// Otherwise pass through as freeform text
|
|
145
201
|
}
|
|
146
|
-
resolvePending(
|
|
202
|
+
resolvePending(pending.messageTs, answer);
|
|
147
203
|
});
|
|
148
204
|
// Single-select button click
|
|
149
205
|
boltApp.action(/^ask_slack_btn_\d+$/, async ({ body, ack }) => {
|
|
150
206
|
await ack();
|
|
151
207
|
const blockBody = body;
|
|
152
|
-
const
|
|
153
|
-
if (!
|
|
208
|
+
const messageTs = blockBody.message?.ts;
|
|
209
|
+
if (!messageTs)
|
|
154
210
|
return;
|
|
155
211
|
const action = blockBody.actions[0];
|
|
156
212
|
const selectedLabel = action.type === "button" ? action.value : "";
|
|
157
213
|
if (selectedLabel) {
|
|
158
|
-
console.error("[Bolt] Button clicked:", selectedLabel, "
|
|
159
|
-
resolvePending(
|
|
214
|
+
console.error("[Bolt] Button clicked:", selectedLabel, "for question:", messageTs);
|
|
215
|
+
resolvePending(messageTs, formatSelected([selectedLabel]));
|
|
160
216
|
}
|
|
161
217
|
});
|
|
162
218
|
// Checkbox toggle — just acknowledge, wait for Submit
|
|
@@ -167,8 +223,8 @@ boltApp.action("ask_slack_checkboxes", async ({ ack }) => {
|
|
|
167
223
|
boltApp.action("ask_slack_submit", async ({ body, ack }) => {
|
|
168
224
|
await ack();
|
|
169
225
|
const blockBody = body;
|
|
170
|
-
const
|
|
171
|
-
if (!
|
|
226
|
+
const messageTs = blockBody.message?.ts;
|
|
227
|
+
if (!messageTs)
|
|
172
228
|
return;
|
|
173
229
|
const stateValues = blockBody.state?.values;
|
|
174
230
|
const checkboxState = stateValues?.["ask_slack_options"]?.["ask_slack_checkboxes"];
|
|
@@ -177,9 +233,87 @@ boltApp.action("ask_slack_submit", async ({ body, ack }) => {
|
|
|
177
233
|
console.error("[Bolt] Submit clicked but no options selected");
|
|
178
234
|
return;
|
|
179
235
|
}
|
|
180
|
-
console.error("[Bolt] Submit — selected:", selectedLabels, "
|
|
181
|
-
resolvePending(
|
|
236
|
+
console.error("[Bolt] Submit — selected:", selectedLabels, "for question:", messageTs);
|
|
237
|
+
resolvePending(messageTs, formatSelected(selectedLabels));
|
|
182
238
|
});
|
|
239
|
+
// --- Polling fallback ---
|
|
240
|
+
// When Socket Mode dies silently, we poll conversations.history to pick up replies.
|
|
241
|
+
async function pollForReplies() {
|
|
242
|
+
// Group pending questions by channel to minimize API calls
|
|
243
|
+
const byChannel = new Map();
|
|
244
|
+
for (const pending of pendingQuestions.values()) {
|
|
245
|
+
const list = byChannel.get(pending.channelId) ?? [];
|
|
246
|
+
list.push(pending);
|
|
247
|
+
byChannel.set(pending.channelId, list);
|
|
248
|
+
}
|
|
249
|
+
for (const [channelId, pendings] of byChannel) {
|
|
250
|
+
try {
|
|
251
|
+
// Use the oldest pending question's messageTs as the starting point
|
|
252
|
+
const oldest = pendings.reduce((min, p) => (p.messageTs < min ? p.messageTs : min), pendings[0].messageTs);
|
|
253
|
+
const history = await web.conversations.history({
|
|
254
|
+
channel: channelId,
|
|
255
|
+
oldest,
|
|
256
|
+
inclusive: false,
|
|
257
|
+
limit: 20,
|
|
258
|
+
});
|
|
259
|
+
const messages = history.messages ?? [];
|
|
260
|
+
for (const msg of messages) {
|
|
261
|
+
if (msg.bot_id)
|
|
262
|
+
continue;
|
|
263
|
+
if (msg.subtype)
|
|
264
|
+
continue;
|
|
265
|
+
const text = msg.text;
|
|
266
|
+
if (!text)
|
|
267
|
+
continue;
|
|
268
|
+
const threadTs = msg.thread_ts;
|
|
269
|
+
let matched;
|
|
270
|
+
// Thread reply → match to specific question
|
|
271
|
+
if (threadTs) {
|
|
272
|
+
matched = pendings.find((p) => p.messageTs === threadTs);
|
|
273
|
+
}
|
|
274
|
+
// Direct reply → match to latest pending question in channel
|
|
275
|
+
if (!matched) {
|
|
276
|
+
matched = pendings.reduce((latest, p) => !latest || p.createdAt > latest.createdAt ? p : latest, undefined);
|
|
277
|
+
}
|
|
278
|
+
if (!matched)
|
|
279
|
+
continue;
|
|
280
|
+
let answer = text;
|
|
281
|
+
if (matched.options && matched.options.length > 0) {
|
|
282
|
+
const parsed = tryParseNumberedReply(text, matched.options);
|
|
283
|
+
if (parsed)
|
|
284
|
+
answer = parsed;
|
|
285
|
+
}
|
|
286
|
+
console.error("[Poll] Found reply for question:", matched.messageTs, "answer:", answer);
|
|
287
|
+
resolvePending(matched.messageTs, answer);
|
|
288
|
+
// Remove from local array so we don't double-match
|
|
289
|
+
const idx = pendings.indexOf(matched);
|
|
290
|
+
if (idx >= 0)
|
|
291
|
+
pendings.splice(idx, 1);
|
|
292
|
+
if (pendings.length === 0)
|
|
293
|
+
break;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
catch (err) {
|
|
297
|
+
console.error("[Poll] Error polling channel", channelId, err);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
// Stop polling when no more pending questions
|
|
301
|
+
if (pendingQuestions.size === 0 && pollTimer) {
|
|
302
|
+
clearInterval(pollTimer);
|
|
303
|
+
pollTimer = undefined;
|
|
304
|
+
console.error("[Poll] No more pending questions, polling stopped.");
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
function ensurePolling() {
|
|
308
|
+
if (pollTimer)
|
|
309
|
+
return;
|
|
310
|
+
console.error(`[Poll] Starting polling fallback (every ${POLL_INTERVAL_MS / 1000}s)`);
|
|
311
|
+
pollTimer = setInterval(() => {
|
|
312
|
+
pollForReplies().catch((err) => {
|
|
313
|
+
console.error("[Poll] Unhandled error in pollForReplies:", err);
|
|
314
|
+
});
|
|
315
|
+
}, POLL_INTERVAL_MS);
|
|
316
|
+
}
|
|
183
317
|
// --- Exported functions ---
|
|
184
318
|
export async function startBoltApp() {
|
|
185
319
|
console.error(`[Bolt] Waiting ${STARTUP_DELAY_MS / 1000}s for stale connections to expire...`);
|
|
@@ -188,10 +322,14 @@ export async function startBoltApp() {
|
|
|
188
322
|
console.error("[Bolt] Socket Mode app started successfully.");
|
|
189
323
|
}
|
|
190
324
|
export async function stopBoltApp() {
|
|
325
|
+
if (pollTimer) {
|
|
326
|
+
clearInterval(pollTimer);
|
|
327
|
+
pollTimer = undefined;
|
|
328
|
+
}
|
|
191
329
|
await boltApp.stop();
|
|
192
330
|
console.error("[Bolt] Socket Mode app stopped.");
|
|
193
331
|
}
|
|
194
|
-
export async function sendQuestionAndWait(question, slackUserId, options, multiSelect) {
|
|
332
|
+
export async function sendQuestionAndWait(question, slackUserId, options, multiSelect, signal) {
|
|
195
333
|
const userId = slackUserId ?? process.env.SLACK_USER_ID;
|
|
196
334
|
if (!userId) {
|
|
197
335
|
throw new Error("Missing slack_user_id parameter and SLACK_USER_ID environment variable");
|
|
@@ -201,9 +339,10 @@ export async function sendQuestionAndWait(question, slackUserId, options, multiS
|
|
|
201
339
|
const channelId = dmResult.channel.id;
|
|
202
340
|
// Build and send message
|
|
203
341
|
const hasOptions = options && options.length > 0;
|
|
342
|
+
let sentResult;
|
|
204
343
|
if (hasOptions) {
|
|
205
344
|
const blocks = buildOptionsBlocks(question, options, multiSelect ?? false);
|
|
206
|
-
await web.chat.postMessage({
|
|
345
|
+
sentResult = await web.chat.postMessage({
|
|
207
346
|
channel: channelId,
|
|
208
347
|
text: question, // fallback for notifications
|
|
209
348
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -212,28 +351,72 @@ export async function sendQuestionAndWait(question, slackUserId, options, multiS
|
|
|
212
351
|
});
|
|
213
352
|
}
|
|
214
353
|
else {
|
|
215
|
-
await web.chat.postMessage({
|
|
354
|
+
sentResult = await web.chat.postMessage({
|
|
216
355
|
channel: channelId,
|
|
217
356
|
text: question,
|
|
218
357
|
mrkdwn: true,
|
|
219
358
|
});
|
|
220
359
|
}
|
|
221
|
-
// Wait for response (text reply or interactive action)
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
multiSelect,
|
|
236
|
-
});
|
|
360
|
+
// Wait for response (text reply or interactive action) — no server-side timeout,
|
|
361
|
+
// the client controls how long to wait via its own HTTP timeout.
|
|
362
|
+
const messageTs = sentResult.ts;
|
|
363
|
+
console.error(`[Slack] Waiting for reply to question ${messageTs} in channel ${channelId} (no timeout)`);
|
|
364
|
+
// Use a deferred promise so that if the HTTP client disconnects,
|
|
365
|
+
// the pending question survives and can be picked up by /api/wait.
|
|
366
|
+
const deferred = createDeferred();
|
|
367
|
+
pendingQuestions.set(messageTs, {
|
|
368
|
+
deferred,
|
|
369
|
+
options: hasOptions ? options : undefined,
|
|
370
|
+
multiSelect,
|
|
371
|
+
messageTs,
|
|
372
|
+
channelId,
|
|
373
|
+
createdAt: Date.now(),
|
|
237
374
|
});
|
|
375
|
+
ensurePolling();
|
|
376
|
+
const answer = await raceWithAbort(deferred.promise, signal);
|
|
377
|
+
return { answer, questionId: messageTs };
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Re-attach to an existing pending question without sending a new Slack message.
|
|
381
|
+
* Used by the reconnect flow when the HTTP connection drops before the user answers.
|
|
382
|
+
*/
|
|
383
|
+
export async function waitForExistingQuestion(slackUserId, questionId, signal) {
|
|
384
|
+
// If a specific questionId is provided, look it up directly
|
|
385
|
+
if (questionId) {
|
|
386
|
+
const cached = resolvedAnswers.get(questionId);
|
|
387
|
+
if (cached !== undefined) {
|
|
388
|
+
resolvedAnswers.delete(questionId);
|
|
389
|
+
return { answer: cached.answer, questionId };
|
|
390
|
+
}
|
|
391
|
+
const pending = pendingQuestions.get(questionId);
|
|
392
|
+
if (!pending) {
|
|
393
|
+
throw new Error("No pending question found with this ID");
|
|
394
|
+
}
|
|
395
|
+
console.error(`[Slack] Client reconnected — re-attaching to question ${questionId}`);
|
|
396
|
+
const answer = await raceWithAbort(pending.deferred.promise, signal);
|
|
397
|
+
return { answer, questionId };
|
|
398
|
+
}
|
|
399
|
+
// No questionId — find by channel (backward compatible)
|
|
400
|
+
const userId = slackUserId ?? process.env.SLACK_USER_ID;
|
|
401
|
+
if (!userId) {
|
|
402
|
+
throw new Error("Missing slack_user_id parameter and SLACK_USER_ID environment variable");
|
|
403
|
+
}
|
|
404
|
+
const dmResult = await web.conversations.open({ users: userId });
|
|
405
|
+
const channelId = dmResult.channel.id;
|
|
406
|
+
// If the answer arrived between disconnect and reconnect, return the latest
|
|
407
|
+
for (const [msgTs, cached] of resolvedAnswers) {
|
|
408
|
+
if (cached.channelId === channelId) {
|
|
409
|
+
resolvedAnswers.delete(msgTs);
|
|
410
|
+
return { answer: cached.answer, questionId: msgTs };
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
// Find the latest pending question for this channel
|
|
414
|
+
const pending = findLatestPendingForChannel(channelId);
|
|
415
|
+
if (!pending) {
|
|
416
|
+
throw new Error("No pending question found for this user");
|
|
417
|
+
}
|
|
418
|
+
console.error(`[Slack] Client reconnected — re-attaching to latest pending question ${pending.messageTs} in channel ${channelId}`);
|
|
419
|
+
const answer = await raceWithAbort(pending.deferred.promise, signal);
|
|
420
|
+
return { answer, questionId: pending.messageTs };
|
|
238
421
|
}
|
|
239
422
|
//# sourceMappingURL=slack.js.map
|
package/dist/slack.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../src/slack.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../src/slack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,GAAG,EAAe,MAAM,aAAa,CAAC;AAuB/C,SAAS,cAAc;IACrB,IAAI,OAAiC,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAS,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,aAAa,CAAC,OAAwB,EAAE,MAAoB;IACnE,IAAI,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC;IAC5B,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC5E,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7C,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACtB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAWD,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,6CAA6C;AAC5E,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,kDAAkD;AAEnF,6FAA6F;AAC7F,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA2B,CAAC;AAO5D,sFAAsF;AACtF,MAAM,eAAe,GAAG,IAAI,GAAG,EAAwB,CAAC,CAAC,iBAAiB;AAC1E,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAE1D,IAAI,SAAqD,CAAC;AAE1D,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAEvD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;IAClC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE;IACrD,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;CACtC,CAAC,CAAC;AAEH,kBAAkB;AAElB,SAAS,cAAc,CAAC,SAAiB,EAAE,MAAc;IACvD,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAClH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEnC,gEAAgE;IAChE,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACzE,UAAU,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,sBAAsB,CAAC,CAAC;IAE5E,iGAAiG;IACjG,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC,SAAS;QAC1B,IAAI,EAAE,kBAAkB,MAAM,EAAE;QAChC,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE,IAAI;KACb,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACf,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,GAAG,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iEAAiE;AACjE,SAAS,2BAA2B,CAAC,SAAiB;IACpD,IAAI,MAAmC,CAAC;IACxC,KAAK,MAAM,OAAO,IAAI,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC;QAChD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;gBACpD,MAAM,GAAG,OAAO,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,MAAgB;IACtC,OAAO,aAAa,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,qBAAqB,CAC5B,IAAY,EACZ,OAA8B;IAE9B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAElD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAElE,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAChE,OAAO,cAAc,CAAC,cAAc,CAAC,CAAC;AACxC,CAAC;AAED,oCAAoC;AAEpC,SAAS,kBAAkB,CACzB,YAAoB,EACpB,OAA8B,EAC9B,WAAoB;IAEpB,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,gBAAgB;IAChB,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE;KAC7C,CAAC,CAAC;IAEH,oDAAoD;IACpD,MAAM,YAAY,GAAG,OAAO;SACzB,GAAG,CACF,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACxE;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE;KAC7C,CAAC,CAAC;IAEH,IAAI,WAAW,EAAE,CAAC;QAChB,6BAA6B;QAC7B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,mBAAmB;YAC7B,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,YAAY;oBAClB,SAAS,EAAE,sBAAsB;oBACjC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAC3B,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAiB;4BACvB,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;yBACjE;wBACD,KAAK,EAAE,CAAC,CAAC,KAAK;qBACf,CAAC,CAAC;iBACJ;gBACD;oBACE,IAAI,EAAE,QAAQ;oBACd,SAAS,EAAE,kBAAkB;oBAC7B,IAAI,EAAE,EAAE,IAAI,EAAE,YAAqB,EAAE,IAAI,EAAE,UAAU,EAAE;oBACvD,KAAK,EAAE,SAAS;iBACjB;aACF;SACF,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,uCAAuC;QACvC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,mBAAmB;YAC7B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC/B,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,iBAAiB,CAAC,EAAE;gBAC/B,IAAI,EAAE,EAAE,IAAI,EAAE,YAAqB,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE;gBACpD,KAAK,EAAE,CAAC,CAAC,KAAK;aACf,CAAC,CAAC;SACJ,CAAC,CAAC;IACL,CAAC;IAED,YAAY;IACZ,MAAM,QAAQ,GAAG,WAAW;QAC1B,CAAC,CAAC,uDAAuD;QACzD,CAAC,CAAC,uDAAuD,CAAC;IAC5D,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;KAC/C,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,yBAAyB;AAEzB,mBAAmB;AACnB,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IACpC,MAAM,GAAG,GAAG,OAA8B,CAAC;IAE3C,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE;QACxC,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,WAAW,EAAE,CAAC,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC;KAC1C,CAAC,CAAC;IAEH,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;QAChD,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACxD,OAAO;IACT,CAAC;IAED,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,+CAA+C;IAC/C,0EAA0E;IAC1E,yFAAyF;IACzF,IAAI,OAAoC,CAAC;IAEzC,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,2BAA2B,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACtE,OAAO;IACT,CAAC;IAED,IAAI,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC;IAEtB,8DAA8D;IAC9D,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,MAAM,CAAC;QAClB,CAAC;QACD,0CAA0C;IAC5C,CAAC;IAED,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEH,6BAA6B;AAC7B,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE;IAC5D,MAAM,GAAG,EAAE,CAAC;IAEZ,MAAM,SAAS,GAAG,IAAmB,CAAC;IACtC,MAAM,SAAS,GAAI,SAAS,CAAC,OAAuC,EAAE,EAAE,CAAC;IACzE,IAAI,CAAC,SAAS;QAAE,OAAO;IAEvB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,aAAa,GACjB,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,MAA4B,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtE,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;QACnF,cAAc,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,sDAAsD;AACtD,OAAO,CAAC,MAAM,CAAC,sBAAsB,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;IACvD,MAAM,GAAG,EAAE,CAAC;AACd,CAAC,CAAC,CAAC;AAEH,4CAA4C;AAC5C,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE;IACzD,MAAM,GAAG,EAAE,CAAC;IAEZ,MAAM,SAAS,GAAG,IAAmB,CAAC;IACtC,MAAM,SAAS,GAAI,SAAS,CAAC,OAAuC,EAAE,EAAE,CAAC;IACzE,IAAI,CAAC,SAAS;QAAE,OAAO;IAEvB,MAAM,WAAW,GACf,SAAS,CAAC,KAGX,EAAE,MAAM,CAAC;IAEV,MAAM,aAAa,GAAG,WAAW,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC;IACnF,MAAM,cAAc,GAClB,aAAa,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAEjE,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,cAAc,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;IACvF,cAAc,CAAC,SAAS,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC;AAC5D,CAAC,CAAC,CAAC;AAEH,2BAA2B;AAC3B,oFAAoF;AAEpF,KAAK,UAAU,cAAc;IAC3B,2DAA2D;IAC3D,MAAM,SAAS,GAAG,IAAI,GAAG,EAA6B,CAAC;IACvD,KAAK,MAAM,OAAO,IAAI,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnB,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC;QAC9C,IAAI,CAAC;YACH,oEAAoE;YACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAC5B,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EACnD,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CACtB,CAAC;YAEF,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC;gBAC9C,OAAO,EAAE,SAAS;gBAClB,MAAM;gBACN,SAAS,EAAE,KAAK;gBAChB,KAAK,EAAE,EAAE;aACV,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;YACxC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,IAAK,GAA2B,CAAC,MAAM;oBAAE,SAAS;gBAClD,IAAK,GAA4B,CAAC,OAAO;oBAAE,SAAS;gBACpD,MAAM,IAAI,GAAI,GAAyB,CAAC,IAAI,CAAC;gBAC7C,IAAI,CAAC,IAAI;oBAAE,SAAS;gBAEpB,MAAM,QAAQ,GAAI,GAA8B,CAAC,SAAS,CAAC;gBAC3D,IAAI,OAAoC,CAAC;gBAEzC,4CAA4C;gBAC5C,IAAI,QAAQ,EAAE,CAAC;oBACb,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC;gBAC3D,CAAC;gBAED,6DAA6D;gBAC7D,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,GAAG,QAAQ,CAAC,MAAM,CACvB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CACZ,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EACxD,SAAwC,CACzC,CAAC;gBACJ,CAAC;gBAED,IAAI,CAAC,OAAO;oBAAE,SAAS;gBAEvB,IAAI,MAAM,GAAG,IAAI,CAAC;gBAClB,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClD,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC5D,IAAI,MAAM;wBAAE,MAAM,GAAG,MAAM,CAAC;gBAC9B,CAAC;gBAED,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACxF,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBAE1C,mDAAmD;gBACnD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACtC,IAAI,GAAG,IAAI,CAAC;oBAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACtC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAAE,MAAM;YACnC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,IAAI,gBAAgB,CAAC,IAAI,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QAC7C,aAAa,CAAC,SAAS,CAAC,CAAC;QACzB,SAAS,GAAG,SAAS,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,SAAS,aAAa;IACpB,IAAI,SAAS;QAAE,OAAO;IACtB,OAAO,CAAC,KAAK,CAAC,2CAA2C,gBAAgB,GAAG,IAAI,IAAI,CAAC,CAAC;IACtF,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;QAC3B,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAC7B,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,GAAG,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,gBAAgB,CAAC,CAAC;AACvB,CAAC;AAED,6BAA6B;AAE7B,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,OAAO,CAAC,KAAK,CAAC,kBAAkB,gBAAgB,GAAG,IAAI,sCAAsC,CAAC,CAAC;IAC/F,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE1D,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACtB,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,SAAS,EAAE,CAAC;QACd,aAAa,CAAC,SAAS,CAAC,CAAC;QACzB,SAAS,GAAG,SAAS,CAAC;IACxB,CAAC;IACD,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IACrB,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAgB,EAChB,WAAoB,EACpB,OAA+B,EAC/B,WAAqB,EACrB,MAAoB;IAEpB,MAAM,MAAM,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IACxD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;IACJ,CAAC;IAED,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACjE,MAAM,SAAS,GAAI,QAAQ,CAAC,OAA0B,CAAC,EAAE,CAAC;IAE1D,yBAAyB;IACzB,MAAM,UAAU,GAAG,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACjD,IAAI,UAA2B,CAAC;IAEhC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,IAAI,KAAK,CAAC,CAAC;QAC3E,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;YACtC,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,QAAQ,EAAE,6BAA6B;YAC7C,8DAA8D;YAC9D,MAAM,EAAE,MAAa;YACrB,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;YACtC,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;IACL,CAAC;IAED,iFAAiF;IACjF,iEAAiE;IACjE,MAAM,SAAS,GAAG,UAAU,CAAC,EAAG,CAAC;IACjC,OAAO,CAAC,KAAK,CACX,yCAAyC,SAAS,eAAe,SAAS,eAAe,CAC1F,CAAC;IAEF,iEAAiE;IACjE,mEAAmE;IACnE,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE;QAC9B,QAAQ;QACR,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QACzC,WAAW;QACX,SAAS;QACT,SAAS;QACT,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC,CAAC;IAEH,aAAa,EAAE,CAAC;IAEhB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7D,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,WAAoB,EACpB,UAAmB,EACnB,MAAoB;IAEpB,4DAA4D;IAC5D,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACnC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;QAC/C,CAAC;QAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,CAAC,KAAK,CACX,yDAAyD,UAAU,EAAE,CACtE,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACrE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAChC,CAAC;IAED,wDAAwD;IACxD,MAAM,MAAM,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IACxD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACjE,MAAM,SAAS,GAAI,QAAQ,CAAC,OAA0B,CAAC,EAAE,CAAC;IAE1D,4EAA4E;IAC5E,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAC9C,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACnC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QACtD,CAAC;IACH,CAAC;IAED,oDAAoD;IACpD,MAAM,OAAO,GAAG,2BAA2B,CAAC,SAAS,CAAC,CAAC;IACvD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,CAAC,KAAK,CACX,wEAAwE,OAAO,CAAC,SAAS,eAAe,SAAS,EAAE,CACpH,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACrE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;AACnD,CAAC"}
|