fix: LINE webhook verification 200; fix tsgo error (#16582) (thanks @arosstale)

This commit is contained in:
Peter Steinberger
2026-02-15 00:19:16 +01:00
parent 4f2f641950
commit abf42abd41
4 changed files with 8 additions and 4 deletions

View File

@@ -15,6 +15,7 @@ Docs: https://docs.openclaw.ai
### Fixes
- Telegram: when `channels.telegram.commands.native` is `false`, exclude plugin commands from `setMyCommands` menu registration while keeping plugin slash handlers callable. (#15132) Thanks @Glucksberg.
- LINE: return 200 OK for Developers Console "Verify" requests (`{"events":[]}`) without `X-Line-Signature`, while still requiring signatures for real deliveries. (#16582) Thanks @arosstale.
- Cron: deliver text-only output directly when `delivery.to` is set so cron recipients get full output instead of summaries. (#16360) Thanks @thewilloftheshadow.
- CLI/Plugins: ensure `openclaw message send` exits after successful delivery across plugin-backed channels so one-shot sends do not hang. (#16491) Thanks @yinghaosang.
- CLI/Plugins: run registered plugin `gateway_stop` hooks before `openclaw message` exits (success and failure paths), so plugin-backed channels can clean up one-shot CLI resources. (#16580) Thanks @gumadeiras.

View File

@@ -323,14 +323,14 @@ export async function monitorLineProvider(
const signature = req.headers["x-line-signature"];
// LINE webhook verification sends POST {"events":[]} without a
// signature header. Return 200 so the LINE Developers Console
// signature header. Return 200 so the LINE Developers Console
// "Verify" button succeeds.
if (!signature || typeof signature !== "string") {
try {
const verifyBody = JSON.parse(rawBody) as WebhookRequestBody;
if (Array.isArray(verifyBody.events) && verifyBody.events.length === 0) {
logVerbose(
"line: webhook verification request (empty events, no signature) 200 OK",
"line: webhook verification request (empty events, no signature) - 200 OK",
);
res.statusCode = 200;
res.setHeader("Content-Type", "application/json");

View File

@@ -48,7 +48,7 @@ export function createLineWebhookMiddleware(
if (rawBody) {
const body = parseWebhookBody(req, rawBody);
if (body && Array.isArray(body.events) && body.events.length === 0) {
logVerbose("line: webhook verification request (empty events, no signature) 200 OK");
logVerbose("line: webhook verification request (empty events, no signature) - 200 OK");
res.status(200).json({ status: "ok" });
return;
}

View File

@@ -74,7 +74,10 @@ function parseQmdSessionScope(key?: string): ParsedQmdSessionScope {
return { normalizedKey: normalized, chatType: "direct" };
}
function normalizeQmdSessionKey(key: string): string | undefined {
function normalizeQmdSessionKey(key?: string): string | undefined {
if (!key) {
return undefined;
}
const trimmed = key.trim();
if (!trimmed) {
return undefined;