export type IntegrationExperienceIcon = "calendar" | "cloud" | "contacts" | "files" | "mail"; export type IntegrationExperienceCapability = { title: string; description: string; }; export type IntegrationExperiencePermission = { label: string; description: string; }; /** * Server-supplied consent copy: an API definition's `presentation` field or a * connector catalog row's `metadata.presentation`. Every field is optional and * presentation-only; anything missing keeps the generic fallback below. */ export type IntegrationPresentationCopy = { providerName?: string | undefined; icon?: IntegrationExperienceIcon | undefined; introduction?: string | undefined; capabilities?: IntegrationExperienceCapability[] | undefined; permissionSummary?: string | undefined; scopeLabels?: Readonly> | undefined; }; /** * Human labels for the scopes a connect will request: the provider-neutral * common labels plus the presentation's own scope labels; unlabeled scopes are * deliberately omitted so raw scope strings never become UX copy. */ export declare function presentationPermissions(scopes: readonly string[], presentation: IntegrationPresentationCopy | undefined): IntegrationExperiencePermission[]; /** * Validated `metadata.presentation` from a catalog row, or undefined when * absent or malformed. Presentation is cosmetic, so a malformed object simply * degrades to the generic copy. */ export declare function capabilityPresentation(metadata: unknown): IntegrationPresentationCopy | undefined;