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.
		
		
		
		
		
			
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
| /* global window, dcodeIO */
 | |
| 
 | |
| /* eslint-disable no-proto, no-restricted-syntax, guard-for-in */
 | |
| 
 | |
| window.textsecure = window.textsecure || {};
 | |
| 
 | |
| /** *******************************
 | |
|  *** Type conversion utilities ***
 | |
|  ******************************** */
 | |
| // Strings/arrays
 | |
| // TODO: Throw all this shit in favor of consistent types
 | |
| // TODO: Namespace
 | |
| const StaticByteBufferProto = new dcodeIO.ByteBuffer().__proto__;
 | |
| const StaticArrayBufferProto = new ArrayBuffer().__proto__;
 | |
| const StaticUint8ArrayProto = new Uint8Array().__proto__;
 | |
| function getString(thing) {
 | |
|   if (thing === Object(thing)) {
 | |
|     if (thing.__proto__ === StaticUint8ArrayProto) {
 | |
|       return String.fromCharCode.apply(null, thing);
 | |
|     }
 | |
|     if (thing.__proto__ === StaticArrayBufferProto) {
 | |
|       return getString(new Uint8Array(thing));
 | |
|     }
 | |
|     if (thing.__proto__ === StaticByteBufferProto) {
 | |
|       return thing.toString('binary');
 | |
|     }
 | |
|   }
 | |
|   return thing;
 | |
| }
 | |
| 
 | |
| function getStringable(thing) {
 | |
|   return (
 | |
|     typeof thing === 'string' ||
 | |
|     typeof thing === 'number' ||
 | |
|     typeof thing === 'boolean' ||
 | |
|     (thing === Object(thing) &&
 | |
|       (thing.__proto__ === StaticArrayBufferProto ||
 | |
|         thing.__proto__ === StaticUint8ArrayProto ||
 | |
|         thing.__proto__ === StaticByteBufferProto))
 | |
|   );
 | |
| }
 | |
| 
 | |
| // Number formatting utils
 | |
| window.textsecure.utils = (() => {
 | |
|   const self = {};
 | |
|   self.unencodeNumber = number => number.split('.');
 | |
|   self.isNumberSane = number =>
 | |
|     number[0] === '+' && /^[0-9]+$/.test(number.substring(1));
 | |
| 
 | |
|   /** ************************
 | |
|    *** JSON'ing Utilities ***
 | |
|    ************************* */
 | |
|   function ensureStringed(thing) {
 | |
|     if (getStringable(thing)) {
 | |
|       return getString(thing);
 | |
|     } else if (thing instanceof Array) {
 | |
|       const res = [];
 | |
|       for (let i = 0; i < thing.length; i += 1) {
 | |
|         res[i] = ensureStringed(thing[i]);
 | |
|       }
 | |
|       return res;
 | |
|     } else if (thing === Object(thing)) {
 | |
|       const res = {};
 | |
|       for (const key in thing) {
 | |
|         res[key] = ensureStringed(thing[key]);
 | |
|       }
 | |
|       return res;
 | |
|     } else if (thing === null) {
 | |
|       return null;
 | |
|     }
 | |
|     throw new Error(`unsure of how to jsonify object of type ${typeof thing}`);
 | |
|   }
 | |
| 
 | |
|   self.jsonThing = thing => JSON.stringify(ensureStringed(thing));
 | |
| 
 | |
|   return self;
 | |
| })();
 |