@btx-tools SDK — BTX service-challenge admission control
    Preparing search index...

    Options for btxAdmission.

    interface BtxAdmissionOpts {
        client: BtxChallengeClient;
        enforceBinding?: boolean;
        isProofPresent?: (c: Context) => boolean;
        issueParams?: Partial<
            Omit<IssueParams, "purpose" | "resource" | "subject">,
        >;
        onAdmit?: (c: Context, result: VerifyResult) => void;
        onError?: (err: unknown, c: Context) => void;
        purpose: StringOrFn;
        resource: StringOrFn;
        subject: StringOrFn;
    }
    Index

    Properties

    client: BtxChallengeClient

    The BTX RPC client (constructed once at boot).

    enforceBinding?: boolean

    Enforce that the redeemed challenge's binding.{resource,subject,purpose} matches what this request resolves to (audit H-1). Default true. Without it, a valid proof issued for one binding can be replayed to admit a different route/tenant (btxd's redeem can't see the request). Resolvers must be deterministic per request. Set false only for intentional cross-binding reuse.

    isProofPresent?: (c: Context) => boolean

    Override the default "is the proof present?" check. By default it returns true iff all of x-btx-challenge, x-btx-proof-nonce, x-btx-proof-digest headers are set.

    issueParams?: Partial<Omit<IssueParams, "purpose" | "resource" | "subject">>

    Extra issue params forwarded to client.issue() (target_solve_time_s, expires_in_s, etc.).

    onAdmit?: (c: Context, result: VerifyResult) => void

    Optional hook fired on successful admission. Receives c + the redeem result.

    onError?: (err: unknown, c: Context) => void

    Optional hook fired when client.issue() or client.redeem() throws. Receives the original error + the context. Fires exactly once before the middleware re-throws to hand off to Hono's onError handler. Use this for logging/observability. Audit ref: D-1.

    purpose: StringOrFn

    Logical purpose label, e.g. 'ai_inference_gate' or 'rate_limit'.

    resource: StringOrFn

    Resource identifier, e.g. (c) => \model:${(await c.req.json()).model}|route:${c.req.path}``.

    subject: StringOrFn

    Subject identifier, e.g. (c) => \tenant:${c.req.header('x-tenant-id')}``.