@webiny/app-websockets 6.6.0-alpha.3 → 6.6.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"WebsocketsContextProvider.js","sources":["../src/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 { EventPublisherFeature } from \"@webiny/app/features/eventPublisher/feature.js\";\nimport { EnvConfigFeature } from \"@webiny/app/features/envConfig/feature.js\";\nimport { WebsocketEvent } from \"./events/WebsocketEvent.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 type { IWebsocketsSubscription } from \"./domain/abstractions/IWebsocketsSubscriptionManager.js\";\n\n// No-op subscription returned when WS isn't connected (no URL configured).\nconst noopSubscription = (): IWebsocketsSubscription<any> => ({\n cb: () => undefined,\n id: \"\",\n off: () => undefined\n});\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 const { eventPublisher } = useFeature(EventPublisherFeature);\n\n // The WebSocket URL is resolved once, at the admin composition root, into EnvConfig (the only\n // place that reads process.env). Empty string = not configured → real-time updates are disabled.\n const envConfig = useFeature(EnvConfigFeature);\n const configuredWsUrl = envConfig.get(\"websocketUrl\");\n const wsUrl = configuredWsUrl ? configuredWsUrl : undefined;\n\n const socketsRef = useRef<IWebsocketsManager | null>(null);\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 = wsUrl;\n\n if (!url) {\n // No WS URL configured (e.g. self-hosted server hosting type) — skip WS, run app anyway.\n console.warn(\"WebSocket URL not configured; real-time updates are disabled.\");\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, wsUrl]);\n\n /**\n * Bridge: subscribe once to ALL incoming websocket messages and re-publish each one through\n * the EventPublisher as a `WebsocketEvent`. Feature code registers `WebsocketEventHandler`\n * handlers instead of subscribing to the websocket service directly.\n */\n useEffect(() => {\n if (!socketsRef.current) {\n return;\n }\n const subscription = socketsRef.current.onMessage<IncomingGenericData>(async event => {\n await eventPublisher.publish(new WebsocketEvent(event.data));\n });\n return () => {\n subscription.off();\n };\n }, [current.tenant, eventPublisher]);\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 // No-op subscription when WS isn't connected (e.g. no URL configured).\n if (!socketsRef.current) {\n return noopSubscription();\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 if (!socketsRef.current) {\n return noopSubscription();\n }\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 if (!socketsRef.current) {\n return noopSubscription();\n }\n return socketsRef.current.onClose(data => {\n return cb(data);\n });\n },\n [socketsRef.current]\n );\n\n // Only block the app on the WS connection when WS is actually configured. Without a URL\n // (e.g. the self-hosted server hosting type), skip WS and render the app anyway.\n if (wsUrl && !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"],"names":["noopSubscription","undefined","WebsocketsContext","React","WebsocketsContextProvider","props","tenant","useTenantContext","authenticationContext","useFeature","AuthenticationContextFeature","eventPublisher","EventPublisherFeature","envConfig","EnvConfigFeature","configuredWsUrl","wsUrl","socketsRef","useRef","current","setCurrent","useState","getToken","useCallback","subscriptionManager","useMemo","manager","createWebsocketsSubscriptionManager","currentIteration","event","WebsocketsCloseCode","setTimeout","console","useEffect","abortController","AbortController","window","CloseEvent","token","url","createWebsocketsManager","createWebsocketsConnection","subscription","WebsocketEvent","websocketActions","createWebsocketsActions","send","action","data","timeout","createAction","name","createWebsocketsAction","onMessage","cb","onError","onClose","value"],"mappings":"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"}
1
+ {"version":3,"file":"WebsocketsContextProvider.js","sources":["../src/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 { EventPublisherFeature } from \"@webiny/app/features/eventPublisher/feature.js\";\nimport { EnvConfigFeature } from \"@webiny/app/features/envConfig/feature.js\";\nimport { WebsocketEvent } from \"./events/WebsocketEvent.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 type { IWebsocketsSubscription } from \"./domain/abstractions/IWebsocketsSubscriptionManager.js\";\n\n// No-op subscription returned when WS isn't connected (no URL configured).\nconst noopSubscription = (): IWebsocketsSubscription<any> => ({\n cb: () => undefined,\n id: \"\",\n off: () => undefined\n});\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 const { eventPublisher } = useFeature(EventPublisherFeature);\n\n // The WebSocket URL is resolved once, at the admin composition root, into EnvConfig (the only\n // place that reads process.env). Empty string = not configured → real-time updates are disabled.\n const envConfig = useFeature(EnvConfigFeature);\n const configuredWsUrl = envConfig.get(\"websocketUrl\");\n const wsUrl = configuredWsUrl ? configuredWsUrl : undefined;\n\n const socketsRef = useRef<IWebsocketsManager | null>(null);\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 = wsUrl;\n\n if (!url) {\n // No WS URL configured (e.g. the standalone hosting type) — skip WS, run app anyway.\n console.warn(\"WebSocket URL not configured; real-time updates are disabled.\");\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, wsUrl]);\n\n /**\n * Bridge: subscribe once to ALL incoming websocket messages and re-publish each one through\n * the EventPublisher as a `WebsocketEvent`. Feature code registers `WebsocketEventHandler`\n * handlers instead of subscribing to the websocket service directly.\n */\n useEffect(() => {\n if (!socketsRef.current) {\n return;\n }\n const subscription = socketsRef.current.onMessage<IncomingGenericData>(async event => {\n await eventPublisher.publish(new WebsocketEvent(event.data));\n });\n return () => {\n subscription.off();\n };\n }, [current.tenant, eventPublisher]);\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 // No-op subscription when WS isn't connected (e.g. no URL configured).\n if (!socketsRef.current) {\n return noopSubscription();\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 if (!socketsRef.current) {\n return noopSubscription();\n }\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 if (!socketsRef.current) {\n return noopSubscription();\n }\n return socketsRef.current.onClose(data => {\n return cb(data);\n });\n },\n [socketsRef.current]\n );\n\n // Only block the app on the WS connection when WS is actually configured. Without a URL\n // (e.g. the standalone hosting type), skip WS and render the app anyway.\n if (wsUrl && !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"],"names":["noopSubscription","undefined","WebsocketsContext","React","WebsocketsContextProvider","props","tenant","useTenantContext","authenticationContext","useFeature","AuthenticationContextFeature","eventPublisher","EventPublisherFeature","envConfig","EnvConfigFeature","configuredWsUrl","wsUrl","socketsRef","useRef","current","setCurrent","useState","getToken","useCallback","subscriptionManager","useMemo","manager","createWebsocketsSubscriptionManager","currentIteration","event","WebsocketsCloseCode","setTimeout","console","useEffect","abortController","AbortController","window","CloseEvent","token","url","createWebsocketsManager","createWebsocketsConnection","subscription","WebsocketEvent","websocketActions","createWebsocketsActions","send","action","data","timeout","createAction","name","createWebsocketsAction","onMessage","cb","onError","onClose","value"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/app-websockets",
3
- "version": "6.6.0-alpha.3",
3
+ "version": "6.6.0-alpha.4",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -17,15 +17,15 @@
17
17
  ],
18
18
  "license": "MIT",
19
19
  "dependencies": {
20
- "@webiny/app": "6.6.0-alpha.3",
21
- "@webiny/app-admin": "6.6.0-alpha.3",
22
- "@webiny/feature": "6.6.0-alpha.3",
23
- "@webiny/utils": "6.6.0-alpha.3",
20
+ "@webiny/app": "6.6.0-alpha.4",
21
+ "@webiny/app-admin": "6.6.0-alpha.4",
22
+ "@webiny/feature": "6.6.0-alpha.4",
23
+ "@webiny/utils": "6.6.0-alpha.4",
24
24
  "react": "18.3.1",
25
25
  "react-dom": "18.3.1"
26
26
  },
27
27
  "devDependencies": {
28
- "@webiny/build-tools": "6.6.0-alpha.3",
28
+ "@webiny/build-tools": "6.6.0-alpha.4",
29
29
  "rimraf": "6.1.3",
30
30
  "typescript": "7.0.2"
31
31
  },