34 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { logUtils } from '@0xproject/utils';
 | 
						|
import * as _ from 'lodash';
 | 
						|
 | 
						|
import { portalOrderSchema } from 'ts/schemas/portal_order_schema';
 | 
						|
import { validator } from 'ts/schemas/validator';
 | 
						|
import { Order } from 'ts/types';
 | 
						|
 | 
						|
export const orderParser = {
 | 
						|
    parse(queryString: string): Order | undefined {
 | 
						|
        if (queryString.length === 0) {
 | 
						|
            return undefined;
 | 
						|
        }
 | 
						|
        const queryParams = queryString.substring(1).split('&');
 | 
						|
        const orderQueryParam = _.find(queryParams, queryParam => {
 | 
						|
            const queryPair = queryParam.split('=');
 | 
						|
            return queryPair[0] === 'order';
 | 
						|
        });
 | 
						|
        if (_.isUndefined(orderQueryParam)) {
 | 
						|
            return undefined;
 | 
						|
        }
 | 
						|
        const orderPair = orderQueryParam.split('=');
 | 
						|
        if (orderPair.length !== 2) {
 | 
						|
            return undefined;
 | 
						|
        }
 | 
						|
        const order = JSON.parse(decodeURIComponent(orderPair[1]));
 | 
						|
        const validationResult = validator.validate(order, portalOrderSchema);
 | 
						|
        if (validationResult.errors.length > 0) {
 | 
						|
            logUtils.log(`Invalid shared order: ${validationResult.errors}`);
 | 
						|
            return undefined;
 | 
						|
        }
 | 
						|
        return order;
 | 
						|
    },
 | 
						|
};
 |