/fastify-se

Plugin for fastify server events. https://www.fastify.io/

Primary LanguageJavaScript

fastify-se

Fastify plugin for handle Server-sent Events. https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events

INSTALATION

npm i fastify-se

USAGE

const fastify_se = require("fastify-se");

const SE = new fastify_se.SE(opts);

fastify.register(SE.plugin);

OPTIONS

this["seidGenerator"] = opts.seidGenerator || defaultSeidGenerator;
this["stream"] = opts.stream || stream.PassThrough;
this["streamOptions"] = opts.streamOptions || { allowHalfOpen: false };
this["autoGenerateId"] = opts.autoGenerateId || true;
this["serverTimeout"] = opts.serverTimeout || 120000;
this["clients"] = {};
  • seidGenerator : Return a seid (Server event ID) for object key to store reply in clients object, clients[seid]= reply;.
  • stream : Stream class will be passing to reply.send(stream).
  • streamOptions : Options for create new stream, new stream(streamOptions).
  • autoGenerateId : If true. The library will automatically create id in every sendEvent.
  • serverTimeout : Set timeout for incoming messages, default 120000ms or equal to 2s, in ms.
  • clients : All active reply will be store in this object with seid as a key. The reply will deleted after connection closed.

METHODS

  • reply.sendEvent(data, ?event, ?id, ?retry) :

    • data : Data will send to client, string or object.
    • event (Optional) : Event name will emit in client.
    • id (Optional) : ID for every event action.
    • retry (Optional) : Interval time to reconnecting to server if connection lost (In ms).
  • reply.sendEventBySeid(seid, data, ?event, ?id, ?retry) :

    • seid : Server event ID, you can get it on req.seid in every http.get request.
  • reply.endEvent() : To close the connection and delete reply value in clients object with key same as req.seid value.

You can see more information about data, event, id andretry in : Server-sent Events - Fields.

EXAMPLE

fastify.get("/events", function(request, reply) {
  reply.sendEvent("hello world", "greeting");

  // OR data with type object

  reply.sendEvent({
    data: {
      from: "@other_people",
      message: "hey guy",
      date: "x-x-x-x"
    },
    event: "new_private_message"
  });

  // If you want to trigger event for other client

  reply.sendEventBySeid(
    "@my_friend", // Your custom seid
    {
      data: {
        from: "@my_friend",
        message: "my name is x"
      },
      event: "send_new_message"
    }
  );

  // Important
  reply.endEvent();

  // reply.sendEvent will throw error if you call it in here
  reply.sendEvent("hello world", "greeting");
});