@nitra/nats 3.1.1 → 3.1.3

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nitra/nats",
3
3
  "description": "nats helper",
4
- "version": "3.1.1",
4
+ "version": "3.1.3",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "src"
@@ -21,9 +21,8 @@
21
21
  "homepage": "https://github.com/nitra/nats",
22
22
  "license": "MIT",
23
23
  "dependencies": {
24
- "@nitra/check-env": "^3.2.0",
25
- "@nitra/isenv": "^2.0.1",
26
- "@nitra/pino": "^1.7.1",
24
+ "@nitra/check-env": "^4.0.0",
25
+ "@nitra/pino": "^2.3.0",
27
26
  "nats": "^2.29.3"
28
27
  },
29
28
  "engines": {
package/src/consumer.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { jsm, AckPolicy, stream } from './nats.js'
2
2
  import { checkSubjectFormat } from './utils.js'
3
+ import { log } from '@nitra/pino'
3
4
  // import { ensureStream } from './stream.js'
4
5
 
5
6
  // Set для зберігання існуючих consumer
@@ -13,7 +14,7 @@ const consumerReady = new Set()
13
14
  */
14
15
  export async function ensureConsumer(subject, consumers = [{ durableName: subject, filterSubjects: [subject] }]) {
15
16
  if (consumers.every(c => consumerReady.has(c.durableName))) {
16
- console.debug(`✅ Consumers: ${consumers.map(c => c.durableName)} already exists`)
17
+ log.debug(`✅ Consumers: ${consumers.map(c => c.durableName)} already exists`)
17
18
  return
18
19
  }
19
20
 
@@ -31,7 +32,7 @@ export async function ensureConsumer(subject, consumers = [{ durableName: subjec
31
32
 
32
33
  // якщо не існує consumer-а який слухає subject, то створюємо за замовчуванням (durable_name = subject)
33
34
  if (isExists) {
34
- console.debug(`✅ Consumer «${c.durableName}» already exists`)
35
+ log.debug(`✅ Consumer «${c.durableName}» already exists`)
35
36
  } else {
36
37
  await jsm.consumers.add(stream, {
37
38
  durable_name: c.durableName,
@@ -40,7 +41,7 @@ export async function ensureConsumer(subject, consumers = [{ durableName: subjec
40
41
  deliver_policy: 'all' // 'all' - всі непрочитані повідомлення
41
42
  })
42
43
 
43
- console.debug(`🔥 Consumer «${c.durableName}» created`)
44
+ log.debug(`🔥 Consumer «${c.durableName}» created`)
44
45
  }
45
46
 
46
47
  consumerReady.add(c.durableName)
package/src/nats.js CHANGED
@@ -1,10 +1,11 @@
1
1
  import { checkEnv, env } from '@nitra/check-env'
2
2
  import { connect, JSONCodec } from 'nats'
3
+
4
+ checkEnv(['NATS_URL', 'NATS_STREAM'])
5
+
3
6
  // AckPolicy
4
7
  export { AckPolicy } from 'nats'
5
8
 
6
- checkEnv(['NATS_URL'])
7
-
8
9
  // Connect to NATS
9
10
  const nc = await connect({ servers: env.NATS_URL })
10
11
 
@@ -18,4 +19,4 @@ export const js = nc.jetstream()
18
19
  export const jsm = await nc.jetstreamManager()
19
20
 
20
21
  // Stream name
21
- export const stream = process.env.NATS_STREAM || 'dev'
22
+ export const stream = env.NATS_STREAM
@@ -1,4 +1,5 @@
1
1
  import { jsm, stream } from './nats.js'
2
+ import { log } from '@nitra/pino'
2
3
 
3
4
  /**
4
5
  * Повертає кількість непрочитаних (pending) повідомлень для durable consumer.
@@ -10,7 +11,7 @@ export async function getPendingCount(consumer) {
10
11
  const info = await jsm.consumers.info(stream, consumer)
11
12
  return info.num_pending + info.num_ack_pending
12
13
  } catch {
13
- console.error(`consumer ${consumer} not found`)
14
+ log.error(`consumer ${consumer} not found`)
14
15
  return 0
15
16
  }
16
17
  }
package/src/publish.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { jc, js, stream } from './nats.js'
2
2
  import { ensureConsumer } from './consumer.js'
3
+ import { log } from '@nitra/pino'
3
4
 
4
5
  /**
5
6
  * Публікує повідомлення у JetStream для вказаного subject.
@@ -13,7 +14,7 @@ export async function publish(subject, data, consumers) {
13
14
  // Ensure consumer if not exists
14
15
  await ensureConsumer(subject, consumers)
15
16
 
16
- console.debug('publish:', data)
17
+ log.debug('publish:', data)
17
18
  // Publish message
18
19
  return js.publish(`${stream}.${subject}`, jc.encode(data))
19
20
  }
package/src/stream.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { jsm, stream } from './nats.js'
2
+ import { log } from '@nitra/pino'
2
3
 
3
4
  /**
4
5
  * Перевіряє наявність або створює JetStream stream.
@@ -7,7 +8,7 @@ import { jsm, stream } from './nats.js'
7
8
  export async function ensureStream() {
8
9
  try {
9
10
  await jsm.streams.info(stream)
10
- console.debug('✅ Stream already exists')
11
+ log.debug('✅ Stream already exists')
11
12
  } catch {
12
13
  await jsm.streams.add({
13
14
  name: stream,
@@ -16,6 +17,6 @@ export async function ensureStream() {
16
17
  replicas: 1, // кількість реплік у кластері TODO: проговорити кількість реплік
17
18
  storage: 'file' //'memory' TODO: проговорити які параметри потрібні для кластера
18
19
  })
19
- console.debug('✅ Stream created')
20
+ log.debug('✅ Stream created')
20
21
  }
21
22
  }
package/src/worker.js CHANGED
@@ -1,5 +1,7 @@
1
1
  import { js, jc, stream } from './nats.js'
2
2
  import { state } from './utils.js'
3
+ import { exit } from 'node:process'
4
+ import { log } from '@nitra/pino'
3
5
 
4
6
  /**
5
7
  * Зчитує одне повідомлення з JetStream для вказаного consumer-а.
@@ -12,7 +14,7 @@ export async function read(consumer) {
12
14
  const iter = await consumerObj.fetch({ max_messages: 1, expires: 1000 })
13
15
  for await (const msg of iter) {
14
16
  state.msg = msg
15
- console.debug('read msg', jc.decode(msg.data))
17
+ log.debug('read msg', jc.decode(msg.data))
16
18
 
17
19
  // Реєструємо хук на завершення процесу. якщо не підтвердили повідомлення або помилка - відправляємо повідомлення назад в чергу
18
20
  for (const signal of ['exit', 'SIGINT', 'uncaughtException', 'unhandledRejection']) {
@@ -22,6 +24,6 @@ export async function read(consumer) {
22
24
  return jc.decode(msg.data)
23
25
  }
24
26
 
25
- console.debug('no msg...')
26
- return {} // якщо не було жодного повідомлення
27
+ log.info(`${consumer} - no msg...`)
28
+ exit(0) // якщо не було жодного повідомлення
27
29
  }