@baqhub/sdk
Version:
The official JavaScript SDK for the BAQ federated app platform.
54 lines (53 loc) • 1.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RecordVersionHash = void 0;
const canonicalization_js_1 = require("../../helpers/canonicalization.js");
const hash_js_1 = require("../../helpers/hash.js");
function canonicalize(object, level, propertyName) {
// Primitive type.
if (object === null || typeof object !== "object") {
return object;
}
// Array.
if (Array.isArray(object)) {
return object.map(o => canonicalize(o, level + 1));
}
const mapProperties = (keys) => {
return Object.fromEntries(keys.map(k => [k, canonicalize(object[k], level + 1, k)]));
};
// Top level object: record.
if (level === 0) {
return mapProperties([
"author",
"id",
"created_at",
"version",
"permissions",
"type",
"content",
"no_content",
]);
}
// 2nd level object: version.
if (level === 1 && propertyName === "version") {
return mapProperties(["author", "created_at", "parent_hash"]);
}
// Link.
if ("original_entity" in object && "entity" in object) {
return {
...mapProperties(Object.keys(object)),
original_entity: undefined,
entity: object.original_entity,
};
}
return mapProperties(Object.keys(object));
}
function ofRecord(model, record) {
const encodedRecord = model.encode(record);
const canonicalRecord = canonicalize(encodedRecord, 0);
const canonicalRecordJson = canonicalization_js_1.Canonicalization.canonicalize(canonicalRecord);
return hash_js_1.Hash.hash(canonicalRecordJson);
}
exports.RecordVersionHash = {
ofRecord,
};