npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@fappurbate/transmitter

v0.3.0

Published

Wrapper around Fappurbate Message Passing API and @fappurbate/channel.

Downloads

4

Readme

@fappurbate/transmitter

Wrapper around Fappurbate Message Passing API and @fappurbate/channel.

Documentation

Class: Transmitter

Imitates Fappurbate Message Passing API by forwarding messages and requests for @bot through Channel.

new Transmitter(options)
  • options.botChannel Channel? If not specified, a channel will be created with the name ${SOME_CHARS}_${fb.runtime.name}.
onEvent.addListener(subject, callback): this
  • subject string Name of the event to listen to.
  • callback (string, any) => void Callback will be called on a given event with the sender name and data attached as arguments.

Add a listener for a given event subject.

onEvent.removeListener(subject, callback): this
  • subject string Name of the event.
  • callback (string, any) => void The same callback that was passed to onEvent.addListener.

Remove an event listener.

onRequest.addHandler(subject, handler): this
  • subject string Name of the request.
  • handler (string, any => void|any|Promise) Handler will be called on a given request.

Add a handler for a given request subject. It will be called with the sender name and data attached as arguments. If the handler returns a non-undefined value, no subsequently added handlers will be called. If throws an error, it is sent back to the bot (app) as an error response. May also return a Promise.

onRequest.removeHandler(subject, handler): this
  • subject string Name of the request.
  • handler (string, any => void|any|Promise) The same handler that was passed to onRequest.addHandler.

Remove a request handler.

close(): void

Unregister all event listeners. After this the transmitter is usable no more. Do it before you try to create another Transmitter.

emitEvent(receivers, subject, data): void
  • receivers string[] Receivers. Can also include @bot.
  • subject string Name of the event.
  • data any? Data to send with the event. Must be serializable.

Send an event to pages and/or the bot.

sendRequest(receiver, subject, data): Promise
  • receiver srting Receiver of the request. Can only be @bot.
  • subject string Name of the request.
  • data any? Data to send with the request. Must be serializable.

Send a request to pages and/or the bot. If an error response is received, returns a promise that rejects with a Transmitter.Failure that contains attached data. It is to distinguish an error response from other errors like network errors, timeout, etc.

forwardEvent(subject, sender|senders, receiever|receivers, [transform]): Function
  • subject string Event to forward.
  • sender|senders string|string[] Can be pages or @bot.
  • receiver|receivers string|string[] Can be pages or @bot.
  • transform object? Transform object. Used to transform event data or to change its subject.
  • Returns: Function Call it to cancel forwarding.
Example:
const transmitter = new Transmitter;
const unforward = transmitter.forwardEvent('tip', '@bot', 'statistics', {
  redirect: 'tip-received',                                            // Change subject: tip -> tip-received
  transform: ({ tipper, amount }) => ({ tipper, amount: amount / 20 }) // Transform event data: tokens -> US dollars
});

Transform functions can also return a Promise.

forwardEvents(subjects, sender|senders, receiever|receivers, [transform]): Function
  • subjects string[] Events to forward.
  • sender|senders string|string[] Can be pages or @bot.
  • receiver|receivers string|string[] Can be pages or @bot.
  • transform object? Transform object. Used to transform event data or to change its subject.
  • Returns: Function Call it to cancel forwarding.
Example:
const transmitter = new Transmitter;
const unforward = transmitter.forwardEvents(
  ['tip', 'private-show-start', 'private-show-end'], '@bot', 'statistics',
  {
    tip: {
      redirect: 'tip-received', // Change subject: tip -> tip-received
      transform: ({ tipper, amount }) => ({ tipper, amount: amount / 20 }) // Transform event data: tokens -> US dollars
    },
    $default: {
      redirect: subject => subject + 'ed' // Change subject: private-show-{start,end} -> private-show-{started,ended}
    }
  }
);

Transform functions can also return a Promise.

forwardRequest(subject, sender|senders, receiver, [transform]): Function
  • subject string Request to forward.
  • sender|senders string|string[] Can only be pages.
  • receiver string Can only be @bot.
  • transform object? Transform object. Used to transform request and response payload or to change subject.
  • Returns: Function Call it to cancel forwarding.
Example:
const transmitter = new Transmitter;
const unforward = transmitter.forwardRequest('my-request', ['page1', 'page2'], '@bot', {
  redirect: 'my-request-in-@bot', // Change subject: my-request -> my-request-in-@bot
  async transformRequest(data) { // Transform payload before it is sent to @bot
    // do something awfully asynchronous, for example
    return data;
  }
});

Transform functions can also return a Promise.

forwardRequests(subjects, sender|senders, receiver, [transform]): Function
  • subjects string[] Request to forward.
  • sender|senders string|string[] Can only be pages.
  • receiver string Can only be @bot.
  • transform object? Transform object. Used to transform request and response payload or to change subject.
  • Returns: Function Call it to cancel forwarding.
Example:
const transmitter = new Transmitter;
const unforward = transmitter.forwardRequests(
  ['my-request1', 'my-request2'], 'page8', '@bot',
  {
    'my-request1': {
      redirect: subject => subject + subject, // Redirect: my-request1 -> 'my-request1my-request1'
      transformRequest(data) { // Transform payload before it is sent to @bot
        // do anything you like
        return data;
      },
      async transformResponse(data) { // Transform response payload before getting it to sender
        /* If error response */
        if (data instanceof Transmitter.Failure) {
          console.log(`Let's log our error and pass it on untouched: `, data);
          throw data;
        }

        /* else if successul response */
        const stuff = await getSomeStuff();
        if (stuff.isBad()) {
          data.stuff = null;
          data.badStuff = true;
          throw new Transmitter.Failure(data); // Response with an error even though a successful response was received
        }

        data.stuff = stuff;
        return data;
      }
    },
    $default: {
      redirect: 'somewhere' // Redirect: my-request2 -> somewhere
    }
  }
);

Transform functions can also return a Promise.

Class: Failure

Re-exported from Channel.Failure. A subclass of fb.Error that represents an error response from sendRequest(receiver, subject, data).

new Failure(data)
  • data any? default: {} Data to attach.
name
  • string === 'Failure'
type
  • string === 'ERR_FAILURE'