@amqp-contract/client 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.cts +2 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +10 -9
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ChannelModel, Options } from "amqplib";
|
|
2
2
|
import { ClientInferPublisherInput, ContractDefinition, InferPublisherNames } from "@amqp-contract/contract";
|
|
3
3
|
|
|
4
4
|
//#region src/client.d.ts
|
|
@@ -21,7 +21,7 @@ declare class AmqpClient<TContract extends ContractDefinition> {
|
|
|
21
21
|
/**
|
|
22
22
|
* Connect to AMQP broker
|
|
23
23
|
*/
|
|
24
|
-
connect(connection:
|
|
24
|
+
connect(connection: ChannelModel): Promise<void>;
|
|
25
25
|
/**
|
|
26
26
|
* Publish a message using a defined publisher
|
|
27
27
|
*/
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/client.ts"],"sourcesContent":[],"mappings":";;;;;;;AAUA;AAQa,UARI,cAAA,CAQM;EAAmB,UAAA,CAAA,EAAA,MAAA;EAID,OAAA,CAAA,EAV7B,OAAA,CAAQ,OAUqB;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/client.ts"],"sourcesContent":[],"mappings":";;;;;;;AAUA;AAQa,UARI,cAAA,CAQM;EAAmB,UAAA,CAAA,EAAA,MAAA;EAID,OAAA,CAAA,EAV7B,OAAA,CAAQ,OAUqB;;;;;AAkDtB,cAtDN,UAsDM,CAAA,kBAtDuB,kBAsDvB,CAAA,CAAA;EACoB,iBAAA,QAAA;EAAW,QAAA,OAAA;EAArC,QAAA,UAAA;EACC,WAAA,CAAA,QAAA,EApD2B,SAoD3B;EACT;;;EA8DW,OAAA,CAAA,UAAY,EA9GA,YA8GA,CAAA,EA9Ge,OA8Gf,CAAA,IAAA,CAAA;EAAmB;;;EAE5C,OAAA,CAAA,cApE2B,mBAoE3B,CApE+C,SAoE/C,CAAA,CAAA,CAAA,aAAA,EAnEgB,KAmEhB,EAAA,OAAA,EAlEU,yBAkEV,CAlEoC,SAkEpC,EAlE+C,KAkE/C,CAAA,EAAA,OAAA,CAAA,EAjEW,cAiEX,CAAA,EAhEE,OAgEF,CAAA,OAAA,CAAA;EAAU;;;WAjBI;;;;;iBAeD,+BAA+B,8BACnC,YACT,WAAW"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ChannelModel, Options } from "amqplib";
|
|
2
2
|
import { ClientInferPublisherInput, ContractDefinition, InferPublisherNames } from "@amqp-contract/contract";
|
|
3
3
|
|
|
4
4
|
//#region src/client.d.ts
|
|
@@ -21,7 +21,7 @@ declare class AmqpClient<TContract extends ContractDefinition> {
|
|
|
21
21
|
/**
|
|
22
22
|
* Connect to AMQP broker
|
|
23
23
|
*/
|
|
24
|
-
connect(connection:
|
|
24
|
+
connect(connection: ChannelModel): Promise<void>;
|
|
25
25
|
/**
|
|
26
26
|
* Publish a message using a defined publisher
|
|
27
27
|
*/
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/client.ts"],"sourcesContent":[],"mappings":";;;;;;;AAUA;AAQa,UARI,cAAA,CAQM;EAAmB,UAAA,CAAA,EAAA,MAAA;EAID,OAAA,CAAA,EAV7B,OAAA,CAAQ,OAUqB;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/client.ts"],"sourcesContent":[],"mappings":";;;;;;;AAUA;AAQa,UARI,cAAA,CAQM;EAAmB,UAAA,CAAA,EAAA,MAAA;EAID,OAAA,CAAA,EAV7B,OAAA,CAAQ,OAUqB;;;;;AAkDtB,cAtDN,UAsDM,CAAA,kBAtDuB,kBAsDvB,CAAA,CAAA;EACoB,iBAAA,QAAA;EAAW,QAAA,OAAA;EAArC,QAAA,UAAA;EACC,WAAA,CAAA,QAAA,EApD2B,SAoD3B;EACT;;;EA8DW,OAAA,CAAA,UAAY,EA9GA,YA8GA,CAAA,EA9Ge,OA8Gf,CAAA,IAAA,CAAA;EAAmB;;;EAE5C,OAAA,CAAA,cApE2B,mBAoE3B,CApE+C,SAoE/C,CAAA,CAAA,CAAA,aAAA,EAnEgB,KAmEhB,EAAA,OAAA,EAlEU,yBAkEV,CAlEoC,SAkEpC,EAlE+C,KAkE/C,CAAA,EAAA,OAAA,CAAA,EAjEW,cAiEX,CAAA,EAhEE,OAgEF,CAAA,OAAA,CAAA;EAAU;;;WAjBI;;;;;iBAeD,+BAA+B,8BACnC,YACT,WAAW"}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["contract: TContract"],"sources":["../src/client.ts"],"sourcesContent":["import type { Channel,
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["contract: TContract"],"sources":["../src/client.ts"],"sourcesContent":["import type { Channel, ChannelModel, Options } from \"amqplib\";\nimport type {\n ClientInferPublisherInput,\n ContractDefinition,\n InferPublisherNames,\n} from \"@amqp-contract/contract\";\n\n/**\n * Options for publishing a message\n */\nexport interface PublishOptions {\n routingKey?: string;\n options?: Options.Publish;\n}\n\n/**\n * Type-safe AMQP client for publishing messages\n */\nexport class AmqpClient<TContract extends ContractDefinition> {\n private channel: Channel | null = null;\n private connection: ChannelModel | null = null;\n\n constructor(private readonly contract: TContract) {}\n\n /**\n * Connect to AMQP broker\n */\n async connect(connection: ChannelModel): Promise<void> {\n this.connection = connection;\n this.channel = await connection.createChannel();\n\n // Setup exchanges\n if (this.contract.exchanges && this.channel) {\n for (const exchange of Object.values(this.contract.exchanges)) {\n await this.channel.assertExchange(exchange.name, exchange.type, {\n durable: exchange.durable,\n autoDelete: exchange.autoDelete,\n internal: exchange.internal,\n arguments: exchange.arguments,\n });\n }\n }\n\n // Setup queues\n if (this.contract.queues && this.channel) {\n for (const queue of Object.values(this.contract.queues)) {\n await this.channel.assertQueue(queue.name, {\n durable: queue.durable,\n exclusive: queue.exclusive,\n autoDelete: queue.autoDelete,\n arguments: queue.arguments,\n });\n }\n }\n\n // Setup bindings\n if (this.contract.bindings && this.channel) {\n for (const binding of Object.values(this.contract.bindings)) {\n await this.channel.bindQueue(\n binding.queue,\n binding.exchange,\n binding.routingKey ?? \"\",\n binding.arguments,\n );\n }\n }\n }\n\n /**\n * Publish a message using a defined publisher\n */\n async publish<TName extends InferPublisherNames<TContract>>(\n publisherName: TName,\n message: ClientInferPublisherInput<TContract, TName>,\n options?: PublishOptions,\n ): Promise<boolean> {\n if (!this.channel) {\n throw new Error(\"Client not connected. Call connect() first.\");\n }\n\n const publishers = this.contract.publishers as Record<string, unknown>;\n if (!publishers) {\n throw new Error(\"No publishers defined in contract\");\n }\n\n const publisher = publishers[publisherName as string];\n if (!publisher || typeof publisher !== \"object\") {\n throw new Error(`Publisher \"${String(publisherName)}\" not found in contract`);\n }\n\n const publisherDef = publisher as {\n exchange: string;\n routingKey?: string;\n message: { \"~standard\": { validate: (value: unknown) => unknown } };\n };\n\n // Validate message using schema\n const validation = publisherDef.message[\"~standard\"].validate(message);\n if (\n typeof validation === \"object\" &&\n validation !== null &&\n \"issues\" in validation &&\n validation.issues\n ) {\n throw new Error(`Message validation failed: ${JSON.stringify(validation.issues)}`);\n }\n\n const validatedMessage =\n typeof validation === \"object\" && validation !== null && \"value\" in validation\n ? validation.value\n : message;\n\n // Publish message\n const routingKey = options?.routingKey ?? publisherDef.routingKey ?? \"\";\n const content = Buffer.from(JSON.stringify(validatedMessage));\n\n return this.channel.publish(publisherDef.exchange, routingKey, content, options?.options);\n }\n\n /**\n * Close the connection\n */\n async close(): Promise<void> {\n if (this.channel) {\n await this.channel.close();\n this.channel = null;\n }\n if (this.connection) {\n await (this.connection as unknown as { close(): Promise<void> }).close();\n this.connection = null;\n }\n }\n}\n\n/**\n * Create a type-safe AMQP client from a contract\n */\nexport function createClient<TContract extends ContractDefinition>(\n contract: TContract,\n): AmqpClient<TContract> {\n return new AmqpClient(contract);\n}\n"],"mappings":";;;;AAkBA,IAAa,aAAb,MAA8D;CAC5D,AAAQ,UAA0B;CAClC,AAAQ,aAAkC;CAE1C,YAAY,AAAiBA,UAAqB;EAArB;;;;;CAK7B,MAAM,QAAQ,YAAyC;AACrD,OAAK,aAAa;AAClB,OAAK,UAAU,MAAM,WAAW,eAAe;AAG/C,MAAI,KAAK,SAAS,aAAa,KAAK,QAClC,MAAK,MAAM,YAAY,OAAO,OAAO,KAAK,SAAS,UAAU,CAC3D,OAAM,KAAK,QAAQ,eAAe,SAAS,MAAM,SAAS,MAAM;GAC9D,SAAS,SAAS;GAClB,YAAY,SAAS;GACrB,UAAU,SAAS;GACnB,WAAW,SAAS;GACrB,CAAC;AAKN,MAAI,KAAK,SAAS,UAAU,KAAK,QAC/B,MAAK,MAAM,SAAS,OAAO,OAAO,KAAK,SAAS,OAAO,CACrD,OAAM,KAAK,QAAQ,YAAY,MAAM,MAAM;GACzC,SAAS,MAAM;GACf,WAAW,MAAM;GACjB,YAAY,MAAM;GAClB,WAAW,MAAM;GAClB,CAAC;AAKN,MAAI,KAAK,SAAS,YAAY,KAAK,QACjC,MAAK,MAAM,WAAW,OAAO,OAAO,KAAK,SAAS,SAAS,CACzD,OAAM,KAAK,QAAQ,UACjB,QAAQ,OACR,QAAQ,UACR,QAAQ,cAAc,IACtB,QAAQ,UACT;;;;;CAQP,MAAM,QACJ,eACA,SACA,SACkB;AAClB,MAAI,CAAC,KAAK,QACR,OAAM,IAAI,MAAM,8CAA8C;EAGhE,MAAM,aAAa,KAAK,SAAS;AACjC,MAAI,CAAC,WACH,OAAM,IAAI,MAAM,oCAAoC;EAGtD,MAAM,YAAY,WAAW;AAC7B,MAAI,CAAC,aAAa,OAAO,cAAc,SACrC,OAAM,IAAI,MAAM,cAAc,OAAO,cAAc,CAAC,yBAAyB;EAG/E,MAAM,eAAe;EAOrB,MAAM,aAAa,aAAa,QAAQ,aAAa,SAAS,QAAQ;AACtE,MACE,OAAO,eAAe,YACtB,eAAe,QACf,YAAY,cACZ,WAAW,OAEX,OAAM,IAAI,MAAM,8BAA8B,KAAK,UAAU,WAAW,OAAO,GAAG;EAGpF,MAAM,mBACJ,OAAO,eAAe,YAAY,eAAe,QAAQ,WAAW,aAChE,WAAW,QACX;EAGN,MAAM,aAAa,SAAS,cAAc,aAAa,cAAc;EACrE,MAAM,UAAU,OAAO,KAAK,KAAK,UAAU,iBAAiB,CAAC;AAE7D,SAAO,KAAK,QAAQ,QAAQ,aAAa,UAAU,YAAY,SAAS,SAAS,QAAQ;;;;;CAM3F,MAAM,QAAuB;AAC3B,MAAI,KAAK,SAAS;AAChB,SAAM,KAAK,QAAQ,OAAO;AAC1B,QAAK,UAAU;;AAEjB,MAAI,KAAK,YAAY;AACnB,SAAO,KAAK,WAAqD,OAAO;AACxE,QAAK,aAAa;;;;;;;AAQxB,SAAgB,aACd,UACuB;AACvB,QAAO,IAAI,WAAW,SAAS"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amqp-contract/client",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "Client utilities for publishing messages using amqp-contract",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"amqp",
|
|
7
|
-
"typescript",
|
|
8
|
-
"contract",
|
|
9
7
|
"client",
|
|
10
|
-
"
|
|
8
|
+
"contract",
|
|
9
|
+
"rabbitmq",
|
|
10
|
+
"typescript"
|
|
11
11
|
],
|
|
12
12
|
"homepage": "https://github.com/btravers/amqp-contract#readme",
|
|
13
13
|
"bugs": {
|
|
@@ -41,16 +41,17 @@
|
|
|
41
41
|
"dist"
|
|
42
42
|
],
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@amqp-contract/contract": "0.0.
|
|
44
|
+
"@amqp-contract/contract": "0.0.2"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@types/amqplib": "0.10.8",
|
|
48
|
-
"@types/node": "
|
|
49
|
-
"@vitest/coverage-v8": "4.0.
|
|
48
|
+
"@types/node": "25.0.3",
|
|
49
|
+
"@vitest/coverage-v8": "4.0.16",
|
|
50
50
|
"amqplib": "0.10.9",
|
|
51
|
-
"tsdown": "0.
|
|
51
|
+
"tsdown": "0.18.1",
|
|
52
52
|
"typescript": "5.9.3",
|
|
53
|
-
"vitest": "4.0.
|
|
53
|
+
"vitest": "4.0.16",
|
|
54
|
+
"zod": "4.2.1",
|
|
54
55
|
"@amqp-contract/tsconfig": "0.0.0"
|
|
55
56
|
},
|
|
56
57
|
"peerDependencies": {
|