Skip to content

@amqp-contract/client


@amqp-contract/client ​

Classes ​

MessageValidationError ​

Defined in: packages/core/dist/index.d.mts:39

Error thrown when message validation fails (payload or headers).

Used by both the client (publish-time payload validation) and the worker (consume-time payload and headers validation). Carries a _tag of "@amqp-contract/MessageValidationError" (namespaced to avoid collisions); the Error.name is kept bare ("MessageValidationError").

Param ​

source

The name of the publisher or consumer that triggered the validation

Param ​

issues

The validation issues from the Standard Schema validation

Extends ​

  • MessageValidationError_base<{ issues: unknown; source: string; }>

Constructors ​

Constructor ​
ts
new MessageValidationError(source, issues): MessageValidationError;

Defined in: packages/core/dist/index.d.mts:43

Parameters ​
ParameterType
sourcestring
issuesunknown
Returns ​

MessageValidationError

Overrides ​
ts
MessageValidationError_base<{
  source: string;
  issues: unknown;
}>.constructor

Properties ​

PropertyModifierTypeInherited fromDefined in
_tagreadonly"@amqp-contract/MessageValidationError"MessageValidationError_base._tagnode_modules/.pnpm/unthrown@4.1.0/node_modules/unthrown/dist/index.d.mts:1456
cause?publicunknownMessageValidationError_base.causenode_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts:24
issuesreadonlyunknownMessageValidationError_base.issuespackages/core/dist/index.d.mts:41
messagepublicstringMessageValidationError_base.messagenode_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts:1075
namepublicstringMessageValidationError_base.namenode_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts:1074
sourcereadonlystringMessageValidationError_base.sourcepackages/core/dist/index.d.mts:40
stack?publicstringMessageValidationError_base.stacknode_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts:1076

RpcCancelledError ​

Defined in: packages/client/src/errors.ts:34

Returned from any in-flight RPC call when the client is closed before the reply is received. The correlation map is cleared on close and every pending caller's promise resolves with Err(RpcCancelledError). Carries a namespaced _tag of "@amqp-contract/RpcCancelledError"; the Error.name is kept bare ("RpcCancelledError").

Extends ​

  • TaggedErrorInstance<"@amqp-contract/RpcCancelledError", { rpcName: string; }>

Constructors ​

Constructor ​
ts
new RpcCancelledError(rpcName): RpcCancelledError;

Defined in: packages/client/src/errors.ts:39

Parameters ​
ParameterType
rpcNamestring
Returns ​

RpcCancelledError

Overrides ​
ts
TaggedError("@amqp-contract/RpcCancelledError", {
  name: "RpcCancelledError",
})<{
  rpcName: string;
}>.constructor

Properties ​

PropertyModifierTypeInherited fromDefined in
_tagreadonly"@amqp-contract/RpcCancelledError"TaggedError("@amqp-contract/RpcCancelledError", { name: "RpcCancelledError", })._tagnode_modules/.pnpm/unthrown@4.1.0/node_modules/unthrown/dist/index.d.mts:1456
cause?publicunknownTaggedError("@amqp-contract/RpcCancelledError", { name: "RpcCancelledError", }).causenode_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts:24
messagepublicstringTaggedError("@amqp-contract/RpcCancelledError", { name: "RpcCancelledError", }).messagenode_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts:1075
namepublicstringTaggedError("@amqp-contract/RpcCancelledError", { name: "RpcCancelledError", }).namenode_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts:1074
rpcNamereadonlystringTaggedError("@amqp-contract/RpcCancelledError", { name: "RpcCancelledError", }).rpcNamepackages/client/src/errors.ts:37
stack?publicstringTaggedError("@amqp-contract/RpcCancelledError", { name: "RpcCancelledError", }).stacknode_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts:1076

RpcError ​

Defined in: packages/core/dist/index.d.mts:72

A typed, contract-declared RPC error — the business-failure channel of an RPC, as opposed to the transport failures modeled by TechnicalError.

Declared per-RPC via defineRpc(queue, { request, response, errors }), where each error code maps to a message definition validating the error's data payload. A worker handler surfaces one by returning Err(rpcError(code, data)); the worker validates data against the declared schema, publishes an error reply, and acks the request (business errors are not retried). The caller's client.call(...) resolves to Err(RpcError<code, data>) with data re-validated on arrival.

Carries a _tag of "@amqp-contract/RpcError" for exhaustive dispatch via matchTags; the Error.name is kept bare ("RpcError"). Discriminate between codes on the code property.

Extends ​

  • RpcError_base<{ code: string; data: unknown; }>

Type Parameters ​

Type ParameterDefault type
TCode extends stringstring
TDataunknown

Constructors ​

Constructor ​
ts
new RpcError<TCode, TData>(
   code, 
   data, 
   message?): RpcError<TCode, TData>;

Defined in: packages/core/dist/index.d.mts:78

Parameters ​
ParameterType
codeTCode
dataTData
message?string
Returns ​

RpcError<TCode, TData>

Overrides ​
ts
RpcError_base<{
  code: string;
  data: unknown;
}>.constructor

Properties ​

PropertyModifierTypeOverridesInherited fromDefined in
_tagreadonly"@amqp-contract/RpcError"-RpcError_base._tagnode_modules/.pnpm/unthrown@4.1.0/node_modules/unthrown/dist/index.d.mts:1456
cause?publicunknown-RpcError_base.causenode_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts:24
codereadonlyTCodeRpcError_base.code-packages/core/dist/index.d.mts:76
datareadonlyTDataRpcError_base.data-packages/core/dist/index.d.mts:77
messagepublicstring-RpcError_base.messagenode_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts:1075
namepublicstring-RpcError_base.namenode_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts:1074
stack?publicstring-RpcError_base.stacknode_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts:1076

RpcTimeoutError ​

Defined in: packages/client/src/errors.ts:15

Returned from TypedAmqpClient.call() when the configured timeoutMs elapses before the RPC server publishes a reply with the matching correlationId.

The pending call is removed from the in-memory correlation map; if a reply arrives after the timeout it is dropped (and a debug log is emitted by the client if a logger is configured). Carries a namespaced _tag of "@amqp-contract/RpcTimeoutError"; the Error.name is kept bare ("RpcTimeoutError").

Extends ​

  • TaggedErrorInstance<"@amqp-contract/RpcTimeoutError", { rpcName: string; timeoutMs: number; }>

Constructors ​

Constructor ​
ts
new RpcTimeoutError(rpcName, timeoutMs): RpcTimeoutError;

Defined in: packages/client/src/errors.ts:21

Parameters ​
ParameterType
rpcNamestring
timeoutMsnumber
Returns ​

RpcTimeoutError

Overrides ​
ts
TaggedError("@amqp-contract/RpcTimeoutError", {
  name: "RpcTimeoutError",
})<{
  rpcName: string;
  timeoutMs: number;
}>.constructor

Properties ​

PropertyModifierTypeInherited fromDefined in
_tagreadonly"@amqp-contract/RpcTimeoutError"TaggedError("@amqp-contract/RpcTimeoutError", { name: "RpcTimeoutError", })._tagnode_modules/.pnpm/unthrown@4.1.0/node_modules/unthrown/dist/index.d.mts:1456
cause?publicunknownTaggedError("@amqp-contract/RpcTimeoutError", { name: "RpcTimeoutError", }).causenode_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es2022.error.d.ts:24
messagepublicstringTaggedError("@amqp-contract/RpcTimeoutError", { name: "RpcTimeoutError", }).messagenode_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts:1075
namepublicstringTaggedError("@amqp-contract/RpcTimeoutError", { name: "RpcTimeoutError", }).namenode_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts:1074
rpcNamereadonlystringTaggedError("@amqp-contract/RpcTimeoutError", { name: "RpcTimeoutError", }).rpcNamepackages/client/src/errors.ts:18
stack?publicstringTaggedError("@amqp-contract/RpcTimeoutError", { name: "RpcTimeoutError", }).stacknode_modules/.pnpm/typescript@6.0.3/node_modules/typescript/lib/lib.es5.d.ts:1076
timeoutMsreadonlynumberTaggedError("@amqp-contract/RpcTimeoutError", { name: "RpcTimeoutError", }).timeoutMspackages/client/src/errors.ts:19

TypedAmqpClient ​

Defined in: packages/client/src/client.ts:166

Type-safe AMQP client for publishing messages

Type Parameters ​

Type Parameter
TContract extends ContractDefinition

Methods ​

call() ​
ts
call<TName>(
   rpcName, 
   request, 
   options): AsyncResult<ClientInferRpcResponseOutput<TContract, TName>, 
  | TechnicalError
  | MessageValidationError
  | RpcTimeoutError
  | RpcCancelledError
  | ClientInferRpcErrors<TContract, TName>>;

Defined in: packages/client/src/client.ts:565

Invoke an RPC defined via defineRpc and await the typed response.

The request payload is validated against the RPC's request schema, then published to the AMQP default exchange with the server's queue name as routing key, replyTo set to amq.rabbitmq.reply-to, and a fresh UUID correlationId. The returned AsyncResult resolves once a matching reply arrives and validates against the response schema, or once timeoutMs elapses (whichever comes first).

Type Parameters ​
Type Parameter
TName extends string | number | symbol
Parameters ​
ParameterType
rpcNameTName
requestClientInferRpcRequestInput<TContract, TName>
optionsCallOptions
Returns ​

AsyncResult<ClientInferRpcResponseOutput<TContract, TName>, | TechnicalError | MessageValidationError | RpcTimeoutError | RpcCancelledError | ClientInferRpcErrors<TContract, TName>>

Example ​
typescript
const result = await client.call('calculate', { a: 1, b: 2 }, { timeoutMs: 5_000 });
result.match({
  ok: (value) => console.log(value.sum), // 3
  err: (error) => console.error(error),
  defect: (cause) => console.error(cause),
});
close() ​
ts
close(): AsyncResult<void, TechnicalError>;

Defined in: packages/client/src/client.ts:765

Close the channel and connection. Cancels the reply consumer (if any) and rejects every in-flight RPC call with RpcCancelledError.

Returns ​

AsyncResult<void, TechnicalError>

publish() ​
ts
publish<TName>(
   publisherName, 
   message, 
   options?): AsyncResult<void, TechnicalError | MessageValidationError>;

Defined in: packages/client/src/client.ts:431

Publish a message using a defined publisher.

Type Parameters ​
Type Parameter
TName extends string | number | symbol
Parameters ​
ParameterTypeDescription
publisherNameTNameThe name of the publisher to use
messageClientInferPublisherInput<TContract, TName>The message to publish
options?PublishOptionsOptional publish options including compression, headers, priority, etc.
Returns ​

AsyncResult<void, TechnicalError | MessageValidationError>

Remarks ​

If options.compression is specified, the message will be compressed before publishing and the contentEncoding property will be set automatically. Any contentEncoding value already in options will be overwritten by the compression algorithm.

create() ​
ts
static create<TContract>(__namedParameters): AsyncResult<TypedAmqpClient<TContract>, TechnicalError>;

Defined in: packages/client/src/client.ts:199

Create a type-safe AMQP client from a contract.

Connection management (including automatic reconnection) is handled internally by amqp-connection-manager via the AmqpClient. The client establishes infrastructure asynchronously in the background once the connection is ready.

Connections are automatically shared across clients with the same URLs and connection options, following RabbitMQ best practices.

Type Parameters ​
Type Parameter
TContract extends ContractDefinition
Parameters ​
ParameterType
__namedParametersCreateClientOptions<TContract>
Returns ​

AsyncResult<TypedAmqpClient<TContract>, TechnicalError>

Type Aliases ​

CallInterceptor ​

ts
type CallInterceptor = (args, next) => AsyncResult<unknown, CallError>;

Defined in: packages/client/src/interceptors.ts:106

Intercepts client.call(...): wraps the full request/reply round trip, so it can adjust timeouts, stamp request headers, observe replies and typed errors, or retry by calling next again. The first interceptor in the array is the outermost.

Parameters ​

ParameterType
argsCallInterceptorArgs
nextCallInterceptorNext

Returns ​

AsyncResult<unknown, CallError>

Example ​

Retry timed-out calls once

typescript
const retryOnce: CallInterceptor = (args, next) =>
  next().flatMapErr((error) =>
    error instanceof RpcTimeoutError ? next() : ErrAsync(error),
  );

CallInterceptorArgs ​

ts
type CallInterceptorArgs = object;

Defined in: packages/client/src/interceptors.ts:74

Arguments a call interceptor observes. request is the pre-validation request payload.

