@cfxlabsinc/b2b-services
    Preparing search index...
    ProductActivationRule: Omit<
        SelectProductActivationRule,
        | "id"
        | "routeId"
        | "customerId"
        | "externalId"
        | "matcherHash"
        | "currentVersionId"
        | "deletedAt",
    > & Omit<
        SelectProductActivationRuleVersion,
        "id"
        | "ruleId"
        | "matcherHash"
        | "createdAt",
    > & { id: string; routeId: SelectProductRoute["externalId"] }

    View of an activation rule visible to a customer = identity columns + the columns of the rule's current version.

    customerId is intentionally omitted — the customer is always the authenticated caller, so re-surfacing it on every rule is noise. Admin-global rules (no customer scope) are surfaced through search() indistinguishably from the customer's own rules; the controller stamps customerId from auth onto the response for both, so customer views can't tell defaults apart from their own rules.

    The ProductActivationRuleAdminService variant keeps customerId because admin views span multiple customers.