diff --git a/extensions/bluebubbles/src/onboarding.ts b/extensions/bluebubbles/src/onboarding.ts index 1d68ace62fb..ca6b42ab5df 100644 --- a/extensions/bluebubbles/src/onboarding.ts +++ b/extensions/bluebubbles/src/onboarding.ts @@ -9,6 +9,7 @@ import { DEFAULT_ACCOUNT_ID, addWildcardAllowFrom, formatDocsLink, + mergeAllowFromEntries, normalizeAccountId, promptAccountId, } from "openclaw/plugin-sdk"; @@ -127,7 +128,7 @@ async function promptBlueBubblesAllowFrom(params: { }, }); const parts = parseBlueBubblesAllowFromInput(String(entry)); - const unique = [...new Set(parts)]; + const unique = mergeAllowFromEntries(undefined, parts); return setBlueBubblesAllowFrom(params.cfg, accountId, unique); } diff --git a/extensions/googlechat/src/onboarding.ts b/extensions/googlechat/src/onboarding.ts index 41d04218735..1b7e82f6951 100644 --- a/extensions/googlechat/src/onboarding.ts +++ b/extensions/googlechat/src/onboarding.ts @@ -2,6 +2,7 @@ import type { OpenClawConfig, DmPolicy } from "openclaw/plugin-sdk"; import { addWildcardAllowFrom, formatDocsLink, + mergeAllowFromEntries, promptAccountId, type ChannelOnboardingAdapter, type ChannelOnboardingDmPolicy, @@ -61,7 +62,7 @@ async function promptAllowFrom(params: { validate: (value) => (String(value ?? "").trim() ? undefined : "Required"), }); const parts = parseAllowFromInput(String(entry)); - const unique = [...new Set(parts)]; + const unique = mergeAllowFromEntries(undefined, parts); return { ...params.cfg, channels: { diff --git a/extensions/msteams/src/onboarding.ts b/extensions/msteams/src/onboarding.ts index 191a2631a91..be5b288fafd 100644 --- a/extensions/msteams/src/onboarding.ts +++ b/extensions/msteams/src/onboarding.ts @@ -10,6 +10,7 @@ import { addWildcardAllowFrom, DEFAULT_ACCOUNT_ID, formatDocsLink, + mergeAllowFromEntries, promptChannelAccessConfig, } from "openclaw/plugin-sdk"; import { @@ -133,9 +134,7 @@ async function promptMSTeamsAllowFrom(params: { ); continue; } - const unique = [ - ...new Set([...existing.map((v) => String(v).trim()).filter(Boolean), ...ids]), - ]; + const unique = mergeAllowFromEntries(existing, ids); return setMSTeamsAllowFrom(params.cfg, unique); } @@ -149,7 +148,7 @@ async function promptMSTeamsAllowFrom(params: { } const ids = resolved.map((item) => item.id as string); - const unique = [...new Set([...existing.map((v) => String(v).trim()).filter(Boolean), ...ids])]; + const unique = mergeAllowFromEntries(existing, ids); return setMSTeamsAllowFrom(params.cfg, unique); } } diff --git a/extensions/nextcloud-talk/src/onboarding.ts b/extensions/nextcloud-talk/src/onboarding.ts index c1f8d70ae36..9b4cb3c59fb 100644 --- a/extensions/nextcloud-talk/src/onboarding.ts +++ b/extensions/nextcloud-talk/src/onboarding.ts @@ -1,6 +1,7 @@ import { addWildcardAllowFrom, formatDocsLink, + mergeAllowFromEntries, promptAccountId, DEFAULT_ACCOUNT_ID, normalizeAccountId, @@ -99,7 +100,7 @@ async function promptNextcloudTalkAllowFrom(params: { ...existingAllowFrom.map((item) => String(item).trim().toLowerCase()).filter(Boolean), ...resolvedIds, ]; - const unique = [...new Set(merged)]; + const unique = mergeAllowFromEntries(undefined, merged); if (accountId === DEFAULT_ACCOUNT_ID) { return { diff --git a/extensions/zalo/src/onboarding.ts b/extensions/zalo/src/onboarding.ts index 36fd7db0374..dec07d9ccf9 100644 --- a/extensions/zalo/src/onboarding.ts +++ b/extensions/zalo/src/onboarding.ts @@ -7,6 +7,7 @@ import type { import { addWildcardAllowFrom, DEFAULT_ACCOUNT_ID, + mergeAllowFromEntries, normalizeAccountId, promptAccountId, } from "openclaw/plugin-sdk"; @@ -151,7 +152,7 @@ async function promptZaloAllowFrom(params: { ...existingAllowFrom.map((item) => String(item).trim()).filter(Boolean), normalized, ]; - const unique = [...new Set(merged)]; + const unique = mergeAllowFromEntries(undefined, merged); if (accountId === DEFAULT_ACCOUNT_ID) { return { diff --git a/extensions/zalouser/src/onboarding.ts b/extensions/zalouser/src/onboarding.ts index 7c702505100..6e69599eac8 100644 --- a/extensions/zalouser/src/onboarding.ts +++ b/extensions/zalouser/src/onboarding.ts @@ -7,6 +7,7 @@ import type { import { addWildcardAllowFrom, DEFAULT_ACCOUNT_ID, + mergeAllowFromEntries, normalizeAccountId, promptAccountId, promptChannelAccessConfig, @@ -125,7 +126,7 @@ async function promptZalouserAllowFrom(params: { ...existingAllowFrom.map((item) => String(item).trim()).filter(Boolean), ...(results.filter(Boolean) as string[]), ]; - const unique = [...new Set(merged)]; + const unique = mergeAllowFromEntries(undefined, merged); if (accountId === DEFAULT_ACCOUNT_ID) { return { ...cfg, diff --git a/src/plugin-sdk/index.ts b/src/plugin-sdk/index.ts index b801863f0f4..f7182fb9139 100644 --- a/src/plugin-sdk/index.ts +++ b/src/plugin-sdk/index.ts @@ -277,7 +277,11 @@ export type { ChannelOnboardingAdapter, ChannelOnboardingDmPolicy, } from "../channels/plugins/onboarding-types.js"; -export { addWildcardAllowFrom, promptAccountId } from "../channels/plugins/onboarding/helpers.js"; +export { + addWildcardAllowFrom, + mergeAllowFromEntries, + promptAccountId, +} from "../channels/plugins/onboarding/helpers.js"; export { promptChannelAccessConfig } from "../channels/plugins/onboarding/channel-access.js"; export {