Runtime: lazy-load Discord channel ops

This commit is contained in:
Vincent Koc 2026-03-16 02:05:10 -07:00
parent d572188f61
commit abb21d9163
2 changed files with 151 additions and 39 deletions

View File

@ -0,0 +1,21 @@
export { auditDiscordChannelPermissions } from "../../../extensions/discord/src/audit.js";
export {
listDiscordDirectoryGroupsLive,
listDiscordDirectoryPeersLive,
} from "../../../extensions/discord/src/directory-live.js";
export { monitorDiscordProvider } from "../../../extensions/discord/src/monitor.js";
export { probeDiscord } from "../../../extensions/discord/src/probe.js";
export { resolveDiscordChannelAllowlist } from "../../../extensions/discord/src/resolve-channels.js";
export { resolveDiscordUserAllowlist } from "../../../extensions/discord/src/resolve-users.js";
export {
createThreadDiscord,
deleteMessageDiscord,
editChannelDiscord,
editMessageDiscord,
pinMessageDiscord,
sendDiscordComponentMessage,
sendMessageDiscord,
sendPollDiscord,
sendTypingDiscord,
unpinMessageDiscord,
} from "../../../extensions/discord/src/send.js";

View File

@ -1,10 +1,4 @@
import { auditDiscordChannelPermissions } from "../../../extensions/discord/src/audit.js";
import { discordMessageActions } from "../../../extensions/discord/src/channel-actions.js";
import {
listDiscordDirectoryGroupsLive,
listDiscordDirectoryPeersLive,
} from "../../../extensions/discord/src/directory-live.js";
import { monitorDiscordProvider } from "../../../extensions/discord/src/monitor.js";
import {
getThreadBindingManager,
resolveThreadBindingIdleTimeoutMs,
@ -15,37 +9,134 @@ import {
setThreadBindingMaxAgeBySessionKey,
unbindThreadBindingsBySessionKey,
} from "../../../extensions/discord/src/monitor/thread-bindings.js";
import { probeDiscord } from "../../../extensions/discord/src/probe.js";
import { resolveDiscordChannelAllowlist } from "../../../extensions/discord/src/resolve-channels.js";
import { resolveDiscordUserAllowlist } from "../../../extensions/discord/src/resolve-users.js";
import {
createThreadDiscord,
deleteMessageDiscord,
editChannelDiscord,
editMessageDiscord,
pinMessageDiscord,
sendDiscordComponentMessage,
sendMessageDiscord,
sendPollDiscord,
sendTypingDiscord,
unpinMessageDiscord,
} from "../../../extensions/discord/src/send.js";
import { createDiscordTypingLease } from "./runtime-discord-typing.js";
import type { PluginRuntimeChannel } from "./types-channel.js";
let runtimeDiscordOpsPromise: Promise<typeof import("./runtime-discord-ops.runtime.js")> | null =
null;
function loadRuntimeDiscordOps() {
runtimeDiscordOpsPromise ??= import("./runtime-discord-ops.runtime.js");
return runtimeDiscordOpsPromise;
}
const auditChannelPermissionsLazy: PluginRuntimeChannel["discord"]["auditChannelPermissions"] =
async (...args) => {
const { auditDiscordChannelPermissions } = await loadRuntimeDiscordOps();
return auditDiscordChannelPermissions(...args);
};
const listDirectoryGroupsLiveLazy: PluginRuntimeChannel["discord"]["listDirectoryGroupsLive"] =
async (...args) => {
const { listDiscordDirectoryGroupsLive } = await loadRuntimeDiscordOps();
return listDiscordDirectoryGroupsLive(...args);
};
const listDirectoryPeersLiveLazy: PluginRuntimeChannel["discord"]["listDirectoryPeersLive"] =
async (...args) => {
const { listDiscordDirectoryPeersLive } = await loadRuntimeDiscordOps();
return listDiscordDirectoryPeersLive(...args);
};
const probeDiscordLazy: PluginRuntimeChannel["discord"]["probeDiscord"] = async (...args) => {
const { probeDiscord } = await loadRuntimeDiscordOps();
return probeDiscord(...args);
};
const resolveChannelAllowlistLazy: PluginRuntimeChannel["discord"]["resolveChannelAllowlist"] =
async (...args) => {
const { resolveDiscordChannelAllowlist } = await loadRuntimeDiscordOps();
return resolveDiscordChannelAllowlist(...args);
};
const resolveUserAllowlistLazy: PluginRuntimeChannel["discord"]["resolveUserAllowlist"] = async (
...args
) => {
const { resolveDiscordUserAllowlist } = await loadRuntimeDiscordOps();
return resolveDiscordUserAllowlist(...args);
};
const sendComponentMessageLazy: PluginRuntimeChannel["discord"]["sendComponentMessage"] = async (
...args
) => {
const { sendDiscordComponentMessage } = await loadRuntimeDiscordOps();
return sendDiscordComponentMessage(...args);
};
const sendMessageDiscordLazy: PluginRuntimeChannel["discord"]["sendMessageDiscord"] = async (
...args
) => {
const { sendMessageDiscord } = await loadRuntimeDiscordOps();
return sendMessageDiscord(...args);
};
const sendPollDiscordLazy: PluginRuntimeChannel["discord"]["sendPollDiscord"] = async (...args) => {
const { sendPollDiscord } = await loadRuntimeDiscordOps();
return sendPollDiscord(...args);
};
const monitorDiscordProviderLazy: PluginRuntimeChannel["discord"]["monitorDiscordProvider"] =
async (...args) => {
const { monitorDiscordProvider } = await loadRuntimeDiscordOps();
return monitorDiscordProvider(...args);
};
const sendTypingDiscordLazy: PluginRuntimeChannel["discord"]["typing"]["pulse"] = async (
...args
) => {
const { sendTypingDiscord } = await loadRuntimeDiscordOps();
return sendTypingDiscord(...args);
};
const editMessageDiscordLazy: PluginRuntimeChannel["discord"]["conversationActions"]["editMessage"] =
async (...args) => {
const { editMessageDiscord } = await loadRuntimeDiscordOps();
return editMessageDiscord(...args);
};
const deleteMessageDiscordLazy: PluginRuntimeChannel["discord"]["conversationActions"]["deleteMessage"] =
async (...args) => {
const { deleteMessageDiscord } = await loadRuntimeDiscordOps();
return deleteMessageDiscord(...args);
};
const pinMessageDiscordLazy: PluginRuntimeChannel["discord"]["conversationActions"]["pinMessage"] =
async (...args) => {
const { pinMessageDiscord } = await loadRuntimeDiscordOps();
return pinMessageDiscord(...args);
};
const unpinMessageDiscordLazy: PluginRuntimeChannel["discord"]["conversationActions"]["unpinMessage"] =
async (...args) => {
const { unpinMessageDiscord } = await loadRuntimeDiscordOps();
return unpinMessageDiscord(...args);
};
const createThreadDiscordLazy: PluginRuntimeChannel["discord"]["conversationActions"]["createThread"] =
async (...args) => {
const { createThreadDiscord } = await loadRuntimeDiscordOps();
return createThreadDiscord(...args);
};
const editChannelDiscordLazy: PluginRuntimeChannel["discord"]["conversationActions"]["editChannel"] =
async (...args) => {
const { editChannelDiscord } = await loadRuntimeDiscordOps();
return editChannelDiscord(...args);
};
export function createRuntimeDiscord(): PluginRuntimeChannel["discord"] {
return {
messageActions: discordMessageActions,
auditChannelPermissions: auditDiscordChannelPermissions,
listDirectoryGroupsLive: listDiscordDirectoryGroupsLive,
listDirectoryPeersLive: listDiscordDirectoryPeersLive,
probeDiscord,
resolveChannelAllowlist: resolveDiscordChannelAllowlist,
resolveUserAllowlist: resolveDiscordUserAllowlist,
sendComponentMessage: sendDiscordComponentMessage,
sendMessageDiscord,
sendPollDiscord,
monitorDiscordProvider,
auditChannelPermissions: auditChannelPermissionsLazy,
listDirectoryGroupsLive: listDirectoryGroupsLiveLazy,
listDirectoryPeersLive: listDirectoryPeersLiveLazy,
probeDiscord: probeDiscordLazy,
resolveChannelAllowlist: resolveChannelAllowlistLazy,
resolveUserAllowlist: resolveUserAllowlistLazy,
sendComponentMessage: sendComponentMessageLazy,
sendMessageDiscord: sendMessageDiscordLazy,
sendPollDiscord: sendPollDiscordLazy,
monitorDiscordProvider: monitorDiscordProviderLazy,
threadBindings: {
getManager: getThreadBindingManager,
resolveIdleTimeoutMs: resolveThreadBindingIdleTimeoutMs,
@ -57,7 +148,7 @@ export function createRuntimeDiscord(): PluginRuntimeChannel["discord"] {
unbindBySessionKey: unbindThreadBindingsBySessionKey,
},
typing: {
pulse: sendTypingDiscord,
pulse: sendTypingDiscordLazy,
start: async ({ channelId, accountId, cfg, intervalMs }) =>
await createDiscordTypingLease({
channelId,
@ -65,16 +156,16 @@ export function createRuntimeDiscord(): PluginRuntimeChannel["discord"] {
cfg,
intervalMs,
pulse: async ({ channelId, accountId, cfg }) =>
void (await sendTypingDiscord(channelId, { accountId, cfg })),
void (await sendTypingDiscordLazy(channelId, { accountId, cfg })),
}),
},
conversationActions: {
editMessage: editMessageDiscord,
deleteMessage: deleteMessageDiscord,
pinMessage: pinMessageDiscord,
unpinMessage: unpinMessageDiscord,
createThread: createThreadDiscord,
editChannel: editChannelDiscord,
editMessage: editMessageDiscordLazy,
deleteMessage: deleteMessageDiscordLazy,
pinMessage: pinMessageDiscordLazy,
unpinMessage: unpinMessageDiscordLazy,
createThread: createThreadDiscordLazy,
editChannel: editChannelDiscordLazy,
},
};
}