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.
		
		
		
		
		
			
		
			
	
	
		
			68 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
		
		
			
		
	
	
			68 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
| 
											4 years ago
										 | import _ from 'lodash'; | ||
|  | import { StorageItem } from '../node/storage_item'; | ||
|  | import { fromArrayBufferToBase64, fromBase64ToArrayBuffer } from '../session/utils/String'; | ||
|  | import { channels } from './channels'; | ||
|  | 
 | ||
|  | function keysToArrayBuffer(keys: any, data: any) { | ||
|  |   const updated = _.cloneDeep(data); | ||
|  |   // tslint:disable: one-variable-per-declaration
 | ||
|  |   for (let i = 0, max = keys.length; i < max; i += 1) { | ||
|  |     const key = keys[i]; | ||
|  |     const value = _.get(data, key); | ||
|  | 
 | ||
|  |     if (value) { | ||
|  |       _.set(updated, key, fromBase64ToArrayBuffer(value)); | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   return updated; | ||
|  | } | ||
|  | 
 | ||
|  | function keysFromArrayBuffer(keys: any, data: any) { | ||
|  |   const updated = _.cloneDeep(data); | ||
|  |   for (let i = 0, max = keys.length; i < max; i += 1) { | ||
|  |     const key = keys[i]; | ||
|  |     const value = _.get(data, key); | ||
|  | 
 | ||
|  |     if (value) { | ||
|  |       _.set(updated, key, fromArrayBufferToBase64(value)); | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   return updated; | ||
|  | } | ||
|  | 
 | ||
|  | const ITEM_KEYS: Object = { | ||
|  |   identityKey: ['value.pubKey', 'value.privKey'], | ||
|  |   profileKey: ['value'], | ||
|  | }; | ||
|  | export async function createOrUpdateItem(data: StorageItem): Promise<void> { | ||
|  |   const { id } = data; | ||
|  |   if (!id) { | ||
|  |     throw new Error('createOrUpdateItem: Provided data did not have a truthy id'); | ||
|  |   } | ||
|  | 
 | ||
|  |   const keys = (ITEM_KEYS as any)[id]; | ||
|  |   const updated = Array.isArray(keys) ? keysFromArrayBuffer(keys, data) : data; | ||
|  | 
 | ||
|  |   await channels.createOrUpdateItem(updated); | ||
|  | } | ||
|  | export async function getItemById(id: string): Promise<StorageItem | undefined> { | ||
|  |   const keys = (ITEM_KEYS as any)[id]; | ||
|  |   const data = await channels.getItemById(id); | ||
|  | 
 | ||
|  |   return Array.isArray(keys) ? keysToArrayBuffer(keys, data) : data; | ||
|  | } | ||
|  | 
 | ||
|  | export async function getAllItems(): Promise<Array<StorageItem>> { | ||
|  |   const items = await channels.getAllItems(); | ||
|  |   return _.map(items, item => { | ||
|  |     const { id } = item; | ||
|  |     const keys = (ITEM_KEYS as any)[id]; | ||
|  |     return Array.isArray(keys) ? keysToArrayBuffer(keys, item) : item; | ||
|  |   }); | ||
|  | } | ||
|  | export async function removeItemById(id: string): Promise<void> { | ||
|  |   await channels.removeItemById(id); | ||
|  | } |