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.
		
		
		
		
		
			
		
			
				
	
	
		
			66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
| 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, {
 | |
|       syncMessage: true,
 | |
|     });
 | |
|     await wrap(sendRequestConfigurationSyncMessage(sendOptions));
 | |
|     storage.put(settingName, true);
 | |
|   } catch (error) {
 | |
|     return {
 | |
|       status: 'error',
 | |
|       reason: 'failedToSendSyncMessage',
 | |
|       error: Errors.toLogFormat(error),
 | |
|     };
 | |
|   }
 | |
| 
 | |
|   return {
 | |
|     status: 'complete',
 | |
|   };
 | |
| };
 |