{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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","sourcesContent":["declare let window: any;\nconst _global = typeof global !== 'undefined' ? global : (typeof window !== 'undefined' ? window : {});\nconst NativeWebSocket = _global.WebSocket || _global.MozWebSocket;\n\nimport * as Backoff from 'backo2';\nimport { default as EventEmitterType, EventEmitter, ListenerFn } from 'eventemitter3';\nimport isString from './utils/is-string';\nimport isObject from './utils/is-object';\nimport { ExecutionResult } from 'graphql/execution/execute';\nimport { print } from 'graphql/language/printer';\nimport { DocumentNode } from 'graphql/language/ast';\nimport { getOperationAST } from 'graphql/utilities/getOperationAST';\nimport $$observable from 'symbol-observable';\n\nimport { GRAPHQL_WS } from './protocol';\nimport { MIN_WS_TIMEOUT, WS_TIMEOUT } from './defaults';\nimport MessageTypes from './message-types';\n\nexport interface Observer {\n next?: (value: T) => void;\n error?: (error: Error) => void;\n complete?: () => void;\n}\n\nexport interface Observable {\n subscribe(observer: Observer): {\n unsubscribe: () => void;\n };\n}\n\nexport interface OperationOptions {\n query?: string | DocumentNode;\n variables?: Object;\n operationName?: string;\n [key: string]: any;\n}\n\nexport type FormatedError = Error & {\n originalError?: any;\n};\n\nexport interface Operation {\n options: OperationOptions;\n handler: (error: Error[], result?: any) => void;\n}\n\nexport interface Operations {\n [id: string]: Operation;\n}\n\nexport interface Middleware {\n applyMiddleware(options: OperationOptions, next: Function): void;\n}\n\nexport type ConnectionParams = {\n [paramName: string]: any,\n};\n\nexport type ConnectionParamsOptions = ConnectionParams | Function | Promise;\n\nexport interface ClientOptions {\n connectionParams?: ConnectionParamsOptions;\n minTimeout?: number;\n timeout?: number;\n reconnect?: boolean;\n reconnectionAttempts?: number;\n connectionCallback?: (error: Error[], result?: any) => void;\n lazy?: boolean;\n inactivityTimeout?: number;\n wsOptionArguments?: any[];\n}\n\nexport class SubscriptionClient {\n public client: any;\n public operations: Operations;\n private url: string;\n private nextOperationId: number;\n private connectionParams: Function;\n private minWsTimeout: number;\n private wsTimeout: number;\n private unsentMessagesQueue: Array; // queued messages while websocket is opening.\n private reconnect: boolean;\n private reconnecting: boolean;\n private reconnectionAttempts: number;\n private backoff: any;\n private connectionCallback: any;\n private eventEmitter: EventEmitterType;\n private lazy: boolean;\n private inactivityTimeout: number;\n private inactivityTimeoutId: any;\n private closedByUser: boolean;\n private wsImpl: any;\n private wsProtocols: string | string[];\n private wasKeepAliveReceived: boolean;\n private tryReconnectTimeoutId: any;\n private checkConnectionIntervalId: any;\n private maxConnectTimeoutId: any;\n private middlewares: Middleware[];\n private maxConnectTimeGenerator: any;\n private wsOptionArguments: any[];\n\n constructor(\n url: string,\n options?: ClientOptions,\n webSocketImpl?: any,\n webSocketProtocols?: string | string[],\n ) {\n const {\n connectionCallback = undefined,\n connectionParams = {},\n minTimeout = MIN_WS_TIMEOUT,\n timeout = WS_TIMEOUT,\n reconnect = false,\n reconnectionAttempts = Infinity,\n lazy = false,\n inactivityTimeout = 0,\n wsOptionArguments = [],\n } = (options || {});\n\n this.wsImpl = webSocketImpl || NativeWebSocket;\n if (!this.wsImpl) {\n throw new Error('Unable to find native implementation, or alternative implementation for WebSocket!');\n }\n\n this.wsProtocols = webSocketProtocols || GRAPHQL_WS;\n this.connectionCallback = connectionCallback;\n this.url = url;\n this.operations = {};\n this.nextOperationId = 0;\n this.minWsTimeout = minTimeout;\n this.wsTimeout = timeout;\n this.unsentMessagesQueue = [];\n this.reconnect = reconnect;\n this.reconnecting = false;\n this.reconnectionAttempts = reconnectionAttempts;\n this.lazy = !!lazy;\n this.inactivityTimeout = inactivityTimeout;\n this.closedByUser = false;\n this.backoff = new Backoff({ jitter: 0.5 });\n this.eventEmitter = new EventEmitter();\n this.middlewares = [];\n this.client = null;\n this.maxConnectTimeGenerator = this.createMaxConnectTimeGenerator();\n this.connectionParams = this.getConnectionParams(connectionParams);\n this.wsOptionArguments = wsOptionArguments;\n\n if (!this.lazy) {\n this.connect();\n }\n }\n\n public get status() {\n if (this.client === null) {\n return this.wsImpl.CLOSED;\n }\n\n return this.client.readyState;\n }\n\n public close(isForced = true, closedByUser = true) {\n this.clearInactivityTimeout();\n if (this.client !== null) {\n this.closedByUser = closedByUser;\n\n if (isForced) {\n this.clearCheckConnectionInterval();\n this.clearMaxConnectTimeout();\n this.clearTryReconnectTimeout();\n this.unsubscribeAll();\n this.sendMessage(undefined, MessageTypes.GQL_CONNECTION_TERMINATE, null);\n }\n\n this.client.close();\n this.client.onopen = null;\n this.client.onclose = null;\n this.client.onerror = null;\n this.client.onmessage = null;\n this.client = null;\n this.eventEmitter.emit('disconnected');\n\n if (!isForced) {\n this.tryReconnect();\n }\n }\n }\n\n public request(request: OperationOptions): Observable {\n const getObserver = this.getObserver.bind(this);\n const executeOperation = this.executeOperation.bind(this);\n const unsubscribe = this.unsubscribe.bind(this);\n\n let opId: string;\n\n this.clearInactivityTimeout();\n\n return {\n [$$observable]() {\n return this;\n },\n subscribe(\n observerOrNext: ((Observer) | ((v: ExecutionResult) => void)),\n onError?: (error: Error) => void,\n onComplete?: () => void,\n ) {\n const observer = getObserver(observerOrNext, onError, onComplete);\n\n opId = executeOperation(request, (error: Error[], result: any) => {\n if ( error === null && result === null ) {\n if ( observer.complete ) {\n observer.complete();\n }\n } else if (error) {\n if ( observer.error ) {\n observer.error(error[0]);\n }\n } else {\n if ( observer.next ) {\n observer.next(result);\n }\n }\n });\n\n return {\n unsubscribe: () => {\n if ( opId ) {\n unsubscribe(opId);\n opId = null;\n }\n },\n };\n },\n };\n }\n\n public on(eventName: string, callback: ListenerFn, context?: any): Function {\n const handler = this.eventEmitter.on(eventName, callback, context);\n\n return () => {\n handler.off(eventName, callback, context);\n };\n }\n\n public onConnected(callback: ListenerFn, context?: any): Function {\n return this.on('connected', callback, context);\n }\n\n public onConnecting(callback: ListenerFn, context?: any): Function {\n return this.on('connecting', callback, context);\n }\n\n public onDisconnected(callback: ListenerFn, context?: any): Function {\n return this.on('disconnected', callback, context);\n }\n\n public onReconnected(callback: ListenerFn, context?: any): Function {\n return this.on('reconnected', callback, context);\n }\n\n public onReconnecting(callback: ListenerFn, context?: any): Function {\n return this.on('reconnecting', callback, context);\n }\n\n public onError(callback: ListenerFn, context?: any): Function {\n return this.on('error', callback, context);\n }\n\n public unsubscribeAll() {\n Object.keys(this.operations).forEach( subId => {\n this.unsubscribe(subId);\n });\n }\n\n public applyMiddlewares(options: OperationOptions): Promise {\n return new Promise((resolve, reject) => {\n const queue = (funcs: Middleware[], scope: any) => {\n const next = (error?: any) => {\n if (error) {\n reject(error);\n } else {\n if (funcs.length > 0) {\n const f = funcs.shift();\n if (f) {\n f.applyMiddleware.apply(scope, [options, next]);\n }\n } else {\n resolve(options);\n }\n }\n };\n next();\n };\n\n queue([...this.middlewares], this);\n });\n }\n\n public use(middlewares: Middleware[]): SubscriptionClient {\n middlewares.map((middleware) => {\n if (typeof middleware.applyMiddleware === 'function') {\n this.middlewares.push(middleware);\n } else {\n throw new Error('Middleware must implement the applyMiddleware function.');\n }\n });\n\n return this;\n }\n\n private getConnectionParams(connectionParams: ConnectionParamsOptions): Function {\n return (): Promise => new Promise((resolve, reject) => {\n if (typeof connectionParams === 'function') {\n try {\n return resolve(connectionParams.call(null));\n } catch (error) {\n return reject(error);\n }\n }\n\n resolve(connectionParams);\n });\n }\n\n private executeOperation(options: OperationOptions, handler: (error: Error[], result?: any) => void): string {\n if (this.client === null) {\n this.connect();\n }\n\n const opId = this.generateOperationId();\n this.operations[opId] = { options: options, handler };\n\n this.applyMiddlewares(options)\n .then(processedOptions => {\n this.checkOperationOptions(processedOptions, handler);\n if (this.operations[opId]) {\n this.operations[opId] = { options: processedOptions, handler };\n this.sendMessage(opId, MessageTypes.GQL_START, processedOptions);\n }\n })\n .catch(error => {\n this.unsubscribe(opId);\n handler(this.formatErrors(error));\n });\n\n return opId;\n }\n\n private getObserver(\n observerOrNext: ((Observer) | ((v: T) => void)),\n error?: (e: Error) => void,\n complete?: () => void,\n ) {\n if ( typeof observerOrNext === 'function' ) {\n return {\n next: (v: T) => observerOrNext(v),\n error: (e: Error) => error && error(e),\n complete: () => complete && complete(),\n };\n }\n\n return observerOrNext;\n }\n\n private createMaxConnectTimeGenerator() {\n const minValue = this.minWsTimeout;\n const maxValue = this.wsTimeout;\n\n return new Backoff({\n min: minValue,\n max: maxValue,\n factor: 1.2,\n });\n }\n\n private clearCheckConnectionInterval() {\n if (this.checkConnectionIntervalId) {\n clearInterval(this.checkConnectionIntervalId);\n this.checkConnectionIntervalId = null;\n }\n }\n\n private clearMaxConnectTimeout() {\n if (this.maxConnectTimeoutId) {\n clearTimeout(this.maxConnectTimeoutId);\n this.maxConnectTimeoutId = null;\n }\n }\n\n private clearTryReconnectTimeout() {\n if (this.tryReconnectTimeoutId) {\n clearTimeout(this.tryReconnectTimeoutId);\n this.tryReconnectTimeoutId = null;\n }\n }\n\n private clearInactivityTimeout() {\n if (this.inactivityTimeoutId) {\n clearTimeout(this.inactivityTimeoutId);\n this.inactivityTimeoutId = null;\n }\n }\n\n private setInactivityTimeout() {\n if (this.inactivityTimeout > 0 && Object.keys(this.operations).length === 0) {\n this.inactivityTimeoutId = setTimeout(() => {\n if (Object.keys(this.operations).length === 0) {\n this.close();\n }\n }, this.inactivityTimeout);\n }\n }\n\n private checkOperationOptions(options: OperationOptions, handler: (error: Error[], result?: any) => void) {\n const { query, variables, operationName } = options;\n\n if (!query) {\n throw new Error('Must provide a query.');\n }\n\n if (!handler) {\n throw new Error('Must provide an handler.');\n }\n\n if (\n ( !isString(query) && !getOperationAST(query, operationName)) ||\n ( operationName && !isString(operationName)) ||\n ( variables && !isObject(variables))\n ) {\n throw new Error('Incorrect option types. query must be a string or a document,' +\n '`operationName` must be a string, and `variables` must be an object.');\n }\n }\n\n private buildMessage(id: string, type: string, payload: any) {\n const payloadToReturn = payload && payload.query ?\n {\n ...payload,\n query: typeof payload.query === 'string' ? payload.query : print(payload.query),\n } :\n payload;\n\n return {\n id,\n type,\n payload: payloadToReturn,\n };\n }\n\n // ensure we have an array of errors\n private formatErrors(errors: any): FormatedError[] {\n if (Array.isArray(errors)) {\n return errors;\n }\n\n // TODO we should not pass ValidationError to callback in the future.\n // ValidationError\n if (errors && errors.errors) {\n return this.formatErrors(errors.errors);\n }\n\n if (errors && errors.message) {\n return [errors];\n }\n\n return [{\n name: 'FormatedError',\n message: 'Unknown error',\n originalError: errors,\n }];\n }\n\n private sendMessage(id: string, type: string, payload: any) {\n this.sendMessageRaw(this.buildMessage(id, type, payload));\n }\n\n // send message, or queue it if connection is not open\n private sendMessageRaw(message: Object) {\n switch (this.status) {\n case this.wsImpl.OPEN:\n let serializedMessage: string = JSON.stringify(message);\n try {\n JSON.parse(serializedMessage);\n } catch (e) {\n this.eventEmitter.emit('error', new Error(`Message must be JSON-serializable. Got: ${message}`));\n }\n\n this.client.send(serializedMessage);\n break;\n case this.wsImpl.CONNECTING:\n this.unsentMessagesQueue.push(message);\n\n break;\n default:\n if (!this.reconnecting) {\n this.eventEmitter.emit('error', new Error('A message was not sent because socket is not connected, is closing or ' +\n 'is already closed. Message was: ' + JSON.stringify(message)));\n }\n }\n }\n\n private generateOperationId(): string {\n return String(++this.nextOperationId);\n }\n\n private tryReconnect() {\n if (!this.reconnect || this.backoff.attempts >= this.reconnectionAttempts) {\n return;\n }\n\n if (!this.reconnecting) {\n Object.keys(this.operations).forEach((key) => {\n this.unsentMessagesQueue.push(\n this.buildMessage(key, MessageTypes.GQL_START, this.operations[key].options),\n );\n });\n this.reconnecting = true;\n }\n\n this.clearTryReconnectTimeout();\n\n const delay = this.backoff.duration();\n this.tryReconnectTimeoutId = setTimeout(() => {\n this.connect();\n }, delay);\n }\n\n private flushUnsentMessagesQueue() {\n this.unsentMessagesQueue.forEach((message) => {\n this.sendMessageRaw(message);\n });\n this.unsentMessagesQueue = [];\n }\n\n private checkConnection() {\n if (this.wasKeepAliveReceived) {\n this.wasKeepAliveReceived = false;\n return;\n }\n\n if (!this.reconnecting) {\n this.close(false, true);\n }\n }\n\n private checkMaxConnectTimeout() {\n this.clearMaxConnectTimeout();\n\n // Max timeout trying to connect\n this.maxConnectTimeoutId = setTimeout(() => {\n if (this.status !== this.wsImpl.OPEN) {\n this.reconnecting = true;\n this.close(false, true);\n }\n }, this.maxConnectTimeGenerator.duration());\n }\n\n private connect() {\n this.client = new this.wsImpl(this.url, this.wsProtocols, ...this.wsOptionArguments);\n\n this.checkMaxConnectTimeout();\n\n this.client.onopen = async () => {\n if (this.status === this.wsImpl.OPEN) {\n this.clearMaxConnectTimeout();\n this.closedByUser = false;\n this.eventEmitter.emit(this.reconnecting ? 'reconnecting' : 'connecting');\n\n try {\n const connectionParams: ConnectionParams = await this.connectionParams();\n\n // Send CONNECTION_INIT message, no need to wait for connection to success (reduce roundtrips)\n this.sendMessage(undefined, MessageTypes.GQL_CONNECTION_INIT, connectionParams);\n this.flushUnsentMessagesQueue();\n } catch (error) {\n this.sendMessage(undefined, MessageTypes.GQL_CONNECTION_ERROR, error);\n this.flushUnsentMessagesQueue();\n }\n }\n };\n\n this.client.onclose = () => {\n if (!this.closedByUser) {\n this.close(false, false);\n }\n };\n\n this.client.onerror = (err: Error) => {\n // Capture and ignore errors to prevent unhandled exceptions, wait for\n // onclose to fire before attempting a reconnect.\n this.eventEmitter.emit('error', err);\n };\n\n this.client.onmessage = ({ data }: {data: any}) => {\n this.processReceivedData(data);\n };\n }\n\n private processReceivedData(receivedData: any) {\n let parsedMessage: any;\n let opId: string;\n\n try {\n parsedMessage = JSON.parse(receivedData);\n opId = parsedMessage.id;\n } catch (e) {\n throw new Error(`Message must be JSON-parseable. Got: ${receivedData}`);\n }\n\n if (\n [ MessageTypes.GQL_DATA,\n MessageTypes.GQL_COMPLETE,\n MessageTypes.GQL_ERROR,\n ].indexOf(parsedMessage.type) !== -1 && !this.operations[opId]\n ) {\n this.unsubscribe(opId);\n\n return;\n }\n\n switch (parsedMessage.type) {\n case MessageTypes.GQL_CONNECTION_ERROR:\n if (this.connectionCallback) {\n this.connectionCallback(parsedMessage.payload);\n }\n break;\n\n case MessageTypes.GQL_CONNECTION_ACK:\n this.eventEmitter.emit(this.reconnecting ? 'reconnected' : 'connected', parsedMessage.payload);\n this.reconnecting = false;\n this.backoff.reset();\n this.maxConnectTimeGenerator.reset();\n\n if (this.connectionCallback) {\n this.connectionCallback();\n }\n break;\n\n case MessageTypes.GQL_COMPLETE:\n const handler = this.operations[opId].handler;\n delete this.operations[opId];\n handler.call(this, null, null);\n break;\n\n case MessageTypes.GQL_ERROR:\n this.operations[opId].handler(this.formatErrors(parsedMessage.payload), null);\n delete this.operations[opId];\n break;\n\n case MessageTypes.GQL_DATA:\n const parsedPayload = !parsedMessage.payload.errors ?\n parsedMessage.payload : {...parsedMessage.payload, errors: this.formatErrors(parsedMessage.payload.errors)};\n this.operations[opId].handler(null, parsedPayload);\n break;\n\n case MessageTypes.GQL_CONNECTION_KEEP_ALIVE:\n const firstKA = typeof this.wasKeepAliveReceived === 'undefined';\n this.wasKeepAliveReceived = true;\n\n if (firstKA) {\n this.checkConnection();\n }\n\n if (this.checkConnectionIntervalId) {\n clearInterval(this.checkConnectionIntervalId);\n this.checkConnection();\n }\n this.checkConnectionIntervalId = setInterval(this.checkConnection.bind(this), this.wsTimeout);\n break;\n\n default:\n throw new Error('Invalid message type!');\n }\n }\n\n private unsubscribe(opId: string) {\n if (this.operations[opId]) {\n delete this.operations[opId];\n this.setInactivityTimeout();\n this.sendMessage(opId, MessageTypes.GQL_STOP, undefined);\n }\n }\n}\n"]}