@cfxlabsinc/b2b-services
    Preparing search index...

    Cross-customer admin access to organizations.

    Extends OrganizationCache, so this read shares the organization-search namespace — and therefore the membership-tag vocabulary — with the consumer surface. A consumer write for a customer evicts the admin pages scoped to that customer, and vice versa, without either service referencing the other.

    Hierarchy (View Summary)

    Index
    cache: ServiceCache<CachedSearchPage<OrgWithCustomer>>
    db: B2bDatabase
    instance: (...args: []) => OrganizationAdminQueryService = ...

    The process default: built from each dependency's own instance().

    • Clear each customer's membership tag and each record tag wherever cached, and always this namespace's collection tag. keys are exact deletes in this instance's key space: the only bust a null client honours.

      Parameters

      • __namedParameters: {
            customerIds: readonly string[];
            keys?: readonly CacheKey[];
            records?: readonly string[];
        }

      Returns Promise<void>

    • The bust every organization write makes, whatever it changed: its record tag in every namespace projecting it, its customer's pages on both surfaces, and the writer's own folded get keys.

      Parameters

      • __namedParameters: { customerId: string; id: string; keys: readonly CacheKey[] }

      Returns Promise<void>

    • Tags for a page: the scope it searched, each customer whose name its rows copy, and the fields of records it may not hold that chose its rows.

      Parameters

      • __namedParameters: {
            customerIds: readonly string[] | undefined;
            fields?: readonly string[];
            items: readonly OrgWithCustomer[];
        }

      Returns string[]

    • Tags for a page: the scope its query searched (each customer's membership tag, else the collection tag), so an empty page is bustable too, plus the records it projects and the fields that chose or ordered its rows.

      Parameters

      • __namedParameters: {
            customerIds: readonly string[] | undefined;
            fields?: readonly string[];
            records?: readonly string[];
        }

      Returns string[]

    • The exact key OrganizationAdminQueryService.get reads through, for its includeDeleted: false callers.

      The includeDeleted: true variant hashes differently and is reached only by the collection tag, which every Valkey-backed environment has. That gap is deliberate and pre-existing: it only matters in memory mode, where no admin get runs with includeDeleted: true.

      Parameters

      • __namedParameters: { id: string }

      Returns Record<string, unknown>

    • The exact key OrganizationQueryService.get reads through.

      get folds onto search, so these args must stay identical to the ones it passes ({ customerId, ids: [id], pageSize: 1 }) plus the defaults search bakes into its own key — includeDeleted: false and page: 1. Every other filter is undefined there, and serviceCacheKey canonicalizes with JCS, which drops undefined properties. organizationCache.test.ts pins the equivalence.

      Parameters

      • __namedParameters: { customerId: string; id: string }

      Returns Record<string, unknown>