How do I add headers to Rsocket metadata - JavaScript?

243 Views Asked by At

Javascript side, How do I add Accept-Language header to Rsocket stream? I need to add this somehow to the metadata but I can't find documentation for it

this is my setup:

    setup: {
      keepAlive: 25000,
      lifetime: 180000,
      dataMimeType: APPLICATION_JSON.string,
      metadataMimeType: MESSAGE_RSOCKET_COMPOSITE_METADATA.string
    },
    transport: new RSocketWebSocketClient({
      url: `my url`
    }, BufferEncoders)
  }


const metadata = encodeAndAddWellKnownMetadata(
    Buffer.alloc(0),
    MESSAGE_RSOCKET_ROUTING,
    routeMetadata
  );

  _socket.requestStream({
    data: Buffer.from(JSON.stringify(data)),
    metadata,
  }).subscribe({
    onNext: (payload) => receivedData(payload.data),
    onError: (error) => console.log(error),
    onSubscribe: (subscription) => subscription.request(MAX_STREAM_ID),
  });
2

There are 2 best solutions below

0
On BEST ANSWER

Got it, In the request stream, add to metadata:

const metadata = encodeAndAddWellKnownMetadata(
    encodeAndAddCustomMetadata(
      Buffer.alloc(0),
      "message/accept-language",
      Buffer.from("en-US"),
    ),
    MESSAGE_RSOCKET_ROUTING,
    routeMetadata,
  )

  _socket.requestStream({
    data: Buffer.from(JSON.stringify(data)),
    metadata,
  }).subscribe({
    onNext: (payload) => receivedData(payload.data),
    onError: (error) => console.log(error?.source),
    onSubscribe: (subscription) => subscription.request(MAX_STREAM_ID),
  });
1
On

You can add headers to setup object in RSocketClient options object.

Example:

const headers = { 'Accept-Language': 'en-US' }

new RSocketClient({
        setup: {
            keepAlive: 25000,
            lifetime: 180000,
            dataMimeType: APPLICATION_JSON.string,
            metadataMimeType: MESSAGE_RSOCKET_COMPOSITE_METADATA.string,
            payload: headers,
        },
        transport: new RSocketWebSocketClient({
            url: `my url`
        }, BufferEncoders),
    })