redux-ws-middleware
Version:
This package makes web socket management much easier with redux
1 lines • 35.5 kB
Source Map (JSON)
{"version":3,"file":"index.esm.mjs","sources":["../src/services/Logger/LoggerService.ts","../src/services/BaseService.ts","../src/services/Reconnect/ReconnectService.ts","../src/services/Redux/ReduxService.types.ts","../src/services/Redux/ReduxService.ts","../src/services/Serializer/SerializerService.ts","../src/services/Queue/QueueService.ts","../src/services/WebSocket/WebSocketService.types.ts","../src/services/WebSocket/WebSocketService.ts","../src/middleware/Socket/socketMiddleware.ts"],"sourcesContent":["const PREFIX = 'redux-ws-middleware';\n\nexport class LoggerService {\n private readonly prefix = PREFIX;\n\n log = <D>(message: string, data?: D) => {\n console.groupCollapsed(`[${this.prefix}] ${message}`);\n if (data) console.log(data);\n console.groupEnd();\n };\n\n error = <D>(message: string, data?: D) => {\n console.error(`[${this.prefix}] ${message}`, data);\n };\n}\n","import { LoggerService } from './Logger/LoggerService';\nimport { BaseOptions } from './BaseService.types';\n\nexport class BaseService {\n private readonly loggerService?: LoggerService;\n\n constructor({ debug }: BaseOptions) {\n if (!debug) return;\n\n this.loggerService = new LoggerService();\n }\n\n log = <D>(message: string, data?: D) => {\n this.loggerService?.log(message, data);\n };\n\n error = <D>(message: string, data?: D) => {\n this.loggerService?.error(message, data);\n };\n}\n","import { BaseService } from '../BaseService';\n\nexport class ReconnectService extends BaseService {\n private readonly interval: number | number[];\n private readonly callback: () => void;\n\n private reconnections = 0;\n private timeout: NodeJS.Timeout | null = null;\n\n constructor(callback: () => void, interval: number | number[] = 1000, debug?: boolean) {\n super({ debug });\n\n this.interval = interval;\n this.callback = callback;\n }\n\n startJob = () => {\n const interval = this.getInterval();\n\n this.log(`Reconnect in ${interval}ms`);\n\n this.timeout = setTimeout(this.callback, interval);\n this.incrementReconnections();\n };\n\n removeJob = () => {\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n\n this.resetReconnections();\n };\n\n /*\n * Private\n */\n\n private getInterval = (interval = this.interval) => {\n if (typeof interval === 'number') return interval;\n if (!interval.length) return 0;\n\n const lastIntervalsIdx = interval.length - 1;\n\n if (this.reconnections <= lastIntervalsIdx) {\n return interval[this.reconnections];\n }\n\n return interval[lastIntervalsIdx];\n };\n\n private setReconnections = (value: number) => {\n this.reconnections = value;\n };\n\n private incrementReconnections = (start = this.reconnections) => {\n this.setReconnections(start + 1);\n };\n\n private resetReconnections = () => {\n this.setReconnections(0);\n };\n}\n","export enum SocketActionType {\n CONNECTED,\n DISCONNECTED\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Action<T = any> = {\n type: T;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyAction<T = any> = Action<T> & {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [extraProps: string]: any;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type SocketDispatch<A extends Action = AnyAction> = {\n <T extends A>(action: T): T;\n};\n","import { SocketActionType, SocketDispatch } from './ReduxService.types';\n\nexport class ReduxService {\n private readonly actionTypes: [string, string];\n private readonly dispatch: SocketDispatch;\n\n constructor(actionTypes: [string, string], dispatch: SocketDispatch) {\n this.actionTypes = actionTypes;\n this.dispatch = dispatch;\n }\n\n getDispatch = () => {\n return this.dispatch;\n };\n\n dispatchConnected = () => {\n this.dispatch({ type: this.actionTypes[SocketActionType.CONNECTED] });\n };\n\n dispatchDisconnected = <P>(payload?: P) => {\n this.dispatch({ type: this.actionTypes[SocketActionType.DISCONNECTED], ...(payload ? { payload } : {}) });\n };\n}\n","import { Serializer, Deserializer } from './SerializerService.types';\n\nexport class SerializerService<Serializable, Deserializable, Serialized = Serializable, Deserialized = Deserializable> {\n private readonly serializer?: Serializer<Serializable, Serialized>;\n private readonly deserializer?: Deserializer<Deserializable, Deserialized>;\n\n constructor(\n serializer?: Serializer<Serializable, Serialized>,\n deserializer?: Deserializer<Deserializable, Deserialized>\n ) {\n this.serializer = serializer;\n this.deserializer = deserializer;\n }\n\n serialize = (data: Serializable): string => {\n const serializedData = this.serializer?.(data) || data;\n\n return typeof serializedData === 'string' ? serializedData : JSON.stringify(serializedData);\n };\n\n deserialize = (data: string): Deserialized => {\n let parsedData;\n\n try {\n parsedData = JSON.parse(data);\n } catch {\n parsedData = data;\n }\n\n return this.deserializer?.(parsedData) || parsedData;\n };\n}\n","import { BaseService } from '../BaseService';\n\nexport class QueueService<Req> extends BaseService {\n private queue: string[] = [];\n\n constructor(debug?: boolean) {\n super({ debug });\n }\n\n getValues = (): Req[] => {\n return this.queue.map((value) => JSON.parse(value));\n };\n\n add = (data: Req) => {\n const uniqueRequest = this.getUniqueRequest(data);\n if (!uniqueRequest) return;\n\n this.queue.push(uniqueRequest);\n\n this.log('Added to queue', data);\n };\n\n remove = (data: Req) => {\n const stringifyRequest = JSON.stringify(data);\n this.queue = this.queue.filter((value) => value !== stringifyRequest);\n\n this.log('Removed from queue', data);\n };\n\n clear = () => {\n this.queue = [];\n\n this.log('Queue cleared');\n };\n\n /*\n * Private\n */\n\n private getUniqueRequest = (data: Req) => {\n const stringifyRequest = JSON.stringify(data);\n const existingRequest = this.queue.includes(stringifyRequest);\n if (existingRequest) {\n this.log('Already in queue', data);\n return null;\n }\n\n return stringifyRequest;\n };\n}\n","import { Deserializer, Serializer } from '../Serializer/SerializerService.types';\nimport { SocketDispatch } from '../Redux/ReduxService.types';\n\nexport enum WebSocketEvent {\n OPEN = 'open',\n ERROR = 'error',\n CLOSE = 'close',\n MESSAGE = 'message'\n}\n\nexport enum WebSocketClosingCode {\n FORCE_CLOSE = 1005\n}\n\nexport type ShouldReconnect = (event: CloseEvent) => boolean;\nexport type ShouldClose<DRes> = (res: DRes) => boolean;\nexport type ShouldOpen<Req> = (req: Req) => boolean;\ntype OnMessageCallback<Res> = (res: Res, dispatch: SocketDispatch) => void;\n\nexport type Options<Req, Res, SReq = Req, DRes = Res> = {\n url: string;\n onMessage: OnMessageCallback<DRes>;\n autoConnect?: boolean;\n shouldReconnect?: ShouldReconnect | boolean;\n shouldClose?: ShouldClose<DRes>;\n shouldOpen?: ShouldOpen<Req> | boolean;\n reconnectionInterval?: number | number[];\n debug?: boolean;\n protocols?: string | string[];\n serialize?: Serializer<Req, SReq>;\n deserialize?: Deserializer<Res, DRes>;\n};\n\ntype Short = 'shouldReconnect' | 'reconnectionInterval' | 'deserialize' | 'serialize' | 'debug';\nexport type OptionsShort<Req, Res, SReq = Req, DRes = Res> = Omit<Options<Req, Res, SReq, DRes>, Short>;\n","import { BaseService } from '../BaseService';\nimport { ReconnectService } from '../Reconnect/ReconnectService';\nimport { ReduxService } from '../Redux/ReduxService';\nimport { SocketDispatch } from '../Redux/ReduxService.types';\nimport { SerializerService } from '../Serializer/SerializerService';\nimport { QueueService } from '../Queue/QueueService';\n\nimport { Options, WebSocketClosingCode, WebSocketEvent, ShouldReconnect, OptionsShort } from './WebSocketService.types';\n\nexport class WebSocketService<Req, Res, SReq = Req, DRes = Res> extends BaseService {\n private readonly options: OptionsShort<Req, Res, SReq, DRes>;\n private readonly shouldReconnect: ShouldReconnect | boolean;\n\n private readonly reconnectService: ReconnectService;\n private readonly reduxService: ReduxService;\n private readonly serializerService: SerializerService<Req, Res, SReq, DRes>;\n private readonly queueService: QueueService<Req>;\n\n private ws: null | WebSocket = null;\n\n constructor(options: Options<Req, Res, SReq, DRes>, dispatch: SocketDispatch, actionTypes: [string, string]) {\n super({ debug: options.debug });\n\n const { shouldReconnect, reconnectionInterval, debug, serialize, deserialize, ...restOptions } = options;\n\n this.options = restOptions;\n this.shouldReconnect = shouldReconnect ?? true;\n\n this.reconnectService = new ReconnectService(this.open, reconnectionInterval, debug);\n this.reduxService = new ReduxService(actionTypes, dispatch);\n this.serializerService = new SerializerService(serialize, deserialize);\n this.queueService = new QueueService(debug);\n\n // This \"false\" check is required since the value might be \"undefined\".\n if (options.autoConnect !== false) {\n this.open();\n }\n\n if (debug) {\n this.log('Debug mode is ENABLED', options);\n }\n }\n\n open = () => {\n if (typeof window === 'undefined' || this.ws) return;\n\n const { url, protocols } = this.options;\n\n this.ws = new WebSocket(url, protocols);\n this.setListeners();\n };\n\n send = (req: Req) => {\n const isOpen = this.checkOpenStateAndOpenConnection(req);\n if (!isOpen) return;\n\n const message = this.serializerService.serialize(req);\n this.ws?.send(message);\n\n this.log('Sent', message);\n };\n\n close = (code?: number) => {\n this.checkOpenStateAndThrowError();\n\n this.ws?.close(code);\n };\n\n /*\n * Private\n */\n\n private setListeners = () => {\n if (!this.ws) return;\n\n this.ws.addEventListener(WebSocketEvent.OPEN, this.handleOpen);\n this.ws.addEventListener(WebSocketEvent.MESSAGE, this.handleMessage);\n this.ws.addEventListener(WebSocketEvent.ERROR, this.handleError);\n this.ws.addEventListener(WebSocketEvent.CLOSE, this.handleClose);\n };\n\n private removeListeners = () => {\n if (!this.ws) return;\n\n this.ws.removeEventListener(WebSocketEvent.OPEN, this.handleOpen);\n this.ws.removeEventListener(WebSocketEvent.MESSAGE, this.handleMessage);\n this.ws.removeEventListener(WebSocketEvent.ERROR, this.handleError);\n this.ws.removeEventListener(WebSocketEvent.CLOSE, this.handleClose);\n };\n\n private handleOpen = (_: Event) => {\n this.log('Connected');\n\n this.reduxService.dispatchConnected();\n this.reconnectService.removeJob();\n\n this.sendQueuedRequests();\n };\n\n private handleMessage = (event: MessageEvent) => {\n const data = this.serializerService.deserialize(event.data);\n\n this.log('Received', data);\n\n this.options.onMessage(data, this.reduxService.getDispatch());\n\n if (this.options.shouldClose?.(data)) {\n this.close(WebSocketClosingCode.FORCE_CLOSE);\n }\n };\n\n private handleError = (event: Event) => {\n this.error('Error', event);\n };\n\n private handleClose = (event: CloseEvent) => {\n const { code, reason } = event;\n const forceDisconnection = code === WebSocketClosingCode.FORCE_CLOSE;\n\n this.log('Disconnected', { code, reason, forceDisconnection });\n this.reduxService.dispatchDisconnected({ reason, forceDisconnection, code });\n\n this.removeListeners();\n this.ws = null;\n\n this.checkReconnectAbilityAndStartJob(event, forceDisconnection);\n };\n\n private sendQueuedRequests = () => {\n const queue = this.queueService.getValues();\n if (!queue.length) return;\n\n for (const req of queue) {\n this.send(req);\n this.queueService.remove(req);\n }\n };\n\n private checkReconnectAbilityAndStartJob = (event: CloseEvent, forceDisconnection: boolean) => {\n if (forceDisconnection && typeof this.shouldReconnect === 'boolean') return;\n\n if (typeof this.shouldReconnect === 'boolean') {\n this.reconnectService.startJob();\n return;\n }\n\n if (this.shouldReconnect(event)) {\n this.reconnectService.startJob();\n }\n };\n\n private checkOpenStateAndOpenConnection = (req: Req) => {\n if (this.isReadyStateOpen()) return true;\n\n if (!this.options.shouldOpen) {\n throw new Error('WebSocket is not connected. Make sure it is connected before triggering an action.');\n }\n\n if (typeof this.options.shouldOpen === 'boolean' || this.options.shouldOpen(req)) {\n this.queueService.add(req);\n this.open();\n\n return false;\n }\n };\n\n private checkOpenStateAndThrowError = () => {\n if (this.isReadyStateOpen()) return;\n\n throw new Error('WebSocket is not connected. Make sure it is connected before triggering an action.');\n };\n\n private isReadyStateOpen = () => this.ws?.readyState === WebSocket.OPEN || false;\n}\n","import { AnyAction } from '../../services/Redux/ReduxService.types';\nimport { WebSocketService } from '../../services/WebSocket/WebSocketService';\n\nimport { MiddlewareOptions, MiddlewareAPI, ActionType } from './socketMiddleware.types';\n\nconst getTypeCheck = (actionType: ActionType) => {\n const isRegExp = actionType instanceof RegExp;\n\n return (type: AnyAction['type']) => (isRegExp ? actionType.test(type) : type === actionType);\n};\n\nexport const createSocketMiddleware = <Req, Res, SReq = Req, DRes = Res>({\n actionTypes,\n completedActionTypes,\n ...socketOptions\n}: MiddlewareOptions<Req, Res, SReq, DRes>) => {\n const [sendType, connectType, disconnectType] = actionTypes;\n\n const isSend = getTypeCheck(sendType);\n const isConnect = connectType ? getTypeCheck(connectType) : null;\n const isDisconnect = disconnectType ? getTypeCheck(disconnectType) : null;\n\n return ({ dispatch }: MiddlewareAPI) => {\n const socket = new WebSocketService(socketOptions, dispatch, completedActionTypes);\n\n return (next: (action: AnyAction) => void) => (action: AnyAction) => {\n if (isConnect?.(action.type)) {\n socket.open();\n }\n\n if (isDisconnect?.(action.type)) {\n socket.close(action.data?.code || action.payload?.code || action.code);\n }\n\n if (isSend(action.type)) {\n socket.send((action.data || action.payload)!);\n }\n\n return next(action);\n };\n };\n};\n"],"names":["PREFIX","LoggerService","message","data","console","groupCollapsed","prefix","log","groupEnd","error","BaseService","debug","loggerService","ReconnectService","callback","interval","getInterval","timeout","setTimeout","incrementReconnections","clearTimeout","resetReconnections","length","lastIntervalsIdx","reconnections","value","start","setReconnections","SocketActionType","ReduxService","actionTypes","dispatch","type","CONNECTED","payload","_objectSpread","DISCONNECTED","SerializerService","serializer","deserializer","serializedData","JSON","stringify","parsedData","parse","QueueService","queue","map","uniqueRequest","getUniqueRequest","push","stringifyRequest","filter","existingRequest","includes","WebSocketEvent","WebSocketClosingCode","WebSocketService","options","window","ws","url","protocols","WebSocket","setListeners","req","isOpen","checkOpenStateAndOpenConnection","serializerService","serialize","send","code","checkOpenStateAndThrowError","close","addEventListener","OPEN","handleOpen","MESSAGE","handleMessage","ERROR","handleError","CLOSE","handleClose","removeEventListener","_","reduxService","dispatchConnected","reconnectService","removeJob","sendQueuedRequests","event","deserialize","onMessage","getDispatch","shouldClose","FORCE_CLOSE","reason","forceDisconnection","dispatchDisconnected","removeListeners","checkReconnectAbilityAndStartJob","queueService","getValues","remove","shouldReconnect","startJob","isReadyStateOpen","shouldOpen","Error","add","open","readyState","reconnectionInterval","restOptions","_excluded","autoConnect","getTypeCheck","actionType","isRegExp","RegExp","test","createSocketMiddleware","completedActionTypes","socketOptions","sendType","connectType","disconnectType","isSend","isConnect","isDisconnect","socket","next","action"],"mappings":"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"}