@venizia/ignis-docs 0.0.6-2 → 0.0.6-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/dist/mcp-server/index.js +1 -0
- package/dist/mcp-server/index.js.map +1 -1
- package/dist/mcp-server/tools/base.tool.d.ts +4 -8
- package/dist/mcp-server/tools/base.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/base.tool.js +1 -1
- package/dist/mcp-server/tools/base.tool.js.map +1 -1
- package/dist/mcp-server/tools/docs/get-document-content.tool.d.ts +8 -2
- package/dist/mcp-server/tools/docs/get-document-content.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/docs/get-document-content.tool.js +1 -1
- package/dist/mcp-server/tools/docs/get-document-content.tool.js.map +1 -1
- package/dist/mcp-server/tools/docs/get-document-metadata.tool.d.ts +13 -2
- package/dist/mcp-server/tools/docs/get-document-metadata.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/docs/get-document-metadata.tool.js +1 -1
- package/dist/mcp-server/tools/docs/get-document-metadata.tool.js.map +1 -1
- package/dist/mcp-server/tools/docs/get-package-overview.tool.d.ts +16 -2
- package/dist/mcp-server/tools/docs/get-package-overview.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/docs/get-package-overview.tool.js +1 -1
- package/dist/mcp-server/tools/docs/get-package-overview.tool.js.map +1 -1
- package/dist/mcp-server/tools/docs/list-categories.tool.d.ts +5 -2
- package/dist/mcp-server/tools/docs/list-categories.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/docs/list-categories.tool.js +1 -1
- package/dist/mcp-server/tools/docs/list-categories.tool.js.map +1 -1
- package/dist/mcp-server/tools/docs/list-documents.tool.d.ts +11 -2
- package/dist/mcp-server/tools/docs/list-documents.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/docs/list-documents.tool.js +1 -1
- package/dist/mcp-server/tools/docs/list-documents.tool.js.map +1 -1
- package/dist/mcp-server/tools/docs/search-documents.tool.d.ts +13 -2
- package/dist/mcp-server/tools/docs/search-documents.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/docs/search-documents.tool.js +1 -1
- package/dist/mcp-server/tools/docs/search-documents.tool.js.map +1 -1
- package/dist/mcp-server/tools/github/list-project-files.tool.d.ts +9 -2
- package/dist/mcp-server/tools/github/list-project-files.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/github/list-project-files.tool.js +1 -1
- package/dist/mcp-server/tools/github/list-project-files.tool.js.map +1 -1
- package/dist/mcp-server/tools/github/search-code.tool.d.ts +16 -2
- package/dist/mcp-server/tools/github/search-code.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/github/search-code.tool.js +1 -1
- package/dist/mcp-server/tools/github/search-code.tool.js.map +1 -1
- package/dist/mcp-server/tools/github/verify-dependencies.tool.d.ts +19 -2
- package/dist/mcp-server/tools/github/verify-dependencies.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/github/verify-dependencies.tool.js +1 -1
- package/dist/mcp-server/tools/github/verify-dependencies.tool.js.map +1 -1
- package/dist/mcp-server/tools/github/view-source-file.tool.d.ts +8 -2
- package/dist/mcp-server/tools/github/view-source-file.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/github/view-source-file.tool.js +1 -1
- package/dist/mcp-server/tools/github/view-source-file.tool.js.map +1 -1
- package/package.json +68 -54
- package/wiki/guides/reference/mcp-docs-server.md +0 -134
- package/wiki/references/base/controllers.md +11 -8
- package/wiki/references/components/authentication/usage.md +3 -3
- package/wiki/references/components/authorization/api.md +1213 -0
- package/wiki/references/components/authorization/errors.md +387 -0
- package/wiki/references/components/authorization/index.md +712 -0
- package/wiki/references/components/authorization/usage.md +696 -0
- package/wiki/references/components/index.md +2 -0
- package/wiki/references/helpers/index.md +1 -0
- package/wiki/references/helpers/kafka/index.md +305 -0
|
@@ -14,6 +14,7 @@ Reusable classes and functions providing common functionality - designed for eas
|
|
|
14
14
|
| [Inversion](./inversion/) | Dependency injection | DI container implementation |
|
|
15
15
|
| [Logger](./logger/) | Logging | Winston-based, multiple transports, scopes |
|
|
16
16
|
| [Network](./network/) | Network requests | HTTP, TCP, UDP helpers |
|
|
17
|
+
| Kafka <Badge type="warning" text="Experimental" /> | Event streaming | Apache Kafka producer/consumer |
|
|
17
18
|
| [Queue](./queue/) | Message queues | BullMQ, MQTT support |
|
|
18
19
|
| [Redis](./redis/) | Redis operations | Single/cluster, key-value, hashes, JSON, pub/sub |
|
|
19
20
|
| [Socket.IO](./socket-io/) | Real-time communication | Socket.IO client/server helpers |
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
# Kafka <Badge type="warning" text="Experimental" />
|
|
2
|
+
|
|
3
|
+
Apache Kafka event streaming with producer, consumer, and admin helpers. Built on [`@platformatic/kafka`](https://github.com/platformatic/kafka).
|
|
4
|
+
|
|
5
|
+
> [!WARNING]
|
|
6
|
+
> This helper is **experimental**. The API may change in future releases.
|
|
7
|
+
|
|
8
|
+
## Quick Reference
|
|
9
|
+
|
|
10
|
+
| Class | Extends | Peer Dependency | Use Case |
|
|
11
|
+
|-------|---------|-----------------|----------|
|
|
12
|
+
| **KafkaProducerHelper** | `BaseHelper` | `@platformatic/kafka` | Publish messages to Kafka topics |
|
|
13
|
+
| **KafkaConsumerHelper** | `BaseHelper` | `@platformatic/kafka` | Consume messages from Kafka topics with consumer groups |
|
|
14
|
+
| **KafkaAdminHelper** | `BaseHelper` | `@platformatic/kafka` | Manage topics, partitions, consumer groups, and configs |
|
|
15
|
+
|
|
16
|
+
### Import Path
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import {
|
|
20
|
+
KafkaProducerHelper,
|
|
21
|
+
KafkaConsumerHelper,
|
|
22
|
+
KafkaAdminHelper,
|
|
23
|
+
KafkaDefaults,
|
|
24
|
+
KafkaAcks,
|
|
25
|
+
KafkaConfigResourceTypes,
|
|
26
|
+
} from '@venizia/ignis-helpers/kafka';
|
|
27
|
+
|
|
28
|
+
import type {
|
|
29
|
+
IKafkaConnectionOptions,
|
|
30
|
+
IKafkaProducerOptions,
|
|
31
|
+
IKafkaConsumerOptions,
|
|
32
|
+
IKafkaAdminOptions,
|
|
33
|
+
IKafkaProduceMessage,
|
|
34
|
+
IKafkaSendOptions,
|
|
35
|
+
IKafkaConsumedMessage,
|
|
36
|
+
IKafkaCommitOptions,
|
|
37
|
+
} from '@venizia/ignis-helpers/kafka';
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Installation
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
bun add @platformatic/kafka
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Producer
|
|
47
|
+
|
|
48
|
+
The `KafkaProducerHelper` wraps `@platformatic/kafka`'s `Producer` for publishing messages to Kafka topics.
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
import { KafkaProducerHelper, KafkaAcks } from '@venizia/ignis-helpers/kafka';
|
|
52
|
+
|
|
53
|
+
const producer = new KafkaProducerHelper({
|
|
54
|
+
identifier: 'order-producer',
|
|
55
|
+
bootstrapBrokers: ['localhost:9092'],
|
|
56
|
+
acks: KafkaAcks.ALL,
|
|
57
|
+
autocreateTopics: true,
|
|
58
|
+
onConnected: () => console.log('Producer connected'),
|
|
59
|
+
onError: ({ error }) => console.error('Producer error:', error),
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// Send messages
|
|
63
|
+
await producer.send({
|
|
64
|
+
messages: [
|
|
65
|
+
{ topic: 'orders', key: 'order-123', value: JSON.stringify({ status: 'created' }) },
|
|
66
|
+
],
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
// Send batch across multiple topics
|
|
70
|
+
await producer.sendBatch({
|
|
71
|
+
topicMessages: [
|
|
72
|
+
{ topic: 'orders', messages: [{ key: 'o1', value: '...' }] },
|
|
73
|
+
{ topic: 'notifications', messages: [{ key: 'n1', value: '...' }] },
|
|
74
|
+
],
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// Graceful shutdown
|
|
78
|
+
await producer.close();
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### IKafkaProducerOptions
|
|
82
|
+
|
|
83
|
+
| Option | Type | Default | Description |
|
|
84
|
+
|--------|------|---------|-------------|
|
|
85
|
+
| `bootstrapBrokers` | `string[]` | -- | Kafka broker addresses (required) |
|
|
86
|
+
| `identifier` | `string` | -- | Scoped logging identifier |
|
|
87
|
+
| `clientId` | `string` | `'ignis-kafka'` | Kafka client ID |
|
|
88
|
+
| `acks` | `number` | -- | Acknowledgment level (`KafkaAcks.NONE`, `LEADER`, `ALL`) |
|
|
89
|
+
| `autocreateTopics` | `boolean` | -- | Auto-create topics on first produce |
|
|
90
|
+
| `timeout` | `number` | -- | Connection timeout in ms |
|
|
91
|
+
| `retries` | `number \| boolean` | -- | Retry configuration |
|
|
92
|
+
| `retryDelay` | `number` | -- | Delay between retries in ms |
|
|
93
|
+
| `serializers` | `Partial<Serializers>` | -- | Custom key/value/header serializers |
|
|
94
|
+
| `onConnected` | `() => void` | -- | Broker connect callback |
|
|
95
|
+
| `onDisconnected` | `() => void` | -- | Broker disconnect callback |
|
|
96
|
+
| `onError` | `(opts: { error: Error }) => void` | -- | Error callback |
|
|
97
|
+
|
|
98
|
+
### Producer API
|
|
99
|
+
|
|
100
|
+
| Method | Returns | Description |
|
|
101
|
+
|--------|---------|-------------|
|
|
102
|
+
| `send(opts)` | `Promise<void>` | Send messages. `opts: { messages: IKafkaProduceMessage[]; acks? }` |
|
|
103
|
+
| `sendBatch(opts)` | `Promise<void>` | Send to multiple topics. `opts: { topicMessages: Array<{ topic; messages }> }` |
|
|
104
|
+
| `getProducer()` | `Producer` | Access the underlying `@platformatic/kafka` Producer |
|
|
105
|
+
| `close()` | `Promise<void>` | Gracefully close the producer connection |
|
|
106
|
+
| `static newInstance(opts)` | `KafkaProducerHelper` | Factory method |
|
|
107
|
+
|
|
108
|
+
## Consumer
|
|
109
|
+
|
|
110
|
+
The `KafkaConsumerHelper` provides a stream-based consumer with consumer group support, pause/resume, manual commit, and lag monitoring.
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
import { KafkaConsumerHelper } from '@venizia/ignis-helpers/kafka';
|
|
114
|
+
|
|
115
|
+
const consumer = new KafkaConsumerHelper({
|
|
116
|
+
identifier: 'order-consumer',
|
|
117
|
+
bootstrapBrokers: ['localhost:9092'],
|
|
118
|
+
groupId: 'order-processing-group',
|
|
119
|
+
topics: ['orders'],
|
|
120
|
+
mode: 'latest',
|
|
121
|
+
autocommit: true,
|
|
122
|
+
onMessage: async ({ message }) => {
|
|
123
|
+
console.log(`Topic: ${message.topic}, Partition: ${message.partition}`);
|
|
124
|
+
console.log(`Key: ${message.key}, Value: ${message.value}`);
|
|
125
|
+
},
|
|
126
|
+
onConnected: () => console.log('Consumer connected'),
|
|
127
|
+
onGroupJoin: ({ groupId, memberId }) => {
|
|
128
|
+
console.log(`Joined group ${groupId} as ${memberId}`);
|
|
129
|
+
},
|
|
130
|
+
onError: ({ error }) => console.error('Consumer error:', error),
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
// Start consuming
|
|
134
|
+
await consumer.start();
|
|
135
|
+
|
|
136
|
+
// Pause/resume
|
|
137
|
+
consumer.pause();
|
|
138
|
+
consumer.resume();
|
|
139
|
+
|
|
140
|
+
// Graceful shutdown
|
|
141
|
+
await consumer.close();
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### IKafkaConsumerOptions
|
|
145
|
+
|
|
146
|
+
| Option | Type | Default | Description |
|
|
147
|
+
|--------|------|---------|-------------|
|
|
148
|
+
| `bootstrapBrokers` | `string[]` | -- | Kafka broker addresses (required) |
|
|
149
|
+
| `groupId` | `string` | -- | Consumer group ID (required) |
|
|
150
|
+
| `topics` | `string[]` | -- | Topics to consume (required) |
|
|
151
|
+
| `identifier` | `string` | -- | Scoped logging identifier |
|
|
152
|
+
| `clientId` | `string` | `'ignis-kafka'` | Kafka client ID |
|
|
153
|
+
| `mode` | `'latest' \| 'earliest' \| 'committed'` | `'latest'` | Offset reset strategy |
|
|
154
|
+
| `autocommit` | `boolean \| number` | `true` | Auto-commit offsets (or interval in ms) |
|
|
155
|
+
| `sessionTimeout` | `number` | `30000` | Session timeout in ms |
|
|
156
|
+
| `heartbeatInterval` | `number` | `3000` | Heartbeat interval in ms |
|
|
157
|
+
| `highWaterMark` | `number` | `1024` | Stream high water mark |
|
|
158
|
+
| `maxWaitTime` | `number` | `5000` | Max wait time for fetch in ms |
|
|
159
|
+
| `deserializers` | `Partial<Deserializers>` | -- | Custom key/value/header deserializers |
|
|
160
|
+
| `onMessage` | `(opts: { message }) => ValueOrPromise<void>` | -- | Message handler |
|
|
161
|
+
| `onConnected` | `() => void` | -- | Broker connect callback |
|
|
162
|
+
| `onDisconnected` | `() => void` | -- | Broker disconnect callback |
|
|
163
|
+
| `onGroupJoin` | `(opts: { groupId; memberId }) => void` | -- | Consumer group join callback |
|
|
164
|
+
| `onGroupLeave` | `() => void` | -- | Consumer group leave callback |
|
|
165
|
+
| `onRebalance` | `() => void` | -- | Group rebalance callback |
|
|
166
|
+
| `onLag` | `(opts: { offsets }) => void` | -- | Consumer lag callback |
|
|
167
|
+
| `onError` | `(opts: { error: Error }) => void` | -- | Error callback |
|
|
168
|
+
|
|
169
|
+
### Consumer API
|
|
170
|
+
|
|
171
|
+
| Method | Returns | Description |
|
|
172
|
+
|--------|---------|-------------|
|
|
173
|
+
| `start()` | `Promise<void>` | Start consuming messages (fires async consume loop) |
|
|
174
|
+
| `pause()` | `void` | Pause the message stream |
|
|
175
|
+
| `resume()` | `void` | Resume the message stream |
|
|
176
|
+
| `isPaused()` | `boolean` | Check if the stream is paused |
|
|
177
|
+
| `isConsuming()` | `boolean` | Check if the consumer is running |
|
|
178
|
+
| `commit(opts)` | `Promise<void>` | Manually commit offsets |
|
|
179
|
+
| `startLagMonitoring(opts)` | `void` | Start lag monitoring. `opts: { interval: number }` |
|
|
180
|
+
| `stopLagMonitoring()` | `void` | Stop lag monitoring |
|
|
181
|
+
| `getConsumer()` | `Consumer` | Access the underlying `@platformatic/kafka` Consumer |
|
|
182
|
+
| `close()` | `Promise<void>` | Abort consume loop, close stream and consumer |
|
|
183
|
+
| `static newInstance(opts)` | `KafkaConsumerHelper` | Factory method |
|
|
184
|
+
|
|
185
|
+
### Manual Commit
|
|
186
|
+
|
|
187
|
+
When `autocommit` is `false`, commit offsets explicitly:
|
|
188
|
+
|
|
189
|
+
```typescript
|
|
190
|
+
const consumer = new KafkaConsumerHelper({
|
|
191
|
+
// ...
|
|
192
|
+
autocommit: false,
|
|
193
|
+
onMessage: async ({ message }) => {
|
|
194
|
+
await processMessage(message);
|
|
195
|
+
// Commit after successful processing
|
|
196
|
+
await consumer.commit({
|
|
197
|
+
offsets: [{
|
|
198
|
+
topic: message.topic,
|
|
199
|
+
partition: message.partition,
|
|
200
|
+
offset: message.offset,
|
|
201
|
+
leaderEpoch: 0,
|
|
202
|
+
}],
|
|
203
|
+
});
|
|
204
|
+
},
|
|
205
|
+
});
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## Admin
|
|
209
|
+
|
|
210
|
+
The `KafkaAdminHelper` provides topic, partition, consumer group, and config management.
|
|
211
|
+
|
|
212
|
+
```typescript
|
|
213
|
+
import { KafkaAdminHelper, KafkaConfigResourceTypes } from '@venizia/ignis-helpers/kafka';
|
|
214
|
+
|
|
215
|
+
const admin = new KafkaAdminHelper({
|
|
216
|
+
identifier: 'kafka-admin',
|
|
217
|
+
bootstrapBrokers: ['localhost:9092'],
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
// Topic management
|
|
221
|
+
await admin.createTopics({ topics: ['orders', 'notifications'], partitions: 3, replicas: 1 });
|
|
222
|
+
const topics = await admin.listTopics();
|
|
223
|
+
await admin.deleteTopics({ topics: ['old-topic'] });
|
|
224
|
+
|
|
225
|
+
// Partition management
|
|
226
|
+
await admin.createPartitions({ topics: [{ name: 'orders', count: 6 }] });
|
|
227
|
+
|
|
228
|
+
// Consumer group management
|
|
229
|
+
const groups = await admin.listGroups();
|
|
230
|
+
const groupDetails = await admin.describeGroups({ groups: ['order-processing-group'] });
|
|
231
|
+
await admin.deleteGroups({ groups: ['stale-group'] });
|
|
232
|
+
|
|
233
|
+
// Config management
|
|
234
|
+
const configs = await admin.describeConfigs({
|
|
235
|
+
resources: [{
|
|
236
|
+
resourceType: KafkaConfigResourceTypes.TOPIC,
|
|
237
|
+
resourceName: 'orders',
|
|
238
|
+
}],
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
// Metadata
|
|
242
|
+
const meta = await admin.metadata({ topics: ['orders'] });
|
|
243
|
+
|
|
244
|
+
// Cleanup
|
|
245
|
+
await admin.close();
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### Admin API
|
|
249
|
+
|
|
250
|
+
| Method | Returns | Description |
|
|
251
|
+
|--------|---------|-------------|
|
|
252
|
+
| `createTopics(opts)` | `Promise<any>` | Create topics with partitions and replicas |
|
|
253
|
+
| `deleteTopics(opts)` | `Promise<void>` | Delete topics |
|
|
254
|
+
| `listTopics(opts?)` | `Promise<string[]>` | List topics (optionally include internals) |
|
|
255
|
+
| `metadata(opts?)` | `Promise<any>` | Fetch cluster/topic metadata |
|
|
256
|
+
| `listGroups(opts?)` | `Promise<any>` | List consumer groups (filter by state) |
|
|
257
|
+
| `describeGroups(opts)` | `Promise<any>` | Describe consumer groups |
|
|
258
|
+
| `deleteGroups(opts)` | `Promise<void>` | Delete consumer groups |
|
|
259
|
+
| `listConsumerGroupOffsets(opts)` | `Promise<any>` | List offsets for consumer groups |
|
|
260
|
+
| `alterConsumerGroupOffsets(opts)` | `Promise<void>` | Alter consumer group offsets |
|
|
261
|
+
| `createPartitions(opts)` | `Promise<void>` | Create partitions for topics |
|
|
262
|
+
| `describeConfigs(opts)` | `Promise<any>` | Describe resource configs |
|
|
263
|
+
| `alterConfigs(opts)` | `Promise<void>` | Alter resource configs |
|
|
264
|
+
| `getAdmin()` | `Admin` | Access the underlying `@platformatic/kafka` Admin |
|
|
265
|
+
| `close()` | `Promise<void>` | Close the admin connection |
|
|
266
|
+
| `static newInstance(opts)` | `KafkaAdminHelper` | Factory method |
|
|
267
|
+
|
|
268
|
+
## Constants
|
|
269
|
+
|
|
270
|
+
### KafkaDefaults
|
|
271
|
+
|
|
272
|
+
| Constant | Value | Description |
|
|
273
|
+
|----------|-------|-------------|
|
|
274
|
+
| `CLIENT_ID` | `'ignis-kafka'` | Default Kafka client ID |
|
|
275
|
+
| `SESSION_TIMEOUT` | `30000` | Session timeout (ms) |
|
|
276
|
+
| `HEARTBEAT_INTERVAL` | `3000` | Heartbeat interval (ms) |
|
|
277
|
+
| `MAX_WAIT_TIME` | `5000` | Max fetch wait time (ms) |
|
|
278
|
+
| `HIGH_WATER_MARK` | `1024` | Stream high water mark |
|
|
279
|
+
| `AUTOCOMMIT_INTERVAL` | `100` | Auto-commit interval (ms) |
|
|
280
|
+
|
|
281
|
+
### KafkaAcks
|
|
282
|
+
|
|
283
|
+
| Constant | Value | Description |
|
|
284
|
+
|----------|-------|-------------|
|
|
285
|
+
| `NONE` | `0` | No acknowledgment |
|
|
286
|
+
| `LEADER` | `1` | Leader acknowledgment only |
|
|
287
|
+
| `ALL` | `-1` | All replicas must acknowledge |
|
|
288
|
+
|
|
289
|
+
### KafkaConfigResourceTypes
|
|
290
|
+
|
|
291
|
+
| Constant | Value | Description |
|
|
292
|
+
|----------|-------|-------------|
|
|
293
|
+
| `UNKNOWN` | `0` | Unknown resource type |
|
|
294
|
+
| `TOPIC` | `2` | Topic resource |
|
|
295
|
+
| `BROKER` | `4` | Broker resource |
|
|
296
|
+
| `BROKER_LOGGER` | `8` | Broker logger resource |
|
|
297
|
+
|
|
298
|
+
## See Also
|
|
299
|
+
|
|
300
|
+
- **Other Helpers:**
|
|
301
|
+
- [Queue Helper](../queue/) -- BullMQ, MQTT, and in-memory queues
|
|
302
|
+
- [Redis Helper](../redis/) -- Redis connection management
|
|
303
|
+
|
|
304
|
+
- **External Resources:**
|
|
305
|
+
- [@platformatic/kafka](https://github.com/platformatic/kafka) -- Underlying Kafka client library
|