diff --git a/lib/ring.js b/lib/ring.js index 1ddce32..5de0941 100644 --- a/lib/ring.js +++ b/lib/ring.js @@ -55,10 +55,9 @@ class RingMqtt { } async init(state, generatedToken) { - const ringAuth = { - refreshToken: generatedToken ? generatedToken : state.ring_token, - systemId: state.systemId, + refreshToken: generatedToken ? generatedToken : state.data.ring_token, + systemId: state.data.systemId, controlCenterDisplayName: (process.env.RUNMODE === 'addon') ? 'ring-mqtt-addon' : 'ring-mqtt', ...utils.config.enable_cameras ? { cameraStatusPollingSeconds: 20, cameraDingsPollingSeconds: 2 } : {}, ...utils.config.enable_modes ? { locationModePollingSeconds: 20 } : {}, @@ -71,6 +70,11 @@ class RingMqtt { await this.client.getProfile() utils.event.emit('ringState', 'connected') debug(`Successfully established connection to Ring API using ${generatedToken ? 'generated' : 'saved'} token`) + + // Subscribe to token update events and save new tokens to state file + this.client.onRefreshTokenUpdated.subscribe(({ newRefreshToken, oldRefreshToken }) => { + state.updateToken(newRefreshToken, oldRefreshToken) + }) } catch(error) { this.client = false debug(colors.brightYellow(error.message)) diff --git a/lib/tokenapp.js b/lib/tokenapp.js index dc2f7f9..f0ab29d 100644 --- a/lib/tokenapp.js +++ b/lib/tokenapp.js @@ -17,6 +17,10 @@ class TokenApp { utils.event.on('ringState', async (state) => { if (state === 'connected') { this.ringConnected = true + // Only the addon leaves the web UI running all the time + if (process.env.RUNMODE !== 'addon') { + this.stop() + } } else { this.ringConnected = false } diff --git a/ring-mqtt.js b/ring-mqtt.js index ea57ab1..0e4c1dd 100644 --- a/ring-mqtt.js +++ b/ring-mqtt.js @@ -68,26 +68,16 @@ const main = async(generatedToken) => { await utils.sleep(10) } - if (await ring.init(state.data, generatedToken)) { - // Subscribe to token update events and save new tokens to state file - ring.client.onRefreshTokenUpdated.subscribe(({ newRefreshToken, oldRefreshToken }) => { - state.updateToken(newRefreshToken, oldRefreshToken) - }) - - // Only leave the web UI active if this is the addon - if (process.env.RUNMODE === 'addon') { - tokenApp.stop() - } - } else { - debug(colors.brightRed('Failed to connect to Ring API using saved token, generate a new token using the Web UI.')) - debug(colors.brightRed('Authentication will be automatically retried in 60 seconds using the existing token.')) + if (!await ring.init(state, generatedToken)) { + debug(colors.brightRed('Failed to connect to Ring API using saved token, generate a new token using the Web UI')) + debug(colors.brightRed('or wait 60 seconds to automatically retry authentication using the existing token')) tokenApp.start() await utils.sleep(60) main() } } else { // If a refresh token was not found, start Web UI for token generator - debug(colors.brightRed('No refresh token was found in state file, generate a token using the Web UI.')) + debug(colors.brightRed('No refresh token was found in state file, generate a token using the Web UI')) tokenApp.start() } }