@aimee-blue/ab-service-kit
Version:
Aimee Blue Service Template
1 lines • 5.58 kB
Source Map (JSON)
{"version":3,"sources":["../../../src/shared/sockets/pipeStreamIntoSocket.ts"],"names":["SOCKET_CLOSED","defaultSendToSocket","socket","data","Promise","res","rej","readyState","OPEN","send","Buffer","JSON","stringify","err","Error","defaultSendToSocketErrorHandler","error","logger","message","warn","defaultCloseSocket","code","close","pipeStreamIntoSocket","stream","optsRaw","opts","defaultLogger","onSendError","closeOnError","closeOnComplete","subscription","pipe","catch","reject","subscribe","complete"],"mappings":"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","sourcesContent":["import { Observable } from 'rxjs';\nimport { concatMap, ignoreElements } from 'rxjs/operators';\nimport { SocketWithInfo } from './types';\nimport { registerError } from '../registerError';\nimport { defaultLogger, Logger } from '../logging';\nimport { IAction } from '../action';\n\nconst SOCKET_CLOSED = 'Trying to send data while socket already closed';\n\nexport const defaultSendToSocket = <T extends Buffer | IAction>(\n socket: SocketWithInfo,\n data: T\n): Promise<void> => {\n return new Promise<void>((res, rej) => {\n if (socket.readyState === socket.OPEN) {\n socket.send(data instanceof Buffer ? data : JSON.stringify(data), err => {\n if (err) {\n rej(err);\n } else {\n res();\n }\n });\n } else {\n rej(new Error(SOCKET_CLOSED));\n }\n });\n};\n\nconst defaultSendToSocketErrorHandler = <T>(\n data: T,\n error: Error,\n logger: Logger\n) => {\n if (error.message === SOCKET_CLOSED) {\n logger.warn('🚨 Socket was closed before we could send data back', data);\n } else {\n registerError(error);\n logger.error('💥 Error when sending data', data, error);\n }\n};\n\nconst defaultCloseSocket = (socket: SocketWithInfo, code?: number) => {\n socket.close(code);\n};\n\nexport const pipeStreamIntoSocket = <T extends Buffer | IAction>(\n stream: Observable<T>,\n socket: SocketWithInfo,\n optsRaw?: Partial<{\n close: typeof defaultCloseSocket;\n send: typeof defaultSendToSocket;\n logger: Logger;\n onSendError: typeof defaultSendToSocketErrorHandler;\n closeOnError: boolean;\n closeOnComplete: boolean;\n }>\n) => {\n const opts = {\n close: optsRaw?.close ?? defaultCloseSocket,\n send: optsRaw?.send ?? defaultSendToSocket,\n logger: optsRaw?.logger ?? defaultLogger,\n onSendError: optsRaw?.onSendError ?? defaultSendToSocketErrorHandler,\n closeOnError: optsRaw?.closeOnError ?? true,\n closeOnComplete: optsRaw?.closeOnComplete ?? true,\n };\n\n const subscription = stream\n .pipe(\n concatMap(data =>\n opts.send(socket, data).catch((err: Error) => {\n opts.onSendError(data, err, opts.logger);\n\n return Promise.reject(err);\n })\n ),\n ignoreElements()\n )\n .subscribe({\n error: error => {\n if (!(error instanceof Error && error.message === SOCKET_CLOSED)) {\n opts.logger.error('💥 Outgoing stream error', error);\n }\n if (opts.closeOnError) {\n opts.close(socket, 1011);\n }\n },\n complete: () => {\n if (opts.closeOnComplete) {\n opts.close(socket, 1000);\n }\n },\n });\n\n return subscription;\n};\n"],"file":"pipeStreamIntoSocket.js"}