const is = require('@sindresorhus/is'); const Errors = require('./types/errors'); const Settings = require('./settings'); exports.syncReadReceiptConfiguration = async ({ ourNumber, deviceId, sendRequestConfigurationSyncMessage, storage, prepareForSend, }) => { if (!is.string(deviceId)) { throw new TypeError('deviceId is required'); } if (!is.function(sendRequestConfigurationSyncMessage)) { throw new TypeError('sendRequestConfigurationSyncMessage is required'); } if (!is.function(prepareForSend)) { throw new TypeError('prepareForSend is required'); } if (!is.string(ourNumber)) { throw new TypeError('ourNumber is required'); } if (!is.object(storage)) { throw new TypeError('storage is required'); } const isPrimaryDevice = deviceId === '1'; if (isPrimaryDevice) { return { status: 'skipped', reason: 'isPrimaryDevice', }; } const settingName = Settings.READ_RECEIPT_CONFIGURATION_SYNC; const hasPreviouslySynced = Boolean(storage.get(settingName)); if (hasPreviouslySynced) { return { status: 'skipped', reason: 'hasPreviouslySynced', }; } try { const { wrap, sendOptions } = prepareForSend(ourNumber); await wrap(sendRequestConfigurationSyncMessage(sendOptions)); storage.put(settingName, true); } catch (error) { return { status: 'error', reason: 'failedToSendSyncMessage', error: Errors.toLogFormat(error), }; } return { status: 'complete', }; };