
























@@ -9,6 +9,108 @@ import {
99} from "./component-custom-id.js";
10101111const API_SOURCE_PATH = resolve(dirname(fileURLToPath(import.meta.url)), "../api.ts");
12+const itOnSupportedNode = Number(process.versions.node.split(".")[0]) >= 22 ? it : it.skip;
13+14+const FORMER_PUBLIC_API_EXPORTS = [
15+"DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS",
16+"DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS",
17+"DISCORD_COMPONENT_ATTACHMENT_PREFIX",
18+"DISCORD_COMPONENT_CUSTOM_ID_KEY",
19+"DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS",
20+"DISCORD_DEFAULT_LISTENER_TIMEOUT_MS",
21+"DISCORD_MODAL_CUSTOM_ID_KEY",
22+"DiscordApplicationSummary",
23+"DiscordComponentBlock",
24+"DiscordComponentBuildResult",
25+"DiscordComponentButtonSpec",
26+"DiscordComponentButtonStyle",
27+"DiscordComponentEntry",
28+"DiscordComponentMessageSpec",
29+"DiscordComponentModalFieldType",
30+"DiscordComponentSectionAccessory",
31+"DiscordComponentSelectOption",
32+"DiscordComponentSelectSpec",
33+"DiscordComponentSelectType",
34+"DiscordCredentialStatus",
35+"DiscordFormModal",
36+"DiscordInteractiveHandlerContext",
37+"DiscordInteractiveHandlerRegistration",
38+"DiscordModalEntry",
39+"DiscordModalFieldDefinition",
40+"DiscordModalFieldSpec",
41+"DiscordModalSpec",
42+"DiscordPluralKitConfig",
43+"DiscordPrivilegedIntentStatus",
44+"DiscordPrivilegedIntentsSummary",
45+"DiscordProbe",
46+"DiscordSendComponents",
47+"DiscordSendEmbeds",
48+"DiscordSendResult",
49+"DiscordTarget",
50+"DiscordTargetKind",
51+"DiscordTargetParseOptions",
52+"DiscordTokenResolution",
53+"InspectedDiscordAccount",
54+"PluralKitMemberInfo",
55+"PluralKitMessageInfo",
56+"PluralKitSystemInfo",
57+"ResolvedDiscordAccount",
58+"buildDiscordComponentCustomId",
59+"buildDiscordComponentMessage",
60+"buildDiscordComponentMessageFlags",
61+"buildDiscordInteractiveComponents",
62+"buildDiscordModalCustomId",
63+"collectDiscordSecurityAuditFindings",
64+"collectDiscordStatusIssues",
65+"createDiscordActionGate",
66+"createDiscordFormModal",
67+"discordPlugin",
68+"discordSetupPlugin",
69+"fetchDiscordApplicationId",
70+"fetchDiscordApplicationSummary",
71+"fetchPluralKitMessageInfo",
72+"formatDiscordComponentEventText",
73+"getDiscordExecApprovalApprovers",
74+"handleDiscordMessageAction",
75+"handleDiscordSubagentDeliveryTarget",
76+"handleDiscordSubagentEnded",
77+"handleDiscordSubagentSpawning",
78+"inspectDiscordAccount",
79+"isDiscordExecApprovalApprover",
80+"isDiscordExecApprovalClientEnabled",
81+"listDiscordAccountIds",
82+"listDiscordDirectoryGroupsFromConfig",
83+"listDiscordDirectoryPeersFromConfig",
84+"listEnabledDiscordAccounts",
85+"looksLikeDiscordTargetId",
86+"mergeDiscordAccountConfig",
87+"normalizeDiscordMessagingTarget",
88+"normalizeDiscordOutboundTarget",
89+"normalizeExplicitDiscordSessionKey",
90+"parseApplicationIdFromToken",
91+"parseDiscordComponentCustomId",
92+"parseDiscordComponentCustomIdForCarbon",
93+"parseDiscordComponentCustomIdForInteraction",
94+"parseDiscordModalCustomId",
95+"parseDiscordModalCustomIdForCarbon",
96+"parseDiscordModalCustomIdForInteraction",
97+"parseDiscordTarget",
98+"probeDiscord",
99+"readDiscordComponentSpec",
100+"resolveDefaultDiscordAccountId",
101+"resolveDiscordAccount",
102+"resolveDiscordAccountConfig",
103+"resolveDiscordChannelId",
104+"resolveDiscordComponentAttachmentName",
105+"resolveDiscordGroupRequireMention",
106+"resolveDiscordGroupToolPolicy",
107+"resolveDiscordMaxLinesPerMessage",
108+"resolveDiscordPrivilegedIntentsFromFlags",
109+"resolveDiscordRuntimeGroupPolicy",
110+"resolveDiscordTarget",
111+"shouldSuppressLocalDiscordExecApprovalPrompt",
112+"tryHandleDiscordMessageActionGuildAdmin",
113+] as const;
1211413115function collectExportedNames(): Set<string> {
14116const source = ts.createSourceFile(
@@ -46,21 +148,24 @@ describe("discord public API barrel", () => {
46148it("keeps compatibility exports for existing @openclaw/discord/api.js consumers", () => {
47149const exportedNames = collectExportedNames();
48150151+for (const exportName of FORMER_PUBLIC_API_EXPORTS) {
152+expect(exportedNames).toContain(exportName);
153+}
154+});
155+156+itOnSupportedNode("links restored runtime compatibility exports", async () => {
157+const api = await import("../api.js");
158+49159for (const exportName of [
50-"DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS",
51-"buildDiscordInteractiveComponents",
52-"handleDiscordMessageAction",
53-"isDiscordExecApprovalApprover",
54-"isDiscordExecApprovalClientEnabled",
55-"parseApplicationIdFromToken",
56-"parseDiscordComponentCustomIdForCarbon",
57-"parseDiscordSendTarget",
58-"parseDiscordTarget",
59-"probeDiscord",
60-"resolveDiscordChannelId",
61-"resolveDiscordPrivilegedIntentsFromFlags",
160+"DISCORD_COMPONENT_CUSTOM_ID_KEY",
161+"buildDiscordComponentMessageFlags",
162+"createDiscordFormModal",
163+"handleDiscordSubagentSpawning",
164+"listEnabledDiscordAccounts",
165+"resolveDiscordRuntimeGroupPolicy",
166+"tryHandleDiscordMessageActionGuildAdmin",
62167]) {
63-expect(exportedNames).toContain(exportName);
168+expect(api).toHaveProperty(exportName);
64169}
65170});
66171此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。