@webiny/app-websockets 5.43.2 → 6.0.0-alpha.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.
Files changed (35) hide show
  1. package/WebsocketsContextProvider.js +74 -83
  2. package/WebsocketsContextProvider.js.map +1 -1
  3. package/domain/WebsocketsAction.js +20 -33
  4. package/domain/WebsocketsAction.js.map +1 -1
  5. package/domain/WebsocketsActions.js +73 -85
  6. package/domain/WebsocketsActions.js.map +1 -1
  7. package/domain/WebsocketsConnection.js +86 -114
  8. package/domain/WebsocketsConnection.js.map +1 -1
  9. package/domain/WebsocketsManager.js +31 -60
  10. package/domain/WebsocketsManager.js.map +1 -1
  11. package/domain/WebsocketsSubscriptionManager.js +62 -95
  12. package/domain/WebsocketsSubscriptionManager.js.map +1 -1
  13. package/domain/abstractions/IWebsocketsAction.js +1 -5
  14. package/domain/abstractions/IWebsocketsActions.js +1 -5
  15. package/domain/abstractions/IWebsocketsConnection.js +1 -7
  16. package/domain/abstractions/IWebsocketsConnection.js.map +1 -1
  17. package/domain/abstractions/IWebsocketsManager.js +1 -5
  18. package/domain/abstractions/IWebsocketsSubscriptionManager.js +1 -5
  19. package/domain/abstractions/types.js +1 -7
  20. package/domain/abstractions/types.js.map +1 -1
  21. package/domain/index.js +5 -60
  22. package/domain/index.js.map +1 -1
  23. package/domain/types.js +6 -71
  24. package/domain/types.js.map +1 -1
  25. package/hooks/index.js +1 -16
  26. package/hooks/index.js.map +1 -1
  27. package/hooks/useWebsockets.js +4 -10
  28. package/hooks/useWebsockets.js.map +1 -1
  29. package/index.js +10 -42
  30. package/index.js.map +1 -1
  31. package/package.json +8 -8
  32. package/types.js +2 -16
  33. package/types.js.map +1 -1
  34. package/utils/getUrl.js +2 -8
  35. package/utils/getUrl.js.map +1 -1
