import { normalizeUnipileToolkitSlug } from "./unipile-toolkits"; /** Provider ownership is independent of connection health and search results. */ export function nativeToolkit(slug: string): string | null { const normalized = slug .trim() .toLowerCase() .replace(/[\s_-]+/g, ""); if (normalized === "slack" || normalized === "slackbot") return "slack"; return normalizeUnipileToolkitSlug(slug); } export function nativeToolkitForTool(slug: string): string | null { const parts = slug.trim().split(/[_-]+/); // Providers with separator aliases (GOOGLE_CALENDAR, MICROSOFT_OUTLOOK) // are resolved before considering the remainder as an action name. for (let length = Math.min(3, parts.length - 1); length > 0; length--) { const toolkit = nativeToolkit(parts.slice(0, length).join("")); if (toolkit) return toolkit; } return null; } export function isNativeToolRecord(value: { slug?: unknown; tool_slug?: unknown; toolkit_slug?: unknown; toolkit?: unknown; }): boolean { const toolkit = value.toolkit && typeof value.toolkit === "object" ? (value.toolkit as { slug?: unknown; name?: unknown }) : {}; const name = value.toolkit_slug ?? (typeof value.toolkit === "string" ? value.toolkit : (toolkit.slug ?? toolkit.name)); const slug = value.slug ?? value.tool_slug; return ( (typeof name === "string" && nativeToolkit(name) !== null) || (typeof slug === "string" && nativeToolkitForTool(slug) !== null) ); }