@@ -22,7 +22,7 @@ export type {
2222 * Bindings for Kafka transport
2323 * @implements {@linkcode Binding }
2424 */
25- const Kafka : Binding = {
25+ const Kafka : Binding < KafkaMessage < unknown > , KafkaMessage < string > > = {
2626 binary : toBinaryKafkaMessage ,
2727 structured : toStructuredKafkaMessage ,
2828 toEvent : deserializeKafkaMessage ,
@@ -35,9 +35,9 @@ type Key = string | Buffer;
3535 * Extends the base Message type to include
3636 * Kafka-specific fields
3737 */
38- interface KafkaMessage < T = string > extends Message {
38+ interface KafkaMessage < T = string | Buffer | unknown > extends Message {
3939 key : Key
40- value : T | string | Buffer | unknown
40+ value : T
4141 timestamp ?: string
4242}
4343
@@ -61,7 +61,7 @@ interface KafkaEvent<T> extends CloudEventV1<T> {
6161 * @param {KafkaEvent<T> } event The event to serialize
6262 * @returns {KafkaMessage<T> } a KafkaMessage instance
6363 */
64- function toBinaryKafkaMessage < T > ( event : CloudEventV1 < T > ) : KafkaMessage < T > {
64+ function toBinaryKafkaMessage < T > ( event : CloudEventV1 < T > ) : KafkaMessage < T | undefined > {
6565 // 3.2.1. Content Type
6666 // For the binary mode, the header content-type property MUST be mapped directly
6767 // to the CloudEvents datacontenttype attribute.
@@ -86,7 +86,7 @@ function toBinaryKafkaMessage<T>(event: CloudEventV1<T>): KafkaMessage<T> {
8686 * @param {CloudEvent<T> } event the CloudEvent to be serialized
8787 * @returns {KafkaMessage<T> } a KafkaMessage instance
8888 */
89- function toStructuredKafkaMessage < T > ( event : CloudEventV1 < T > ) : KafkaMessage < T > {
89+ function toStructuredKafkaMessage < T > ( event : CloudEventV1 < T > ) : KafkaMessage < string > {
9090 if ( ( event instanceof CloudEvent ) && event . data_base64 ) {
9191 // The event's data is binary - delete it
9292 event = event . cloneWith ( { data : undefined } ) ;
@@ -130,9 +130,9 @@ function deserializeKafkaMessage<T>(message: Message): CloudEvent<T> | CloudEven
130130 case Mode . BINARY :
131131 return parseBinary ( m ) ;
132132 case Mode . STRUCTURED :
133- return parseStructured ( m ) ;
133+ return parseStructured ( m as unknown as KafkaMessage < string > ) ;
134134 case Mode . BATCH :
135- return parseBatched ( m ) ;
135+ return parseBatched ( m as unknown as KafkaMessage < string > ) ;
136136 default :
137137 throw new ValidationError ( "Unknown Message mode" ) ;
138138 }
@@ -212,14 +212,14 @@ function parseBinary<T>(message: KafkaMessage<T>): CloudEvent<T> {
212212 * @param {KafkaMessage<T> } message the message
213213 * @returns {CloudEvent<T> } a KafkaEvent<T>
214214 */
215- function parseStructured < T > ( message : KafkaMessage < T > ) : CloudEvent < T > {
215+ function parseStructured < T > ( message : KafkaMessage < string > ) : CloudEvent < T > {
216216 // Although the format of a structured encoded event could be something
217217 // other than JSON, e.g. XML, we currently only support JSON
218218 // encoded structured events.
219219 if ( ! message . headers [ CONSTANTS . HEADER_CONTENT_TYPE ] ?. startsWith ( CONSTANTS . MIME_CE_JSON ) ) {
220220 throw new ValidationError ( `Unsupported event encoding ${ message . headers [ CONSTANTS . HEADER_CONTENT_TYPE ] } ` ) ;
221221 }
222- const eventObj = JSON . parse ( message . value as string ) ;
222+ const eventObj = JSON . parse ( message . value ) ;
223223 eventObj . time = new Date ( eventObj . time ) . toISOString ( ) ;
224224 return new CloudEvent ( {
225225 ...eventObj ,
@@ -232,14 +232,14 @@ function parseStructured<T>(message: KafkaMessage<T>): CloudEvent<T> {
232232 * @param {KafkaMessage<T> } message the message
233233 * @returns {CloudEvent<T>[] } an array of KafkaEvent<T>
234234 */
235- function parseBatched < T > ( message : KafkaMessage < T > ) : CloudEvent < T > [ ] {
235+ function parseBatched < T > ( message : KafkaMessage < string > ) : CloudEvent < T > [ ] {
236236 // Although the format of batch encoded events could be something
237237 // other than JSON, e.g. XML, we currently only support JSON
238238 // encoded structured events.
239239 if ( ! message . headers [ CONSTANTS . HEADER_CONTENT_TYPE ] ?. startsWith ( CONSTANTS . MIME_CE_BATCH ) ) {
240240 throw new ValidationError ( `Unsupported event encoding ${ message . headers [ CONSTANTS . HEADER_CONTENT_TYPE ] } ` ) ;
241241 }
242- const events = JSON . parse ( message . value as string ) as Record < string , unknown > [ ] ;
242+ const events = JSON . parse ( message . value ) as Record < string , unknown > [ ] ;
243243 return events . map ( ( e ) => new CloudEvent ( { ...e , partitionkey : message . key } , false ) ) ;
244244}
245245
0 commit comments