@sybil-center/zkc-preparator
Version:
ZKCredential preparator
87 lines • 7.15 kB
JavaScript
import { TransformationGraph } from "./graph.js";
import sortKeys from "sort-keys";
export class Preparator {
constructor() {
this.graph = new TransformationGraph();
this.extendGraph = this.graph.extend.bind(this.graph);
}
prepare(credential, schema) {
const sortedCred = sort(credential);
const sortedSchema = sort(schema);
const pathValueList = toPathValueList(sortedCred);
return pathValueList.reduce((result, { value, path }) => {
const links = getByPath(sortedSchema, path);
const transformed = this.graph.transform(value, links);
const lastNode = this.graph.toLastNode(links);
if (lastNode?.spread)
transformed.forEach((it) => result.push(it));
else
result.push(transformed);
return result;
}, []);
}
}
export function toPathValueList(obj) {
return Object.keys(obj).reduce((vector, key) => {
vector.concat(getPathValues(obj, key, vector));
return vector;
}, []);
}
function getPathValues(obj, key, vector, path) {
let target = obj[key];
path = !path ? [key] : path;
if (Array.isArray(target))
target = arrToObj(target);
if (typeof target === "object" && target !== null) {
Object.keys(target).forEach((localKey) => {
getPathValues(target, localKey, vector, path.concat(localKey));
});
}
if (isPrimitive(target)) {
vector.push({ value: target, path: path });
}
return vector;
}
function arrToObj(list) {
return list.reduce((prev, value, index) => {
prev[index] = value;
return prev;
}, {});
}
function isPrimitive(value) {
return ["string", "number", "bigint", "boolean"].includes(typeof value);
}
function getByPath(obj, path) {
let current = obj;
path.forEach((key) => {
current = current[key];
});
return current;
}
function sort(credential) {
const target = {};
target.isr = {
id: {
t: credential.isr.id.t,
k: credential.isr.id.k
}
};
target.sch = credential.sch;
target.isd = credential.isd;
target.exd = credential.exd;
const sbjProps = Object.keys(credential.sbj)
.filter((key) => key !== "id")
.reduce((sbjProps, prop) => {
sbjProps[prop] = credential.sbj[prop];
return sbjProps;
}, {});
target.sbj = {
id: {
t: credential.sbj.id.t,
k: credential.sbj.id.k
},
...sortKeys(sbjProps, { deep: true })
};
return target;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIuL3NyYy8iLCJzb3VyY2VzIjpbInByZXBhcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF3QixtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2RSxPQUFPLFFBQVEsTUFBTSxXQUFXLENBQUM7QUE2Q2pDLE1BQU0sT0FBTyxVQUFVO0lBQXZCO1FBRW1CLFVBQUssR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDbkQsZ0JBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBb0JuRCxDQUFDO0lBbEJDLE9BQU8sQ0FJTCxVQUFnQixFQUFFLE1BQWU7UUFDakMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBa0IsTUFBTSxDQUFDLENBQUM7UUFDbkQsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ3RELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFhLENBQUM7WUFDeEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlDLElBQUksUUFBUSxFQUFFLE1BQU07Z0JBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMs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