kafka-ts 0.0.2-beta → 0.0.3-beta

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 (60) hide show
  1. package/.github/workflows/release.yml +14 -14
  2. package/.prettierrc +3 -2
  3. package/README.md +43 -33
  4. package/docker-compose.yml +102 -102
  5. package/examples/package-lock.json +28 -28
  6. package/examples/package.json +12 -12
  7. package/examples/src/client.ts +6 -6
  8. package/examples/src/consumer.ts +9 -8
  9. package/examples/src/create-topic.ts +23 -16
  10. package/examples/src/producer.ts +7 -7
  11. package/examples/src/replicator.ts +4 -4
  12. package/examples/src/utils/delay.ts +1 -0
  13. package/examples/src/utils/json.ts +1 -1
  14. package/examples/tsconfig.json +2 -2
  15. package/package.json +21 -19
  16. package/src/api/api-versions.ts +2 -2
  17. package/src/api/create-topics.ts +2 -2
  18. package/src/api/delete-topics.ts +2 -2
  19. package/src/api/fetch.ts +3 -3
  20. package/src/api/find-coordinator.ts +2 -2
  21. package/src/api/heartbeat.ts +2 -2
  22. package/src/api/index.ts +18 -18
  23. package/src/api/init-producer-id.ts +2 -2
  24. package/src/api/join-group.ts +3 -3
  25. package/src/api/leave-group.ts +2 -2
  26. package/src/api/list-offsets.ts +3 -3
  27. package/src/api/metadata.ts +3 -3
  28. package/src/api/offset-commit.ts +2 -2
  29. package/src/api/offset-fetch.ts +2 -2
  30. package/src/api/produce.ts +3 -3
  31. package/src/api/sasl-authenticate.ts +2 -2
  32. package/src/api/sasl-handshake.ts +2 -2
  33. package/src/api/sync-group.ts +2 -2
  34. package/src/broker.ts +9 -9
  35. package/src/client.ts +6 -6
  36. package/src/cluster.test.ts +68 -68
  37. package/src/cluster.ts +7 -7
  38. package/src/connection.ts +17 -15
  39. package/src/consumer/consumer-group.ts +14 -14
  40. package/src/consumer/consumer-metadata.ts +2 -2
  41. package/src/consumer/consumer.ts +84 -82
  42. package/src/consumer/fetch-manager.ts +179 -0
  43. package/src/consumer/fetcher.ts +57 -0
  44. package/src/consumer/offset-manager.ts +6 -6
  45. package/src/consumer/processor.ts +47 -0
  46. package/src/distributors/assignments-to-replicas.test.ts +7 -7
  47. package/src/distributors/assignments-to-replicas.ts +1 -1
  48. package/src/distributors/messages-to-topic-partition-leaders.test.ts +6 -6
  49. package/src/index.ts +4 -3
  50. package/src/metadata.ts +4 -4
  51. package/src/producer/producer.ts +8 -8
  52. package/src/types.ts +2 -0
  53. package/src/utils/api.ts +4 -4
  54. package/src/utils/debug.ts +2 -2
  55. package/src/utils/decoder.ts +4 -4
  56. package/src/utils/encoder.ts +6 -6
  57. package/src/utils/error.ts +3 -3
  58. package/src/utils/retrier.ts +1 -1
  59. package/src/utils/tracer.ts +7 -4
  60. package/tsconfig.json +16 -16
package/package.json CHANGED
@@ -1,21 +1,23 @@
1
1
  {
2
- "name": "kafka-ts",
3
- "version": "0.0.2-beta",
4
- "main": "dist/index.js",
5
- "author": "Priit Käärd",
6
- "license": "MIT",
7
- "repository": {
8
- "type": "git",
9
- "url": "https://github.com/priitkaard/kafka-ts.git"
10
- },
11
- "scripts": {
12
- "build": "tsc",
13
- "test": "vitest --testTimeout 60000 --bail 1"
14
- },
15
- "devDependencies": {
16
- "@types/node": "^20.12.12",
17
- "prettier": "^3.2.5",
18
- "typescript": "^5.4.5",
19
- "vitest": "^1.6.0"
20
- }
2
+ "name": "kafka-ts",
3
+ "version": "0.0.3-beta",
4
+ "main": "dist/index.js",
5
+ "author": "Priit Käärd",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/priitkaard/kafka-ts.git"
10
+ },
11
+ "scripts": {
12
+ "format": "prettier --write .",
13
+ "build": "tsc",
14
+ "watch": "tsc -w",
15
+ "test": "vitest --testTimeout 60000 --bail 1"
16
+ },
17
+ "devDependencies": {
18
+ "@types/node": "^20.12.12",
19
+ "prettier": "^3.3.3",
20
+ "typescript": "^5.4.5",
21
+ "vitest": "^1.6.0"
22
+ }
21
23
  }
