@webiny/app-websockets 5.41.5-beta.2 → 5.41.5-beta.4

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.
@@ -50,6 +50,7 @@ var WebsocketsContextProvider = exports.WebsocketsContextProvider = function Web
50
50
  });
51
51
  return manager;
52
52
  }, []);
53
+
53
54
  /**
54
55
  * We need this useEffect to close the websocket connection and remove window focus event in case component is unmounted.
55
56
  * This will, probably, happen only during the development phase.
@@ -60,22 +61,27 @@ var WebsocketsContextProvider = exports.WebsocketsContextProvider = function Web
60
61
  /**
61
62
  * We want to add a window event listener which will check if the connection is closed, and if its - it will connect again.
62
63
  */
63
- var fn = function fn() {
64
+ var abortController = new AbortController();
65
+ window.addEventListener("focus", function () {
64
66
  if (!socketsRef.current) {
65
67
  return;
66
68
  } else if (socketsRef.current.isClosed()) {
67
69
  console.log("Running auto-reconnect on focus.");
68
70
  socketsRef.current.connect();
69
71
  }
70
- };
71
- window.addEventListener("focus", fn);
72
+ }, {
73
+ signal: abortController.signal
74
+ });
75
+ window.addEventListener("close", function () {
76
+ subscriptionManager.triggerOnClose(new CloseEvent("windowClose", {
77
+ code: _types.WebsocketsCloseCode.GOING_AWAY,
78
+ reason: "Closing Window or Tab."
79
+ }));
80
+ }, {
81
+ signal: abortController.signal
82
+ });
72
83
  return function () {
73
- window.removeEventListener("focus", fn);
74
- // if (!socketsRef.current) {
75
- // return;
76
- // }
77
-
78
- // socketsRef.current.close(WebsocketsCloseCode.NORMAL, "Component unmounted.");
84
+ abortController.abort();
79
85
  };
80
86
  }, []);
81
87
  (0, _react.useEffect)(function () {
@@ -138,13 +144,25 @@ var WebsocketsContextProvider = exports.WebsocketsContextProvider = function Web
138
144
  cb(event.data);
139
145
  });
140
146
  }, [socketsRef.current]);
147
+ var onError = (0, _react.useCallback)(function (cb) {
148
+ return socketsRef.current.onError(function (data) {
149
+ return cb(data);
150
+ });
151
+ }, [socketsRef.current]);
152
+ var onClose = (0, _react.useCallback)(function (cb) {
153
+ return socketsRef.current.onClose(function (data) {
154
+ return cb(data);
155
+ });
156
+ }, [socketsRef.current]);
141
157
  if (!socketsRef.current) {
142
158
  return props.loader || null;
143
159
  }
144
160
  var value = {
145
161
  send: send,
146
162
  createAction: createAction,
147
- onMessage: onMessage
163
+ onMessage: onMessage,
164
+ onError: onError,
165
+ onClose: onClose
148
166
  };
