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

@jumpn/absinthe-phoenix-socket

Package Overview
Dependencies
Maintainers
1
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@jumpn/absinthe-phoenix-socket

Absinthe Phoenix Socket

  • 0.2.0
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

@jumpn/absinthe-phoenix-socket

Absinthe Phoenix Socket

  • Features
  • Installation
  • Types
  • API
  • License

Features

  • Immutable functional API

    All received and returned objects with the exception of AbsintheSocket instances (there are plans to make this immutable too) are treated in an immutable way. Objects have no methods and instead we provide independant stateless functions to interact with them.

  • Lazy connect / join

    If provided phoenix socket instance is not connected, then instead of connecting at creation time, connection will be established on the next invocation of send.

  • Reconnect channel on connection lost

    Phoenix socket reconnects on connection lost but it doesn't rejoin to the channel automatically, we do.

  • Handle pending operations on connection lost

    Pending mutations will be aborted, queries will be resent, and subscriptions reestablished.

  • Observer support of recoverable errors

    Since connection lost is handled, then two events needs to exist to represent this fact: Error (recoverable), Abort (unrecoverable).

  • Multiple observers per request

    Calling send returns a notifier which allows attaching any number of observers that will be notified when result arrives.

  • Observer interaction depending on operation type

    For the case of subscriptions, Start event is dispatched when the subscription is established, while for the other types (queries and mutations), when the request is sent.

Installation

Using npm

$ npm install --save @jumpn/absinthe-phoenix-socket

Using yarn

$ yarn add @jumpn/absinthe-phoenix-socket

Types

type Event = "Abort" | "Error" | "Start" | "Stop" | "Value";

type Observer<Value> = {
  onAbort: (error: Error) => any,
  onError: (error: Error) => any,
  onStart: () => any,
  onValue: (value: Value) => any
};

type Notifier<Result> = {
  observers: Array<Observer<Result>>,
  operationType: GqlOperationType,
  request: GqlRequest<*>,
  subscriptionId?: string
};

type AbsintheSocket = {
  channel: Channel,
  isJoining: boolean,
  notifiers: Array<Notifier<any>>,
  phoenixSocket: PhoenixSocket
};

API

create

Creates an Absinthe Socket using the given Phoenix Socket instance

Parameters

  • phoenixSocket PhoenixSocket

Examples

import * as AbsintheSocket from "@jumpn/absinthe-phoenix-socket";
import {Socket as PhoenixSocket} from "phoenix";

const absintheSocket = AbsintheSocket.create(
  new PhoenixSocket("ws://localhost:4000/socket")
);

Returns AbsintheSocket

discard

Discards a notifier sending a Stop event to all its observers and unsubscribing in case it holds a subscription request

Parameters

  • absintheSocket AbsintheSocket
  • notifier Notifier<any>

Examples

import * as AbsintheSocket from "@jumpn/absinthe-phoenix-socket";

AbsintheSocket.discard(absintheSocket, notifier);

Returns AbsintheSocket

observe

Observes given notifier using the provided observer

Parameters

  • absintheSocket AbsintheSocket
  • notifier Notifier<Value>
  • observer Observer<Value>

Examples

import AbsintheSocket from "@jumpn/absinthe-phoenix-socket"

const logEvent = eventName => (...args) => console.log(eventName, ...args);

const updatedNotifier = AbsintheSocket.observe(absintheSocket, notifier, {
  onAbort: logEvent("abort"),
  onError: logEvent("error"),
  onStart: logEvent("open"),
  onValue: logEvent("next")
});

Returns AbsintheSocket

send

Sends given request and returns an object (notifier) to track its progress (see observe function)

Parameters

  • absintheSocket AbsintheSocket
  • request GqlRequest<any>

Examples

import * as AbsintheSocket from "@jumpn/absinthe-phoenix-socket";

const operation = `
  subscription userSubscription($userId: ID!) {
    user(userId: $userId) {
      id
      name
    }
  }
`;

// This example uses a subscription, but the functionallity is the same for
// all operation types (queries, mutations and subscriptions)

const notifier = AbsintheSocket.send(absintheSocket, {
  operation,
  variables: {userId: 10}
});

Returns Notifier<any>

unobserve

Detaches observer from notifier

Parameters

  • absintheSocket AbsintheSocket
  • notifier Notifier<any>
  • observer Observer<any>

Examples

import * as AbsintheSocket from "@jumpn/absinthe-phoenix-socket";

AbsintheSocket.unobserve(absintheSocket, notifier, observer);

Returns AbsintheSocket

License

MIT :copyright: Jumpn Limited / Mauro Titimoli (mauro@jumpn.com)

Keywords

FAQs

Package last updated on 27 Oct 2017

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