|  |  |  | const is = require('@sindresorhus/is'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const Errors = require('./types/errors'); | 
					
						
							|  |  |  | const Settings = require('./settings'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | exports.syncReadReceiptConfiguration = async ({ | 
					
						
							|  |  |  |   deviceId, | 
					
						
							|  |  |  |   sendRequestConfigurationSyncMessage, | 
					
						
							|  |  |  |   storage, | 
					
						
							|  |  |  | }) => { | 
					
						
							|  |  |  |   if (!is.string(deviceId)) { | 
					
						
							|  |  |  |     throw new TypeError("'deviceId' is required"); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!is.function(sendRequestConfigurationSyncMessage)) { | 
					
						
							|  |  |  |     throw new TypeError("'sendRequestConfigurationSyncMessage' 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 { | 
					
						
							|  |  |  |     await sendRequestConfigurationSyncMessage(); | 
					
						
							|  |  |  |     storage.put(settingName, true); | 
					
						
							|  |  |  |   } catch (error) { | 
					
						
							|  |  |  |     return { | 
					
						
							|  |  |  |       status: 'error', | 
					
						
							|  |  |  |       reason: 'failedToSendSyncMessage', | 
					
						
							|  |  |  |       error: Errors.toLogFormat(error), | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return { | 
					
						
							|  |  |  |     status: 'complete', | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | }; |