@venizia/ignis-docs 0.0.7-2 → 0.0.8-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.
Files changed (161) hide show
  1. package/dist/mcp-server/common/paths.d.ts +4 -2
  2. package/dist/mcp-server/common/paths.d.ts.map +1 -1
  3. package/dist/mcp-server/common/paths.js +8 -6
  4. package/dist/mcp-server/common/paths.js.map +1 -1
  5. package/dist/mcp-server/tools/docs/get-document-content.tool.d.ts +1 -1
  6. package/dist/mcp-server/tools/docs/get-document-content.tool.d.ts.map +1 -1
  7. package/dist/mcp-server/tools/docs/get-document-content.tool.js +7 -7
  8. package/dist/mcp-server/tools/docs/get-document-metadata.tool.js +3 -3
  9. package/dist/mcp-server/tools/docs/get-package-overview.tool.d.ts +1 -1
  10. package/dist/mcp-server/tools/docs/get-package-overview.tool.js +1 -1
  11. package/package.json +1 -1
  12. package/wiki/best-practices/api-usage-examples.md +9 -9
  13. package/wiki/best-practices/architectural-patterns.md +19 -3
  14. package/wiki/best-practices/architecture-decisions.md +6 -6
  15. package/wiki/best-practices/code-style-standards/advanced-patterns.md +1 -1
  16. package/wiki/best-practices/code-style-standards/control-flow.md +1 -1
  17. package/wiki/best-practices/code-style-standards/function-patterns.md +2 -2
  18. package/wiki/best-practices/code-style-standards/index.md +2 -2
  19. package/wiki/best-practices/code-style-standards/naming-conventions.md +1 -1
  20. package/wiki/best-practices/code-style-standards/route-definitions.md +4 -4
  21. package/wiki/best-practices/data-modeling.md +1 -1
  22. package/wiki/best-practices/deployment-strategies.md +1 -1
  23. package/wiki/best-practices/error-handling.md +2 -2
  24. package/wiki/best-practices/performance-optimization.md +3 -3
  25. package/wiki/best-practices/security-guidelines.md +2 -2
  26. package/wiki/best-practices/troubleshooting-tips.md +1 -1
  27. package/wiki/{references → extensions}/components/authentication/api.md +12 -20
  28. package/wiki/{references → extensions}/components/authentication/errors.md +1 -1
  29. package/wiki/{references → extensions}/components/authentication/index.md +5 -8
  30. package/wiki/{references → extensions}/components/authentication/usage.md +20 -36
  31. package/wiki/{references → extensions}/components/authorization/api.md +62 -13
  32. package/wiki/{references → extensions}/components/authorization/errors.md +12 -7
  33. package/wiki/{references → extensions}/components/authorization/index.md +93 -6
  34. package/wiki/{references → extensions}/components/authorization/usage.md +42 -4
  35. package/wiki/{references → extensions}/components/health-check.md +5 -4
  36. package/wiki/{references → extensions}/components/index.md +2 -0
  37. package/wiki/{references → extensions}/components/mail/index.md +1 -1
  38. package/wiki/{references → extensions}/components/request-tracker.md +1 -1
  39. package/wiki/{references → extensions}/components/socket-io/api.md +2 -2
  40. package/wiki/{references → extensions}/components/socket-io/errors.md +2 -0
  41. package/wiki/{references → extensions}/components/socket-io/index.md +24 -20
  42. package/wiki/{references → extensions}/components/socket-io/usage.md +2 -2
  43. package/wiki/{references → extensions}/components/static-asset/api.md +14 -15
  44. package/wiki/{references → extensions}/components/static-asset/errors.md +3 -1
  45. package/wiki/{references → extensions}/components/static-asset/index.md +158 -89
  46. package/wiki/{references → extensions}/components/static-asset/usage.md +8 -5
  47. package/wiki/{references → extensions}/components/swagger.md +3 -3
  48. package/wiki/{references → extensions}/components/template/index.md +4 -4
  49. package/wiki/{references → extensions}/components/template/setup-page.md +1 -1
  50. package/wiki/{references → extensions}/components/template/single-page.md +1 -1
  51. package/wiki/{references → extensions}/components/websocket/api.md +7 -6
  52. package/wiki/{references → extensions}/components/websocket/errors.md +17 -3
  53. package/wiki/{references → extensions}/components/websocket/index.md +17 -11
  54. package/wiki/{references → extensions}/components/websocket/usage.md +2 -2
  55. package/wiki/{references → extensions}/helpers/crypto/index.md +1 -1
  56. package/wiki/{references → extensions}/helpers/env/index.md +9 -5
  57. package/wiki/{references → extensions}/helpers/error/index.md +2 -7
  58. package/wiki/{references → extensions}/helpers/index.md +18 -6
  59. package/wiki/{references → extensions}/helpers/kafka/admin.md +33 -16
  60. package/wiki/extensions/helpers/kafka/consumer.md +384 -0
  61. package/wiki/extensions/helpers/kafka/examples.md +361 -0
  62. package/wiki/extensions/helpers/kafka/index.md +639 -0
  63. package/wiki/{references → extensions}/helpers/kafka/producer.md +100 -96
  64. package/wiki/extensions/helpers/kafka/schema-registry.md +214 -0
  65. package/wiki/{references → extensions}/helpers/logger/index.md +2 -2
  66. package/wiki/{references → extensions}/helpers/queue/index.md +400 -4
  67. package/wiki/{references → extensions}/helpers/storage/api.md +170 -10
  68. package/wiki/{references → extensions}/helpers/storage/index.md +44 -8
  69. package/wiki/{references → extensions}/helpers/template/index.md +1 -1
  70. package/wiki/{references → extensions}/helpers/testing/index.md +4 -4
  71. package/wiki/{references → extensions}/helpers/types/index.md +63 -16
  72. package/wiki/{references → extensions}/helpers/websocket/index.md +1 -1
  73. package/wiki/extensions/index.md +48 -0
  74. package/wiki/guides/core-concepts/application/bootstrapping.md +55 -37
  75. package/wiki/guides/core-concepts/application/index.md +95 -35
  76. package/wiki/guides/core-concepts/components-guide.md +23 -19
  77. package/wiki/guides/core-concepts/components.md +34 -10
  78. package/wiki/guides/core-concepts/dependency-injection.md +99 -34
  79. package/wiki/guides/core-concepts/grpc-controllers.md +295 -0
  80. package/wiki/guides/core-concepts/persistent/datasources.md +27 -8
  81. package/wiki/guides/core-concepts/persistent/models.md +43 -1
  82. package/wiki/guides/core-concepts/persistent/repositories.md +75 -8
  83. package/wiki/guides/core-concepts/persistent/transactions.md +38 -8
  84. package/wiki/guides/core-concepts/{controllers.md → rest-controllers.md} +30 -33
  85. package/wiki/guides/core-concepts/services.md +19 -5
  86. package/wiki/guides/get-started/5-minute-quickstart.md +6 -7
  87. package/wiki/guides/get-started/philosophy.md +1 -1
  88. package/wiki/guides/index.md +2 -2
  89. package/wiki/guides/reference/glossary.md +7 -7
  90. package/wiki/guides/reference/mcp-docs-server.md +1 -1
  91. package/wiki/guides/tutorials/building-a-crud-api.md +2 -2
  92. package/wiki/guides/tutorials/complete-installation.md +17 -14
  93. package/wiki/guides/tutorials/ecommerce-api.md +18 -18
  94. package/wiki/guides/tutorials/realtime-chat.md +8 -8
  95. package/wiki/guides/tutorials/testing.md +2 -2
  96. package/wiki/index.md +4 -3
  97. package/wiki/references/base/application.md +341 -21
  98. package/wiki/references/base/bootstrapping.md +43 -13
  99. package/wiki/references/base/components.md +259 -8
  100. package/wiki/references/base/controllers.md +556 -253
  101. package/wiki/references/base/datasources.md +159 -79
  102. package/wiki/references/base/dependency-injection.md +299 -48
  103. package/wiki/references/base/filter-system/application-usage.md +18 -2
  104. package/wiki/references/base/filter-system/array-operators.md +14 -6
  105. package/wiki/references/base/filter-system/comparison-operators.md +9 -3
  106. package/wiki/references/base/filter-system/default-filter.md +28 -3
  107. package/wiki/references/base/filter-system/fields-order-pagination.md +17 -13
  108. package/wiki/references/base/filter-system/index.md +169 -11
  109. package/wiki/references/base/filter-system/json-filtering.md +51 -18
  110. package/wiki/references/base/filter-system/list-operators.md +4 -3
  111. package/wiki/references/base/filter-system/logical-operators.md +7 -2
  112. package/wiki/references/base/filter-system/null-operators.md +50 -0
  113. package/wiki/references/base/filter-system/quick-reference.md +82 -243
  114. package/wiki/references/base/filter-system/range-operators.md +7 -1
  115. package/wiki/references/base/filter-system/tips.md +34 -7
  116. package/wiki/references/base/filter-system/use-cases.md +6 -5
  117. package/wiki/references/base/grpc-controllers.md +984 -0
  118. package/wiki/references/base/index.md +32 -24
  119. package/wiki/references/base/middleware.md +347 -0
  120. package/wiki/references/base/models.md +390 -46
  121. package/wiki/references/base/providers.md +14 -14
  122. package/wiki/references/base/repositories/advanced.md +84 -69
  123. package/wiki/references/base/repositories/index.md +447 -12
  124. package/wiki/references/base/repositories/mixins.md +103 -98
  125. package/wiki/references/base/repositories/relations.md +129 -45
  126. package/wiki/references/base/repositories/soft-deletable.md +104 -23
  127. package/wiki/references/base/services.md +94 -14
  128. package/wiki/references/index.md +12 -10
  129. package/wiki/references/quick-reference.md +98 -65
  130. package/wiki/references/utilities/crypto.md +21 -4
  131. package/wiki/references/utilities/date.md +25 -7
  132. package/wiki/references/utilities/index.md +26 -24
  133. package/wiki/references/utilities/jsx.md +54 -54
  134. package/wiki/references/utilities/module.md +8 -6
  135. package/wiki/references/utilities/parse.md +16 -9
  136. package/wiki/references/utilities/performance.md +22 -7
  137. package/wiki/references/utilities/promise.md +19 -16
  138. package/wiki/references/utilities/request.md +48 -26
  139. package/wiki/references/utilities/schema.md +69 -6
  140. package/wiki/references/utilities/statuses.md +131 -140
  141. package/wiki/references/helpers/kafka/consumer.md +0 -473
  142. package/wiki/references/helpers/kafka/examples.md +0 -234
  143. package/wiki/references/helpers/kafka/index.md +0 -482
  144. /package/wiki/{references → extensions}/components/mail/api.md +0 -0
  145. /package/wiki/{references → extensions}/components/mail/errors.md +0 -0
  146. /package/wiki/{references → extensions}/components/mail/usage.md +0 -0
  147. /package/wiki/{references → extensions}/components/template/api-page.md +0 -0
  148. /package/wiki/{references → extensions}/components/template/errors-page.md +0 -0
  149. /package/wiki/{references → extensions}/components/template/usage-page.md +0 -0
  150. /package/wiki/{references → extensions}/helpers/cron/index.md +0 -0
  151. /package/wiki/{references → extensions}/helpers/inversion/index.md +0 -0
  152. /package/wiki/{references → extensions}/helpers/network/api.md +0 -0
  153. /package/wiki/{references → extensions}/helpers/network/index.md +0 -0
  154. /package/wiki/{references → extensions}/helpers/redis/index.md +0 -0
  155. /package/wiki/{references → extensions}/helpers/socket-io/api.md +0 -0
  156. /package/wiki/{references → extensions}/helpers/socket-io/index.md +0 -0
  157. /package/wiki/{references → extensions}/helpers/template/single-page.md +0 -0
  158. /package/wiki/{references → extensions}/helpers/uid/index.md +0 -0
  159. /package/wiki/{references → extensions}/helpers/websocket/api.md +0 -0
  160. /package/wiki/{references → extensions}/helpers/worker-thread/index.md +0 -0
  161. /package/wiki/{references → extensions}/src-details/mcp-server.md +0 -0
