You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
| 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',
 | |
|   };
 | |
| };
 |