@creditkarma/thrift-context-filter

Express server middleware for the Apache Thrift protocol

Usage no npm install needed!

<script type="module">
  import creditkarmaThriftContextFilter from 'https://cdn.skypack.dev/@creditkarma/thrift-context-filter';
</script>

README

Thrift Context Filter

When using Thrift over HTTP we can use HTTP headers to pass context/metadata between services (tracing, auth). When using TCP we don't have this. Among the options to solve this is to prepend an object onto the head of our TCP payload. @creditkarma/thrift-client comes with two filters for helping with this situation.

Installation

ThriftContextFilter has a few peerDependencies.

npm install --save @creditkarma/thrift-server-core
npm install --save @creditkarma/thrift-client
npm install --save @creditkarma/thrift-context-filter

Usage

This plugin writes a Thrift struct onto the head of an outgoing payload and reads a struct off of the head of an incoming payload.

import {
    createTcpClient,
} from '@creditkarma/thrift-client'

import {
    ThriftContextFilter,
} from '@creditkarma/thrift-context-filter'

import {
    RequestContext,
    ResponseContext,
} from './codegen/metadata'

import {
    Calculator,
} from './codegen/calculator'

const thriftClient: Calculator.Client<RequestContext> =
    createTcpClient(Calculator.Client, {
        hostName: 'localhost',
        port: 8080,
        register: [ ThriftContextFilter<RequestContext, ResponseContext>({
            RequestContextClass: RequestContext,
        }) ]
    })

thriftClient.add(5, 6, new RequestContext({ traceId: 3827293 })).then((response: number) => {
    // Do stuff...
})

Options

Available options for ThriftContextFilter:

  • RequestContextClass (required): A class (extending StructLike) that is to be prepended to outgoing requests.
  • ResponseContextClass (optional): A class (extending StructLike) that is prepended to incoming responses. Defaults to nothing.
  • transportType (optional): The type of transport to use. Currently only 'buffered'.
  • protocolType (optional): The type of protocol to use, either 'binary' or 'compact'.

Contributing

For more information about contributing new features and bug fixes, see our Contribution Guidelines. External contributors must sign Contributor License Agreement (CLA)

License

This project is licensed under Apache License Version 2.0