diff --git a/apps/condo/domains/notification/adapters/apple/AppleMessaging.js b/apps/condo/domains/notification/adapters/apple/AppleMessaging.js index ad59daf7e17..1f39e865fb6 100644 --- a/apps/condo/domains/notification/adapters/apple/AppleMessaging.js +++ b/apps/condo/domains/notification/adapters/apple/AppleMessaging.js @@ -13,6 +13,7 @@ const { APS_PUSH_TYPE_VOIP, APS_PUSH_TYPE_BACKGROUND, APS_RESPONSE_STATUS_SUCCESS, + RETRY_RESTRICTION, } = require('./constants') const logger = getLogger('AppleMessaging') @@ -130,9 +131,9 @@ class AppleMessaging { const stream = this.#session.request(headers) stream.on('response', this.getResponseHandler(stream, resolve, reject)) - stream.on('error', (error) => { - logger.error({ msg: 'sendPush errored', headers, options, payload, streamError: error }) - return resolve(error) + stream.on('error', (err) => { + logger.error({ msg: 'sendPush errored', headers, options, payload, err }) + return resolve(err) }) stream.write(buffer) stream.end() @@ -161,7 +162,15 @@ class AppleMessaging { payload.aps.alert = { ...notification } } - const response = await this.sendPush(token, payload, options) + let response + for (let retryCounter = 0; retryCounter < RETRY_RESTRICTION; retryCounter++) { + response = await this.sendPush(token, payload, options) + if (response instanceof Error) { + logger.warn({ msg: `sendPush not successful on ${retryCounter + 1} try`, err: response }) + continue + } + break + } responses.push(response) diff --git a/apps/condo/domains/notification/adapters/apple/constants.js b/apps/condo/domains/notification/adapters/apple/constants.js index 7695645ef63..a20ea126495 100644 --- a/apps/condo/domains/notification/adapters/apple/constants.js +++ b/apps/condo/domains/notification/adapters/apple/constants.js @@ -11,6 +11,7 @@ const ERRORS = { 500: 'Internal server error.', 503: 'The server is shutting down and unavailable.', } +const RETRY_RESTRICTION = 5 // https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns const APS_PUSH_TYPE_ALERT = 'alert' @@ -25,4 +26,5 @@ module.exports = { APS_PUSH_TYPE_VOIP, APS_PUSH_TYPE_BACKGROUND, APS_RESPONSE_STATUS_SUCCESS, + RETRY_RESTRICTION, } \ No newline at end of file diff --git a/apps/condo/domains/notification/adapters/appleAdapter.js b/apps/condo/domains/notification/adapters/appleAdapter.js index 202280ce7b4..e0f17d480f9 100644 --- a/apps/condo/domains/notification/adapters/appleAdapter.js +++ b/apps/condo/domains/notification/adapters/appleAdapter.js @@ -232,10 +232,10 @@ class AppleAdapter { } result = AppleAdapter.injectFakeResults(appleResult, fakeNotifications) - } catch (error) { - logger.error({ msg: 'sendNotification error', error }) + } catch (err) { + logger.error({ msg: 'sendNotification error', err }) - result = { state: 'error', error } + result = { state: 'error', error: err } } }