kafka-ts 0.0.2-beta → 0.0.2

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 (195) hide show
  1. package/.prettierrc +3 -2
  2. package/README.md +109 -39
  3. package/dist/api/api-versions.d.ts +9 -0
  4. package/dist/api/api-versions.js +24 -0
  5. package/dist/api/create-topics.d.ts +38 -0
  6. package/dist/api/create-topics.js +53 -0
  7. package/dist/api/delete-topics.d.ts +18 -0
  8. package/dist/api/delete-topics.js +33 -0
  9. package/dist/api/fetch.d.ts +84 -0
  10. package/dist/api/fetch.js +142 -0
  11. package/dist/api/find-coordinator.d.ts +21 -0
  12. package/dist/api/find-coordinator.js +39 -0
  13. package/dist/api/heartbeat.d.ts +11 -0
  14. package/dist/api/heartbeat.js +27 -0
  15. package/dist/api/index.d.ts +578 -0
  16. package/dist/api/index.js +165 -0
  17. package/dist/api/init-producer-id.d.ts +13 -0
  18. package/dist/api/init-producer-id.js +29 -0
  19. package/dist/api/join-group.d.ts +34 -0
  20. package/dist/api/join-group.js +51 -0
  21. package/dist/api/leave-group.d.ts +19 -0
  22. package/dist/api/leave-group.js +39 -0
  23. package/dist/api/list-offsets.d.ts +29 -0
  24. package/dist/api/list-offsets.js +48 -0
  25. package/dist/api/metadata.d.ts +40 -0
  26. package/dist/api/metadata.js +58 -0
  27. package/dist/api/offset-commit.d.ts +28 -0
  28. package/dist/api/offset-commit.js +48 -0
  29. package/dist/api/offset-fetch.d.ts +33 -0
  30. package/dist/api/offset-fetch.js +57 -0
  31. package/dist/api/produce.d.ts +54 -0
  32. package/dist/api/produce.js +126 -0
  33. package/dist/api/sasl-authenticate.d.ts +11 -0
  34. package/dist/api/sasl-authenticate.js +23 -0
  35. package/dist/api/sasl-handshake.d.ts +6 -0
  36. package/dist/api/sasl-handshake.js +19 -0
  37. package/dist/api/sync-group.d.ts +24 -0
  38. package/dist/api/sync-group.js +36 -0
  39. package/dist/auth/index.d.ts +2 -0
  40. package/dist/auth/index.js +8 -0
  41. package/dist/auth/plain.d.ts +5 -0
  42. package/dist/auth/plain.js +12 -0
  43. package/dist/auth/scram.d.ts +9 -0
  44. package/dist/auth/scram.js +40 -0
  45. package/dist/broker.d.ts +30 -0
  46. package/dist/broker.js +55 -0
  47. package/dist/client.d.ts +23 -0
  48. package/dist/client.js +36 -0
  49. package/dist/cluster.d.ts +27 -0
  50. package/dist/cluster.js +70 -0
  51. package/dist/cluster.test.d.ts +1 -0
  52. package/dist/cluster.test.js +345 -0
  53. package/dist/codecs/gzip.d.ts +2 -0
  54. package/dist/codecs/gzip.js +8 -0
  55. package/dist/codecs/index.d.ts +2 -0
  56. package/dist/codecs/index.js +17 -0
  57. package/dist/codecs/none.d.ts +2 -0
  58. package/dist/codecs/none.js +7 -0
  59. package/dist/codecs/types.d.ts +5 -0
  60. package/dist/codecs/types.js +2 -0
  61. package/dist/connection.d.ts +26 -0
  62. package/dist/connection.js +175 -0
  63. package/dist/consumer/consumer-group.d.ts +41 -0
  64. package/dist/consumer/consumer-group.js +217 -0
  65. package/dist/consumer/consumer-metadata.d.ts +7 -0
  66. package/dist/consumer/consumer-metadata.js +14 -0
  67. package/dist/consumer/consumer.d.ts +44 -0
  68. package/dist/consumer/consumer.js +225 -0
  69. package/dist/consumer/fetch-manager.d.ts +33 -0
  70. package/dist/consumer/fetch-manager.js +140 -0
  71. package/dist/consumer/fetcher.d.ts +25 -0
  72. package/dist/consumer/fetcher.js +64 -0
  73. package/dist/consumer/offset-manager.d.ts +22 -0
  74. package/dist/consumer/offset-manager.js +66 -0
  75. package/dist/consumer/processor.d.ts +19 -0
  76. package/dist/consumer/processor.js +59 -0
  77. package/dist/distributors/assignments-to-replicas.d.ts +16 -0
  78. package/dist/distributors/assignments-to-replicas.js +59 -0
  79. package/dist/distributors/assignments-to-replicas.test.d.ts +1 -0
  80. package/dist/distributors/assignments-to-replicas.test.js +40 -0
  81. package/dist/distributors/messages-to-topic-partition-leaders.d.ts +17 -0
  82. package/dist/distributors/messages-to-topic-partition-leaders.js +15 -0
  83. package/dist/distributors/messages-to-topic-partition-leaders.test.d.ts +1 -0
  84. package/dist/distributors/messages-to-topic-partition-leaders.test.js +30 -0
  85. package/dist/distributors/partitioner.d.ts +7 -0
  86. package/dist/distributors/partitioner.js +23 -0
  87. package/dist/index.d.ts +9 -0
  88. package/dist/index.js +26 -0
  89. package/dist/metadata.d.ts +24 -0
  90. package/dist/metadata.js +106 -0
  91. package/dist/producer/producer.d.ts +24 -0
  92. package/dist/producer/producer.js +131 -0
  93. package/dist/types.d.ts +11 -0
  94. package/dist/types.js +2 -0
  95. package/dist/utils/api.d.ts +9 -0
  96. package/dist/utils/api.js +5 -0
  97. package/dist/utils/crypto.d.ts +8 -0
  98. package/dist/utils/crypto.js +18 -0
  99. package/dist/utils/decoder.d.ts +30 -0
  100. package/dist/utils/decoder.js +152 -0
  101. package/dist/utils/delay.d.ts +1 -0
  102. package/dist/utils/delay.js +5 -0
  103. package/dist/utils/encoder.d.ts +28 -0
  104. package/dist/utils/encoder.js +125 -0
  105. package/dist/utils/error.d.ts +11 -0
  106. package/dist/utils/error.js +27 -0
  107. package/dist/utils/logger.d.ts +9 -0
  108. package/dist/utils/logger.js +32 -0
  109. package/dist/utils/memo.d.ts +1 -0
  110. package/dist/utils/memo.js +16 -0
  111. package/dist/utils/murmur2.d.ts +3 -0
  112. package/dist/utils/murmur2.js +40 -0
  113. package/dist/utils/retrier.d.ts +10 -0
  114. package/dist/utils/retrier.js +22 -0
  115. package/dist/utils/tracer.d.ts +5 -0
  116. package/dist/utils/tracer.js +39 -0
  117. package/package.json +30 -19
  118. package/src/__snapshots__/{request-handler.test.ts.snap → cluster.test.ts.snap} +329 -26
  119. package/src/api/api-versions.ts +2 -2
  120. package/src/api/create-topics.ts +2 -2
  121. package/src/api/delete-topics.ts +2 -2
  122. package/src/api/fetch.ts +86 -31
  123. package/src/api/find-coordinator.ts +2 -2
  124. package/src/api/heartbeat.ts +2 -2
  125. package/src/api/index.ts +21 -19
  126. package/src/api/init-producer-id.ts +2 -2
  127. package/src/api/join-group.ts +3 -3
  128. package/src/api/leave-group.ts +2 -2
  129. package/src/api/list-offsets.ts +3 -3
  130. package/src/api/metadata.ts +3 -3
  131. package/src/api/offset-commit.ts +2 -2
  132. package/src/api/offset-fetch.ts +2 -2
  133. package/src/api/produce.ts +17 -20
  134. package/src/api/sasl-authenticate.ts +2 -2
  135. package/src/api/sasl-handshake.ts +2 -2
  136. package/src/api/sync-group.ts +2 -2
  137. package/src/auth/index.ts +2 -0
  138. package/src/auth/plain.ts +10 -0
  139. package/src/auth/scram.ts +52 -0
  140. package/src/broker.ts +12 -14
  141. package/src/client.ts +7 -7
  142. package/src/cluster.test.ts +78 -74
  143. package/src/cluster.ts +43 -45
  144. package/src/codecs/gzip.ts +9 -0
  145. package/src/codecs/index.ts +16 -0
  146. package/src/codecs/none.ts +6 -0
  147. package/src/codecs/types.ts +4 -0
  148. package/src/connection.ts +49 -33
  149. package/src/consumer/consumer-group.ts +57 -35
  150. package/src/consumer/consumer-metadata.ts +2 -2
  151. package/src/consumer/consumer.ts +115 -92
  152. package/src/consumer/fetch-manager.ts +169 -0
  153. package/src/consumer/fetcher.ts +64 -0
  154. package/src/consumer/offset-manager.ts +24 -13
  155. package/src/consumer/processor.ts +53 -0
  156. package/src/distributors/assignments-to-replicas.test.ts +7 -7
  157. package/src/distributors/assignments-to-replicas.ts +2 -4
  158. package/src/distributors/messages-to-topic-partition-leaders.test.ts +6 -6
  159. package/src/distributors/partitioner.ts +27 -0
  160. package/src/index.ts +9 -3
  161. package/src/metadata.ts +8 -4
  162. package/src/producer/producer.ts +30 -20
  163. package/src/types.ts +5 -3
  164. package/src/utils/api.ts +5 -5
  165. package/src/utils/crypto.ts +15 -0
  166. package/src/utils/decoder.ts +14 -8
  167. package/src/utils/encoder.ts +34 -27
  168. package/src/utils/error.ts +3 -3
  169. package/src/utils/logger.ts +37 -0
  170. package/src/utils/murmur2.ts +44 -0
  171. package/src/utils/retrier.ts +1 -1
  172. package/src/utils/tracer.ts +41 -20
  173. package/tsconfig.json +16 -16
  174. package/.github/workflows/release.yml +0 -17
  175. package/certs/ca.crt +0 -29
  176. package/certs/ca.key +0 -52
  177. package/certs/ca.srl +0 -1
  178. package/certs/kafka.crt +0 -29
  179. package/certs/kafka.csr +0 -26
  180. package/certs/kafka.key +0 -52
  181. package/certs/kafka.keystore.jks +0 -0
  182. package/certs/kafka.truststore.jks +0 -0
  183. package/docker-compose.yml +0 -104
  184. package/examples/package-lock.json +0 -31
  185. package/examples/package.json +0 -14
  186. package/examples/src/client.ts +0 -9
  187. package/examples/src/consumer.ts +0 -17
  188. package/examples/src/create-topic.ts +0 -37
  189. package/examples/src/producer.ts +0 -24
  190. package/examples/src/replicator.ts +0 -25
  191. package/examples/src/utils/json.ts +0 -1
  192. package/examples/tsconfig.json +0 -7
  193. package/log4j.properties +0 -95
  194. package/scripts/generate-certs.sh +0 -24
  195. package/src/utils/debug.ts +0 -9
