Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@relaycorp/cloudevents-transport

Package Overview
Dependencies
Maintainers
0
Versions
46
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@relaycorp/cloudevents-transport

Node.js library to send/receive CloudEvents over HTTP binary or any cloud-specific service like GCP PubSub

  • 2.0.27
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
4
decreased by-50%
Maintainers
0
Weekly downloads
 
Created
Source

@relaycorp/cloudevents-transport

This is a Node.js library to send/receive CloudEvents over the following transports:

Emitters

To create an emitter, simply pass the name of the transport and the channel to the makeEmitter function. For example:

import type { EmitterFunction } from 'cloudevents';
import { makeEmitter } from '@relaycorp/cloudevents-transport';

const transport = process.env.CE_TRANSPORT_NAME ?? 'ce-http-binary';
const channel = process.env.CE_CHANNEL ?? 'https://cloudevents-broker.com';
const emitter: EmitterFunction = await makeEmitter(transport, channel);

Refer to the documentation of each transport below to learn about the structure channel parameter.

Then the emitter can be used as a regular EmitterFunction from the cloudevents library. For example:

import { CloudEvent } from 'cloudevents';

const event = new CloudEvent({
  type: 'com.example.some-event',
  source: 'https://example.com',
  data: 'Hello, world!',
});
await emitter(event);

Receivers

To create a receiver, simply pass the name of the transport to the makeReceiver function. For example:

import { makeReceiver } from '@relaycorp/cloudevents-transport';

const transport = process.env.CE_TRANSPORT_NAME ?? 'ce-http-binary';
const receiver = await makeReceiver(transport);

Then the receiver can be used to convert cloudevents Messages to CloudEventV1s. For example, using Fastify:

import { makeReceiver } from '@relaycorp/cloudevents-transport';
import type { CloudEventV1 } from 'cloudevents';
import type { FastifyInstance, FastifyPluginOptions } from 'fastify';

export async function registerEventReceiver(server: FastifyInstance): Promise<void> {
  // Accept any content type
  server.removeAllContentTypeParsers();
  server.addContentTypeParser('*', { parseAs: 'buffer' }, (_request, payload, next) => {
    next(null, payload);
  });

  // Initialise the receiver once and reuse it across requests
  const transport = process.env.CE_TRANSPORT_NAME ?? 'ce-http-binary';
  const convertMessageToEvent = await makeReceiver(transport);

  server.post('/', async (request, reply) => {
    let event: CloudEventV1<Buffer>;
    try {
      event = convertMessageToEvent(request.headers, request.body);
    } catch (err) {
      return reply.status(400).send({ reason: err.message });
    }

    return reply.status(200).send({ eventId: event.id });
  });
}

Supported transports

ce-http-binary

This is the standard CloudEvents HTTP transport, in binary mode.

The channel passed to the emitter must be the URL of the CloudEvents endpoint that will receive the events.

google-pubsub

This transport doesn't actually use CloudEvents at all -- it simply converts the CloudEvent to a Google PubSub message and vice versa. Fields between the two formats are mapped as follows:

CloudEvent fieldPubSub field
idmessageId
timepublishTime
datadata

All other CloudEvents fields, including extensions, are mapped to PubSub attributes with the same name.

The channel passed to the emitter must be the name of the PubSub topic where messages are to be published.

Keywords

FAQs

Package last updated on 31 Aug 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc