UNPKG

@baqhub/sdk

Version:

The official JavaScript SDK for the BAQ federated app platform.

54 lines (53 loc) 1.75 kB
"use strict"; 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, };