diff --git a/dist/services/QrCodeDataService.d.ts b/dist/services/QrCodeDataService.d.ts index 5ea7dcc6a447755dbf447c219cc4dd1ec3a92b2d..32ddcbe4fe61a7e6d2eab0394a8b36b4ab783882 100644 --- a/dist/services/QrCodeDataService.d.ts +++ b/dist/services/QrCodeDataService.d.ts @@ -1,5 +1,9 @@ -import { KeyDataPair, MessageData, DocumentData } from "../types"; +import { KeyDataPair, MessageData, DocumentData, SealHeadData, SealIndexObject } from "../types"; declare const _default: { + encodeSealHead: (sealHeadData: SealHeadData) => string; + decodeSealHead: (binary: string | ArrayBuffer | Uint8Array) => SealHeadData; + encodeSealIndexObject: (indexObjectData: SealIndexObject) => string; + decodeSealIndexObject: (binary: string | ArrayBuffer | Uint8Array) => SealIndexObject; encodeDocumentData: (documentData: DocumentData) => string; decodeDocumentData: (binary: string | ArrayBuffer | Uint8Array) => DocumentData; encodeEmailData: (emailData: MessageData) => string; diff --git a/dist/services/QrCodeDataService.js b/dist/services/QrCodeDataService.js index b019c4eda6e11dfb26902f428b03cece1fa410a8..ce102d4dab66909348be5a23c1d791ad6fdf67cf 100644 --- a/dist/services/QrCodeDataService.js +++ b/dist/services/QrCodeDataService.js @@ -16,6 +16,8 @@ const DocumentDataMessageV1 = qrcode_data_pb_1.vereign.protobuf.qrcode_data.Docu const EmailDataMessageV1 = qrcode_data_pb_1.vereign.protobuf.qrcode_data.EmailData_V1; const KeyDataMessageV1 = qrcode_data_pb_1.vereign.protobuf.qrcode_data.KeyData_V1; const WrapperDataMessage = qrcode_data_pb_1.vereign.protobuf.qrcode_data.WrapperData; +const SealIndexObjectMessageV1 = qrcode_data_pb_1.vereign.protobuf.qrcode_data.SealIndexObject_V1; +const SealHeadMessageV1 = qrcode_data_pb_1.vereign.protobuf.qrcode_data.SealDocumentHeadData_V1; const EMAIL_DATA_V1 = "EmailData_V1"; const DOCUMENT_DATA_V1 = "DocumentData_V1"; const encodeEmailData = (emailData) => { @@ -111,7 +113,33 @@ const encodeDocumentData = (documentData) => { const wrappedDataBuffer = WrapperDataMessage.encode(wrappedDataMessage).finish(); return (0, common_1.arrayBufferToBase64)(wrappedDataBuffer); }; +const encodeSealHead = (sealHeadData) => { + const sealHeadDataMessage = SealHeadMessageV1.fromObject(sealHeadData); + const buffer = SealHeadMessageV1.encode(sealHeadDataMessage).finish(); + return (0, common_1.arrayBufferToBase64)(buffer); +}; +const decodeSealHead = (binary) => { + const sealHeadDataMessage = SealHeadMessageV1.decode((0, common_1.ensureUint8Array)(binary)); + return SealHeadMessageV1.toObject(sealHeadDataMessage, { + bytes: String, + }); +}; +const encodeSealIndexObject = (indexObjectData) => { + const sealIndexDataMessage = SealIndexObjectMessageV1.fromObject(indexObjectData); + const buffer = SealIndexObjectMessageV1.encode(sealIndexDataMessage).finish(); + return (0, common_1.arrayBufferToBase64)(buffer); +}; +const decodeSealIndexObject = (binary) => { + const sealIndexDataMessage = SealIndexObjectMessageV1.decode((0, common_1.ensureUint8Array)(binary)); + return SealIndexObjectMessageV1.toObject(sealIndexDataMessage, { + bytes: String, + }); +}; exports.default = { + encodeSealHead, + decodeSealHead, + encodeSealIndexObject, + decodeSealIndexObject, encodeDocumentData, decodeDocumentData, encodeEmailData, diff --git a/dist/types.d.ts b/dist/types.d.ts index 5c87d616e6f3c51e6f9dacbbda27da3f5569969d..3d93da6f5e571838365c100760584174d99ee32d 100644 --- a/dist/types.d.ts +++ b/dist/types.d.ts @@ -147,3 +147,16 @@ export interface DocumentStatusObject { timestamp: number; sealHash: string; } +export interface SealHeadData { + key: string; + data: string; + ipfsIndexCid: string; +} +export interface SealIndexObject { + sealKey: string; + sealTailCid: string; + chain: string; + block: string; + transactionId: string; + hashBatchId: string; +} diff --git a/src/services/QrCodeDataService.ts b/src/services/QrCodeDataService.ts index 38f08f62c5900570b75e84ab7de181a16aaf1032..0b441156907a594537e6ac2ad19653d88ece8821 100644 --- a/src/services/QrCodeDataService.ts +++ b/src/services/QrCodeDataService.ts @@ -1,4 +1,10 @@ -import { KeyDataPair, MessageData, DocumentData } from "../types"; +import { + KeyDataPair, + MessageData, + DocumentData, + SealHeadData, + SealIndexObject, +} from "../types"; import { vereign } from "../generated/qrcode_data_pb"; import { @@ -13,6 +19,9 @@ const DocumentDataMessageV1 = vereign.protobuf.qrcode_data.DocumentData_V1; const EmailDataMessageV1 = vereign.protobuf.qrcode_data.EmailData_V1; const KeyDataMessageV1 = vereign.protobuf.qrcode_data.KeyData_V1; const WrapperDataMessage = vereign.protobuf.qrcode_data.WrapperData; +const SealIndexObjectMessageV1 = + vereign.protobuf.qrcode_data.SealIndexObject_V1; +const SealHeadMessageV1 = vereign.protobuf.qrcode_data.SealDocumentHeadData_V1; const EMAIL_DATA_V1 = "EmailData_V1"; const DOCUMENT_DATA_V1 = "DocumentData_V1"; @@ -179,7 +188,50 @@ const encodeDocumentData = (documentData: DocumentData): string => { return arrayBufferToBase64(wrappedDataBuffer); }; +const encodeSealHead = (sealHeadData: SealHeadData): string => { + const sealHeadDataMessage = SealHeadMessageV1.fromObject(sealHeadData); + const buffer = SealHeadMessageV1.encode(sealHeadDataMessage).finish(); + + return arrayBufferToBase64(buffer); +}; + +const decodeSealHead = ( + binary: string | Uint8Array | ArrayBuffer +): SealHeadData => { + const sealHeadDataMessage = SealHeadMessageV1.decode( + ensureUint8Array(binary) + ); + + return SealHeadMessageV1.toObject(sealHeadDataMessage, { + bytes: String, + }) as SealHeadData; +}; + +const encodeSealIndexObject = (indexObjectData: SealIndexObject): string => { + const sealIndexDataMessage = + SealIndexObjectMessageV1.fromObject(indexObjectData); + const buffer = SealIndexObjectMessageV1.encode(sealIndexDataMessage).finish(); + + return arrayBufferToBase64(buffer); +}; + +const decodeSealIndexObject = ( + binary: string | Uint8Array | ArrayBuffer +): SealIndexObject => { + const sealIndexDataMessage = SealIndexObjectMessageV1.decode( + ensureUint8Array(binary) + ); + + return SealIndexObjectMessageV1.toObject(sealIndexDataMessage, { + bytes: String, + }) as SealIndexObject; +}; + export default { + encodeSealHead, + decodeSealHead, + encodeSealIndexObject, + decodeSealIndexObject, encodeDocumentData, decodeDocumentData, encodeEmailData, diff --git a/src/types.ts b/src/types.ts index 37557bcac0643e7d58c18078e23d25ad41ad734d..6b0fdc1c9636b639415a48996097f04a0f57544f 100644 --- a/src/types.ts +++ b/src/types.ts @@ -172,3 +172,18 @@ export interface DocumentStatusObject { timestamp: number; sealHash: string; } + +export interface SealHeadData { + key: string; + data: string; + ipfsIndexCid: string; +} + +export interface SealIndexObject { + sealKey: string; + sealTailCid: string; + chain: string; + block: string; + transactionId: string; + hashBatchId: string; +} diff --git a/vereign/protobuf/qrcode_data.proto b/vereign/protobuf/qrcode_data.proto index 7f14d6af429b5c662685f5665d934d51e9dd3b4c..b3b296978cf592eb1e48865b20448efdd9fe84de 100644 --- a/vereign/protobuf/qrcode_data.proto +++ b/vereign/protobuf/qrcode_data.proto @@ -73,3 +73,23 @@ message DocumentData_V1 { int32 documentPages = 5; IpfsData_V1 ipfs = 6; } + +/** + * Reference + * https://community.vereign.com/t/seal-blockchain-status-storage-for-documents-and-beyond/371/6 + * Step 14 + */ + message SealDocumentHeadData_V1 { + bytes key = 1; + bytes data = 2; + string ipfsIndexCid = 3; +} + +message SealIndexObject_V1 { + bytes sealKey = 1; + string sealTailCid = 2; + string chain = 3; + string block = 4; + string transactionId = 5; + string hashBatchId = 6; +}