149
167
  return /*#__PURE__*/_react.default.createElement(WebsocketsContext.Provider, Object.assign({
150
168
  value: value
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_appTenancy","_appI18n","_appSecurity","_types","_domain","_getUrl","WebsocketsContext","exports","React","createContext","undefined","WebsocketsContextProvider","props","_useTenancy","useTenancy","tenant","_useI18N","useI18N","getCurrentLocale","_useSecurity","useSecurity","getIdToken","locale","socketsRef","useRef","_useState","useState","_useState2","_slicedToArray2","default","current","setCurrent","getToken","useCallback","subscriptionManager","useMemo","manager","createWebsocketsSubscriptionManager","currentIteration","onClose","event","code","WebsocketsCloseCode","GOING_AWAY","setTimeout","isClosed","console","log","connect","useEffect","fn","window","addEventListener","removeEventListener","token","close","NORMAL","url","getUrl","error","createWebsocketsManager","createWebsocketsConnection","protocol","websocketActions","createWebsocketsActions","send","action","data","timeout","run","createAction","name","createWebsocketsAction","onMessage","cb","loader","value","createElement","Provider","Object","assign"],"sources":["WebsocketsContextProvider.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useTenancy } from \"@webiny/app-tenancy\";\nimport { useI18N } from \"@webiny/app-i18n\";\nimport { useSecurity } from \"@webiny/app-security\";\nimport {\n IncomingGenericData,\n IWebsocketsContext,\n IWebsocketsContextSendCallable,\n WebsocketsCloseCode\n} from \"~/types\";\nimport {\n createWebsocketsAction,\n createWebsocketsActions,\n createWebsocketsConnection,\n createWebsocketsManager,\n createWebsocketsSubscriptionManager\n} from \"./domain\";\nimport { IGenericData, IWebsocketsManager } from \"./domain/types\";\nimport { getUrl } from \"./utils/getUrl\";\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 locale?: string;\n}\n\nexport const WebsocketsContextProvider = (props: IWebsocketsContextProviderProps) => {\n const { tenant } = useTenancy();\n const { getCurrentLocale } = useI18N();\n const { getIdToken } = useSecurity();\n const locale = getCurrentLocale(\"default\");\n\n const socketsRef = useRef<IWebsocketsManager>();\n\n const [current, setCurrent] = useState<ICurrentData>({});\n\n const getToken = useCallback(async () => {\n return await getIdToken();\n }, [getIdToken]);\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 * 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 fn = () => {\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 window.addEventListener(\"focus\", fn);\n\n return () => {\n window.removeEventListener(\"focus\", fn);\n // if (!socketsRef.current) {\n // return;\n // }\n\n // socketsRef.current.close(WebsocketsCloseCode.NORMAL, \"Component unmounted.\");\n };\n }, []);\n\n useEffect(() => {\n (async () => {\n const token = await getToken();\n if (!token || !tenant || !locale) {\n return;\n } else if (current.tenant === tenant && current.locale === locale) {\n return;\n } else if (socketsRef.current) {\n await socketsRef.current.close(\n WebsocketsCloseCode.NORMAL,\n \"Changing tenant/locale.\"\n );\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 locale,\n token\n });\n return;\n }\n\n socketsRef.current = createWebsocketsManager(\n createWebsocketsConnection({\n subscriptionManager,\n url,\n tenant,\n locale,\n getToken,\n protocol: [\"webiny-ws-v1\"]\n })\n );\n await socketsRef.current.connect();\n\n setCurrent({\n tenant,\n locale\n });\n })();\n }, [tenant, locale, subscriptionManager, getToken]);\n\n const websocketActions = useMemo(() => {\n return createWebsocketsActions({\n manager: socketsRef.current!,\n tenant,\n locale,\n getToken\n });\n }, [socketsRef.current, tenant, locale, 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 if (!socketsRef.current) {\n return props.loader || null;\n }\n\n const value: IWebsocketsContext = {\n send,\n createAction,\n onMessage\n };\n return <WebsocketsContext.Provider value={value} {...props} />;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_appTenancy","_appI18n","_appSecurity","_types","_domain","_getUrl","WebsocketsContext","exports","React","createContext","undefined","WebsocketsContextProvider","props","_useTenancy","useTenancy","tenant","_useI18N","useI18N","getCurrentLocale","_useSecurity","useSecurity","getIdToken","locale","socketsRef","useRef","_useState","useState","_useState2","_slicedToArray2","default","current","setCurrent","getToken","useCallback","subscriptionManager","useMemo","manager","createWebsocketsSubscriptionManager","currentIteration","onClose","event","code","WebsocketsCloseCode","GOING_AWAY","setTimeout","isClosed","console","log","connect","useEffect","abortController","AbortController","window","addEventListener","signal","triggerOnClose","CloseEvent","reason","abort","token","close","NORMAL","url","getUrl","error","createWebsocketsManager","createWebsocketsConnection","protocol","websocketActions","createWebsocketsActions","send","action","data","timeout","run","createAction","name","createWebsocketsAction","onMessage","cb","onError","loader","value","createElement","Provider","Object","assign"],"sources":["WebsocketsContextProvider.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useTenancy } from \"@webiny/app-tenancy\";\nimport { useI18N } from \"@webiny/app-i18n\";\nimport { useSecurity } from \"@webiny/app-security\";\nimport {\n IncomingGenericData,\n IWebsocketsContext,\n IWebsocketsContextSendCallable,\n IWebsocketsManagerCloseEvent,\n IWebsocketsManagerErrorEvent,\n WebsocketsCloseCode\n} from \"~/types\";\nimport {\n createWebsocketsAction,\n createWebsocketsActions,\n createWebsocketsConnection,\n createWebsocketsManager,\n createWebsocketsSubscriptionManager\n} from \"./domain\";\nimport { IGenericData, IWebsocketsManager } from \"./domain/types\";\nimport { getUrl } from \"./utils/getUrl\";\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 locale?: string;\n}\n\nexport const WebsocketsContextProvider = (props: IWebsocketsContextProviderProps) => {\n const { tenant } = useTenancy();\n const { getCurrentLocale } = useI18N();\n const { getIdToken } = useSecurity();\n const locale = getCurrentLocale(\"default\");\n\n const socketsRef = useRef<IWebsocketsManager>();\n\n const [current, setCurrent] = useState<ICurrentData>({});\n\n const getToken = useCallback(async () => {\n return await getIdToken();\n }, [getIdToken]);\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 || !locale) {\n return;\n } else if (current.tenant === tenant && current.locale === locale) {\n return;\n } else if (socketsRef.current) {\n await socketsRef.current.close(\n WebsocketsCloseCode.NORMAL,\n \"Changing tenant/locale.\"\n );\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 locale,\n token\n });\n return;\n }\n\n socketsRef.current = createWebsocketsManager(\n createWebsocketsConnection({\n subscriptionManager,\n url,\n tenant,\n locale,\n getToken,\n protocol: [\"webiny-ws-v1\"]\n })\n );\n await socketsRef.current.connect();\n\n setCurrent({\n tenant,\n locale\n });\n })();\n }, [tenant, locale, subscriptionManager, getToken]);\n\n const websocketActions = useMemo(() => {\n return createWebsocketsActions({\n manager: socketsRef.current!,\n tenant,\n locale,\n getToken\n });\n }, [socketsRef.current, tenant, locale, 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"],"mappings":"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","ignoreList":[]}
@@ -119,6 +119,17 @@ var WebsocketsConnection = exports.WebsocketsConnection = /*#__PURE__*/function
119
119
  });
