@webiny/app-websockets 5.43.3 → 6.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/WebsocketsContextProvider.d.ts +1 -1
- package/WebsocketsContextProvider.js +74 -83
- package/WebsocketsContextProvider.js.map +1 -1
- package/domain/WebsocketsAction.d.ts +1 -1
- package/domain/WebsocketsAction.js +20 -33
- package/domain/WebsocketsAction.js.map +1 -1
- package/domain/WebsocketsActions.d.ts +1 -1
- package/domain/WebsocketsActions.js +73 -85
- package/domain/WebsocketsActions.js.map +1 -1
- package/domain/WebsocketsConnection.d.ts +1 -1
- package/domain/WebsocketsConnection.js +86 -114
- package/domain/WebsocketsConnection.js.map +1 -1
- package/domain/WebsocketsManager.d.ts +1 -1
- package/domain/WebsocketsManager.js +31 -60
- package/domain/WebsocketsManager.js.map +1 -1
- package/domain/WebsocketsSubscriptionManager.d.ts +2 -2
- package/domain/WebsocketsSubscriptionManager.js +62 -95
- package/domain/WebsocketsSubscriptionManager.js.map +1 -1
- package/domain/abstractions/IWebsocketsAction.d.ts +1 -1
- package/domain/abstractions/IWebsocketsAction.js +1 -5
- package/domain/abstractions/IWebsocketsAction.js.map +1 -1
- package/domain/abstractions/IWebsocketsActions.d.ts +2 -2
- package/domain/abstractions/IWebsocketsActions.js +1 -5
- package/domain/abstractions/IWebsocketsActions.js.map +1 -1
- package/domain/abstractions/IWebsocketsConnection.d.ts +2 -2
- package/domain/abstractions/IWebsocketsConnection.js +1 -7
- package/domain/abstractions/IWebsocketsConnection.js.map +1 -1
- package/domain/abstractions/IWebsocketsManager.d.ts +2 -2
- package/domain/abstractions/IWebsocketsManager.js +1 -5
- package/domain/abstractions/IWebsocketsManager.js.map +1 -1
- package/domain/abstractions/IWebsocketsSubscriptionManager.d.ts +2 -2
- package/domain/abstractions/IWebsocketsSubscriptionManager.js +1 -5
- package/domain/abstractions/IWebsocketsSubscriptionManager.js.map +1 -1
- package/domain/abstractions/types.d.ts +1 -1
- package/domain/abstractions/types.js +1 -7
- package/domain/abstractions/types.js.map +1 -1
- package/domain/index.js +5 -60
- package/domain/index.js.map +1 -1
- package/domain/types.js +6 -71
- package/domain/types.js.map +1 -1
- package/hooks/index.js +1 -16
- package/hooks/index.js.map +1 -1
- package/hooks/useWebsockets.d.ts +1 -1
- package/hooks/useWebsockets.js +4 -10
- package/hooks/useWebsockets.js.map +1 -1
- package/index.js +10 -42
- package/index.js.map +1 -1
- package/package.json +8 -8
- package/types.d.ts +1 -1
- package/types.js +2 -16
- package/types.js.map +1 -1
- package/utils/getUrl.js +2 -8
- package/utils/getUrl.js.map +1 -1
|
@@ -1,14 +1,5 @@
|
|
|
1
|
-
|
|
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) {
|
|
1
|
+
import { WebsocketsReadyState } from "./types";
|
|
2
|
+
const defaultFactory = (url, protocol) => {
|
|
12
3
|
return new WebSocket(url, protocol);
|
|
13
4
|
};
|
|
14
5
|
|
|
@@ -21,10 +12,9 @@ if (!window.WebinyWebsocketsConnectionCache) {
|
|
|
21
12
|
ws: null
|
|
22
13
|
};
|
|
23
14
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
(0, _classCallCheck2.default)(this, WebsocketsConnection);
|
|
15
|
+
const connectionCache = window.WebinyWebsocketsConnectionCache;
|
|
16
|
+
export class WebsocketsConnection {
|
|
17
|
+
constructor(params) {
|
|
28
18
|
this.url = params.url;
|
|
29
19
|
this.tenant = params.tenant;
|
|
30
20
|
this.locale = params.locale;
|
|
@@ -33,113 +23,95 @@ var WebsocketsConnection = exports.WebsocketsConnection = /*#__PURE__*/function
|
|
|
33
23
|
this.subscriptionManager = params.subscriptionManager;
|
|
34
24
|
this.factory = params.factory || defaultFactory;
|
|
35
25
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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);
|
|
26
|
+
setTenant(tenant) {
|
|
27
|
+
this.tenant = tenant;
|
|
28
|
+
}
|
|
29
|
+
setLocale(locale) {
|
|
30
|
+
this.locale = locale;
|
|
31
|
+
}
|
|
32
|
+
async connect() {
|
|
33
|
+
await this.getConnection();
|
|
34
|
+
}
|
|
35
|
+
async close(code, reason) {
|
|
36
|
+
if (!connectionCache.ws || connectionCache.ws.readyState === WebsocketsReadyState.CLOSED || connectionCache.ws.readyState === WebsocketsReadyState.CLOSING) {
|
|
59
37
|
connectionCache.ws = undefined;
|
|
60
38
|
return true;
|
|
61
39
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
40
|
+
connectionCache.ws.close(code, reason);
|
|
41
|
+
connectionCache.ws = undefined;
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
async send(data) {
|
|
45
|
+
const connection = await this.getConnection();
|
|
46
|
+
if (connection.readyState !== WebsocketsReadyState.OPEN) {
|
|
47
|
+
console.info("Websocket connection is not open, cannot send any data.", data);
|
|
48
|
+
return;
|
|
71
49
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
50
|
+
connection.send(JSON.stringify(data));
|
|
51
|
+
}
|
|
52
|
+
isConnected() {
|
|
53
|
+
return connectionCache.ws?.readyState === WebsocketsReadyState.OPEN;
|
|
54
|
+
}
|
|
55
|
+
isClosed() {
|
|
56
|
+
return connectionCache.ws?.readyState === WebsocketsReadyState.CLOSED;
|
|
57
|
+
}
|
|
58
|
+
async createUrl() {
|
|
59
|
+
const token = await this.getToken();
|
|
60
|
+
if (!token) {
|
|
61
|
+
console.error(`Missing token to connect to websockets.`);
|
|
62
|
+
return null;
|
|
76
63
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
64
|
+
return {
|
|
65
|
+
token,
|
|
66
|
+
url: `${this.url}?token=${token}&tenant=${this.tenant}&locale=${this.locale}`
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async getConnection() {
|
|
70
|
+
if (connectionCache.ws?.readyState === WebsocketsReadyState.OPEN) {
|
|
71
|
+
return connectionCache.ws;
|
|
72
|
+
} else if (connectionCache.ws?.readyState === WebsocketsReadyState.CONNECTING) {
|
|
73
|
+
return connectionCache.ws;
|
|
81
74
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
};
|
|
75
|
+
const result = await this.createUrl();
|
|
76
|
+
if (!result) {
|
|
77
|
+
throw new Error(`Missing URL for WebSocket to connect to.`);
|
|
94
78
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
connectionCache.ws.addEventListener("error", function (event) {
|
|
121
|
-
console.info("Error in the Websocket connection.", event);
|
|
122
|
-
/**
|
|
123
|
-
* Let's close it if possible.
|
|
124
|
-
* It will reopen automatically.
|
|
125
|
-
*/
|
|
126
|
-
if (connectionCache.ws?.close) {
|
|
127
|
-
try {
|
|
128
|
-
connectionCache.ws.close();
|
|
129
|
-
} catch (ex) {
|
|
130
|
-
console.error(ex);
|
|
131
|
-
}
|
|
79
|
+
const {
|
|
80
|
+
url
|
|
81
|
+
} = result;
|
|
82
|
+
connectionCache.ws = this.factory(url, this.protocol);
|
|
83
|
+
const start = new Date().getTime();
|
|
84
|
+
console.log(`Websockets connecting to ${this.url}...`);
|
|
85
|
+
connectionCache.ws.addEventListener("open", event => {
|
|
86
|
+
const end = new Date().getTime();
|
|
87
|
+
console.log(`...connected in ${end - start}ms.`);
|
|
88
|
+
return this.subscriptionManager.triggerOnOpen(event);
|
|
89
|
+
});
|
|
90
|
+
connectionCache.ws.addEventListener("close", event => {
|
|
91
|
+
return this.subscriptionManager.triggerOnClose(event);
|
|
92
|
+
});
|
|
93
|
+
connectionCache.ws.addEventListener("error", event => {
|
|
94
|
+
console.info(`Error in the Websocket connection.`, event);
|
|
95
|
+
/**
|
|
96
|
+
* Let's close it if possible.
|
|
97
|
+
* It will reopen automatically.
|
|
98
|
+
*/
|
|
99
|
+
if (connectionCache.ws?.close) {
|
|
100
|
+
try {
|
|
101
|
+
connectionCache.ws.close();
|
|
102
|
+
} catch (ex) {
|
|
103
|
+
console.error(ex);
|
|
132
104
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
105
|
+
}
|
|
106
|
+
return this.subscriptionManager.triggerOnError(event);
|
|
107
|
+
});
|
|
108
|
+
connectionCache.ws.addEventListener("message", event => {
|
|
109
|
+
return this.subscriptionManager.triggerOnMessage(event);
|
|
110
|
+
});
|
|
111
|
+
return connectionCache.ws;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
export const createWebsocketsConnection = params => {
|
|
143
115
|
return new WebsocketsConnection(params);
|
|
144
116
|
};
|
|
145
117
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","defaultFactory","url","protocol","WebSocket","window","WebinyWebsocketsConnectionCache","ws","connectionCache","WebsocketsConnection","exports","params","_classCallCheck2","default","tenant","locale","getToken","subscriptionManager","factory","_createClass2","key","value","setTenant","setLocale","connect","getConnection","close","code","reason","readyState","WebsocketsReadyState","CLOSED","CLOSING","undefined","send","data","connection","OPEN","console","info","JSON","stringify","isConnected","isClosed","createUrl","token","error","concat","_this","CONNECTING","result","Error","start","Date","getTime","log","addEventListener","event","end","triggerOnOpen","triggerOnClose","ex","triggerOnError","triggerOnMessage","createWebsocketsConnection"],"sources":["WebsocketsConnection.ts"],"sourcesContent":["import {\n IGenericData,\n IWebsocketsConnection,\n IWebsocketsConnectionFactory,\n IWebsocketsConnectProtocol,\n IWebsocketsManagerMessageEvent,\n IWebsocketsSubscriptionManager,\n WebsocketsCloseCode,\n WebsocketsReadyState\n} from \"./types\";\n\ninterface ICreateUrlResult {\n token: string;\n url: string;\n}\n\nconst defaultFactory: IWebsocketsConnectionFactory = (url, protocol) => {\n return new WebSocket(url, protocol);\n};\n\ninterface IConnection {\n ws: WebSocket | null;\n}\n\n/**\n * We need to attach the websockets cache to window object, or it will be reset on every hot reload.\n */\ndeclare global {\n interface Window {\n WebinyWebsocketsConnectionCache: IConnection;\n }\n}\n\nif (!window.WebinyWebsocketsConnectionCache) {\n window.WebinyWebsocketsConnectionCache = {\n ws: null\n };\n}\n\nconst connectionCache = window.WebinyWebsocketsConnectionCache;\n\nexport interface IWebsocketsConnectionParams {\n url: string;\n tenant: string;\n locale: string;\n getToken(): Promise<string | undefined>;\n subscriptionManager: IWebsocketsSubscriptionManager;\n protocol?: IWebsocketsConnectProtocol;\n factory?: IWebsocketsConnectionFactory;\n}\n\nexport class WebsocketsConnection implements IWebsocketsConnection {\n private readonly url: string;\n private readonly getToken: () => Promise<string | undefined>;\n private tenant: string;\n private locale: string;\n private readonly protocol: IWebsocketsConnectProtocol;\n public readonly subscriptionManager: IWebsocketsSubscriptionManager;\n private readonly factory: IWebsocketsConnectionFactory;\n\n public constructor(params: IWebsocketsConnectionParams) {\n this.url = params.url;\n this.tenant = params.tenant;\n this.locale = params.locale;\n this.getToken = params.getToken;\n this.protocol = params.protocol;\n this.subscriptionManager = params.subscriptionManager;\n this.factory = params.factory || defaultFactory;\n }\n\n public setTenant(tenant: string): void {\n this.tenant = tenant;\n }\n\n public setLocale(locale: string): void {\n this.locale = locale;\n }\n\n public async connect(): Promise<void> {\n await this.getConnection();\n }\n\n public async close(code: WebsocketsCloseCode, reason: string): Promise<boolean> {\n if (\n !connectionCache.ws ||\n connectionCache.ws.readyState === WebsocketsReadyState.CLOSED ||\n connectionCache.ws.readyState === WebsocketsReadyState.CLOSING\n ) {\n connectionCache.ws = undefined as unknown as null;\n\n return true;\n }\n connectionCache.ws.close(code, reason);\n\n connectionCache.ws = undefined as unknown as null;\n return true;\n }\n\n public async send<T extends IGenericData = IGenericData>(data: T): Promise<void> {\n const connection = await this.getConnection();\n if (connection.readyState !== WebsocketsReadyState.OPEN) {\n console.info(\"Websocket connection is not open, cannot send any data.\", data);\n return;\n }\n connection.send(JSON.stringify(data));\n }\n\n public isConnected(): boolean {\n return connectionCache.ws?.readyState === WebsocketsReadyState.OPEN;\n }\n\n public isClosed(): boolean {\n return connectionCache.ws?.readyState === WebsocketsReadyState.CLOSED;\n }\n\n private async createUrl(): Promise<ICreateUrlResult | null> {\n const token = await this.getToken();\n if (!token) {\n console.error(`Missing token to connect to websockets.`);\n return null;\n }\n return {\n token,\n url: `${this.url}?token=${token}&tenant=${this.tenant}&locale=${this.locale}`\n };\n }\n\n private async getConnection(): Promise<WebSocket> {\n if (connectionCache.ws?.readyState === WebsocketsReadyState.OPEN) {\n return connectionCache.ws;\n } else if (connectionCache.ws?.readyState === WebsocketsReadyState.CONNECTING) {\n return connectionCache.ws;\n }\n\n const result = await this.createUrl();\n if (!result) {\n throw new Error(`Missing URL for WebSocket to connect to.`);\n }\n const { url } = result;\n\n connectionCache.ws = this.factory(url, this.protocol);\n\n const start = new Date().getTime();\n\n console.log(`Websockets connecting to ${this.url}...`);\n\n connectionCache.ws.addEventListener(\"open\", event => {\n const end = new Date().getTime();\n console.log(`...connected in ${end - start}ms.`);\n return this.subscriptionManager.triggerOnOpen(event);\n });\n connectionCache.ws.addEventListener(\"close\", event => {\n return this.subscriptionManager.triggerOnClose(event);\n });\n connectionCache.ws.addEventListener(\"error\", event => {\n console.info(`Error in the Websocket connection.`, event);\n /**\n * Let's close it if possible.\n * It will reopen automatically.\n */\n if (connectionCache.ws?.close) {\n try {\n connectionCache.ws.close();\n } catch (ex) {\n console.error(ex);\n }\n }\n return this.subscriptionManager.triggerOnError(event);\n });\n\n connectionCache.ws.addEventListener(\n \"message\",\n (event: IWebsocketsManagerMessageEvent<string>) => {\n return this.subscriptionManager.triggerOnMessage(event);\n }\n );\n\n return connectionCache.ws;\n }\n}\n\nexport const createWebsocketsConnection = (\n params: IWebsocketsConnectionParams\n): IWebsocketsConnection => {\n return new WebsocketsConnection(params);\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["WebsocketsReadyState","defaultFactory","url","protocol","WebSocket","window","WebinyWebsocketsConnectionCache","ws","connectionCache","WebsocketsConnection","constructor","params","tenant","locale","getToken","subscriptionManager","factory","setTenant","setLocale","connect","getConnection","close","code","reason","readyState","CLOSED","CLOSING","undefined","send","data","connection","OPEN","console","info","JSON","stringify","isConnected","isClosed","createUrl","token","error","CONNECTING","result","Error","start","Date","getTime","log","addEventListener","event","end","triggerOnOpen","triggerOnClose","ex","triggerOnError","triggerOnMessage","createWebsocketsConnection"],"sources":["WebsocketsConnection.ts"],"sourcesContent":["import type {\n IGenericData,\n IWebsocketsConnection,\n IWebsocketsConnectionFactory,\n IWebsocketsConnectProtocol,\n IWebsocketsManagerMessageEvent,\n IWebsocketsSubscriptionManager,\n WebsocketsCloseCode\n} from \"./types\";\nimport { WebsocketsReadyState } from \"./types\";\n\ninterface ICreateUrlResult {\n token: string;\n url: string;\n}\n\nconst defaultFactory: IWebsocketsConnectionFactory = (url, protocol) => {\n return new WebSocket(url, protocol);\n};\n\ninterface IConnection {\n ws: WebSocket | null;\n}\n\n/**\n * We need to attach the websockets cache to window object, or it will be reset on every hot reload.\n */\ndeclare global {\n interface Window {\n WebinyWebsocketsConnectionCache: IConnection;\n }\n}\n\nif (!window.WebinyWebsocketsConnectionCache) {\n window.WebinyWebsocketsConnectionCache = {\n ws: null\n };\n}\n\nconst connectionCache = window.WebinyWebsocketsConnectionCache;\n\nexport interface IWebsocketsConnectionParams {\n url: string;\n tenant: string;\n locale: string;\n getToken(): Promise<string | undefined>;\n subscriptionManager: IWebsocketsSubscriptionManager;\n protocol?: IWebsocketsConnectProtocol;\n factory?: IWebsocketsConnectionFactory;\n}\n\nexport class WebsocketsConnection implements IWebsocketsConnection {\n private readonly url: string;\n private readonly getToken: () => Promise<string | undefined>;\n private tenant: string;\n private locale: string;\n private readonly protocol: IWebsocketsConnectProtocol;\n public readonly subscriptionManager: IWebsocketsSubscriptionManager;\n private readonly factory: IWebsocketsConnectionFactory;\n\n public constructor(params: IWebsocketsConnectionParams) {\n this.url = params.url;\n this.tenant = params.tenant;\n this.locale = params.locale;\n this.getToken = params.getToken;\n this.protocol = params.protocol;\n this.subscriptionManager = params.subscriptionManager;\n this.factory = params.factory || defaultFactory;\n }\n\n public setTenant(tenant: string): void {\n this.tenant = tenant;\n }\n\n public setLocale(locale: string): void {\n this.locale = locale;\n }\n\n public async connect(): Promise<void> {\n await this.getConnection();\n }\n\n public async close(code: WebsocketsCloseCode, reason: string): Promise<boolean> {\n if (\n !connectionCache.ws ||\n connectionCache.ws.readyState === WebsocketsReadyState.CLOSED ||\n connectionCache.ws.readyState === WebsocketsReadyState.CLOSING\n ) {\n connectionCache.ws = undefined as unknown as null;\n\n return true;\n }\n connectionCache.ws.close(code, reason);\n\n connectionCache.ws = undefined as unknown as null;\n return true;\n }\n\n public async send<T extends IGenericData = IGenericData>(data: T): Promise<void> {\n const connection = await this.getConnection();\n if (connection.readyState !== WebsocketsReadyState.OPEN) {\n console.info(\"Websocket connection is not open, cannot send any data.\", data);\n return;\n }\n connection.send(JSON.stringify(data));\n }\n\n public isConnected(): boolean {\n return connectionCache.ws?.readyState === WebsocketsReadyState.OPEN;\n }\n\n public isClosed(): boolean {\n return connectionCache.ws?.readyState === WebsocketsReadyState.CLOSED;\n }\n\n private async createUrl(): Promise<ICreateUrlResult | null> {\n const token = await this.getToken();\n if (!token) {\n console.error(`Missing token to connect to websockets.`);\n return null;\n }\n return {\n token,\n url: `${this.url}?token=${token}&tenant=${this.tenant}&locale=${this.locale}`\n };\n }\n\n private async getConnection(): Promise<WebSocket> {\n if (connectionCache.ws?.readyState === WebsocketsReadyState.OPEN) {\n return connectionCache.ws;\n } else if (connectionCache.ws?.readyState === WebsocketsReadyState.CONNECTING) {\n return connectionCache.ws;\n }\n\n const result = await this.createUrl();\n if (!result) {\n throw new Error(`Missing URL for WebSocket to connect to.`);\n }\n const { url } = result;\n\n connectionCache.ws = this.factory(url, this.protocol);\n\n const start = new Date().getTime();\n\n console.log(`Websockets connecting to ${this.url}...`);\n\n connectionCache.ws.addEventListener(\"open\", event => {\n const end = new Date().getTime();\n console.log(`...connected in ${end - start}ms.`);\n return this.subscriptionManager.triggerOnOpen(event);\n });\n connectionCache.ws.addEventListener(\"close\", event => {\n return this.subscriptionManager.triggerOnClose(event);\n });\n connectionCache.ws.addEventListener(\"error\", event => {\n console.info(`Error in the Websocket connection.`, event);\n /**\n * Let's close it if possible.\n * It will reopen automatically.\n */\n if (connectionCache.ws?.close) {\n try {\n connectionCache.ws.close();\n } catch (ex) {\n console.error(ex);\n }\n }\n return this.subscriptionManager.triggerOnError(event);\n });\n\n connectionCache.ws.addEventListener(\n \"message\",\n (event: IWebsocketsManagerMessageEvent<string>) => {\n return this.subscriptionManager.triggerOnMessage(event);\n }\n );\n\n return connectionCache.ws;\n }\n}\n\nexport const createWebsocketsConnection = (\n params: IWebsocketsConnectionParams\n): IWebsocketsConnection => {\n return new WebsocketsConnection(params);\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IGenericData, IWebsocketsConnection, IWebsocketsManager, IWebsocketsManagerCloseEvent, IWebsocketsManagerErrorEvent, IWebsocketsManagerMessageEvent, IWebsocketsManagerOpenEvent, IWebsocketManagerSendData, IWebsocketsSubscription, IWebsocketsSubscriptionCallback, WebsocketsCloseCode } from "./types";
|
|
1
|
+
import type { IGenericData, IWebsocketsConnection, IWebsocketsManager, IWebsocketsManagerCloseEvent, IWebsocketsManagerErrorEvent, IWebsocketsManagerMessageEvent, IWebsocketsManagerOpenEvent, IWebsocketManagerSendData, IWebsocketsSubscription, IWebsocketsSubscriptionCallback, WebsocketsCloseCode } from "./types";
|
|
2
2
|
export declare class WebsocketsManager implements IWebsocketsManager {
|
|
3
3
|
readonly connection: IWebsocketsConnection;
|
|
4
4
|
constructor(connection: IWebsocketsConnection);
|
|
@@ -1,65 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.createWebsocketsManager = exports.WebsocketsManager = void 0;
|
|
8
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
|
-
var WebsocketsManager = exports.WebsocketsManager = /*#__PURE__*/function () {
|
|
11
|
-
function WebsocketsManager(connection) {
|
|
12
|
-
(0, _classCallCheck2.default)(this, WebsocketsManager);
|
|
1
|
+
export class WebsocketsManager {
|
|
2
|
+
constructor(connection) {
|
|
13
3
|
this.connection = connection;
|
|
14
4
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
}, {
|
|
46
|
-
key: "send",
|
|
47
|
-
value: function send(data) {
|
|
48
|
-
return this.connection.send(data);
|
|
49
|
-
}
|
|
50
|
-
}, {
|
|
51
|
-
key: "isConnected",
|
|
52
|
-
value: function isConnected() {
|
|
53
|
-
return this.connection.isConnected();
|
|
54
|
-
}
|
|
55
|
-
}, {
|
|
56
|
-
key: "isClosed",
|
|
57
|
-
value: function isClosed() {
|
|
58
|
-
return this.connection.isClosed();
|
|
59
|
-
}
|
|
60
|
-
}]);
|
|
61
|
-
}();
|
|
62
|
-
var createWebsocketsManager = exports.createWebsocketsManager = function createWebsocketsManager(connection) {
|
|
5
|
+
onOpen(cb) {
|
|
6
|
+
return this.connection.subscriptionManager.onOpen(cb);
|
|
7
|
+
}
|
|
8
|
+
onClose(cb) {
|
|
9
|
+
return this.connection.subscriptionManager.onClose(cb);
|
|
10
|
+
}
|
|
11
|
+
onMessage(cb) {
|
|
12
|
+
return this.connection.subscriptionManager.onMessage(cb);
|
|
13
|
+
}
|
|
14
|
+
onError(cb) {
|
|
15
|
+
return this.connection.subscriptionManager.onError(cb);
|
|
16
|
+
}
|
|
17
|
+
async connect() {
|
|
18
|
+
return this.connection.connect();
|
|
19
|
+
}
|
|
20
|
+
async close(code, reason) {
|
|
21
|
+
return await this.connection.close(code, reason);
|
|
22
|
+
}
|
|
23
|
+
send(data) {
|
|
24
|
+
return this.connection.send(data);
|
|
25
|
+
}
|
|
26
|
+
isConnected() {
|
|
27
|
+
return this.connection.isConnected();
|
|
28
|
+
}
|
|
29
|
+
isClosed() {
|
|
30
|
+
return this.connection.isClosed();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export const createWebsocketsManager = connection => {
|
|
63
34
|
return new WebsocketsManager(connection);
|
|
64
35
|
};
|
|
65
36
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["WebsocketsManager","
|
|
1
|
+
{"version":3,"names":["WebsocketsManager","constructor","connection","onOpen","cb","subscriptionManager","onClose","onMessage","onError","connect","close","code","reason","send","data","isConnected","isClosed","createWebsocketsManager"],"sources":["WebsocketsManager.ts"],"sourcesContent":["import type {\n IGenericData,\n IWebsocketsConnection,\n IWebsocketsManager,\n IWebsocketsManagerCloseEvent,\n IWebsocketsManagerErrorEvent,\n IWebsocketsManagerMessageEvent,\n IWebsocketsManagerOpenEvent,\n IWebsocketManagerSendData,\n IWebsocketsSubscription,\n IWebsocketsSubscriptionCallback,\n WebsocketsCloseCode\n} from \"./types\";\n\nexport class WebsocketsManager implements IWebsocketsManager {\n public readonly connection: IWebsocketsConnection;\n\n public constructor(connection: IWebsocketsConnection) {\n this.connection = connection;\n }\n\n public onOpen(\n cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerOpenEvent>\n ): IWebsocketsSubscription<IWebsocketsManagerOpenEvent> {\n return this.connection.subscriptionManager.onOpen(cb);\n }\n\n public onClose(\n cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerCloseEvent>\n ): IWebsocketsSubscription<IWebsocketsManagerCloseEvent> {\n return this.connection.subscriptionManager.onClose(cb);\n }\n\n public onMessage<T extends IGenericData = IGenericData>(\n cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerMessageEvent<T>>\n ): IWebsocketsSubscription<IWebsocketsManagerMessageEvent<T>> {\n return this.connection.subscriptionManager.onMessage<T>(cb);\n }\n\n public onError(\n cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerErrorEvent>\n ): IWebsocketsSubscription<IWebsocketsManagerErrorEvent> {\n return this.connection.subscriptionManager.onError(cb);\n }\n\n public async connect(): Promise<void> {\n return this.connection.connect();\n }\n\n public async close(code: WebsocketsCloseCode, reason: string): Promise<boolean> {\n return await this.connection.close(code, reason);\n }\n\n public send<T extends IWebsocketManagerSendData = IWebsocketManagerSendData>(data: T): void {\n return this.connection.send<T>(data);\n }\n\n public isConnected(): boolean {\n return this.connection.isConnected();\n }\n\n public isClosed(): boolean {\n return this.connection.isClosed();\n }\n}\n\nexport const createWebsocketsManager = (connection: IWebsocketsConnection): IWebsocketsManager => {\n return new WebsocketsManager(connection);\n};\n"],"mappings":"AAcA,OAAO,MAAMA,iBAAiB,CAA+B;EAGlDC,WAAWA,CAACC,UAAiC,EAAE;IAClD,IAAI,CAACA,UAAU,GAAGA,UAAU;EAChC;EAEOC,MAAMA,CACTC,EAAgE,EACZ;IACpD,OAAO,IAAI,CAACF,UAAU,CAACG,mBAAmB,CAACF,MAAM,CAACC,EAAE,CAAC;EACzD;EAEOE,OAAOA,CACVF,EAAiE,EACZ;IACrD,OAAO,IAAI,CAACF,UAAU,CAACG,mBAAmB,CAACC,OAAO,CAACF,EAAE,CAAC;EAC1D;EAEOG,SAASA,CACZH,EAAsE,EACZ;IAC1D,OAAO,IAAI,CAACF,UAAU,CAACG,mBAAmB,CAACE,SAAS,CAAIH,EAAE,CAAC;EAC/D;EAEOI,OAAOA,CACVJ,EAAiE,EACZ;IACrD,OAAO,IAAI,CAACF,UAAU,CAACG,mBAAmB,CAACG,OAAO,CAACJ,EAAE,CAAC;EAC1D;EAEA,MAAaK,OAAOA,CAAA,EAAkB;IAClC,OAAO,IAAI,CAACP,UAAU,CAACO,OAAO,CAAC,CAAC;EACpC;EAEA,MAAaC,KAAKA,CAACC,IAAyB,EAAEC,MAAc,EAAoB;IAC5E,OAAO,MAAM,IAAI,CAACV,UAAU,CAACQ,KAAK,CAACC,IAAI,EAAEC,MAAM,CAAC;EACpD;EAEOC,IAAIA,CAAkEC,IAAO,EAAQ;IACxF,OAAO,IAAI,CAACZ,UAAU,CAACW,IAAI,CAAIC,IAAI,CAAC;EACxC;EAEOC,WAAWA,CAAA,EAAY;IAC1B,OAAO,IAAI,CAACb,UAAU,CAACa,WAAW,CAAC,CAAC;EACxC;EAEOC,QAAQA,CAAA,EAAY;IACvB,OAAO,IAAI,CAACd,UAAU,CAACc,QAAQ,CAAC,CAAC;EACrC;AACJ;AAEA,OAAO,MAAMC,uBAAuB,GAAIf,UAAiC,IAAyB;EAC9F,OAAO,IAAIF,iBAAiB,CAACE,UAAU,CAAC;AAC5C,CAAC","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { IGenericData, IWebsocketsManagerCloseEvent, IWebsocketsManagerErrorEvent, IWebsocketsManagerMessageEvent, IWebsocketsManagerOpenEvent } from "./types";
|
|
2
|
-
import { IWebsocketsSubscription, IWebsocketsSubscriptionCallback, IWebsocketsSubscriptionManager } from "./abstractions/IWebsocketsSubscriptionManager";
|
|
1
|
+
import type { IGenericData, IWebsocketsManagerCloseEvent, IWebsocketsManagerErrorEvent, IWebsocketsManagerMessageEvent, IWebsocketsManagerOpenEvent } from "./types";
|
|
2
|
+
import type { IWebsocketsSubscription, IWebsocketsSubscriptionCallback, IWebsocketsSubscriptionManager } from "./abstractions/IWebsocketsSubscriptionManager";
|
|
3
3
|
export declare class WebsocketsSubscriptionManager implements IWebsocketsSubscriptionManager {
|
|
4
4
|
private subscriptions;
|
|
5
5
|
onOpen(cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerOpenEvent>): IWebsocketsSubscription<IWebsocketsManagerOpenEvent>;
|
|
@@ -1,105 +1,72 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
var WebsocketsSubscriptionManager = exports.WebsocketsSubscriptionManager = /*#__PURE__*/function () {
|
|
14
|
-
function WebsocketsSubscriptionManager() {
|
|
15
|
-
(0, _classCallCheck2.default)(this, WebsocketsSubscriptionManager);
|
|
16
|
-
(0, _defineProperty2.default)(this, "subscriptions", {
|
|
17
|
-
open: {},
|
|
18
|
-
close: {},
|
|
19
|
-
error: {},
|
|
20
|
-
message: {}
|
|
21
|
-
});
|
|
1
|
+
import { generateId } from "@webiny/utils/generateId";
|
|
2
|
+
export class WebsocketsSubscriptionManager {
|
|
3
|
+
subscriptions = {
|
|
4
|
+
open: {},
|
|
5
|
+
close: {},
|
|
6
|
+
error: {},
|
|
7
|
+
message: {}
|
|
8
|
+
};
|
|
9
|
+
onOpen(cb) {
|
|
10
|
+
const value = this.createSubscription("open", cb);
|
|
11
|
+
this.subscriptions.close[value.id] = value;
|
|
12
|
+
return value;
|
|
22
13
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
value
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
this.subscriptions.error[value.id] = value;
|
|
42
|
-
return value;
|
|
14
|
+
onClose(cb) {
|
|
15
|
+
const value = this.createSubscription("close", cb);
|
|
16
|
+
this.subscriptions.close[value.id] = value;
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
onError(cb) {
|
|
20
|
+
const value = this.createSubscription("error", cb);
|
|
21
|
+
this.subscriptions.error[value.id] = value;
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
onMessage(cb) {
|
|
25
|
+
const value = this.createSubscription("message", cb);
|
|
26
|
+
this.subscriptions.message[value.id] = value;
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
async triggerOnOpen(event) {
|
|
30
|
+
for (const id in this.subscriptions.open) {
|
|
31
|
+
await this.subscriptions.open[id].cb(event);
|
|
43
32
|
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
this.subscriptions.message[value.id] = value;
|
|
49
|
-
return value;
|
|
33
|
+
}
|
|
34
|
+
async triggerOnClose(event) {
|
|
35
|
+
for (const id in this.subscriptions.close) {
|
|
36
|
+
await this.subscriptions.close[id].cb(event);
|
|
50
37
|
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
await this.subscriptions.open[id].cb(event);
|
|
56
|
-
}
|
|
38
|
+
}
|
|
39
|
+
async triggerOnError(event) {
|
|
40
|
+
for (const id in this.subscriptions.error) {
|
|
41
|
+
await this.subscriptions.error[id].cb(event);
|
|
57
42
|
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
43
|
+
}
|
|
44
|
+
async triggerOnMessage(event) {
|
|
45
|
+
let data = {};
|
|
46
|
+
try {
|
|
47
|
+
data = JSON.parse(event.data);
|
|
48
|
+
} catch (ex) {
|
|
49
|
+
console.error("Failed to parse the incoming message.", ex);
|
|
64
50
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
51
|
+
for (const id in this.subscriptions.message) {
|
|
52
|
+
await this.subscriptions.message[id].cb({
|
|
53
|
+
...event,
|
|
54
|
+
data: data || {}
|
|
55
|
+
});
|
|
71
56
|
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
for (var id in this.subscriptions.message) {
|
|
82
|
-
await this.subscriptions.message[id].cb((0, _objectSpread2.default)((0, _objectSpread2.default)({}, event), {}, {
|
|
83
|
-
data: data || {}
|
|
84
|
-
}));
|
|
57
|
+
}
|
|
58
|
+
createSubscription(type, cb) {
|
|
59
|
+
const id = generateId();
|
|
60
|
+
return {
|
|
61
|
+
cb,
|
|
62
|
+
id,
|
|
63
|
+
off: () => {
|
|
64
|
+
delete this.subscriptions[type][id];
|
|
85
65
|
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
var _this = this;
|
|
91
|
-
var id = (0, _generateId.generateId)();
|
|
92
|
-
return {
|
|
93
|
-
cb: cb,
|
|
94
|
-
id: id,
|
|
95
|
-
off: function off() {
|
|
96
|
-
delete _this.subscriptions[type][id];
|
|
97
|
-
}
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
}]);
|
|
101
|
-
}();
|
|
102
|
-
var createWebsocketsSubscriptionManager = exports.createWebsocketsSubscriptionManager = function createWebsocketsSubscriptionManager() {
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export const createWebsocketsSubscriptionManager = () => {
|
|
103
70
|
return new WebsocketsSubscriptionManager();
|
|
104
71
|
};
|
|
105
72
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["generateId","WebsocketsSubscriptionManager","subscriptions","open","close","error","message","onOpen","cb","value","createSubscription","id","onClose","onError","onMessage","triggerOnOpen","event","triggerOnClose","triggerOnError","triggerOnMessage","data","JSON","parse","ex","console","type","off","createWebsocketsSubscriptionManager"],"sources":["WebsocketsSubscriptionManager.ts"],"sourcesContent":["import { generateId } from \"@webiny/utils/generateId\";\nimport type {\n IGenericData,\n IWebsocketsManagerCloseEvent,\n IWebsocketsManagerErrorEvent,\n IWebsocketManagerEvent,\n IWebsocketsManagerMessageEvent,\n IWebsocketsManagerOpenEvent\n} from \"./types\";\nimport type {\n IWebsocketsSubscriptionManagerSubscriptions,\n IWebsocketsSubscription,\n IWebsocketsSubscriptionCallback,\n IWebsocketsSubscriptionManager\n} from \"./abstractions/IWebsocketsSubscriptionManager\";\n\nexport class WebsocketsSubscriptionManager implements IWebsocketsSubscriptionManager {\n private subscriptions: IWebsocketsSubscriptionManagerSubscriptions = {\n open: {},\n close: {},\n error: {},\n message: {}\n };\n\n public onOpen(\n cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerOpenEvent>\n ): IWebsocketsSubscription<IWebsocketsManagerOpenEvent> {\n const value = this.createSubscription<IWebsocketsManagerOpenEvent>(\"open\", cb);\n this.subscriptions.close[value.id] = value;\n return value;\n }\n\n public onClose(\n cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerCloseEvent>\n ): IWebsocketsSubscription<IWebsocketsManagerCloseEvent> {\n const value = this.createSubscription<IWebsocketsManagerCloseEvent>(\"close\", cb);\n this.subscriptions.close[value.id] = value;\n return value;\n }\n\n public onError(\n cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerErrorEvent>\n ): IWebsocketsSubscription<IWebsocketsManagerErrorEvent> {\n const value = this.createSubscription<IWebsocketsManagerErrorEvent>(\"error\", cb);\n this.subscriptions.error[value.id] = value;\n return value;\n }\n\n public onMessage<T extends IGenericData = IGenericData>(\n cb: IWebsocketsSubscriptionCallback<T>\n ): IWebsocketsSubscription<T> {\n const value = this.createSubscription<T>(\"message\", cb);\n this.subscriptions.message[value.id] = value;\n return value;\n }\n\n public async triggerOnOpen(event: Event): Promise<void> {\n for (const id in this.subscriptions.open) {\n await this.subscriptions.open[id].cb(event);\n }\n }\n\n public async triggerOnClose(event: CloseEvent): Promise<void> {\n for (const id in this.subscriptions.close) {\n await this.subscriptions.close[id].cb(event);\n }\n }\n\n public async triggerOnError(event: Event): Promise<void> {\n for (const id in this.subscriptions.error) {\n await this.subscriptions.error[id].cb(event);\n }\n }\n\n public async triggerOnMessage(event: IWebsocketsManagerMessageEvent<string>): Promise<void> {\n let data: IGenericData = {};\n try {\n data = JSON.parse(event.data);\n } catch (ex) {\n console.error(\"Failed to parse the incoming message.\", ex);\n }\n for (const id in this.subscriptions.message) {\n await this.subscriptions.message[id].cb({\n ...event,\n data: data || {}\n });\n }\n }\n\n private createSubscription<T>(\n type: IWebsocketManagerEvent,\n cb: IWebsocketsSubscriptionCallback<T>\n ): IWebsocketsSubscription<T> {\n const id = generateId();\n return {\n cb,\n id,\n off: () => {\n delete this.subscriptions[type][id];\n }\n };\n }\n}\n\nexport const createWebsocketsSubscriptionManager = (): IWebsocketsSubscriptionManager => {\n return new WebsocketsSubscriptionManager();\n};\n"],"mappings":"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","ignoreList":[]}
|