crosslightning-sdk-base
Advanced tools
Comparing version 9.2.0-beta28 to 9.2.0-beta29
@@ -154,13 +154,8 @@ "use strict"; | ||
const value = respBody[key]; | ||
if (value === undefined) { | ||
return Promise.reject(new Error("EOF before field seen!")); | ||
const result = (0, SchemaVerifier_1.verifyField)(schemaValue, value); | ||
if (result === undefined) { | ||
return Promise.reject(new Error("Invalid field value")); | ||
} | ||
else { | ||
const result = (0, SchemaVerifier_1.verifyField)(schemaValue, value); | ||
if (result === undefined) { | ||
return Promise.reject(new Error("Invalid field value")); | ||
} | ||
else { | ||
return Promise.resolve(result); | ||
} | ||
return Promise.resolve(result); | ||
} | ||
@@ -171,3 +166,7 @@ }); | ||
const decoder = new ResponseParamDecoder_1.ResponseParamDecoder(resp, init.signal); | ||
return (0, Utils_1.objectMap)(schema, (schemaValue, key) => decoder.getParam(key).then(value => { | ||
return (0, Utils_1.objectMap)(schema, (schemaValue, key) => decoder.getParam(key).catch(e => { | ||
if ((0, SchemaVerifier_1.isOptionalField)(schemaValue)) | ||
return undefined; | ||
throw e; | ||
}).then(value => { | ||
logger.debug(url + ": Response frame read (" + (Date.now() - startTime) + "ms) (streaming): ", { [key]: value }); | ||
@@ -174,0 +173,0 @@ const result = (0, SchemaVerifier_1.verifyField)(schemaValue, value); |
@@ -25,3 +25,4 @@ import * as BN from "bn.js"; | ||
}; | ||
export declare function isOptionalField(type: FieldTypeEnum | RequestSchema | ((val: any) => (string | boolean | number | BN | any))): boolean; | ||
export declare function verifyField<T extends FieldTypeEnum | RequestSchema | ((val: any) => (string | boolean | number | BN | any))>(fieldType: T, val: any): FieldType<T>; | ||
export declare function verifySchema<T extends RequestSchema>(req: any, schema: T): RequestSchemaResult<T>; |
@@ -5,2 +5,3 @@ "use strict"; | ||
exports.parseBN = parseBN; | ||
exports.isOptionalField = isOptionalField; | ||
exports.verifyField = verifyField; | ||
@@ -34,2 +35,16 @@ exports.verifySchema = verifySchema; | ||
})(FieldTypeEnum || (exports.FieldTypeEnum = FieldTypeEnum = {})); | ||
function isAllOptional(schema) { | ||
for (let key in schema) { | ||
if (!isOptionalField(schema[key])) | ||
return false; | ||
} | ||
return true; | ||
} | ||
function isOptionalField(type) { | ||
if (typeof (type) === "function") | ||
return type(undefined) != null; | ||
if (typeof (type) === "object") | ||
return isAllOptional(type); | ||
return isOptionalField(type); | ||
} | ||
function verifyField(fieldType, val) { | ||
@@ -43,3 +58,3 @@ const type = fieldType; | ||
} | ||
if (val == null && type >= 100) { | ||
if (val == null && isOptionalField(type)) { | ||
return null; | ||
@@ -95,3 +110,3 @@ } | ||
} | ||
if (val == null && type >= 100) { | ||
if (val == null && isOptionalField(type)) { | ||
resultSchema[fieldName] = null; | ||
@@ -98,0 +113,0 @@ continue; |
{ | ||
"name": "crosslightning-sdk-base", | ||
"version": "9.2.0-beta28", | ||
"version": "9.2.0-beta29", | ||
"description": "CrossLightning SDK chain-agnostic base", | ||
@@ -5,0 +5,0 @@ "main": "./dist/index.js", |
@@ -1,2 +0,2 @@ | ||
import {RequestSchema, RequestSchemaResultPromise, verifyField} from "../SchemaVerifier"; | ||
import {isOptionalField, RequestSchema, RequestSchemaResultPromise, verifyField} from "../SchemaVerifier"; | ||
import {RequestError} from "../../../errors/RequestError"; | ||
@@ -167,11 +167,7 @@ import {extendAbortController, getLogger, objectMap, timeoutSignal} from "../../Utils"; | ||
if(value===undefined) { | ||
return Promise.reject(new Error("EOF before field seen!")); | ||
const result = verifyField(schemaValue, value); | ||
if(result===undefined) { | ||
return Promise.reject(new Error("Invalid field value")); | ||
} else { | ||
const result = verifyField(schemaValue, value); | ||
if(result===undefined) { | ||
return Promise.reject(new Error("Invalid field value")); | ||
} else { | ||
return Promise.resolve(result); | ||
} | ||
return Promise.resolve(result); | ||
} | ||
@@ -182,3 +178,6 @@ }) as any; | ||
return objectMap(schema, (schemaValue, key) => decoder.getParam(key).then(value => { | ||
return objectMap(schema, (schemaValue, key) => decoder.getParam(key).catch(e => { | ||
if(isOptionalField(schemaValue)) return undefined; | ||
throw e; | ||
}).then(value => { | ||
logger.debug(url+": Response frame read ("+(Date.now()-startTime)+"ms) (streaming): ", {[key]: value}); | ||
@@ -185,0 +184,0 @@ const result = verifyField(schemaValue, value); |
@@ -58,2 +58,16 @@ import * as BN from "bn.js"; | ||
function isAllOptional(schema: RequestSchema) { | ||
for(let key in schema) { | ||
if(!isOptionalField(schema[key])) return false; | ||
} | ||
return true; | ||
} | ||
export function isOptionalField(type: FieldTypeEnum | RequestSchema | ((val: any) => (string | boolean | number | BN | any))) { | ||
if(typeof(type)==="function") return type(undefined)!=null; | ||
if(typeof(type)==="object") return isAllOptional(type); | ||
return isOptionalField(type); | ||
} | ||
export function verifyField<T extends FieldTypeEnum | RequestSchema | ((val: any) => (string | boolean | number | BN | any))>(fieldType: T, val: any): FieldType<T> { | ||
@@ -68,3 +82,3 @@ | ||
if(val==null && (type as FieldTypeEnum)>=100) { | ||
if(val==null && isOptionalField(type as FieldTypeEnum)) { | ||
return null; | ||
@@ -112,3 +126,3 @@ } | ||
if(val==null && (type as FieldTypeEnum)>=100) { | ||
if(val==null && isOptionalField(type as FieldTypeEnum)) { | ||
resultSchema[fieldName] = null; | ||
@@ -115,0 +129,0 @@ continue; |
894051
20497