pi-harness-runtime 1.1.145 → 1.1.147
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +113 -0
- package/index.ts +136 -6
- package/package.json +2 -2
- package/packages/a2a-adapter/package.json +1 -1
- package/packages/architecture-generator/package.json +1 -1
- package/packages/auth/package.json +1 -1
- package/packages/autonomous-refactor/package.json +1 -1
- package/packages/autonomous-runtime/package.json +1 -1
- package/packages/cache-strategy/package.json +1 -1
- package/packages/capability-registry/package.json +1 -1
- package/packages/checkpoint/package.json +1 -1
- package/packages/cli-plugin-sdk/package.json +1 -1
- package/packages/clipboard/package.json +1 -1
- package/packages/clipboard-plugin/package.json +1 -1
- package/packages/code-generation/package.json +1 -1
- package/packages/code-review/package.json +1 -1
- package/packages/codex-adapter/package.json +1 -1
- package/packages/codex-watcher/package.json +1 -1
- package/packages/config-capture/package.json +1 -1
- package/packages/context-compiler/package.json +1 -1
- package/packages/context-discovery/package.json +1 -1
- package/packages/context-manager/package.json +1 -1
- package/packages/cookie-sanitizer/package.json +1 -1
- package/packages/cost-optimizer/package.json +1 -1
- package/packages/dependency-analyzer/package.json +1 -1
- package/packages/django-plugin/package.json +1 -1
- package/packages/doc-generator/package.json +1 -1
- package/packages/evaluation-engine/package.json +1 -1
- package/packages/evaluation-runner/package.json +1 -1
- package/packages/event-bus/package.json +1 -1
- package/packages/event-store/package.json +1 -1
- package/packages/experience-replay/package.json +1 -1
- package/packages/feedback-collector/package.json +1 -1
- package/packages/file-copy-helper/package.json +1 -1
- package/packages/framework-detector/package.json +1 -1
- package/packages/framework-plugin-sdk/package.json +1 -1
- package/packages/frappe-plugin/package.json +1 -1
- package/packages/generic-web-plugin/package.json +1 -1
- package/packages/health-monitor/package.json +1 -1
- package/packages/intent-analyzer/package.json +1 -1
- package/packages/jev-judge/package.json +1 -1
- package/packages/knowledge-graph/package.json +1 -1
- package/packages/knowledge-retrieval/package.json +1 -1
- package/packages/laravel-plugin/package.json +1 -1
- package/packages/learning-engine/package.json +1 -1
- package/packages/mcp-adapter/package.json +1 -1
- package/packages/memory-engine/package.json +1 -1
- package/packages/milestone-manager/package.json +1 -1
- package/packages/model-registry/package.json +1 -1
- package/packages/nextjs-plugin/package.json +1 -1
- package/packages/notification/dist/src/adapters/email-adapter.d.ts.map +1 -0
- package/packages/notification/dist/src/adapters/email-adapter.js.map +1 -0
- package/packages/notification/dist/src/adapters/line-adapter.d.ts.map +1 -0
- package/packages/notification/dist/src/adapters/line-adapter.js.map +1 -0
- package/packages/notification/dist/src/adapters/ntfy-adapter.d.ts.map +1 -0
- package/packages/notification/dist/src/adapters/ntfy-adapter.js.map +1 -0
- package/packages/notification/dist/src/adapters/telegram-adapter.d.ts +56 -0
- package/packages/notification/dist/src/adapters/telegram-adapter.d.ts.map +1 -0
- package/packages/notification/dist/src/adapters/telegram-adapter.js +251 -0
- package/packages/notification/dist/src/adapters/telegram-adapter.js.map +1 -0
- package/packages/notification/dist/src/adapters/webhook-adapter.d.ts.map +1 -0
- package/packages/notification/dist/src/adapters/webhook-adapter.js.map +1 -0
- package/packages/notification/dist/src/base-adapter.d.ts.map +1 -0
- package/packages/notification/dist/src/base-adapter.js.map +1 -0
- package/packages/notification/dist/{index.d.ts → src/index.d.ts} +2 -0
- package/packages/notification/dist/src/index.d.ts.map +1 -0
- package/packages/notification/dist/{index.js → src/index.js} +2 -0
- package/packages/notification/dist/src/index.js.map +1 -0
- package/packages/notification/dist/src/notification-center.d.ts +89 -0
- package/packages/notification/dist/src/notification-center.d.ts.map +1 -0
- package/packages/notification/dist/{notification-center.js → src/notification-center.js} +103 -1
- package/packages/notification/dist/src/notification-center.js.map +1 -0
- package/packages/notification/dist/src/notification-policy.d.ts +66 -0
- package/packages/notification/dist/src/notification-policy.d.ts.map +1 -0
- package/packages/notification/dist/src/notification-policy.js +153 -0
- package/packages/notification/dist/src/notification-policy.js.map +1 -0
- package/packages/notification/dist/src/telegram-webhook-handler.d.ts +86 -0
- package/packages/notification/dist/src/telegram-webhook-handler.d.ts.map +1 -0
- package/packages/notification/dist/src/telegram-webhook-handler.js +149 -0
- package/packages/notification/dist/src/telegram-webhook-handler.js.map +1 -0
- package/packages/notification/dist/{types.d.ts → src/types.d.ts} +37 -0
- package/packages/notification/dist/src/types.d.ts.map +1 -0
- package/packages/notification/dist/src/types.js.map +1 -0
- package/packages/notification/package.json +1 -1
- package/packages/notification/src/adapters/telegram-adapter.ts +187 -5
- package/packages/notification/src/index.ts +2 -0
- package/packages/notification/src/notification-center.ts +139 -0
- package/packages/notification/src/notification-policy.ts +203 -0
- package/packages/notification/src/telegram-webhook-handler.ts +211 -0
- package/packages/notification/src/types.ts +42 -0
- package/packages/observability/package.json +1 -1
- package/packages/okf-indexer/package.json +1 -1
- package/packages/paperclip-integration/dist/index.d.ts.map +1 -1
- package/packages/paperclip-integration/dist/index.js +30 -18
- package/packages/paperclip-integration/dist/index.js.map +1 -1
- package/packages/paperclip-integration/package.json +1 -1
- package/packages/paperclip-integration/src/index.ts +35 -20
- package/packages/performance-optimizer/package.json +1 -1
- package/packages/privilege-broker/package.json +1 -1
- package/packages/project-analyzer/package.json +1 -1
- package/packages/project-bootstrap/package.json +1 -1
- package/packages/projection-engine/package.json +1 -1
- package/packages/prompt-compiler/package.json +1 -1
- package/packages/prompt-versioning/package.json +1 -1
- package/packages/provider-adapter-sdk/package.json +1 -1
- package/packages/provider-router/package.json +1 -1
- package/packages/provider-selector/package.json +1 -1
- package/packages/providers/package.json +1 -1
- package/packages/qdrant-skills/package.json +1 -1
- package/packages/quota-manager/package.json +1 -1
- package/packages/rate-limiter/package.json +1 -1
- package/packages/react-vite-plugin/package.json +1 -1
- package/packages/release-manager/package.json +1 -1
- package/packages/requirement-compiler/package.json +1 -1
- package/packages/runtime/package.json +1 -1
- package/packages/scheduler/package.json +1 -1
- package/packages/scheduler-adapter/package.json +1 -1
- package/packages/session/package.json +1 -1
- package/packages/session-api/package.json +1 -1
- package/packages/session-export/package.json +1 -1
- package/packages/shared-context/package.json +1 -1
- package/packages/skill-mcp-client/package.json +1 -1
- package/packages/skill-registry/package.json +1 -1
- package/packages/skills/package.json +1 -1
- package/packages/sprint-planner/package.json +1 -1
- package/packages/subscription-engine/package.json +1 -1
- package/packages/task-compiler/package.json +1 -1
- package/packages/tencentdb-memory/package.json +1 -1
- package/packages/tencentdb-sync/package.json +1 -1
- package/packages/test-data-generator/package.json +1 -1
- package/packages/test-generator/package.json +1 -1
- package/packages/todo-bd-sync/package.json +1 -1
- package/packages/token-estimation/package.json +1 -1
- package/packages/token-optimizer/package.json +1 -1
- package/packages/trajectory/package.json +1 -1
- package/packages/tui/package.json +1 -1
- package/packages/types/package.json +1 -1
- package/packages/workflow-events/package.json +1 -1
- package/packages/workspace-scanner/package.json +1 -1
- package/packages/worktree/package.json +1 -1
- package/packages/write-review/package.json +1 -1
- package/scripts/telegram-callback-processor.ts +180 -0
- package/scripts/telegram-webhook-server.ts +387 -0
- package/scripts/test-telegram-approval.ts +64 -0
- package/packages/notification/dist/adapters/email-adapter.d.ts.map +0 -1
- package/packages/notification/dist/adapters/email-adapter.js.map +0 -1
- package/packages/notification/dist/adapters/line-adapter.d.ts.map +0 -1
- package/packages/notification/dist/adapters/line-adapter.js.map +0 -1
- package/packages/notification/dist/adapters/ntfy-adapter.d.ts.map +0 -1
- package/packages/notification/dist/adapters/ntfy-adapter.js.map +0 -1
- package/packages/notification/dist/adapters/telegram-adapter.d.ts +0 -19
- package/packages/notification/dist/adapters/telegram-adapter.d.ts.map +0 -1
- package/packages/notification/dist/adapters/telegram-adapter.js +0 -97
- package/packages/notification/dist/adapters/telegram-adapter.js.map +0 -1
- package/packages/notification/dist/adapters/webhook-adapter.d.ts.map +0 -1
- package/packages/notification/dist/adapters/webhook-adapter.js.map +0 -1
- package/packages/notification/dist/base-adapter.d.ts.map +0 -1
- package/packages/notification/dist/base-adapter.js.map +0 -1
- package/packages/notification/dist/index.d.ts.map +0 -1
- package/packages/notification/dist/index.js.map +0 -1
- package/packages/notification/dist/notification-center.d.ts +0 -50
- package/packages/notification/dist/notification-center.d.ts.map +0 -1
- package/packages/notification/dist/notification-center.js.map +0 -1
- package/packages/notification/dist/types.d.ts.map +0 -1
- package/packages/notification/dist/types.js.map +0 -1
- /package/packages/notification/dist/{adapters → src/adapters}/email-adapter.d.ts +0 -0
- /package/packages/notification/dist/{adapters → src/adapters}/email-adapter.js +0 -0
- /package/packages/notification/dist/{adapters → src/adapters}/line-adapter.d.ts +0 -0
- /package/packages/notification/dist/{adapters → src/adapters}/line-adapter.js +0 -0
- /package/packages/notification/dist/{adapters → src/adapters}/ntfy-adapter.d.ts +0 -0
- /package/packages/notification/dist/{adapters → src/adapters}/ntfy-adapter.js +0 -0
- /package/packages/notification/dist/{adapters → src/adapters}/webhook-adapter.d.ts +0 -0
- /package/packages/notification/dist/{adapters → src/adapters}/webhook-adapter.js +0 -0
- /package/packages/notification/dist/{base-adapter.d.ts → src/base-adapter.d.ts} +0 -0
- /package/packages/notification/dist/{base-adapter.js → src/base-adapter.js} +0 -0
- /package/packages/notification/dist/{types.js → src/types.js} +0 -0
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
/**
|
|
3
|
+
* Telegram Webhook Server — RFC-0022
|
|
4
|
+
*
|
|
5
|
+
* Standalone server that:
|
|
6
|
+
* 1. Receives webhook updates from Telegram
|
|
7
|
+
* 2. Handles button clicks (approve/reject)
|
|
8
|
+
* 3. Forwards actions to pi-harness via file queue
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* TELEGRAM_BOT_TOKEN=xxx TELEGRAM_WEBHOOK_SECRET=xxx TELEGRAM_WEBHOOK_URL=https://yourdomain.com/webhook bun run scripts/telegram-webhook-server.ts
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { existsSync, writeFileSync, appendFileSync, readFileSync } from "node:fs";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
import { createServer } from "node:http";
|
|
17
|
+
|
|
18
|
+
// --- Configuration ---
|
|
19
|
+
const BOT_TOKEN = process.env.TELEGRAM_BOT_TOKEN;
|
|
20
|
+
const WEBHOOK_SECRET = process.env.TELEGRAM_WEBHOOK_SECRET || "default-secret-change-me";
|
|
21
|
+
const WEBHOOK_URL = process.env.TELEGRAM_WEBHOOK_URL;
|
|
22
|
+
const CALLBACK_QUEUE_FILE = process.env.CALLBACK_QUEUE_FILE || join(process.env.HOME || "/tmp", ".pi-harness-runtime", "callback-queue.jsonl");
|
|
23
|
+
const PORT = parseInt(process.env.PORT || "3000", 10);
|
|
24
|
+
|
|
25
|
+
// --- Verify config ---
|
|
26
|
+
if (!BOT_TOKEN) {
|
|
27
|
+
console.error("[TelegramWebhook] ERROR: TELEGRAM_BOT_TOKEN not set");
|
|
28
|
+
console.error("[TelegramWebhook] Usage:");
|
|
29
|
+
console.error("[TelegramWebhook] TELEGRAM_BOT_TOKEN=xxx bun run scripts/telegram-webhook-server.ts");
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// --- Types ---
|
|
34
|
+
interface CallbackQuery {
|
|
35
|
+
id: string;
|
|
36
|
+
from: {
|
|
37
|
+
id: number;
|
|
38
|
+
is_bot: boolean;
|
|
39
|
+
first_name: string;
|
|
40
|
+
username?: string;
|
|
41
|
+
};
|
|
42
|
+
chat_instance: string;
|
|
43
|
+
data: string;
|
|
44
|
+
message?: {
|
|
45
|
+
chat: { id: number };
|
|
46
|
+
message_id: number;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
interface TelegramUpdate {
|
|
51
|
+
update_id: number;
|
|
52
|
+
callback_query?: CallbackQuery;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
interface QueuedCallback {
|
|
56
|
+
timestamp: string;
|
|
57
|
+
queryId: string;
|
|
58
|
+
userId: number;
|
|
59
|
+
username?: string;
|
|
60
|
+
data: string;
|
|
61
|
+
action: string;
|
|
62
|
+
targetId: string;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// --- Parse callback data ---
|
|
66
|
+
function parseCallbackData(data: string): { action: string; targetId: string } {
|
|
67
|
+
// Support both colon (approve:job-123) and underscore (approve_job-123) separators
|
|
68
|
+
// Also handle Telegram's underscore padding (approve:job-123_)
|
|
69
|
+
const cleanData = data.replace(/_+$/, ""); // Remove trailing underscores from Telegram padding
|
|
70
|
+
|
|
71
|
+
// Split by first colon or underscore
|
|
72
|
+
const colonIdx = cleanData.indexOf(":");
|
|
73
|
+
const underscoreIdx = cleanData.indexOf("_");
|
|
74
|
+
|
|
75
|
+
let action: string;
|
|
76
|
+
let targetId: string;
|
|
77
|
+
|
|
78
|
+
if (colonIdx !== -1 && (underscoreIdx === -1 || colonIdx < underscoreIdx)) {
|
|
79
|
+
// Colon comes first or is the only separator
|
|
80
|
+
action = cleanData.slice(0, colonIdx);
|
|
81
|
+
targetId = cleanData.slice(colonIdx + 1);
|
|
82
|
+
} else if (underscoreIdx !== -1) {
|
|
83
|
+
// Underscore comes first or is the only separator
|
|
84
|
+
action = cleanData.slice(0, underscoreIdx);
|
|
85
|
+
targetId = cleanData.slice(underscoreIdx + 1);
|
|
86
|
+
} else {
|
|
87
|
+
// No separator found
|
|
88
|
+
action = cleanData;
|
|
89
|
+
targetId = "";
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return { action, targetId };
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// --- Job Commands Management ---
|
|
96
|
+
const JOB_COMMANDS_FILE = join(process.env.HOME || "/tmp", ".pi-harness-runtime", "job-commands.jsonl");
|
|
97
|
+
|
|
98
|
+
interface JobCommand {
|
|
99
|
+
command: string;
|
|
100
|
+
jobId: string;
|
|
101
|
+
userId: number;
|
|
102
|
+
timestamp: string;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Read unacknowledged job commands from file
|
|
107
|
+
*/
|
|
108
|
+
function readJobCommands(): JobCommand[] {
|
|
109
|
+
try {
|
|
110
|
+
if (!existsSync(JOB_COMMANDS_FILE)) {
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
const content = readFileSync(JOB_COMMANDS_FILE, "utf-8");
|
|
114
|
+
const lines = content.split("\n").filter(l => l.trim());
|
|
115
|
+
const commands: JobCommand[] = [];
|
|
116
|
+
|
|
117
|
+
for (const line of lines) {
|
|
118
|
+
try {
|
|
119
|
+
commands.push(JSON.parse(line));
|
|
120
|
+
} catch {
|
|
121
|
+
// Ignore parse errors
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return commands;
|
|
125
|
+
} catch {
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Acknowledge (remove) processed job commands
|
|
132
|
+
*/
|
|
133
|
+
function acknowledgeJobCommands(jobIds: string[]): void {
|
|
134
|
+
try {
|
|
135
|
+
const commands = readJobCommands();
|
|
136
|
+
const remaining = commands.filter(cmd => !jobIds.includes(cmd.jobId));
|
|
137
|
+
|
|
138
|
+
if (remaining.length === 0) {
|
|
139
|
+
// All commands processed - clear file
|
|
140
|
+
writeFileSync(JOB_COMMANDS_FILE, "", "utf-8");
|
|
141
|
+
} else {
|
|
142
|
+
// Keep unacknowledged commands
|
|
143
|
+
const newContent = remaining.map(cmd => JSON.stringify(cmd)).join("\n") + "\n";
|
|
144
|
+
writeFileSync(JOB_COMMANDS_FILE, newContent, "utf-8");
|
|
145
|
+
}
|
|
146
|
+
} catch {
|
|
147
|
+
// Ignore errors
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// --- Queue callback to file ---
|
|
152
|
+
function queueCallback(callback: QueuedCallback): void {
|
|
153
|
+
const dir = join(CALLBACK_QUEUE_FILE, "..");
|
|
154
|
+
if (!existsSync(dir)) {
|
|
155
|
+
require("node:fs").mkdirSync(dir, { recursive: true });
|
|
156
|
+
}
|
|
157
|
+
appendFileSync(CALLBACK_QUEUE_FILE, JSON.stringify(callback) + "\n");
|
|
158
|
+
console.log(`[TelegramWebhook] Queued: ${callback.action}_${callback.targetId} from ${callback.username || callback.userId}`);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// --- Parse URL path ---
|
|
162
|
+
function parseUrlPath(url: string): { path: string } {
|
|
163
|
+
const [pathPart] = url.split('?');
|
|
164
|
+
return { path: pathPart };
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// --- HTTP Request Handler ---
|
|
168
|
+
function handleRequest(req: import("node:http").IncomingMessage, res: import("node:http").ServerResponse): void {
|
|
169
|
+
const { path } = parseUrlPath(req.url || '/');
|
|
170
|
+
|
|
171
|
+
// CORS preflight - allow Telegram bot API and pi-harness clients
|
|
172
|
+
if (req.method === "OPTIONS") {
|
|
173
|
+
const origin = req.headers.origin;
|
|
174
|
+
// Allow Telegram's servers and any pi-harness client
|
|
175
|
+
const allowedOrigins = [
|
|
176
|
+
"https://api.telegram.org",
|
|
177
|
+
"https://web.telegram.org",
|
|
178
|
+
];
|
|
179
|
+
const corsOrigin = allowedOrigins.includes(origin || "") ? origin || "" : "*";
|
|
180
|
+
|
|
181
|
+
res.writeHead(204, {
|
|
182
|
+
"Access-Control-Allow-Origin": corsOrigin,
|
|
183
|
+
"Access-Control-Allow-Methods": "GET, POST, OPTIONS",
|
|
184
|
+
"Access-Control-Allow-Headers": "Content-Type, x-telegram-bot-api-secret-token, Authorization",
|
|
185
|
+
});
|
|
186
|
+
res.end();
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// --- API: Get pending commands (for pi-harness polling) ---
|
|
191
|
+
if (req.method === "GET" && path === "/api/pending-commands") {
|
|
192
|
+
// Verify API key header
|
|
193
|
+
const apiKey = req.headers["authorization"]?.replace("Bearer ", "");
|
|
194
|
+
if (apiKey !== WEBHOOK_SECRET) {
|
|
195
|
+
res.writeHead(401, { "Content-Type": "application/json" });
|
|
196
|
+
res.end(JSON.stringify({ error: "Unauthorized" }));
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
try {
|
|
201
|
+
// Read job commands from file
|
|
202
|
+
const jobCommands = readJobCommands();
|
|
203
|
+
// Allow any origin for API access
|
|
204
|
+
// Note: Authentication is via Bearer token in Authorization header
|
|
205
|
+
res.writeHead(200, {
|
|
206
|
+
"Content-Type": "application/json",
|
|
207
|
+
"Access-Control-Allow-Origin": "*",
|
|
208
|
+
"Cache-Control": "no-cache",
|
|
209
|
+
});
|
|
210
|
+
res.end(JSON.stringify({ commands: jobCommands }));
|
|
211
|
+
} catch (err) {
|
|
212
|
+
res.writeHead(500, { "Content-Type": "application/json" });
|
|
213
|
+
res.end(JSON.stringify({ error: "Internal error" }));
|
|
214
|
+
}
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// --- API: Acknowledge (consume) commands ---
|
|
219
|
+
if (req.method === "POST" && path === "/api/acknowledge-commands") {
|
|
220
|
+
const apiKey = req.headers["authorization"]?.replace("Bearer ", "");
|
|
221
|
+
if (apiKey !== WEBHOOK_SECRET) {
|
|
222
|
+
res.writeHead(401, { "Content-Type": "application/json" });
|
|
223
|
+
res.end(JSON.stringify({ error: "Unauthorized" }));
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
let body = "";
|
|
228
|
+
req.on("data", (chunk: Buffer) => { body += chunk.toString(); });
|
|
229
|
+
req.on("end", () => {
|
|
230
|
+
try {
|
|
231
|
+
const { jobIds } = JSON.parse(body);
|
|
232
|
+
if (Array.isArray(jobIds)) {
|
|
233
|
+
acknowledgeJobCommands(jobIds);
|
|
234
|
+
}
|
|
235
|
+
res.writeHead(200, { "Content-Type": "application/json" });
|
|
236
|
+
res.end(JSON.stringify({ ok: true }));
|
|
237
|
+
} catch {
|
|
238
|
+
res.writeHead(400, { "Content-Type": "application/json" });
|
|
239
|
+
res.end(JSON.stringify({ error: "Invalid request" }));
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// --- Webhook: Only accept POST ---
|
|
246
|
+
if (req.method !== "POST") {
|
|
247
|
+
res.writeHead(405, { "Content-Type": "application/json" });
|
|
248
|
+
res.end(JSON.stringify({ error: "Method not allowed" }));
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// Verify secret token
|
|
253
|
+
const secret = req.headers["x-telegram-bot-api-secret-token"];
|
|
254
|
+
if (secret !== WEBHOOK_SECRET) {
|
|
255
|
+
console.warn("[TelegramWebhook] Unauthorized webhook attempt");
|
|
256
|
+
res.writeHead(403, { "Content-Type": "application/json" });
|
|
257
|
+
res.end(JSON.stringify({ error: "Forbidden" }));
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// Collect body
|
|
262
|
+
let body = "";
|
|
263
|
+
req.on("data", (chunk: Buffer) => { body += chunk.toString(); });
|
|
264
|
+
req.on("end", async () => {
|
|
265
|
+
try {
|
|
266
|
+
const update: TelegramUpdate = JSON.parse(body);
|
|
267
|
+
|
|
268
|
+
// Handle callback query
|
|
269
|
+
if (update.callback_query) {
|
|
270
|
+
const cq = update.callback_query;
|
|
271
|
+
const parsed = parseCallbackData(cq.data);
|
|
272
|
+
|
|
273
|
+
console.log(`[TelegramWebhook] Callback: ${cq.data} from ${cq.from.username || cq.from.first_name}`);
|
|
274
|
+
|
|
275
|
+
// Queue for pi-harness to process
|
|
276
|
+
const queued: QueuedCallback = {
|
|
277
|
+
timestamp: new Date().toISOString(),
|
|
278
|
+
queryId: cq.id,
|
|
279
|
+
userId: cq.from.id,
|
|
280
|
+
username: cq.from.username,
|
|
281
|
+
data: cq.data,
|
|
282
|
+
action: parsed.action,
|
|
283
|
+
targetId: parsed.targetId,
|
|
284
|
+
};
|
|
285
|
+
queueCallback(queued);
|
|
286
|
+
|
|
287
|
+
// Answer callback query (removes loading state)
|
|
288
|
+
await fetch(`https://api.telegram.org/bot${BOT_TOKEN}/answerCallbackQuery`, {
|
|
289
|
+
method: "POST",
|
|
290
|
+
headers: { "Content-Type": "application/json" },
|
|
291
|
+
body: JSON.stringify({ callback_query_id: cq.id }),
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
// Send confirmation to user
|
|
295
|
+
const confirmText = parsed.action === "approve"
|
|
296
|
+
? `✅ Approved! Job ${parsed.targetId} will resume.`
|
|
297
|
+
: parsed.action === "reject"
|
|
298
|
+
? `❌ Rejected. Job ${parsed.targetId} cancelled.`
|
|
299
|
+
: `Received: ${cq.data}`;
|
|
300
|
+
|
|
301
|
+
if (cq.message?.chat.id) {
|
|
302
|
+
await fetch(`https://api.telegram.org/bot${BOT_TOKEN}/sendMessage`, {
|
|
303
|
+
method: "POST",
|
|
304
|
+
headers: { "Content-Type": "application/json" },
|
|
305
|
+
body: JSON.stringify({
|
|
306
|
+
chat_id: cq.message.chat.id,
|
|
307
|
+
text: confirmText,
|
|
308
|
+
}),
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
res.writeHead(200, { "Content-Type": "application/json" });
|
|
314
|
+
res.end(JSON.stringify({ ok: true }));
|
|
315
|
+
} catch (err) {
|
|
316
|
+
console.error("[TelegramWebhook] Error:", err);
|
|
317
|
+
res.writeHead(500, { "Content-Type": "application/json" });
|
|
318
|
+
res.end(JSON.stringify({ error: "Internal error" }));
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
// --- Setup webhook with Telegram ---
|
|
324
|
+
async function setupWebhook(): Promise<void> {
|
|
325
|
+
if (!WEBHOOK_URL) {
|
|
326
|
+
console.log("[TelegramWebhook] TELEGRAM_WEBHOOK_URL not set — skipping webhook setup");
|
|
327
|
+
console.log("[TelegramWebhook] To set webhook manually:");
|
|
328
|
+
console.log(`[TelegramWebhook] curl -X POST https://api.telegram.org/bot${BOT_TOKEN}/setWebhook -d '{"url":"YOUR_WEBHOOK_URL","secret_token":"${WEBHOOK_SECRET}"}'`);
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
const response = await fetch(`https://api.telegram.org/bot${BOT_TOKEN}/setWebhook`, {
|
|
333
|
+
method: "POST",
|
|
334
|
+
headers: { "Content-Type": "application/json" },
|
|
335
|
+
body: JSON.stringify({
|
|
336
|
+
url: WEBHOOK_URL,
|
|
337
|
+
secret_token: WEBHOOK_SECRET,
|
|
338
|
+
}),
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
const result = await response.json() as { ok: boolean; description?: string };
|
|
342
|
+
if (result.ok) {
|
|
343
|
+
console.log(`[TelegramWebhook] Webhook set to: ${WEBHOOK_URL}`);
|
|
344
|
+
} else {
|
|
345
|
+
console.error(`[TelegramWebhook] Webhook setup failed: ${result.description}`);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// --- Get current webhook info ---
|
|
350
|
+
async function getWebhookInfo(): Promise<void> {
|
|
351
|
+
const response = await fetch(`https://api.telegram.org/bot${BOT_TOKEN}/getWebhookInfo`);
|
|
352
|
+
const result = await response.json() as { ok: boolean; result?: { url?: string; pending_update_count?: number } };
|
|
353
|
+
if (result.ok && result.result) {
|
|
354
|
+
console.log(`[TelegramWebhook] Current webhook: ${result.result.url || "(not set)"}`);
|
|
355
|
+
console.log(`[TelegramWebhook] Pending updates: ${result.result.pending_update_count || 0}`);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
// --- Start server ---
|
|
360
|
+
async function main(): Promise<void> {
|
|
361
|
+
console.log("=".repeat(60));
|
|
362
|
+
console.log("Telegram Webhook Server — RFC-0022");
|
|
363
|
+
console.log("=".repeat(60));
|
|
364
|
+
console.log(`Bot token: ${BOT_TOKEN!.slice(0, 10)}...`);
|
|
365
|
+
console.log(`Webhook secret: ${WEBHOOK_SECRET.slice(0, 8)}...`);
|
|
366
|
+
console.log(`Callback queue: ${CALLBACK_QUEUE_FILE}`);
|
|
367
|
+
console.log(`Port: ${PORT}`);
|
|
368
|
+
console.log("=".repeat(60));
|
|
369
|
+
|
|
370
|
+
await setupWebhook();
|
|
371
|
+
await getWebhookInfo();
|
|
372
|
+
|
|
373
|
+
const server = createServer(handleRequest);
|
|
374
|
+
server.listen(PORT, () => {
|
|
375
|
+
console.log(`[TelegramWebhook] Server running on port ${PORT}`);
|
|
376
|
+
console.log("[TelegramWebhook] Waiting for Telegram callbacks...");
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
// Graceful shutdown
|
|
380
|
+
process.on("SIGINT", () => {
|
|
381
|
+
console.log("\n[TelegramWebhook] Shutting down...");
|
|
382
|
+
server.close();
|
|
383
|
+
process.exit(0);
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
main().catch(console.error);
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Telegram Approval Flow
|
|
3
|
+
*
|
|
4
|
+
* Sends a test message with Yes/No buttons to verify the full flow:
|
|
5
|
+
* 1. Message sent to Telegram with inline keyboard
|
|
6
|
+
* 2. User clicks button
|
|
7
|
+
* 3. Webhook receives callback
|
|
8
|
+
* 4. Callback processor handles approval/rejection
|
|
9
|
+
* 5. Job command written for pi-harness to resume
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import * as fs from "node:fs";
|
|
13
|
+
import * as path from "node:path";
|
|
14
|
+
|
|
15
|
+
// Load config
|
|
16
|
+
const keysDir = path.join(process.env.HOME || "/home/frappe", ".pi-harness-runtime", "keys");
|
|
17
|
+
|
|
18
|
+
const botToken = fs.readFileSync(path.join(keysDir, "telegram-bot-token.txt"), "utf8").trim();
|
|
19
|
+
const chatId = fs.readFileSync(path.join(keysDir, "telegram-chat-id.txt"), "utf8").trim();
|
|
20
|
+
|
|
21
|
+
async function sendTestApproval() {
|
|
22
|
+
const message = `*Test Approval Request*\n\n` +
|
|
23
|
+
`A job is waiting for your approval:\n\n` +
|
|
24
|
+
`*Job:* Code Review for PR #123\n` +
|
|
25
|
+
`*Status:* Waiting for human review\n\n` +
|
|
26
|
+
`Do you want to approve this job to continue?`;
|
|
27
|
+
|
|
28
|
+
const inlineKeyboard = {
|
|
29
|
+
inline_keyboard: [
|
|
30
|
+
[
|
|
31
|
+
{ text: "✅ Yes, Approve", callback_data: "approve:job-123" },
|
|
32
|
+
{ text: "❌ No, Reject", callback_data: "reject:job-123" }
|
|
33
|
+
],
|
|
34
|
+
[
|
|
35
|
+
{ text: "🔄 Retry Later", callback_data: "retry:job-123" }
|
|
36
|
+
]
|
|
37
|
+
]
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const response = await fetch(`https://api.telegram.org/bot${botToken}/sendMessage`, {
|
|
41
|
+
method: "POST",
|
|
42
|
+
headers: { "Content-Type": "application/json" },
|
|
43
|
+
body: JSON.stringify({
|
|
44
|
+
chat_id: chatId,
|
|
45
|
+
text: message,
|
|
46
|
+
parse_mode: "Markdown",
|
|
47
|
+
reply_markup: inlineKeyboard
|
|
48
|
+
})
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
const data = await response.json() as { ok: boolean; result?: { message_id: number } };
|
|
52
|
+
|
|
53
|
+
if (data.ok) {
|
|
54
|
+
console.log(`✅ Test message sent! Message ID: ${data.result?.message_id}`);
|
|
55
|
+
console.log(`\n📱 Check your Telegram for the approval message.`);
|
|
56
|
+
console.log(`\nWhen you click a button, the webhook at:`);
|
|
57
|
+
console.log(` https://telegram.moo-vpn.online/api/telegram/webhook`);
|
|
58
|
+
console.log(`\nwill receive the callback and process it.`);
|
|
59
|
+
} else {
|
|
60
|
+
console.error(`❌ Failed to send message:`, data);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
sendTestApproval().catch(console.error);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"email-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/email-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AA0BxD,qBAAa,YAAa,SAAQ,kBAAkB;IACnD,QAAQ,CAAC,EAAE,WAAW;IACtB,QAAQ,CAAC,IAAI,WAAW;IAExB,YAAY,MAAM,EAAE,WAAW,EAE9B;IAEK,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAWnC;IAEK,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0BpE;IAED,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,QAAQ;CAiBhB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"email-adapter.js","sourceRoot":"","sources":["../../src/adapters/email-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"line-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/line-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,qBAAa,WAAY,SAAQ,kBAAkB;IAClD,QAAQ,CAAC,EAAE,UAAU;IACrB,QAAQ,CAAC,IAAI,UAAU;IAEvB,YAAY,MAAM,EAAE,UAAU,EAE7B;IAEK,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAgBnC;IAEK,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0CpE;IAED,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,QAAQ;CAiBhB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"line-adapter.js","sourceRoot":"","sources":["../../src/adapters/line-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ntfy-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/ntfy-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,qBAAa,WAAY,SAAQ,kBAAkB;IAClD,QAAQ,CAAC,EAAE,UAAU;IACrB,QAAQ,CAAC,IAAI,UAAU;IAEvB,YAAY,MAAM,EAAE,UAAU,EAE7B;IAEK,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAGnC;IAEK,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsCpE;IAED,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,OAAO;CAiBf"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ntfy-adapter.js","sourceRoot":"","sources":["../../src/adapters/ntfy-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Telegram Adapter — RFC-0022
|
|
3
|
-
*
|
|
4
|
-
* Sends notifications via Telegram Bot API.
|
|
5
|
-
*/
|
|
6
|
-
import type { NotificationPayload, NotificationResult, TelegramConfig } from "../types.js";
|
|
7
|
-
import { BaseChannelAdapter } from "../base-adapter.js";
|
|
8
|
-
export declare class TelegramAdapter extends BaseChannelAdapter {
|
|
9
|
-
readonly id = "telegram";
|
|
10
|
-
readonly type = "telegram";
|
|
11
|
-
private _botUsername;
|
|
12
|
-
constructor(config: TelegramConfig);
|
|
13
|
-
get botUsername(): string | undefined;
|
|
14
|
-
initialize(): Promise<boolean>;
|
|
15
|
-
send(payload: NotificationPayload): Promise<NotificationResult>;
|
|
16
|
-
private formatMessage;
|
|
17
|
-
private getEmoji;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=telegram-adapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"telegram-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/telegram-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACX,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,qBAAa,eAAgB,SAAQ,kBAAkB;IACvD,QAAQ,CAAC,EAAE,cAAc;IACzB,QAAQ,CAAC,IAAI,cAAc;IAC3B,OAAO,CAAC,YAAY,CAAqB;IAEzC,YAAY,MAAM,EAAE,cAAc,EAEjC;IAED,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CAEpC;IAEM,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAenC;IAEK,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmCpE;IAED,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,QAAQ;CAiBhB"}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Telegram Adapter — RFC-0022
|
|
3
|
-
*
|
|
4
|
-
* Sends notifications via Telegram Bot API.
|
|
5
|
-
*/
|
|
6
|
-
import { BaseChannelAdapter } from "../base-adapter.js";
|
|
7
|
-
export class TelegramAdapter extends BaseChannelAdapter {
|
|
8
|
-
id = "telegram";
|
|
9
|
-
type = "telegram";
|
|
10
|
-
_botUsername;
|
|
11
|
-
constructor(config) {
|
|
12
|
-
super({ id: "telegram", type: "telegram", enabled: true, config });
|
|
13
|
-
}
|
|
14
|
-
get botUsername() {
|
|
15
|
-
return this._botUsername;
|
|
16
|
-
}
|
|
17
|
-
async initialize() {
|
|
18
|
-
try {
|
|
19
|
-
const cfg = this.config.config;
|
|
20
|
-
const response = await fetch(`https://api.telegram.org/bot${cfg.botToken}/getMe`);
|
|
21
|
-
if (!response.ok)
|
|
22
|
-
return false;
|
|
23
|
-
const data = (await response.json());
|
|
24
|
-
if (data.ok && data.result?.username) {
|
|
25
|
-
this._botUsername = data.result.username;
|
|
26
|
-
}
|
|
27
|
-
return data.ok;
|
|
28
|
-
}
|
|
29
|
-
catch {
|
|
30
|
-
return false;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
async send(payload) {
|
|
34
|
-
try {
|
|
35
|
-
const cfg = this.config.config;
|
|
36
|
-
const message = this.formatMessage(payload);
|
|
37
|
-
const response = await fetch(`https://api.telegram.org/bot${cfg.botToken}/sendMessage`, {
|
|
38
|
-
method: "POST",
|
|
39
|
-
headers: { "Content-Type": "application/json" },
|
|
40
|
-
body: JSON.stringify({
|
|
41
|
-
chat_id: cfg.chatId,
|
|
42
|
-
text: message,
|
|
43
|
-
parse_mode: cfg.parseMode ?? "MarkdownV2",
|
|
44
|
-
}),
|
|
45
|
-
});
|
|
46
|
-
if (!response.ok) {
|
|
47
|
-
const error = await response.text();
|
|
48
|
-
return {
|
|
49
|
-
success: false,
|
|
50
|
-
channel: this.id,
|
|
51
|
-
error: `Telegram API error: ${error}`,
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
return { success: true, channel: this.id };
|
|
55
|
-
}
|
|
56
|
-
catch (error) {
|
|
57
|
-
return {
|
|
58
|
-
success: false,
|
|
59
|
-
channel: this.id,
|
|
60
|
-
error: String(error),
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
formatMessage(payload) {
|
|
65
|
-
const emoji = this.getEmoji(payload.event);
|
|
66
|
-
const title = `${emoji} ${payload.title}`;
|
|
67
|
-
const lines = [title, "", payload.message];
|
|
68
|
-
if (payload.details?.taskTitle) {
|
|
69
|
-
lines.push("", `Task: ${payload.details.taskTitle}`);
|
|
70
|
-
}
|
|
71
|
-
if (payload.details?.jobId) {
|
|
72
|
-
lines.push(`Job: ${payload.details.jobId}`);
|
|
73
|
-
}
|
|
74
|
-
if (payload.details?.error) {
|
|
75
|
-
lines.push("", `Error: ${payload.details.error}`);
|
|
76
|
-
}
|
|
77
|
-
return lines.filter(Boolean).join("\n");
|
|
78
|
-
}
|
|
79
|
-
getEmoji(event) {
|
|
80
|
-
const map = {
|
|
81
|
-
JobStarted: "🚀",
|
|
82
|
-
TaskCompleted: "✅",
|
|
83
|
-
TaskFailed: "❌",
|
|
84
|
-
QuotaPaused: "⏸️",
|
|
85
|
-
ResumeScheduled: "▶️",
|
|
86
|
-
ContextCompacted: "📦",
|
|
87
|
-
OutputLimitContinued: "🔄",
|
|
88
|
-
E2EFailed: "🧪",
|
|
89
|
-
HumanReviewNeeded: "👤",
|
|
90
|
-
ReadyForClient: "🎉",
|
|
91
|
-
JobCancelled: "🚫",
|
|
92
|
-
Error: "⚠️",
|
|
93
|
-
};
|
|
94
|
-
return map[event] ?? "📢";
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
//# sourceMappingURL=telegram-adapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"telegram-adapter.js","sourceRoot":"","sources":["../../src/adapters/telegram-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/webhook-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,qBAAa,cAAe,SAAQ,kBAAkB;IACrD,QAAQ,CAAC,EAAE,aAAa;IACxB,QAAQ,CAAC,IAAI,aAAa;IAE1B,YAAY,MAAM,EAAE,aAAa,EAEhC;IAEK,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAOnC;IAEK,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA2CpE;CACD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-adapter.js","sourceRoot":"","sources":["../../src/adapters/webhook-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,OAAO,cAAe,SAAQ,kBAAkB;IAC5C,EAAE,GAAG,SAAS,CAAC;IACf,IAAI,GAAG,SAAS,CAAC;IAE1B,YAAY,MAAqB;QAChC,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,UAAU;QACf,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAuB,CAAC;YAChD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAA4B;QACtC,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAuB,CAAC;YAChD,MAAM,OAAO,GAA2B;gBACvC,cAAc,EAAE,kBAAkB;gBAClC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;aACtB,CAAC;YAEF,+BAA+B;YAC/B,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBACnB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,GAAG,CAAC,SAAS,EAAE,CAAC;YACtD,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;gBACrC,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,MAAM;gBAC5B,OAAO;gBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;iBACxB,CAAC;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAClB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACpC,OAAO;oBACN,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,IAAI,CAAC,EAAE;oBAChB,KAAK,EAAE,iBAAiB,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE;iBACnD,CAAC;YACH,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,IAAI,CAAC,EAAE;gBAChB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;aACpB,CAAC;QACH,CAAC;IACF,CAAC;CACD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base-adapter.d.ts","sourceRoot":"","sources":["../src/base-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,mBAAmB,EACnB,yBAAyB,EACzB,kBAAkB,EAClB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/B;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEhE;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC;CACxB;AAED,8BAAsB,kBAAmB,YAAW,cAAc;IAIrD,SAAS,CAAC,MAAM,EAAE,yBAAyB;IAHvD,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAE/B,YAAsB,MAAM,EAAE,yBAAyB,EAAI;IAE3D,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEzE,YAAY,IAAI,OAAO,CAEtB;IAED;;OAEG;IACH,SAAS,CAAC,MAAM,CACf,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,MAAM,EAAE,GAChB,mBAAmB,CAsBrB;CACD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base-adapter.js","sourceRoot":"","sources":["../src/base-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA4BH,MAAM,OAAgB,kBAAkB;IAIjB,MAAM;IAA5B,YAAsB,MAAiC;sBAAjC,MAAM;IAA8B,CAAC;IAK3D,YAAY;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAC5B,CAAC;IAED;;OAEG;IACO,MAAM,CACf,OAA4B,EAC5B,QAAkB;QAElB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC;QAE1C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAE9D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACpD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAChC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAClB,OAAmC,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;oBACzD,MAAM;gBACP,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO;YACN,GAAG,OAAO;YACV,OAAO;YACP,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;SACpD,CAAC;IACH,CAAC;CACD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC"}
|