import './assert_dev_env.js';
import type { Uuid } from '@fuzdev/fuz_util/id.js';
import type { TestAccount, TestApp } from './app_server.js';
import type { TestFixture } from './cross_backend/setup.js';
import { type RpcCallArgs } from './rpc_helpers.js';
export interface RoleGrantOfferAndAcceptArgs {
    app: RpcCallArgs['app'];
    rpc_path: string;
    /**
     * Account doing the granting. `TestApp` / `TestAccount` cover the
     * in-process shape; `TestFixture` covers the cross-backend fixture
     * protocol. All three carry `account.id` + `create_session_headers`.
     */
    grantor: TestApp | TestAccount | TestFixture;
    recipient: TestAccount;
    role: string;
}
/**
 * Drive the full consent flow (grantor offer → recipient accept) over the
 * production RPC surface and return the materialized role_grant id.
 *
 * `grantor` and `recipient` carry both the account id (for `to_account_id`
 * derivation) and the `create_session_headers` factory (for cookie-threaded
 * auth) — closing that loop on a single object per party rules out
 * caller-side header/account mismatch.
 */
export declare const role_grant_offer_and_accept: (args: RoleGrantOfferAndAcceptArgs) => Promise<{
    offer_id: Uuid;
    role_grant_id: Uuid;
}>;
//# sourceMappingURL=role_grant_helpers.d.ts.map