Properties ​

PropertyTypeDescriptionDefined in
optionsCallOptionsPer-call options (timeoutMs, publishOptions).packages/client/src/interceptors.ts:80
requestunknownThe (not yet validated) request payload.packages/client/src/interceptors.ts:78
rpcNamestringThe contract rpcs key being called.packages/client/src/interceptors.ts:76

CallInterceptorNext ​

ts
type CallInterceptorNext = (patch?) => AsyncResult<unknown, CallError>;

Defined in: packages/client/src/interceptors.ts:87

Continuation a call interceptor calls to run the rest of the chain. The resolved value is the RPC response (typed at the public call() boundary).

Parameters ​

ParameterType
patch?{ options?: CallOptions; request?: unknown; }
patch.options?CallOptions
patch.request?unknown

Returns ​

AsyncResult<unknown, CallError>


CallOptions ​

ts
type CallOptions = object;

Defined in: packages/client/src/client.ts:146

Per-call options for client.call().

Properties ​

PropertyTypeDescriptionDefined in
publishOptions?Omit<AmqpClientPublishOptions, "replyTo" | "correlationId">Optional AMQP message properties to merge into the request. replyTo and correlationId are managed by the client and cannot be overridden.packages/client/src/client.ts:160
timeoutMsnumberMaximum time in ms to wait for an RPC reply. If exceeded, the call resolves to Err(RpcTimeoutError) and the in-memory correlation entry is cleared. A late reply arriving after the timeout is silently dropped. Required: RPC without a timeout is a footgun.packages/client/src/client.ts:154

ClientInferPublisherInput ​

ts
type ClientInferPublisherInput<TContract, TName> = PublisherInferInput<InferPublisher<TContract, TName>>;

Defined in: packages/client/src/types.ts:46

Input type accepted by client.publish(name, ...) for a specific publisher.

Type Parameters ​

Type Parameter
TContract extends ContractDefinition
TName extends InferPublisherNames<TContract>

ClientInferRpcErrors ​

ts
type ClientInferRpcErrors<TContract, TName> = InferRpc<TContract, TName> extends RpcDefinition<MessageDefinition, MessageDefinition, QueueEntry, infer TErrors> ? TErrors extends RpcErrorMap ? { [K in keyof TErrors & string]: RpcError<K, InferSchemaOutput<TErrors[K]["payload"]>> }[keyof TErrors & string] : never : never;

Defined in: packages/client/src/types.ts:94

Typed error union for client.call(name, ...) — one RpcError<code, data> member per entry in the RPC's declared errors map, with data typed as the declared schema's output (the client re-validates error data when the reply arrives). Resolves to never when the RPC declares no errors, so the call's error union stays purely transport-level.

Type Parameters ​

Type Parameter
TContract extends ContractDefinition
TName extends InferRpcNames<TContract>

ClientInferRpcRequestInput ​

ts
type ClientInferRpcRequestInput<TContract, TName> = InferRpc<TContract, TName> extends RpcDefinition<infer TRequest, MessageDefinition> ? TRequest extends MessageDefinition ? InferSchemaInput<TRequest["payload"]> : never : never;

Defined in: packages/client/src/types.ts:64

Input type accepted by client.call(name, request, ...).

Type Parameters ​

Type Parameter
TContract extends ContractDefinition
TName extends InferRpcNames<TContract>

ClientInferRpcResponseOutput ​

ts
type ClientInferRpcResponseOutput<TContract, TName> = InferRpc<TContract, TName> extends RpcDefinition<MessageDefinition, infer TResponse> ? TResponse extends MessageDefinition ? InferSchemaOutput<TResponse["payload"]> : never : never;

Defined in: packages/client/src/types.ts:77

Output (validated) response type returned by client.call(name, ...).

Type Parameters ​

Type Parameter
TContract extends ContractDefinition
TName extends InferRpcNames<TContract>

CreateClientOptions ​

ts
type CreateClientOptions<TContract> = object;

Defined in: packages/client/src/client.ts:105

Options for creating a client

Type Parameters ​

Type Parameter
TContract extends ContractDefinition

Properties ​