120
120
  connectionCache.ws.addEventListener("error", function (event) {
121
121
  console.info("Error in the Websocket connection.", event);
122
+ /**
123
+ * Let's close it if possible.
124
+ * It will reopen automatically.
125
+ */
126
+ if (connectionCache.ws?.close) {
127
+ try {
128
+ connectionCache.ws.close();
129
+ } catch (ex) {
130
+ console.error(ex);
131
+ }
132
+ }
122
133
  return _this.subscriptionManager.triggerOnError(event);
123
134
  });
124
135
  connectionCache.ws.addEventListener("message", function (event) {
@@ -1 +1 @@
1
- {"version":3,"names":["_types","require","defaultFactory","url","protocol","WebSocket","window","WebinyWebsocketsConnectionCache","ws","connectionCache","WebsocketsConnection","exports","params","_classCallCheck2","default","tenant","locale","getToken","subscriptionManager","factory","_createClass2","key","value","setTenant","setLocale","connect","getConnection","close","code","reason","readyState","WebsocketsReadyState","CLOSED","CLOSING","undefined","send","data","connection","OPEN","console","info","JSON","stringify","isConnected","isClosed","createUrl","token","error","concat","_this","CONNECTING","result","Error","start","Date","getTime","log","addEventListener","event","end","triggerOnOpen","triggerOnClose","triggerOnError","triggerOnMessage","createWebsocketsConnection"],"sources":["WebsocketsConnection.ts"],"sourcesContent":["import {\n IGenericData,\n IWebsocketsConnection,\n IWebsocketsConnectionFactory,\n IWebsocketsConnectProtocol,\n IWebsocketsManagerMessageEvent,\n IWebsocketsSubscriptionManager,\n WebsocketsCloseCode,\n WebsocketsReadyState\n} from \"./types\";\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 locale: 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 locale: 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.locale = params.locale;\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 setLocale(locale: string): void {\n this.locale = locale;\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}&locale=${this.locale}`\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 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"],"mappings":";;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAgBA,IAAMC,cAA4C,GAAG,SAA/CA,cAA4CA,CAAIC,GAAG,EAAEC,QAAQ,EAAK;EACpE,OAAO,IAAIC,SAAS,CAACF,GAAG,EAAEC,QAAQ,CAAC;AACvC,CAAC;;AAMD;AACA;AACA;;AAOA,IAAI,CAACE,MAAM,CAACC,+BAA+B,EAAE;EACzCD,MAAM,CAACC,+BAA+B,GAAG;IACrCC,EAAE,EAAE;EACR,CAAC;AACL;AAEA,IAAMC,eAAe,GAAGH,MAAM,CAACC,+BAA+B;AAAC,IAYlDG,oBAAoB,GAAAC,OAAA,CAAAD,oBAAA;EAS7B,SAAAA,qBAAmBE,MAAmC,EAAE;IAAA,IAAAC,gBAAA,CAAAC,OAAA,QAAAJ,oBAAA;IACpD,IAAI,CAACP,GAAG,GAAGS,MAAM,CAACT,GAAG;IACrB,IAAI,CAACY,MAAM,GAAGH,MAAM,CAACG,MAAM;IAC3B,IAAI,CAACC,MAAM,GAAGJ,MAAM,CAACI,MAAM;IAC3B,IAAI,CAACC,QAAQ,GAAGL,MAAM,CAACK,QAAQ;IAC/B,IAAI,CAACb,QAAQ,GAAGQ,MAAM,CAACR,QAAQ;IAC/B,IAAI,CAACc,mBAAmB,GAAGN,MAAM,CAACM,mBAAmB;IACrD,IAAI,CAACC,OAAO,GAAGP,MAAM,CAACO,OAAO,IAAIjB,cAAc;EACnD;EAAC,WAAAkB,aAAA,CAAAN,OAAA,EAAAJ,oBAAA;IAAAW,GAAA;IAAAC,KAAA,EAED,SAAAC,UAAiBR,MAAc,EAAQ;MACnC,IAAI,CAACA,MAAM,GAAGA,MAAM;IACxB;EAAC;IAAAM,GAAA;IAAAC,KAAA,EAED,SAAAE,UAAiBR,MAAc,EAAQ;MACnC,IAAI,CAACA,MAAM,GAAGA,MAAM;IACxB;EAAC;IAAAK,GAAA;IAAAC,KAAA,EAED,eAAAG,QAAA,EAAsC;MAClC,MAAM,IAAI,CAACC,aAAa,CAAC,CAAC;IAC9B;EAAC;IAAAL,GAAA;IAAAC,KAAA,EAED,eAAAK,MAAmBC,IAAyB,EAAEC,MAAc,EAAoB;MAC5E,IACI,CAACpB,eAAe,CAACD,EAAE,IACnBC,eAAe,CAACD,EAAE,CAACsB,UAAU,KAAKC,2BAAoB,CAACC,MAAM,IAC7DvB,eAAe,CAACD,EAAE,CAACsB,UAAU,KAAKC,2BAAoB,CAACE,OAAO,EAChE;QACExB,eAAe,CAACD,EAAE,GAAG0B,SAA4B;QAEjD,OAAO,IAAI;MACf;MACAzB,eAAe,CAACD,EAAE,CAACmB,KAAK,CAACC,IAAI,EAAEC,MAAM,CAAC;MAEtCpB,eAAe,CAACD,EAAE,GAAG0B,SAA4B;MACjD,OAAO,IAAI;IACf;EAAC;IAAAb,GAAA;IAAAC,KAAA,EAED,eAAAa,KAAyDC,IAAO,EAAiB;MAC7E,IAAMC,UAAU,GAAG,MAAM,IAAI,CAACX,aAAa,CAAC,CAAC;MAC7C,IAAIW,UAAU,CAACP,UAAU,KAAKC,2BAAoB,CAACO,IAAI,EAAE;QACrDC,OAAO,CAACC,IAAI,CAAC,yDAAyD,EAAEJ,IAAI,CAAC;QAC7E;MACJ;MACAC,UAAU,CAACF,IAAI,CAACM,IAAI,CAACC,SAAS,CAACN,IAAI,CAAC,CAAC;IACzC;EAAC;IAAAf,GAAA;IAAAC,KAAA,EAED,SAAAqB,YAAA,EAA8B;MAC1B,OAAOlC,eAAe,CAACD,EAAE,EAAEsB,UAAU,KAAKC,2BAAoB,CAACO,IAAI;IACvE;EAAC;IAAAjB,GAAA;IAAAC,KAAA,EAED,SAAAsB,SAAA,EAA2B;MACvB,OAAOnC,eAAe,CAACD,EAAE,EAAEsB,UAAU,KAAKC,2BAAoB,CAACC,MAAM;IACzE;EAAC;IAAAX,GAAA;IAAAC,KAAA,EAED,eAAAuB,UAAA,EAA4D;MACxD,IAAMC,KAAK,GAAG,MAAM,IAAI,CAAC7B,QAAQ,CAAC,CAAC;MACnC,IAAI,CAAC6B,KAAK,EAAE;QACRP,OAAO,CAACQ,KAAK,0CAA0C,CAAC;QACxD,OAAO,IAAI;MACf;MACA,OAAO;QACHD,KAAK,EAALA,KAAK;QACL3C,GAAG,KAAA6C,MAAA,CAAK,IAAI,CAAC7C,GAAG,aAAA6C,MAAA,CAAUF,KAAK,cAAAE,MAAA,CAAW,IAAI,CAACjC,MAAM,cAAAiC,MAAA,CAAW,IAAI,CAAChC,MAAM;MAC/E,CAAC;IACL;EAAC;IAAAK,GAAA;IAAAC,KAAA,EAED,eAAAI,cAAA,EAAkD;MAAA,IAAAuB,KAAA;MAC9C,IAAIxC,eAAe,CAACD,EAAE,EAAEsB,UAAU,KAAKC,2BAAoB,CAACO,IAAI,EAAE;QAC9D,OAAO7B,eAAe,CAACD,EAAE;MAC7B,CAAC,MAAM,IAAIC,eAAe,CAACD,EAAE,EAAEsB,UAAU,KAAKC,2BAAoB,CAACmB,UAAU,EAAE;QAC3E,OAAOzC,eAAe,CAACD,EAAE;MAC7B;MAEA,IAAM2C,MAAM,GAAG,MAAM,IAAI,CAACN,SAAS,CAAC,CAAC;MACrC,IAAI,CAACM,MAAM,EAAE;QACT,MAAM,IAAIC,KAAK,2CAA2C,CAAC;MAC/D;MACA,IAAQjD,GAAG,GAAKgD,MAAM,CAAdhD,GAAG;MAEXM,eAAe,CAACD,EAAE,GAAG,IAAI,CAACW,OAAO,CAAChB,GAAG,EAAE,IAAI,CAACC,QAAQ,CAAC;MAErD,IAAMiD,KAAK,GAAG,IAAIC,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC;MAElChB,OAAO,CAACiB,GAAG,6BAAAR,MAAA,CAA6B,IAAI,CAAC7C,GAAG,QAAK,CAAC;MAEtDM,eAAe,CAACD,EAAE,CAACiD,gBAAgB,CAAC,MAAM,EAAE,UAAAC,KAAK,EAAI;QACjD,IAAMC,GAAG,GAAG,IAAIL,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC;QAChChB,OAAO,CAACiB,GAAG,oBAAAR,MAAA,CAAoBW,GAAG,GAAGN,KAAK,QAAK,CAAC;QAChD,OAAOJ,KAAI,CAAC/B,mBAAmB,CAAC0C,aAAa,CAACF,KAAK,CAAC;MACxD,CAAC,CAAC;MACFjD,eAAe,CAACD,EAAE,CAACiD,gBAAgB,CAAC,OAAO,EAAE,UAAAC,KAAK,EAAI;QAClD,OAAOT,KAAI,CAAC/B,mBAAmB,CAAC2C,cAAc,CAACH,KAAK,CAAC;MACzD,CAAC,CAAC;MACFjD,eAAe,CAACD,EAAE,CAACiD,gBAAgB,CAAC,OAAO,EAAE,UAAAC,KAAK,EAAI;QAClDnB,OAAO,CAACC,IAAI,uCAAuCkB,KAAK,CAAC;QACzD,OAAOT,KAAI,CAAC/B,mBAAmB,CAAC4C,cAAc,CAACJ,KAAK,CAAC;MACzD,CAAC,CAAC;MAEFjD,eAAe,CAACD,EAAE,CAACiD,gBAAgB,CAC/B,SAAS,EACT,UAACC,KAA6C,EAAK;QAC/C,OAAOT,KAAI,CAAC/B,mBAAmB,CAAC6C,gBAAgB,CAACL,KAAK,CAAC;MAC3D,CACJ,CAAC;MAED,OAAOjD,eAAe,CAACD,EAAE;IAC7B;EAAC;AAAA;AAGE,IAAMwD,0BAA0B,GAAArD,OAAA,CAAAqD,0BAAA,GAAG,SAA7BA,0BAA0BA,CACnCpD,MAAmC,EACX;EACxB,OAAO,IAAIF,oBAAoB,CAACE,MAAM,CAAC;AAC3C,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_types","require","defaultFactory","url","protocol","WebSocket","window","WebinyWebsocketsConnectionCache","ws","connectionCache","WebsocketsConnection","exports","params","_classCallCheck2","default","tenant","locale","getToken","subscriptionManager","factory","_createClass2","key","value","setTenant","setLocale","connect","getConnection","close","code","reason","readyState","WebsocketsReadyState","CLOSED","CLOSING","undefined","send","data","connection","OPEN","console","info","JSON","stringify","isConnected","isClosed","createUrl","token","error","concat","_this","CONNECTING","result","Error","start","Date","getTime","log","addEventListener","event","end","triggerOnOpen","triggerOnClose","ex","triggerOnError","triggerOnMessage","createWebsocketsConnection"],"sources":["WebsocketsConnection.ts"],"sourcesContent":["import {\n IGenericData,\n IWebsocketsConnection,\n IWebsocketsConnectionFactory,\n IWebsocketsConnectProtocol,\n IWebsocketsManagerMessageEvent,\n IWebsocketsSubscriptionManager,\n WebsocketsCloseCode,\n WebsocketsReadyState\n} from \"./types\";\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 locale: 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 locale: 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.locale = params.locale;\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 setLocale(locale: string): void {\n this.locale = locale;\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}&locale=${this.locale}`\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"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/app-websockets",
3
- "version": "5.41.5-beta.2",
3
+ "version": "5.41.5-beta.4",
4
4
  "main": "index.js",
5
5
  "repository": {
6
6
  "type": "git",
@@ -13,11 +13,11 @@
13
13
  ],
14
14
  "license": "MIT",
15
15
  "dependencies": {
16
- "@webiny/app": "5.41.5-beta.2",
17
- "@webiny/app-i18n": "5.41.5-beta.2",
18
- "@webiny/app-security": "5.41.5-beta.2",
19
- "@webiny/app-tenancy": "5.41.5-beta.2",
20
- "@webiny/utils": "5.41.5-beta.2",
16
+ "@webiny/app": "5.41.5-beta.4",
17
+ "@webiny/app-i18n": "5.41.5-beta.4",
18
+ "@webiny/app-security": "5.41.5-beta.4",
19
+ "@webiny/app-tenancy": "5.41.5-beta.4",
20
+ "@webiny/utils": "5.41.5-beta.4",
21
21
  "react": "18.2.0",
22
22
  "react-dom": "18.2.0"
23
23
  },
@@ -27,8 +27,8 @@
27
27
  "@babel/preset-env": "7.24.3",
28
28
  "@babel/preset-react": "7.24.1",
29
29
  "@babel/preset-typescript": "7.24.1",
30
- "@webiny/cli": "5.41.5-beta.2",
31
- "@webiny/project-utils": "5.41.5-beta.2",
30
+ "@webiny/cli": "5.41.5-beta.4",
31
+ "@webiny/project-utils": "5.41.5-beta.4",
32
32
  "rimraf": "5.0.5",
33
33
  "ttypescript": "1.5.15",
34
34
  "typescript": "4.9.5"
@@ -41,5 +41,5 @@
41
41
  "build": "yarn webiny run build",
42
42
  "watch": "yarn webiny run watch"
43
43
  },
44
- "gitHead": "0c7eb4dc6f7d10e97a22cfcfb0904883810dc895"
44
+ "gitHead": "8ef22d350742cb0b25d1e946fe0fa76a87f93dbd"
45
45
  }
package/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { IGenericData, IWebsocketsAction, IWebsocketsManagerMessageEvent, IWebsocketsSubscription } from "./domain/types";
1
+ import { IGenericData, IWebsocketsAction, IWebsocketsManagerCloseEvent, IWebsocketsManagerErrorEvent, IWebsocketsManagerMessageEvent, IWebsocketsSubscription } from "./domain/types";
2
2
  export * from "./domain/types";
3
3
  export interface IWebsocketsContextSendCallable {
4
4
  <T extends IGenericData = IGenericData>(action: string, data?: T, timeout?: number): void;
@@ -9,10 +9,18 @@ export interface IWebsocketsContextCreateActionCallable<T extends IGenericData =
9
9
  export interface ISocketsContextOnMessageCallable {
10
10
  <T extends IncomingGenericData = IncomingGenericData>(action: string, cb: (data: T) => void): IWebsocketsSubscription<IWebsocketsManagerMessageEvent<T>>;
11
11
  }
12
+ export interface ISocketsContextOnErrorCallable {
13
+ (cb: (data: IWebsocketsManagerErrorEvent) => void): IWebsocketsSubscription<IWebsocketsManagerErrorEvent>;
14
+ }
15
+ export interface ISocketsContextOnCloseCallable {
16
+ (cb: (data: IWebsocketsManagerCloseEvent) => void): IWebsocketsSubscription<IWebsocketsManagerCloseEvent>;
17
+ }
12
18
  export interface IWebsocketsContext {
13
19
  send: IWebsocketsContextSendCallable;
14
20
  createAction: IWebsocketsContextCreateActionCallable;
15
21
  onMessage: ISocketsContextOnMessageCallable;
22
+ onError: ISocketsContextOnErrorCallable;
23
+ onClose: ISocketsContextOnCloseCallable;
16
24
  }
17
25
  export interface IncomingGenericData extends IGenericData {
18
26
  action: string;
package/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["_types","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["types.ts"],"sourcesContent":["import {\n IGenericData,\n IWebsocketsAction,\n IWebsocketsManagerMessageEvent,\n IWebsocketsSubscription\n} from \"~/domain/types\";\n\nexport * from \"./domain/types\";\n\nexport interface IWebsocketsContextSendCallable {\n <T extends IGenericData = IGenericData>(action: string, data?: T, timeout?: number): void;\n}\n\nexport interface IWebsocketsContextCreateActionCallable<\n T extends IGenericData = IGenericData,\n R extends IGenericData = IGenericData\n> {\n (name: string): IWebsocketsAction<T, R>;\n}\n\nexport interface ISocketsContextOnMessageCallable {\n <T extends IncomingGenericData = IncomingGenericData>(\n action: string,\n cb: (data: T) => void\n ): IWebsocketsSubscription<IWebsocketsManagerMessageEvent<T>>;\n}\n\nexport interface IWebsocketsContext {\n send: IWebsocketsContextSendCallable;\n createAction: IWebsocketsContextCreateActionCallable;\n onMessage: ISocketsContextOnMessageCallable;\n}\n\nexport interface IncomingGenericData extends IGenericData {\n action: string;\n}\n"],"mappings":";;;;;AAOA,IAAAA,MAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,MAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,MAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAT,MAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"names":["_types","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["types.ts"],"sourcesContent":["import {\n IGenericData,\n IWebsocketsAction,\n IWebsocketsManagerCloseEvent,\n IWebsocketsManagerErrorEvent,\n IWebsocketsManagerMessageEvent,\n IWebsocketsSubscription\n} from \"~/domain/types\";\n\nexport * from \"./domain/types\";\n\nexport interface IWebsocketsContextSendCallable {\n <T extends IGenericData = IGenericData>(action: string, data?: T, timeout?: number): void;\n}\n\nexport interface IWebsocketsContextCreateActionCallable<\n T extends IGenericData = IGenericData,\n R extends IGenericData = IGenericData\n> {\n (name: string): IWebsocketsAction<T, R>;\n}\n\nexport interface ISocketsContextOnMessageCallable {\n <T extends IncomingGenericData = IncomingGenericData>(\n action: string,\n cb: (data: T) => void\n ): IWebsocketsSubscription<IWebsocketsManagerMessageEvent<T>>;\n}\n\nexport interface ISocketsContextOnErrorCallable {\n (\n cb: (data: IWebsocketsManagerErrorEvent) => void\n ): IWebsocketsSubscription<IWebsocketsManagerErrorEvent>;\n}\n\nexport interface ISocketsContextOnCloseCallable {\n (\n cb: (data: IWebsocketsManagerCloseEvent) => void\n ): IWebsocketsSubscription<IWebsocketsManagerCloseEvent>;\n}\n\nexport interface IWebsocketsContext {\n send: IWebsocketsContextSendCallable;\n createAction: IWebsocketsContextCreateActionCallable;\n onMessage: ISocketsContextOnMessageCallable;\n onError: ISocketsContextOnErrorCallable;\n onClose: ISocketsContextOnCloseCallable;\n}\n\nexport interface IncomingGenericData extends IGenericData {\n action: string;\n}\n"],"mappings":";;;;;AASA,IAAAA,MAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,MAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,MAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAT,MAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}