@nitra/nats 3.1.2 → 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.2",
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/consumer.js CHANGED
@@ -1,6 +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
+ import { log } from '@nitra/pino'
4
4
  // import { ensureStream } from './stream.js'
5
5
 
6
6
  // Set для зберігання існуючих consumer
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
- import log from '@nitra/pino'
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
- import log from '@nitra/pino'
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/stream.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { jsm, stream } from './nats.js'
2
- import log from '@nitra/pino'
2
+ import { log } from '@nitra/pino'
3
3
 
4
4
  /**
5
5
  * Перевіряє наявність або створює JetStream stream.
package/src/worker.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import { js, jc, stream } from './nats.js'
2
2
  import { state } from './utils.js'
3
3
  import { exit } from 'node:process'
4
- import log from '@nitra/pino'
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 })