import { Client, type ClientOptions, type ProcedureRequestOptions, type QueryRequestOptions } from "@atcute/client"; import type { XRPCProcedures, XRPCQueries } from "@atcute/lexicons/ambient"; import type { InferOutput, XRPCLexBodyParam, XRPCProcedureMetadata, XRPCQueryMetadata } from "@atcute/lexicons/validations"; import type { ReadableStream } from "node:stream/web"; import { RateLimitThreshold } from "rate-limit-threshold"; /** Taken from @atcute/client */ type RequiredKeysOf = TType extends any ? Exclude<{ [Key in keyof TType]: TType extends Record ? Key : never; }[keyof TType], undefined> : never; /** Taken from @atcute/client */ type HasRequiredKeys = RequiredKeysOf extends never ? false : true; /** Taken from @atcute/client */ export type ResponseFormat = "json" | "blob" | "bytes" | "stream"; /** Taken from @atcute/client */ export type FormattedResponse = { json: TDef extends XRPCQueryMetadata ? InferOutput : TDef extends XRPCProcedureMetadata ? InferOutput : unknown; blob: Blob; bytes: Uint8Array; stream: ReadableStream; }; /** * An XRPC agent with rate-limited requests. */ export declare class RateLimitedAgent { private limiter; labelers: Set; client: Client; constructor(options: ClientOptions, limiter: RateLimitThreshold); get>(name: TName, ...options: HasRequiredKeys extends true ? [init: TInit] : [init?: TInit]): Promise[TFormat] : TFormat extends null ? null : never : TQueries[TName] extends XRPCQueryMetadata ? InferOutput : never>; post>(name: TName, ...options: HasRequiredKeys extends true ? [init: TInit] : [init?: TInit]): Promise[TFormat] : TFormat extends null ? null : never : TProcedures[TName] extends XRPCProcedureMetadata ? InferOutput : never>; /** * Create a new agent with the atproto_proxy header set. * @param did The proxy service DID. * @param service The proxy service identifier. */ withProxy(did: `did:${string}:${string}`, service: `#${string}`): RateLimitedAgent; } export {};