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

    Options for btxAdmission.

    interface BtxAdmissionOpts {
        client: BtxChallengeClient;
        enforceBinding?: boolean;
        isProofPresent?: (req: FastifyRequest) => boolean;
        issueParams?: Partial<
            Omit<IssueParams, "purpose" | "resource" | "subject">,
        >;
        onAdmit?: (req: FastifyRequest, result: VerifyResult) => void;
        onError?: (err: unknown, req: FastifyRequest) => 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?: (req: FastifyRequest) => 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 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?: (req: FastifyRequest, result: VerifyResult) => void

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

    onError?: (err: unknown, req: FastifyRequest) => void

    Optional hook fired when client.issue() or client.redeem() throws. Receives the original error + the request. Fires exactly once before the preHandler re-throws to hand off to Fastify's error pipeline. Use this for logging/observability — don't mutate the error or the reply. Audit ref: D-1.

    purpose: StringOrFn

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

    resource: StringOrFn

    Resource identifier, e.g. (req) => \model:${req.body.model}|route:${req.url}``.

    subject: StringOrFn

    Subject identifier, e.g. (req) => \tenant:${req.user.id}``.