@@ -1,482 +0,0 @@
1
- # Kafka
2
-
3
- Apache Kafka event streaming with producer, consumer, and admin helpers. Built on [`@platformatic/kafka`](https://github.com/platformatic/kafka) v1.30.0 — a pure TypeScript Kafka client with zero native dependencies.
4
-
5
- ## Overview
6
-
7
- The Kafka module provides three **thin wrapper** classes around `@platformatic/kafka`:
8
-
9
- | Class | Wraps | Use Case |
10
- |-------|-------|----------|
11
- | `KafkaProducerHelper` | `Producer` | Publish messages to Kafka topics |
12
- | `KafkaConsumerHelper` | `Consumer` | Consume messages with consumer groups |
13
- | `KafkaAdminHelper` | `Admin` | Manage topics, partitions, groups, ACLs, configs |
14
-
15
- Each helper provides:
16
- - **Scoped logging** via `BaseHelper` (Winston with daily rotation)
17
- - **Sensible defaults** via `KafkaDefaults` constants
18
- - **Factory pattern** via `newInstance()` static method
19
- - **Lifecycle management** via `close()` method
20
-
21
- They do **not** re-implement or passthrough `@platformatic/kafka` methods. Use `getProducer()`, `getConsumer()`, or `getAdmin()` to access the full underlying API directly.
22
-
23
- ### Import Path
24
-
25
- ```typescript
26
- // Helpers & constants
27
- import {
28
- KafkaProducerHelper,
29
- KafkaConsumerHelper,
30
- KafkaAdminHelper,
31
- KafkaDefaults,
32
- KafkaAcks,
33
- KafkaGroupProtocol,
34
- } from '@venizia/ignis-helpers/kafka';
35
-
36
- // Types
37
- import type {
38
- IKafkaConnectionOptions,
39
- IKafkaProducerOpts,
40
- IKafkaConsumerOpts,
41
- IKafkaAdminOpts,
42
- TKafkaAcks,
43
- TKafkaGroupProtocol,
44
- } from '@venizia/ignis-helpers/kafka';
45
-
46
- // @platformatic/kafka (direct usage)
47
- import {
48
- Producer, Consumer, Admin, MessagesStream,
49
- stringSerializers, stringDeserializers,
50
- stringSerializer, stringDeserializer,
51
- jsonSerializer, jsonDeserializer,
52
- serializersFrom, deserializersFrom,
53
- } from '@platformatic/kafka';
54
-
55
- import type {
56
- Message, MessageToProduce,
57
- SendOptions, ConsumeOptions,
58
- Serializers, Deserializers,
59
- SASLOptions, ConnectionOptions,
60
- } from '@platformatic/kafka';
61
- ```
62
-
63
- ### Installation
64
-
65
- ```bash
66
- bun add @platformatic/kafka
67
- ```
68
-
69
- ---
70
-
71
- ## Connection Options
72
-
73
- All three helpers share a common base interface `IKafkaConnectionOptions` which extends `@platformatic/kafka`'s `ConnectionOptions`.
74
-
75
- ```typescript
76
- interface IKafkaConnectionOptions extends ConnectionOptions {
77
- bootstrapBrokers: string[];
78
- clientId: string;
79
- retries?: number; // Default: 3
80
- retryDelay?: number; // Default: 1000ms
81
- }
82
- ```
83
-
84
- ### Full Options Table
85
-
86
- | Option | Type | Default | Description |
87
- |--------|------|---------|-------------|
88
- | `bootstrapBrokers` | `string[]` | — | Kafka broker addresses (`host:port`). **Required** |
89
- | `clientId` | `string` | — | Unique client identifier. **Required** |
90
- | `retries` | `number` | `3` | Number of connection retries before failing |
91
- | `retryDelay` | `number` | `1000` | Delay between retries in milliseconds |
92
- | `sasl` | `SASLOptions` | — | SASL authentication configuration |
93
- | `tls` | `TLSConnectionOptions` | — | TLS/SSL connection options |
94
- | `ssl` | `TLSConnectionOptions` | — | Alias for `tls` |
95
- | `connectTimeout` | `number` | — | TCP connection timeout in milliseconds |
96
- | `requestTimeout` | `number` | — | Kafka request timeout in milliseconds |
97
-
98
- ### SASL Authentication
99
-
100
- `@platformatic/kafka` supports five SASL mechanisms:
101
-
102
- | Mechanism | Use Case |
103
- |-----------|----------|
104
- | `PLAIN` | Simple username/password (use with TLS in production) |
105
- | `SCRAM-SHA-256` | Challenge-response, password never sent in plaintext |
106
- | `SCRAM-SHA-512` | Same as SHA-256 with stronger hash |
107
- | `OAUTHBEARER` | Token-based (Azure Event Hubs, Confluent Cloud) |
108
- | `GSSAPI` | Kerberos authentication |
109
-
110
- ```typescript
111
- interface SASLOptions {
112
- mechanism: 'PLAIN' | 'SCRAM-SHA-256' | 'SCRAM-SHA-512' | 'OAUTHBEARER' | 'GSSAPI';
113
- username?: string | CredentialProvider;
114
- password?: string | CredentialProvider;
115
- token?: string | CredentialProvider;
116
- oauthBearerExtensions?: Record<string, string> | CredentialProvider<Record<string, string>>;
117
- authenticate?: SASLCustomAuthenticator;
118
- }
119
- ```
120
-
121
- #### SCRAM-SHA-512 Example
122
-
123
- ```typescript
124
- const helper = KafkaConsumerHelper.newInstance({
125
- bootstrapBrokers: ['broker1:9092', 'broker2:9092', 'broker3:9092'],
126
- clientId: 'my-consumer',
127
- groupId: 'my-group',
128
- sasl: {
129
- mechanism: 'SCRAM-SHA-512',
130
- username: 'kafka-user',
131
- password: 'kafka-password',
132
- },
133
- connectTimeout: 30_000,
134
- requestTimeout: 30_000,
135
- });
136
- ```
137
-
138
- #### OAUTHBEARER Example
139
-
140
- ```typescript
141
- const helper = KafkaProducerHelper.newInstance({
142
- bootstrapBrokers: ['pkc-xxxxx.us-west-2.aws.confluent.cloud:9092'],
143
- clientId: 'my-producer',
144
- sasl: {
145
- mechanism: 'OAUTHBEARER',
146
- token: async () => {
147
- const response = await fetch('https://auth.example.com/token', { method: 'POST' });
148
- const { access_token } = await response.json();
149
- return access_token;
150
- },
151
- },
152
- tls: true,
153
- });
154
- ```
155
-
156
- #### TLS Without SASL
157
-
158
- ```typescript
159
- const helper = KafkaProducerHelper.newInstance({
160
- bootstrapBrokers: ['broker:9093'],
161
- clientId: 'my-producer',
162
- tls: {
163
- ca: fs.readFileSync('/path/to/ca.pem'),
164
- cert: fs.readFileSync('/path/to/client-cert.pem'),
165
- key: fs.readFileSync('/path/to/client-key.pem'),
166
- },
167
- });
168
- ```
169
-
170
- ---
171
-
172
- ## Serialization & Deserialization
173
-
174
- `@platformatic/kafka`'s default wire format is `Buffer`. The helpers default generic types to `string` (matching common usage), but you must provide serializers/deserializers explicitly.
175
-
176
- ### Built-in Serializers
177
-
178
- | Export | Type | Description |
179
- |--------|------|-------------|
180
- | `stringSerializer` | `Serializer<string>` | `string → Buffer` (UTF-8) |
181
- | `stringDeserializer` | `Deserializer<string>` | `Buffer → string` (UTF-8) |
182
- | `jsonSerializer` | `Serializer<T>` | `object → Buffer` (JSON.stringify + UTF-8) |
183
- | `jsonDeserializer` | `Deserializer<T>` | `Buffer → object` (UTF-8 + JSON.parse) |
184
- | `stringSerializers` | `Serializers<string, string, string, string>` | All four positions as string |
185
- | `stringDeserializers` | `Deserializers<string, string, string, string>` | All four positions as string |
186
-
187
- ### Helper Functions
188
-
189
- | Export | Signature | Description |
190
- |--------|-----------|-------------|
191
- | `serializersFrom(s)` | `<T>(s: Serializer<T>) => Serializers<T, T, T, T>` | Create full serializers from a single serializer |
192
- | `deserializersFrom(d)` | `<T>(d: Deserializer<T>) => Deserializers<T, T, T, T>` | Create full deserializers from a single deserializer |
193
-
194
- ### Serializers/Deserializers Interface
195
-
196
- ```typescript
197
- interface Serializers<Key, Value, HeaderKey, HeaderValue> {
198
- key: SerializerWithHeaders<Key, HeaderKey, HeaderValue>;
199
- value: SerializerWithHeaders<Value, HeaderKey, HeaderValue>;
200
- headerKey: Serializer<HeaderKey>;
201
- headerValue: Serializer<HeaderValue>;
202
- }
203
-
204
- interface Deserializers<Key, Value, HeaderKey, HeaderValue> {
205
- key: DeserializerWithHeaders<Key, HeaderKey, HeaderValue>;
206
- value: DeserializerWithHeaders<Value, HeaderKey, HeaderValue>;
207
- headerKey: Deserializer<HeaderKey>;
208
- headerValue: Deserializer<HeaderValue>;
209
- }
210
- ```
211
-
212
- ### String Serialization
213
-
214
- The simplest approach — all keys, values, and headers are strings:
215
-
216
- ```typescript
217
- import { stringSerializers, stringDeserializers } from '@platformatic/kafka';
218
-
219
- // Producer
220
- const producer = KafkaProducerHelper.newInstance({
221
- bootstrapBrokers: ['localhost:9092'],
222
- clientId: 'my-producer',
223
- serializers: stringSerializers,
224
- });
225
-
226
- // Consumer
227
- const consumer = KafkaConsumerHelper.newInstance({
228
- bootstrapBrokers: ['localhost:9092'],
229
- clientId: 'my-consumer',
230
- groupId: 'my-group',
231
- deserializers: stringDeserializers,
232
- });
233
- ```
234
-
235
- ### JSON Serialization
236
-
237
- For structured data — serialize objects as JSON:
238
-
239
- ```typescript
240
- import {
241
- jsonSerializer, jsonDeserializer,
242
- stringSerializer, stringDeserializer,
243
- serializersFrom, deserializersFrom,
244
- } from '@platformatic/kafka';
245
-
246
- // JSON values with string keys
247
- const producer = KafkaProducerHelper.newInstance({
248
- bootstrapBrokers: ['localhost:9092'],
249
- clientId: 'my-producer',
250
- serializers: { ...serializersFrom(jsonSerializer), key: stringSerializer },
251
- });
252
-
253
- const p = producer.getProducer();
254
- await p.send({
255
- messages: [{
256
- topic: 'orders',
257
- key: 'order-123', // string key
258
- value: { id: '123', status: 'created', amount: 99 }, // object value → auto-serialized to JSON
259
- }],
260
- });
261
-
262
- // Consumer with matching deserializers
263
- const consumer = KafkaConsumerHelper.newInstance({
264
- bootstrapBrokers: ['localhost:9092'],
265
- clientId: 'my-consumer',
266
- groupId: 'my-group',
267
- deserializers: { ...deserializersFrom(jsonDeserializer), key: stringDeserializer },
268
- });
269
- ```
270
-
271
- ### Custom Serialization
272
-
273
- For advanced use cases (Avro, Protobuf, MessagePack):
274
-
275
- ```typescript
276
- import type { Serializer, Deserializer } from '@platformatic/kafka';
277
- import * as msgpack from '@msgpack/msgpack';
278
-
279
- const msgpackSerializer: Serializer<unknown> = (data) => {
280
- if (data === undefined) return undefined;
281
- return Buffer.from(msgpack.encode(data));
282
- };
283
-
284
- const msgpackDeserializer: Deserializer<unknown> = (data) => {
285
- if (!data) return undefined;
286
- return msgpack.decode(data);
287
- };
288
-
289
- const producer = KafkaProducerHelper.newInstance<string, unknown, string, string>({
290
- bootstrapBrokers: ['localhost:9092'],
291
- clientId: 'msgpack-producer',
292
- serializers: {
293
- key: stringSerializer,
294
- value: msgpackSerializer,
295
- headerKey: stringSerializer,
296
- headerValue: stringSerializer,
297
- },
298
- });
299
- ```
300
-
301
- ---
302
-
303
- ## Generic Type Parameters
304
-
305
- All three helpers (and their option interfaces) support generic type parameters controlling the serialization types:
306
-
307
- ```typescript
308
- class KafkaProducerHelper<
309
- KeyType = string,
310
- ValueType = string,
311
- HeaderKeyType = string,
312
- HeaderValueType = string,
313
- >
314
- ```
315
-
316
- | Parameter | Default | Description |
317
- |-----------|---------|-------------|
318
- | `KeyType` | `string` | Message key type after serialization/deserialization |
319
- | `ValueType` | `string` | Message value type after serialization/deserialization |
320
- | `HeaderKeyType` | `string` | Header key type |
321
- | `HeaderValueType` | `string` | Header value type |
322
-
323
- > [!NOTE]
324
- > `@platformatic/kafka` defaults to `Buffer` for all four positions. The helpers default to `string` which is more common for application code. If you don't pass serializers, your messages will be sent/received as `Buffer`.
325
-
326
- ```typescript
327
- // Default: string types (most common)
328
- const helper = KafkaProducerHelper.newInstance({ ... });
329
-
330
- // Custom: string keys, JSON object values
331
- const helper = KafkaProducerHelper.newInstance<string, MyEvent, string, string>({
332
- serializers: { ...serializersFrom(jsonSerializer), key: stringSerializer },
333
- ...
334
- });
335
-
336
- // Custom: Buffer keys, Buffer values (raw wire format)
337
- const helper = KafkaProducerHelper.newInstance<Buffer, Buffer, Buffer, Buffer>({
338
- // No serializers needed — @platformatic/kafka defaults to Buffer
339
- ...
340
- });
341
- ```
342
-
343
- ---
344
-
345
- ## Constants
346
-
347
- ### KafkaDefaults
348
-
349
- Centralized default values used by all three helpers.
350
-
351
- ```typescript
352
- import { KafkaDefaults } from '@venizia/ignis-helpers/kafka';
353
- ```
354
-
355
- | Constant | Value | Scope | Used By | Description |
356
- |----------|-------|-------|---------|-------------|
357
- | `RETRIES` | `3` | Shared | All helpers | Connection retry count |
358
- | `RETRY_DELAY` | `1000` | Shared | All helpers | Retry delay in ms |
359
- | `STRICT` | `true` | Producer | `KafkaProducerHelper` | Fail on unknown topics |
360
- | `AUTOCREATE_TOPICS` | `false` | Producer | `KafkaProducerHelper` | Auto-create topics on produce |
361
- | `AUTOCOMMIT` | `false` | Consumer | `KafkaConsumerHelper` | Auto-commit offsets |
362
- | `SESSION_TIMEOUT` | `30000` | Consumer | `KafkaConsumerHelper` | Session timeout in ms |
363
- | `HEARTBEAT_INTERVAL` | `3000` | Consumer | `KafkaConsumerHelper` | Heartbeat interval in ms |
364
- | `HIGH_WATER_MARK` | `1024` | Consumer | `KafkaConsumerHelper` | Stream buffer size (messages) |
365
- | `MIN_BYTES` | `1` | Consumer | `KafkaConsumerHelper` | Min bytes per fetch |
366
- | `METADATA_MAX_AGE` | `300000` | Consumer | `KafkaConsumerHelper` | Metadata cache TTL in ms |
367
- | `GROUP_PROTOCOL` | `'classic'` | Consumer | `KafkaConsumerHelper` | Default group protocol |
368
-
369
- ### KafkaAcks
370
-
371
- Producer acknowledgment levels.
372
-
373
- ```typescript
374
- import { KafkaAcks } from '@venizia/ignis-helpers/kafka';
375
- ```
376
-
377
- | Constant | Value | Description | Trade-off |
378
- |----------|-------|-------------|-----------|
379
- | `NONE` | `0` | No acknowledgment — fire-and-forget | Fastest, no durability guarantee |
380
- | `LEADER` | `1` | Leader broker acknowledges | Fast, leader-durable |
381
- | `ALL` | `-1` | All in-sync replicas acknowledge | Slowest, fully durable |
382
-
383
- **Static methods:**
384
-
385
- | Method | Signature | Description |
386
- |--------|-----------|-------------|
387
- | `isValid(ack)` | `(ack: number): boolean` | Check if value is a valid ack level |
388
- | `SCHEME_SET` | `Set<number>` | Set of valid values: `{0, 1, -1}` |
389
-
390
- ```typescript
391
- KafkaAcks.ALL; // -1
392
- KafkaAcks.isValid(-1); // true
393
- KafkaAcks.isValid(2); // false
394
- KafkaAcks.SCHEME_SET; // Set { 0, 1, -1 }
395
- ```
396
-
397
- ### KafkaGroupProtocol
398
-
399
- Consumer group protocol versions.
400
-
401
- ```typescript
402
- import { KafkaGroupProtocol } from '@venizia/ignis-helpers/kafka';
403
- ```
404
-
405
- | Constant | Value | Description |
406
- |----------|-------|-------------|
407
- | `CLASSIC` | `'classic'` | Classic consumer group protocol (default, all Kafka versions) |
408
- | `CONSUMER` | `'consumer'` | New consumer group protocol — KIP-848 (Kafka 3.7+) |
409
-
410
- **Static methods:**
411
-
412
- | Method | Signature | Description |
413
- |--------|-----------|-------------|
414
- | `isValid(mode)` | `(mode: string): boolean` | Check if value is a valid protocol |
415
- | `SCHEME_SET` | `Set<string>` | Set of valid values: `{'classic', 'consumer'}` |
416
-
417
- ```typescript
418
- KafkaGroupProtocol.CLASSIC; // 'classic'
419
- KafkaGroupProtocol.isValid('classic'); // true
420
- KafkaGroupProtocol.isValid('foo'); // false
421
- ```
422
-
423
- ### Derived Types
424
-
425
- ```typescript
426
- import type { TKafkaAcks, TKafkaGroupProtocol } from '@venizia/ignis-helpers/kafka';
427
-
428
- // TKafkaAcks = 0 | 1 | -1
429
- // TKafkaGroupProtocol = 'classic' | 'consumer'
430
- ```
431
-
432
- These union types are derived using `TConstValue<T>` from the constant classes.
433
-
434
- ---
435
-
436
- ## Compression
437
-
438
- `@platformatic/kafka` supports five compression algorithms:
439
-
440
- | Algorithm | Value | Description |
441
- |-----------|-------|-------------|
442
- | None | `'none'` | No compression (default) |
443
- | GZIP | `'gzip'` | Good compression ratio, moderate CPU |
444
- | Snappy | `'snappy'` | Fast compression, moderate ratio |
445
- | LZ4 | `'lz4'` | Very fast, good for high-throughput |
446
- | Zstandard | `'zstd'` | Best ratio, moderate CPU |
447
-
448
- ```typescript
449
- const helper = KafkaProducerHelper.newInstance({
450
- bootstrapBrokers: ['localhost:9092'],
451
- clientId: 'my-producer',
452
- serializers: stringSerializers,
453
- compression: 'zstd', // Applied to all messages by default
454
- });
455
-
456
- // Override per-send
457
- const producer = helper.getProducer();
458
- await producer.send({
459
- messages: [{ topic: 'logs', key: 'l1', value: largePayload }],
460
- compression: 'lz4',
461
- });
462
- ```
463
-
464
- ---
465
-
466
- ## Pages
467
-
468
- - **[Producer](./producer)** — Producer helper setup, usage, and full `@platformatic/kafka` Producer API reference
469
- - **[Consumer](./consumer)** — Consumer helper setup, usage, and full `@platformatic/kafka` Consumer API reference
470
- - **[Admin](./admin)** — Admin helper setup, usage, and full `@platformatic/kafka` Admin API reference
471
- - **[Examples & Troubleshooting](./examples)** — Complete examples, IoC integration, and troubleshooting guide
472
-
473
- ## See Also
474
-
475
- - **Other Helpers:**
476
- - [Queue Helper](../queue/) — BullMQ, MQTT, and in-memory queues
477
- - [Redis Helper](../redis/) — Redis connection management
478
-
479
- - **External Resources:**
480
- - [@platformatic/kafka](https://github.com/platformatic/kafka) — Underlying Kafka client library
481
- - [Apache Kafka Documentation](https://kafka.apache.org/documentation/) — Official Kafka docs
482
- - [KIP-848](https://cwiki.apache.org/confluence/display/KAFKA/KIP-848) — New consumer group protocol