@webiny/app-websockets 5.40.0-beta.3
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/LICENSE +21 -0
- package/README.md +12 -0
- package/WebsocketsContextProvider.d.ts +8 -0
- package/WebsocketsContextProvider.js +149 -0
- package/WebsocketsContextProvider.js.map +1 -0
- package/domain/WebsocketsAction.d.ts +8 -0
- package/domain/WebsocketsAction.js +41 -0
- package/domain/WebsocketsAction.js.map +1 -0
- package/domain/WebsocketsActions.d.ts +16 -0
- package/domain/WebsocketsActions.js +96 -0
- package/domain/WebsocketsActions.js.map +1 -0
- package/domain/WebsocketsConnection.d.ts +42 -0
- package/domain/WebsocketsConnection.js +135 -0
- package/domain/WebsocketsConnection.js.map +1 -0
- package/domain/WebsocketsManager.d.ts +15 -0
- package/domain/WebsocketsManager.js +66 -0
- package/domain/WebsocketsManager.js.map +1 -0
- package/domain/WebsocketsSubscriptionManager.d.ts +15 -0
- package/domain/WebsocketsSubscriptionManager.js +106 -0
- package/domain/WebsocketsSubscriptionManager.js.map +1 -0
- package/domain/abstractions/IWebsocketsAction.d.ts +25 -0
- package/domain/abstractions/IWebsocketsAction.js +7 -0
- package/domain/abstractions/IWebsocketsAction.js.map +1 -0
- package/domain/abstractions/IWebsocketsActions.d.ts +11 -0
- package/domain/abstractions/IWebsocketsActions.js +7 -0
- package/domain/abstractions/IWebsocketsActions.js.map +1 -0
- package/domain/abstractions/IWebsocketsConnection.d.ts +20 -0
- package/domain/abstractions/IWebsocketsConnection.js +15 -0
- package/domain/abstractions/IWebsocketsConnection.js.map +1 -0
- package/domain/abstractions/IWebsocketsManager.d.ts +40 -0
- package/domain/abstractions/IWebsocketsManager.js +7 -0
- package/domain/abstractions/IWebsocketsManager.js.map +1 -0
- package/domain/abstractions/IWebsocketsSubscriptionManager.d.ts +30 -0
- package/domain/abstractions/IWebsocketsSubscriptionManager.js +7 -0
- package/domain/abstractions/IWebsocketsSubscriptionManager.js.map +1 -0
- package/domain/abstractions/types.d.ts +24 -0
- package/domain/abstractions/types.js +27 -0
- package/domain/abstractions/types.js.map +1 -0
- package/domain/index.d.ts +5 -0
- package/domain/index.js +62 -0
- package/domain/index.js.map +1 -0
- package/domain/types.d.ts +6 -0
- package/domain/types.js +73 -0
- package/domain/types.js.map +1 -0
- package/hooks/index.d.ts +1 -0
- package/hooks/index.js +18 -0
- package/hooks/index.js.map +1 -0
- package/hooks/useWebsockets.d.ts +2 -0
- package/hooks/useWebsockets.js +17 -0
- package/hooks/useWebsockets.js.map +1 -0
- package/index.d.ts +7 -0
- package/index.js +50 -0
- package/index.js.map +1 -0
- package/package.json +45 -0
- package/types.d.ts +19 -0
- package/types.js +18 -0
- package/types.js.map +1 -0
- package/utils/getToken.d.ts +1 -0
- package/utils/getToken.js +20 -0
- package/utils/getToken.js.map +1 -0
- package/utils/getUrl.d.ts +1 -0
- package/utils/getUrl.js +12 -0
- package/utils/getUrl.js.map +1 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Webiny
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# @webiny/app-websockets
|
|
2
|
+
[](https://www.npmjs.com/package/@webiny/app-websockets)
|
|
3
|
+
[](https://www.npmjs.com/package/@webiny/app-websockets)
|
|
4
|
+
[](https://github.com/prettier/prettier)
|
|
5
|
+
[](http://makeapullrequest.com)
|
|
6
|
+
|
|
7
|
+
Exposes a simple `SocketsProvider` React provider component and enables you to quickly send socket messages via the `useSockets` React hook.
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
```
|
|
11
|
+
yarn add @webiny/app-websockets
|
|
12
|
+
```
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { IWebsocketsContext } from "./types";
|
|
3
|
+
export interface IWebsocketsContextProviderProps {
|
|
4
|
+
loader?: React.ReactElement;
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
}
|
|
7
|
+
export declare const WebsocketsContext: React.Context<IWebsocketsContext>;
|
|
8
|
+
export declare const WebsocketsContextProvider: (props: IWebsocketsContextProviderProps) => React.JSX.Element | null;
|
|
@@ -0,0 +1,149 @@
|
|
|
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 _getToken = require("./utils/getToken");
|
|
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 locale = getCurrentLocale("default");
|
|
24
|
+
var socketsRef = (0, _react.useRef)();
|
|
25
|
+
var _useState = (0, _react.useState)({}),
|
|
26
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
27
|
+
current = _useState2[0],
|
|
28
|
+
setCurrent = _useState2[1];
|
|
29
|
+
var subscriptionManager = (0, _react.useMemo)(function () {
|
|
30
|
+
var manager = (0, _domain.createWebsocketsSubscriptionManager)();
|
|
31
|
+
var currentIteration = 0;
|
|
32
|
+
manager.onClose(function (event) {
|
|
33
|
+
if (currentIteration > 5 || event.code !== _types.WebsocketsCloseCode.GOING_AWAY) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
currentIteration++;
|
|
37
|
+
setTimeout(function () {
|
|
38
|
+
if (!socketsRef.current) {
|
|
39
|
+
return;
|
|
40
|
+
} else if (socketsRef.current.isClosed()) {
|
|
41
|
+
console.log("Running auto-reconnect.");
|
|
42
|
+
socketsRef.current.connect();
|
|
43
|
+
}
|
|
44
|
+
}, 1000);
|
|
45
|
+
});
|
|
46
|
+
return manager;
|
|
47
|
+
}, []);
|
|
48
|
+
/**
|
|
49
|
+
* We need this useEffect to close the websocket connection and remove window focus event in case component is unmounted.
|
|
50
|
+
* This will, probably, happen only during the development phase.
|
|
51
|
+
*
|
|
52
|
+
* If we did not disconnect on component unmount, we would have a memory leak - multiple connections would be opened.
|
|
53
|
+
*/
|
|
54
|
+
(0, _react.useEffect)(function () {
|
|
55
|
+
/**
|
|
56
|
+
* We want to add a window event listener which will check if the connection is closed, and if its - it will connect again.
|
|
57
|
+
*/
|
|
58
|
+
var fn = function fn() {
|
|
59
|
+
if (!socketsRef.current) {
|
|
60
|
+
return;
|
|
61
|
+
} else if (socketsRef.current.isClosed()) {
|
|
62
|
+
console.log("Running auto-reconnect on focus.");
|
|
63
|
+
socketsRef.current.connect();
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
window.addEventListener("focus", fn);
|
|
67
|
+
return function () {
|
|
68
|
+
window.removeEventListener("focus", fn);
|
|
69
|
+
// if (!socketsRef.current) {
|
|
70
|
+
// return;
|
|
71
|
+
// }
|
|
72
|
+
|
|
73
|
+
// socketsRef.current.close(WebsocketsCloseCode.NORMAL, "Component unmounted.");
|
|
74
|
+
};
|
|
75
|
+
}, []);
|
|
76
|
+
(0, _react.useEffect)(function () {
|
|
77
|
+
(async function () {
|
|
78
|
+
var token = await (0, _getToken.getToken)();
|
|
79
|
+
if (!token || !tenant || !locale) {
|
|
80
|
+
return;
|
|
81
|
+
} else if (current.tenant === tenant && current.locale === locale) {
|
|
82
|
+
return;
|
|
83
|
+
} else if (socketsRef.current) {
|
|
84
|
+
await socketsRef.current.close(_types.WebsocketsCloseCode.NORMAL, "Changing tenant/locale.");
|
|
85
|
+
}
|
|
86
|
+
var url = (0, _getUrl.getUrl)();
|
|
87
|
+
if (!url) {
|
|
88
|
+
console.error("Not possible to connect to the websocket without a valid URL.", {
|
|
89
|
+
tenant: tenant,
|
|
90
|
+
locale: locale,
|
|
91
|
+
token: token
|
|
92
|
+
});
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
socketsRef.current = (0, _domain.createWebsocketsManager)((0, _domain.createWebsocketsConnection)({
|
|
96
|
+
subscriptionManager: subscriptionManager,
|
|
97
|
+
url: url,
|
|
98
|
+
tenant: tenant,
|
|
99
|
+
locale: locale,
|
|
100
|
+
getToken: _getToken.getToken,
|
|
101
|
+
protocol: ["webiny-ws-v1"]
|
|
102
|
+
}));
|
|
103
|
+
await socketsRef.current.connect();
|
|
104
|
+
setCurrent({
|
|
105
|
+
tenant: tenant,
|
|
106
|
+
locale: locale
|
|
107
|
+
});
|
|
108
|
+
})();
|
|
109
|
+
}, [tenant, locale, subscriptionManager]);
|
|
110
|
+
var websocketActions = (0, _react.useMemo)(function () {
|
|
111
|
+
return (0, _domain.createWebsocketsActions)({
|
|
112
|
+
manager: socketsRef.current,
|
|
113
|
+
tenant: tenant,
|
|
114
|
+
locale: locale,
|
|
115
|
+
getToken: _getToken.getToken
|
|
116
|
+
});
|
|
117
|
+
}, [socketsRef.current, tenant, locale]);
|
|
118
|
+
var send = (0, _react.useCallback)(async function (action, data, timeout) {
|
|
119
|
+
return websocketActions.run({
|
|
120
|
+
action: action,
|
|
121
|
+
data: data,
|
|
122
|
+
timeout: timeout
|
|
123
|
+
});
|
|
124
|
+
}, [websocketActions]);
|
|
125
|
+
var createAction = (0, _react.useCallback)(function (name) {
|
|
126
|
+
return (0, _domain.createWebsocketsAction)(websocketActions, name);
|
|
127
|
+
}, [websocketActions]);
|
|
128
|
+
var onMessage = (0, _react.useCallback)(function (action, cb) {
|
|
129
|
+
return socketsRef.current.onMessage(async function (event) {
|
|
130
|
+
if (event.data.action !== action) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
cb(event.data);
|
|
134
|
+
});
|
|
135
|
+
}, [socketsRef.current]);
|
|
136
|
+
if (!socketsRef.current) {
|
|
137
|
+
return props.loader || null;
|
|
138
|
+
}
|
|
139
|
+
var value = {
|
|
140
|
+
send: send,
|
|
141
|
+
createAction: createAction,
|
|
142
|
+
onMessage: onMessage
|
|
143
|
+
};
|
|
144
|
+
return /*#__PURE__*/_react.default.createElement(WebsocketsContext.Provider, Object.assign({
|
|
145
|
+
value: value
|
|
146
|
+
}, props));
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
//# sourceMappingURL=WebsocketsContextProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_appTenancy","_appI18n","_getToken","_types","_domain","_getUrl","WebsocketsContext","exports","React","createContext","undefined","WebsocketsContextProvider","props","_useTenancy","useTenancy","tenant","_useI18N","useI18N","getCurrentLocale","locale","socketsRef","useRef","_useState","useState","_useState2","_slicedToArray2","default","current","setCurrent","subscriptionManager","useMemo","manager","createWebsocketsSubscriptionManager","currentIteration","onClose","event","code","WebsocketsCloseCode","GOING_AWAY","setTimeout","isClosed","console","log","connect","useEffect","fn","window","addEventListener","removeEventListener","token","getToken","close","NORMAL","url","getUrl","error","createWebsocketsManager","createWebsocketsConnection","protocol","websocketActions","createWebsocketsActions","send","useCallback","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 { getToken } from \"./utils/getToken\";\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 locale = getCurrentLocale(\"default\");\n\n const socketsRef = useRef<IWebsocketsManager>();\n\n const [current, setCurrent] = useState<ICurrentData>({});\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]);\n\n const websocketActions = useMemo(() => {\n return createWebsocketsActions({\n manager: socketsRef.current!,\n tenant,\n locale,\n getToken\n });\n }, [socketsRef.current, tenant, locale]);\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":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { IGenericData, IWebsocketsAction, IWebsocketsActions, IWebsocketsActionsTriggerParams } from "./types";
|
|
2
|
+
export declare class WebsocketsAction<T extends IGenericData = IGenericData, R extends IGenericData = IGenericData> implements IWebsocketsAction<T, R> {
|
|
3
|
+
private readonly actions;
|
|
4
|
+
private readonly name;
|
|
5
|
+
constructor(actions: IWebsocketsActions, name: string);
|
|
6
|
+
trigger(params?: IWebsocketsActionsTriggerParams<T, R>): Promise<R | null>;
|
|
7
|
+
}
|
|
8
|
+
export declare const createWebsocketsAction: <T extends IGenericData = IGenericData, R extends IGenericData = IGenericData>(actions: IWebsocketsActions, name: string) => IWebsocketsAction<T, R>;
|
|
@@ -0,0 +1,41 @@
|
|
|
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);
|
|
13
|
+
this.name = name;
|
|
14
|
+
this.actions = actions;
|
|
15
|
+
}
|
|
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);
|
|
34
|
+
}
|
|
35
|
+
}]);
|
|
36
|
+
}();
|
|
37
|
+
var createWebsocketsAction = exports.createWebsocketsAction = function createWebsocketsAction(actions, name) {
|
|
38
|
+
return new WebsocketsAction(actions, name);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=WebsocketsAction.js.map
|
|
@@ -0,0 +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,QAAqBC,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":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { IGenericData, IWebsocketsActions, IWebsocketsActionsRunParams, IWebsocketsManager } from "./types";
|
|
2
|
+
export interface IWebsocketActionsParams {
|
|
3
|
+
manager: IWebsocketsManager;
|
|
4
|
+
tenant: string | null;
|
|
5
|
+
locale: string | null;
|
|
6
|
+
getToken: () => Promise<string | null>;
|
|
7
|
+
}
|
|
8
|
+
export declare class WebsocketsActions implements IWebsocketsActions {
|
|
9
|
+
readonly manager: IWebsocketsManager;
|
|
10
|
+
private readonly getToken;
|
|
11
|
+
private readonly tenant;
|
|
12
|
+
private readonly locale;
|
|
13
|
+
constructor(params: IWebsocketActionsParams);
|
|
14
|
+
run<T extends IGenericData = IGenericData, R extends IGenericData = IGenericData>(params: IWebsocketsActionsRunParams<T>): Promise<R | null>;
|
|
15
|
+
}
|
|
16
|
+
export declare const createWebsocketsActions: (params: IWebsocketActionsParams) => IWebsocketsActions;
|
|
@@ -0,0 +1,96 @@
|
|
|
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);
|
|
13
|
+
this.manager = params.manager;
|
|
14
|
+
this.tenant = params.tenant;
|
|
15
|
+
this.locale = params.locale;
|
|
16
|
+
this.getToken = params.getToken;
|
|
17
|
+
}
|
|
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;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}]);
|
|
91
|
+
}();
|
|
92
|
+
var createWebsocketsActions = exports.createWebsocketsActions = function createWebsocketsActions(params) {
|
|
93
|
+
return new WebsocketsActions(params);
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
//# sourceMappingURL=WebsocketsActions.js.map
|
|
@@ -0,0 +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 | null>;\n}\n\nexport class WebsocketsActions implements IWebsocketsActions {\n public readonly manager: IWebsocketsManager;\n\n private readonly getToken: () => Promise<string | null>;\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":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { IGenericData, IWebsocketsConnection, IWebsocketsConnectionFactory, IWebsocketsConnectProtocol, IWebsocketsSubscriptionManager, WebsocketsCloseCode } from "./types";
|
|
2
|
+
interface IConnection {
|
|
3
|
+
ws: WebSocket | null;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* We need to attach the websockets cache to window object, or it will be reset on every hot reload.
|
|
7
|
+
*/
|
|
8
|
+
declare global {
|
|
9
|
+
interface Window {
|
|
10
|
+
WebinyWebsocketsConnectionCache: IConnection;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export interface IWebsocketsConnectionParams {
|
|
14
|
+
url: string;
|
|
15
|
+
tenant: string;
|
|
16
|
+
locale: string;
|
|
17
|
+
getToken(): Promise<string | null>;
|
|
18
|
+
subscriptionManager: IWebsocketsSubscriptionManager;
|
|
19
|
+
protocol?: IWebsocketsConnectProtocol;
|
|
20
|
+
factory?: IWebsocketsConnectionFactory;
|
|
21
|
+
}
|
|
22
|
+
export declare class WebsocketsConnection implements IWebsocketsConnection {
|
|
23
|
+
private readonly url;
|
|
24
|
+
private readonly getToken;
|
|
25
|
+
private tenant;
|
|
26
|
+
private locale;
|
|
27
|
+
private readonly protocol;
|
|
28
|
+
readonly subscriptionManager: IWebsocketsSubscriptionManager;
|
|
29
|
+
private readonly factory;
|
|
30
|
+
constructor(params: IWebsocketsConnectionParams);
|
|
31
|
+
setTenant(tenant: string): void;
|
|
32
|
+
setLocale(locale: string): void;
|
|
33
|
+
connect(): Promise<void>;
|
|
34
|
+
close(code: WebsocketsCloseCode, reason: string): Promise<boolean>;
|
|
35
|
+
send<T extends IGenericData = IGenericData>(data: T): Promise<void>;
|
|
36
|
+
isConnected(): boolean;
|
|
37
|
+
isClosed(): boolean;
|
|
38
|
+
private createUrl;
|
|
39
|
+
private getConnection;
|
|
40
|
+
}
|
|
41
|
+
export declare const createWebsocketsConnection: (params: IWebsocketsConnectionParams) => IWebsocketsConnection;
|
|
42
|
+
export {};
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.createWebsocketsConnection = exports.WebsocketsConnection = void 0;
|
|
8
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
|
+
var _types = require("./types");
|
|
11
|
+
var defaultFactory = function defaultFactory(url, protocol) {
|
|
12
|
+
return new WebSocket(url, protocol);
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* We need to attach the websockets cache to window object, or it will be reset on every hot reload.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
if (!window.WebinyWebsocketsConnectionCache) {
|
|
20
|
+
window.WebinyWebsocketsConnectionCache = {
|
|
21
|
+
ws: null
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
var connectionCache = window.WebinyWebsocketsConnectionCache;
|
|
25
|
+
var WebsocketsConnection = exports.WebsocketsConnection = /*#__PURE__*/function () {
|
|
26
|
+
function WebsocketsConnection(params) {
|
|
27
|
+
(0, _classCallCheck2.default)(this, WebsocketsConnection);
|
|
28
|
+
this.url = params.url;
|
|
29
|
+
this.tenant = params.tenant;
|
|
30
|
+
this.locale = params.locale;
|
|
31
|
+
this.getToken = params.getToken;
|
|
32
|
+
this.protocol = params.protocol;
|
|
33
|
+
this.subscriptionManager = params.subscriptionManager;
|
|
34
|
+
this.factory = params.factory || defaultFactory;
|
|
35
|
+
}
|
|
36
|
+
return (0, _createClass2.default)(WebsocketsConnection, [{
|
|
37
|
+
key: "setTenant",
|
|
38
|
+
value: function setTenant(tenant) {
|
|
39
|
+
this.tenant = tenant;
|
|
40
|
+
}
|
|
41
|
+
}, {
|
|
42
|
+
key: "setLocale",
|
|
43
|
+
value: function setLocale(locale) {
|
|
44
|
+
this.locale = locale;
|
|
45
|
+
}
|
|
46
|
+
}, {
|
|
47
|
+
key: "connect",
|
|
48
|
+
value: async function connect() {
|
|
49
|
+
await this.getConnection();
|
|
50
|
+
}
|
|
51
|
+
}, {
|
|
52
|
+
key: "close",
|
|
53
|
+
value: async function close(code, reason) {
|
|
54
|
+
if (!connectionCache.ws || connectionCache.ws.readyState === _types.WebsocketsReadyState.CLOSED || connectionCache.ws.readyState === _types.WebsocketsReadyState.CLOSING) {
|
|
55
|
+
connectionCache.ws = undefined;
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
connectionCache.ws.close(code, reason);
|
|
59
|
+
connectionCache.ws = undefined;
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
}, {
|
|
63
|
+
key: "send",
|
|
64
|
+
value: async function send(data) {
|
|
65
|
+
var connection = await this.getConnection();
|
|
66
|
+
if (connection.readyState !== _types.WebsocketsReadyState.OPEN) {
|
|
67
|
+
console.info("Websocket connection is not open, cannot send any data.", data);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
connection.send(JSON.stringify(data));
|
|
71
|
+
}
|
|
72
|
+
}, {
|
|
73
|
+
key: "isConnected",
|
|
74
|
+
value: function isConnected() {
|
|
75
|
+
return connectionCache.ws?.readyState === _types.WebsocketsReadyState.OPEN;
|
|
76
|
+
}
|
|
77
|
+
}, {
|
|
78
|
+
key: "isClosed",
|
|
79
|
+
value: function isClosed() {
|
|
80
|
+
return connectionCache.ws?.readyState === _types.WebsocketsReadyState.CLOSED;
|
|
81
|
+
}
|
|
82
|
+
}, {
|
|
83
|
+
key: "createUrl",
|
|
84
|
+
value: async function createUrl() {
|
|
85
|
+
var token = await this.getToken();
|
|
86
|
+
if (!token) {
|
|
87
|
+
console.error("Missing token to connect to websockets.");
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
token: token,
|
|
92
|
+
url: "".concat(this.url, "?token=").concat(token, "&tenant=").concat(this.tenant, "&locale=").concat(this.locale)
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}, {
|
|
96
|
+
key: "getConnection",
|
|
97
|
+
value: async function getConnection() {
|
|
98
|
+
var _this = this;
|
|
99
|
+
if (connectionCache.ws?.readyState === _types.WebsocketsReadyState.OPEN) {
|
|
100
|
+
return connectionCache.ws;
|
|
101
|
+
} else if (connectionCache.ws?.readyState === _types.WebsocketsReadyState.CONNECTING) {
|
|
102
|
+
return connectionCache.ws;
|
|
103
|
+
}
|
|
104
|
+
var result = await this.createUrl();
|
|
105
|
+
if (!result) {
|
|
106
|
+
throw new Error("Missing URL for WebSocket to connect to.");
|
|
107
|
+
}
|
|
108
|
+
var url = result.url;
|
|
109
|
+
connectionCache.ws = this.factory(url, this.protocol);
|
|
110
|
+
var start = new Date().getTime();
|
|
111
|
+
console.log("Websockets connecting to ".concat(this.url, "..."));
|
|
112
|
+
connectionCache.ws.addEventListener("open", function (event) {
|
|
113
|
+
var end = new Date().getTime();
|
|
114
|
+
console.log("...connected in ".concat(end - start, "ms."));
|
|
115
|
+
return _this.subscriptionManager.triggerOnOpen(event);
|
|
116
|
+
});
|
|
117
|
+
connectionCache.ws.addEventListener("close", function (event) {
|
|
118
|
+
return _this.subscriptionManager.triggerOnClose(event);
|
|
119
|
+
});
|
|
120
|
+
connectionCache.ws.addEventListener("error", function (event) {
|
|
121
|
+
console.info("Error in the Websocket connection.", event);
|
|
122
|
+
return _this.subscriptionManager.triggerOnError(event);
|
|
123
|
+
});
|
|
124
|
+
connectionCache.ws.addEventListener("message", function (event) {
|
|
125
|
+
return _this.subscriptionManager.triggerOnMessage(event);
|
|
126
|
+
});
|
|
127
|
+
return connectionCache.ws;
|
|
128
|
+
}
|
|
129
|
+
}]);
|
|
130
|
+
}();
|
|
131
|
+
var createWebsocketsConnection = exports.createWebsocketsConnection = function createWebsocketsConnection(params) {
|
|
132
|
+
return new WebsocketsConnection(params);
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
//# sourceMappingURL=WebsocketsConnection.js.map
|
|
@@ -0,0 +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 | null>;\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 | null>;\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":"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","ignoreList":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { IGenericData, IWebsocketsConnection, IWebsocketsManager, IWebsocketsManagerCloseEvent, IWebsocketsManagerErrorEvent, IWebsocketsManagerMessageEvent, IWebsocketsManagerOpenEvent, IWebsocketManagerSendData, IWebsocketsSubscription, IWebsocketsSubscriptionCallback, WebsocketsCloseCode } from "./types";
|
|
2
|
+
export declare class WebsocketsManager implements IWebsocketsManager {
|
|
3
|
+
readonly connection: IWebsocketsConnection;
|
|
4
|
+
constructor(connection: IWebsocketsConnection);
|
|
5
|
+
onOpen(cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerOpenEvent>): IWebsocketsSubscription<IWebsocketsManagerOpenEvent>;
|
|
6
|
+
onClose(cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerCloseEvent>): IWebsocketsSubscription<IWebsocketsManagerCloseEvent>;
|
|
7
|
+
onMessage<T extends IGenericData = IGenericData>(cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerMessageEvent<T>>): IWebsocketsSubscription<IWebsocketsManagerMessageEvent<T>>;
|
|
8
|
+
onError(cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerErrorEvent>): IWebsocketsSubscription<IWebsocketsManagerErrorEvent>;
|
|
9
|
+
connect(): Promise<void>;
|
|
10
|
+
close(code: WebsocketsCloseCode, reason: string): Promise<boolean>;
|
|
11
|
+
send<T extends IWebsocketManagerSendData = IWebsocketManagerSendData>(data: T): void;
|
|
12
|
+
isConnected(): boolean;
|
|
13
|
+
isClosed(): boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare const createWebsocketsManager: (connection: IWebsocketsConnection) => IWebsocketsManager;
|