UNPKG

@iden3/js-iden3-auth

Version:

iden3-auth implementation in JavaScript

51 lines (50 loc) 2.13 kB
import { getDocumentLoader } from '@iden3/js-jsonld-merklization'; import { Operators, parseQueriesMetadata, checkQueryRequest, validateDisclosureV2Circuit, validateEmptyCredentialSubjectV2Circuit, verifyFieldValueInclusionV2, validateOperators, checkCircuitOperator } from '@0xpolygonid/js-sdk'; export const userStateError = new Error(`user state is not valid`); export async function checkQueryV2Circuits(circuitId, query, outs, schemaLoader, opts, verifiablePresentation) { if (!query.type) { throw new Error(`proof query type is undefined`); } const loader = schemaLoader || getDocumentLoader(); // validate schema let context; try { context = (await loader(query.context ?? '')).document; } catch (e) { throw new Error(`can't load schema for request query`); } const queriesMetadata = await parseQueriesMetadata(query.type, JSON.stringify(context), query.credentialSubject, { documentLoader: loader }); await checkQueryRequest(query, queriesMetadata, context, outs, circuitId, loader, opts); const queryMetadata = queriesMetadata[0]; // only one query is supported checkCircuitOperator(circuitId, outs.operator); // validate selective disclosure if (queryMetadata.operator === Operators.SD) { try { await validateDisclosureV2Circuit(queryMetadata, outs, verifiablePresentation, loader); } catch (e) { throw new Error(`failed to validate selective disclosure: ${e.message}`); } } else if (!queryMetadata.fieldName && queryMetadata.operator == Operators.NOOP) { try { await validateEmptyCredentialSubjectV2Circuit(queryMetadata, outs); } catch (e) { throw new Error(`failed to validate operators: ${e.message}`); } } else { try { await validateOperators(queryMetadata, outs); } catch (e) { throw new Error(`failed to validate operators: ${e.message}`); } } // verify field inclusion verifyFieldValueInclusionV2(outs, queryMetadata); }