@@ -81,7 +81,7 @@ export class Decoder {
81
81
  return null;
82
82
  }
83
83
 
84
- const value = this.buffer.toString("utf-8", this.offset, this.offset + length);
84
+ const value = this.buffer.toString('utf-8', this.offset, this.offset + length);
85
85
  this.offset += length;
86
86
  return value;
87
87
  }
@@ -92,24 +92,24 @@ export class Decoder {
92
92
  return null;
93
93
  }
94
94
 
95
- const value = this.buffer.toString("utf-8", this.offset, this.offset + length);
95
+ const value = this.buffer.toString('utf-8', this.offset, this.offset + length);
96
96
  this.offset += length;
97
97
  return value;
98
98
  }
99
99
 
100
- public readVarIntString() {
100
+ public readVarIntBuffer() {
101
101
  const length = this.readVarInt();
102
102
  if (length < 0) {
103
103
  return null;
104
104
  }
105
105
 
106
- const value = this.buffer.toString("utf-8", this.offset, this.offset + length);
106
+ const value = this.buffer.subarray(this.offset, this.offset + length);
107
107
  this.offset += length;
108
108
  return value;
109
109
  }
110
110
 
111
111
  public readUUID() {
112
- const value = this.buffer.toString("hex", this.offset, this.offset + 16);
112
+ const value = this.buffer.toString('hex', this.offset, this.offset + 16);
113
113
  this.offset += 16;
114
114
  return value;
115
115
  }
@@ -132,6 +132,12 @@ export class Decoder {
132
132
  return results;
133
133
  }
134
134
 
135
+ public readVarIntArray<T>(callback: (opts: Decoder) => T): T[] {
136
+ const length = this.readVarInt();
137
+ const results = Array.from({ length }).map(() => callback(this));
138
+ return results;
139
+ }
140
+
135
141
  public readRecords<T>(callback: (opts: Decoder) => T): T[] {
136
142
  const length = this.readInt32();
137
143
 
@@ -143,9 +149,9 @@ export class Decoder {
143
149
  });
144
150
  }
