@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 +1 -4
- package/package.json +3 -3
- package/src/consumer.js +1 -1
- package/src/nats.js +18 -5
- package/src/pending-count.js +7 -1
- package/src/publish.js +7 -1
- package/src/stream.js +1 -1
- package/src/worker.js +8 -1
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ NATS JetStream helper для Node.js.
|
|
|
8
8
|
## Встановлення
|
|
9
9
|
|
|
10
10
|
```sh
|
|
11
|
-
|
|
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.
|
|
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.
|
|
25
|
-
"@nitra/pino": "^2.
|
|
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
package/src/nats.js
CHANGED
|
@@ -1,13 +1,26 @@
|
|
|
1
|
-
import { checkEnv
|
|
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
|
-
|
|
10
|
-
|
|
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()
|
package/src/pending-count.js
CHANGED
|
@@ -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
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 })
|