@@ -1,45 +1,36 @@
1
- "use strict";
2
-
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.WebsocketsContextProvider = exports.WebsocketsContext = void 0;
9
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
- var _react = _interopRequireWildcard(require("react"));
11
- var _appTenancy = require("@webiny/app-tenancy");
12
- var _appI18n = require("@webiny/app-i18n");
13
- var _appSecurity = require("@webiny/app-security");
14
- var _types = require("./types");
15
- var _domain = require("./domain");
16
- var _getUrl = require("./utils/getUrl");
17
- var WebsocketsContext = exports.WebsocketsContext = /*#__PURE__*/_react.default.createContext(undefined);
18
- var WebsocketsContextProvider = exports.WebsocketsContextProvider = function WebsocketsContextProvider(props) {
19
- var _useTenancy = (0, _appTenancy.useTenancy)(),
20
- tenant = _useTenancy.tenant;
21
- var _useI18N = (0, _appI18n.useI18N)(),
22
- getCurrentLocale = _useI18N.getCurrentLocale;
23
- var _useSecurity = (0, _appSecurity.useSecurity)(),
24
- getIdToken = _useSecurity.getIdToken;
25
- var locale = getCurrentLocale("default");
26
- var socketsRef = (0, _react.useRef)();
27
- var _useState = (0, _react.useState)({}),
28
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
29
- current = _useState2[0],
30
- setCurrent = _useState2[1];
31
- var getToken = (0, _react.useCallback)(async function () {
1
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
2
+ import { useTenancy } from "@webiny/app-tenancy";
3
+ import { useI18N } from "@webiny/app-i18n";
4
+ import { useSecurity } from "@webiny/app-security";
5
+ import { WebsocketsCloseCode } from "./types";
6
+ import { createWebsocketsAction, createWebsocketsActions, createWebsocketsConnection, createWebsocketsManager, createWebsocketsSubscriptionManager } from "./domain";
7
+ import { getUrl } from "./utils/getUrl";
8
+ export const WebsocketsContext = /*#__PURE__*/React.createContext(undefined);
9
+ export const WebsocketsContextProvider = props => {
10
+ const {
11
+ tenant
12
+ } = useTenancy();
13
+ const {
14
+ getCurrentLocale
15
+ } = useI18N();
16
+ const {
17
+ getIdToken
18
+ } = useSecurity();
19
+ const locale = getCurrentLocale("default");
20
+ const socketsRef = useRef();
21
+ const [current, setCurrent] = useState({});
22
+ const getToken = useCallback(async () => {
32
23
  return await getIdToken();
33
24
  }, [getIdToken]);
34
- var subscriptionManager = (0, _react.useMemo)(function () {
35
- var manager = (0, _domain.createWebsocketsSubscriptionManager)();
36
- var currentIteration = 0;
37
- manager.onClose(function (event) {
38
- if (currentIteration > 5 || event.code !== _types.WebsocketsCloseCode.GOING_AWAY) {
25
+ const subscriptionManager = useMemo(() => {
26
+ const manager = createWebsocketsSubscriptionManager();
27
+ let currentIteration = 0;
28
+ manager.onClose(event => {
29
+ if (currentIteration > 5 || event.code !== WebsocketsCloseCode.GOING_AWAY) {
39
30
  return;
40
31
  }
41
32
  currentIteration++;
42
- setTimeout(function () {
33
+ setTimeout(() => {
43
34
  if (!socketsRef.current) {
44
35
  return;
45
36
  } else if (socketsRef.current.isClosed()) {
@@ -57,12 +48,12 @@ var WebsocketsContextProvider = exports.WebsocketsContextProvider = function Web
57
48
  *
58
49
  * If we did not disconnect on component unmount, we would have a memory leak - multiple connections would be opened.
59
50
  */
60
- (0, _react.useEffect)(function () {
51
+ useEffect(() => {
61
52
  /**
62
53
  * We want to add a window event listener which will check if the connection is closed, and if its - it will connect again.
63
54
  */
64
- var abortController = new AbortController();
65
- window.addEventListener("focus", function () {
55
+ const abortController = new AbortController();
56
+ window.addEventListener("focus", () => {
66
57
  if (!socketsRef.current) {
67
58
  return;
68
59
  } else if (socketsRef.current.isClosed()) {
@@ -72,99 +63,99 @@ var WebsocketsContextProvider = exports.WebsocketsContextProvider = function Web
72
63
  }, {
73
64
  signal: abortController.signal
74
65
  });
75
- window.addEventListener("close", function () {
66
+ window.addEventListener("close", () => {
76
67
  subscriptionManager.triggerOnClose(new CloseEvent("windowClose", {
77
- code: _types.WebsocketsCloseCode.GOING_AWAY,
68
+ code: WebsocketsCloseCode.GOING_AWAY,
78
69
  reason: "Closing Window or Tab."
79
70
  }));
80
71
  }, {
81
72
  signal: abortController.signal
82
73
  });
83
- return function () {
74
+ return () => {
84
75
  abortController.abort();
85
76
  };
86
77
  }, []);
87
- (0, _react.useEffect)(function () {
88
- (async function () {
89
- var token = await getToken();
78
+ useEffect(() => {
79
+ (async () => {
80
+ const token = await getToken();
90
81
  if (!token || !tenant || !locale) {
91
82
  return;
92
83
  } else if (current.tenant === tenant && current.locale === locale) {
93
84
  return;
94
85
  } else if (socketsRef.current) {
95
- await socketsRef.current.close(_types.WebsocketsCloseCode.NORMAL, "Changing tenant/locale.");
86
+ await socketsRef.current.close(WebsocketsCloseCode.NORMAL, "Changing tenant/locale.");
96
87
  }
97
- var url = (0, _getUrl.getUrl)();
88
+ const url = getUrl();
98
89
  if (!url) {
99
90
  console.error("Not possible to connect to the websocket without a valid URL.", {
100
- tenant: tenant,
101
- locale: locale,
102
- token: token
91
+ tenant,
92
+ locale,
93
+ token
103
94
  });
104
95
  return;
105
96
  }
106
- socketsRef.current = (0, _domain.createWebsocketsManager)((0, _domain.createWebsocketsConnection)({
107
- subscriptionManager: subscriptionManager,
108
- url: url,
109
- tenant: tenant,
110
- locale: locale,
111
- getToken: getToken,
97
+ socketsRef.current = createWebsocketsManager(createWebsocketsConnection({
98
+ subscriptionManager,
99
+ url,
100
+ tenant,
101
+ locale,
102
+ getToken,
112
103
  protocol: ["webiny-ws-v1"]
113
104
  }));
114
105
  await socketsRef.current.connect();
115
106
  setCurrent({
116
- tenant: tenant,
117
- locale: locale
107
+ tenant,
108
+ locale
118
109
  });
119
110
  })();
120
111
  }, [tenant, locale, subscriptionManager, getToken]);
121
- var websocketActions = (0, _react.useMemo)(function () {
122
- return (0, _domain.createWebsocketsActions)({
112
+ const websocketActions = useMemo(() => {
113
+ return createWebsocketsActions({
123
114
  manager: socketsRef.current,
124
- tenant: tenant,
125
- locale: locale,
126
- getToken: getToken
115
+ tenant,
116
+ locale,
117
+ getToken
127
118
  });
128
119
  }, [socketsRef.current, tenant, locale, getToken]);
129
- var send = (0, _react.useCallback)(async function (action, data, timeout) {
120
+ const send = useCallback(async (action, data, timeout) => {
130
121
  return websocketActions.run({
131
- action: action,
132
- data: data,
133
- timeout: timeout
122
+ action,
123
+ data,
124
+ timeout
134
125
  });
135
126
  }, [websocketActions]);
136
- var createAction = (0, _react.useCallback)(function (name) {
137
- return (0, _domain.createWebsocketsAction)(websocketActions, name);
127
+ const createAction = useCallback(name => {
128
+ return createWebsocketsAction(websocketActions, name);
138
129
  }, [websocketActions]);
139
- var onMessage = (0, _react.useCallback)(function (action, cb) {
140
- return socketsRef.current.onMessage(async function (event) {
130
+ const onMessage = useCallback((action, cb) => {
131
+ return socketsRef.current.onMessage(async event => {
141
132
  if (event.data.action !== action) {
142
133
  return;
143
134
  }
144
135
  cb(event.data);
145
136
  });
146
137
  }, [socketsRef.current]);
147
- var onError = (0, _react.useCallback)(function (cb) {
148
- return socketsRef.current.onError(function (data) {
138
+ const onError = useCallback(cb => {
139
+ return socketsRef.current.onError(data => {
149
140
  return cb(data);
150
141
  });
151
142
  }, [socketsRef.current]);
152
- var onClose = (0, _react.useCallback)(function (cb) {
153
- return socketsRef.current.onClose(function (data) {
143
+ const onClose = useCallback(cb => {
144
+ return socketsRef.current.onClose(data => {
154
145
  return cb(data);
155
146
  });
156
147
  }, [socketsRef.current]);
157
148
  if (!socketsRef.current) {
158
149
  return props.loader || null;
159
150
  }
160
- var value = {
161
- send: send,
162
- createAction: createAction,
163
- onMessage: onMessage,
164
- onError: onError,
165
- onClose: onClose
151
+ const value = {
152
+ send,
153
+ createAction,
154
+ onMessage,
155
+ onError,
156
+ onClose
166
157
  };
167
- return /*#__PURE__*/_react.default.createElement(WebsocketsContext.Provider, Object.assign({
158
+ return /*#__PURE__*/React.createElement(WebsocketsContext.Provider, Object.assign({
168
159
  value: value
169
160
  }, props));
170
161
  };
@@ -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","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":[]}
1
+ {"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","useTenancy","useI18N","useSecurity","WebsocketsCloseCode","createWebsocketsAction","createWebsocketsActions","createWebsocketsConnection","createWebsocketsManager","createWebsocketsSubscriptionManager","getUrl","WebsocketsContext","createContext","undefined","WebsocketsContextProvider","props","tenant","getCurrentLocale","getIdToken","locale","socketsRef","current","setCurrent","getToken","subscriptionManager","manager","currentIteration","onClose","event","code","GOING_AWAY","setTimeout","isClosed","console","log","connect","abortController","AbortController","window","addEventListener","signal","triggerOnClose","CloseEvent","reason","abort","token","close","NORMAL","url","error","protocol","websocketActions","send","action","data","timeout","run","createAction","name","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":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAChF,SAASC,UAAU,QAAQ,qBAAqB;AAChD,SAASC,OAAO,QAAQ,kBAAkB;AAC1C,SAASC,WAAW,QAAQ,sBAAsB;AAClD,SAMIC,mBAAmB;AAEvB,SACIC,sBAAsB,EACtBC,uBAAuB,EACvBC,0BAA0B,EAC1BC,uBAAuB,EACvBC,mCAAmC;AAGvC,SAASC,MAAM;AAOf,OAAO,MAAMC,iBAAiB,gBAAGhB,KAAK,CAACiB,aAAa,CAChDC,SACJ,CAAC;AAOD,OAAO,MAAMC,yBAAyB,GAAIC,KAAsC,IAAK;EACjF,MAAM;IAAEC;EAAO,CAAC,GAAGf,UAAU,CAAC,CAAC;EAC/B,MAAM;IAAEgB;EAAiB,CAAC,GAAGf,OAAO,CAAC,CAAC;EACtC,MAAM;IAAEgB;EAAW,CAAC,GAAGf,WAAW,CAAC,CAAC;EACpC,MAAMgB,MAAM,GAAGF,gBAAgB,CAAC,SAAS,CAAC;EAE1C,MAAMG,UAAU,GAAGrB,MAAM,CAAqB,CAAC;EAE/C,MAAM,CAACsB,OAAO,EAAEC,UAAU,CAAC,GAAGtB,QAAQ,CAAe,CAAC,CAAC,CAAC;EAExD,MAAMuB,QAAQ,GAAG3B,WAAW,CAAC,YAAY;IACrC,OAAO,MAAMsB,UAAU,CAAC,CAAC;EAC7B,CAAC,EAAE,CAACA,UAAU,CAAC,CAAC;EAEhB,MAAMM,mBAAmB,GAAG1B,OAAO,CAAC,MAAM;IACtC,MAAM2B,OAAO,GAAGhB,mCAAmC,CAAC,CAAC;IAErD,IAAIiB,gBAAgB,GAAG,CAAC;IACxBD,OAAO,CAACE,OAAO,CAACC,KAAK,IAAI;MACrB,IAAIF,gBAAgB,GAAG,CAAC,IAAIE,KAAK,CAACC,IAAI,KAAKzB,mBAAmB,CAAC0B,UAAU,EAAE;QACvE;MACJ;MACAJ,gBAAgB,EAAE;MAClBK,UAAU,CAAC,MAAM;QACb,IAAI,CAACX,UAAU,CAACC,OAAO,EAAE;UACrB;QACJ,CAAC,MAAM,IAAID,UAAU,CAACC,OAAO,CAACW,QAAQ,CAAC,CAAC,EAAE;UACtCC,OAAO,CAACC,GAAG,CAAC,yBAAyB,CAAC;UAEtCd,UAAU,CAACC,OAAO,CAACc,OAAO,CAAC,CAAC;QAChC;MACJ,CAAC,EAAE,IAAI,CAAC;IACZ,CAAC,CAAC;IAEF,OAAOV,OAAO;EAClB,CAAC,EAAE,EAAE,CAAC;;EAEN;AACJ;AACA;AACA;AACA;AACA;EACI5B,SAAS,CAAC,MAAM;IACZ;AACR;AACA;IACQ,MAAMuC,eAAe,GAAG,IAAIC,eAAe,CAAC,CAAC;IAE7CC,MAAM,CAACC,gBAAgB,CACnB,OAAO,EACP,MAAM;MACF,IAAI,CAACnB,UAAU,CAACC,OAAO,EAAE;QACrB;MACJ,CAAC,MAAM,IAAID,UAAU,CAACC,OAAO,CAACW,QAAQ,CAAC,CAAC,EAAE;QACtCC,OAAO,CAACC,GAAG,CAAC,kCAAkC,CAAC;QAC/Cd,UAAU,CAACC,OAAO,CAACc,OAAO,CAAC,CAAC;MAChC;IACJ,CAAC,EACD;MAAEK,MAAM,EAAEJ,eAAe,CAACI;IAAO,CACrC,CAAC;IACDF,MAAM,CAACC,gBAAgB,CACnB,OAAO,EACP,MAAM;MACFf,mBAAmB,CAACiB,cAAc,CAC9B,IAAIC,UAAU,CAAC,aAAa,EAAE;QAC1Bb,IAAI,EAAEzB,mBAAmB,CAAC0B,UAAU;QACpCa,MAAM,EAAE;MACZ,CAAC,CACL,CAAC;IACL,CAAC,EACD;MAAEH,MAAM,EAAEJ,eAAe,CAACI;IAAO,CACrC,CAAC;IAED,OAAO,MAAM;MACTJ,eAAe,CAACQ,KAAK,CAAC,CAAC;IAC3B,CAAC;EACL,CAAC,EAAE,EAAE,CAAC;EAEN/C,SAAS,CAAC,MAAM;IACZ,CAAC,YAAY;MACT,MAAMgD,KAAK,GAAG,MAAMtB,QAAQ,CAAC,CAAC;MAC9B,IAAI,CAACsB,KAAK,IAAI,CAAC7B,MAAM,IAAI,CAACG,MAAM,EAAE;QAC9B;MACJ,CAAC,MAAM,IAAIE,OAAO,CAACL,MAAM,KAAKA,MAAM,IAAIK,OAAO,CAACF,MAAM,KAAKA,MAAM,EAAE;QAC/D;MACJ,CAAC,MAAM,IAAIC,UAAU,CAACC,OAAO,EAAE;QAC3B,MAAMD,UAAU,CAACC,OAAO,CAACyB,KAAK,CAC1B1C,mBAAmB,CAAC2C,MAAM,EAC1B,yBACJ,CAAC;MACL;MACA,MAAMC,GAAG,GAAGtC,MAAM,CAAC,CAAC;MAEpB,IAAI,CAACsC,GAAG,EAAE;QACNf,OAAO,CAACgB,KAAK,CAAC,+DAA+D,EAAE;UAC3EjC,MAAM;UACNG,MAAM;UACN0B;QACJ,CAAC,CAAC;QACF;MACJ;MAEAzB,UAAU,CAACC,OAAO,GAAGb,uBAAuB,CACxCD,0BAA0B,CAAC;QACvBiB,mBAAmB;QACnBwB,GAAG;QACHhC,MAAM;QACNG,MAAM;QACNI,QAAQ;QACR2B,QAAQ,EAAE,CAAC,cAAc;MAC7B,CAAC,CACL,CAAC;MACD,MAAM9B,UAAU,CAACC,OAAO,CAACc,OAAO,CAAC,CAAC;MAElCb,UAAU,CAAC;QACPN,MAAM;QACNG;MACJ,CAAC,CAAC;IACN,CAAC,EAAE,CAAC;EACR,CAAC,EAAE,CAACH,MAAM,EAAEG,MAAM,EAAEK,mBAAmB,EAAED,QAAQ,CAAC,CAAC;EAEnD,MAAM4B,gBAAgB,GAAGrD,OAAO,CAAC,MAAM;IACnC,OAAOQ,uBAAuB,CAAC;MAC3BmB,OAAO,EAAEL,UAAU,CAACC,OAAQ;MAC5BL,MAAM;MACNG,MAAM;MACNI;IACJ,CAAC,CAAC;EACN,CAAC,EAAE,CAACH,UAAU,CAACC,OAAO,EAAEL,MAAM,EAAEG,MAAM,EAAEI,QAAQ,CAAC,CAAC;EAElD,MAAM6B,IAAI,GAAGxD,WAAW,CACpB,OAAOyD,MAAM,EAAEC,IAAI,EAAEC,OAAO,KAAK;IAC7B,OAAOJ,gBAAgB,CAACK,GAAG,CAAC;MACxBH,MAAM;MACNC,IAAI;MACJC;IACJ,CAAC,CAAC;EACN,CAAC,EACD,CAACJ,gBAAgB,CACrB,CAAC;EAED,MAAMM,YAAY,GAAG7D,WAAW,CAExB8D,IAAY,IACX;IACD,OAAOrD,sBAAsB,CAAO8C,gBAAgB,EAAEO,IAAI,CAAC;EAC/D,CAAC,EACD,CAACP,gBAAgB,CACrB,CAAC;EAED,MAAMQ,SAAS,GAAG/D,WAAW,CACzB,CACIyD,MAAc,EACdO,EAAqB,KACpB;IACD,OAAOxC,UAAU,CAACC,OAAO,CAAEsC,SAAS,CAAI,MAAM/B,KAAK,IAAI;MACnD,IAAIA,KAAK,CAAC0B,IAAI,CAACD,MAAM,KAAKA,MAAM,EAAE;QAC9B;MACJ;MACAO,EAAE,CAAChC,KAAK,CAAC0B,IAAI,CAAC;IAClB,CAAC,CAAC;EACN,CAAC,EACD,CAAClC,UAAU,CAACC,OAAO,CACvB,CAAC;EAED,MAAMwC,OAAO,GAAGjE,WAAW,CACtBgE,EAAgD,IAAK;IAClD,OAAOxC,UAAU,CAACC,OAAO,CAAEwC,OAAO,CAACP,IAAI,IAAI;MACvC,OAAOM,EAAE,CAACN,IAAI,CAAC;IACnB,CAAC,CAAC;EACN,CAAC,EACD,CAAClC,UAAU,CAACC,OAAO,CACvB,CAAC;EAED,MAAMM,OAAO,GAAG/B,WAAW,CACtBgE,EAAgD,IAAK;IAClD,OAAOxC,UAAU,CAACC,OAAO,CAAEM,OAAO,CAAC2B,IAAI,IAAI;MACvC,OAAOM,EAAE,CAACN,IAAI,CAAC;IACnB,CAAC,CAAC;EACN,CAAC,EACD,CAAClC,UAAU,CAACC,OAAO,CACvB,CAAC;EAED,IAAI,CAACD,UAAU,CAACC,OAAO,EAAE;IACrB,OAAON,KAAK,CAAC+C,MAAM,IAAI,IAAI;EAC/B;EAEA,MAAMC,KAAyB,GAAG;IAC9BX,IAAI;IACJK,YAAY;IACZE,SAAS;IACTE,OAAO;IACPlC;EACJ,CAAC;EACD,oBAAOhC,KAAA,CAAAqE,aAAA,CAACrD,iBAAiB,CAACsD,QAAQ,EAAAC,MAAA,CAAAC,MAAA;IAACJ,KAAK,EAAEA;EAAM,GAAKhD,KAAK,CAAG,CAAC;AAClE,CAAC","ignoreList":[]}
@@ -1,40 +1,27 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.createWebsocketsAction = exports.WebsocketsAction = void 0;
8
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
- var WebsocketsAction = exports.WebsocketsAction = /*#__PURE__*/function () {
11
- function WebsocketsAction(actions, name) {
12
- (0, _classCallCheck2.default)(this, WebsocketsAction);
1
+ export class WebsocketsAction {
2
+ constructor(actions, name) {
13
3
  this.name = name;
14
4
  this.actions = actions;
15
5
  }
16
- return (0, _createClass2.default)(WebsocketsAction, [{
17
- key: "trigger",
18
- value: async function trigger(params) {
19
- var _ref = params || {},
20
- data = _ref.data,
21
- onResponse = _ref.onResponse,
22
- _ref$timeout = _ref.timeout,
23
- timeout = _ref$timeout === void 0 ? 10000 : _ref$timeout;
24
- var promise = this.actions.run({
25
- action: this.name,
26
- data: data,
27
- timeout: onResponse && timeout > 0 ? timeout : undefined
28
- });
29
- if (!onResponse) {
30
- return null;
31
- }
32
- var result = await promise;
33
- return onResponse(result);
6
+ async trigger(params) {
7
+ const {
8
+ data,
9
+ onResponse,
10
+ timeout = 10000
11
+ } = params || {};
12
+ const promise = this.actions.run({
13
+ action: this.name,
14
+ data,
15
+ timeout: onResponse && timeout > 0 ? timeout : undefined
16
+ });
17
+ if (!onResponse) {
18
+ return null;
34
19
  }
35
- }]);
36
- }();
37
- var createWebsocketsAction = exports.createWebsocketsAction = function createWebsocketsAction(actions, name) {
20
+ const result = await promise;
21
+ return onResponse(result);
22
+ }
23
+ }
24
+ export const createWebsocketsAction = (actions, name) => {
38
25
  return new WebsocketsAction(actions, name);
39
26
  };
40
27
 
@@ -1 +1 @@
1
- {"version":3,"names":["WebsocketsAction","exports","actions","name","_classCallCheck2","default","_createClass2","key","value","trigger","params","_ref","data","onResponse","_ref$timeout","timeout","promise","run","action","undefined","result","createWebsocketsAction"],"sources":["WebsocketsAction.ts"],"sourcesContent":["import {\n IGenericData,\n IWebsocketsAction,\n IWebsocketsActions,\n IWebsocketsActionsTriggerParams\n} from \"./types\";\n\nexport class WebsocketsAction<\n T extends IGenericData = IGenericData,\n R extends IGenericData = IGenericData\n> implements IWebsocketsAction<T, R>\n{\n private readonly actions: IWebsocketsActions;\n private readonly name: string;\n\n public constructor(actions: IWebsocketsActions, name: string) {\n this.name = name;\n this.actions = actions;\n }\n\n public async trigger(params?: IWebsocketsActionsTriggerParams<T, R>): Promise<R | null> {\n const { data, onResponse, timeout = 10000 } = params || {};\n const promise = this.actions.run<T, R>({\n action: this.name,\n data,\n timeout: onResponse && timeout > 0 ? timeout : undefined\n });\n if (!onResponse) {\n return null;\n }\n const result = await promise;\n\n return onResponse(result);\n }\n}\n\nexport const createWebsocketsAction = <\n T extends IGenericData = IGenericData,\n R extends IGenericData = IGenericData\n>(\n actions: IWebsocketsActions,\n name: string\n): IWebsocketsAction<T, R> => {\n return new WebsocketsAction<T, R>(actions, name);\n};\n"],"mappings":";;;;;;;;;IAOaA,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA;EAQzB,SAAAA,iBAAmBE,OAA2B,EAAEC,IAAY,EAAE;IAAA,IAAAC,gBAAA,CAAAC,OAAA,QAAAL,gBAAA;IAC1D,IAAI,CAACG,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACD,OAAO,GAAGA,OAAO;EAC1B;EAAC,WAAAI,aAAA,CAAAD,OAAA,EAAAL,gBAAA;IAAAO,GAAA;IAAAC,KAAA,EAED,eAAaC,OAAOA,CAACC,MAA8C,EAAqB;MACpF,IAAAC,IAAA,GAA8CD,MAAM,IAAI,CAAC,CAAC;QAAlDE,IAAI,GAAAD,IAAA,CAAJC,IAAI;QAAEC,UAAU,GAAAF,IAAA,CAAVE,UAAU;QAAAC,YAAA,GAAAH,IAAA,CAAEI,OAAO;QAAPA,OAAO,GAAAD,YAAA,cAAG,KAAK,GAAAA,YAAA;MACzC,IAAME,OAAO,GAAG,IAAI,CAACd,OAAO,CAACe,GAAG,CAAO;QACnCC,MAAM,EAAE,IAAI,CAACf,IAAI;QACjBS,IAAI,EAAJA,IAAI;QACJG,OAAO,EAAEF,UAAU,IAAIE,OAAO,GAAG,CAAC,GAAGA,OAAO,GAAGI;MACnD,CAAC,CAAC;MACF,IAAI,CAACN,UAAU,EAAE;QACb,OAAO,IAAI;MACf;MACA,IAAMO,MAAM,GAAG,MAAMJ,OAAO;MAE5B,OAAOH,UAAU,CAACO,MAAM,CAAC;IAC7B;EAAC;AAAA;AAGE,IAAMC,sBAAsB,GAAApB,OAAA,CAAAoB,sBAAA,GAAG,SAAzBA,sBAAsBA,CAI/BnB,OAA2B,EAC3BC,IAAY,EACc;EAC1B,OAAO,IAAIH,gBAAgB,CAAOE,OAAO,EAAEC,IAAI,CAAC;AACpD,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["WebsocketsAction","constructor","actions","name","trigger","params","data","onResponse","timeout","promise","run","action","undefined","result","createWebsocketsAction"],"sources":["WebsocketsAction.ts"],"sourcesContent":["import {\n IGenericData,\n IWebsocketsAction,\n IWebsocketsActions,\n IWebsocketsActionsTriggerParams\n} from \"./types\";\n\nexport class WebsocketsAction<\n T extends IGenericData = IGenericData,\n R extends IGenericData = IGenericData\n> implements IWebsocketsAction<T, R>\n{\n private readonly actions: IWebsocketsActions;\n private readonly name: string;\n\n public constructor(actions: IWebsocketsActions, name: string) {\n this.name = name;\n this.actions = actions;\n }\n\n public async trigger(params?: IWebsocketsActionsTriggerParams<T, R>): Promise<R | null> {\n const { data, onResponse, timeout = 10000 } = params || {};\n const promise = this.actions.run<T, R>({\n action: this.name,\n data,\n timeout: onResponse && timeout > 0 ? timeout : undefined\n });\n if (!onResponse) {\n return null;\n }\n const result = await promise;\n\n return onResponse(result);\n }\n}\n\nexport const createWebsocketsAction = <\n T extends IGenericData = IGenericData,\n R extends IGenericData = IGenericData\n>(\n actions: IWebsocketsActions,\n name: string\n): IWebsocketsAction<T, R> => {\n return new WebsocketsAction<T, R>(actions, name);\n};\n"],"mappings":"AAOA,OAAO,MAAMA,gBAAgB,CAI7B;EAIWC,WAAWA,CAACC,OAA2B,EAAEC,IAAY,EAAE;IAC1D,IAAI,CAACA,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACD,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAaE,OAAOA,CAACC,MAA8C,EAAqB;IACpF,MAAM;MAAEC,IAAI;MAAEC,UAAU;MAAEC,OAAO,GAAG;IAAM,CAAC,GAAGH,MAAM,IAAI,CAAC,CAAC;IAC1D,MAAMI,OAAO,GAAG,IAAI,CAACP,OAAO,CAACQ,GAAG,CAAO;MACnCC,MAAM,EAAE,IAAI,CAACR,IAAI;MACjBG,IAAI;MACJE,OAAO,EAAED,UAAU,IAAIC,OAAO,GAAG,CAAC,GAAGA,OAAO,GAAGI;IACnD,CAAC,CAAC;IACF,IAAI,CAACL,UAAU,EAAE;MACb,OAAO,IAAI;IACf;IACA,MAAMM,MAAM,GAAG,MAAMJ,OAAO;IAE5B,OAAOF,UAAU,CAACM,MAAM,CAAC;EAC7B;AACJ;AAEA,OAAO,MAAMC,sBAAsB,GAAGA,CAIlCZ,OAA2B,EAC3BC,IAAY,KACc;EAC1B,OAAO,IAAIH,gBAAgB,CAAOE,OAAO,EAAEC,IAAI,CAAC;AACpD,CAAC","ignoreList":[]}
@@ -1,95 +1,83 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.createWebsocketsActions = exports.WebsocketsActions = void 0;
8
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
- var WebsocketsActions = exports.WebsocketsActions = /*#__PURE__*/function () {
11
- function WebsocketsActions(params) {
12
- (0, _classCallCheck2.default)(this, WebsocketsActions);
1
+ export class WebsocketsActions {
2
+ constructor(params) {
13
3
  this.manager = params.manager;
14
4
  this.tenant = params.tenant;
15
5
  this.locale = params.locale;
16
6
  this.getToken = params.getToken;
17
7
  }
18
- return (0, _createClass2.default)(WebsocketsActions, [{
19
- key: "run",
20
- value: async function run(params) {
21
- var _this = this;
22
- var action = params.action,
23
- timeout = params.timeout,
24
- data = params.data;
25
- var token = await this.getToken();
26
- if (!token) {
27
- console.error("Token is not set - cannot send a websocket message.");
28
- return null;
29
- } else if (!this.tenant) {
30
- console.error("Tenant is not set - cannot send a websocket message.");
31
- return null;
32
- } else if (!this.locale) {
33
- console.error("Locale is not set - cannot send a websocket message.");
34
- return null;
35
- }
36
- /**
37
- * If no timeout was sent, we will just send the message and return null.
38
- * No waiting for the response.
39
- */
40
- if (!timeout || timeout < 0) {
41
- this.manager.send({
42
- /**
43
- * It is ok to cast as we are checking the values a few lines above.
44
- */
45
- token: token,
46
- tenant: this.tenant,
47
- locale: this.locale,
48
- action: action,
49
- data: data || {}
50
- });
51
- return null;
52
- }
53
- /**
54
- * In case of a timeout, we will send the message and wait for the response.
55
- */
56
- return await new Promise(function (resolve, reject) {
57
- var promiseTimeout = null;
58
- var subscription = _this.manager.onMessage(async function (event) {
59
- if (event.data.messageId !== subscription.id) {
60
- return;
61
- }
62
- resolve(event.data);
63
- subscription.off();
64
- if (!promiseTimeout) {
65
- return;
66
- }
67
- clearTimeout(promiseTimeout);
68
- });
69
- promiseTimeout = setTimeout(function () {
70
- var message = "Websocket action \"".concat(action, "\" timeout.");
71
- subscription.off();
72
- reject(new Error(message));
73
- }, timeout);
74
- _this.manager.send({
75
- /**
76
- * It is ok to cast as we are checking the values a few lines above.
77
- */
78
- token: token,
79
- tenant: _this.tenant,
80
- locale: _this.locale,
81
- messageId: subscription.id,
82
- action: action,
83
- data: data || {}
84
- });
85
- }).catch(function (ex) {
86
- console.error("Error while sending websocket message.", ex);
87
- return null;
8
+ async run(params) {
9
+ const {
10
+ action,
11
+ timeout,
12
+ data
13
+ } = params;
14
+ const token = await this.getToken();
15
+ if (!token) {
16
+ console.error("Token is not set - cannot send a websocket message.");
17
+ return null;
18
+ } else if (!this.tenant) {
19
+ console.error("Tenant is not set - cannot send a websocket message.");
20
+ return null;
21
+ } else if (!this.locale) {
22
+ console.error("Locale is not set - cannot send a websocket message.");
23
+ return null;
24
+ }
25
+ /**
26
+ * If no timeout was sent, we will just send the message and return null.
27
+ * No waiting for the response.
28
+ */
29
+ if (!timeout || timeout < 0) {
30
+ this.manager.send({
31
+ /**
32
+ * It is ok to cast as we are checking the values a few lines above.
33
+ */
34
+ token,
35
+ tenant: this.tenant,
36
+ locale: this.locale,
37
+ action,
38
+ data: data || {}
88
39
  });
40
+ return null;
89
41
  }
90
- }]);
91
- }();
92
- var createWebsocketsActions = exports.createWebsocketsActions = function createWebsocketsActions(params) {
42
+ /**
43
+ * In case of a timeout, we will send the message and wait for the response.
44
+ */
45
+ return await new Promise((resolve, reject) => {
46
+ let promiseTimeout = null;
47
+ const subscription = this.manager.onMessage(async event => {
48
+ if (event.data.messageId !== subscription.id) {
49
+ return;
50
+ }
51
+ resolve(event.data);
52
+ subscription.off();
53
+ if (!promiseTimeout) {
54
+ return;
55
+ }
56
+ clearTimeout(promiseTimeout);
57
+ });
58
+ promiseTimeout = setTimeout(() => {
59
+ const message = `Websocket action "${action}" timeout.`;
60
+ subscription.off();
61
+ reject(new Error(message));
62
+ }, timeout);
63
+ this.manager.send({
64
+ /**
65
+ * It is ok to cast as we are checking the values a few lines above.
66
+ */
67
+ token,
68
+ tenant: this.tenant,
69
+ locale: this.locale,
70
+ messageId: subscription.id,
71
+ action,
72
+ data: data || {}
73
+ });
74
+ }).catch(ex => {
75
+ console.error("Error while sending websocket message.", ex);
76
+ return null;
77
+ });
78
+ }
79
+ }
80
+ export const createWebsocketsActions = params => {
93
81
  return new WebsocketsActions(params);
94
82
  };
95
83
 
@@ -1 +1 @@
1
- {"version":3,"names":["WebsocketsActions","exports","params","_classCallCheck2","default","manager","tenant","locale","getToken","_createClass2","key","value","run","_this","action","timeout","data","token","console","error","send","Promise","resolve","reject","promiseTimeout","subscription","onMessage","event","messageId","id","off","clearTimeout","setTimeout","message","concat","Error","catch","ex","createWebsocketsActions"],"sources":["WebsocketsActions.ts"],"sourcesContent":["import {\n IGenericData,\n IWebsocketsActions,\n IWebsocketsActionsRunParams,\n IWebsocketsManager,\n IWebsocketManagerSendData\n} from \"./types\";\n\nexport interface IWebsocketActionsParams {\n manager: IWebsocketsManager;\n tenant: string | null;\n locale: string | null;\n getToken: () => Promise<string | undefined>;\n}\n\nexport class WebsocketsActions implements IWebsocketsActions {\n public readonly manager: IWebsocketsManager;\n\n private readonly getToken: () => Promise<string | undefined>;\n private readonly tenant: string | null;\n private readonly locale: string | null;\n\n public constructor(params: IWebsocketActionsParams) {\n this.manager = params.manager;\n this.tenant = params.tenant;\n this.locale = params.locale;\n this.getToken = params.getToken;\n }\n\n public async run<T extends IGenericData = IGenericData, R extends IGenericData = IGenericData>(\n params: IWebsocketsActionsRunParams<T>\n ): Promise<R | null> {\n const { action, timeout, data } = params;\n const token = await this.getToken();\n if (!token) {\n console.error(\"Token is not set - cannot send a websocket message.\");\n return null;\n } else if (!this.tenant) {\n console.error(\"Tenant is not set - cannot send a websocket message.\");\n return null;\n } else if (!this.locale) {\n console.error(\"Locale is not set - cannot send a websocket message.\");\n return null;\n }\n /**\n * If no timeout was sent, we will just send the message and return null.\n * No waiting for the response.\n */\n if (!timeout || timeout < 0) {\n this.manager.send<IWebsocketManagerSendData<T>>({\n /**\n * It is ok to cast as we are checking the values a few lines above.\n */\n token,\n tenant: this.tenant as string,\n locale: this.locale as string,\n action,\n data: data || ({} as T)\n });\n return null;\n }\n /**\n * In case of a timeout, we will send the message and wait for the response.\n */\n return await new Promise<R>((resolve, reject) => {\n let promiseTimeout: NodeJS.Timeout | null = null;\n const subscription = this.manager.onMessage<R>(async event => {\n if (event.data.messageId !== subscription.id) {\n return;\n }\n resolve(event.data);\n subscription.off();\n if (!promiseTimeout) {\n return;\n }\n clearTimeout(promiseTimeout);\n });\n\n promiseTimeout = setTimeout(() => {\n const message = `Websocket action \"${action}\" timeout.`;\n subscription.off();\n reject(new Error(message));\n }, timeout);\n\n this.manager.send<IWebsocketManagerSendData<T>>({\n /**\n * It is ok to cast as we are checking the values a few lines above.\n */\n token,\n tenant: this.tenant as string,\n locale: this.locale as string,\n messageId: subscription.id,\n action,\n data: data || ({} as T)\n });\n }).catch(ex => {\n console.error(\"Error while sending websocket message.\", ex);\n return null;\n });\n }\n}\n\nexport const createWebsocketsActions = (params: IWebsocketActionsParams): IWebsocketsActions => {\n return new WebsocketsActions(params);\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["WebsocketsActions","constructor","params","manager","tenant","locale","getToken","run","action","timeout","data","token","console","error","send","Promise","resolve","reject","promiseTimeout","subscription","onMessage","event","messageId","id","off","clearTimeout","setTimeout","message","Error","catch","ex","createWebsocketsActions"],"sources":["WebsocketsActions.ts"],"sourcesContent":["import {\n IGenericData,\n IWebsocketsActions,\n IWebsocketsActionsRunParams,\n IWebsocketsManager,\n IWebsocketManagerSendData\n} from \"./types\";\n\nexport interface IWebsocketActionsParams {\n manager: IWebsocketsManager;\n tenant: string | null;\n locale: string | null;\n getToken: () => Promise<string | undefined>;\n}\n\nexport class WebsocketsActions implements IWebsocketsActions {\n public readonly manager: IWebsocketsManager;\n\n private readonly getToken: () => Promise<string | undefined>;\n private readonly tenant: string | null;\n private readonly locale: string | null;\n\n public constructor(params: IWebsocketActionsParams) {\n this.manager = params.manager;\n this.tenant = params.tenant;\n this.locale = params.locale;\n this.getToken = params.getToken;\n }\n\n public async run<T extends IGenericData = IGenericData, R extends IGenericData = IGenericData>(\n params: IWebsocketsActionsRunParams<T>\n ): Promise<R | null> {\n const { action, timeout, data } = params;\n const token = await this.getToken();\n if (!token) {\n console.error(\"Token is not set - cannot send a websocket message.\");\n return null;\n } else if (!this.tenant) {\n console.error(\"Tenant is not set - cannot send a websocket message.\");\n return null;\n } else if (!this.locale) {\n console.error(\"Locale is not set - cannot send a websocket message.\");\n return null;\n }\n /**\n * If no timeout was sent, we will just send the message and return null.\n * No waiting for the response.\n */\n if (!timeout || timeout < 0) {\n this.manager.send<IWebsocketManagerSendData<T>>({\n /**\n * It is ok to cast as we are checking the values a few lines above.\n */\n token,\n tenant: this.tenant as string,\n locale: this.locale as string,\n action,\n data: data || ({} as T)\n });\n return null;\n }\n /**\n * In case of a timeout, we will send the message and wait for the response.\n */\n return await new Promise<R>((resolve, reject) => {\n let promiseTimeout: NodeJS.Timeout | null = null;\n const subscription = this.manager.onMessage<R>(async event => {\n if (event.data.messageId !== subscription.id) {\n return;\n }\n resolve(event.data);\n subscription.off();\n if (!promiseTimeout) {\n return;\n }\n clearTimeout(promiseTimeout);\n });\n\n promiseTimeout = setTimeout(() => {\n const message = `Websocket action \"${action}\" timeout.`;\n subscription.off();\n reject(new Error(message));\n }, timeout);\n\n this.manager.send<IWebsocketManagerSendData<T>>({\n /**\n * It is ok to cast as we are checking the values a few lines above.\n */\n token,\n tenant: this.tenant as string,\n locale: this.locale as string,\n messageId: subscription.id,\n action,\n data: data || ({} as T)\n });\n }).catch(ex => {\n console.error(\"Error while sending websocket message.\", ex);\n return null;\n });\n }\n}\n\nexport const createWebsocketsActions = (params: IWebsocketActionsParams): IWebsocketsActions => {\n return new WebsocketsActions(params);\n};\n"],"mappings":"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","ignoreList":[]}