Skip to content

Instantly share code, notes, and snippets.

@polymeris
Created November 24, 2018 00:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save polymeris/d20a5a2aad02fa83f36ee0b57ed96496 to your computer and use it in GitHub Desktop.
Save polymeris/d20a5a2aad02fa83f36ee0b57ed96496 to your computer and use it in GitHub Desktop.
GraphQL subscriptions over Websockets from Clojurescript on Node
;; Add to cljsbuild
;; :npm-deps {:graphql-tag "2.10.0"
;; :apollo-link "1.2.4"
;; :apollo-link-ws "1.0.10"
;; :subscriptions-transport-ws "0.9.15"
;; :ws "6.1.2"}
;; :install-deps true
(ns example.graphql
(:require
[apollo-link :refer [execute]]
[apollo-link-ws :refer [WebSocketLink]]
[graphql-tag :as gql]
[subscriptions-transport-ws :refer [SubscriptionClient]]
[ws]))
(defn client
[{:keys [uri]}]
(SubscriptionClient. uri #js {:reconnect true} ws))
(defn subscription
[client query vars on-data on-err]
(-> (WebSocketLink. client)
(execute (clj->js {:query (gql query)
:variables vars}))
(.subscribe (fn [data] (-> (js->clj data :keywordize-keys true)
:data
(on-data)))
(fn [err] (-> (js->clj err :keywordize-keys true)
(on-err))))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment