UNPKG

7.5 kBJavaScriptView Raw
1const pkgJson = require('../package.json')
2const { bugs } = pkgJson
3
4class KafkaJSError extends Error {
5 constructor(e, { retriable = true, cause } = {}) {
6 super(e, { cause })
7 Error.captureStackTrace(this, this.constructor)
8 this.message = e.message || e
9 this.name = 'KafkaJSError'
10 this.retriable = retriable
11 this.helpUrl = e.helpUrl
12 this.cause = cause
13 }
14}
15
16class KafkaJSNonRetriableError extends KafkaJSError {
17 constructor(e, { cause } = {}) {
18 super(e, { retriable: false, cause })
19 this.name = 'KafkaJSNonRetriableError'
20 }
21}
22
23class KafkaJSProtocolError extends KafkaJSError {
24 constructor(e, { retriable = e.retriable } = {}) {
25 super(e, { retriable })
26 this.type = e.type
27 this.code = e.code
28 this.name = 'KafkaJSProtocolError'
29 }
30}
31
32class KafkaJSOffsetOutOfRange extends KafkaJSProtocolError {
33 constructor(e, { topic, partition }) {
34 super(e)
35 this.topic = topic
36 this.partition = partition
37 this.name = 'KafkaJSOffsetOutOfRange'
38 }
39}
40
41class KafkaJSMemberIdRequired extends KafkaJSProtocolError {
42 constructor(e, { memberId }) {
43 super(e)
44 this.memberId = memberId
45 this.name = 'KafkaJSMemberIdRequired'
46 }
47}
48
49class KafkaJSNumberOfRetriesExceeded extends KafkaJSNonRetriableError {
50 constructor(e, { retryCount, retryTime }) {
51 super(e, { cause: e })
52 this.stack = `${this.name}\n Caused by: ${e.stack}`
53 this.retryCount = retryCount
54 this.retryTime = retryTime
55 this.name = 'KafkaJSNumberOfRetriesExceeded'
56 }
57}
58
59class KafkaJSConnectionError extends KafkaJSError {
60 /**
61 * @param {string} e
62 * @param {object} options
63 * @param {string} [options.broker]
64 * @param {string} [options.code]
65 */
66 constructor(e, { broker, code } = {}) {
67 super(e)
68 this.broker = broker
69 this.code = code
70 this.name = 'KafkaJSConnectionError'
71 }
72}
73
74class KafkaJSConnectionClosedError extends KafkaJSConnectionError {
75 constructor(e, { host, port } = {}) {
76 super(e, { broker: `${host}:${port}` })
77 this.host = host
78 this.port = port
79 this.name = 'KafkaJSConnectionClosedError'
80 }
81}
82
83class KafkaJSRequestTimeoutError extends KafkaJSError {
84 constructor(e, { broker, correlationId, createdAt, sentAt, pendingDuration } = {}) {
85 super(e)
86 this.broker = broker
87 this.correlationId = correlationId
88 this.createdAt = createdAt
89 this.sentAt = sentAt
90 this.pendingDuration = pendingDuration
91 this.name = 'KafkaJSRequestTimeoutError'
92 }
93}
94
95class KafkaJSMetadataNotLoaded extends KafkaJSError {
96 constructor() {
97 super(...arguments)
98 this.name = 'KafkaJSMetadataNotLoaded'
99 }
100}
101class KafkaJSTopicMetadataNotLoaded extends KafkaJSMetadataNotLoaded {
102 constructor(e, { topic } = {}) {
103 super(e)
104 this.topic = topic
105 this.name = 'KafkaJSTopicMetadataNotLoaded'
106 }
107}
108class KafkaJSStaleTopicMetadataAssignment extends KafkaJSError {
109 constructor(e, { topic, unknownPartitions } = {}) {
110 super(e)
111 this.topic = topic
112 this.unknownPartitions = unknownPartitions
113 this.name = 'KafkaJSStaleTopicMetadataAssignment'
114 }
115}
116
117class KafkaJSDeleteGroupsError extends KafkaJSError {
118 constructor(e, groups = []) {
119 super(e)
120 this.groups = groups
121 this.name = 'KafkaJSDeleteGroupsError'
122 }
123}
124
125class KafkaJSServerDoesNotSupportApiKey extends KafkaJSNonRetriableError {
126 constructor(e, { apiKey, apiName } = {}) {
127 super(e)
128 this.apiKey = apiKey
129 this.apiName = apiName
130 this.name = 'KafkaJSServerDoesNotSupportApiKey'
131 }
132}
133
134class KafkaJSBrokerNotFound extends KafkaJSError {
135 constructor() {
136 super(...arguments)
137 this.name = 'KafkaJSBrokerNotFound'
138 }
139}
140
141class KafkaJSPartialMessageError extends KafkaJSNonRetriableError {
142 constructor() {
143 super(...arguments)
144 this.name = 'KafkaJSPartialMessageError'
145 }
146}
147
148class KafkaJSSASLAuthenticationError extends KafkaJSNonRetriableError {
149 constructor() {
150 super(...arguments)
151 this.name = 'KafkaJSSASLAuthenticationError'
152 }
153}
154
155class KafkaJSGroupCoordinatorNotFound extends KafkaJSNonRetriableError {
156 constructor() {
157 super(...arguments)
158 this.name = 'KafkaJSGroupCoordinatorNotFound'
159 }
160}
161
162class KafkaJSNotImplemented extends KafkaJSNonRetriableError {
163 constructor() {
164 super(...arguments)
165 this.name = 'KafkaJSNotImplemented'
166 }
167}
168
169class KafkaJSTimeout extends KafkaJSNonRetriableError {
170 constructor() {
171 super(...arguments)
172 this.name = 'KafkaJSTimeout'
173 }
174}
175
176class KafkaJSLockTimeout extends KafkaJSTimeout {
177 constructor() {
178 super(...arguments)
179 this.name = 'KafkaJSLockTimeout'
180 }
181}
182
183class KafkaJSUnsupportedMagicByteInMessageSet extends KafkaJSNonRetriableError {
184 constructor() {
185 super(...arguments)
186 this.name = 'KafkaJSUnsupportedMagicByteInMessageSet'
187 }
188}
189
190class KafkaJSDeleteTopicRecordsError extends KafkaJSError {
191 constructor({ partitions }) {
192 /*
193 * This error is retriable if all the errors were retriable
194 */
195 const retriable = partitions
196 .filter(({ error }) => error != null)
197 .every(({ error }) => error.retriable === true)
198
199 super('Error while deleting records', { retriable })
200 this.name = 'KafkaJSDeleteTopicRecordsError'
201 this.partitions = partitions
202 }
203}
204
205const issueUrl = bugs ? bugs.url : null
206
207class KafkaJSInvariantViolation extends KafkaJSNonRetriableError {
208 constructor(e) {
209 const message = e.message || e
210 super(`Invariant violated: ${message}. This is likely a bug and should be reported.`)
211 this.name = 'KafkaJSInvariantViolation'
212
213 if (issueUrl !== null) {
214 const issueTitle = encodeURIComponent(`Invariant violation: ${message}`)
215 this.helpUrl = `${issueUrl}/new?assignees=&labels=bug&template=bug_report.md&title=${issueTitle}`
216 }
217 }
218}
219
220class KafkaJSInvalidVarIntError extends KafkaJSNonRetriableError {
221 constructor() {
222 super(...arguments)
223 this.name = 'KafkaJSNonRetriableError'
224 }
225}
226
227class KafkaJSInvalidLongError extends KafkaJSNonRetriableError {
228 constructor() {
229 super(...arguments)
230 this.name = 'KafkaJSNonRetriableError'
231 }
232}
233
234class KafkaJSCreateTopicError extends KafkaJSProtocolError {
235 constructor(e, topicName) {
236 super(e)
237 this.topic = topicName
238 this.name = 'KafkaJSCreateTopicError'
239 }
240}
241class KafkaJSAggregateError extends Error {
242 constructor(message, errors) {
243 super(message)
244 this.errors = errors
245 this.name = 'KafkaJSAggregateError'
246 }
247}
248
249class KafkaJSFetcherRebalanceError extends Error {}
250
251const isRebalancing = e =>
252 e.type === 'REBALANCE_IN_PROGRESS' || e.type === 'NOT_COORDINATOR_FOR_GROUP'
253
254const isKafkaJSError = e => e instanceof KafkaJSError
255
256module.exports = {
257 KafkaJSError,
258 KafkaJSNonRetriableError,
259 KafkaJSPartialMessageError,
260 KafkaJSBrokerNotFound,
261 KafkaJSProtocolError,
262 KafkaJSConnectionError,
263 KafkaJSConnectionClosedError,
264 KafkaJSRequestTimeoutError,
265 KafkaJSSASLAuthenticationError,
266 KafkaJSNumberOfRetriesExceeded,
267 KafkaJSOffsetOutOfRange,
268 KafkaJSMemberIdRequired,
269 KafkaJSGroupCoordinatorNotFound,
270 KafkaJSNotImplemented,
271 KafkaJSMetadataNotLoaded,
272 KafkaJSTopicMetadataNotLoaded,
273 KafkaJSStaleTopicMetadataAssignment,
274 KafkaJSDeleteGroupsError,
275 KafkaJSTimeout,
276 KafkaJSLockTimeout,
277 KafkaJSServerDoesNotSupportApiKey,
278 KafkaJSUnsupportedMagicByteInMessageSet,
279 KafkaJSDeleteTopicRecordsError,
280 KafkaJSInvariantViolation,
281 KafkaJSInvalidVarIntError,
282 KafkaJSInvalidLongError,
283 KafkaJSCreateTopicError,
284 KafkaJSAggregateError,
285 KafkaJSFetcherRebalanceError,
286 isRebalancing,
287 isKafkaJSError,
288}