From 9426e09fa8a36d317fdc998c7dbd8b488571f3d0 Mon Sep 17 00:00:00 2001 From: Jacques Date: Fri, 11 Jun 2021 10:00:16 +0200 Subject: [PATCH] fix: dont disconnect socket on error --- docs/README.md | 22 +++++++------- docs/maintenance/dependency.md | 5 ++-- package-lock.json | 14 ++++----- package.json | 8 ++--- src/constants/channel.js | 30 +++++++++---------- src/constants/socket.js | 10 +++---- src/middlewares/phoenix/actions/index.js | 7 +---- .../phoenix/phoenixChannelMiddleware.js | 10 +++---- src/reducers/phoenixReducer.js | 1 - yarn.lock | 8 ++--- 10 files changed, 53 insertions(+), 62 deletions(-) diff --git a/docs/README.md b/docs/README.md index 3435547..dc0c7a1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -377,6 +377,8 @@ export function* socketConnectedSaga({ isAnonymous, socket, domainKey }) { * @param {string} params.domainKey - domain for socket */ export function* socketErrorSaga({ error, socketState, domainKey }) { + // here you should check if your token is valid or not expired, if not + // disconnect phoenix console.error('socketErrorSaga',{ error, socketState, domainKey }); } @@ -386,20 +388,20 @@ export function* socketErrorSaga({ error, socketState, domainKey }) { * @param {Object} params - parameters * @param {Object} params.socket = socket being closed * @param {string} params.domainKey - domain for socket - * @param {boolean} params.isAnonymous - true if socket was anonymous + * @param {object} params.params - socket.params() */ -export function* socketCloseSaga({ isAnonymous, socket, domainKey }) { - console.info('socketCloseSaga',{ isAnonymous, socket, domainKey }); +export function* socketCloseSaga({ params, socket, domainKey }) { + console.info('socketCloseSaga',{ params, socket, domainKey }); } /** * After phoenix socket disconnects * @param {Object} params - parameters * @param {Object} params.socket = socket being disconnected * @param {string} params.domainKey - domain for socket - * @param {boolean} params.isAnonymous - true if socket was anonymous + * @param {Object} params.params - socket.params() */ -export function* socketDisconnectionSaga({ isAnonymous, socket, domainKey }) { - console.info('socketDisconnectionSaga',{ isAnonymous, socket, domainKey }); +export function* socketDisconnectionSaga({ params, socket, domainKey }) { + console.info('socketDisconnectionSaga',{ params, socket, domainKey }); } export default function* defaultSaga() { @@ -439,11 +441,7 @@ const appReducer = (state = initialState, action) => case PHOENIX_CHANNEL_END_PROGRESS: // when the progress for loadingStatusKey for channel has completed { - const loadingStatusKey = _.get( - action, - 'data.loadingStatusKey', - false - ); + const loadingStatusKey = action.data.loadingStatusKey if (!loadingStatusKey) { draft.loading = false; } else { @@ -453,7 +451,7 @@ const appReducer = (state = initialState, action) => break; case PHOENIX_CHANNEL_LOADING_STATUS: // when the progress for loadingStatusKey is being updated - draft.loadingStatus[_.get(action, 'data.loadingStatusKey', '')] = { + draft.loadingStatus[action.data.loadingStatusKey] = { status: true, }; break; diff --git a/docs/maintenance/dependency.md b/docs/maintenance/dependency.md index 6a56065..b8b1442 100644 --- a/docs/maintenance/dependency.md +++ b/docs/maintenance/dependency.md @@ -74,7 +74,7 @@ Identify problems that occur and try to resolve them by rolling back the respect **[0] PATCH UPDATES** ``` - phoenix 1.3.4 → 1.5.4 + phoenix 1.5.4 → 1.5.9 @rollup/plugin-commonjs ^13.0.2 → ^14.0.0 eslint 5.16.0 → 7.6.0 eslint-config-airbnb 17.1.1 → 18.2.0 @@ -89,7 +89,6 @@ Identify problems that occur and try to resolve them by rolling back the respect **[1] MINOR UPDATES** ``` - lodash 4.17.15 → 4.17.19 @babel/cli ^7.10.1 → ^7.10.5 @babel/core ^7.10.2 → ^7.10.5 @babel/preset-env ^7.10.2 → ^7.10.4 @@ -108,7 +107,7 @@ Identify problems that occur and try to resolve them by rolling back the respect **[3] MAJOR UPDATES** ``` - phoenix 1.3.4 → 1.5.4 + phoenix 1.5.4 → 1.5.9 babel-eslint 10.0.3 → 10.1.0 @babel/core ^7.10.5 → ^7.11.1 @babel/preset-env ^7.10.4 → ^7.11.0 diff --git a/package-lock.json b/package-lock.json index 40d2927..e73c807 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@trixta/phoenix-to-redux", - "version": "3.4.8-beta.0", + "version": "3.5.1-beta.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -7197,9 +7197,9 @@ } }, "immer": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.2.tgz", - "integrity": "sha512-mkcmzLtIfSp40vAqteRr1MbWNSoI7JE+/PB36FNPoSfJ9RQRmNKuTYCjKkyXyuq3Dgn07HuJBrwJd4ZSk2yUbw==" + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.4.tgz", + "integrity": "sha512-jMfL18P+/6P6epANRvRk6q8t+3gGhqsJ9EuJ25AXE+9bNTYtssvzeYbEd0mXRYWCmmXSIbnlpz6vd6iJlmGGGQ==" }, "import-fresh": { "version": "3.2.1", @@ -10865,9 +10865,9 @@ "dev": true }, "phoenix": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/phoenix/-/phoenix-1.5.4.tgz", - "integrity": "sha512-mTxseCKWDgrBQRIriqzvxL+QH5xruu6KQPqFdDx0jrdu/nqWCo914MLihVksn7SV2Bol3T+e/VtovJgC5UZT+w==" + "version": "1.5.9", + "resolved": "https://registry.npmjs.org/phoenix/-/phoenix-1.5.9.tgz", + "integrity": "sha512-NBRQaCYIrXL/wd5+OoO+DLlNTIdRvxKat0DSkfJ/c8qwYqKK7jNrf1GWPBOPzSVJ9HNMPjgmniJ87m9Os9IQGg==" }, "picomatch": { "version": "2.2.2", diff --git a/package.json b/package.json index 9b229dc..1206c4e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@trixta/phoenix-to-redux", - "version": "3.5.0-beta.0", + "version": "3.5.1-beta.0", "publishConfig": { "access": "public" }, @@ -69,13 +69,13 @@ "node": ">=6" }, "peerDependencies": { - "phoenix": "~1.5.4", + "phoenix": "~1.5.9", "reselect": ">=4.0.0", "immer": ">=8.0.1" }, "dependencies": { - "immer": ">=8.0.1", - "phoenix": "1.5.4" + "immer": "~8.0.1", + "phoenix": "~1.5.9" }, "devDependencies": { "@babel/cli": "^7.10.5", diff --git a/src/constants/channel.js b/src/constants/channel.js index 8830cb1..9fb3bdb 100644 --- a/src/constants/channel.js +++ b/src/constants/channel.js @@ -6,21 +6,21 @@ export const channelStatuses = { }; export const channelActionTypes = { - CHANNEL_JOIN: 'PHOENIX_CHANNEL_JOIN', - CHANNEL_LEAVE: 'PHOENIX_CHANNEL_LEAVE', - CHANNEL_PUSH: 'PHOENIX_CHANNEL_PUSH', - CHANNEL_CLOSE: 'PHOENIX_CHANNEL_CLOSE', - CHANNEL_PUSH_ERROR: 'PHOENIX_CHANNEL_PUSH_ERROR', - CHANNEL_JOIN_ERROR: 'PHOENIX_CHANNEL_JOIN_ERROR', - CHANNEL_ERROR: 'PHOENIX_CHANNEL_ERROR', - CHANNEL_TIMEOUT: 'PHOENIX_CHANNEL_TIMEOUT', - CHANNEL_PRESENCE_LOG: 'PHOENIX_CHANNEL_PRESENCE_LOG', - CHANNEL_UPDATED: 'PHOENIX_CHANNEL_UPDATED', - CHANNEL_PRESENCE_UPDATE: 'PHOENIX_CHANNEL_PRESENCE_UPDATE', - CHANNEL_PRESENCE_LEAVE: 'PHOENIX_CHANNEL_PRESENCE_LEAVE', - CHANNEL_PRESENCE_JOIN: 'PHOENIX_CHANNEL_PRESENCE_JOIN', - CHANNEL_PRESENCE_STATE: 'PHOENIX_CHANNEL_PRESENCE_STATE', - CHANNEL_PRESENCE_CHANGE: 'PHOENIX_CHANNEL_PRESENCE_CHANGE', + CHANNEL_JOIN: '@trixta/phoenix-to-redux-event/PHOENIX_CHANNEL_JOIN', + CHANNEL_LEAVE: '@trixta/phoenix-to-redux-event/PHOENIX_CHANNEL_LEAVE', + CHANNEL_PUSH: '@trixta/phoenix-to-redux-event/PHOENIX_CHANNEL_PUSH', + CHANNEL_CLOSE: '@trixta/phoenix-to-redux-event/PHOENIX_CHANNEL_CLOSE', + CHANNEL_PUSH_ERROR: '@trixta/phoenix-to-redux-event/PHOENIX_CHANNEL_PUSH_ERROR', + CHANNEL_JOIN_ERROR: '@trixta/phoenix-to-redux-event/PHOENIX_CHANNEL_JOIN_ERROR', + CHANNEL_ERROR: '@trixta/phoenix-to-redux-event/PHOENIX_CHANNEL_ERROR', + CHANNEL_TIMEOUT: '@trixta/phoenix-to-redux-event/PHOENIX_CHANNEL_TIMEOUT', + CHANNEL_PRESENCE_LOG: '@trixta/phoenix-to-redux-event/PHOENIX_CHANNEL_PRESENCE_LOG', + CHANNEL_UPDATED: '@trixta/phoenix-to-redux-event/PHOENIX_CHANNEL_UPDATED', + CHANNEL_PRESENCE_UPDATE: '@trixta/phoenix-to-redux-event/PHOENIX_CHANNEL_PRESENCE_UPDATE', + CHANNEL_PRESENCE_LEAVE: '@trixta/phoenix-to-redux-event/PHOENIX_CHANNEL_PRESENCE_LEAVE', + CHANNEL_PRESENCE_JOIN: '@trixta/phoenix-to-redux-event/PHOENIX_CHANNEL_PRESENCE_JOIN', + CHANNEL_PRESENCE_STATE: '@trixta/phoenix-to-redux-event/PHOENIX_CHANNEL_PRESENCE_STATE', + CHANNEL_PRESENCE_CHANGE: '@trixta/phoenix-to-redux-event/PHOENIX_CHANNEL_PRESENCE_CHANGE', }; export const phoenixChannelStatuses = { diff --git a/src/constants/socket.js b/src/constants/socket.js index 3b31a7c..4479453 100644 --- a/src/constants/socket.js +++ b/src/constants/socket.js @@ -1,9 +1,9 @@ export const socketActionTypes = { - SOCKET_OPEN: 'PHOENIX_SOCKET_OPEN', - SOCKET_CLOSE: 'PHOENIX_SOCKET_CLOSE', - SOCKET_ERROR: 'PHOENIX_SOCKET_ERROR', - SOCKET_CONNECT: 'PHOENIX_SOCKET_CONNECT', - SOCKET_DISCONNECT: 'PHOENIX_SOCKET_DISCONNECT', + SOCKET_OPEN: '@trixta/phoenix-to-redux-event/PHOENIX_SOCKET_OPEN', + SOCKET_CLOSE: '@trixta/phoenix-to-redux-event/PHOENIX_SOCKET_CLOSE', + SOCKET_ERROR: '@trixta/phoenix-to-redux-event/PHOENIX_SOCKET_ERROR', + SOCKET_CONNECT: '@trixta/phoenix-to-redux-event/PHOENIX_SOCKET_CONNECT', + SOCKET_DISCONNECT: '@trixta/phoenix-to-redux-event/PHOENIX_SOCKET_DISCONNECT', }; export const socketStatuses = { diff --git a/src/middlewares/phoenix/actions/index.js b/src/middlewares/phoenix/actions/index.js index 9f4570b..7031148 100644 --- a/src/middlewares/phoenix/actions/index.js +++ b/src/middlewares/phoenix/actions/index.js @@ -9,7 +9,6 @@ import { PHOENIX_CHANNEL_END_PROGRESS, PHOENIX_CHANNEL_LOADING_STATUS, socketActionTypes, - socketStatuses, } from '../../../constants'; import { formatSocketDomain, @@ -291,15 +290,11 @@ export function setUpSocket({ dispatch, domain, params }) { socket = new Socket(domainUrl, { params }); socket.connect(); socket.onError((error) => { - const connectionState = socket.connectionState(); - if (connectionState === socketStatuses.CLOSED || connectionState === socketStatuses.CLOSING) { - dispatch(disconnectPhoenix()); - } dispatch( phoenixSocketError({ domainKey: getDomainKeyFromUrl({ domainUrl }), error, - socketState: connectionState, + socketState: socket.connectionState(), }) ); }); diff --git a/src/middlewares/phoenix/phoenixChannelMiddleware.js b/src/middlewares/phoenix/phoenixChannelMiddleware.js index 9758edc..b55b8e0 100644 --- a/src/middlewares/phoenix/phoenixChannelMiddleware.js +++ b/src/middlewares/phoenix/phoenixChannelMiddleware.js @@ -8,19 +8,19 @@ import { PHOENIX_LEAVE_CHANNEL, PHOENIX_LEAVE_CHANNEL_EVENTS, PHOENIX_PUSH_TO_CHANNEL, - socketStatuses + socketStatuses, } from '../../constants'; import { selectPhoenixSocket, selectPhoenixSocketDetails, - selectPhoenixSocketDomain + selectPhoenixSocketDomain, } from '../../selectors/socket/selectors'; import { formatSocketDomain, getDomainKeyFromUrl, hasValidSocket, isEqual, - isNullOrEmpty + isNullOrEmpty, } from '../../utils'; import { connectToPhoenixChannelForEvents, @@ -29,7 +29,7 @@ import { leaveChannel, leaveEventsForPhoenixChannel, setUpSocket, - updatePhoenixChannelLoadingStatus + updatePhoenixChannelLoadingStatus, } from './actions'; import { phoenixChannelPushError, phoenixChannelTimeOut } from './actions/channel'; import { disconnectPhoenixSocket } from './actions/socket'; @@ -79,7 +79,7 @@ export const createPhoenixChannelMiddleware = () => (store) => (next) => (action const socket = selectPhoenixSocket(currentState); const domainKey = selectPhoenixSocketDomain(currentState); if (socket && !isNullOrEmpty(socket) && socket.disconnect) { - socket.disconnect(); + socket.disconnect(null, 1000, 'Intentionally disconnecting socket'); dispatch(disconnectPhoenixSocket({ domainKey, socket })); } return store.getState(); diff --git a/src/reducers/phoenixReducer.js b/src/reducers/phoenixReducer.js index 94001d9..0ac48f9 100644 --- a/src/reducers/phoenixReducer.js +++ b/src/reducers/phoenixReducer.js @@ -43,7 +43,6 @@ export const phoenixReducer = (state = initialState, action) => if (action.channel) { draft.channelPresence[action.channel.topic].users = action.list; } - break; case socketActionTypes.SOCKET_OPEN: draft.socketStatus = socketStatuses.CONNECTED; diff --git a/yarn.lock b/yarn.lock index ec2ed24..f2bc2b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5511,10 +5511,10 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -phoenix@1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/phoenix/-/phoenix-1.5.4.tgz#d42bb537f03f55076b4e7a6757fe29318a8439f0" - integrity sha512-mTxseCKWDgrBQRIriqzvxL+QH5xruu6KQPqFdDx0jrdu/nqWCo914MLihVksn7SV2Bol3T+e/VtovJgC5UZT+w== +phoenix@1.5.9: + version "1.5.9" + resolved "https://registry.yarnpkg.com/phoenix/-/phoenix-1.5.9.tgz#5aad82072c8d90e7e20a187063c5db9b9ab9b5cd" + integrity sha512-NBRQaCYIrXL/wd5+OoO+DLlNTIdRvxKat0DSkfJ/c8qwYqKK7jNrf1GWPBOPzSVJ9HNMPjgmniJ87m9Os9IQGg== picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2: version "2.2.2"