1
1
const error = require ( "./_error" ) ;
2
- const LibrdKafkaError = require ( '../error' ) ;
3
2
4
3
/**
5
4
* @function kafkaJSToRdKafkaConfig()
@@ -47,7 +46,13 @@ async function kafkaJSToRdKafkaConfig(config) {
47
46
return { globalConfig, topicConfig } ;
48
47
}
49
48
49
+ /**
50
+ * Converts a topicPartitionOffset from KafkaJS to a format that can be used by node-rdkafka.
51
+ * @param {import("../../types/kafkajs").TopicPartitionOffset } tpo
52
+ * @returns {{topic: string, partition: number, offset: number} }
53
+ */
50
54
function topicPartitionOffsetToRdKafka ( tpo ) {
55
+ // TODO: do we need some checks for negative offsets and stuff? Or 'named' offsets?
51
56
return {
52
57
topic : tpo . topic ,
53
58
partition : tpo . partition ,
@@ -57,8 +62,8 @@ function topicPartitionOffsetToRdKafka(tpo) {
57
62
58
63
/**
59
64
* Convert a librdkafka error from node-rdkafka into a KafkaJSError.
60
- * @param {LibrdKafkaError } librdKafkaError to convert from.
61
- * @returns KafkaJSError
65
+ * @param {import("../error") } librdKafkaError to convert from.
66
+ * @returns { error. KafkaJSError} the converted error.
62
67
*/
63
68
function createKafkaJsErrorFromLibRdKafkaError ( librdKafkaError ) {
64
69
const properties = {
@@ -72,34 +77,57 @@ function createKafkaJsErrorFromLibRdKafkaError(librdKafkaError) {
72
77
let err = null ;
73
78
74
79
if ( properties . code === error . ErrorCodes . ERR_OFFSET_OUT_OF_RANGE ) {
75
- err = new error . KafkaJSOffsetOutOfRange ( e , properties ) ;
80
+ err = new error . KafkaJSOffsetOutOfRange ( librdKafkaError , properties ) ;
76
81
} else if ( properties . code === error . ErrorCodes . ERR_REQUEST_TIMED_OUT ) {
77
- err = new error . KafkaJSRequestTimeoutError ( e , properties ) ;
82
+ err = new error . KafkaJSRequestTimeoutError ( librdKafkaError , properties ) ;
78
83
} else if ( properties . code === error . ErrorCodes . ERR__PARTIAL ) {
79
- err = new error . KafkaJSPartialMessageError ( e , properties ) ;
84
+ err = new error . KafkaJSPartialMessageError ( librdKafkaError , properties ) ;
80
85
} else if ( properties . code === error . ErrorCodes . ERR__AUTHENTICATION ) {
81
- err = new error . KafkaJSSASLAuthenticationError ( e , properties ) ;
86
+ err = new error . KafkaJSSASLAuthenticationError ( librdKafkaError , properties ) ;
82
87
} else if ( properties . code === error . ErrorCodes . ERR_GROUP_COORDINATOR_NOT_AVAILABLE ) {
83
- err = new error . KafkaJSGroupCoordinatorNotAvailableError ( e , properties ) ;
88
+ err = new error . KafkaJSGroupCoordinatorNotAvailableError ( librdKafkaError , properties ) ;
84
89
} else if ( properties . code === error . ErrorCodes . ERR__NOT_IMPLEMENTED ) {
85
- err = new error . KafkaJSNotImplemented ( e , properties ) ;
90
+ err = new error . KafkaJSNotImplemented ( librdKafkaError , properties ) ;
86
91
} else if ( properties . code === error . ErrorCodes . ERR__TIMED_OUT ) {
87
- err = new error . KafkaJSTimedOut ( e , properties ) ;
92
+ err = new error . KafkaJSTimedOut ( librdKafkaError , properties ) ;
88
93
} else if ( properties . code === error . ErrorCodes . ERR__ALL_BROKERS_DOWN ) {
89
- err = new error . KafkaJSNoBrokerAvailableError ( e , properties ) ;
94
+ err = new error . KafkaJSNoBrokerAvailableError ( librdKafkaError , properties ) ;
90
95
} else if ( properties . code === error . ErrorCodes . ERR__TRANSPORT ) {
91
- err = new error . KafkaJSConnectionError ( e , properties ) ;
96
+ err = new error . KafkaJSConnectionError ( librdKafkaError , properties ) ;
92
97
} else if ( properties . code > 0 ) { /* Indicates a non-local error */
93
- err = new error . KafkaJSProtocolError ( e , properties ) ;
98
+ err = new error . KafkaJSProtocolError ( librdKafkaError , properties ) ;
94
99
} else {
95
- err = new error . KafkaJSError ( e , properties ) ;
100
+ err = new error . KafkaJSError ( librdKafkaError , properties ) ;
96
101
}
97
102
103
+ console . log ( "Converted err = " + JSON . stringify ( err , null , 2 ) + " librdkafka erro = " + JSON . stringify ( librdKafkaError , null , 2 ) ) ;
98
104
return err ;
99
105
}
100
106
107
+ /**
108
+ * Converts KafkaJS headers to a format that can be used by node-rdkafka.
109
+ * @param {import("../../types/kafkajs").IHeaders|null } kafkaJSHeaders
110
+ * @returns {import("../../").MessageHeader[]|null } the converted headers.
111
+ */
112
+ function convertToRdKafkaHeaders ( kafkaJSHeaders ) {
113
+ if ( ! kafkaJSHeaders ) return null ;
114
+
115
+ const headers = [ ] ;
116
+ for ( const [ key , value ] of Object . entries ( kafkaJSHeaders ) ) {
117
+ if ( value . constructor === Array ) {
118
+ for ( const v of value ) {
119
+ headers . push ( { key, value : v } ) ;
120
+ }
121
+ } else {
122
+ headers . push ( { key, value } ) ;
123
+ }
124
+ }
125
+ return headers ;
126
+ }
127
+
101
128
module . exports = {
102
129
kafkaJSToRdKafkaConfig,
103
130
topicPartitionOffsetToRdKafka,
104
131
createKafkaJsErrorFromLibRdKafkaError,
132
+ convertToRdKafkaHeaders,
105
133
} ;
0 commit comments