UNPKG

@aimee-blue/ab-service-kit

Version:
1 lines 4.23 kB
{"version":3,"sources":["../../../src/shared/sockets/socketRegistry.ts"],"names":["createSocketRegistry","server","epicsByPath","logger","state","sockets","Map","api","wss","WebSocket","Server","noServer","on","error","log","onConnection","closeSocket","attachToSocket","upgradeListener","addSocket","addListener","initialize","newEpicsByPath","socketState","values","ws","request","deinitialize","detachFromSocketInWatchMode","id","destroy","removeListener","onServerClose","getRegistry","registry"],"mappings":";;;;;;;;AAAA;;AAGA;;AACA;;AACA;;;;AAKO,SAASA,oBAAT,CACLC,MADK,EAELC,WAFK,EAGLC,MAHK,EAIL;AACA,QAAMC,KAAK,GAAG;AACZF,IAAAA,WADY;AAEZG,IAAAA,OAAO,EAAE,IAAIC,GAAJ,EAFG;AAGZH,IAAAA;AAHY,GAAd;AAMA,QAAMI,GAAG,GAAG,gDAAsBH,KAAtB,CAAZ;AAEA,QAAMI,GAAG,GAAG,IAAIC,YAAUC,MAAd,CAAqB;AAAEC,IAAAA,QAAQ,EAAE;AAAZ,GAArB,CAAZ;AAEAH,EAAAA,GAAG,CAACI,EAAJ,CAAO,OAAP,EAAgBC,KAAK,IAAI;AACvBV,IAAAA,MAAM,CAACW,GAAP,CAAW,MAAX,EAAmBD,KAAnB;AACD,GAFD;AAIA,QAAME,YAA2B,GAAG,0DAClC,MAAMX,KAAK,CAACF,WADsB,EAElCK,GAAG,CAACS,WAF8B,EAGlCT,GAAG,CAACU,cAH8B,EAIlCd,MAJkC,CAApC;AAOAK,EAAAA,GAAG,CAACI,EAAJ,CAAO,YAAP,EAAqBG,YAArB;AAEA,QAAMG,eAAe,GAAG,4DACtBV,GADsB,EAEtB,MAAMJ,KAAK,CAACF,WAFU,EAGtBK,GAAG,CAACY,SAHkB,EAItBhB,MAJsB,CAAxB;AAOAF,EAAAA,MAAM,CAACmB,WAAP,CAAmB,SAAnB,EAA8BF,eAA9B;AAEA,SAAO;AACLG,IAAAA,UAAU,EAAGC,cAAD,IAAgD;AAC1DlB,MAAAA,KAAK,CAACF,WAAN,GAAoBoB,cAApB;;AAEA,WAAK,MAAMC,WAAX,IAA0BnB,KAAK,CAACC,OAAN,CAAcmB,MAAd,EAA1B,EAAkD;AAChDT,QAAAA,YAAY,CAACQ,WAAW,CAACE,EAAb,EAAiBF,WAAW,CAACG,OAA7B,CAAZ;AACD;AACF,KAPI;AAQLC,IAAAA,YAAY,EAAE,YAAY;AACxB,WAAK,MAAMJ,WAAX,IAA0BnB,KAAK,CAACC,OAAN,CAAcmB,MAAd,EAA1B,EAAkD;AAChDjB,QAAAA,GAAG,CAACqB,2BAAJ,CAAgCL,WAAW,CAACM,EAA5C;AACD;AACF,KAZI;AAaLC,IAAAA,OAAO,EAAE,YAAY;AACnB7B,MAAAA,MAAM,CAAC8B,cAAP,CAAsB,SAAtB,EAAiCb,eAAjC;AAEA,YAAMX,GAAG,CAACyB,aAAJ,EAAN;AACD;AAjBI,GAAP;AAmBD;;AAEM,SAASC,WAAT,CACLhC,MADK,EAELC,WAFK,EAGLC,MAHK,EAIL;AACA,MAAIF,MAAM,CAACiC,QAAX,EAAqB;AACnB,WAAOjC,MAAM,CAACiC,QAAd;AACD;;AACD,SAAQjC,MAAM,CAACiC,QAAP,GAAkBlC,oBAAoB,CAACC,MAAD,EAASC,WAAT,EAAsBC,MAAtB,CAA9C;AACD","sourcesContent":["import WebSocket from 'ws';\nimport { Server, SocketHandler } from './types';\nimport { AnySocketEpic } from '../kit';\nimport { buildOnConnectionListener } from './buildOnConnectionListener';\nimport { IConnectedSocket, buildRegistryStateApi } from './socketRegistryState';\nimport { buildServerUpgradeListener } from './buildServerUpgradeListener';\nimport { BasicLogger } from '../logging';\n\nexport type SocketRegistry = ReturnType<typeof createSocketRegistry>;\n\nexport function createSocketRegistry(\n server: Server,\n epicsByPath: Map<string, AnySocketEpic>,\n logger: BasicLogger\n) {\n const state = {\n epicsByPath,\n sockets: new Map<string, IConnectedSocket>(),\n logger,\n };\n\n const api = buildRegistryStateApi(state);\n\n const wss = new WebSocket.Server({ noServer: true });\n\n wss.on('error', error => {\n logger.log('💥 ', error);\n });\n\n const onConnection: SocketHandler = buildOnConnectionListener(\n () => state.epicsByPath,\n api.closeSocket,\n api.attachToSocket,\n logger\n );\n\n wss.on('connection', onConnection);\n\n const upgradeListener = buildServerUpgradeListener(\n wss,\n () => state.epicsByPath,\n api.addSocket,\n logger\n );\n\n server.addListener('upgrade', upgradeListener);\n\n return {\n initialize: (newEpicsByPath: Map<string, AnySocketEpic>) => {\n state.epicsByPath = newEpicsByPath;\n\n for (const socketState of state.sockets.values()) {\n onConnection(socketState.ws, socketState.request);\n }\n },\n deinitialize: async () => {\n for (const socketState of state.sockets.values()) {\n api.detachFromSocketInWatchMode(socketState.id);\n }\n },\n destroy: async () => {\n server.removeListener('upgrade', upgradeListener);\n\n await api.onServerClose();\n },\n };\n}\n\nexport function getRegistry(\n server: Server & { registry?: SocketRegistry },\n epicsByPath: Map<string, AnySocketEpic>,\n logger: BasicLogger\n) {\n if (server.registry) {\n return server.registry;\n }\n return (server.registry = createSocketRegistry(server, epicsByPath, logger));\n}\n"],"file":"socketRegistry.js"}