@cloudamqp/amqp-client
Version:
AMQP 0-9-1 client, both for browsers (WebSocket) and node (TCP Socket)
83 lines • 3.51 kB
TypeScript
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