@amqp-contract/worker 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 CHANGED
@@ -1,4 +1,4 @@
1
- import { Connection } from "amqplib";
1
+ import { ChannelModel } from "amqplib";
2
2
  import { ContractDefinition, InferConsumerNames, WorkerInferConsumerHandlers } from "@amqp-contract/contract";
3
3
 
4
4
  //#region src/worker.d.ts
@@ -16,7 +16,7 @@ declare class AmqpWorker<TContract extends ContractDefinition> {
16
16
  /**
17
17
  * Connect to AMQP broker
18
18
  */
19
- connect(connection: Connection): Promise<void>;
19
+ connect(connection: ChannelModel): Promise<void>;
20
20
  /**
21
21
  * Start consuming messages for a specific consumer
22
22
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/worker.ts"],"sourcesContent":[],"mappings":";;;;;;;AAUA;AAA0C,cAA7B,UAA6B,CAAA,kBAAA,kBAAA,CAAA,CAAA;EAMX,iBAAA,QAAA;EAC4B,iBAAA,QAAA;EAA5B,QAAA,OAAA;EAMH,QAAA,UAAA;EAAiB,QAAA,YAAA;EA8CI,WAAA,CAAA,QAAA,EArDlB,SAqDkB,EAAA,QAAA,EApDlB,2BAoDkB,CApDU,SAoDV,CAAA;EAAnB;;;EAuFR,OAAA,CAAA,UAAA,EArIM,UAqIN,CAAA,EArIuB,OAqIvB,CAAA,IAAA,CAAA;EAeG;;;EAiCT,OAAA,CAAA,cAvIc,kBAuIF,CAvIqB,SAuIrB,CAAA,CAAA,CAAA,YAAA,EAvI+C,KAuI/C,CAAA,EAvIuD,OAuIvD,CAAA,IAAA,CAAA;EAAmB;;;EAEnC,UAAA,CAAA,CAAA,EAlDU,OAkDV,CAAA,IAAA,CAAA;EACE;;;mBApCW;;;;WAeR;;;;;iBAkBD,+BAA+B,8BACnC,qBACA,4BAA4B,aACrC,WAAW"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/worker.ts"],"sourcesContent":[],"mappings":";;;;;;;AAUA;AAA0C,cAA7B,UAA6B,CAAA,kBAAA,kBAAA,CAAA,CAAA;EAMX,iBAAA,QAAA;EAC4B,iBAAA,QAAA;EAA5B,QAAA,OAAA;EAMH,QAAA,UAAA;EAAe,QAAA,YAAA;EA4CM,WAAA,CAAA,QAAA,EAnDlB,SAmDkB,EAAA,QAAA,EAlDlB,2BAkDkB,CAlDU,SAkDV,CAAA;EAAnB;;;EAuFR,OAAA,CAAA,UAAA,EAnIM,YAmIN,CAAA,EAnIqB,OAmIrB,CAAA,IAAA,CAAA;EAeG;;;EAiCT,OAAA,CAAA,cAvIc,kBAuIF,CAvIqB,SAuIrB,CAAA,CAAA,CAAA,YAAA,EAvI+C,KAuI/C,CAAA,EAvIuD,OAuIvD,CAAA,IAAA,CAAA;EAAmB;;;EAEnC,UAAA,CAAA,CAAA,EAlDU,OAkDV,CAAA,IAAA,CAAA;EACE;;;mBApCW;;;;WAeR;;;;;iBAkBD,+BAA+B,8BACnC,qBACA,4BAA4B,aACrC,WAAW"}
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { Connection } from "amqplib";
1
+ import { ChannelModel } from "amqplib";
2
2
  import { ContractDefinition, InferConsumerNames, WorkerInferConsumerHandlers } from "@amqp-contract/contract";
3
3
 
4
4
  //#region src/worker.d.ts
@@ -16,7 +16,7 @@ declare class AmqpWorker<TContract extends ContractDefinition> {
16
16
  /**
17
17
  * Connect to AMQP broker
18
18
  */
19
- connect(connection: Connection): Promise<void>;
19
+ connect(connection: ChannelModel): Promise<void>;
20
20
  /**
21
21
  * Start consuming messages for a specific consumer
22
22
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/worker.ts"],"sourcesContent":[],"mappings":";;;;;;;AAUA;AAA0C,cAA7B,UAA6B,CAAA,kBAAA,kBAAA,CAAA,CAAA;EAMX,iBAAA,QAAA;EAC4B,iBAAA,QAAA;EAA5B,QAAA,OAAA;EAMH,QAAA,UAAA;EAAiB,QAAA,YAAA;EA8CI,WAAA,CAAA,QAAA,EArDlB,SAqDkB,EAAA,QAAA,EApDlB,2BAoDkB,CApDU,SAoDV,CAAA;EAAnB;;;EAuFR,OAAA,CAAA,UAAA,EArIM,UAqIN,CAAA,EArIuB,OAqIvB,CAAA,IAAA,CAAA;EAeG;;;EAiCT,OAAA,CAAA,cAvIc,kBAuIF,CAvIqB,SAuIrB,CAAA,CAAA,CAAA,YAAA,EAvI+C,KAuI/C,CAAA,EAvIuD,OAuIvD,CAAA,IAAA,CAAA;EAAmB;;;EAEnC,UAAA,CAAA,CAAA,EAlDU,OAkDV,CAAA,IAAA,CAAA;EACE;;;mBApCW;;;;WAeR;;;;;iBAkBD,+BAA+B,8BACnC,qBACA,4BAA4B,aACrC,WAAW"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/worker.ts"],"sourcesContent":[],"mappings":";;;;;;;AAUA;AAA0C,cAA7B,UAA6B,CAAA,kBAAA,kBAAA,CAAA,CAAA;EAMX,iBAAA,QAAA;EAC4B,iBAAA,QAAA;EAA5B,QAAA,OAAA;EAMH,QAAA,UAAA;EAAe,QAAA,YAAA;EA4CM,WAAA,CAAA,QAAA,EAnDlB,SAmDkB,EAAA,QAAA,EAlDlB,2BAkDkB,CAlDU,SAkDV,CAAA;EAAnB;;;EAuFR,OAAA,CAAA,UAAA,EAnIM,YAmIN,CAAA,EAnIqB,OAmIrB,CAAA,IAAA,CAAA;EAeG;;;EAiCT,OAAA,CAAA,cAvIc,kBAuIF,CAvIqB,SAuIrB,CAAA,CAAA,CAAA,YAAA,EAvI+C,KAuI/C,CAAA,EAvIuD,OAuIvD,CAAA,IAAA,CAAA;EAAmB;;;EAEnC,UAAA,CAAA,CAAA,EAlDU,OAkDV,CAAA,IAAA,CAAA;EACE;;;mBApCW;;;;WAeR;;;;;iBAkBD,+BAA+B,8BACnC,qBACA,4BAA4B,aACrC,WAAW"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["contract: TContract","handlers: WorkerInferConsumerHandlers<TContract>"],"sources":["../src/worker.ts"],"sourcesContent":["import type { Channel, Connection as AmqpConnection, ConsumeMessage } from 'amqplib';\nimport type {\n ContractDefinition,\n InferConsumerNames,\n WorkerInferConsumerHandlers,\n} from '@amqp-contract/contract';\n\n/**\n * Type-safe AMQP worker for consuming messages\n */\nexport class AmqpWorker<TContract extends ContractDefinition> {\n private channel: Channel | null = null;\n private connection: AmqpConnection | null = null;\n private consumerTags: string[] = [];\n\n constructor(\n private readonly contract: TContract,\n private readonly handlers: WorkerInferConsumerHandlers<TContract>\n ) {}\n\n /**\n * Connect to AMQP broker\n */\n async connect(connection: AmqpConnection): Promise<void> {\n this.connection = connection;\n this.channel = await (\n connection as unknown as { createChannel(): Promise<Channel> }\n ).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 * Start consuming messages for a specific consumer\n */\n async consume<TName extends InferConsumerNames<TContract>>(consumerName: TName): Promise<void> {\n if (!this.channel) {\n throw new Error('Worker not connected. Call connect() first.');\n }\n\n const consumers = this.contract.consumers as Record<string, unknown>;\n if (!consumers) {\n throw new Error('No consumers defined in contract');\n }\n\n const consumer = consumers[consumerName as string];\n if (!consumer || typeof consumer !== 'object') {\n throw new Error(`Consumer \"${String(consumerName)}\" not found in contract`);\n }\n\n const consumerDef = consumer as {\n queue: string;\n message: { '~standard': { validate: (value: unknown) => unknown } };\n prefetch?: number;\n noAck?: boolean;\n };\n\n const handler = this.handlers[consumerName];\n if (!handler) {\n throw new Error(`Handler for \"${String(consumerName)}\" not provided`);\n }\n\n // Set prefetch if specified\n if (consumerDef.prefetch !== undefined) {\n await this.channel.prefetch(consumerDef.prefetch);\n }\n\n // Start consuming\n const result = await this.channel.consume(\n consumerDef.queue,\n async (msg: ConsumeMessage | null) => {\n if (!msg) {\n return;\n }\n\n try {\n // Parse message\n const content = JSON.parse(msg.content.toString());\n\n // Validate message using schema\n const validation = consumerDef.message['~standard'].validate(content);\n if (\n typeof validation === 'object' &&\n validation !== null &&\n 'issues' in validation &&\n validation.issues\n ) {\n console.error('Message validation failed:', validation.issues);\n // Reject message with no requeue\n this.channel?.nack(msg, false, false);\n return;\n }\n\n const validatedMessage =\n typeof validation === 'object' && validation !== null && 'value' in validation\n ? validation.value\n : content;\n\n // Call handler\n await handler(validatedMessage);\n\n // Acknowledge message if not in noAck mode\n if (!consumerDef.noAck) {\n this.channel?.ack(msg);\n }\n } catch (error) {\n console.error('Error processing message:', error);\n // Reject message and requeue\n this.channel?.nack(msg, false, true);\n }\n },\n {\n noAck: consumerDef.noAck ?? false,\n }\n );\n\n this.consumerTags.push(result.consumerTag);\n }\n\n /**\n * Start consuming messages for all consumers\n */\n async consumeAll(): Promise<void> {\n if (!this.contract.consumers) {\n throw new Error('No consumers defined in contract');\n }\n\n const consumerNames = Object.keys(this.contract.consumers) as InferConsumerNames<TContract>[];\n\n for (const consumerName of consumerNames) {\n await this.consume(consumerName);\n }\n }\n\n /**\n * Stop consuming messages\n */\n async stopConsuming(): Promise<void> {\n if (!this.channel) {\n return;\n }\n\n for (const tag of this.consumerTags) {\n await this.channel.cancel(tag);\n }\n\n this.consumerTags = [];\n }\n\n /**\n * Close the connection\n */\n async close(): Promise<void> {\n await this.stopConsuming();\n\n if (this.channel) {\n await this.channel.close();\n this.channel = null;\n }\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 worker from a contract\n */\nexport function createWorker<TContract extends ContractDefinition>(\n contract: TContract,\n handlers: WorkerInferConsumerHandlers<TContract>\n): AmqpWorker<TContract> {\n return new AmqpWorker(contract, handlers);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["contract: TContract","handlers: WorkerInferConsumerHandlers<TContract>"],"sources":["../src/worker.ts"],"sourcesContent":["import type { Channel, ChannelModel, ConsumeMessage } from \"amqplib\";\nimport type {\n ContractDefinition,\n InferConsumerNames,\n WorkerInferConsumerHandlers,\n} from \"@amqp-contract/contract\";\n\n/**\n * Type-safe AMQP worker for consuming messages\n */\nexport class AmqpWorker<TContract extends ContractDefinition> {\n private channel: Channel | null = null;\n private connection: ChannelModel | null = null;\n private consumerTags: string[] = [];\n\n constructor(\n private readonly contract: TContract,\n private readonly handlers: WorkerInferConsumerHandlers<TContract>,\n ) {}\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 * Start consuming messages for a specific consumer\n */\n async consume<TName extends InferConsumerNames<TContract>>(consumerName: TName): Promise<void> {\n if (!this.channel) {\n throw new Error(\"Worker not connected. Call connect() first.\");\n }\n\n const consumers = this.contract.consumers as Record<string, unknown>;\n if (!consumers) {\n throw new Error(\"No consumers defined in contract\");\n }\n\n const consumer = consumers[consumerName as string];\n if (!consumer || typeof consumer !== \"object\") {\n throw new Error(`Consumer \"${String(consumerName)}\" not found in contract`);\n }\n\n const consumerDef = consumer as {\n queue: string;\n message: { \"~standard\": { validate: (value: unknown) => unknown } };\n prefetch?: number;\n noAck?: boolean;\n };\n\n const handler = this.handlers[consumerName];\n if (!handler) {\n throw new Error(`Handler for \"${String(consumerName)}\" not provided`);\n }\n\n // Set prefetch if specified\n if (consumerDef.prefetch !== undefined) {\n await this.channel.prefetch(consumerDef.prefetch);\n }\n\n // Start consuming\n const result = await this.channel.consume(\n consumerDef.queue,\n async (msg: ConsumeMessage | null) => {\n if (!msg) {\n return;\n }\n\n try {\n // Parse message\n const content = JSON.parse(msg.content.toString());\n\n // Validate message using schema\n const validation = consumerDef.message[\"~standard\"].validate(content);\n if (\n typeof validation === \"object\" &&\n validation !== null &&\n \"issues\" in validation &&\n validation.issues\n ) {\n console.error(\"Message validation failed:\", validation.issues);\n // Reject message with no requeue\n this.channel?.nack(msg, false, false);\n return;\n }\n\n const validatedMessage =\n typeof validation === \"object\" && validation !== null && \"value\" in validation\n ? validation.value\n : content;\n\n // Call handler\n await handler(validatedMessage);\n\n // Acknowledge message if not in noAck mode\n if (!consumerDef.noAck) {\n this.channel?.ack(msg);\n }\n } catch (error) {\n console.error(\"Error processing message:\", error);\n // Reject message and requeue\n this.channel?.nack(msg, false, true);\n }\n },\n {\n noAck: consumerDef.noAck ?? false,\n },\n );\n\n this.consumerTags.push(result.consumerTag);\n }\n\n /**\n * Start consuming messages for all consumers\n */\n async consumeAll(): Promise<void> {\n if (!this.contract.consumers) {\n throw new Error(\"No consumers defined in contract\");\n }\n\n const consumerNames = Object.keys(this.contract.consumers) as InferConsumerNames<TContract>[];\n\n for (const consumerName of consumerNames) {\n await this.consume(consumerName);\n }\n }\n\n /**\n * Stop consuming messages\n */\n async stopConsuming(): Promise<void> {\n if (!this.channel) {\n return;\n }\n\n for (const tag of this.consumerTags) {\n await this.channel.cancel(tag);\n }\n\n this.consumerTags = [];\n }\n\n /**\n * Close the connection\n */\n async close(): Promise<void> {\n await this.stopConsuming();\n\n if (this.channel) {\n await this.channel.close();\n this.channel = null;\n }\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 worker from a contract\n */\nexport function createWorker<TContract extends ContractDefinition>(\n contract: TContract,\n handlers: WorkerInferConsumerHandlers<TContract>,\n): AmqpWorker<TContract> {\n return new AmqpWorker(contract, handlers);\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@amqp-contract/worker",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "Worker utilities for consuming messages using amqp-contract",
5
5
  "keywords": [
6
6
  "amqp",
7
- "typescript",
8
7
  "contract",
9
- "worker",
10
- "rabbitmq"
8
+ "rabbitmq",
9
+ "typescript",
10
+ "worker"
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.1"
44
+ "@amqp-contract/contract": "0.0.2"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@types/amqplib": "0.10.8",
48
- "@types/node": "24.10.2",
49
- "@vitest/coverage-v8": "4.0.15",
48
+ "@types/node": "25.0.3",
49
+ "@vitest/coverage-v8": "4.0.16",
50
50
  "amqplib": "0.10.9",
51
- "tsdown": "0.17.2",
51
+ "tsdown": "0.18.1",
52
52
  "typescript": "5.9.3",
53
- "vitest": "4.0.15",
53
+ "vitest": "4.0.16",
54
+ "zod": "4.2.1",
54
55
  "@amqp-contract/tsconfig": "0.0.0"
55
56
  },
56
57
  "peerDependencies": {