mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-15 11:20:44 +00:00
78 lines
2.4 KiB
TypeScript
78 lines
2.4 KiB
TypeScript
import { describeAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
|
|
import { formatAllowFromLowercase } from "openclaw/plugin-sdk/allow-from";
|
|
import { createTopLevelChannelConfigAdapter } from "openclaw/plugin-sdk/channel-config-helpers";
|
|
import type { ChannelPlugin } from "openclaw/plugin-sdk/channel-core";
|
|
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-types";
|
|
import { MSTeamsChannelConfigSchema } from "./config-schema.js";
|
|
import { msteamsSetupAdapter } from "./setup-core.js";
|
|
import { msteamsSetupWizard } from "./setup-surface.js";
|
|
import { resolveMSTeamsCredentials } from "./token.js";
|
|
|
|
type ResolvedMSTeamsAccount = {
|
|
accountId: string;
|
|
enabled: boolean;
|
|
configured: boolean;
|
|
};
|
|
|
|
const meta = {
|
|
id: "msteams",
|
|
label: "Microsoft Teams",
|
|
selectionLabel: "Microsoft Teams (Bot Framework)",
|
|
docsPath: "/channels/msteams",
|
|
docsLabel: "msteams",
|
|
blurb: "Teams SDK; enterprise support.",
|
|
aliases: ["teams"],
|
|
order: 60,
|
|
} as const;
|
|
|
|
const resolveMSTeamsChannelConfig = (cfg: OpenClawConfig) => ({
|
|
allowFrom: cfg.channels?.msteams?.allowFrom,
|
|
defaultTo: cfg.channels?.msteams?.defaultTo,
|
|
});
|
|
|
|
const msteamsConfigAdapter = createTopLevelChannelConfigAdapter<
|
|
ResolvedMSTeamsAccount,
|
|
{
|
|
allowFrom?: Array<string | number>;
|
|
defaultTo?: string;
|
|
}
|
|
>({
|
|
sectionKey: "msteams",
|
|
resolveAccount: (cfg) => ({
|
|
accountId: "default",
|
|
enabled: cfg.channels?.msteams?.enabled !== false,
|
|
configured: Boolean(resolveMSTeamsCredentials(cfg.channels?.msteams)),
|
|
}),
|
|
resolveAccessorAccount: ({ cfg }) => resolveMSTeamsChannelConfig(cfg),
|
|
resolveAllowFrom: (account) => account.allowFrom,
|
|
formatAllowFrom: (allowFrom) => formatAllowFromLowercase({ allowFrom }),
|
|
resolveDefaultTo: (account) => account.defaultTo,
|
|
});
|
|
|
|
export const msteamsSetupPlugin: ChannelPlugin<ResolvedMSTeamsAccount> = {
|
|
id: "msteams",
|
|
meta: {
|
|
...meta,
|
|
aliases: [...meta.aliases],
|
|
},
|
|
capabilities: {
|
|
chatTypes: ["direct", "channel", "thread"],
|
|
polls: true,
|
|
threads: true,
|
|
media: true,
|
|
},
|
|
reload: { configPrefixes: ["channels.msteams"] },
|
|
configSchema: MSTeamsChannelConfigSchema,
|
|
config: {
|
|
...msteamsConfigAdapter,
|
|
isConfigured: (_account, cfg) => Boolean(resolveMSTeamsCredentials(cfg.channels?.msteams)),
|
|
describeAccount: (account) =>
|
|
describeAccountSnapshot({
|
|
account,
|
|
configured: account.configured,
|
|
}),
|
|
},
|
|
setupWizard: msteamsSetupWizard,
|
|
setup: msteamsSetupAdapter,
|
|
};
|