mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 05:50:43 +00:00
fix: Found one compatibility regression in the published Discord plugi
This commit is contained in:
committed by
Peter Steinberger
parent
9d03cd15a9
commit
4e115c5dbb
@@ -22,3 +22,62 @@ export {
|
||||
} from "./src/normalize.js";
|
||||
export { resolveOpenProviderRuntimeGroupPolicy as resolveDiscordRuntimeGroupPolicy } from "openclaw/plugin-sdk/runtime-group-policy";
|
||||
export { collectDiscordStatusIssues } from "./src/status-issues.js";
|
||||
|
||||
// Deprecated compatibility surface for existing @openclaw/discord/api.js consumers.
|
||||
type HandleDiscordMessageAction =
|
||||
typeof import("./src/actions/handle-action.js").handleDiscordMessageAction;
|
||||
|
||||
export const handleDiscordMessageAction: HandleDiscordMessageAction = (async (...args) => {
|
||||
const { handleDiscordMessageAction: run } = await import("./src/actions/handle-action.js");
|
||||
return run(...args);
|
||||
}) as HandleDiscordMessageAction;
|
||||
|
||||
export {
|
||||
buildDiscordInteractiveComponents,
|
||||
buildDiscordComponentCustomId,
|
||||
buildDiscordModalCustomId,
|
||||
parseDiscordComponentCustomId,
|
||||
parseDiscordComponentCustomIdForInteraction,
|
||||
parseDiscordModalCustomId,
|
||||
parseDiscordModalCustomIdForInteraction,
|
||||
type ComponentData,
|
||||
type DiscordComponentBuildResult,
|
||||
type DiscordComponentMessageSpec,
|
||||
} from "./src/components.js";
|
||||
export {
|
||||
parseDiscordComponentCustomIdForInteraction as parseDiscordComponentCustomIdForCarbon,
|
||||
parseDiscordModalCustomIdForInteraction as parseDiscordModalCustomIdForCarbon,
|
||||
} from "./src/component-custom-id.js";
|
||||
export {
|
||||
getDiscordExecApprovalApprovers,
|
||||
isDiscordExecApprovalApprover,
|
||||
isDiscordExecApprovalClientEnabled,
|
||||
shouldSuppressLocalDiscordExecApprovalPrompt,
|
||||
} from "./src/exec-approvals.js";
|
||||
export {
|
||||
fetchDiscordApplicationId,
|
||||
fetchDiscordApplicationSummary,
|
||||
parseApplicationIdFromToken,
|
||||
probeDiscord,
|
||||
resolveDiscordPrivilegedIntentsFromFlags,
|
||||
type DiscordApplicationSummary,
|
||||
type DiscordPrivilegedIntentsSummary,
|
||||
type DiscordPrivilegedIntentStatus,
|
||||
type DiscordProbe,
|
||||
} from "./src/probe.js";
|
||||
export { parseDiscordSendTarget, type SendDiscordTarget } from "./src/send-target-parsing.js";
|
||||
export {
|
||||
parseDiscordTarget,
|
||||
resolveDiscordChannelId,
|
||||
resolveDiscordTarget,
|
||||
type DiscordTarget,
|
||||
type DiscordTargetKind,
|
||||
type DiscordTargetParseOptions,
|
||||
} from "./src/targets.js";
|
||||
export {
|
||||
DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS,
|
||||
DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS,
|
||||
DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS,
|
||||
DISCORD_DEFAULT_LISTENER_TIMEOUT_MS,
|
||||
mergeAbortSignals,
|
||||
} from "./src/monitor/timeouts.js";
|
||||
|
||||
80
extensions/discord/src/public-api.test.ts
Normal file
80
extensions/discord/src/public-api.test.ts
Normal file
@@ -0,0 +1,80 @@
|
||||
import { readFileSync } from "node:fs";
|
||||
import { dirname, resolve } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import ts from "typescript";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import {
|
||||
buildDiscordComponentCustomId,
|
||||
parseDiscordComponentCustomIdForInteraction,
|
||||
} from "./component-custom-id.js";
|
||||
|
||||
const API_SOURCE_PATH = resolve(dirname(fileURLToPath(import.meta.url)), "../api.ts");
|
||||
|
||||
function collectExportedNames(): Set<string> {
|
||||
const source = ts.createSourceFile(
|
||||
API_SOURCE_PATH,
|
||||
readFileSync(API_SOURCE_PATH, "utf8"),
|
||||
ts.ScriptTarget.Latest,
|
||||
true,
|
||||
);
|
||||
const names = new Set<string>();
|
||||
for (const statement of source.statements) {
|
||||
if (
|
||||
ts.isVariableStatement(statement) &&
|
||||
statement.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword)
|
||||
) {
|
||||
for (const declaration of statement.declarationList.declarations) {
|
||||
if (ts.isIdentifier(declaration.name)) {
|
||||
names.add(declaration.name.text);
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (!ts.isExportDeclaration(statement) || !statement.exportClause) {
|
||||
continue;
|
||||
}
|
||||
if (ts.isNamedExports(statement.exportClause)) {
|
||||
for (const element of statement.exportClause.elements) {
|
||||
names.add(element.name.text);
|
||||
}
|
||||
}
|
||||
}
|
||||
return names;
|
||||
}
|
||||
|
||||
describe("discord public API barrel", () => {
|
||||
it("keeps compatibility exports for existing @openclaw/discord/api.js consumers", () => {
|
||||
const exportedNames = collectExportedNames();
|
||||
|
||||
for (const exportName of [
|
||||
"DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS",
|
||||
"buildDiscordInteractiveComponents",
|
||||
"handleDiscordMessageAction",
|
||||
"isDiscordExecApprovalApprover",
|
||||
"isDiscordExecApprovalClientEnabled",
|
||||
"parseApplicationIdFromToken",
|
||||
"parseDiscordComponentCustomIdForCarbon",
|
||||
"parseDiscordSendTarget",
|
||||
"parseDiscordTarget",
|
||||
"probeDiscord",
|
||||
"resolveDiscordChannelId",
|
||||
"resolveDiscordPrivilegedIntentsFromFlags",
|
||||
]) {
|
||||
expect(exportedNames).toContain(exportName);
|
||||
}
|
||||
});
|
||||
|
||||
it("keeps legacy Carbon component parser aliases aligned with interaction parsers", () => {
|
||||
const exportedNames = collectExportedNames();
|
||||
const customId = buildDiscordComponentCustomId({
|
||||
componentId: "approve",
|
||||
modalId: "details",
|
||||
});
|
||||
|
||||
expect(exportedNames).toContain("parseDiscordComponentCustomIdForCarbon");
|
||||
expect(parseDiscordComponentCustomIdForInteraction(customId)).toEqual({
|
||||
key: "*",
|
||||
data: { cid: "approve", mid: "details" },
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user