Creating Plot Twists
    Preparing search index...

    Type Alias ProductInfo

    Per-instance product metadata for combined (multi-product) connectors — one ordinary Connector that bundles several user-facing products (e.g. the combined Google connector covering Mail, Calendar, Tasks, and Contacts) under a single OAuth grant and one charge.

    The app's combined-connection setup/status UX renders one row per entry. Each product maps to exactly one optional scope group: scopeGroupId MUST equal an OptionalScopeGroup.id declared in the connector's ScopeConfig optional groups, so the API can derive per-product enablement (granted | scope-missing | no-channels | locally-off) from the connection's granted scopes plus its enabled channels.

    Plain (single-product) connectors leave Connector.products undefined; the API then omits the products/productStatus fields and the app falls back to the standard per-connector flow.

    type ProductInfo = {
        key: string;
        label: string;
        description: string;
        icon: string;
        scopeGroupId: string;
        channelNoun?: { singular: string; plural: string };
    }
    Index

    Properties

    key: string

    Stable product id. Also the channel-id namespace prefix ("<key>:<rawId>").

    label: string

    Setup/status row title (e.g. "Gmail").

    description: string

    Short summary shown under the label on the setup/status row.

    icon: string

    Icon URL rendered on the row.

    scopeGroupId: string

    Matches an OptionalScopeGroup.id in this connector's scopes.

    channelNoun?: { singular: string; plural: string }

    Per-product override of Connector.channelNoun — what this product's channels represent (e.g. Gmail's are "labels", Google Calendar's are "calendars"). Needed because a combined connector's products often have different channel vocabularies, so one connector-level noun can't describe all of them. Falls back to "channel"/"channels" when omitted.