@nitra/nats 3.1.3 → 3.2.0

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/README.md CHANGED
@@ -8,7 +8,7 @@ NATS JetStream helper для Node.js.
8
8
  ## Встановлення
9
9
 
10
10
  ```sh
11
- yarn add @nitra/nats
11
+ bun add @nitra/nats
12
12
  # або
13
13
  npm install @nitra/nats
14
14
  ```
@@ -96,17 +96,14 @@ console.log('pending for group:', count2)
96
96
  ## Як це працює
97
97
 
98
98
  - **publish(subject, data, consumers?):**
99
-
100
99
  - Перевіряє/створює consumer-ів (один раз за процес).
101
100
  - Публікує повідомлення у subject `${stream}.${subject}`.
102
101
  - Якщо передати масив consumers — створює кастомні durable consumer-и з кастомними іменами та фільтрами.
103
102
 
104
103
  - **read(durableName):**
105
-
106
104
  - Читає одне повідомлення з черги для durable consumer (за замовчуванням durable_name = subject).
107
105
 
108
106
  - **finish():**
109
-
110
107
  - Підтверджує (ack) повідомлення.
111
108
 
112
109
  - **getPendingCount(durableName):**
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nitra/nats",
3
3
  "description": "nats helper",
4
- "version": "3.1.3",
4
+ "version": "3.2.0",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "src"
@@ -21,8 +21,8 @@
21
21
  "homepage": "https://github.com/nitra/nats",
22
22
  "license": "MIT",
23
23
  "dependencies": {
24
- "@nitra/check-env": "^4.0.0",
25
- "@nitra/pino": "^2.3.0",
24
+ "@nitra/check-env": "^4.1.0",
25
+ "@nitra/pino": "^2.7.4",
26
26
  "nats": "^2.29.3"
27
27
  },
28
28
  "engines": {
package/src/nats.js CHANGED
@@ -1,13 +1,26 @@
1
- import { checkEnv, env } from '@nitra/check-env'
1
+ import { checkEnv } from '@nitra/check-env'
2
2
  import { connect, JSONCodec } from 'nats'
3
-
4
- checkEnv(['NATS_URL', 'NATS_STREAM'])
3
+ import { env } from 'node:process'
5
4
 
6
5
  // AckPolicy
7
6
  export { AckPolicy } from 'nats'
8
7
 
9
- // Connect to NATS
10
- const nc = await connect({ servers: env.NATS_URL })
8
+ let nc
9
+
10
+ // якщо задані демо дані, то використовуємо фейковий NATS
11
+ if (env.NATS_FAKE_DATA) {
12
+ nc = {
13
+ jetstream: () => {},
14
+ jetstreamManager: async () => {
15
+ Promise.resolve()
16
+ }
17
+ }
18
+ } else {
19
+ checkEnv(['NATS_URL', 'NATS_STREAM'])
20
+
21
+ // Connect to NATS
22
+ nc = await connect({ servers: env.NATS_URL })
23
+ }
11
24
 
12
25
  // JSONCodec
13
26
  export const jc = JSONCodec()
@@ -1,5 +1,6 @@
1
1
  import { jsm, stream } from './nats.js'
2
2
  import { log } from '@nitra/pino'
3
+ import { env } from 'node:process'
3
4
 
4
5
  /**
5
6
  * Повертає кількість непрочитаних (pending) повідомлень для durable consumer.
@@ -7,6 +8,11 @@ import { log } from '@nitra/pino'
7
8
  * @returns {Promise<number>} - кількість непрочитаних повідомлень
8
9
  */
9
10
  export async function getPendingCount(consumer) {
11
+ // якщо задані демо дані, то завжди повертаємо 0
12
+ if (env.NATS_FAKE_DATA) {
13
+ return 0
14
+ }
15
+
10
16
  try {
11
17
  const info = await jsm.consumers.info(stream, consumer)
12
18
  return info.num_pending + info.num_ack_pending
package/src/publish.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { jc, js, stream } from './nats.js'
2
2
  import { ensureConsumer } from './consumer.js'
3
3
  import { log } from '@nitra/pino'
4
+ import { env } from 'node:process'
4
5
 
5
6
  /**
6
7
  * Публікує повідомлення у JetStream для вказаного subject.
@@ -11,6 +12,11 @@ import { log } from '@nitra/pino'
11
12
  * @returns {Promise<void>}
12
13
  */
13
14
  export async function publish(subject, data, consumers) {
15
+ // якщо задані демо дані, то ігноримо запис
16
+ if (env.NATS_FAKE_DATA) {
17
+ return Promise.resolve()
18
+ }
19
+
14
20
  // Ensure consumer if not exists
15
21
  await ensureConsumer(subject, consumers)
16
22
 
package/src/worker.js CHANGED
@@ -2,6 +2,7 @@ import { js, jc, stream } from './nats.js'
2
2
  import { state } from './utils.js'
3
3
  import { exit } from 'node:process'
4
4
  import { log } from '@nitra/pino'
5
+ import { env } from 'node:process'
5
6
 
6
7
  /**
7
8
  * Зчитує одне повідомлення з JetStream для вказаного consumer-а.
@@ -9,6 +10,12 @@ import { log } from '@nitra/pino'
9
10
  * @returns {Promise<object>} - декодовані дані повідомлення
10
11
  */
11
12
  export async function read(consumer) {
13
+ // якщо задані демо дані, то повертаємо їх
14
+ if (env.NATS_FAKE_DATA) {
15
+ console.log('env.NATS_FAKE_DATA:', env.NATS_FAKE_DATA)
16
+ return JSON.parse(env.NATS_FAKE_DATA)
17
+ }
18
+
12
19
  const consumerObj = await js.consumers.get(stream, consumer)
13
20
 
14
21
  const iter = await consumerObj.fetch({ max_messages: 1, expires: 1000 })