@crossdelta/cloudevents 0.1.8 → 0.1.10

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.
@@ -17,6 +17,10 @@ export interface StreamConfig {
17
17
  export interface JetStreamConsumerOptions extends Pick<CloudEventsOptions, 'quarantineTopic' | 'errorTopic' | 'projectId' | 'source'> {
18
18
  /** NATS server URL. Defaults to NATS_URL env or nats://localhost:4222 */
19
19
  servers?: string;
20
+ /** NATS username for authentication (defaults to NATS_USER env var) */
21
+ user?: string;
22
+ /** NATS password for authentication (defaults to NATS_PASSWORD env var) */
23
+ pass?: string;
20
24
  /** JetStream stream name. Will be auto-created if it doesn't exist */
21
25
  stream: string;
22
26
  /** Subjects to bind to the stream (e.g., ['orders.>', 'payments.>']) */
@@ -120,6 +120,9 @@ async function cleanupJetStreamConsumer(name) {
120
120
  export async function consumeJetStreamEvents(options) {
121
121
  const servers = options.servers ?? process.env.NATS_URL ?? 'nats://localhost:4222';
122
122
  const name = options.consumer;
123
+ // Authentication (from options or env vars)
124
+ const user = options.user ?? process.env.NATS_USER;
125
+ const pass = options.pass ?? process.env.NATS_PASSWORD;
123
126
  // Cleanup existing consumer (handles hot-reload)
124
127
  await cleanupJetStreamConsumer(name);
125
128
  // 1) Discover handlers
@@ -130,8 +133,11 @@ export async function consumeJetStreamEvents(options) {
130
133
  const handlerNames = processedHandlers.map((h) => h.name).join(', ');
131
134
  logger.info(`[${name}] discovered ${processedHandlers.length} handler(s): ${handlerNames}`);
132
135
  // 2) Connect to NATS
133
- const nc = await connect({ servers });
134
- logger.info(`[${name}] connected to NATS: ${servers}`);
136
+ const nc = await connect({
137
+ servers,
138
+ ...(user && pass ? { user, pass } : {}),
139
+ });
140
+ logger.info(`[${name}] connected to NATS: ${servers}${user ? ' (authenticated)' : ''}`);
135
141
  // 3) Setup JetStream
136
142
  const jsm = await nc.jetstreamManager();
137
143
  const js = nc.jetstream();
@@ -7,6 +7,8 @@ import type { CloudEventsOptions } from '../../middlewares/cloudevents-middlewar
7
7
  * @property subject - NATS subject to subscribe to for incoming events.
8
8
  * @property discover - Glob pattern or directory used to discover event handler classes.
9
9
  * @property consumerName - Optional identifier appended to log output and the consumer name.
10
+ * @property user - Optional NATS username for authentication (can also use `NATS_USER` env var).
11
+ * @property pass - Optional NATS password for authentication (can also use `NATS_PASSWORD` env var).
10
12
  * @property quarantineTopic - Optional Pub/Sub topic for quarantining malformed messages when DLQ mode is enabled.
11
13
  * @property errorTopic - Optional Pub/Sub topic for recovering handler errors when DLQ mode is enabled.
12
14
  * @property projectId - Optional Google Cloud project identifier used for DLQ publishing.
@@ -17,6 +19,10 @@ export interface NatsConsumerOptions extends Pick<CloudEventsOptions, 'quarantin
17
19
  subject: string;
18
20
  discover: string;
19
21
  consumerName?: string;
22
+ /** NATS username for authentication (defaults to NATS_USER env var) */
23
+ user?: string;
24
+ /** NATS password for authentication (defaults to NATS_PASSWORD env var) */
25
+ pass?: string;
20
26
  }
21
27
  /**
22
28
  * Connects to NATS, discovers matching event handlers, and processes incoming CloudEvents.
@@ -39,6 +39,9 @@ export async function consumeNatsEvents(options) {
39
39
  const servers = options.servers ?? process.env.NATS_URL ?? 'nats://localhost:4222';
40
40
  const subject = options.subject;
41
41
  const name = options.consumerName ?? `nats-consumer:${subject}`;
42
+ // Authentication (from options or env vars)
43
+ const user = options.user ?? process.env.NATS_USER;
44
+ const pass = options.pass ?? process.env.NATS_PASSWORD;
42
45
  // Cleanup existing consumer with same name (handles hot-reload)
43
46
  await cleanupConsumer(name);
44
47
  // 1) Discover handler classes from *.event.ts files
@@ -49,8 +52,11 @@ export async function consumeNatsEvents(options) {
49
52
  const handlerNames = processedHandlers.map((h) => h.name).join(', ');
50
53
  logger.info(`[${name}] discovered ${processedHandlers.length} handler(s): ${handlerNames}`);
51
54
  // 2) Connect to NATS
52
- const nc = await connect({ servers });
53
- logger.info(`[${name}] connected to NATS: ${servers}`);
55
+ const nc = await connect({
56
+ servers,
57
+ ...(user && pass ? { user, pass } : {}),
58
+ });
59
+ logger.info(`[${name}] connected to NATS: ${servers}${user ? ' (authenticated)' : ''}`);
54
60
  // 3) Subscribe to the subject
55
61
  const sub = nc.subscribe(subject);
56
62
  logger.info(`[${name}] subscribed to subject: ${subject}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crossdelta/cloudevents",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "CloudEvents toolkit for TypeScript - handler discovery, DLQ-safe processing, NATS streaming",
5
5
  "author": "crossdelta",
6
6
  "license": "MIT",