145
151
 
146
- public read(length: number) {
147
- const value = this.buffer.subarray(this.offset, this.offset + length);
148
- this.offset += length;
152
+ public read(length?: number) {
153
+ const value = this.buffer.subarray(this.offset, length !== undefined ? this.offset + length : undefined);
154
+ this.offset += Buffer.byteLength(value);
149
155
  return value;
150
156
  }
151
157
 
@@ -1,41 +1,49 @@
1
1
  export class Encoder {
2
- private buffer: Buffer;
2
+ private chunks: Buffer[] = [];
3
3
 
4
- constructor({ buffer = Buffer.alloc(0) }: { buffer?: Buffer } = {}) {
5
- this.buffer = buffer;
4
+ public getChunks() {
5
+ return this.chunks;
6
6
  }
7
7
 
8
- public write(rightBuffer: Buffer) {
9
- this.buffer = Buffer.concat([this.buffer, rightBuffer]);
8
+ public getByteLength() {
9
+ return this.chunks.reduce((acc, chunk) => acc + chunk.byteLength, 0);
10
+ }
11
+
12
+ public write(...buffers: Buffer[]) {
13
+ this.chunks.push(...buffers);
10
14
  return this;
11
15
  }
12
16
 
17
+ public writeEncoder(encoder: Encoder) {
18
+ return this.write(...encoder.getChunks());
19
+ }
20
+
13
21
  public writeInt8(value: number) {
14
- const buffer = Buffer.alloc(1);
22
+ const buffer = Buffer.allocUnsafe(1);
15
23
  buffer.writeInt8(value);
16
24
  return this.write(buffer);
17
25
  }
18
26
 
19
27
  public writeInt16(value: number) {
20
- const buffer = Buffer.alloc(2);
28
+ const buffer = Buffer.allocUnsafe(2);
21
29
  buffer.writeInt16BE(value);
22
30
  return this.write(buffer);
23
31
  }
24
32
 
25
33
  public writeInt32(value: number) {
26
- const buffer = Buffer.alloc(4);
34
+ const buffer = Buffer.allocUnsafe(4);
27
35
  buffer.writeInt32BE(value);
28
36
  return this.write(buffer);
29
37
  }
30
38
 
31
39
  public writeUInt32(value: number) {
32
- const buffer = Buffer.alloc(4);
40
+ const buffer = Buffer.allocUnsafe(4);
33
41
  buffer.writeUInt32BE(value);
34
42
  return this.write(buffer);
35
43
  }
36
44
 
37
45
  public writeInt64(value: bigint) {
38
- const buffer = Buffer.alloc(8);
46
+ const buffer = Buffer.allocUnsafe(8);
39
47
  buffer.writeBigInt64BE(value);
40
48
  return this.write(buffer);
41
49
  }
@@ -74,9 +82,9 @@ export class Encoder {
74
82
  if (value === null) {
75
83
  return this.writeInt16(-1);
76
84
  }
77
- const byteLength = Buffer.byteLength(value, "utf-8");
78
- const buffer = Buffer.alloc(byteLength);
79
- buffer.write(value, 0, byteLength, "utf-8");
85
+ const byteLength = Buffer.byteLength(value, 'utf-8');
86
+ const buffer = Buffer.allocUnsafe(byteLength);
87
+ buffer.write(value, 0, byteLength, 'utf-8');
80
88
  return this.writeInt16(byteLength).write(buffer);
81
89
  }
82
90
 
@@ -85,24 +93,24 @@ export class Encoder {
85
93
  return this.writeUVarInt(0);
86
94
  }
87
95
 
88
- const byteLength = Buffer.byteLength(value, "utf-8");
89
- const buffer = Buffer.alloc(byteLength);
90
- buffer.write(value, 0, byteLength, "utf-8");
96
+ const byteLength = Buffer.byteLength(value, 'utf-8');
97
+ const buffer = Buffer.allocUnsafe(byteLength);
98
+ buffer.write(value, 0, byteLength, 'utf-8');
91
99
  return this.writeUVarInt(byteLength + 1).write(buffer);
92
100
  }
93
101
 
94
- public writeVarIntString(value: string | null) {
95
- if (value === null) {
102
+ public writeVarIntBuffer(buffer: Buffer | null) {
103
+ if (buffer === null) {
96
104
  return this.writeVarInt(-1);
97
105
  }
98
- return this.writeVarInt(Buffer.byteLength(value, "utf-8")).write(Buffer.from(value, "utf-8"));
106
+ return this.writeVarInt(buffer.byteLength).write(buffer);
99
107
  }
100
108
 
101
109
  public writeUUID(value: string | null) {
102
110
  if (value === null) {
103
111
  return this.write(Buffer.alloc(16));
104
112
  }
105
- return this.write(Buffer.from(value, "hex"));
113
+ return this.write(Buffer.from(value, 'hex'));
106
114
  }
107
115
 
108
116
  public writeBoolean(value: boolean) {
@@ -110,21 +118,20 @@ export class Encoder {
110
118
  }
111
119
 
112
120
  public writeArray<T>(arr: T[], callback: (encoder: Encoder, item: T) => Encoder) {
113
- const buffers = arr.map((item) => callback(new Encoder(), item).value());
114
- return this.writeInt32(arr.length).write(Buffer.concat(buffers));
121
+ return this.writeInt32(arr.length).write(...arr.flatMap((item) => callback(new Encoder(), item).getChunks()));
115
122
  }
116
123
 
117
124
  public writeCompactArray<T>(arr: T[] | null, callback: (encoder: Encoder, item: T) => Encoder) {
118
125
  if (arr === null) {
119
126
  return this.writeUVarInt(0);
120
127
  }
121
- const buffers = arr.map((item) => callback(new Encoder(), item).value());
122
- return this.writeUVarInt(buffers.length + 1).write(Buffer.concat(buffers));
128
+ return this.writeUVarInt(arr.length + 1).write(
129
+ ...arr.flatMap((item) => callback(new Encoder(), item).getChunks()),
130
+ );
123
131
  }
124
132
 
125
133
  public writeVarIntArray<T>(arr: T[], callback: (encoder: Encoder, item: T) => Encoder) {
126
- const buffers = arr.map((item) => callback(new Encoder(), item).value());
127
- return this.writeVarInt(buffers.length).write(Buffer.concat(buffers));
134
+ return this.writeVarInt(arr.length).write(...arr.flatMap((item) => callback(new Encoder(), item).getChunks()));
128
135
  }
129
136
 
130
137
  public writeBytes(value: Buffer) {
@@ -136,6 +143,6 @@ export class Encoder {
136
143
  }
137
144
 
138
145
  public value() {
139
- return this.buffer;
146
+ return Buffer.concat(this.chunks);
140
147
  }
141
148
  }
@@ -1,4 +1,4 @@
1
- import { API_ERROR } from "../api";
1
+ import { API_ERROR } from '../api';
2
2
 
3
3
  export class KafkaTSError extends Error {
4
4
  constructor(message: string) {
@@ -13,8 +13,8 @@ export class KafkaTSApiError<T = any> extends KafkaTSError {
13
13
  public errorMessage: string | null,
14
14
  public response: T,
15
15
  ) {
16
- const [errorName] = Object.entries(API_ERROR).find(([, value]) => value === errorCode) ?? ["UNKNOWN"];
17
- super(`${errorName}${errorMessage ? `: ${errorMessage}` : ""}`);
16
+ const [errorName] = Object.entries(API_ERROR).find(([, value]) => value === errorCode) ?? ['UNKNOWN'];
17
+ super(`${errorName}${errorMessage ? `: ${errorMessage}` : ''}`);
18
18
  }
19
19
  }
20
20
 
@@ -0,0 +1,37 @@
1
+ export interface Logger {
2
+ debug: (message: string, metadata?: unknown) => void;
3
+ info: (message: string, metadata?: unknown) => void;
4
+ warn: (message: string, metadata?: unknown) => void;
5
+ error: (message: string, metadata?: unknown) => void;
6
+ }
7
+
8
+ export const jsonSerializer = (_: unknown, v: unknown) => {
9
+ if (v instanceof Error) {
10
+ return { name: v.name, message: v.message, stack: v.stack, cause: v.cause };
11
+ }
12
+ if (typeof v === 'bigint') {
13
+ return v.toString();
14
+ }
15
+ return v;
16
+ };
17
+
18
+ class JsonLogger implements Logger {
19
+ debug(message: string, metadata?: unknown) {
20
+ console.debug(JSON.stringify({ message, metadata, level: 'debug' }, jsonSerializer));
21
+ }
22
+ info(message: string, metadata?: unknown) {
23
+ console.info(JSON.stringify({ message, metadata, level: 'info' }, jsonSerializer));
24
+ }
25
+ warn(message: string, metadata?: unknown) {
26
+ console.warn(JSON.stringify({ message, metadata, level: 'warning' }, jsonSerializer));
27
+ }
28
+ error(message: string, metadata?: unknown) {
29
+ console.error(JSON.stringify({ message, metadata, level: 'error' }, jsonSerializer));
30
+ }
31
+ }
32
+
33
+ export let log: Logger = new JsonLogger();
34
+
35
+ export const setLogger = (newLogger: Logger) => {
36
+ log = newLogger;
37
+ };
@@ -0,0 +1,44 @@
1
+ /* https://github.com/apache/kafka/blob/0.10.2/clients/src/main/java/org/apache/kafka/common/utils/Utils.java#L364 */
2
+
3
+ export const murmur2 = (data: Buffer): number => {
4
+ const length = data.length;
5
+ const seed = 0x9747b28c;
6
+
7
+ const m = 0x5bd1e995;
8
+ const r = 24;
9
+
10
+ let h = seed ^ length;
11
+ let length4 = Math.floor(length / 4);
12
+
13
+ for (let i = 0; i < length4; i++) {
14
+ const i4 = i * 4;
15
+ let k =
16
+ (data[i4 + 0] & 0xff) +
17
+ ((data[i4 + 1] & 0xff) << 8) +
18
+ ((data[i4 + 2] & 0xff) << 16) +
19
+ ((data[i4 + 3] & 0xff) << 24);
20
+ k *= m;
21
+ k ^= k >> r;
22
+ k *= m;
23
+ h *= m;
24
+ h ^= k;
25
+ }
26
+
27
+ switch (length % 4) {
28
+ case 3:
29
+ h = h ^ ((data[(length & ~3) + 2] & 0xff) << 16);
30
+ case 2:
31
+ h = h ^ ((data[(length & ~3) + 1] & 0xff) << 8);
32
+ case 1:
33
+ h = h ^ (data[length & ~3] & 0xff);
34
+ h *= m;
35
+ }
36
+
37
+ h ^= h >> 13;
38
+ h *= m;
39
+ h ^= h >> 15;
40
+
41
+ return h;
42
+ };
43
+
44
+ export const toPositive = (input: number) => input & 0x7fffffff;
@@ -1,4 +1,4 @@
1
- import { delay } from "./delay";
1
+ import { delay } from './delay';
2
2
 
3
3
  export type Retrier = (func: () => unknown) => Promise<void>;
4
4
 
@@ -1,28 +1,49 @@
1
- import { serializer } from "./debug";
1
+ import { log } from './logger';
2
2
 
3
- export const trace =
3
+ export interface Tracer {
4
+ startActiveSpan<T>(module: string, method: string, metadata: Record<string, unknown>, callback: () => T): T;
5
+ }
6
+
7
+ class DebugTracer implements Tracer {
8
+ private isEnabled = process.env.DEBUG?.includes('kafka-ts');
9
+
10
+ startActiveSpan<T>(module: string, method: string, metadata: Record<string, unknown>, callback: () => T): T {
11
+ if (!this.isEnabled) {
12
+ return callback();
13
+ }
14
+
15
+ const startTime = Date.now();
16
+
17
+ const onEnd = <T>(result: T): T => {
18
+ log.debug(`[${module}.${method}] ${metadata?.message ?? ''} +${Date.now() - startTime}ms`, {
19
+ ...metadata,
20
+ ...(!!result && { result }),
21
+ });
22
+ return result;
23
+ };
24
+
25
+ const result = callback();
26
+ if (result instanceof Promise) {
27
+ return result.then(onEnd) as T;
28
+ }
29
+ onEnd(result);
30
+ return result;
31
+ }
32
+ }
33
+
34
+ let tracer: Tracer = new DebugTracer();
35
+
36
+ export const setTracer = <T>(newTracer: Tracer) => {
37
+ tracer = newTracer;
38
+ };
39
+
40
+ export const createTracer =
41
+ (module: string) =>
4
42
  (fn?: (...args: any[]) => Record<string, unknown> | undefined) =>
5
43
  (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {
6
- if (!process.env.DEBUG?.includes("kafka-ts")) return;
7
-
8
44
  const original = descriptor.value;
9
45
  descriptor.value = function (...args: any[]) {
10
- const startTime = Date.now();
11
46
  const metadata = fn?.(...args);
12
-
13
- const onEnd = <T>(result: T): T => {
14
- console.log(
15
- `[${propertyKey}] +${Date.now() - startTime}ms ${JSON.stringify({ ...metadata, result }, serializer)}`,
16
- );
17
- return result;
18
- };
19
-
20
- const result = original.apply(this, args);
21
- if (result instanceof Promise) {
22
- return result.then(onEnd);
23
- } else {
24
- onEnd(result);
25
- return result;
26
- }
47
+ return tracer.startActiveSpan(module, propertyKey, { ...metadata }, () => original.apply(this, args));
27
48
  };
28
49
  };
package/tsconfig.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
- "compilerOptions": {
3
- "lib": ["es2023"],
4
- "target": "es2022",
5
- "module": "node16",
6
- "strict": true,
7
- "forceConsistentCasingInFileNames": true,
8
- "esModuleInterop": true,
9
- "skipLibCheck": true,
10
- "moduleResolution": "node16",
11
- "outDir": "dist",
12
- "declaration": true,
13
- "emitDecoratorMetadata": true,
14
- "experimentalDecorators": true
15
- },
16
- "include": ["src/**/*"],
17
- }
2
+ "compilerOptions": {
3
+ "lib": ["es2023"],
4
+ "target": "es2022",
5
+ "module": "node16",
6
+ "strict": true,
7
+ "forceConsistentCasingInFileNames": true,
8
+ "esModuleInterop": true,
9
+ "skipLibCheck": true,
10
+ "moduleResolution": "node16",
11
+ "outDir": "dist",
12
+ "declaration": true,
13
+ "emitDecoratorMetadata": true,
14
+ "experimentalDecorators": true
15
+ },
16
+ "include": ["src/**/*"]
17
+ }
@@ -1,17 +0,0 @@
1
- name: Publish package
2
- on:
3
- release:
4
- types: [published]
5
- jobs:
6
- build:
7
- runs-on: ubuntu-latest
8
- steps:
9
- - uses: actions/checkout@v4
10
- - uses: actions/setup-node@v4
11
- with:
12
- node-version: '20.x'
13
- registry-url: 'https://registry.npmjs.org'
14
- - run: npm ci
15
- - run: npm publish
16
- env:
17
- NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
package/certs/ca.crt DELETED
@@ -1,29 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIFCTCCAvGgAwIBAgIUYSj+2uS05/+RbdvXYi+NnYZrzIEwDQYJKoZIhvcNAQEL
3
- BQAwEzERMA8GA1UEAwwIa2Fma2EtY2EwIBcNMjQxMDE4MTMwNDQ4WhgPMjI2NDEw
4
- MjAxMzA0NDhaMBMxETAPBgNVBAMMCGthZmthLWNhMIICIjANBgkqhkiG9w0BAQEF
5
- AAOCAg8AMIICCgKCAgEAiuEnn0ZAaWsteEMsgrCgvhGmBBZh6NMbWrWRq/9cvESQ
6
- OjU7LUIXEjzHAeIc/NfMHeOl6D2BfXS+BAcmJBHZ5DAZoCOATKvy0Ry5KEdlNbat
7
- o/B9i5jWKbK1Q0sF+2hSfRWB5OGrdsusN9XxH2JYuW93fY9htf5Au+h5BjLMTL8z
8
- wRJHX4EuC63VyF3U0xl20TePuYpATpvEXQZQyaHWGMM8+EJVJiv6pQY2GoKKHsD7
9
- xFB31mKgvLQDWkSyeRXeZE0wgoni4MM4Q9hKH+U+ccn7Xxj2grrjK96u6/B6LIkc
10
- z30Lh+yWuO57VM/cqrnK1DCMR3+hG6ser5lLemkJmptbrvsm2uZEI2vCglsoz352
11
- ZmrU5LX8Taj5SPmWssRxQHtx20L5kDDs0QNtvPprhaPdFmPVr39EVTS4p1As5meZ
12
- QLnOti7Vj0RtALQ1BBRc1nl8OUh8N4krBEgs+BLGwcW8T9vw7EfqaQI7G9q/b/+L
13
- soEHRzdRxEs5TPjVGQNcd2REQf/Dn1ovHOlgmkhRKWPLhHVRza2FjypdO0yUF0io
14
- W2vxzHvdLsUhpmAVu//dOOopzfukJfOELsyxSkQucyFpaDmu4y9WjPq2cJ1K1F1L
15
- DuM9BVHIZTcI7CxlqujYroYnH4QMH/dUu5MAfqnHE926XC3YIWvfuv4NLs0vcKcC
16
- AwEAAaNTMFEwHQYDVR0OBBYEFI/M/wYP4G8TGt2AR5X8H6YAwfUQMB8GA1UdIwQY
17
- MBaAFI/M/wYP4G8TGt2AR5X8H6YAwfUQMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
18
- hvcNAQELBQADggIBAHLIwasKnvI5Cim8app5V1C4keCrjInLRXQuY9r7wFQ6jFFC
19
- KraOcEM2LCjwDvjWv30Rdjrv0sMm3NNL+GC2SWpj5tDmsUYxMJcDRVFLbKWBdjrx
20
- m/8zFfr4gL2pUSJZxucey0KCP4yCljetSpXbN+upvq97i2/O7JFcyeFKu4Z3KeKJ
21
- Pn+gI9Dn5WteTzPNLR4TX948YvmOSURKMAc2LHXDgz4xL+UqNAf18cbJYd47YBLi
22
- JAlPISVBUFZcOXAp2Y48m2AjN2ZfL8Sb7see6Ia87/19Dls9FFmCDF/bN9G2R1Tv
23
- gEnby25or7xfH5cJpkEBHPN9Tg/D/XA7fe6rEvssMBuMsjr5DNKzUeQ5NgkKA9PU
24
- JFTd75xmGq71ydOaO7ICwcrBtzYYJ9HyEOg9Boz7ikALvi1LqK/y2L9pAQ6RUqNn
25
- 5IQs/FeJFC48ZvvM5vhQLQQJM+Bz991JA6i/KiQvyNHi4PhrPtSbwENhxFSZWWdG
26
- 0E8XYAWs1X6y+9MiWea9HvA9+0mkM0XTZK/ps4jgTaPsY7xyhHMnMVsXZu6LLxNd
27
- puxokDyDxYo63OY6AZLpwpsjpfDH1jPakR/lU0/jvudV6GC+kQr7hZseTUQI21f2
28
- njVbHOlihJIV+6o6lrS+xLwU7zWwvx/cObmplwffsyI5sPwnXIIMJPR6ToSV
29
- -----END CERTIFICATE-----
package/certs/ca.key DELETED
@@ -1,52 +0,0 @@
1
- -----BEGIN PRIVATE KEY-----
2
- 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
- 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
- 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
- 1fEfYli5b3d9j2G1/kC76HkGMsxMvzPBEkdfgS4LrdXIXdTTGXbRN4+5ikBOm8Rd
6
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- G3Fh7zbWU9zr7ozkhDfPce7sl/EBpd7uwwHXaFocOo3pUmnPdZSUxbYl+rOuOASP
20
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- UYvrpEJ9S9BYZNX5Ip/2cOMPkKe7/XOm9aCyRHEtk0O5qP6ixhp643piicR0AlM6
29
- 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
- F98vLfmwtCJ3MSJGxMtJ0UqaEW5IPIshGlKMPMVR3UA5oWMMFylIti72b+I8X3+q
31
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
51
- CMLta4NyYC40J7EPwXKyrXSz8qhq
52
- -----END PRIVATE KEY-----
package/certs/ca.srl DELETED
@@ -1 +0,0 @@
1
- 0FB74CE1593C67E32AD89ADE70018EF63CB9C537
package/certs/kafka.crt DELETED
@@ -1,29 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIFCTCCAvGgAwIBAgIUD7dM4Vk8Z+Mq2JrecAGO9jy5xTcwDQYJKoZIhvcNAQEL
3
- BQAwEzERMA8GA1UEAwwIa2Fma2EtY2EwHhcNMjQxMDE4MTMwNTM0WhcNMzQxMDE2
4
- MTMwNTM0WjAQMQ4wDAYDVQQDDAVrYWZrYTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
5
- ADCCAgoCggIBAM8x9Dqupco6PnX8xOK6MAaleBHOLzYl1QoJrdWXdF4O/Y9x4WlW
6
- X9+LS4m8QNTOKmSAHvBPJy5Eg4Lz8CIfLpyj9WgJ/j+P3uxM4d5XiTBXz6j/+zlQ
7
- CnLccLfijTRnBw/XIcmQ3sKefVlwD9PG6W/VF82qOFZpXOzFyzmuxvwLf5afg1u2
8
- 0Gjthcx/XAM8dg3NFOTZqCITe8caoys0C+saZiZaF/7Zr4uCEbwR0Fq1dXQaeEcD
9
- 5CGpYKrzgLLN855wWd2rqeJnHpXfKPjIcMKMb5N58ZXZIy5iBZLECVXWDuWvNXrc
10
- f3XSuHMsSNNt8RPqfouEINlQJldTUlo474HXzr7sBQ3vmxVgfAqMcIWCK82amfAb
11
- LgWIN+GzZX7cKgUZARgOBTc9pgOzQEWsM+cZ4m1v/hsBo7x3PBpiNtv6uuSztjHO
12
- Udgk7nWQDEIRmBTs58va+HcJ1YrucEXL6tiNAYczmFIjakX7FC21GUDuq9hw8P44
13
- gbL3YPfhAuVKef3vNn2H7aVq14psw4f3XmVB3UBzbzT5kQTCnaQQHdMXIfd76JCd
14
- fBxqqZAYmwPgq57eGfSwbouSwwzNmy29XEChaT0yunyzX5Qb3X1lzenv/xmi9e03
15
- 6HVUbs10qinhlit63PJjnQ5ji/JqjnwaE8w747mft3wjVgVNN9DNHZmXAgMBAAGj
16
- WDBWMBQGA1UdEQQNMAuCCWxvY2FsaG9zdDAdBgNVHQ4EFgQUZ47vlBvUI9za7Ek6
17
- kGgjknZJ6MowHwYDVR0jBBgwFoAUj8z/Bg/gbxMa3YBHlfwfpgDB9RAwDQYJKoZI
18
- hvcNAQELBQADggIBABqCALx8sSoYiNJQSod6wykeCnbEHFqkJGgY85fK0yagXlJF
19
- biUYHzw5p3TCHbMOnKzkeQ2J64xEIPxGaKZgeB5dD+tNaUQDZjwlTkiwTA80Fo7M
20
- eU6wVcX+lQ32UNly83JyshqkSbpXfxnMRZv1O2uPBaOR/M2Pb+PnascLg9f6atI2
21
- X3wkSAI0o/zNyU5unWcWMTxHWA9P1YVpnD/9Ij0fM7gRpCBsbr8MHXlAnAXWT/HX
22
- NuIHnYso6pBvpPQ6Fg8/D9J0+xO4+DFtoIejTpXiBwxgQTcHHQX1hqXUaR0Ri172
23
- vcgt0+LwEHLQLmFAr6bZakui1LBO+I/rHJmELQANCuys4sRC7YcOnGNSQpSsmiNU
24
- xUP3WS+QW2G8kIQIxBg0AS3to+9Q1emv4eqYEydBVZa8NctkCUzbhg1nHF+jCBVA
25
- a+NbObnWTycchunPwGnxtImJGKiHbTe1dQ0S/kOEAUO1LhBKLTDDgrzUKwKrFOvB
26
- +nEiXIbTlpzEgJJ3Gpv39CX6/+yMh/Lu0Ge7cj1TFKh26W+t0QrqAAnpptSQppYM
27
- FersUtwt5dZvZ/75QsyHiiBxVtSQIp1dzm91O4Y2p6Ll5vjaew09PCNJc3rxiGXC
28
- JsvdQg/hlWIzf1duNCtcNWQyx9/LOvnN35fS0qDrl41qK9Ke7NLupbLJ7lZj
29
- -----END CERTIFICATE-----
package/certs/kafka.csr DELETED
@@ -1,26 +0,0 @@
1
- -----BEGIN CERTIFICATE REQUEST-----
2
- MIIEVTCCAj0CAQAwEDEOMAwGA1UEAwwFa2Fma2EwggIiMA0GCSqGSIb3DQEBAQUA
3
- A4ICDwAwggIKAoICAQDPMfQ6rqXKOj51/MTiujAGpXgRzi82JdUKCa3Vl3ReDv2P
4
- ceFpVl/fi0uJvEDUzipkgB7wTycuRIOC8/AiHy6co/VoCf4/j97sTOHeV4kwV8+o
5
- //s5UApy3HC34o00ZwcP1yHJkN7Cnn1ZcA/Txulv1RfNqjhWaVzsxcs5rsb8C3+W
6
- n4NbttBo7YXMf1wDPHYNzRTk2agiE3vHGqMrNAvrGmYmWhf+2a+LghG8EdBatXV0
7
- GnhHA+QhqWCq84CyzfOecFndq6niZx6V3yj4yHDCjG+TefGV2SMuYgWSxAlV1g7l
8
- rzV63H910rhzLEjTbfET6n6LhCDZUCZXU1JaOO+B186+7AUN75sVYHwKjHCFgivN
9
- mpnwGy4FiDfhs2V+3CoFGQEYDgU3PaYDs0BFrDPnGeJtb/4bAaO8dzwaYjbb+rrk
10
- s7YxzlHYJO51kAxCEZgU7OfL2vh3CdWK7nBFy+rYjQGHM5hSI2pF+xQttRlA7qvY
11
- cPD+OIGy92D34QLlSnn97zZ9h+2lateKbMOH915lQd1Ac280+ZEEwp2kEB3TFyH3
12
- e+iQnXwcaqmQGJsD4Kue3hn0sG6LksMMzZstvVxAoWk9Mrp8s1+UG919Zc3p7/8Z
13
- ovXtN+h1VG7NdKop4ZYretzyY50OY4vyao58GhPMO+O5n7d8I1YFTTfQzR2ZlwID
14
- AQABoAAwDQYJKoZIhvcNAQELBQADggIBAK4iQDBi/IQ5ef6HgExBXv9UTwX4HZGv
15
- AJ16p3fNcldLLmz+r11llNNFL+QHn2iJNf3SJ3ULGrD108n2a0t2oLvXx1sNXhVc
16
- vLHR2hkaQHqyh/jak63d8ngb2v0VT6GJ1zj3oGWGp3H5492Si+Ynu3Wx7lDe61fG
17
- v02JdixlHYUH6FQZmGWYW1qWNsHcXP6YYTFXkCNJPnCJFRM5nYTrm0DH6bXgT4FG
18
- jwHc4WbAs8dwsddueoHmV2P7CtiK5qH8r4v75hC5U3nMLStFP4upNzvB7q93JV0b
19
- CogY+2MSpkf2+VfGGeaKUbHh09Gv05m6f1jQGcurYnvRem5K/OHoqpa2dUWbfIxC
20
- 7iIqEYNL4LALYFPBVnZPKss5/KP35bLt9LLho+YbLNpgy/5GRonvRQ3ZZvD3Le2O
21
- 1fXBOAf97M3r2NqhSLF/IMGay2cuooikgG8MExUzAgXlfOzVlnQ3WqxrOxn54Jep
22
- pLfxi9k9020ZvnrrD6hCdnrszLbJwhWnhOy4xaJ6ZS132GaOGefmKkd/vy/2jBlz
23
- McRWy9LQm1F8HMp4uuGVhaJntqPH3CFjHIgHT/Ro8hZIvCAY8LUCjsD2dhI7M3N7
24
- +MSQchNA7Ty0wGGEX/5OUN4mH0RZh+mGinNe9n3NFKuBgJeWgOlwtL5kvh9rXkGq
25
- aMwyvRORw3HH
26
- -----END CERTIFICATE REQUEST-----
package/certs/kafka.key DELETED
@@ -1,52 +0,0 @@
1
- -----BEGIN PRIVATE KEY-----
2
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- ao58GhPMO+O5n7d8I1YFTTfQzR2ZlwIDAQABAoICAACl6lqoozIfvoRF9yOya2YJ
14
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- x5bwqBCKiu6jQ0PN+/pxpc14UZmU8kvh+CZJ8G/jZzaovAINwxtS1pIzyXuTfLcT
24
- WVBmgZpduYYEHKCg1DepAoIBAQD+vqddxTQmIgN8LH+3E/xBnrEsO3BHNulkMYwK
25
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- RTLCdJpZL3ebAoIBAF8hn6ra7CCZbye+Dmu2IOv4cT2NbN6LWRk7j4rC/ZsdlYg0
36
- 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
- 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
- 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
- taMw5K7VS/juMYiQtofEW+UBYuBmi/Apv17WWwC+jTG678q8OjZEVtzvE7Y6yZvn
40
- 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
- ehH0X31AD3+w2qhAl1g/i6/vnylmF1ei//6VUUQmZozbOKrSevof0n1Tc+FCUCcP
42
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
51
- 0EaZY4cBQwWFep18Shu5QuXvsTbHmQ==
52
- -----END PRIVATE KEY-----
Binary file
Binary file