@webiny/app-websockets 6.0.0-alpha.5 β 6.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -9
- package/WebsocketsContextProvider.d.ts +1 -1
- package/WebsocketsContextProvider.js +16 -25
- package/WebsocketsContextProvider.js.map +1 -1
- package/domain/WebsocketsAction.d.ts +1 -1
- package/domain/WebsocketsAction.js.map +1 -1
- package/domain/WebsocketsActions.d.ts +1 -3
- package/domain/WebsocketsActions.js +1 -6
- package/domain/WebsocketsActions.js.map +1 -1
- package/domain/WebsocketsConnection.d.ts +1 -4
- package/domain/WebsocketsConnection.js +2 -6
- package/domain/WebsocketsConnection.js.map +1 -1
- package/domain/WebsocketsManager.d.ts +1 -1
- package/domain/WebsocketsManager.js.map +1 -1
- package/domain/WebsocketsSubscriptionManager.d.ts +2 -2
- package/domain/WebsocketsSubscriptionManager.js +1 -1
- package/domain/WebsocketsSubscriptionManager.js.map +1 -1
- package/domain/abstractions/IWebsocketsAction.d.ts +1 -1
- package/domain/abstractions/IWebsocketsAction.js.map +1 -1
- package/domain/abstractions/IWebsocketsActions.d.ts +2 -2
- package/domain/abstractions/IWebsocketsActions.js.map +1 -1
- package/domain/abstractions/IWebsocketsConnection.d.ts +2 -2
- package/domain/abstractions/IWebsocketsConnection.js.map +1 -1
- package/domain/abstractions/IWebsocketsManager.d.ts +2 -6
- package/domain/abstractions/IWebsocketsManager.js.map +1 -1
- package/domain/abstractions/IWebsocketsSubscriptionManager.d.ts +2 -2
- package/domain/abstractions/IWebsocketsSubscriptionManager.js.map +1 -1
- package/domain/abstractions/types.d.ts +1 -1
- package/domain/abstractions/types.js.map +1 -1
- package/domain/index.d.ts +5 -5
- package/domain/index.js +5 -5
- package/domain/index.js.map +1 -1
- package/domain/types.d.ts +6 -6
- package/domain/types.js +2 -6
- package/domain/types.js.map +1 -1
- package/hooks/index.d.ts +1 -1
- package/hooks/index.js +1 -1
- package/hooks/index.js.map +1 -1
- package/hooks/useWebsockets.d.ts +1 -1
- package/hooks/useWebsockets.js +1 -1
- package/hooks/useWebsockets.js.map +1 -1
- package/index.d.ts +2 -2
- package/index.js +3 -3
- package/index.js.map +1 -1
- package/package.json +9 -14
- package/types.d.ts +2 -2
- package/types.js +1 -1
- package/types.js.map +1 -1
package/README.md
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
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
2
|
|
|
7
|
-
|
|
3
|
+
> [!NOTE]
|
|
4
|
+
> This package is part of the [Webiny](https://www.webiny.com) monorepo.
|
|
5
|
+
> Itβs **included in every Webiny project by default** and is not meant to be used as a standalone package.
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
π **Documentation:** [https://www.webiny.com/docs](https://www.webiny.com/docs)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
_This README file is automatically generated during the publish process._
|
|
@@ -1,27 +1,22 @@
|
|
|
1
1
|
import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { getUrl } from "./utils/getUrl";
|
|
2
|
+
import { useFeature, useTenantContext } from "@webiny/app-admin";
|
|
3
|
+
import { AuthenticationContextFeature } from "@webiny/app-admin/features/security/AuthenticationContext/feature.js";
|
|
4
|
+
import { WebsocketsCloseCode } from "./types.js";
|
|
5
|
+
import { createWebsocketsAction, createWebsocketsActions, createWebsocketsConnection, createWebsocketsManager, createWebsocketsSubscriptionManager } from "./domain/index.js";
|
|
6
|
+
import { getUrl } from "./utils/getUrl.js";
|
|
8
7
|
export const WebsocketsContext = /*#__PURE__*/React.createContext(undefined);
|
|
9
8
|
export const WebsocketsContextProvider = props => {
|
|
10
9
|
const {
|
|
11
10
|
tenant
|
|
12
|
-
} =
|
|
11
|
+
} = useTenantContext();
|
|
13
12
|
const {
|
|
14
|
-
|
|
15
|
-
} =
|
|
16
|
-
const {
|
|
17
|
-
getIdToken
|
|
18
|
-
} = useSecurity();
|
|
19
|
-
const locale = getCurrentLocale("default");
|
|
13
|
+
authenticationContext
|
|
14
|
+
} = useFeature(AuthenticationContextFeature);
|
|
20
15
|
const socketsRef = useRef();
|
|
21
16
|
const [current, setCurrent] = useState({});
|
|
22
17
|
const getToken = useCallback(async () => {
|
|
23
|
-
return await getIdToken();
|
|
24
|
-
}, [
|
|
18
|
+
return await authenticationContext.getIdToken();
|
|
19
|
+
}, [authenticationContext]);
|
|
25
20
|
const subscriptionManager = useMemo(() => {
|
|
26
21
|
const manager = createWebsocketsSubscriptionManager();
|
|
27
22
|
let currentIteration = 0;
|
|
@@ -78,18 +73,17 @@ export const WebsocketsContextProvider = props => {
|
|
|
78
73
|
useEffect(() => {
|
|
79
74
|
(async () => {
|
|
80
75
|
const token = await getToken();
|
|
81
|
-
if (!token || !tenant
|
|
76
|
+
if (!token || !tenant) {
|
|
82
77
|
return;
|
|
83
|
-
} else if (current.tenant === tenant
|
|
78
|
+
} else if (current.tenant === tenant) {
|
|
84
79
|
return;
|
|
85
80
|
} else if (socketsRef.current) {
|
|
86
|
-
await socketsRef.current.close(WebsocketsCloseCode.NORMAL, "Changing tenant
|
|
81
|
+
await socketsRef.current.close(WebsocketsCloseCode.NORMAL, "Changing tenant.");
|
|
87
82
|
}
|
|
88
83
|
const url = getUrl();
|
|
89
84
|
if (!url) {
|
|
90
85
|
console.error("Not possible to connect to the websocket without a valid URL.", {
|
|
91
86
|
tenant,
|
|
92
|
-
locale,
|
|
93
87
|
token
|
|
94
88
|
});
|
|
95
89
|
return;
|
|
@@ -98,25 +92,22 @@ export const WebsocketsContextProvider = props => {
|
|
|
98
92
|
subscriptionManager,
|
|
99
93
|
url,
|
|
100
94
|
tenant,
|
|
101
|
-
locale,
|
|
102
95
|
getToken,
|
|
103
96
|
protocol: ["webiny-ws-v1"]
|
|
104
97
|
}));
|
|
105
98
|
await socketsRef.current.connect();
|
|
106
99
|
setCurrent({
|
|
107
|
-
tenant
|
|
108
|
-
locale
|
|
100
|
+
tenant
|
|
109
101
|
});
|
|
110
102
|
})();
|
|
111
|
-
}, [tenant,
|
|
103
|
+
}, [tenant, subscriptionManager, getToken]);
|
|
112
104
|
const websocketActions = useMemo(() => {
|
|
113
105
|
return createWebsocketsActions({
|
|
114
106
|
manager: socketsRef.current,
|
|
115
107
|
tenant,
|
|
116
|
-
locale,
|
|
117
108
|
getToken
|
|
118
109
|
});
|
|
119
|
-
}, [socketsRef.current, tenant,
|
|
110
|
+
}, [socketsRef.current, tenant, getToken]);
|
|
120
111
|
const send = useCallback(async (action, data, timeout) => {
|
|
121
112
|
return websocketActions.run({
|
|
122
113
|
action,
|
|
@@ -1 +1 @@
|
|
|
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 type {\n IncomingGenericData,\n IWebsocketsContext,\n IWebsocketsContextSendCallable,\n IWebsocketsManagerCloseEvent,\n IWebsocketsManagerErrorEvent\n} from \"~/types\";\nimport { WebsocketsCloseCode } from \"~/types\";\nimport {\n createWebsocketsAction,\n createWebsocketsActions,\n createWebsocketsConnection,\n createWebsocketsManager,\n createWebsocketsSubscriptionManager\n} from \"./domain\";\nimport type { 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","useFeature","useTenantContext","AuthenticationContextFeature","WebsocketsCloseCode","createWebsocketsAction","createWebsocketsActions","createWebsocketsConnection","createWebsocketsManager","createWebsocketsSubscriptionManager","getUrl","WebsocketsContext","createContext","undefined","WebsocketsContextProvider","props","tenant","authenticationContext","socketsRef","current","setCurrent","getToken","getIdToken","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 { useFeature, useTenantContext } from \"@webiny/app-admin\";\nimport { AuthenticationContextFeature } from \"@webiny/app-admin/features/security/AuthenticationContext/feature.js\";\nimport type {\n IncomingGenericData,\n IWebsocketsContext,\n IWebsocketsContextSendCallable,\n IWebsocketsManagerCloseEvent,\n IWebsocketsManagerErrorEvent\n} from \"~/types.js\";\nimport { WebsocketsCloseCode } from \"~/types.js\";\nimport {\n createWebsocketsAction,\n createWebsocketsActions,\n createWebsocketsConnection,\n createWebsocketsManager,\n createWebsocketsSubscriptionManager\n} from \"./domain/index.js\";\nimport type { IGenericData, IWebsocketsManager } from \"./domain/types.js\";\nimport { getUrl } from \"./utils/getUrl.js\";\n\nexport interface IWebsocketsContextProviderProps {\n loader?: React.ReactElement;\n children: React.ReactNode;\n}\n\nexport const WebsocketsContext = React.createContext<IWebsocketsContext>(\n undefined as unknown as IWebsocketsContext\n);\n\ninterface ICurrentData {\n tenant?: string;\n}\n\nexport const WebsocketsContextProvider = (props: IWebsocketsContextProviderProps) => {\n const { tenant } = useTenantContext();\n const { authenticationContext } = useFeature(AuthenticationContextFeature);\n\n const socketsRef = useRef<IWebsocketsManager>();\n\n const [current, setCurrent] = useState<ICurrentData>({});\n\n const getToken = useCallback(async () => {\n return await authenticationContext.getIdToken();\n }, [authenticationContext]);\n\n const subscriptionManager = useMemo(() => {\n const manager = createWebsocketsSubscriptionManager();\n\n let currentIteration = 0;\n manager.onClose(event => {\n if (currentIteration > 5 || event.code !== WebsocketsCloseCode.GOING_AWAY) {\n return;\n }\n currentIteration++;\n setTimeout(() => {\n if (!socketsRef.current) {\n return;\n } else if (socketsRef.current.isClosed()) {\n console.log(\"Running auto-reconnect.\");\n\n socketsRef.current.connect();\n }\n }, 1000);\n });\n\n return manager;\n }, []);\n\n /**\n * We need this useEffect to close the websocket connection and remove window focus event in case component is unmounted.\n * This will, probably, happen only during the development phase.\n *\n * If we did not disconnect on component unmount, we would have a memory leak - multiple connections would be opened.\n */\n useEffect(() => {\n /**\n * We want to add a window event listener which will check if the connection is closed, and if its - it will connect again.\n */\n const abortController = new AbortController();\n\n window.addEventListener(\n \"focus\",\n () => {\n if (!socketsRef.current) {\n return;\n } else if (socketsRef.current.isClosed()) {\n console.log(\"Running auto-reconnect on focus.\");\n socketsRef.current.connect();\n }\n },\n { signal: abortController.signal }\n );\n window.addEventListener(\n \"close\",\n () => {\n subscriptionManager.triggerOnClose(\n new CloseEvent(\"windowClose\", {\n code: WebsocketsCloseCode.GOING_AWAY,\n reason: \"Closing Window or Tab.\"\n })\n );\n },\n { signal: abortController.signal }\n );\n\n return () => {\n abortController.abort();\n };\n }, []);\n\n useEffect(() => {\n (async () => {\n const token = await getToken();\n if (!token || !tenant) {\n return;\n } else if (current.tenant === tenant) {\n return;\n } else if (socketsRef.current) {\n await socketsRef.current.close(WebsocketsCloseCode.NORMAL, \"Changing tenant.\");\n }\n const url = getUrl();\n\n if (!url) {\n console.error(\"Not possible to connect to the websocket without a valid URL.\", {\n tenant,\n token\n });\n return;\n }\n\n socketsRef.current = createWebsocketsManager(\n createWebsocketsConnection({\n subscriptionManager,\n url,\n tenant,\n getToken,\n protocol: [\"webiny-ws-v1\"]\n })\n );\n await socketsRef.current.connect();\n\n setCurrent({ tenant });\n })();\n }, [tenant, subscriptionManager, getToken]);\n\n const websocketActions = useMemo(() => {\n return createWebsocketsActions({\n manager: socketsRef.current!,\n tenant,\n getToken\n });\n }, [socketsRef.current, tenant, getToken]);\n\n const send = useCallback<IWebsocketsContextSendCallable>(\n async (action, data, timeout) => {\n return websocketActions.run({\n action,\n data,\n timeout\n });\n },\n [websocketActions]\n );\n\n const createAction = useCallback(\n <T extends IGenericData = IGenericData, R extends IGenericData = IGenericData>(\n name: string\n ) => {\n return createWebsocketsAction<T, R>(websocketActions, name);\n },\n [websocketActions]\n );\n\n const onMessage = useCallback(\n <T extends IncomingGenericData = IncomingGenericData>(\n action: string,\n cb: (data: T) => void\n ) => {\n return socketsRef.current!.onMessage<T>(async event => {\n if (event.data.action !== action) {\n return;\n }\n cb(event.data);\n });\n },\n [socketsRef.current]\n );\n\n const onError = useCallback(\n (cb: (data: IWebsocketsManagerErrorEvent) => void) => {\n return socketsRef.current!.onError(data => {\n return cb(data);\n });\n },\n [socketsRef.current]\n );\n\n const onClose = useCallback(\n (cb: (data: IWebsocketsManagerCloseEvent) => void) => {\n return socketsRef.current!.onClose(data => {\n return cb(data);\n });\n },\n [socketsRef.current]\n );\n\n if (!socketsRef.current) {\n return props.loader || null;\n }\n\n const value: IWebsocketsContext = {\n send,\n createAction,\n onMessage,\n onError,\n onClose\n };\n return <WebsocketsContext.Provider value={value} {...props} />;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IGenericData, IWebsocketsAction, IWebsocketsActions, IWebsocketsActionsTriggerParams } from "./types";
|
|
1
|
+
import type { IGenericData, IWebsocketsAction, IWebsocketsActions, IWebsocketsActionsTriggerParams } from "./types.js";
|
|
2
2
|
export declare class WebsocketsAction<T extends IGenericData = IGenericData, R extends IGenericData = IGenericData> implements IWebsocketsAction<T, R> {
|
|
3
3
|
private readonly actions;
|
|
4
4
|
private readonly name;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["WebsocketsAction","constructor","actions","name","trigger","params","data","onResponse","timeout","promise","run","action","undefined","result","createWebsocketsAction"],"sources":["WebsocketsAction.ts"],"sourcesContent":["import type {\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
|
+
{"version":3,"names":["WebsocketsAction","constructor","actions","name","trigger","params","data","onResponse","timeout","promise","run","action","undefined","result","createWebsocketsAction"],"sources":["WebsocketsAction.ts"],"sourcesContent":["import type {\n IGenericData,\n IWebsocketsAction,\n IWebsocketsActions,\n IWebsocketsActionsTriggerParams\n} from \"./types.js\";\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,15 +1,13 @@
|
|
|
1
|
-
import type { IGenericData, IWebsocketsActions, IWebsocketsActionsRunParams, IWebsocketsManager } from "./types";
|
|
1
|
+
import type { IGenericData, IWebsocketsActions, IWebsocketsActionsRunParams, IWebsocketsManager } from "./types.js";
|
|
2
2
|
export interface IWebsocketActionsParams {
|
|
3
3
|
manager: IWebsocketsManager;
|
|
4
4
|
tenant: string | null;
|
|
5
|
-
locale: string | null;
|
|
6
5
|
getToken: () => Promise<string | undefined>;
|
|
7
6
|
}
|
|
8
7
|
export declare class WebsocketsActions implements IWebsocketsActions {
|
|
9
8
|
readonly manager: IWebsocketsManager;
|
|
10
9
|
private readonly getToken;
|
|
11
10
|
private readonly tenant;
|
|
12
|
-
private readonly locale;
|
|
13
11
|
constructor(params: IWebsocketActionsParams);
|
|
14
12
|
run<T extends IGenericData = IGenericData, R extends IGenericData = IGenericData>(params: IWebsocketsActionsRunParams<T>): Promise<R | null>;
|
|
15
13
|
}
|
|
@@ -2,7 +2,6 @@ export class WebsocketsActions {
|
|
|
2
2
|
constructor(params) {
|
|
3
3
|
this.manager = params.manager;
|
|
4
4
|
this.tenant = params.tenant;
|
|
5
|
-
this.locale = params.locale;
|
|
6
5
|
this.getToken = params.getToken;
|
|
7
6
|
}
|
|
8
7
|
async run(params) {
|
|
@@ -18,10 +17,8 @@ export class WebsocketsActions {
|
|
|
18
17
|
} else if (!this.tenant) {
|
|
19
18
|
console.error("Tenant is not set - cannot send a websocket message.");
|
|
20
19
|
return null;
|
|
21
|
-
} else if (!this.locale) {
|
|
22
|
-
console.error("Locale is not set - cannot send a websocket message.");
|
|
23
|
-
return null;
|
|
24
20
|
}
|
|
21
|
+
|
|
25
22
|
/**
|
|
26
23
|
* If no timeout was sent, we will just send the message and return null.
|
|
27
24
|
* No waiting for the response.
|
|
@@ -33,7 +30,6 @@ export class WebsocketsActions {
|
|
|
33
30
|
*/
|
|
34
31
|
token,
|
|
35
32
|
tenant: this.tenant,
|
|
36
|
-
locale: this.locale,
|
|
37
33
|
action,
|
|
38
34
|
data: data || {}
|
|
39
35
|
});
|
|
@@ -66,7 +62,6 @@ export class WebsocketsActions {
|
|
|
66
62
|
*/
|
|
67
63
|
token,
|
|
68
64
|
tenant: this.tenant,
|
|
69
|
-
locale: this.locale,
|
|
70
65
|
messageId: subscription.id,
|
|
71
66
|
action,
|
|
72
67
|
data: data || {}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["WebsocketsActions","constructor","params","manager","tenant","
|
|
1
|
+
{"version":3,"names":["WebsocketsActions","constructor","params","manager","tenant","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 type {\n IGenericData,\n IWebsocketsActions,\n IWebsocketsActionsRunParams,\n IWebsocketsManager,\n IWebsocketManagerSendData\n} from \"./types.js\";\n\nexport interface IWebsocketActionsParams {\n manager: IWebsocketsManager;\n tenant: 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\n public constructor(params: IWebsocketActionsParams) {\n this.manager = params.manager;\n this.tenant = params.tenant;\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 }\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 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 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":"AAcA,OAAO,MAAMA,iBAAiB,CAA+B;EAMlDC,WAAWA,CAACC,MAA+B,EAAE;IAChD,IAAI,CAACC,OAAO,GAAGD,MAAM,CAACC,OAAO;IAC7B,IAAI,CAACC,MAAM,GAAGF,MAAM,CAACE,MAAM;IAC3B,IAAI,CAACC,QAAQ,GAAGH,MAAM,CAACG,QAAQ;EACnC;EAEA,MAAaC,GAAGA,CACZJ,MAAsC,EACrB;IACjB,MAAM;MAAEK,MAAM;MAAEC,OAAO;MAAEC;IAAK,CAAC,GAAGP,MAAM;IACxC,MAAMQ,KAAK,GAAG,MAAM,IAAI,CAACL,QAAQ,CAAC,CAAC;IACnC,IAAI,CAACK,KAAK,EAAE;MACRC,OAAO,CAACC,KAAK,CAAC,qDAAqD,CAAC;MACpE,OAAO,IAAI;IACf,CAAC,MAAM,IAAI,CAAC,IAAI,CAACR,MAAM,EAAE;MACrBO,OAAO,CAACC,KAAK,CAAC,sDAAsD,CAAC;MACrE,OAAO,IAAI;IACf;;IAEA;AACR;AACA;AACA;IACQ,IAAI,CAACJ,OAAO,IAAIA,OAAO,GAAG,CAAC,EAAE;MACzB,IAAI,CAACL,OAAO,CAACU,IAAI,CAA+B;QAC5C;AAChB;AACA;QACgBH,KAAK;QACLN,MAAM,EAAE,IAAI,CAACA,MAAgB;QAC7BG,MAAM;QACNE,IAAI,EAAEA,IAAI,IAAK,CAAC;MACpB,CAAC,CAAC;MACF,OAAO,IAAI;IACf;IACA;AACR;AACA;IACQ,OAAO,MAAM,IAAIK,OAAO,CAAI,CAACC,OAAO,EAAEC,MAAM,KAAK;MAC7C,IAAIC,cAAqC,GAAG,IAAI;MAChD,MAAMC,YAAY,GAAG,IAAI,CAACf,OAAO,CAACgB,SAAS,CAAI,MAAMC,KAAK,IAAI;QAC1D,IAAIA,KAAK,CAACX,IAAI,CAACY,SAAS,KAAKH,YAAY,CAACI,EAAE,EAAE;UAC1C;QACJ;QACAP,OAAO,CAACK,KAAK,CAACX,IAAI,CAAC;QACnBS,YAAY,CAACK,GAAG,CAAC,CAAC;QAClB,IAAI,CAACN,cAAc,EAAE;UACjB;QACJ;QACAO,YAAY,CAACP,cAAc,CAAC;MAChC,CAAC,CAAC;MAEFA,cAAc,GAAGQ,UAAU,CAAC,MAAM;QAC9B,MAAMC,OAAO,GAAG,qBAAqBnB,MAAM,YAAY;QACvDW,YAAY,CAACK,GAAG,CAAC,CAAC;QAClBP,MAAM,CAAC,IAAIW,KAAK,CAACD,OAAO,CAAC,CAAC;MAC9B,CAAC,EAAElB,OAAO,CAAC;MAEX,IAAI,CAACL,OAAO,CAACU,IAAI,CAA+B;QAC5C;AAChB;AACA;QACgBH,KAAK;QACLN,MAAM,EAAE,IAAI,CAACA,MAAgB;QAC7BiB,SAAS,EAAEH,YAAY,CAACI,EAAE;QAC1Bf,MAAM;QACNE,IAAI,EAAEA,IAAI,IAAK,CAAC;MACpB,CAAC,CAAC;IACN,CAAC,CAAC,CAACmB,KAAK,CAACC,EAAE,IAAI;MACXlB,OAAO,CAACC,KAAK,CAAC,wCAAwC,EAAEiB,EAAE,CAAC;MAC3D,OAAO,IAAI;IACf,CAAC,CAAC;EACN;AACJ;AAEA,OAAO,MAAMC,uBAAuB,GAAI5B,MAA+B,IAAyB;EAC5F,OAAO,IAAIF,iBAAiB,CAACE,MAAM,CAAC;AACxC,CAAC","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IGenericData, IWebsocketsConnection, IWebsocketsConnectionFactory, IWebsocketsConnectProtocol, IWebsocketsSubscriptionManager, WebsocketsCloseCode } from "./types";
|
|
1
|
+
import type { IGenericData, IWebsocketsConnection, IWebsocketsConnectionFactory, IWebsocketsConnectProtocol, IWebsocketsSubscriptionManager, WebsocketsCloseCode } from "./types.js";
|
|
2
2
|
interface IConnection {
|
|
3
3
|
ws: WebSocket | null;
|
|
4
4
|
}
|
|
@@ -13,7 +13,6 @@ declare global {
|
|
|
13
13
|
export interface IWebsocketsConnectionParams {
|
|
14
14
|
url: string;
|
|
15
15
|
tenant: string;
|
|
16
|
-
locale: string;
|
|
17
16
|
getToken(): Promise<string | undefined>;
|
|
18
17
|
subscriptionManager: IWebsocketsSubscriptionManager;
|
|
19
18
|
protocol?: IWebsocketsConnectProtocol;
|
|
@@ -23,13 +22,11 @@ export declare class WebsocketsConnection implements IWebsocketsConnection {
|
|
|
23
22
|
private readonly url;
|
|
24
23
|
private readonly getToken;
|
|
25
24
|
private tenant;
|
|
26
|
-
private locale;
|
|
27
25
|
private readonly protocol;
|
|
28
26
|
readonly subscriptionManager: IWebsocketsSubscriptionManager;
|
|
29
27
|
private readonly factory;
|
|
30
28
|
constructor(params: IWebsocketsConnectionParams);
|
|
31
29
|
setTenant(tenant: string): void;
|
|
32
|
-
setLocale(locale: string): void;
|
|
33
30
|
connect(): Promise<void>;
|
|
34
31
|
close(code: WebsocketsCloseCode, reason: string): Promise<boolean>;
|
|
35
32
|
send<T extends IGenericData = IGenericData>(data: T): Promise<void>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { WebsocketsReadyState } from "./types";
|
|
1
|
+
import { WebsocketsReadyState } from "./types.js";
|
|
2
2
|
const defaultFactory = (url, protocol) => {
|
|
3
3
|
return new WebSocket(url, protocol);
|
|
4
4
|
};
|
|
@@ -17,7 +17,6 @@ export class WebsocketsConnection {
|
|
|
17
17
|
constructor(params) {
|
|
18
18
|
this.url = params.url;
|
|
19
19
|
this.tenant = params.tenant;
|
|
20
|
-
this.locale = params.locale;
|
|
21
20
|
this.getToken = params.getToken;
|
|
22
21
|
this.protocol = params.protocol;
|
|
23
22
|
this.subscriptionManager = params.subscriptionManager;
|
|
@@ -26,9 +25,6 @@ export class WebsocketsConnection {
|
|
|
26
25
|
setTenant(tenant) {
|
|
27
26
|
this.tenant = tenant;
|
|
28
27
|
}
|
|
29
|
-
setLocale(locale) {
|
|
30
|
-
this.locale = locale;
|
|
31
|
-
}
|
|
32
28
|
async connect() {
|
|
33
29
|
await this.getConnection();
|
|
34
30
|
}
|
|
@@ -63,7 +59,7 @@ export class WebsocketsConnection {
|
|
|
63
59
|
}
|
|
64
60
|
return {
|
|
65
61
|
token,
|
|
66
|
-
url: `${this.url}?token=${token}&tenant=${this.tenant}
|
|
62
|
+
url: `${this.url}?token=${token}&tenant=${this.tenant}`
|
|
67
63
|
};
|
|
68
64
|
}
|
|
69
65
|
async getConnection() {
|
|
@@ -1 +1 @@
|
|
|
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
|
+
{"version":3,"names":["WebsocketsReadyState","defaultFactory","url","protocol","WebSocket","window","WebinyWebsocketsConnectionCache","ws","connectionCache","WebsocketsConnection","constructor","params","tenant","getToken","subscriptionManager","factory","setTenant","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.js\";\nimport { WebsocketsReadyState } from \"./types.js\";\n\ninterface ICreateUrlResult {\n token: string;\n url: string;\n}\n\nconst defaultFactory: IWebsocketsConnectionFactory = (url, protocol) => {\n return new WebSocket(url, protocol);\n};\n\ninterface IConnection {\n ws: WebSocket | null;\n}\n\n/**\n * We need to attach the websockets cache to window object, or it will be reset on every hot reload.\n */\ndeclare global {\n interface Window {\n WebinyWebsocketsConnectionCache: IConnection;\n }\n}\n\nif (!window.WebinyWebsocketsConnectionCache) {\n window.WebinyWebsocketsConnectionCache = {\n ws: null\n };\n}\n\nconst connectionCache = window.WebinyWebsocketsConnectionCache;\n\nexport interface IWebsocketsConnectionParams {\n url: string;\n tenant: string;\n getToken(): Promise<string | undefined>;\n subscriptionManager: IWebsocketsSubscriptionManager;\n protocol?: IWebsocketsConnectProtocol;\n factory?: IWebsocketsConnectionFactory;\n}\n\nexport class WebsocketsConnection implements IWebsocketsConnection {\n private readonly url: string;\n private readonly getToken: () => Promise<string | undefined>;\n private tenant: string;\n private readonly protocol: IWebsocketsConnectProtocol;\n public readonly subscriptionManager: IWebsocketsSubscriptionManager;\n private readonly factory: IWebsocketsConnectionFactory;\n\n public constructor(params: IWebsocketsConnectionParams) {\n this.url = params.url;\n this.tenant = params.tenant;\n this.getToken = params.getToken;\n this.protocol = params.protocol;\n this.subscriptionManager = params.subscriptionManager;\n this.factory = params.factory || defaultFactory;\n }\n\n public setTenant(tenant: string): void {\n this.tenant = tenant;\n }\n\n public async connect(): Promise<void> {\n await this.getConnection();\n }\n\n public async close(code: WebsocketsCloseCode, reason: string): Promise<boolean> {\n if (\n !connectionCache.ws ||\n connectionCache.ws.readyState === WebsocketsReadyState.CLOSED ||\n connectionCache.ws.readyState === WebsocketsReadyState.CLOSING\n ) {\n connectionCache.ws = undefined as unknown as null;\n\n return true;\n }\n connectionCache.ws.close(code, reason);\n\n connectionCache.ws = undefined as unknown as null;\n return true;\n }\n\n public async send<T extends IGenericData = IGenericData>(data: T): Promise<void> {\n const connection = await this.getConnection();\n if (connection.readyState !== WebsocketsReadyState.OPEN) {\n console.info(\"Websocket connection is not open, cannot send any data.\", data);\n return;\n }\n connection.send(JSON.stringify(data));\n }\n\n public isConnected(): boolean {\n return connectionCache.ws?.readyState === WebsocketsReadyState.OPEN;\n }\n\n public isClosed(): boolean {\n return connectionCache.ws?.readyState === WebsocketsReadyState.CLOSED;\n }\n\n private async createUrl(): Promise<ICreateUrlResult | null> {\n const token = await this.getToken();\n if (!token) {\n console.error(`Missing token to connect to websockets.`);\n return null;\n }\n return {\n token,\n url: `${this.url}?token=${token}&tenant=${this.tenant}`\n };\n }\n\n private async getConnection(): Promise<WebSocket> {\n if (connectionCache.ws?.readyState === WebsocketsReadyState.OPEN) {\n return connectionCache.ws;\n } else if (connectionCache.ws?.readyState === WebsocketsReadyState.CONNECTING) {\n return connectionCache.ws;\n }\n\n const result = await this.createUrl();\n if (!result) {\n throw new Error(`Missing URL for WebSocket to connect to.`);\n }\n const { url } = result;\n\n connectionCache.ws = this.factory(url, this.protocol);\n\n const start = new Date().getTime();\n\n console.log(`Websockets connecting to ${this.url}...`);\n\n connectionCache.ws.addEventListener(\"open\", event => {\n const end = new Date().getTime();\n console.log(`...connected in ${end - start}ms.`);\n return this.subscriptionManager.triggerOnOpen(event);\n });\n connectionCache.ws.addEventListener(\"close\", event => {\n return this.subscriptionManager.triggerOnClose(event);\n });\n connectionCache.ws.addEventListener(\"error\", event => {\n console.info(`Error in the Websocket connection.`, event);\n /**\n * Let's close it if possible.\n * It will reopen automatically.\n */\n if (connectionCache.ws?.close) {\n try {\n connectionCache.ws.close();\n } catch (ex) {\n console.error(ex);\n }\n }\n return this.subscriptionManager.triggerOnError(event);\n });\n\n connectionCache.ws.addEventListener(\n \"message\",\n (event: IWebsocketsManagerMessageEvent<string>) => {\n return this.subscriptionManager.triggerOnMessage(event);\n }\n );\n\n return connectionCache.ws;\n }\n}\n\nexport const createWebsocketsConnection = (\n params: IWebsocketsConnectionParams\n): IWebsocketsConnection => {\n return new WebsocketsConnection(params);\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { 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.js";
|
|
2
2
|
export declare class WebsocketsManager implements IWebsocketsManager {
|
|
3
3
|
readonly connection: IWebsocketsConnection;
|
|
4
4
|
constructor(connection: IWebsocketsConnection);
|
|
@@ -1 +1 @@
|
|
|
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
|
+
{"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.js\";\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 type { IGenericData, IWebsocketsManagerCloseEvent, IWebsocketsManagerErrorEvent, IWebsocketsManagerMessageEvent, IWebsocketsManagerOpenEvent } from "./types";
|
|
2
|
-
import type { IWebsocketsSubscription, IWebsocketsSubscriptionCallback, IWebsocketsSubscriptionManager } from "./abstractions/IWebsocketsSubscriptionManager";
|
|
1
|
+
import type { IGenericData, IWebsocketsManagerCloseEvent, IWebsocketsManagerErrorEvent, IWebsocketsManagerMessageEvent, IWebsocketsManagerOpenEvent } from "./types.js";
|
|
2
|
+
import type { IWebsocketsSubscription, IWebsocketsSubscriptionCallback, IWebsocketsSubscriptionManager } from "./abstractions/IWebsocketsSubscriptionManager.js";
|
|
3
3
|
export declare class WebsocketsSubscriptionManager implements IWebsocketsSubscriptionManager {
|
|
4
4
|
private subscriptions;
|
|
5
5
|
onOpen(cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerOpenEvent>): IWebsocketsSubscription<IWebsocketsManagerOpenEvent>;
|
|
@@ -1 +1 @@
|
|
|
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":"AAAA,SAASA,UAAU,QAAQ,
|
|
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.js\";\nimport type {\n IGenericData,\n IWebsocketsManagerCloseEvent,\n IWebsocketsManagerErrorEvent,\n IWebsocketManagerEvent,\n IWebsocketsManagerMessageEvent,\n IWebsocketsManagerOpenEvent\n} from \"./types.js\";\nimport type {\n IWebsocketsSubscriptionManagerSubscriptions,\n IWebsocketsSubscription,\n IWebsocketsSubscriptionCallback,\n IWebsocketsSubscriptionManager\n} from \"./abstractions/IWebsocketsSubscriptionManager.js\";\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":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["IWebsocketsAction.ts"],"sourcesContent":["import type { IGenericData } from \"./types\";\n\nexport interface IWebsocketActionOnResponse<R extends IGenericData = IGenericData> {\n (response: R | null): R | null;\n}\n\nexport interface IWebsocketsActionsTriggerParams<\n T extends IGenericData = IGenericData,\n R extends IGenericData = IGenericData\n> {\n data?: T;\n /**\n * Does this action expect some response from the server?\n * If defined, the response will be passed to this function.\n */\n onResponse?: IWebsocketActionOnResponse<R>;\n /**\n * How long to wait for the response?\n * In milliseconds.\n */\n timeout?: number;\n}\n\nexport interface IWebsocketsAction<\n T extends IGenericData = IGenericData,\n R extends IGenericData = IGenericData\n> {\n /**\n * Trigger the action - send data to the server via Websockets.\n * If onResponse is defined the method will wait for the response.\n * If onResponse is not defined, the method will return null immediately.\n */\n trigger(params?: IWebsocketsActionsTriggerParams<T, R>): Promise<R | null>;\n}\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["IWebsocketsAction.ts"],"sourcesContent":["import type { IGenericData } from \"./types.js\";\n\nexport interface IWebsocketActionOnResponse<R extends IGenericData = IGenericData> {\n (response: R | null): R | null;\n}\n\nexport interface IWebsocketsActionsTriggerParams<\n T extends IGenericData = IGenericData,\n R extends IGenericData = IGenericData\n> {\n data?: T;\n /**\n * Does this action expect some response from the server?\n * If defined, the response will be passed to this function.\n */\n onResponse?: IWebsocketActionOnResponse<R>;\n /**\n * How long to wait for the response?\n * In milliseconds.\n */\n timeout?: number;\n}\n\nexport interface IWebsocketsAction<\n T extends IGenericData = IGenericData,\n R extends IGenericData = IGenericData\n> {\n /**\n * Trigger the action - send data to the server via Websockets.\n * If onResponse is defined the method will wait for the response.\n * If onResponse is not defined, the method will return null immediately.\n */\n trigger(params?: IWebsocketsActionsTriggerParams<T, R>): Promise<R | null>;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { IWebsocketsManager } from "./IWebsocketsManager";
|
|
2
|
-
import type { IGenericData } from "./types";
|
|
1
|
+
import type { IWebsocketsManager } from "./IWebsocketsManager.js";
|
|
2
|
+
import type { IGenericData } from "./types.js";
|
|
3
3
|
export interface IWebsocketsActionsRunParams<T extends IGenericData = IGenericData> {
|
|
4
4
|
action: string;
|
|
5
5
|
data?: T;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["IWebsocketsActions.ts"],"sourcesContent":["import type { IWebsocketsManager } from \"./IWebsocketsManager\";\nimport type { IGenericData } from \"./types\";\n\nexport interface IWebsocketsActionsRunParams<T extends IGenericData = IGenericData> {\n action: string;\n data?: T;\n timeout?: number;\n}\n\nexport interface IWebsocketsActions {\n manager: IWebsocketsManager;\n run<T extends IGenericData = IGenericData, R extends IGenericData = IGenericData>(\n params: IWebsocketsActionsRunParams<T>\n ): Promise<R | null>;\n}\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["IWebsocketsActions.ts"],"sourcesContent":["import type { IWebsocketsManager } from \"./IWebsocketsManager.js\";\nimport type { IGenericData } from \"./types.js\";\n\nexport interface IWebsocketsActionsRunParams<T extends IGenericData = IGenericData> {\n action: string;\n data?: T;\n timeout?: number;\n}\n\nexport interface IWebsocketsActions {\n manager: IWebsocketsManager;\n run<T extends IGenericData = IGenericData, R extends IGenericData = IGenericData>(\n params: IWebsocketsActionsRunParams<T>\n ): Promise<R | null>;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { IWebsocketsSubscriptionManager } from "./IWebsocketsSubscriptionManager";
|
|
2
|
-
import type { IGenericData, WebsocketsCloseCode } from "./types";
|
|
1
|
+
import type { IWebsocketsSubscriptionManager } from "./IWebsocketsSubscriptionManager.js";
|
|
2
|
+
import type { IGenericData, WebsocketsCloseCode } from "./types.js";
|
|
3
3
|
export type IWebsocketsConnectProtocol = string | string[] | undefined;
|
|
4
4
|
export interface IWebsocketsConnectionFactory {
|
|
5
5
|
(url: string, protocol?: IWebsocketsConnectProtocol): WebSocket;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["WebsocketsReadyState"],"sources":["IWebsocketsConnection.ts"],"sourcesContent":["import type { IWebsocketsSubscriptionManager } from \"./IWebsocketsSubscriptionManager\";\nimport type { IGenericData, WebsocketsCloseCode } from \"./types\";\n\nexport type IWebsocketsConnectProtocol = string | string[] | undefined;\n\nexport interface IWebsocketsConnectionFactory {\n (url: string, protocol?: IWebsocketsConnectProtocol): WebSocket;\n}\n\nexport enum WebsocketsReadyState {\n CONNECTING = 0,\n OPEN = 1,\n CLOSING = 2,\n CLOSED = 3\n}\n\nexport interface IWebsocketsConnection {\n readonly subscriptionManager: IWebsocketsSubscriptionManager;\n\n isConnected(): boolean;\n isClosed(): boolean;\n\n connect(): Promise<void>;\n close(code: WebsocketsCloseCode, reason: string): Promise<boolean>;\n send<T extends IGenericData = IGenericData>(data: T): void;\n}\n"],"mappings":"AASA,WAAYA,oBAAoB,0BAApBA,oBAAoB;EAApBA,oBAAoB,CAApBA,oBAAoB;EAApBA,oBAAoB,CAApBA,oBAAoB;EAApBA,oBAAoB,CAApBA,oBAAoB;EAApBA,oBAAoB,CAApBA,oBAAoB;EAAA,OAApBA,oBAAoB;AAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["WebsocketsReadyState"],"sources":["IWebsocketsConnection.ts"],"sourcesContent":["import type { IWebsocketsSubscriptionManager } from \"./IWebsocketsSubscriptionManager.js\";\nimport type { IGenericData, WebsocketsCloseCode } from \"./types.js\";\n\nexport type IWebsocketsConnectProtocol = string | string[] | undefined;\n\nexport interface IWebsocketsConnectionFactory {\n (url: string, protocol?: IWebsocketsConnectProtocol): WebSocket;\n}\n\nexport enum WebsocketsReadyState {\n CONNECTING = 0,\n OPEN = 1,\n CLOSING = 2,\n CLOSED = 3\n}\n\nexport interface IWebsocketsConnection {\n readonly subscriptionManager: IWebsocketsSubscriptionManager;\n\n isConnected(): boolean;\n isClosed(): boolean;\n\n connect(): Promise<void>;\n close(code: WebsocketsCloseCode, reason: string): Promise<boolean>;\n send<T extends IGenericData = IGenericData>(data: T): void;\n}\n"],"mappings":"AASA,WAAYA,oBAAoB,0BAApBA,oBAAoB;EAApBA,oBAAoB,CAApBA,oBAAoB;EAApBA,oBAAoB,CAApBA,oBAAoB;EAApBA,oBAAoB,CAApBA,oBAAoB;EAApBA,oBAAoB,CAApBA,oBAAoB;EAAA,OAApBA,oBAAoB;AAAA","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { IWebsocketsSubscription, IWebsocketsSubscriptionCallback } from "./IWebsocketsSubscriptionManager";
|
|
2
|
-
import type { IGenericData, IWebsocketsManagerCloseEvent, IWebsocketsManagerErrorEvent, IWebsocketsManagerMessageEvent, IWebsocketsManagerOpenEvent, WebsocketsCloseCode } from "./types";
|
|
1
|
+
import type { IWebsocketsSubscription, IWebsocketsSubscriptionCallback } from "./IWebsocketsSubscriptionManager.js";
|
|
2
|
+
import type { IGenericData, IWebsocketsManagerCloseEvent, IWebsocketsManagerErrorEvent, IWebsocketsManagerMessageEvent, IWebsocketsManagerOpenEvent, WebsocketsCloseCode } from "./types.js";
|
|
3
3
|
export interface IWebsocketManagerSendData<T extends IGenericData = IGenericData> extends IGenericData {
|
|
4
4
|
/**
|
|
5
5
|
* A user token, which will identify the user sending the message.
|
|
@@ -9,10 +9,6 @@ export interface IWebsocketManagerSendData<T extends IGenericData = IGenericData
|
|
|
9
9
|
* Current tenant.
|
|
10
10
|
*/
|
|
11
11
|
tenant: string;
|
|
12
|
-
/**
|
|
13
|
-
* Current locale.
|
|
14
|
-
*/
|
|
15
|
-
locale: string;
|
|
16
12
|
/**
|
|
17
13
|
* A unique message ID - generated on the UI side.
|
|
18
14
|
* TODO implement waiting for the message response.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["IWebsocketsManager.ts"],"sourcesContent":["import type {\n IWebsocketsSubscription,\n IWebsocketsSubscriptionCallback\n} from \"./IWebsocketsSubscriptionManager\";\nimport type {\n IGenericData,\n IWebsocketsManagerCloseEvent,\n IWebsocketsManagerErrorEvent,\n IWebsocketsManagerMessageEvent,\n IWebsocketsManagerOpenEvent,\n WebsocketsCloseCode\n} from \"./types\";\n\nexport interface IWebsocketManagerSendData<T extends IGenericData = IGenericData>\n extends IGenericData {\n /**\n * A user token, which will identify the user sending the message.\n */\n token: string;\n /**\n * Current tenant.\n */\n tenant: string;\n /**\n *
|
|
1
|
+
{"version":3,"names":[],"sources":["IWebsocketsManager.ts"],"sourcesContent":["import type {\n IWebsocketsSubscription,\n IWebsocketsSubscriptionCallback\n} from \"./IWebsocketsSubscriptionManager.js\";\nimport type {\n IGenericData,\n IWebsocketsManagerCloseEvent,\n IWebsocketsManagerErrorEvent,\n IWebsocketsManagerMessageEvent,\n IWebsocketsManagerOpenEvent,\n WebsocketsCloseCode\n} from \"./types.js\";\n\nexport interface IWebsocketManagerSendData<T extends IGenericData = IGenericData>\n extends IGenericData {\n /**\n * A user token, which will identify the user sending the message.\n */\n token: string;\n /**\n * Current tenant.\n */\n tenant: string;\n /**\n * A unique message ID - generated on the UI side.\n * TODO implement waiting for the message response.\n */\n messageId?: string;\n /**\n * Action being fired on the API side.\n */\n action: string;\n /**\n * Data being sent to the API. Must be an object.\n */\n data: T;\n}\n\nexport interface IWebsocketsManager {\n isConnected(): boolean;\n isClosed(): boolean;\n\n connect(): Promise<void>;\n close(code: WebsocketsCloseCode, reason: string): Promise<boolean>;\n send<T extends IWebsocketManagerSendData = IWebsocketManagerSendData>(data: T): void;\n\n onOpen(\n cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerOpenEvent>\n ): IWebsocketsSubscription<IWebsocketsManagerOpenEvent>;\n\n onClose(\n cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerCloseEvent>\n ): IWebsocketsSubscription<IWebsocketsManagerCloseEvent>;\n\n onError(\n cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerErrorEvent>\n ): IWebsocketsSubscription<IWebsocketsManagerErrorEvent>;\n\n onMessage<T extends IGenericData = IGenericData>(\n cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerMessageEvent<T>>\n ): IWebsocketsSubscription<IWebsocketsManagerMessageEvent<T>>;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { GenericRecord } from "@webiny/app/types";
|
|
2
|
-
import type { IGenericData, IWebsocketsManagerCloseEvent, IWebsocketsManagerErrorEvent, IWebsocketsManagerMessageEvent, IWebsocketsManagerOpenEvent } from "./types";
|
|
1
|
+
import type { GenericRecord } from "@webiny/app/types.js";
|
|
2
|
+
import type { IGenericData, IWebsocketsManagerCloseEvent, IWebsocketsManagerErrorEvent, IWebsocketsManagerMessageEvent, IWebsocketsManagerOpenEvent } from "./types.js";
|
|
3
3
|
export type IWebsocketManagerEvent = "open" | "close" | "error" | "message";
|
|
4
4
|
export interface IWebsocketsSubscriptionCallback<T> {
|
|
5
5
|
(data: T): Promise<void> | void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["IWebsocketsSubscriptionManager.ts"],"sourcesContent":["import type { GenericRecord } from \"@webiny/app/types\";\nimport type {\n IGenericData,\n IWebsocketsManagerCloseEvent,\n IWebsocketsManagerErrorEvent,\n IWebsocketsManagerMessageEvent,\n IWebsocketsManagerOpenEvent\n} from \"./types\";\n\nexport type IWebsocketManagerEvent = \"open\" | \"close\" | \"error\" | \"message\";\n\nexport interface IWebsocketsSubscriptionCallback<T> {\n (data: T): Promise<void> | void;\n}\n\nexport interface IWebsocketsSubscription<T> {\n cb: IWebsocketsSubscriptionCallback<T>;\n id: string;\n /**\n * Remove the subscription on the message.\n */\n off: () => void;\n}\n\nexport interface IWebsocketsSubscriptionManagerSubscriptions<\n T extends IGenericData = IGenericData\n> {\n open: GenericRecord<string, IWebsocketsSubscription<IWebsocketsManagerOpenEvent>>;\n close: GenericRecord<string, IWebsocketsSubscription<IWebsocketsManagerCloseEvent>>;\n error: GenericRecord<string, IWebsocketsSubscription<IWebsocketsManagerErrorEvent>>;\n message: GenericRecord<string, IWebsocketsSubscription<T>>;\n}\n\nexport interface IWebsocketsSubscriptionManager {\n onOpen(\n cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerOpenEvent>\n ): IWebsocketsSubscription<IWebsocketsManagerOpenEvent>;\n\n onClose(\n cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerCloseEvent>\n ): IWebsocketsSubscription<IWebsocketsManagerCloseEvent>;\n\n onError(\n cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerErrorEvent>\n ): IWebsocketsSubscription<IWebsocketsManagerErrorEvent>;\n\n onMessage<T extends IGenericData = IGenericData>(\n cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerMessageEvent<T>>\n ): IWebsocketsSubscription<IWebsocketsManagerMessageEvent<T>>;\n\n triggerOnOpen(event: IWebsocketsManagerOpenEvent): Promise<void>;\n triggerOnClose(event: IWebsocketsManagerCloseEvent): Promise<void>;\n triggerOnError(event: IWebsocketsManagerErrorEvent): Promise<void>;\n triggerOnMessage(event: IWebsocketsManagerMessageEvent<string>): Promise<void>;\n}\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["IWebsocketsSubscriptionManager.ts"],"sourcesContent":["import type { GenericRecord } from \"@webiny/app/types.js\";\nimport type {\n IGenericData,\n IWebsocketsManagerCloseEvent,\n IWebsocketsManagerErrorEvent,\n IWebsocketsManagerMessageEvent,\n IWebsocketsManagerOpenEvent\n} from \"./types.js\";\n\nexport type IWebsocketManagerEvent = \"open\" | \"close\" | \"error\" | \"message\";\n\nexport interface IWebsocketsSubscriptionCallback<T> {\n (data: T): Promise<void> | void;\n}\n\nexport interface IWebsocketsSubscription<T> {\n cb: IWebsocketsSubscriptionCallback<T>;\n id: string;\n /**\n * Remove the subscription on the message.\n */\n off: () => void;\n}\n\nexport interface IWebsocketsSubscriptionManagerSubscriptions<\n T extends IGenericData = IGenericData\n> {\n open: GenericRecord<string, IWebsocketsSubscription<IWebsocketsManagerOpenEvent>>;\n close: GenericRecord<string, IWebsocketsSubscription<IWebsocketsManagerCloseEvent>>;\n error: GenericRecord<string, IWebsocketsSubscription<IWebsocketsManagerErrorEvent>>;\n message: GenericRecord<string, IWebsocketsSubscription<T>>;\n}\n\nexport interface IWebsocketsSubscriptionManager {\n onOpen(\n cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerOpenEvent>\n ): IWebsocketsSubscription<IWebsocketsManagerOpenEvent>;\n\n onClose(\n cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerCloseEvent>\n ): IWebsocketsSubscription<IWebsocketsManagerCloseEvent>;\n\n onError(\n cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerErrorEvent>\n ): IWebsocketsSubscription<IWebsocketsManagerErrorEvent>;\n\n onMessage<T extends IGenericData = IGenericData>(\n cb: IWebsocketsSubscriptionCallback<IWebsocketsManagerMessageEvent<T>>\n ): IWebsocketsSubscription<IWebsocketsManagerMessageEvent<T>>;\n\n triggerOnOpen(event: IWebsocketsManagerOpenEvent): Promise<void>;\n triggerOnClose(event: IWebsocketsManagerCloseEvent): Promise<void>;\n triggerOnError(event: IWebsocketsManagerErrorEvent): Promise<void>;\n triggerOnMessage(event: IWebsocketsManagerMessageEvent<string>): Promise<void>;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { GenericRecord } from "@webiny/app/types";
|
|
1
|
+
import type { GenericRecord } from "@webiny/app/types.js";
|
|
2
2
|
export type IWebsocketsManagerMessageEvent<T = IGenericData> = MessageEvent<T>;
|
|
3
3
|
export type IWebsocketsManagerCloseEvent = CloseEvent;
|
|
4
4
|
export type IWebsocketsManagerOpenEvent = Event;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["WebsocketsCloseCode"],"sources":["types.ts"],"sourcesContent":["import type { GenericRecord } from \"@webiny/app/types\";\n\nexport type IWebsocketsManagerMessageEvent<T = IGenericData> = MessageEvent<T>;\nexport type IWebsocketsManagerCloseEvent = CloseEvent;\nexport type IWebsocketsManagerOpenEvent = Event;\nexport type IWebsocketsManagerErrorEvent = Event;\n\nexport type IGenericData = GenericRecord;\n\nexport enum WebsocketsCloseCode {\n NORMAL = 1000,\n GOING_AWAY = 1001,\n PROTOCOL_ERROR = 1002,\n CANNOT_ACCEPT = 1003,\n RESERVED = 1004,\n NO_STATUS = 1005,\n ABNORMAL = 1006,\n INVALID_DATA = 1007,\n POLICY_VIOLATION = 1008,\n TOO_BIG = 1009,\n MISSING_EXTENSION = 1010,\n SERVER_ERROR = 1011,\n SERVICE_RESTART = 1012,\n TRY_AGAIN_LATER = 1013,\n BAD_GATEWAY = 1014,\n TLS_HANDSHAKE = 1015\n}\n"],"mappings":"AASA,WAAYA,mBAAmB,0BAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAA,OAAnBA,mBAAmB;AAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["WebsocketsCloseCode"],"sources":["types.ts"],"sourcesContent":["import type { GenericRecord } from \"@webiny/app/types.js\";\n\nexport type IWebsocketsManagerMessageEvent<T = IGenericData> = MessageEvent<T>;\nexport type IWebsocketsManagerCloseEvent = CloseEvent;\nexport type IWebsocketsManagerOpenEvent = Event;\nexport type IWebsocketsManagerErrorEvent = Event;\n\nexport type IGenericData = GenericRecord;\n\nexport enum WebsocketsCloseCode {\n NORMAL = 1000,\n GOING_AWAY = 1001,\n PROTOCOL_ERROR = 1002,\n CANNOT_ACCEPT = 1003,\n RESERVED = 1004,\n NO_STATUS = 1005,\n ABNORMAL = 1006,\n INVALID_DATA = 1007,\n POLICY_VIOLATION = 1008,\n TOO_BIG = 1009,\n MISSING_EXTENSION = 1010,\n SERVER_ERROR = 1011,\n SERVICE_RESTART = 1012,\n TRY_AGAIN_LATER = 1013,\n BAD_GATEWAY = 1014,\n TLS_HANDSHAKE = 1015\n}\n"],"mappings":"AASA,WAAYA,mBAAmB,0BAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAnBA,mBAAmB,CAAnBA,mBAAmB;EAAA,OAAnBA,mBAAmB;AAAA","ignoreList":[]}
|
package/domain/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from "./WebsocketsAction";
|
|
2
|
-
export * from "./WebsocketsActions";
|
|
3
|
-
export * from "./WebsocketsConnection";
|
|
4
|
-
export * from "./WebsocketsManager";
|
|
5
|
-
export * from "./WebsocketsSubscriptionManager";
|
|
1
|
+
export * from "./WebsocketsAction.js";
|
|
2
|
+
export * from "./WebsocketsActions.js";
|
|
3
|
+
export * from "./WebsocketsConnection.js";
|
|
4
|
+
export * from "./WebsocketsManager.js";
|
|
5
|
+
export * from "./WebsocketsSubscriptionManager.js";
|
package/domain/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export * from "./WebsocketsAction";
|
|
2
|
-
export * from "./WebsocketsActions";
|
|
3
|
-
export * from "./WebsocketsConnection";
|
|
4
|
-
export * from "./WebsocketsManager";
|
|
5
|
-
export * from "./WebsocketsSubscriptionManager";
|
|
1
|
+
export * from "./WebsocketsAction.js";
|
|
2
|
+
export * from "./WebsocketsActions.js";
|
|
3
|
+
export * from "./WebsocketsConnection.js";
|
|
4
|
+
export * from "./WebsocketsManager.js";
|
|
5
|
+
export * from "./WebsocketsSubscriptionManager.js";
|
|
6
6
|
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
package/domain/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./WebsocketsAction\";\nexport * from \"./WebsocketsActions\";\nexport * from \"./WebsocketsConnection\";\nexport * from \"./WebsocketsManager\";\nexport * from \"./WebsocketsSubscriptionManager\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./WebsocketsAction.js\";\nexport * from \"./WebsocketsActions.js\";\nexport * from \"./WebsocketsConnection.js\";\nexport * from \"./WebsocketsManager.js\";\nexport * from \"./WebsocketsSubscriptionManager.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA","ignoreList":[]}
|
package/domain/types.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export * from "./abstractions/IWebsocketsAction";
|
|
2
|
-
export * from "./abstractions/IWebsocketsActions";
|
|
3
|
-
export * from "./abstractions/IWebsocketsConnection";
|
|
4
|
-
export * from "./abstractions/IWebsocketsManager";
|
|
5
|
-
export * from "./abstractions/IWebsocketsSubscriptionManager";
|
|
6
|
-
export * from "./abstractions/types";
|
|
1
|
+
export type * from "./abstractions/IWebsocketsAction.js";
|
|
2
|
+
export type * from "./abstractions/IWebsocketsActions.js";
|
|
3
|
+
export * from "./abstractions/IWebsocketsConnection.js";
|
|
4
|
+
export type * from "./abstractions/IWebsocketsManager.js";
|
|
5
|
+
export type * from "./abstractions/IWebsocketsSubscriptionManager.js";
|
|
6
|
+
export * from "./abstractions/types.js";
|
package/domain/types.js
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
export * from "./abstractions/
|
|
2
|
-
export * from "./abstractions/
|
|
3
|
-
export * from "./abstractions/IWebsocketsConnection";
|
|
4
|
-
export * from "./abstractions/IWebsocketsManager";
|
|
5
|
-
export * from "./abstractions/IWebsocketsSubscriptionManager";
|
|
6
|
-
export * from "./abstractions/types";
|
|
1
|
+
export * from "./abstractions/IWebsocketsConnection.js";
|
|
2
|
+
export * from "./abstractions/types.js";
|
|
7
3
|
|
|
8
4
|
//# sourceMappingURL=types.js.map
|
package/domain/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["export * from \"./abstractions/IWebsocketsAction\";\nexport * from \"./abstractions/IWebsocketsActions\";\nexport * from \"./abstractions/IWebsocketsConnection\";\nexport * from \"./abstractions/IWebsocketsManager\";\nexport * from \"./abstractions/IWebsocketsSubscriptionManager\";\n\nexport * from \"./abstractions/types\";\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["export type * from \"./abstractions/IWebsocketsAction.js\";\nexport type * from \"./abstractions/IWebsocketsActions.js\";\nexport * from \"./abstractions/IWebsocketsConnection.js\";\nexport type * from \"./abstractions/IWebsocketsManager.js\";\nexport type * from \"./abstractions/IWebsocketsSubscriptionManager.js\";\n\nexport * from \"./abstractions/types.js\";\n"],"mappings":"AAEA;AAIA","ignoreList":[]}
|
package/hooks/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./useWebsockets";
|
|
1
|
+
export * from "./useWebsockets.js";
|
package/hooks/index.js
CHANGED
package/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./useWebsockets\";\n"],"mappings":"AAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./useWebsockets.js\";\n"],"mappings":"AAAA","ignoreList":[]}
|
package/hooks/useWebsockets.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { IWebsocketsContext } from "../types";
|
|
1
|
+
import type { IWebsocketsContext } from "../types.js";
|
|
2
2
|
export declare const useWebsockets: () => IWebsocketsContext;
|
package/hooks/useWebsockets.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useContext } from "react";
|
|
2
|
-
import { WebsocketsContext } from "../WebsocketsContextProvider";
|
|
2
|
+
import { WebsocketsContext } from "../WebsocketsContextProvider.js";
|
|
3
3
|
export const useWebsockets = () => {
|
|
4
4
|
const context = useContext(WebsocketsContext);
|
|
5
5
|
if (!context) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useContext","WebsocketsContext","useWebsockets","context","Error"],"sources":["useWebsockets.tsx"],"sourcesContent":["import { useContext } from \"react\";\nimport { WebsocketsContext } from \"~/WebsocketsContextProvider\";\nimport type { IWebsocketsContext } from \"~/types\";\n\nexport const useWebsockets = (): IWebsocketsContext => {\n const context = useContext(WebsocketsContext);\n if (!context) {\n throw new Error(\"useWebsockets must be used within a SocketsProvider\");\n }\n return context;\n};\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,OAAO;AAClC,SAASC,iBAAiB;AAG1B,OAAO,MAAMC,aAAa,GAAGA,CAAA,KAA0B;EACnD,MAAMC,OAAO,GAAGH,UAAU,CAACC,iBAAiB,CAAC;EAC7C,IAAI,CAACE,OAAO,EAAE;IACV,MAAM,IAAIC,KAAK,CAAC,qDAAqD,CAAC;EAC1E;EACA,OAAOD,OAAO;AAClB,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["useContext","WebsocketsContext","useWebsockets","context","Error"],"sources":["useWebsockets.tsx"],"sourcesContent":["import { useContext } from \"react\";\nimport { WebsocketsContext } from \"~/WebsocketsContextProvider.js\";\nimport type { IWebsocketsContext } from \"~/types.js\";\n\nexport const useWebsockets = (): IWebsocketsContext => {\n const context = useContext(WebsocketsContext);\n if (!context) {\n throw new Error(\"useWebsockets must be used within a SocketsProvider\");\n }\n return context;\n};\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,OAAO;AAClC,SAASC,iBAAiB;AAG1B,OAAO,MAAMC,aAAa,GAAGA,CAAA,KAA0B;EACnD,MAAMC,OAAO,GAAGH,UAAU,CAACC,iBAAiB,CAAC;EAC7C,IAAI,CAACE,OAAO,EAAE;IACV,MAAM,IAAIC,KAAK,CAAC,qDAAqD,CAAC;EAC1E;EACA,OAAOD,OAAO;AAClB,CAAC","ignoreList":[]}
|
package/index.d.ts
CHANGED
|
@@ -3,5 +3,5 @@ export interface WebsocketsProviderProps {
|
|
|
3
3
|
children: React.ReactNode;
|
|
4
4
|
}
|
|
5
5
|
export declare const Websockets: React.MemoExoticComponent<() => React.JSX.Element>;
|
|
6
|
-
export * from "./types";
|
|
7
|
-
export * from "./hooks";
|
|
6
|
+
export * from "./types.js";
|
|
7
|
+
export * from "./hooks/index.js";
|
package/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { Provider } from "@webiny/app";
|
|
3
|
-
import { WebsocketsContextProvider } from "./WebsocketsContextProvider";
|
|
3
|
+
import { WebsocketsContextProvider } from "./WebsocketsContextProvider.js";
|
|
4
4
|
const WebsocketsHoc = Component => {
|
|
5
5
|
return function WebsocketsProvider(props) {
|
|
6
6
|
return /*#__PURE__*/React.createElement(WebsocketsContextProvider, null, /*#__PURE__*/React.createElement(Component, props));
|
|
@@ -12,7 +12,7 @@ const WebsocketsExtension = () => {
|
|
|
12
12
|
}));
|
|
13
13
|
};
|
|
14
14
|
export const Websockets = /*#__PURE__*/React.memo(WebsocketsExtension);
|
|
15
|
-
export * from "./types";
|
|
16
|
-
export * from "./hooks";
|
|
15
|
+
export * from "./types.js";
|
|
16
|
+
export * from "./hooks/index.js";
|
|
17
17
|
|
|
18
18
|
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Provider","WebsocketsContextProvider","WebsocketsHoc","Component","WebsocketsProvider","props","createElement","WebsocketsExtension","Fragment","hoc","Websockets","memo"],"sources":["index.tsx"],"sourcesContent":["import React from \"react\";\nimport { Provider } from \"@webiny/app\";\nimport { WebsocketsContextProvider } from \"~/WebsocketsContextProvider\";\n\nexport interface WebsocketsProviderProps {\n children: React.ReactNode;\n}\n\nconst WebsocketsHoc = (Component: React.ComponentType<React.PropsWithChildren>) => {\n return function WebsocketsProvider(props: WebsocketsProviderProps) {\n return (\n <WebsocketsContextProvider>\n <Component {...props} />\n </WebsocketsContextProvider>\n );\n };\n};\n\nconst WebsocketsExtension = () => {\n return (\n <>\n <Provider hoc={WebsocketsHoc} />\n </>\n );\n};\n\nexport const Websockets = React.memo(WebsocketsExtension);\n\nexport * from \"./types\";\nexport * from \"./hooks\";\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,yBAAyB;AAMlC,MAAMC,aAAa,GAAIC,SAAuD,IAAK;EAC/E,OAAO,SAASC,kBAAkBA,CAACC,KAA8B,EAAE;IAC/D,oBACIN,KAAA,CAAAO,aAAA,CAACL,yBAAyB,qBACtBF,KAAA,CAAAO,aAAA,CAACH,SAAS,EAAKE,KAAQ,CACA,CAAC;EAEpC,CAAC;AACL,CAAC;AAED,MAAME,mBAAmB,GAAGA,CAAA,KAAM;EAC9B,oBACIR,KAAA,CAAAO,aAAA,CAAAP,KAAA,CAAAS,QAAA,qBACIT,KAAA,CAAAO,aAAA,CAACN,QAAQ;IAACS,GAAG,EAAEP;EAAc,CAAE,CACjC,CAAC;AAEX,CAAC;AAED,OAAO,MAAMQ,UAAU,gBAAGX,KAAK,CAACY,IAAI,CAACJ,mBAAmB,CAAC;AAEzD;AACA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","Provider","WebsocketsContextProvider","WebsocketsHoc","Component","WebsocketsProvider","props","createElement","WebsocketsExtension","Fragment","hoc","Websockets","memo"],"sources":["index.tsx"],"sourcesContent":["import React from \"react\";\nimport { Provider } from \"@webiny/app\";\nimport { WebsocketsContextProvider } from \"~/WebsocketsContextProvider.js\";\n\nexport interface WebsocketsProviderProps {\n children: React.ReactNode;\n}\n\nconst WebsocketsHoc = (Component: React.ComponentType<React.PropsWithChildren>) => {\n return function WebsocketsProvider(props: WebsocketsProviderProps) {\n return (\n <WebsocketsContextProvider>\n <Component {...props} />\n </WebsocketsContextProvider>\n );\n };\n};\n\nconst WebsocketsExtension = () => {\n return (\n <>\n <Provider hoc={WebsocketsHoc} />\n </>\n );\n};\n\nexport const Websockets = React.memo(WebsocketsExtension);\n\nexport * from \"./types.js\";\nexport * from \"./hooks/index.js\";\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,yBAAyB;AAMlC,MAAMC,aAAa,GAAIC,SAAuD,IAAK;EAC/E,OAAO,SAASC,kBAAkBA,CAACC,KAA8B,EAAE;IAC/D,oBACIN,KAAA,CAAAO,aAAA,CAACL,yBAAyB,qBACtBF,KAAA,CAAAO,aAAA,CAACH,SAAS,EAAKE,KAAQ,CACA,CAAC;EAEpC,CAAC;AACL,CAAC;AAED,MAAME,mBAAmB,GAAGA,CAAA,KAAM;EAC9B,oBACIR,KAAA,CAAAO,aAAA,CAAAP,KAAA,CAAAS,QAAA,qBACIT,KAAA,CAAAO,aAAA,CAACN,QAAQ;IAACS,GAAG,EAAEP;EAAc,CAAE,CACjC,CAAC;AAEX,CAAC;AAED,OAAO,MAAMQ,UAAU,gBAAGX,KAAK,CAACY,IAAI,CAACJ,mBAAmB,CAAC;AAEzD;AACA","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-websockets",
|
|
3
|
-
"version": "6.0.0-
|
|
3
|
+
"version": "6.0.0-rc.0",
|
|
4
|
+
"type": "module",
|
|
4
5
|
"main": "index.js",
|
|
5
6
|
"repository": {
|
|
6
7
|
"type": "git",
|
|
@@ -13,26 +14,20 @@
|
|
|
13
14
|
],
|
|
14
15
|
"license": "MIT",
|
|
15
16
|
"dependencies": {
|
|
16
|
-
"@webiny/app": "6.0.0-
|
|
17
|
-
"@webiny/app-
|
|
18
|
-
"@webiny/
|
|
19
|
-
"@webiny/app-tenancy": "6.0.0-alpha.5",
|
|
20
|
-
"@webiny/utils": "6.0.0-alpha.5",
|
|
17
|
+
"@webiny/app": "6.0.0-rc.0",
|
|
18
|
+
"@webiny/app-admin": "6.0.0-rc.0",
|
|
19
|
+
"@webiny/utils": "6.0.0-rc.0",
|
|
21
20
|
"react": "18.2.0",
|
|
22
21
|
"react-dom": "18.2.0"
|
|
23
22
|
},
|
|
24
23
|
"devDependencies": {
|
|
25
|
-
"@webiny/
|
|
26
|
-
"rimraf": "6.
|
|
27
|
-
"typescript": "5.
|
|
24
|
+
"@webiny/build-tools": "6.0.0-rc.0",
|
|
25
|
+
"rimraf": "6.1.3",
|
|
26
|
+
"typescript": "5.9.3"
|
|
28
27
|
},
|
|
29
28
|
"publishConfig": {
|
|
30
29
|
"access": "public",
|
|
31
30
|
"directory": "dist"
|
|
32
31
|
},
|
|
33
|
-
"
|
|
34
|
-
"build": "node ../cli/bin.js run build",
|
|
35
|
-
"watch": "node ../cli/bin.js run watch"
|
|
36
|
-
},
|
|
37
|
-
"gitHead": "b7e120541b093e91f214904a9f13e4c2c4640978"
|
|
32
|
+
"gitHead": "0f2aa699f4642e550ab62c96fcd050e8d02345c9"
|
|
38
33
|
}
|
package/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { IGenericData, IWebsocketsAction, IWebsocketsManagerCloseEvent, IWebsocketsManagerErrorEvent, IWebsocketsManagerMessageEvent, IWebsocketsSubscription } from "./domain/types";
|
|
2
|
-
export * from "./domain/types";
|
|
1
|
+
import type { IGenericData, IWebsocketsAction, IWebsocketsManagerCloseEvent, IWebsocketsManagerErrorEvent, IWebsocketsManagerMessageEvent, IWebsocketsSubscription } from "./domain/types.js";
|
|
2
|
+
export * from "./domain/types.js";
|
|
3
3
|
export interface IWebsocketsContextSendCallable {
|
|
4
4
|
<T extends IGenericData = IGenericData>(action: string, data?: T, timeout?: number): void;
|
|
5
5
|
}
|
package/types.js
CHANGED
package/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type {\n IGenericData,\n IWebsocketsAction,\n IWebsocketsManagerCloseEvent,\n IWebsocketsManagerErrorEvent,\n IWebsocketsManagerMessageEvent,\n IWebsocketsSubscription\n} from \"~/domain/types\";\n\nexport * from \"./domain/types\";\n\nexport interface IWebsocketsContextSendCallable {\n <T extends IGenericData = IGenericData>(action: string, data?: T, timeout?: number): void;\n}\n\nexport interface IWebsocketsContextCreateActionCallable<\n T extends IGenericData = IGenericData,\n R extends IGenericData = IGenericData\n> {\n (name: string): IWebsocketsAction<T, R>;\n}\n\nexport interface ISocketsContextOnMessageCallable {\n <T extends IncomingGenericData = IncomingGenericData>(\n action: string,\n cb: (data: T) => void\n ): IWebsocketsSubscription<IWebsocketsManagerMessageEvent<T>>;\n}\n\nexport interface ISocketsContextOnErrorCallable {\n (\n cb: (data: IWebsocketsManagerErrorEvent) => void\n ): IWebsocketsSubscription<IWebsocketsManagerErrorEvent>;\n}\n\nexport interface ISocketsContextOnCloseCallable {\n (\n cb: (data: IWebsocketsManagerCloseEvent) => void\n ): IWebsocketsSubscription<IWebsocketsManagerCloseEvent>;\n}\n\nexport interface IWebsocketsContext {\n send: IWebsocketsContextSendCallable;\n createAction: IWebsocketsContextCreateActionCallable;\n onMessage: ISocketsContextOnMessageCallable;\n onError: ISocketsContextOnErrorCallable;\n onClose: ISocketsContextOnCloseCallable;\n}\n\nexport interface IncomingGenericData extends IGenericData {\n action: string;\n}\n"],"mappings":"AASA;
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type {\n IGenericData,\n IWebsocketsAction,\n IWebsocketsManagerCloseEvent,\n IWebsocketsManagerErrorEvent,\n IWebsocketsManagerMessageEvent,\n IWebsocketsSubscription\n} from \"~/domain/types.js\";\n\nexport * from \"./domain/types.js\";\n\nexport interface IWebsocketsContextSendCallable {\n <T extends IGenericData = IGenericData>(action: string, data?: T, timeout?: number): void;\n}\n\nexport interface IWebsocketsContextCreateActionCallable<\n T extends IGenericData = IGenericData,\n R extends IGenericData = IGenericData\n> {\n (name: string): IWebsocketsAction<T, R>;\n}\n\nexport interface ISocketsContextOnMessageCallable {\n <T extends IncomingGenericData = IncomingGenericData>(\n action: string,\n cb: (data: T) => void\n ): IWebsocketsSubscription<IWebsocketsManagerMessageEvent<T>>;\n}\n\nexport interface ISocketsContextOnErrorCallable {\n (\n cb: (data: IWebsocketsManagerErrorEvent) => void\n ): IWebsocketsSubscription<IWebsocketsManagerErrorEvent>;\n}\n\nexport interface ISocketsContextOnCloseCallable {\n (\n cb: (data: IWebsocketsManagerCloseEvent) => void\n ): IWebsocketsSubscription<IWebsocketsManagerCloseEvent>;\n}\n\nexport interface IWebsocketsContext {\n send: IWebsocketsContextSendCallable;\n createAction: IWebsocketsContextCreateActionCallable;\n onMessage: ISocketsContextOnMessageCallable;\n onError: ISocketsContextOnErrorCallable;\n onClose: ISocketsContextOnCloseCallable;\n}\n\nexport interface IncomingGenericData extends IGenericData {\n action: string;\n}\n"],"mappings":"AASA;AAAkC","ignoreList":[]}
|