@webiny/app-websockets 6.4.11-beta.1 → 6.4.12-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/WebsocketsContextProvider.js +4 -4
- package/WebsocketsContextProvider.js.map +1 -1
- package/domain/WebsocketsConnection.js +1 -1
- package/domain/WebsocketsConnection.js.map +1 -1
- package/domain/abstractions/IWebsocketsConnection.js.map +1 -1
- package/domain/abstractions/types.js.map +1 -1
- package/package.json +5 -5
|
@@ -21,7 +21,7 @@ const WebsocketsContextProvider = (props)=>{
|
|
|
21
21
|
currentIteration++;
|
|
22
22
|
setTimeout(()=>{
|
|
23
23
|
if (!socketsRef.current) return;
|
|
24
|
-
if (socketsRef.current.isClosed()) {
|
|
24
|
+
else if (socketsRef.current.isClosed()) {
|
|
25
25
|
console.log("Running auto-reconnect.");
|
|
26
26
|
socketsRef.current.connect();
|
|
27
27
|
}
|
|
@@ -33,7 +33,7 @@ const WebsocketsContextProvider = (props)=>{
|
|
|
33
33
|
const abortController = new AbortController();
|
|
34
34
|
window.addEventListener("focus", ()=>{
|
|
35
35
|
if (!socketsRef.current) return;
|
|
36
|
-
if (socketsRef.current.isClosed()) {
|
|
36
|
+
else if (socketsRef.current.isClosed()) {
|
|
37
37
|
console.log("Running auto-reconnect on focus.");
|
|
38
38
|
socketsRef.current.connect();
|
|
39
39
|
}
|
|
@@ -56,8 +56,8 @@ const WebsocketsContextProvider = (props)=>{
|
|
|
56
56
|
(async ()=>{
|
|
57
57
|
const token = await getToken();
|
|
58
58
|
if (!token || !tenant) return;
|
|
59
|
-
if (current.tenant === tenant) return;
|
|
60
|
-
if (socketsRef.current) await socketsRef.current.close(WebsocketsCloseCode.NORMAL, "Changing tenant.");
|
|
59
|
+
else if (current.tenant === tenant) return;
|
|
60
|
+
else if (socketsRef.current) await socketsRef.current.close(WebsocketsCloseCode.NORMAL, "Changing tenant.");
|
|
61
61
|
const url = getUrl();
|
|
62
62
|
if (!url) return void console.error("Not possible to connect to the websocket without a valid URL.", {
|
|
63
63
|
tenant,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebsocketsContextProvider.js","sources":["../src/WebsocketsContextProvider.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useFeature, useTenantContext } from \"@webiny/app-admin\";\nimport { AuthenticationContextFeature } from \"@webiny/app-admin/features/security/AuthenticationContext/feature.js\";\nimport type {\n IncomingGenericData,\n IWebsocketsContext,\n IWebsocketsContextSendCallable,\n IWebsocketsManagerCloseEvent,\n IWebsocketsManagerErrorEvent\n} from \"~/types.js\";\nimport { WebsocketsCloseCode } from \"~/types.js\";\nimport {\n createWebsocketsAction,\n createWebsocketsActions,\n createWebsocketsConnection,\n createWebsocketsManager,\n createWebsocketsSubscriptionManager\n} from \"./domain/index.js\";\nimport type { IGenericData, IWebsocketsManager } from \"./domain/types.js\";\nimport { getUrl } from \"./utils/getUrl.js\";\n\nexport interface IWebsocketsContextProviderProps {\n loader?: React.ReactElement;\n children: React.ReactNode;\n}\n\nexport const WebsocketsContext = React.createContext<IWebsocketsContext>(\n undefined as unknown as IWebsocketsContext\n);\n\ninterface ICurrentData {\n tenant?: string;\n}\n\nexport const WebsocketsContextProvider = (props: IWebsocketsContextProviderProps) => {\n const { tenant } = useTenantContext();\n const { authenticationContext } = useFeature(AuthenticationContextFeature);\n\n const socketsRef = useRef<IWebsocketsManager | null>(null);\n\n const [current, setCurrent] = useState<ICurrentData>({});\n\n const getToken = useCallback(async () => {\n return await authenticationContext.getIdToken();\n }, [authenticationContext]);\n\n const subscriptionManager = useMemo(() => {\n const manager = createWebsocketsSubscriptionManager();\n\n let currentIteration = 0;\n manager.onClose(event => {\n if (currentIteration > 5 || event.code !== WebsocketsCloseCode.GOING_AWAY) {\n return;\n }\n currentIteration++;\n setTimeout(() => {\n if (!socketsRef.current) {\n return;\n } else if (socketsRef.current.isClosed()) {\n console.log(\"Running auto-reconnect.\");\n\n socketsRef.current.connect();\n }\n }, 1000);\n });\n\n return manager;\n }, []);\n\n /**\n * We need this useEffect to close the websocket connection and remove window focus event in case component is unmounted.\n * This will, probably, happen only during the development phase.\n *\n * If we did not disconnect on component unmount, we would have a memory leak - multiple connections would be opened.\n */\n useEffect(() => {\n /**\n * We want to add a window event listener which will check if the connection is closed, and if its - it will connect again.\n */\n const abortController = new AbortController();\n\n window.addEventListener(\n \"focus\",\n () => {\n if (!socketsRef.current) {\n return;\n } else if (socketsRef.current.isClosed()) {\n console.log(\"Running auto-reconnect on focus.\");\n socketsRef.current.connect();\n }\n },\n { signal: abortController.signal }\n );\n window.addEventListener(\n \"close\",\n () => {\n subscriptionManager.triggerOnClose(\n new CloseEvent(\"windowClose\", {\n code: WebsocketsCloseCode.GOING_AWAY,\n reason: \"Closing Window or Tab.\"\n })\n );\n },\n { signal: abortController.signal }\n );\n\n return () => {\n abortController.abort();\n };\n }, []);\n\n useEffect(() => {\n (async () => {\n const token = await getToken();\n if (!token || !tenant) {\n return;\n } else if (current.tenant === tenant) {\n return;\n } else if (socketsRef.current) {\n await socketsRef.current.close(WebsocketsCloseCode.NORMAL, \"Changing tenant.\");\n }\n const url = getUrl();\n\n if (!url) {\n console.error(\"Not possible to connect to the websocket without a valid URL.\", {\n tenant,\n token\n });\n return;\n }\n\n socketsRef.current = createWebsocketsManager(\n createWebsocketsConnection({\n subscriptionManager,\n url,\n tenant,\n getToken,\n protocol: [\"webiny-ws-v1\"]\n })\n );\n await socketsRef.current.connect();\n\n setCurrent({ tenant });\n })();\n }, [tenant, subscriptionManager, getToken]);\n\n const websocketActions = useMemo(() => {\n return createWebsocketsActions({\n manager: socketsRef.current!,\n tenant,\n getToken\n });\n }, [socketsRef.current, tenant, getToken]);\n\n const send = useCallback<IWebsocketsContextSendCallable>(\n async (action, data, timeout) => {\n return websocketActions.run({\n action,\n data,\n timeout\n });\n },\n [websocketActions]\n );\n\n const createAction = useCallback(\n <T extends IGenericData = IGenericData, R extends IGenericData = IGenericData>(\n name: string\n ) => {\n return createWebsocketsAction<T, R>(websocketActions, name);\n },\n [websocketActions]\n );\n\n const onMessage = useCallback(\n <T extends IncomingGenericData = IncomingGenericData>(\n action: string,\n cb: (data: T) => void\n ) => {\n return socketsRef.current!.onMessage<T>(async event => {\n if (event.data.action !== action) {\n return;\n }\n cb(event.data);\n });\n },\n [socketsRef.current]\n );\n\n const onError = useCallback(\n (cb: (data: IWebsocketsManagerErrorEvent) => void) => {\n return socketsRef.current!.onError(data => {\n return cb(data);\n });\n },\n [socketsRef.current]\n );\n\n const onClose = useCallback(\n (cb: (data: IWebsocketsManagerCloseEvent) => void) => {\n return socketsRef.current!.onClose(data => {\n return cb(data);\n });\n },\n [socketsRef.current]\n );\n\n if (!socketsRef.current) {\n return props.loader || null;\n }\n\n const value: IWebsocketsContext = {\n send,\n createAction,\n onMessage,\n onError,\n onClose\n };\n return <WebsocketsContext.Provider value={value} {...props} />;\n};\n"],"names":["WebsocketsContext","React","undefined","WebsocketsContextProvider","props","tenant","useTenantContext","authenticationContext","useFeature","AuthenticationContextFeature","socketsRef","useRef","current","setCurrent","useState","getToken","useCallback","subscriptionManager","useMemo","manager","createWebsocketsSubscriptionManager","currentIteration","event","WebsocketsCloseCode","setTimeout","console","useEffect","abortController","AbortController","window","CloseEvent","token","url","getUrl","createWebsocketsManager","createWebsocketsConnection","websocketActions","createWebsocketsActions","send","action","data","timeout","createAction","name","createWebsocketsAction","onMessage","cb","onError","onClose","value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WebsocketsContextProvider.js","sources":["../src/WebsocketsContextProvider.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useFeature, useTenantContext } from \"@webiny/app-admin\";\nimport { AuthenticationContextFeature } from \"@webiny/app-admin/features/security/AuthenticationContext/feature.js\";\nimport type {\n IncomingGenericData,\n IWebsocketsContext,\n IWebsocketsContextSendCallable,\n IWebsocketsManagerCloseEvent,\n IWebsocketsManagerErrorEvent\n} from \"~/types.js\";\nimport { WebsocketsCloseCode } from \"~/types.js\";\nimport {\n createWebsocketsAction,\n createWebsocketsActions,\n createWebsocketsConnection,\n createWebsocketsManager,\n createWebsocketsSubscriptionManager\n} from \"./domain/index.js\";\nimport type { IGenericData, IWebsocketsManager } from \"./domain/types.js\";\nimport { getUrl } from \"./utils/getUrl.js\";\n\nexport interface IWebsocketsContextProviderProps {\n loader?: React.ReactElement;\n children: React.ReactNode;\n}\n\nexport const WebsocketsContext = React.createContext<IWebsocketsContext>(\n undefined as unknown as IWebsocketsContext\n);\n\ninterface ICurrentData {\n tenant?: string;\n}\n\nexport const WebsocketsContextProvider = (props: IWebsocketsContextProviderProps) => {\n const { tenant } = useTenantContext();\n const { authenticationContext } = useFeature(AuthenticationContextFeature);\n\n const socketsRef = useRef<IWebsocketsManager | null>(null);\n\n const [current, setCurrent] = useState<ICurrentData>({});\n\n const getToken = useCallback(async () => {\n return await authenticationContext.getIdToken();\n }, [authenticationContext]);\n\n const subscriptionManager = useMemo(() => {\n const manager = createWebsocketsSubscriptionManager();\n\n let currentIteration = 0;\n manager.onClose(event => {\n if (currentIteration > 5 || event.code !== WebsocketsCloseCode.GOING_AWAY) {\n return;\n }\n currentIteration++;\n setTimeout(() => {\n if (!socketsRef.current) {\n return;\n } else if (socketsRef.current.isClosed()) {\n console.log(\"Running auto-reconnect.\");\n\n socketsRef.current.connect();\n }\n }, 1000);\n });\n\n return manager;\n }, []);\n\n /**\n * We need this useEffect to close the websocket connection and remove window focus event in case component is unmounted.\n * This will, probably, happen only during the development phase.\n *\n * If we did not disconnect on component unmount, we would have a memory leak - multiple connections would be opened.\n */\n useEffect(() => {\n /**\n * We want to add a window event listener which will check if the connection is closed, and if its - it will connect again.\n */\n const abortController = new AbortController();\n\n window.addEventListener(\n \"focus\",\n () => {\n if (!socketsRef.current) {\n return;\n } else if (socketsRef.current.isClosed()) {\n console.log(\"Running auto-reconnect on focus.\");\n socketsRef.current.connect();\n }\n },\n { signal: abortController.signal }\n );\n window.addEventListener(\n \"close\",\n () => {\n subscriptionManager.triggerOnClose(\n new CloseEvent(\"windowClose\", {\n code: WebsocketsCloseCode.GOING_AWAY,\n reason: \"Closing Window or Tab.\"\n })\n );\n },\n { signal: abortController.signal }\n );\n\n return () => {\n abortController.abort();\n };\n }, []);\n\n useEffect(() => {\n (async () => {\n const token = await getToken();\n if (!token || !tenant) {\n return;\n } else if (current.tenant === tenant) {\n return;\n } else if (socketsRef.current) {\n await socketsRef.current.close(WebsocketsCloseCode.NORMAL, \"Changing tenant.\");\n }\n const url = getUrl();\n\n if (!url) {\n console.error(\"Not possible to connect to the websocket without a valid URL.\", {\n tenant,\n token\n });\n return;\n }\n\n socketsRef.current = createWebsocketsManager(\n createWebsocketsConnection({\n subscriptionManager,\n url,\n tenant,\n getToken,\n protocol: [\"webiny-ws-v1\"]\n })\n );\n await socketsRef.current.connect();\n\n setCurrent({ tenant });\n })();\n }, [tenant, subscriptionManager, getToken]);\n\n const websocketActions = useMemo(() => {\n return createWebsocketsActions({\n manager: socketsRef.current!,\n tenant,\n getToken\n });\n }, [socketsRef.current, tenant, getToken]);\n\n const send = useCallback<IWebsocketsContextSendCallable>(\n async (action, data, timeout) => {\n return websocketActions.run({\n action,\n data,\n timeout\n });\n },\n [websocketActions]\n );\n\n const createAction = useCallback(\n <T extends IGenericData = IGenericData, R extends IGenericData = IGenericData>(\n name: string\n ) => {\n return createWebsocketsAction<T, R>(websocketActions, name);\n },\n [websocketActions]\n );\n\n const onMessage = useCallback(\n <T extends IncomingGenericData = IncomingGenericData>(\n action: string,\n cb: (data: T) => void\n ) => {\n return socketsRef.current!.onMessage<T>(async event => {\n if (event.data.action !== action) {\n return;\n }\n cb(event.data);\n });\n },\n [socketsRef.current]\n );\n\n const onError = useCallback(\n (cb: (data: IWebsocketsManagerErrorEvent) => void) => {\n return socketsRef.current!.onError(data => {\n return cb(data);\n });\n },\n [socketsRef.current]\n );\n\n const onClose = useCallback(\n (cb: (data: IWebsocketsManagerCloseEvent) => void) => {\n return socketsRef.current!.onClose(data => {\n return cb(data);\n });\n },\n [socketsRef.current]\n );\n\n if (!socketsRef.current) {\n return props.loader || null;\n }\n\n const value: IWebsocketsContext = {\n send,\n createAction,\n onMessage,\n onError,\n onClose\n };\n return <WebsocketsContext.Provider value={value} {...props} />;\n};\n"],"names":["WebsocketsContext","React","undefined","WebsocketsContextProvider","props","tenant","useTenantContext","authenticationContext","useFeature","AuthenticationContextFeature","socketsRef","useRef","current","setCurrent","useState","getToken","useCallback","subscriptionManager","useMemo","manager","createWebsocketsSubscriptionManager","currentIteration","event","WebsocketsCloseCode","setTimeout","console","useEffect","abortController","AbortController","window","CloseEvent","token","url","getUrl","createWebsocketsManager","createWebsocketsConnection","websocketActions","createWebsocketsActions","send","action","data","timeout","createAction","name","createWebsocketsAction","onMessage","cb","onError","onClose","value"],"mappings":"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"}
|
|
@@ -52,7 +52,7 @@ class WebsocketsConnection {
|
|
|
52
52
|
}
|
|
53
53
|
async getConnection() {
|
|
54
54
|
if (connectionCache.ws?.readyState === WebsocketsReadyState.OPEN) return connectionCache.ws;
|
|
55
|
-
if (connectionCache.ws?.readyState === WebsocketsReadyState.CONNECTING) return connectionCache.ws;
|
|
55
|
+
else if (connectionCache.ws?.readyState === WebsocketsReadyState.CONNECTING) return connectionCache.ws;
|
|
56
56
|
const result = await this.createUrl();
|
|
57
57
|
if (!result) throw new Error("Missing URL for WebSocket to connect to.");
|
|
58
58
|
const { url } = result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain/WebsocketsConnection.js","sources":["../../src/domain/WebsocketsConnection.ts"],"sourcesContent":["import type {\n IGenericData,\n IWebsocketsConnection,\n IWebsocketsConnectionFactory,\n IWebsocketsConnectProtocol,\n IWebsocketsManagerMessageEvent,\n IWebsocketsSubscriptionManager,\n WebsocketsCloseCode\n} from \"./types.js\";\nimport { WebsocketsReadyState } from \"./types.js\";\n\ninterface ICreateUrlResult {\n token: string;\n url: string;\n}\n\nconst defaultFactory: IWebsocketsConnectionFactory = (url, protocol) => {\n return new WebSocket(url, protocol);\n};\n\ninterface IConnection {\n ws: WebSocket | null;\n}\n\n/**\n * We need to attach the websockets cache to window object, or it will be reset on every hot reload.\n */\ndeclare global {\n interface Window {\n WebinyWebsocketsConnectionCache: IConnection;\n }\n}\n\nif (!window.WebinyWebsocketsConnectionCache) {\n window.WebinyWebsocketsConnectionCache = {\n ws: null\n };\n}\n\nconst connectionCache = window.WebinyWebsocketsConnectionCache;\n\nexport interface IWebsocketsConnectionParams {\n url: string;\n tenant: string;\n getToken(): Promise<string | undefined>;\n subscriptionManager: IWebsocketsSubscriptionManager;\n protocol?: IWebsocketsConnectProtocol;\n factory?: IWebsocketsConnectionFactory;\n}\n\nexport class WebsocketsConnection implements IWebsocketsConnection {\n private readonly url: string;\n private readonly getToken: () => Promise<string | undefined>;\n private tenant: string;\n private readonly protocol: IWebsocketsConnectProtocol;\n public readonly subscriptionManager: IWebsocketsSubscriptionManager;\n private readonly factory: IWebsocketsConnectionFactory;\n\n public constructor(params: IWebsocketsConnectionParams) {\n this.url = params.url;\n this.tenant = params.tenant;\n this.getToken = params.getToken;\n this.protocol = params.protocol;\n this.subscriptionManager = params.subscriptionManager;\n this.factory = params.factory || defaultFactory;\n }\n\n public setTenant(tenant: string): void {\n this.tenant = tenant;\n }\n\n public async connect(): Promise<void> {\n await this.getConnection();\n }\n\n public async close(code: WebsocketsCloseCode, reason: string): Promise<boolean> {\n if (\n !connectionCache.ws ||\n connectionCache.ws.readyState === WebsocketsReadyState.CLOSED ||\n connectionCache.ws.readyState === WebsocketsReadyState.CLOSING\n ) {\n connectionCache.ws = undefined as unknown as null;\n\n return true;\n }\n connectionCache.ws.close(code, reason);\n\n connectionCache.ws = undefined as unknown as null;\n return true;\n }\n\n public async send<T extends IGenericData = IGenericData>(data: T): Promise<void> {\n const connection = await this.getConnection();\n if (connection.readyState !== WebsocketsReadyState.OPEN) {\n console.info(\"Websocket connection is not open, cannot send any data.\", data);\n return;\n }\n connection.send(JSON.stringify(data));\n }\n\n public isConnected(): boolean {\n return connectionCache.ws?.readyState === WebsocketsReadyState.OPEN;\n }\n\n public isClosed(): boolean {\n return connectionCache.ws?.readyState === WebsocketsReadyState.CLOSED;\n }\n\n private async createUrl(): Promise<ICreateUrlResult | null> {\n const token = await this.getToken();\n if (!token) {\n console.error(`Missing token to connect to websockets.`);\n return null;\n }\n return {\n token,\n url: `${this.url}?token=${token}&tenant=${this.tenant}`\n };\n }\n\n private async getConnection(): Promise<WebSocket> {\n if (connectionCache.ws?.readyState === WebsocketsReadyState.OPEN) {\n return connectionCache.ws;\n } else if (connectionCache.ws?.readyState === WebsocketsReadyState.CONNECTING) {\n return connectionCache.ws;\n }\n\n const result = await this.createUrl();\n if (!result) {\n throw new Error(`Missing URL for WebSocket to connect to.`);\n }\n const { url } = result;\n\n connectionCache.ws = this.factory(url, this.protocol);\n\n const start = new Date().getTime();\n\n console.log(`Websockets connecting to ${this.url}...`);\n\n connectionCache.ws.addEventListener(\"open\", event => {\n const end = new Date().getTime();\n console.log(`...connected in ${end - start}ms.`);\n return this.subscriptionManager.triggerOnOpen(event);\n });\n connectionCache.ws.addEventListener(\"close\", event => {\n return this.subscriptionManager.triggerOnClose(event);\n });\n connectionCache.ws.addEventListener(\"error\", event => {\n console.info(`Error in the Websocket connection.`, event);\n /**\n * Let's close it if possible.\n * It will reopen automatically.\n */\n if (connectionCache.ws?.close) {\n try {\n connectionCache.ws.close();\n } catch (ex) {\n console.error(ex);\n }\n }\n return this.subscriptionManager.triggerOnError(event);\n });\n\n connectionCache.ws.addEventListener(\n \"message\",\n (event: IWebsocketsManagerMessageEvent<string>) => {\n return this.subscriptionManager.triggerOnMessage(event);\n }\n );\n\n return connectionCache.ws;\n }\n}\n\nexport const createWebsocketsConnection = (\n params: IWebsocketsConnectionParams\n): IWebsocketsConnection => {\n return new WebsocketsConnection(params);\n};\n"],"names":["defaultFactory","url","protocol","WebSocket","window","connectionCache","WebsocketsConnection","params","tenant","code","reason","WebsocketsReadyState","undefined","data","connection","console","JSON","token","result","Error","start","Date","event","end","ex","createWebsocketsConnection"],"mappings":";AAgBA,MAAMA,iBAA+C,CAACC,KAAKC,WAChD,IAAIC,UAAUF,KAAKC;AAgB9B,IAAI,CAACE,OAAO,+BAA+B,EACvCA,OAAO,+BAA+B,GAAG;IACrC,IAAI;AACR;AAGJ,MAAMC,kBAAkBD,OAAO,+BAA+B;AAWvD,MAAME;IAQT,YAAmBC,MAAmC,CAAE;QACpD,IAAI,CAAC,GAAG,GAAGA,OAAO,GAAG;QACrB,IAAI,CAAC,MAAM,GAAGA,OAAO,MAAM;QAC3B,IAAI,CAAC,QAAQ,GAAGA,OAAO,QAAQ;QAC/B,IAAI,CAAC,QAAQ,GAAGA,OAAO,QAAQ;QAC/B,IAAI,CAAC,mBAAmB,GAAGA,OAAO,mBAAmB;QACrD,IAAI,CAAC,OAAO,GAAGA,OAAO,OAAO,IAAIP;IACrC;IAEO,UAAUQ,MAAc,EAAQ;QACnC,IAAI,CAAC,MAAM,GAAGA;IAClB;IAEA,MAAa,UAAyB;QAClC,MAAM,IAAI,CAAC,aAAa;IAC5B;IAEA,MAAa,MAAMC,IAAyB,EAAEC,MAAc,EAAoB;QAC5E,IACI,CAACL,gBAAgB,EAAE,IACnBA,gBAAgB,EAAE,CAAC,UAAU,KAAKM,qBAAqB,MAAM,IAC7DN,gBAAgB,EAAE,CAAC,UAAU,KAAKM,qBAAqB,OAAO,EAChE;YACEN,gBAAgB,EAAE,GAAGO;YAErB,OAAO;QACX;QACAP,gBAAgB,EAAE,CAAC,KAAK,CAACI,MAAMC;QAE/BL,gBAAgB,EAAE,GAAGO;QACrB,OAAO;IACX;IAEA,MAAa,KAA4CC,IAAO,EAAiB;QAC7E,MAAMC,aAAa,MAAM,IAAI,CAAC,aAAa;QAC3C,IAAIA,WAAW,UAAU,KAAKH,qBAAqB,IAAI,EAAE,YACrDI,QAAQ,IAAI,CAAC,2DAA2DF;QAG5EC,WAAW,IAAI,CAACE,KAAK,SAAS,CAACH;IACnC;IAEO,cAAuB;QAC1B,OAAOR,gBAAgB,EAAE,EAAE,eAAeM,qBAAqB,IAAI;IACvE;IAEO,WAAoB;QACvB,OAAON,gBAAgB,EAAE,EAAE,eAAeM,qBAAqB,MAAM;IACzE;IAEA,MAAc,YAA8C;QACxD,MAAMM,QAAQ,MAAM,IAAI,CAAC,QAAQ;QACjC,IAAI,CAACA,OAAO;YACRF,QAAQ,KAAK,CAAC;YACd,OAAO;QACX;QACA,OAAO;YACHE;YACA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAEA,MAAM,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;QAC3D;IACJ;IAEA,MAAc,gBAAoC;QAC9C,IAAIZ,gBAAgB,EAAE,EAAE,eAAeM,qBAAqB,IAAI,EAC5D,OAAON,gBAAgB,EAAE;
|
|
1
|
+
{"version":3,"file":"domain/WebsocketsConnection.js","sources":["../../src/domain/WebsocketsConnection.ts"],"sourcesContent":["import type {\n IGenericData,\n IWebsocketsConnection,\n IWebsocketsConnectionFactory,\n IWebsocketsConnectProtocol,\n IWebsocketsManagerMessageEvent,\n IWebsocketsSubscriptionManager,\n WebsocketsCloseCode\n} from \"./types.js\";\nimport { WebsocketsReadyState } from \"./types.js\";\n\ninterface ICreateUrlResult {\n token: string;\n url: string;\n}\n\nconst defaultFactory: IWebsocketsConnectionFactory = (url, protocol) => {\n return new WebSocket(url, protocol);\n};\n\ninterface IConnection {\n ws: WebSocket | null;\n}\n\n/**\n * We need to attach the websockets cache to window object, or it will be reset on every hot reload.\n */\ndeclare global {\n interface Window {\n WebinyWebsocketsConnectionCache: IConnection;\n }\n}\n\nif (!window.WebinyWebsocketsConnectionCache) {\n window.WebinyWebsocketsConnectionCache = {\n ws: null\n };\n}\n\nconst connectionCache = window.WebinyWebsocketsConnectionCache;\n\nexport interface IWebsocketsConnectionParams {\n url: string;\n tenant: string;\n getToken(): Promise<string | undefined>;\n subscriptionManager: IWebsocketsSubscriptionManager;\n protocol?: IWebsocketsConnectProtocol;\n factory?: IWebsocketsConnectionFactory;\n}\n\nexport class WebsocketsConnection implements IWebsocketsConnection {\n private readonly url: string;\n private readonly getToken: () => Promise<string | undefined>;\n private tenant: string;\n private readonly protocol: IWebsocketsConnectProtocol;\n public readonly subscriptionManager: IWebsocketsSubscriptionManager;\n private readonly factory: IWebsocketsConnectionFactory;\n\n public constructor(params: IWebsocketsConnectionParams) {\n this.url = params.url;\n this.tenant = params.tenant;\n this.getToken = params.getToken;\n this.protocol = params.protocol;\n this.subscriptionManager = params.subscriptionManager;\n this.factory = params.factory || defaultFactory;\n }\n\n public setTenant(tenant: string): void {\n this.tenant = tenant;\n }\n\n public async connect(): Promise<void> {\n await this.getConnection();\n }\n\n public async close(code: WebsocketsCloseCode, reason: string): Promise<boolean> {\n if (\n !connectionCache.ws ||\n connectionCache.ws.readyState === WebsocketsReadyState.CLOSED ||\n connectionCache.ws.readyState === WebsocketsReadyState.CLOSING\n ) {\n connectionCache.ws = undefined as unknown as null;\n\n return true;\n }\n connectionCache.ws.close(code, reason);\n\n connectionCache.ws = undefined as unknown as null;\n return true;\n }\n\n public async send<T extends IGenericData = IGenericData>(data: T): Promise<void> {\n const connection = await this.getConnection();\n if (connection.readyState !== WebsocketsReadyState.OPEN) {\n console.info(\"Websocket connection is not open, cannot send any data.\", data);\n return;\n }\n connection.send(JSON.stringify(data));\n }\n\n public isConnected(): boolean {\n return connectionCache.ws?.readyState === WebsocketsReadyState.OPEN;\n }\n\n public isClosed(): boolean {\n return connectionCache.ws?.readyState === WebsocketsReadyState.CLOSED;\n }\n\n private async createUrl(): Promise<ICreateUrlResult | null> {\n const token = await this.getToken();\n if (!token) {\n console.error(`Missing token to connect to websockets.`);\n return null;\n }\n return {\n token,\n url: `${this.url}?token=${token}&tenant=${this.tenant}`\n };\n }\n\n private async getConnection(): Promise<WebSocket> {\n if (connectionCache.ws?.readyState === WebsocketsReadyState.OPEN) {\n return connectionCache.ws;\n } else if (connectionCache.ws?.readyState === WebsocketsReadyState.CONNECTING) {\n return connectionCache.ws;\n }\n\n const result = await this.createUrl();\n if (!result) {\n throw new Error(`Missing URL for WebSocket to connect to.`);\n }\n const { url } = result;\n\n connectionCache.ws = this.factory(url, this.protocol);\n\n const start = new Date().getTime();\n\n console.log(`Websockets connecting to ${this.url}...`);\n\n connectionCache.ws.addEventListener(\"open\", event => {\n const end = new Date().getTime();\n console.log(`...connected in ${end - start}ms.`);\n return this.subscriptionManager.triggerOnOpen(event);\n });\n connectionCache.ws.addEventListener(\"close\", event => {\n return this.subscriptionManager.triggerOnClose(event);\n });\n connectionCache.ws.addEventListener(\"error\", event => {\n console.info(`Error in the Websocket connection.`, event);\n /**\n * Let's close it if possible.\n * It will reopen automatically.\n */\n if (connectionCache.ws?.close) {\n try {\n connectionCache.ws.close();\n } catch (ex) {\n console.error(ex);\n }\n }\n return this.subscriptionManager.triggerOnError(event);\n });\n\n connectionCache.ws.addEventListener(\n \"message\",\n (event: IWebsocketsManagerMessageEvent<string>) => {\n return this.subscriptionManager.triggerOnMessage(event);\n }\n );\n\n return connectionCache.ws;\n }\n}\n\nexport const createWebsocketsConnection = (\n params: IWebsocketsConnectionParams\n): IWebsocketsConnection => {\n return new WebsocketsConnection(params);\n};\n"],"names":["defaultFactory","url","protocol","WebSocket","window","connectionCache","WebsocketsConnection","params","tenant","code","reason","WebsocketsReadyState","undefined","data","connection","console","JSON","token","result","Error","start","Date","event","end","ex","createWebsocketsConnection"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain/abstractions/IWebsocketsConnection.js","sources":["../../../src/domain/abstractions/IWebsocketsConnection.ts"],"sourcesContent":["import type { IWebsocketsSubscriptionManager } from \"./IWebsocketsSubscriptionManager.js\";\nimport type { IGenericData, WebsocketsCloseCode } from \"./types.js\";\n\nexport type IWebsocketsConnectProtocol = string | string[] | undefined;\n\nexport interface IWebsocketsConnectionFactory {\n (url: string, protocol?: IWebsocketsConnectProtocol): WebSocket;\n}\n\nexport enum WebsocketsReadyState {\n CONNECTING = 0,\n OPEN = 1,\n CLOSING = 2,\n CLOSED = 3\n}\n\nexport interface IWebsocketsConnection {\n readonly subscriptionManager: IWebsocketsSubscriptionManager;\n\n isConnected(): boolean;\n isClosed(): boolean;\n\n connect(): Promise<void>;\n close(code: WebsocketsCloseCode, reason: string): Promise<boolean>;\n send<T extends IGenericData = IGenericData>(data: T): void;\n}\n"],"names":["WebsocketsReadyState"],"mappings":"AASO,IAAKA,6CAAoBA,WAAAA,GAAAA,SAApBA,oBAAoB
|
|
1
|
+
{"version":3,"file":"domain/abstractions/IWebsocketsConnection.js","sources":["../../../src/domain/abstractions/IWebsocketsConnection.ts"],"sourcesContent":["import type { IWebsocketsSubscriptionManager } from \"./IWebsocketsSubscriptionManager.js\";\nimport type { IGenericData, WebsocketsCloseCode } from \"./types.js\";\n\nexport type IWebsocketsConnectProtocol = string | string[] | undefined;\n\nexport interface IWebsocketsConnectionFactory {\n (url: string, protocol?: IWebsocketsConnectProtocol): WebSocket;\n}\n\nexport enum WebsocketsReadyState {\n CONNECTING = 0,\n OPEN = 1,\n CLOSING = 2,\n CLOSED = 3\n}\n\nexport interface IWebsocketsConnection {\n readonly subscriptionManager: IWebsocketsSubscriptionManager;\n\n isConnected(): boolean;\n isClosed(): boolean;\n\n connect(): Promise<void>;\n close(code: WebsocketsCloseCode, reason: string): Promise<boolean>;\n send<T extends IGenericData = IGenericData>(data: T): void;\n}\n"],"names":["WebsocketsReadyState"],"mappings":"AASO,IAAKA,6CAAoBA,WAAAA,GAAAA,SAApBA,oBAAoB;8DACf;wDACN;2DACG;0DACD;WAJDA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain/abstractions/types.js","sources":["../../../src/domain/abstractions/types.ts"],"sourcesContent":["import type { GenericRecord } from \"@webiny/app/types.js\";\n\nexport type IWebsocketsManagerMessageEvent<T = IGenericData> = MessageEvent<T>;\nexport type IWebsocketsManagerCloseEvent = CloseEvent;\nexport type IWebsocketsManagerOpenEvent = Event;\nexport type IWebsocketsManagerErrorEvent = Event;\n\nexport type IGenericData = GenericRecord;\n\nexport enum WebsocketsCloseCode {\n NORMAL = 1000,\n GOING_AWAY = 1001,\n PROTOCOL_ERROR = 1002,\n CANNOT_ACCEPT = 1003,\n RESERVED = 1004,\n NO_STATUS = 1005,\n ABNORMAL = 1006,\n INVALID_DATA = 1007,\n POLICY_VIOLATION = 1008,\n TOO_BIG = 1009,\n MISSING_EXTENSION = 1010,\n SERVER_ERROR = 1011,\n SERVICE_RESTART = 1012,\n TRY_AGAIN_LATER = 1013,\n BAD_GATEWAY = 1014,\n TLS_HANDSHAKE = 1015\n}\n"],"names":["WebsocketsCloseCode"],"mappings":"AASO,IAAKA,4BAAmBA,WAAAA,GAAAA,SAAnBA,mBAAmB
|
|
1
|
+
{"version":3,"file":"domain/abstractions/types.js","sources":["../../../src/domain/abstractions/types.ts"],"sourcesContent":["import type { GenericRecord } from \"@webiny/app/types.js\";\n\nexport type IWebsocketsManagerMessageEvent<T = IGenericData> = MessageEvent<T>;\nexport type IWebsocketsManagerCloseEvent = CloseEvent;\nexport type IWebsocketsManagerOpenEvent = Event;\nexport type IWebsocketsManagerErrorEvent = Event;\n\nexport type IGenericData = GenericRecord;\n\nexport enum WebsocketsCloseCode {\n NORMAL = 1000,\n GOING_AWAY = 1001,\n PROTOCOL_ERROR = 1002,\n CANNOT_ACCEPT = 1003,\n RESERVED = 1004,\n NO_STATUS = 1005,\n ABNORMAL = 1006,\n INVALID_DATA = 1007,\n POLICY_VIOLATION = 1008,\n TOO_BIG = 1009,\n MISSING_EXTENSION = 1010,\n SERVER_ERROR = 1011,\n SERVICE_RESTART = 1012,\n TRY_AGAIN_LATER = 1013,\n BAD_GATEWAY = 1014,\n TLS_HANDSHAKE = 1015\n}\n"],"names":["WebsocketsCloseCode"],"mappings":"AASO,IAAKA,4BAAmBA,WAAAA,GAAAA,SAAnBA,mBAAmB;wDAClB;4DACI;gEACI;+DACD;0DACL;2DACC;0DACD;8DACI;kEACI;yDACT;mEACU;8DACL;iEACG;iEACA;6DACJ;+DACE;WAhBRA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-websockets",
|
|
3
|
-
"version": "6.4.
|
|
3
|
+
"version": "6.4.12-beta.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./index.js",
|
|
@@ -17,14 +17,14 @@
|
|
|
17
17
|
],
|
|
18
18
|
"license": "MIT",
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@webiny/app": "6.4.
|
|
21
|
-
"@webiny/app-admin": "6.4.
|
|
22
|
-
"@webiny/utils": "6.4.
|
|
20
|
+
"@webiny/app": "6.4.12-beta.0",
|
|
21
|
+
"@webiny/app-admin": "6.4.12-beta.0",
|
|
22
|
+
"@webiny/utils": "6.4.12-beta.0",
|
|
23
23
|
"react": "18.3.1",
|
|
24
24
|
"react-dom": "18.3.1"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@webiny/build-tools": "6.4.
|
|
27
|
+
"@webiny/build-tools": "6.4.12-beta.0",
|
|
28
28
|
"rimraf": "6.1.3",
|
|
29
29
|
"typescript": "6.0.3"
|
|
30
30
|
},
|