@@ -1,5 +1,5 @@
1
- import { createApi } from "../utils/api.js";
2
- import { KafkaTSApiError } from "../utils/error.js";
1
+ import { createApi } from '../utils/api.js';
2
+ import { KafkaTSApiError } from '../utils/error.js';
3
3
 
4
4
  export const API_VERSIONS = createApi({
5
5
  apiKey: 18,
@@ -1,5 +1,5 @@
1
- import { createApi } from "../utils/api";
2
- import { KafkaTSApiError } from "../utils/error";
1
+ import { createApi } from '../utils/api';
2
+ import { KafkaTSApiError } from '../utils/error';
3
3
 
4
4
  export const CREATE_TOPICS = createApi({
5
5
  apiKey: 19,
@@ -1,5 +1,5 @@
1
- import { createApi } from "../utils/api";
2
- import { KafkaTSApiError } from "../utils/error";
1
+ import { createApi } from '../utils/api';
2
+ import { KafkaTSApiError } from '../utils/error';
3
3
 
4
4
  export const DELETE_TOPICS = createApi({
5
5
  apiKey: 20,
package/src/api/fetch.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { createApi } from "../utils/api";
2
- import { Decoder } from "../utils/decoder";
3
- import { KafkaTSApiError } from "../utils/error";
1
+ import { createApi } from '../utils/api';
2
+ import { Decoder } from '../utils/decoder';
3
+ import { KafkaTSApiError } from '../utils/error';
4
4
 
5
5
  export const enum IsolationLevel {
6
6
  READ_UNCOMMITTED = 0,
@@ -1,5 +1,5 @@
1
- import { createApi } from "../utils/api";
2
- import { KafkaTSApiError } from "../utils/error";
1
+ import { createApi } from '../utils/api';
2
+ import { KafkaTSApiError } from '../utils/error';
3
3
 
4
4
  export const KEY_TYPE = {
5
5
  GROUP: 0,
@@ -1,5 +1,5 @@
1
- import { createApi } from "../utils/api";
2
- import { KafkaTSApiError } from "../utils/error";
1
+ import { createApi } from '../utils/api';
2
+ import { KafkaTSApiError } from '../utils/error';
3
3
 
4
4
  export const HEARTBEAT = createApi({
5
5
  apiKey: 12,
package/src/api/index.ts CHANGED
@@ -1,21 +1,21 @@
1
- import { Api } from "../utils/api";
2
- import { API_VERSIONS } from "./api-versions";
3
- import { CREATE_TOPICS } from "./create-topics";
4
- import { DELETE_TOPICS } from "./delete-topics";
5
- import { FETCH } from "./fetch";
6
- import { FIND_COORDINATOR } from "./find-coordinator";
7
- import { HEARTBEAT } from "./heartbeat";
8
- import { INIT_PRODUCER_ID } from "./init-producer-id";
9
- import { JOIN_GROUP } from "./join-group";
10
- import { LEAVE_GROUP } from "./leave-group";
11
- import { LIST_OFFSETS } from "./list-offsets";
12
- import { METADATA } from "./metadata";
13
- import { OFFSET_COMMIT } from "./offset-commit";
14
- import { OFFSET_FETCH } from "./offset-fetch";
15
- import { PRODUCE } from "./produce";
16
- import { SASL_AUTHENTICATE } from "./sasl-authenticate";
17
- import { SASL_HANDSHAKE } from "./sasl-handshake";
18
- import { SYNC_GROUP } from "./sync-group";
1
+ import { Api } from '../utils/api';
2
+ import { API_VERSIONS } from './api-versions';
3
+ import { CREATE_TOPICS } from './create-topics';
4
+ import { DELETE_TOPICS } from './delete-topics';
5
+ import { FETCH } from './fetch';
6
+ import { FIND_COORDINATOR } from './find-coordinator';
7
+ import { HEARTBEAT } from './heartbeat';
8
+ import { INIT_PRODUCER_ID } from './init-producer-id';
9
+ import { JOIN_GROUP } from './join-group';
10
+ import { LEAVE_GROUP } from './leave-group';
11
+ import { LIST_OFFSETS } from './list-offsets';
12
+ import { METADATA } from './metadata';
13
+ import { OFFSET_COMMIT } from './offset-commit';
14
+ import { OFFSET_FETCH } from './offset-fetch';
15
+ import { PRODUCE } from './produce';
16
+ import { SASL_AUTHENTICATE } from './sasl-authenticate';
17
+ import { SASL_HANDSHAKE } from './sasl-handshake';
18
+ import { SYNC_GROUP } from './sync-group';
19
19
 
20
20
  export const API = {
21
21
  API_VERSIONS,
@@ -1,5 +1,5 @@
1
- import { createApi } from "../utils/api";
2
- import { KafkaTSApiError } from "../utils/error";
1
+ import { createApi } from '../utils/api';
2
+ import { KafkaTSApiError } from '../utils/error';
3
3
 
4
4
  export const INIT_PRODUCER_ID = createApi({
5
5
  apiKey: 22,
@@ -1,6 +1,6 @@
1
- import { createApi } from "../utils/api";
2
- import { Encoder } from "../utils/encoder";
3
- import { KafkaTSApiError } from "../utils/error";
1
+ import { createApi } from '../utils/api';
2
+ import { Encoder } from '../utils/encoder';
3
+ import { KafkaTSApiError } from '../utils/error';
4
4
 
5
5
  export const JOIN_GROUP = createApi({
6
6
  apiKey: 11,
@@ -1,5 +1,5 @@
1
- import { createApi } from "../utils/api";
2
- import { KafkaTSApiError } from "../utils/error";
1
+ import { createApi } from '../utils/api';
2
+ import { KafkaTSApiError } from '../utils/error';
3
3
 
4
4
  export const LEAVE_GROUP = createApi({
5
5
  apiKey: 13,
@@ -1,6 +1,6 @@
1
- import { createApi } from "../utils/api";
2
- import { KafkaTSApiError } from "../utils/error";
3
- import { IsolationLevel } from "./fetch";
1
+ import { createApi } from '../utils/api';
2
+ import { KafkaTSApiError } from '../utils/error';
3
+ import { IsolationLevel } from './fetch';
4
4
 
5
5
  export const LIST_OFFSETS = createApi({
6
6
  apiKey: 2,
@@ -1,7 +1,7 @@
1
- import { createApi } from "../utils/api";
2
- import { KafkaTSApiError } from "../utils/error";
1
+ import { createApi } from '../utils/api';
2
+ import { KafkaTSApiError } from '../utils/error';
3
3
 
4
- export type Metadata = ReturnType<(typeof METADATA)["response"]>;
4
+ export type Metadata = ReturnType<(typeof METADATA)['response']>;
5
5
 
6
6
  export const METADATA = createApi({
7
7
  apiKey: 3,
@@ -1,5 +1,5 @@
1
- import { createApi } from "../utils/api";
2
- import { KafkaTSApiError } from "../utils/error";
1
+ import { createApi } from '../utils/api';
2
+ import { KafkaTSApiError } from '../utils/error';
3
3
 
4
4
  export const OFFSET_COMMIT = createApi({
5
5
  apiKey: 8,
@@ -1,5 +1,5 @@
1
- import { createApi } from "../utils/api";
2
- import { KafkaTSApiError } from "../utils/error";
1
+ import { createApi } from '../utils/api';
2
+ import { KafkaTSApiError } from '../utils/error';
3
3
 
4
4
  export const OFFSET_FETCH = createApi({
5
5
  apiKey: 9,
@@ -1,6 +1,6 @@
1
- import { createApi } from "../utils/api.js";
2
- import { Encoder } from "../utils/encoder.js";
3
- import { KafkaTSApiError } from "../utils/error.js";
1
+ import { createApi } from '../utils/api.js';
2
+ import { Encoder } from '../utils/encoder.js';
3
+ import { KafkaTSApiError } from '../utils/error.js';
4
4
 
5
5
  export const PRODUCE = createApi({
6
6
  apiKey: 0,
@@ -1,5 +1,5 @@
1
- import { createApi } from "../utils/api";
2
- import { KafkaTSApiError } from "../utils/error";
1
+ import { createApi } from '../utils/api';
2
+ import { KafkaTSApiError } from '../utils/error';
3
3
 
4
4
  export const SASL_AUTHENTICATE = createApi({
5
5
  apiKey: 36,
@@ -1,5 +1,5 @@
1
- import { createApi } from "../utils/api";
2
- import { KafkaTSApiError } from "../utils/error";
1
+ import { createApi } from '../utils/api';
2
+ import { KafkaTSApiError } from '../utils/error';
3
3
 
4
4
  export const SASL_HANDSHAKE = createApi({
5
5
  apiKey: 17,
@@ -1,5 +1,5 @@
1
- import { createApi } from "../utils/api";
2
- import { KafkaTSApiError } from "../utils/error";
1
+ import { createApi } from '../utils/api';
2
+ import { KafkaTSApiError } from '../utils/error';
3
3
 
4
4
  export type Assignment = { [topic: string]: number[] };
5
5
 
package/src/broker.ts CHANGED
@@ -1,11 +1,11 @@
1
- import { TcpSocketConnectOpts } from "net";
2
- import { TLSSocketOptions } from "tls";
3
- import { API } from "./api";
4
- import { Connection, SendRequest } from "./connection";
5
- import { KafkaTSError } from "./utils/error";
6
- import { memo } from "./utils/memo";
1
+ import { TcpSocketConnectOpts } from 'net';
2
+ import { TLSSocketOptions } from 'tls';
3
+ import { API } from './api';
4
+ import { Connection, SendRequest } from './connection';
5
+ import { KafkaTSError } from './utils/error';
6
+ import { memo } from './utils/memo';
7
7
 
8
- export type SASLOptions = { mechanism: "PLAIN"; username: string; password: string };
8
+ export type SASLOptions = { mechanism: 'PLAIN'; username: string; password: string };
9
9
 
10
10
  type BrokerOptions = {
11
11
  clientId: string | null;
@@ -64,11 +64,11 @@ export class Broker {
64
64
  }
65
65
 
66
66
  private async saslAuthenticate() {
67
- if (this.options.sasl?.mechanism !== "PLAIN") {
67
+ if (this.options.sasl?.mechanism !== 'PLAIN') {
68
68
  return;
69
69
  }
70
70
  const { username, password } = this.options.sasl;
71
- const authBytes = [null, username, password].join("\u0000");
71
+ const authBytes = [null, username, password].join('\u0000');
72
72
  await this.sendRequest(API.SASL_AUTHENTICATE, { authBytes: Buffer.from(authBytes) });
73
73
  }
74
74
  }
package/src/client.ts CHANGED
@@ -1,9 +1,9 @@
1
- import { TcpSocketConnectOpts } from "net";
2
- import { TLSSocketOptions } from "tls";
3
- import { SASLOptions } from "./broker";
4
- import { Cluster } from "./cluster";
5
- import { Consumer, ConsumerOptions } from "./consumer/consumer";
6
- import { Producer, ProducerOptions } from "./producer/producer";
1
+ import { TcpSocketConnectOpts } from 'net';
2
+ import { TLSSocketOptions } from 'tls';
3
+ import { SASLOptions } from './broker';
4
+ import { Cluster } from './cluster';
5
+ import { Consumer, ConsumerOptions } from './consumer/consumer';
6
+ import { Producer, ProducerOptions } from './producer/producer';
7
7
 
8
8
  type ClientOptions = {
9
9
  clientId?: string | null;