UNPKG

@cloudamqp/amqp-client

Version:

AMQP 0-9-1 client, both for browsers (WebSocket) and node (TCP Socket)

83 lines 3.51 kB
import type { AMQPMessage } from "./amqp-message.js"; import type { AMQPProperties } from "./amqp-properties.js"; /** Map of content-type → parser. */ export type ParserMap = { [K: string]: AMQPParser<unknown, unknown>; }; /** Readonly view of a {@link ParserMap}; returned by helpers. */ export type ParserRegistry<T extends ParserMap> = { readonly [K in keyof T & string]: T[K]; }; export type JsonSerializable = string | number | boolean | null | JsonSerializable[] | { [key: string]: JsonSerializable; }; /** Shape of {@link builtinParsers}: `text/plain` and `application/json`. */ export type BuiltinParsers = { "text/plain": AMQPParser<string, string>; "application/json": AMQPParser<JsonSerializable, unknown>; }; export type InferParserInput<P> = P extends AMQPParser<infer TInput, unknown> ? TInput : never; export type InferParserOutput<P> = P extends AMQPParser<never, infer Out> ? Out : never; /** Map of content-encoding → coder. */ export type CoderMap = { [K: string]: AMQPCoder; }; /** Readonly view of a {@link CoderMap}. */ export type CoderRegistry<T extends CoderMap> = { readonly [K in keyof T & string]: T[K]; }; /** Shape of {@link builtinCoders}: `gzip` and `deflate`. */ export type BuiltinCoders = { gzip: AMQPCoder; deflate: AMQPCoder; }; /** Handles serialization/deserialization based on content-type. */ export interface AMQPParser<In = unknown, Out = unknown> { serialize(body: In, properties: AMQPProperties): Uint8Array; parse(body: Uint8Array, properties: AMQPProperties): Out; } /** Handles compression/decompression based on content-encoding. */ export interface AMQPCoder { encode(body: Uint8Array, properties: AMQPProperties): Promise<Uint8Array>; decode(body: Uint8Array, properties: AMQPProperties): Promise<Uint8Array>; } /** * Raw DEFLATE coder (RFC 1951 — no zlib header, no Adler-32 checksum). * Not registered by default. Use to interoperate with producers that emit * raw DEFLATE under `content-encoding: deflate`, the same ambiguity HTTP * has carried for decades and that Node's `zlib.deflateRawSync` exists for. * * @example * ```ts * import { AMQPSession, builtinCoders, deflateRawCoder } from "@cloudamqp/amqp-client" * * const session = await AMQPSession.connect(url, { * coders: { ...builtinCoders, deflate: deflateRawCoder }, * }) * ``` */ export declare const deflateRawCoder: AMQPCoder; /** * Built-in parsers for `text/plain` and `application/json`. * Use directly, or merge with custom parsers via spread: * `{ ...builtinParsers, "text/csv": csvParser }`. */ export declare const builtinParsers: ParserRegistry<BuiltinParsers>; /** * Built-in coders for `gzip` and `deflate`. * Uses `CompressionStream`/`DecompressionStream` — requires Node 18+ or a modern browser. */ export declare const builtinCoders: CoderRegistry<BuiltinCoders>; export declare function serializeAndEncode(parsers: ParserMap, coders: CoderMap, body: unknown, properties: AMQPProperties, defaults?: { contentType?: string; contentEncoding?: string; }): Promise<{ body: Uint8Array; properties: AMQPProperties; }> | { body: Uint8Array; properties: AMQPProperties; }; export declare function decodeAndParse(parsers: ParserMap, coders: CoderMap, body: Uint8Array, properties: AMQPProperties): Promise<unknown> | unknown; export declare function decodeMessage(msg: AMQPMessage, parsers: ParserMap, coders: CoderMap): Promise<void>; //# sourceMappingURL=amqp-codec-registry.d.ts.map