PropertyTypeDescriptionDefined in
callInterceptors?readonly CallInterceptor[]Interceptors wrapping every call(...) round trip (request validation, publish, reply await): the first entry is the outermost.packages/client/src/client.ts:140
connectionOptions?AmqpConnectionManagerOptions-packages/client/src/client.ts:108
connectTimeoutMs?number | nullMaximum time in ms to wait for the AMQP connection to become ready before create() resolves to an Err(TechnicalError). Defaults to 30s (the AmqpClient's DEFAULT_CONNECT_TIMEOUT_MS). Pass null to disable the timeout and let amqp-connection-manager retry indefinitely.packages/client/src/client.ts:128
contractTContract-packages/client/src/client.ts:106
defaultPublishOptions?PublishOptionsDefault publish options that will be applied to all publish operations. These can be overridden by options passed to the publish method. By default, persistent is set to true for message durability.packages/client/src/client.ts:121
logger?Logger-packages/client/src/client.ts:109
publishInterceptors?readonly PublishInterceptor[]Interceptors wrapping every publish(...): the first entry is the outermost. Each can patch the message/options, observe the outcome, retry by calling next again, or short-circuit. A patched message is validated exactly like the caller's original.packages/client/src/client.ts:135
telemetry?TelemetryProviderOptional telemetry provider for tracing and metrics. If not provided, uses the default provider which attempts to load OpenTelemetry. OpenTelemetry instrumentation is automatically enabled if @opentelemetry/api is installed.packages/client/src/client.ts:115
urlsConnectionUrl[]-packages/client/src/client.ts:107

PublishInterceptor ​

ts
type PublishInterceptor = (args, next) => AsyncResult<void, PublishError>;

Defined in: packages/client/src/interceptors.ts:65

Intercepts client.publish(...): runs outside validation and publishing, so it can stamp headers (e.g. trace context), transform the payload, retry by calling next again, or short-circuit by returning without calling next. The first interceptor in the array is the outermost.

Parameters ​

ParameterType
argsPublishInterceptorArgs
nextPublishInterceptorNext

Returns ​

AsyncResult<void, PublishError>

Example ​

Stamp a correlation header on every outgoing message

typescript
const stampTenant: PublishInterceptor = (args, next) =>
  next({
    options: {
      ...args.options,
      headers: { ...args.options.headers, 'x-tenant-id': currentTenant() },
    },
  });

PublishInterceptorArgs ​

ts
type PublishInterceptorArgs = object;

Defined in: packages/client/src/interceptors.ts:29

Arguments a publish interceptor observes. message is the pre-validation payload — a patched message goes through schema validation exactly like the caller's original.

Properties ​

PropertyTypeDescriptionDefined in
messageunknownThe (not yet validated) message payload.packages/client/src/interceptors.ts:33
optionsPublishOptionsPer-call publish options (defaults are merged later, inside the client).packages/client/src/interceptors.ts:35
publisherNamestringThe contract publishers key being published.packages/client/src/interceptors.ts:31

PublishInterceptorNext ​

ts
type PublishInterceptorNext = (patch?) => AsyncResult<void, PublishError>;

Defined in: packages/client/src/interceptors.ts:43

Continuation a publish interceptor calls to run the rest of the chain. The optional patch replaces message and/or options for everything downstream (inner interceptors, validation, and the publish itself).

Parameters ​

ParameterType
patch?{ message?: unknown; options?: PublishOptions; }
patch.message?unknown
patch.options?PublishOptions

Returns ​

AsyncResult<void, PublishError>


PublishOptions ​

ts
type PublishOptions = AmqpClientPublishOptions & object;

Defined in: packages/client/src/client.ts:93

Publish options that extend amqp-client's PublishOptions with optional compression support.

Type Declaration ​

NameTypeDescriptionDefined in
compression?CompressionAlgorithmOptional compression algorithm to use for the message payload. When specified, the message will be compressed using the chosen algorithm and the contentEncoding header will be set automatically.packages/client/src/client.ts:99

Functions ​

isRpcError() ​

ts
function isRpcError(error): error is RpcError<string, unknown>;

Defined in: packages/core/dist/index.d.mts:86

Type guard to check if an error is an RpcError.

Narrowing to a specific code (and thus a typed data) is done on the code property after the guard, or via matchTags on the _tag.

Parameters ​

ParameterType
errorunknown

Returns ​

error is RpcError<string, unknown>

Released under the MIT License.