
























11import { getBundledChannelPlugin } from "../../channels/plugins/bundled.js";
22import { getChannelPlugin } from "../../channels/plugins/index.js";
33import { normalizeAnyChannelId } from "../../channels/registry.js";
4+import { findBundledPackageChannelMetadata } from "../../plugins/bundled-package-channel-metadata.js";
5+import type { PluginPackageChannelDoctorCapabilities } from "../../plugins/manifest.js";
46import type { AllowFromMode } from "./shared/allow-from-mode.types.js";
5768export type DoctorGroupModel = "sender" | "route" | "hybrid";
@@ -19,60 +21,46 @@ const DEFAULT_DOCTOR_CHANNEL_CAPABILITIES: DoctorChannelCapabilities = {
1921warnOnEmptyGroupSenderAllowlist: true,
2022};
212322-const STATIC_DOCTOR_CHANNEL_CAPABILITIES: Readonly<Record<string, DoctorChannelCapabilities>> = {
23-googlechat: {
24-dmAllowFromMode: "nestedOnly",
25-groupModel: "route",
26-groupAllowFromFallbackToAllowFrom: false,
27-warnOnEmptyGroupSenderAllowlist: false,
28-},
29-matrix: {
30-dmAllowFromMode: "nestedOnly",
31-groupModel: "sender",
32-groupAllowFromFallbackToAllowFrom: false,
33-warnOnEmptyGroupSenderAllowlist: true,
34-},
35-msteams: {
36-dmAllowFromMode: "topOnly",
37-groupModel: "hybrid",
38-groupAllowFromFallbackToAllowFrom: false,
39-warnOnEmptyGroupSenderAllowlist: true,
40-},
41-zalouser: {
42-dmAllowFromMode: "topOnly",
43-groupModel: "hybrid",
44-groupAllowFromFallbackToAllowFrom: false,
45-warnOnEmptyGroupSenderAllowlist: false,
46-},
47-};
24+function mergeDoctorChannelCapabilities(
25+capabilities?: PluginPackageChannelDoctorCapabilities,
26+): DoctorChannelCapabilities {
27+return {
28+dmAllowFromMode:
29+capabilities?.dmAllowFromMode ?? DEFAULT_DOCTOR_CHANNEL_CAPABILITIES.dmAllowFromMode,
30+groupModel: capabilities?.groupModel ?? DEFAULT_DOCTOR_CHANNEL_CAPABILITIES.groupModel,
31+groupAllowFromFallbackToAllowFrom:
32+capabilities?.groupAllowFromFallbackToAllowFrom ??
33+DEFAULT_DOCTOR_CHANNEL_CAPABILITIES.groupAllowFromFallbackToAllowFrom,
34+warnOnEmptyGroupSenderAllowlist:
35+capabilities?.warnOnEmptyGroupSenderAllowlist ??
36+DEFAULT_DOCTOR_CHANNEL_CAPABILITIES.warnOnEmptyGroupSenderAllowlist,
37+};
38+}
39+40+function getManifestDoctorCapabilities(
41+channelId: string,
42+): PluginPackageChannelDoctorCapabilities | undefined {
43+return findBundledPackageChannelMetadata(channelId)?.doctorCapabilities;
44+}
48454946export function getDoctorChannelCapabilities(channelName?: string): DoctorChannelCapabilities {
5047if (!channelName) {
5148return DEFAULT_DOCTOR_CHANNEL_CAPABILITIES;
5249}
53-const staticCapabilities = STATIC_DOCTOR_CHANNEL_CAPABILITIES[channelName];
54-if (staticCapabilities) {
55-return staticCapabilities;
50+51+const manifestCapabilities = getManifestDoctorCapabilities(channelName);
52+if (manifestCapabilities) {
53+return mergeDoctorChannelCapabilities(manifestCapabilities);
5654}
57-const registeredChannelId = normalizeAnyChannelId(channelName);
58-if (!registeredChannelId) {
55+56+const channelId = normalizeAnyChannelId(channelName);
57+if (!channelId) {
5958return DEFAULT_DOCTOR_CHANNEL_CAPABILITIES;
6059}
6160const pluginDoctor =
62-getChannelPlugin(registeredChannelId)?.doctor ??
63-getBundledChannelPlugin(registeredChannelId)?.doctor;
61+getChannelPlugin(channelId)?.doctor ?? getBundledChannelPlugin(channelId)?.doctor;
6462if (pluginDoctor) {
65-return {
66-dmAllowFromMode:
67-pluginDoctor.dmAllowFromMode ?? DEFAULT_DOCTOR_CHANNEL_CAPABILITIES.dmAllowFromMode,
68-groupModel: pluginDoctor.groupModel ?? DEFAULT_DOCTOR_CHANNEL_CAPABILITIES.groupModel,
69-groupAllowFromFallbackToAllowFrom:
70-pluginDoctor.groupAllowFromFallbackToAllowFrom ??
71-DEFAULT_DOCTOR_CHANNEL_CAPABILITIES.groupAllowFromFallbackToAllowFrom,
72-warnOnEmptyGroupSenderAllowlist:
73-pluginDoctor.warnOnEmptyGroupSenderAllowlist ??
74-DEFAULT_DOCTOR_CHANNEL_CAPABILITIES.warnOnEmptyGroupSenderAllowlist,
75-};
63+return mergeDoctorChannelCapabilities(pluginDoctor);
7664}
77-return DEFAULT_DOCTOR_CHANNEL_CAPABILITIES;
65+return mergeDoctorChannelCapabilities(getManifestDoctorCapabilities(channelId));
7866}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。