From 34b6f94d20a658811f18e56b827b33785a4bfe6c Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 12 Sep 2025 18:01:27 +0200 Subject: [PATCH 001/123] Add beginnings of GenericRequest class --- dist/vdxf/classes/request/GenericRequest.d.ts | 60 ++++ dist/vdxf/classes/request/GenericRequest.js | 202 ++++++++++++ dist/vdxf/keys.d.ts | 1 + dist/vdxf/keys.js | 13 +- src/vdxf/classes/request/GenericRequest.ts | 299 ++++++++++++++++++ src/vdxf/keys.ts | 10 + 6 files changed, 583 insertions(+), 2 deletions(-) create mode 100644 dist/vdxf/classes/request/GenericRequest.d.ts create mode 100644 dist/vdxf/classes/request/GenericRequest.js create mode 100644 src/vdxf/classes/request/GenericRequest.ts diff --git a/dist/vdxf/classes/request/GenericRequest.d.ts b/dist/vdxf/classes/request/GenericRequest.d.ts new file mode 100644 index 00000000..99a268d2 --- /dev/null +++ b/dist/vdxf/classes/request/GenericRequest.d.ts @@ -0,0 +1,60 @@ +import { VDXFObject, VerusIDSignature, VerusIDSignatureInterface, VerusIDSignatureJson } from "../../"; +import { BigNumber } from "../../../utils/types/BigNumber"; +import { DataDescriptor, DataDescriptorJson } from "../../../pbaas"; +import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "../payment/VerusPayInvoiceDetails"; +export declare const GENERIC_REQUEST_VERSION_CURRENT: import("bn.js"); +export declare const GENERIC_REQUEST_VERSION_FIRSTVALID: import("bn.js"); +export declare const GENERIC_REQUEST_VERSION_LASTVALID: import("bn.js"); +export declare const GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR: import("bn.js"); +export declare const GENERIC_REQUEST_TYPE_INVOICE: import("bn.js"); +export declare const GENERIC_REQUEST_BASE_FLAGS: import("bn.js"); +export declare const GENERIC_REQUEST_FLAG_SIGNED: import("bn.js"); +export type GenericRequestDetails = DataDescriptor | VerusPayInvoiceDetails; +export type GenericRequestDetailsJson = DataDescriptorJson | VerusPayInvoiceDetailsJson; +export interface GenericRequestInterface { + details: GenericRequestDetails; + type?: BigNumber; + flags?: BigNumber; + system_id?: string; + signing_id?: string; + signature?: VerusIDSignatureInterface; + version?: BigNumber; +} +export type GenericRequestJson = { + vdxfkey: string; + details: GenericRequestDetailsJson; + system_id?: string; + signing_id?: string; + signature?: VerusIDSignatureJson; + version: string; + type?: string; + flags?: string; +}; +export declare class GenericRequest extends VDXFObject { + system_id: string; + signing_id: string; + signature?: VerusIDSignature; + details: GenericRequestDetails; + type: BigNumber; + flags: BigNumber; + constructor(request?: GenericRequestInterface); + isValidVersion(): boolean; + isSigned(): boolean; + isDataDescriptor(): boolean; + isInvoice(): boolean; + setSigned(): void; + private getRawDetailsSha256; + getDetailsHash(signedBlockheight: number, signatureVersion?: number): Buffer; + protected _dataByteLength(signer?: string): number; + protected _toDataBuffer(signer?: string): Buffer; + dataByteLength(): number; + toDataBuffer(): Buffer; + protected _fromDataBuffer(buffer: Buffer, offset?: number): number; + fromDataBuffer(buffer: Buffer, offset?: number): number; + toWalletDeeplinkUri(): string; + static fromWalletDeeplinkUri(uri: string): GenericRequest; + toQrString(): string; + static fromQrString(qrstring: string): GenericRequest; + static fromJson(data: GenericRequestJson): GenericRequest; + toJson(): GenericRequestJson; +} diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js new file mode 100644 index 00000000..47a11d01 --- /dev/null +++ b/dist/vdxf/classes/request/GenericRequest.js @@ -0,0 +1,202 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GenericRequest = exports.GENERIC_REQUEST_FLAG_SIGNED = exports.GENERIC_REQUEST_BASE_FLAGS = exports.GENERIC_REQUEST_TYPE_INVOICE = exports.GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR = exports.GENERIC_REQUEST_VERSION_LASTVALID = exports.GENERIC_REQUEST_VERSION_FIRSTVALID = exports.GENERIC_REQUEST_VERSION_CURRENT = void 0; +const __1 = require("../../"); +const keys_1 = require("../../keys"); +const Hash160_1 = require("./../Hash160"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const vdxf_1 = require("../../../constants/vdxf"); +const address_1 = require("../../../utils/address"); +const createHash = require("create-hash"); +const base64url_1 = require("base64url"); +const bn_js_1 = require("bn.js"); +const pbaas_1 = require("../../../pbaas"); +const VerusPayInvoiceDetails_1 = require("../payment/VerusPayInvoiceDetails"); +exports.GENERIC_REQUEST_VERSION_CURRENT = new bn_js_1.BN(1, 10); +exports.GENERIC_REQUEST_VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); +exports.GENERIC_REQUEST_VERSION_LASTVALID = new bn_js_1.BN(1, 10); +exports.GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR = new bn_js_1.BN(0, 10); +exports.GENERIC_REQUEST_TYPE_INVOICE = new bn_js_1.BN(1, 0); +exports.GENERIC_REQUEST_BASE_FLAGS = new bn_js_1.BN(0, 0); +exports.GENERIC_REQUEST_FLAG_SIGNED = new bn_js_1.BN(1, 0); +class GenericRequest extends __1.VDXFObject { + constructor(request = { + details: new pbaas_1.DataDescriptor(), + type: exports.GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR, + flags: exports.GENERIC_REQUEST_BASE_FLAGS + }) { + super(__1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid); + this.system_id = request.system_id; + this.signing_id = request.signing_id; + this.signature = request.signature + ? new __1.VerusIDSignature(request.signature, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false) + : undefined; + this.details = request.details; + if (request.type) + this.type = request.type; + else + this.type = exports.GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR; + if (request.flags) + this.flags = request.flags; + else + this.flags = exports.GENERIC_REQUEST_BASE_FLAGS; + if (request.version) + this.version = request.version; + else + this.version = exports.GENERIC_REQUEST_VERSION_CURRENT; + } + isValidVersion() { + return this.version.gte(exports.GENERIC_REQUEST_VERSION_FIRSTVALID) && this.version.lte(exports.GENERIC_REQUEST_VERSION_LASTVALID); + } + isSigned() { + return !!(this.flags.and(exports.GENERIC_REQUEST_FLAG_SIGNED).toNumber()); + } + isDataDescriptor() { + return this.type.eq(exports.GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR); + } + isInvoice() { + return this.type.eq(exports.GENERIC_REQUEST_TYPE_INVOICE); + } + setSigned() { + this.flags = this.version.xor(exports.GENERIC_REQUEST_FLAG_SIGNED); + } + getRawDetailsSha256() { + return createHash("sha256").update(this.details.toBuffer()).digest(); + } + getDetailsHash(signedBlockheight, signatureVersion = 2) { + if (this.isSigned()) { + var heightBufferWriter = new bufferutils_1.default.BufferWriter(Buffer.allocUnsafe(4)); + heightBufferWriter.writeUInt32(signedBlockheight); + if (signatureVersion === 1) { + return createHash("sha256") + .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) + .update((0, address_1.fromBase58Check)(this.system_id).hash) + .update(heightBufferWriter.buffer) + .update((0, address_1.fromBase58Check)(this.signing_id).hash) + .update(this.getRawDetailsSha256()) + .digest(); + } + else { + return createHash("sha256") + .update((0, address_1.fromBase58Check)(this.system_id).hash) + .update(heightBufferWriter.buffer) + .update((0, address_1.fromBase58Check)(this.signing_id).hash) + .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) + .update(this.getRawDetailsSha256()) + .digest(); + } + } + else + return this.getRawDetailsSha256(); + } + _dataByteLength(signer = this.signing_id) { + if (this.isSigned()) { + let length = 0; + const _signature = this.signature + ? this.signature + : new __1.VerusIDSignature({ signature: "" }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false); + const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); + length += _system_id.getByteLength(); + const _signing_id = Hash160_1.Hash160.fromAddress(signer); + length += _signing_id.getByteLength(); + length += _signature.byteLength(); + length += this.details.getByteLength(); + return length; + } + else + return this.details.getByteLength(); + } + _toDataBuffer(signer = this.signing_id) { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.dataByteLength())); + if (this.isSigned()) { + const _signing_id = Hash160_1.Hash160.fromAddress(signer); + const _signature = this.signature + ? this.signature + : new __1.VerusIDSignature({ signature: "" }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false); + const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); + writer.writeSlice(_system_id.toBuffer()); + writer.writeSlice(_signing_id.toBuffer()); + writer.writeSlice(_signature.toBuffer()); + } + writer.writeSlice(this.details.toBuffer()); + return writer.buffer; + } + dataByteLength() { + return this._dataByteLength(); + } + toDataBuffer() { + return this._toDataBuffer(); + } + _fromDataBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + const reqLength = reader.readCompactSize(); + if (reqLength == 0) { + throw new Error("Cannot create request from empty buffer"); + } + else { + if (this.isSigned()) { + this.system_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + this.signing_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + const _sig = new __1.VerusIDSignature(undefined, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false); + reader.offset = _sig.fromBuffer(reader.buffer, reader.offset, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY.vdxfid); + this.signature = _sig; + } + const _details = new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails(); + reader.offset = _details.fromBuffer(reader.buffer, reader.offset); + this.details = _details; + } + return reader.offset; + } + fromDataBuffer(buffer, offset) { + return this._fromDataBuffer(buffer, offset); + } + toWalletDeeplinkUri() { + return `${__1.WALLET_VDXF_KEY.vdxfid.toLowerCase()}://x-callback-url/${__1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/${this.toString(false)}`; + } + static fromWalletDeeplinkUri(uri) { + const split = uri.split(`${__1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); + const inv = new GenericRequest(); + inv.fromBuffer(base64url_1.default.toBuffer(split[1]), 0, __1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid); + return inv; + } + toQrString() { + return this.toString(true); + } + static fromQrString(qrstring) { + const inv = new GenericRequest(); + inv.fromBuffer(base64url_1.default.toBuffer(qrstring), 0); + return inv; + } + static fromJson(data) { + const type = data.type ? new bn_js_1.BN(data.type) : exports.GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR; + let details; + if (type.eq(exports.GENERIC_REQUEST_TYPE_INVOICE)) { + details = VerusPayInvoiceDetails_1.VerusPayInvoiceDetails.fromJson(data.details); + } + else { + details = pbaas_1.DataDescriptor.fromJson(data.details); + } + return new GenericRequest({ + details, + signature: data.signature != null ? __1.VerusIDSignature.fromJson(data.signature) : undefined, + signing_id: data.signing_id, + system_id: data.system_id, + version: new bn_js_1.BN(data.version), + type: new bn_js_1.BN(data.type), + flags: new bn_js_1.BN(data.flags) + }); + } + toJson() { + return { + vdxfkey: this.vdxfkey, + system_id: this.system_id, + signing_id: this.signing_id, + signature: this.isSigned() ? this.signature.toJson() : this.signature, + details: this.details.toJson(), + version: this.version.toString(), + type: this.type.toString(), + flags: this.flags.toString() + }; + } +} +exports.GenericRequest = GenericRequest; diff --git a/dist/vdxf/keys.d.ts b/dist/vdxf/keys.d.ts index a72a1058..343f642b 100644 --- a/dist/vdxf/keys.d.ts +++ b/dist/vdxf/keys.d.ts @@ -11,6 +11,7 @@ export interface VDXFKeyInterface { indexid?: string; } export declare const VERUSPAY_INVOICE_VDXF_KEY: VDXFKeyInterface; +export declare const GENERIC_REQUEST_DEEPLINK_VDXF_KEY: VDXFKeyInterface; export declare const IDENTITY_UPDATE_REQUEST_VDXF_KEY: VDXFKeyInterface; export declare const IDENTITY_UPDATE_RESPONSE_VDXF_KEY: VDXFKeyInterface; export declare const IDENTITY_AUTH_SIG_VDXF_KEY: VDXFKeyInterface; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index f5954f4b..667f24c7 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; -exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = void 0; +exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; +exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = void 0; exports.VERUSPAY_INVOICE_VDXF_KEY = { hash160result: "628efc28c2e2d40050e1a9de7a93e7ddf2aa0076", qualifiedname: { @@ -10,6 +10,15 @@ exports.VERUSPAY_INVOICE_VDXF_KEY = { }, vdxfid: "iEETy7La3FTN2Sd2hNRgepek5S8x8eeUeQ" }; +exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = { + "hash160result": "4ba3719af89a7225998a3c62140160f4799822e1", + "indexid": "xUq3NnSiUW7icegVTtnZeuYwiQDhdoykiY", + "qualifiedname": { + "name": "vrsc::request", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iPzvuz1ddBu3zUoTcD8QgX2QgkCgmXH698" +}; exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = { "hash160result": "0bcef8b06c211828d16dc038e4d34d097aeb64e4", "indexid": "xV8GreW8nt1Py99r8KPsLxDyy6UYJQvXja", diff --git a/src/vdxf/classes/request/GenericRequest.ts b/src/vdxf/classes/request/GenericRequest.ts new file mode 100644 index 00000000..88329da2 --- /dev/null +++ b/src/vdxf/classes/request/GenericRequest.ts @@ -0,0 +1,299 @@ +import { + WALLET_VDXF_KEY, + GENERIC_REQUEST_DEEPLINK_VDXF_KEY, + VDXFObject, + VerusIDSignature, + VerusIDSignatureInterface, + VerusIDSignatureJson, +} from "../../"; +import { IDENTITY_AUTH_SIG_VDXF_KEY } from "../../keys"; +import { Hash160 } from "./../Hash160"; +import bufferutils from "../../../utils/bufferutils"; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION, VERUS_DATA_SIGNATURE_PREFIX } from "../../../constants/vdxf"; +import { fromBase58Check, toBase58Check } from "../../../utils/address"; +import createHash = require("create-hash"); +import base64url from "base64url"; +import { BN } from 'bn.js'; +import { BigNumber } from "../../../utils/types/BigNumber"; +import { DataDescriptor, DataDescriptorJson } from "../../../pbaas"; +import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "../payment/VerusPayInvoiceDetails"; + +export const GENERIC_REQUEST_VERSION_CURRENT = new BN(1, 10) +export const GENERIC_REQUEST_VERSION_FIRSTVALID = new BN(1, 10) +export const GENERIC_REQUEST_VERSION_LASTVALID = new BN(1, 10) + +export const GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR = new BN(0, 10) +export const GENERIC_REQUEST_TYPE_INVOICE = new BN(1, 0) + +export const GENERIC_REQUEST_BASE_FLAGS = new BN(0, 0) +export const GENERIC_REQUEST_FLAG_SIGNED = new BN(1, 0) + +export type GenericRequestDetails = DataDescriptor | VerusPayInvoiceDetails; +export type GenericRequestDetailsJson = DataDescriptorJson | VerusPayInvoiceDetailsJson; + +export interface GenericRequestInterface { + details: GenericRequestDetails; + type?: BigNumber; + flags?: BigNumber; + system_id?: string; + signing_id?: string; + signature?: VerusIDSignatureInterface; + version?: BigNumber; +} + +export type GenericRequestJson = { + vdxfkey: string, + details: GenericRequestDetailsJson; + system_id?: string; + signing_id?: string; + signature?: VerusIDSignatureJson; + version: string; + type?: string; + flags?: string; +} + +export class GenericRequest extends VDXFObject { + system_id: string; + signing_id: string; + signature?: VerusIDSignature; + details: GenericRequestDetails; + type: BigNumber; + flags: BigNumber; + + constructor( + request: GenericRequestInterface = { + details: new DataDescriptor(), + type: GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR, + flags: GENERIC_REQUEST_BASE_FLAGS + } + ) { + super(GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid); + + this.system_id = request.system_id; + this.signing_id = request.signing_id; + this.signature = request.signature + ? new VerusIDSignature( + request.signature, + IDENTITY_AUTH_SIG_VDXF_KEY, + false + ) + : undefined; + this.details = request.details; + + if (request.type) this.type = request.type; + else this.type = GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR; + + if (request.flags) this.flags = request.flags; + else this.flags = GENERIC_REQUEST_BASE_FLAGS; + + if (request.version) this.version = request.version; + else this.version = GENERIC_REQUEST_VERSION_CURRENT; + } + + isValidVersion(): boolean { + return this.version.gte(GENERIC_REQUEST_VERSION_FIRSTVALID) && this.version.lte(GENERIC_REQUEST_VERSION_LASTVALID); + } + + isSigned() { + return !!(this.flags.and(GENERIC_REQUEST_FLAG_SIGNED).toNumber()); + } + + isDataDescriptor() { + return this.type.eq(GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR); + } + + isInvoice() { + return this.type.eq(GENERIC_REQUEST_TYPE_INVOICE); + } + + setSigned() { + this.flags = this.version.xor(GENERIC_REQUEST_FLAG_SIGNED); + } + + private getRawDetailsSha256() { + return createHash("sha256").update(this.details.toBuffer()).digest(); + } + + getDetailsHash(signedBlockheight: number, signatureVersion: number = 2) { + if (this.isSigned()) { + var heightBufferWriter = new bufferutils.BufferWriter( + Buffer.allocUnsafe(4) + ); + heightBufferWriter.writeUInt32(signedBlockheight); + + if (signatureVersion === 1) { + return createHash("sha256") + .update(VERUS_DATA_SIGNATURE_PREFIX) + .update(fromBase58Check(this.system_id).hash) + .update(heightBufferWriter.buffer) + .update(fromBase58Check(this.signing_id).hash) + .update(this.getRawDetailsSha256()) + .digest(); + } else { + return createHash("sha256") + .update(fromBase58Check(this.system_id).hash) + .update(heightBufferWriter.buffer) + .update(fromBase58Check(this.signing_id).hash) + .update(VERUS_DATA_SIGNATURE_PREFIX) + .update(this.getRawDetailsSha256()) + .digest(); + } + } else return this.getRawDetailsSha256() + } + + protected _dataByteLength(signer: string = this.signing_id): number { + if (this.isSigned()) { + let length = 0; + + const _signature = this.signature + ? this.signature + : new VerusIDSignature( + { signature: "" }, + IDENTITY_AUTH_SIG_VDXF_KEY, + false + ); + + const _system_id = Hash160.fromAddress(this.system_id); + length += _system_id.getByteLength(); + + const _signing_id = Hash160.fromAddress(signer); + length += _signing_id.getByteLength(); + + length += _signature.byteLength(); + length += this.details.getByteLength(); + + return length; + } else return this.details.getByteLength() + } + + protected _toDataBuffer(signer: string = this.signing_id): Buffer { + const writer = new bufferutils.BufferWriter( + Buffer.alloc(this.dataByteLength()) + ); + + if (this.isSigned()) { + const _signing_id = Hash160.fromAddress(signer); + const _signature = this.signature + ? this.signature + : new VerusIDSignature( + { signature: "" }, + IDENTITY_AUTH_SIG_VDXF_KEY, + false + ); + + const _system_id = Hash160.fromAddress(this.system_id); + writer.writeSlice(_system_id.toBuffer()); + + writer.writeSlice(_signing_id.toBuffer()); + + writer.writeSlice(_signature.toBuffer()); + } + + writer.writeSlice(this.details.toBuffer()); + + return writer.buffer; + } + + dataByteLength(): number { + return this._dataByteLength(); + } + + toDataBuffer(): Buffer { + return this._toDataBuffer(); + } + + protected _fromDataBuffer(buffer: Buffer, offset?: number): number { + const reader = new bufferutils.BufferReader(buffer, offset); + const reqLength = reader.readCompactSize(); + + if (reqLength == 0) { + throw new Error("Cannot create request from empty buffer"); + } else { + if (this.isSigned()) { + this.system_id = toBase58Check( + reader.readSlice(HASH160_BYTE_LENGTH), + I_ADDR_VERSION + ); + + this.signing_id = toBase58Check( + reader.readSlice(HASH160_BYTE_LENGTH), + I_ADDR_VERSION + ); + + const _sig = new VerusIDSignature(undefined, IDENTITY_AUTH_SIG_VDXF_KEY, false); + reader.offset = _sig.fromBuffer(reader.buffer, reader.offset, IDENTITY_AUTH_SIG_VDXF_KEY.vdxfid); + this.signature = _sig; + } + + const _details = new VerusPayInvoiceDetails(); + reader.offset = _details.fromBuffer(reader.buffer, reader.offset); + this.details = _details; + } + + return reader.offset; + } + + fromDataBuffer(buffer: Buffer, offset?: number): number { + return this._fromDataBuffer(buffer, offset); + } + + toWalletDeeplinkUri(): string { + return `${WALLET_VDXF_KEY.vdxfid.toLowerCase()}://x-callback-url/${ + GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid + }/${this.toString(false)}`; + } + + static fromWalletDeeplinkUri(uri: string): GenericRequest { + const split = uri.split(`${GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); + const inv = new GenericRequest(); + inv.fromBuffer(base64url.toBuffer(split[1]), 0, GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid); + + return inv; + } + + toQrString(): string { + return this.toString(true); + } + + static fromQrString(qrstring: string): GenericRequest { + const inv = new GenericRequest(); + inv.fromBuffer(base64url.toBuffer(qrstring), 0); + + return inv; + } + + static fromJson(data: GenericRequestJson): GenericRequest { + const type: BigNumber = data.type ? new BN(data.type) : GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR; + + let details: GenericRequestDetails; + + if (type.eq(GENERIC_REQUEST_TYPE_INVOICE)) { + details = VerusPayInvoiceDetails.fromJson(data.details as VerusPayInvoiceDetailsJson); + } else { + details = DataDescriptor.fromJson(data.details as DataDescriptorJson); + } + + return new GenericRequest({ + details, + signature: data.signature != null ? VerusIDSignature.fromJson(data.signature) : undefined, + signing_id: data.signing_id, + system_id: data.system_id, + version: new BN(data.version), + type: new BN(data.type), + flags: new BN(data.flags) + }) + } + + toJson(): GenericRequestJson { + return { + vdxfkey: this.vdxfkey, + system_id: this.system_id, + signing_id: this.signing_id, + signature: this.isSigned() ? this.signature.toJson() : this.signature, + details: this.details.toJson(), + version: this.version.toString(), + type: this.type.toString(), + flags: this.flags.toString() + }; + } +} diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index 918bd452..1dfbfd72 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -20,6 +20,16 @@ export const VERUSPAY_INVOICE_VDXF_KEY: VDXFKeyInterface = { vdxfid: "iEETy7La3FTN2Sd2hNRgepek5S8x8eeUeQ" } +export const GENERIC_REQUEST_DEEPLINK_VDXF_KEY: VDXFKeyInterface = { + "hash160result": "4ba3719af89a7225998a3c62140160f4799822e1", + "indexid": "xUq3NnSiUW7icegVTtnZeuYwiQDhdoykiY", + "qualifiedname": { + "name": "vrsc::request", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iPzvuz1ddBu3zUoTcD8QgX2QgkCgmXH698" +} + export const IDENTITY_UPDATE_REQUEST_VDXF_KEY: VDXFKeyInterface = { "hash160result": "0bcef8b06c211828d16dc038e4d34d097aeb64e4", "indexid": "xV8GreW8nt1Py99r8KPsLxDyy6UYJQvXja", From d7fb2aa3797c916b9ae33cc9c04f2a6418b1a68a Mon Sep 17 00:00:00 2001 From: michaeltout Date: Mon, 15 Sep 2025 18:04:07 +0200 Subject: [PATCH 002/123] Update GenericRequest to add signaturedata and add tests --- dist/pbaas/SignatureData.js | 1 + dist/vdxf/classes/index.d.ts | 1 + dist/vdxf/classes/index.js | 1 + dist/vdxf/classes/request/GenericRequest.d.ts | 42 ++--- dist/vdxf/classes/request/GenericRequest.js | 83 ++++---- src/__tests__/vdxf/genericrequest.test.ts | 178 ++++++++++++++++++ src/pbaas/SignatureData.ts | 1 + src/vdxf/classes/index.ts | 1 + src/vdxf/classes/request/GenericRequest.ts | 135 ++++++------- 9 files changed, 324 insertions(+), 119 deletions(-) create mode 100644 src/__tests__/vdxf/genericrequest.test.ts diff --git a/dist/pbaas/SignatureData.js b/dist/pbaas/SignatureData.js index 3b711564..9a46e733 100644 --- a/dist/pbaas/SignatureData.js +++ b/dist/pbaas/SignatureData.js @@ -173,6 +173,7 @@ class SignatureData { } return returnObj; } + // To fully implement, refer to VerusCoin/src/pbaas/crosschainrpc.cpp line 337, IdentitySignatureHash getIdentityHash(sigObject) { var heightBuffer = Buffer.allocUnsafe(4); heightBuffer.writeUInt32LE(sigObject.height); diff --git a/dist/vdxf/classes/index.d.ts b/dist/vdxf/classes/index.d.ts index f9f49eb1..aef658ea 100644 --- a/dist/vdxf/classes/index.d.ts +++ b/dist/vdxf/classes/index.d.ts @@ -24,6 +24,7 @@ export * from "./identity/IdentityUpdateEnvelope"; export * from "./identity/IdentityUpdateRequestDetails"; export * from "./identity/IdentityUpdateResponseDetails"; export * from './ResponseUri'; +export * from './request/GenericRequest'; export { Hash160 } from './Hash160'; export { RedirectUri, Subject, ProvisioningInfo, RequestedPermission, Audience, AltAuthFactor, Attestation, } from "./Challenge"; export { ProvisioningTxid } from './provisioning/ProvisioningResult'; diff --git a/dist/vdxf/classes/index.js b/dist/vdxf/classes/index.js index 09e87339..f84172ee 100644 --- a/dist/vdxf/classes/index.js +++ b/dist/vdxf/classes/index.js @@ -45,6 +45,7 @@ __exportStar(require("./identity/IdentityUpdateEnvelope"), exports); __exportStar(require("./identity/IdentityUpdateRequestDetails"), exports); __exportStar(require("./identity/IdentityUpdateResponseDetails"), exports); __exportStar(require("./ResponseUri"), exports); +__exportStar(require("./request/GenericRequest"), exports); var Hash160_1 = require("./Hash160"); Object.defineProperty(exports, "Hash160", { enumerable: true, get: function () { return Hash160_1.Hash160; } }); var Challenge_2 = require("./Challenge"); diff --git a/dist/vdxf/classes/request/GenericRequest.d.ts b/dist/vdxf/classes/request/GenericRequest.d.ts index 99a268d2..588977d2 100644 --- a/dist/vdxf/classes/request/GenericRequest.d.ts +++ b/dist/vdxf/classes/request/GenericRequest.d.ts @@ -1,42 +1,42 @@ -import { VDXFObject, VerusIDSignature, VerusIDSignatureInterface, VerusIDSignatureJson } from "../../"; +import { VDXFObject } from "../../"; import { BigNumber } from "../../../utils/types/BigNumber"; -import { DataDescriptor, DataDescriptorJson } from "../../../pbaas"; +import { DataDescriptor, DataDescriptorJson, SignatureData, SignatureJsonDataInterface } from "../../../pbaas"; import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "../payment/VerusPayInvoiceDetails"; -export declare const GENERIC_REQUEST_VERSION_CURRENT: import("bn.js"); -export declare const GENERIC_REQUEST_VERSION_FIRSTVALID: import("bn.js"); -export declare const GENERIC_REQUEST_VERSION_LASTVALID: import("bn.js"); -export declare const GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR: import("bn.js"); -export declare const GENERIC_REQUEST_TYPE_INVOICE: import("bn.js"); -export declare const GENERIC_REQUEST_BASE_FLAGS: import("bn.js"); -export declare const GENERIC_REQUEST_FLAG_SIGNED: import("bn.js"); export type GenericRequestDetails = DataDescriptor | VerusPayInvoiceDetails; export type GenericRequestDetailsJson = DataDescriptorJson | VerusPayInvoiceDetailsJson; export interface GenericRequestInterface { - details: GenericRequestDetails; - type?: BigNumber; + version?: BigNumber; flags?: BigNumber; + type?: BigNumber; system_id?: string; signing_id?: string; - signature?: VerusIDSignatureInterface; - version?: BigNumber; + signature?: SignatureData; + details: GenericRequestDetails; } export type GenericRequestJson = { + flags?: string; + type?: string; vdxfkey: string; details: GenericRequestDetailsJson; system_id?: string; signing_id?: string; - signature?: VerusIDSignatureJson; + signature?: SignatureJsonDataInterface; version: string; - type?: string; - flags?: string; }; export declare class GenericRequest extends VDXFObject { - system_id: string; - signing_id: string; - signature?: VerusIDSignature; - details: GenericRequestDetails; - type: BigNumber; flags: BigNumber; + type: BigNumber; + system_id?: string; + signing_id?: string; + signature?: SignatureData; + details: GenericRequestDetails; + static VERSION_CURRENT: import("bn.js"); + static VERSION_FIRSTVALID: import("bn.js"); + static VERSION_LASTVALID: import("bn.js"); + static TYPE_DATA_DESCRIPTOR: import("bn.js"); + static TYPE_INVOICE: import("bn.js"); + static BASE_FLAGS: import("bn.js"); + static FLAG_SIGNED: import("bn.js"); constructor(request?: GenericRequestInterface); isValidVersion(): boolean; isSigned(): boolean; diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js index 47a11d01..68f4a932 100644 --- a/dist/vdxf/classes/request/GenericRequest.js +++ b/dist/vdxf/classes/request/GenericRequest.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.GenericRequest = exports.GENERIC_REQUEST_FLAG_SIGNED = exports.GENERIC_REQUEST_BASE_FLAGS = exports.GENERIC_REQUEST_TYPE_INVOICE = exports.GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR = exports.GENERIC_REQUEST_VERSION_LASTVALID = exports.GENERIC_REQUEST_VERSION_FIRSTVALID = exports.GENERIC_REQUEST_VERSION_CURRENT = void 0; +exports.GenericRequest = void 0; const __1 = require("../../"); const keys_1 = require("../../keys"); const Hash160_1 = require("./../Hash160"); @@ -12,53 +12,45 @@ const base64url_1 = require("base64url"); const bn_js_1 = require("bn.js"); const pbaas_1 = require("../../../pbaas"); const VerusPayInvoiceDetails_1 = require("../payment/VerusPayInvoiceDetails"); -exports.GENERIC_REQUEST_VERSION_CURRENT = new bn_js_1.BN(1, 10); -exports.GENERIC_REQUEST_VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); -exports.GENERIC_REQUEST_VERSION_LASTVALID = new bn_js_1.BN(1, 10); -exports.GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR = new bn_js_1.BN(0, 10); -exports.GENERIC_REQUEST_TYPE_INVOICE = new bn_js_1.BN(1, 0); -exports.GENERIC_REQUEST_BASE_FLAGS = new bn_js_1.BN(0, 0); -exports.GENERIC_REQUEST_FLAG_SIGNED = new bn_js_1.BN(1, 0); +const varint_1 = require("../../../utils/varint"); class GenericRequest extends __1.VDXFObject { constructor(request = { details: new pbaas_1.DataDescriptor(), - type: exports.GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR, - flags: exports.GENERIC_REQUEST_BASE_FLAGS + type: GenericRequest.TYPE_DATA_DESCRIPTOR, + flags: GenericRequest.BASE_FLAGS }) { super(__1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid); this.system_id = request.system_id; this.signing_id = request.signing_id; - this.signature = request.signature - ? new __1.VerusIDSignature(request.signature, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false) - : undefined; + this.signature = request.signature; this.details = request.details; if (request.type) this.type = request.type; else - this.type = exports.GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR; + this.type = GenericRequest.TYPE_DATA_DESCRIPTOR; if (request.flags) this.flags = request.flags; else - this.flags = exports.GENERIC_REQUEST_BASE_FLAGS; + this.flags = GenericRequest.BASE_FLAGS; if (request.version) this.version = request.version; else - this.version = exports.GENERIC_REQUEST_VERSION_CURRENT; + this.version = GenericRequest.VERSION_CURRENT; } isValidVersion() { - return this.version.gte(exports.GENERIC_REQUEST_VERSION_FIRSTVALID) && this.version.lte(exports.GENERIC_REQUEST_VERSION_LASTVALID); + return this.version.gte(GenericRequest.VERSION_FIRSTVALID) && this.version.lte(GenericRequest.VERSION_LASTVALID); } isSigned() { - return !!(this.flags.and(exports.GENERIC_REQUEST_FLAG_SIGNED).toNumber()); + return !!(this.flags.and(GenericRequest.FLAG_SIGNED).toNumber()); } isDataDescriptor() { - return this.type.eq(exports.GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR); + return this.type.eq(GenericRequest.TYPE_DATA_DESCRIPTOR); } isInvoice() { - return this.type.eq(exports.GENERIC_REQUEST_TYPE_INVOICE); + return this.type.eq(GenericRequest.TYPE_INVOICE); } setSigned() { - this.flags = this.version.xor(exports.GENERIC_REQUEST_FLAG_SIGNED); + this.flags = this.version.xor(GenericRequest.FLAG_SIGNED); } getRawDetailsSha256() { return createHash("sha256").update(this.details.toBuffer()).digest(); @@ -90,24 +82,26 @@ class GenericRequest extends __1.VDXFObject { return this.getRawDetailsSha256(); } _dataByteLength(signer = this.signing_id) { + let length = 0; + length += varint_1.default.encodingLength(this.flags); + length += varint_1.default.encodingLength(this.type); if (this.isSigned()) { - let length = 0; const _signature = this.signature ? this.signature - : new __1.VerusIDSignature({ signature: "" }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false); + : new pbaas_1.SignatureData(); const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); length += _system_id.getByteLength(); const _signing_id = Hash160_1.Hash160.fromAddress(signer); length += _signing_id.getByteLength(); - length += _signature.byteLength(); - length += this.details.getByteLength(); - return length; + length += _signature.getByteLength(); } - else - return this.details.getByteLength(); + length += this.details.getByteLength(); + return length; } _toDataBuffer(signer = this.signing_id) { const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.dataByteLength())); + writer.writeVarInt(this.flags); + writer.writeVarInt(this.type); if (this.isSigned()) { const _signing_id = Hash160_1.Hash160.fromAddress(signer); const _signature = this.signature @@ -128,20 +122,32 @@ class GenericRequest extends __1.VDXFObject { return this._toDataBuffer(); } _fromDataBuffer(buffer, offset) { + if (buffer.length == 0) + throw new Error("Cannot create request from empty buffer"); const reader = new bufferutils_1.default.BufferReader(buffer, offset); const reqLength = reader.readCompactSize(); if (reqLength == 0) { throw new Error("Cannot create request from empty buffer"); } else { + this.flags = reader.readVarInt(); + this.type = reader.readVarInt(); if (this.isSigned()) { this.system_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); this.signing_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - const _sig = new __1.VerusIDSignature(undefined, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false); - reader.offset = _sig.fromBuffer(reader.buffer, reader.offset, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY.vdxfid); + const _sig = new pbaas_1.SignatureData(); + reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); this.signature = _sig; } - const _details = new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails(); + let _details; + if (this.type.eq(GenericRequest.TYPE_INVOICE)) { + _details = new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails(); + } + else if (this.type.eq(GenericRequest.TYPE_DATA_DESCRIPTOR)) { + _details = new pbaas_1.DataDescriptor(); + } + else + throw new Error("Unrecognized type"); reader.offset = _details.fromBuffer(reader.buffer, reader.offset); this.details = _details; } @@ -168,9 +174,9 @@ class GenericRequest extends __1.VDXFObject { return inv; } static fromJson(data) { - const type = data.type ? new bn_js_1.BN(data.type) : exports.GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR; + const type = data.type ? new bn_js_1.BN(data.type) : GenericRequest.TYPE_DATA_DESCRIPTOR; let details; - if (type.eq(exports.GENERIC_REQUEST_TYPE_INVOICE)) { + if (type.eq(GenericRequest.TYPE_INVOICE)) { details = VerusPayInvoiceDetails_1.VerusPayInvoiceDetails.fromJson(data.details); } else { @@ -178,7 +184,7 @@ class GenericRequest extends __1.VDXFObject { } return new GenericRequest({ details, - signature: data.signature != null ? __1.VerusIDSignature.fromJson(data.signature) : undefined, + signature: data.signature != null ? pbaas_1.SignatureData.fromJson(data.signature) : undefined, signing_id: data.signing_id, system_id: data.system_id, version: new bn_js_1.BN(data.version), @@ -191,7 +197,7 @@ class GenericRequest extends __1.VDXFObject { vdxfkey: this.vdxfkey, system_id: this.system_id, signing_id: this.signing_id, - signature: this.isSigned() ? this.signature.toJson() : this.signature, + signature: this.isSigned() ? this.signature.toJson() : undefined, details: this.details.toJson(), version: this.version.toString(), type: this.type.toString(), @@ -200,3 +206,10 @@ class GenericRequest extends __1.VDXFObject { } } exports.GenericRequest = GenericRequest; +GenericRequest.VERSION_CURRENT = new bn_js_1.BN(1, 10); +GenericRequest.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); +GenericRequest.VERSION_LASTVALID = new bn_js_1.BN(1, 10); +GenericRequest.TYPE_DATA_DESCRIPTOR = new bn_js_1.BN(0, 10); +GenericRequest.TYPE_INVOICE = new bn_js_1.BN(1, 10); +GenericRequest.BASE_FLAGS = new bn_js_1.BN(0, 10); +GenericRequest.FLAG_SIGNED = new bn_js_1.BN(1, 10); diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts new file mode 100644 index 00000000..8ea76c86 --- /dev/null +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -0,0 +1,178 @@ +import { BN } from "bn.js"; +import { DataDescriptor } from "../../pbaas/DataDescriptor"; +import { VerusPayInvoiceDetails } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; +import { SignatureData } from "../../pbaas/SignatureData"; +import { GenericRequest } from "../../vdxf/classes"; + +describe("GenericRequest serialization tests", () => { + test("rejects invalid versions", () => { + const details = DataDescriptor.fromJson({ + version: 1, + "flags": 2, + "objectdata": { + "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv": { + "version": 1, + "flags": 96, + "mimetype": "text/plain", + "objectdata": { + "message": "Something 1" + }, + "label": "label 1" + } + }, + "salt": "4f66603f256d3f757b6dc3ea44802d4041d2a1901e06005028fd60b85a5878a2" + }); + + const tooLow = new GenericRequest({ + details, + version: GenericRequest.VERSION_FIRSTVALID.sub(new BN(1)), + }); + expect(() => { + const buf = tooLow.toBuffer(); + const req = new GenericRequest(); + req.fromBuffer(buf); + }).toThrow("Unsupported version for vdxf object."); + + const tooHigh = new GenericRequest({ + details, + version: GenericRequest.VERSION_LASTVALID.add(new BN(1)), + }); + expect(() => { + const buf = tooHigh.toBuffer(); + const req = new GenericRequest(); + req.fromBuffer(buf); + }).toThrow("Unsupported version for vdxf object."); + }); + + test("roundtrip unsigned request with DataDescriptor", () => { + const details = DataDescriptor.fromJson({ + version: 1, + "flags": 2, + "objectdata": { + "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv": { + "version": 1, + "flags": 96, + "mimetype": "text/plain", + "objectdata": { + "message": "Something 1" + }, + "label": "label 1" + } + }, + "salt": "4f66603f256d3f757b6dc3ea44802d4041d2a1901e06005028fd60b85a5878a2" + }); + + const req = new GenericRequest({ details }); + + const buf = req.toBuffer(); + const req2 = new GenericRequest(); + req2.fromBuffer(buf); + + expect(req2.toBuffer().toString("hex")).toBe(buf.toString("hex")); + + const uri = req.toWalletDeeplinkUri(); + const fromUri = GenericRequest.fromWalletDeeplinkUri(uri); + expect(fromUri.toBuffer().toString("hex")).toBe(buf.toString("hex")); + + const qr = req.toQrString(); + const fromQr = GenericRequest.fromQrString(qr); + expect(fromQr.toBuffer().toString("hex")).toBe(buf.toString("hex")); + + const json = req.toJson(); + + const fromJson = GenericRequest.fromJson(json); + expect(fromJson.toBuffer().toString("hex")).toBe(buf.toString("hex")); + }); + + test("roundtrip unsigned request with VerusPayInvoiceDetails", () => { + const details = new VerusPayInvoiceDetails({ + requestedcurrencyid: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", + }); + + details.setFlags({ + acceptsConversion: false, + acceptsNonVerusSystems: false, + expires: false, + acceptsAnyAmount: true, + acceptsAnyDestination: true + }) + + const req = new GenericRequest({ + details, + type: GenericRequest.TYPE_INVOICE, + }); + + const buf = req.toBuffer(); + const req2 = new GenericRequest(); + req2.fromBuffer(buf); + + expect(req2.toBuffer().toString("hex")).toBe(buf.toString("hex")); + + const json = req.toJson(); + const fromJson = GenericRequest.fromJson(json); + expect(fromJson.toBuffer().toString("hex")).toBe(buf.toString("hex")); + }); + + test("roundtrip signed request with DataDescriptor + SignatureData", () => { + const details = DataDescriptor.fromJson({ + version: 1, + "flags": 2, + "objectdata": { + "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv": { + "version": 1, + "flags": 96, + "mimetype": "text/plain", + "objectdata": { + "message": "Something 1" + }, + "label": "label 1" + } + }, + "salt": "4f66603f256d3f757b6dc3ea44802d4041d2a1901e06005028fd60b85a5878a2" + }); + + const sig = new SignatureData({ + version: new BN(1), + system_ID: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + hash_type: new BN(5), // EHashTypes.HASH_SHA256 + signature_hash: Buffer.from("aabbccdd", "hex"), + identity_ID: "iB5PRXMHLYcNtM8dfLB6KwfJrHU2mKDYuU", + sig_type: new BN(1), + signature_as_vch: Buffer.from("fakesignature"), + }); + + const req = new GenericRequest({ + details, + system_id: sig.system_ID, + signing_id: sig.identity_ID, + signature: sig, + type: GenericRequest.TYPE_DATA_DESCRIPTOR, + }); + + req.setSigned(); + + const buf = req.toBuffer(); + const req2 = new GenericRequest(); + req2.fromBuffer(buf); + + expect(req2.toBuffer().toString("hex")).toBe(buf.toString("hex")); + + const uri = req.toWalletDeeplinkUri(); + const fromUri = GenericRequest.fromWalletDeeplinkUri(uri); + expect(fromUri.toBuffer().toString("hex")).toBe(buf.toString("hex")); + + const qr = req.toQrString(); + const fromQr = GenericRequest.fromQrString(qr); + expect(fromQr.toBuffer().toString("hex")).toBe(buf.toString("hex")); + + const json = req.toJson(); + const fromJson = GenericRequest.fromJson(json); + expect(fromJson.toBuffer().toString("hex")).toBe(buf.toString("hex")); + }); + + test("throws on empty buffer", () => { + const buf = Buffer.from([]); + const req = new GenericRequest(); + expect(() => req.fromDataBuffer(buf)).toThrow("Cannot create request from empty buffer"); + }); +}); \ No newline at end of file diff --git a/src/pbaas/SignatureData.ts b/src/pbaas/SignatureData.ts index da386e01..e3941d8c 100644 --- a/src/pbaas/SignatureData.ts +++ b/src/pbaas/SignatureData.ts @@ -240,6 +240,7 @@ export class SignatureData implements SerializableEntity { return returnObj; } + // To fully implement, refer to VerusCoin/src/pbaas/crosschainrpc.cpp line 337, IdentitySignatureHash getIdentityHash(sigObject: { version: number, hash_type: number, height: number }) { var heightBuffer = Buffer.allocUnsafe(4) heightBuffer.writeUInt32LE(sigObject.height); diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index bfa93d8b..611b1437 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -28,6 +28,7 @@ export * from "./identity/IdentityUpdateEnvelope"; export * from "./identity/IdentityUpdateRequestDetails"; export * from "./identity/IdentityUpdateResponseDetails"; export * from './ResponseUri'; +export * from './request/GenericRequest'; export { Hash160 } from './Hash160' export { diff --git a/src/vdxf/classes/request/GenericRequest.ts b/src/vdxf/classes/request/GenericRequest.ts index 88329da2..8bc7af24 100644 --- a/src/vdxf/classes/request/GenericRequest.ts +++ b/src/vdxf/classes/request/GenericRequest.ts @@ -2,9 +2,7 @@ import { WALLET_VDXF_KEY, GENERIC_REQUEST_DEEPLINK_VDXF_KEY, VDXFObject, - VerusIDSignature, - VerusIDSignatureInterface, - VerusIDSignatureJson, + VerusIDSignature } from "../../"; import { IDENTITY_AUTH_SIG_VDXF_KEY } from "../../keys"; import { Hash160 } from "./../Hash160"; @@ -15,99 +13,95 @@ import createHash = require("create-hash"); import base64url from "base64url"; import { BN } from 'bn.js'; import { BigNumber } from "../../../utils/types/BigNumber"; -import { DataDescriptor, DataDescriptorJson } from "../../../pbaas"; +import { DataDescriptor, DataDescriptorJson, SignatureData, SignatureJsonDataInterface } from "../../../pbaas"; import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "../payment/VerusPayInvoiceDetails"; - -export const GENERIC_REQUEST_VERSION_CURRENT = new BN(1, 10) -export const GENERIC_REQUEST_VERSION_FIRSTVALID = new BN(1, 10) -export const GENERIC_REQUEST_VERSION_LASTVALID = new BN(1, 10) - -export const GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR = new BN(0, 10) -export const GENERIC_REQUEST_TYPE_INVOICE = new BN(1, 0) - -export const GENERIC_REQUEST_BASE_FLAGS = new BN(0, 0) -export const GENERIC_REQUEST_FLAG_SIGNED = new BN(1, 0) +import varint from "../../../utils/varint"; export type GenericRequestDetails = DataDescriptor | VerusPayInvoiceDetails; export type GenericRequestDetailsJson = DataDescriptorJson | VerusPayInvoiceDetailsJson; export interface GenericRequestInterface { - details: GenericRequestDetails; - type?: BigNumber; + version?: BigNumber; flags?: BigNumber; + type?: BigNumber; system_id?: string; signing_id?: string; - signature?: VerusIDSignatureInterface; - version?: BigNumber; + signature?: SignatureData; + details: GenericRequestDetails; } export type GenericRequestJson = { + flags?: string; + type?: string; vdxfkey: string, details: GenericRequestDetailsJson; system_id?: string; signing_id?: string; - signature?: VerusIDSignatureJson; + signature?: SignatureJsonDataInterface; version: string; - type?: string; - flags?: string; } export class GenericRequest extends VDXFObject { - system_id: string; - signing_id: string; - signature?: VerusIDSignature; - details: GenericRequestDetails; - type: BigNumber; flags: BigNumber; + type: BigNumber; + system_id?: string; + signing_id?: string; + signature?: SignatureData; + details: GenericRequestDetails; + + static VERSION_CURRENT = new BN(1, 10) + static VERSION_FIRSTVALID = new BN(1, 10) + static VERSION_LASTVALID = new BN(1, 10) + + static TYPE_DATA_DESCRIPTOR = new BN(0, 10) + static TYPE_INVOICE = new BN(1, 10) + + static BASE_FLAGS = new BN(0, 10) + static FLAG_SIGNED = new BN(1, 10) constructor( request: GenericRequestInterface = { details: new DataDescriptor(), - type: GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR, - flags: GENERIC_REQUEST_BASE_FLAGS + type: GenericRequest.TYPE_DATA_DESCRIPTOR, + flags: GenericRequest.BASE_FLAGS } ) { super(GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid); this.system_id = request.system_id; this.signing_id = request.signing_id; - this.signature = request.signature - ? new VerusIDSignature( - request.signature, - IDENTITY_AUTH_SIG_VDXF_KEY, - false - ) - : undefined; + this.signature = request.signature; + this.details = request.details; if (request.type) this.type = request.type; - else this.type = GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR; + else this.type = GenericRequest.TYPE_DATA_DESCRIPTOR; if (request.flags) this.flags = request.flags; - else this.flags = GENERIC_REQUEST_BASE_FLAGS; + else this.flags = GenericRequest.BASE_FLAGS; if (request.version) this.version = request.version; - else this.version = GENERIC_REQUEST_VERSION_CURRENT; + else this.version = GenericRequest.VERSION_CURRENT; } isValidVersion(): boolean { - return this.version.gte(GENERIC_REQUEST_VERSION_FIRSTVALID) && this.version.lte(GENERIC_REQUEST_VERSION_LASTVALID); + return this.version.gte(GenericRequest.VERSION_FIRSTVALID) && this.version.lte(GenericRequest.VERSION_LASTVALID); } isSigned() { - return !!(this.flags.and(GENERIC_REQUEST_FLAG_SIGNED).toNumber()); + return !!(this.flags.and(GenericRequest.FLAG_SIGNED).toNumber()); } isDataDescriptor() { - return this.type.eq(GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR); + return this.type.eq(GenericRequest.TYPE_DATA_DESCRIPTOR); } isInvoice() { - return this.type.eq(GENERIC_REQUEST_TYPE_INVOICE); + return this.type.eq(GenericRequest.TYPE_INVOICE); } setSigned() { - this.flags = this.version.xor(GENERIC_REQUEST_FLAG_SIGNED); + this.flags = this.version.xor(GenericRequest.FLAG_SIGNED); } private getRawDetailsSha256() { @@ -142,16 +136,15 @@ export class GenericRequest extends VDXFObject { } protected _dataByteLength(signer: string = this.signing_id): number { - if (this.isSigned()) { - let length = 0; - + let length = 0; + + length += varint.encodingLength(this.flags); + length += varint.encodingLength(this.type); + + if (this.isSigned()) { const _signature = this.signature ? this.signature - : new VerusIDSignature( - { signature: "" }, - IDENTITY_AUTH_SIG_VDXF_KEY, - false - ); + : new SignatureData(); const _system_id = Hash160.fromAddress(this.system_id); length += _system_id.getByteLength(); @@ -159,11 +152,12 @@ export class GenericRequest extends VDXFObject { const _signing_id = Hash160.fromAddress(signer); length += _signing_id.getByteLength(); - length += _signature.byteLength(); - length += this.details.getByteLength(); - - return length; - } else return this.details.getByteLength() + length += _signature.getByteLength() + } + + length += this.details.getByteLength(); + + return length; } protected _toDataBuffer(signer: string = this.signing_id): Buffer { @@ -171,6 +165,9 @@ export class GenericRequest extends VDXFObject { Buffer.alloc(this.dataByteLength()) ); + writer.writeVarInt(this.flags); + writer.writeVarInt(this.type); + if (this.isSigned()) { const _signing_id = Hash160.fromAddress(signer); const _signature = this.signature @@ -203,12 +200,17 @@ export class GenericRequest extends VDXFObject { } protected _fromDataBuffer(buffer: Buffer, offset?: number): number { + if (buffer.length == 0) throw new Error("Cannot create request from empty buffer"); + const reader = new bufferutils.BufferReader(buffer, offset); const reqLength = reader.readCompactSize(); if (reqLength == 0) { throw new Error("Cannot create request from empty buffer"); } else { + this.flags = reader.readVarInt(); + this.type = reader.readVarInt(); + if (this.isSigned()) { this.system_id = toBase58Check( reader.readSlice(HASH160_BYTE_LENGTH), @@ -220,12 +222,19 @@ export class GenericRequest extends VDXFObject { I_ADDR_VERSION ); - const _sig = new VerusIDSignature(undefined, IDENTITY_AUTH_SIG_VDXF_KEY, false); - reader.offset = _sig.fromBuffer(reader.buffer, reader.offset, IDENTITY_AUTH_SIG_VDXF_KEY.vdxfid); + const _sig = new SignatureData(); + reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); this.signature = _sig; } + + let _details; - const _details = new VerusPayInvoiceDetails(); + if (this.type.eq(GenericRequest.TYPE_INVOICE)) { + _details = new VerusPayInvoiceDetails(); + } else if (this.type.eq(GenericRequest.TYPE_DATA_DESCRIPTOR)) { + _details = new DataDescriptor(); + } else throw new Error("Unrecognized type") + reader.offset = _details.fromBuffer(reader.buffer, reader.offset); this.details = _details; } @@ -263,11 +272,11 @@ export class GenericRequest extends VDXFObject { } static fromJson(data: GenericRequestJson): GenericRequest { - const type: BigNumber = data.type ? new BN(data.type) : GENERIC_REQUEST_TYPE_DATA_DESCRIPTOR; + const type: BigNumber = data.type ? new BN(data.type) : GenericRequest.TYPE_DATA_DESCRIPTOR; let details: GenericRequestDetails; - if (type.eq(GENERIC_REQUEST_TYPE_INVOICE)) { + if (type.eq(GenericRequest.TYPE_INVOICE)) { details = VerusPayInvoiceDetails.fromJson(data.details as VerusPayInvoiceDetailsJson); } else { details = DataDescriptor.fromJson(data.details as DataDescriptorJson); @@ -275,7 +284,7 @@ export class GenericRequest extends VDXFObject { return new GenericRequest({ details, - signature: data.signature != null ? VerusIDSignature.fromJson(data.signature) : undefined, + signature: data.signature != null ? SignatureData.fromJson(data.signature) : undefined, signing_id: data.signing_id, system_id: data.system_id, version: new BN(data.version), @@ -289,7 +298,7 @@ export class GenericRequest extends VDXFObject { vdxfkey: this.vdxfkey, system_id: this.system_id, signing_id: this.signing_id, - signature: this.isSigned() ? this.signature.toJson() : this.signature, + signature: this.isSigned() ? this.signature.toJson() : undefined, details: this.details.toJson(), version: this.version.toString(), type: this.type.toString(), From 8209741771a3265ebaf2c8ad283df8249fb118c5 Mon Sep 17 00:00:00 2001 From: monkins Date: Thu, 25 Sep 2025 09:23:11 +0100 Subject: [PATCH 003/123] Squashed commit of the following: commit d051bf64edbe13c39625af8a6f9471bb4a55a0d7 Author: monkins Date: Mon Sep 15 09:56:03 2025 +0100 initialize empty buffer commit b75adc00c46882bd57de68d2946b320eb7faf23b Author: monkins Date: Fri Sep 12 13:42:53 2025 +0100 handle empty objectdata toJson() commit 97cced41e54720c864086dcb5e9ccef84d26206b Author: monkins Date: Mon Sep 1 14:12:23 2025 +0100 Fix Endorsement serializer bug commit 4bfe926d98d2332db6f71a3e390ce6247aa72439 Author: monkins Date: Mon Sep 1 13:33:53 2025 +0100 update dist for Endorsement commit 04d03292fffd3df6825d714ba682b14082c83a91 Author: monkins Date: Mon Sep 1 13:08:58 2025 +0100 Add Endorsement Object commit 9980e1607a5c62616287422750ca6d6a5782fb62 Author: monkins Date: Tue Aug 19 20:30:22 2025 +0100 update dist commit 42c6f0ab9e71c3b2cc54c45cd1775e42fa06ae40 Merge: 59cbd81 93d6814 Author: monkins Date: Tue Aug 19 20:19:10 2025 +0100 Merge remote-tracking branch 'upstream/master' into attestandvdxfobj commit 59cbd8169635e1fa41ee14992cdd2c126a0455c0 Author: monkins Date: Tue Aug 19 20:03:01 2025 +0100 handle context being passed commit fad9442f08271cbe9d7b7ef2e423fb6ad15822b9 Author: monkins Date: Tue Aug 19 17:31:43 2025 +0100 fix BN from null bug commit f8215a167dae530125c224b84eb799d77e69c1ab Author: monkins Date: Fri Aug 8 11:02:17 2025 +0100 export new types commit 38cbb78593c99dc2b73a91984ae64c7764bb97fe Author: monkins Date: Fri Aug 8 10:32:34 2025 +0100 Add InformationRequest object commit aa9417e833bad220ed3d920643a4db6e6e06b75f Author: monkins Date: Wed Aug 6 19:54:08 2025 +0100 add multiple request key commit dc77d4b9b4aed99be6578d8e1ed7259464036397 Author: monkins Date: Thu Jul 31 11:10:50 2025 +0100 Make sure flags are set --- dist/pbaas/DataDescriptor.js | 4 +- .../classes/attestation/AttestationDetails.js | 1 + .../attestation/InformationRequest.d.ts | 69 +++ .../classes/attestation/InformationRequest.js | 194 +++++++ .../vdxf/classes/endorsement/Endorsement.d.ts | 66 +++ dist/vdxf/classes/endorsement/Endorsement.js | 231 ++++++++ dist/vdxf/classes/index.d.ts | 3 + dist/vdxf/classes/index.js | 3 + dist/vdxf/keys.d.ts | 1 + dist/vdxf/keys.js | 9 + .../utils/informationrequest.test.ts | 545 ++++++++++++++++++ src/__tests__/vdxf/endorsement.test.ts | 40 ++ src/pbaas/DataDescriptor.ts | 3 +- .../classes/attestation/AttestationDetails.ts | 1 + .../classes/attestation/InformationRequest.ts | 248 ++++++++ src/vdxf/classes/endorsement/Endorsement.ts | 324 +++++++++++ src/vdxf/classes/index.ts | 5 +- src/vdxf/keys.ts | 38 +- 18 files changed, 1768 insertions(+), 17 deletions(-) create mode 100644 dist/vdxf/classes/attestation/InformationRequest.d.ts create mode 100644 dist/vdxf/classes/attestation/InformationRequest.js create mode 100644 dist/vdxf/classes/endorsement/Endorsement.d.ts create mode 100644 dist/vdxf/classes/endorsement/Endorsement.js create mode 100644 src/__tests__/utils/informationrequest.test.ts create mode 100644 src/__tests__/vdxf/endorsement.test.ts create mode 100644 src/vdxf/classes/attestation/InformationRequest.ts create mode 100644 src/vdxf/classes/endorsement/Endorsement.ts diff --git a/dist/pbaas/DataDescriptor.js b/dist/pbaas/DataDescriptor.js index 3184dbcf..90465075 100644 --- a/dist/pbaas/DataDescriptor.js +++ b/dist/pbaas/DataDescriptor.js @@ -13,6 +13,7 @@ class DataDescriptor { constructor(data) { this.flags = new bn_js_1.BN(0); this.version = DataDescriptor.DEFAULT_VERSION; + this.objectdata = Buffer.from([]); if (data != null) { if (data.flags != null) this.flags = data.flags; @@ -205,6 +206,7 @@ class DataDescriptor { return !!(this.version.gte(DataDescriptor.FIRST_VERSION) && this.version.lte(DataDescriptor.LAST_VERSION) && this.flags.and(DataDescriptor.FLAG_MASK.notn(DataDescriptor.FLAG_MASK.bitLength()))); } toJson() { + var _a; const retval = { version: this.version.toNumber(), flags: this.flags.toNumber() @@ -217,7 +219,7 @@ class DataDescriptor { } let processedObject = new _1.VdxfUniValue(); processedObject.fromBuffer(this.objectdata); - if (processedObject.values[0][""]) { + if ((_a = processedObject.values[0]) === null || _a === void 0 ? void 0 : _a[""]) { const keys = Object.keys(processedObject.values[0]); const values = Object.values(processedObject.values[0]); if (isText && Buffer.isBuffer(values[0]) && keys[0] === "") { diff --git a/dist/vdxf/classes/attestation/AttestationDetails.js b/dist/vdxf/classes/attestation/AttestationDetails.js index 12fcf266..91ae4f4f 100644 --- a/dist/vdxf/classes/attestation/AttestationDetails.js +++ b/dist/vdxf/classes/attestation/AttestationDetails.js @@ -287,6 +287,7 @@ class AttestationDetails { this.attestations.length > 0; } toJson() { + this.setFlags(); // Ensure flags are set before converting to JSON const retval = { version: this.version.toNumber(), attestations: this.attestations.map((attestation) => attestation.toJson()) diff --git a/dist/vdxf/classes/attestation/InformationRequest.d.ts b/dist/vdxf/classes/attestation/InformationRequest.d.ts new file mode 100644 index 00000000..15fc69de --- /dev/null +++ b/dist/vdxf/classes/attestation/InformationRequest.d.ts @@ -0,0 +1,69 @@ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +export declare enum RequestedFormatFlags { + FULL_DATA = 1,// Whole Credential + PARTIAL_DATA = 2,// Particular leaf + proof + signature + COLLECTION = 4 +} +export declare enum InformationType { + ATTESTATION = 1, + CLAIM = 2, + CREDENTIAL = 3 +} +export interface RequestItemJson { + version: number; + format: RequestedFormatFlags; + type: InformationType; + id: { + [key: string]: string; + }; + signer: string; + requestedkeys?: string[]; +} +export interface IdentityInformationRequestJson { + version: number; + items: RequestItemJson[]; +} +export declare class RequestItem implements SerializableEntity { + static VERSION_INVALID: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static DEFAULT_VERSION: import("bn.js"); + static FULL_DATA: import("bn.js"); + static PARTIAL_DATA: import("bn.js"); + static COLLECTION: import("bn.js"); + static ATTESTATION: import("bn.js"); + static CLAIM: import("bn.js"); + static CREDENTIAL: import("bn.js"); + version: BigNumber; + format: BigNumber; + type: BigNumber; + id: { + [key: string]: string; + }; + signer: string; + requestedkeys?: string[]; + constructor(json?: RequestItem); + isFormatValid(): boolean; + isValid(): boolean; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJSON(): RequestItemJson; + fromJSON(json: RequestItemJson): void; +} +export declare class RequestInformation implements SerializableEntity { + static VERSION_INVALID: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static DEFAULT_VERSION: import("bn.js"); + version: BigNumber; + items: RequestItem[]; + constructor(data: RequestInformation); + isValid(): boolean; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJSON(): IdentityInformationRequestJson; + fromJSON(json: IdentityInformationRequestJson): void; +} diff --git a/dist/vdxf/classes/attestation/InformationRequest.js b/dist/vdxf/classes/attestation/InformationRequest.js new file mode 100644 index 00000000..8a14b832 --- /dev/null +++ b/dist/vdxf/classes/attestation/InformationRequest.js @@ -0,0 +1,194 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.RequestInformation = exports.RequestItem = exports.InformationType = exports.RequestedFormatFlags = void 0; +const bn_js_1 = require("bn.js"); +const varint_1 = require("../../../utils/varint"); +const varuint_1 = require("../../../utils/varuint"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +var RequestedFormatFlags; +(function (RequestedFormatFlags) { + RequestedFormatFlags[RequestedFormatFlags["FULL_DATA"] = 1] = "FULL_DATA"; + RequestedFormatFlags[RequestedFormatFlags["PARTIAL_DATA"] = 2] = "PARTIAL_DATA"; + RequestedFormatFlags[RequestedFormatFlags["COLLECTION"] = 4] = "COLLECTION"; // Multiple FULL_DATA only +})(RequestedFormatFlags || (exports.RequestedFormatFlags = RequestedFormatFlags = {})); +var InformationType; +(function (InformationType) { + InformationType[InformationType["ATTESTATION"] = 1] = "ATTESTATION"; + InformationType[InformationType["CLAIM"] = 2] = "CLAIM"; + InformationType[InformationType["CREDENTIAL"] = 3] = "CREDENTIAL"; +})(InformationType || (exports.InformationType = InformationType = {})); +class RequestItem { + constructor(json) { + this.version = (json === null || json === void 0 ? void 0 : json.version) || RequestItem.DEFAULT_VERSION; + this.format = (json === null || json === void 0 ? void 0 : json.format) || RequestItem.FULL_DATA; + this.type = (json === null || json === void 0 ? void 0 : json.type) || RequestItem.ATTESTATION; + this.id = (json === null || json === void 0 ? void 0 : json.id) || {}; + this.signer = (json === null || json === void 0 ? void 0 : json.signer) || ''; + this.requestedkeys = (json === null || json === void 0 ? void 0 : json.requestedkeys) || []; + } + isFormatValid() { + // Allowed values: 1 (FULL), 2 (PARTIAL), 5 (FULL|COLLECTION), 6 (PARTIAL|COLLECTION) + const f = this.format; + return (f.eq(RequestItem.FULL_DATA) || + f.eq(RequestItem.PARTIAL_DATA) || + f.eq(RequestItem.FULL_DATA.or(RequestItem.COLLECTION)) || + f.eq(RequestItem.PARTIAL_DATA.or(RequestItem.COLLECTION))); + } + isValid() { + let valid = this.version.gte(RequestInformation.FIRST_VERSION) && this.version.lte(RequestInformation.LAST_VERSION); + valid && (valid = this.isFormatValid()); + valid && (valid = this.type.gte(RequestItem.ATTESTATION) && this.type.lte(RequestItem.CREDENTIAL)); + return valid; + } + getByteLength() { + let length = 0; + length += varint_1.default.encodingLength(this.version); + length += varint_1.default.encodingLength(this.format); + length += varint_1.default.encodingLength(this.type); + // Serialize id object as JSON string + const idJson = JSON.stringify(this.id); + length += varuint_1.default.encodingLength(Buffer.byteLength(idJson, 'utf8')); + length += Buffer.byteLength(idJson, 'utf8'); + // Add signer length + length += varuint_1.default.encodingLength(Buffer.byteLength(this.signer, 'utf8')); + length += Buffer.byteLength(this.signer, 'utf8'); + length += varuint_1.default.encodingLength(this.requestedkeys ? this.requestedkeys.length : 0); + if (this.requestedkeys) { + for (const key of this.requestedkeys) { + length += varuint_1.default.encodingLength(Buffer.byteLength(key, 'utf8')); + length += Buffer.byteLength(key, 'utf8'); + } + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeVarInt(this.version); + writer.writeVarInt(this.format); + writer.writeVarInt(this.type); + // Serialize id object as JSON string + const idJson = JSON.stringify(this.id); + writer.writeVarSlice(Buffer.from(idJson, 'utf8')); + // Write signer + writer.writeVarSlice(Buffer.from(this.signer, 'utf8')); + writer.writeCompactSize(this.requestedkeys ? this.requestedkeys.length : 0); + if (this.requestedkeys) { + for (const key of this.requestedkeys) { + writer.writeVarSlice(Buffer.from(key, 'utf8')); + } + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new BufferReader(buffer, offset); + this.version = reader.readVarInt(); + this.format = reader.readVarInt(); + this.type = reader.readVarInt(); + // Deserialize id object from JSON string + const idJsonString = reader.readVarSlice().toString('utf8'); + this.id = JSON.parse(idJsonString); + // Read signer + this.signer = reader.readVarSlice().toString('utf8'); + this.requestedkeys = []; + const requestedKeysLength = reader.readCompactSize(); + for (let i = 0; i < requestedKeysLength; i++) { + this.requestedkeys.push(reader.readVarSlice().toString('utf8')); + } + return reader.offset; + } + toJSON() { + return { + version: this.version.toNumber(), + format: this.format.toNumber(), + type: this.type.toNumber(), + id: this.id, + signer: this.signer, + requestedkeys: this.requestedkeys + }; + } + fromJSON(json) { + this.version = new bn_js_1.BN(json.version); + this.format = new bn_js_1.BN(json.format); + this.type = new bn_js_1.BN(json.type); + this.id = json.id; + this.signer = json.signer; + this.requestedkeys = json.requestedkeys || []; + } +} +exports.RequestItem = RequestItem; +RequestItem.VERSION_INVALID = new bn_js_1.BN(0); +RequestItem.FIRST_VERSION = new bn_js_1.BN(1); +RequestItem.LAST_VERSION = new bn_js_1.BN(1); +RequestItem.DEFAULT_VERSION = new bn_js_1.BN(1); +RequestItem.FULL_DATA = new bn_js_1.BN(1); +RequestItem.PARTIAL_DATA = new bn_js_1.BN(2); +RequestItem.COLLECTION = new bn_js_1.BN(4); +RequestItem.ATTESTATION = new bn_js_1.BN(1); +RequestItem.CLAIM = new bn_js_1.BN(2); +RequestItem.CREDENTIAL = new bn_js_1.BN(3); +class RequestInformation { + constructor(data) { + this.version = (data === null || data === void 0 ? void 0 : data.version) ? new bn_js_1.BN(data.version) : RequestInformation.DEFAULT_VERSION; + this.items = (data === null || data === void 0 ? void 0 : data.items) || []; + } + isValid() { + let valid = this.version.gte(RequestInformation.FIRST_VERSION) && this.version.lte(RequestInformation.LAST_VERSION); + valid && (valid = this.items.every(item => { + return item.isValid(); + })); + return valid; + } + getByteLength() { + let length = 0; + length += varint_1.default.encodingLength(this.version); + length += varuint_1.default.encodingLength(this.items.length); + for (const item of this.items) { + length += item.getByteLength(); + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeVarInt(this.version); + writer.writeCompactSize(this.items ? this.items.length : 0); + if (this.items) { + for (const item of this.items) { + const itemBuffer = item.toBuffer(); + writer.writeSlice(itemBuffer); + } + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new BufferReader(buffer, offset); + this.version = reader.readVarInt(); + this.items = []; + const itemsLength = reader.readCompactSize(); + for (let i = 0; i < itemsLength; i++) { + const item = new RequestItem(); + reader.offset = item.fromBuffer(buffer, reader.offset); + this.items.push(item); + } + return reader.offset; + } + toJSON() { + return { + version: this.version.toNumber(), + items: this.items.map(item => item.toJSON()) + }; + } + fromJSON(json) { + this.version = new bn_js_1.BN(json.version); + this.items = json.items.map(itemJson => { + const item = new RequestItem(); + item.fromJSON(itemJson); + return item; + }); + } +} +exports.RequestInformation = RequestInformation; +RequestInformation.VERSION_INVALID = new bn_js_1.BN(0); +RequestInformation.FIRST_VERSION = new bn_js_1.BN(1); +RequestInformation.LAST_VERSION = new bn_js_1.BN(1); +RequestInformation.DEFAULT_VERSION = new bn_js_1.BN(1); diff --git a/dist/vdxf/classes/endorsement/Endorsement.d.ts b/dist/vdxf/classes/endorsement/Endorsement.d.ts new file mode 100644 index 00000000..9aff3f02 --- /dev/null +++ b/dist/vdxf/classes/endorsement/Endorsement.d.ts @@ -0,0 +1,66 @@ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { VdxfUniValue } from '../../../pbaas/VdxfUniValue'; +import { SignatureData, SignatureJsonDataInterface } from '../../../pbaas/SignatureData'; +import { VDXFKeyInterface } from '../../keys'; +export declare const ENDORSEMENT: VDXFKeyInterface; +export declare const ENDORSEMENT_SKILL: VDXFKeyInterface; +export declare const ENDORSEMENT_QUALIFICATION: VDXFKeyInterface; +export declare const ENDORSEMENT_REFERENCE: VDXFKeyInterface; +export declare const ENDORSEMENT_PROJECT: VDXFKeyInterface; +export interface EndorsementJson { + version: number; + flags?: number; + endorsee: string; + message?: string; + reference: string; + metadata?: any; + signature?: SignatureJsonDataInterface; + txid?: string; +} +export declare class Endorsement implements SerializableEntity { + static VERSION_INVALID: import("bn.js"); + static VERSION_FIRST: import("bn.js"); + static VERSION_LAST: import("bn.js"); + static VERSION_CURRENT: import("bn.js"); + static FLAGS_HAS_METADATA: import("bn.js"); + static FLAGS_HAS_SIGNATURE: import("bn.js"); + static FLAGS_HAS_TXID: import("bn.js"); + static FLAGS_HAS_MESSAGE: import("bn.js"); + version: BigNumber; + flags: BigNumber; + endorsee: string; + message: string; + reference: Buffer; + txid: Buffer; + metaData: VdxfUniValue | null; + signature: SignatureData | null; + constructor(data?: { + version?: BigNumber; + flags?: BigNumber; + endorsee?: string; + message?: string; + reference?: Buffer; + metaData?: VdxfUniValue | null; + signature?: SignatureData | null; + txid?: Buffer; + }); + getByteLength(): number; + setFlags(): void; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toIdentityUpdateJson(type: VDXFKeyInterface): { + [key: string]: { + [key: string]: [string]; + }; + }; + createHash(name: any): Buffer; + toJson(): { + version: string; + flags: string; + endorsee: string; + message: string; + reference: string; + }; + static fromJson(json: EndorsementJson): Endorsement; +} diff --git a/dist/vdxf/classes/endorsement/Endorsement.js b/dist/vdxf/classes/endorsement/Endorsement.js new file mode 100644 index 00000000..f08df582 --- /dev/null +++ b/dist/vdxf/classes/endorsement/Endorsement.js @@ -0,0 +1,231 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Endorsement = exports.ENDORSEMENT_PROJECT = exports.ENDORSEMENT_REFERENCE = exports.ENDORSEMENT_QUALIFICATION = exports.ENDORSEMENT_SKILL = exports.ENDORSEMENT = void 0; +const varuint_1 = require("../../../utils/varuint"); +const varint_1 = require("../../../utils/varint"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const VdxfUniValue_1 = require("../../../pbaas/VdxfUniValue"); +const SignatureData_1 = require("../../../pbaas/SignatureData"); +const crypto_1 = require("crypto"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +exports.ENDORSEMENT = { + "vdxfid": "iDbPhzm8g7mQ94Cy2VNn7dJPVk5zcDRhPS", + "indexid": "xJRWAoCDXRz4mE5ztB2w61pvXQ71WSXnGu", + "hash160result": "dbfcb74829379cb79d39d9dbe81a76627bb8fd6e", + "qualifiedname": { + "namespace": "iNQFA8jtYe9JYq6Qr49ZxAhvWErFurWjTa", + "name": "valu.vrsc::endorsement" + } +}; +exports.ENDORSEMENT_SKILL = { + "vdxfid": "iBJqQMRzpCW1WVYoU2Ty2VbCJnvyTEsE1C", + "indexid": "xG8ws9s5fWig8fRqKi87zt7jLSwzNoJ3s7", + "hash160result": "309091e8f181bd19279b6cd8873aaafaf4d8eb55", + "qualifiedname": { + "namespace": "iNQFA8jtYe9JYq6Qr49ZxAhvWErFurWjTa", + "name": "valu.vrsc::endorsement.skill" + } +}; +exports.ENDORSEMENT_QUALIFICATION = { + "vdxfid": "iGW3WFP1h8ZDsJWLFMvTF3ZqLuiMRBK6jV", + "indexid": "xML9y3p6YSmtVUPN73acDS6NNZjNE6JbQo", + "hash160result": "d2f91effc976eee2d9574d4ab5e4f0456827e38e", + "qualifiedname": { + "namespace": "iNQFA8jtYe9JYq6Qr49ZxAhvWErFurWjTa", + "name": "valu.vrsc::endorsement.qualification" + } +}; +exports.ENDORSEMENT_REFERENCE = { + "vdxfid": "iArNtGt8xYWBQaDtYATfhdR1NXq1ecZgRp", + "indexid": "xFgVM5KDorir2k6vPr7pg1wYQBr2VEywYv", + "hash160result": "ebc99d117c8e67fa10dfdd6a3295d40458e5ea50", + "qualifiedname": { + "namespace": "iNQFA8jtYe9JYq6Qr49ZxAhvWErFurWjTa", + "name": "valu.vrsc::endorsement.reference" + } +}; +exports.ENDORSEMENT_PROJECT = { + "vdxfid": "i7tTikSbJcLDBFpZyb8Uk3UfVjsLxz25Q4", + "indexid": "xCiaBYsg9vYsoRhbqGndiS1CXPtMpCtFg3", + "hash160result": "0ff2447acd00a1c5494156edee5481591c636730", + "qualifiedname": { + "namespace": "iNQFA8jtYe9JYq6Qr49ZxAhvWErFurWjTa", + "name": "valu.vrsc::endorsement.project" + } +}; +const ENDORSEMENT_TYPES = [exports.ENDORSEMENT_SKILL, exports.ENDORSEMENT_QUALIFICATION, exports.ENDORSEMENT_REFERENCE, exports.ENDORSEMENT_PROJECT]; +class Endorsement { + constructor(data = {}) { + this.version = data.version || new bn_js_1.BN(1, 10); + this.flags = data.flags || new bn_js_1.BN(0, 10); + this.endorsee = data.endorsee || ""; + this.message = data.message || ""; + this.reference = data.reference || Buffer.alloc(0); + this.metaData = data.metaData || null; + this.signature = data.signature || null; + this.txid = data.txid || Buffer.alloc(0); + } + getByteLength() { + let byteLength = 0; + byteLength += varint_1.default.encodingLength(this.version); + byteLength += varint_1.default.encodingLength(this.flags); + byteLength += varuint_1.default.encodingLength(Buffer.from(this.endorsee, 'utf-8').byteLength); + byteLength += Buffer.from(this.endorsee, 'utf-8').byteLength; + byteLength += varuint_1.default.encodingLength(this.reference.length); + byteLength += this.reference.length; + if (this.message && this.message.length > 0) { + byteLength += varuint_1.default.encodingLength(Buffer.from(this.message, 'utf-8').byteLength); + byteLength += Buffer.from(this.message, 'utf-8').length; + } + if (this.metaData && Endorsement.FLAGS_HAS_METADATA.and(this.flags).gt(new bn_js_1.BN(0))) { + byteLength += this.metaData.getByteLength(); + } + if (this.signature && Endorsement.FLAGS_HAS_SIGNATURE.and(this.flags).gt(new bn_js_1.BN(0))) { + byteLength += this.signature.getByteLength(); + } + if (this.txid && Endorsement.FLAGS_HAS_TXID.and(this.flags).gt(new bn_js_1.BN(0))) { + byteLength += varuint_1.default.encodingLength(this.txid.length); + byteLength += this.txid.length; + } + return byteLength; + } + setFlags() { + let flags = new bn_js_1.BN(0, 10); + if (this.metaData) { + flags = flags.or(Endorsement.FLAGS_HAS_METADATA); + } + if (this.signature && this.signature.isValid()) { + flags = flags.or(Endorsement.FLAGS_HAS_SIGNATURE); + } + if (this.txid && this.txid.length == 32) { + flags = flags.or(Endorsement.FLAGS_HAS_TXID); + } + if (this.message && this.message.length > 0) { + flags = flags.or(Endorsement.FLAGS_HAS_MESSAGE); + } + this.flags = flags; + } + toBuffer() { + this.setFlags(); + const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); + bufferWriter.writeVarInt(this.version); + bufferWriter.writeVarInt(this.flags); + bufferWriter.writeVarSlice(Buffer.from(this.endorsee, 'utf-8')); + bufferWriter.writeVarSlice(this.reference); + if (this.message && this.message.length > 0) { + bufferWriter.writeVarSlice(Buffer.from(this.message, 'utf-8')); + } + if (this.metaData && Endorsement.FLAGS_HAS_METADATA.and(this.flags).gt(new bn_js_1.BN(0))) { + bufferWriter.writeSlice(this.metaData.toBuffer()); + } + if (this.signature && Endorsement.FLAGS_HAS_SIGNATURE.and(this.flags).gt(new bn_js_1.BN(0))) { + bufferWriter.writeSlice(this.signature.toBuffer()); + } + if (this.txid && Endorsement.FLAGS_HAS_TXID.and(this.flags).gt(new bn_js_1.BN(0))) { + bufferWriter.writeVarSlice(this.txid); + } + return bufferWriter.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.version = reader.readVarInt(); + this.flags = reader.readVarInt(); + this.endorsee = reader.readVarSlice().toString('utf-8'); + this.reference = reader.readVarSlice(); + if (Endorsement.FLAGS_HAS_MESSAGE.and(this.flags).gt(new bn_js_1.BN(0))) { + this.message = reader.readVarSlice().toString('utf-8'); + } + if (Endorsement.FLAGS_HAS_METADATA.and(this.flags).gt(new bn_js_1.BN(0))) { + this.metaData = new VdxfUniValue_1.VdxfUniValue(); + reader.offset = this.metaData.fromBuffer(reader.buffer, reader.offset); + } + if (Endorsement.FLAGS_HAS_SIGNATURE.and(this.flags).gt(new bn_js_1.BN(0))) { + this.signature = new SignatureData_1.SignatureData(); + reader.offset = this.signature.fromBuffer(reader.buffer, reader.offset); + } + if (Endorsement.FLAGS_HAS_TXID.and(this.flags).gt(new bn_js_1.BN(0))) { + this.txid = reader.readVarSlice(); + } + return reader.offset; + } + toIdentityUpdateJson(type) { + const contentmultimap = {}; + if (!type) { + throw new Error('Type is required'); + } + if (!this.signature || !this.signature.isValid()) { + throw new Error('Signature is required'); + } + if (!ENDORSEMENT_TYPES.includes(type)) { + throw new Error('Unsupported endorsement type'); + } + contentmultimap[type.vdxfid] = [{ serializedhex: this.toBuffer().toString('hex') }]; + return { + contentmultimap: contentmultimap + }; + } + createHash(name) { + if (!name) { + throw new Error('Type is required'); + } + if (this.signature) { + throw new Error('Signature should be removed before creating a new one'); + } + const data = this.toBuffer(); + return (0, crypto_1.createHash)('sha256').update(data).digest(); + } + toJson() { + let retVal = { + version: this.version.toString(), + flags: this.flags.toString(), + endorsee: this.endorsee, + message: this.message, + reference: this.reference.toString('hex') + }; + if (this.metaData && Endorsement.FLAGS_HAS_METADATA.and(this.flags).gt(new bn_js_1.BN(0))) { + retVal['metadata'] = this.metaData.toJson(); + } + if (this.signature && Endorsement.FLAGS_HAS_SIGNATURE.and(this.flags).gt(new bn_js_1.BN(0))) { + retVal['signature'] = this.signature.toJson(); + } + if (this.txid && Endorsement.FLAGS_HAS_TXID.and(this.flags).gt(new bn_js_1.BN(0))) { + retVal['txid'] = this.txid.toString('hex'); + } + return retVal; + } + static fromJson(json) { + const flags = new bn_js_1.BN(json.flags || 0, 10); + let metaData = null; + if (json.metadata && Endorsement.FLAGS_HAS_METADATA.and(flags).gt(new bn_js_1.BN(0))) { + metaData = VdxfUniValue_1.VdxfUniValue.fromJson(json.metadata); + } + let signature = null; + if (json.signature && Endorsement.FLAGS_HAS_SIGNATURE.and(flags).gt(new bn_js_1.BN(0))) { + signature = SignatureData_1.SignatureData.fromJson(json.signature); + } + let txid = Buffer.alloc(0); + if (json.txid) { + txid = Buffer.from(json.txid, 'hex'); + } + return new Endorsement({ + version: new bn_js_1.BN(json.version, 10), + flags, + endorsee: json.endorsee, + message: json.message, + reference: Buffer.from(json.reference, 'hex'), + metaData, + signature, + txid + }); + } +} +exports.Endorsement = Endorsement; +Endorsement.VERSION_INVALID = new bn_js_1.BN(0, 10); +Endorsement.VERSION_FIRST = new bn_js_1.BN(1, 10); +Endorsement.VERSION_LAST = new bn_js_1.BN(1, 10); +Endorsement.VERSION_CURRENT = new bn_js_1.BN(1, 10); +Endorsement.FLAGS_HAS_METADATA = new bn_js_1.BN(1, 10); +Endorsement.FLAGS_HAS_SIGNATURE = new bn_js_1.BN(2, 10); +Endorsement.FLAGS_HAS_TXID = new bn_js_1.BN(4, 10); +Endorsement.FLAGS_HAS_MESSAGE = new bn_js_1.BN(8, 10); diff --git a/dist/vdxf/classes/index.d.ts b/dist/vdxf/classes/index.d.ts index aef658ea..2b2b3b6e 100644 --- a/dist/vdxf/classes/index.d.ts +++ b/dist/vdxf/classes/index.d.ts @@ -30,3 +30,6 @@ export { RedirectUri, Subject, ProvisioningInfo, RequestedPermission, Audience, export { ProvisioningTxid } from './provisioning/ProvisioningResult'; export { Context } from './Context'; export { DataCategory } from './PersonalProfile'; +export * from './attestation/InformationRequest'; +export * from './attestation/AttestationDetails'; +export * from './endorsement/Endorsement'; diff --git a/dist/vdxf/classes/index.js b/dist/vdxf/classes/index.js index f84172ee..cacacdeb 100644 --- a/dist/vdxf/classes/index.js +++ b/dist/vdxf/classes/index.js @@ -62,3 +62,6 @@ var Context_1 = require("./Context"); Object.defineProperty(exports, "Context", { enumerable: true, get: function () { return Context_1.Context; } }); var PersonalProfile_1 = require("./PersonalProfile"); Object.defineProperty(exports, "DataCategory", { enumerable: true, get: function () { return PersonalProfile_1.DataCategory; } }); +__exportStar(require("./attestation/InformationRequest"), exports); +__exportStar(require("./attestation/AttestationDetails"), exports); +__exportStar(require("./endorsement/Endorsement"), exports); diff --git a/dist/vdxf/keys.d.ts b/dist/vdxf/keys.d.ts index 343f642b..1e354393 100644 --- a/dist/vdxf/keys.d.ts +++ b/dist/vdxf/keys.d.ts @@ -72,3 +72,4 @@ export declare const DATA_TYPE_OBJECT_CREDENTIAL: VDXFKeyInterface; export declare const IDENTITY_CREDENTIALS: VDXFKeyInterface; export declare const IDENTITY_CREDENTIAL_PLAINLOGIN: VDXFKeyInterface; export declare const IDENTITY_CREDENTIAL_USERNAME: VDXFKeyInterface; +export declare const ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS: VDXFKeyInterface; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index 667f24c7..840afd20 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -514,3 +514,12 @@ exports.IDENTITY_CREDENTIAL_USERNAME = { name: "vrsc::identity.credential.username" }, }; +exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = { + "vdxfid": "i4BWC5Lr7gAT7KzyDx82Ye5DeFQD8ckcXe", + "indexid": "x91cesmvxzP7jVt15dnBX2bkfuRDya9TPq", + "hash160result": "3c520f0bde6be181461ebbff11bce396a604c007", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::attestation.view.request.multipleattestations" + } +}; diff --git a/src/__tests__/utils/informationrequest.test.ts b/src/__tests__/utils/informationrequest.test.ts new file mode 100644 index 00000000..2f8c6541 --- /dev/null +++ b/src/__tests__/utils/informationrequest.test.ts @@ -0,0 +1,545 @@ +import { RequestItem, RequestInformation, RequestedFormatFlags, InformationType } from "../../vdxf/classes/attestation/InformationRequest"; +import { BN } from "bn.js"; + +describe('Information Request Tests', () => { + const testAttestationKey = {"iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Valu Proof of Life"}; + const testRequestedKeys = ["iPzSt64gwsqmxcz3Ht7zhMngLC6no6S74K", "i6E3RQUUX3jt8CkizuLX6ihZHTegCmmbj4"]; + const testSigner = "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB"; + + describe('RequestItem Tests', () => { + test('should create RequestItem with default values', () => { + const requestItem = new RequestItem(); + + expect(requestItem.version.toNumber()).toBe(1); + expect(requestItem.format.toNumber()).toBe(1); // FULL_DATA + expect(requestItem.type.toNumber()).toBe(1); // ATTESTATION + expect(requestItem.id).toEqual({}); + expect(requestItem.signer).toBe(''); + expect(requestItem.requestedkeys).toEqual([]); + }); + + test('should create RequestItem with provided values', () => { + const testItem = new RequestItem(); + testItem.version = new BN(1); + testItem.format = new BN(RequestedFormatFlags.FULL_DATA); + testItem.type = new BN(InformationType.ATTESTATION); + testItem.id = testAttestationKey; + testItem.signer = testSigner; + testItem.requestedkeys = testRequestedKeys; + + const requestItem = new RequestItem(testItem); + + expect(requestItem.version.toNumber()).toBe(1); + expect(requestItem.format.toNumber()).toBe(RequestedFormatFlags.FULL_DATA); + expect(requestItem.type.toNumber()).toBe(InformationType.ATTESTATION); + expect(requestItem.id).toEqual(testAttestationKey); + expect(requestItem.signer).toBe(testSigner); + expect(requestItem.requestedkeys).toEqual(testRequestedKeys); + }); + + test('should validate format correctly - FULL_DATA', () => { + const requestItem = new RequestItem(); + requestItem.format = new BN(RequestedFormatFlags.FULL_DATA); + + expect(requestItem.isFormatValid()).toBe(true); + }); + + test('should validate format correctly - PARTIAL_DATA', () => { + const requestItem = new RequestItem(); + requestItem.format = new BN(RequestedFormatFlags.PARTIAL_DATA); + + expect(requestItem.isFormatValid()).toBe(true); + }); + + test('should validate format correctly - FULL_DATA | COLLECTION (5)', () => { + const requestItem = new RequestItem(); + requestItem.format = new BN(RequestedFormatFlags.FULL_DATA | RequestedFormatFlags.COLLECTION); + + expect(requestItem.isFormatValid()).toBe(true); + }); + + test('should validate format correctly - PARTIAL_DATA | COLLECTION (6)', () => { + const requestItem = new RequestItem(); + requestItem.format = new BN(RequestedFormatFlags.PARTIAL_DATA | RequestedFormatFlags.COLLECTION); + + expect(requestItem.isFormatValid()).toBe(true); + }); + + test('should reject invalid format - FULL_DATA | PARTIAL_DATA (3)', () => { + const requestItem = new RequestItem(); + requestItem.format = new BN(RequestedFormatFlags.FULL_DATA | RequestedFormatFlags.PARTIAL_DATA); + + expect(requestItem.isFormatValid()).toBe(false); + }); + + test('should reject invalid format - random value (7)', () => { + const requestItem = new RequestItem(); + requestItem.format = new BN(7); + + expect(requestItem.isFormatValid()).toBe(false); + }); + + test('should serialize and deserialize to buffer correctly', () => { + const requestItem = new RequestItem(); + requestItem.version = new BN(1); + requestItem.format = new BN(RequestedFormatFlags.PARTIAL_DATA); + requestItem.type = new BN(InformationType.ATTESTATION); + requestItem.id = testAttestationKey; + requestItem.signer = testSigner; + requestItem.requestedkeys = testRequestedKeys; + + // Serialize to buffer + const buffer = requestItem.toBuffer(); + expect(buffer).toBeInstanceOf(Buffer); + + // Deserialize from buffer + const deserializedItem = new RequestItem(); + const bytesRead = deserializedItem.fromBuffer(buffer); + + expect(bytesRead).toBeGreaterThan(0); + expect(deserializedItem.version.toNumber()).toBe(1); + expect(deserializedItem.format.toNumber()).toBe(RequestedFormatFlags.PARTIAL_DATA); + expect(deserializedItem.type.toNumber()).toBe(InformationType.ATTESTATION); + expect(deserializedItem.id).toEqual(testAttestationKey); + expect(deserializedItem.signer).toBe(testSigner); + expect(deserializedItem.requestedkeys).toEqual(testRequestedKeys); + }); + + test('should serialize and deserialize to JSON correctly', () => { + const requestItem = new RequestItem(); + requestItem.version = new BN(1); + requestItem.format = new BN(RequestedFormatFlags.FULL_DATA | RequestedFormatFlags.COLLECTION); + requestItem.type = new BN(InformationType.CREDENTIAL); + requestItem.id = testAttestationKey; + requestItem.signer = testSigner; + requestItem.requestedkeys = testRequestedKeys; + + // Serialize to JSON + const json = requestItem.toJSON(); + expect(json).toEqual({ + version: 1, + format: RequestedFormatFlags.FULL_DATA | RequestedFormatFlags.COLLECTION, + type: InformationType.CREDENTIAL, + id: testAttestationKey, + signer: testSigner, + requestedkeys: testRequestedKeys + }); + + // Deserialize from JSON + const deserializedItem = new RequestItem(); + deserializedItem.fromJSON(json); + + expect(deserializedItem.version.toNumber()).toBe(1); + expect(deserializedItem.format.toNumber()).toBe(RequestedFormatFlags.FULL_DATA | RequestedFormatFlags.COLLECTION); + expect(deserializedItem.type.toNumber()).toBe(InformationType.CREDENTIAL); + expect(deserializedItem.id).toEqual(testAttestationKey); + expect(deserializedItem.signer).toBe(testSigner); + expect(deserializedItem.requestedkeys).toEqual(testRequestedKeys); + }); + + test('should calculate byte length correctly', () => { + const requestItem = new RequestItem(); + requestItem.version = new BN(1); + requestItem.format = new BN(RequestedFormatFlags.FULL_DATA); + requestItem.type = new BN(InformationType.ATTESTATION); + requestItem.id = testAttestationKey; + requestItem.signer = testSigner; + requestItem.requestedkeys = testRequestedKeys; + + const byteLength = requestItem.getByteLength(); + const buffer = requestItem.toBuffer(); + + expect(buffer.length).toBe(byteLength); + }); + + test('should handle empty id object', () => { + const requestItem = new RequestItem(); + requestItem.id = {}; + requestItem.signer = testSigner; + + const buffer = requestItem.toBuffer(); + const deserializedItem = new RequestItem(); + deserializedItem.fromBuffer(buffer); + + expect(deserializedItem.id).toEqual({}); + expect(deserializedItem.signer).toBe(testSigner); + }); + + test('should handle complex id object', () => { + const complexId = { + "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Valu Proof of Life", + "iAnotherKey123": "Another Value", + "iThirdKey456": "Third Value" + }; + + const requestItem = new RequestItem(); + requestItem.id = complexId; + requestItem.signer = testSigner; + + const buffer = requestItem.toBuffer(); + const deserializedItem = new RequestItem(); + deserializedItem.fromBuffer(buffer); + + expect(deserializedItem.id).toEqual(complexId); + expect(deserializedItem.signer).toBe(testSigner); + }); + }); + + describe('RequestInformation Tests', () => { + test('should create RequestInformation with items', () => { + // Create test items + const item1 = new RequestItem(); + item1.format = new BN(RequestedFormatFlags.FULL_DATA); + item1.type = new BN(InformationType.ATTESTATION); + item1.id = testAttestationKey; + item1.signer = testSigner; + item1.requestedkeys = testRequestedKeys; + + const item2 = new RequestItem(); + item2.format = new BN(RequestedFormatFlags.PARTIAL_DATA); + item2.type = new BN(InformationType.CLAIM); + item2.id = {"iAnotherAttestation": "Another Value"}; + item2.signer = testSigner; + item2.requestedkeys = ["iSomeOtherKey"]; + + const requestInfo = new RequestInformation({ + version: new BN(1), + items: [item1, item2] + } as any); + + expect(requestInfo.version.toNumber()).toBe(1); + expect(requestInfo.items.length).toBe(2); + }); + + test('should serialize and deserialize to JSON correctly', () => { + const item = new RequestItem(); + item.format = new BN(RequestedFormatFlags.FULL_DATA); + item.type = new BN(InformationType.ATTESTATION); + item.id = testAttestationKey; + item.signer = testSigner; + item.requestedkeys = testRequestedKeys; + + const requestInfo = new RequestInformation({ + version: new BN(1), + items: [item] + } as any); + + // Test toJSON + const json = requestInfo.toJSON(); + expect(json.version).toBe(1); + expect(json.items.length).toBe(1); + expect(json.items[0].id).toEqual(testAttestationKey); + expect(json.items[0].signer).toBe(testSigner); + expect(json.items[0].requestedkeys).toEqual(testRequestedKeys); + + // Test fromJSON + const newRequestInfo = new RequestInformation({} as any); + newRequestInfo.fromJSON(json); + + expect(newRequestInfo.version.toNumber()).toBe(1); + expect(newRequestInfo.items.length).toBe(1); + expect(newRequestInfo.items[0].id).toEqual(testAttestationKey); + expect(newRequestInfo.items[0].signer).toBe(testSigner); + expect(newRequestInfo.items[0].requestedkeys).toEqual(testRequestedKeys); + }); + + test('should serialize and deserialize to buffer correctly', () => { + const item1 = new RequestItem(); + item1.format = new BN(RequestedFormatFlags.FULL_DATA); + item1.type = new BN(InformationType.ATTESTATION); + item1.id = testAttestationKey; + item1.signer = testSigner; + item1.requestedkeys = testRequestedKeys; + + const item2 = new RequestItem(); + item2.format = new BN(RequestedFormatFlags.PARTIAL_DATA | RequestedFormatFlags.COLLECTION); + item2.type = new BN(InformationType.CREDENTIAL); + item2.id = {"iSecondAttestation": "Second Value"}; + item2.signer = "iAnotherSigner123"; + item2.requestedkeys = ["iOneMoreKey"]; + + const requestInfo = new RequestInformation({ + version: new BN(1), + items: [item1, item2] + } as any); + + // Serialize to buffer + const buffer = requestInfo.toBuffer(); + expect(buffer).toBeInstanceOf(Buffer); + + // Deserialize from buffer + const deserializedInfo = new RequestInformation({} as any); + const bytesRead = deserializedInfo.fromBuffer(buffer); + + expect(bytesRead).toBeGreaterThan(0); + expect(deserializedInfo.version.toNumber()).toBe(1); + expect(deserializedInfo.items.length).toBe(2); + + // Verify first item + expect(deserializedInfo.items[0].format.toNumber()).toBe(RequestedFormatFlags.FULL_DATA); + expect(deserializedInfo.items[0].type.toNumber()).toBe(InformationType.ATTESTATION); + expect(deserializedInfo.items[0].id).toEqual(testAttestationKey); + expect(deserializedInfo.items[0].signer).toBe(testSigner); + expect(deserializedInfo.items[0].requestedkeys).toEqual(testRequestedKeys); + + // Verify second item + expect(deserializedInfo.items[1].format.toNumber()).toBe(RequestedFormatFlags.PARTIAL_DATA | RequestedFormatFlags.COLLECTION); + expect(deserializedInfo.items[1].type.toNumber()).toBe(InformationType.CREDENTIAL); + expect(deserializedInfo.items[1].id).toEqual({"iSecondAttestation": "Second Value"}); + expect(deserializedInfo.items[1].signer).toBe("iAnotherSigner123"); + expect(deserializedInfo.items[1].requestedkeys).toEqual(["iOneMoreKey"]); + }); + + test('should validate correctly with valid items', () => { + const item = new RequestItem(); + item.format = new BN(RequestedFormatFlags.FULL_DATA); + item.type = new BN(InformationType.ATTESTATION); + item.id = testAttestationKey; + item.signer = testSigner; + + const requestInfo = new RequestInformation({ + version: new BN(1), + items: [item] + } as any); + + expect(requestInfo.isValid()).toBe(true); + }); + + test('should calculate byte length correctly', () => { + const item = new RequestItem(); + item.format = new BN(RequestedFormatFlags.FULL_DATA); + item.type = new BN(InformationType.ATTESTATION); + item.id = testAttestationKey; + item.signer = testSigner; + item.requestedkeys = testRequestedKeys; + + const requestInfo = new RequestInformation({ + version: new BN(1), + items: [item] + } as any); + + const byteLength = requestInfo.getByteLength(); + const buffer = requestInfo.toBuffer(); + + expect(buffer.length).toBe(byteLength); + }); + }); + + describe('Round-trip Tests', () => { + test('should maintain data integrity through multiple serialization formats', () => { + // Create original request item + const originalItem = new RequestItem(); + originalItem.version = new BN(1); + originalItem.format = new BN(RequestedFormatFlags.PARTIAL_DATA | RequestedFormatFlags.COLLECTION); + originalItem.type = new BN(InformationType.CREDENTIAL); + originalItem.id = testAttestationKey; + originalItem.signer = testSigner; + originalItem.requestedkeys = testRequestedKeys; + + // JSON round-trip + const json = originalItem.toJSON(); + const fromJsonItem = new RequestItem(); + fromJsonItem.fromJSON(json); + + // Buffer round-trip from JSON-restored item + const buffer = fromJsonItem.toBuffer(); + const fromBufferItem = new RequestItem(); + fromBufferItem.fromBuffer(buffer); + + // Verify all data is preserved + expect(fromBufferItem.version.toNumber()).toBe(originalItem.version.toNumber()); + expect(fromBufferItem.format.toNumber()).toBe(originalItem.format.toNumber()); + expect(fromBufferItem.type.toNumber()).toBe(originalItem.type.toNumber()); + expect(fromBufferItem.id).toEqual(originalItem.id); + expect(fromBufferItem.signer).toBe(originalItem.signer); + expect(fromBufferItem.requestedkeys).toEqual(originalItem.requestedkeys); + }); + + test('should handle buffer round-trip with hex string', () => { + const requestItem = new RequestItem(); + requestItem.version = new BN(1); + requestItem.format = new BN(RequestedFormatFlags.FULL_DATA); + requestItem.type = new BN(InformationType.ATTESTATION); + requestItem.id = testAttestationKey; + requestItem.signer = testSigner; + requestItem.requestedkeys = testRequestedKeys; + + // Serialize to buffer and convert to hex + const buffer = requestItem.toBuffer(); + const hexString = buffer.toString('hex'); + + // Reconstruct from hex and verify + const reconstructedBuffer = Buffer.from(hexString, 'hex'); + const reconstructedItem = new RequestItem(); + reconstructedItem.fromBuffer(reconstructedBuffer); + + expect(reconstructedItem.id).toEqual(testAttestationKey); + expect(reconstructedItem.signer).toBe(testSigner); + expect(reconstructedItem.requestedkeys).toEqual(testRequestedKeys); + expect(reconstructedItem.format.toNumber()).toBe(RequestedFormatFlags.FULL_DATA); + expect(reconstructedItem.type.toNumber()).toBe(InformationType.ATTESTATION); + }); + + test('should deserialize from known hex string - RequestItem with test data', () => { + // Create original item with test data + const originalItem = new RequestItem(); + originalItem.version = new BN(1); + originalItem.format = new BN(RequestedFormatFlags.PARTIAL_DATA | RequestedFormatFlags.COLLECTION); // 6 + originalItem.type = new BN(InformationType.CREDENTIAL); // 3 + originalItem.id = testAttestationKey; + originalItem.signer = testSigner; + originalItem.requestedkeys = testRequestedKeys; + + // Generate the hex string + const originalBuffer = originalItem.toBuffer(); + const hexString = originalBuffer.toString('hex'); + + // Deserialize from the hex string + const buffer = Buffer.from(hexString, 'hex'); + const deserializedItem = new RequestItem(); + deserializedItem.fromBuffer(buffer); + + // Verify all fields match exactly + expect(deserializedItem.version.toNumber()).toBe(1); + expect(deserializedItem.format.toNumber()).toBe(6); // PARTIAL_DATA | COLLECTION + expect(deserializedItem.type.toNumber()).toBe(3); // CREDENTIAL + expect(deserializedItem.id).toEqual(testAttestationKey); + expect(deserializedItem.signer).toBe(testSigner); + expect(deserializedItem.requestedkeys).toEqual(testRequestedKeys); + + // Verify round-trip integrity - serialize again and compare + const reserializedBuffer = deserializedItem.toBuffer(); + expect(reserializedBuffer.toString('hex')).toBe(hexString); + }); + + test('should deserialize from known hex string - RequestInformation with multiple items', () => { + // Create first item + const item1 = new RequestItem(); + item1.version = new BN(1); + item1.format = new BN(RequestedFormatFlags.FULL_DATA); + item1.type = new BN(InformationType.ATTESTATION); + item1.id = testAttestationKey; + item1.signer = testSigner; + item1.requestedkeys = testRequestedKeys; + + // Create second item with different data + const item2 = new RequestItem(); + item2.version = new BN(1); + item2.format = new BN(RequestedFormatFlags.PARTIAL_DATA); + item2.type = new BN(InformationType.CLAIM); + item2.id = {"iSecondKey": "Second Value", "iThirdKey": "Third Value"}; + item2.signer = "iAnotherSigner123456789"; + item2.requestedkeys = ["iKey1", "iKey2", "iKey3"]; + + // Create RequestInformation + const originalInfo = new RequestInformation({ + version: new BN(1), + items: [item1, item2] + } as any); + + // Generate hex string + const originalBuffer = originalInfo.toBuffer(); + const hexString = originalBuffer.toString('hex'); + + // Deserialize from hex string + const buffer = Buffer.from(hexString, 'hex'); + const deserializedInfo = new RequestInformation({} as any); + deserializedInfo.fromBuffer(buffer); + + // Verify structure + expect(deserializedInfo.version.toNumber()).toBe(1); + expect(deserializedInfo.items.length).toBe(2); + + // Verify first item + const firstItem = deserializedInfo.items[0]; + expect(firstItem.version.toNumber()).toBe(1); + expect(firstItem.format.toNumber()).toBe(RequestedFormatFlags.FULL_DATA); + expect(firstItem.type.toNumber()).toBe(InformationType.ATTESTATION); + expect(firstItem.id).toEqual(testAttestationKey); + expect(firstItem.signer).toBe(testSigner); + expect(firstItem.requestedkeys).toEqual(testRequestedKeys); + + // Verify second item + const secondItem = deserializedInfo.items[1]; + expect(secondItem.version.toNumber()).toBe(1); + expect(secondItem.format.toNumber()).toBe(RequestedFormatFlags.PARTIAL_DATA); + expect(secondItem.type.toNumber()).toBe(InformationType.CLAIM); + expect(secondItem.id).toEqual({"iSecondKey": "Second Value", "iThirdKey": "Third Value"}); + expect(secondItem.signer).toBe("iAnotherSigner123456789"); + expect(secondItem.requestedkeys).toEqual(["iKey1", "iKey2", "iKey3"]); + + // Verify round-trip integrity + const reserializedBuffer = deserializedInfo.toBuffer(); + expect(reserializedBuffer.toString('hex')).toBe(hexString); + }); + + test('should handle edge cases in hex deserialization', () => { + // Test with minimal data + const minimalItem = new RequestItem(); + minimalItem.version = new BN(1); + minimalItem.format = new BN(RequestedFormatFlags.FULL_DATA); + minimalItem.type = new BN(InformationType.ATTESTATION); + minimalItem.id = {}; + minimalItem.signer = ""; + minimalItem.requestedkeys = []; + + const minimalBuffer = minimalItem.toBuffer(); + const minimalHex = minimalBuffer.toString('hex'); + + // Deserialize minimal case + const deserializedMinimal = new RequestItem(); + deserializedMinimal.fromBuffer(Buffer.from(minimalHex, 'hex')); + + expect(deserializedMinimal.version.toNumber()).toBe(1); + expect(deserializedMinimal.format.toNumber()).toBe(RequestedFormatFlags.FULL_DATA); + expect(deserializedMinimal.type.toNumber()).toBe(InformationType.ATTESTATION); + expect(deserializedMinimal.id).toEqual({}); + expect(deserializedMinimal.signer).toBe(""); + expect(deserializedMinimal.requestedkeys).toEqual([]); + + // Verify round-trip + const reserializedMinimal = deserializedMinimal.toBuffer(); + expect(reserializedMinimal.toString('hex')).toBe(minimalHex); + }); + + test('should deserialize from hardcoded hex string with test data', () => { + // This hex string represents a RequestItem with: + // - version: 1, format: 6 (PARTIAL_DATA | COLLECTION), type: 3 (CREDENTIAL) + // - id: {"iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Valu Proof of Life"} + // - signer: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB" + // - requestedkeys: ["iPzSt64gwsqmxcz3Ht7zhMngLC6no6S74K", "i6E3RQUUX3jt8CkizuLX6ihZHTegCmmbj4"] + const knownHexString = "0106033b7b226945456a566b764d394e697a3475325743723651517a78317a705653764446756231223a2256616c752050726f6f66206f66204c696665227d22694b6a725443776f5046526b3434664169326e594e62504731365a55516a76314e42022269507a53743634677773716d78637a334874377a684d6e674c43366e6f365337344b22693645335251555558336a7438436b697a754c583669685a48546567436d6d626a34"; + + // Deserialize from known hex string + const buffer = Buffer.from(knownHexString, 'hex'); + const deserializedItem = new RequestItem(); + deserializedItem.fromBuffer(buffer); + + // Verify all expected values + expect(deserializedItem.version.toNumber()).toBe(1); + expect(deserializedItem.format.toNumber()).toBe(6); // PARTIAL_DATA | COLLECTION + expect(deserializedItem.type.toNumber()).toBe(3); // CREDENTIAL + expect(deserializedItem.id).toEqual(testAttestationKey); + expect(deserializedItem.signer).toBe(testSigner); + expect(deserializedItem.requestedkeys).toEqual(testRequestedKeys); + + // Verify format validation passes + expect(deserializedItem.isFormatValid()).toBe(true); + + // Verify we can serialize back to the same hex string + const reserializedBuffer = deserializedItem.toBuffer(); + expect(reserializedBuffer.toString('hex')).toBe(knownHexString); + + // Verify JSON output + const json = deserializedItem.toJSON(); + expect(json).toEqual({ + version: 1, + format: 6, + type: 3, + id: testAttestationKey, + signer: testSigner, + requestedkeys: testRequestedKeys + }); + }); + }); +}); diff --git a/src/__tests__/vdxf/endorsement.test.ts b/src/__tests__/vdxf/endorsement.test.ts new file mode 100644 index 00000000..e5bf1f94 --- /dev/null +++ b/src/__tests__/vdxf/endorsement.test.ts @@ -0,0 +1,40 @@ + +import { Endorsement, ENDORSEMENT_SKILL } from "../../vdxf/classes/endorsement/Endorsement"; + + +describe('Serializes and deserializes Endorsement', () => { + test('(de)serialize Endorsement', () => { + + const endorsementJson = { + version: 1, + endorsee: "candidate.vrsctest@", + reference: "f0e88c0a40e1681634faa6e6b23d5c60b413a4669817df55574a47086dd7e924", //blockchain txid + txid: "493a5f8b457a44beb7ae0c9399192448b6e2576f399aff11c63228481628a8b7" //claim ref inside the txid + } + + const e = Endorsement.fromJson(endorsementJson); + const r = e.toBuffer(); + const rFromBuf = new Endorsement; + rFromBuf.fromBuffer(r); + + expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) + }); + test('create Endorsement Identity Update', async () => { + + const endorsementJson = { + version: 1, + endorsee: "candidate.vrsctest@", + reference: "d425c5dfd8074260a2143e31382a25f3eb82a9eecd21dc63f025bff37cbd3628", + txid: "dcf012d856fead4d729b1e5f1b829e23e9198fb288e6c990f1d7ea9fb12c28a7" //claim ref inside the txid + } + + const e = Endorsement.fromJson(endorsementJson); + + const hash = e.createHash("endorsetest@"); + + e.setFlags(); + + expect(() => e.toIdentityUpdateJson(ENDORSEMENT_SKILL)).toThrow("Signature is required"); + + }); +}); \ No newline at end of file diff --git a/src/pbaas/DataDescriptor.ts b/src/pbaas/DataDescriptor.ts index 735e1ee0..63889442 100644 --- a/src/pbaas/DataDescriptor.ts +++ b/src/pbaas/DataDescriptor.ts @@ -66,6 +66,7 @@ export class DataDescriptor implements SerializableEntity { }) { this.flags = new BN(0); this.version = DataDescriptor.DEFAULT_VERSION; + this.objectdata = Buffer.from([]); if (data != null) { if (data.flags != null) this.flags = data.flags @@ -314,7 +315,7 @@ export class DataDescriptor implements SerializableEntity { processedObject.fromBuffer(this.objectdata); - if (processedObject.values[0][""]) { + if (processedObject.values[0]?.[""]) { const keys = Object.keys(processedObject.values[0]); const values = Object.values(processedObject.values[0]); diff --git a/src/vdxf/classes/attestation/AttestationDetails.ts b/src/vdxf/classes/attestation/AttestationDetails.ts index ef8eb122..7c558430 100644 --- a/src/vdxf/classes/attestation/AttestationDetails.ts +++ b/src/vdxf/classes/attestation/AttestationDetails.ts @@ -408,6 +408,7 @@ export class AttestationDetails implements SerializableEntity { } toJson(): AttestationDetailsJson { + this.setFlags(); // Ensure flags are set before converting to JSON const retval: AttestationDetailsJson = { version: this.version.toNumber(), attestations: this.attestations.map((attestation) => attestation.toJson()) diff --git a/src/vdxf/classes/attestation/InformationRequest.ts b/src/vdxf/classes/attestation/InformationRequest.ts new file mode 100644 index 00000000..c0e6a204 --- /dev/null +++ b/src/vdxf/classes/attestation/InformationRequest.ts @@ -0,0 +1,248 @@ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { BN } from 'bn.js'; +import varint from '../../../utils/varint'; +import varuint from '../../../utils/varuint'; +import bufferutils from '../../../utils/bufferutils'; +const { BufferReader, BufferWriter } = bufferutils; + +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; + + +export enum RequestedFormatFlags{ + FULL_DATA = 1, // Whole Credential + PARTIAL_DATA = 2, // Particular leaf + proof + signature + COLLECTION = 4 // Multiple FULL_DATA only +} + +export enum InformationType { + ATTESTATION = 1, + CLAIM = 2, + CREDENTIAL = 3 +} + +export interface RequestItemJson { + version: number; + format: RequestedFormatFlags; + type: InformationType; + id: {[key: string]: string}; // ID object of the specific information requested + signer: string; + requestedkeys?: string[]; +} + + +export interface IdentityInformationRequestJson { + version: number; + items: RequestItemJson[]; +} +export class RequestItem implements SerializableEntity { + + static VERSION_INVALID = new BN(0); + static FIRST_VERSION = new BN(1); + static LAST_VERSION = new BN(1); + static DEFAULT_VERSION = new BN(1); + + static FULL_DATA = new BN(1); + static PARTIAL_DATA = new BN(2); + static COLLECTION = new BN(4); + + static ATTESTATION = new BN(1); + static CLAIM = new BN(2); + static CREDENTIAL = new BN(3); + + version: BigNumber; + format: BigNumber; + type: BigNumber; + id: {[key: string]: string}; + signer: string; + requestedkeys?: string[]; + + constructor(json?: RequestItem) { + this.version = json?.version || RequestItem.DEFAULT_VERSION; + this.format = json?.format || RequestItem.FULL_DATA; + this.type = json?.type || RequestItem.ATTESTATION; + this.id = json?.id || {}; + this.signer = json?.signer || ''; + this.requestedkeys = json?.requestedkeys || []; + } + + isFormatValid(): boolean { + // Allowed values: 1 (FULL), 2 (PARTIAL), 5 (FULL|COLLECTION), 6 (PARTIAL|COLLECTION) + const f = this.format; + return ( + f.eq(RequestItem.FULL_DATA) || + f.eq(RequestItem.PARTIAL_DATA) || + f.eq(RequestItem.FULL_DATA.or(RequestItem.COLLECTION)) || + f.eq(RequestItem.PARTIAL_DATA.or(RequestItem.COLLECTION)) + ); + } + + isValid(): boolean { + let valid = this.version.gte(RequestInformation.FIRST_VERSION) && this.version.lte(RequestInformation.LAST_VERSION); + valid &&= this.isFormatValid(); + valid &&= (this.type.gte(RequestItem.ATTESTATION) && this.type.lte(RequestItem.CREDENTIAL)); + return valid; + } + + getByteLength(): number { + let length = 0; + length += varint.encodingLength(this.version); + length += varint.encodingLength(this.format); + length += varint.encodingLength(this.type); + + // Serialize id object as JSON string + const idJson = JSON.stringify(this.id); + length += varuint.encodingLength(Buffer.byteLength(idJson, 'utf8')); + length += Buffer.byteLength(idJson, 'utf8'); + + // Add signer length + length += varuint.encodingLength(Buffer.byteLength(this.signer, 'utf8')); + length += Buffer.byteLength(this.signer, 'utf8'); + + length += varuint.encodingLength(this.requestedkeys ? this.requestedkeys.length : 0); + if (this.requestedkeys) { + for (const key of this.requestedkeys) { + length += varuint.encodingLength(Buffer.byteLength(key, 'utf8')); + length += Buffer.byteLength(key, 'utf8'); + } + } + return length; + } + + toBuffer(): Buffer { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeVarInt(this.version); + writer.writeVarInt(this.format); + writer.writeVarInt(this.type); + + // Serialize id object as JSON string + const idJson = JSON.stringify(this.id); + writer.writeVarSlice(Buffer.from(idJson, 'utf8')); + + // Write signer + writer.writeVarSlice(Buffer.from(this.signer, 'utf8')); + + writer.writeCompactSize(this.requestedkeys ? this.requestedkeys.length : 0); + if (this.requestedkeys) { + for (const key of this.requestedkeys) { + writer.writeVarSlice(Buffer.from(key, 'utf8')); + } + } + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset?: number): number { + const reader = new BufferReader(buffer, offset); + this.version = reader.readVarInt(); + this.format = reader.readVarInt(); + this.type = reader.readVarInt(); + + // Deserialize id object from JSON string + const idJsonString = reader.readVarSlice().toString('utf8'); + this.id = JSON.parse(idJsonString); + + // Read signer + this.signer = reader.readVarSlice().toString('utf8'); + + this.requestedkeys = []; + const requestedKeysLength = reader.readCompactSize(); + for (let i = 0; i < requestedKeysLength; i++) { + this.requestedkeys.push(reader.readVarSlice().toString('utf8')); + } + return reader.offset; + } + + toJSON(): RequestItemJson { + return { + version: this.version.toNumber(), + format: this.format.toNumber(), + type: this.type.toNumber(), + id: this.id, + signer: this.signer, + requestedkeys: this.requestedkeys + }; + } + + fromJSON(json: RequestItemJson): void { + this.version = new BN(json.version); + this.format = new BN(json.format); + this.type = new BN(json.type); + this.id = json.id; + this.signer = json.signer; + this.requestedkeys = json.requestedkeys || []; + } +} + +export class RequestInformation implements SerializableEntity { + static VERSION_INVALID = new BN(0); + static FIRST_VERSION = new BN(1); + static LAST_VERSION = new BN(1); + static DEFAULT_VERSION = new BN(1); + + version: BigNumber; + items: RequestItem[]; + + constructor(data: RequestInformation) { + this.version = data?.version ? new BN(data.version) : RequestInformation.DEFAULT_VERSION; + this.items = data?.items || []; + } + + isValid(): boolean { + let valid = this.version.gte(RequestInformation.FIRST_VERSION) && this.version.lte(RequestInformation.LAST_VERSION); + valid &&= this.items.every(item => { + return item.isValid(); + }); + return valid; + } + + getByteLength(): number { + let length = 0; + length += varint.encodingLength(this.version); + length += varuint.encodingLength(this.items.length); + for (const item of this.items) { + length += item.getByteLength(); + } + return length; + } + + toBuffer(): Buffer { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeVarInt(this.version); + writer.writeCompactSize(this.items ? this.items.length : 0); + if (this.items) { + for (const item of this.items) { + const itemBuffer = item.toBuffer(); + writer.writeSlice(itemBuffer); + } + } + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset?: number): number { + const reader = new BufferReader(buffer, offset); + this.version = reader.readVarInt(); + this.items = []; + const itemsLength = reader.readCompactSize(); + for (let i = 0; i < itemsLength; i++) { + const item = new RequestItem(); + reader.offset = item.fromBuffer(buffer, reader.offset); + this.items.push(item); + } + return reader.offset; + } + + toJSON(): IdentityInformationRequestJson { + return { + version: this.version.toNumber(), + items: this.items.map(item => item.toJSON()) + }; + } + + fromJSON(json: IdentityInformationRequestJson): void { + this.version = new BN(json.version); + this.items = json.items.map(itemJson => { + const item = new RequestItem(); + item.fromJSON(itemJson); + return item; + }); + } +} \ No newline at end of file diff --git a/src/vdxf/classes/endorsement/Endorsement.ts b/src/vdxf/classes/endorsement/Endorsement.ts new file mode 100644 index 00000000..cc050ebe --- /dev/null +++ b/src/vdxf/classes/endorsement/Endorsement.ts @@ -0,0 +1,324 @@ +import varuint from '../../../utils/varuint'; +import varint from '../../../utils/varint'; +import bufferutils from '../../../utils/bufferutils'; +import { BN } from 'bn.js'; +import { BigNumber } from '../../../utils/types/BigNumber'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { VdxfUniValue } from '../../../pbaas/VdxfUniValue'; +import { SignatureData, SignatureJsonDataInterface } from '../../../pbaas/SignatureData'; +import { VDXFKeyInterface } from '../../keys'; +import { createHash } from 'crypto'; + + +const { BufferReader, BufferWriter } = bufferutils + +export const ENDORSEMENT: VDXFKeyInterface = { + "vdxfid": "iDbPhzm8g7mQ94Cy2VNn7dJPVk5zcDRhPS", + "indexid": "xJRWAoCDXRz4mE5ztB2w61pvXQ71WSXnGu", + "hash160result": "dbfcb74829379cb79d39d9dbe81a76627bb8fd6e", + "qualifiedname": { + "namespace": "iNQFA8jtYe9JYq6Qr49ZxAhvWErFurWjTa", + "name": "valu.vrsc::endorsement" + } +} + +export const ENDORSEMENT_SKILL: VDXFKeyInterface = { + "vdxfid": "iBJqQMRzpCW1WVYoU2Ty2VbCJnvyTEsE1C", + "indexid": "xG8ws9s5fWig8fRqKi87zt7jLSwzNoJ3s7", + "hash160result": "309091e8f181bd19279b6cd8873aaafaf4d8eb55", + "qualifiedname": { + "namespace": "iNQFA8jtYe9JYq6Qr49ZxAhvWErFurWjTa", + "name": "valu.vrsc::endorsement.skill" + } +} + +export const ENDORSEMENT_QUALIFICATION: VDXFKeyInterface = { + "vdxfid": "iGW3WFP1h8ZDsJWLFMvTF3ZqLuiMRBK6jV", + "indexid": "xML9y3p6YSmtVUPN73acDS6NNZjNE6JbQo", + "hash160result": "d2f91effc976eee2d9574d4ab5e4f0456827e38e", + "qualifiedname": { + "namespace": "iNQFA8jtYe9JYq6Qr49ZxAhvWErFurWjTa", + "name": "valu.vrsc::endorsement.qualification" + } +} + +export const ENDORSEMENT_REFERENCE: VDXFKeyInterface = { + "vdxfid": "iArNtGt8xYWBQaDtYATfhdR1NXq1ecZgRp", + "indexid": "xFgVM5KDorir2k6vPr7pg1wYQBr2VEywYv", + "hash160result": "ebc99d117c8e67fa10dfdd6a3295d40458e5ea50", + "qualifiedname": { + "namespace": "iNQFA8jtYe9JYq6Qr49ZxAhvWErFurWjTa", + "name": "valu.vrsc::endorsement.reference" + } +} + + +export const ENDORSEMENT_PROJECT: VDXFKeyInterface = { + "vdxfid": "i7tTikSbJcLDBFpZyb8Uk3UfVjsLxz25Q4", + "indexid": "xCiaBYsg9vYsoRhbqGndiS1CXPtMpCtFg3", + "hash160result": "0ff2447acd00a1c5494156edee5481591c636730", + "qualifiedname": { + "namespace": "iNQFA8jtYe9JYq6Qr49ZxAhvWErFurWjTa", + "name": "valu.vrsc::endorsement.project" + } +} + +const ENDORSEMENT_TYPES = [ENDORSEMENT_SKILL, ENDORSEMENT_QUALIFICATION, ENDORSEMENT_REFERENCE, ENDORSEMENT_PROJECT]; + +export interface EndorsementJson { + version: number; + flags?: number; + endorsee: string; + message?: string; + reference: string; + metadata?: any; + signature?: SignatureJsonDataInterface; + txid?: string; + +} + +export class Endorsement implements SerializableEntity { + + static VERSION_INVALID = new BN(0, 10) + static VERSION_FIRST = new BN(1, 10) + static VERSION_LAST = new BN(1, 10) + static VERSION_CURRENT = new BN(1, 10) + + static FLAGS_HAS_METADATA = new BN(1, 10) + static FLAGS_HAS_SIGNATURE = new BN(2, 10) + static FLAGS_HAS_TXID = new BN(4, 10) + static FLAGS_HAS_MESSAGE = new BN(8, 10) + + version: BigNumber; + flags: BigNumber; + endorsee: string; + message: string; + reference: Buffer; + txid: Buffer; + metaData: VdxfUniValue | null; + signature: SignatureData | null; + + constructor(data: { + version?: BigNumber, flags?: BigNumber, endorsee?: string, message?: string, reference?: Buffer, metaData?: VdxfUniValue | null, + signature?: SignatureData | null, txid?: Buffer + } = {}) { + this.version = data.version || new BN(1, 10); + this.flags = data.flags || new BN(0, 10); + this.endorsee = data.endorsee || ""; + this.message = data.message || ""; + this.reference = data.reference || Buffer.alloc(0); + this.metaData = data.metaData || null; + this.signature = data.signature || null; + this.txid = data.txid || Buffer.alloc(0); + + } + + getByteLength() { + let byteLength = 0; + + byteLength += varint.encodingLength(this.version); + byteLength += varint.encodingLength(this.flags); + byteLength += varuint.encodingLength(Buffer.from(this.endorsee, 'utf-8').byteLength); + byteLength += Buffer.from(this.endorsee, 'utf-8').byteLength; + byteLength += varuint.encodingLength(this.reference.length); + byteLength += this.reference.length; + + if (this.message && this.message.length > 0) { + byteLength += varuint.encodingLength(Buffer.from(this.message, 'utf-8').byteLength); + byteLength += Buffer.from(this.message, 'utf-8').length; + } + + if (this.metaData && Endorsement.FLAGS_HAS_METADATA.and(this.flags).gt(new BN(0))) { + byteLength += this.metaData.getByteLength(); + } + + if (this.signature && Endorsement.FLAGS_HAS_SIGNATURE.and(this.flags).gt(new BN(0))) { + byteLength += this.signature.getByteLength(); + } + + if (this.txid && Endorsement.FLAGS_HAS_TXID.and(this.flags).gt(new BN(0))) { + byteLength += varuint.encodingLength(this.txid.length); + byteLength += this.txid.length; + } + + return byteLength + } + + setFlags() { + + let flags = new BN(0, 10); + + if (this.metaData) { + flags = flags.or(Endorsement.FLAGS_HAS_METADATA); + } + + if (this.signature && this.signature.isValid()) { + flags = flags.or(Endorsement.FLAGS_HAS_SIGNATURE); + } + + if (this.txid && this.txid.length == 32) { + flags = flags.or(Endorsement.FLAGS_HAS_TXID); + } + + if (this.message && this.message.length > 0) { + flags = flags.or(Endorsement.FLAGS_HAS_MESSAGE); + } + + this.flags = flags; + + } + + toBuffer() { + this.setFlags(); + const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())) + + bufferWriter.writeVarInt(this.version); + bufferWriter.writeVarInt(this.flags); + bufferWriter.writeVarSlice(Buffer.from(this.endorsee, 'utf-8')); + bufferWriter.writeVarSlice(this.reference); + + if (this.message && this.message.length > 0) { + bufferWriter.writeVarSlice(Buffer.from(this.message, 'utf-8')); + } + + if (this.metaData && Endorsement.FLAGS_HAS_METADATA.and(this.flags).gt(new BN(0))) { + bufferWriter.writeSlice(this.metaData.toBuffer()); + } + + if (this.signature && Endorsement.FLAGS_HAS_SIGNATURE.and(this.flags).gt(new BN(0))) { + bufferWriter.writeSlice(this.signature.toBuffer()); + } + + if (this.txid && Endorsement.FLAGS_HAS_TXID.and(this.flags).gt(new BN(0))) { + bufferWriter.writeVarSlice(this.txid); + } + + return bufferWriter.buffer + } + + fromBuffer(buffer: Buffer, offset: number = 0) { + const reader = new BufferReader(buffer, offset); + + this.version = reader.readVarInt(); + this.flags = reader.readVarInt(); + this.endorsee = reader.readVarSlice().toString('utf-8'); + this.reference = reader.readVarSlice(); + + if (Endorsement.FLAGS_HAS_MESSAGE.and(this.flags).gt(new BN(0))) { + this.message = reader.readVarSlice().toString('utf-8'); + } + + if (Endorsement.FLAGS_HAS_METADATA.and(this.flags).gt(new BN(0))) { + this.metaData = new VdxfUniValue(); + reader.offset = this.metaData.fromBuffer(reader.buffer, reader.offset); + } + + if (Endorsement.FLAGS_HAS_SIGNATURE.and(this.flags).gt(new BN(0))) { + this.signature = new SignatureData(); + reader.offset = this.signature.fromBuffer(reader.buffer, reader.offset); + } + + if (Endorsement.FLAGS_HAS_TXID.and(this.flags).gt(new BN(0))) { + this.txid = reader.readVarSlice(); + } + + return reader.offset; + } + + toIdentityUpdateJson(type: VDXFKeyInterface): { [key: string]: { [key: string]: [string] } } { + + const contentmultimap = {}; + + if (!type) { + throw new Error('Type is required') + } + + if (!this.signature || !this.signature.isValid()) { + throw new Error('Signature is required') + } + + if (!ENDORSEMENT_TYPES.includes(type)) { + throw new Error('Unsupported endorsement type'); + } + contentmultimap[type.vdxfid] = [{ serializedhex: this.toBuffer().toString('hex') }]; + + return { + contentmultimap: contentmultimap + } + + } + + createHash(name) { + + if (!name) { + throw new Error('Type is required') + } + + if (this.signature) { + throw new Error('Signature should be removed before creating a new one') + } + const data = this.toBuffer(); + + return createHash('sha256').update(data).digest(); + + } + + toJson() { + + let retVal = { + version: this.version.toString(), + flags: this.flags.toString(), + endorsee: this.endorsee, + message: this.message, + reference: this.reference.toString('hex') + } + + if (this.metaData && Endorsement.FLAGS_HAS_METADATA.and(this.flags).gt(new BN(0))) { + retVal['metadata'] = this.metaData.toJson(); + } + + if (this.signature && Endorsement.FLAGS_HAS_SIGNATURE.and(this.flags).gt(new BN(0))) { + retVal['signature'] = this.signature.toJson(); + } + + if (this.txid && Endorsement.FLAGS_HAS_TXID.and(this.flags).gt(new BN(0))) { + retVal['txid'] = this.txid.toString('hex'); + } + + return retVal + + } + + static fromJson(json: EndorsementJson): Endorsement { + + const flags = new BN(json.flags || 0, 10); + let metaData: VdxfUniValue | null = null; + + if (json.metadata && Endorsement.FLAGS_HAS_METADATA.and(flags).gt(new BN(0))) { + metaData = VdxfUniValue.fromJson(json.metadata); + } + + let signature: SignatureData | null = null; + + if (json.signature && Endorsement.FLAGS_HAS_SIGNATURE.and(flags).gt(new BN(0))) { + signature = SignatureData.fromJson(json.signature); + } + + let txid: Buffer = Buffer.alloc(0); + + if (json.txid) { + txid = Buffer.from(json.txid, 'hex'); + } + + return new Endorsement({ + version: new BN(json.version, 10), + flags, + endorsee: json.endorsee, + message: json.message, + reference: Buffer.from(json.reference, 'hex'), + metaData, + signature, + txid + }) + } +} \ No newline at end of file diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index 611b1437..ae577491 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -44,4 +44,7 @@ export { ProvisioningTxid } from './provisioning/ProvisioningResult' export { Context } from './Context' -export { DataCategory } from './PersonalProfile' \ No newline at end of file +export { DataCategory } from './PersonalProfile' +export * from './attestation/InformationRequest' +export * from './attestation/AttestationDetails' +export * from './endorsement/Endorsement' \ No newline at end of file diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index 1dfbfd72..60aa8c04 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -44,8 +44,8 @@ export const IDENTITY_UPDATE_RESPONSE_VDXF_KEY: VDXFKeyInterface = { "hash160result": "667802c74fbf3dd3a9693bb9aec9bef1250b2b14", "indexid": "xA9GyS1bt1WGERamNVqVrhuGvGJeYuWyNk", "qualifiedname": { - "name": "vrsc::identity.update.response", - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + "name": "vrsc::identity.update.response", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, "vdxfid": "i5KAWdaX2hHbcFhjWpBLtKNjtcHdeQFjuX" }; @@ -140,7 +140,7 @@ export const LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY: VDXFKeyInterface = { }, }; -export const LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY: VDXFKeyInterface ={ +export const LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY: VDXFKeyInterface = { vdxfid: "i8RW9fcZHh1oaAqR2fWWLCB99mfNW6Q2mQ", indexid: "xDFccU3e91EUCLiStMAfJahgBRgPHfYq74", hash160result: "fe40712687cd6f9f288e535ced75b653624f4636", @@ -385,11 +385,11 @@ export const SIGNED_SESSION_OBJECT: VDXFKeyInterface = { }; export const CURRENCY_ADDRESS: VDXFKeyInterface = { - "vdxfid":"iBy2s9cQL9RadMVPjog6bbSV5ityBxTuNR", - "hash160result":"4fb4c86b8ce18e596e28f62bc9a78f43d738255d", + "vdxfid": "iBy2s9cQL9RadMVPjog6bbSV5ityBxTuNR", + "hash160result": "4fb4c86b8ce18e596e28f62bc9a78f43d738255d", "qualifiedname": { - "namespace":"i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name":"vrsc::currency.address" + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::currency.address" } } @@ -532,12 +532,12 @@ export const IDENTITY_SIGNDATA_REQUEST: VDXFKeyInterface = { // DATA TYPES export const DATA_TYPE_STRING: VDXFKeyInterface = { - "vdxfid": "iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c", - "hash160result": "e5c061641228a399169211e666de18448b7b8bab", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.string" - }, + "vdxfid": "iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c", + "hash160result": "e5c061641228a399169211e666de18448b7b8bab", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.string" + }, }; export const DATA_TYPE_DEFINEDKEY: VDXFKeyInterface = { @@ -593,4 +593,14 @@ export const IDENTITY_CREDENTIAL_USERNAME: VDXFKeyInterface = { namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", name: "vrsc::identity.credential.username" }, -}; \ No newline at end of file +}; + +export const ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS: VDXFKeyInterface = { + "vdxfid": "i4BWC5Lr7gAT7KzyDx82Ye5DeFQD8ckcXe", + "indexid": "x91cesmvxzP7jVt15dnBX2bkfuRDya9TPq", + "hash160result": "3c520f0bde6be181461ebbff11bce396a604c007", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::attestation.view.request.multipleattestations" + } +} From 41cd0436669fe3725ad83da29b3bcbe1bda13615 Mon Sep 17 00:00:00 2001 From: monkins Date: Thu, 25 Sep 2025 16:12:38 +0100 Subject: [PATCH 004/123] Initial Object Creation --- .../utils/attestationDetails.test.ts | 3 +- .../utils/informationrequest.test.ts | 207 +--------------- src/__tests__/vdxf/endorsement.test.ts | 4 +- .../vdxf/provisioningidentity.test.ts | 44 ++++ src/vdxf/classes/Challenge.ts | 220 ++++++++++++++++++ .../classes/attestation/AttestationDetails.ts | 3 - .../classes/attestation/InformationRequest.ts | 84 +------ src/vdxf/classes/endorsement/Endorsement.ts | 69 +----- .../provisioning/ProvisioningIdentity.ts | 219 +++++++++++++++++ 9 files changed, 495 insertions(+), 358 deletions(-) create mode 100644 src/__tests__/vdxf/provisioningidentity.test.ts create mode 100644 src/vdxf/classes/provisioning/ProvisioningIdentity.ts diff --git a/src/__tests__/utils/attestationDetails.test.ts b/src/__tests__/utils/attestationDetails.test.ts index 05d294e1..6b0f5c6f 100644 --- a/src/__tests__/utils/attestationDetails.test.ts +++ b/src/__tests__/utils/attestationDetails.test.ts @@ -109,7 +109,7 @@ describe('AttestationDetails tests', () => { test('fromBuffer with known hex data', () => { // This is the actual hex string generated from the test data above - const expectedHex = "010001010501010020da513b88a56ef93a55cfd7e8f49e1143fd26a2e6095a67fc0d368327d8e3d3df01005741d826d3c6cbbc3a96992670d2f604e959fd1a8c014102c78ee8fa7c01db81cbf60181fc9baa101aa8c07d40c324d771145699168d3b18867a587f139173cf8b961d581fe15bbf15f5d02813a615e54c050d2b6b1cd4ee0201024b08a2ebb2c55f83a8e2a426a53320ed4d42124f4d01350160044a6f686e2269344771736f7448476134637a436474673264384656484b664a467a56794250724d0a746578742f706c61696e2006e9b0454f1fddf23353a8c411bdbbb266738dca1d647e03040bffe1bddacf7401024a08a2ebb2c55f83a8e2a426a53320ed4d42124f4d0134016003446f65226948796254724e42316b5852726a7343744a5864366676424b786570714d7053355a0a746578742f706c61696e20d32fac398866a7331acd678fd48412f173f71e381f1c1d6efff253a6b29b4d5b01a6ef9ea235635e328124ff3429db9f9e91b64e2d0120da513b88a56ef93a55cfd7e8f49e1143fd26a2e6095a67fc0d368327d8e3d3dfb26820ee0c9b1276aac834cf457026a575dfce8401000000490205ce0a000001411f0a24ae90af6d838e9c60ea479b1cca8cdaae583c8d73c1f9f3eb8b48e626aa551c354c5607c8f79f34f544729e246ca0740c2b523e6267f03d1f7faa615f47f6"; + const expectedHex = "0001010501010020da513b88a56ef93a55cfd7e8f49e1143fd26a2e6095a67fc0d368327d8e3d3df01005741d826d3c6cbbc3a96992670d2f604e959fd1a8c014102c78ee8fa7c01db81cbf60181fc9baa101aa8c07d40c324d771145699168d3b18867a587f139173cf8b961d581fe15bbf15f5d02813a615e54c050d2b6b1cd4ee0201024b08a2ebb2c55f83a8e2a426a53320ed4d42124f4d01350160044a6f686e2269344771736f7448476134637a436474673264384656484b664a467a56794250724d0a746578742f706c61696e2006e9b0454f1fddf23353a8c411bdbbb266738dca1d647e03040bffe1bddacf7401024a08a2ebb2c55f83a8e2a426a53320ed4d42124f4d0134016003446f65226948796254724e42316b5852726a7343744a5864366676424b786570714d7053355a0a746578742f706c61696e20d32fac398866a7331acd678fd48412f173f71e381f1c1d6efff253a6b29b4d5b01a6ef9ea235635e328124ff3429db9f9e91b64e2d0120da513b88a56ef93a55cfd7e8f49e1143fd26a2e6095a67fc0d368327d8e3d3dfb26820ee0c9b1276aac834cf457026a575dfce8401000000490205ce0a000001411f0a24ae90af6d838e9c60ea479b1cca8cdaae583c8d73c1f9f3eb8b48e626aa551c354c5607c8f79f34f544729e246ca0740c2b523e6267f03d1f7faa615f47f6"; // Create AttestationDetails from the hex buffer const buffer = Buffer.from(expectedHex, 'hex'); @@ -117,7 +117,6 @@ describe('AttestationDetails tests', () => { attestationDetails.fromBuffer(buffer); // Verify basic structure - expect(attestationDetails.version.toNumber()).toBe(1); expect(attestationDetails.flags.toNumber()).toBe(0); expect(attestationDetails.attestations.length).toBe(1); diff --git a/src/__tests__/utils/informationrequest.test.ts b/src/__tests__/utils/informationrequest.test.ts index 2f8c6541..80b11304 100644 --- a/src/__tests__/utils/informationrequest.test.ts +++ b/src/__tests__/utils/informationrequest.test.ts @@ -1,4 +1,4 @@ -import { RequestItem, RequestInformation, RequestedFormatFlags, InformationType } from "../../vdxf/classes/attestation/InformationRequest"; +import { RequestItem, RequestedFormatFlags, InformationType } from "../../vdxf/classes/attestation/InformationRequest"; import { BN } from "bn.js"; describe('Information Request Tests', () => { @@ -185,147 +185,7 @@ describe('Information Request Tests', () => { }); }); - describe('RequestInformation Tests', () => { - test('should create RequestInformation with items', () => { - // Create test items - const item1 = new RequestItem(); - item1.format = new BN(RequestedFormatFlags.FULL_DATA); - item1.type = new BN(InformationType.ATTESTATION); - item1.id = testAttestationKey; - item1.signer = testSigner; - item1.requestedkeys = testRequestedKeys; - - const item2 = new RequestItem(); - item2.format = new BN(RequestedFormatFlags.PARTIAL_DATA); - item2.type = new BN(InformationType.CLAIM); - item2.id = {"iAnotherAttestation": "Another Value"}; - item2.signer = testSigner; - item2.requestedkeys = ["iSomeOtherKey"]; - - const requestInfo = new RequestInformation({ - version: new BN(1), - items: [item1, item2] - } as any); - - expect(requestInfo.version.toNumber()).toBe(1); - expect(requestInfo.items.length).toBe(2); - }); - - test('should serialize and deserialize to JSON correctly', () => { - const item = new RequestItem(); - item.format = new BN(RequestedFormatFlags.FULL_DATA); - item.type = new BN(InformationType.ATTESTATION); - item.id = testAttestationKey; - item.signer = testSigner; - item.requestedkeys = testRequestedKeys; - - const requestInfo = new RequestInformation({ - version: new BN(1), - items: [item] - } as any); - - // Test toJSON - const json = requestInfo.toJSON(); - expect(json.version).toBe(1); - expect(json.items.length).toBe(1); - expect(json.items[0].id).toEqual(testAttestationKey); - expect(json.items[0].signer).toBe(testSigner); - expect(json.items[0].requestedkeys).toEqual(testRequestedKeys); - - // Test fromJSON - const newRequestInfo = new RequestInformation({} as any); - newRequestInfo.fromJSON(json); - - expect(newRequestInfo.version.toNumber()).toBe(1); - expect(newRequestInfo.items.length).toBe(1); - expect(newRequestInfo.items[0].id).toEqual(testAttestationKey); - expect(newRequestInfo.items[0].signer).toBe(testSigner); - expect(newRequestInfo.items[0].requestedkeys).toEqual(testRequestedKeys); - }); - - test('should serialize and deserialize to buffer correctly', () => { - const item1 = new RequestItem(); - item1.format = new BN(RequestedFormatFlags.FULL_DATA); - item1.type = new BN(InformationType.ATTESTATION); - item1.id = testAttestationKey; - item1.signer = testSigner; - item1.requestedkeys = testRequestedKeys; - - const item2 = new RequestItem(); - item2.format = new BN(RequestedFormatFlags.PARTIAL_DATA | RequestedFormatFlags.COLLECTION); - item2.type = new BN(InformationType.CREDENTIAL); - item2.id = {"iSecondAttestation": "Second Value"}; - item2.signer = "iAnotherSigner123"; - item2.requestedkeys = ["iOneMoreKey"]; - - const requestInfo = new RequestInformation({ - version: new BN(1), - items: [item1, item2] - } as any); - - // Serialize to buffer - const buffer = requestInfo.toBuffer(); - expect(buffer).toBeInstanceOf(Buffer); - - // Deserialize from buffer - const deserializedInfo = new RequestInformation({} as any); - const bytesRead = deserializedInfo.fromBuffer(buffer); - - expect(bytesRead).toBeGreaterThan(0); - expect(deserializedInfo.version.toNumber()).toBe(1); - expect(deserializedInfo.items.length).toBe(2); - - // Verify first item - expect(deserializedInfo.items[0].format.toNumber()).toBe(RequestedFormatFlags.FULL_DATA); - expect(deserializedInfo.items[0].type.toNumber()).toBe(InformationType.ATTESTATION); - expect(deserializedInfo.items[0].id).toEqual(testAttestationKey); - expect(deserializedInfo.items[0].signer).toBe(testSigner); - expect(deserializedInfo.items[0].requestedkeys).toEqual(testRequestedKeys); - - // Verify second item - expect(deserializedInfo.items[1].format.toNumber()).toBe(RequestedFormatFlags.PARTIAL_DATA | RequestedFormatFlags.COLLECTION); - expect(deserializedInfo.items[1].type.toNumber()).toBe(InformationType.CREDENTIAL); - expect(deserializedInfo.items[1].id).toEqual({"iSecondAttestation": "Second Value"}); - expect(deserializedInfo.items[1].signer).toBe("iAnotherSigner123"); - expect(deserializedInfo.items[1].requestedkeys).toEqual(["iOneMoreKey"]); - }); - - test('should validate correctly with valid items', () => { - const item = new RequestItem(); - item.format = new BN(RequestedFormatFlags.FULL_DATA); - item.type = new BN(InformationType.ATTESTATION); - item.id = testAttestationKey; - item.signer = testSigner; - - const requestInfo = new RequestInformation({ - version: new BN(1), - items: [item] - } as any); - - expect(requestInfo.isValid()).toBe(true); - }); - - test('should calculate byte length correctly', () => { - const item = new RequestItem(); - item.format = new BN(RequestedFormatFlags.FULL_DATA); - item.type = new BN(InformationType.ATTESTATION); - item.id = testAttestationKey; - item.signer = testSigner; - item.requestedkeys = testRequestedKeys; - - const requestInfo = new RequestInformation({ - version: new BN(1), - items: [item] - } as any); - - const byteLength = requestInfo.getByteLength(); - const buffer = requestInfo.toBuffer(); - - expect(buffer.length).toBe(byteLength); - }); - }); - - describe('Round-trip Tests', () => { + describe('Round-trip Tests', () => { test('should maintain data integrity through multiple serialization formats', () => { // Create original request item const originalItem = new RequestItem(); @@ -412,67 +272,6 @@ describe('Information Request Tests', () => { expect(reserializedBuffer.toString('hex')).toBe(hexString); }); - test('should deserialize from known hex string - RequestInformation with multiple items', () => { - // Create first item - const item1 = new RequestItem(); - item1.version = new BN(1); - item1.format = new BN(RequestedFormatFlags.FULL_DATA); - item1.type = new BN(InformationType.ATTESTATION); - item1.id = testAttestationKey; - item1.signer = testSigner; - item1.requestedkeys = testRequestedKeys; - - // Create second item with different data - const item2 = new RequestItem(); - item2.version = new BN(1); - item2.format = new BN(RequestedFormatFlags.PARTIAL_DATA); - item2.type = new BN(InformationType.CLAIM); - item2.id = {"iSecondKey": "Second Value", "iThirdKey": "Third Value"}; - item2.signer = "iAnotherSigner123456789"; - item2.requestedkeys = ["iKey1", "iKey2", "iKey3"]; - - // Create RequestInformation - const originalInfo = new RequestInformation({ - version: new BN(1), - items: [item1, item2] - } as any); - - // Generate hex string - const originalBuffer = originalInfo.toBuffer(); - const hexString = originalBuffer.toString('hex'); - - // Deserialize from hex string - const buffer = Buffer.from(hexString, 'hex'); - const deserializedInfo = new RequestInformation({} as any); - deserializedInfo.fromBuffer(buffer); - - // Verify structure - expect(deserializedInfo.version.toNumber()).toBe(1); - expect(deserializedInfo.items.length).toBe(2); - - // Verify first item - const firstItem = deserializedInfo.items[0]; - expect(firstItem.version.toNumber()).toBe(1); - expect(firstItem.format.toNumber()).toBe(RequestedFormatFlags.FULL_DATA); - expect(firstItem.type.toNumber()).toBe(InformationType.ATTESTATION); - expect(firstItem.id).toEqual(testAttestationKey); - expect(firstItem.signer).toBe(testSigner); - expect(firstItem.requestedkeys).toEqual(testRequestedKeys); - - // Verify second item - const secondItem = deserializedInfo.items[1]; - expect(secondItem.version.toNumber()).toBe(1); - expect(secondItem.format.toNumber()).toBe(RequestedFormatFlags.PARTIAL_DATA); - expect(secondItem.type.toNumber()).toBe(InformationType.CLAIM); - expect(secondItem.id).toEqual({"iSecondKey": "Second Value", "iThirdKey": "Third Value"}); - expect(secondItem.signer).toBe("iAnotherSigner123456789"); - expect(secondItem.requestedkeys).toEqual(["iKey1", "iKey2", "iKey3"]); - - // Verify round-trip integrity - const reserializedBuffer = deserializedInfo.toBuffer(); - expect(reserializedBuffer.toString('hex')).toBe(hexString); - }); - test('should handle edge cases in hex deserialization', () => { // Test with minimal data const minimalItem = new RequestItem(); @@ -508,7 +307,7 @@ describe('Information Request Tests', () => { // - id: {"iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Valu Proof of Life"} // - signer: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB" // - requestedkeys: ["iPzSt64gwsqmxcz3Ht7zhMngLC6no6S74K", "i6E3RQUUX3jt8CkizuLX6ihZHTegCmmbj4"] - const knownHexString = "0106033b7b226945456a566b764d394e697a3475325743723651517a78317a705653764446756231223a2256616c752050726f6f66206f66204c696665227d22694b6a725443776f5046526b3434664169326e594e62504731365a55516a76314e42022269507a53743634677773716d78637a334874377a684d6e674c43366e6f365337344b22693645335251555558336a7438436b697a754c583669685a48546567436d6d626a34"; + const knownHexString = "06033b7b226945456a566b764d394e697a3475325743723651517a78317a705653764446756231223a2256616c752050726f6f66206f66204c696665227d22694b6a725443776f5046526b3434664169326e594e62504731365a55516a76314e42022269507a53743634677773716d78637a334874377a684d6e674c43366e6f365337344b22693645335251555558336a7438436b697a754c583669685a48546567436d6d626a34"; // Deserialize from known hex string const buffer = Buffer.from(knownHexString, 'hex'); diff --git a/src/__tests__/vdxf/endorsement.test.ts b/src/__tests__/vdxf/endorsement.test.ts index e5bf1f94..b7dc5536 100644 --- a/src/__tests__/vdxf/endorsement.test.ts +++ b/src/__tests__/vdxf/endorsement.test.ts @@ -1,5 +1,5 @@ -import { Endorsement, ENDORSEMENT_SKILL } from "../../vdxf/classes/endorsement/Endorsement"; +import { Endorsement } from "../../vdxf/classes/endorsement/Endorsement"; describe('Serializes and deserializes Endorsement', () => { @@ -34,7 +34,7 @@ describe('Serializes and deserializes Endorsement', () => { e.setFlags(); - expect(() => e.toIdentityUpdateJson(ENDORSEMENT_SKILL)).toThrow("Signature is required"); + expect(() => e.toIdentityUpdateJson("iBJqQMRzpCW1WVYoU2Ty2VbCJnvyTEsE1C")).toThrow("Signature is required"); }); }); \ No newline at end of file diff --git a/src/__tests__/vdxf/provisioningidentity.test.ts b/src/__tests__/vdxf/provisioningidentity.test.ts new file mode 100644 index 00000000..368f00dd --- /dev/null +++ b/src/__tests__/vdxf/provisioningidentity.test.ts @@ -0,0 +1,44 @@ + +import { ProvisionIdentity } from "../../vdxf/classes/provisioning/ProvisioningIdentity"; + + +describe('Serializes and deserializes ProvisionIdentity', () => { + test('(de)serialize ProvisionIdentity', () => { + + const provisionJson = { + version: 1, + flags: ProvisionIdentity.FLAG_HAS_IDENTITYID.or(ProvisionIdentity.FLAG_HAS_WEBHOOK).toNumber(), + identity_id: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + system_id: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", + parent_id: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + webhook: "https://mydomain.com/webhook" + } + + const e = ProvisionIdentity.fromJson(provisionJson); + const r = e.toBuffer(); + const rFromBuf = new ProvisionIdentity; + rFromBuf.fromBuffer(r); + + expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) + }); + test('(de)serialize ProvisionIdentity with fqn', async () => { + + const provisionJson = { + version: 1, + flags: ProvisionIdentity.FLAG_HAS_IDENTITYID + .or(ProvisionIdentity.FLAG_HAS_WEBHOOK).or(ProvisionIdentity.FLAG_HAS_FQN).toNumber(), + identity_id: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + system_id: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", + parent_id: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + webhook: "https://mydomain.com/webhook", + fqn: "my.fully.vrsc@" + } + + const e = ProvisionIdentity.fromJson(provisionJson); + const r = e.toBuffer(); + const rFromBuf = new ProvisionIdentity; + rFromBuf.fromBuffer(r); + + expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) + }); +}); \ No newline at end of file diff --git a/src/vdxf/classes/Challenge.ts b/src/vdxf/classes/Challenge.ts index 805417d1..1ad872da 100644 --- a/src/vdxf/classes/Challenge.ts +++ b/src/vdxf/classes/Challenge.ts @@ -8,9 +8,16 @@ import { Utf8OrBase58Object, } from "../"; import bufferutils from "../../utils/bufferutils"; +import { BigNumber } from "../../utils/types/BigNumber"; +import { BN } from "bn.js"; +import { SerializableEntity } from "../../utils/types/SerializableEntity"; import varuint from "../../utils/varuint"; import { Context } from "./Context"; import { Hash160 } from "./Hash160"; +import { I_ADDR_VERSION } from '../../constants/vdxf'; +import { fromBase58Check, toBase58Check } from "../../utils/address"; +import varint from "../../utils/varint"; +import { createHash } from "crypto"; export class RedirectUri extends VDXFObject { uri: string; @@ -418,3 +425,216 @@ export class Challenge extends VDXFObject implements ChallengeInterface { }; } } + +export enum CallbackUriType { + TYPE_WEBHOOK = 1, + TYPE_REDIRECT = 2, + TYPE_DEEPLINK = 3, + TYPE_OAUTH2 = 4 +} + +export interface CallbackUri { + type: CallbackUriType; + uri: string; +} + +export enum EncryptionType { + TYPE_PUBKEY= 1, + TYPE_ZADDRESS = 2 +} + +export interface EncryptionDetails { + type: EncryptionType; + key: string; + derivation_number?: number; +} +export interface ChallengeV2Interface { + version?: BigNumber; + challenge_id: string; + flags?: BigNumber; + requested_access?: Array | null; + requested_access_audience?: Array; + encryption_details?: EncryptionDetails; + callback_uri?: CallbackUri; + created_at: number; +} + +export class ChallengeV2 implements SerializableEntity { + version: BigNumber = ChallengeV2.VERSION_CURRENT; + challenge_id: string; + flags?: BigNumber; + requested_access_audience?: Array; + encryption_details?: EncryptionDetails; + callback_uri?: CallbackUri; + created_at: number; + + // Version + static VERSION_CURRENT = new BN(1, 10) + static VERSION_FIRSTVALID = new BN(1, 10) + static VERSION_LASTVALID = new BN(1, 10) + + static FLAG_HAS_AUDIENCE = new BN(1, 10); + static FLAG_HAS_ENCRYPTION_DETAILS = new BN(2, 10); + static FLAG_HAS_CALLBACK_URI = new BN(4, 10); + static FLAG_CALLBACK_CLEAR_ENCRYPTION_DATA = new BN(8, 10); + + constructor( + challenge: ChallengeV2Interface = { challenge_id: "", created_at: 0 } + ) { + + this.challenge_id = challenge.challenge_id; + this.created_at = challenge.created_at; + this.flags = challenge?.flags || new BN(0, 10); + this.requested_access_audience = challenge?.requested_access_audience || null; + this.encryption_details = challenge?.encryption_details || null; + this.callback_uri = challenge?.callback_uri || null; + this.version = ChallengeV2.VERSION_CURRENT; + + } + + getByteLength(): number { + let length = 0; + + length += fromBase58Check(this.challenge_id).hash.length; + length += 8; // created_at uint64 + length += varint.encodingLength(this.flags); + + if (this.flags.and(ChallengeV2.FLAG_HAS_AUDIENCE).eq(ChallengeV2.FLAG_HAS_AUDIENCE)) { + length += varuint.encodingLength(this.requested_access_audience.length); + for (let i = 0; i < this.requested_access_audience.length; i++) { + length += varuint.encodingLength(Buffer.from(this.requested_access_audience[i], 'utf8').length); + length += Buffer.from(this.requested_access_audience[i], 'utf8').length; + } + } + + if (this.flags.and(ChallengeV2.FLAG_HAS_ENCRYPTION_DETAILS).eq(ChallengeV2.FLAG_HAS_ENCRYPTION_DETAILS)) { + length += varint.encodingLength(new BN(this.encryption_details.type)); + length += varuint.encodingLength(Buffer.from(this.encryption_details.key, 'utf8').length); + length += Buffer.from(this.encryption_details.key, 'utf8').length; + length += varint.encodingLength(new BN(this.encryption_details.derivation_number || 0)); + } + + if (this.flags.and(ChallengeV2.FLAG_HAS_CALLBACK_URI).eq(ChallengeV2.FLAG_HAS_CALLBACK_URI)) { + length += varint.encodingLength(new BN(this.callback_uri.type)); + length += varuint.encodingLength(Buffer.from(this.callback_uri.uri, 'utf8').length); + length += Buffer.from(this.callback_uri.uri, 'utf8').length; + } + + return length; + } + + toBuffer(): Buffer { + this.setFlags(); + const writer = new bufferutils.BufferWriter(Buffer.alloc(this.getByteLength())) + + writer.writeSlice(fromBase58Check(this.challenge_id).hash); + writer.writeUInt64(this.created_at); + writer.writeVarInt(this.flags); + + if (this.flags.and(ChallengeV2.FLAG_HAS_AUDIENCE).eq(ChallengeV2.FLAG_HAS_AUDIENCE)) { + writer.writeCompactSize(this.requested_access_audience ? this.requested_access_audience.length : 0); + for (let i = 0; i < this.requested_access_audience.length; i++) { + writer.writeVarSlice(Buffer.from(this.requested_access_audience[i], 'utf8')); + } + } + + if (this.flags.and(ChallengeV2.FLAG_HAS_ENCRYPTION_DETAILS).eq(ChallengeV2.FLAG_HAS_ENCRYPTION_DETAILS)) { + writer.writeVarInt(new BN(this.encryption_details.type)); + writer.writeVarSlice(Buffer.from(this.encryption_details.key, 'utf8')); + writer.writeVarInt(new BN(this.encryption_details.derivation_number || 0)); + } + + if (this.flags.and(ChallengeV2.FLAG_HAS_CALLBACK_URI).eq(ChallengeV2.FLAG_HAS_CALLBACK_URI)) { + writer.writeVarInt(new BN(this.callback_uri.type)); + writer.writeVarSlice(Buffer.from(this.callback_uri.uri, 'utf8')); + } + + + + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset?: number): number { + const reader = new bufferutils.BufferReader(buffer, offset); + if (buffer.length == 0) throw new Error("Cannot create challenge from empty buffer"); + + this.challenge_id = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); + this.created_at = reader.readUInt64(); + this.flags = reader.readVarInt(); + + if (this.flags.and(ChallengeV2.FLAG_HAS_AUDIENCE).eq(ChallengeV2.FLAG_HAS_AUDIENCE)) { + this.requested_access_audience = []; + const audienceLength = reader.readCompactSize(); + for (let i = 0; i < audienceLength; i++) { + this.requested_access_audience.push(reader.readVarSlice().toString('utf8')); + } + } + + if (this.flags.and(ChallengeV2.FLAG_HAS_ENCRYPTION_DETAILS).eq(ChallengeV2.FLAG_HAS_ENCRYPTION_DETAILS)) { + this.encryption_details = { + type: reader.readVarInt().toNumber(), + key: reader.readVarSlice().toString('utf8'), + derivation_number: reader.readVarInt().toNumber() + } + } + + if (this.flags.and(ChallengeV2.FLAG_HAS_CALLBACK_URI).eq(ChallengeV2.FLAG_HAS_CALLBACK_URI)) { + this.callback_uri = { + type: reader.readVarInt().toNumber(), + uri: reader.readVarSlice().toString('utf8') + } + } + + return reader.offset; + } + + toJson() { + this.setFlags(); + return { + version: this.version ? this.version.toNumber() : 0, + challenge_id: this.challenge_id, + flags: this.flags ? this.flags.toNumber() : 0, + requested_access_audience: this.requested_access_audience, + encryption_details: this.encryption_details, + callback_uri: this.callback_uri, + created_at: this.created_at + }; + } + + static fromJson(data: any): ChallengeV2 { + return new ChallengeV2({ + version: new BN(data?.version || 0), + challenge_id: data.challenge_id, + flags: new BN(data?.flags || 0), + requested_access_audience: data.requested_access_audience, + encryption_details: data.encryption_details, + callback_uri: data.callback_uri, + created_at: data.created_at + }) + } + + + setFlags() { + this.flags = new BN(0, 10); + if (this.requested_access_audience && this.requested_access_audience.length > 0) { + this.flags = this.flags.or(ChallengeV2.FLAG_HAS_AUDIENCE); + } + if (this.encryption_details) { + this.flags = this.flags.or(ChallengeV2.FLAG_HAS_ENCRYPTION_DETAILS); + } + if (this.callback_uri) { + this.flags = this.flags.or(ChallengeV2.FLAG_HAS_CALLBACK_URI); + } + } + + isValid(): boolean { + let valid = this.challenge_id != null && this.challenge_id.length > 0; + valid &&= this.created_at != null && this.created_at > 0; + valid &&= this.flags != null && this.flags.gte(new BN(0)); + return valid; + } + + toSha256() { + return createHash("sha256").update(this.toBuffer()).digest(); + } +} \ No newline at end of file diff --git a/src/vdxf/classes/attestation/AttestationDetails.ts b/src/vdxf/classes/attestation/AttestationDetails.ts index 7c558430..92043bdf 100644 --- a/src/vdxf/classes/attestation/AttestationDetails.ts +++ b/src/vdxf/classes/attestation/AttestationDetails.ts @@ -316,7 +316,6 @@ export class AttestationDetails implements SerializableEntity { this.setFlags(); let length = 0; - length += varint.encodingLength(this.version); length += varint.encodingLength(this.flags); if (this.hasLabel() && this.label) { @@ -346,7 +345,6 @@ export class AttestationDetails implements SerializableEntity { toBuffer(): Buffer { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.version); writer.writeVarInt(this.flags); if (this.hasLabel() && this.label) { @@ -374,7 +372,6 @@ export class AttestationDetails implements SerializableEntity { fromBuffer(buffer: Buffer, offset?: number): number { const reader = new BufferReader(buffer, offset); - this.version = reader.readVarInt(); this.flags = reader.readVarInt(); if (this.hasLabel()) { diff --git a/src/vdxf/classes/attestation/InformationRequest.ts b/src/vdxf/classes/attestation/InformationRequest.ts index c0e6a204..21c49308 100644 --- a/src/vdxf/classes/attestation/InformationRequest.ts +++ b/src/vdxf/classes/attestation/InformationRequest.ts @@ -30,10 +30,6 @@ export interface RequestItemJson { } -export interface IdentityInformationRequestJson { - version: number; - items: RequestItemJson[]; -} export class RequestItem implements SerializableEntity { static VERSION_INVALID = new BN(0); @@ -77,7 +73,7 @@ export class RequestItem implements SerializableEntity { } isValid(): boolean { - let valid = this.version.gte(RequestInformation.FIRST_VERSION) && this.version.lte(RequestInformation.LAST_VERSION); + let valid = this.version.gte(RequestItem.FIRST_VERSION) && this.version.lte(RequestItem.LAST_VERSION); valid &&= this.isFormatValid(); valid &&= (this.type.gte(RequestItem.ATTESTATION) && this.type.lte(RequestItem.CREDENTIAL)); return valid; @@ -85,7 +81,6 @@ export class RequestItem implements SerializableEntity { getByteLength(): number { let length = 0; - length += varint.encodingLength(this.version); length += varint.encodingLength(this.format); length += varint.encodingLength(this.type); @@ -110,7 +105,6 @@ export class RequestItem implements SerializableEntity { toBuffer(): Buffer { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.version); writer.writeVarInt(this.format); writer.writeVarInt(this.type); @@ -132,7 +126,6 @@ export class RequestItem implements SerializableEntity { fromBuffer(buffer: Buffer, offset?: number): number { const reader = new BufferReader(buffer, offset); - this.version = reader.readVarInt(); this.format = reader.readVarInt(); this.type = reader.readVarInt(); @@ -171,78 +164,3 @@ export class RequestItem implements SerializableEntity { this.requestedkeys = json.requestedkeys || []; } } - -export class RequestInformation implements SerializableEntity { - static VERSION_INVALID = new BN(0); - static FIRST_VERSION = new BN(1); - static LAST_VERSION = new BN(1); - static DEFAULT_VERSION = new BN(1); - - version: BigNumber; - items: RequestItem[]; - - constructor(data: RequestInformation) { - this.version = data?.version ? new BN(data.version) : RequestInformation.DEFAULT_VERSION; - this.items = data?.items || []; - } - - isValid(): boolean { - let valid = this.version.gte(RequestInformation.FIRST_VERSION) && this.version.lte(RequestInformation.LAST_VERSION); - valid &&= this.items.every(item => { - return item.isValid(); - }); - return valid; - } - - getByteLength(): number { - let length = 0; - length += varint.encodingLength(this.version); - length += varuint.encodingLength(this.items.length); - for (const item of this.items) { - length += item.getByteLength(); - } - return length; - } - - toBuffer(): Buffer { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.version); - writer.writeCompactSize(this.items ? this.items.length : 0); - if (this.items) { - for (const item of this.items) { - const itemBuffer = item.toBuffer(); - writer.writeSlice(itemBuffer); - } - } - return writer.buffer; - } - - fromBuffer(buffer: Buffer, offset?: number): number { - const reader = new BufferReader(buffer, offset); - this.version = reader.readVarInt(); - this.items = []; - const itemsLength = reader.readCompactSize(); - for (let i = 0; i < itemsLength; i++) { - const item = new RequestItem(); - reader.offset = item.fromBuffer(buffer, reader.offset); - this.items.push(item); - } - return reader.offset; - } - - toJSON(): IdentityInformationRequestJson { - return { - version: this.version.toNumber(), - items: this.items.map(item => item.toJSON()) - }; - } - - fromJSON(json: IdentityInformationRequestJson): void { - this.version = new BN(json.version); - this.items = json.items.map(itemJson => { - const item = new RequestItem(); - item.fromJSON(itemJson); - return item; - }); - } -} \ No newline at end of file diff --git a/src/vdxf/classes/endorsement/Endorsement.ts b/src/vdxf/classes/endorsement/Endorsement.ts index cc050ebe..7327899c 100644 --- a/src/vdxf/classes/endorsement/Endorsement.ts +++ b/src/vdxf/classes/endorsement/Endorsement.ts @@ -12,59 +12,6 @@ import { createHash } from 'crypto'; const { BufferReader, BufferWriter } = bufferutils -export const ENDORSEMENT: VDXFKeyInterface = { - "vdxfid": "iDbPhzm8g7mQ94Cy2VNn7dJPVk5zcDRhPS", - "indexid": "xJRWAoCDXRz4mE5ztB2w61pvXQ71WSXnGu", - "hash160result": "dbfcb74829379cb79d39d9dbe81a76627bb8fd6e", - "qualifiedname": { - "namespace": "iNQFA8jtYe9JYq6Qr49ZxAhvWErFurWjTa", - "name": "valu.vrsc::endorsement" - } -} - -export const ENDORSEMENT_SKILL: VDXFKeyInterface = { - "vdxfid": "iBJqQMRzpCW1WVYoU2Ty2VbCJnvyTEsE1C", - "indexid": "xG8ws9s5fWig8fRqKi87zt7jLSwzNoJ3s7", - "hash160result": "309091e8f181bd19279b6cd8873aaafaf4d8eb55", - "qualifiedname": { - "namespace": "iNQFA8jtYe9JYq6Qr49ZxAhvWErFurWjTa", - "name": "valu.vrsc::endorsement.skill" - } -} - -export const ENDORSEMENT_QUALIFICATION: VDXFKeyInterface = { - "vdxfid": "iGW3WFP1h8ZDsJWLFMvTF3ZqLuiMRBK6jV", - "indexid": "xML9y3p6YSmtVUPN73acDS6NNZjNE6JbQo", - "hash160result": "d2f91effc976eee2d9574d4ab5e4f0456827e38e", - "qualifiedname": { - "namespace": "iNQFA8jtYe9JYq6Qr49ZxAhvWErFurWjTa", - "name": "valu.vrsc::endorsement.qualification" - } -} - -export const ENDORSEMENT_REFERENCE: VDXFKeyInterface = { - "vdxfid": "iArNtGt8xYWBQaDtYATfhdR1NXq1ecZgRp", - "indexid": "xFgVM5KDorir2k6vPr7pg1wYQBr2VEywYv", - "hash160result": "ebc99d117c8e67fa10dfdd6a3295d40458e5ea50", - "qualifiedname": { - "namespace": "iNQFA8jtYe9JYq6Qr49ZxAhvWErFurWjTa", - "name": "valu.vrsc::endorsement.reference" - } -} - - -export const ENDORSEMENT_PROJECT: VDXFKeyInterface = { - "vdxfid": "i7tTikSbJcLDBFpZyb8Uk3UfVjsLxz25Q4", - "indexid": "xCiaBYsg9vYsoRhbqGndiS1CXPtMpCtFg3", - "hash160result": "0ff2447acd00a1c5494156edee5481591c636730", - "qualifiedname": { - "namespace": "iNQFA8jtYe9JYq6Qr49ZxAhvWErFurWjTa", - "name": "valu.vrsc::endorsement.project" - } -} - -const ENDORSEMENT_TYPES = [ENDORSEMENT_SKILL, ENDORSEMENT_QUALIFICATION, ENDORSEMENT_REFERENCE, ENDORSEMENT_PROJECT]; - export interface EndorsementJson { version: number; flags?: number; @@ -116,7 +63,6 @@ export class Endorsement implements SerializableEntity { getByteLength() { let byteLength = 0; - byteLength += varint.encodingLength(this.version); byteLength += varint.encodingLength(this.flags); byteLength += varuint.encodingLength(Buffer.from(this.endorsee, 'utf-8').byteLength); byteLength += Buffer.from(this.endorsee, 'utf-8').byteLength; @@ -172,7 +118,6 @@ export class Endorsement implements SerializableEntity { this.setFlags(); const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())) - bufferWriter.writeVarInt(this.version); bufferWriter.writeVarInt(this.flags); bufferWriter.writeVarSlice(Buffer.from(this.endorsee, 'utf-8')); bufferWriter.writeVarSlice(this.reference); @@ -199,7 +144,6 @@ export class Endorsement implements SerializableEntity { fromBuffer(buffer: Buffer, offset: number = 0) { const reader = new BufferReader(buffer, offset); - this.version = reader.readVarInt(); this.flags = reader.readVarInt(); this.endorsee = reader.readVarSlice().toString('utf-8'); this.reference = reader.readVarSlice(); @@ -225,22 +169,19 @@ export class Endorsement implements SerializableEntity { return reader.offset; } - toIdentityUpdateJson(type: VDXFKeyInterface): { [key: string]: { [key: string]: [string] } } { + toIdentityUpdateJson(vdxfid): { [key: string]: { [key: string]: [string] } } { const contentmultimap = {}; - if (!type) { - throw new Error('Type is required') + if (!vdxfid) { + throw new Error('Vdxfid is required') } if (!this.signature || !this.signature.isValid()) { throw new Error('Signature is required') } - - if (!ENDORSEMENT_TYPES.includes(type)) { - throw new Error('Unsupported endorsement type'); - } - contentmultimap[type.vdxfid] = [{ serializedhex: this.toBuffer().toString('hex') }]; + + contentmultimap[vdxfid] = [{ serializedhex: this.toBuffer().toString('hex') }]; return { contentmultimap: contentmultimap diff --git a/src/vdxf/classes/provisioning/ProvisioningIdentity.ts b/src/vdxf/classes/provisioning/ProvisioningIdentity.ts new file mode 100644 index 00000000..e018f3d5 --- /dev/null +++ b/src/vdxf/classes/provisioning/ProvisioningIdentity.ts @@ -0,0 +1,219 @@ +import bufferutils from "../../../utils/bufferutils"; +import { BigNumber } from "../../../utils/types/BigNumber"; +import { BN } from "bn.js"; +import { SerializableEntity } from "../../../utils/types/SerializableEntity"; +import varuint from "../../../utils/varuint"; +import { I_ADDR_VERSION } from '../../../constants/vdxf'; +import { fromBase58Check, toBase58Check } from "../../../utils/address"; +import varint from "../../../utils/varint"; +import { createHash } from "crypto"; + +export interface ProvisionIdentityInterface { + version?: BigNumber; + flags: BigNumber; + system_id?: string; + parent_id?: string; + identity_id?: string; + fqn?: string; + webhook?: string; +} + +export class ProvisionIdentity implements SerializableEntity { + + version: BigNumber = ProvisionIdentity.VERSION_CURRENT; + flags: BigNumber; + system_id?: string; + parent_id: string; + identity_id?: string; + fqn?: string; + webhook?: string; + + // Version + static VERSION_CURRENT = new BN(1, 10) + static VERSION_FIRSTVALID = new BN(1, 10) + static VERSION_LASTVALID = new BN(1, 10) + + static FLAG_SYSTEM_AS_SIGNATURE = new BN(1, 10); + static FLAG_PARENT_AS_FQN = new BN(2, 10); + static FLAG_HAS_WEBHOOK = new BN(4, 10); + static FLAG_HAS_IDENTITYID = new BN(8, 10); + static FLAG_HAS_FQN = new BN(16, 10); + + constructor( + provisionIdentity: ProvisionIdentityInterface = { + flags: new BN(0, 10)} + ) { + this.version = provisionIdentity.version || ProvisionIdentity.VERSION_CURRENT; + this.flags = provisionIdentity.flags; + this.system_id = provisionIdentity?.system_id; + this.parent_id = provisionIdentity?.parent_id; + this.identity_id = provisionIdentity?.identity_id; + this.fqn = provisionIdentity?.fqn; + this.webhook = provisionIdentity?.webhook; + + } + + getByteLength(): number { + let length = 0; + + length += varint.encodingLength(this.flags); + if (!this.flags.and(ProvisionIdentity.FLAG_SYSTEM_AS_SIGNATURE).eq(ProvisionIdentity.FLAG_SYSTEM_AS_SIGNATURE)) { + length += 20; // system_id as hash + } + + if (this.flags.and(ProvisionIdentity.FLAG_PARENT_AS_FQN).eq(ProvisionIdentity.FLAG_PARENT_AS_FQN)) { + length += varuint.encodingLength(this.parent_id ? this.parent_id.length : 0); + length += this.parent_id ? Buffer.from(this.parent_id, 'utf8').length : 0; + } else { + length += 20; // parent_id as hash + } + + if (this.flags.and(ProvisionIdentity.FLAG_HAS_IDENTITYID).eq(ProvisionIdentity.FLAG_HAS_IDENTITYID)) { + length += 20; // identity_id as hash + } + + if (this.flags.and(ProvisionIdentity.FLAG_HAS_FQN).eq(ProvisionIdentity.FLAG_HAS_FQN)) { + length += varuint.encodingLength(this.fqn ? this.fqn.length : 0); + length += this.fqn ? Buffer.from(this.fqn, 'utf8').length : 0; + } + + if (this.flags.and(ProvisionIdentity.FLAG_HAS_WEBHOOK).eq(ProvisionIdentity.FLAG_HAS_WEBHOOK)) { + length += varuint.encodingLength(this.webhook ? this.webhook.length : 0); + length += this.webhook ? Buffer.from(this.webhook, 'utf8').length : 0; + } + + return length; + } + + toBuffer(): Buffer { + this.setFlags(); + const writer = new bufferutils.BufferWriter(Buffer.alloc(this.getByteLength())) + + writer.writeVarInt(this.flags); + + if (!this.flags.and(ProvisionIdentity.FLAG_SYSTEM_AS_SIGNATURE).eq(ProvisionIdentity.FLAG_SYSTEM_AS_SIGNATURE)) { + writer.writeSlice(fromBase58Check(this.system_id).hash); + } + + if (this.flags.and(ProvisionIdentity.FLAG_PARENT_AS_FQN).eq(ProvisionIdentity.FLAG_PARENT_AS_FQN)) { + writer.writeVarSlice(Buffer.from(this.parent_id || '', 'utf8')); + } else { + writer.writeSlice(fromBase58Check(this.parent_id).hash); + } + + if (this.flags.and(ProvisionIdentity.FLAG_HAS_IDENTITYID).eq(ProvisionIdentity.FLAG_HAS_IDENTITYID)) { + writer.writeSlice(fromBase58Check(this.identity_id).hash); + } + + if (this.flags.and(ProvisionIdentity.FLAG_HAS_FQN).eq(ProvisionIdentity.FLAG_HAS_FQN)) { + writer.writeVarSlice(Buffer.from(this.fqn || '', 'utf8')); + } + + if (this.flags.and(ProvisionIdentity.FLAG_HAS_WEBHOOK).eq(ProvisionIdentity.FLAG_HAS_WEBHOOK)) { + writer.writeVarSlice(Buffer.from(this.webhook || '', 'utf8')); + } + + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset?: number): number { + const reader = new bufferutils.BufferReader(buffer, offset); + if (buffer.length == 0) throw new Error("Cannot create provision identity from empty buffer"); + + this.flags = reader.readVarInt(); + + if (!this.flags.and(ProvisionIdentity.FLAG_SYSTEM_AS_SIGNATURE).eq(ProvisionIdentity.FLAG_SYSTEM_AS_SIGNATURE)) { + this.system_id = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); + } + + if (this.flags.and(ProvisionIdentity.FLAG_PARENT_AS_FQN).eq(ProvisionIdentity.FLAG_PARENT_AS_FQN)) { + this.parent_id = reader.readVarSlice().toString('utf8'); + } else { + this.parent_id = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); + } + + if (this.flags.and(ProvisionIdentity.FLAG_HAS_IDENTITYID).eq(ProvisionIdentity.FLAG_HAS_IDENTITYID)) { + this.identity_id = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); + } + + if (this.flags.and(ProvisionIdentity.FLAG_HAS_FQN).eq(ProvisionIdentity.FLAG_HAS_FQN)) { + this.fqn = reader.readVarSlice().toString('utf8'); + } + + if (this.flags.and(ProvisionIdentity.FLAG_HAS_WEBHOOK).eq(ProvisionIdentity.FLAG_HAS_WEBHOOK)) { + this.webhook = reader.readVarSlice().toString('utf8'); + } + + return reader.offset; + } + + toJson() { + this.setFlags(); + return { + version: this.version ? this.version.toNumber() : 0, + flags: this.flags ? this.flags.toNumber() : 0, + system_id: this.system_id, + parent_id: this.parent_id, + identity_id: this.identity_id, + fqn: this.fqn, + webhook: this.webhook + }; + } + + static fromJson(data: any): ProvisionIdentity { + return new ProvisionIdentity({ + version: new BN(data?.version || 0), + flags: new BN(data?.flags || 0), + system_id: data.system_id, + parent_id: data.parent_id, + identity_id: data.identity_id, + fqn: data.fqn, + webhook: data.webhook + }) + } + + + setFlags() { + this.flags = new BN(0, 10); + + if (!this.system_id) { + this.flags = this.flags.or(ProvisionIdentity.FLAG_SYSTEM_AS_SIGNATURE); + } + + if (this.parent_id) { + // Check if parent_id is a valid base58 address or should be treated as FQN + try { + fromBase58Check(this.parent_id); + // If it doesn't throw, it's a valid address, don't set FQN flag + } catch { + // If it throws, treat as FQN + this.flags = this.flags.or(ProvisionIdentity.FLAG_PARENT_AS_FQN); + } + } + + if (this.identity_id) { + this.flags = this.flags.or(ProvisionIdentity.FLAG_HAS_IDENTITYID); + } + + if (this.fqn) { + this.flags = this.flags.or(ProvisionIdentity.FLAG_HAS_FQN); + } + + if (this.webhook) { + this.flags = this.flags.or(ProvisionIdentity.FLAG_HAS_WEBHOOK); + } + } + + isValid(): boolean { + let valid = this.flags != null && this.flags.gte(new BN(0)); + + // At minimum, we need either system_id or parent_id + valid &&= (this.parent_id != null && this.parent_id.length > 0); + + return valid; + } + + toSha256() { + return createHash("sha256").update(this.toBuffer()).digest(); + } +} \ No newline at end of file From 4635942cda4092012a1b999f0e3671895d3b8e8b Mon Sep 17 00:00:00 2001 From: monkins Date: Thu, 25 Sep 2025 16:51:10 +0100 Subject: [PATCH 005/123] Updates to Object names --- .../utils/informationrequest.test.ts | 2 +- .../vdxf/provisioningidentity.test.ts | 2 +- src/vdxf/classes/Challenge.ts | 220 ------------------ src/vdxf/classes/index.ts | 4 +- .../InformationRequest.ts | 0 .../requestobjects/LoginRequestDetails.ts | 215 +++++++++++++++++ .../ProvisioningIdentity.ts | 0 7 files changed, 220 insertions(+), 223 deletions(-) rename src/vdxf/classes/{attestation => requestobjects}/InformationRequest.ts (100%) create mode 100644 src/vdxf/classes/requestobjects/LoginRequestDetails.ts rename src/vdxf/classes/{provisioning => requestobjects}/ProvisioningIdentity.ts (100%) diff --git a/src/__tests__/utils/informationrequest.test.ts b/src/__tests__/utils/informationrequest.test.ts index 80b11304..374768bd 100644 --- a/src/__tests__/utils/informationrequest.test.ts +++ b/src/__tests__/utils/informationrequest.test.ts @@ -1,4 +1,4 @@ -import { RequestItem, RequestedFormatFlags, InformationType } from "../../vdxf/classes/attestation/InformationRequest"; +import { RequestItem, RequestedFormatFlags, InformationType } from "../../vdxf/classes/requestobjects/InformationRequest"; import { BN } from "bn.js"; describe('Information Request Tests', () => { diff --git a/src/__tests__/vdxf/provisioningidentity.test.ts b/src/__tests__/vdxf/provisioningidentity.test.ts index 368f00dd..0249d775 100644 --- a/src/__tests__/vdxf/provisioningidentity.test.ts +++ b/src/__tests__/vdxf/provisioningidentity.test.ts @@ -1,5 +1,5 @@ -import { ProvisionIdentity } from "../../vdxf/classes/provisioning/ProvisioningIdentity"; +import { ProvisionIdentity } from "../../vdxf/classes/requestobjects/ProvisioningIdentity"; describe('Serializes and deserializes ProvisionIdentity', () => { diff --git a/src/vdxf/classes/Challenge.ts b/src/vdxf/classes/Challenge.ts index 1ad872da..0c8cf7d0 100644 --- a/src/vdxf/classes/Challenge.ts +++ b/src/vdxf/classes/Challenge.ts @@ -8,16 +8,9 @@ import { Utf8OrBase58Object, } from "../"; import bufferutils from "../../utils/bufferutils"; -import { BigNumber } from "../../utils/types/BigNumber"; -import { BN } from "bn.js"; -import { SerializableEntity } from "../../utils/types/SerializableEntity"; import varuint from "../../utils/varuint"; import { Context } from "./Context"; import { Hash160 } from "./Hash160"; -import { I_ADDR_VERSION } from '../../constants/vdxf'; -import { fromBase58Check, toBase58Check } from "../../utils/address"; -import varint from "../../utils/varint"; -import { createHash } from "crypto"; export class RedirectUri extends VDXFObject { uri: string; @@ -424,217 +417,4 @@ export class Challenge extends VDXFObject implements ChallengeInterface { skip: this.skip, }; } -} - -export enum CallbackUriType { - TYPE_WEBHOOK = 1, - TYPE_REDIRECT = 2, - TYPE_DEEPLINK = 3, - TYPE_OAUTH2 = 4 -} - -export interface CallbackUri { - type: CallbackUriType; - uri: string; -} - -export enum EncryptionType { - TYPE_PUBKEY= 1, - TYPE_ZADDRESS = 2 -} - -export interface EncryptionDetails { - type: EncryptionType; - key: string; - derivation_number?: number; -} -export interface ChallengeV2Interface { - version?: BigNumber; - challenge_id: string; - flags?: BigNumber; - requested_access?: Array | null; - requested_access_audience?: Array; - encryption_details?: EncryptionDetails; - callback_uri?: CallbackUri; - created_at: number; -} - -export class ChallengeV2 implements SerializableEntity { - version: BigNumber = ChallengeV2.VERSION_CURRENT; - challenge_id: string; - flags?: BigNumber; - requested_access_audience?: Array; - encryption_details?: EncryptionDetails; - callback_uri?: CallbackUri; - created_at: number; - - // Version - static VERSION_CURRENT = new BN(1, 10) - static VERSION_FIRSTVALID = new BN(1, 10) - static VERSION_LASTVALID = new BN(1, 10) - - static FLAG_HAS_AUDIENCE = new BN(1, 10); - static FLAG_HAS_ENCRYPTION_DETAILS = new BN(2, 10); - static FLAG_HAS_CALLBACK_URI = new BN(4, 10); - static FLAG_CALLBACK_CLEAR_ENCRYPTION_DATA = new BN(8, 10); - - constructor( - challenge: ChallengeV2Interface = { challenge_id: "", created_at: 0 } - ) { - - this.challenge_id = challenge.challenge_id; - this.created_at = challenge.created_at; - this.flags = challenge?.flags || new BN(0, 10); - this.requested_access_audience = challenge?.requested_access_audience || null; - this.encryption_details = challenge?.encryption_details || null; - this.callback_uri = challenge?.callback_uri || null; - this.version = ChallengeV2.VERSION_CURRENT; - - } - - getByteLength(): number { - let length = 0; - - length += fromBase58Check(this.challenge_id).hash.length; - length += 8; // created_at uint64 - length += varint.encodingLength(this.flags); - - if (this.flags.and(ChallengeV2.FLAG_HAS_AUDIENCE).eq(ChallengeV2.FLAG_HAS_AUDIENCE)) { - length += varuint.encodingLength(this.requested_access_audience.length); - for (let i = 0; i < this.requested_access_audience.length; i++) { - length += varuint.encodingLength(Buffer.from(this.requested_access_audience[i], 'utf8').length); - length += Buffer.from(this.requested_access_audience[i], 'utf8').length; - } - } - - if (this.flags.and(ChallengeV2.FLAG_HAS_ENCRYPTION_DETAILS).eq(ChallengeV2.FLAG_HAS_ENCRYPTION_DETAILS)) { - length += varint.encodingLength(new BN(this.encryption_details.type)); - length += varuint.encodingLength(Buffer.from(this.encryption_details.key, 'utf8').length); - length += Buffer.from(this.encryption_details.key, 'utf8').length; - length += varint.encodingLength(new BN(this.encryption_details.derivation_number || 0)); - } - - if (this.flags.and(ChallengeV2.FLAG_HAS_CALLBACK_URI).eq(ChallengeV2.FLAG_HAS_CALLBACK_URI)) { - length += varint.encodingLength(new BN(this.callback_uri.type)); - length += varuint.encodingLength(Buffer.from(this.callback_uri.uri, 'utf8').length); - length += Buffer.from(this.callback_uri.uri, 'utf8').length; - } - - return length; - } - - toBuffer(): Buffer { - this.setFlags(); - const writer = new bufferutils.BufferWriter(Buffer.alloc(this.getByteLength())) - - writer.writeSlice(fromBase58Check(this.challenge_id).hash); - writer.writeUInt64(this.created_at); - writer.writeVarInt(this.flags); - - if (this.flags.and(ChallengeV2.FLAG_HAS_AUDIENCE).eq(ChallengeV2.FLAG_HAS_AUDIENCE)) { - writer.writeCompactSize(this.requested_access_audience ? this.requested_access_audience.length : 0); - for (let i = 0; i < this.requested_access_audience.length; i++) { - writer.writeVarSlice(Buffer.from(this.requested_access_audience[i], 'utf8')); - } - } - - if (this.flags.and(ChallengeV2.FLAG_HAS_ENCRYPTION_DETAILS).eq(ChallengeV2.FLAG_HAS_ENCRYPTION_DETAILS)) { - writer.writeVarInt(new BN(this.encryption_details.type)); - writer.writeVarSlice(Buffer.from(this.encryption_details.key, 'utf8')); - writer.writeVarInt(new BN(this.encryption_details.derivation_number || 0)); - } - - if (this.flags.and(ChallengeV2.FLAG_HAS_CALLBACK_URI).eq(ChallengeV2.FLAG_HAS_CALLBACK_URI)) { - writer.writeVarInt(new BN(this.callback_uri.type)); - writer.writeVarSlice(Buffer.from(this.callback_uri.uri, 'utf8')); - } - - - - return writer.buffer; - } - - fromBuffer(buffer: Buffer, offset?: number): number { - const reader = new bufferutils.BufferReader(buffer, offset); - if (buffer.length == 0) throw new Error("Cannot create challenge from empty buffer"); - - this.challenge_id = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); - this.created_at = reader.readUInt64(); - this.flags = reader.readVarInt(); - - if (this.flags.and(ChallengeV2.FLAG_HAS_AUDIENCE).eq(ChallengeV2.FLAG_HAS_AUDIENCE)) { - this.requested_access_audience = []; - const audienceLength = reader.readCompactSize(); - for (let i = 0; i < audienceLength; i++) { - this.requested_access_audience.push(reader.readVarSlice().toString('utf8')); - } - } - - if (this.flags.and(ChallengeV2.FLAG_HAS_ENCRYPTION_DETAILS).eq(ChallengeV2.FLAG_HAS_ENCRYPTION_DETAILS)) { - this.encryption_details = { - type: reader.readVarInt().toNumber(), - key: reader.readVarSlice().toString('utf8'), - derivation_number: reader.readVarInt().toNumber() - } - } - - if (this.flags.and(ChallengeV2.FLAG_HAS_CALLBACK_URI).eq(ChallengeV2.FLAG_HAS_CALLBACK_URI)) { - this.callback_uri = { - type: reader.readVarInt().toNumber(), - uri: reader.readVarSlice().toString('utf8') - } - } - - return reader.offset; - } - - toJson() { - this.setFlags(); - return { - version: this.version ? this.version.toNumber() : 0, - challenge_id: this.challenge_id, - flags: this.flags ? this.flags.toNumber() : 0, - requested_access_audience: this.requested_access_audience, - encryption_details: this.encryption_details, - callback_uri: this.callback_uri, - created_at: this.created_at - }; - } - - static fromJson(data: any): ChallengeV2 { - return new ChallengeV2({ - version: new BN(data?.version || 0), - challenge_id: data.challenge_id, - flags: new BN(data?.flags || 0), - requested_access_audience: data.requested_access_audience, - encryption_details: data.encryption_details, - callback_uri: data.callback_uri, - created_at: data.created_at - }) - } - - - setFlags() { - this.flags = new BN(0, 10); - if (this.requested_access_audience && this.requested_access_audience.length > 0) { - this.flags = this.flags.or(ChallengeV2.FLAG_HAS_AUDIENCE); - } - if (this.encryption_details) { - this.flags = this.flags.or(ChallengeV2.FLAG_HAS_ENCRYPTION_DETAILS); - } - if (this.callback_uri) { - this.flags = this.flags.or(ChallengeV2.FLAG_HAS_CALLBACK_URI); - } - } - - isValid(): boolean { - let valid = this.challenge_id != null && this.challenge_id.length > 0; - valid &&= this.created_at != null && this.created_at > 0; - valid &&= this.flags != null && this.flags.gte(new BN(0)); - return valid; - } - - toSha256() { - return createHash("sha256").update(this.toBuffer()).digest(); - } } \ No newline at end of file diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index ae577491..6ed4e3bf 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -45,6 +45,8 @@ export { } from './provisioning/ProvisioningResult' export { Context } from './Context' export { DataCategory } from './PersonalProfile' -export * from './attestation/InformationRequest' +export * from './requestobjects/InformationRequest' +export * from './requestobjects/LoginRequestDetails' +export * from './requestobjects/ProvisioningIdentity' export * from './attestation/AttestationDetails' export * from './endorsement/Endorsement' \ No newline at end of file diff --git a/src/vdxf/classes/attestation/InformationRequest.ts b/src/vdxf/classes/requestobjects/InformationRequest.ts similarity index 100% rename from src/vdxf/classes/attestation/InformationRequest.ts rename to src/vdxf/classes/requestobjects/InformationRequest.ts diff --git a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts new file mode 100644 index 00000000..554f7353 --- /dev/null +++ b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts @@ -0,0 +1,215 @@ +import bufferutils from "../../../utils/bufferutils"; +import { BigNumber } from "../../../utils/types/BigNumber"; +import { BN } from "bn.js"; +import { SerializableEntity } from "../../../utils/types/SerializableEntity"; +import varuint from "../../../utils/varuint"; +import { I_ADDR_VERSION } from '../../../constants/vdxf'; +import { fromBase58Check, toBase58Check } from "../../../utils/address"; +import varint from "../../../utils/varint"; +import { createHash } from "crypto"; + + + +export enum CallbackUriType { + TYPE_WEBHOOK = 1, + TYPE_REDIRECT = 2, + TYPE_DEEPLINK = 3, + TYPE_OAUTH2 = 4 +} + +export interface CallbackUri { + type: CallbackUriType; + uri: string; +} + +export enum EncryptionType { + TYPE_PUBKEY= 1, + TYPE_ZADDRESS = 2 +} + +export interface EncryptionDetails { + type: EncryptionType; + key: string; + derivation_number?: number; +} +export interface LoginRequestDetailsInterface { + version?: BigNumber; + challenge_id: string; + flags?: BigNumber; + requested_access?: Array | null; + requested_access_audience?: Array; + encryption_details?: EncryptionDetails; + callback_uri?: CallbackUri; +} + +export class LoginRequestDetails implements SerializableEntity { + version: BigNumber = LoginRequestDetails.VERSION_CURRENT; + challenge_id: string; + flags?: BigNumber; + requested_access_audience?: Array; + encryption_details?: EncryptionDetails; + callback_uri?: CallbackUri; + + // Version + static VERSION_CURRENT = new BN(1, 10) + static VERSION_FIRSTVALID = new BN(1, 10) + static VERSION_LASTVALID = new BN(1, 10) + + static FLAG_HAS_AUDIENCE = new BN(1, 10); + static FLAG_HAS_ENCRYPTION_DETAILS = new BN(2, 10); + static FLAG_HAS_CALLBACK_URI = new BN(4, 10); + static FLAG_CALLBACK_CLEAR_ENCRYPTION_DATA = new BN(8, 10); + + constructor( + challenge: LoginRequestDetailsInterface = { challenge_id: ""} + ) { + + this.challenge_id = challenge.challenge_id; + this.flags = challenge?.flags || new BN(0, 10); + this.requested_access_audience = challenge?.requested_access_audience || null; + this.encryption_details = challenge?.encryption_details || null; + this.callback_uri = challenge?.callback_uri || null; + this.version = LoginRequestDetails.VERSION_CURRENT; + + } + + getByteLength(): number { + let length = 0; + + length += fromBase58Check(this.challenge_id).hash.length; + length += varint.encodingLength(this.flags); + + if (this.flags.and(LoginRequestDetails.FLAG_HAS_AUDIENCE).eq(LoginRequestDetails.FLAG_HAS_AUDIENCE)) { + length += varuint.encodingLength(this.requested_access_audience.length); + for (let i = 0; i < this.requested_access_audience.length; i++) { + length += varuint.encodingLength(Buffer.from(this.requested_access_audience[i], 'utf8').length); + length += Buffer.from(this.requested_access_audience[i], 'utf8').length; + } + } + + if (this.flags.and(LoginRequestDetails.FLAG_HAS_ENCRYPTION_DETAILS).eq(LoginRequestDetails.FLAG_HAS_ENCRYPTION_DETAILS)) { + length += varint.encodingLength(new BN(this.encryption_details.type)); + length += varuint.encodingLength(Buffer.from(this.encryption_details.key, 'utf8').length); + length += Buffer.from(this.encryption_details.key, 'utf8').length; + length += varint.encodingLength(new BN(this.encryption_details.derivation_number || 0)); + } + + if (this.flags.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI).eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI)) { + length += varint.encodingLength(new BN(this.callback_uri.type)); + length += varuint.encodingLength(Buffer.from(this.callback_uri.uri, 'utf8').length); + length += Buffer.from(this.callback_uri.uri, 'utf8').length; + } + + return length; + } + + toBuffer(): Buffer { + this.setFlags(); + const writer = new bufferutils.BufferWriter(Buffer.alloc(this.getByteLength())) + + writer.writeSlice(fromBase58Check(this.challenge_id).hash); + writer.writeVarInt(this.flags); + + if (this.flags.and(LoginRequestDetails.FLAG_HAS_AUDIENCE).eq(LoginRequestDetails.FLAG_HAS_AUDIENCE)) { + writer.writeCompactSize(this.requested_access_audience ? this.requested_access_audience.length : 0); + for (let i = 0; i < this.requested_access_audience.length; i++) { + writer.writeVarSlice(Buffer.from(this.requested_access_audience[i], 'utf8')); + } + } + + if (this.flags.and(LoginRequestDetails.FLAG_HAS_ENCRYPTION_DETAILS).eq(LoginRequestDetails.FLAG_HAS_ENCRYPTION_DETAILS)) { + writer.writeVarInt(new BN(this.encryption_details.type)); + writer.writeVarSlice(Buffer.from(this.encryption_details.key, 'utf8')); + writer.writeVarInt(new BN(this.encryption_details.derivation_number || 0)); + } + + if (this.flags.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI).eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI)) { + writer.writeVarInt(new BN(this.callback_uri.type)); + writer.writeVarSlice(Buffer.from(this.callback_uri.uri, 'utf8')); + } + + + + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset?: number): number { + const reader = new bufferutils.BufferReader(buffer, offset); + if (buffer.length == 0) throw new Error("Cannot create challenge from empty buffer"); + + this.challenge_id = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); + this.flags = reader.readVarInt(); + + if (this.flags.and(LoginRequestDetails.FLAG_HAS_AUDIENCE).eq(LoginRequestDetails.FLAG_HAS_AUDIENCE)) { + this.requested_access_audience = []; + const audienceLength = reader.readCompactSize(); + for (let i = 0; i < audienceLength; i++) { + this.requested_access_audience.push(reader.readVarSlice().toString('utf8')); + } + } + + if (this.flags.and(LoginRequestDetails.FLAG_HAS_ENCRYPTION_DETAILS).eq(LoginRequestDetails.FLAG_HAS_ENCRYPTION_DETAILS)) { + this.encryption_details = { + type: reader.readVarInt().toNumber(), + key: reader.readVarSlice().toString('utf8'), + derivation_number: reader.readVarInt().toNumber() + } + } + + if (this.flags.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI).eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI)) { + this.callback_uri = { + type: reader.readVarInt().toNumber(), + uri: reader.readVarSlice().toString('utf8') + } + } + + return reader.offset; + } + + toJson() { + this.setFlags(); + return { + version: this.version ? this.version.toNumber() : 0, + challenge_id: this.challenge_id, + flags: this.flags ? this.flags.toNumber() : 0, + requested_access_audience: this.requested_access_audience, + encryption_details: this.encryption_details, + callback_uri: this.callback_uri + }; + } + + static fromJson(data: any): LoginRequestDetails { + return new LoginRequestDetails({ + version: new BN(data?.version || 0), + challenge_id: data.challenge_id, + flags: new BN(data?.flags || 0), + requested_access_audience: data.requested_access_audience, + encryption_details: data.encryption_details, + callback_uri: data.callback_uri + }) + } + + + setFlags() { + this.flags = new BN(0, 10); + if (this.requested_access_audience && this.requested_access_audience.length > 0) { + this.flags = this.flags.or(LoginRequestDetails.FLAG_HAS_AUDIENCE); + } + if (this.encryption_details) { + this.flags = this.flags.or(LoginRequestDetails.FLAG_HAS_ENCRYPTION_DETAILS); + } + if (this.callback_uri) { + this.flags = this.flags.or(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); + } + } + + isValid(): boolean { + let valid = this.challenge_id != null && this.challenge_id.length > 0; + valid &&= this.flags != null && this.flags.gte(new BN(0)); + return valid; + } + + toSha256() { + return createHash("sha256").update(this.toBuffer()).digest(); + } +} \ No newline at end of file diff --git a/src/vdxf/classes/provisioning/ProvisioningIdentity.ts b/src/vdxf/classes/requestobjects/ProvisioningIdentity.ts similarity index 100% rename from src/vdxf/classes/provisioning/ProvisioningIdentity.ts rename to src/vdxf/classes/requestobjects/ProvisioningIdentity.ts From dc3eaa80185eb01f0a376287829fa0de1bb97ccb Mon Sep 17 00:00:00 2001 From: monkins Date: Mon, 29 Sep 2025 12:14:03 +0100 Subject: [PATCH 006/123] Update for new Objects for Generic request --- .../utils/informationrequest.test.ts | 14 +- src/__tests__/vdxf/encryptiondetails.test.ts | 159 +++++++ .../vdxf/informationrequestdetails.test.ts | 412 +++++++++++++++++ .../vdxf/loginrequestdetails.test.ts | 421 ++++++++++++++++++ .../vdxf/provisioningidentity.test.ts | 12 +- .../vdxf/provisioningrequestdetails.test.ts | 206 +++++++++ src/vdxf/classes/index.ts | 1 + .../requestobjects/EncryptionDetails.ts | 244 ++++++++++ .../requestobjects/InformationRequest.ts | 3 +- .../requestobjects/LoginRequestDetails.ts | 175 ++++---- .../requestobjects/ProvisioningIdentity.ts | 68 +-- 11 files changed, 1568 insertions(+), 147 deletions(-) create mode 100644 src/__tests__/vdxf/encryptiondetails.test.ts create mode 100644 src/__tests__/vdxf/informationrequestdetails.test.ts create mode 100644 src/__tests__/vdxf/loginrequestdetails.test.ts create mode 100644 src/__tests__/vdxf/provisioningrequestdetails.test.ts create mode 100644 src/vdxf/classes/requestobjects/EncryptionDetails.ts diff --git a/src/__tests__/utils/informationrequest.test.ts b/src/__tests__/utils/informationrequest.test.ts index 374768bd..2472f2fe 100644 --- a/src/__tests__/utils/informationrequest.test.ts +++ b/src/__tests__/utils/informationrequest.test.ts @@ -51,16 +51,9 @@ describe('Information Request Tests', () => { expect(requestItem.isFormatValid()).toBe(true); }); - test('should validate format correctly - FULL_DATA | COLLECTION (5)', () => { + test('should validate format correctly - COLLECTION', () => { const requestItem = new RequestItem(); - requestItem.format = new BN(RequestedFormatFlags.FULL_DATA | RequestedFormatFlags.COLLECTION); - - expect(requestItem.isFormatValid()).toBe(true); - }); - - test('should validate format correctly - PARTIAL_DATA | COLLECTION (6)', () => { - const requestItem = new RequestItem(); - requestItem.format = new BN(RequestedFormatFlags.PARTIAL_DATA | RequestedFormatFlags.COLLECTION); + requestItem.format = new BN(RequestedFormatFlags.COLLECTION); expect(requestItem.isFormatValid()).toBe(true); }); @@ -322,9 +315,6 @@ describe('Information Request Tests', () => { expect(deserializedItem.signer).toBe(testSigner); expect(deserializedItem.requestedkeys).toEqual(testRequestedKeys); - // Verify format validation passes - expect(deserializedItem.isFormatValid()).toBe(true); - // Verify we can serialize back to the same hex string const reserializedBuffer = deserializedItem.toBuffer(); expect(reserializedBuffer.toString('hex')).toBe(knownHexString); diff --git a/src/__tests__/vdxf/encryptiondetails.test.ts b/src/__tests__/vdxf/encryptiondetails.test.ts new file mode 100644 index 00000000..69202c1a --- /dev/null +++ b/src/__tests__/vdxf/encryptiondetails.test.ts @@ -0,0 +1,159 @@ +import { BN } from "bn.js"; +import { EncryptionDetails, EncryptionType, SeedDerivationMethod } from "../../vdxf/classes"; +import { TransferDestination } from "../../pbaas/TransferDestination"; + +// Helper function to create TransferDestination from address string +function createTransferDestination(address: string): TransferDestination { + return TransferDestination.fromJson({ + type: 4, // DEST_ID + address: address + }); +} + +const PUBKEY ="03cf9368077ddaaa635d2b524644548b656d8609473f1e267cc1599b595bc7ddc7" + +describe("EncryptionDetails serialization tests", () => { + test("creates valid EncryptionDetails with zaddress", () => { + const details = new EncryptionDetails({ + type: EncryptionType.TYPE_ZADDRESS, + key: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", + derivationNumber: new BN(42), + seedDerivationMethod: new BN(SeedDerivationMethod.BOTH_ADDRESSES), + fromAddress: createTransferDestination("iCkKJuJScy4Z6NSDK7Mt42ZAB2NEnAE1o4"), + toAddress: createTransferDestination("i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X") + }); + + expect(details.isValid()).toBe(true); + expect(details.type).toBe(EncryptionType.TYPE_ZADDRESS); + expect(details.derivationNumber.toNumber()).toBe(42); + expect(details.seedDerivationMethod?.toNumber()).toBe(SeedDerivationMethod.BOTH_ADDRESSES); + }); + + test("validates required addresses based on derivation method", () => { + // FROM_ADDRESS_ONLY requires fromAddress + const fromOnly = new EncryptionDetails({ + type: EncryptionType.TYPE_ZADDRESS, + key: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", + derivationNumber: new BN(1), + seedDerivationMethod: new BN(SeedDerivationMethod.FROM_ADDRESS_ONLY), + fromAddress: createTransferDestination("iCkKJuJScy4Z6NSDK7Mt42ZAB2NEnAE1o4") + }); + expect(fromOnly.isValid()).toBe(true); + + // TO_ADDRESS_ONLY requires toAddress + const toOnly = new EncryptionDetails({ + type: EncryptionType.TYPE_ZADDRESS, + key: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", + derivationNumber: new BN(1), + seedDerivationMethod: new BN(SeedDerivationMethod.TO_ADDRESS_ONLY), + toAddress: createTransferDestination("iCkKJuJScy4Z6NSDK7Mt42ZAB2NEnAE1o4") + }); + expect(toOnly.isValid()).toBe(true); + + // BOTH_ADDRESSES requires both + const both = new EncryptionDetails({ + type: EncryptionType.TYPE_ZADDRESS, + key: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", + derivationNumber: new BN(1), + seedDerivationMethod: new BN(SeedDerivationMethod.BOTH_ADDRESSES), + fromAddress: createTransferDestination("i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), + toAddress: createTransferDestination("i84T3MWcb6zWcwgNZoU3TXtrUn9EqM84A4") + }); + expect(both.isValid()).toBe(true); + }); + + test("fails validation with missing required addresses", () => { + // FROM_ADDRESS_ONLY without fromAddress should fail + const invalidFromOnly = new EncryptionDetails({ + type: EncryptionType.TYPE_ZADDRESS, + key: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", + derivationNumber: new BN(1), + seedDerivationMethod: new BN(SeedDerivationMethod.FROM_ADDRESS_ONLY) + }); + expect(invalidFromOnly.isValid()).toBe(false); + + // BOTH_ADDRESSES with only one address should fail + const invalidBoth = new EncryptionDetails({ + type: EncryptionType.TYPE_ZADDRESS, + key: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", + derivationNumber: new BN(1), + seedDerivationMethod: new BN(SeedDerivationMethod.BOTH_ADDRESSES), + fromAddress: createTransferDestination("iJ5LnijKvp1wkL4hB3EsJ5kjcE4T8VL4hD") + }); + expect(invalidBoth.isValid()).toBe(false); + }); + + test("roundtrip serialization with pubkey hash", () => { + const original = new EncryptionDetails({ + type: EncryptionType.TYPE_PUBKEY, + key: PUBKEY, + derivationNumber: new BN(42), + seedDerivationMethod: new BN(SeedDerivationMethod.BOTH_ADDRESSES), + fromAddress: createTransferDestination("i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), + toAddress: createTransferDestination("i84T3MWcb6zWcwgNZoU3TXtrUn9EqM84A4") + }); + + const buffer = original.toBuffer(); + const deserialized = new EncryptionDetails(); + deserialized.fromBuffer(buffer); + + expect(deserialized.type).toBe(original.type); + expect(deserialized.key).toBe(original.key); + expect(deserialized.derivationNumber.toString()).toBe(original.derivationNumber.toString()); + expect(deserialized.seedDerivationMethod?.toString()).toBe(original.seedDerivationMethod?.toString()); + expect(deserialized.fromAddress?.toBuffer().toString('hex')).toBe(original.fromAddress?.toBuffer().toString('hex')); + expect(deserialized.toAddress?.toBuffer().toString('hex')).toBe(original.toAddress?.toBuffer().toString('hex')); + }); + + test("roundtrip JSON serialization", () => { + const original = new EncryptionDetails({ + type: EncryptionType.TYPE_PUBKEY, + key: PUBKEY, + derivationNumber: new BN(42), + seedDerivationMethod: new BN(SeedDerivationMethod.FROM_ADDRESS_ONLY), + fromAddress: createTransferDestination("i84T3MWcb6zWcwgNZoU3TXtrUn9EqM84A4") + }); + + const json = original.toJSON(); + expect(json.type).toBe(EncryptionType.TYPE_PUBKEY); + expect(json.derivationnumber).toBe(42); + expect(json.seedderivationmethod).toBe(SeedDerivationMethod.FROM_ADDRESS_ONLY); + expect(json.fromaddress?.address).toBeDefined(); + expect(json.fromaddress?.type).toBeDefined(); + + const fromJson = EncryptionDetails.fromJSON(json); + expect(fromJson.toBuffer().toString("hex")).toBe(original.toBuffer().toString("hex")); + }); + + test("validates key format", () => { + // Valid pubkey hash format + const validPubkey = new EncryptionDetails({ + type: EncryptionType.TYPE_PUBKEY, + key: PUBKEY, + derivationNumber: new BN(1) + }); + expect(validPubkey.isKeyFormatValid()).toBe(true); + + // Invalid pubkey hash format + const invalidPubkey = new EncryptionDetails({ + type: EncryptionType.TYPE_PUBKEY, + key: "invalid_address", + derivationNumber: new BN(1) + }); + expect(invalidPubkey.isKeyFormatValid()).toBe(false); + expect(invalidPubkey.isValid()).toBe(false); + }); + + test("handles NONE derivation method", () => { + const details = new EncryptionDetails({ + type: EncryptionType.TYPE_PUBKEY, + key: PUBKEY, + derivationNumber: new BN(1), + seedDerivationMethod: new BN(SeedDerivationMethod.NONE) + }); + + expect(details.isValid()).toBe(true); + expect(details.seedDerivationMethod?.toNumber()).toBe(SeedDerivationMethod.NONE); + expect(details.seedDerivationMethod == null || details.seedDerivationMethod.eq(new BN(SeedDerivationMethod.NONE))).toBe(true); + }); +}); diff --git a/src/__tests__/vdxf/informationrequestdetails.test.ts b/src/__tests__/vdxf/informationrequestdetails.test.ts new file mode 100644 index 00000000..89cb3b22 --- /dev/null +++ b/src/__tests__/vdxf/informationrequestdetails.test.ts @@ -0,0 +1,412 @@ +import { BN } from "bn.js"; +import { + RequestItem, + RequestedFormatFlags, + InformationType +} from "../../vdxf/classes"; +import { + ATTESTATION_NAME +} from "../../vdxf/keys"; +import { + IDENTITY_FIRSTNAME, + IDENTITY_DATEOFBIRTH +} from "../../vdxf/identitydatakeys"; + +// Helper function to create RequestItem with properties +function createRequestItem(props: any = {}) { + const item = new RequestItem(); + Object.assign(item, props); + return item; +} + +const TEST_IDENTITY_ID_1 = "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"; + +describe("RequestItem (InformationRequestDetails)", () => { + describe("constructor and basic properties", () => { + test("creates instance with default values", () => { + const item = new RequestItem(); + + expect(item.version.toString()).toBe("1"); + expect(item.format.toString()).toBe("1"); // FULL_DATA + expect(item.type.toString()).toBe("1"); // ATTESTATION + expect(item.id).toEqual({}); + expect(item.signer).toBe(""); + expect(item.requestedkeys).toEqual([]); + }); + + test("creates instance with custom values", () => { + const item = createRequestItem({ + version: new BN(1), + format: new BN(RequestedFormatFlags.PARTIAL_DATA), + type: new BN(InformationType.CREDENTIAL), + id: { attestationId: "123", type: "identity" }, + signer: TEST_IDENTITY_ID_1, + requestedkeys: ["key1", "key2"] + }); + + expect(item.version.toString()).toBe("1"); + expect(item.format.toNumber()).toBe(RequestedFormatFlags.PARTIAL_DATA); + expect(item.type.toNumber()).toBe(InformationType.CREDENTIAL); + expect(item.id).toEqual({ attestationId: "123", type: "identity" }); + expect(item.signer).toBe(TEST_IDENTITY_ID_1); + expect(item.requestedkeys).toEqual(["key1", "key2"]); + }); + }); + + describe("validation", () => { + test("validates with correct format flags", () => { + // FULL_DATA + const fullData = createRequestItem({ + version: new BN(1), + format: new BN(RequestedFormatFlags.FULL_DATA), + type: new BN(InformationType.ATTESTATION), + id: {}, + signer: TEST_IDENTITY_ID_1 + }); + expect(fullData.isValid()).toBe(true); + expect(fullData.isFormatValid()).toBe(true); + + // PARTIAL_DATA + const partialData = createRequestItem({ + version: new BN(1), + format: new BN(RequestedFormatFlags.PARTIAL_DATA), + type: new BN(InformationType.CLAIM), + id: {}, + signer: TEST_IDENTITY_ID_1 + }); + expect(partialData.isValid()).toBe(true); + expect(partialData.isFormatValid()).toBe(true); + + }); + + test("rejects invalid format flags", () => { + const invalidFormat = createRequestItem({ + version: new BN(1), + format: new BN(3), // Invalid: not FULL, PARTIAL, or valid combinations + type: new BN(InformationType.ATTESTATION), + id: {}, + signer: TEST_IDENTITY_ID_1 + }); + expect(invalidFormat.isValid()).toBe(false); + expect(invalidFormat.isFormatValid()).toBe(false); + }); + + test("validates information types", () => { + const validTypes = [ + InformationType.ATTESTATION, + InformationType.CLAIM, + InformationType.CREDENTIAL + ]; + + validTypes.forEach(type => { + const item = createRequestItem({ + version: new BN(1), + format: new BN(RequestedFormatFlags.FULL_DATA), + type: new BN(type), + id: {}, + signer: TEST_IDENTITY_ID_1 + }); + expect(item.isValid()).toBe(true); + }); + + // Invalid type + const invalidType = createRequestItem({ + version: new BN(1), + format: new BN(RequestedFormatFlags.FULL_DATA), + type: new BN(99), // Invalid type + id: {}, + signer: TEST_IDENTITY_ID_1 + }); + expect(invalidType.isValid()).toBe(false); + }); + + test("validates version range", () => { + // Valid version + const validVersion = createRequestItem({ + version: new BN(1), + format: new BN(RequestedFormatFlags.FULL_DATA), + type: new BN(InformationType.ATTESTATION), + id: {}, + signer: TEST_IDENTITY_ID_1 + }); + expect(validVersion.isValid()).toBe(true); + + // Invalid version (too low) + const lowVersion = createRequestItem({ + version: new BN(0), + format: new BN(RequestedFormatFlags.FULL_DATA), + type: new BN(InformationType.ATTESTATION), + id: {}, + signer: TEST_IDENTITY_ID_1 + }); + expect(lowVersion.isValid()).toBe(false); + + // Invalid version (too high) + const highVersion = createRequestItem({ + version: new BN(99), + format: new BN(RequestedFormatFlags.FULL_DATA), + type: new BN(InformationType.ATTESTATION), + id: {}, + signer: TEST_IDENTITY_ID_1 + }); + expect(highVersion.isValid()).toBe(false); + }); + }); + + describe("serialization", () => { + test("roundtrip serialization", () => { + const original = createRequestItem({ + version: new BN(1), + format: new BN(RequestedFormatFlags.PARTIAL_DATA), + type: new BN(InformationType.CREDENTIAL), + id: { attestationId: "abc123", type: "identity", scope: "personal" }, + signer: TEST_IDENTITY_ID_1, + requestedkeys: ["name", "email", "birthdate"] + }); + + const buffer = original.toBuffer(); + const deserialized = new RequestItem(); + deserialized.fromBuffer(buffer); + + expect(deserialized.version.toString()).toBe(original.version.toString()); + expect(deserialized.format.toString()).toBe(original.format.toString()); + expect(deserialized.type.toString()).toBe(original.type.toString()); + expect(deserialized.id).toEqual(original.id); + expect(deserialized.signer).toBe(original.signer); + expect(deserialized.requestedkeys).toEqual(original.requestedkeys); + }); + + test("roundtrip JSON serialization", () => { + const original = createRequestItem({ + version: new BN(1), + format: new BN(RequestedFormatFlags.FULL_DATA | RequestedFormatFlags.COLLECTION), + type: new BN(InformationType.CLAIM), + id: { claimId: "xyz789" }, + signer: TEST_IDENTITY_ID_1, + requestedkeys: ["verified", "timestamp"] + }); + + const json = original.toJSON(); + const fromJson = new RequestItem(); + fromJson.fromJSON(json); + + expect(fromJson.version.toString()).toBe(original.version.toString()); + expect(fromJson.format.toString()).toBe(original.format.toString()); + expect(fromJson.type.toString()).toBe(original.type.toString()); + expect(fromJson.id).toEqual(original.id); + expect(fromJson.signer).toBe(original.signer); + expect(fromJson.requestedkeys).toEqual(original.requestedkeys); + }); + + test("handles empty requestedkeys", () => { + const item = createRequestItem({ + version: new BN(1), + format: new BN(RequestedFormatFlags.FULL_DATA), + type: new BN(InformationType.ATTESTATION), + id: { id: "test" }, + signer: TEST_IDENTITY_ID_1, + requestedkeys: [] + }); + + const buffer = item.toBuffer(); + const deserialized = new RequestItem(); + deserialized.fromBuffer(buffer); + + expect(deserialized.requestedkeys).toEqual([]); + }); + + test("handles undefined requestedkeys", () => { + const item = createRequestItem({ + version: new BN(1), + format: new BN(RequestedFormatFlags.FULL_DATA), + type: new BN(InformationType.ATTESTATION), + id: { id: "test" }, + signer: TEST_IDENTITY_ID_1 + // requestedkeys is undefined + }); + + const buffer = item.toBuffer(); + const deserialized = new RequestItem(); + deserialized.fromBuffer(buffer); + + expect(deserialized.requestedkeys).toEqual([]); + }); + }); + + describe("edge cases", () => { + test("handles complex id objects", () => { + const complexId = { + primary: "main-id", + secondary: "backup-id", + metadata: "serialized-metadata" + }; + + const item = createRequestItem({ + version: new BN(1), + format: new BN(RequestedFormatFlags.FULL_DATA), + type: new BN(InformationType.CREDENTIAL), + id: complexId, + signer: TEST_IDENTITY_ID_1 + }); + + const buffer = item.toBuffer(); + const deserialized = new RequestItem(); + deserialized.fromBuffer(buffer); + + expect(deserialized.id).toEqual(complexId); + }); + + test("handles empty id object", () => { + const item = createRequestItem({ + version: new BN(1), + format: new BN(RequestedFormatFlags.PARTIAL_DATA), + type: new BN(InformationType.ATTESTATION), + id: {}, + signer: TEST_IDENTITY_ID_1 + }); + + const buffer = item.toBuffer(); + const deserialized = new RequestItem(); + deserialized.fromBuffer(buffer); + + expect(deserialized.id).toEqual({}); + }); + + test("calculates byte length correctly", () => { + const item = createRequestItem({ + version: new BN(1), + format: new BN(RequestedFormatFlags.PARTIAL_DATA), + type: new BN(InformationType.CREDENTIAL), + id: { test: "value" }, + signer: TEST_IDENTITY_ID_1, + requestedkeys: ["key1", "key2"] + }); + + const expectedLength = item.getByteLength(); + const actualBuffer = item.toBuffer(); + + expect(actualBuffer.length).toBe(expectedLength); + }); + }); + + describe("real-world examples", () => { + const VALU_SIGNER = "i8mq7inkLvNRwYQNTtt3uaaJCs5YkKxjGg"; + const VALU_ATTESTATION_NAME = "Testname"; + + test("certification request with partial data", () => { + const certificationRequest = createRequestItem({ + format: new BN(RequestedFormatFlags.PARTIAL_DATA), + type: new BN(InformationType.ATTESTATION), + id: { [ATTESTATION_NAME.vdxfid]: VALU_ATTESTATION_NAME }, // "vrsc::attestation.name" : name + signer: VALU_SIGNER, + requestedkeys: [IDENTITY_FIRSTNAME.vdxfid, IDENTITY_DATEOFBIRTH.vdxfid] + }); + + expect(certificationRequest.format.toNumber()).toBe(RequestedFormatFlags.PARTIAL_DATA); + expect(certificationRequest.type.toNumber()).toBe(InformationType.ATTESTATION); + expect(certificationRequest.id[ATTESTATION_NAME.vdxfid]).toBe(VALU_ATTESTATION_NAME); + expect(certificationRequest.signer).toBe(VALU_SIGNER); + expect(certificationRequest.requestedkeys).toContain(IDENTITY_FIRSTNAME.vdxfid); + expect(certificationRequest.requestedkeys).toContain(IDENTITY_DATEOFBIRTH.vdxfid); + expect(certificationRequest.isValid()).toBe(true); + + // Test serialization roundtrip + const buffer = certificationRequest.toBuffer(); + const deserialized = new RequestItem(); + deserialized.fromBuffer(buffer); + + expect(deserialized.format.toNumber()).toBe(certificationRequest.format.toNumber()); + expect(deserialized.type.toNumber()).toBe(certificationRequest.type.toNumber()); + expect(deserialized.id).toEqual(certificationRequest.id); + expect(deserialized.signer).toBe(certificationRequest.signer); + expect(deserialized.requestedkeys).toEqual(certificationRequest.requestedkeys); + }); + + test("certification request with full data", () => { + const certificationRequest1 = createRequestItem({ + format: new BN(RequestedFormatFlags.FULL_DATA), + type: new BN(InformationType.ATTESTATION), + id: { [ATTESTATION_NAME.vdxfid]: VALU_ATTESTATION_NAME }, // "vrsc::attestation.name" : name + signer: VALU_SIGNER, + }); + + expect(certificationRequest1.format.toNumber()).toBe(RequestedFormatFlags.FULL_DATA); + expect(certificationRequest1.type.toNumber()).toBe(InformationType.ATTESTATION); + expect(certificationRequest1.id[ATTESTATION_NAME.vdxfid]).toBe(VALU_ATTESTATION_NAME); + expect(certificationRequest1.signer).toBe(VALU_SIGNER); + expect(certificationRequest1.requestedkeys).toEqual([]); // Default empty array + expect(certificationRequest1.isValid()).toBe(true); + + // Test serialization roundtrip + const buffer = certificationRequest1.toBuffer(); + const deserialized = new RequestItem(); + deserialized.fromBuffer(buffer); + + expect(deserialized.format.toNumber()).toBe(certificationRequest1.format.toNumber()); + expect(deserialized.type.toNumber()).toBe(certificationRequest1.type.toNumber()); + expect(deserialized.id).toEqual(certificationRequest1.id); + expect(deserialized.signer).toBe(certificationRequest1.signer); + expect(deserialized.requestedkeys).toEqual(certificationRequest1.requestedkeys); + }); + + test("certification request with collection format", () => { + const certificationRequest2 = createRequestItem({ + format: new BN(RequestedFormatFlags.COLLECTION), + type: new BN(InformationType.ATTESTATION), + id: { + [ATTESTATION_NAME.vdxfid]: VALU_ATTESTATION_NAME, + "iEpYe4cC73H7i9ay3G8geAjD1tFAhWscvj": "" + }, // "vrsc::attestation.name" : name + signer: VALU_SIGNER, + }); + + expect(certificationRequest2.format.toNumber()).toBe(RequestedFormatFlags.COLLECTION); + expect(certificationRequest2.type.toNumber()).toBe(InformationType.ATTESTATION); + expect(certificationRequest2.id[ATTESTATION_NAME.vdxfid]).toBe(VALU_ATTESTATION_NAME); + expect(certificationRequest2.signer).toBe(VALU_SIGNER); + expect(certificationRequest2.requestedkeys).toEqual([]); // Default empty array + expect(certificationRequest2.isValid()).toBe(true); + + // Test serialization roundtrip + const buffer = certificationRequest2.toBuffer(); + const deserialized = new RequestItem(); + deserialized.fromBuffer(buffer); + + expect(deserialized.format.toNumber()).toBe(certificationRequest2.format.toNumber()); + expect(deserialized.type.toNumber()).toBe(certificationRequest2.type.toNumber()); + expect(deserialized.id).toEqual(certificationRequest2.id); + expect(deserialized.signer).toBe(certificationRequest2.signer); + expect(deserialized.requestedkeys).toEqual(certificationRequest2.requestedkeys); + }); + + test("validates VDXF key usage", () => { + // Test that the VDXF keys have the expected structure + expect(ATTESTATION_NAME.vdxfid).toBeDefined(); + expect(IDENTITY_FIRSTNAME.vdxfid).toBeDefined(); + expect(IDENTITY_DATEOFBIRTH.vdxfid).toBeDefined(); + + // Test that the VDXF keys are strings (hex format) + expect(typeof ATTESTATION_NAME.vdxfid).toBe('string'); + expect(typeof IDENTITY_FIRSTNAME.vdxfid).toBe('string'); + expect(typeof IDENTITY_DATEOFBIRTH.vdxfid).toBe('string'); + + // Test creating a request with mixed VDXF keys and strings + const mixedRequest = createRequestItem({ + format: new BN(RequestedFormatFlags.PARTIAL_DATA), + type: new BN(InformationType.ATTESTATION), + id: { + [ATTESTATION_NAME.vdxfid]: VALU_ATTESTATION_NAME, + "customKey": "customValue" + }, + signer: VALU_SIGNER, + requestedkeys: [IDENTITY_FIRSTNAME.vdxfid, "customRequestedKey"] + }); + + expect(mixedRequest.isValid()).toBe(true); + expect(mixedRequest.id[ATTESTATION_NAME.vdxfid]).toBe(VALU_ATTESTATION_NAME); + expect(mixedRequest.id["customKey"]).toBe("customValue"); + expect(mixedRequest.requestedkeys).toContain(IDENTITY_FIRSTNAME.vdxfid); + expect(mixedRequest.requestedkeys).toContain("customRequestedKey"); + }); + }); +}); diff --git a/src/__tests__/vdxf/loginrequestdetails.test.ts b/src/__tests__/vdxf/loginrequestdetails.test.ts new file mode 100644 index 00000000..a31469f3 --- /dev/null +++ b/src/__tests__/vdxf/loginrequestdetails.test.ts @@ -0,0 +1,421 @@ +import { BN } from "bn.js"; +import { + LoginRequestDetails, + CallbackUriType, + LoginRequestDetailsInterface, + LoginPermissionType +} from "../../vdxf/classes/requestobjects/LoginRequestDetails"; + +// Test constants with valid addresses from the codebase +const TEST_CHALLENGE_ID = "iMdf3BJ1mEtKMAJqNg8hj5fMnCUCc3bpFN"; +const TEST_IDENTITY_ID_1 = "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"; +const TEST_IDENTITY_ID_2 = "i84T3MWcb6zWcwgNZoU3TXtrUn9EqM84A4"; +const TEST_IDENTITY_ID_3 = "iJ5LnijKvp1wkL4hB3EsJ5kjcE4T8VL4hD"; + +const SERIALIZED_LOGIN_REQUEST_DETAILS = Buffer.from("c72c5b342995a2186f96271e91686c5e942d13e10303012a5fc0e9dedf4f1e8351fe652a140e9dd38fa5a902324afad29f51859c54050db854d2c9bb52acd9bd03a0276f355ad37d8e5d2d10f16c1d051b6f6ead62011c68747470733a2f2f6578616d706c652e636f6d2f63616c6c6261636b", 'hex'); // Replace with actual serialized data + + +describe("LoginRequestDetails", () => { + describe("constructor and basic properties", () => { + test("creates instance with minimal required data", () => { + const details = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID + }); + + expect(details.challengeId).toBe(TEST_CHALLENGE_ID); + expect(details.version.toString()).toBe("1"); + expect(details.flags?.toString()).toBe("0"); + expect(details.permissions).toBeNull(); + expect(details.callbackUri).toBeNull(); + }); + + test("creates instance with all optional data", () => { + const details = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID, + permissions: [ + { type: LoginPermissionType.REQUIRED_ID, identityid: TEST_IDENTITY_ID_1 }, + { type: LoginPermissionType.REQUIRED_SYSTEM, identityid: TEST_IDENTITY_ID_2 }, + { type: LoginPermissionType.REQUIRED_PARENT, identityid: TEST_IDENTITY_ID_3 } + ], + callbackUri: { + type: CallbackUriType.TYPE_WEBHOOK, + uri: "https://example.com/callback" + } + }); + + // Need to manually call setFlags as constructor doesn't call it automatically + details.setFlags(); + + expect(details.toBuffer().toString('hex')).toBe(SERIALIZED_LOGIN_REQUEST_DETAILS.toString('hex')); + expect(details.challengeId).toBe(TEST_CHALLENGE_ID); + expect(details.version.toString()).toBe("1"); + expect(details.flags?.toString()).toBe("3"); // Both flags set (1 + 2) + expect(details.permissions).toHaveLength(3); + expect(details.callbackUri).toEqual({ + type: CallbackUriType.TYPE_WEBHOOK, + uri: "https://example.com/callback" + }); + }); + + test("creates instance with default constructor", () => { + const details = new LoginRequestDetails(); + + expect(details.challengeId).toBe(""); + expect(details.version.toString()).toBe("1"); + expect(details.flags?.toString()).toBe("0"); + expect(details.permissions).toBeNull(); + expect(details.callbackUri).toBeNull(); + }); + }); + + describe("flag management", () => { + test("sets permissions flag when permissions are provided", () => { + const details = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID, + permissions: [ + { type: LoginPermissionType.REQUIRED_ID, identityid: TEST_IDENTITY_ID_1 } + ] + }); + + details.setFlags(); + const hasPermissionsFlag = details.flags?.and(LoginRequestDetails.FLAG_HAS_PERMISSIONS); + expect(hasPermissionsFlag?.eq(LoginRequestDetails.FLAG_HAS_PERMISSIONS)).toBe(true); + }); + + test("sets callback URI flag when callback URI is provided", () => { + const details = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID, + callbackUri: { + type: CallbackUriType.TYPE_REDIRECT, + uri: "https://app.example.com/login" + } + }); + + details.setFlags(); + const hasCallbackFlag = details.flags?.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); + expect(hasCallbackFlag?.eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI)).toBe(true); + }); + + test("sets multiple flags when multiple optional data is provided", () => { + const details = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID, + permissions: [ + { type: LoginPermissionType.REQUIRED_PARENT, identityid: TEST_IDENTITY_ID_3 } + ], + callbackUri: { + type: CallbackUriType.TYPE_DEEPLINK, + uri: "myapp://callback" + } + }); + + details.setFlags(); + const hasPermissionsFlag = details.flags?.and(LoginRequestDetails.FLAG_HAS_PERMISSIONS); + const hasCallbackFlag = details.flags?.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); + + expect(hasPermissionsFlag?.eq(LoginRequestDetails.FLAG_HAS_PERMISSIONS)).toBe(true); + expect(hasCallbackFlag?.eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI)).toBe(true); + }); + + test("does not set flags when optional data is not provided", () => { + const details = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID + }); + + details.setFlags(); + expect(details.flags?.toString()).toBe("0"); + }); + }); + + describe("validation", () => { + test("validates with valid challenge ID", () => { + const details = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID + }); + + expect(details.isValid()).toBe(true); + }); + + test("validates with all data provided", () => { + const details = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID, + permissions: [ + { type: LoginPermissionType.REQUIRED_ID, identityid: TEST_IDENTITY_ID_1 }, + ], + callbackUri: { + type: CallbackUriType.TYPE_OAUTH2, + uri: "https://oauth.example.com/callback" + } + }); + + expect(details.isValid()).toBe(true); + }); + + test("rejects empty challenge ID", () => { + const details = new LoginRequestDetails({ + challengeId: "" + }); + + expect(details.isValid()).toBe(false); + }); + + test("rejects invalid challenge ID format", () => { + const details = new LoginRequestDetails({ + challengeId: "invalid-challenge-id" + }); + + expect(details.isValid()).toBe(false); + }); + }); + + describe("callback URI types", () => { + test("handles webhook callback", () => { + const details = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID, + callbackUri: { + type: CallbackUriType.TYPE_WEBHOOK, + uri: "https://api.example.com/webhook" + } + }); + + expect(details.callbackUri?.type).toBe(CallbackUriType.TYPE_WEBHOOK); + expect(details.callbackUri?.uri).toBe("https://api.example.com/webhook"); + }); + + test("handles redirect callback", () => { + const details = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID, + callbackUri: { + type: CallbackUriType.TYPE_REDIRECT, + uri: "https://app.example.com/login/success" + } + }); + + expect(details.callbackUri?.type).toBe(CallbackUriType.TYPE_REDIRECT); + expect(details.callbackUri?.uri).toBe("https://app.example.com/login/success"); + }); + + test("handles deeplink callback", () => { + const details = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID, + callbackUri: { + type: CallbackUriType.TYPE_DEEPLINK, + uri: "myapp://auth/callback" + } + }); + + expect(details.callbackUri?.type).toBe(CallbackUriType.TYPE_DEEPLINK); + expect(details.callbackUri?.uri).toBe("myapp://auth/callback"); + }); + + test("handles OAuth2 callback", () => { + const details = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID, + callbackUri: { + type: CallbackUriType.TYPE_OAUTH2, + uri: "https://auth.example.com/oauth2/callback" + } + }); + + expect(details.callbackUri?.type).toBe(CallbackUriType.TYPE_OAUTH2); + expect(details.callbackUri?.uri).toBe("https://auth.example.com/oauth2/callback"); + }); + }); + + describe("serialization", () => { + test("roundtrip serialization with minimal data", () => { + const original = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID + }); + + const buffer = original.toBuffer(); + const deserialized = new LoginRequestDetails(); + deserialized.fromBuffer(buffer); + + expect(deserialized.challengeId).toBe(original.challengeId); + expect(deserialized.version.toString()).toBe(original.version.toString()); + expect(deserialized.flags?.toString()).toBe(original.flags?.toString()); + expect(deserialized.permissions).toBe(original.permissions); + expect(deserialized.callbackUri).toBe(original.callbackUri); + }); + + test("roundtrip serialization with permissions", () => { + const original = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID, + permissions: [ + { type: LoginPermissionType.REQUIRED_ID, identityid: TEST_IDENTITY_ID_1 }, + { type: LoginPermissionType.REQUIRED_SYSTEM, identityid: TEST_IDENTITY_ID_2 }, + { type: LoginPermissionType.REQUIRED_PARENT, identityid: TEST_IDENTITY_ID_3 } + ] + }); + + const buffer = original.toBuffer(); + const deserialized = new LoginRequestDetails(); + deserialized.fromBuffer(buffer); + + expect(deserialized.challengeId).toBe(original.challengeId); + expect(deserialized.permissions).toEqual(original.permissions); + }); + + test("roundtrip serialization with callback URI", () => { + const original = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID, + callbackUri: { + type: CallbackUriType.TYPE_WEBHOOK, + uri: "https://api.example.com/callback" + } + }); + + const buffer = original.toBuffer(); + const deserialized = new LoginRequestDetails(); + deserialized.fromBuffer(buffer); + + expect(deserialized.challengeId).toBe(original.challengeId); + expect(deserialized.callbackUri).toEqual(original.callbackUri); + }); + + test("roundtrip serialization with all data", () => { + const original = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID, + permissions: [ + { type: LoginPermissionType.REQUIRED_ID, identityid: TEST_IDENTITY_ID_1 }, + { type: LoginPermissionType.REQUIRED_PARENT, identityid: TEST_IDENTITY_ID_3 } + ], + callbackUri: { + type: CallbackUriType.TYPE_REDIRECT, + uri: "https://app.example.com/success" + } + }); + + const buffer = original.toBuffer(); + const deserialized = new LoginRequestDetails(); + deserialized.fromBuffer(buffer); + + expect(deserialized.challengeId).toBe(original.challengeId); + expect(deserialized.permissions).toEqual(original.permissions); + expect(deserialized.callbackUri).toEqual(original.callbackUri); + }); + + test("roundtrip JSON serialization", () => { + const original = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID, + permissions: [ + { type: LoginPermissionType.REQUIRED_ID, identityid: TEST_IDENTITY_ID_1 } + ], + callbackUri: { + type: CallbackUriType.TYPE_OAUTH2, + uri: "https://oauth.example.com" + } + }); + + const json = original.toJson(); + const fromJson = LoginRequestDetails.fromJson(json); + + expect(fromJson.challengeId).toBe(original.challengeId); + expect(fromJson.permissions).toEqual(original.permissions); + expect(fromJson.callbackUri).toEqual(original.callbackUri); + }); + + test("hex serialization verification with hardcoded expected data", () => { + const original = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID, + permissions: [ + { type: LoginPermissionType.REQUIRED_ID, identityid: TEST_IDENTITY_ID_1 } + ], + callbackUri: { + type: CallbackUriType.TYPE_WEBHOOK, + uri: "https://example.com/webhook" + } + }); + + const buffer = original.toBuffer(); + const hexString = buffer.toString('hex'); + + + // Expected hex string (to be hardcoded after first run) + const expectedHex = "c72c5b342995a2186f96271e91686c5e942d13e10301012a5fc0e9dedf4f1e8351fe652a140e9dd38fa5a9011b68747470733a2f2f6578616d706c652e636f6d2f776562686f6f6b"; // Will be filled after capturing the output + + // For now, just verify the roundtrip works + const deserialized = new LoginRequestDetails(); + deserialized.fromBuffer(buffer); + + expect(hexString).toBe(expectedHex); + expect(deserialized.challengeId).toBe(original.challengeId); + expect(deserialized.permissions).toEqual(original.permissions); + expect(deserialized.callbackUri).toEqual(original.callbackUri); + + // Verify hex length is reasonable + expect(hexString.length).toBeGreaterThan(0); + expect(hexString.length % 2).toBe(0); // Even length for valid hex + }); + }); + + describe("edge cases", () => { + test("handles empty permissions array", () => { + const details = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID, + permissions: [] + }); + + const buffer = details.toBuffer(); + const deserialized = new LoginRequestDetails(); + deserialized.fromBuffer(buffer); + + expect(deserialized.permissions).toEqual([]); + }); + + test("calculates byte length correctly", () => { + const details = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID, + permissions: [ + { type: LoginPermissionType.REQUIRED_ID, identityid: TEST_IDENTITY_ID_1 } + ], + callbackUri: { + type: CallbackUriType.TYPE_WEBHOOK, + uri: "https://example.com" + } + }); + + const expectedLength = details.getByteLength(); + const actualBuffer = details.toBuffer(); + + expect(actualBuffer.length).toBe(expectedLength); + }); + + test("handles multiple permissions", () => { + const longPermissions = [ + { type: LoginPermissionType.REQUIRED_ID, identityid: TEST_IDENTITY_ID_1 }, + { type: LoginPermissionType.REQUIRED_SYSTEM, identityid: TEST_IDENTITY_ID_2 }, + { type: LoginPermissionType.REQUIRED_PARENT, identityid: TEST_IDENTITY_ID_3 }, + { type: LoginPermissionType.REQUIRED_ID, identityid: TEST_IDENTITY_ID_1 }, + { type: LoginPermissionType.REQUIRED_SYSTEM, identityid: TEST_IDENTITY_ID_2 } + ]; + const details = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID, + permissions: longPermissions + }); + + const buffer = details.toBuffer(); + const deserialized = new LoginRequestDetails(); + deserialized.fromBuffer(buffer); + + expect(deserialized.permissions).toEqual(longPermissions); + }); + + test("handles long URIs", () => { + const longUri = "https://very-long-domain-name-for-testing-purposes.example.com/path/to/callback/endpoint/with/query?param1=value1¶m2=value2"; + const details = new LoginRequestDetails({ + challengeId: TEST_CHALLENGE_ID, + callbackUri: { + type: CallbackUriType.TYPE_REDIRECT, + uri: longUri + } + }); + + const buffer = details.toBuffer(); + const deserialized = new LoginRequestDetails(); + deserialized.fromBuffer(buffer); + + expect(deserialized.callbackUri?.uri).toBe(longUri); + }); + }); +}); diff --git a/src/__tests__/vdxf/provisioningidentity.test.ts b/src/__tests__/vdxf/provisioningidentity.test.ts index 0249d775..b62ee504 100644 --- a/src/__tests__/vdxf/provisioningidentity.test.ts +++ b/src/__tests__/vdxf/provisioningidentity.test.ts @@ -8,9 +8,9 @@ describe('Serializes and deserializes ProvisionIdentity', () => { const provisionJson = { version: 1, flags: ProvisionIdentity.FLAG_HAS_IDENTITYID.or(ProvisionIdentity.FLAG_HAS_WEBHOOK).toNumber(), - identity_id: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - system_id: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", - parent_id: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + identityId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + systemId: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", + parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", webhook: "https://mydomain.com/webhook" } @@ -27,9 +27,9 @@ describe('Serializes and deserializes ProvisionIdentity', () => { version: 1, flags: ProvisionIdentity.FLAG_HAS_IDENTITYID .or(ProvisionIdentity.FLAG_HAS_WEBHOOK).or(ProvisionIdentity.FLAG_HAS_FQN).toNumber(), - identity_id: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - system_id: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", - parent_id: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + identityId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + systemId: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", + parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", webhook: "https://mydomain.com/webhook", fqn: "my.fully.vrsc@" } diff --git a/src/__tests__/vdxf/provisioningrequestdetails.test.ts b/src/__tests__/vdxf/provisioningrequestdetails.test.ts new file mode 100644 index 00000000..64710774 --- /dev/null +++ b/src/__tests__/vdxf/provisioningrequestdetails.test.ts @@ -0,0 +1,206 @@ +import { BN } from "bn.js"; +import { ProvisionIdentity as ProvisioningIdentity } from "../../vdxf/classes"; + +describe("ProvisioningIdentity", () => { + describe("constructor and basic properties", () => { + test("creates instance with minimal values", () => { + const identity = new ProvisioningIdentity({ + flags: new BN(0), + parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB" + }); + + expect(identity.version.toString()).toBe("1"); + expect(identity.flags.toString()).toBe("0"); + expect(identity.parentId).toBe("iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB"); + expect(identity.systemId).toBe(undefined); + expect(identity.identityId).toBe(undefined); + expect(identity.fqn).toBe(undefined); + expect(identity.webhook).toBe(undefined); + }); + + test("creates instance with all values", () => { + const identity = new ProvisioningIdentity({ + version: new BN(1), + flags: new BN(31), // All flags set + systemId: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", + parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + identityId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + fqn: "test.identity", + webhook: "https://webhook.example.com" + }); + + expect(identity.version.toString()).toBe("1"); + expect(identity.flags.toString()).toBe("31"); + expect(identity.systemId).toBe("iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"); + expect(identity.parentId).toBe("iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB"); + expect(identity.identityId).toBe("iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB"); + expect(identity.fqn).toBe("test.identity"); + expect(identity.webhook).toBe("https://webhook.example.com"); + }); + }); + + describe("flag management", () => { + test("sets FLAG_HAS_IDENTITYID when identity ID is provided", () => { + const identity = new ProvisioningIdentity({ + flags: new BN(0), + parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + identityId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB" + }); + + identity.setFlags(); + const hasIdentityFlag = identity.flags.and(ProvisioningIdentity.FLAG_HAS_IDENTITYID); + expect(hasIdentityFlag.eq(ProvisioningIdentity.FLAG_HAS_IDENTITYID)).toBe(true); + }); + + test("sets FLAG_HAS_FQN when FQN is provided", () => { + const identity = new ProvisioningIdentity({ + flags: new BN(0), + parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + fqn: "test.identity" + }); + + identity.setFlags(); + const hasFqnFlag = identity.flags.and(ProvisioningIdentity.FLAG_HAS_FQN); + expect(hasFqnFlag.eq(ProvisioningIdentity.FLAG_HAS_FQN)).toBe(true); + }); + + test("sets FLAG_HAS_WEBHOOK when webhook is provided", () => { + const identity = new ProvisioningIdentity({ + flags: new BN(0), + parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + webhook: "https://example.com/webhook" + }); + + identity.setFlags(); + const hasWebhookFlag = identity.flags.and(ProvisioningIdentity.FLAG_HAS_WEBHOOK); + expect(hasWebhookFlag.eq(ProvisioningIdentity.FLAG_HAS_WEBHOOK)).toBe(true); + }); + + test("sets FLAG_PARENT_AS_FQN when parentId is not a valid address", () => { + const identity = new ProvisioningIdentity({ + flags: new BN(0), + parentId: "invalid.parent.name" + }); + + identity.setFlags(); + const hasParentFqnFlag = identity.flags.and(ProvisioningIdentity.FLAG_PARENT_AS_FQN); + expect(hasParentFqnFlag.eq(ProvisioningIdentity.FLAG_PARENT_AS_FQN)).toBe(true); + }); + + test("sets FLAG_SYSTEM_AS_SIGNATURE when systemId is not provided", () => { + const identity = new ProvisioningIdentity({ + flags: new BN(0), + parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB" + }); + + identity.setFlags(); + const hasSystemSignatureFlag = identity.flags.and(ProvisioningIdentity.FLAG_SYSTEM_AS_SIGNATURE); + expect(hasSystemSignatureFlag.eq(ProvisioningIdentity.FLAG_SYSTEM_AS_SIGNATURE)).toBe(true); + }); + + test("sets multiple flags when multiple values are provided", () => { + const identity = new ProvisioningIdentity({ + flags: new BN(0), + parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + identityId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + fqn: "test.identity", + webhook: "https://example.com/webhook" + }); + + identity.setFlags(); + const hasIdentityFlag = identity.flags.and(ProvisioningIdentity.FLAG_HAS_IDENTITYID); + const hasFqnFlag = identity.flags.and(ProvisioningIdentity.FLAG_HAS_FQN); + const hasWebhookFlag = identity.flags.and(ProvisioningIdentity.FLAG_HAS_WEBHOOK); + const hasSystemSignatureFlag = identity.flags.and(ProvisioningIdentity.FLAG_SYSTEM_AS_SIGNATURE); + + expect(hasIdentityFlag.eq(ProvisioningIdentity.FLAG_HAS_IDENTITYID)).toBe(true); + expect(hasFqnFlag.eq(ProvisioningIdentity.FLAG_HAS_FQN)).toBe(true); + expect(hasWebhookFlag.eq(ProvisioningIdentity.FLAG_HAS_WEBHOOK)).toBe(true); + expect(hasSystemSignatureFlag.eq(ProvisioningIdentity.FLAG_SYSTEM_AS_SIGNATURE)).toBe(true); + }); + }); + + describe("validation", () => { + test("validates with minimal data", () => { + const identity = new ProvisioningIdentity({ + flags: new BN(0), + parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB" + }); + + expect(identity.isValid()).toBe(true); + }); + + test("validates with all data provided", () => { + const identity = new ProvisioningIdentity({ + flags: new BN(0), + systemId: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", + parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + identityId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + fqn: "test.identity", + webhook: "https://example.com/webhook" + }); + + expect(identity.isValid()).toBe(true); + }); + + test("fails validation without parentId", () => { + const identity = new ProvisioningIdentity({ + flags: new BN(0) + }); + + expect(identity.isValid()).toBe(false); + }); + + test("fails validation with empty parentId", () => { + const identity = new ProvisioningIdentity({ + flags: new BN(0), + parentId: "" + }); + + expect(identity.isValid()).toBe(false); + }); + }); + + describe("serialization", () => { + test("roundtrip serialization with buffer", () => { + const original = new ProvisioningIdentity({ + flags: new BN(0), + systemId: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", + parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + identityId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + fqn: "test.identity", + webhook: "https://example.com/webhook" + }); + + const buffer = original.toBuffer(); + const deserialized = new ProvisioningIdentity(); + deserialized.fromBuffer(buffer); + + expect(deserialized.systemId).toBe(original.systemId); + expect(deserialized.parentId).toBe(original.parentId); + expect(deserialized.identityId).toBe(original.identityId); + expect(deserialized.fqn).toBe(original.fqn); + expect(deserialized.webhook).toBe(original.webhook); + }); + + test("roundtrip serialization with JSON", () => { + const original = new ProvisioningIdentity({ + flags: new BN(0), + systemId: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", + parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + identityId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", + fqn: "test.identity", + webhook: "https://example.com/webhook" + }); + + const json = original.toJson(); + const deserialized = ProvisioningIdentity.fromJson(json); + + expect(deserialized.systemId).toBe(original.systemId); + expect(deserialized.parentId).toBe(original.parentId); + expect(deserialized.identityId).toBe(original.identityId); + expect(deserialized.fqn).toBe(original.fqn); + expect(deserialized.webhook).toBe(original.webhook); + }); + }); +}); diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index 6ed4e3bf..a89799a6 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -48,5 +48,6 @@ export { DataCategory } from './PersonalProfile' export * from './requestobjects/InformationRequest' export * from './requestobjects/LoginRequestDetails' export * from './requestobjects/ProvisioningIdentity' +export * from './requestobjects/EncryptionDetails' export * from './attestation/AttestationDetails' export * from './endorsement/Endorsement' \ No newline at end of file diff --git a/src/vdxf/classes/requestobjects/EncryptionDetails.ts b/src/vdxf/classes/requestobjects/EncryptionDetails.ts new file mode 100644 index 00000000..a5fed922 --- /dev/null +++ b/src/vdxf/classes/requestobjects/EncryptionDetails.ts @@ -0,0 +1,244 @@ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { BN } from 'bn.js'; +import varint from '../../../utils/varint'; +import varuint from '../../../utils/varuint'; +import bufferutils from '../../../utils/bufferutils'; +const { BufferReader, BufferWriter } = bufferutils; +import { fromBase58Check, toBase58Check } from '../../../utils/address'; +import { I_ADDR_VERSION } from '../../../constants/vdxf'; +import { decodeSaplingAddress, toBech32 } from '../../../utils/sapling'; +import { TransferDestination, TransferDestinationJson } from '../../../pbaas/TransferDestination'; + +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; + +export enum EncryptionType { + TYPE_PUBKEY = 1, + TYPE_ZADDRESS = 2 +} + +export enum SeedDerivationMethod { + FROM_ADDRESS_ONLY = 1, + TO_ADDRESS_ONLY = 2, + BOTH_ADDRESSES = 3, + NONE = 4 +} + +export interface EncryptionDetailsInterface { + type: EncryptionType; + key: string; + derivationNumber: BigNumber; + seedDerivationMethod?: BigNumber; + fromAddress?: TransferDestination; + toAddress?: TransferDestination; +} + +export interface EncryptionDetailsJson { + type: number; + key: string; + derivationnumber: number; + seedderivationmethod: number; + fromaddress?: TransferDestinationJson; + toaddress?: TransferDestinationJson; +} + + +export class EncryptionDetails implements SerializableEntity { + + static VERSION_INVALID = new BN(0); + static FIRST_VERSION = new BN(1); + static LAST_VERSION = new BN(1); + static DEFAULT_VERSION = new BN(1); + + type: EncryptionType; + key: string; + derivationNumber: BigNumber; + seedDerivationMethod: BigNumber; + fromAddress?: TransferDestination; + toAddress?: TransferDestination; + + constructor(data?: EncryptionDetailsInterface) { + this.type = data?.type || EncryptionType.TYPE_PUBKEY; + this.key = data?.key || ''; + this.derivationNumber = data?.derivationNumber || new BN(0); + this.fromAddress = data?.fromAddress; + this.toAddress = data?.toAddress; + this.seedDerivationMethod = data?.seedDerivationMethod; + } + + isValid(): boolean { + let valid = this.key != null && this.key.length > 0; + valid &&= this.type != null && (this.type === EncryptionType.TYPE_PUBKEY || this.type === EncryptionType.TYPE_ZADDRESS); + valid &&= this.derivationNumber != null && this.derivationNumber.gte(new BN(0)); + valid &&= this.isKeyFormatValid(); + + // Validate seed derivation method and required addresses + if (this.seedDerivationMethod) { + const method = this.seedDerivationMethod.toNumber(); + valid &&= method >= SeedDerivationMethod.FROM_ADDRESS_ONLY && method <= SeedDerivationMethod.NONE; + + // Check required addresses based on derivation method + if (method === SeedDerivationMethod.FROM_ADDRESS_ONLY || method === SeedDerivationMethod.BOTH_ADDRESSES) { + valid &&= this.fromAddress != null && this.fromAddress.isValid(); + } + if (method === SeedDerivationMethod.TO_ADDRESS_ONLY || method === SeedDerivationMethod.BOTH_ADDRESSES) { + valid &&= this.toAddress != null && this.toAddress.isValid(); + } + } + + return valid; + } + + getByteLength(): number { + let length = 0; + + length += varint.encodingLength(new BN(this.type)); + + // Key length - depends on type + if (this.type === EncryptionType.TYPE_PUBKEY) { + length += 33; // 33 byte pubkey + } else if (this.type === EncryptionType.TYPE_ZADDRESS) { + length += 43; // Sapling address decoded data (11 + 32 bytes) + } + + // Mandatory derivation number + length += varint.encodingLength(this.derivationNumber); + + length += varint.encodingLength(this.seedDerivationMethod); // seedDerivationMethod itself + + if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.FROM_ADDRESS_ONLY))) { + length += this.fromAddress!.getByteLength(); + } else if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.TO_ADDRESS_ONLY))) { + length += this.toAddress!.getByteLength(); + } else if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.BOTH_ADDRESSES))) { + length += this.fromAddress!.getByteLength() + this.toAddress!.getByteLength(); + } else if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.NONE))) { + // length += 0; No additional data for NONE + } + + return length; + } + + toBuffer(): Buffer { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + + // Write type + writer.writeVarInt(new BN(this.type)); + + // Write key - depends on type + if (this.type === EncryptionType.TYPE_PUBKEY) { + writer.writeSlice(Buffer.from(this.key, 'hex')); + } else if (this.type === EncryptionType.TYPE_ZADDRESS) { + // Write as decoded sapling address data + const saplingData = decodeSaplingAddress(this.key); + writer.writeSlice(Buffer.concat([saplingData.d, saplingData.pk_d])); + } else { + // Fallback to UTF8 encoding with length prefix + writer.writeVarSlice(Buffer.from(this.key, 'utf8')); + } + + // Write mandatory derivation number + writer.writeVarInt(this.derivationNumber); + + writer.writeVarInt(this.seedDerivationMethod); + + if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.FROM_ADDRESS_ONLY))) { + writer.writeSlice(this.fromAddress!.toBuffer()); + } else if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.TO_ADDRESS_ONLY))) { + writer.writeSlice(this.toAddress!.toBuffer()); + } else if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.BOTH_ADDRESSES))) { + writer.writeSlice(this.fromAddress!.toBuffer()); + writer.writeSlice(this.toAddress!.toBuffer()); + } else if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.NONE))) { + // No additional data for NONE + } + + + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset?: number): number { + const reader = new BufferReader(buffer, offset); + + // Read type + this.type = reader.readVarInt().toNumber() as EncryptionType; + + // Read key - depends on type + if (this.type === EncryptionType.TYPE_PUBKEY) { + this.key = reader.readSlice(33).toString('hex'); + } else if (this.type === EncryptionType.TYPE_ZADDRESS) { + // Read as 43-byte sapling data and encode as sapling address + const saplingData = reader.readSlice(43); + this.key = toBech32('zs', saplingData); + } else { + // Fallback to UTF8 decoding with length prefix + this.key = reader.readVarSlice().toString('utf8'); + } + + // Read mandatory derivation number + this.derivationNumber = reader.readVarInt(); + + this.seedDerivationMethod = reader.readVarInt(); + + if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.FROM_ADDRESS_ONLY))) { + this.fromAddress = new TransferDestination(); + reader.offset = this.fromAddress.fromBuffer(buffer, reader.offset); + } else if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.TO_ADDRESS_ONLY))) { + this.toAddress = new TransferDestination(); + reader.offset = this.toAddress.fromBuffer(buffer, reader.offset); + } else if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.BOTH_ADDRESSES))) { + this.fromAddress = new TransferDestination(); + reader.offset = this.fromAddress.fromBuffer(buffer, reader.offset); + this.toAddress = new TransferDestination(); + reader.offset = this.toAddress.fromBuffer(buffer, reader.offset); + } else if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.NONE))) { + // No additional data for NONE + } + + return reader.offset; + } + + toJSON(): EncryptionDetailsJson { + return { + type: this.type, + key: this.key, + derivationnumber: this.derivationNumber.toNumber(), + fromaddress: this.fromAddress?.toJson(), + toaddress: this.toAddress?.toJson(), + seedderivationmethod: this.seedDerivationMethod?.toNumber() + }; + } + + static fromJSON(json: EncryptionDetailsJson): EncryptionDetails { + return new EncryptionDetails({ + type: json.type as EncryptionType, + key: json.key, + derivationNumber: new BN(json.derivationnumber), + fromAddress: json.fromaddress ? TransferDestination.fromJson(json.fromaddress) : undefined, + toAddress: json.toaddress ? TransferDestination.fromJson(json.toaddress) : undefined, + seedDerivationMethod: json.seedderivationmethod ? new BN(json.seedderivationmethod) : undefined + }); + } + /** + * Validate that the key format matches the encryption type + */ + isKeyFormatValid(): boolean { + try { + if (this.type === EncryptionType.TYPE_PUBKEY) { + // Should be a valid base58 address + const key = Buffer.from(this.key, 'hex'); + if (key.length !== 33) { + return false; + } + return true; + } else if (this.type === EncryptionType.TYPE_ZADDRESS) { + // Should be a valid sapling address + decodeSaplingAddress(this.key); + return true; + } + // For other types, any string is valid + return true; + } catch { + return false; + } + } +} diff --git a/src/vdxf/classes/requestobjects/InformationRequest.ts b/src/vdxf/classes/requestobjects/InformationRequest.ts index 21c49308..f9a6806b 100644 --- a/src/vdxf/classes/requestobjects/InformationRequest.ts +++ b/src/vdxf/classes/requestobjects/InformationRequest.ts @@ -67,8 +67,7 @@ export class RequestItem implements SerializableEntity { return ( f.eq(RequestItem.FULL_DATA) || f.eq(RequestItem.PARTIAL_DATA) || - f.eq(RequestItem.FULL_DATA.or(RequestItem.COLLECTION)) || - f.eq(RequestItem.PARTIAL_DATA.or(RequestItem.COLLECTION)) + f.eq(RequestItem.COLLECTION) ); } diff --git a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts index 554f7353..269cde2e 100644 --- a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts @@ -8,8 +8,6 @@ import { fromBase58Check, toBase58Check } from "../../../utils/address"; import varint from "../../../utils/varint"; import { createHash } from "crypto"; - - export enum CallbackUriType { TYPE_WEBHOOK = 1, TYPE_REDIRECT = 2, @@ -17,87 +15,87 @@ export enum CallbackUriType { TYPE_OAUTH2 = 4 } -export interface CallbackUri { - type: CallbackUriType; - uri: string; +export enum LoginPermissionType { + REQUIRED_ID = 1, + REQUIRED_SYSTEM = 2, + REQUIRED_PARENT = 3 } -export enum EncryptionType { - TYPE_PUBKEY= 1, - TYPE_ZADDRESS = 2 +export interface LoginPermission { + type: LoginPermissionType; + identityid: string; } -export interface EncryptionDetails { - type: EncryptionType; - key: string; - derivation_number?: number; +export interface CallbackUri { + type: CallbackUriType; + uri: string; } + export interface LoginRequestDetailsInterface { version?: BigNumber; - challenge_id: string; + challengeId: string; flags?: BigNumber; - requested_access?: Array | null; - requested_access_audience?: Array; - encryption_details?: EncryptionDetails; - callback_uri?: CallbackUri; + requestedAccess?: Array | null; + permissions?: Array; + callbackUri?: CallbackUri; +} + +export interface LoginRequestDetailsJson { + version: number; + challengeid: string; + flags: number; + permissions?: Array; + callbackuri?: CallbackUri; } export class LoginRequestDetails implements SerializableEntity { version: BigNumber = LoginRequestDetails.VERSION_CURRENT; - challenge_id: string; + challengeId: string; flags?: BigNumber; - requested_access_audience?: Array; - encryption_details?: EncryptionDetails; - callback_uri?: CallbackUri; + permissions?: Array; + callbackUri?: CallbackUri; // Version static VERSION_CURRENT = new BN(1, 10) static VERSION_FIRSTVALID = new BN(1, 10) static VERSION_LASTVALID = new BN(1, 10) - static FLAG_HAS_AUDIENCE = new BN(1, 10); - static FLAG_HAS_ENCRYPTION_DETAILS = new BN(2, 10); - static FLAG_HAS_CALLBACK_URI = new BN(4, 10); - static FLAG_CALLBACK_CLEAR_ENCRYPTION_DATA = new BN(8, 10); + static FLAG_HAS_PERMISSIONS = new BN(1, 10); + static FLAG_HAS_CALLBACK_URI = new BN(2, 10); constructor( - challenge: LoginRequestDetailsInterface = { challenge_id: ""} + challenge: LoginRequestDetailsInterface = { challengeId: ""} ) { - this.challenge_id = challenge.challenge_id; + this.challengeId = challenge.challengeId; this.flags = challenge?.flags || new BN(0, 10); - this.requested_access_audience = challenge?.requested_access_audience || null; - this.encryption_details = challenge?.encryption_details || null; - this.callback_uri = challenge?.callback_uri || null; + this.permissions = challenge?.permissions || null; + this.callbackUri = challenge?.callbackUri || null; this.version = LoginRequestDetails.VERSION_CURRENT; - } getByteLength(): number { + this.setFlags(); // Ensure flags are set correctly for length calculation let length = 0; - length += fromBase58Check(this.challenge_id).hash.length; + length += 20; // challengeId hash length length += varint.encodingLength(this.flags); - if (this.flags.and(LoginRequestDetails.FLAG_HAS_AUDIENCE).eq(LoginRequestDetails.FLAG_HAS_AUDIENCE)) { - length += varuint.encodingLength(this.requested_access_audience.length); - for (let i = 0; i < this.requested_access_audience.length; i++) { - length += varuint.encodingLength(Buffer.from(this.requested_access_audience[i], 'utf8').length); - length += Buffer.from(this.requested_access_audience[i], 'utf8').length; - } - } + if (this.flags.and(LoginRequestDetails.FLAG_HAS_PERMISSIONS).eq(LoginRequestDetails.FLAG_HAS_PERMISSIONS)) { - if (this.flags.and(LoginRequestDetails.FLAG_HAS_ENCRYPTION_DETAILS).eq(LoginRequestDetails.FLAG_HAS_ENCRYPTION_DETAILS)) { - length += varint.encodingLength(new BN(this.encryption_details.type)); - length += varuint.encodingLength(Buffer.from(this.encryption_details.key, 'utf8').length); - length += Buffer.from(this.encryption_details.key, 'utf8').length; - length += varint.encodingLength(new BN(this.encryption_details.derivation_number || 0)); + length += varuint.encodingLength(this.permissions.length); + if (this.permissions) { + for (let i = 0; i < this.permissions.length; i++) { + length += varint.encodingLength(new BN(this.permissions[i].type)); + length += 20; // identityid as hash + } + } } if (this.flags.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI).eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI)) { - length += varint.encodingLength(new BN(this.callback_uri.type)); - length += varuint.encodingLength(Buffer.from(this.callback_uri.uri, 'utf8').length); - length += Buffer.from(this.callback_uri.uri, 'utf8').length; + length += varint.encodingLength(new BN(this.callbackUri.type)); + length += varuint.encodingLength(Buffer.from(this.callbackUri.uri, 'utf8').length); + length += Buffer.from(this.callbackUri.uri, 'utf8').length; } return length; @@ -107,29 +105,22 @@ export class LoginRequestDetails implements SerializableEntity { this.setFlags(); const writer = new bufferutils.BufferWriter(Buffer.alloc(this.getByteLength())) - writer.writeSlice(fromBase58Check(this.challenge_id).hash); + writer.writeSlice(fromBase58Check(this.challengeId).hash); writer.writeVarInt(this.flags); - if (this.flags.and(LoginRequestDetails.FLAG_HAS_AUDIENCE).eq(LoginRequestDetails.FLAG_HAS_AUDIENCE)) { - writer.writeCompactSize(this.requested_access_audience ? this.requested_access_audience.length : 0); - for (let i = 0; i < this.requested_access_audience.length; i++) { - writer.writeVarSlice(Buffer.from(this.requested_access_audience[i], 'utf8')); + if (this.flags.and(LoginRequestDetails.FLAG_HAS_PERMISSIONS).eq(LoginRequestDetails.FLAG_HAS_PERMISSIONS)) { + writer.writeCompactSize(this.permissions.length); + for (let i = 0; i < this.permissions.length; i++) { + writer.writeVarInt(new BN(this.permissions[i].type)); + writer.writeSlice(fromBase58Check(this.permissions[i].identityid).hash); } } - if (this.flags.and(LoginRequestDetails.FLAG_HAS_ENCRYPTION_DETAILS).eq(LoginRequestDetails.FLAG_HAS_ENCRYPTION_DETAILS)) { - writer.writeVarInt(new BN(this.encryption_details.type)); - writer.writeVarSlice(Buffer.from(this.encryption_details.key, 'utf8')); - writer.writeVarInt(new BN(this.encryption_details.derivation_number || 0)); - } - if (this.flags.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI).eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI)) { - writer.writeVarInt(new BN(this.callback_uri.type)); - writer.writeVarSlice(Buffer.from(this.callback_uri.uri, 'utf8')); + writer.writeVarInt(new BN(this.callbackUri.type)); + writer.writeVarSlice(Buffer.from(this.callbackUri.uri, 'utf8')); } - - return writer.buffer; } @@ -137,27 +128,22 @@ export class LoginRequestDetails implements SerializableEntity { const reader = new bufferutils.BufferReader(buffer, offset); if (buffer.length == 0) throw new Error("Cannot create challenge from empty buffer"); - this.challenge_id = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); + this.challengeId = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); this.flags = reader.readVarInt(); - if (this.flags.and(LoginRequestDetails.FLAG_HAS_AUDIENCE).eq(LoginRequestDetails.FLAG_HAS_AUDIENCE)) { - this.requested_access_audience = []; - const audienceLength = reader.readCompactSize(); - for (let i = 0; i < audienceLength; i++) { - this.requested_access_audience.push(reader.readVarSlice().toString('utf8')); - } - } - - if (this.flags.and(LoginRequestDetails.FLAG_HAS_ENCRYPTION_DETAILS).eq(LoginRequestDetails.FLAG_HAS_ENCRYPTION_DETAILS)) { - this.encryption_details = { - type: reader.readVarInt().toNumber(), - key: reader.readVarSlice().toString('utf8'), - derivation_number: reader.readVarInt().toNumber() + if (this.flags.and(LoginRequestDetails.FLAG_HAS_PERMISSIONS).eq(LoginRequestDetails.FLAG_HAS_PERMISSIONS)) { + this.permissions = []; + const permissionsLength = reader.readCompactSize(); + for (let i = 0; i < permissionsLength; i++) { + this.permissions.push({ + type: reader.readVarInt().toNumber(), + identityid: toBase58Check(reader.readSlice(20), I_ADDR_VERSION) + }); } - } + } if (this.flags.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI).eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI)) { - this.callback_uri = { + this.callbackUri = { type: reader.readVarInt().toNumber(), uri: reader.readVarSlice().toString('utf8') } @@ -170,42 +156,45 @@ export class LoginRequestDetails implements SerializableEntity { this.setFlags(); return { version: this.version ? this.version.toNumber() : 0, - challenge_id: this.challenge_id, + challengeid: this.challengeId, flags: this.flags ? this.flags.toNumber() : 0, - requested_access_audience: this.requested_access_audience, - encryption_details: this.encryption_details, - callback_uri: this.callback_uri + permissions: this.permissions, + callbackuri: this.callbackUri }; } static fromJson(data: any): LoginRequestDetails { return new LoginRequestDetails({ version: new BN(data?.version || 0), - challenge_id: data.challenge_id, + challengeId: data.challengeid, flags: new BN(data?.flags || 0), - requested_access_audience: data.requested_access_audience, - encryption_details: data.encryption_details, - callback_uri: data.callback_uri + permissions: data.permissions, + callbackUri: data.callbackuri }) } setFlags() { this.flags = new BN(0, 10); - if (this.requested_access_audience && this.requested_access_audience.length > 0) { - this.flags = this.flags.or(LoginRequestDetails.FLAG_HAS_AUDIENCE); - } - if (this.encryption_details) { - this.flags = this.flags.or(LoginRequestDetails.FLAG_HAS_ENCRYPTION_DETAILS); + if (this.permissions) { + this.flags = this.flags.or(LoginRequestDetails.FLAG_HAS_PERMISSIONS); } - if (this.callback_uri) { + if (this.callbackUri) { this.flags = this.flags.or(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); } } isValid(): boolean { - let valid = this.challenge_id != null && this.challenge_id.length > 0; + let valid = this.challengeId != null && this.challengeId.length > 0; valid &&= this.flags != null && this.flags.gte(new BN(0)); + + // Validate challengeId is a valid base58 address + try { + fromBase58Check(this.challengeId); + } catch { + valid = false; + } + return valid; } diff --git a/src/vdxf/classes/requestobjects/ProvisioningIdentity.ts b/src/vdxf/classes/requestobjects/ProvisioningIdentity.ts index e018f3d5..9fd41788 100644 --- a/src/vdxf/classes/requestobjects/ProvisioningIdentity.ts +++ b/src/vdxf/classes/requestobjects/ProvisioningIdentity.ts @@ -11,9 +11,9 @@ import { createHash } from "crypto"; export interface ProvisionIdentityInterface { version?: BigNumber; flags: BigNumber; - system_id?: string; - parent_id?: string; - identity_id?: string; + systemId?: string; + parentId?: string; + identityId?: string; fqn?: string; webhook?: string; } @@ -22,9 +22,9 @@ export class ProvisionIdentity implements SerializableEntity { version: BigNumber = ProvisionIdentity.VERSION_CURRENT; flags: BigNumber; - system_id?: string; - parent_id: string; - identity_id?: string; + systemId?: string; + parentId: string; + identityId?: string; fqn?: string; webhook?: string; @@ -45,9 +45,9 @@ export class ProvisionIdentity implements SerializableEntity { ) { this.version = provisionIdentity.version || ProvisionIdentity.VERSION_CURRENT; this.flags = provisionIdentity.flags; - this.system_id = provisionIdentity?.system_id; - this.parent_id = provisionIdentity?.parent_id; - this.identity_id = provisionIdentity?.identity_id; + this.systemId = provisionIdentity?.systemId; + this.parentId = provisionIdentity?.parentId; + this.identityId = provisionIdentity?.identityId; this.fqn = provisionIdentity?.fqn; this.webhook = provisionIdentity?.webhook; @@ -62,14 +62,14 @@ export class ProvisionIdentity implements SerializableEntity { } if (this.flags.and(ProvisionIdentity.FLAG_PARENT_AS_FQN).eq(ProvisionIdentity.FLAG_PARENT_AS_FQN)) { - length += varuint.encodingLength(this.parent_id ? this.parent_id.length : 0); - length += this.parent_id ? Buffer.from(this.parent_id, 'utf8').length : 0; + length += varuint.encodingLength(this.parentId ? this.parentId.length : 0); + length += this.parentId ? Buffer.from(this.parentId, 'utf8').length : 0; } else { - length += 20; // parent_id as hash + length += 20; // parentId as hash } if (this.flags.and(ProvisionIdentity.FLAG_HAS_IDENTITYID).eq(ProvisionIdentity.FLAG_HAS_IDENTITYID)) { - length += 20; // identity_id as hash + length += 20; // identityId as hash } if (this.flags.and(ProvisionIdentity.FLAG_HAS_FQN).eq(ProvisionIdentity.FLAG_HAS_FQN)) { @@ -92,17 +92,17 @@ export class ProvisionIdentity implements SerializableEntity { writer.writeVarInt(this.flags); if (!this.flags.and(ProvisionIdentity.FLAG_SYSTEM_AS_SIGNATURE).eq(ProvisionIdentity.FLAG_SYSTEM_AS_SIGNATURE)) { - writer.writeSlice(fromBase58Check(this.system_id).hash); + writer.writeSlice(fromBase58Check(this.systemId).hash); } if (this.flags.and(ProvisionIdentity.FLAG_PARENT_AS_FQN).eq(ProvisionIdentity.FLAG_PARENT_AS_FQN)) { - writer.writeVarSlice(Buffer.from(this.parent_id || '', 'utf8')); + writer.writeVarSlice(Buffer.from(this.parentId || '', 'utf8')); } else { - writer.writeSlice(fromBase58Check(this.parent_id).hash); + writer.writeSlice(fromBase58Check(this.parentId).hash); } if (this.flags.and(ProvisionIdentity.FLAG_HAS_IDENTITYID).eq(ProvisionIdentity.FLAG_HAS_IDENTITYID)) { - writer.writeSlice(fromBase58Check(this.identity_id).hash); + writer.writeSlice(fromBase58Check(this.identityId).hash); } if (this.flags.and(ProvisionIdentity.FLAG_HAS_FQN).eq(ProvisionIdentity.FLAG_HAS_FQN)) { @@ -123,17 +123,17 @@ export class ProvisionIdentity implements SerializableEntity { this.flags = reader.readVarInt(); if (!this.flags.and(ProvisionIdentity.FLAG_SYSTEM_AS_SIGNATURE).eq(ProvisionIdentity.FLAG_SYSTEM_AS_SIGNATURE)) { - this.system_id = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); + this.systemId = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); } if (this.flags.and(ProvisionIdentity.FLAG_PARENT_AS_FQN).eq(ProvisionIdentity.FLAG_PARENT_AS_FQN)) { - this.parent_id = reader.readVarSlice().toString('utf8'); + this.parentId = reader.readVarSlice().toString('utf8'); } else { - this.parent_id = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); + this.parentId = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); } if (this.flags.and(ProvisionIdentity.FLAG_HAS_IDENTITYID).eq(ProvisionIdentity.FLAG_HAS_IDENTITYID)) { - this.identity_id = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); + this.identityId = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); } if (this.flags.and(ProvisionIdentity.FLAG_HAS_FQN).eq(ProvisionIdentity.FLAG_HAS_FQN)) { @@ -152,9 +152,9 @@ export class ProvisionIdentity implements SerializableEntity { return { version: this.version ? this.version.toNumber() : 0, flags: this.flags ? this.flags.toNumber() : 0, - system_id: this.system_id, - parent_id: this.parent_id, - identity_id: this.identity_id, + systemId: this.systemId, + parentId: this.parentId, + identityId: this.identityId, fqn: this.fqn, webhook: this.webhook }; @@ -164,9 +164,9 @@ export class ProvisionIdentity implements SerializableEntity { return new ProvisionIdentity({ version: new BN(data?.version || 0), flags: new BN(data?.flags || 0), - system_id: data.system_id, - parent_id: data.parent_id, - identity_id: data.identity_id, + systemId: data.systemId, + parentId: data.parentId, + identityId: data.identityId, fqn: data.fqn, webhook: data.webhook }) @@ -176,14 +176,14 @@ export class ProvisionIdentity implements SerializableEntity { setFlags() { this.flags = new BN(0, 10); - if (!this.system_id) { + if (!this.systemId) { this.flags = this.flags.or(ProvisionIdentity.FLAG_SYSTEM_AS_SIGNATURE); } - if (this.parent_id) { - // Check if parent_id is a valid base58 address or should be treated as FQN + if (this.parentId) { + // Check if parentId is a valid base58 address or should be treated as FQN try { - fromBase58Check(this.parent_id); + fromBase58Check(this.parentId); // If it doesn't throw, it's a valid address, don't set FQN flag } catch { // If it throws, treat as FQN @@ -191,7 +191,7 @@ export class ProvisionIdentity implements SerializableEntity { } } - if (this.identity_id) { + if (this.identityId) { this.flags = this.flags.or(ProvisionIdentity.FLAG_HAS_IDENTITYID); } @@ -207,8 +207,8 @@ export class ProvisionIdentity implements SerializableEntity { isValid(): boolean { let valid = this.flags != null && this.flags.gte(new BN(0)); - // At minimum, we need either system_id or parent_id - valid &&= (this.parent_id != null && this.parent_id.length > 0); + // At minimum, we need either systemId or parentId + valid &&= (this.parentId != null && this.parentId.length > 0); return valid; } From 6f457249973d110bf365a4a2a05028106b66a91f Mon Sep 17 00:00:00 2001 From: michaeltout Date: Tue, 30 Sep 2025 14:49:41 +0200 Subject: [PATCH 007/123] Checkpoint: Add OrdinalVdxfObject as new type and partially implement in GenericRequest --- src/utils/types/SerializableEntity.ts | 6 + src/vdxf/classes/OrdinalVdxfObject.ts | 294 ++++++++++++++++ .../classes/payment/VerusPayInvoiceDetails.ts | 3 +- src/vdxf/classes/request/GenericRequest.ts | 315 ++++++++---------- src/vdxf/index.ts | 7 + 5 files changed, 456 insertions(+), 169 deletions(-) create mode 100644 src/vdxf/classes/OrdinalVdxfObject.ts diff --git a/src/utils/types/SerializableEntity.ts b/src/utils/types/SerializableEntity.ts index 046c6b6d..fcdff02e 100644 --- a/src/utils/types/SerializableEntity.ts +++ b/src/utils/types/SerializableEntity.ts @@ -2,4 +2,10 @@ export interface SerializableEntity { toBuffer(): Buffer; fromBuffer(buffer: Buffer, offset?: number): number; getByteLength(): number; +} + +export interface SerializableDataEntity { + getDataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer, offset?: number): number; } \ No newline at end of file diff --git a/src/vdxf/classes/OrdinalVdxfObject.ts b/src/vdxf/classes/OrdinalVdxfObject.ts new file mode 100644 index 00000000..710e3630 --- /dev/null +++ b/src/vdxf/classes/OrdinalVdxfObject.ts @@ -0,0 +1,294 @@ +import bufferutils from "../../utils/bufferutils"; +import { BN } from 'bn.js'; +import { BigNumber } from "../../utils/types/BigNumber"; +import { SerializableDataEntity, SerializableEntity } from "../../utils/types/SerializableEntity"; +import varuint from "../../utils/varuint"; +import { fromBase58Check, toBase58Check } from "../../utils/address"; +import varint from "../../utils/varint"; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from "../../constants/vdxf"; +import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; +import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "./payment/VerusPayInvoiceDetails"; + +export interface OrdinalVdxfObjectInterfaceTemplate { + version?: BigNumber; + type?: BigNumber; + vdxfkey?: string; + data?: T; +} + +export type OrdinalVdxfObjectJsonTemplate = { + version: string; + type: string; + vdxfkey?: string; + data?: T; +} + +export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails; +export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson; +export type BufferOrOrdinalVdxfObjectReservedData = Buffer | OrdinalVdxfObjectReservedData; +export type StringOrOrdinalVdxfObjectReservedDataJson = string | OrdinalVdxfObjectReservedDataJson; + +export type OrdinalVdxfObjectInterface = OrdinalVdxfObjectInterfaceTemplate; +export type OrdinalVdxfObjectJson = OrdinalVdxfObjectJsonTemplate; + +export type OrdinalVdxfObjectDataClass = new (...args: any[]) => OrdinalVdxfObjectReservedData; +export type OrdinalVdxfObjectClass = new (...args: any[]) => OrdinalVdxfObject; + +export const getOrdinalVdxfObjectClassForType = (type: BigNumber): OrdinalVdxfObjectClass => { + if (type.eq(OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR)) return DataDescriptorOrdinalVdxfObject; + else if (type.eq(OrdinalVdxfObject.TYPE_INVOICE)) return VerusPayInvoiceOrdinalVdxfObject; + else if (type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE)) return GeneralTypeOrdinalVdxfObject; + else throw new Error("Unrecognized vdxf ordinal object type"); +} + +export class OrdinalVdxfObject implements SerializableEntity { + version: BigNumber; + type: BigNumber; + vdxfkey?: string; + data?: BufferOrOrdinalVdxfObjectReservedData; + + static VERSION_INVALID = new BN(0, 10) + static VERSION_FIRST = new BN(1, 10) + static VERSION_LAST = new BN(1, 10) + static VERSION_CURRENT = new BN(1, 10) + + static TYPE_DATA_DESCRIPTOR = new BN(0, 10); + static TYPE_INVOICE = new BN(1, 10); + + static VDXF_OBJECT_RESERVED_BYTE = new BN(102, 10); + + constructor( + request: OrdinalVdxfObjectInterfaceTemplate = { + type: OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR + } + ) { + if (request.vdxfkey) { + this.type = OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE; + this.vdxfkey = request.vdxfkey; + + if (request.data) { + this.data = request.data; + } else this.data = Buffer.alloc(0); + } else if (request.type == null) { + this.type = OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR; + } else { + this.type = request.type; + } + + if (request.version) this.version = request.version; + else this.version = OrdinalVdxfObject.VERSION_CURRENT; + } + + isDefinedByVdxfKey() { + return this.type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE); + } + + getDataByteLength(): number { + return 0; + } + + toDataBuffer(): Buffer { + return Buffer.alloc(0); + } + + fromDataBuffer(buffer: Buffer, offset: number): number { + return 0; + } + + getByteLength(): number { + let length = 0; + + length += varuint.encodingLength(this.type.toNumber()); + + if (this.isDefinedByVdxfKey()) { + length += fromBase58Check(this.vdxfkey).hash.length; + } + + length += varint.encodingLength(this.version); + + const dataLength = this.getDataByteLength(); + + length += varuint.encodingLength(dataLength); + length += dataLength; + + return length; + } + + toBuffer(): Buffer { + const writer = new bufferutils.BufferWriter( + Buffer.alloc(this.getByteLength()) + ); + + writer.writeCompactSize(this.type.toNumber()); + + if (this.isDefinedByVdxfKey()) { + writer.writeSlice(fromBase58Check(this.vdxfkey).hash); + } + + writer.writeVarInt(this.version); + + writer.writeVarSlice(this.toDataBuffer()); + + return writer.buffer; + } + + fromBufferOptionalType(buffer: Buffer, offset?: number, type?: BigNumber): number { + if (buffer.length == 0) throw new Error("Cannot create request from empty buffer"); + + const reader = new bufferutils.BufferReader(buffer, offset); + + if (!type) { + this.type = new BN(reader.readCompactSize()); + } else this.type = type; + + if (this.isDefinedByVdxfKey()) { + this.vdxfkey = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); + } + + this.version = reader.readVarInt(); + + reader.offset = this.fromDataBuffer(reader.buffer, reader.offset); + + return reader.offset; + } + + fromBuffer(buffer: Buffer, offset?: number): number { + return this.fromBufferOptionalType(buffer, offset); + } + + static fromJson(details: OrdinalVdxfObjectJson): OrdinalVdxfObject { + const type = details.type ? new BN(details.type) : undefined; + + // Each extended class needs to define its own static fromJson where it fills in the data field + return new OrdinalVdxfObject({ + type: type ? new BN(details.type) : undefined, + version: details.version ? new BN(details.version) : undefined, + vdxfkey: details.vdxfkey, + data: details.data && type && type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE) ? Buffer.from(details.data as string, 'hex') : undefined + }); + } + + toJson(): OrdinalVdxfObjectJson { + return { + type: this.type ? this.type.toString() : undefined, + version: this.version ? this.version.toString() : undefined, + vdxfkey: this.vdxfkey, + data: this.data ? this.isDefinedByVdxfKey() ? this.data.toString('hex') : (this.data as OrdinalVdxfObjectReservedData).toJson() : undefined + }; + } + + static createFromBuffer(buffer: Buffer, offset?: number): { offset: number, obj: OrdinalVdxfObject } { + if (buffer.length == 0) throw new Error("Cannot create request from empty buffer"); + + const reader = new bufferutils.BufferReader(buffer, offset); + const type = new BN(reader.readCompactSize()); + + const Entity = getOrdinalVdxfObjectClassForType(type); + const ord = new Entity(); + + ord.fromBufferOptionalType(buffer, offset, type); + + return { offset, obj: ord }; + } +} + +export class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { + data: Buffer; + + constructor( + request: OrdinalVdxfObjectInterfaceTemplate = { + data: Buffer.alloc(0) + } + ) { + super({ + type: OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE, + data: request.data + }) + } + + getDataByteLength(): number { + return this.data.length; + } + + toDataBuffer(): Buffer { + return this.data; + } + + fromDataBuffer(buffer: Buffer, offset: number): number { + const reader = new bufferutils.BufferReader(buffer, offset); + + this.data = reader.readVarSlice(); + + return reader.offset; + } +} + +export class SerializableEntityOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { + data: OrdinalVdxfObjectReservedData; + entity: OrdinalVdxfObjectDataClass; + + constructor( + request: OrdinalVdxfObjectInterfaceTemplate, + entity: OrdinalVdxfObjectDataClass + ) { + if (!request || !request.type || !request.data) throw new Error("Expected request with data and type") + + super({ + type: request.type + }); + + this.entity = entity; + this.data = request.data; + } + + getDataByteLength(): number { + return this.data.getByteLength() + } + + toDataBuffer(): Buffer { + return this.data.toBuffer(); + } + + fromDataBuffer(buffer: Buffer, offset: number): number { + const reader = new bufferutils.BufferReader(buffer, offset); + + const dataDescriptorBuf = reader.readVarSlice(); + + this.data = new this.entity(); + this.data.fromBuffer(dataDescriptorBuf); + + return reader.offset; + } +} + +export class DataDescriptorOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + constructor( + request: OrdinalVdxfObjectInterfaceTemplate = { + data: new DataDescriptor() + } + ) { + super( + { + type: OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR, + data: request.data + }, + DataDescriptor + ); + } +} + +export class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + constructor( + request: OrdinalVdxfObjectInterfaceTemplate = { + data: new VerusPayInvoiceDetails() + } + ) { + super( + { + type: OrdinalVdxfObject.TYPE_INVOICE, + data: request.data + }, + VerusPayInvoiceDetails + ); + } +} \ No newline at end of file diff --git a/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts b/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts index 1cf4d131..087ff508 100644 --- a/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts +++ b/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts @@ -7,6 +7,7 @@ import { TransferDestination, TransferDestinationJson } from '../../../pbaas/Tra import { fromBase58Check, toBase58Check } from '../../../utils/address'; import { I_ADDR_VERSION } from '../../../constants/vdxf'; import createHash = require('create-hash'); +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; const { BufferReader, BufferWriter } = bufferutils; export const VERUSPAY_INVALID = new BN(0, 10) @@ -29,7 +30,7 @@ export type VerusPayInvoiceDetailsJson = { acceptedsystems?: Array, } -export class VerusPayInvoiceDetails { +export class VerusPayInvoiceDetails implements SerializableEntity { flags: BigNumber; amount: BigNumber; destination: TransferDestination; diff --git a/src/vdxf/classes/request/GenericRequest.ts b/src/vdxf/classes/request/GenericRequest.ts index 8bc7af24..cd873a2e 100644 --- a/src/vdxf/classes/request/GenericRequest.ts +++ b/src/vdxf/classes/request/GenericRequest.ts @@ -16,72 +16,59 @@ import { BigNumber } from "../../../utils/types/BigNumber"; import { DataDescriptor, DataDescriptorJson, SignatureData, SignatureJsonDataInterface } from "../../../pbaas"; import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "../payment/VerusPayInvoiceDetails"; import varint from "../../../utils/varint"; - -export type GenericRequestDetails = DataDescriptor | VerusPayInvoiceDetails; -export type GenericRequestDetailsJson = DataDescriptorJson | VerusPayInvoiceDetailsJson; +import { OrdinalVdxfObject, OrdinalVdxfObjectJson } from "../OrdinalVdxfObject"; +import varuint from "../../../utils/varuint"; +import { SerializableEntity } from "../../../utils/types/SerializableEntity"; export interface GenericRequestInterface { version?: BigNumber; flags?: BigNumber; - type?: BigNumber; - system_id?: string; - signing_id?: string; + createdat?: BigNumber; signature?: SignatureData; - details: GenericRequestDetails; + details: Array; } export type GenericRequestJson = { + version: string; flags?: string; - type?: string; - vdxfkey: string, - details: GenericRequestDetailsJson; - system_id?: string; - signing_id?: string; + createdat?: BigNumber; + details: Array; signature?: SignatureJsonDataInterface; - version: string; } -export class GenericRequest extends VDXFObject { +export class GenericRequest implements SerializableEntity { + version: BigNumber; flags: BigNumber; - type: BigNumber; - system_id?: string; - signing_id?: string; + createdat?: BigNumber; signature?: SignatureData; - details: GenericRequestDetails; + details: Array; static VERSION_CURRENT = new BN(1, 10) static VERSION_FIRSTVALID = new BN(1, 10) static VERSION_LASTVALID = new BN(1, 10) - static TYPE_DATA_DESCRIPTOR = new BN(0, 10) - static TYPE_INVOICE = new BN(1, 10) - static BASE_FLAGS = new BN(0, 10) static FLAG_SIGNED = new BN(1, 10) + static FLAG_HAS_CREATED_AT = new BN(2, 10) + static FLAG_MULTI_DETAILS = new BN(4, 10) constructor( request: GenericRequestInterface = { - details: new DataDescriptor(), - type: GenericRequest.TYPE_DATA_DESCRIPTOR, + details: [], flags: GenericRequest.BASE_FLAGS } ) { - super(GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid); - - this.system_id = request.system_id; - this.signing_id = request.signing_id; this.signature = request.signature; - this.details = request.details; - - if (request.type) this.type = request.type; - else this.type = GenericRequest.TYPE_DATA_DESCRIPTOR; + this.createdat = request.createdat; if (request.flags) this.flags = request.flags; else this.flags = GenericRequest.BASE_FLAGS; if (request.version) this.version = request.version; else this.version = GenericRequest.VERSION_CURRENT; + + this.setFlags(); } isValidVersion(): boolean { @@ -92,176 +79,167 @@ export class GenericRequest extends VDXFObject { return !!(this.flags.and(GenericRequest.FLAG_SIGNED).toNumber()); } - isDataDescriptor() { - return this.type.eq(GenericRequest.TYPE_DATA_DESCRIPTOR); - } - - isInvoice() { - return this.type.eq(GenericRequest.TYPE_INVOICE); + hasMultiDetails() { + return !!(this.flags.and(GenericRequest.FLAG_MULTI_DETAILS).toNumber()); } setSigned() { this.flags = this.version.xor(GenericRequest.FLAG_SIGNED); } - private getRawDetailsSha256() { - return createHash("sha256").update(this.details.toBuffer()).digest(); + setHasMultiDetails() { + this.flags = this.version.xor(GenericRequest.FLAG_MULTI_DETAILS); } - getDetailsHash(signedBlockheight: number, signatureVersion: number = 2) { - if (this.isSigned()) { - var heightBufferWriter = new bufferutils.BufferWriter( - Buffer.allocUnsafe(4) - ); - heightBufferWriter.writeUInt32(signedBlockheight); + setHasCreatedAt() { + this.flags = this.version.xor(GenericRequest.FLAG_HAS_CREATED_AT); + } + + setFlags() { + if (this.createdat) this.setHasCreatedAt(); + if (this.details && this.details.length > 1) this.setHasMultiDetails(); + if (this.signature) this.setSigned(); + } + + // private getRawDetailsSha256() { + // return createHash("sha256").update(this.details.toBuffer()).digest(); + // } + + // getDetailsHash(signedBlockheight: number, signatureVersion: number = 2) { + // if (this.isSigned()) { + // var heightBufferWriter = new bufferutils.BufferWriter( + // Buffer.allocUnsafe(4) + // ); + // heightBufferWriter.writeUInt32(signedBlockheight); - if (signatureVersion === 1) { - return createHash("sha256") - .update(VERUS_DATA_SIGNATURE_PREFIX) - .update(fromBase58Check(this.system_id).hash) - .update(heightBufferWriter.buffer) - .update(fromBase58Check(this.signing_id).hash) - .update(this.getRawDetailsSha256()) - .digest(); - } else { - return createHash("sha256") - .update(fromBase58Check(this.system_id).hash) - .update(heightBufferWriter.buffer) - .update(fromBase58Check(this.signing_id).hash) - .update(VERUS_DATA_SIGNATURE_PREFIX) - .update(this.getRawDetailsSha256()) - .digest(); - } - } else return this.getRawDetailsSha256() + // if (signatureVersion === 1) { + // return createHash("sha256") + // .update(VERUS_DATA_SIGNATURE_PREFIX) + // .update(fromBase58Check(this.system_id).hash) + // .update(heightBufferWriter.buffer) + // .update(fromBase58Check(this.signing_id).hash) + // .update(this.getRawDetailsSha256()) + // .digest(); + // } else { + // return createHash("sha256") + // .update(fromBase58Check(this.system_id).hash) + // .update(heightBufferWriter.buffer) + // .update(fromBase58Check(this.signing_id).hash) + // .update(VERUS_DATA_SIGNATURE_PREFIX) + // .update(this.getRawDetailsSha256()) + // .digest(); + // } + // } else return this.getRawDetailsSha256() + // } + + getDetails(index = 0): OrdinalVdxfObject { + return this.details[index]; } - protected _dataByteLength(signer: string = this.signing_id): number { + getByteLength(): number { let length = 0; - length += varint.encodingLength(this.flags); - length += varint.encodingLength(this.type); + length += varuint.encodingLength(this.version.toNumber()); + length += varuint.encodingLength(this.flags.toNumber()); if (this.isSigned()) { - const _signature = this.signature - ? this.signature - : new SignatureData(); - - const _system_id = Hash160.fromAddress(this.system_id); - length += _system_id.getByteLength(); - - const _signing_id = Hash160.fromAddress(signer); - length += _signing_id.getByteLength(); - - length += _signature.getByteLength() + length += this.signature!.getByteLength() } - length += this.details.getByteLength(); + if (this.hasMultiDetails()) { + length += varuint.encodingLength(this.details.length); + + for (const detail of this.details) { + length += detail.getByteLength(); + } + } else { + length += this.getDetails().getByteLength(); + } return length; } - protected _toDataBuffer(signer: string = this.signing_id): Buffer { + toBuffer(): Buffer { const writer = new bufferutils.BufferWriter( - Buffer.alloc(this.dataByteLength()) + Buffer.alloc(this.getByteLength()) ); - writer.writeVarInt(this.flags); - writer.writeVarInt(this.type); + writer.writeCompactSize(this.version.toNumber()); + writer.writeCompactSize(this.flags.toNumber()); if (this.isSigned()) { - const _signing_id = Hash160.fromAddress(signer); - const _signature = this.signature - ? this.signature - : new VerusIDSignature( - { signature: "" }, - IDENTITY_AUTH_SIG_VDXF_KEY, - false - ); - - const _system_id = Hash160.fromAddress(this.system_id); - writer.writeSlice(_system_id.toBuffer()); - - writer.writeSlice(_signing_id.toBuffer()); - - writer.writeSlice(_signature.toBuffer()); + writer.writeSlice(this.signature!.toBuffer()); } - writer.writeSlice(this.details.toBuffer()); + if (this.hasMultiDetails()) { + writer.writeCompactSize(this.details.length); + + for (const detail of this.details) { + writer.writeSlice(detail.toBuffer()); + } + } else { + writer.writeSlice(this.getDetails().toBuffer()); + } return writer.buffer; } - dataByteLength(): number { - return this._dataByteLength(); - } - - toDataBuffer(): Buffer { - return this._toDataBuffer(); - } - - protected _fromDataBuffer(buffer: Buffer, offset?: number): number { + fromBuffer(buffer: Buffer, offset?: number): number { if (buffer.length == 0) throw new Error("Cannot create request from empty buffer"); const reader = new bufferutils.BufferReader(buffer, offset); - const reqLength = reader.readCompactSize(); + + this.version = new BN(reader.readCompactSize()); + this.flags = new BN(reader.readCompactSize()); - if (reqLength == 0) { - throw new Error("Cannot create request from empty buffer"); - } else { - this.flags = reader.readVarInt(); - this.type = reader.readVarInt(); - - if (this.isSigned()) { - this.system_id = toBase58Check( - reader.readSlice(HASH160_BYTE_LENGTH), - I_ADDR_VERSION - ); - - this.signing_id = toBase58Check( - reader.readSlice(HASH160_BYTE_LENGTH), - I_ADDR_VERSION - ); - - const _sig = new SignatureData(); - reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); - this.signature = _sig; + if (this.isSigned()) { + const _sig = new SignatureData(); + reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); + this.signature = _sig; + } + + if (this.hasMultiDetails()) { + this.details = []; + + const numItems = reader.readCompactSize(); + + for (let i = 0; i < numItems; i++) { + const ord = OrdinalVdxfObject.createFromBuffer(reader.buffer, reader.offset); + + reader.offset = ord.offset; + this.details.push(ord.obj); } + } else { + const ord = OrdinalVdxfObject.createFromBuffer(reader.buffer, reader.offset); - let _details; - - if (this.type.eq(GenericRequest.TYPE_INVOICE)) { - _details = new VerusPayInvoiceDetails(); - } else if (this.type.eq(GenericRequest.TYPE_DATA_DESCRIPTOR)) { - _details = new DataDescriptor(); - } else throw new Error("Unrecognized type") - - reader.offset = _details.fromBuffer(reader.buffer, reader.offset); - this.details = _details; + reader.offset = ord.offset; + this.details = [ord.obj] } return reader.offset; } - fromDataBuffer(buffer: Buffer, offset?: number): number { - return this._fromDataBuffer(buffer, offset); + toString() { + return base64url.encode(this.toBuffer()); } toWalletDeeplinkUri(): string { return `${WALLET_VDXF_KEY.vdxfid.toLowerCase()}://x-callback-url/${ GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid - }/${this.toString(false)}`; + }/${this.toString()}`; } static fromWalletDeeplinkUri(uri: string): GenericRequest { const split = uri.split(`${GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); + const inv = new GenericRequest(); - inv.fromBuffer(base64url.toBuffer(split[1]), 0, GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid); + inv.fromBuffer(base64url.toBuffer(split[1]), 0); return inv; } toQrString(): string { - return this.toString(true); + return this.toString(); } static fromQrString(qrstring: string): GenericRequest { @@ -272,37 +250,38 @@ export class GenericRequest extends VDXFObject { } static fromJson(data: GenericRequestJson): GenericRequest { - const type: BigNumber = data.type ? new BN(data.type) : GenericRequest.TYPE_DATA_DESCRIPTOR; - - let details: GenericRequestDetails; - - if (type.eq(GenericRequest.TYPE_INVOICE)) { - details = VerusPayInvoiceDetails.fromJson(data.details as VerusPayInvoiceDetailsJson); - } else { - details = DataDescriptor.fromJson(data.details as DataDescriptorJson); - } - - return new GenericRequest({ - details, - signature: data.signature != null ? SignatureData.fromJson(data.signature) : undefined, - signing_id: data.signing_id, - system_id: data.system_id, - version: new BN(data.version), - type: new BN(data.type), - flags: new BN(data.flags) - }) + return new GenericRequest(); + // let details: GenericRequestDetails; + + // if (type.eq(GenericRequest.TYPE_INVOICE)) { + // details = VerusPayInvoiceDetails.fromJson(data.details as VerusPayInvoiceDetailsJson); + // } else { + // details = DataDescriptor.fromJson(data.details as DataDescriptorJson); + // } + + // return new GenericRequest({ + // details, + // signature: data.signature != null ? SignatureData.fromJson(data.signature) : undefined, + // version: new BN(data.version), + // type: new BN(data.type), + // flags: new BN(data.flags) + // }) } toJson(): GenericRequestJson { + const details = []; + + if (this.details != null) { + for (const detail of this.details) { + details.push(detail.toJson()) + } + } + return { - vdxfkey: this.vdxfkey, - system_id: this.system_id, - signing_id: this.signing_id, signature: this.isSigned() ? this.signature.toJson() : undefined, - details: this.details.toJson(), + details: details, version: this.version.toString(), - type: this.type.toString(), flags: this.flags.toString() }; } -} +} \ No newline at end of file diff --git a/src/vdxf/index.ts b/src/vdxf/index.ts index f21c4be3..326da8e0 100644 --- a/src/vdxf/index.ts +++ b/src/vdxf/index.ts @@ -167,6 +167,13 @@ export class BufferDataVdxfObject extends VDXFObject { vdxfkey: this.vdxfkey, }; } + + static fromJson(json: { data: string; vdxfkey: string }) { + return new BufferDataVdxfObject( + json.data, + json.vdxfkey, + ); + } } export class VDXFData extends VDXFObject { From 8a87161033b1cfcda34d990efd92caa690126fc7 Mon Sep 17 00:00:00 2001 From: monkins Date: Wed, 8 Oct 2025 11:00:07 +0100 Subject: [PATCH 008/123] Update Informationrequest to camalCase --- .../utils/informationrequest.test.ts | 36 ++++++------- .../vdxf/informationrequestdetails.test.ts | 50 +++++++++---------- .../requestobjects/InformationRequest.ts | 24 ++++----- 3 files changed, 55 insertions(+), 55 deletions(-) diff --git a/src/__tests__/utils/informationrequest.test.ts b/src/__tests__/utils/informationrequest.test.ts index 2472f2fe..36228eb1 100644 --- a/src/__tests__/utils/informationrequest.test.ts +++ b/src/__tests__/utils/informationrequest.test.ts @@ -15,7 +15,7 @@ describe('Information Request Tests', () => { expect(requestItem.type.toNumber()).toBe(1); // ATTESTATION expect(requestItem.id).toEqual({}); expect(requestItem.signer).toBe(''); - expect(requestItem.requestedkeys).toEqual([]); + expect(requestItem.requestedKeys).toEqual([]); }); test('should create RequestItem with provided values', () => { @@ -25,7 +25,7 @@ describe('Information Request Tests', () => { testItem.type = new BN(InformationType.ATTESTATION); testItem.id = testAttestationKey; testItem.signer = testSigner; - testItem.requestedkeys = testRequestedKeys; + testItem.requestedKeys = testRequestedKeys; const requestItem = new RequestItem(testItem); @@ -34,7 +34,7 @@ describe('Information Request Tests', () => { expect(requestItem.type.toNumber()).toBe(InformationType.ATTESTATION); expect(requestItem.id).toEqual(testAttestationKey); expect(requestItem.signer).toBe(testSigner); - expect(requestItem.requestedkeys).toEqual(testRequestedKeys); + expect(requestItem.requestedKeys).toEqual(testRequestedKeys); }); test('should validate format correctly - FULL_DATA', () => { @@ -79,7 +79,7 @@ describe('Information Request Tests', () => { requestItem.type = new BN(InformationType.ATTESTATION); requestItem.id = testAttestationKey; requestItem.signer = testSigner; - requestItem.requestedkeys = testRequestedKeys; + requestItem.requestedKeys = testRequestedKeys; // Serialize to buffer const buffer = requestItem.toBuffer(); @@ -95,7 +95,7 @@ describe('Information Request Tests', () => { expect(deserializedItem.type.toNumber()).toBe(InformationType.ATTESTATION); expect(deserializedItem.id).toEqual(testAttestationKey); expect(deserializedItem.signer).toBe(testSigner); - expect(deserializedItem.requestedkeys).toEqual(testRequestedKeys); + expect(deserializedItem.requestedKeys).toEqual(testRequestedKeys); }); test('should serialize and deserialize to JSON correctly', () => { @@ -105,7 +105,7 @@ describe('Information Request Tests', () => { requestItem.type = new BN(InformationType.CREDENTIAL); requestItem.id = testAttestationKey; requestItem.signer = testSigner; - requestItem.requestedkeys = testRequestedKeys; + requestItem.requestedKeys = testRequestedKeys; // Serialize to JSON const json = requestItem.toJSON(); @@ -127,7 +127,7 @@ describe('Information Request Tests', () => { expect(deserializedItem.type.toNumber()).toBe(InformationType.CREDENTIAL); expect(deserializedItem.id).toEqual(testAttestationKey); expect(deserializedItem.signer).toBe(testSigner); - expect(deserializedItem.requestedkeys).toEqual(testRequestedKeys); + expect(deserializedItem.requestedKeys).toEqual(testRequestedKeys); }); test('should calculate byte length correctly', () => { @@ -137,7 +137,7 @@ describe('Information Request Tests', () => { requestItem.type = new BN(InformationType.ATTESTATION); requestItem.id = testAttestationKey; requestItem.signer = testSigner; - requestItem.requestedkeys = testRequestedKeys; + requestItem.requestedKeys = testRequestedKeys; const byteLength = requestItem.getByteLength(); const buffer = requestItem.toBuffer(); @@ -187,7 +187,7 @@ describe('Information Request Tests', () => { originalItem.type = new BN(InformationType.CREDENTIAL); originalItem.id = testAttestationKey; originalItem.signer = testSigner; - originalItem.requestedkeys = testRequestedKeys; + originalItem.requestedKeys = testRequestedKeys; // JSON round-trip const json = originalItem.toJSON(); @@ -205,7 +205,7 @@ describe('Information Request Tests', () => { expect(fromBufferItem.type.toNumber()).toBe(originalItem.type.toNumber()); expect(fromBufferItem.id).toEqual(originalItem.id); expect(fromBufferItem.signer).toBe(originalItem.signer); - expect(fromBufferItem.requestedkeys).toEqual(originalItem.requestedkeys); + expect(fromBufferItem.requestedKeys).toEqual(originalItem.requestedKeys); }); test('should handle buffer round-trip with hex string', () => { @@ -215,7 +215,7 @@ describe('Information Request Tests', () => { requestItem.type = new BN(InformationType.ATTESTATION); requestItem.id = testAttestationKey; requestItem.signer = testSigner; - requestItem.requestedkeys = testRequestedKeys; + requestItem.requestedKeys = testRequestedKeys; // Serialize to buffer and convert to hex const buffer = requestItem.toBuffer(); @@ -228,7 +228,7 @@ describe('Information Request Tests', () => { expect(reconstructedItem.id).toEqual(testAttestationKey); expect(reconstructedItem.signer).toBe(testSigner); - expect(reconstructedItem.requestedkeys).toEqual(testRequestedKeys); + expect(reconstructedItem.requestedKeys).toEqual(testRequestedKeys); expect(reconstructedItem.format.toNumber()).toBe(RequestedFormatFlags.FULL_DATA); expect(reconstructedItem.type.toNumber()).toBe(InformationType.ATTESTATION); }); @@ -241,7 +241,7 @@ describe('Information Request Tests', () => { originalItem.type = new BN(InformationType.CREDENTIAL); // 3 originalItem.id = testAttestationKey; originalItem.signer = testSigner; - originalItem.requestedkeys = testRequestedKeys; + originalItem.requestedKeys = testRequestedKeys; // Generate the hex string const originalBuffer = originalItem.toBuffer(); @@ -258,7 +258,7 @@ describe('Information Request Tests', () => { expect(deserializedItem.type.toNumber()).toBe(3); // CREDENTIAL expect(deserializedItem.id).toEqual(testAttestationKey); expect(deserializedItem.signer).toBe(testSigner); - expect(deserializedItem.requestedkeys).toEqual(testRequestedKeys); + expect(deserializedItem.requestedKeys).toEqual(testRequestedKeys); // Verify round-trip integrity - serialize again and compare const reserializedBuffer = deserializedItem.toBuffer(); @@ -273,7 +273,7 @@ describe('Information Request Tests', () => { minimalItem.type = new BN(InformationType.ATTESTATION); minimalItem.id = {}; minimalItem.signer = ""; - minimalItem.requestedkeys = []; + minimalItem.requestedKeys = []; const minimalBuffer = minimalItem.toBuffer(); const minimalHex = minimalBuffer.toString('hex'); @@ -287,7 +287,7 @@ describe('Information Request Tests', () => { expect(deserializedMinimal.type.toNumber()).toBe(InformationType.ATTESTATION); expect(deserializedMinimal.id).toEqual({}); expect(deserializedMinimal.signer).toBe(""); - expect(deserializedMinimal.requestedkeys).toEqual([]); + expect(deserializedMinimal.requestedKeys).toEqual([]); // Verify round-trip const reserializedMinimal = deserializedMinimal.toBuffer(); @@ -299,7 +299,7 @@ describe('Information Request Tests', () => { // - version: 1, format: 6 (PARTIAL_DATA | COLLECTION), type: 3 (CREDENTIAL) // - id: {"iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Valu Proof of Life"} // - signer: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB" - // - requestedkeys: ["iPzSt64gwsqmxcz3Ht7zhMngLC6no6S74K", "i6E3RQUUX3jt8CkizuLX6ihZHTegCmmbj4"] + // - requestedKeys: ["iPzSt64gwsqmxcz3Ht7zhMngLC6no6S74K", "i6E3RQUUX3jt8CkizuLX6ihZHTegCmmbj4"] const knownHexString = "06033b7b226945456a566b764d394e697a3475325743723651517a78317a705653764446756231223a2256616c752050726f6f66206f66204c696665227d22694b6a725443776f5046526b3434664169326e594e62504731365a55516a76314e42022269507a53743634677773716d78637a334874377a684d6e674c43366e6f365337344b22693645335251555558336a7438436b697a754c583669685a48546567436d6d626a34"; // Deserialize from known hex string @@ -313,7 +313,7 @@ describe('Information Request Tests', () => { expect(deserializedItem.type.toNumber()).toBe(3); // CREDENTIAL expect(deserializedItem.id).toEqual(testAttestationKey); expect(deserializedItem.signer).toBe(testSigner); - expect(deserializedItem.requestedkeys).toEqual(testRequestedKeys); + expect(deserializedItem.requestedKeys).toEqual(testRequestedKeys); // Verify we can serialize back to the same hex string const reserializedBuffer = deserializedItem.toBuffer(); diff --git a/src/__tests__/vdxf/informationrequestdetails.test.ts b/src/__tests__/vdxf/informationrequestdetails.test.ts index 89cb3b22..85f7ae8c 100644 --- a/src/__tests__/vdxf/informationrequestdetails.test.ts +++ b/src/__tests__/vdxf/informationrequestdetails.test.ts @@ -31,7 +31,7 @@ describe("RequestItem (InformationRequestDetails)", () => { expect(item.type.toString()).toBe("1"); // ATTESTATION expect(item.id).toEqual({}); expect(item.signer).toBe(""); - expect(item.requestedkeys).toEqual([]); + expect(item.requestedKeys).toEqual([]); }); test("creates instance with custom values", () => { @@ -41,7 +41,7 @@ describe("RequestItem (InformationRequestDetails)", () => { type: new BN(InformationType.CREDENTIAL), id: { attestationId: "123", type: "identity" }, signer: TEST_IDENTITY_ID_1, - requestedkeys: ["key1", "key2"] + requestedKeys: ["key1", "key2"] }); expect(item.version.toString()).toBe("1"); @@ -49,7 +49,7 @@ describe("RequestItem (InformationRequestDetails)", () => { expect(item.type.toNumber()).toBe(InformationType.CREDENTIAL); expect(item.id).toEqual({ attestationId: "123", type: "identity" }); expect(item.signer).toBe(TEST_IDENTITY_ID_1); - expect(item.requestedkeys).toEqual(["key1", "key2"]); + expect(item.requestedKeys).toEqual(["key1", "key2"]); }); }); @@ -161,7 +161,7 @@ describe("RequestItem (InformationRequestDetails)", () => { type: new BN(InformationType.CREDENTIAL), id: { attestationId: "abc123", type: "identity", scope: "personal" }, signer: TEST_IDENTITY_ID_1, - requestedkeys: ["name", "email", "birthdate"] + requestedKeys: ["name", "email", "birthdate"] }); const buffer = original.toBuffer(); @@ -173,7 +173,7 @@ describe("RequestItem (InformationRequestDetails)", () => { expect(deserialized.type.toString()).toBe(original.type.toString()); expect(deserialized.id).toEqual(original.id); expect(deserialized.signer).toBe(original.signer); - expect(deserialized.requestedkeys).toEqual(original.requestedkeys); + expect(deserialized.requestedKeys).toEqual(original.requestedKeys); }); test("roundtrip JSON serialization", () => { @@ -183,7 +183,7 @@ describe("RequestItem (InformationRequestDetails)", () => { type: new BN(InformationType.CLAIM), id: { claimId: "xyz789" }, signer: TEST_IDENTITY_ID_1, - requestedkeys: ["verified", "timestamp"] + requestedKeys: ["verified", "timestamp"] }); const json = original.toJSON(); @@ -195,41 +195,41 @@ describe("RequestItem (InformationRequestDetails)", () => { expect(fromJson.type.toString()).toBe(original.type.toString()); expect(fromJson.id).toEqual(original.id); expect(fromJson.signer).toBe(original.signer); - expect(fromJson.requestedkeys).toEqual(original.requestedkeys); + expect(fromJson.requestedKeys).toEqual(original.requestedKeys); }); - test("handles empty requestedkeys", () => { + test("handles empty requestedKeys", () => { const item = createRequestItem({ version: new BN(1), format: new BN(RequestedFormatFlags.FULL_DATA), type: new BN(InformationType.ATTESTATION), id: { id: "test" }, signer: TEST_IDENTITY_ID_1, - requestedkeys: [] + requestedKeys: [] }); const buffer = item.toBuffer(); const deserialized = new RequestItem(); deserialized.fromBuffer(buffer); - expect(deserialized.requestedkeys).toEqual([]); + expect(deserialized.requestedKeys).toEqual([]); }); - test("handles undefined requestedkeys", () => { + test("handles undefined requestedKeys", () => { const item = createRequestItem({ version: new BN(1), format: new BN(RequestedFormatFlags.FULL_DATA), type: new BN(InformationType.ATTESTATION), id: { id: "test" }, signer: TEST_IDENTITY_ID_1 - // requestedkeys is undefined + // requestedKeys is undefined }); const buffer = item.toBuffer(); const deserialized = new RequestItem(); deserialized.fromBuffer(buffer); - expect(deserialized.requestedkeys).toEqual([]); + expect(deserialized.requestedKeys).toEqual([]); }); }); @@ -279,7 +279,7 @@ describe("RequestItem (InformationRequestDetails)", () => { type: new BN(InformationType.CREDENTIAL), id: { test: "value" }, signer: TEST_IDENTITY_ID_1, - requestedkeys: ["key1", "key2"] + requestedKeys: ["key1", "key2"] }); const expectedLength = item.getByteLength(); @@ -299,15 +299,15 @@ describe("RequestItem (InformationRequestDetails)", () => { type: new BN(InformationType.ATTESTATION), id: { [ATTESTATION_NAME.vdxfid]: VALU_ATTESTATION_NAME }, // "vrsc::attestation.name" : name signer: VALU_SIGNER, - requestedkeys: [IDENTITY_FIRSTNAME.vdxfid, IDENTITY_DATEOFBIRTH.vdxfid] + requestedKeys: [IDENTITY_FIRSTNAME.vdxfid, IDENTITY_DATEOFBIRTH.vdxfid] }); expect(certificationRequest.format.toNumber()).toBe(RequestedFormatFlags.PARTIAL_DATA); expect(certificationRequest.type.toNumber()).toBe(InformationType.ATTESTATION); expect(certificationRequest.id[ATTESTATION_NAME.vdxfid]).toBe(VALU_ATTESTATION_NAME); expect(certificationRequest.signer).toBe(VALU_SIGNER); - expect(certificationRequest.requestedkeys).toContain(IDENTITY_FIRSTNAME.vdxfid); - expect(certificationRequest.requestedkeys).toContain(IDENTITY_DATEOFBIRTH.vdxfid); + expect(certificationRequest.requestedKeys).toContain(IDENTITY_FIRSTNAME.vdxfid); + expect(certificationRequest.requestedKeys).toContain(IDENTITY_DATEOFBIRTH.vdxfid); expect(certificationRequest.isValid()).toBe(true); // Test serialization roundtrip @@ -319,7 +319,7 @@ describe("RequestItem (InformationRequestDetails)", () => { expect(deserialized.type.toNumber()).toBe(certificationRequest.type.toNumber()); expect(deserialized.id).toEqual(certificationRequest.id); expect(deserialized.signer).toBe(certificationRequest.signer); - expect(deserialized.requestedkeys).toEqual(certificationRequest.requestedkeys); + expect(deserialized.requestedKeys).toEqual(certificationRequest.requestedKeys); }); test("certification request with full data", () => { @@ -334,7 +334,7 @@ describe("RequestItem (InformationRequestDetails)", () => { expect(certificationRequest1.type.toNumber()).toBe(InformationType.ATTESTATION); expect(certificationRequest1.id[ATTESTATION_NAME.vdxfid]).toBe(VALU_ATTESTATION_NAME); expect(certificationRequest1.signer).toBe(VALU_SIGNER); - expect(certificationRequest1.requestedkeys).toEqual([]); // Default empty array + expect(certificationRequest1.requestedKeys).toEqual([]); // Default empty array expect(certificationRequest1.isValid()).toBe(true); // Test serialization roundtrip @@ -346,7 +346,7 @@ describe("RequestItem (InformationRequestDetails)", () => { expect(deserialized.type.toNumber()).toBe(certificationRequest1.type.toNumber()); expect(deserialized.id).toEqual(certificationRequest1.id); expect(deserialized.signer).toBe(certificationRequest1.signer); - expect(deserialized.requestedkeys).toEqual(certificationRequest1.requestedkeys); + expect(deserialized.requestedKeys).toEqual(certificationRequest1.requestedKeys); }); test("certification request with collection format", () => { @@ -364,7 +364,7 @@ describe("RequestItem (InformationRequestDetails)", () => { expect(certificationRequest2.type.toNumber()).toBe(InformationType.ATTESTATION); expect(certificationRequest2.id[ATTESTATION_NAME.vdxfid]).toBe(VALU_ATTESTATION_NAME); expect(certificationRequest2.signer).toBe(VALU_SIGNER); - expect(certificationRequest2.requestedkeys).toEqual([]); // Default empty array + expect(certificationRequest2.requestedKeys).toEqual([]); // Default empty array expect(certificationRequest2.isValid()).toBe(true); // Test serialization roundtrip @@ -376,7 +376,7 @@ describe("RequestItem (InformationRequestDetails)", () => { expect(deserialized.type.toNumber()).toBe(certificationRequest2.type.toNumber()); expect(deserialized.id).toEqual(certificationRequest2.id); expect(deserialized.signer).toBe(certificationRequest2.signer); - expect(deserialized.requestedkeys).toEqual(certificationRequest2.requestedkeys); + expect(deserialized.requestedKeys).toEqual(certificationRequest2.requestedKeys); }); test("validates VDXF key usage", () => { @@ -399,14 +399,14 @@ describe("RequestItem (InformationRequestDetails)", () => { "customKey": "customValue" }, signer: VALU_SIGNER, - requestedkeys: [IDENTITY_FIRSTNAME.vdxfid, "customRequestedKey"] + requestedKeys: [IDENTITY_FIRSTNAME.vdxfid, "customRequestedKey"] }); expect(mixedRequest.isValid()).toBe(true); expect(mixedRequest.id[ATTESTATION_NAME.vdxfid]).toBe(VALU_ATTESTATION_NAME); expect(mixedRequest.id["customKey"]).toBe("customValue"); - expect(mixedRequest.requestedkeys).toContain(IDENTITY_FIRSTNAME.vdxfid); - expect(mixedRequest.requestedkeys).toContain("customRequestedKey"); + expect(mixedRequest.requestedKeys).toContain(IDENTITY_FIRSTNAME.vdxfid); + expect(mixedRequest.requestedKeys).toContain("customRequestedKey"); }); }); }); diff --git a/src/vdxf/classes/requestobjects/InformationRequest.ts b/src/vdxf/classes/requestobjects/InformationRequest.ts index f9a6806b..1c20a09e 100644 --- a/src/vdxf/classes/requestobjects/InformationRequest.ts +++ b/src/vdxf/classes/requestobjects/InformationRequest.ts @@ -50,7 +50,7 @@ export class RequestItem implements SerializableEntity { type: BigNumber; id: {[key: string]: string}; signer: string; - requestedkeys?: string[]; + requestedKeys?: string[]; constructor(json?: RequestItem) { this.version = json?.version || RequestItem.DEFAULT_VERSION; @@ -58,7 +58,7 @@ export class RequestItem implements SerializableEntity { this.type = json?.type || RequestItem.ATTESTATION; this.id = json?.id || {}; this.signer = json?.signer || ''; - this.requestedkeys = json?.requestedkeys || []; + this.requestedKeys = json?.requestedKeys || []; } isFormatValid(): boolean { @@ -92,9 +92,9 @@ export class RequestItem implements SerializableEntity { length += varuint.encodingLength(Buffer.byteLength(this.signer, 'utf8')); length += Buffer.byteLength(this.signer, 'utf8'); - length += varuint.encodingLength(this.requestedkeys ? this.requestedkeys.length : 0); - if (this.requestedkeys) { - for (const key of this.requestedkeys) { + length += varuint.encodingLength(this.requestedKeys ? this.requestedKeys.length : 0); + if (this.requestedKeys) { + for (const key of this.requestedKeys) { length += varuint.encodingLength(Buffer.byteLength(key, 'utf8')); length += Buffer.byteLength(key, 'utf8'); } @@ -114,9 +114,9 @@ export class RequestItem implements SerializableEntity { // Write signer writer.writeVarSlice(Buffer.from(this.signer, 'utf8')); - writer.writeCompactSize(this.requestedkeys ? this.requestedkeys.length : 0); - if (this.requestedkeys) { - for (const key of this.requestedkeys) { + writer.writeCompactSize(this.requestedKeys ? this.requestedKeys.length : 0); + if (this.requestedKeys) { + for (const key of this.requestedKeys) { writer.writeVarSlice(Buffer.from(key, 'utf8')); } } @@ -135,10 +135,10 @@ export class RequestItem implements SerializableEntity { // Read signer this.signer = reader.readVarSlice().toString('utf8'); - this.requestedkeys = []; + this.requestedKeys = []; const requestedKeysLength = reader.readCompactSize(); for (let i = 0; i < requestedKeysLength; i++) { - this.requestedkeys.push(reader.readVarSlice().toString('utf8')); + this.requestedKeys.push(reader.readVarSlice().toString('utf8')); } return reader.offset; } @@ -150,7 +150,7 @@ export class RequestItem implements SerializableEntity { type: this.type.toNumber(), id: this.id, signer: this.signer, - requestedkeys: this.requestedkeys + requestedkeys: this.requestedKeys }; } @@ -160,6 +160,6 @@ export class RequestItem implements SerializableEntity { this.type = new BN(json.type); this.id = json.id; this.signer = json.signer; - this.requestedkeys = json.requestedkeys || []; + this.requestedKeys = json.requestedkeys || []; } } From bc06415995354270752025b64a28b9f039f0c1f3 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Wed, 8 Oct 2025 19:03:24 +0200 Subject: [PATCH 009/123] Wrap up OrdinalVdxfObjectClass --- dist/utils/types/SerializableEntity.d.ts | 5 + dist/vdxf/classes/OrdinalVdxfObject.d.ts | 79 ++++++ dist/vdxf/classes/OrdinalVdxfObject.js | 207 ++++++++++++++ .../payment/VerusPayInvoiceDetails.d.ts | 3 +- dist/vdxf/classes/request/GenericRequest.d.ts | 55 ++-- dist/vdxf/classes/request/GenericRequest.js | 260 +++++++++--------- dist/vdxf/index.d.ts | 4 + dist/vdxf/index.js | 3 + src/__tests__/vdxf/genericrequest.test.ts | 178 ------------ src/__tests__/vdxf/ordinalvdxfobject.test.ts | 168 +++++++++++ src/utils/types/SerializableEntity.ts | 4 +- src/vdxf/classes/OrdinalVdxfObject.ts | 69 ++--- src/vdxf/classes/request/GenericRequest.ts | 13 +- 13 files changed, 658 insertions(+), 390 deletions(-) create mode 100644 dist/vdxf/classes/OrdinalVdxfObject.d.ts create mode 100644 dist/vdxf/classes/OrdinalVdxfObject.js delete mode 100644 src/__tests__/vdxf/genericrequest.test.ts create mode 100644 src/__tests__/vdxf/ordinalvdxfobject.test.ts diff --git a/dist/utils/types/SerializableEntity.d.ts b/dist/utils/types/SerializableEntity.d.ts index f9ec16a5..e68f8d9a 100644 --- a/dist/utils/types/SerializableEntity.d.ts +++ b/dist/utils/types/SerializableEntity.d.ts @@ -3,3 +3,8 @@ export interface SerializableEntity { fromBuffer(buffer: Buffer, offset?: number): number; getByteLength(): number; } +export interface SerializableDataEntity { + getDataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer): void; +} diff --git a/dist/vdxf/classes/OrdinalVdxfObject.d.ts b/dist/vdxf/classes/OrdinalVdxfObject.d.ts new file mode 100644 index 00000000..077570a2 --- /dev/null +++ b/dist/vdxf/classes/OrdinalVdxfObject.d.ts @@ -0,0 +1,79 @@ +import { BigNumber } from "../../utils/types/BigNumber"; +import { SerializableDataEntity, SerializableEntity } from "../../utils/types/SerializableEntity"; +import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; +import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "./payment/VerusPayInvoiceDetails"; +export interface OrdinalVdxfObjectInterfaceTemplate { + version?: BigNumber; + type?: BigNumber; + vdxfkey?: string; + data?: T; +} +export type OrdinalVdxfObjectJsonTemplate = { + version: string; + type: string; + vdxfkey?: string; + data?: T; +}; +export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails; +export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson; +export type BufferOrOrdinalVdxfObjectReservedData = Buffer | OrdinalVdxfObjectReservedData; +export type StringOrOrdinalVdxfObjectReservedDataJson = string | OrdinalVdxfObjectReservedDataJson; +export type OrdinalVdxfObjectInterface = OrdinalVdxfObjectInterfaceTemplate; +export type OrdinalVdxfObjectJson = OrdinalVdxfObjectJsonTemplate; +export type OrdinalVdxfObjectDataClass = new (...args: any[]) => OrdinalVdxfObjectReservedData; +export type OrdinalVdxfObjectClass = new (...args: any[]) => OrdinalVdxfObject; +export declare const getOrdinalVdxfObjectClassForType: (type: BigNumber) => OrdinalVdxfObjectClass; +export declare class OrdinalVdxfObject implements SerializableEntity { + version: BigNumber; + type: BigNumber; + vdxfkey?: string; + data?: BufferOrOrdinalVdxfObjectReservedData; + static VERSION_INVALID: import("bn.js"); + static VERSION_FIRST: import("bn.js"); + static VERSION_LAST: import("bn.js"); + static VERSION_CURRENT: import("bn.js"); + static TYPE_DATA_DESCRIPTOR: import("bn.js"); + static TYPE_INVOICE: import("bn.js"); + static VDXF_OBJECT_RESERVED_BYTE: import("bn.js"); + constructor(request?: OrdinalVdxfObjectInterfaceTemplate); + isDefinedByVdxfKey(): boolean; + getDataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer): void; + getByteLength(): number; + toBuffer(): Buffer; + fromBufferOptionalType(buffer: Buffer, offset?: number, type?: BigNumber): number; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): OrdinalVdxfObjectJson; + static createFromBuffer(buffer: Buffer, offset?: number): { + offset: number; + obj: OrdinalVdxfObject; + }; +} +export declare class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { + data: Buffer; + vdxfkey: string; + constructor(request?: OrdinalVdxfObjectInterfaceTemplate); + getDataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer): void; + static fromJson(details: OrdinalVdxfObjectJson): GeneralTypeOrdinalVdxfObject; +} +export declare class SerializableEntityOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { + data: OrdinalVdxfObjectReservedData; + entity: OrdinalVdxfObjectDataClass; + constructor(request: OrdinalVdxfObjectInterfaceTemplate, entity: OrdinalVdxfObjectDataClass); + getDataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer): void; +} +export declare class DataDescriptorOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: DataDescriptor; + constructor(request?: OrdinalVdxfObjectInterfaceTemplate); + static fromJson(details: OrdinalVdxfObjectJsonTemplate): DataDescriptorOrdinalVdxfObject; +} +export declare class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: VerusPayInvoiceDetails; + constructor(request?: OrdinalVdxfObjectInterfaceTemplate); + static fromJson(details: OrdinalVdxfObjectJsonTemplate): VerusPayInvoiceOrdinalVdxfObject; +} diff --git a/dist/vdxf/classes/OrdinalVdxfObject.js b/dist/vdxf/classes/OrdinalVdxfObject.js new file mode 100644 index 00000000..ef0bf773 --- /dev/null +++ b/dist/vdxf/classes/OrdinalVdxfObject.js @@ -0,0 +1,207 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VerusPayInvoiceOrdinalVdxfObject = exports.DataDescriptorOrdinalVdxfObject = exports.SerializableEntityOrdinalVdxfObject = exports.GeneralTypeOrdinalVdxfObject = exports.OrdinalVdxfObject = exports.getOrdinalVdxfObjectClassForType = void 0; +const bufferutils_1 = require("../../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const varuint_1 = require("../../utils/varuint"); +const address_1 = require("../../utils/address"); +const varint_1 = require("../../utils/varint"); +const vdxf_1 = require("../../constants/vdxf"); +const pbaas_1 = require("../../pbaas"); +const VerusPayInvoiceDetails_1 = require("./payment/VerusPayInvoiceDetails"); +const getOrdinalVdxfObjectClassForType = (type) => { + if (type.eq(OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR)) + return DataDescriptorOrdinalVdxfObject; + else if (type.eq(OrdinalVdxfObject.TYPE_INVOICE)) + return VerusPayInvoiceOrdinalVdxfObject; + else if (type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE)) + return GeneralTypeOrdinalVdxfObject; + else + throw new Error("Unrecognized vdxf ordinal object type"); +}; +exports.getOrdinalVdxfObjectClassForType = getOrdinalVdxfObjectClassForType; +class OrdinalVdxfObject { + constructor(request = { + type: OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR + }) { + if (request.vdxfkey) { + this.type = OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE; + this.vdxfkey = request.vdxfkey; + if (request.data) { + this.data = request.data; + } + else + this.data = Buffer.alloc(0); + } + else if (request.type == null) { + this.type = OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR; + } + else { + this.type = request.type; + } + if (request.version) + this.version = request.version; + else + this.version = OrdinalVdxfObject.VERSION_CURRENT; + } + isDefinedByVdxfKey() { + return this.type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE); + } + getDataByteLength() { + return 0; + } + toDataBuffer() { + return Buffer.alloc(0); + } + fromDataBuffer(buffer) { } + getByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.type.toNumber()); + if (this.isDefinedByVdxfKey()) { + length += (0, address_1.fromBase58Check)(this.vdxfkey).hash.length; + } + length += varint_1.default.encodingLength(this.version); + const dataLength = this.getDataByteLength(); + length += varuint_1.default.encodingLength(dataLength); + length += dataLength; + return length; + } + toBuffer() { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeCompactSize(this.type.toNumber()); + if (this.isDefinedByVdxfKey()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.vdxfkey).hash); + } + writer.writeVarInt(this.version); + writer.writeVarSlice(this.toDataBuffer()); + return writer.buffer; + } + fromBufferOptionalType(buffer, offset, type) { + if (buffer.length == 0) + throw new Error("Cannot create request from empty buffer"); + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + if (!type) { + this.type = new bn_js_1.BN(reader.readCompactSize()); + } + else + this.type = type; + if (this.isDefinedByVdxfKey()) { + this.vdxfkey = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + } + this.version = reader.readVarInt(); + const dataBuf = reader.readVarSlice(); + this.fromDataBuffer(dataBuf); + return reader.offset; + } + fromBuffer(buffer, offset) { + return this.fromBufferOptionalType(buffer, offset); + } + toJson() { + return { + type: this.type ? this.type.toString() : undefined, + version: this.version ? this.version.toString() : undefined, + vdxfkey: this.vdxfkey, + data: this.data ? this.isDefinedByVdxfKey() ? this.data.toString('hex') : this.data.toJson() : undefined + }; + } + static createFromBuffer(buffer, offset) { + if (buffer.length == 0) + throw new Error("Cannot create request from empty buffer"); + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + const type = new bn_js_1.BN(reader.readCompactSize()); + const Entity = (0, exports.getOrdinalVdxfObjectClassForType)(type); + const ord = new Entity(); + ord.fromBufferOptionalType(buffer, reader.offset, type); + return { offset, obj: ord }; + } +} +exports.OrdinalVdxfObject = OrdinalVdxfObject; +OrdinalVdxfObject.VERSION_INVALID = new bn_js_1.BN(0, 10); +OrdinalVdxfObject.VERSION_FIRST = new bn_js_1.BN(1, 10); +OrdinalVdxfObject.VERSION_LAST = new bn_js_1.BN(1, 10); +OrdinalVdxfObject.VERSION_CURRENT = new bn_js_1.BN(1, 10); +OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR = new bn_js_1.BN(0, 10); +OrdinalVdxfObject.TYPE_INVOICE = new bn_js_1.BN(1, 10); +OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE = new bn_js_1.BN(102, 10); +class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject { + constructor(request = { + data: Buffer.alloc(0), + vdxfkey: vdxf_1.NULL_ADDRESS + }) { + super({ + type: OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE, + data: request.data, + vdxfkey: request.vdxfkey + }); + } + getDataByteLength() { + return this.data.length; + } + toDataBuffer() { + return this.data; + } + fromDataBuffer(buffer) { + this.data = Buffer.from(buffer); + } + static fromJson(details) { + return new GeneralTypeOrdinalVdxfObject({ + vdxfkey: details.vdxfkey, + data: details.data ? Buffer.from(details.data, 'hex') : undefined + }); + } +} +exports.GeneralTypeOrdinalVdxfObject = GeneralTypeOrdinalVdxfObject; +class SerializableEntityOrdinalVdxfObject extends OrdinalVdxfObject { + constructor(request, entity) { + if (!request || !request.type || !request.data) + throw new Error("Expected request with data and type"); + super({ + type: request.type + }); + this.entity = entity; + this.data = request.data; + } + getDataByteLength() { + return this.data.getByteLength(); + } + toDataBuffer() { + return this.data.toBuffer(); + } + fromDataBuffer(buffer) { + this.data = new this.entity(); + this.data.fromBuffer(buffer); + } +} +exports.SerializableEntityOrdinalVdxfObject = SerializableEntityOrdinalVdxfObject; +class DataDescriptorOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject { + constructor(request = { + data: new pbaas_1.DataDescriptor() + }) { + super({ + type: OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR, + data: request.data + }, pbaas_1.DataDescriptor); + } + static fromJson(details) { + return new DataDescriptorOrdinalVdxfObject({ + data: pbaas_1.DataDescriptor.fromJson(details.data) + }); + } +} +exports.DataDescriptorOrdinalVdxfObject = DataDescriptorOrdinalVdxfObject; +class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject { + constructor(request = { + data: new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails() + }) { + super({ + type: OrdinalVdxfObject.TYPE_INVOICE, + data: request.data + }, VerusPayInvoiceDetails_1.VerusPayInvoiceDetails); + } + static fromJson(details) { + return new VerusPayInvoiceOrdinalVdxfObject({ + data: VerusPayInvoiceDetails_1.VerusPayInvoiceDetails.fromJson(details.data) + }); + } +} +exports.VerusPayInvoiceOrdinalVdxfObject = VerusPayInvoiceOrdinalVdxfObject; diff --git a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.d.ts b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.d.ts index 426542f7..c7f83f19 100644 --- a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.d.ts +++ b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.d.ts @@ -1,5 +1,6 @@ import { BigNumber } from '../../../utils/types/BigNumber'; import { TransferDestination, TransferDestinationJson } from '../../../pbaas/TransferDestination'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; export declare const VERUSPAY_INVALID: import("bn.js"); export declare const VERUSPAY_VALID: import("bn.js"); export declare const VERUSPAY_ACCEPTS_CONVERSION: import("bn.js"); @@ -18,7 +19,7 @@ export type VerusPayInvoiceDetailsJson = { maxestimatedslippage?: string; acceptedsystems?: Array; }; -export declare class VerusPayInvoiceDetails { +export declare class VerusPayInvoiceDetails implements SerializableEntity { flags: BigNumber; amount: BigNumber; destination: TransferDestination; diff --git a/dist/vdxf/classes/request/GenericRequest.d.ts b/dist/vdxf/classes/request/GenericRequest.d.ts index 588977d2..3293866f 100644 --- a/dist/vdxf/classes/request/GenericRequest.d.ts +++ b/dist/vdxf/classes/request/GenericRequest.d.ts @@ -1,56 +1,47 @@ -import { VDXFObject } from "../../"; import { BigNumber } from "../../../utils/types/BigNumber"; -import { DataDescriptor, DataDescriptorJson, SignatureData, SignatureJsonDataInterface } from "../../../pbaas"; -import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "../payment/VerusPayInvoiceDetails"; -export type GenericRequestDetails = DataDescriptor | VerusPayInvoiceDetails; -export type GenericRequestDetailsJson = DataDescriptorJson | VerusPayInvoiceDetailsJson; +import { SignatureData, SignatureJsonDataInterface } from "../../../pbaas"; +import { OrdinalVdxfObject, OrdinalVdxfObjectJson } from "../OrdinalVdxfObject"; +import { SerializableEntity } from "../../../utils/types/SerializableEntity"; export interface GenericRequestInterface { version?: BigNumber; flags?: BigNumber; - type?: BigNumber; - system_id?: string; - signing_id?: string; + createdat?: BigNumber; signature?: SignatureData; - details: GenericRequestDetails; + details: Array; } export type GenericRequestJson = { + version: string; flags?: string; - type?: string; - vdxfkey: string; - details: GenericRequestDetailsJson; - system_id?: string; - signing_id?: string; + createdat?: BigNumber; + details: Array; signature?: SignatureJsonDataInterface; - version: string; }; -export declare class GenericRequest extends VDXFObject { +export declare class GenericRequest implements SerializableEntity { + version: BigNumber; flags: BigNumber; - type: BigNumber; - system_id?: string; - signing_id?: string; + createdat?: BigNumber; signature?: SignatureData; - details: GenericRequestDetails; + details: Array; static VERSION_CURRENT: import("bn.js"); static VERSION_FIRSTVALID: import("bn.js"); static VERSION_LASTVALID: import("bn.js"); - static TYPE_DATA_DESCRIPTOR: import("bn.js"); - static TYPE_INVOICE: import("bn.js"); static BASE_FLAGS: import("bn.js"); static FLAG_SIGNED: import("bn.js"); + static FLAG_HAS_CREATED_AT: import("bn.js"); + static FLAG_MULTI_DETAILS: import("bn.js"); constructor(request?: GenericRequestInterface); isValidVersion(): boolean; isSigned(): boolean; - isDataDescriptor(): boolean; - isInvoice(): boolean; + hasMultiDetails(): boolean; setSigned(): void; - private getRawDetailsSha256; - getDetailsHash(signedBlockheight: number, signatureVersion?: number): Buffer; - protected _dataByteLength(signer?: string): number; - protected _toDataBuffer(signer?: string): Buffer; - dataByteLength(): number; - toDataBuffer(): Buffer; - protected _fromDataBuffer(buffer: Buffer, offset?: number): number; - fromDataBuffer(buffer: Buffer, offset?: number): number; + setHasMultiDetails(): void; + setHasCreatedAt(): void; + setFlags(): void; + getDetails(index?: number): OrdinalVdxfObject; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toString(): string; toWalletDeeplinkUri(): string; static fromWalletDeeplinkUri(uri: string): GenericRequest; toQrString(): string; diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js index 68f4a932..13cfdf30 100644 --- a/dist/vdxf/classes/request/GenericRequest.js +++ b/dist/vdxf/classes/request/GenericRequest.js @@ -2,32 +2,20 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.GenericRequest = void 0; const __1 = require("../../"); -const keys_1 = require("../../keys"); -const Hash160_1 = require("./../Hash160"); const bufferutils_1 = require("../../../utils/bufferutils"); -const vdxf_1 = require("../../../constants/vdxf"); -const address_1 = require("../../../utils/address"); -const createHash = require("create-hash"); const base64url_1 = require("base64url"); const bn_js_1 = require("bn.js"); const pbaas_1 = require("../../../pbaas"); -const VerusPayInvoiceDetails_1 = require("../payment/VerusPayInvoiceDetails"); -const varint_1 = require("../../../utils/varint"); -class GenericRequest extends __1.VDXFObject { +const OrdinalVdxfObject_1 = require("../OrdinalVdxfObject"); +const varuint_1 = require("../../../utils/varuint"); +class GenericRequest { constructor(request = { - details: new pbaas_1.DataDescriptor(), - type: GenericRequest.TYPE_DATA_DESCRIPTOR, + details: [], flags: GenericRequest.BASE_FLAGS }) { - super(__1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid); - this.system_id = request.system_id; - this.signing_id = request.signing_id; this.signature = request.signature; this.details = request.details; - if (request.type) - this.type = request.type; - else - this.type = GenericRequest.TYPE_DATA_DESCRIPTOR; + this.createdat = request.createdat; if (request.flags) this.flags = request.flags; else @@ -36,6 +24,7 @@ class GenericRequest extends __1.VDXFObject { this.version = request.version; else this.version = GenericRequest.VERSION_CURRENT; + this.setFlags(); } isValidVersion() { return this.version.gte(GenericRequest.VERSION_FIRSTVALID) && this.version.lte(GenericRequest.VERSION_LASTVALID); @@ -43,130 +32,134 @@ class GenericRequest extends __1.VDXFObject { isSigned() { return !!(this.flags.and(GenericRequest.FLAG_SIGNED).toNumber()); } - isDataDescriptor() { - return this.type.eq(GenericRequest.TYPE_DATA_DESCRIPTOR); - } - isInvoice() { - return this.type.eq(GenericRequest.TYPE_INVOICE); + hasMultiDetails() { + return !!(this.flags.and(GenericRequest.FLAG_MULTI_DETAILS).toNumber()); } setSigned() { this.flags = this.version.xor(GenericRequest.FLAG_SIGNED); } - getRawDetailsSha256() { - return createHash("sha256").update(this.details.toBuffer()).digest(); - } - getDetailsHash(signedBlockheight, signatureVersion = 2) { + setHasMultiDetails() { + this.flags = this.version.xor(GenericRequest.FLAG_MULTI_DETAILS); + } + setHasCreatedAt() { + this.flags = this.version.xor(GenericRequest.FLAG_HAS_CREATED_AT); + } + setFlags() { + if (this.createdat) + this.setHasCreatedAt(); + if (this.details && this.details.length > 1) + this.setHasMultiDetails(); + if (this.signature) + this.setSigned(); + } + // private getRawDetailsSha256() { + // return createHash("sha256").update(this.details.toBuffer()).digest(); + // } + // getDetailsHash(signedBlockheight: number, signatureVersion: number = 2) { + // if (this.isSigned()) { + // var heightBufferWriter = new bufferutils.BufferWriter( + // Buffer.allocUnsafe(4) + // ); + // heightBufferWriter.writeUInt32(signedBlockheight); + // if (signatureVersion === 1) { + // return createHash("sha256") + // .update(VERUS_DATA_SIGNATURE_PREFIX) + // .update(fromBase58Check(this.system_id).hash) + // .update(heightBufferWriter.buffer) + // .update(fromBase58Check(this.signing_id).hash) + // .update(this.getRawDetailsSha256()) + // .digest(); + // } else { + // return createHash("sha256") + // .update(fromBase58Check(this.system_id).hash) + // .update(heightBufferWriter.buffer) + // .update(fromBase58Check(this.signing_id).hash) + // .update(VERUS_DATA_SIGNATURE_PREFIX) + // .update(this.getRawDetailsSha256()) + // .digest(); + // } + // } else return this.getRawDetailsSha256() + // } + getDetails(index = 0) { + return this.details[index]; + } + getByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.version.toNumber()); + length += varuint_1.default.encodingLength(this.flags.toNumber()); if (this.isSigned()) { - var heightBufferWriter = new bufferutils_1.default.BufferWriter(Buffer.allocUnsafe(4)); - heightBufferWriter.writeUInt32(signedBlockheight); - if (signatureVersion === 1) { - return createHash("sha256") - .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) - .update((0, address_1.fromBase58Check)(this.system_id).hash) - .update(heightBufferWriter.buffer) - .update((0, address_1.fromBase58Check)(this.signing_id).hash) - .update(this.getRawDetailsSha256()) - .digest(); - } - else { - return createHash("sha256") - .update((0, address_1.fromBase58Check)(this.system_id).hash) - .update(heightBufferWriter.buffer) - .update((0, address_1.fromBase58Check)(this.signing_id).hash) - .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) - .update(this.getRawDetailsSha256()) - .digest(); + length += this.signature.getByteLength(); + } + if (this.hasMultiDetails()) { + length += varuint_1.default.encodingLength(this.details.length); + for (const detail of this.details) { + length += detail.getByteLength(); } } - else - return this.getRawDetailsSha256(); - } - _dataByteLength(signer = this.signing_id) { - let length = 0; - length += varint_1.default.encodingLength(this.flags); - length += varint_1.default.encodingLength(this.type); - if (this.isSigned()) { - const _signature = this.signature - ? this.signature - : new pbaas_1.SignatureData(); - const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); - length += _system_id.getByteLength(); - const _signing_id = Hash160_1.Hash160.fromAddress(signer); - length += _signing_id.getByteLength(); - length += _signature.getByteLength(); + else { + length += this.getDetails().getByteLength(); } - length += this.details.getByteLength(); return length; } - _toDataBuffer(signer = this.signing_id) { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.dataByteLength())); - writer.writeVarInt(this.flags); - writer.writeVarInt(this.type); + toBuffer() { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeCompactSize(this.version.toNumber()); + writer.writeCompactSize(this.flags.toNumber()); if (this.isSigned()) { - const _signing_id = Hash160_1.Hash160.fromAddress(signer); - const _signature = this.signature - ? this.signature - : new __1.VerusIDSignature({ signature: "" }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false); - const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); - writer.writeSlice(_system_id.toBuffer()); - writer.writeSlice(_signing_id.toBuffer()); - writer.writeSlice(_signature.toBuffer()); + writer.writeSlice(this.signature.toBuffer()); + } + if (this.hasMultiDetails()) { + writer.writeCompactSize(this.details.length); + for (const detail of this.details) { + writer.writeSlice(detail.toBuffer()); + } + } + else { + writer.writeSlice(this.getDetails().toBuffer()); } - writer.writeSlice(this.details.toBuffer()); return writer.buffer; } - dataByteLength() { - return this._dataByteLength(); - } - toDataBuffer() { - return this._toDataBuffer(); - } - _fromDataBuffer(buffer, offset) { + fromBuffer(buffer, offset) { if (buffer.length == 0) throw new Error("Cannot create request from empty buffer"); const reader = new bufferutils_1.default.BufferReader(buffer, offset); - const reqLength = reader.readCompactSize(); - if (reqLength == 0) { - throw new Error("Cannot create request from empty buffer"); + this.version = new bn_js_1.BN(reader.readCompactSize()); + this.flags = new bn_js_1.BN(reader.readCompactSize()); + if (this.isSigned()) { + const _sig = new pbaas_1.SignatureData(); + reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); + this.signature = _sig; } - else { - this.flags = reader.readVarInt(); - this.type = reader.readVarInt(); - if (this.isSigned()) { - this.system_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - this.signing_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - const _sig = new pbaas_1.SignatureData(); - reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); - this.signature = _sig; - } - let _details; - if (this.type.eq(GenericRequest.TYPE_INVOICE)) { - _details = new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails(); - } - else if (this.type.eq(GenericRequest.TYPE_DATA_DESCRIPTOR)) { - _details = new pbaas_1.DataDescriptor(); + if (this.hasMultiDetails()) { + this.details = []; + const numItems = reader.readCompactSize(); + for (let i = 0; i < numItems; i++) { + const ord = OrdinalVdxfObject_1.OrdinalVdxfObject.createFromBuffer(reader.buffer, reader.offset); + reader.offset = ord.offset; + this.details.push(ord.obj); } - else - throw new Error("Unrecognized type"); - reader.offset = _details.fromBuffer(reader.buffer, reader.offset); - this.details = _details; + } + else { + const ord = OrdinalVdxfObject_1.OrdinalVdxfObject.createFromBuffer(reader.buffer, reader.offset); + reader.offset = ord.offset; + this.details = [ord.obj]; } return reader.offset; } - fromDataBuffer(buffer, offset) { - return this._fromDataBuffer(buffer, offset); + toString() { + return base64url_1.default.encode(this.toBuffer()); } toWalletDeeplinkUri() { - return `${__1.WALLET_VDXF_KEY.vdxfid.toLowerCase()}://x-callback-url/${__1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/${this.toString(false)}`; + return `${__1.WALLET_VDXF_KEY.vdxfid.toLowerCase()}://x-callback-url/${__1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/${this.toString()}`; } static fromWalletDeeplinkUri(uri) { const split = uri.split(`${__1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); const inv = new GenericRequest(); - inv.fromBuffer(base64url_1.default.toBuffer(split[1]), 0, __1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid); + inv.fromBuffer(base64url_1.default.toBuffer(split[1]), 0); return inv; } toQrString() { - return this.toString(true); + return this.toString(); } static fromQrString(qrstring) { const inv = new GenericRequest(); @@ -174,33 +167,32 @@ class GenericRequest extends __1.VDXFObject { return inv; } static fromJson(data) { - const type = data.type ? new bn_js_1.BN(data.type) : GenericRequest.TYPE_DATA_DESCRIPTOR; - let details; - if (type.eq(GenericRequest.TYPE_INVOICE)) { - details = VerusPayInvoiceDetails_1.VerusPayInvoiceDetails.fromJson(data.details); - } - else { - details = pbaas_1.DataDescriptor.fromJson(data.details); - } - return new GenericRequest({ - details, - signature: data.signature != null ? pbaas_1.SignatureData.fromJson(data.signature) : undefined, - signing_id: data.signing_id, - system_id: data.system_id, - version: new bn_js_1.BN(data.version), - type: new bn_js_1.BN(data.type), - flags: new bn_js_1.BN(data.flags) - }); + return new GenericRequest(); + // let details: GenericRequestDetails; + // if (type.eq(GenericRequest.TYPE_INVOICE)) { + // details = VerusPayInvoiceDetails.fromJson(data.details as VerusPayInvoiceDetailsJson); + // } else { + // details = DataDescriptor.fromJson(data.details as DataDescriptorJson); + // } + // return new GenericRequest({ + // details, + // signature: data.signature != null ? SignatureData.fromJson(data.signature) : undefined, + // version: new BN(data.version), + // type: new BN(data.type), + // flags: new BN(data.flags) + // }) } toJson() { + const details = []; + if (this.details != null) { + for (const detail of this.details) { + details.push(detail.toJson()); + } + } return { - vdxfkey: this.vdxfkey, - system_id: this.system_id, - signing_id: this.signing_id, signature: this.isSigned() ? this.signature.toJson() : undefined, - details: this.details.toJson(), + details: details, version: this.version.toString(), - type: this.type.toString(), flags: this.flags.toString() }; } @@ -209,7 +201,7 @@ exports.GenericRequest = GenericRequest; GenericRequest.VERSION_CURRENT = new bn_js_1.BN(1, 10); GenericRequest.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); GenericRequest.VERSION_LASTVALID = new bn_js_1.BN(1, 10); -GenericRequest.TYPE_DATA_DESCRIPTOR = new bn_js_1.BN(0, 10); -GenericRequest.TYPE_INVOICE = new bn_js_1.BN(1, 10); GenericRequest.BASE_FLAGS = new bn_js_1.BN(0, 10); GenericRequest.FLAG_SIGNED = new bn_js_1.BN(1, 10); +GenericRequest.FLAG_HAS_CREATED_AT = new bn_js_1.BN(2, 10); +GenericRequest.FLAG_MULTI_DETAILS = new bn_js_1.BN(4, 10); diff --git a/dist/vdxf/index.d.ts b/dist/vdxf/index.d.ts index 741381b8..58b683bd 100644 --- a/dist/vdxf/index.d.ts +++ b/dist/vdxf/index.d.ts @@ -55,6 +55,10 @@ export declare class BufferDataVdxfObject extends VDXFObject { data: string; vdxfkey: string; }; + static fromJson(json: { + data: string; + vdxfkey: string; + }): BufferDataVdxfObject; } export declare class VDXFData extends VDXFObject { data: Buffer; diff --git a/dist/vdxf/index.js b/dist/vdxf/index.js index 49fd56f0..4a88a26a 100644 --- a/dist/vdxf/index.js +++ b/dist/vdxf/index.js @@ -123,6 +123,9 @@ class BufferDataVdxfObject extends VDXFObject { vdxfkey: this.vdxfkey, }; } + static fromJson(json) { + return new BufferDataVdxfObject(json.data, json.vdxfkey); + } } exports.BufferDataVdxfObject = BufferDataVdxfObject; class VDXFData extends VDXFObject { diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts deleted file mode 100644 index 8ea76c86..00000000 --- a/src/__tests__/vdxf/genericrequest.test.ts +++ /dev/null @@ -1,178 +0,0 @@ -import { BN } from "bn.js"; -import { DataDescriptor } from "../../pbaas/DataDescriptor"; -import { VerusPayInvoiceDetails } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; -import { SignatureData } from "../../pbaas/SignatureData"; -import { GenericRequest } from "../../vdxf/classes"; - -describe("GenericRequest serialization tests", () => { - test("rejects invalid versions", () => { - const details = DataDescriptor.fromJson({ - version: 1, - "flags": 2, - "objectdata": { - "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv": { - "version": 1, - "flags": 96, - "mimetype": "text/plain", - "objectdata": { - "message": "Something 1" - }, - "label": "label 1" - } - }, - "salt": "4f66603f256d3f757b6dc3ea44802d4041d2a1901e06005028fd60b85a5878a2" - }); - - const tooLow = new GenericRequest({ - details, - version: GenericRequest.VERSION_FIRSTVALID.sub(new BN(1)), - }); - expect(() => { - const buf = tooLow.toBuffer(); - const req = new GenericRequest(); - req.fromBuffer(buf); - }).toThrow("Unsupported version for vdxf object."); - - const tooHigh = new GenericRequest({ - details, - version: GenericRequest.VERSION_LASTVALID.add(new BN(1)), - }); - expect(() => { - const buf = tooHigh.toBuffer(); - const req = new GenericRequest(); - req.fromBuffer(buf); - }).toThrow("Unsupported version for vdxf object."); - }); - - test("roundtrip unsigned request with DataDescriptor", () => { - const details = DataDescriptor.fromJson({ - version: 1, - "flags": 2, - "objectdata": { - "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv": { - "version": 1, - "flags": 96, - "mimetype": "text/plain", - "objectdata": { - "message": "Something 1" - }, - "label": "label 1" - } - }, - "salt": "4f66603f256d3f757b6dc3ea44802d4041d2a1901e06005028fd60b85a5878a2" - }); - - const req = new GenericRequest({ details }); - - const buf = req.toBuffer(); - const req2 = new GenericRequest(); - req2.fromBuffer(buf); - - expect(req2.toBuffer().toString("hex")).toBe(buf.toString("hex")); - - const uri = req.toWalletDeeplinkUri(); - const fromUri = GenericRequest.fromWalletDeeplinkUri(uri); - expect(fromUri.toBuffer().toString("hex")).toBe(buf.toString("hex")); - - const qr = req.toQrString(); - const fromQr = GenericRequest.fromQrString(qr); - expect(fromQr.toBuffer().toString("hex")).toBe(buf.toString("hex")); - - const json = req.toJson(); - - const fromJson = GenericRequest.fromJson(json); - expect(fromJson.toBuffer().toString("hex")).toBe(buf.toString("hex")); - }); - - test("roundtrip unsigned request with VerusPayInvoiceDetails", () => { - const details = new VerusPayInvoiceDetails({ - requestedcurrencyid: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", - }); - - details.setFlags({ - acceptsConversion: false, - acceptsNonVerusSystems: false, - expires: false, - acceptsAnyAmount: true, - acceptsAnyDestination: true - }) - - const req = new GenericRequest({ - details, - type: GenericRequest.TYPE_INVOICE, - }); - - const buf = req.toBuffer(); - const req2 = new GenericRequest(); - req2.fromBuffer(buf); - - expect(req2.toBuffer().toString("hex")).toBe(buf.toString("hex")); - - const json = req.toJson(); - const fromJson = GenericRequest.fromJson(json); - expect(fromJson.toBuffer().toString("hex")).toBe(buf.toString("hex")); - }); - - test("roundtrip signed request with DataDescriptor + SignatureData", () => { - const details = DataDescriptor.fromJson({ - version: 1, - "flags": 2, - "objectdata": { - "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv": { - "version": 1, - "flags": 96, - "mimetype": "text/plain", - "objectdata": { - "message": "Something 1" - }, - "label": "label 1" - } - }, - "salt": "4f66603f256d3f757b6dc3ea44802d4041d2a1901e06005028fd60b85a5878a2" - }); - - const sig = new SignatureData({ - version: new BN(1), - system_ID: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - hash_type: new BN(5), // EHashTypes.HASH_SHA256 - signature_hash: Buffer.from("aabbccdd", "hex"), - identity_ID: "iB5PRXMHLYcNtM8dfLB6KwfJrHU2mKDYuU", - sig_type: new BN(1), - signature_as_vch: Buffer.from("fakesignature"), - }); - - const req = new GenericRequest({ - details, - system_id: sig.system_ID, - signing_id: sig.identity_ID, - signature: sig, - type: GenericRequest.TYPE_DATA_DESCRIPTOR, - }); - - req.setSigned(); - - const buf = req.toBuffer(); - const req2 = new GenericRequest(); - req2.fromBuffer(buf); - - expect(req2.toBuffer().toString("hex")).toBe(buf.toString("hex")); - - const uri = req.toWalletDeeplinkUri(); - const fromUri = GenericRequest.fromWalletDeeplinkUri(uri); - expect(fromUri.toBuffer().toString("hex")).toBe(buf.toString("hex")); - - const qr = req.toQrString(); - const fromQr = GenericRequest.fromQrString(qr); - expect(fromQr.toBuffer().toString("hex")).toBe(buf.toString("hex")); - - const json = req.toJson(); - const fromJson = GenericRequest.fromJson(json); - expect(fromJson.toBuffer().toString("hex")).toBe(buf.toString("hex")); - }); - - test("throws on empty buffer", () => { - const buf = Buffer.from([]); - const req = new GenericRequest(); - expect(() => req.fromDataBuffer(buf)).toThrow("Cannot create request from empty buffer"); - }); -}); \ No newline at end of file diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts new file mode 100644 index 00000000..4435d767 --- /dev/null +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -0,0 +1,168 @@ +import { BN } from 'bn.js'; +import { + OrdinalVdxfObject, + DataDescriptorOrdinalVdxfObject, + VerusPayInvoiceOrdinalVdxfObject, + GeneralTypeOrdinalVdxfObject, + getOrdinalVdxfObjectClassForType +} from '../../vdxf/classes/OrdinalVdxfObject'; + +import { DataDescriptor, DEST_PKH, TransferDestination } from '../../pbaas'; +import { VerusPayInvoiceDetails } from '../../vdxf/classes'; +import { DEFAULT_VERUS_CHAINID } from '../../constants/pbaas'; +import { fromBase58Check } from '../../utils/address'; + +describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { + function roundTripBuffer(obj: T): T { + const buf = obj.toBuffer(); + // Use the factory createFromBuffer so the correct subclass is used + const { obj: parsed } = OrdinalVdxfObject.createFromBuffer(buf); + // Type assertion + return parsed as T; + } + + function roundTripJson(obj: T): T { + const json = obj.toJson(); + // Depending on subclass, call static fromJson + let newObj: OrdinalVdxfObject; + if (obj instanceof DataDescriptorOrdinalVdxfObject) { + newObj = DataDescriptorOrdinalVdxfObject.fromJson(json as any); + } else if (obj instanceof VerusPayInvoiceOrdinalVdxfObject) { + newObj = VerusPayInvoiceOrdinalVdxfObject.fromJson(json as any); + } else if (obj instanceof GeneralTypeOrdinalVdxfObject) { + newObj = GeneralTypeOrdinalVdxfObject.fromJson(json); + } else { + throw new Error("Unrecognized type") + } + + return newObj as T; + } + + it('should serialize / deserialize a GeneralTypeOrdinalVdxfObject (opaque buffer) via buffer', () => { + const sample = Buffer.from('deadbeef', 'hex'); + const obj = new GeneralTypeOrdinalVdxfObject({ data: sample, vdxfkey: DEFAULT_VERUS_CHAINID }); + + // check some properties + expect(obj.isDefinedByVdxfKey()).toBe(true); + expect(obj.data).toEqual(sample); + expect(obj.vdxfkey).toEqual(DEFAULT_VERUS_CHAINID); + + const round = roundTripBuffer(obj); + expect(round).toBeInstanceOf(GeneralTypeOrdinalVdxfObject); + expect((round as GeneralTypeOrdinalVdxfObject).data).toEqual(sample); + expect(((round as GeneralTypeOrdinalVdxfObject).vdxfkey)).toEqual(DEFAULT_VERUS_CHAINID); + + // Their JSON should match hex + const j = obj.toJson(); + expect(j.data).toEqual(sample.toString('hex')); + const roundJ = roundTripJson(obj); + expect(roundJ).toBeInstanceOf(GeneralTypeOrdinalVdxfObject); + expect((roundJ as GeneralTypeOrdinalVdxfObject).data).toEqual(sample); + expect(((roundJ as GeneralTypeOrdinalVdxfObject).vdxfkey)).toEqual(DEFAULT_VERUS_CHAINID); + }); + + it('should serialize / deserialize a DataDescriptorOrdinalVdxfObject via buffer', () => { + // Create a DataDescriptor with some fields + const dd = DataDescriptor.fromJson({ + version: 1, + "flags": 2, + "objectdata": { + "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv": { + "version": 1, + "flags": 96, + "mimetype": "text/plain", + "objectdata": { + "message": "Something 1" + }, + "label": "label 1" + } + }, + "salt": "4f66603f256d3f757b6dc3ea44802d4041d2a1901e06005028fd60b85a5878a2" + }); + + // Force flags, etc. + dd.SetFlags(); + + const obj = new DataDescriptorOrdinalVdxfObject({ data: dd }); + + const round = roundTripBuffer(obj); + expect(round).toBeInstanceOf(DataDescriptorOrdinalVdxfObject); + const dd2 = (round as DataDescriptorOrdinalVdxfObject).data; + expect(dd2.version.toString()).toEqual(dd.version.toString()); + expect(dd2.flags.toString()).toEqual(dd.flags.toString()); + expect(dd2.objectdata).toEqual(dd.objectdata); + expect(dd2.label).toEqual(dd.label); + expect(dd2.mimeType).toEqual(dd.mimeType); + + // Now JSON round trip + const json = obj.toJson(); + + // The JSON data field should be the DataDescriptor JSON + expect(json.data).toBeDefined(); + const roundJ = roundTripJson(obj); + expect(roundJ).toBeInstanceOf(DataDescriptorOrdinalVdxfObject); + const dd3 = (roundJ as DataDescriptorOrdinalVdxfObject).data; + expect(dd3.version.toString()).toBe(dd.version.toString()); + expect(dd3.flags.toString()).toBe(dd.flags.toString()); + expect(dd3.objectdata).toEqual(dd.objectdata); + expect(dd3.label).toBe(dd.label); + expect(dd3.mimeType).toBe(dd.mimeType); + }); + + it('should serialize / deserialize a VerusPayInvoiceOrdinalVdxfObject via buffer', () => { + // Create a VerusPayInvoiceDetails with some fields + const details = new VerusPayInvoiceDetails({ + amount: new BN(10000000000, 10), + destination: new TransferDestination({ + type: DEST_PKH, + destination_bytes: fromBase58Check("R9J8E2no2HVjQmzX6Ntes2ShSGcn7WiRcx").hash + }), + requestedcurrencyid: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq" + }) + + details.amount = new BN(12345); + details.requestedcurrencyid = DEFAULT_VERUS_CHAINID; + + const obj = new VerusPayInvoiceOrdinalVdxfObject({ data: details }); + + const round = roundTripBuffer(obj); + expect(round).toBeInstanceOf(VerusPayInvoiceOrdinalVdxfObject); + const d2 = (round as VerusPayInvoiceOrdinalVdxfObject).data; + expect(d2.requestedcurrencyid).toEqual(details.requestedcurrencyid); + expect(d2.amount.toString()).toEqual(details.amount.toString()); + + const json = obj.toJson(); + expect(json.data).toBeDefined(); + const roundJ = roundTripJson(obj); + expect(roundJ).toBeInstanceOf(VerusPayInvoiceOrdinalVdxfObject); + const d3 = (roundJ as VerusPayInvoiceOrdinalVdxfObject).data; + expect(d3.requestedcurrencyid).toEqual(details.requestedcurrencyid); + expect(d3.amount.toString()).toEqual(details.amount.toString()); + }); + + it('getOrdinalVdxfObjectClassForType should map to correct classes', () => { + expect(getOrdinalVdxfObjectClassForType(OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR)) + .toBe(DataDescriptorOrdinalVdxfObject); + expect(getOrdinalVdxfObjectClassForType(OrdinalVdxfObject.TYPE_INVOICE)) + .toBe(VerusPayInvoiceOrdinalVdxfObject); + expect(getOrdinalVdxfObjectClassForType(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE)) + .toBe(GeneralTypeOrdinalVdxfObject); + + // unrecognized + expect(() => getOrdinalVdxfObjectClassForType(new BN(999))).toThrow(); + }); + + it('base OrdinalVdxfObject buffer round trip (no vdxfkey path)', () => { + // This tests the fallback when no vdxfkey is provided + const base = new OrdinalVdxfObject({ type: OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR }); + const buf = base.toBuffer(); + const parsed = new OrdinalVdxfObject(); + parsed.fromBuffer(buf); + + expect(parsed.type.toString()).toBe(base.type.toString()); + expect(parsed.version.toString()).toBe(base.version.toString()); + + // data is undefined or empty + expect(parsed.data).toBeUndefined(); + }); +}); \ No newline at end of file diff --git a/src/utils/types/SerializableEntity.ts b/src/utils/types/SerializableEntity.ts index fcdff02e..f823ba18 100644 --- a/src/utils/types/SerializableEntity.ts +++ b/src/utils/types/SerializableEntity.ts @@ -7,5 +7,7 @@ export interface SerializableEntity { export interface SerializableDataEntity { getDataByteLength(): number; toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer, offset?: number): number; + + // fromDataBuffer doesn't get passed an offset because it gets passed only the varslice of the buffer it is meant to interpret. + fromDataBuffer(buffer: Buffer): void; } \ No newline at end of file diff --git a/src/vdxf/classes/OrdinalVdxfObject.ts b/src/vdxf/classes/OrdinalVdxfObject.ts index 710e3630..d5fc42af 100644 --- a/src/vdxf/classes/OrdinalVdxfObject.ts +++ b/src/vdxf/classes/OrdinalVdxfObject.ts @@ -5,7 +5,7 @@ import { SerializableDataEntity, SerializableEntity } from "../../utils/types/Se import varuint from "../../utils/varuint"; import { fromBase58Check, toBase58Check } from "../../utils/address"; import varint from "../../utils/varint"; -import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from "../../constants/vdxf"; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION, NULL_ADDRESS } from "../../constants/vdxf"; import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "./payment/VerusPayInvoiceDetails"; @@ -91,9 +91,7 @@ export class OrdinalVdxfObject implements SerializableEntity { return Buffer.alloc(0); } - fromDataBuffer(buffer: Buffer, offset: number): number { - return 0; - } + fromDataBuffer(buffer: Buffer): void {} getByteLength(): number { let length = 0; @@ -146,8 +144,9 @@ export class OrdinalVdxfObject implements SerializableEntity { } this.version = reader.readVarInt(); + const dataBuf = reader.readVarSlice(); - reader.offset = this.fromDataBuffer(reader.buffer, reader.offset); + this.fromDataBuffer(dataBuf); return reader.offset; } @@ -156,18 +155,6 @@ export class OrdinalVdxfObject implements SerializableEntity { return this.fromBufferOptionalType(buffer, offset); } - static fromJson(details: OrdinalVdxfObjectJson): OrdinalVdxfObject { - const type = details.type ? new BN(details.type) : undefined; - - // Each extended class needs to define its own static fromJson where it fills in the data field - return new OrdinalVdxfObject({ - type: type ? new BN(details.type) : undefined, - version: details.version ? new BN(details.version) : undefined, - vdxfkey: details.vdxfkey, - data: details.data && type && type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE) ? Buffer.from(details.data as string, 'hex') : undefined - }); - } - toJson(): OrdinalVdxfObjectJson { return { type: this.type ? this.type.toString() : undefined, @@ -186,7 +173,7 @@ export class OrdinalVdxfObject implements SerializableEntity { const Entity = getOrdinalVdxfObjectClassForType(type); const ord = new Entity(); - ord.fromBufferOptionalType(buffer, offset, type); + ord.fromBufferOptionalType(buffer, reader.offset, type); return { offset, obj: ord }; } @@ -194,15 +181,18 @@ export class OrdinalVdxfObject implements SerializableEntity { export class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { data: Buffer; + vdxfkey: string; constructor( request: OrdinalVdxfObjectInterfaceTemplate = { - data: Buffer.alloc(0) + data: Buffer.alloc(0), + vdxfkey: NULL_ADDRESS } ) { super({ type: OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE, - data: request.data + data: request.data, + vdxfkey: request.vdxfkey }) } @@ -214,12 +204,15 @@ export class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements S return this.data; } - fromDataBuffer(buffer: Buffer, offset: number): number { - const reader = new bufferutils.BufferReader(buffer, offset); - - this.data = reader.readVarSlice(); + fromDataBuffer(buffer: Buffer): void { + this.data = Buffer.from(buffer) + } - return reader.offset; + static fromJson(details: OrdinalVdxfObjectJson): GeneralTypeOrdinalVdxfObject { + return new GeneralTypeOrdinalVdxfObject({ + vdxfkey: details.vdxfkey, + data: details.data ? Buffer.from(details.data as string, 'hex') : undefined + }); } } @@ -249,19 +242,15 @@ export class SerializableEntityOrdinalVdxfObject extends OrdinalVdxfObject imple return this.data.toBuffer(); } - fromDataBuffer(buffer: Buffer, offset: number): number { - const reader = new bufferutils.BufferReader(buffer, offset); - - const dataDescriptorBuf = reader.readVarSlice(); - + fromDataBuffer(buffer: Buffer): void { this.data = new this.entity(); - this.data.fromBuffer(dataDescriptorBuf); - - return reader.offset; + this.data.fromBuffer(buffer); } } export class DataDescriptorOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: DataDescriptor; + constructor( request: OrdinalVdxfObjectInterfaceTemplate = { data: new DataDescriptor() @@ -275,9 +264,17 @@ export class DataDescriptorOrdinalVdxfObject extends SerializableEntityOrdinalVd DataDescriptor ); } + + static fromJson(details: OrdinalVdxfObjectJsonTemplate): DataDescriptorOrdinalVdxfObject { + return new DataDescriptorOrdinalVdxfObject({ + data: DataDescriptor.fromJson(details.data) + }) + } } export class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: VerusPayInvoiceDetails; + constructor( request: OrdinalVdxfObjectInterfaceTemplate = { data: new VerusPayInvoiceDetails() @@ -291,4 +288,10 @@ export class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalV VerusPayInvoiceDetails ); } + + static fromJson(details: OrdinalVdxfObjectJsonTemplate): VerusPayInvoiceOrdinalVdxfObject { + return new VerusPayInvoiceOrdinalVdxfObject({ + data: VerusPayInvoiceDetails.fromJson(details.data) + }) + } } \ No newline at end of file diff --git a/src/vdxf/classes/request/GenericRequest.ts b/src/vdxf/classes/request/GenericRequest.ts index cd873a2e..557a3f2f 100644 --- a/src/vdxf/classes/request/GenericRequest.ts +++ b/src/vdxf/classes/request/GenericRequest.ts @@ -1,21 +1,12 @@ import { WALLET_VDXF_KEY, - GENERIC_REQUEST_DEEPLINK_VDXF_KEY, - VDXFObject, - VerusIDSignature + GENERIC_REQUEST_DEEPLINK_VDXF_KEY } from "../../"; -import { IDENTITY_AUTH_SIG_VDXF_KEY } from "../../keys"; -import { Hash160 } from "./../Hash160"; import bufferutils from "../../../utils/bufferutils"; -import { HASH160_BYTE_LENGTH, I_ADDR_VERSION, VERUS_DATA_SIGNATURE_PREFIX } from "../../../constants/vdxf"; -import { fromBase58Check, toBase58Check } from "../../../utils/address"; -import createHash = require("create-hash"); import base64url from "base64url"; import { BN } from 'bn.js'; import { BigNumber } from "../../../utils/types/BigNumber"; -import { DataDescriptor, DataDescriptorJson, SignatureData, SignatureJsonDataInterface } from "../../../pbaas"; -import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "../payment/VerusPayInvoiceDetails"; -import varint from "../../../utils/varint"; +import { SignatureData, SignatureJsonDataInterface } from "../../../pbaas"; import { OrdinalVdxfObject, OrdinalVdxfObjectJson } from "../OrdinalVdxfObject"; import varuint from "../../../utils/varuint"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; From 309996ef14149365e5aa5139dc5c462ccfde7bd8 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Wed, 8 Oct 2025 19:05:32 +0200 Subject: [PATCH 010/123] Rename properties in OrdinalVdxfObject to camelCase --- dist/vdxf/classes/OrdinalVdxfObject.d.ts | 8 +++--- dist/vdxf/classes/OrdinalVdxfObject.js | 18 +++++++------- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 12 ++++----- src/vdxf/classes/OrdinalVdxfObject.ts | 26 ++++++++++---------- 4 files changed, 32 insertions(+), 32 deletions(-) diff --git a/dist/vdxf/classes/OrdinalVdxfObject.d.ts b/dist/vdxf/classes/OrdinalVdxfObject.d.ts index 077570a2..d7821b71 100644 --- a/dist/vdxf/classes/OrdinalVdxfObject.d.ts +++ b/dist/vdxf/classes/OrdinalVdxfObject.d.ts @@ -5,13 +5,13 @@ import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "./payment/Ve export interface OrdinalVdxfObjectInterfaceTemplate { version?: BigNumber; type?: BigNumber; - vdxfkey?: string; + vdxfKey?: string; data?: T; } export type OrdinalVdxfObjectJsonTemplate = { version: string; type: string; - vdxfkey?: string; + vdxfKey?: string; data?: T; }; export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails; @@ -26,7 +26,7 @@ export declare const getOrdinalVdxfObjectClassForType: (type: BigNumber) => Ordi export declare class OrdinalVdxfObject implements SerializableEntity { version: BigNumber; type: BigNumber; - vdxfkey?: string; + vdxfKey?: string; data?: BufferOrOrdinalVdxfObjectReservedData; static VERSION_INVALID: import("bn.js"); static VERSION_FIRST: import("bn.js"); @@ -52,7 +52,7 @@ export declare class OrdinalVdxfObject implements SerializableEntity { } export declare class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { data: Buffer; - vdxfkey: string; + vdxfKey: string; constructor(request?: OrdinalVdxfObjectInterfaceTemplate); getDataByteLength(): number; toDataBuffer(): Buffer; diff --git a/dist/vdxf/classes/OrdinalVdxfObject.js b/dist/vdxf/classes/OrdinalVdxfObject.js index ef0bf773..3334a24b 100644 --- a/dist/vdxf/classes/OrdinalVdxfObject.js +++ b/dist/vdxf/classes/OrdinalVdxfObject.js @@ -24,9 +24,9 @@ class OrdinalVdxfObject { constructor(request = { type: OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR }) { - if (request.vdxfkey) { + if (request.vdxfKey) { this.type = OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE; - this.vdxfkey = request.vdxfkey; + this.vdxfKey = request.vdxfKey; if (request.data) { this.data = request.data; } @@ -58,7 +58,7 @@ class OrdinalVdxfObject { let length = 0; length += varuint_1.default.encodingLength(this.type.toNumber()); if (this.isDefinedByVdxfKey()) { - length += (0, address_1.fromBase58Check)(this.vdxfkey).hash.length; + length += (0, address_1.fromBase58Check)(this.vdxfKey).hash.length; } length += varint_1.default.encodingLength(this.version); const dataLength = this.getDataByteLength(); @@ -70,7 +70,7 @@ class OrdinalVdxfObject { const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); writer.writeCompactSize(this.type.toNumber()); if (this.isDefinedByVdxfKey()) { - writer.writeSlice((0, address_1.fromBase58Check)(this.vdxfkey).hash); + writer.writeSlice((0, address_1.fromBase58Check)(this.vdxfKey).hash); } writer.writeVarInt(this.version); writer.writeVarSlice(this.toDataBuffer()); @@ -86,7 +86,7 @@ class OrdinalVdxfObject { else this.type = type; if (this.isDefinedByVdxfKey()) { - this.vdxfkey = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + this.vdxfKey = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); } this.version = reader.readVarInt(); const dataBuf = reader.readVarSlice(); @@ -100,7 +100,7 @@ class OrdinalVdxfObject { return { type: this.type ? this.type.toString() : undefined, version: this.version ? this.version.toString() : undefined, - vdxfkey: this.vdxfkey, + vdxfKey: this.vdxfKey, data: this.data ? this.isDefinedByVdxfKey() ? this.data.toString('hex') : this.data.toJson() : undefined }; } @@ -126,12 +126,12 @@ OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE = new bn_js_1.BN(102, 10); class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject { constructor(request = { data: Buffer.alloc(0), - vdxfkey: vdxf_1.NULL_ADDRESS + vdxfKey: vdxf_1.NULL_ADDRESS }) { super({ type: OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE, data: request.data, - vdxfkey: request.vdxfkey + vdxfKey: request.vdxfKey }); } getDataByteLength() { @@ -145,7 +145,7 @@ class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject { } static fromJson(details) { return new GeneralTypeOrdinalVdxfObject({ - vdxfkey: details.vdxfkey, + vdxfKey: details.vdxfKey, data: details.data ? Buffer.from(details.data, 'hex') : undefined }); } diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 4435d767..9e12481f 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -40,17 +40,17 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { it('should serialize / deserialize a GeneralTypeOrdinalVdxfObject (opaque buffer) via buffer', () => { const sample = Buffer.from('deadbeef', 'hex'); - const obj = new GeneralTypeOrdinalVdxfObject({ data: sample, vdxfkey: DEFAULT_VERUS_CHAINID }); + const obj = new GeneralTypeOrdinalVdxfObject({ data: sample, vdxfKey: DEFAULT_VERUS_CHAINID }); // check some properties expect(obj.isDefinedByVdxfKey()).toBe(true); expect(obj.data).toEqual(sample); - expect(obj.vdxfkey).toEqual(DEFAULT_VERUS_CHAINID); + expect(obj.vdxfKey).toEqual(DEFAULT_VERUS_CHAINID); const round = roundTripBuffer(obj); expect(round).toBeInstanceOf(GeneralTypeOrdinalVdxfObject); expect((round as GeneralTypeOrdinalVdxfObject).data).toEqual(sample); - expect(((round as GeneralTypeOrdinalVdxfObject).vdxfkey)).toEqual(DEFAULT_VERUS_CHAINID); + expect(((round as GeneralTypeOrdinalVdxfObject).vdxfKey)).toEqual(DEFAULT_VERUS_CHAINID); // Their JSON should match hex const j = obj.toJson(); @@ -58,7 +58,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const roundJ = roundTripJson(obj); expect(roundJ).toBeInstanceOf(GeneralTypeOrdinalVdxfObject); expect((roundJ as GeneralTypeOrdinalVdxfObject).data).toEqual(sample); - expect(((roundJ as GeneralTypeOrdinalVdxfObject).vdxfkey)).toEqual(DEFAULT_VERUS_CHAINID); + expect(((roundJ as GeneralTypeOrdinalVdxfObject).vdxfKey)).toEqual(DEFAULT_VERUS_CHAINID); }); it('should serialize / deserialize a DataDescriptorOrdinalVdxfObject via buffer', () => { @@ -152,8 +152,8 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(() => getOrdinalVdxfObjectClassForType(new BN(999))).toThrow(); }); - it('base OrdinalVdxfObject buffer round trip (no vdxfkey path)', () => { - // This tests the fallback when no vdxfkey is provided + it('base OrdinalVdxfObject buffer round trip (no vdxfKey path)', () => { + // This tests the fallback when no vdxfKey is provided const base = new OrdinalVdxfObject({ type: OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR }); const buf = base.toBuffer(); const parsed = new OrdinalVdxfObject(); diff --git a/src/vdxf/classes/OrdinalVdxfObject.ts b/src/vdxf/classes/OrdinalVdxfObject.ts index d5fc42af..12ffef64 100644 --- a/src/vdxf/classes/OrdinalVdxfObject.ts +++ b/src/vdxf/classes/OrdinalVdxfObject.ts @@ -12,14 +12,14 @@ import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "./payment/Ve export interface OrdinalVdxfObjectInterfaceTemplate { version?: BigNumber; type?: BigNumber; - vdxfkey?: string; + vdxfKey?: string; data?: T; } export type OrdinalVdxfObjectJsonTemplate = { version: string; type: string; - vdxfkey?: string; + vdxfKey?: string; data?: T; } @@ -44,7 +44,7 @@ export const getOrdinalVdxfObjectClassForType = (type: BigNumber): OrdinalVdxfOb export class OrdinalVdxfObject implements SerializableEntity { version: BigNumber; type: BigNumber; - vdxfkey?: string; + vdxfKey?: string; data?: BufferOrOrdinalVdxfObjectReservedData; static VERSION_INVALID = new BN(0, 10) @@ -62,9 +62,9 @@ export class OrdinalVdxfObject implements SerializableEntity { type: OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR } ) { - if (request.vdxfkey) { + if (request.vdxfKey) { this.type = OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE; - this.vdxfkey = request.vdxfkey; + this.vdxfKey = request.vdxfKey; if (request.data) { this.data = request.data; @@ -99,7 +99,7 @@ export class OrdinalVdxfObject implements SerializableEntity { length += varuint.encodingLength(this.type.toNumber()); if (this.isDefinedByVdxfKey()) { - length += fromBase58Check(this.vdxfkey).hash.length; + length += fromBase58Check(this.vdxfKey).hash.length; } length += varint.encodingLength(this.version); @@ -120,7 +120,7 @@ export class OrdinalVdxfObject implements SerializableEntity { writer.writeCompactSize(this.type.toNumber()); if (this.isDefinedByVdxfKey()) { - writer.writeSlice(fromBase58Check(this.vdxfkey).hash); + writer.writeSlice(fromBase58Check(this.vdxfKey).hash); } writer.writeVarInt(this.version); @@ -140,7 +140,7 @@ export class OrdinalVdxfObject implements SerializableEntity { } else this.type = type; if (this.isDefinedByVdxfKey()) { - this.vdxfkey = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); + this.vdxfKey = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); } this.version = reader.readVarInt(); @@ -159,7 +159,7 @@ export class OrdinalVdxfObject implements SerializableEntity { return { type: this.type ? this.type.toString() : undefined, version: this.version ? this.version.toString() : undefined, - vdxfkey: this.vdxfkey, + vdxfKey: this.vdxfKey, data: this.data ? this.isDefinedByVdxfKey() ? this.data.toString('hex') : (this.data as OrdinalVdxfObjectReservedData).toJson() : undefined }; } @@ -181,18 +181,18 @@ export class OrdinalVdxfObject implements SerializableEntity { export class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { data: Buffer; - vdxfkey: string; + vdxfKey: string; constructor( request: OrdinalVdxfObjectInterfaceTemplate = { data: Buffer.alloc(0), - vdxfkey: NULL_ADDRESS + vdxfKey: NULL_ADDRESS } ) { super({ type: OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE, data: request.data, - vdxfkey: request.vdxfkey + vdxfKey: request.vdxfKey }) } @@ -210,7 +210,7 @@ export class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements S static fromJson(details: OrdinalVdxfObjectJson): GeneralTypeOrdinalVdxfObject { return new GeneralTypeOrdinalVdxfObject({ - vdxfkey: details.vdxfkey, + vdxfKey: details.vdxfKey, data: details.data ? Buffer.from(details.data as string, 'hex') : undefined }); } From 9c5f4e38862583a04f9aa9fe73eccb58e412e304 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Thu, 9 Oct 2025 18:38:17 +0200 Subject: [PATCH 011/123] Wrap up generic request wrapper except for signing component --- dist/vdxf/classes/OrdinalVdxfObject.js | 4 +- dist/vdxf/classes/request/GenericRequest.d.ts | 14 +- dist/vdxf/classes/request/GenericRequest.js | 130 +++++++------- dist/vdxf/keys.js | 2 +- src/__tests__/constants/fixtures.ts | 4 +- src/__tests__/vdxf/genericrequest.test.ts | 168 ++++++++++++++++++ src/vdxf/classes/OrdinalVdxfObject.ts | 4 +- src/vdxf/classes/request/GenericRequest.ts | 158 ++++++++-------- src/vdxf/keys.ts | 2 +- 9 files changed, 344 insertions(+), 142 deletions(-) create mode 100644 src/__tests__/vdxf/genericrequest.test.ts diff --git a/dist/vdxf/classes/OrdinalVdxfObject.js b/dist/vdxf/classes/OrdinalVdxfObject.js index 3334a24b..7f156b69 100644 --- a/dist/vdxf/classes/OrdinalVdxfObject.js +++ b/dist/vdxf/classes/OrdinalVdxfObject.js @@ -111,8 +111,8 @@ class OrdinalVdxfObject { const type = new bn_js_1.BN(reader.readCompactSize()); const Entity = (0, exports.getOrdinalVdxfObjectClassForType)(type); const ord = new Entity(); - ord.fromBufferOptionalType(buffer, reader.offset, type); - return { offset, obj: ord }; + reader.offset = ord.fromBufferOptionalType(buffer, reader.offset, type); + return { offset: reader.offset, obj: ord }; } } exports.OrdinalVdxfObject = OrdinalVdxfObject; diff --git a/dist/vdxf/classes/request/GenericRequest.d.ts b/dist/vdxf/classes/request/GenericRequest.d.ts index 3293866f..7d7715a2 100644 --- a/dist/vdxf/classes/request/GenericRequest.d.ts +++ b/dist/vdxf/classes/request/GenericRequest.d.ts @@ -5,22 +5,22 @@ import { SerializableEntity } from "../../../utils/types/SerializableEntity"; export interface GenericRequestInterface { version?: BigNumber; flags?: BigNumber; - createdat?: BigNumber; signature?: SignatureData; + createdAt?: BigNumber; details: Array; } export type GenericRequestJson = { version: string; flags?: string; - createdat?: BigNumber; - details: Array; signature?: SignatureJsonDataInterface; + createdAt?: BigNumber; + details: Array; }; export declare class GenericRequest implements SerializableEntity { version: BigNumber; flags: BigNumber; - createdat?: BigNumber; signature?: SignatureData; + createdAt?: BigNumber; details: Array; static VERSION_CURRENT: import("bn.js"); static VERSION_FIRSTVALID: import("bn.js"); @@ -33,11 +33,16 @@ export declare class GenericRequest implements SerializableEntity { isValidVersion(): boolean; isSigned(): boolean; hasMultiDetails(): boolean; + hasCreatedAt(): boolean; setSigned(): void; setHasMultiDetails(): void; setHasCreatedAt(): void; setFlags(): void; + private getRawDetailsSha256; + getDetailsHash(signedBlockheight: number): Buffer; getDetails(index?: number): OrdinalVdxfObject; + private getDetailsBufferLength; + private getDetailsBuffer; getByteLength(): number; toBuffer(): Buffer; fromBuffer(buffer: Buffer, offset?: number): number; @@ -46,6 +51,5 @@ export declare class GenericRequest implements SerializableEntity { static fromWalletDeeplinkUri(uri: string): GenericRequest; toQrString(): string; static fromQrString(qrstring: string): GenericRequest; - static fromJson(data: GenericRequestJson): GenericRequest; toJson(): GenericRequestJson; } diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js index 13cfdf30..188fa0ad 100644 --- a/dist/vdxf/classes/request/GenericRequest.js +++ b/dist/vdxf/classes/request/GenericRequest.js @@ -8,6 +8,9 @@ const bn_js_1 = require("bn.js"); const pbaas_1 = require("../../../pbaas"); const OrdinalVdxfObject_1 = require("../OrdinalVdxfObject"); const varuint_1 = require("../../../utils/varuint"); +const crypto_1 = require("crypto"); +const address_1 = require("../../../utils/address"); +const vdxf_1 = require("../../../constants/vdxf"); class GenericRequest { constructor(request = { details: [], @@ -15,7 +18,7 @@ class GenericRequest { }) { this.signature = request.signature; this.details = request.details; - this.createdat = request.createdat; + this.createdAt = request.createdAt; if (request.flags) this.flags = request.flags; else @@ -35,60 +38,62 @@ class GenericRequest { hasMultiDetails() { return !!(this.flags.and(GenericRequest.FLAG_MULTI_DETAILS).toNumber()); } + hasCreatedAt() { + return !!(this.flags.and(GenericRequest.FLAG_HAS_CREATED_AT).toNumber()); + } setSigned() { - this.flags = this.version.xor(GenericRequest.FLAG_SIGNED); + this.flags = this.flags.xor(GenericRequest.FLAG_SIGNED); } setHasMultiDetails() { - this.flags = this.version.xor(GenericRequest.FLAG_MULTI_DETAILS); + this.flags = this.flags.xor(GenericRequest.FLAG_MULTI_DETAILS); } setHasCreatedAt() { - this.flags = this.version.xor(GenericRequest.FLAG_HAS_CREATED_AT); + this.flags = this.flags.xor(GenericRequest.FLAG_HAS_CREATED_AT); } setFlags() { - if (this.createdat) + if (this.createdAt) this.setHasCreatedAt(); if (this.details && this.details.length > 1) this.setHasMultiDetails(); if (this.signature) this.setSigned(); } - // private getRawDetailsSha256() { - // return createHash("sha256").update(this.details.toBuffer()).digest(); - // } - // getDetailsHash(signedBlockheight: number, signatureVersion: number = 2) { - // if (this.isSigned()) { - // var heightBufferWriter = new bufferutils.BufferWriter( - // Buffer.allocUnsafe(4) - // ); - // heightBufferWriter.writeUInt32(signedBlockheight); - // if (signatureVersion === 1) { - // return createHash("sha256") - // .update(VERUS_DATA_SIGNATURE_PREFIX) - // .update(fromBase58Check(this.system_id).hash) - // .update(heightBufferWriter.buffer) - // .update(fromBase58Check(this.signing_id).hash) - // .update(this.getRawDetailsSha256()) - // .digest(); - // } else { - // return createHash("sha256") - // .update(fromBase58Check(this.system_id).hash) - // .update(heightBufferWriter.buffer) - // .update(fromBase58Check(this.signing_id).hash) - // .update(VERUS_DATA_SIGNATURE_PREFIX) - // .update(this.getRawDetailsSha256()) - // .digest(); - // } - // } else return this.getRawDetailsSha256() - // } + getRawDetailsSha256() { + return (0, crypto_1.createHash)("sha256").update(this.getDetailsBuffer()).digest(); + } + getDetailsHash(signedBlockheight) { + if (this.isSigned()) { + var heightBufferWriter = new bufferutils_1.default.BufferWriter(Buffer.alloc(4)); + heightBufferWriter.writeUInt32(signedBlockheight); + if (this.signature.version.toNumber() === 1) { + return (0, crypto_1.createHash)("sha256") + .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) + .update((0, address_1.fromBase58Check)(this.signature.system_ID).hash) + .update(heightBufferWriter.buffer) + .update((0, address_1.fromBase58Check)(this.signature.identity_ID).hash) + .update(this.getRawDetailsSha256()) + .digest(); + } + else { + return (0, crypto_1.createHash)("sha256") + .update((0, address_1.fromBase58Check)(this.signature.system_ID).hash) + .update(heightBufferWriter.buffer) + .update((0, address_1.fromBase58Check)(this.signature.identity_ID).hash) + .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) + .update(this.getRawDetailsSha256()) + .digest(); + } + } + else + return this.getRawDetailsSha256(); + } getDetails(index = 0) { return this.details[index]; } - getByteLength() { + getDetailsBufferLength() { let length = 0; - length += varuint_1.default.encodingLength(this.version.toNumber()); - length += varuint_1.default.encodingLength(this.flags.toNumber()); - if (this.isSigned()) { - length += this.signature.getByteLength(); + if (this.hasCreatedAt()) { + length += varuint_1.default.encodingLength(this.createdAt.toNumber()); } if (this.hasMultiDetails()) { length += varuint_1.default.encodingLength(this.details.length); @@ -101,12 +106,10 @@ class GenericRequest { } return length; } - toBuffer() { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeCompactSize(this.version.toNumber()); - writer.writeCompactSize(this.flags.toNumber()); - if (this.isSigned()) { - writer.writeSlice(this.signature.toBuffer()); + getDetailsBuffer() { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getDetailsBufferLength())); + if (this.hasCreatedAt()) { + writer.writeCompactSize(this.createdAt.toNumber()); } if (this.hasMultiDetails()) { writer.writeCompactSize(this.details.length); @@ -119,6 +122,26 @@ class GenericRequest { } return writer.buffer; } + getByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.version.toNumber()); + length += varuint_1.default.encodingLength(this.flags.toNumber()); + if (this.isSigned()) { + length += this.signature.getByteLength(); + } + length += this.getDetailsBufferLength(); + return length; + } + toBuffer() { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeCompactSize(this.version.toNumber()); + writer.writeCompactSize(this.flags.toNumber()); + if (this.isSigned()) { + writer.writeSlice(this.signature.toBuffer()); + } + writer.writeSlice(this.getDetailsBuffer()); + return writer.buffer; + } fromBuffer(buffer, offset) { if (buffer.length == 0) throw new Error("Cannot create request from empty buffer"); @@ -130,6 +153,9 @@ class GenericRequest { reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); this.signature = _sig; } + if (this.hasCreatedAt()) { + this.createdAt = new bn_js_1.BN(reader.readCompactSize()); + } if (this.hasMultiDetails()) { this.details = []; const numItems = reader.readCompactSize(); @@ -166,22 +192,6 @@ class GenericRequest { inv.fromBuffer(base64url_1.default.toBuffer(qrstring), 0); return inv; } - static fromJson(data) { - return new GenericRequest(); - // let details: GenericRequestDetails; - // if (type.eq(GenericRequest.TYPE_INVOICE)) { - // details = VerusPayInvoiceDetails.fromJson(data.details as VerusPayInvoiceDetailsJson); - // } else { - // details = DataDescriptor.fromJson(data.details as DataDescriptorJson); - // } - // return new GenericRequest({ - // details, - // signature: data.signature != null ? SignatureData.fromJson(data.signature) : undefined, - // version: new BN(data.version), - // type: new BN(data.type), - // flags: new BN(data.flags) - // }) - } toJson() { const details = []; if (this.details != null) { diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index 667f24c7..78cb319d 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -14,7 +14,7 @@ exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = { "hash160result": "4ba3719af89a7225998a3c62140160f4799822e1", "indexid": "xUq3NnSiUW7icegVTtnZeuYwiQDhdoykiY", "qualifiedname": { - "name": "vrsc::request", + "name": "vrsc::generic.request", "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, "vdxfid": "iPzvuz1ddBu3zUoTcD8QgX2QgkCgmXH698" diff --git a/src/__tests__/constants/fixtures.ts b/src/__tests__/constants/fixtures.ts index 4c92809a..b890401d 100644 --- a/src/__tests__/constants/fixtures.ts +++ b/src/__tests__/constants/fixtures.ts @@ -320,4 +320,6 @@ export const mmrDescriptorForRootProof = { } ] } -} \ No newline at end of file +} + +export const TEST_IDENTITY_ID = "i8jHXEEYEQ7KEoYe6eKXBib8cUBZ6vjWSd" \ No newline at end of file diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts new file mode 100644 index 00000000..d7335b97 --- /dev/null +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -0,0 +1,168 @@ +// __tests__/genericRequest.buffer.test.ts + +import { BN } from 'bn.js'; +import base64url from 'base64url'; +import { SignatureData } from '../../pbaas'; +import { + GeneralTypeOrdinalVdxfObject +} from '../../vdxf/classes/OrdinalVdxfObject'; +import { DEFAULT_VERUS_CHAINID, TESTNET_VERUS_CHAINID } from '../../constants/pbaas'; +import { WALLET_VDXF_KEY, GENERIC_REQUEST_DEEPLINK_VDXF_KEY, GenericRequest, fromBase58Check } from '../../'; +import { createHash } from 'crypto'; +import { VERUS_DATA_SIGNATURE_PREFIX } from '../../constants/vdxf'; +import { TEST_IDENTITY_ID } from '../constants/fixtures'; + +describe('GenericRequest — buffer / URI / QR operations', () => { + function roundTripBuffer(req: GenericRequest): GenericRequest { + const buf = req.toBuffer(); + const clone = new GenericRequest(); + clone.fromBuffer(buf, 0); + return clone; + } + + function rawDetailsSha256(req: GenericRequest): Buffer { + // replicate the same behavior as getRawDetailsSha256() + const buf = req['getDetailsBuffer'](); // call internal method + return createHash("sha256").update(buf).digest(); + } + + it('round trips with a single detail (no signature / createdAt)', () => { + const detail = new GeneralTypeOrdinalVdxfObject({ + data: Buffer.from('cafebabe', 'hex'), + vdxfKey: DEFAULT_VERUS_CHAINID + }); + const req = new GenericRequest({ details: [detail] }); + + expect(req.hasMultiDetails()).toBe(false); + expect(req.hasCreatedAt()).toBe(false); + expect(req.isSigned()).toBe(false); + + const round = roundTripBuffer(req); + expect(round.version.toString()).toEqual(req.version.toString()); + expect(round.flags.toString()).toEqual(req.flags.toString()); + expect(round.details.length).toBe(1); + const d2 = round.getDetails(0); + expect(d2).toBeInstanceOf(GeneralTypeOrdinalVdxfObject); + expect((d2 as GeneralTypeOrdinalVdxfObject).data).toEqual(detail.data); + expect((d2 as GeneralTypeOrdinalVdxfObject).vdxfKey).toEqual(detail.vdxfKey); + expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); + }); + + it('round trips with multiple details', () => { + const d1 = new GeneralTypeOrdinalVdxfObject({ + data: Buffer.from('aa', 'hex'), + vdxfKey: DEFAULT_VERUS_CHAINID + }); + const d2 = new GeneralTypeOrdinalVdxfObject({ + data: Buffer.from('bb', 'hex'), + vdxfKey: DEFAULT_VERUS_CHAINID + }); + const req = new GenericRequest({ details: [d1, d2] }); + expect(req.hasMultiDetails()).toBe(true); + + const round = roundTripBuffer(req); + expect(round.details.length).toBe(2); + expect((round.getDetails(0) as GeneralTypeOrdinalVdxfObject).data).toEqual(d1.data); + expect((round.getDetails(1) as GeneralTypeOrdinalVdxfObject).data).toEqual(d2.data); + expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); + }); + + it('round trips with createdAt and signature', () => { + const sig = new SignatureData({ + version: new BN(1), + system_ID: DEFAULT_VERUS_CHAINID, + hash_type: new BN(5), + signature_hash: Buffer.from('010203', 'hex'), + identity_ID: DEFAULT_VERUS_CHAINID, + sig_type: new BN(1), + signature_as_vch: Buffer.from('abcd', 'hex'), + vdxf_keys: [], + vdxf_key_names: [], + bound_hashes: [] + }); + const detail = new GeneralTypeOrdinalVdxfObject({ + data: Buffer.from('abcd', 'hex'), + vdxfKey: DEFAULT_VERUS_CHAINID + }); + const createdAt = new BN(9999); + const req = new GenericRequest({ + details: [detail], + signature: sig, + createdAt + }); + + expect(req.isSigned()).toBe(true); + expect(req.hasCreatedAt()).toBe(true); + + const round = roundTripBuffer(req); + expect(round.signature).toBeDefined(); + expect(round.createdAt?.toString()).toEqual(createdAt.toString()); + const d2 = round.getDetails(0); + expect((d2 as GeneralTypeOrdinalVdxfObject).data).toEqual(detail.data); + expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); + }); + + it('toString / fromQrString consistency', () => { + const detail = new GeneralTypeOrdinalVdxfObject({ + data: Buffer.from('feed', 'hex'), + vdxfKey: DEFAULT_VERUS_CHAINID + }); + const req = new GenericRequest({ details: [detail] }); + + const str = req.toString(); + const buf = base64url.toBuffer(str); + const parsed = new GenericRequest(); + parsed.fromBuffer(buf, 0); + expect(parsed.details[0].toJson()).toEqual(detail.toJson()); + }); + + it('deeplink URI round trip', () => { + const detail = new GeneralTypeOrdinalVdxfObject({ + data: Buffer.from('face', 'hex'), + vdxfKey: DEFAULT_VERUS_CHAINID + }); + const req = new GenericRequest({ details: [detail] }); + const uri = req.toWalletDeeplinkUri(); + + expect(uri).toContain(WALLET_VDXF_KEY.vdxfid.toLowerCase()); + expect(uri).toContain(`${GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); + + const parsed = GenericRequest.fromWalletDeeplinkUri(uri); + expect(parsed.version.toString()).toEqual(req.version.toString()); + expect(parsed.details[0].toJson()).toEqual(detail.toJson()); + expect(parsed.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); + }); + + it('fromQrString should parse correctly', () => { + const detail = new GeneralTypeOrdinalVdxfObject({ + data: Buffer.from('bead', 'hex'), + vdxfKey: DEFAULT_VERUS_CHAINID + }); + const req = new GenericRequest({ details: [detail] }); + const qr = req.toQrString(); + const parsed = GenericRequest.fromQrString(qr); + expect(parsed.details[0].toJson()).toEqual(detail.toJson()); + expect(parsed.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); + }); + + it('fromBuffer with empty buffer should throw', () => { + const empty = Buffer.alloc(0); + const req = new GenericRequest(); + expect(() => { + req.fromBuffer(empty, 0); + }).toThrow("Cannot create request from empty buffer"); + }); + + it("returns raw SHA256 when not signed", () => { + const detail = new GeneralTypeOrdinalVdxfObject({ + data: Buffer.from("abcd", "hex"), + vdxfKey: DEFAULT_VERUS_CHAINID + }); + const req = new GenericRequest({ details: [detail] }); + expect(req.isSigned()).toBe(false); + + const hash = req.getDetailsHash(123456); + const expected = rawDetailsSha256(req); + expect(hash).toEqual(expected); + }); +}); \ No newline at end of file diff --git a/src/vdxf/classes/OrdinalVdxfObject.ts b/src/vdxf/classes/OrdinalVdxfObject.ts index 12ffef64..4157fa85 100644 --- a/src/vdxf/classes/OrdinalVdxfObject.ts +++ b/src/vdxf/classes/OrdinalVdxfObject.ts @@ -173,9 +173,9 @@ export class OrdinalVdxfObject implements SerializableEntity { const Entity = getOrdinalVdxfObjectClassForType(type); const ord = new Entity(); - ord.fromBufferOptionalType(buffer, reader.offset, type); + reader.offset = ord.fromBufferOptionalType(buffer, reader.offset, type); - return { offset, obj: ord }; + return { offset: reader.offset, obj: ord }; } } diff --git a/src/vdxf/classes/request/GenericRequest.ts b/src/vdxf/classes/request/GenericRequest.ts index 557a3f2f..cdc2ca5e 100644 --- a/src/vdxf/classes/request/GenericRequest.ts +++ b/src/vdxf/classes/request/GenericRequest.ts @@ -10,28 +10,31 @@ import { SignatureData, SignatureJsonDataInterface } from "../../../pbaas"; import { OrdinalVdxfObject, OrdinalVdxfObjectJson } from "../OrdinalVdxfObject"; import varuint from "../../../utils/varuint"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; +import { createHash } from "crypto"; +import { fromBase58Check } from "../../../utils/address"; +import { VERUS_DATA_SIGNATURE_PREFIX } from "../../../constants/vdxf"; export interface GenericRequestInterface { version?: BigNumber; flags?: BigNumber; - createdat?: BigNumber; signature?: SignatureData; + createdAt?: BigNumber; details: Array; } export type GenericRequestJson = { version: string; flags?: string; - createdat?: BigNumber; - details: Array; signature?: SignatureJsonDataInterface; + createdAt?: BigNumber; + details: Array; } export class GenericRequest implements SerializableEntity { version: BigNumber; flags: BigNumber; - createdat?: BigNumber; signature?: SignatureData; + createdAt?: BigNumber; details: Array; static VERSION_CURRENT = new BN(1, 10) @@ -51,7 +54,7 @@ export class GenericRequest implements SerializableEntity { ) { this.signature = request.signature; this.details = request.details; - this.createdat = request.createdat; + this.createdAt = request.createdAt; if (request.flags) this.flags = request.flags; else this.flags = GenericRequest.BASE_FLAGS; @@ -74,67 +77,68 @@ export class GenericRequest implements SerializableEntity { return !!(this.flags.and(GenericRequest.FLAG_MULTI_DETAILS).toNumber()); } + hasCreatedAt() { + return !!(this.flags.and(GenericRequest.FLAG_HAS_CREATED_AT).toNumber()); + } + setSigned() { - this.flags = this.version.xor(GenericRequest.FLAG_SIGNED); + this.flags = this.flags.xor(GenericRequest.FLAG_SIGNED); } setHasMultiDetails() { - this.flags = this.version.xor(GenericRequest.FLAG_MULTI_DETAILS); + this.flags = this.flags.xor(GenericRequest.FLAG_MULTI_DETAILS); } setHasCreatedAt() { - this.flags = this.version.xor(GenericRequest.FLAG_HAS_CREATED_AT); + this.flags = this.flags.xor(GenericRequest.FLAG_HAS_CREATED_AT); } setFlags() { - if (this.createdat) this.setHasCreatedAt(); + if (this.createdAt) this.setHasCreatedAt(); if (this.details && this.details.length > 1) this.setHasMultiDetails(); if (this.signature) this.setSigned(); } - // private getRawDetailsSha256() { - // return createHash("sha256").update(this.details.toBuffer()).digest(); - // } + private getRawDetailsSha256() { + return createHash("sha256").update(this.getDetailsBuffer()).digest(); + } - // getDetailsHash(signedBlockheight: number, signatureVersion: number = 2) { - // if (this.isSigned()) { - // var heightBufferWriter = new bufferutils.BufferWriter( - // Buffer.allocUnsafe(4) - // ); - // heightBufferWriter.writeUInt32(signedBlockheight); + getDetailsHash(signedBlockheight: number) { + if (this.isSigned()) { + var heightBufferWriter = new bufferutils.BufferWriter( + Buffer.alloc(4) + ); + heightBufferWriter.writeUInt32(signedBlockheight); - // if (signatureVersion === 1) { - // return createHash("sha256") - // .update(VERUS_DATA_SIGNATURE_PREFIX) - // .update(fromBase58Check(this.system_id).hash) - // .update(heightBufferWriter.buffer) - // .update(fromBase58Check(this.signing_id).hash) - // .update(this.getRawDetailsSha256()) - // .digest(); - // } else { - // return createHash("sha256") - // .update(fromBase58Check(this.system_id).hash) - // .update(heightBufferWriter.buffer) - // .update(fromBase58Check(this.signing_id).hash) - // .update(VERUS_DATA_SIGNATURE_PREFIX) - // .update(this.getRawDetailsSha256()) - // .digest(); - // } - // } else return this.getRawDetailsSha256() - // } + if (this.signature.version.toNumber() === 1) { + return createHash("sha256") + .update(VERUS_DATA_SIGNATURE_PREFIX) + .update(fromBase58Check(this.signature!.system_ID).hash) + .update(heightBufferWriter.buffer) + .update(fromBase58Check(this.signature!.identity_ID).hash) + .update(this.getRawDetailsSha256()) + .digest(); + } else { + return createHash("sha256") + .update(fromBase58Check(this.signature!.system_ID).hash) + .update(heightBufferWriter.buffer) + .update(fromBase58Check(this.signature!.identity_ID).hash) + .update(VERUS_DATA_SIGNATURE_PREFIX) + .update(this.getRawDetailsSha256()) + .digest(); + } + } else return this.getRawDetailsSha256() + } getDetails(index = 0): OrdinalVdxfObject { return this.details[index]; } - getByteLength(): number { + private getDetailsBufferLength(): number { let length = 0; - length += varuint.encodingLength(this.version.toNumber()); - length += varuint.encodingLength(this.flags.toNumber()); - - if (this.isSigned()) { - length += this.signature!.getByteLength() + if (this.hasCreatedAt()) { + length += varuint.encodingLength(this.createdAt.toNumber()); } if (this.hasMultiDetails()) { @@ -150,19 +154,16 @@ export class GenericRequest implements SerializableEntity { return length; } - toBuffer(): Buffer { + private getDetailsBuffer(): Buffer { const writer = new bufferutils.BufferWriter( - Buffer.alloc(this.getByteLength()) + Buffer.alloc(this.getDetailsBufferLength()) ); - writer.writeCompactSize(this.version.toNumber()); - writer.writeCompactSize(this.flags.toNumber()); - - if (this.isSigned()) { - writer.writeSlice(this.signature!.toBuffer()); + if (this.hasCreatedAt()) { + writer.writeCompactSize(this.createdAt.toNumber()); } - if (this.hasMultiDetails()) { + if (this.hasMultiDetails()) { writer.writeCompactSize(this.details.length); for (const detail of this.details) { @@ -175,6 +176,38 @@ export class GenericRequest implements SerializableEntity { return writer.buffer; } + getByteLength(): number { + let length = 0; + + length += varuint.encodingLength(this.version.toNumber()); + length += varuint.encodingLength(this.flags.toNumber()); + + if (this.isSigned()) { + length += this.signature!.getByteLength(); + } + + length += this.getDetailsBufferLength(); + + return length; + } + + toBuffer(): Buffer { + const writer = new bufferutils.BufferWriter( + Buffer.alloc(this.getByteLength()) + ); + + writer.writeCompactSize(this.version.toNumber()); + writer.writeCompactSize(this.flags.toNumber()); + + if (this.isSigned()) { + writer.writeSlice(this.signature!.toBuffer()); + } + + writer.writeSlice(this.getDetailsBuffer()); + + return writer.buffer; + } + fromBuffer(buffer: Buffer, offset?: number): number { if (buffer.length == 0) throw new Error("Cannot create request from empty buffer"); @@ -189,6 +222,10 @@ export class GenericRequest implements SerializableEntity { this.signature = _sig; } + if (this.hasCreatedAt()) { + this.createdAt = new BN(reader.readCompactSize()); + } + if (this.hasMultiDetails()) { this.details = []; @@ -240,25 +277,6 @@ export class GenericRequest implements SerializableEntity { return inv; } - static fromJson(data: GenericRequestJson): GenericRequest { - return new GenericRequest(); - // let details: GenericRequestDetails; - - // if (type.eq(GenericRequest.TYPE_INVOICE)) { - // details = VerusPayInvoiceDetails.fromJson(data.details as VerusPayInvoiceDetailsJson); - // } else { - // details = DataDescriptor.fromJson(data.details as DataDescriptorJson); - // } - - // return new GenericRequest({ - // details, - // signature: data.signature != null ? SignatureData.fromJson(data.signature) : undefined, - // version: new BN(data.version), - // type: new BN(data.type), - // flags: new BN(data.flags) - // }) - } - toJson(): GenericRequestJson { const details = []; diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index 1dfbfd72..461c5edb 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -24,7 +24,7 @@ export const GENERIC_REQUEST_DEEPLINK_VDXF_KEY: VDXFKeyInterface = { "hash160result": "4ba3719af89a7225998a3c62140160f4799822e1", "indexid": "xUq3NnSiUW7icegVTtnZeuYwiQDhdoykiY", "qualifiedname": { - "name": "vrsc::request", + "name": "vrsc::generic.request", "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, "vdxfid": "iPzvuz1ddBu3zUoTcD8QgX2QgkCgmXH698" From 39f3a5ba12e3923a2e844693d6974c698134a767 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 10 Oct 2025 14:14:09 +0200 Subject: [PATCH 012/123] Refactor getDetailsHash to use data in this.signature --- dist/pbaas/SignatureData.d.ts | 2 +- dist/vdxf/classes/request/GenericRequest.js | 25 +++-------------- dist/vdxf/keys.js | 2 +- src/pbaas/SignatureData.ts | 2 +- src/vdxf/classes/request/GenericRequest.ts | 30 +++++---------------- src/vdxf/keys.ts | 2 +- 6 files changed, 13 insertions(+), 50 deletions(-) diff --git a/dist/pbaas/SignatureData.d.ts b/dist/pbaas/SignatureData.d.ts index d6439d58..efabefa7 100644 --- a/dist/pbaas/SignatureData.d.ts +++ b/dist/pbaas/SignatureData.d.ts @@ -65,5 +65,5 @@ export declare class SignatureData implements SerializableEntity { version: number; hash_type: number; height: number; - }): any; + }): Buffer; } diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js index 188fa0ad..301bc35b 100644 --- a/dist/vdxf/classes/request/GenericRequest.js +++ b/dist/vdxf/classes/request/GenericRequest.js @@ -9,8 +9,6 @@ const pbaas_1 = require("../../../pbaas"); const OrdinalVdxfObject_1 = require("../OrdinalVdxfObject"); const varuint_1 = require("../../../utils/varuint"); const crypto_1 = require("crypto"); -const address_1 = require("../../../utils/address"); -const vdxf_1 = require("../../../constants/vdxf"); class GenericRequest { constructor(request = { details: [], @@ -63,26 +61,9 @@ class GenericRequest { } getDetailsHash(signedBlockheight) { if (this.isSigned()) { - var heightBufferWriter = new bufferutils_1.default.BufferWriter(Buffer.alloc(4)); - heightBufferWriter.writeUInt32(signedBlockheight); - if (this.signature.version.toNumber() === 1) { - return (0, crypto_1.createHash)("sha256") - .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) - .update((0, address_1.fromBase58Check)(this.signature.system_ID).hash) - .update(heightBufferWriter.buffer) - .update((0, address_1.fromBase58Check)(this.signature.identity_ID).hash) - .update(this.getRawDetailsSha256()) - .digest(); - } - else { - return (0, crypto_1.createHash)("sha256") - .update((0, address_1.fromBase58Check)(this.signature.system_ID).hash) - .update(heightBufferWriter.buffer) - .update((0, address_1.fromBase58Check)(this.signature.identity_ID).hash) - .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) - .update(this.getRawDetailsSha256()) - .digest(); - } + const sigHash = this.getRawDetailsSha256(); + this.signature.signature_hash = sigHash; + return this.signature.getIdentityHash({ version: 2, hash_type: pbaas_1.EHashTypes.HASH_SHA256, height: signedBlockheight }); } else return this.getRawDetailsSha256(); diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index 78cb319d..fec382a0 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -14,7 +14,7 @@ exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = { "hash160result": "4ba3719af89a7225998a3c62140160f4799822e1", "indexid": "xUq3NnSiUW7icegVTtnZeuYwiQDhdoykiY", "qualifiedname": { - "name": "vrsc::generic.request", + "name": "vrsc::request.generic", "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, "vdxfid": "iPzvuz1ddBu3zUoTcD8QgX2QgkCgmXH698" diff --git a/src/pbaas/SignatureData.ts b/src/pbaas/SignatureData.ts index e3941d8c..17780ea9 100644 --- a/src/pbaas/SignatureData.ts +++ b/src/pbaas/SignatureData.ts @@ -241,7 +241,7 @@ export class SignatureData implements SerializableEntity { } // To fully implement, refer to VerusCoin/src/pbaas/crosschainrpc.cpp line 337, IdentitySignatureHash - getIdentityHash(sigObject: { version: number, hash_type: number, height: number }) { + getIdentityHash(sigObject: { version: number, hash_type: number, height: number }): Buffer { var heightBuffer = Buffer.allocUnsafe(4) heightBuffer.writeUInt32LE(sigObject.height); diff --git a/src/vdxf/classes/request/GenericRequest.ts b/src/vdxf/classes/request/GenericRequest.ts index cdc2ca5e..59eab5c3 100644 --- a/src/vdxf/classes/request/GenericRequest.ts +++ b/src/vdxf/classes/request/GenericRequest.ts @@ -6,7 +6,7 @@ import bufferutils from "../../../utils/bufferutils"; import base64url from "base64url"; import { BN } from 'bn.js'; import { BigNumber } from "../../../utils/types/BigNumber"; -import { SignatureData, SignatureJsonDataInterface } from "../../../pbaas"; +import { EHashTypes, SignatureData, SignatureJsonDataInterface } from "../../../pbaas"; import { OrdinalVdxfObject, OrdinalVdxfObjectJson } from "../OrdinalVdxfObject"; import varuint from "../../../utils/varuint"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; @@ -103,30 +103,12 @@ export class GenericRequest implements SerializableEntity { return createHash("sha256").update(this.getDetailsBuffer()).digest(); } - getDetailsHash(signedBlockheight: number) { + getDetailsHash(signedBlockheight: number): Buffer { if (this.isSigned()) { - var heightBufferWriter = new bufferutils.BufferWriter( - Buffer.alloc(4) - ); - heightBufferWriter.writeUInt32(signedBlockheight); - - if (this.signature.version.toNumber() === 1) { - return createHash("sha256") - .update(VERUS_DATA_SIGNATURE_PREFIX) - .update(fromBase58Check(this.signature!.system_ID).hash) - .update(heightBufferWriter.buffer) - .update(fromBase58Check(this.signature!.identity_ID).hash) - .update(this.getRawDetailsSha256()) - .digest(); - } else { - return createHash("sha256") - .update(fromBase58Check(this.signature!.system_ID).hash) - .update(heightBufferWriter.buffer) - .update(fromBase58Check(this.signature!.identity_ID).hash) - .update(VERUS_DATA_SIGNATURE_PREFIX) - .update(this.getRawDetailsSha256()) - .digest(); - } + const sigHash = this.getRawDetailsSha256(); + + this.signature.signature_hash = sigHash; + return this.signature.getIdentityHash({ version: 2, hash_type: EHashTypes.HASH_SHA256, height: signedBlockheight }); } else return this.getRawDetailsSha256() } diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index 461c5edb..5e8567c5 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -24,7 +24,7 @@ export const GENERIC_REQUEST_DEEPLINK_VDXF_KEY: VDXFKeyInterface = { "hash160result": "4ba3719af89a7225998a3c62140160f4799822e1", "indexid": "xUq3NnSiUW7icegVTtnZeuYwiQDhdoykiY", "qualifiedname": { - "name": "vrsc::generic.request", + "name": "vrsc::request.generic", "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, "vdxfid": "iPzvuz1ddBu3zUoTcD8QgX2QgkCgmXH698" From 07bf02f0dd303cc4958121eace30255b3edd76e2 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 10 Oct 2025 14:26:47 +0200 Subject: [PATCH 013/123] Fix casing on createdAt and vdxfKey for json objects in OrdinalVdxfObject and GenericRequest --- dist/vdxf/classes/OrdinalVdxfObject.d.ts | 2 +- dist/vdxf/classes/OrdinalVdxfObject.js | 4 ++-- dist/vdxf/classes/request/GenericRequest.d.ts | 2 +- dist/vdxf/classes/request/GenericRequest.js | 3 ++- src/vdxf/classes/OrdinalVdxfObject.ts | 6 +++--- src/vdxf/classes/request/GenericRequest.ts | 5 +++-- 6 files changed, 12 insertions(+), 10 deletions(-) diff --git a/dist/vdxf/classes/OrdinalVdxfObject.d.ts b/dist/vdxf/classes/OrdinalVdxfObject.d.ts index d7821b71..15be439f 100644 --- a/dist/vdxf/classes/OrdinalVdxfObject.d.ts +++ b/dist/vdxf/classes/OrdinalVdxfObject.d.ts @@ -11,7 +11,7 @@ export interface OrdinalVdxfObjectInterfaceTemplate { export type OrdinalVdxfObjectJsonTemplate = { version: string; type: string; - vdxfKey?: string; + vdxfkey?: string; data?: T; }; export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails; diff --git a/dist/vdxf/classes/OrdinalVdxfObject.js b/dist/vdxf/classes/OrdinalVdxfObject.js index 7f156b69..938ce9ba 100644 --- a/dist/vdxf/classes/OrdinalVdxfObject.js +++ b/dist/vdxf/classes/OrdinalVdxfObject.js @@ -100,7 +100,7 @@ class OrdinalVdxfObject { return { type: this.type ? this.type.toString() : undefined, version: this.version ? this.version.toString() : undefined, - vdxfKey: this.vdxfKey, + vdxfkey: this.vdxfKey, data: this.data ? this.isDefinedByVdxfKey() ? this.data.toString('hex') : this.data.toJson() : undefined }; } @@ -145,7 +145,7 @@ class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject { } static fromJson(details) { return new GeneralTypeOrdinalVdxfObject({ - vdxfKey: details.vdxfKey, + vdxfKey: details.vdxfkey, data: details.data ? Buffer.from(details.data, 'hex') : undefined }); } diff --git a/dist/vdxf/classes/request/GenericRequest.d.ts b/dist/vdxf/classes/request/GenericRequest.d.ts index 7d7715a2..c537dbe0 100644 --- a/dist/vdxf/classes/request/GenericRequest.d.ts +++ b/dist/vdxf/classes/request/GenericRequest.d.ts @@ -13,7 +13,7 @@ export type GenericRequestJson = { version: string; flags?: string; signature?: SignatureJsonDataInterface; - createdAt?: BigNumber; + createdat?: string; details: Array; }; export declare class GenericRequest implements SerializableEntity { diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js index 301bc35b..7c5e68e1 100644 --- a/dist/vdxf/classes/request/GenericRequest.js +++ b/dist/vdxf/classes/request/GenericRequest.js @@ -184,7 +184,8 @@ class GenericRequest { signature: this.isSigned() ? this.signature.toJson() : undefined, details: details, version: this.version.toString(), - flags: this.flags.toString() + flags: this.flags.toString(), + createdat: this.hasCreatedAt() ? this.createdAt.toString() : undefined }; } } diff --git a/src/vdxf/classes/OrdinalVdxfObject.ts b/src/vdxf/classes/OrdinalVdxfObject.ts index 4157fa85..b9f5767f 100644 --- a/src/vdxf/classes/OrdinalVdxfObject.ts +++ b/src/vdxf/classes/OrdinalVdxfObject.ts @@ -19,7 +19,7 @@ export interface OrdinalVdxfObjectInterfaceTemplate { export type OrdinalVdxfObjectJsonTemplate = { version: string; type: string; - vdxfKey?: string; + vdxfkey?: string; data?: T; } @@ -159,7 +159,7 @@ export class OrdinalVdxfObject implements SerializableEntity { return { type: this.type ? this.type.toString() : undefined, version: this.version ? this.version.toString() : undefined, - vdxfKey: this.vdxfKey, + vdxfkey: this.vdxfKey, data: this.data ? this.isDefinedByVdxfKey() ? this.data.toString('hex') : (this.data as OrdinalVdxfObjectReservedData).toJson() : undefined }; } @@ -210,7 +210,7 @@ export class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements S static fromJson(details: OrdinalVdxfObjectJson): GeneralTypeOrdinalVdxfObject { return new GeneralTypeOrdinalVdxfObject({ - vdxfKey: details.vdxfKey, + vdxfKey: details.vdxfkey, data: details.data ? Buffer.from(details.data as string, 'hex') : undefined }); } diff --git a/src/vdxf/classes/request/GenericRequest.ts b/src/vdxf/classes/request/GenericRequest.ts index 59eab5c3..fe39a951 100644 --- a/src/vdxf/classes/request/GenericRequest.ts +++ b/src/vdxf/classes/request/GenericRequest.ts @@ -26,7 +26,7 @@ export type GenericRequestJson = { version: string; flags?: string; signature?: SignatureJsonDataInterface; - createdAt?: BigNumber; + createdat?: string; details: Array; } @@ -272,7 +272,8 @@ export class GenericRequest implements SerializableEntity { signature: this.isSigned() ? this.signature.toJson() : undefined, details: details, version: this.version.toString(), - flags: this.flags.toString() + flags: this.flags.toString(), + createdat: this.hasCreatedAt() ? this.createdAt.toString() : undefined }; } } \ No newline at end of file From 65596b6831d70461947d09d80f0385cf243d0338 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 10 Oct 2025 16:50:56 +0200 Subject: [PATCH 014/123] Add testnet flag to generic request and change deeplink format --- dist/vdxf/classes/request/GenericRequest.d.ts | 3 +++ dist/vdxf/classes/request/GenericRequest.js | 9 ++++++++- src/vdxf/classes/request/GenericRequest.ts | 11 ++++++++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/dist/vdxf/classes/request/GenericRequest.d.ts b/dist/vdxf/classes/request/GenericRequest.d.ts index c537dbe0..1b34ae87 100644 --- a/dist/vdxf/classes/request/GenericRequest.d.ts +++ b/dist/vdxf/classes/request/GenericRequest.d.ts @@ -29,14 +29,17 @@ export declare class GenericRequest implements SerializableEntity { static FLAG_SIGNED: import("bn.js"); static FLAG_HAS_CREATED_AT: import("bn.js"); static FLAG_MULTI_DETAILS: import("bn.js"); + static FLAG_IS_TESTNET: import("bn.js"); constructor(request?: GenericRequestInterface); isValidVersion(): boolean; isSigned(): boolean; hasMultiDetails(): boolean; hasCreatedAt(): boolean; + isTestnet(): boolean; setSigned(): void; setHasMultiDetails(): void; setHasCreatedAt(): void; + setIsTestnet(): void; setFlags(): void; private getRawDetailsSha256; getDetailsHash(signedBlockheight: number): Buffer; diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js index 7c5e68e1..9e772afc 100644 --- a/dist/vdxf/classes/request/GenericRequest.js +++ b/dist/vdxf/classes/request/GenericRequest.js @@ -39,6 +39,9 @@ class GenericRequest { hasCreatedAt() { return !!(this.flags.and(GenericRequest.FLAG_HAS_CREATED_AT).toNumber()); } + isTestnet() { + return !!(this.flags.and(GenericRequest.FLAG_IS_TESTNET).toNumber()); + } setSigned() { this.flags = this.flags.xor(GenericRequest.FLAG_SIGNED); } @@ -48,6 +51,9 @@ class GenericRequest { setHasCreatedAt() { this.flags = this.flags.xor(GenericRequest.FLAG_HAS_CREATED_AT); } + setIsTestnet() { + this.flags = this.flags.xor(GenericRequest.FLAG_IS_TESTNET); + } setFlags() { if (this.createdAt) this.setHasCreatedAt(); @@ -157,7 +163,7 @@ class GenericRequest { return base64url_1.default.encode(this.toBuffer()); } toWalletDeeplinkUri() { - return `${__1.WALLET_VDXF_KEY.vdxfid.toLowerCase()}://x-callback-url/${__1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/${this.toString()}`; + return `${__1.WALLET_VDXF_KEY.vdxfid.toLowerCase()}:/${__1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/${this.toString()}`; } static fromWalletDeeplinkUri(uri) { const split = uri.split(`${__1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); @@ -197,3 +203,4 @@ GenericRequest.BASE_FLAGS = new bn_js_1.BN(0, 10); GenericRequest.FLAG_SIGNED = new bn_js_1.BN(1, 10); GenericRequest.FLAG_HAS_CREATED_AT = new bn_js_1.BN(2, 10); GenericRequest.FLAG_MULTI_DETAILS = new bn_js_1.BN(4, 10); +GenericRequest.FLAG_IS_TESTNET = new bn_js_1.BN(8, 10); diff --git a/src/vdxf/classes/request/GenericRequest.ts b/src/vdxf/classes/request/GenericRequest.ts index fe39a951..39647fc9 100644 --- a/src/vdxf/classes/request/GenericRequest.ts +++ b/src/vdxf/classes/request/GenericRequest.ts @@ -45,6 +45,7 @@ export class GenericRequest implements SerializableEntity { static FLAG_SIGNED = new BN(1, 10) static FLAG_HAS_CREATED_AT = new BN(2, 10) static FLAG_MULTI_DETAILS = new BN(4, 10) + static FLAG_IS_TESTNET = new BN(8, 10) constructor( request: GenericRequestInterface = { @@ -81,6 +82,10 @@ export class GenericRequest implements SerializableEntity { return !!(this.flags.and(GenericRequest.FLAG_HAS_CREATED_AT).toNumber()); } + isTestnet() { + return !!(this.flags.and(GenericRequest.FLAG_IS_TESTNET).toNumber()); + } + setSigned() { this.flags = this.flags.xor(GenericRequest.FLAG_SIGNED); } @@ -93,6 +98,10 @@ export class GenericRequest implements SerializableEntity { this.flags = this.flags.xor(GenericRequest.FLAG_HAS_CREATED_AT); } + setIsTestnet() { + this.flags = this.flags.xor(GenericRequest.FLAG_IS_TESTNET); + } + setFlags() { if (this.createdAt) this.setHasCreatedAt(); if (this.details && this.details.length > 1) this.setHasMultiDetails(); @@ -234,7 +243,7 @@ export class GenericRequest implements SerializableEntity { } toWalletDeeplinkUri(): string { - return `${WALLET_VDXF_KEY.vdxfid.toLowerCase()}://x-callback-url/${ + return `${WALLET_VDXF_KEY.vdxfid.toLowerCase()}:/${ GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid }/${this.toString()}`; } From 6ba9ec0e382fed50aabdc58506c24f133d52632f Mon Sep 17 00:00:00 2001 From: monkins Date: Thu, 16 Oct 2025 19:47:25 +0100 Subject: [PATCH 015/123] Updates to meeting, AppEncryptionRequestDetails and RequestUserData --- src/vdxf/classes/index.ts | 4 +- .../requestobjects/AppEncryptionRequest.ts | 217 ++++++++++++++++ .../requestobjects/EncryptionDetails.ts | 244 ------------------ .../requestobjects/InformationRequest.ts | 165 ------------ .../classes/requestobjects/UserDataRequest.ts | 200 ++++++++++++++ 5 files changed, 419 insertions(+), 411 deletions(-) create mode 100644 src/vdxf/classes/requestobjects/AppEncryptionRequest.ts delete mode 100644 src/vdxf/classes/requestobjects/EncryptionDetails.ts delete mode 100644 src/vdxf/classes/requestobjects/InformationRequest.ts create mode 100644 src/vdxf/classes/requestobjects/UserDataRequest.ts diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index a89799a6..4a3d9d9f 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -45,9 +45,9 @@ export { } from './provisioning/ProvisioningResult' export { Context } from './Context' export { DataCategory } from './PersonalProfile' -export * from './requestobjects/InformationRequest' +export * from './requestobjects/UserDataRequest' export * from './requestobjects/LoginRequestDetails' export * from './requestobjects/ProvisioningIdentity' -export * from './requestobjects/EncryptionDetails' +export * from './requestobjects/AppEncryptionRequest' export * from './attestation/AttestationDetails' export * from './endorsement/Endorsement' \ No newline at end of file diff --git a/src/vdxf/classes/requestobjects/AppEncryptionRequest.ts b/src/vdxf/classes/requestobjects/AppEncryptionRequest.ts new file mode 100644 index 00000000..a41d6b5f --- /dev/null +++ b/src/vdxf/classes/requestobjects/AppEncryptionRequest.ts @@ -0,0 +1,217 @@ + +/** + * AppEncryptionRequest - Class for handling application requests for encrypted derived seeds + * + * This class is used when an application is requesting an encrypted derived seed from the user's master seed, + * using specific parameters passed by the application. The request includes: + * - A target encryption key (zaddress format) + * - Derivation numbers for seed generation + * - Optional source and destination addresses for context + * + * The user's wallet can use these parameters to derive a specific seed from their master seed + * and encrypt it using the provided encryption key, ensuring the application receives only + * the specific derived seed it needs without exposing the master seed. + */ + +import { BigNumber } from '../../../utils/types/BigNumber'; +import { BN } from 'bn.js'; +import varint from '../../../utils/varint'; +import bufferutils from '../../../utils/bufferutils'; +const { BufferReader, BufferWriter } = bufferutils; +import { decodeSaplingAddress, toBech32 } from '../../../utils/sapling'; +import { TransferDestination, TransferDestinationJson } from '../../../pbaas/TransferDestination'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; + + +export interface AppEncryptionRequestDetailsInterface { + flags: BigNumber; + encryptToKey: string; + derivationNumber: BigNumber; + optionalDerivationNumber?: BigNumber; + fromAddress?: TransferDestination; + toAddress?: TransferDestination; +} + +export interface AppEncryptionRequestDetailsJson { + flags: number; + encryptToKey: string; + derivationnumber: number; + optionalderivationnumber?: number; + fromaddress?: TransferDestinationJson; + toaddress?: TransferDestinationJson; +} + + +export class AppEncryptionRequestDetails implements SerializableEntity { + + static VERSION_INVALID = new BN(0); + static FIRST_VERSION = new BN(1); + static LAST_VERSION = new BN(1); + static DEFAULT_VERSION = new BN(1); + + static HAS_FROM_ADDRESS = new BN(1); + static HAS_TO_ADDRESS = new BN(2); + static BOTH_ADDRESSES = new BN(4); + static HAS_OPTIONAL_SEED_DERIVATION = new BN(8); + + version: BigNumber = AppEncryptionRequestDetails.DEFAULT_VERSION; + flags: BigNumber; + encryptToKey: string; + derivationNumber: BigNumber; + optionalDerivationNumber?: BigNumber; + fromAddress?: TransferDestination; + toAddress?: TransferDestination; + + constructor(data?: AppEncryptionRequestDetailsInterface) { + this.flags = data?.flags || new BN(0); + this.encryptToKey = data?.encryptToKey || ''; + this.derivationNumber = data?.derivationNumber || new BN(0); + this.optionalDerivationNumber = data?.optionalDerivationNumber; + this.fromAddress = data?.fromAddress; + this.toAddress = data?.toAddress; + } + + setFlags(): void { + this.flags = new BN(0); + + if (this.optionalDerivationNumber != null) { + this.flags = this.flags.or(AppEncryptionRequestDetails.HAS_OPTIONAL_SEED_DERIVATION); + } + + if (this.fromAddress != null && this.toAddress != null) { + this.flags = this.flags.or(AppEncryptionRequestDetails.BOTH_ADDRESSES); + } else if (this.fromAddress != null) { + this.flags = this.flags.or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS); + } else if (this.toAddress != null) { + this.flags = this.flags.or(AppEncryptionRequestDetails.HAS_TO_ADDRESS); + } + } + + isValid(): boolean { + let valid = this.encryptToKey != null && this.encryptToKey.length > 0; + valid &&= this.derivationNumber != null && this.derivationNumber.gte(new BN(0)); + valid &&= this.optionalDerivationNumber == null || this.optionalDerivationNumber.gte(new BN(0)); + + return valid; + } + + getByteLength(): number { + let length = 0; + + length += varint.encodingLength(this.flags); + + // encryptToKey - zaddress encoding (43 bytes for sapling address data) + length += 43; // Sapling address decoded data (11 + 32 bytes) + + length += varint.encodingLength(this.derivationNumber); + + if(this.flags.and(AppEncryptionRequestDetails.HAS_OPTIONAL_SEED_DERIVATION).gt(new BN(0))) { + length += varint.encodingLength(this.optionalDerivationNumber); + } + + if (this.flags.and(AppEncryptionRequestDetails.HAS_FROM_ADDRESS).gt(new BN(0)) || + this.flags.and(AppEncryptionRequestDetails.BOTH_ADDRESSES).gt(new BN(0))) { + length += this.fromAddress!.getByteLength(); + } + + if (this.flags.and(AppEncryptionRequestDetails.HAS_TO_ADDRESS).gt(new BN(0)) || + this.flags.and(AppEncryptionRequestDetails.BOTH_ADDRESSES).gt(new BN(0))) { + length += this.toAddress!.getByteLength(); + } + + return length; + } toBuffer(): Buffer { + // Set flags before serialization + this.setFlags(); + + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + + // Write flags + writer.writeVarInt(this.flags); + + // Write encryptToKey as decoded sapling address data + const saplingData = decodeSaplingAddress(this.encryptToKey); + writer.writeSlice(Buffer.concat([saplingData.d, saplingData.pk_d])); + + // Write mandatory derivation number + writer.writeVarInt(this.derivationNumber); + + // Write optional derivation number if flag is set + if (this.flags.and(AppEncryptionRequestDetails.HAS_OPTIONAL_SEED_DERIVATION).gt(new BN(0))) { + writer.writeVarInt(this.optionalDerivationNumber); + } + + // Write addresses based on flags + if (this.flags.and(AppEncryptionRequestDetails.HAS_FROM_ADDRESS).gt(new BN(0)) || + this.flags.and(AppEncryptionRequestDetails.BOTH_ADDRESSES).gt(new BN(0))) { + writer.writeSlice(this.fromAddress!.toBuffer()); + } + + if (this.flags.and(AppEncryptionRequestDetails.HAS_TO_ADDRESS).gt(new BN(0)) || + this.flags.and(AppEncryptionRequestDetails.BOTH_ADDRESSES).gt(new BN(0))) { + writer.writeSlice(this.toAddress!.toBuffer()); + } + + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset?: number): number { + const reader = new BufferReader(buffer, offset); + + // Read flags + this.flags = reader.readVarInt(); + + // Read encryptToKey as 43-byte sapling data and encode as sapling address + const saplingData = reader.readSlice(43); + this.encryptToKey = toBech32('zs', saplingData); + + // Read mandatory derivation number + this.derivationNumber = reader.readVarInt(); + + // Read optional derivation number if flag is set + if (this.flags.and(AppEncryptionRequestDetails.HAS_OPTIONAL_SEED_DERIVATION).gt(new BN(0))) { + this.optionalDerivationNumber = reader.readVarInt(); + } + + // Read addresses based on flags + if (this.flags.and(AppEncryptionRequestDetails.HAS_FROM_ADDRESS).gt(new BN(0)) || + this.flags.and(AppEncryptionRequestDetails.BOTH_ADDRESSES).gt(new BN(0))) { + this.fromAddress = new TransferDestination(); + reader.offset = this.fromAddress.fromBuffer(buffer, reader.offset); + } + + if (this.flags.and(AppEncryptionRequestDetails.HAS_TO_ADDRESS).gt(new BN(0)) || + this.flags.and(AppEncryptionRequestDetails.BOTH_ADDRESSES).gt(new BN(0))) { + this.toAddress = new TransferDestination(); + reader.offset = this.toAddress.fromBuffer(buffer, reader.offset); + } + + return reader.offset; + } + + toJSON(): AppEncryptionRequestDetailsJson { + // Set flags before serialization + this.setFlags(); + + return { + flags: this.flags.toNumber(), + encryptToKey: this.encryptToKey, + derivationnumber: this.derivationNumber.toNumber(), + optionalderivationnumber: this.optionalDerivationNumber?.toNumber(), + fromaddress: this.fromAddress?.toJson(), + toaddress: this.toAddress?.toJson() + }; + } + + static fromJSON(json: AppEncryptionRequestDetailsJson): AppEncryptionRequestDetails { + return new AppEncryptionRequestDetails({ + flags: new BN(json.flags), + encryptToKey: json.encryptToKey, + derivationNumber: new BN(json.derivationnumber), + optionalDerivationNumber: json.optionalderivationnumber ? new BN(json.optionalderivationnumber) : undefined, + fromAddress: json.fromaddress ? TransferDestination.fromJson(json.fromaddress) : undefined, + toAddress: json.toaddress ? TransferDestination.fromJson(json.toaddress) : undefined + }); + } + +} diff --git a/src/vdxf/classes/requestobjects/EncryptionDetails.ts b/src/vdxf/classes/requestobjects/EncryptionDetails.ts deleted file mode 100644 index a5fed922..00000000 --- a/src/vdxf/classes/requestobjects/EncryptionDetails.ts +++ /dev/null @@ -1,244 +0,0 @@ -import { BigNumber } from '../../../utils/types/BigNumber'; -import { BN } from 'bn.js'; -import varint from '../../../utils/varint'; -import varuint from '../../../utils/varuint'; -import bufferutils from '../../../utils/bufferutils'; -const { BufferReader, BufferWriter } = bufferutils; -import { fromBase58Check, toBase58Check } from '../../../utils/address'; -import { I_ADDR_VERSION } from '../../../constants/vdxf'; -import { decodeSaplingAddress, toBech32 } from '../../../utils/sapling'; -import { TransferDestination, TransferDestinationJson } from '../../../pbaas/TransferDestination'; - -import { SerializableEntity } from '../../../utils/types/SerializableEntity'; - -export enum EncryptionType { - TYPE_PUBKEY = 1, - TYPE_ZADDRESS = 2 -} - -export enum SeedDerivationMethod { - FROM_ADDRESS_ONLY = 1, - TO_ADDRESS_ONLY = 2, - BOTH_ADDRESSES = 3, - NONE = 4 -} - -export interface EncryptionDetailsInterface { - type: EncryptionType; - key: string; - derivationNumber: BigNumber; - seedDerivationMethod?: BigNumber; - fromAddress?: TransferDestination; - toAddress?: TransferDestination; -} - -export interface EncryptionDetailsJson { - type: number; - key: string; - derivationnumber: number; - seedderivationmethod: number; - fromaddress?: TransferDestinationJson; - toaddress?: TransferDestinationJson; -} - - -export class EncryptionDetails implements SerializableEntity { - - static VERSION_INVALID = new BN(0); - static FIRST_VERSION = new BN(1); - static LAST_VERSION = new BN(1); - static DEFAULT_VERSION = new BN(1); - - type: EncryptionType; - key: string; - derivationNumber: BigNumber; - seedDerivationMethod: BigNumber; - fromAddress?: TransferDestination; - toAddress?: TransferDestination; - - constructor(data?: EncryptionDetailsInterface) { - this.type = data?.type || EncryptionType.TYPE_PUBKEY; - this.key = data?.key || ''; - this.derivationNumber = data?.derivationNumber || new BN(0); - this.fromAddress = data?.fromAddress; - this.toAddress = data?.toAddress; - this.seedDerivationMethod = data?.seedDerivationMethod; - } - - isValid(): boolean { - let valid = this.key != null && this.key.length > 0; - valid &&= this.type != null && (this.type === EncryptionType.TYPE_PUBKEY || this.type === EncryptionType.TYPE_ZADDRESS); - valid &&= this.derivationNumber != null && this.derivationNumber.gte(new BN(0)); - valid &&= this.isKeyFormatValid(); - - // Validate seed derivation method and required addresses - if (this.seedDerivationMethod) { - const method = this.seedDerivationMethod.toNumber(); - valid &&= method >= SeedDerivationMethod.FROM_ADDRESS_ONLY && method <= SeedDerivationMethod.NONE; - - // Check required addresses based on derivation method - if (method === SeedDerivationMethod.FROM_ADDRESS_ONLY || method === SeedDerivationMethod.BOTH_ADDRESSES) { - valid &&= this.fromAddress != null && this.fromAddress.isValid(); - } - if (method === SeedDerivationMethod.TO_ADDRESS_ONLY || method === SeedDerivationMethod.BOTH_ADDRESSES) { - valid &&= this.toAddress != null && this.toAddress.isValid(); - } - } - - return valid; - } - - getByteLength(): number { - let length = 0; - - length += varint.encodingLength(new BN(this.type)); - - // Key length - depends on type - if (this.type === EncryptionType.TYPE_PUBKEY) { - length += 33; // 33 byte pubkey - } else if (this.type === EncryptionType.TYPE_ZADDRESS) { - length += 43; // Sapling address decoded data (11 + 32 bytes) - } - - // Mandatory derivation number - length += varint.encodingLength(this.derivationNumber); - - length += varint.encodingLength(this.seedDerivationMethod); // seedDerivationMethod itself - - if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.FROM_ADDRESS_ONLY))) { - length += this.fromAddress!.getByteLength(); - } else if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.TO_ADDRESS_ONLY))) { - length += this.toAddress!.getByteLength(); - } else if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.BOTH_ADDRESSES))) { - length += this.fromAddress!.getByteLength() + this.toAddress!.getByteLength(); - } else if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.NONE))) { - // length += 0; No additional data for NONE - } - - return length; - } - - toBuffer(): Buffer { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - - // Write type - writer.writeVarInt(new BN(this.type)); - - // Write key - depends on type - if (this.type === EncryptionType.TYPE_PUBKEY) { - writer.writeSlice(Buffer.from(this.key, 'hex')); - } else if (this.type === EncryptionType.TYPE_ZADDRESS) { - // Write as decoded sapling address data - const saplingData = decodeSaplingAddress(this.key); - writer.writeSlice(Buffer.concat([saplingData.d, saplingData.pk_d])); - } else { - // Fallback to UTF8 encoding with length prefix - writer.writeVarSlice(Buffer.from(this.key, 'utf8')); - } - - // Write mandatory derivation number - writer.writeVarInt(this.derivationNumber); - - writer.writeVarInt(this.seedDerivationMethod); - - if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.FROM_ADDRESS_ONLY))) { - writer.writeSlice(this.fromAddress!.toBuffer()); - } else if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.TO_ADDRESS_ONLY))) { - writer.writeSlice(this.toAddress!.toBuffer()); - } else if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.BOTH_ADDRESSES))) { - writer.writeSlice(this.fromAddress!.toBuffer()); - writer.writeSlice(this.toAddress!.toBuffer()); - } else if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.NONE))) { - // No additional data for NONE - } - - - return writer.buffer; - } - - fromBuffer(buffer: Buffer, offset?: number): number { - const reader = new BufferReader(buffer, offset); - - // Read type - this.type = reader.readVarInt().toNumber() as EncryptionType; - - // Read key - depends on type - if (this.type === EncryptionType.TYPE_PUBKEY) { - this.key = reader.readSlice(33).toString('hex'); - } else if (this.type === EncryptionType.TYPE_ZADDRESS) { - // Read as 43-byte sapling data and encode as sapling address - const saplingData = reader.readSlice(43); - this.key = toBech32('zs', saplingData); - } else { - // Fallback to UTF8 decoding with length prefix - this.key = reader.readVarSlice().toString('utf8'); - } - - // Read mandatory derivation number - this.derivationNumber = reader.readVarInt(); - - this.seedDerivationMethod = reader.readVarInt(); - - if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.FROM_ADDRESS_ONLY))) { - this.fromAddress = new TransferDestination(); - reader.offset = this.fromAddress.fromBuffer(buffer, reader.offset); - } else if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.TO_ADDRESS_ONLY))) { - this.toAddress = new TransferDestination(); - reader.offset = this.toAddress.fromBuffer(buffer, reader.offset); - } else if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.BOTH_ADDRESSES))) { - this.fromAddress = new TransferDestination(); - reader.offset = this.fromAddress.fromBuffer(buffer, reader.offset); - this.toAddress = new TransferDestination(); - reader.offset = this.toAddress.fromBuffer(buffer, reader.offset); - } else if (this.seedDerivationMethod.eq(new BN(SeedDerivationMethod.NONE))) { - // No additional data for NONE - } - - return reader.offset; - } - - toJSON(): EncryptionDetailsJson { - return { - type: this.type, - key: this.key, - derivationnumber: this.derivationNumber.toNumber(), - fromaddress: this.fromAddress?.toJson(), - toaddress: this.toAddress?.toJson(), - seedderivationmethod: this.seedDerivationMethod?.toNumber() - }; - } - - static fromJSON(json: EncryptionDetailsJson): EncryptionDetails { - return new EncryptionDetails({ - type: json.type as EncryptionType, - key: json.key, - derivationNumber: new BN(json.derivationnumber), - fromAddress: json.fromaddress ? TransferDestination.fromJson(json.fromaddress) : undefined, - toAddress: json.toaddress ? TransferDestination.fromJson(json.toaddress) : undefined, - seedDerivationMethod: json.seedderivationmethod ? new BN(json.seedderivationmethod) : undefined - }); - } - /** - * Validate that the key format matches the encryption type - */ - isKeyFormatValid(): boolean { - try { - if (this.type === EncryptionType.TYPE_PUBKEY) { - // Should be a valid base58 address - const key = Buffer.from(this.key, 'hex'); - if (key.length !== 33) { - return false; - } - return true; - } else if (this.type === EncryptionType.TYPE_ZADDRESS) { - // Should be a valid sapling address - decodeSaplingAddress(this.key); - return true; - } - // For other types, any string is valid - return true; - } catch { - return false; - } - } -} diff --git a/src/vdxf/classes/requestobjects/InformationRequest.ts b/src/vdxf/classes/requestobjects/InformationRequest.ts deleted file mode 100644 index 1c20a09e..00000000 --- a/src/vdxf/classes/requestobjects/InformationRequest.ts +++ /dev/null @@ -1,165 +0,0 @@ -import { BigNumber } from '../../../utils/types/BigNumber'; -import { BN } from 'bn.js'; -import varint from '../../../utils/varint'; -import varuint from '../../../utils/varuint'; -import bufferutils from '../../../utils/bufferutils'; -const { BufferReader, BufferWriter } = bufferutils; - -import { SerializableEntity } from '../../../utils/types/SerializableEntity'; - - -export enum RequestedFormatFlags{ - FULL_DATA = 1, // Whole Credential - PARTIAL_DATA = 2, // Particular leaf + proof + signature - COLLECTION = 4 // Multiple FULL_DATA only -} - -export enum InformationType { - ATTESTATION = 1, - CLAIM = 2, - CREDENTIAL = 3 -} - -export interface RequestItemJson { - version: number; - format: RequestedFormatFlags; - type: InformationType; - id: {[key: string]: string}; // ID object of the specific information requested - signer: string; - requestedkeys?: string[]; -} - - -export class RequestItem implements SerializableEntity { - - static VERSION_INVALID = new BN(0); - static FIRST_VERSION = new BN(1); - static LAST_VERSION = new BN(1); - static DEFAULT_VERSION = new BN(1); - - static FULL_DATA = new BN(1); - static PARTIAL_DATA = new BN(2); - static COLLECTION = new BN(4); - - static ATTESTATION = new BN(1); - static CLAIM = new BN(2); - static CREDENTIAL = new BN(3); - - version: BigNumber; - format: BigNumber; - type: BigNumber; - id: {[key: string]: string}; - signer: string; - requestedKeys?: string[]; - - constructor(json?: RequestItem) { - this.version = json?.version || RequestItem.DEFAULT_VERSION; - this.format = json?.format || RequestItem.FULL_DATA; - this.type = json?.type || RequestItem.ATTESTATION; - this.id = json?.id || {}; - this.signer = json?.signer || ''; - this.requestedKeys = json?.requestedKeys || []; - } - - isFormatValid(): boolean { - // Allowed values: 1 (FULL), 2 (PARTIAL), 5 (FULL|COLLECTION), 6 (PARTIAL|COLLECTION) - const f = this.format; - return ( - f.eq(RequestItem.FULL_DATA) || - f.eq(RequestItem.PARTIAL_DATA) || - f.eq(RequestItem.COLLECTION) - ); - } - - isValid(): boolean { - let valid = this.version.gte(RequestItem.FIRST_VERSION) && this.version.lte(RequestItem.LAST_VERSION); - valid &&= this.isFormatValid(); - valid &&= (this.type.gte(RequestItem.ATTESTATION) && this.type.lte(RequestItem.CREDENTIAL)); - return valid; - } - - getByteLength(): number { - let length = 0; - length += varint.encodingLength(this.format); - length += varint.encodingLength(this.type); - - // Serialize id object as JSON string - const idJson = JSON.stringify(this.id); - length += varuint.encodingLength(Buffer.byteLength(idJson, 'utf8')); - length += Buffer.byteLength(idJson, 'utf8'); - - // Add signer length - length += varuint.encodingLength(Buffer.byteLength(this.signer, 'utf8')); - length += Buffer.byteLength(this.signer, 'utf8'); - - length += varuint.encodingLength(this.requestedKeys ? this.requestedKeys.length : 0); - if (this.requestedKeys) { - for (const key of this.requestedKeys) { - length += varuint.encodingLength(Buffer.byteLength(key, 'utf8')); - length += Buffer.byteLength(key, 'utf8'); - } - } - return length; - } - - toBuffer(): Buffer { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.format); - writer.writeVarInt(this.type); - - // Serialize id object as JSON string - const idJson = JSON.stringify(this.id); - writer.writeVarSlice(Buffer.from(idJson, 'utf8')); - - // Write signer - writer.writeVarSlice(Buffer.from(this.signer, 'utf8')); - - writer.writeCompactSize(this.requestedKeys ? this.requestedKeys.length : 0); - if (this.requestedKeys) { - for (const key of this.requestedKeys) { - writer.writeVarSlice(Buffer.from(key, 'utf8')); - } - } - return writer.buffer; - } - - fromBuffer(buffer: Buffer, offset?: number): number { - const reader = new BufferReader(buffer, offset); - this.format = reader.readVarInt(); - this.type = reader.readVarInt(); - - // Deserialize id object from JSON string - const idJsonString = reader.readVarSlice().toString('utf8'); - this.id = JSON.parse(idJsonString); - - // Read signer - this.signer = reader.readVarSlice().toString('utf8'); - - this.requestedKeys = []; - const requestedKeysLength = reader.readCompactSize(); - for (let i = 0; i < requestedKeysLength; i++) { - this.requestedKeys.push(reader.readVarSlice().toString('utf8')); - } - return reader.offset; - } - - toJSON(): RequestItemJson { - return { - version: this.version.toNumber(), - format: this.format.toNumber(), - type: this.type.toNumber(), - id: this.id, - signer: this.signer, - requestedkeys: this.requestedKeys - }; - } - - fromJSON(json: RequestItemJson): void { - this.version = new BN(json.version); - this.format = new BN(json.format); - this.type = new BN(json.type); - this.id = json.id; - this.signer = json.signer; - this.requestedKeys = json.requestedkeys || []; - } -} diff --git a/src/vdxf/classes/requestobjects/UserDataRequest.ts b/src/vdxf/classes/requestobjects/UserDataRequest.ts new file mode 100644 index 00000000..25728806 --- /dev/null +++ b/src/vdxf/classes/requestobjects/UserDataRequest.ts @@ -0,0 +1,200 @@ + +/** + * InformationRequest - Class for handling application requests for specific user information/data + * + * This class is used when an application is requesting specific information or data from the user's + * identity or data stores. The request includes: + * - Search data keys (VDXF keys) to identify the specific data being requested + * - Optional specific keys within the data object for partial data requests + * - Signer information to identify wanted signer of the data + * - Optional statement for boundhashes in the signature + * + * The user's wallet can use these parameters to locate the signed object information and present + * it to the user for approval before sharing with the requesting application. This enables + * selective disclosure of personal information while maintaining user privacy and control. + * + * Flags determine the type and scope of the request: + * - FULL_DATA vs PARTIAL_DATA: Whether complete objects or specific fields are requested + * - COLLECTION: Whether multiple data objects are being requested + * - HAS_STATEMENT: Whether the request includes an attestation statement + * - ATTESTATION/CLAIM/CREDENTIAL: Type of verification being requested + */ + +import { BigNumber } from '../../../utils/types/BigNumber'; +import { BN } from 'bn.js'; +import varint from '../../../utils/varint'; +import varuint from '../../../utils/varuint'; +import bufferutils from '../../../utils/bufferutils'; +const { BufferReader, BufferWriter } = bufferutils; + +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; + + +export interface RequestUserDataJson { + version: number; + flags: BigNumber; + searchDatakey: {[key: string]: string}; // ID object of the specific information requested + signer: string; + requestedkeys?: string[]; // Specific keys within the data object being requested + statement?: string; +} + + +export class RequestUserData implements SerializableEntity { + + static VERSION_INVALID = new BN(0); + static FIRST_VERSION = new BN(1); + static LAST_VERSION = new BN(1); + static DEFAULT_VERSION = new BN(1); + + static FULL_DATA = new BN(1); + static PARTIAL_DATA = new BN(2); + static COLLECTION = new BN(4); + static HAS_STATEMENT = new BN(8); + + static ATTESTATION = new BN(16); + static CLAIM = new BN(32); + static CREDENTIAL = new BN(64); + + version: BigNumber; + flags: BigNumber; + searchDataKey: {[key: string]: string}; + signer: string; + requestedKeys?: string[]; + statement?: string; + + constructor(data?: RequestUserData) { + this.version = data?.version || RequestUserData.DEFAULT_VERSION; + this.flags = data?.flags || new BN(0); + this.searchDataKey = data?.searchDataKey || {}; + this.signer = data?.signer || ''; + this.requestedKeys = data?.requestedKeys || []; + this.statement = data?.statement; + } + + setFlags(): void { + this.flags = new BN(0); + + if (this.statement && this.statement.length > 0) { + this.flags = this.flags.or(RequestUserData.HAS_STATEMENT); + } + } + + isValid(): boolean { + let valid = this.version.gte(RequestUserData.FIRST_VERSION) && this.version.lte(RequestUserData.LAST_VERSION); + valid &&= (this.flags.gte(new BN(0))); + valid &&= (Object.keys(this.searchDataKey).length > 0); + valid &&= (this.signer.length > 0); + return valid; + } + + getByteLength(): number { + let length = 0; + length += varint.encodingLength(this.flags); + + // Serialize searchDataKey object as JSON string + const searchDataKeyJson = Object.values(this.searchDataKey)[0]; + length += 20 // VDXF key length + length += varuint.encodingLength(Buffer.byteLength(searchDataKeyJson, 'utf8')); + length += Buffer.byteLength(searchDataKeyJson, 'utf8'); + + // Add signer length + length += varuint.encodingLength(Buffer.byteLength(this.signer, 'utf8')); + length += Buffer.byteLength(this.signer, 'utf8'); + + length += varuint.encodingLength(this.requestedKeys ? this.requestedKeys.length : 0); + if (this.requestedKeys) { + for (const key of this.requestedKeys) { + length += 20 // VDXF key length + } + } + + // Add statement length if present + if (this.statement && this.statement.length > 0) { + length += varuint.encodingLength(Buffer.byteLength(this.statement, 'utf8')); + length += Buffer.byteLength(this.statement, 'utf8'); + } + + return length; + } + + toBuffer(): Buffer { + // Set flags before serialization + this.setFlags(); + + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeVarInt(this.flags); + + // Write searchDataKey - write VDXF key and value + const firstKey = Object.keys(this.searchDataKey)[0]; + const firstValue = this.searchDataKey[firstKey]; + writer.writeSlice(Buffer.from(firstKey, 'hex')); // 20-byte VDXF key + writer.writeVarSlice(Buffer.from(firstValue, 'utf8')); + + // Write signer + writer.writeVarSlice(Buffer.from(this.signer, 'utf8')); + + writer.writeCompactSize(this.requestedKeys ? this.requestedKeys.length : 0); + if (this.requestedKeys) { + for (const key of this.requestedKeys) { + writer.writeSlice(Buffer.from(key, 'hex')); // 20-byte VDXF key + } + } + + // Write statement if flag is set + if (this.flags.and(RequestUserData.HAS_STATEMENT).gt(new BN(0))) { + writer.writeVarSlice(Buffer.from(this.statement, 'utf8')); + } + + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset?: number): number { + const reader = new BufferReader(buffer, offset); + this.flags = reader.readVarInt(); + + // Read searchDataKey - read VDXF key and value + const vdxfKey = reader.readSlice(20).toString('hex'); // 20-byte VDXF key + const value = reader.readVarSlice().toString('utf8'); + this.searchDataKey = { [vdxfKey]: value }; + + // Read signer + this.signer = reader.readVarSlice().toString('utf8'); + + this.requestedKeys = []; + const requestedKeysLength = reader.readCompactSize(); + for (let i = 0; i < requestedKeysLength; i++) { + this.requestedKeys.push(reader.readSlice(20).toString('hex')); // 20-byte VDXF key + } + + // Read statement if flag is set + if (this.flags.and(RequestUserData.HAS_STATEMENT).gt(new BN(0))) { + this.statement = reader.readVarSlice().toString('utf8'); + } + + return reader.offset; + } + + toJSON(): RequestUserDataJson { + // Set flags before serialization + this.setFlags(); + + return { + version: this.version.toNumber(), + flags: this.flags, + searchDatakey: this.searchDataKey, + signer: this.signer, + requestedkeys: this.requestedKeys, + statement: this.statement + }; + } + + fromJSON(json: RequestUserDataJson): void { + this.version = new BN(json.version); + this.flags = json.flags; + this.searchDataKey = json.searchDatakey; + this.signer = json.signer; + this.requestedKeys = json.requestedkeys || []; + this.statement = json.statement; + } +} From 169f20f2e62a0a95e480721f9c4ef951036be986 Mon Sep 17 00:00:00 2001 From: monkins Date: Sat, 18 Oct 2025 13:00:29 +0100 Subject: [PATCH 016/123] updates --- .../requestobjects/AppEncryptionRequest.ts | 180 +++++++++++------- .../requestobjects/CompactIdentityObject.ts | 86 +++++++++ .../requestobjects/LoginRequestDetails.ts | 6 +- .../requestobjects/ProvisioningIdentity.ts | 6 +- .../classes/requestobjects/UserDataRequest.ts | 53 +++--- 5 files changed, 234 insertions(+), 97 deletions(-) create mode 100644 src/vdxf/classes/requestobjects/CompactIdentityObject.ts diff --git a/src/vdxf/classes/requestobjects/AppEncryptionRequest.ts b/src/vdxf/classes/requestobjects/AppEncryptionRequest.ts index a41d6b5f..6e15a620 100644 --- a/src/vdxf/classes/requestobjects/AppEncryptionRequest.ts +++ b/src/vdxf/classes/requestobjects/AppEncryptionRequest.ts @@ -21,26 +21,38 @@ const { BufferReader, BufferWriter } = bufferutils; import { decodeSaplingAddress, toBech32 } from '../../../utils/sapling'; import { TransferDestination, TransferDestinationJson } from '../../../pbaas/TransferDestination'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; - - -export interface AppEncryptionRequestDetailsInterface { - flags: BigNumber; - encryptToKey: string; - derivationNumber: BigNumber; - optionalDerivationNumber?: BigNumber; - fromAddress?: TransferDestination; - toAddress?: TransferDestination; -} +import { escape } from 'querystring'; +import varuint from '../../../utils/varuint'; +import { I_ADDR_VERSION } from '../../../constants/vdxf'; +import { fromBase58Check, toBase58Check } from '../../..'; +import { CompactIdentityObject } from './CompactIdentityObject'; export interface AppEncryptionRequestDetailsJson { + version: number; flags: number; encryptToKey: string; derivationnumber: number; optionalderivationnumber?: number; - fromaddress?: TransferDestinationJson; - toaddress?: TransferDestinationJson; + fromaddress?: string; + toaddress?: string; } +/** + * Checks if a string is a valid hexadecimal address + * @param flags - Optional flags for the request + * @flag HAS_FROM_ADDRESS - Indicates if a from address is included + * @flag HAS_TO_ADDRESS - Indicates if a to address is included + * @flag HAS_OPTIONAL_SEED_DERIVATION - Indicates if an optional derivation number is included + * @flag ADDRESSES_NOT_FQN - Indicates if addresses are in hex format rather than FQN + * + * @param encryptToKey - The encryption key to use for encrypting to + * @param derivationNumber - The derivation number to validate + * @param optionalDerivationNumber - The optional derivation number to validate + * @param fromAddress - The from address to be included in the encryption either + * john.domain@ or [20-byte hex iaddress][20-byte hex system] + * @param toAddress - The to address to be included in the encryption either + * john.domain@ or [20-byte hex iaddress][20-byte hex system] + */ export class AppEncryptionRequestDetails implements SerializableEntity { @@ -51,18 +63,18 @@ export class AppEncryptionRequestDetails implements SerializableEntity { static HAS_FROM_ADDRESS = new BN(1); static HAS_TO_ADDRESS = new BN(2); - static BOTH_ADDRESSES = new BN(4); - static HAS_OPTIONAL_SEED_DERIVATION = new BN(8); + static HAS_OPTIONAL_SEED_DERIVATION = new BN(4); - version: BigNumber = AppEncryptionRequestDetails.DEFAULT_VERSION; + version: BigNumber; flags: BigNumber; encryptToKey: string; derivationNumber: BigNumber; optionalDerivationNumber?: BigNumber; - fromAddress?: TransferDestination; - toAddress?: TransferDestination; + fromAddress?: CompactIdentityObject; + toAddress?: CompactIdentityObject; - constructor(data?: AppEncryptionRequestDetailsInterface) { + constructor(data?: AppEncryptionRequestDetails) { + this.version = data?.version || AppEncryptionRequestDetails.DEFAULT_VERSION; this.flags = data?.flags || new BN(0); this.encryptToKey = data?.encryptToKey || ''; this.derivationNumber = data?.derivationNumber || new BN(0); @@ -73,16 +85,16 @@ export class AppEncryptionRequestDetails implements SerializableEntity { setFlags(): void { this.flags = new BN(0); - + if (this.optionalDerivationNumber != null) { this.flags = this.flags.or(AppEncryptionRequestDetails.HAS_OPTIONAL_SEED_DERIVATION); } - - if (this.fromAddress != null && this.toAddress != null) { - this.flags = this.flags.or(AppEncryptionRequestDetails.BOTH_ADDRESSES); - } else if (this.fromAddress != null) { + + if (this.fromAddress != null) { this.flags = this.flags.or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS); - } else if (this.toAddress != null) { + } + + if (this.toAddress != null) { this.flags = this.flags.or(AppEncryptionRequestDetails.HAS_TO_ADDRESS); } } @@ -95,6 +107,22 @@ export class AppEncryptionRequestDetails implements SerializableEntity { return valid; } + hasOptionalSeedDerivation(): boolean { + return this.flags.and(AppEncryptionRequestDetails.HAS_OPTIONAL_SEED_DERIVATION).gt(new BN(0)); + } + + hasFromAddress(): boolean { + return this.flags.and(AppEncryptionRequestDetails.HAS_FROM_ADDRESS).gt(new BN(0)); + } + + hasToAddress(): boolean { + return this.flags.and(AppEncryptionRequestDetails.HAS_TO_ADDRESS).gt(new BN(0)); + } + + isHexAddress(address: string): boolean { + return address.length === 40 && address.match(/^[0-9a-fA-F]+$/) !== null; + } + getByteLength(): number { let length = 0; @@ -102,28 +130,38 @@ export class AppEncryptionRequestDetails implements SerializableEntity { // encryptToKey - zaddress encoding (43 bytes for sapling address data) length += 43; // Sapling address decoded data (11 + 32 bytes) - + length += varint.encodingLength(this.derivationNumber); - if(this.flags.and(AppEncryptionRequestDetails.HAS_OPTIONAL_SEED_DERIVATION).gt(new BN(0))) { + if (this.hasOptionalSeedDerivation()) { length += varint.encodingLength(this.optionalDerivationNumber); } - if (this.flags.and(AppEncryptionRequestDetails.HAS_FROM_ADDRESS).gt(new BN(0)) || - this.flags.and(AppEncryptionRequestDetails.BOTH_ADDRESSES).gt(new BN(0))) { - length += this.fromAddress!.getByteLength(); - } - - if (this.flags.and(AppEncryptionRequestDetails.HAS_TO_ADDRESS).gt(new BN(0)) || - this.flags.and(AppEncryptionRequestDetails.BOTH_ADDRESSES).gt(new BN(0))) { - length += this.toAddress!.getByteLength(); + if (this.hasFromAddress()) { + if (this.isHexAddress(this.fromAddress!)) { + length += 20; + } else { + length += varuint.encodingLength(Buffer.from(this.fromAddress!, 'utf8').byteLength); + length += Buffer.from(this.fromAddress!, 'utf8').byteLength; + } + } + + if (this.hasToAddress()) { + if (this.isHexAddress(this.toAddress!)) { + length += 20; + } else { + length += varuint.encodingLength(Buffer.from(this.toAddress!, 'utf8').byteLength); + length += Buffer.from(this.toAddress!, 'utf8').byteLength; + } } return length; - } toBuffer(): Buffer { + } + + toBuffer(): Buffer { // Set flags before serialization this.setFlags(); - + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); // Write flags @@ -137,19 +175,25 @@ export class AppEncryptionRequestDetails implements SerializableEntity { writer.writeVarInt(this.derivationNumber); // Write optional derivation number if flag is set - if (this.flags.and(AppEncryptionRequestDetails.HAS_OPTIONAL_SEED_DERIVATION).gt(new BN(0))) { + if (this.hasOptionalSeedDerivation()) { writer.writeVarInt(this.optionalDerivationNumber); } // Write addresses based on flags - if (this.flags.and(AppEncryptionRequestDetails.HAS_FROM_ADDRESS).gt(new BN(0)) || - this.flags.and(AppEncryptionRequestDetails.BOTH_ADDRESSES).gt(new BN(0))) { - writer.writeSlice(this.fromAddress!.toBuffer()); + if (this.hasFromAddress()) { + if (this.isHexAddress(this.fromAddress!)) { + writer.writeSlice(Buffer.from(this.fromAddress!, 'hex')); + } else { + writer.writeVarSlice(Buffer.from(this.fromAddress!, 'utf8')); + } } - - if (this.flags.and(AppEncryptionRequestDetails.HAS_TO_ADDRESS).gt(new BN(0)) || - this.flags.and(AppEncryptionRequestDetails.BOTH_ADDRESSES).gt(new BN(0))) { - writer.writeSlice(this.toAddress!.toBuffer()); + + if (this.hasToAddress()) { + if (this.isHexAddress(this.toAddress!)) { + writer.writeSlice(Buffer.from(this.toAddress!, 'hex')); + } else { + writer.writeVarSlice(Buffer.from(this.toAddress!, 'utf8')); + } } return writer.buffer; @@ -169,21 +213,25 @@ export class AppEncryptionRequestDetails implements SerializableEntity { this.derivationNumber = reader.readVarInt(); // Read optional derivation number if flag is set - if (this.flags.and(AppEncryptionRequestDetails.HAS_OPTIONAL_SEED_DERIVATION).gt(new BN(0))) { + if (this.hasOptionalSeedDerivation()) { this.optionalDerivationNumber = reader.readVarInt(); } // Read addresses based on flags - if (this.flags.and(AppEncryptionRequestDetails.HAS_FROM_ADDRESS).gt(new BN(0)) || - this.flags.and(AppEncryptionRequestDetails.BOTH_ADDRESSES).gt(new BN(0))) { - this.fromAddress = new TransferDestination(); - reader.offset = this.fromAddress.fromBuffer(buffer, reader.offset); + if (this.hasFromAddress()) { + if (this.isHexAddress(this.fromAddress!)) { + this.fromAddress = reader.readSlice(20).toString('hex'); + } else { + this.fromAddress = reader.readVarSlice().toString('utf8'); + } } - - if (this.flags.and(AppEncryptionRequestDetails.HAS_TO_ADDRESS).gt(new BN(0)) || - this.flags.and(AppEncryptionRequestDetails.BOTH_ADDRESSES).gt(new BN(0))) { - this.toAddress = new TransferDestination(); - reader.offset = this.toAddress.fromBuffer(buffer, reader.offset); + + if (this.hasToAddress()) { + if (this.isHexAddress(this.toAddress!)) { + this.toAddress = reader.readSlice(20).toString('hex'); + } else { + this.toAddress = reader.readVarSlice().toString('utf8'); + } } return reader.offset; @@ -192,26 +240,28 @@ export class AppEncryptionRequestDetails implements SerializableEntity { toJSON(): AppEncryptionRequestDetailsJson { // Set flags before serialization this.setFlags(); - + return { + version: this.version.toNumber(), flags: this.flags.toNumber(), encryptToKey: this.encryptToKey, derivationnumber: this.derivationNumber.toNumber(), optionalderivationnumber: this.optionalDerivationNumber?.toNumber(), - fromaddress: this.fromAddress?.toJson(), - toaddress: this.toAddress?.toJson() + fromaddress: this.fromAddress, + toaddress: this.toAddress }; } static fromJSON(json: AppEncryptionRequestDetailsJson): AppEncryptionRequestDetails { - return new AppEncryptionRequestDetails({ - flags: new BN(json.flags), - encryptToKey: json.encryptToKey, - derivationNumber: new BN(json.derivationnumber), - optionalDerivationNumber: json.optionalderivationnumber ? new BN(json.optionalderivationnumber) : undefined, - fromAddress: json.fromaddress ? TransferDestination.fromJson(json.fromaddress) : undefined, - toAddress: json.toaddress ? TransferDestination.fromJson(json.toaddress) : undefined - }); + const instance = new AppEncryptionRequestDetails(); + instance.version = new BN(json.version); + instance.flags = new BN(json.flags); + instance.encryptToKey = json.encryptToKey; + instance.derivationNumber = new BN(json.derivationnumber); + instance.optionalDerivationNumber = json?.optionalderivationnumber ? new BN(json.optionalderivationnumber) : undefined; + instance.fromAddress = json?.fromaddress; + instance.toAddress = json?.toaddress; + return instance; } } diff --git a/src/vdxf/classes/requestobjects/CompactIdentityObject.ts b/src/vdxf/classes/requestobjects/CompactIdentityObject.ts new file mode 100644 index 00000000..2fa78696 --- /dev/null +++ b/src/vdxf/classes/requestobjects/CompactIdentityObject.ts @@ -0,0 +1,86 @@ + +/** + * CompactIdentityObject - Class representing a compact identity object with serialization and deserialization methods. + * + * This class allows for the representation of an identity either by its fully qualified name (FQN) + * or by its byte representation (identityId and systemId). The object can be serialized to and deserialized from a buffer. + * + + */ + +import bufferutils from '../../../utils/bufferutils'; +const { BufferReader, BufferWriter } = bufferutils; + +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; + +import varuint from '../../../utils/varuint'; + + + +export class CompactIdentityObject implements SerializableEntity { + + id: string; + + constructor(data?: CompactIdentityObject) { + this.id = data?.id || ''; + } + + isHexAddress(): boolean { + return this.id.length === 40 && this.id.match(/^[0-9a-fA-F]+$/) !== null; + } + + getByteLength(): number { + let length = 0; + + if (this.isHexAddress()) { + length += 40; // identityuint160 + systemuint160 + } else { + length += varuint.encodingLength(Buffer.from(this.id!, 'utf8').byteLength) + + Buffer.from(this.id!, 'utf8').byteLength; + } + + return length; + } + toBuffer(): Buffer { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + + if (this.isHexAddress()) { + writer.writeSlice(Buffer.from(this.id!)); + } + else { + writer.writeVarSlice(Buffer.from(this.id!, 'utf8')); + } + + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset?: number): number { + const reader = new BufferReader(buffer, offset); + if (buffer.length - reader.offset === 40) { + let id; + try { + id = reader.readSlice(40); + this.id = id.toString('hex'); + + } catch (e) { + this.id = id.toString('utf8'); + } + + } else { + this.id = reader.readVarSlice().toString('utf8'); + } + return reader.offset; + } + + toJson(): any { + return { + id: this.id, + }; + } + static fromJson(json: any): CompactIdentityObject { + const instance = new CompactIdentityObject(); + instance.id = json.id; + return instance; + } +} + diff --git a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts index 269cde2e..7d3b5af6 100644 --- a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts @@ -49,14 +49,14 @@ export interface LoginRequestDetailsJson { } export class LoginRequestDetails implements SerializableEntity { - version: BigNumber = LoginRequestDetails.VERSION_CURRENT; + version: BigNumber = LoginRequestDetails.DEFAULT_VERSION; challengeId: string; flags?: BigNumber; permissions?: Array; callbackUri?: CallbackUri; // Version - static VERSION_CURRENT = new BN(1, 10) + static DEFAULT_VERSION = new BN(1, 10) static VERSION_FIRSTVALID = new BN(1, 10) static VERSION_LASTVALID = new BN(1, 10) @@ -71,7 +71,7 @@ export class LoginRequestDetails implements SerializableEntity { this.flags = challenge?.flags || new BN(0, 10); this.permissions = challenge?.permissions || null; this.callbackUri = challenge?.callbackUri || null; - this.version = LoginRequestDetails.VERSION_CURRENT; + this.version = LoginRequestDetails.DEFAULT_VERSION; } getByteLength(): number { diff --git a/src/vdxf/classes/requestobjects/ProvisioningIdentity.ts b/src/vdxf/classes/requestobjects/ProvisioningIdentity.ts index 9fd41788..14689307 100644 --- a/src/vdxf/classes/requestobjects/ProvisioningIdentity.ts +++ b/src/vdxf/classes/requestobjects/ProvisioningIdentity.ts @@ -20,7 +20,7 @@ export interface ProvisionIdentityInterface { export class ProvisionIdentity implements SerializableEntity { - version: BigNumber = ProvisionIdentity.VERSION_CURRENT; + version: BigNumber = ProvisionIdentity.DEFAULT_VERSION; flags: BigNumber; systemId?: string; parentId: string; @@ -29,7 +29,7 @@ export class ProvisionIdentity implements SerializableEntity { webhook?: string; // Version - static VERSION_CURRENT = new BN(1, 10) + static DEFAULT_VERSION = new BN(1, 10) static VERSION_FIRSTVALID = new BN(1, 10) static VERSION_LASTVALID = new BN(1, 10) @@ -43,7 +43,7 @@ export class ProvisionIdentity implements SerializableEntity { provisionIdentity: ProvisionIdentityInterface = { flags: new BN(0, 10)} ) { - this.version = provisionIdentity.version || ProvisionIdentity.VERSION_CURRENT; + this.version = provisionIdentity.version || ProvisionIdentity.DEFAULT_VERSION; this.flags = provisionIdentity.flags; this.systemId = provisionIdentity?.systemId; this.parentId = provisionIdentity?.parentId; diff --git a/src/vdxf/classes/requestobjects/UserDataRequest.ts b/src/vdxf/classes/requestobjects/UserDataRequest.ts index 25728806..747ed8b6 100644 --- a/src/vdxf/classes/requestobjects/UserDataRequest.ts +++ b/src/vdxf/classes/requestobjects/UserDataRequest.ts @@ -26,20 +26,16 @@ import varint from '../../../utils/varint'; import varuint from '../../../utils/varuint'; import bufferutils from '../../../utils/bufferutils'; const { BufferReader, BufferWriter } = bufferutils; - import { SerializableEntity } from '../../../utils/types/SerializableEntity'; - export interface RequestUserDataJson { version: number; - flags: BigNumber; + flags: number; searchDatakey: {[key: string]: string}; // ID object of the specific information requested signer: string; requestedkeys?: string[]; // Specific keys within the data object being requested - statement?: string; } - export class RequestUserData implements SerializableEntity { static VERSION_INVALID = new BN(0); @@ -50,41 +46,52 @@ export class RequestUserData implements SerializableEntity { static FULL_DATA = new BN(1); static PARTIAL_DATA = new BN(2); static COLLECTION = new BN(4); - static HAS_STATEMENT = new BN(8); - static ATTESTATION = new BN(16); - static CLAIM = new BN(32); - static CREDENTIAL = new BN(64); + static ATTESTATION = new BN(8); + static CLAIM = new BN(16); + static CREDENTIAL = new BN(32); version: BigNumber; flags: BigNumber; searchDataKey: {[key: string]: string}; signer: string; requestedKeys?: string[]; - statement?: string; constructor(data?: RequestUserData) { this.version = data?.version || RequestUserData.DEFAULT_VERSION; this.flags = data?.flags || new BN(0); this.searchDataKey = data?.searchDataKey || {}; this.signer = data?.signer || ''; - this.requestedKeys = data?.requestedKeys || []; - this.statement = data?.statement; + this.requestedKeys = data?.requestedKeys; + } setFlags(): void { this.flags = new BN(0); - - if (this.statement && this.statement.length > 0) { - this.flags = this.flags.or(RequestUserData.HAS_STATEMENT); - } + + } + + versionIsValid(): boolean { + return this.version.gte(RequestUserData.FIRST_VERSION) && this.version.lte(RequestUserData.LAST_VERSION); + } + + hasFlags(): boolean { + return this.flags.gte(new BN(0)); + } + + hasSearchDataKey(): boolean { + return Object.keys(this.searchDataKey).length > 0; + } + + hasSigner(): boolean { + return this.signer.length > 0; } isValid(): boolean { - let valid = this.version.gte(RequestUserData.FIRST_VERSION) && this.version.lte(RequestUserData.LAST_VERSION); - valid &&= (this.flags.gte(new BN(0))); - valid &&= (Object.keys(this.searchDataKey).length > 0); - valid &&= (this.signer.length > 0); + let valid = this.versionIsValid(); + valid &&= (this.hasFlags()); + valid &&= (this.hasSearchDataKey()); + valid &&= (this.hasSigner()); return valid; } @@ -109,12 +116,6 @@ export class RequestUserData implements SerializableEntity { } } - // Add statement length if present - if (this.statement && this.statement.length > 0) { - length += varuint.encodingLength(Buffer.byteLength(this.statement, 'utf8')); - length += Buffer.byteLength(this.statement, 'utf8'); - } - return length; } From 60278818894174c97c4eb866ea4917f85339f544 Mon Sep 17 00:00:00 2001 From: monkins Date: Mon, 20 Oct 2025 11:05:59 +0100 Subject: [PATCH 017/123] Updates to meeting 2 --- src/vdxf/classes/CompactIdAddressObject.ts | 146 ++++++++++ src/vdxf/classes/index.ts | 6 +- ...uest.ts => AppEncryptionRequestDetails.ts} | 134 ++++----- .../requestobjects/CompactIdentityObject.ts | 86 ------ .../requestobjects/LoginRequestDetails.ts | 265 ++++++++++++------ .../ProvisionIdentityDetails.ts | 198 +++++++++++++ .../requestobjects/ProvisioningIdentity.ts | 219 --------------- .../classes/requestobjects/RequestUserData.ts | 259 +++++++++++++++++ .../requestobjects/SignDataRequestDetails.ts | 0 .../classes/requestobjects/UserDataRequest.ts | 201 ------------- 10 files changed, 838 insertions(+), 676 deletions(-) create mode 100644 src/vdxf/classes/CompactIdAddressObject.ts rename src/vdxf/classes/requestobjects/{AppEncryptionRequest.ts => AppEncryptionRequestDetails.ts} (57%) delete mode 100644 src/vdxf/classes/requestobjects/CompactIdentityObject.ts create mode 100644 src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts delete mode 100644 src/vdxf/classes/requestobjects/ProvisioningIdentity.ts create mode 100644 src/vdxf/classes/requestobjects/RequestUserData.ts create mode 100644 src/vdxf/classes/requestobjects/SignDataRequestDetails.ts delete mode 100644 src/vdxf/classes/requestobjects/UserDataRequest.ts diff --git a/src/vdxf/classes/CompactIdAddressObject.ts b/src/vdxf/classes/CompactIdAddressObject.ts new file mode 100644 index 00000000..636aa181 --- /dev/null +++ b/src/vdxf/classes/CompactIdAddressObject.ts @@ -0,0 +1,146 @@ + +/** + * CompactIdentityObject - Class representing an id in the smallest possible format + * + * This class is used to represent an identity or address in a compact format, allowing for efficient + * storage and transmission. The compact id can be represented either as a fully qualified name (FQN) + * or as an identity address (iaddress). The class includes methods for serialization, deserialization, + * and validation of the compact id object. + * + */ + +import { BN } from 'bn.js'; +import bufferutils from '../../utils/bufferutils'; +import { BigNumber } from '../../utils/types/BigNumber'; +const { BufferReader, BufferWriter } = bufferutils; +import { SerializableEntity } from '../../utils/types/SerializableEntity'; +import varuint from '../../utils/varuint'; +import { fromBase58Check, toBase58Check, toIAddress } from "../../utils/address"; +import varint from '../../utils/varint'; +import { I_ADDR_VERSION } from '../../constants/vdxf'; + +export interface CompactIdAddressObjectJson { + version: number; + flags: number; + address: string; + rootsystemname: string; +} + +export class CompactIdAddressObject implements SerializableEntity { + + static VERSION_INVALID = new BN(0); + static FIRST_VERSION = new BN(1); + static LAST_VERSION = new BN(1); + static DEFAULT_VERSION = new BN(1); + + static IS_FQN = new BN(1); + static IS_IDENTITYID = new BN(2); + + version: BigNumber; + flags: BigNumber; + address: string; + rootSystemName: string; + + constructor(data?: CompactIdAddressObject) { + this.version = data?.version || new BN(CompactIdAddressObject.DEFAULT_VERSION); + this.flags = data?.flags || new BN(0); + this.address = data?.address || ''; + this.rootSystemName = data?.rootSystemName || 'VRSC'; + } + + isFQN(): boolean { + return (this.flags.and(CompactIdAddressObject.IS_FQN).eq(CompactIdAddressObject.IS_FQN)); + } + + isIaddress(): boolean { + return (this.flags.and(CompactIdAddressObject.IS_IDENTITYID).eq(CompactIdAddressObject.IS_IDENTITYID)); + } + + isValid(): boolean { + return this.address != null && this.address.length > 0 && (this.isFQN() || this.isIaddress()); + } + + setAddressTransferType(): void { + + if(!this.isValid()){ + throw new Error('CompactIdAddressObject: invalid address or flags not set'); + } + + if(this.isIaddress()) { + return; + } + + if(this.isFQN()) { + if(this.address.length > 20) { + this.flags = CompactIdAddressObject.IS_IDENTITYID; + this.address = toIAddress(this.address, this.rootSystemName); + } else { + this.flags = CompactIdAddressObject.IS_FQN; + } + } + } + + getByteLength(): number { + + this.setAddressTransferType(); + let length = 0; + + length += varint.encodingLength(this.flags); + + if (this.isIaddress()) { + length += 20; // identityuint160 + } else { + length += varuint.encodingLength(Buffer.from(this.address, 'utf8').byteLength) + + Buffer.from(this.address, 'utf8').byteLength; + } + + return length; + } + toBuffer(): Buffer { + + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + + writer.writeVarInt(this.flags); + + if (this.isIaddress()) { + writer.writeSlice(fromBase58Check(this.address).hash); + } + else { + writer.writeVarSlice(Buffer.from(this.address, 'utf8')); + } + + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset?: number): number { + const reader = new BufferReader(buffer, offset); + + this.flags = reader.readVarInt(); + + if (this.isIaddress()) { + this.address = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); + } else { + this.address = reader.readVarSlice().toString('utf8'); + } + return reader.offset; + } + + toJson(): any { + this.setAddressTransferType(); + return { + version: this.version.toNumber(), + flags: this.flags.toNumber(), + address: this.address, + rootsystemname: this.rootSystemName, + }; + } + static fromJson(json: any): CompactIdAddressObject { + const instance = new CompactIdAddressObject(); + instance.version = new BN(json.version); + instance.flags = new BN(json.flags); + instance.address = json.address; + instance.rootSystemName = json.rootsystemname; + return instance; + } +} + diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index 4a3d9d9f..b7e507ad 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -45,9 +45,9 @@ export { } from './provisioning/ProvisioningResult' export { Context } from './Context' export { DataCategory } from './PersonalProfile' -export * from './requestobjects/UserDataRequest' +export * from './requestobjects/RequestUserData' export * from './requestobjects/LoginRequestDetails' -export * from './requestobjects/ProvisioningIdentity' -export * from './requestobjects/AppEncryptionRequest' +export * from './requestobjects/ProvisionIdentityDetails' +export * from './requestobjects/AppEncryptionRequestDetails' export * from './attestation/AttestationDetails' export * from './endorsement/Endorsement' \ No newline at end of file diff --git a/src/vdxf/classes/requestobjects/AppEncryptionRequest.ts b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts similarity index 57% rename from src/vdxf/classes/requestobjects/AppEncryptionRequest.ts rename to src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts index 6e15a620..fe3a2c6f 100644 --- a/src/vdxf/classes/requestobjects/AppEncryptionRequest.ts +++ b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts @@ -1,6 +1,6 @@ /** - * AppEncryptionRequest - Class for handling application requests for encrypted derived seeds + * AppEncryptionRequestDetails - Class for handling application requests for encrypted derived seeds * * This class is used when an application is requesting an encrypted derived seed from the user's master seed, * using specific parameters passed by the application. The request includes: @@ -19,20 +19,15 @@ import varint from '../../../utils/varint'; import bufferutils from '../../../utils/bufferutils'; const { BufferReader, BufferWriter } = bufferutils; import { decodeSaplingAddress, toBech32 } from '../../../utils/sapling'; -import { TransferDestination, TransferDestinationJson } from '../../../pbaas/TransferDestination'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { escape } from 'querystring'; -import varuint from '../../../utils/varuint'; -import { I_ADDR_VERSION } from '../../../constants/vdxf'; -import { fromBase58Check, toBase58Check } from '../../..'; -import { CompactIdentityObject } from './CompactIdentityObject'; +import { CompactIdAddressObject } from '../CompactIdAddressObject'; export interface AppEncryptionRequestDetailsJson { version: number; flags: number; - encryptToKey: string; + encrypttozaddress: string; derivationnumber: number; - optionalderivationnumber?: number; + secondaryderivationnumber?: number; fromaddress?: string; toaddress?: string; } @@ -45,9 +40,9 @@ export interface AppEncryptionRequestDetailsJson { * @flag HAS_OPTIONAL_SEED_DERIVATION - Indicates if an optional derivation number is included * @flag ADDRESSES_NOT_FQN - Indicates if addresses are in hex format rather than FQN * - * @param encryptToKey - The encryption key to use for encrypting to + * @param encryptToZAddress - The encryption key to use for encrypting to * @param derivationNumber - The derivation number to validate - * @param optionalDerivationNumber - The optional derivation number to validate + * @param secondaryDerivationNumber - The optional derivation number to validate * @param fromAddress - The from address to be included in the encryption either * john.domain@ or [20-byte hex iaddress][20-byte hex system] * @param toAddress - The to address to be included in the encryption either @@ -63,22 +58,22 @@ export class AppEncryptionRequestDetails implements SerializableEntity { static HAS_FROM_ADDRESS = new BN(1); static HAS_TO_ADDRESS = new BN(2); - static HAS_OPTIONAL_SEED_DERIVATION = new BN(4); + static HAS_SECONDARY_SEED_DERIVATION_NUMBER = new BN(4); version: BigNumber; flags: BigNumber; - encryptToKey: string; + encryptToZAddress: string; derivationNumber: BigNumber; - optionalDerivationNumber?: BigNumber; - fromAddress?: CompactIdentityObject; - toAddress?: CompactIdentityObject; + secondaryDerivationNumber?: BigNumber; + fromAddress?: CompactIdAddressObject; + toAddress?: CompactIdAddressObject; constructor(data?: AppEncryptionRequestDetails) { this.version = data?.version || AppEncryptionRequestDetails.DEFAULT_VERSION; this.flags = data?.flags || new BN(0); - this.encryptToKey = data?.encryptToKey || ''; + this.encryptToZAddress = data?.encryptToZAddress || ''; this.derivationNumber = data?.derivationNumber || new BN(0); - this.optionalDerivationNumber = data?.optionalDerivationNumber; + this.secondaryDerivationNumber = data?.secondaryDerivationNumber; this.fromAddress = data?.fromAddress; this.toAddress = data?.toAddress; } @@ -86,8 +81,8 @@ export class AppEncryptionRequestDetails implements SerializableEntity { setFlags(): void { this.flags = new BN(0); - if (this.optionalDerivationNumber != null) { - this.flags = this.flags.or(AppEncryptionRequestDetails.HAS_OPTIONAL_SEED_DERIVATION); + if (this.secondaryDerivationNumber != null) { + this.flags = this.flags.or(AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER); } if (this.fromAddress != null) { @@ -100,15 +95,15 @@ export class AppEncryptionRequestDetails implements SerializableEntity { } isValid(): boolean { - let valid = this.encryptToKey != null && this.encryptToKey.length > 0; + let valid = this.encryptToZAddress != null && this.encryptToZAddress.length > 0; valid &&= this.derivationNumber != null && this.derivationNumber.gte(new BN(0)); - valid &&= this.optionalDerivationNumber == null || this.optionalDerivationNumber.gte(new BN(0)); + valid &&= this.secondaryDerivationNumber == null || this.secondaryDerivationNumber.gte(new BN(0)); return valid; } - hasOptionalSeedDerivation(): boolean { - return this.flags.and(AppEncryptionRequestDetails.HAS_OPTIONAL_SEED_DERIVATION).gt(new BN(0)); + hasSecondarySeedDerivation(): boolean { + return this.flags.and(AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER).gt(new BN(0)); } hasFromAddress(): boolean { @@ -119,10 +114,6 @@ export class AppEncryptionRequestDetails implements SerializableEntity { return this.flags.and(AppEncryptionRequestDetails.HAS_TO_ADDRESS).gt(new BN(0)); } - isHexAddress(address: string): boolean { - return address.length === 40 && address.match(/^[0-9a-fA-F]+$/) !== null; - } - getByteLength(): number { let length = 0; @@ -133,26 +124,16 @@ export class AppEncryptionRequestDetails implements SerializableEntity { length += varint.encodingLength(this.derivationNumber); - if (this.hasOptionalSeedDerivation()) { - length += varint.encodingLength(this.optionalDerivationNumber); + if (this.hasSecondarySeedDerivation()) { + length += varint.encodingLength(this.secondaryDerivationNumber); } if (this.hasFromAddress()) { - if (this.isHexAddress(this.fromAddress!)) { - length += 20; - } else { - length += varuint.encodingLength(Buffer.from(this.fromAddress!, 'utf8').byteLength); - length += Buffer.from(this.fromAddress!, 'utf8').byteLength; - } + length += this.fromAddress.getByteLength(); } if (this.hasToAddress()) { - if (this.isHexAddress(this.toAddress!)) { - length += 20; - } else { - length += varuint.encodingLength(Buffer.from(this.toAddress!, 'utf8').byteLength); - length += Buffer.from(this.toAddress!, 'utf8').byteLength; - } + length += this.toAddress.getByteLength(); } return length; @@ -167,33 +148,23 @@ export class AppEncryptionRequestDetails implements SerializableEntity { // Write flags writer.writeVarInt(this.flags); - // Write encryptToKey as decoded sapling address data - const saplingData = decodeSaplingAddress(this.encryptToKey); + // Write encryptToAddress as decoded sapling address data + const saplingData = decodeSaplingAddress(this.encryptToZAddress); writer.writeSlice(Buffer.concat([saplingData.d, saplingData.pk_d])); // Write mandatory derivation number writer.writeVarInt(this.derivationNumber); - // Write optional derivation number if flag is set - if (this.hasOptionalSeedDerivation()) { - writer.writeVarInt(this.optionalDerivationNumber); + if (this.hasSecondarySeedDerivation()) { + writer.writeVarInt(this.secondaryDerivationNumber); } - // Write addresses based on flags if (this.hasFromAddress()) { - if (this.isHexAddress(this.fromAddress!)) { - writer.writeSlice(Buffer.from(this.fromAddress!, 'hex')); - } else { - writer.writeVarSlice(Buffer.from(this.fromAddress!, 'utf8')); - } + writer.writeVarSlice(this.fromAddress.toBuffer()); } if (this.hasToAddress()) { - if (this.isHexAddress(this.toAddress!)) { - writer.writeSlice(Buffer.from(this.toAddress!, 'hex')); - } else { - writer.writeVarSlice(Buffer.from(this.toAddress!, 'utf8')); - } + writer.writeVarSlice(this.toAddress.toBuffer()); } return writer.buffer; @@ -205,33 +176,29 @@ export class AppEncryptionRequestDetails implements SerializableEntity { // Read flags this.flags = reader.readVarInt(); - // Read encryptToKey as 43-byte sapling data and encode as sapling address + // Read encryptToAddress as 43-byte sapling data and encode as sapling address const saplingData = reader.readSlice(43); - this.encryptToKey = toBech32('zs', saplingData); + this.encryptToZAddress = toBech32('zs', saplingData); // Read mandatory derivation number this.derivationNumber = reader.readVarInt(); // Read optional derivation number if flag is set - if (this.hasOptionalSeedDerivation()) { - this.optionalDerivationNumber = reader.readVarInt(); + if (this.hasSecondarySeedDerivation()) { + this.secondaryDerivationNumber = reader.readVarInt(); } // Read addresses based on flags if (this.hasFromAddress()) { - if (this.isHexAddress(this.fromAddress!)) { - this.fromAddress = reader.readSlice(20).toString('hex'); - } else { - this.fromAddress = reader.readVarSlice().toString('utf8'); - } + const CompactId = new CompactIdAddressObject(); + reader.offset = CompactId.fromBuffer(reader.buffer, reader.offset); + this.fromAddress = CompactId; } if (this.hasToAddress()) { - if (this.isHexAddress(this.toAddress!)) { - this.toAddress = reader.readSlice(20).toString('hex'); - } else { - this.toAddress = reader.readVarSlice().toString('utf8'); - } + const CompactId = new CompactIdAddressObject(); + reader.offset = CompactId.fromBuffer(reader.buffer, reader.offset); + this.toAddress = CompactId; } return reader.offset; @@ -244,11 +211,11 @@ export class AppEncryptionRequestDetails implements SerializableEntity { return { version: this.version.toNumber(), flags: this.flags.toNumber(), - encryptToKey: this.encryptToKey, + encrypttozaddress: this.encryptToZAddress, derivationnumber: this.derivationNumber.toNumber(), - optionalderivationnumber: this.optionalDerivationNumber?.toNumber(), - fromaddress: this.fromAddress, - toaddress: this.toAddress + secondaryderivationnumber: this.secondaryDerivationNumber?.toNumber(), + fromaddress: this.fromAddress.toJson(), + toaddress: this.toAddress.toJson() }; } @@ -256,11 +223,18 @@ export class AppEncryptionRequestDetails implements SerializableEntity { const instance = new AppEncryptionRequestDetails(); instance.version = new BN(json.version); instance.flags = new BN(json.flags); - instance.encryptToKey = json.encryptToKey; + instance.encryptToZAddress = json.encrypttozaddress; instance.derivationNumber = new BN(json.derivationnumber); - instance.optionalDerivationNumber = json?.optionalderivationnumber ? new BN(json.optionalderivationnumber) : undefined; - instance.fromAddress = json?.fromaddress; - instance.toAddress = json?.toaddress; + instance.secondaryDerivationNumber = json?.secondaryderivationnumber ? new BN(json.secondaryderivationnumber) : undefined; + + if(instance.hasFromAddress()) { + instance.fromAddress = CompactIdAddressObject.fromJson(json?.fromaddress); + } + + if(instance.hasToAddress()) { + instance.toAddress = CompactIdAddressObject.fromJson(json?.toaddress); + } + return instance; } diff --git a/src/vdxf/classes/requestobjects/CompactIdentityObject.ts b/src/vdxf/classes/requestobjects/CompactIdentityObject.ts deleted file mode 100644 index 2fa78696..00000000 --- a/src/vdxf/classes/requestobjects/CompactIdentityObject.ts +++ /dev/null @@ -1,86 +0,0 @@ - -/** - * CompactIdentityObject - Class representing a compact identity object with serialization and deserialization methods. - * - * This class allows for the representation of an identity either by its fully qualified name (FQN) - * or by its byte representation (identityId and systemId). The object can be serialized to and deserialized from a buffer. - * - - */ - -import bufferutils from '../../../utils/bufferutils'; -const { BufferReader, BufferWriter } = bufferutils; - -import { SerializableEntity } from '../../../utils/types/SerializableEntity'; - -import varuint from '../../../utils/varuint'; - - - -export class CompactIdentityObject implements SerializableEntity { - - id: string; - - constructor(data?: CompactIdentityObject) { - this.id = data?.id || ''; - } - - isHexAddress(): boolean { - return this.id.length === 40 && this.id.match(/^[0-9a-fA-F]+$/) !== null; - } - - getByteLength(): number { - let length = 0; - - if (this.isHexAddress()) { - length += 40; // identityuint160 + systemuint160 - } else { - length += varuint.encodingLength(Buffer.from(this.id!, 'utf8').byteLength) - + Buffer.from(this.id!, 'utf8').byteLength; - } - - return length; - } - toBuffer(): Buffer { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - - if (this.isHexAddress()) { - writer.writeSlice(Buffer.from(this.id!)); - } - else { - writer.writeVarSlice(Buffer.from(this.id!, 'utf8')); - } - - return writer.buffer; - } - - fromBuffer(buffer: Buffer, offset?: number): number { - const reader = new BufferReader(buffer, offset); - if (buffer.length - reader.offset === 40) { - let id; - try { - id = reader.readSlice(40); - this.id = id.toString('hex'); - - } catch (e) { - this.id = id.toString('utf8'); - } - - } else { - this.id = reader.readVarSlice().toString('utf8'); - } - return reader.offset; - } - - toJson(): any { - return { - id: this.id, - }; - } - static fromJson(json: any): CompactIdentityObject { - const instance = new CompactIdentityObject(); - instance.id = json.id; - return instance; - } -} - diff --git a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts index 7d3b5af6..d00e4d84 100644 --- a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts @@ -1,3 +1,20 @@ + +/** + * LoginRequestDetails - Class for handling application login and authentication requests + * + * This class is used when an application is requesting authentication or login from the user, + * including specific permissions and callback information. The request includes: + * - Request ID for tracking the authentication session + * - Permission sets defining what access the application is requesting + * - Callback URIs for post-authentication redirects + * - Optional expiry time for the authentication session + * + * The user's wallet can use these parameters to present a clear authentication request + * to the user, showing exactly what permissions are being requested and where they will + * be redirected after successful authentication. This enables secure, user-controlled + * authentication flows with granular permission management. + */ + import bufferutils from "../../../utils/bufferutils"; import { BigNumber } from "../../../utils/types/BigNumber"; import { BN } from "bn.js"; @@ -6,54 +23,43 @@ import varuint from "../../../utils/varuint"; import { I_ADDR_VERSION } from '../../../constants/vdxf'; import { fromBase58Check, toBase58Check } from "../../../utils/address"; import varint from "../../../utils/varint"; -import { createHash } from "crypto"; +import { CompactIdAddressObject, CompactIdAddressObjectJson } from "../CompactIdAddressObject"; -export enum CallbackUriType { - TYPE_WEBHOOK = 1, - TYPE_REDIRECT = 2, - TYPE_DEEPLINK = 3, - TYPE_OAUTH2 = 4 +export interface LoginPermissionJson { + type: number; + identity: CompactIdAddressObjectJson; } -export enum LoginPermissionType { - REQUIRED_ID = 1, - REQUIRED_SYSTEM = 2, - REQUIRED_PARENT = 3 +export interface CallbackUriJson { + type: number; + uri: string; } - export interface LoginPermission { - type: LoginPermissionType; - identityid: string; + type: BigNumber; + identity: CompactIdAddressObject; } export interface CallbackUri { - type: CallbackUriType; + type: BigNumber; uri: string; } -export interface LoginRequestDetailsInterface { - version?: BigNumber; - challengeId: string; - flags?: BigNumber; - requestedAccess?: Array | null; - permissions?: Array; - callbackUri?: CallbackUri; -} - export interface LoginRequestDetailsJson { version: number; - challengeid: string; + requestid: string; flags: number; - permissions?: Array; - callbackuri?: CallbackUri; + permissions?: Array; + callbackuri?: Array; + expirytime?: number; } export class LoginRequestDetails implements SerializableEntity { - version: BigNumber = LoginRequestDetails.DEFAULT_VERSION; - challengeId: string; + version: BigNumber; flags?: BigNumber; + requestId: string; permissions?: Array; - callbackUri?: CallbackUri; + callbackUri?: Array; + expiryTime?: BigNumber; // Version static DEFAULT_VERSION = new BN(1, 10) @@ -62,63 +68,100 @@ export class LoginRequestDetails implements SerializableEntity { static FLAG_HAS_PERMISSIONS = new BN(1, 10); static FLAG_HAS_CALLBACK_URI = new BN(2, 10); + static FLAG_HAS_EXPIRY_TIME = new BN(4, 10); + + // Permission Types + static REQUIRED_ID = new BN(1, 10); + static REQUIRED_SYSTEM = new BN(2, 10); + static REQUIRED_PARENT = new BN(3, 10); + + // Callback URI Types + static TYPE_WEBHOOK = new BN(1, 10); + static TYPE_REDIRECT = new BN(2, 10); + static TYPE_DEEPLINK = new BN(3, 10); constructor( - challenge: LoginRequestDetailsInterface = { challengeId: ""} + request?: LoginRequestDetails ) { - this.challengeId = challenge.challengeId; - this.flags = challenge?.flags || new BN(0, 10); - this.permissions = challenge?.permissions || null; - this.callbackUri = challenge?.callbackUri || null; - this.version = LoginRequestDetails.DEFAULT_VERSION; + this.version = request?.version || LoginRequestDetails.DEFAULT_VERSION; + this.requestId = request?.requestId || ''; + this.flags = request?.flags || new BN(0, 10); + this.permissions = request?.permissions || null; + this.callbackUri = request?.callbackUri || null; + this.expiryTime = request?.expiryTime || null; + } + + hasPermissions(): boolean { + return this.flags.and(LoginRequestDetails.FLAG_HAS_PERMISSIONS).eq(LoginRequestDetails.FLAG_HAS_PERMISSIONS); + } + + hasCallbackUri(): boolean { + return this.flags.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI).eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); + } + + hasExpiryTime(): boolean { + return this.flags.and(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME).eq(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME); } getByteLength(): number { this.setFlags(); // Ensure flags are set correctly for length calculation let length = 0; - length += 20; // challengeId hash length length += varint.encodingLength(this.flags); + length += 20; // requestId hash length - if (this.flags.and(LoginRequestDetails.FLAG_HAS_PERMISSIONS).eq(LoginRequestDetails.FLAG_HAS_PERMISSIONS)) { + if (this.hasPermissions()) { - length += varuint.encodingLength(this.permissions.length); - if (this.permissions) { + length += varuint.encodingLength(this.permissions.length); for (let i = 0; i < this.permissions.length; i++) { length += varint.encodingLength(new BN(this.permissions[i].type)); - length += 20; // identityid as hash + length += this.permissions[i].identity.getByteLength(); + } + } + + if (this.hasCallbackUri()) { + length += varuint.encodingLength(this.callbackUri.length); + for (let i = 0; i < this.callbackUri.length; i++) { + length += varint.encodingLength(new BN(this.callbackUri[i].type)); + length += varuint.encodingLength(Buffer.from(this.callbackUri[i].uri, 'utf8').byteLength); + length += Buffer.from(this.callbackUri[i].uri, 'utf8').byteLength; } - } } - if (this.flags.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI).eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI)) { - length += varint.encodingLength(new BN(this.callbackUri.type)); - length += varuint.encodingLength(Buffer.from(this.callbackUri.uri, 'utf8').length); - length += Buffer.from(this.callbackUri.uri, 'utf8').length; + if (this.hasExpiryTime()) { + length += varint.encodingLength(this.expiryTime); } return length; } toBuffer(): Buffer { - this.setFlags(); + const writer = new bufferutils.BufferWriter(Buffer.alloc(this.getByteLength())) - writer.writeSlice(fromBase58Check(this.challengeId).hash); writer.writeVarInt(this.flags); - - if (this.flags.and(LoginRequestDetails.FLAG_HAS_PERMISSIONS).eq(LoginRequestDetails.FLAG_HAS_PERMISSIONS)) { - writer.writeCompactSize(this.permissions.length); - for (let i = 0; i < this.permissions.length; i++) { - writer.writeVarInt(new BN(this.permissions[i].type)); - writer.writeSlice(fromBase58Check(this.permissions[i].identityid).hash); + writer.writeSlice(fromBase58Check(this.requestId).hash); + + if (this.hasPermissions()) { + + writer.writeCompactSize(this.permissions.length); + for (let i = 0; i < this.permissions.length; i++) { + writer.writeVarInt(new BN(this.permissions[i].type)); + writer.writeSlice(this.permissions[i].identity.toBuffer()); + } + } + + if (this.hasCallbackUri()) { + writer.writeCompactSize(this.callbackUri.length); + for (let i = 0; i < this.callbackUri.length; i++) { + writer.writeVarInt(new BN(this.callbackUri[i].type)); + writer.writeVarSlice(Buffer.from(this.callbackUri[i].uri, 'utf8')); } } - if (this.flags.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI).eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI)) { - writer.writeVarInt(new BN(this.callbackUri.type)); - writer.writeVarSlice(Buffer.from(this.callbackUri.uri, 'utf8')); + if (this.hasExpiryTime()) { + writer.writeVarInt(this.expiryTime); } return writer.buffer; @@ -126,51 +169,82 @@ export class LoginRequestDetails implements SerializableEntity { fromBuffer(buffer: Buffer, offset?: number): number { const reader = new bufferutils.BufferReader(buffer, offset); - if (buffer.length == 0) throw new Error("Cannot create challenge from empty buffer"); - this.challengeId = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); this.flags = reader.readVarInt(); + this.requestId = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); - if (this.flags.and(LoginRequestDetails.FLAG_HAS_PERMISSIONS).eq(LoginRequestDetails.FLAG_HAS_PERMISSIONS)) { + if (this.hasPermissions()) { this.permissions = []; const permissionsLength = reader.readCompactSize(); for (let i = 0; i < permissionsLength; i++) { + const compactId = new CompactIdAddressObject(); + const type = reader.readVarInt(); + const identityOffset = reader.offset; + reader.offset = compactId.fromBuffer(buffer, identityOffset); this.permissions.push({ - type: reader.readVarInt().toNumber(), - identityid: toBase58Check(reader.readSlice(20), I_ADDR_VERSION) + type: type, + identity: compactId }); } } - if (this.flags.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI).eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI)) { - this.callbackUri = { - type: reader.readVarInt().toNumber(), - uri: reader.readVarSlice().toString('utf8') + if (this.hasCallbackUri()) { + this.callbackUri = []; + const callbackUriLength = reader.readCompactSize(); + for (let i = 0; i < callbackUriLength; i++) { + this.callbackUri.push({ + type: reader.readVarInt(), + uri: reader.readVarSlice().toString('utf8') + }); } } + if (this.hasExpiryTime()) { + this.expiryTime = reader.readVarInt(); + } + return reader.offset; } toJson() { this.setFlags(); - return { - version: this.version ? this.version.toNumber() : 0, - challengeid: this.challengeId, - flags: this.flags ? this.flags.toNumber() : 0, - permissions: this.permissions, - callbackuri: this.callbackUri + + const retval = { + version: this.version.toNumber(), + flags: this.flags.toNumber(), + requestid: this.requestId, + permissions: this.permissions ? this.permissions.map(p => ({type: p.type.toNumber(), + identity: p.identity.toJson()})) : undefined, + callbackuri: this.callbackUri ? this.callbackUri : undefined, + expirytime: this.expiryTime ? this.expiryTime.toNumber() : undefined }; + + return retval; } - static fromJson(data: any): LoginRequestDetails { - return new LoginRequestDetails({ - version: new BN(data?.version || 0), - challengeId: data.challengeid, - flags: new BN(data?.flags || 0), - permissions: data.permissions, - callbackUri: data.callbackuri - }) + static fromJson(data: LoginRequestDetailsJson): LoginRequestDetails { + + const loginDetails = new LoginRequestDetails(); + + loginDetails.version = new BN(data?.version || 0); + loginDetails.flags = new BN(data?.flags || 0); + loginDetails.requestId = data.requestid; + + if(loginDetails.hasPermissions() && data.permissions) { + loginDetails.permissions = data.permissions.map(p => ({type: new BN(p.type), + identity: CompactIdAddressObject.fromJson(p.identity)})); + } + + if(loginDetails.hasCallbackUri() && data.callbackuri) { + loginDetails.callbackUri = data.callbackuri.map(c => ({type: new BN(c.type), + uri: c.uri})); + } + + if(loginDetails.hasExpiryTime() && data.expirytime) { + loginDetails.expiryTime = new BN(data.expirytime); + } + + return loginDetails; } @@ -182,23 +256,40 @@ export class LoginRequestDetails implements SerializableEntity { if (this.callbackUri) { this.flags = this.flags.or(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); } + if (this.expiryTime) { + this.flags = this.flags.or(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME); + } } isValid(): boolean { - let valid = this.challengeId != null && this.challengeId.length > 0; + let valid = this.requestId != null && this.requestId.length > 0; valid &&= this.flags != null && this.flags.gte(new BN(0)); - // Validate challengeId is a valid base58 address + // Validate requestId is a valid base58 address try { - fromBase58Check(this.challengeId); + fromBase58Check(this.requestId); } catch { valid = false; } - - return valid; - } - toSha256() { - return createHash("sha256").update(this.toBuffer()).digest(); + if (this.hasPermissions()) { + if (!this.permissions || this.permissions.length === 0) { + return false; + } + } + + if (this.hasCallbackUri()) { + if (!this.callbackUri || this.callbackUri.length === 0) { + return false; + } } + + if (this.hasExpiryTime()) { + if (!this.expiryTime || this.expiryTime.lte(new BN(0))) { + return false; + } + } + + return valid; + } } \ No newline at end of file diff --git a/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts b/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts new file mode 100644 index 00000000..d0473e8a --- /dev/null +++ b/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts @@ -0,0 +1,198 @@ +/** + * ProvisioningIdentity - Class for handling identity provisioning requests + * + * This class is used when an application is requesting the provisioning or creation of a new identity + * within the Verus blockchain ecosystem. The request includes: + * - System ID (e.g., VRSC@) defining the blockchain system + * - Parent ID (e.g., Token@) defining the parent namespace + * - Identity ID (e.g., john.VRSC@) defining the full identity to be provisioned + * - Flags indicating which components are present and required + * + * The user's wallet can use these parameters to understand the complete identity hierarchy + * and present a clear provisioning request to the user, showing the system context, + * parent namespace, and the specific identity being created. This enables secure, + * user-controlled identity provisioning with proper namespace management. + */ + +import bufferutils from "../../../utils/bufferutils"; +import { BigNumber } from "../../../utils/types/BigNumber"; +import { BN } from "bn.js"; +import { SerializableEntity } from "../../../utils/types/SerializableEntity"; +import varint from "../../../utils/varint"; +import { CompactIdAddressObject, CompactIdAddressObjectJson } from "../CompactIdAddressObject"; + +export interface ProvisionIdentityInterfaceJson { + version?: number; + flags: number; + systemid?: CompactIdAddressObjectJson; + parentid?: CompactIdAddressObjectJson; + identityid?: CompactIdAddressObjectJson; +} + +export class ProvisionIdentity implements SerializableEntity { + + version: BigNumber; + flags: BigNumber; + systemId?: CompactIdAddressObject; // system e.g. VRSC@ + parentId?: CompactIdAddressObject; // parent e.g. Token@ + identityId?: CompactIdAddressObject; // Full identity e.g. john.VRSC@ + + // Version + static DEFAULT_VERSION = new BN(1, 10) + static VERSION_FIRSTVALID = new BN(1, 10) + static VERSION_LASTVALID = new BN(1, 10) + + // flags include params // parent same as signer + static FLAG_HAS_SYSTEMID = new BN(1, 10); + static FLAG_HAS_PARENTID = new BN(2, 10); + static FLAG_IS_A_DEFINED_NAME_TO_PROVISION = new BN(4, 10); + + + constructor( + provisionIdentity?: ProvisionIdentity ){ + + this.version = provisionIdentity?.version || ProvisionIdentity.DEFAULT_VERSION; + this.flags = provisionIdentity?.flags || new BN(0, 10); + this.systemId = provisionIdentity?.systemId; + this.parentId = provisionIdentity?.parentId; + this.identityId = provisionIdentity?.identityId; + } + + hasSystemId(): boolean { + return this.flags.and(ProvisionIdentity.FLAG_HAS_SYSTEMID).eq(ProvisionIdentity.FLAG_HAS_SYSTEMID); + } + + hasParentId(): boolean { + return this.flags.and(ProvisionIdentity.FLAG_HAS_PARENTID).eq(ProvisionIdentity.FLAG_HAS_PARENTID); + } + + hasIdentityId(): boolean { + return this.flags.and(ProvisionIdentity.FLAG_IS_A_DEFINED_NAME_TO_PROVISION).eq(ProvisionIdentity.FLAG_IS_A_DEFINED_NAME_TO_PROVISION); + } + + getByteLength(): number { + this.setFlags(); + let length = 0; + + length += varint.encodingLength(this.flags); + if (this.hasSystemId()) { + length += this.systemId.getByteLength(); + } + + if (this.hasParentId()) { + length += this.parentId.getByteLength(); + } + + if (this.hasIdentityId()) { + length += this.identityId.getByteLength(); + } + + return length; + } + + toBuffer(): Buffer { + + const writer = new bufferutils.BufferWriter(Buffer.alloc(this.getByteLength())) + + writer.writeVarInt(this.flags); + + if (this.hasSystemId()) { + writer.writeSlice(this.systemId.toBuffer()); + } + + if (this.hasParentId()) { + writer.writeVarSlice(this.parentId.toBuffer()); + } + + if (this.hasIdentityId()) { + writer.writeSlice(this.identityId.toBuffer()); + } + + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset?: number): number { + const reader = new bufferutils.BufferReader(buffer, offset); + if (buffer.length == 0) throw new Error("Cannot create provision identity from empty buffer"); + + this.flags = reader.readVarInt(); + + if (this.hasSystemId()) { + const systemId = new CompactIdAddressObject(); + reader.offset = systemId.fromBuffer(reader.buffer, reader.offset); + this.systemId = systemId; + } + + if (this.hasParentId()) { + const parentId = new CompactIdAddressObject(); + reader.offset = parentId.fromBuffer(reader.buffer, reader.offset); + this.parentId = parentId; + } + + if (this.hasIdentityId()) { + const identityId = new CompactIdAddressObject(); + reader.offset = identityId.fromBuffer(reader.buffer, reader.offset); + this.identityId = identityId; + } + + return reader.offset; + } + + toJson(): ProvisionIdentityInterfaceJson { + this.setFlags(); + return { + version: this.version.toNumber(), + flags: this.flags.toNumber(), + systemid: this.systemId ? this.systemId.toJson() : null, + parentid: this.parentId ? this.parentId.toJson() : null, + identityid: this.identityId ? this.identityId.toJson() : null, + }; + } + + static fromJson(data: any): ProvisionIdentity { + + const provision = new ProvisionIdentity(); + provision.version = new BN(data?.version || 0); + provision.flags = new BN(data?.flags || 0); + + if (provision.hasSystemId()) { + provision.systemId = CompactIdAddressObject.fromJson(data.systemid); + } + + if (provision.hasParentId()) { + provision.parentId = CompactIdAddressObject.fromJson(data.parentid); + } + + if (provision.hasIdentityId()) { + provision.identityId = CompactIdAddressObject.fromJson(data.identityid); + } + + return provision; + } + + setFlags() { + this.flags = new BN(0, 10); + + if (this.systemId) { + this.flags = this.flags.or(ProvisionIdentity.FLAG_HAS_SYSTEMID); + } + + if (this.parentId) { + this.flags = this.flags.or(ProvisionIdentity.FLAG_HAS_PARENTID); + } + + if (this.identityId) { + this.flags = this.flags.or(ProvisionIdentity.FLAG_IS_A_DEFINED_NAME_TO_PROVISION); + } + } + + isValid(): boolean { + + let valid = this.flags != null && this.flags.gte(new BN(0)); + + valid &&= this.version != null; + + return valid; + } + +} \ No newline at end of file diff --git a/src/vdxf/classes/requestobjects/ProvisioningIdentity.ts b/src/vdxf/classes/requestobjects/ProvisioningIdentity.ts deleted file mode 100644 index 14689307..00000000 --- a/src/vdxf/classes/requestobjects/ProvisioningIdentity.ts +++ /dev/null @@ -1,219 +0,0 @@ -import bufferutils from "../../../utils/bufferutils"; -import { BigNumber } from "../../../utils/types/BigNumber"; -import { BN } from "bn.js"; -import { SerializableEntity } from "../../../utils/types/SerializableEntity"; -import varuint from "../../../utils/varuint"; -import { I_ADDR_VERSION } from '../../../constants/vdxf'; -import { fromBase58Check, toBase58Check } from "../../../utils/address"; -import varint from "../../../utils/varint"; -import { createHash } from "crypto"; - -export interface ProvisionIdentityInterface { - version?: BigNumber; - flags: BigNumber; - systemId?: string; - parentId?: string; - identityId?: string; - fqn?: string; - webhook?: string; -} - -export class ProvisionIdentity implements SerializableEntity { - - version: BigNumber = ProvisionIdentity.DEFAULT_VERSION; - flags: BigNumber; - systemId?: string; - parentId: string; - identityId?: string; - fqn?: string; - webhook?: string; - - // Version - static DEFAULT_VERSION = new BN(1, 10) - static VERSION_FIRSTVALID = new BN(1, 10) - static VERSION_LASTVALID = new BN(1, 10) - - static FLAG_SYSTEM_AS_SIGNATURE = new BN(1, 10); - static FLAG_PARENT_AS_FQN = new BN(2, 10); - static FLAG_HAS_WEBHOOK = new BN(4, 10); - static FLAG_HAS_IDENTITYID = new BN(8, 10); - static FLAG_HAS_FQN = new BN(16, 10); - - constructor( - provisionIdentity: ProvisionIdentityInterface = { - flags: new BN(0, 10)} - ) { - this.version = provisionIdentity.version || ProvisionIdentity.DEFAULT_VERSION; - this.flags = provisionIdentity.flags; - this.systemId = provisionIdentity?.systemId; - this.parentId = provisionIdentity?.parentId; - this.identityId = provisionIdentity?.identityId; - this.fqn = provisionIdentity?.fqn; - this.webhook = provisionIdentity?.webhook; - - } - - getByteLength(): number { - let length = 0; - - length += varint.encodingLength(this.flags); - if (!this.flags.and(ProvisionIdentity.FLAG_SYSTEM_AS_SIGNATURE).eq(ProvisionIdentity.FLAG_SYSTEM_AS_SIGNATURE)) { - length += 20; // system_id as hash - } - - if (this.flags.and(ProvisionIdentity.FLAG_PARENT_AS_FQN).eq(ProvisionIdentity.FLAG_PARENT_AS_FQN)) { - length += varuint.encodingLength(this.parentId ? this.parentId.length : 0); - length += this.parentId ? Buffer.from(this.parentId, 'utf8').length : 0; - } else { - length += 20; // parentId as hash - } - - if (this.flags.and(ProvisionIdentity.FLAG_HAS_IDENTITYID).eq(ProvisionIdentity.FLAG_HAS_IDENTITYID)) { - length += 20; // identityId as hash - } - - if (this.flags.and(ProvisionIdentity.FLAG_HAS_FQN).eq(ProvisionIdentity.FLAG_HAS_FQN)) { - length += varuint.encodingLength(this.fqn ? this.fqn.length : 0); - length += this.fqn ? Buffer.from(this.fqn, 'utf8').length : 0; - } - - if (this.flags.and(ProvisionIdentity.FLAG_HAS_WEBHOOK).eq(ProvisionIdentity.FLAG_HAS_WEBHOOK)) { - length += varuint.encodingLength(this.webhook ? this.webhook.length : 0); - length += this.webhook ? Buffer.from(this.webhook, 'utf8').length : 0; - } - - return length; - } - - toBuffer(): Buffer { - this.setFlags(); - const writer = new bufferutils.BufferWriter(Buffer.alloc(this.getByteLength())) - - writer.writeVarInt(this.flags); - - if (!this.flags.and(ProvisionIdentity.FLAG_SYSTEM_AS_SIGNATURE).eq(ProvisionIdentity.FLAG_SYSTEM_AS_SIGNATURE)) { - writer.writeSlice(fromBase58Check(this.systemId).hash); - } - - if (this.flags.and(ProvisionIdentity.FLAG_PARENT_AS_FQN).eq(ProvisionIdentity.FLAG_PARENT_AS_FQN)) { - writer.writeVarSlice(Buffer.from(this.parentId || '', 'utf8')); - } else { - writer.writeSlice(fromBase58Check(this.parentId).hash); - } - - if (this.flags.and(ProvisionIdentity.FLAG_HAS_IDENTITYID).eq(ProvisionIdentity.FLAG_HAS_IDENTITYID)) { - writer.writeSlice(fromBase58Check(this.identityId).hash); - } - - if (this.flags.and(ProvisionIdentity.FLAG_HAS_FQN).eq(ProvisionIdentity.FLAG_HAS_FQN)) { - writer.writeVarSlice(Buffer.from(this.fqn || '', 'utf8')); - } - - if (this.flags.and(ProvisionIdentity.FLAG_HAS_WEBHOOK).eq(ProvisionIdentity.FLAG_HAS_WEBHOOK)) { - writer.writeVarSlice(Buffer.from(this.webhook || '', 'utf8')); - } - - return writer.buffer; - } - - fromBuffer(buffer: Buffer, offset?: number): number { - const reader = new bufferutils.BufferReader(buffer, offset); - if (buffer.length == 0) throw new Error("Cannot create provision identity from empty buffer"); - - this.flags = reader.readVarInt(); - - if (!this.flags.and(ProvisionIdentity.FLAG_SYSTEM_AS_SIGNATURE).eq(ProvisionIdentity.FLAG_SYSTEM_AS_SIGNATURE)) { - this.systemId = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); - } - - if (this.flags.and(ProvisionIdentity.FLAG_PARENT_AS_FQN).eq(ProvisionIdentity.FLAG_PARENT_AS_FQN)) { - this.parentId = reader.readVarSlice().toString('utf8'); - } else { - this.parentId = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); - } - - if (this.flags.and(ProvisionIdentity.FLAG_HAS_IDENTITYID).eq(ProvisionIdentity.FLAG_HAS_IDENTITYID)) { - this.identityId = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); - } - - if (this.flags.and(ProvisionIdentity.FLAG_HAS_FQN).eq(ProvisionIdentity.FLAG_HAS_FQN)) { - this.fqn = reader.readVarSlice().toString('utf8'); - } - - if (this.flags.and(ProvisionIdentity.FLAG_HAS_WEBHOOK).eq(ProvisionIdentity.FLAG_HAS_WEBHOOK)) { - this.webhook = reader.readVarSlice().toString('utf8'); - } - - return reader.offset; - } - - toJson() { - this.setFlags(); - return { - version: this.version ? this.version.toNumber() : 0, - flags: this.flags ? this.flags.toNumber() : 0, - systemId: this.systemId, - parentId: this.parentId, - identityId: this.identityId, - fqn: this.fqn, - webhook: this.webhook - }; - } - - static fromJson(data: any): ProvisionIdentity { - return new ProvisionIdentity({ - version: new BN(data?.version || 0), - flags: new BN(data?.flags || 0), - systemId: data.systemId, - parentId: data.parentId, - identityId: data.identityId, - fqn: data.fqn, - webhook: data.webhook - }) - } - - - setFlags() { - this.flags = new BN(0, 10); - - if (!this.systemId) { - this.flags = this.flags.or(ProvisionIdentity.FLAG_SYSTEM_AS_SIGNATURE); - } - - if (this.parentId) { - // Check if parentId is a valid base58 address or should be treated as FQN - try { - fromBase58Check(this.parentId); - // If it doesn't throw, it's a valid address, don't set FQN flag - } catch { - // If it throws, treat as FQN - this.flags = this.flags.or(ProvisionIdentity.FLAG_PARENT_AS_FQN); - } - } - - if (this.identityId) { - this.flags = this.flags.or(ProvisionIdentity.FLAG_HAS_IDENTITYID); - } - - if (this.fqn) { - this.flags = this.flags.or(ProvisionIdentity.FLAG_HAS_FQN); - } - - if (this.webhook) { - this.flags = this.flags.or(ProvisionIdentity.FLAG_HAS_WEBHOOK); - } - } - - isValid(): boolean { - let valid = this.flags != null && this.flags.gte(new BN(0)); - - // At minimum, we need either systemId or parentId - valid &&= (this.parentId != null && this.parentId.length > 0); - - return valid; - } - - toSha256() { - return createHash("sha256").update(this.toBuffer()).digest(); - } -} \ No newline at end of file diff --git a/src/vdxf/classes/requestobjects/RequestUserData.ts b/src/vdxf/classes/requestobjects/RequestUserData.ts new file mode 100644 index 00000000..0a9fbc27 --- /dev/null +++ b/src/vdxf/classes/requestobjects/RequestUserData.ts @@ -0,0 +1,259 @@ + +/** + * InformationRequest - Class for handling application requests for specific user information/data + * + * This class is used when an application is requesting specific information or data from the user's + * identity or data stores. The request includes: + * - Search data keys (VDXF keys) to identify the specific data being requested + * - Optional specific keys within the data object for partial data requests + * - Signer information to identify wanted signer of the data + * - Optional statement for boundhashes in the signature + * + * The user's wallet can use these parameters to locate the signed object information and present + * it to the user for approval before sharing with the requesting application. This enables + * selective disclosure of personal information while maintaining user privacy and control. + * + * Flags determine the type and scope of the request: + * - FULL_DATA vs PARTIAL_DATA: Whether complete objects or specific fields are requested + * - COLLECTION: Whether multiple data objects are being requested + * - HAS_STATEMENT: Whether the request includes an attestation statement + * - ATTESTATION/CLAIM/CREDENTIAL: Type of verification being requested + */ + +import { BigNumber } from '../../../utils/types/BigNumber'; +import { BN } from 'bn.js'; +import varint from '../../../utils/varint'; +import varuint from '../../../utils/varuint'; +import bufferutils from '../../../utils/bufferutils'; +const { BufferReader, BufferWriter } = bufferutils; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { CompactIdAddressObject, CompactIdAddressObjectJson } from '../CompactIdAddressObject'; +import { fromBase58Check, toBase58Check } from '../../../utils/address'; + +export interface RequestUserDataJson { + version: number; + flags: number; + searchdatakey: Array<{[key: string]: string}>; // ID object of the specific information requested + signer?: CompactIdAddressObjectJson; + requestedkeys?: string[]; // Specific keys within the data object being requested +} + +export class RequestUserData implements SerializableEntity { + + static VERSION_INVALID = new BN(0); + static FIRST_VERSION = new BN(1); + static LAST_VERSION = new BN(1); + static DEFAULT_VERSION = new BN(1); + + static FULL_DATA = new BN(1); + static PARTIAL_DATA = new BN(2); + static COLLECTION = new BN(4); + + static ATTESTATION = new BN(8); + static CLAIM = new BN(16); + static CREDENTIAL = new BN(32); + + static HAS_SIGNER = new BN(64); + static HAS_REQUESTED_KEYS = new BN(128); + + version: BigNumber; + flags: BigNumber; + searchDataKey: Array<{[key: string]: string}>; + signer?: CompactIdAddressObject; + requestedKeys?: string[]; + + constructor(data?: RequestUserData) { + this.version = data?.version || RequestUserData.DEFAULT_VERSION; + this.flags = data?.flags || new BN(0); + this.searchDataKey = data?.searchDataKey || []; + this.signer = data?.signer; + this.requestedKeys = data?.requestedKeys; + + } + + setFlags(): void { + // Initialize flags if not already a BigNumber + if (!BN.isBN(this.flags)) { + this.flags = new BN(0); + } + + if (this.requestedKeys && this.requestedKeys.length > 0) { + this.flags = this.flags.or(RequestUserData.HAS_REQUESTED_KEYS); + } + + if (this.signer) { + this.flags = this.flags.or(RequestUserData.HAS_SIGNER); + } + } + + hasSigner(): boolean { + return this.flags.and(RequestUserData.HAS_SIGNER).eq(RequestUserData.HAS_SIGNER); + } + + hasRequestedKeys(): boolean { + return this.flags.and(RequestUserData.HAS_REQUESTED_KEYS).eq(RequestUserData.HAS_REQUESTED_KEYS); + } + + /** + * Checks if exactly one data type flag is set (FULL_DATA, PARTIAL_DATA, or COLLECTION) + * @returns True if exactly one data type flag is set + */ + hasDataTypeSet(): boolean { + const dataTypeFlags = RequestUserData.FULL_DATA.or(RequestUserData.PARTIAL_DATA).or(RequestUserData.COLLECTION); + const setDataFlags = this.flags.and(dataTypeFlags); + + // Check if exactly one flag is set by verifying it's a power of 2 + return !setDataFlags.isZero() && setDataFlags.and(setDataFlags.sub(new BN(1))).isZero(); + } + + /** + * Checks if exactly one request type flag is set (ATTESTATION, CLAIM, or CREDENTIAL) + * @returns True if exactly one request type flag is set + */ + hasRequestTypeSet(): boolean { + const requestTypeFlags = RequestUserData.ATTESTATION.or(RequestUserData.CLAIM).or(RequestUserData.CREDENTIAL); + const setRequestFlags = this.flags.and(requestTypeFlags); + + // Check if exactly one flag is set by verifying it's a power of 2 + return !setRequestFlags.isZero() && setRequestFlags.and(setRequestFlags.sub(new BN(1))).isZero(); + } + + isValid(): boolean { + let valid = this.version.gte(RequestUserData.FIRST_VERSION) && this.version.lte(RequestUserData.LAST_VERSION); + + // Check that exactly one data type flag is set + valid &&= this.hasDataTypeSet(); + + // Check that exactly one request type flag is set + valid &&= this.hasRequestTypeSet(); + + // Check that searchDataKey is present + valid &&= Object.keys(this.searchDataKey).length > 0; + + return valid; + } + + getByteLength(): number { + + this.setFlags(); + let length = 0; + + length += varint.encodingLength(this.flags); + length += varuint.encodingLength(this.searchDataKey.length); + + for (const item of this.searchDataKey) { + const key = Object.keys(item)[0]; + const value = item[key]; + length += 20 // VDXF key length + length += varuint.encodingLength(Buffer.byteLength(value, 'utf8')); + length += Buffer.byteLength(value, 'utf8'); + } + + if (this.hasSigner()) { + length += this.signer.getByteLength(); + } + + if (this.hasRequestedKeys()) { + length += varuint.encodingLength(this.requestedKeys ? this.requestedKeys.length : 0); + if (this.requestedKeys) { + for (const key of this.requestedKeys) { + length += 20 // VDXF key length + } + } + } + + return length; + } + + toBuffer(): Buffer { + // Set flags before serialization + this.setFlags(); + + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeVarInt(this.flags); + + writer.writeCompactSize(this.searchDataKey.length); + + for (const item of this.searchDataKey) { + const key = Object.keys(item)[0]; + const value = item[key]; + writer.writeSlice(fromBase58Check(key).hash); // 20-byte VDXF key + writer.writeVarSlice(Buffer.from(value, 'utf8')); + } + + if (this.hasSigner()) { + writer.writeSlice(this.signer.toBuffer()); + } + + if(this.hasRequestedKeys()) { + writer.writeCompactSize(this.requestedKeys.length); + for (const key of this.requestedKeys) { + writer.writeSlice(fromBase58Check(key).hash); // 20-byte VDXF key + } + } + + + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset?: number): number { + const reader = new BufferReader(buffer, offset); + this.flags = reader.readVarInt(); + + const searchDataKeyLength = reader.readCompactSize(); + this.searchDataKey = []; + + for (let i = 0; i < searchDataKeyLength; i++) { + const keyHash = reader.readSlice(20); // 20-byte VDXF key + const valueBuffer = reader.readVarSlice(); + const value = valueBuffer.toString('utf8'); + const key = toBase58Check(keyHash, 102); + this.searchDataKey.push({ [key]: value }); + } + + if (this.hasSigner()) { + const signer = new CompactIdAddressObject(); + + reader.offset = signer.fromBuffer(reader.buffer, reader.offset); + this.signer = signer; + } + + if (this.hasRequestedKeys()) { + const requestedKeysLength = reader.readCompactSize(); + this.requestedKeys = []; + for (let i = 0; i < requestedKeysLength; i++) { + const keyHash = reader.readSlice(20); // 20-byte VDXF key + const key = toBase58Check(keyHash, 102); + this.requestedKeys.push(key); + } + } + + return reader.offset; + } + + toJSON(): RequestUserDataJson { + // Set flags before serialization + this.setFlags(); + + return { + version: this.version.toNumber(), + flags: this.flags.toNumber(), + searchdatakey: this.searchDataKey, + signer: this.signer.toJson(), + requestedkeys: this.requestedKeys + }; + } + + fromJSON(json: RequestUserDataJson) { + + const requestData = new RequestUserData(); + requestData.version = new BN(json.version); + requestData.flags = new BN(json.flags); + requestData.searchDataKey = json.searchdatakey; + requestData.signer = json.signer ? CompactIdAddressObject.fromJson(json.signer) : undefined; + requestData.requestedKeys = json.requestedkeys; + + return requestData; + } + +} diff --git a/src/vdxf/classes/requestobjects/SignDataRequestDetails.ts b/src/vdxf/classes/requestobjects/SignDataRequestDetails.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/vdxf/classes/requestobjects/UserDataRequest.ts b/src/vdxf/classes/requestobjects/UserDataRequest.ts deleted file mode 100644 index 747ed8b6..00000000 --- a/src/vdxf/classes/requestobjects/UserDataRequest.ts +++ /dev/null @@ -1,201 +0,0 @@ - -/** - * InformationRequest - Class for handling application requests for specific user information/data - * - * This class is used when an application is requesting specific information or data from the user's - * identity or data stores. The request includes: - * - Search data keys (VDXF keys) to identify the specific data being requested - * - Optional specific keys within the data object for partial data requests - * - Signer information to identify wanted signer of the data - * - Optional statement for boundhashes in the signature - * - * The user's wallet can use these parameters to locate the signed object information and present - * it to the user for approval before sharing with the requesting application. This enables - * selective disclosure of personal information while maintaining user privacy and control. - * - * Flags determine the type and scope of the request: - * - FULL_DATA vs PARTIAL_DATA: Whether complete objects or specific fields are requested - * - COLLECTION: Whether multiple data objects are being requested - * - HAS_STATEMENT: Whether the request includes an attestation statement - * - ATTESTATION/CLAIM/CREDENTIAL: Type of verification being requested - */ - -import { BigNumber } from '../../../utils/types/BigNumber'; -import { BN } from 'bn.js'; -import varint from '../../../utils/varint'; -import varuint from '../../../utils/varuint'; -import bufferutils from '../../../utils/bufferutils'; -const { BufferReader, BufferWriter } = bufferutils; -import { SerializableEntity } from '../../../utils/types/SerializableEntity'; - -export interface RequestUserDataJson { - version: number; - flags: number; - searchDatakey: {[key: string]: string}; // ID object of the specific information requested - signer: string; - requestedkeys?: string[]; // Specific keys within the data object being requested -} - -export class RequestUserData implements SerializableEntity { - - static VERSION_INVALID = new BN(0); - static FIRST_VERSION = new BN(1); - static LAST_VERSION = new BN(1); - static DEFAULT_VERSION = new BN(1); - - static FULL_DATA = new BN(1); - static PARTIAL_DATA = new BN(2); - static COLLECTION = new BN(4); - - static ATTESTATION = new BN(8); - static CLAIM = new BN(16); - static CREDENTIAL = new BN(32); - - version: BigNumber; - flags: BigNumber; - searchDataKey: {[key: string]: string}; - signer: string; - requestedKeys?: string[]; - - constructor(data?: RequestUserData) { - this.version = data?.version || RequestUserData.DEFAULT_VERSION; - this.flags = data?.flags || new BN(0); - this.searchDataKey = data?.searchDataKey || {}; - this.signer = data?.signer || ''; - this.requestedKeys = data?.requestedKeys; - - } - - setFlags(): void { - this.flags = new BN(0); - - } - - versionIsValid(): boolean { - return this.version.gte(RequestUserData.FIRST_VERSION) && this.version.lte(RequestUserData.LAST_VERSION); - } - - hasFlags(): boolean { - return this.flags.gte(new BN(0)); - } - - hasSearchDataKey(): boolean { - return Object.keys(this.searchDataKey).length > 0; - } - - hasSigner(): boolean { - return this.signer.length > 0; - } - - isValid(): boolean { - let valid = this.versionIsValid(); - valid &&= (this.hasFlags()); - valid &&= (this.hasSearchDataKey()); - valid &&= (this.hasSigner()); - return valid; - } - - getByteLength(): number { - let length = 0; - length += varint.encodingLength(this.flags); - - // Serialize searchDataKey object as JSON string - const searchDataKeyJson = Object.values(this.searchDataKey)[0]; - length += 20 // VDXF key length - length += varuint.encodingLength(Buffer.byteLength(searchDataKeyJson, 'utf8')); - length += Buffer.byteLength(searchDataKeyJson, 'utf8'); - - // Add signer length - length += varuint.encodingLength(Buffer.byteLength(this.signer, 'utf8')); - length += Buffer.byteLength(this.signer, 'utf8'); - - length += varuint.encodingLength(this.requestedKeys ? this.requestedKeys.length : 0); - if (this.requestedKeys) { - for (const key of this.requestedKeys) { - length += 20 // VDXF key length - } - } - - return length; - } - - toBuffer(): Buffer { - // Set flags before serialization - this.setFlags(); - - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.flags); - - // Write searchDataKey - write VDXF key and value - const firstKey = Object.keys(this.searchDataKey)[0]; - const firstValue = this.searchDataKey[firstKey]; - writer.writeSlice(Buffer.from(firstKey, 'hex')); // 20-byte VDXF key - writer.writeVarSlice(Buffer.from(firstValue, 'utf8')); - - // Write signer - writer.writeVarSlice(Buffer.from(this.signer, 'utf8')); - - writer.writeCompactSize(this.requestedKeys ? this.requestedKeys.length : 0); - if (this.requestedKeys) { - for (const key of this.requestedKeys) { - writer.writeSlice(Buffer.from(key, 'hex')); // 20-byte VDXF key - } - } - - // Write statement if flag is set - if (this.flags.and(RequestUserData.HAS_STATEMENT).gt(new BN(0))) { - writer.writeVarSlice(Buffer.from(this.statement, 'utf8')); - } - - return writer.buffer; - } - - fromBuffer(buffer: Buffer, offset?: number): number { - const reader = new BufferReader(buffer, offset); - this.flags = reader.readVarInt(); - - // Read searchDataKey - read VDXF key and value - const vdxfKey = reader.readSlice(20).toString('hex'); // 20-byte VDXF key - const value = reader.readVarSlice().toString('utf8'); - this.searchDataKey = { [vdxfKey]: value }; - - // Read signer - this.signer = reader.readVarSlice().toString('utf8'); - - this.requestedKeys = []; - const requestedKeysLength = reader.readCompactSize(); - for (let i = 0; i < requestedKeysLength; i++) { - this.requestedKeys.push(reader.readSlice(20).toString('hex')); // 20-byte VDXF key - } - - // Read statement if flag is set - if (this.flags.and(RequestUserData.HAS_STATEMENT).gt(new BN(0))) { - this.statement = reader.readVarSlice().toString('utf8'); - } - - return reader.offset; - } - - toJSON(): RequestUserDataJson { - // Set flags before serialization - this.setFlags(); - - return { - version: this.version.toNumber(), - flags: this.flags, - searchDatakey: this.searchDataKey, - signer: this.signer, - requestedkeys: this.requestedKeys, - statement: this.statement - }; - } - - fromJSON(json: RequestUserDataJson): void { - this.version = new BN(json.version); - this.flags = json.flags; - this.searchDataKey = json.searchDatakey; - this.signer = json.signer; - this.requestedKeys = json.requestedkeys || []; - this.statement = json.statement; - } -} From 72325fb071b2305621dadaf734d9264b892ab9d1 Mon Sep 17 00:00:00 2001 From: monkins Date: Mon, 20 Oct 2025 11:17:04 +0100 Subject: [PATCH 018/123] Added placeholder for signdata --- .../requestobjects/SignDataRequestDetails.ts | 198 ++++++++++++++++++ 1 file changed, 198 insertions(+) diff --git a/src/vdxf/classes/requestobjects/SignDataRequestDetails.ts b/src/vdxf/classes/requestobjects/SignDataRequestDetails.ts index e69de29b..3475c837 100644 --- a/src/vdxf/classes/requestobjects/SignDataRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/SignDataRequestDetails.ts @@ -0,0 +1,198 @@ +/** + * SignDataRequestDetails - Class for handling application requests for data signing + * + * This class is used when an application is requesting the user to sign specific data objects + * or documents. The request includes: + * - Signable objects containing the data to be signed + * - Optional signer identity specification + * - Search data keys to identify specific data objects + * - Optional requested keys for partial data signing + * + * The user's wallet can use these parameters to present the data to be signed to the user, + * allowing them to review the content before providing their digital signature. This enables + * secure, user-controlled document and data signing with clear visibility into what is + * being signed and by which identity. + */ + +import { BigNumber } from '../../../utils/types/BigNumber'; +import { BN } from 'bn.js'; +import varint from '../../../utils/varint'; +import varuint from '../../../utils/varuint'; +import bufferutils from '../../../utils/bufferutils'; +const { BufferReader, BufferWriter } = bufferutils; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { CompactIdAddressObject, CompactIdAddressObjectJson } from '../CompactIdAddressObject'; +import { fromBase58Check, toBase58Check } from '../../../utils/address'; +import { DataDescriptor, MMRDescriptor } from '../../../pbaas'; + +export interface SignDataRequestDetailsJson { + version: number; + flags: number; + signableobjects: Array<{[key: string]: string}>; // Array of signable data objects + signer?: CompactIdAddressObjectJson; +} + +export type SignRequestSignableObjects = Credential | MMRDescriptor | DataDescriptor | string; + +export class SignDataRequestDetails implements SerializableEntity { + + static VERSION_INVALID = new BN(0); + static FIRST_VERSION = new BN(1); + static LAST_VERSION = new BN(1); + static DEFAULT_VERSION = new BN(1); + + // types of data to sign + static CREDENTIAL = new BN(1); + static MMR_DESCRIPTOR = new BN(2); + static DATA_DESCRIPTOR = new BN(4); + static JSON_DATA = new BN(8); + + // flags for optional data + static HAS_SIGNER = new BN(8); + + version: BigNumber; + flags: BigNumber; + signableObjects: Array; + requestedSigner?: CompactIdAddressObject; + + constructor(data?: SignDataRequestDetails) { + this.version = data?.version || SignDataRequestDetails.DEFAULT_VERSION; + this.flags = data?.flags || new BN(0); + this.signableObjects = data?.signableObjects || []; + this.signer = data?.signer; + } + + setFlags(): void { + // Initialize flags if not already a BigNumber + if (!BN.isBN(this.flags)) { + this.flags = new BN(0); + } + + } + + hasSigner(): boolean { + return this.flags.and(SignDataRequestDetails.HAS_SIGNER).eq(SignDataRequestDetails.HAS_SIGNER); + } + + /** + * Checks if exactly one data type flag is set (FULL_DATA, PARTIAL_DATA, or COLLECTION) + * @returns True if exactly one data type flag is set + */ + hasDataTypeSet(): boolean { + const dataTypeFlags = SignDataRequestDetails.FULL_DATA + .or(SignDataRequestDetails.PARTIAL_DATA) + .or(SignDataRequestDetails.COLLECTION); + const setDataFlags = this.flags.and(dataTypeFlags); + + // Check if exactly one flag is set by verifying it's a power of 2 + return !setDataFlags.isZero() && setDataFlags.and(setDataFlags.sub(new BN(1))).isZero(); + } + + isValid(): boolean { + let valid = this.version.gte(SignDataRequestDetails.FIRST_VERSION) && + this.version.lte(SignDataRequestDetails.LAST_VERSION); + + // Check that exactly one data type flag is set + valid &&= this.hasDataTypeSet(); + + // Check that we have signable objects + valid &&= this.signableObjects.length > 0; + + return valid; + } + + getByteLength(): number { + this.setFlags(); + let length = 0; + + length += varint.encodingLength(this.flags); + + // Add length for signableObjects array + length += varuint.encodingLength(this.signableObjects.length); + + for (const obj of this.signableObjects) { + // Each object: VDXF key (20 bytes) + value length + value + const firstKey = Object.keys(obj)[0]; + const firstValue = obj[firstKey]; + length += 20; // VDXF key length + length += varuint.encodingLength(Buffer.byteLength(firstValue, 'utf8')); + length += Buffer.byteLength(firstValue, 'utf8'); + } + + // Add signer length if present + if (this.hasSigner() && this.signer) { + length += this.signer.getByteLength(); + } + + return length; + } + + toBuffer(): Buffer { + this.setFlags(); + + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + + writer.writeVarInt(this.flags); + + // Write signableObjects array + writer.writeCompactSize(this.signableObjects.length); + + for (const obj of this.signableObjects) { + const firstKey = Object.keys(obj)[0]; + const firstValue = obj[firstKey]; + writer.writeSlice(Buffer.from(firstKey, 'hex')); // 20-byte VDXF key + writer.writeVarSlice(Buffer.from(firstValue, 'utf8')); + } + + // Write signer if present + if (this.hasSigner() && this.signer) { + writer.writeSlice(this.signer.toBuffer()); + } + + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset?: number): number { + const reader = new BufferReader(buffer, offset); + + this.flags = reader.readVarInt(); + + // Read signableObjects array + const objectCount = reader.readCompactSize(); + this.signableObjects = []; + + for (let i = 0; i < objectCount; i++) { + const vdxfKey = reader.readSlice(20).toString('hex'); // 20-byte VDXF key + const value = reader.readVarSlice().toString('utf8'); + this.signableObjects.push({ [vdxfKey]: value }); + } + + // Read signer if flag is set + if (this.hasSigner()) { + this.signer = new CompactIdAddressObject(); + reader.offset = this.signer.fromBuffer(buffer, reader.offset); + } + + return reader.offset; + } + + toJSON(): SignDataRequestDetailsJson { + this.setFlags(); + + return { + version: this.version.toNumber(), + flags: this.flags.toNumber(), + signableobjects: this.signableObjects, + signer: this.signer?.toJson() + }; + } + + static fromJSON(json: SignDataRequestDetailsJson): SignDataRequestDetails { + const instance = new SignDataRequestDetails(); + instance.version = new BN(json.version); + instance.flags = new BN(json.flags); + instance.signableObjects = json.signableobjects || []; + instance.signer = json.signer ? CompactIdAddressObject.fromJson(json.signer) : undefined; + return instance; + } +} \ No newline at end of file From 0c07469bb5104c55b74e6559ae59e56bcd97b9a4 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Mon, 20 Oct 2025 14:09:37 +0200 Subject: [PATCH 019/123] Add salt to generic request and bidirectional map to automatically optimize ordinal able vdxf objects --- dist/vdxf/classes/OrdinalVdxfObject.d.ts | 21 ++- dist/vdxf/classes/OrdinalVdxfObject.js | 118 +++++++++++---- .../classes/OrdinalVdxfObjectOrdinalMap.d.ts | 13 ++ .../classes/OrdinalVdxfObjectOrdinalMap.js | 34 +++++ dist/vdxf/classes/request/GenericRequest.d.ts | 9 +- dist/vdxf/classes/request/GenericRequest.js | 36 ++++- dist/vdxf/keys.d.ts | 1 + dist/vdxf/keys.js | 19 ++- src/__tests__/vdxf/genericrequest.test.ts | 20 +-- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 20 +-- src/vdxf/classes/OrdinalVdxfObject.ts | 137 +++++++++++++----- .../classes/OrdinalVdxfObjectOrdinalMap.ts | 40 +++++ src/vdxf/classes/request/GenericRequest.ts | 51 +++++-- src/vdxf/keys.ts | 16 +- 14 files changed, 416 insertions(+), 119 deletions(-) create mode 100644 dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.d.ts create mode 100644 dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.js create mode 100644 src/vdxf/classes/OrdinalVdxfObjectOrdinalMap.ts diff --git a/dist/vdxf/classes/OrdinalVdxfObject.d.ts b/dist/vdxf/classes/OrdinalVdxfObject.d.ts index 15be439f..82e616a8 100644 --- a/dist/vdxf/classes/OrdinalVdxfObject.d.ts +++ b/dist/vdxf/classes/OrdinalVdxfObject.d.ts @@ -5,7 +5,7 @@ import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "./payment/Ve export interface OrdinalVdxfObjectInterfaceTemplate { version?: BigNumber; type?: BigNumber; - vdxfKey?: string; + key?: string; data?: T; } export type OrdinalVdxfObjectJsonTemplate = { @@ -26,33 +26,38 @@ export declare const getOrdinalVdxfObjectClassForType: (type: BigNumber) => Ordi export declare class OrdinalVdxfObject implements SerializableEntity { version: BigNumber; type: BigNumber; - vdxfKey?: string; + key?: string; data?: BufferOrOrdinalVdxfObjectReservedData; static VERSION_INVALID: import("bn.js"); static VERSION_FIRST: import("bn.js"); static VERSION_LAST: import("bn.js"); static VERSION_CURRENT: import("bn.js"); - static TYPE_DATA_DESCRIPTOR: import("bn.js"); - static TYPE_INVOICE: import("bn.js"); - static VDXF_OBJECT_RESERVED_BYTE: import("bn.js"); + static ORDINAL_DATA_DESCRIPTOR: import("bn.js"); + static ORDINAL_VERUSPAY_INVOICE: import("bn.js"); + static VDXF_OBJECT_RESERVED_BYTE_I_ADDR: import("bn.js"); + static VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING: import("bn.js"); + static VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY: import("bn.js"); constructor(request?: OrdinalVdxfObjectInterfaceTemplate); isDefinedByVdxfKey(): boolean; + isDefinedByTextVdxfKey(): boolean; + isDefinedByCurrencyOrId(): boolean; + isDefinedByCustomKey(): boolean; getDataByteLength(): number; toDataBuffer(): Buffer; fromDataBuffer(buffer: Buffer): void; getByteLength(): number; toBuffer(): Buffer; - fromBufferOptionalType(buffer: Buffer, offset?: number, type?: BigNumber): number; + fromBufferOptionalType(buffer: Buffer, offset?: number, type?: BigNumber, key?: string): number; fromBuffer(buffer: Buffer, offset?: number): number; toJson(): OrdinalVdxfObjectJson; - static createFromBuffer(buffer: Buffer, offset?: number): { + static createFromBuffer(buffer: Buffer, offset?: number, optimizeWithOrdinal?: boolean, rootSystemName?: string): { offset: number; obj: OrdinalVdxfObject; }; } export declare class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { data: Buffer; - vdxfKey: string; + key: string; constructor(request?: OrdinalVdxfObjectInterfaceTemplate); getDataByteLength(): number; toDataBuffer(): Buffer; diff --git a/dist/vdxf/classes/OrdinalVdxfObject.js b/dist/vdxf/classes/OrdinalVdxfObject.js index 938ce9ba..3d113edd 100644 --- a/dist/vdxf/classes/OrdinalVdxfObject.js +++ b/dist/vdxf/classes/OrdinalVdxfObject.js @@ -9,12 +9,17 @@ const varint_1 = require("../../utils/varint"); const vdxf_1 = require("../../constants/vdxf"); const pbaas_1 = require("../../pbaas"); const VerusPayInvoiceDetails_1 = require("./payment/VerusPayInvoiceDetails"); +const OrdinalVdxfObjectOrdinalMap_1 = require("./OrdinalVdxfObjectOrdinalMap"); +const keys_1 = require("../keys"); +const pbaas_2 = require("../../constants/pbaas"); const getOrdinalVdxfObjectClassForType = (type) => { - if (type.eq(OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR)) + if (type.eq(OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR)) return DataDescriptorOrdinalVdxfObject; - else if (type.eq(OrdinalVdxfObject.TYPE_INVOICE)) + else if (type.eq(OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE)) return VerusPayInvoiceOrdinalVdxfObject; - else if (type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE)) + else if (type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR) || + type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING) || + type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY)) return GeneralTypeOrdinalVdxfObject; else throw new Error("Unrecognized vdxf ordinal object type"); @@ -22,11 +27,11 @@ const getOrdinalVdxfObjectClassForType = (type) => { exports.getOrdinalVdxfObjectClassForType = getOrdinalVdxfObjectClassForType; class OrdinalVdxfObject { constructor(request = { - type: OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR + type: OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR }) { - if (request.vdxfKey) { - this.type = OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE; - this.vdxfKey = request.vdxfKey; + if (request.key) { + this.type = OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR; + this.key = request.key; if (request.data) { this.data = request.data; } @@ -34,7 +39,7 @@ class OrdinalVdxfObject { this.data = Buffer.alloc(0); } else if (request.type == null) { - this.type = OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR; + this.type = OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR; } else { this.type = request.type; @@ -45,7 +50,16 @@ class OrdinalVdxfObject { this.version = OrdinalVdxfObject.VERSION_CURRENT; } isDefinedByVdxfKey() { - return this.type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE); + return this.type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR); + } + isDefinedByTextVdxfKey() { + return this.type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING); + } + isDefinedByCurrencyOrId() { + return this.type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY); + } + isDefinedByCustomKey() { + return this.isDefinedByCurrencyOrId() || this.isDefinedByTextVdxfKey() || this.isDefinedByVdxfKey(); } getDataByteLength() { return 0; @@ -58,7 +72,12 @@ class OrdinalVdxfObject { let length = 0; length += varuint_1.default.encodingLength(this.type.toNumber()); if (this.isDefinedByVdxfKey()) { - length += (0, address_1.fromBase58Check)(this.vdxfKey).hash.length; + length += (0, address_1.fromBase58Check)(this.key).hash.length; + } + else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { + const utf8Key = Buffer.from(this.key, 'utf8'); + length += varuint_1.default.encodingLength(utf8Key.length); + length += utf8Key.length; } length += varint_1.default.encodingLength(this.version); const dataLength = this.getDataByteLength(); @@ -70,13 +89,16 @@ class OrdinalVdxfObject { const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); writer.writeCompactSize(this.type.toNumber()); if (this.isDefinedByVdxfKey()) { - writer.writeSlice((0, address_1.fromBase58Check)(this.vdxfKey).hash); + writer.writeSlice((0, address_1.fromBase58Check)(this.key).hash); + } + else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { + writer.writeVarSlice(Buffer.from(this.key, 'utf8')); } writer.writeVarInt(this.version); writer.writeVarSlice(this.toDataBuffer()); return writer.buffer; } - fromBufferOptionalType(buffer, offset, type) { + fromBufferOptionalType(buffer, offset, type, key) { if (buffer.length == 0) throw new Error("Cannot create request from empty buffer"); const reader = new bufferutils_1.default.BufferReader(buffer, offset); @@ -85,8 +107,16 @@ class OrdinalVdxfObject { } else this.type = type; - if (this.isDefinedByVdxfKey()) { - this.vdxfKey = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + if (!key) { + if (this.isDefinedByVdxfKey()) { + this.key = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + } + else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { + this.key = reader.readVarSlice().toString('utf8'); + } + } + else { + this.key = key; } this.version = reader.readVarInt(); const dataBuf = reader.readVarSlice(); @@ -100,18 +130,39 @@ class OrdinalVdxfObject { return { type: this.type ? this.type.toString() : undefined, version: this.version ? this.version.toString() : undefined, - vdxfkey: this.vdxfKey, - data: this.data ? this.isDefinedByVdxfKey() ? this.data.toString('hex') : this.data.toJson() : undefined + vdxfkey: this.key, + data: this.data ? this.isDefinedByCustomKey() ? this.data.toString('hex') : this.data.toJson() : undefined }; } - static createFromBuffer(buffer, offset) { + static createFromBuffer(buffer, offset, optimizeWithOrdinal = false, rootSystemName = pbaas_2.DEFAULT_VERUS_CHAINNAME) { if (buffer.length == 0) throw new Error("Cannot create request from empty buffer"); const reader = new bufferutils_1.default.BufferReader(buffer, offset); - const type = new bn_js_1.BN(reader.readCompactSize()); + let type = new bn_js_1.BN(reader.readCompactSize()); + const rootSystemId = (0, address_1.toIAddress)(rootSystemName); const Entity = (0, exports.getOrdinalVdxfObjectClassForType)(type); - const ord = new Entity(); - reader.offset = ord.fromBufferOptionalType(buffer, reader.offset, type); + const ord = new Entity({ type }); + let key; + if (optimizeWithOrdinal) { + let vdxfKey; + if (ord.isDefinedByVdxfKey()) { + key = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + vdxfKey = key; + } + else if (ord.isDefinedByTextVdxfKey() || ord.isDefinedByCurrencyOrId()) { + key = reader.readVarSlice().toString('utf8'); + if (ord.isDefinedByTextVdxfKey()) { + vdxfKey = (0, address_1.getDataKey)(key, undefined, rootSystemId).id; + } + else { + vdxfKey = (0, address_1.toIAddress)(key, rootSystemName); + } + } + if (OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.vdxfKeyHasOrdinal(vdxfKey)) { + type = new bn_js_1.BN(OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.getOrdinalForVdxfKey(vdxfKey)); + } + } + reader.offset = ord.fromBufferOptionalType(buffer, reader.offset, type, key); return { offset: reader.offset, obj: ord }; } } @@ -120,18 +171,23 @@ OrdinalVdxfObject.VERSION_INVALID = new bn_js_1.BN(0, 10); OrdinalVdxfObject.VERSION_FIRST = new bn_js_1.BN(1, 10); OrdinalVdxfObject.VERSION_LAST = new bn_js_1.BN(1, 10); OrdinalVdxfObject.VERSION_CURRENT = new bn_js_1.BN(1, 10); -OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR = new bn_js_1.BN(0, 10); -OrdinalVdxfObject.TYPE_INVOICE = new bn_js_1.BN(1, 10); -OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE = new bn_js_1.BN(102, 10); +OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR = new bn_js_1.BN(0, 10); +OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE = new bn_js_1.BN(1, 10); +OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = new bn_js_1.BN(102, 10); +OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new bn_js_1.BN(103, 10); +OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = new bn_js_1.BN(104, 10); +OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR.toNumber(), keys_1.DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid); +OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE.toNumber(), keys_1.VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid); class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject { constructor(request = { + type: OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR, data: Buffer.alloc(0), - vdxfKey: vdxf_1.NULL_ADDRESS + key: vdxf_1.NULL_ADDRESS }) { super({ - type: OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE, + type: request.type, data: request.data, - vdxfKey: request.vdxfKey + key: request.key }); } getDataByteLength() { @@ -145,7 +201,7 @@ class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject { } static fromJson(details) { return new GeneralTypeOrdinalVdxfObject({ - vdxfKey: details.vdxfkey, + key: details.vdxfkey, data: details.data ? Buffer.from(details.data, 'hex') : undefined }); } @@ -153,13 +209,13 @@ class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject { exports.GeneralTypeOrdinalVdxfObject = GeneralTypeOrdinalVdxfObject; class SerializableEntityOrdinalVdxfObject extends OrdinalVdxfObject { constructor(request, entity) { - if (!request || !request.type || !request.data) + if (!request || !request.type) throw new Error("Expected request with data and type"); super({ type: request.type }); this.entity = entity; - this.data = request.data; + this.data = request.data ? request.data : new entity(); } getDataByteLength() { return this.data.getByteLength(); @@ -178,7 +234,7 @@ class DataDescriptorOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObjec data: new pbaas_1.DataDescriptor() }) { super({ - type: OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR, + type: OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR, data: request.data }, pbaas_1.DataDescriptor); } @@ -194,7 +250,7 @@ class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObje data: new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails() }) { super({ - type: OrdinalVdxfObject.TYPE_INVOICE, + type: OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE, data: request.data }, VerusPayInvoiceDetails_1.VerusPayInvoiceDetails); } diff --git a/dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.d.ts b/dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.d.ts new file mode 100644 index 00000000..4dd43b8c --- /dev/null +++ b/dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.d.ts @@ -0,0 +1,13 @@ +declare class _OrdinalVdxfObjectOrdinalMap { + private keyToOrdinalMap; + private ordinalToKeyMap; + constructor(); + private updateOrdinalToKeyMap; + registerOrdinal(ordinal: number, vdxfKey: string): void; + isRecognizedOrdinal(ordinal: number): boolean; + vdxfKeyHasOrdinal(vdxfKey: string): boolean; + getOrdinalForVdxfKey(vdxfKey: string): number; + getVdxfKeyForOrdinal(ordinal: number): string; +} +export declare const OrdinalVdxfObjectOrdinalMap: _OrdinalVdxfObjectOrdinalMap; +export {}; diff --git a/dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.js b/dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.js new file mode 100644 index 00000000..7d069ac3 --- /dev/null +++ b/dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.js @@ -0,0 +1,34 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OrdinalVdxfObjectOrdinalMap = void 0; +// Singleton class that exists to create a bidirectional map of ordinals <-> vdxf keys +class _OrdinalVdxfObjectOrdinalMap { + constructor() { + this.keyToOrdinalMap = new Map(); + this.ordinalToKeyMap = new Map(); + } + updateOrdinalToKeyMap() { + this.ordinalToKeyMap = new Map(Array.from(this.keyToOrdinalMap, a => a.reverse())); + } + registerOrdinal(ordinal, vdxfKey) { + if (this.isRecognizedOrdinal(ordinal)) + throw new Error("Cannot register new ordinal for existing vdxfkey"); + if (this.vdxfKeyHasOrdinal(vdxfKey)) + throw new Error("Cannot register new key for existing ordinal"); + this.keyToOrdinalMap.set(vdxfKey, ordinal); + this.updateOrdinalToKeyMap(); + } + isRecognizedOrdinal(ordinal) { + return this.ordinalToKeyMap.has(ordinal); + } + vdxfKeyHasOrdinal(vdxfKey) { + return this.keyToOrdinalMap.has(vdxfKey); + } + getOrdinalForVdxfKey(vdxfKey) { + return this.keyToOrdinalMap.get(vdxfKey); + } + getVdxfKeyForOrdinal(ordinal) { + return this.ordinalToKeyMap.get(ordinal); + } +} +exports.OrdinalVdxfObjectOrdinalMap = new _OrdinalVdxfObjectOrdinalMap(); diff --git a/dist/vdxf/classes/request/GenericRequest.d.ts b/dist/vdxf/classes/request/GenericRequest.d.ts index 1b34ae87..01699538 100644 --- a/dist/vdxf/classes/request/GenericRequest.d.ts +++ b/dist/vdxf/classes/request/GenericRequest.d.ts @@ -7,6 +7,7 @@ export interface GenericRequestInterface { flags?: BigNumber; signature?: SignatureData; createdAt?: BigNumber; + salt?: Buffer; details: Array; } export type GenericRequestJson = { @@ -14,6 +15,7 @@ export type GenericRequestJson = { flags?: string; signature?: SignatureJsonDataInterface; createdat?: string; + salt?: string; details: Array; }; export declare class GenericRequest implements SerializableEntity { @@ -21,6 +23,7 @@ export declare class GenericRequest implements SerializableEntity { flags: BigNumber; signature?: SignatureData; createdAt?: BigNumber; + salt?: Buffer; details: Array; static VERSION_CURRENT: import("bn.js"); static VERSION_FIRSTVALID: import("bn.js"); @@ -30,23 +33,27 @@ export declare class GenericRequest implements SerializableEntity { static FLAG_HAS_CREATED_AT: import("bn.js"); static FLAG_MULTI_DETAILS: import("bn.js"); static FLAG_IS_TESTNET: import("bn.js"); + static FLAG_HAS_SALT: import("bn.js"); constructor(request?: GenericRequestInterface); isValidVersion(): boolean; isSigned(): boolean; hasMultiDetails(): boolean; hasCreatedAt(): boolean; + hasSalt(): boolean; isTestnet(): boolean; setSigned(): void; setHasMultiDetails(): void; setHasCreatedAt(): void; + setHasSalt(): void; setIsTestnet(): void; setFlags(): void; - private getRawDetailsSha256; + private getRawDataSha256; getDetailsHash(signedBlockheight: number): Buffer; getDetails(index?: number): OrdinalVdxfObject; private getDetailsBufferLength; private getDetailsBuffer; getByteLength(): number; + private toBufferOptionalSig; toBuffer(): Buffer; fromBuffer(buffer: Buffer, offset?: number): number; toString(): string; diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js index 9e772afc..c5388d7f 100644 --- a/dist/vdxf/classes/request/GenericRequest.js +++ b/dist/vdxf/classes/request/GenericRequest.js @@ -17,6 +17,7 @@ class GenericRequest { this.signature = request.signature; this.details = request.details; this.createdAt = request.createdAt; + this.salt = request.salt; if (request.flags) this.flags = request.flags; else @@ -39,6 +40,9 @@ class GenericRequest { hasCreatedAt() { return !!(this.flags.and(GenericRequest.FLAG_HAS_CREATED_AT).toNumber()); } + hasSalt() { + return !!(this.flags.and(GenericRequest.FLAG_HAS_SALT).toNumber()); + } isTestnet() { return !!(this.flags.and(GenericRequest.FLAG_IS_TESTNET).toNumber()); } @@ -51,6 +55,9 @@ class GenericRequest { setHasCreatedAt() { this.flags = this.flags.xor(GenericRequest.FLAG_HAS_CREATED_AT); } + setHasSalt() { + this.flags = this.flags.xor(GenericRequest.FLAG_HAS_SALT); + } setIsTestnet() { this.flags = this.flags.xor(GenericRequest.FLAG_IS_TESTNET); } @@ -61,18 +68,20 @@ class GenericRequest { this.setHasMultiDetails(); if (this.signature) this.setSigned(); + if (this.salt) + this.setHasSalt(); } - getRawDetailsSha256() { - return (0, crypto_1.createHash)("sha256").update(this.getDetailsBuffer()).digest(); + getRawDataSha256() { + return (0, crypto_1.createHash)("sha256").update(this.toBufferOptionalSig(false)).digest(); } getDetailsHash(signedBlockheight) { if (this.isSigned()) { - const sigHash = this.getRawDetailsSha256(); + const sigHash = this.getRawDataSha256(); this.signature.signature_hash = sigHash; return this.signature.getIdentityHash({ version: 2, hash_type: pbaas_1.EHashTypes.HASH_SHA256, height: signedBlockheight }); } else - return this.getRawDetailsSha256(); + return this.getRawDataSha256(); } getDetails(index = 0) { return this.details[index]; @@ -82,6 +91,11 @@ class GenericRequest { if (this.hasCreatedAt()) { length += varuint_1.default.encodingLength(this.createdAt.toNumber()); } + if (this.hasSalt()) { + const saltLen = this.salt.length; + length += varuint_1.default.encodingLength(saltLen); + length += saltLen; + } if (this.hasMultiDetails()) { length += varuint_1.default.encodingLength(this.details.length); for (const detail of this.details) { @@ -98,6 +112,9 @@ class GenericRequest { if (this.hasCreatedAt()) { writer.writeCompactSize(this.createdAt.toNumber()); } + if (this.hasSalt()) { + writer.writeVarSlice(this.salt); + } if (this.hasMultiDetails()) { writer.writeCompactSize(this.details.length); for (const detail of this.details) { @@ -119,16 +136,19 @@ class GenericRequest { length += this.getDetailsBufferLength(); return length; } - toBuffer() { + toBufferOptionalSig(includeSig = true) { const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); writer.writeCompactSize(this.version.toNumber()); writer.writeCompactSize(this.flags.toNumber()); - if (this.isSigned()) { + if (this.isSigned() && includeSig) { writer.writeSlice(this.signature.toBuffer()); } writer.writeSlice(this.getDetailsBuffer()); return writer.buffer; } + toBuffer() { + return this.toBufferOptionalSig(true); + } fromBuffer(buffer, offset) { if (buffer.length == 0) throw new Error("Cannot create request from empty buffer"); @@ -143,6 +163,9 @@ class GenericRequest { if (this.hasCreatedAt()) { this.createdAt = new bn_js_1.BN(reader.readCompactSize()); } + if (this.hasSalt()) { + this.salt = reader.readVarSlice(); + } if (this.hasMultiDetails()) { this.details = []; const numItems = reader.readCompactSize(); @@ -204,3 +227,4 @@ GenericRequest.FLAG_SIGNED = new bn_js_1.BN(1, 10); GenericRequest.FLAG_HAS_CREATED_AT = new bn_js_1.BN(2, 10); GenericRequest.FLAG_MULTI_DETAILS = new bn_js_1.BN(4, 10); GenericRequest.FLAG_IS_TESTNET = new bn_js_1.BN(8, 10); +GenericRequest.FLAG_HAS_SALT = new bn_js_1.BN(16, 10); diff --git a/dist/vdxf/keys.d.ts b/dist/vdxf/keys.d.ts index 343f642b..8356a346 100644 --- a/dist/vdxf/keys.d.ts +++ b/dist/vdxf/keys.d.ts @@ -11,6 +11,7 @@ export interface VDXFKeyInterface { indexid?: string; } export declare const VERUSPAY_INVOICE_VDXF_KEY: VDXFKeyInterface; +export declare const VERUSPAY_INVOICE_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const GENERIC_REQUEST_DEEPLINK_VDXF_KEY: VDXFKeyInterface; export declare const IDENTITY_UPDATE_REQUEST_VDXF_KEY: VDXFKeyInterface; export declare const IDENTITY_UPDATE_RESPONSE_VDXF_KEY: VDXFKeyInterface; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index fec382a0..1ba14ee9 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; -exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = void 0; +exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; +exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = void 0; exports.VERUSPAY_INVOICE_VDXF_KEY = { hash160result: "628efc28c2e2d40050e1a9de7a93e7ddf2aa0076", qualifiedname: { @@ -10,14 +10,23 @@ exports.VERUSPAY_INVOICE_VDXF_KEY = { }, vdxfid: "iEETy7La3FTN2Sd2hNRgepek5S8x8eeUeQ" }; +exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = { + "hash160result": "743a23f19531686d70b26a2e220b50a9c70d78a3", + "indexid": "xPCyrdbnb89NftNSuPaVFENwzGDmAukVbS", + "qualifiedname": { + "name": "veruspay.vrsc::invoice.details", + "namespace": "iAisVse7piEiE2VsixZx4SARyHzSpxYxgq" + }, + "vdxfid": "iJNsPqAhjovi3iVR3hvLGqrQxcCkHq9n9H" +}; exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = { - "hash160result": "4ba3719af89a7225998a3c62140160f4799822e1", - "indexid": "xUq3NnSiUW7icegVTtnZeuYwiQDhdoykiY", + "hash160result": "bc05c4263031cc791296fa8bd15553ccef3de4ba", + "indexid": "xRLq15vpenCUGVpmZgqEtoygZW2b32oVgX", "qualifiedname": { "name": "vrsc::request.generic", "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, - "vdxfid": "iPzvuz1ddBu3zUoTcD8QgX2QgkCgmXH698" + "vdxfid": "iLWiYHVjoTyoeKwji1B5vRT9Xr1aA9yyvX" }; exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = { "hash160result": "0bcef8b06c211828d16dc038e4d34d097aeb64e4", diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts index d7335b97..a4945357 100644 --- a/src/__tests__/vdxf/genericrequest.test.ts +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -22,14 +22,14 @@ describe('GenericRequest — buffer / URI / QR operations', () => { function rawDetailsSha256(req: GenericRequest): Buffer { // replicate the same behavior as getRawDetailsSha256() - const buf = req['getDetailsBuffer'](); // call internal method + const buf = req['toBufferOptionalSig'](false); // call internal method return createHash("sha256").update(buf).digest(); } it('round trips with a single detail (no signature / createdAt)', () => { const detail = new GeneralTypeOrdinalVdxfObject({ data: Buffer.from('cafebabe', 'hex'), - vdxfKey: DEFAULT_VERUS_CHAINID + key: DEFAULT_VERUS_CHAINID }); const req = new GenericRequest({ details: [detail] }); @@ -44,18 +44,18 @@ describe('GenericRequest — buffer / URI / QR operations', () => { const d2 = round.getDetails(0); expect(d2).toBeInstanceOf(GeneralTypeOrdinalVdxfObject); expect((d2 as GeneralTypeOrdinalVdxfObject).data).toEqual(detail.data); - expect((d2 as GeneralTypeOrdinalVdxfObject).vdxfKey).toEqual(detail.vdxfKey); + expect((d2 as GeneralTypeOrdinalVdxfObject).key).toEqual(detail.key); expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); }); it('round trips with multiple details', () => { const d1 = new GeneralTypeOrdinalVdxfObject({ data: Buffer.from('aa', 'hex'), - vdxfKey: DEFAULT_VERUS_CHAINID + key: DEFAULT_VERUS_CHAINID }); const d2 = new GeneralTypeOrdinalVdxfObject({ data: Buffer.from('bb', 'hex'), - vdxfKey: DEFAULT_VERUS_CHAINID + key: DEFAULT_VERUS_CHAINID }); const req = new GenericRequest({ details: [d1, d2] }); expect(req.hasMultiDetails()).toBe(true); @@ -82,7 +82,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { }); const detail = new GeneralTypeOrdinalVdxfObject({ data: Buffer.from('abcd', 'hex'), - vdxfKey: DEFAULT_VERUS_CHAINID + key: DEFAULT_VERUS_CHAINID }); const createdAt = new BN(9999); const req = new GenericRequest({ @@ -105,7 +105,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { it('toString / fromQrString consistency', () => { const detail = new GeneralTypeOrdinalVdxfObject({ data: Buffer.from('feed', 'hex'), - vdxfKey: DEFAULT_VERUS_CHAINID + key: DEFAULT_VERUS_CHAINID }); const req = new GenericRequest({ details: [detail] }); @@ -119,7 +119,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { it('deeplink URI round trip', () => { const detail = new GeneralTypeOrdinalVdxfObject({ data: Buffer.from('face', 'hex'), - vdxfKey: DEFAULT_VERUS_CHAINID + key: DEFAULT_VERUS_CHAINID }); const req = new GenericRequest({ details: [detail] }); const uri = req.toWalletDeeplinkUri(); @@ -136,7 +136,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { it('fromQrString should parse correctly', () => { const detail = new GeneralTypeOrdinalVdxfObject({ data: Buffer.from('bead', 'hex'), - vdxfKey: DEFAULT_VERUS_CHAINID + key: DEFAULT_VERUS_CHAINID }); const req = new GenericRequest({ details: [detail] }); const qr = req.toQrString(); @@ -156,7 +156,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { it("returns raw SHA256 when not signed", () => { const detail = new GeneralTypeOrdinalVdxfObject({ data: Buffer.from("abcd", "hex"), - vdxfKey: DEFAULT_VERUS_CHAINID + key: DEFAULT_VERUS_CHAINID }); const req = new GenericRequest({ details: [detail] }); expect(req.isSigned()).toBe(false); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 9e12481f..87ffd80b 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -40,17 +40,17 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { it('should serialize / deserialize a GeneralTypeOrdinalVdxfObject (opaque buffer) via buffer', () => { const sample = Buffer.from('deadbeef', 'hex'); - const obj = new GeneralTypeOrdinalVdxfObject({ data: sample, vdxfKey: DEFAULT_VERUS_CHAINID }); + const obj = new GeneralTypeOrdinalVdxfObject({ data: sample, key: DEFAULT_VERUS_CHAINID }); // check some properties expect(obj.isDefinedByVdxfKey()).toBe(true); expect(obj.data).toEqual(sample); - expect(obj.vdxfKey).toEqual(DEFAULT_VERUS_CHAINID); + expect(obj.key).toEqual(DEFAULT_VERUS_CHAINID); const round = roundTripBuffer(obj); expect(round).toBeInstanceOf(GeneralTypeOrdinalVdxfObject); expect((round as GeneralTypeOrdinalVdxfObject).data).toEqual(sample); - expect(((round as GeneralTypeOrdinalVdxfObject).vdxfKey)).toEqual(DEFAULT_VERUS_CHAINID); + expect(((round as GeneralTypeOrdinalVdxfObject).key)).toEqual(DEFAULT_VERUS_CHAINID); // Their JSON should match hex const j = obj.toJson(); @@ -58,7 +58,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const roundJ = roundTripJson(obj); expect(roundJ).toBeInstanceOf(GeneralTypeOrdinalVdxfObject); expect((roundJ as GeneralTypeOrdinalVdxfObject).data).toEqual(sample); - expect(((roundJ as GeneralTypeOrdinalVdxfObject).vdxfKey)).toEqual(DEFAULT_VERUS_CHAINID); + expect(((roundJ as GeneralTypeOrdinalVdxfObject).key)).toEqual(DEFAULT_VERUS_CHAINID); }); it('should serialize / deserialize a DataDescriptorOrdinalVdxfObject via buffer', () => { @@ -141,20 +141,20 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { }); it('getOrdinalVdxfObjectClassForType should map to correct classes', () => { - expect(getOrdinalVdxfObjectClassForType(OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR)) + expect(getOrdinalVdxfObjectClassForType(OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR)) .toBe(DataDescriptorOrdinalVdxfObject); - expect(getOrdinalVdxfObjectClassForType(OrdinalVdxfObject.TYPE_INVOICE)) + expect(getOrdinalVdxfObjectClassForType(OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE)) .toBe(VerusPayInvoiceOrdinalVdxfObject); - expect(getOrdinalVdxfObjectClassForType(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE)) + expect(getOrdinalVdxfObjectClassForType(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR)) .toBe(GeneralTypeOrdinalVdxfObject); // unrecognized expect(() => getOrdinalVdxfObjectClassForType(new BN(999))).toThrow(); }); - it('base OrdinalVdxfObject buffer round trip (no vdxfKey path)', () => { - // This tests the fallback when no vdxfKey is provided - const base = new OrdinalVdxfObject({ type: OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR }); + it('base OrdinalVdxfObject buffer round trip (no key path)', () => { + // This tests the fallback when no key is provided + const base = new OrdinalVdxfObject({ type: OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR }); const buf = base.toBuffer(); const parsed = new OrdinalVdxfObject(); parsed.fromBuffer(buf); diff --git a/src/vdxf/classes/OrdinalVdxfObject.ts b/src/vdxf/classes/OrdinalVdxfObject.ts index b9f5767f..88d12789 100644 --- a/src/vdxf/classes/OrdinalVdxfObject.ts +++ b/src/vdxf/classes/OrdinalVdxfObject.ts @@ -3,16 +3,19 @@ import { BN } from 'bn.js'; import { BigNumber } from "../../utils/types/BigNumber"; import { SerializableDataEntity, SerializableEntity } from "../../utils/types/SerializableEntity"; import varuint from "../../utils/varuint"; -import { fromBase58Check, toBase58Check } from "../../utils/address"; +import { fromBase58Check, getDataKey, toBase58Check, toIAddress } from "../../utils/address"; import varint from "../../utils/varint"; import { HASH160_BYTE_LENGTH, I_ADDR_VERSION, NULL_ADDRESS } from "../../constants/vdxf"; import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "./payment/VerusPayInvoiceDetails"; +import { OrdinalVdxfObjectOrdinalMap } from "./OrdinalVdxfObjectOrdinalMap"; +import { DATA_TYPE_OBJECT_DATADESCRIPTOR, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../keys"; +import { DEFAULT_VERUS_CHAINID, DEFAULT_VERUS_CHAINNAME } from "../../constants/pbaas"; export interface OrdinalVdxfObjectInterfaceTemplate { version?: BigNumber; type?: BigNumber; - vdxfKey?: string; + key?: string; data?: T; } @@ -35,16 +38,20 @@ export type OrdinalVdxfObjectDataClass = new (...args: any[]) => OrdinalVdxfObje export type OrdinalVdxfObjectClass = new (...args: any[]) => OrdinalVdxfObject; export const getOrdinalVdxfObjectClassForType = (type: BigNumber): OrdinalVdxfObjectClass => { - if (type.eq(OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR)) return DataDescriptorOrdinalVdxfObject; - else if (type.eq(OrdinalVdxfObject.TYPE_INVOICE)) return VerusPayInvoiceOrdinalVdxfObject; - else if (type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE)) return GeneralTypeOrdinalVdxfObject; + if (type.eq(OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR)) return DataDescriptorOrdinalVdxfObject; + else if (type.eq(OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE)) return VerusPayInvoiceOrdinalVdxfObject; + else if ( + type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR) || + type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING) || + type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY) + ) return GeneralTypeOrdinalVdxfObject; else throw new Error("Unrecognized vdxf ordinal object type"); } export class OrdinalVdxfObject implements SerializableEntity { version: BigNumber; type: BigNumber; - vdxfKey?: string; + key?: string; data?: BufferOrOrdinalVdxfObjectReservedData; static VERSION_INVALID = new BN(0, 10) @@ -52,25 +59,27 @@ export class OrdinalVdxfObject implements SerializableEntity { static VERSION_LAST = new BN(1, 10) static VERSION_CURRENT = new BN(1, 10) - static TYPE_DATA_DESCRIPTOR = new BN(0, 10); - static TYPE_INVOICE = new BN(1, 10); + static ORDINAL_DATA_DESCRIPTOR = new BN(0, 10); + static ORDINAL_VERUSPAY_INVOICE = new BN(1, 10); - static VDXF_OBJECT_RESERVED_BYTE = new BN(102, 10); + static VDXF_OBJECT_RESERVED_BYTE_I_ADDR = new BN(102, 10); + static VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new BN(103, 10); + static VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = new BN(104, 10); constructor( request: OrdinalVdxfObjectInterfaceTemplate = { - type: OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR + type: OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR } ) { - if (request.vdxfKey) { - this.type = OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE; - this.vdxfKey = request.vdxfKey; + if (request.key) { + this.type = OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR; + this.key = request.key; if (request.data) { this.data = request.data; } else this.data = Buffer.alloc(0); } else if (request.type == null) { - this.type = OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR; + this.type = OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR; } else { this.type = request.type; } @@ -80,7 +89,19 @@ export class OrdinalVdxfObject implements SerializableEntity { } isDefinedByVdxfKey() { - return this.type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE); + return this.type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR); + } + + isDefinedByTextVdxfKey() { + return this.type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING); + } + + isDefinedByCurrencyOrId() { + return this.type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY); + } + + isDefinedByCustomKey() { + return this.isDefinedByCurrencyOrId() || this.isDefinedByTextVdxfKey() || this.isDefinedByVdxfKey(); } getDataByteLength(): number { @@ -99,7 +120,12 @@ export class OrdinalVdxfObject implements SerializableEntity { length += varuint.encodingLength(this.type.toNumber()); if (this.isDefinedByVdxfKey()) { - length += fromBase58Check(this.vdxfKey).hash.length; + length += fromBase58Check(this.key).hash.length; + } else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { + const utf8Key = Buffer.from(this.key, 'utf8'); + + length += varuint.encodingLength(utf8Key.length); + length += utf8Key.length; } length += varint.encodingLength(this.version); @@ -120,7 +146,9 @@ export class OrdinalVdxfObject implements SerializableEntity { writer.writeCompactSize(this.type.toNumber()); if (this.isDefinedByVdxfKey()) { - writer.writeSlice(fromBase58Check(this.vdxfKey).hash); + writer.writeSlice(fromBase58Check(this.key).hash); + } else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { + writer.writeVarSlice(Buffer.from(this.key, 'utf8')); } writer.writeVarInt(this.version); @@ -130,7 +158,7 @@ export class OrdinalVdxfObject implements SerializableEntity { return writer.buffer; } - fromBufferOptionalType(buffer: Buffer, offset?: number, type?: BigNumber): number { + fromBufferOptionalType(buffer: Buffer, offset?: number, type?: BigNumber, key?: string): number { if (buffer.length == 0) throw new Error("Cannot create request from empty buffer"); const reader = new bufferutils.BufferReader(buffer, offset); @@ -139,8 +167,14 @@ export class OrdinalVdxfObject implements SerializableEntity { this.type = new BN(reader.readCompactSize()); } else this.type = type; - if (this.isDefinedByVdxfKey()) { - this.vdxfKey = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); + if (!key) { + if (this.isDefinedByVdxfKey()) { + this.key = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); + } else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { + this.key = reader.readVarSlice().toString('utf8'); + } + } else { + this.key = key } this.version = reader.readVarInt(); @@ -159,40 +193,73 @@ export class OrdinalVdxfObject implements SerializableEntity { return { type: this.type ? this.type.toString() : undefined, version: this.version ? this.version.toString() : undefined, - vdxfkey: this.vdxfKey, - data: this.data ? this.isDefinedByVdxfKey() ? this.data.toString('hex') : (this.data as OrdinalVdxfObjectReservedData).toJson() : undefined + vdxfkey: this.key, + data: this.data ? this.isDefinedByCustomKey() ? this.data.toString('hex') : (this.data as OrdinalVdxfObjectReservedData).toJson() : undefined }; } - static createFromBuffer(buffer: Buffer, offset?: number): { offset: number, obj: OrdinalVdxfObject } { + static createFromBuffer( + buffer: Buffer, + offset?: number, + optimizeWithOrdinal: boolean = false, + rootSystemName: string = DEFAULT_VERUS_CHAINNAME + ): { offset: number, obj: OrdinalVdxfObject } { if (buffer.length == 0) throw new Error("Cannot create request from empty buffer"); const reader = new bufferutils.BufferReader(buffer, offset); - const type = new BN(reader.readCompactSize()); + let type = new BN(reader.readCompactSize()); + const rootSystemId = toIAddress(rootSystemName); const Entity = getOrdinalVdxfObjectClassForType(type); - const ord = new Entity(); + const ord = new Entity({ type }); + + let key: string; + + if (optimizeWithOrdinal) { + let vdxfKey: string; + + if (ord.isDefinedByVdxfKey()) { + key = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); + vdxfKey = key; + } else if (ord.isDefinedByTextVdxfKey() || ord.isDefinedByCurrencyOrId()) { + key = reader.readVarSlice().toString('utf8'); + + if (ord.isDefinedByTextVdxfKey()) { + vdxfKey = getDataKey(key, undefined, rootSystemId).id; + } else { + vdxfKey = toIAddress(key, rootSystemName); + } + } + + if (OrdinalVdxfObjectOrdinalMap.vdxfKeyHasOrdinal(vdxfKey)) { + type = new BN(OrdinalVdxfObjectOrdinalMap.getOrdinalForVdxfKey(vdxfKey)); + } + } - reader.offset = ord.fromBufferOptionalType(buffer, reader.offset, type); + reader.offset = ord.fromBufferOptionalType(buffer, reader.offset, type, key); return { offset: reader.offset, obj: ord }; } } +OrdinalVdxfObjectOrdinalMap.registerOrdinal(OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR.toNumber(), DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid); +OrdinalVdxfObjectOrdinalMap.registerOrdinal(OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE.toNumber(), VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid); + export class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { data: Buffer; - vdxfKey: string; + key: string; constructor( request: OrdinalVdxfObjectInterfaceTemplate = { + type: OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR, data: Buffer.alloc(0), - vdxfKey: NULL_ADDRESS + key: NULL_ADDRESS } ) { super({ - type: OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE, + type: request.type, data: request.data, - vdxfKey: request.vdxfKey + key: request.key }) } @@ -210,7 +277,7 @@ export class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements S static fromJson(details: OrdinalVdxfObjectJson): GeneralTypeOrdinalVdxfObject { return new GeneralTypeOrdinalVdxfObject({ - vdxfKey: details.vdxfkey, + key: details.vdxfkey, data: details.data ? Buffer.from(details.data as string, 'hex') : undefined }); } @@ -224,14 +291,14 @@ export class SerializableEntityOrdinalVdxfObject extends OrdinalVdxfObject imple request: OrdinalVdxfObjectInterfaceTemplate, entity: OrdinalVdxfObjectDataClass ) { - if (!request || !request.type || !request.data) throw new Error("Expected request with data and type") + if (!request || !request.type) throw new Error("Expected request with data and type") super({ type: request.type }); this.entity = entity; - this.data = request.data; + this.data = request.data ? request.data : new entity(); } getDataByteLength(): number { @@ -258,7 +325,7 @@ export class DataDescriptorOrdinalVdxfObject extends SerializableEntityOrdinalVd ) { super( { - type: OrdinalVdxfObject.TYPE_DATA_DESCRIPTOR, + type: OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR, data: request.data }, DataDescriptor @@ -282,7 +349,7 @@ export class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalV ) { super( { - type: OrdinalVdxfObject.TYPE_INVOICE, + type: OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE, data: request.data }, VerusPayInvoiceDetails diff --git a/src/vdxf/classes/OrdinalVdxfObjectOrdinalMap.ts b/src/vdxf/classes/OrdinalVdxfObjectOrdinalMap.ts new file mode 100644 index 00000000..a187ce63 --- /dev/null +++ b/src/vdxf/classes/OrdinalVdxfObjectOrdinalMap.ts @@ -0,0 +1,40 @@ +// Singleton class that exists to create a bidirectional map of ordinals <-> vdxf keys +class _OrdinalVdxfObjectOrdinalMap { + private keyToOrdinalMap: Map; + private ordinalToKeyMap: Map; + + constructor() { + this.keyToOrdinalMap = new Map(); + this.ordinalToKeyMap = new Map(); + } + + private updateOrdinalToKeyMap() { + this.ordinalToKeyMap = new Map(Array.from(this.keyToOrdinalMap, a => a.reverse() as [number,string])); + } + + registerOrdinal(ordinal: number, vdxfKey: string): void { + if (this.isRecognizedOrdinal(ordinal)) throw new Error("Cannot register new ordinal for existing vdxfkey"); + if (this.vdxfKeyHasOrdinal(vdxfKey)) throw new Error("Cannot register new key for existing ordinal"); + + this.keyToOrdinalMap.set(vdxfKey, ordinal); + this.updateOrdinalToKeyMap(); + } + + isRecognizedOrdinal(ordinal: number): boolean { + return this.ordinalToKeyMap.has(ordinal); + } + + vdxfKeyHasOrdinal(vdxfKey: string): boolean { + return this.keyToOrdinalMap.has(vdxfKey); + } + + getOrdinalForVdxfKey(vdxfKey: string): number { + return this.keyToOrdinalMap.get(vdxfKey); + } + + getVdxfKeyForOrdinal(ordinal: number): string { + return this.ordinalToKeyMap.get(ordinal); + } +} + +export const OrdinalVdxfObjectOrdinalMap = new _OrdinalVdxfObjectOrdinalMap(); \ No newline at end of file diff --git a/src/vdxf/classes/request/GenericRequest.ts b/src/vdxf/classes/request/GenericRequest.ts index 39647fc9..f3f24bec 100644 --- a/src/vdxf/classes/request/GenericRequest.ts +++ b/src/vdxf/classes/request/GenericRequest.ts @@ -11,14 +11,13 @@ import { OrdinalVdxfObject, OrdinalVdxfObjectJson } from "../OrdinalVdxfObject"; import varuint from "../../../utils/varuint"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import { createHash } from "crypto"; -import { fromBase58Check } from "../../../utils/address"; -import { VERUS_DATA_SIGNATURE_PREFIX } from "../../../constants/vdxf"; export interface GenericRequestInterface { version?: BigNumber; flags?: BigNumber; signature?: SignatureData; createdAt?: BigNumber; + salt?: Buffer; details: Array; } @@ -27,6 +26,7 @@ export type GenericRequestJson = { flags?: string; signature?: SignatureJsonDataInterface; createdat?: string; + salt?: string; details: Array; } @@ -35,6 +35,7 @@ export class GenericRequest implements SerializableEntity { flags: BigNumber; signature?: SignatureData; createdAt?: BigNumber; + salt?: Buffer; // var length buffer details: Array; static VERSION_CURRENT = new BN(1, 10) @@ -46,6 +47,7 @@ export class GenericRequest implements SerializableEntity { static FLAG_HAS_CREATED_AT = new BN(2, 10) static FLAG_MULTI_DETAILS = new BN(4, 10) static FLAG_IS_TESTNET = new BN(8, 10) + static FLAG_HAS_SALT = new BN(16, 10) constructor( request: GenericRequestInterface = { @@ -56,6 +58,7 @@ export class GenericRequest implements SerializableEntity { this.signature = request.signature; this.details = request.details; this.createdAt = request.createdAt; + this.salt = request.salt; if (request.flags) this.flags = request.flags; else this.flags = GenericRequest.BASE_FLAGS; @@ -82,6 +85,10 @@ export class GenericRequest implements SerializableEntity { return !!(this.flags.and(GenericRequest.FLAG_HAS_CREATED_AT).toNumber()); } + hasSalt() { + return !!(this.flags.and(GenericRequest.FLAG_HAS_SALT).toNumber()); + } + isTestnet() { return !!(this.flags.and(GenericRequest.FLAG_IS_TESTNET).toNumber()); } @@ -98,6 +105,10 @@ export class GenericRequest implements SerializableEntity { this.flags = this.flags.xor(GenericRequest.FLAG_HAS_CREATED_AT); } + setHasSalt() { + this.flags = this.flags.xor(GenericRequest.FLAG_HAS_SALT); + } + setIsTestnet() { this.flags = this.flags.xor(GenericRequest.FLAG_IS_TESTNET); } @@ -106,19 +117,20 @@ export class GenericRequest implements SerializableEntity { if (this.createdAt) this.setHasCreatedAt(); if (this.details && this.details.length > 1) this.setHasMultiDetails(); if (this.signature) this.setSigned(); + if (this.salt) this.setHasSalt(); } - private getRawDetailsSha256() { - return createHash("sha256").update(this.getDetailsBuffer()).digest(); + private getRawDataSha256() { + return createHash("sha256").update(this.toBufferOptionalSig(false)).digest(); } getDetailsHash(signedBlockheight: number): Buffer { if (this.isSigned()) { - const sigHash = this.getRawDetailsSha256(); + const sigHash = this.getRawDataSha256(); this.signature.signature_hash = sigHash; return this.signature.getIdentityHash({ version: 2, hash_type: EHashTypes.HASH_SHA256, height: signedBlockheight }); - } else return this.getRawDetailsSha256() + } else return this.getRawDataSha256() } getDetails(index = 0): OrdinalVdxfObject { @@ -132,6 +144,13 @@ export class GenericRequest implements SerializableEntity { length += varuint.encodingLength(this.createdAt.toNumber()); } + if (this.hasSalt()) { + const saltLen = this.salt.length; + + length += varuint.encodingLength(saltLen); + length += saltLen; + } + if (this.hasMultiDetails()) { length += varuint.encodingLength(this.details.length); @@ -154,9 +173,13 @@ export class GenericRequest implements SerializableEntity { writer.writeCompactSize(this.createdAt.toNumber()); } - if (this.hasMultiDetails()) { + if (this.hasSalt()) { + writer.writeVarSlice(this.salt); + } + + if (this.hasMultiDetails()) { writer.writeCompactSize(this.details.length); - + for (const detail of this.details) { writer.writeSlice(detail.toBuffer()); } @@ -182,7 +205,7 @@ export class GenericRequest implements SerializableEntity { return length; } - toBuffer(): Buffer { + private toBufferOptionalSig(includeSig = true) { const writer = new bufferutils.BufferWriter( Buffer.alloc(this.getByteLength()) ); @@ -190,7 +213,7 @@ export class GenericRequest implements SerializableEntity { writer.writeCompactSize(this.version.toNumber()); writer.writeCompactSize(this.flags.toNumber()); - if (this.isSigned()) { + if (this.isSigned() && includeSig) { writer.writeSlice(this.signature!.toBuffer()); } @@ -199,6 +222,10 @@ export class GenericRequest implements SerializableEntity { return writer.buffer; } + toBuffer(): Buffer { + return this.toBufferOptionalSig(true); + } + fromBuffer(buffer: Buffer, offset?: number): number { if (buffer.length == 0) throw new Error("Cannot create request from empty buffer"); @@ -217,6 +244,10 @@ export class GenericRequest implements SerializableEntity { this.createdAt = new BN(reader.readCompactSize()); } + if (this.hasSalt()) { + this.salt = reader.readVarSlice(); + } + if (this.hasMultiDetails()) { this.details = []; diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index 5e8567c5..34f10d7f 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -20,14 +20,24 @@ export const VERUSPAY_INVOICE_VDXF_KEY: VDXFKeyInterface = { vdxfid: "iEETy7La3FTN2Sd2hNRgepek5S8x8eeUeQ" } +export const VERUSPAY_INVOICE_DETAILS_VDXF_KEY: VDXFKeyInterface = { + "hash160result": "743a23f19531686d70b26a2e220b50a9c70d78a3", + "indexid": "xPCyrdbnb89NftNSuPaVFENwzGDmAukVbS", + "qualifiedname": { + "name": "veruspay.vrsc::invoice.details", + "namespace": "iAisVse7piEiE2VsixZx4SARyHzSpxYxgq" + }, + "vdxfid": "iJNsPqAhjovi3iVR3hvLGqrQxcCkHq9n9H" +} + export const GENERIC_REQUEST_DEEPLINK_VDXF_KEY: VDXFKeyInterface = { - "hash160result": "4ba3719af89a7225998a3c62140160f4799822e1", - "indexid": "xUq3NnSiUW7icegVTtnZeuYwiQDhdoykiY", + "hash160result": "bc05c4263031cc791296fa8bd15553ccef3de4ba", + "indexid": "xRLq15vpenCUGVpmZgqEtoygZW2b32oVgX", "qualifiedname": { "name": "vrsc::request.generic", "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, - "vdxfid": "iPzvuz1ddBu3zUoTcD8QgX2QgkCgmXH698" + "vdxfid": "iLWiYHVjoTyoeKwji1B5vRT9Xr1aA9yyvX" } export const IDENTITY_UPDATE_REQUEST_VDXF_KEY: VDXFKeyInterface = { From 02192011a159af6577c702562208120bdb6f6f98 Mon Sep 17 00:00:00 2001 From: monkins Date: Mon, 20 Oct 2025 17:31:48 +0100 Subject: [PATCH 020/123] Merge types to send data to be signed and to recieved signed data --- .../requestobjects/DataTransferDetails.ts | 222 ++++++++++++++++++ .../requestobjects/SignDataRequestDetails.ts | 198 ---------------- 2 files changed, 222 insertions(+), 198 deletions(-) create mode 100644 src/vdxf/classes/requestobjects/DataTransferDetails.ts delete mode 100644 src/vdxf/classes/requestobjects/SignDataRequestDetails.ts diff --git a/src/vdxf/classes/requestobjects/DataTransferDetails.ts b/src/vdxf/classes/requestobjects/DataTransferDetails.ts new file mode 100644 index 00000000..2c5a58d8 --- /dev/null +++ b/src/vdxf/classes/requestobjects/DataTransferDetails.ts @@ -0,0 +1,222 @@ +/** + * PersonalUserDataDetails - Class for handling personal user data transfer requests + * + * This class is used when an application is requesting to transfer or receive personal + * user data. The request includes: + * - Data objects as DataDescriptor instances containing the user's personal data + * - Optional statements array for additional context or transfer conditions + * - Optional signature data for verification of the transfer + * - Flags indicating transfer direction and optional components + * + * The user's wallet can use these parameters to present the data transfer request + * to the user, showing what personal data is being transferred, any associated + * statements or conditions, and whether it's for the user's signature or being + * transmitted to/from the user. This enables secure, user-controlled personal + * data sharing with clear visibility into what data is being transferred. + */ + +import { BigNumber } from '../../../utils/types/BigNumber'; +import { BN } from 'bn.js'; +import varint from '../../../utils/varint'; +import varuint from '../../../utils/varuint'; +import bufferutils from '../../../utils/bufferutils'; +const { BufferReader, BufferWriter } = bufferutils; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { DataDescriptor, DataDescriptorJson } from '../../../pbaas'; + +export interface PersonalUserDataDetailsJson { + version: number; + flags: number; + signableobjects: Array; // Array of signable data objects + statements?: Array; + signature?: VerifableSignatureDataJson +} + +export class PersonalUserDataDetails implements SerializableEntity { + + static VERSION_INVALID = new BN(0); + static FIRST_VERSION = new BN(1); + static LAST_VERSION = new BN(1); + static DEFAULT_VERSION = new BN(1); + + // types of data to sign + static HAS_STATEMENTS = new BN(1); + static HAS_SIGNATURE = new BN(2); + static FOR_USERS_SIGNATURE = new BN(4); + static FOR_TRANSMITTAL_TO_USER = new BN(8); + static HAS_URL_FOR_DOWNLOAD = new BN(16); + + version: BigNumber; + flags: BigNumber; + signableObjects: Array; + statements?: Array; + signature?: VerifableSignatureData; + + constructor(data?: PersonalUserDataDetails) { + this.version = data?.version || PersonalUserDataDetails.DEFAULT_VERSION; + this.flags = data?.flags || new BN(0); + this.signableObjects = data?.signableObjects || []; + this.statements = data?.statements || []; + this.signature = data?.signature || undefined; + } + + setFlags(): void { + // Initialize flags if not already a BigNumber + if (!BN.isBN(this.flags)) { + this.flags = new BN(0); + } + if (this.statements && this.statements.length > 0) { + this.flags = this.flags.or(PersonalUserDataDetails.HAS_STATEMENTS); + } + + if (this.signature ) { + this.flags = this.flags.or(PersonalUserDataDetails.HAS_SIGNATURE); + } + } + + hasStatements(): boolean { + return this.flags.and(PersonalUserDataDetails.HAS_STATEMENTS).eq(PersonalUserDataDetails.HAS_STATEMENTS); + } + + hasSignature(): boolean { + return this.flags.and(PersonalUserDataDetails.HAS_SIGNATURE).eq(PersonalUserDataDetails.HAS_SIGNATURE); + } + + isValid(): boolean { + let valid = this.version.gte(PersonalUserDataDetails.FIRST_VERSION) && + this.version.lte(PersonalUserDataDetails.LAST_VERSION); + + // Check that we have signable objects + valid &&= this.signableObjects.length > 0; + if (this.hasStatements()) { + valid &&= this.statements !== undefined && this.statements.length > 0; + } + + if (this.hasSignature()) { + valid &&= this.signature !== undefined && this.signature.isValid(); + } + + return valid; + } + + getByteLength(): number { + this.setFlags(); + let length = 0; + + length += varint.encodingLength(this.flags); + + // Add length for signableObjects array + length += varuint.encodingLength(this.signableObjects.length); + + for (const obj of this.signableObjects) { + + length += obj.getByteLength(); + } + + // Add signer length if present + if (this.hasStatements()) { + length += varuint.encodingLength(this.statements.length); + for (const stmt of this.statements) { + length += varuint.encodingLength(Buffer.byteLength(stmt, 'utf8')); + length += Buffer.byteLength(stmt, 'utf8'); + } + } + if (this.hasSignature() && this.signature) { + length += this.signature.getByteLength(); + } + + return length; + } + + toBuffer(): Buffer { + this.setFlags(); + + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + + writer.writeVarInt(this.flags); + + // Write signableObjects array + writer.writeCompactSize(this.signableObjects.length); + + for (const obj of this.signableObjects) { + writer.writeSlice(obj.toBuffer()); + } + + // Write statements if present + if (this.hasStatements()) { + for (const stmt of this.statements) { + writer.writeVarSlice(Buffer.from(stmt, 'utf8')); + } + } + + if (this.hasSignature() && this.signature) { + writer.writeSlice(this.signature.toBuffer()); + } + + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset?: number): number { + const reader = new BufferReader(buffer, offset); + + this.flags = reader.readVarInt(); + + // Read signableObjects array + const objectCount = reader.readCompactSize(); + this.signableObjects = []; + + for (let i = 0; i < objectCount; i++) { + const obj = new DataDescriptor(); + reader.offset = obj.fromBuffer(reader.buffer, reader.offset); + this.signableObjects.push(obj); + } + + // Read statements if flag is set + if (this.hasStatements()) { + this.statements = []; + const statementCount = reader.readCompactSize(); + for (let i = 0; i < statementCount; i++) { + const stmt = reader.readVarSlice().toString('utf8'); + this.statements.push(stmt); + } + } + + if (this.hasSignature()) { + const signature = new VerifableSignatureData(); + reader.offset = signature.fromBuffer(reader.buffer, reader.offset); + this.signature = signature; + } + + return reader.offset; + } + + toJSON(): PersonalUserDataDetailsJson { + this.setFlags(); + + return { + version: this.version.toNumber(), + flags: this.flags.toNumber(), + signableobjects: this.signableObjects.map(obj => obj.toJson()), + statements: this.statements, + signature: this.signature ? this.signature.toJson() : undefined + }; + } + + static fromJSON(json: PersonalUserDataDetailsJson): PersonalUserDataDetails { + const instance = new PersonalUserDataDetails(); + instance.version = new BN(json.version); + instance.flags = new BN(json.flags); + + const dataDescriptorObjects: Array = []; + + for (const objJson of json.signableobjects) { + const dataDescriptor = DataDescriptor.fromJson(objJson); + dataDescriptorObjects.push(dataDescriptor); + } + + instance.signableObjects = dataDescriptorObjects; + instance.statements = json.statements || []; + instance.signature = json.signature ? VerifableSignatureData.fromJson(json.signature) : undefined; + return instance; + } +} \ No newline at end of file diff --git a/src/vdxf/classes/requestobjects/SignDataRequestDetails.ts b/src/vdxf/classes/requestobjects/SignDataRequestDetails.ts deleted file mode 100644 index 3475c837..00000000 --- a/src/vdxf/classes/requestobjects/SignDataRequestDetails.ts +++ /dev/null @@ -1,198 +0,0 @@ -/** - * SignDataRequestDetails - Class for handling application requests for data signing - * - * This class is used when an application is requesting the user to sign specific data objects - * or documents. The request includes: - * - Signable objects containing the data to be signed - * - Optional signer identity specification - * - Search data keys to identify specific data objects - * - Optional requested keys for partial data signing - * - * The user's wallet can use these parameters to present the data to be signed to the user, - * allowing them to review the content before providing their digital signature. This enables - * secure, user-controlled document and data signing with clear visibility into what is - * being signed and by which identity. - */ - -import { BigNumber } from '../../../utils/types/BigNumber'; -import { BN } from 'bn.js'; -import varint from '../../../utils/varint'; -import varuint from '../../../utils/varuint'; -import bufferutils from '../../../utils/bufferutils'; -const { BufferReader, BufferWriter } = bufferutils; -import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { CompactIdAddressObject, CompactIdAddressObjectJson } from '../CompactIdAddressObject'; -import { fromBase58Check, toBase58Check } from '../../../utils/address'; -import { DataDescriptor, MMRDescriptor } from '../../../pbaas'; - -export interface SignDataRequestDetailsJson { - version: number; - flags: number; - signableobjects: Array<{[key: string]: string}>; // Array of signable data objects - signer?: CompactIdAddressObjectJson; -} - -export type SignRequestSignableObjects = Credential | MMRDescriptor | DataDescriptor | string; - -export class SignDataRequestDetails implements SerializableEntity { - - static VERSION_INVALID = new BN(0); - static FIRST_VERSION = new BN(1); - static LAST_VERSION = new BN(1); - static DEFAULT_VERSION = new BN(1); - - // types of data to sign - static CREDENTIAL = new BN(1); - static MMR_DESCRIPTOR = new BN(2); - static DATA_DESCRIPTOR = new BN(4); - static JSON_DATA = new BN(8); - - // flags for optional data - static HAS_SIGNER = new BN(8); - - version: BigNumber; - flags: BigNumber; - signableObjects: Array; - requestedSigner?: CompactIdAddressObject; - - constructor(data?: SignDataRequestDetails) { - this.version = data?.version || SignDataRequestDetails.DEFAULT_VERSION; - this.flags = data?.flags || new BN(0); - this.signableObjects = data?.signableObjects || []; - this.signer = data?.signer; - } - - setFlags(): void { - // Initialize flags if not already a BigNumber - if (!BN.isBN(this.flags)) { - this.flags = new BN(0); - } - - } - - hasSigner(): boolean { - return this.flags.and(SignDataRequestDetails.HAS_SIGNER).eq(SignDataRequestDetails.HAS_SIGNER); - } - - /** - * Checks if exactly one data type flag is set (FULL_DATA, PARTIAL_DATA, or COLLECTION) - * @returns True if exactly one data type flag is set - */ - hasDataTypeSet(): boolean { - const dataTypeFlags = SignDataRequestDetails.FULL_DATA - .or(SignDataRequestDetails.PARTIAL_DATA) - .or(SignDataRequestDetails.COLLECTION); - const setDataFlags = this.flags.and(dataTypeFlags); - - // Check if exactly one flag is set by verifying it's a power of 2 - return !setDataFlags.isZero() && setDataFlags.and(setDataFlags.sub(new BN(1))).isZero(); - } - - isValid(): boolean { - let valid = this.version.gte(SignDataRequestDetails.FIRST_VERSION) && - this.version.lte(SignDataRequestDetails.LAST_VERSION); - - // Check that exactly one data type flag is set - valid &&= this.hasDataTypeSet(); - - // Check that we have signable objects - valid &&= this.signableObjects.length > 0; - - return valid; - } - - getByteLength(): number { - this.setFlags(); - let length = 0; - - length += varint.encodingLength(this.flags); - - // Add length for signableObjects array - length += varuint.encodingLength(this.signableObjects.length); - - for (const obj of this.signableObjects) { - // Each object: VDXF key (20 bytes) + value length + value - const firstKey = Object.keys(obj)[0]; - const firstValue = obj[firstKey]; - length += 20; // VDXF key length - length += varuint.encodingLength(Buffer.byteLength(firstValue, 'utf8')); - length += Buffer.byteLength(firstValue, 'utf8'); - } - - // Add signer length if present - if (this.hasSigner() && this.signer) { - length += this.signer.getByteLength(); - } - - return length; - } - - toBuffer(): Buffer { - this.setFlags(); - - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - - writer.writeVarInt(this.flags); - - // Write signableObjects array - writer.writeCompactSize(this.signableObjects.length); - - for (const obj of this.signableObjects) { - const firstKey = Object.keys(obj)[0]; - const firstValue = obj[firstKey]; - writer.writeSlice(Buffer.from(firstKey, 'hex')); // 20-byte VDXF key - writer.writeVarSlice(Buffer.from(firstValue, 'utf8')); - } - - // Write signer if present - if (this.hasSigner() && this.signer) { - writer.writeSlice(this.signer.toBuffer()); - } - - return writer.buffer; - } - - fromBuffer(buffer: Buffer, offset?: number): number { - const reader = new BufferReader(buffer, offset); - - this.flags = reader.readVarInt(); - - // Read signableObjects array - const objectCount = reader.readCompactSize(); - this.signableObjects = []; - - for (let i = 0; i < objectCount; i++) { - const vdxfKey = reader.readSlice(20).toString('hex'); // 20-byte VDXF key - const value = reader.readVarSlice().toString('utf8'); - this.signableObjects.push({ [vdxfKey]: value }); - } - - // Read signer if flag is set - if (this.hasSigner()) { - this.signer = new CompactIdAddressObject(); - reader.offset = this.signer.fromBuffer(buffer, reader.offset); - } - - return reader.offset; - } - - toJSON(): SignDataRequestDetailsJson { - this.setFlags(); - - return { - version: this.version.toNumber(), - flags: this.flags.toNumber(), - signableobjects: this.signableObjects, - signer: this.signer?.toJson() - }; - } - - static fromJSON(json: SignDataRequestDetailsJson): SignDataRequestDetails { - const instance = new SignDataRequestDetails(); - instance.version = new BN(json.version); - instance.flags = new BN(json.flags); - instance.signableObjects = json.signableobjects || []; - instance.signer = json.signer ? CompactIdAddressObject.fromJson(json.signer) : undefined; - return instance; - } -} \ No newline at end of file From 9783a1e8d521f9f057a1fb66d6e55b9315cc330d Mon Sep 17 00:00:00 2001 From: monkins Date: Mon, 20 Oct 2025 17:33:35 +0100 Subject: [PATCH 021/123] Remove superceeded items --- .../classes/attestation/AttestationDetails.ts | 432 ------------------ src/vdxf/classes/endorsement/Endorsement.ts | 265 ----------- 2 files changed, 697 deletions(-) delete mode 100644 src/vdxf/classes/attestation/AttestationDetails.ts delete mode 100644 src/vdxf/classes/endorsement/Endorsement.ts diff --git a/src/vdxf/classes/attestation/AttestationDetails.ts b/src/vdxf/classes/attestation/AttestationDetails.ts deleted file mode 100644 index 92043bdf..00000000 --- a/src/vdxf/classes/attestation/AttestationDetails.ts +++ /dev/null @@ -1,432 +0,0 @@ -import { BigNumber } from '../../../utils/types/BigNumber'; -import { BN } from 'bn.js'; -import varint from '../../../utils/varint'; -import varuint from '../../../utils/varuint'; -import bufferutils from '../../../utils/bufferutils'; -const { BufferReader, BufferWriter } = bufferutils; -import { MMRDescriptor, MMRDescriptorJson } from '../../../pbaas/MMRDescriptor'; -import { SignatureData, SignatureJsonDataInterface } from '../../../pbaas/SignatureData'; -import { SerializableEntity } from '../../../utils/types/SerializableEntity'; - -export interface AttestationPairJson { - mmrdescriptor: MMRDescriptorJson; - signaturedata: SignatureJsonDataInterface; -} - -export interface AttestationDetailsJson { - version: number; - flags?: number; - label?: string; - id?: string; - timestamp?: number; - attestations: AttestationPairJson[]; -} - -export class AttestationPair implements SerializableEntity { - mmrDescriptor: MMRDescriptor; - signatureData: SignatureData; - - constructor(data?: { - mmrDescriptor?: MMRDescriptor; - signatureData?: SignatureData; - }) { - if (data) { - this.mmrDescriptor = data.mmrDescriptor || new MMRDescriptor(); - this.signatureData = data.signatureData || new SignatureData(); - } else { - this.mmrDescriptor = new MMRDescriptor(); - this.signatureData = new SignatureData(); - } - } - - static fromJson(data: AttestationPairJson): AttestationPair { - return new AttestationPair({ - mmrDescriptor: MMRDescriptor.fromJson(data.mmrdescriptor), - signatureData: SignatureData.fromJson(data.signaturedata) - }); - } - - getByteLength(): number { - return this.mmrDescriptor.getByteLength() + this.signatureData.getByteLength(); - } - - toBuffer(): Buffer { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeSlice(this.mmrDescriptor.toBuffer()); - writer.writeSlice(this.signatureData.toBuffer()); - return writer.buffer; - } - - fromBuffer(buffer: Buffer, offset?: number): number { - const reader = new BufferReader(buffer, offset); - - this.mmrDescriptor = new MMRDescriptor(); - reader.offset = this.mmrDescriptor.fromBuffer(reader.buffer, reader.offset); - - this.signatureData = new SignatureData(); - reader.offset = this.signatureData.fromBuffer(reader.buffer, reader.offset); - - return reader.offset; - } - - toJson(): AttestationPairJson { - return { - mmrdescriptor: this.mmrDescriptor.toJson(), - signaturedata: this.signatureData.toJson() - }; - } -} - -export class AttestationDetails implements SerializableEntity { - static VERSION_INVALID = new BN(0); - static FIRST_VERSION = new BN(1); - static LAST_VERSION = new BN(1); - static DEFAULT_VERSION = new BN(1); - - // Flags - static FLAG_LABEL = 1; - static FLAG_ID = 2; - static FLAG_TIMESTAMP = 4; - - version: BigNumber; - flags: BigNumber; - label?: string; - id?: string; - timestamp?: BigNumber; - attestations: AttestationPair[]; - - constructor(data?: { - version?: BigNumber; - flags?: BigNumber; - label?: string; - id?: string; - timestamp?: BigNumber; - attestations?: AttestationPair[]; - }) { - if (data) { - this.version = data.version || AttestationDetails.DEFAULT_VERSION; - this.flags = data.flags || new BN(0); - this.label = data.label; - this.id = data.id; - this.timestamp = data.timestamp; - this.attestations = data.attestations || []; - } else { - this.version = AttestationDetails.DEFAULT_VERSION; - this.flags = new BN(0); - this.attestations = []; - } - } - - static fromJson(data: AttestationDetailsJson): AttestationDetails { - const newAttestationDetails = new AttestationDetails(); - - if (data) { - if (data.version) newAttestationDetails.version = new BN(data.version); - if (data.flags !== undefined) newAttestationDetails.flags = new BN(data.flags); - if (data.label) newAttestationDetails.label = data.label; - if (data.id) newAttestationDetails.id = data.id; - if (data.timestamp) newAttestationDetails.timestamp = new BN(data.timestamp); - - if (data.attestations) { - newAttestationDetails.attestations = data.attestations.map( - attestation => AttestationPair.fromJson(attestation) - ); - } - } - - return newAttestationDetails; - } - - /** - * Create AttestationDetails from a single Verus node response - * @param nodeResponse - The JSON object from Verus node: {"signaturedata": ..., "mmrdescriptor": ...} - * @param options - Optional metadata (label, id, timestamp) - */ - static fromNodeResponse( - nodeResponse: { signaturedata: any; mmrdescriptor: any }, - options?: { - label?: string; - id?: string; - timestamp?: number; - } - ): AttestationDetails { - const attestationPair = new AttestationPair({ - mmrDescriptor: MMRDescriptor.fromJson(nodeResponse.mmrdescriptor), - signatureData: SignatureData.fromJson(nodeResponse.signaturedata) - }); - - const attestationDetails = new AttestationDetails({ - attestations: [attestationPair] - }); - - // Set optional metadata - if (options?.label) { - attestationDetails.setLabel(options.label); - } - if (options?.id) { - attestationDetails.setId(options.id); - } - if (options?.timestamp) { - attestationDetails.setTimestamp(new BN(options.timestamp)); - } - - // Update flags based on set metadata - attestationDetails.setFlags(); - - return attestationDetails; - } - - /** - * Create AttestationDetails from multiple Verus node responses - * @param nodeResponses - Array of JSON objects from Verus node - * @param options - Optional metadata (label, id, timestamp) - */ - static fromNodeResponses( - nodeResponses: Array<{ signaturedata: any; mmrdescriptor: any }>, - options?: { - label?: string; - id?: string; - timestamp?: number; - } - ): AttestationDetails { - const attestationPairs = nodeResponses.map(response => - new AttestationPair({ - mmrDescriptor: MMRDescriptor.fromJson(response.mmrdescriptor), - signatureData: SignatureData.fromJson(response.signaturedata) - }) - ); - - const attestationDetails = new AttestationDetails({ - attestations: attestationPairs - }); - - // Set optional metadata - if (options?.label) { - attestationDetails.setLabel(options.label); - } - if (options?.id) { - attestationDetails.setId(options.id); - } - if (options?.timestamp) { - attestationDetails.setTimestamp(new BN(options.timestamp)); - } - - // Update flags based on set metadata - attestationDetails.setFlags(); - - return attestationDetails; - } - - hasLabel(): boolean { - return (this.flags.toNumber() & AttestationDetails.FLAG_LABEL) !== 0; - } - - hasId(): boolean { - return (this.flags.toNumber() & AttestationDetails.FLAG_ID) !== 0; - } - - hasTimestamp(): boolean { - return (this.flags.toNumber() & AttestationDetails.FLAG_TIMESTAMP) !== 0; - } - - setLabel(label: string): void { - this.label = label; - } - - setId(id: string): void { - this.id = id; - } - - setTimestamp(timestamp: BigNumber): void { - this.timestamp = timestamp; - } - - /** - * Calculate flags based on the presence of optional fields - */ - calcFlags(): BigNumber { - let flags = new BN(0); - - if (this.label && this.label.length > 0) { - flags = flags.or(new BN(AttestationDetails.FLAG_LABEL)); - } - - if (this.id && this.id.length > 0) { - flags = flags.or(new BN(AttestationDetails.FLAG_ID)); - } - - if (this.timestamp) { - flags = flags.or(new BN(AttestationDetails.FLAG_TIMESTAMP)); - } - - return flags; - } - - /** - * Set the flags based on calculated values from present fields - */ - setFlags(): void { - this.flags = this.calcFlags(); - } - - /** - * Add a new attestation from a Verus node response - * @param nodeResponse - The JSON object from Verus node: {"signaturedata": ..., "mmrdescriptor": ...} - */ - addAttestation(nodeResponse: { signaturedata: any; mmrdescriptor: any }): void { - const attestationPair = new AttestationPair({ - mmrDescriptor: MMRDescriptor.fromJson(nodeResponse.mmrdescriptor), - signatureData: SignatureData.fromJson(nodeResponse.signaturedata) - }); - - this.attestations.push(attestationPair); - } - - /** - * Add multiple attestations from Verus node responses - * @param nodeResponses - Array of JSON objects from Verus node - */ - addAttestations(nodeResponses: Array<{ signaturedata: any; mmrdescriptor: any }>): void { - const attestationPairs = nodeResponses.map(response => - new AttestationPair({ - mmrDescriptor: MMRDescriptor.fromJson(response.mmrdescriptor), - signatureData: SignatureData.fromJson(response.signaturedata) - }) - ); - - this.attestations.push(...attestationPairs); - } - - /** - * Add an existing AttestationPair to this collection - * @param attestationPair - The AttestationPair to add - */ - addAttestationPair(attestationPair: AttestationPair): void { - this.attestations.push(attestationPair); - } - - /** - * Get the number of attestations in this collection - */ - getAttestationCount(): number { - return this.attestations.length; - } - - getByteLength(): number { - this.setFlags(); - let length = 0; - - length += varint.encodingLength(this.flags); - - if (this.hasLabel() && this.label) { - const labelBuffer = Buffer.from(this.label, 'utf8'); - length += varuint.encodingLength(labelBuffer.length); - length += labelBuffer.length; - } - - if (this.hasId() && this.id) { - const idBuffer = Buffer.from(this.id, 'utf8'); - length += varuint.encodingLength(idBuffer.length); - length += idBuffer.length; - } - - if (this.hasTimestamp() && this.timestamp) { - length += varint.encodingLength(this.timestamp); - } - - length += varuint.encodingLength(this.attestations.length); - this.attestations.forEach((attestation) => { - length += attestation.getByteLength(); - }); - - return length; - } - - toBuffer(): Buffer { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - - writer.writeVarInt(this.flags); - - if (this.hasLabel() && this.label) { - const labelBuffer = Buffer.from(this.label, 'utf8'); - writer.writeVarSlice(labelBuffer); - } - - if (this.hasId() && this.id) { - const idBuffer = Buffer.from(this.id, 'utf8'); - writer.writeVarSlice(idBuffer); - } - - if (this.hasTimestamp() && this.timestamp) { - writer.writeVarInt(this.timestamp); - } - - writer.writeCompactSize(this.attestations.length); - this.attestations.forEach((attestation) => { - writer.writeSlice(attestation.toBuffer()); - }); - - return writer.buffer; - } - - fromBuffer(buffer: Buffer, offset?: number): number { - const reader = new BufferReader(buffer, offset); - - this.flags = reader.readVarInt(); - - if (this.hasLabel()) { - this.label = reader.readVarSlice().toString('utf8'); - } - - if (this.hasId()) { - this.id = reader.readVarSlice().toString('utf8'); - } - - if (this.hasTimestamp()) { - this.timestamp = reader.readVarInt(); - } - - const attestationsLength = reader.readCompactSize(); - this.attestations = []; - - for (let i = 0; i < attestationsLength; i++) { - const attestation = new AttestationPair(); - reader.offset = attestation.fromBuffer(reader.buffer, reader.offset); - this.attestations.push(attestation); - } - - return reader.offset; - } - - isValid(): boolean { - return this.version.gte(AttestationDetails.FIRST_VERSION) && - this.version.lte(AttestationDetails.LAST_VERSION) && - this.attestations.length > 0; - } - - toJson(): AttestationDetailsJson { - this.setFlags(); // Ensure flags are set before converting to JSON - const retval: AttestationDetailsJson = { - version: this.version.toNumber(), - attestations: this.attestations.map((attestation) => attestation.toJson()) - }; - - if (this.flags.gt(new BN(0))) { - retval.flags = this.flags.toNumber(); - } - - if (this.hasLabel() && this.label) { - retval.label = this.label; - } - - if (this.hasId() && this.id) { - retval.id = this.id; - } - - if (this.hasTimestamp() && this.timestamp) { - retval.timestamp = this.timestamp.toNumber(); - } - - return retval; - } -} diff --git a/src/vdxf/classes/endorsement/Endorsement.ts b/src/vdxf/classes/endorsement/Endorsement.ts deleted file mode 100644 index 7327899c..00000000 --- a/src/vdxf/classes/endorsement/Endorsement.ts +++ /dev/null @@ -1,265 +0,0 @@ -import varuint from '../../../utils/varuint'; -import varint from '../../../utils/varint'; -import bufferutils from '../../../utils/bufferutils'; -import { BN } from 'bn.js'; -import { BigNumber } from '../../../utils/types/BigNumber'; -import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { VdxfUniValue } from '../../../pbaas/VdxfUniValue'; -import { SignatureData, SignatureJsonDataInterface } from '../../../pbaas/SignatureData'; -import { VDXFKeyInterface } from '../../keys'; -import { createHash } from 'crypto'; - - -const { BufferReader, BufferWriter } = bufferutils - -export interface EndorsementJson { - version: number; - flags?: number; - endorsee: string; - message?: string; - reference: string; - metadata?: any; - signature?: SignatureJsonDataInterface; - txid?: string; - -} - -export class Endorsement implements SerializableEntity { - - static VERSION_INVALID = new BN(0, 10) - static VERSION_FIRST = new BN(1, 10) - static VERSION_LAST = new BN(1, 10) - static VERSION_CURRENT = new BN(1, 10) - - static FLAGS_HAS_METADATA = new BN(1, 10) - static FLAGS_HAS_SIGNATURE = new BN(2, 10) - static FLAGS_HAS_TXID = new BN(4, 10) - static FLAGS_HAS_MESSAGE = new BN(8, 10) - - version: BigNumber; - flags: BigNumber; - endorsee: string; - message: string; - reference: Buffer; - txid: Buffer; - metaData: VdxfUniValue | null; - signature: SignatureData | null; - - constructor(data: { - version?: BigNumber, flags?: BigNumber, endorsee?: string, message?: string, reference?: Buffer, metaData?: VdxfUniValue | null, - signature?: SignatureData | null, txid?: Buffer - } = {}) { - this.version = data.version || new BN(1, 10); - this.flags = data.flags || new BN(0, 10); - this.endorsee = data.endorsee || ""; - this.message = data.message || ""; - this.reference = data.reference || Buffer.alloc(0); - this.metaData = data.metaData || null; - this.signature = data.signature || null; - this.txid = data.txid || Buffer.alloc(0); - - } - - getByteLength() { - let byteLength = 0; - - byteLength += varint.encodingLength(this.flags); - byteLength += varuint.encodingLength(Buffer.from(this.endorsee, 'utf-8').byteLength); - byteLength += Buffer.from(this.endorsee, 'utf-8').byteLength; - byteLength += varuint.encodingLength(this.reference.length); - byteLength += this.reference.length; - - if (this.message && this.message.length > 0) { - byteLength += varuint.encodingLength(Buffer.from(this.message, 'utf-8').byteLength); - byteLength += Buffer.from(this.message, 'utf-8').length; - } - - if (this.metaData && Endorsement.FLAGS_HAS_METADATA.and(this.flags).gt(new BN(0))) { - byteLength += this.metaData.getByteLength(); - } - - if (this.signature && Endorsement.FLAGS_HAS_SIGNATURE.and(this.flags).gt(new BN(0))) { - byteLength += this.signature.getByteLength(); - } - - if (this.txid && Endorsement.FLAGS_HAS_TXID.and(this.flags).gt(new BN(0))) { - byteLength += varuint.encodingLength(this.txid.length); - byteLength += this.txid.length; - } - - return byteLength - } - - setFlags() { - - let flags = new BN(0, 10); - - if (this.metaData) { - flags = flags.or(Endorsement.FLAGS_HAS_METADATA); - } - - if (this.signature && this.signature.isValid()) { - flags = flags.or(Endorsement.FLAGS_HAS_SIGNATURE); - } - - if (this.txid && this.txid.length == 32) { - flags = flags.or(Endorsement.FLAGS_HAS_TXID); - } - - if (this.message && this.message.length > 0) { - flags = flags.or(Endorsement.FLAGS_HAS_MESSAGE); - } - - this.flags = flags; - - } - - toBuffer() { - this.setFlags(); - const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())) - - bufferWriter.writeVarInt(this.flags); - bufferWriter.writeVarSlice(Buffer.from(this.endorsee, 'utf-8')); - bufferWriter.writeVarSlice(this.reference); - - if (this.message && this.message.length > 0) { - bufferWriter.writeVarSlice(Buffer.from(this.message, 'utf-8')); - } - - if (this.metaData && Endorsement.FLAGS_HAS_METADATA.and(this.flags).gt(new BN(0))) { - bufferWriter.writeSlice(this.metaData.toBuffer()); - } - - if (this.signature && Endorsement.FLAGS_HAS_SIGNATURE.and(this.flags).gt(new BN(0))) { - bufferWriter.writeSlice(this.signature.toBuffer()); - } - - if (this.txid && Endorsement.FLAGS_HAS_TXID.and(this.flags).gt(new BN(0))) { - bufferWriter.writeVarSlice(this.txid); - } - - return bufferWriter.buffer - } - - fromBuffer(buffer: Buffer, offset: number = 0) { - const reader = new BufferReader(buffer, offset); - - this.flags = reader.readVarInt(); - this.endorsee = reader.readVarSlice().toString('utf-8'); - this.reference = reader.readVarSlice(); - - if (Endorsement.FLAGS_HAS_MESSAGE.and(this.flags).gt(new BN(0))) { - this.message = reader.readVarSlice().toString('utf-8'); - } - - if (Endorsement.FLAGS_HAS_METADATA.and(this.flags).gt(new BN(0))) { - this.metaData = new VdxfUniValue(); - reader.offset = this.metaData.fromBuffer(reader.buffer, reader.offset); - } - - if (Endorsement.FLAGS_HAS_SIGNATURE.and(this.flags).gt(new BN(0))) { - this.signature = new SignatureData(); - reader.offset = this.signature.fromBuffer(reader.buffer, reader.offset); - } - - if (Endorsement.FLAGS_HAS_TXID.and(this.flags).gt(new BN(0))) { - this.txid = reader.readVarSlice(); - } - - return reader.offset; - } - - toIdentityUpdateJson(vdxfid): { [key: string]: { [key: string]: [string] } } { - - const contentmultimap = {}; - - if (!vdxfid) { - throw new Error('Vdxfid is required') - } - - if (!this.signature || !this.signature.isValid()) { - throw new Error('Signature is required') - } - - contentmultimap[vdxfid] = [{ serializedhex: this.toBuffer().toString('hex') }]; - - return { - contentmultimap: contentmultimap - } - - } - - createHash(name) { - - if (!name) { - throw new Error('Type is required') - } - - if (this.signature) { - throw new Error('Signature should be removed before creating a new one') - } - const data = this.toBuffer(); - - return createHash('sha256').update(data).digest(); - - } - - toJson() { - - let retVal = { - version: this.version.toString(), - flags: this.flags.toString(), - endorsee: this.endorsee, - message: this.message, - reference: this.reference.toString('hex') - } - - if (this.metaData && Endorsement.FLAGS_HAS_METADATA.and(this.flags).gt(new BN(0))) { - retVal['metadata'] = this.metaData.toJson(); - } - - if (this.signature && Endorsement.FLAGS_HAS_SIGNATURE.and(this.flags).gt(new BN(0))) { - retVal['signature'] = this.signature.toJson(); - } - - if (this.txid && Endorsement.FLAGS_HAS_TXID.and(this.flags).gt(new BN(0))) { - retVal['txid'] = this.txid.toString('hex'); - } - - return retVal - - } - - static fromJson(json: EndorsementJson): Endorsement { - - const flags = new BN(json.flags || 0, 10); - let metaData: VdxfUniValue | null = null; - - if (json.metadata && Endorsement.FLAGS_HAS_METADATA.and(flags).gt(new BN(0))) { - metaData = VdxfUniValue.fromJson(json.metadata); - } - - let signature: SignatureData | null = null; - - if (json.signature && Endorsement.FLAGS_HAS_SIGNATURE.and(flags).gt(new BN(0))) { - signature = SignatureData.fromJson(json.signature); - } - - let txid: Buffer = Buffer.alloc(0); - - if (json.txid) { - txid = Buffer.from(json.txid, 'hex'); - } - - return new Endorsement({ - version: new BN(json.version, 10), - flags, - endorsee: json.endorsee, - message: json.message, - reference: Buffer.from(json.reference, 'hex'), - metaData, - signature, - txid - }) - } -} \ No newline at end of file From 9b703f88aa986d1cfc855ccbfa64241d4596dd27 Mon Sep 17 00:00:00 2001 From: monkins Date: Mon, 20 Oct 2025 20:43:13 +0100 Subject: [PATCH 022/123] Updates with tests and names --- .../utils/attestationDetails.test.ts | 205 --------- .../vdxf/appencryptionrequestdetails.test.ts | 80 ++++ src/__tests__/vdxf/encryptiondetails.test.ts | 159 ------- src/__tests__/vdxf/endorsement.test.ts | 40 -- .../vdxf/informationrequestdetails.test.ts | 412 ------------------ .../vdxf/personaluserdatadetails.test.ts | 31 ++ .../vdxf/provisioningidentity.test.ts | 44 -- .../vdxf/provisioningidentitydetails.test.ts | 37 ++ src/__tests__/vdxf/requestuserdata.test.ts | 38 ++ src/vdxf/classes/CompactIdAddressObject.ts | 4 +- src/vdxf/classes/index.ts | 4 +- .../AppEncryptionRequestDetails.ts | 4 +- ...rDetails.ts => PersonalUserDataDetails.ts} | 9 +- .../ProvisionIdentityDetails.ts | 36 +- .../classes/requestobjects/RequestUserData.ts | 2 +- 15 files changed, 216 insertions(+), 889 deletions(-) delete mode 100644 src/__tests__/utils/attestationDetails.test.ts create mode 100644 src/__tests__/vdxf/appencryptionrequestdetails.test.ts delete mode 100644 src/__tests__/vdxf/encryptiondetails.test.ts delete mode 100644 src/__tests__/vdxf/endorsement.test.ts delete mode 100644 src/__tests__/vdxf/informationrequestdetails.test.ts create mode 100644 src/__tests__/vdxf/personaluserdatadetails.test.ts delete mode 100644 src/__tests__/vdxf/provisioningidentity.test.ts create mode 100644 src/__tests__/vdxf/provisioningidentitydetails.test.ts create mode 100644 src/__tests__/vdxf/requestuserdata.test.ts rename src/vdxf/classes/requestobjects/{DataTransferDetails.ts => PersonalUserDataDetails.ts} (95%) diff --git a/src/__tests__/utils/attestationDetails.test.ts b/src/__tests__/utils/attestationDetails.test.ts deleted file mode 100644 index 6b0f5c6f..00000000 --- a/src/__tests__/utils/attestationDetails.test.ts +++ /dev/null @@ -1,205 +0,0 @@ -import { AttestationDetails } from "../../vdxf/classes/attestation/AttestationDetails"; - -describe('AttestationDetails tests', () => { - test('toBuffer and fromBuffer test with real data', () => { - const testData = { - "mmrdescriptor": { - "version": 1, - "objecthashtype": 5, - "mmrhashtype": 1, - "mmrroot": { - "version": 1, - "flags": 0, - "objectdata": "da513b88a56ef93a55cfd7e8f49e1143fd26a2e6095a67fc0d368327d8e3d3df" - }, - "mmrhashes": { - "version": 1, - "flags": 0, - "objectdata": "41d826d3c6cbbc3a96992670d2f604e959fd1a8c014102c78ee8fa7c01db81cbf60181fc9baa101aa8c07d40c324d771145699168d3b18867a587f139173cf8b961d581fe15bbf15f5d02813a615e54c050d2b6b1cd4ee" - }, - "datadescriptors": [ - { - "version": 1, - "flags": 2, - "objectdata": { - "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv": { - "version": 1, - "flags": 96, - "mimetype": "text/plain", - "objectdata": { - "message": "John" - }, - "label": "i4GqsotHGa4czCdtg2d8FVHKfJFzVyBPrM" - } - }, - "salt": "06e9b0454f1fddf23353a8c411bdbbb266738dca1d647e03040bffe1bddacf74" - }, - { - "version": 1, - "flags": 2, - "objectdata": { - "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv": { - "version": 1, - "flags": 96, - "mimetype": "text/plain", - "objectdata": { - "message": "Doe" - }, - "label": "iHybTrNB1kXRrjsCtJXd6fvBKxepqMpS5Z" - } - }, - "salt": "d32fac398866a7331acd678fd48412f173f71e381f1c1d6efff253a6b29b4d5b" - } - ] - }, - "signaturedata": { - "version": 1, - "systemid": "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", - "hashtype": 1, - "signaturehash": "dfd3e3d82783360dfc675a09e6a226fd43119ef4e8d7cf553af96ea5883b51da", - "identityid": "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - "signaturetype": 1, - "signature": "AgXOCgAAAUEfCiSukK9tg46cYOpHmxzKjNquWDyNc8H58+uLSOYmqlUcNUxWB8j3nzT1RHKeJGygdAwrUj5iZ/A9H3+qYV9H9g==" - } - }; - - // Create AttestationDetails from the node response - const attestationDetails = AttestationDetails.fromNodeResponse(testData); - - // Convert to buffer - const buffer = attestationDetails.toBuffer(); - - // Convert buffer to hex string for comparison - const bufferHex = buffer.toString('hex'); - - // Test that we can deserialize back to the same object - const deserializedAttestation = new AttestationDetails(); - deserializedAttestation.fromBuffer(buffer); - - // Verify the deserialized object matches the original - expect(deserializedAttestation.version.toNumber()).toBe(attestationDetails.version.toNumber()); - expect(deserializedAttestation.flags.toNumber()).toBe(attestationDetails.flags.toNumber()); - expect(deserializedAttestation.attestations.length).toBe(1); - - // Verify MMR descriptor data - const originalMmr = attestationDetails.attestations[0].mmrDescriptor; - const deserializedMmr = deserializedAttestation.attestations[0].mmrDescriptor; - - expect(deserializedMmr.version.toNumber()).toBe(originalMmr.version.toNumber()); - expect(deserializedMmr.objectHashType).toBe(originalMmr.objectHashType); - expect(deserializedMmr.mmrHashType).toBe(originalMmr.mmrHashType); - - // Verify signature data - const originalSig = attestationDetails.attestations[0].signatureData; - const deserializedSig = deserializedAttestation.attestations[0].signatureData; - - expect(deserializedSig.version.toNumber()).toBe(originalSig.version.toNumber()); - expect(deserializedSig.system_ID).toBe(originalSig.system_ID); - expect(deserializedSig.hash_type.toNumber()).toBe(originalSig.hash_type.toNumber()); - expect(deserializedSig.identity_ID).toBe(originalSig.identity_ID); - expect(deserializedSig.sig_type.toNumber()).toBe(originalSig.sig_type.toNumber()); - - // Test JSON round-trip - const json = attestationDetails.toJson(); - const fromJson = AttestationDetails.fromJson(json); - const fromJsonBuffer = fromJson.toBuffer(); - - expect(fromJsonBuffer.toString('hex')).toBe(bufferHex); - }); - - test('fromBuffer with known hex data', () => { - // This is the actual hex string generated from the test data above - const expectedHex = "0001010501010020da513b88a56ef93a55cfd7e8f49e1143fd26a2e6095a67fc0d368327d8e3d3df01005741d826d3c6cbbc3a96992670d2f604e959fd1a8c014102c78ee8fa7c01db81cbf60181fc9baa101aa8c07d40c324d771145699168d3b18867a587f139173cf8b961d581fe15bbf15f5d02813a615e54c050d2b6b1cd4ee0201024b08a2ebb2c55f83a8e2a426a53320ed4d42124f4d01350160044a6f686e2269344771736f7448476134637a436474673264384656484b664a467a56794250724d0a746578742f706c61696e2006e9b0454f1fddf23353a8c411bdbbb266738dca1d647e03040bffe1bddacf7401024a08a2ebb2c55f83a8e2a426a53320ed4d42124f4d0134016003446f65226948796254724e42316b5852726a7343744a5864366676424b786570714d7053355a0a746578742f706c61696e20d32fac398866a7331acd678fd48412f173f71e381f1c1d6efff253a6b29b4d5b01a6ef9ea235635e328124ff3429db9f9e91b64e2d0120da513b88a56ef93a55cfd7e8f49e1143fd26a2e6095a67fc0d368327d8e3d3dfb26820ee0c9b1276aac834cf457026a575dfce8401000000490205ce0a000001411f0a24ae90af6d838e9c60ea479b1cca8cdaae583c8d73c1f9f3eb8b48e626aa551c354c5607c8f79f34f544729e246ca0740c2b523e6267f03d1f7faa615f47f6"; - - // Create AttestationDetails from the hex buffer - const buffer = Buffer.from(expectedHex, 'hex'); - const attestationDetails = new AttestationDetails(); - attestationDetails.fromBuffer(buffer); - - // Verify basic structure - expect(attestationDetails.flags.toNumber()).toBe(0); - expect(attestationDetails.attestations.length).toBe(1); - - // Convert back to JSON and verify data - const json = attestationDetails.toJson(); - expect(json.version).toBe(1); - expect(json.attestations.length).toBe(1); - - const mmrJson = json.attestations[0].mmrdescriptor; - expect(mmrJson.version).toBe(1); - expect(mmrJson.objecthashtype).toBe(5); - expect(mmrJson.mmrhashtype).toBe(1); - - const sigJson = json.attestations[0].signaturedata; - expect(sigJson.version).toBe(1); - expect(sigJson.systemid).toBe("iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"); - expect(sigJson.hashtype).toBe(1); - expect(sigJson.identityid).toBe("iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB"); - expect(sigJson.signaturetype).toBe(1); - - // Test round-trip: buffer -> object -> buffer should match - const newBuffer = attestationDetails.toBuffer(); - expect(newBuffer.toString('hex')).toBe(expectedHex); - }); - - test('addAttestation functionality', () => { - const testData = { - "mmrdescriptor": { - "version": 1, - "objecthashtype": 5, - "mmrhashtype": 1, - "mmrroot": { - "version": 1, - "flags": 0, - "objectdata": "da513b88a56ef93a55cfd7e8f49e1143fd26a2e6095a67fc0d368327d8e3d3df" - }, - "mmrhashes": { - "version": 1, - "flags": 0, - "objectdata": "41d826d3c6cbbc3a96992670d2f604e959fd1a8c014102c78ee8fa7c01db81cbf60181fc9baa101aa8c07d40c324d771145699168d3b18867a587f139173cf8b961d581fe15bbf15f5d02813a615e54c050d2b6b1cd4ee" - }, - "datadescriptors": [] - }, - "signaturedata": { - "version": 1, - "systemid": "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", - "hashtype": 1, - "signaturehash": "dfd3e3d82783360dfc675a09e6a226fd43119ef4e8d7cf553af96ea5883b51da", - "identityid": "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - "signaturetype": 1, - "signature": "AgXOCgAAAUEfCiSukK9tg46cYOpHmxzKjNquWDyNc8H58+uLSOYmqlUcNUxWB8j3nzT1RHKeJGygdAwrUj5iZ/A9H3+qYV9H9g==" - } - }; - - // Create initial AttestationDetails - const attestationDetails = AttestationDetails.fromNodeResponse(testData, { - label: "Test Attestation", - id: "test-001", - timestamp: 1640995200000 // Jan 1, 2022 - }); - - // Verify initial state - expect(attestationDetails.hasLabel()).toBe(true); - expect(attestationDetails.hasId()).toBe(true); - expect(attestationDetails.hasTimestamp()).toBe(true); - expect(attestationDetails.label).toBe("Test Attestation"); - expect(attestationDetails.id).toBe("test-001"); - expect(attestationDetails.getAttestationCount()).toBe(1); - - // Add another attestation - attestationDetails.addAttestation(testData); - expect(attestationDetails.getAttestationCount()).toBe(2); - - // Test buffer serialization with metadata - const buffer = attestationDetails.toBuffer(); - const deserializedAttestation = new AttestationDetails(); - deserializedAttestation.fromBuffer(buffer); - - expect(deserializedAttestation.hasLabel()).toBe(true); - expect(deserializedAttestation.hasId()).toBe(true); - expect(deserializedAttestation.hasTimestamp()).toBe(true); - expect(deserializedAttestation.label).toBe("Test Attestation"); - expect(deserializedAttestation.id).toBe("test-001"); - expect(deserializedAttestation.getAttestationCount()).toBe(2); - }); -}); diff --git a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts new file mode 100644 index 00000000..08e3a410 --- /dev/null +++ b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts @@ -0,0 +1,80 @@ +import { BN } from "bn.js"; +import { AppEncryptionRequestDetails, AppEncryptionRequestDetailsJson, CompactIdAddressObject } from "../../vdxf/classes"; +import { TransferDestination } from "../../pbaas/TransferDestination"; +import { BigNumber } from "../../utils/types/BigNumber"; + +// Helper function to create TransferDestination from address string +function createCompactIdAddressObject(flags: BigNumber, address: string): CompactIdAddressObject { + const obj = new CompactIdAddressObject(); + obj.flags = flags; + obj.address = address; + return obj; +} + + +describe("AppEncryptionRequestDetails serialization tests", () => { + test("creates valid AppEncryptionRequestDetails with zaddress", () => { + const details = new AppEncryptionRequestDetails(); + details.version = AppEncryptionRequestDetails.DEFAULT_VERSION; + details.flags = AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER + .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) + .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS); + details.encryptToZAddress = "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4"; + details.derivationNumber = new BN(42); + details.secondaryDerivationNumber = new BN(234); + + details.fromAddress = createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"); + details.toAddress = createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"); + + expect(details.isValid()).toBe(true); + expect(details.encryptToZAddress).toBe("zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4"); + expect(details.flags.toNumber()).toBe(1+2+4); + expect(details.derivationNumber.toNumber()).toBe(42); + expect(details.secondaryDerivationNumber?.toNumber()).toBe(234); + expect(details.fromAddress?.address).toBe("i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"); + expect(details.toAddress?.address).toBe("i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"); + }); + + test("serializes and deserializes AppEncryptionRequestDetails correctly", () => { + // Create the first AppEncryptionRequestDetails + const originalDetails = new AppEncryptionRequestDetails(); + originalDetails.version = AppEncryptionRequestDetails.DEFAULT_VERSION; + originalDetails.flags = AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER + .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) + .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS); + originalDetails.encryptToZAddress = "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4"; + originalDetails.derivationNumber = new BN(42); + originalDetails.secondaryDerivationNumber = new BN(234); + + originalDetails.fromAddress = createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"); + originalDetails.toAddress = createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"); + + // Serialize to buffer + const buffer = originalDetails.toBuffer(); + + // Create a new instance and deserialize from buffer + const deserializedDetails = new AppEncryptionRequestDetails(); + deserializedDetails.fromBuffer(buffer); + + // Verify both instances are valid + expect(originalDetails.isValid()).toBe(true); + expect(deserializedDetails.isValid()).toBe(true); + + // Verify all properties match + expect(deserializedDetails.version.toNumber()).toBe(originalDetails.version.toNumber()); + expect(deserializedDetails.flags.toNumber()).toBe(originalDetails.flags.toNumber()); + expect(deserializedDetails.encryptToZAddress).toBe(originalDetails.encryptToZAddress); + expect(deserializedDetails.derivationNumber.toNumber()).toBe(originalDetails.derivationNumber.toNumber()); + expect(deserializedDetails.secondaryDerivationNumber?.toNumber()).toBe(originalDetails.secondaryDerivationNumber?.toNumber()); + expect(deserializedDetails.fromAddress?.flags.toNumber()).toBe(originalDetails.fromAddress?.flags.toNumber()); + expect(deserializedDetails.fromAddress?.address).toBe(originalDetails.fromAddress?.address); + expect(deserializedDetails.toAddress?.flags.toNumber()).toBe(originalDetails.toAddress?.flags.toNumber()); + expect(deserializedDetails.toAddress?.address).toBe(originalDetails.toAddress?.address); + + // Verify that serializing both instances produces the same buffer + const originalBuffer = originalDetails.toBuffer(); + const deserializedBuffer = deserializedDetails.toBuffer(); + expect(originalBuffer.equals(deserializedBuffer)).toBe(true); + }); + +}); diff --git a/src/__tests__/vdxf/encryptiondetails.test.ts b/src/__tests__/vdxf/encryptiondetails.test.ts deleted file mode 100644 index 69202c1a..00000000 --- a/src/__tests__/vdxf/encryptiondetails.test.ts +++ /dev/null @@ -1,159 +0,0 @@ -import { BN } from "bn.js"; -import { EncryptionDetails, EncryptionType, SeedDerivationMethod } from "../../vdxf/classes"; -import { TransferDestination } from "../../pbaas/TransferDestination"; - -// Helper function to create TransferDestination from address string -function createTransferDestination(address: string): TransferDestination { - return TransferDestination.fromJson({ - type: 4, // DEST_ID - address: address - }); -} - -const PUBKEY ="03cf9368077ddaaa635d2b524644548b656d8609473f1e267cc1599b595bc7ddc7" - -describe("EncryptionDetails serialization tests", () => { - test("creates valid EncryptionDetails with zaddress", () => { - const details = new EncryptionDetails({ - type: EncryptionType.TYPE_ZADDRESS, - key: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", - derivationNumber: new BN(42), - seedDerivationMethod: new BN(SeedDerivationMethod.BOTH_ADDRESSES), - fromAddress: createTransferDestination("iCkKJuJScy4Z6NSDK7Mt42ZAB2NEnAE1o4"), - toAddress: createTransferDestination("i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X") - }); - - expect(details.isValid()).toBe(true); - expect(details.type).toBe(EncryptionType.TYPE_ZADDRESS); - expect(details.derivationNumber.toNumber()).toBe(42); - expect(details.seedDerivationMethod?.toNumber()).toBe(SeedDerivationMethod.BOTH_ADDRESSES); - }); - - test("validates required addresses based on derivation method", () => { - // FROM_ADDRESS_ONLY requires fromAddress - const fromOnly = new EncryptionDetails({ - type: EncryptionType.TYPE_ZADDRESS, - key: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", - derivationNumber: new BN(1), - seedDerivationMethod: new BN(SeedDerivationMethod.FROM_ADDRESS_ONLY), - fromAddress: createTransferDestination("iCkKJuJScy4Z6NSDK7Mt42ZAB2NEnAE1o4") - }); - expect(fromOnly.isValid()).toBe(true); - - // TO_ADDRESS_ONLY requires toAddress - const toOnly = new EncryptionDetails({ - type: EncryptionType.TYPE_ZADDRESS, - key: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", - derivationNumber: new BN(1), - seedDerivationMethod: new BN(SeedDerivationMethod.TO_ADDRESS_ONLY), - toAddress: createTransferDestination("iCkKJuJScy4Z6NSDK7Mt42ZAB2NEnAE1o4") - }); - expect(toOnly.isValid()).toBe(true); - - // BOTH_ADDRESSES requires both - const both = new EncryptionDetails({ - type: EncryptionType.TYPE_ZADDRESS, - key: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", - derivationNumber: new BN(1), - seedDerivationMethod: new BN(SeedDerivationMethod.BOTH_ADDRESSES), - fromAddress: createTransferDestination("i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), - toAddress: createTransferDestination("i84T3MWcb6zWcwgNZoU3TXtrUn9EqM84A4") - }); - expect(both.isValid()).toBe(true); - }); - - test("fails validation with missing required addresses", () => { - // FROM_ADDRESS_ONLY without fromAddress should fail - const invalidFromOnly = new EncryptionDetails({ - type: EncryptionType.TYPE_ZADDRESS, - key: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", - derivationNumber: new BN(1), - seedDerivationMethod: new BN(SeedDerivationMethod.FROM_ADDRESS_ONLY) - }); - expect(invalidFromOnly.isValid()).toBe(false); - - // BOTH_ADDRESSES with only one address should fail - const invalidBoth = new EncryptionDetails({ - type: EncryptionType.TYPE_ZADDRESS, - key: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", - derivationNumber: new BN(1), - seedDerivationMethod: new BN(SeedDerivationMethod.BOTH_ADDRESSES), - fromAddress: createTransferDestination("iJ5LnijKvp1wkL4hB3EsJ5kjcE4T8VL4hD") - }); - expect(invalidBoth.isValid()).toBe(false); - }); - - test("roundtrip serialization with pubkey hash", () => { - const original = new EncryptionDetails({ - type: EncryptionType.TYPE_PUBKEY, - key: PUBKEY, - derivationNumber: new BN(42), - seedDerivationMethod: new BN(SeedDerivationMethod.BOTH_ADDRESSES), - fromAddress: createTransferDestination("i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), - toAddress: createTransferDestination("i84T3MWcb6zWcwgNZoU3TXtrUn9EqM84A4") - }); - - const buffer = original.toBuffer(); - const deserialized = new EncryptionDetails(); - deserialized.fromBuffer(buffer); - - expect(deserialized.type).toBe(original.type); - expect(deserialized.key).toBe(original.key); - expect(deserialized.derivationNumber.toString()).toBe(original.derivationNumber.toString()); - expect(deserialized.seedDerivationMethod?.toString()).toBe(original.seedDerivationMethod?.toString()); - expect(deserialized.fromAddress?.toBuffer().toString('hex')).toBe(original.fromAddress?.toBuffer().toString('hex')); - expect(deserialized.toAddress?.toBuffer().toString('hex')).toBe(original.toAddress?.toBuffer().toString('hex')); - }); - - test("roundtrip JSON serialization", () => { - const original = new EncryptionDetails({ - type: EncryptionType.TYPE_PUBKEY, - key: PUBKEY, - derivationNumber: new BN(42), - seedDerivationMethod: new BN(SeedDerivationMethod.FROM_ADDRESS_ONLY), - fromAddress: createTransferDestination("i84T3MWcb6zWcwgNZoU3TXtrUn9EqM84A4") - }); - - const json = original.toJSON(); - expect(json.type).toBe(EncryptionType.TYPE_PUBKEY); - expect(json.derivationnumber).toBe(42); - expect(json.seedderivationmethod).toBe(SeedDerivationMethod.FROM_ADDRESS_ONLY); - expect(json.fromaddress?.address).toBeDefined(); - expect(json.fromaddress?.type).toBeDefined(); - - const fromJson = EncryptionDetails.fromJSON(json); - expect(fromJson.toBuffer().toString("hex")).toBe(original.toBuffer().toString("hex")); - }); - - test("validates key format", () => { - // Valid pubkey hash format - const validPubkey = new EncryptionDetails({ - type: EncryptionType.TYPE_PUBKEY, - key: PUBKEY, - derivationNumber: new BN(1) - }); - expect(validPubkey.isKeyFormatValid()).toBe(true); - - // Invalid pubkey hash format - const invalidPubkey = new EncryptionDetails({ - type: EncryptionType.TYPE_PUBKEY, - key: "invalid_address", - derivationNumber: new BN(1) - }); - expect(invalidPubkey.isKeyFormatValid()).toBe(false); - expect(invalidPubkey.isValid()).toBe(false); - }); - - test("handles NONE derivation method", () => { - const details = new EncryptionDetails({ - type: EncryptionType.TYPE_PUBKEY, - key: PUBKEY, - derivationNumber: new BN(1), - seedDerivationMethod: new BN(SeedDerivationMethod.NONE) - }); - - expect(details.isValid()).toBe(true); - expect(details.seedDerivationMethod?.toNumber()).toBe(SeedDerivationMethod.NONE); - expect(details.seedDerivationMethod == null || details.seedDerivationMethod.eq(new BN(SeedDerivationMethod.NONE))).toBe(true); - }); -}); diff --git a/src/__tests__/vdxf/endorsement.test.ts b/src/__tests__/vdxf/endorsement.test.ts deleted file mode 100644 index b7dc5536..00000000 --- a/src/__tests__/vdxf/endorsement.test.ts +++ /dev/null @@ -1,40 +0,0 @@ - -import { Endorsement } from "../../vdxf/classes/endorsement/Endorsement"; - - -describe('Serializes and deserializes Endorsement', () => { - test('(de)serialize Endorsement', () => { - - const endorsementJson = { - version: 1, - endorsee: "candidate.vrsctest@", - reference: "f0e88c0a40e1681634faa6e6b23d5c60b413a4669817df55574a47086dd7e924", //blockchain txid - txid: "493a5f8b457a44beb7ae0c9399192448b6e2576f399aff11c63228481628a8b7" //claim ref inside the txid - } - - const e = Endorsement.fromJson(endorsementJson); - const r = e.toBuffer(); - const rFromBuf = new Endorsement; - rFromBuf.fromBuffer(r); - - expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) - }); - test('create Endorsement Identity Update', async () => { - - const endorsementJson = { - version: 1, - endorsee: "candidate.vrsctest@", - reference: "d425c5dfd8074260a2143e31382a25f3eb82a9eecd21dc63f025bff37cbd3628", - txid: "dcf012d856fead4d729b1e5f1b829e23e9198fb288e6c990f1d7ea9fb12c28a7" //claim ref inside the txid - } - - const e = Endorsement.fromJson(endorsementJson); - - const hash = e.createHash("endorsetest@"); - - e.setFlags(); - - expect(() => e.toIdentityUpdateJson("iBJqQMRzpCW1WVYoU2Ty2VbCJnvyTEsE1C")).toThrow("Signature is required"); - - }); -}); \ No newline at end of file diff --git a/src/__tests__/vdxf/informationrequestdetails.test.ts b/src/__tests__/vdxf/informationrequestdetails.test.ts deleted file mode 100644 index 85f7ae8c..00000000 --- a/src/__tests__/vdxf/informationrequestdetails.test.ts +++ /dev/null @@ -1,412 +0,0 @@ -import { BN } from "bn.js"; -import { - RequestItem, - RequestedFormatFlags, - InformationType -} from "../../vdxf/classes"; -import { - ATTESTATION_NAME -} from "../../vdxf/keys"; -import { - IDENTITY_FIRSTNAME, - IDENTITY_DATEOFBIRTH -} from "../../vdxf/identitydatakeys"; - -// Helper function to create RequestItem with properties -function createRequestItem(props: any = {}) { - const item = new RequestItem(); - Object.assign(item, props); - return item; -} - -const TEST_IDENTITY_ID_1 = "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"; - -describe("RequestItem (InformationRequestDetails)", () => { - describe("constructor and basic properties", () => { - test("creates instance with default values", () => { - const item = new RequestItem(); - - expect(item.version.toString()).toBe("1"); - expect(item.format.toString()).toBe("1"); // FULL_DATA - expect(item.type.toString()).toBe("1"); // ATTESTATION - expect(item.id).toEqual({}); - expect(item.signer).toBe(""); - expect(item.requestedKeys).toEqual([]); - }); - - test("creates instance with custom values", () => { - const item = createRequestItem({ - version: new BN(1), - format: new BN(RequestedFormatFlags.PARTIAL_DATA), - type: new BN(InformationType.CREDENTIAL), - id: { attestationId: "123", type: "identity" }, - signer: TEST_IDENTITY_ID_1, - requestedKeys: ["key1", "key2"] - }); - - expect(item.version.toString()).toBe("1"); - expect(item.format.toNumber()).toBe(RequestedFormatFlags.PARTIAL_DATA); - expect(item.type.toNumber()).toBe(InformationType.CREDENTIAL); - expect(item.id).toEqual({ attestationId: "123", type: "identity" }); - expect(item.signer).toBe(TEST_IDENTITY_ID_1); - expect(item.requestedKeys).toEqual(["key1", "key2"]); - }); - }); - - describe("validation", () => { - test("validates with correct format flags", () => { - // FULL_DATA - const fullData = createRequestItem({ - version: new BN(1), - format: new BN(RequestedFormatFlags.FULL_DATA), - type: new BN(InformationType.ATTESTATION), - id: {}, - signer: TEST_IDENTITY_ID_1 - }); - expect(fullData.isValid()).toBe(true); - expect(fullData.isFormatValid()).toBe(true); - - // PARTIAL_DATA - const partialData = createRequestItem({ - version: new BN(1), - format: new BN(RequestedFormatFlags.PARTIAL_DATA), - type: new BN(InformationType.CLAIM), - id: {}, - signer: TEST_IDENTITY_ID_1 - }); - expect(partialData.isValid()).toBe(true); - expect(partialData.isFormatValid()).toBe(true); - - }); - - test("rejects invalid format flags", () => { - const invalidFormat = createRequestItem({ - version: new BN(1), - format: new BN(3), // Invalid: not FULL, PARTIAL, or valid combinations - type: new BN(InformationType.ATTESTATION), - id: {}, - signer: TEST_IDENTITY_ID_1 - }); - expect(invalidFormat.isValid()).toBe(false); - expect(invalidFormat.isFormatValid()).toBe(false); - }); - - test("validates information types", () => { - const validTypes = [ - InformationType.ATTESTATION, - InformationType.CLAIM, - InformationType.CREDENTIAL - ]; - - validTypes.forEach(type => { - const item = createRequestItem({ - version: new BN(1), - format: new BN(RequestedFormatFlags.FULL_DATA), - type: new BN(type), - id: {}, - signer: TEST_IDENTITY_ID_1 - }); - expect(item.isValid()).toBe(true); - }); - - // Invalid type - const invalidType = createRequestItem({ - version: new BN(1), - format: new BN(RequestedFormatFlags.FULL_DATA), - type: new BN(99), // Invalid type - id: {}, - signer: TEST_IDENTITY_ID_1 - }); - expect(invalidType.isValid()).toBe(false); - }); - - test("validates version range", () => { - // Valid version - const validVersion = createRequestItem({ - version: new BN(1), - format: new BN(RequestedFormatFlags.FULL_DATA), - type: new BN(InformationType.ATTESTATION), - id: {}, - signer: TEST_IDENTITY_ID_1 - }); - expect(validVersion.isValid()).toBe(true); - - // Invalid version (too low) - const lowVersion = createRequestItem({ - version: new BN(0), - format: new BN(RequestedFormatFlags.FULL_DATA), - type: new BN(InformationType.ATTESTATION), - id: {}, - signer: TEST_IDENTITY_ID_1 - }); - expect(lowVersion.isValid()).toBe(false); - - // Invalid version (too high) - const highVersion = createRequestItem({ - version: new BN(99), - format: new BN(RequestedFormatFlags.FULL_DATA), - type: new BN(InformationType.ATTESTATION), - id: {}, - signer: TEST_IDENTITY_ID_1 - }); - expect(highVersion.isValid()).toBe(false); - }); - }); - - describe("serialization", () => { - test("roundtrip serialization", () => { - const original = createRequestItem({ - version: new BN(1), - format: new BN(RequestedFormatFlags.PARTIAL_DATA), - type: new BN(InformationType.CREDENTIAL), - id: { attestationId: "abc123", type: "identity", scope: "personal" }, - signer: TEST_IDENTITY_ID_1, - requestedKeys: ["name", "email", "birthdate"] - }); - - const buffer = original.toBuffer(); - const deserialized = new RequestItem(); - deserialized.fromBuffer(buffer); - - expect(deserialized.version.toString()).toBe(original.version.toString()); - expect(deserialized.format.toString()).toBe(original.format.toString()); - expect(deserialized.type.toString()).toBe(original.type.toString()); - expect(deserialized.id).toEqual(original.id); - expect(deserialized.signer).toBe(original.signer); - expect(deserialized.requestedKeys).toEqual(original.requestedKeys); - }); - - test("roundtrip JSON serialization", () => { - const original = createRequestItem({ - version: new BN(1), - format: new BN(RequestedFormatFlags.FULL_DATA | RequestedFormatFlags.COLLECTION), - type: new BN(InformationType.CLAIM), - id: { claimId: "xyz789" }, - signer: TEST_IDENTITY_ID_1, - requestedKeys: ["verified", "timestamp"] - }); - - const json = original.toJSON(); - const fromJson = new RequestItem(); - fromJson.fromJSON(json); - - expect(fromJson.version.toString()).toBe(original.version.toString()); - expect(fromJson.format.toString()).toBe(original.format.toString()); - expect(fromJson.type.toString()).toBe(original.type.toString()); - expect(fromJson.id).toEqual(original.id); - expect(fromJson.signer).toBe(original.signer); - expect(fromJson.requestedKeys).toEqual(original.requestedKeys); - }); - - test("handles empty requestedKeys", () => { - const item = createRequestItem({ - version: new BN(1), - format: new BN(RequestedFormatFlags.FULL_DATA), - type: new BN(InformationType.ATTESTATION), - id: { id: "test" }, - signer: TEST_IDENTITY_ID_1, - requestedKeys: [] - }); - - const buffer = item.toBuffer(); - const deserialized = new RequestItem(); - deserialized.fromBuffer(buffer); - - expect(deserialized.requestedKeys).toEqual([]); - }); - - test("handles undefined requestedKeys", () => { - const item = createRequestItem({ - version: new BN(1), - format: new BN(RequestedFormatFlags.FULL_DATA), - type: new BN(InformationType.ATTESTATION), - id: { id: "test" }, - signer: TEST_IDENTITY_ID_1 - // requestedKeys is undefined - }); - - const buffer = item.toBuffer(); - const deserialized = new RequestItem(); - deserialized.fromBuffer(buffer); - - expect(deserialized.requestedKeys).toEqual([]); - }); - }); - - describe("edge cases", () => { - test("handles complex id objects", () => { - const complexId = { - primary: "main-id", - secondary: "backup-id", - metadata: "serialized-metadata" - }; - - const item = createRequestItem({ - version: new BN(1), - format: new BN(RequestedFormatFlags.FULL_DATA), - type: new BN(InformationType.CREDENTIAL), - id: complexId, - signer: TEST_IDENTITY_ID_1 - }); - - const buffer = item.toBuffer(); - const deserialized = new RequestItem(); - deserialized.fromBuffer(buffer); - - expect(deserialized.id).toEqual(complexId); - }); - - test("handles empty id object", () => { - const item = createRequestItem({ - version: new BN(1), - format: new BN(RequestedFormatFlags.PARTIAL_DATA), - type: new BN(InformationType.ATTESTATION), - id: {}, - signer: TEST_IDENTITY_ID_1 - }); - - const buffer = item.toBuffer(); - const deserialized = new RequestItem(); - deserialized.fromBuffer(buffer); - - expect(deserialized.id).toEqual({}); - }); - - test("calculates byte length correctly", () => { - const item = createRequestItem({ - version: new BN(1), - format: new BN(RequestedFormatFlags.PARTIAL_DATA), - type: new BN(InformationType.CREDENTIAL), - id: { test: "value" }, - signer: TEST_IDENTITY_ID_1, - requestedKeys: ["key1", "key2"] - }); - - const expectedLength = item.getByteLength(); - const actualBuffer = item.toBuffer(); - - expect(actualBuffer.length).toBe(expectedLength); - }); - }); - - describe("real-world examples", () => { - const VALU_SIGNER = "i8mq7inkLvNRwYQNTtt3uaaJCs5YkKxjGg"; - const VALU_ATTESTATION_NAME = "Testname"; - - test("certification request with partial data", () => { - const certificationRequest = createRequestItem({ - format: new BN(RequestedFormatFlags.PARTIAL_DATA), - type: new BN(InformationType.ATTESTATION), - id: { [ATTESTATION_NAME.vdxfid]: VALU_ATTESTATION_NAME }, // "vrsc::attestation.name" : name - signer: VALU_SIGNER, - requestedKeys: [IDENTITY_FIRSTNAME.vdxfid, IDENTITY_DATEOFBIRTH.vdxfid] - }); - - expect(certificationRequest.format.toNumber()).toBe(RequestedFormatFlags.PARTIAL_DATA); - expect(certificationRequest.type.toNumber()).toBe(InformationType.ATTESTATION); - expect(certificationRequest.id[ATTESTATION_NAME.vdxfid]).toBe(VALU_ATTESTATION_NAME); - expect(certificationRequest.signer).toBe(VALU_SIGNER); - expect(certificationRequest.requestedKeys).toContain(IDENTITY_FIRSTNAME.vdxfid); - expect(certificationRequest.requestedKeys).toContain(IDENTITY_DATEOFBIRTH.vdxfid); - expect(certificationRequest.isValid()).toBe(true); - - // Test serialization roundtrip - const buffer = certificationRequest.toBuffer(); - const deserialized = new RequestItem(); - deserialized.fromBuffer(buffer); - - expect(deserialized.format.toNumber()).toBe(certificationRequest.format.toNumber()); - expect(deserialized.type.toNumber()).toBe(certificationRequest.type.toNumber()); - expect(deserialized.id).toEqual(certificationRequest.id); - expect(deserialized.signer).toBe(certificationRequest.signer); - expect(deserialized.requestedKeys).toEqual(certificationRequest.requestedKeys); - }); - - test("certification request with full data", () => { - const certificationRequest1 = createRequestItem({ - format: new BN(RequestedFormatFlags.FULL_DATA), - type: new BN(InformationType.ATTESTATION), - id: { [ATTESTATION_NAME.vdxfid]: VALU_ATTESTATION_NAME }, // "vrsc::attestation.name" : name - signer: VALU_SIGNER, - }); - - expect(certificationRequest1.format.toNumber()).toBe(RequestedFormatFlags.FULL_DATA); - expect(certificationRequest1.type.toNumber()).toBe(InformationType.ATTESTATION); - expect(certificationRequest1.id[ATTESTATION_NAME.vdxfid]).toBe(VALU_ATTESTATION_NAME); - expect(certificationRequest1.signer).toBe(VALU_SIGNER); - expect(certificationRequest1.requestedKeys).toEqual([]); // Default empty array - expect(certificationRequest1.isValid()).toBe(true); - - // Test serialization roundtrip - const buffer = certificationRequest1.toBuffer(); - const deserialized = new RequestItem(); - deserialized.fromBuffer(buffer); - - expect(deserialized.format.toNumber()).toBe(certificationRequest1.format.toNumber()); - expect(deserialized.type.toNumber()).toBe(certificationRequest1.type.toNumber()); - expect(deserialized.id).toEqual(certificationRequest1.id); - expect(deserialized.signer).toBe(certificationRequest1.signer); - expect(deserialized.requestedKeys).toEqual(certificationRequest1.requestedKeys); - }); - - test("certification request with collection format", () => { - const certificationRequest2 = createRequestItem({ - format: new BN(RequestedFormatFlags.COLLECTION), - type: new BN(InformationType.ATTESTATION), - id: { - [ATTESTATION_NAME.vdxfid]: VALU_ATTESTATION_NAME, - "iEpYe4cC73H7i9ay3G8geAjD1tFAhWscvj": "" - }, // "vrsc::attestation.name" : name - signer: VALU_SIGNER, - }); - - expect(certificationRequest2.format.toNumber()).toBe(RequestedFormatFlags.COLLECTION); - expect(certificationRequest2.type.toNumber()).toBe(InformationType.ATTESTATION); - expect(certificationRequest2.id[ATTESTATION_NAME.vdxfid]).toBe(VALU_ATTESTATION_NAME); - expect(certificationRequest2.signer).toBe(VALU_SIGNER); - expect(certificationRequest2.requestedKeys).toEqual([]); // Default empty array - expect(certificationRequest2.isValid()).toBe(true); - - // Test serialization roundtrip - const buffer = certificationRequest2.toBuffer(); - const deserialized = new RequestItem(); - deserialized.fromBuffer(buffer); - - expect(deserialized.format.toNumber()).toBe(certificationRequest2.format.toNumber()); - expect(deserialized.type.toNumber()).toBe(certificationRequest2.type.toNumber()); - expect(deserialized.id).toEqual(certificationRequest2.id); - expect(deserialized.signer).toBe(certificationRequest2.signer); - expect(deserialized.requestedKeys).toEqual(certificationRequest2.requestedKeys); - }); - - test("validates VDXF key usage", () => { - // Test that the VDXF keys have the expected structure - expect(ATTESTATION_NAME.vdxfid).toBeDefined(); - expect(IDENTITY_FIRSTNAME.vdxfid).toBeDefined(); - expect(IDENTITY_DATEOFBIRTH.vdxfid).toBeDefined(); - - // Test that the VDXF keys are strings (hex format) - expect(typeof ATTESTATION_NAME.vdxfid).toBe('string'); - expect(typeof IDENTITY_FIRSTNAME.vdxfid).toBe('string'); - expect(typeof IDENTITY_DATEOFBIRTH.vdxfid).toBe('string'); - - // Test creating a request with mixed VDXF keys and strings - const mixedRequest = createRequestItem({ - format: new BN(RequestedFormatFlags.PARTIAL_DATA), - type: new BN(InformationType.ATTESTATION), - id: { - [ATTESTATION_NAME.vdxfid]: VALU_ATTESTATION_NAME, - "customKey": "customValue" - }, - signer: VALU_SIGNER, - requestedKeys: [IDENTITY_FIRSTNAME.vdxfid, "customRequestedKey"] - }); - - expect(mixedRequest.isValid()).toBe(true); - expect(mixedRequest.id[ATTESTATION_NAME.vdxfid]).toBe(VALU_ATTESTATION_NAME); - expect(mixedRequest.id["customKey"]).toBe("customValue"); - expect(mixedRequest.requestedKeys).toContain(IDENTITY_FIRSTNAME.vdxfid); - expect(mixedRequest.requestedKeys).toContain("customRequestedKey"); - }); - }); -}); diff --git a/src/__tests__/vdxf/personaluserdatadetails.test.ts b/src/__tests__/vdxf/personaluserdatadetails.test.ts new file mode 100644 index 00000000..50d84d6b --- /dev/null +++ b/src/__tests__/vdxf/personaluserdatadetails.test.ts @@ -0,0 +1,31 @@ +import { BN } from "bn.js"; +import { + PersonalUserDataDetails, PersonalUserDataDetailsJson +} from "../../vdxf/classes"; +import { DataDescriptor } from "../../pbaas"; + + +describe("PersonalUserDataDetails", () => { + describe("constructor and basic properties", () => { + + test("creates instance with custom values", () => { + const item = new PersonalUserDataDetails({ + version: new BN(PersonalUserDataDetails.DEFAULT_VERSION), + flags: PersonalUserDataDetails.HAS_STATEMENTS.or(PersonalUserDataDetails.HAS_SIGNATURE), + signableobjects: [DataDescriptor.fromJson({ label: "123", objectdata : Buffer.from([1,2,3]), flags: DataDescriptor.FLAG_LABEL_PRESENT})], + statements: ["Statement 1", "Statement 2"], + signature: ["key1", "key2"] //TODO + }); + + expect(item.version.toString()).toBe("1"); + expect(item.flags.toNumber()).toBe(PersonalUserDataDetails.HAS_STATEMENTS.toNumber()); + expect(item.signableObjects).toEqual([{ label: "123", objectdata: Buffer.from([1, 2, 3]), flags: DataDescriptor.FLAG_LABEL_PRESENT }]); + expect(item.statements).toEqual(["Statement 1", "Statement 2"]); + expect(item.signature).toEqual(["key1", "key2"]); //TODO + + + }); + }); +//TODO when verifiable signature data comes add tests + +}); diff --git a/src/__tests__/vdxf/provisioningidentity.test.ts b/src/__tests__/vdxf/provisioningidentity.test.ts deleted file mode 100644 index b62ee504..00000000 --- a/src/__tests__/vdxf/provisioningidentity.test.ts +++ /dev/null @@ -1,44 +0,0 @@ - -import { ProvisionIdentity } from "../../vdxf/classes/requestobjects/ProvisioningIdentity"; - - -describe('Serializes and deserializes ProvisionIdentity', () => { - test('(de)serialize ProvisionIdentity', () => { - - const provisionJson = { - version: 1, - flags: ProvisionIdentity.FLAG_HAS_IDENTITYID.or(ProvisionIdentity.FLAG_HAS_WEBHOOK).toNumber(), - identityId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - systemId: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", - parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - webhook: "https://mydomain.com/webhook" - } - - const e = ProvisionIdentity.fromJson(provisionJson); - const r = e.toBuffer(); - const rFromBuf = new ProvisionIdentity; - rFromBuf.fromBuffer(r); - - expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) - }); - test('(de)serialize ProvisionIdentity with fqn', async () => { - - const provisionJson = { - version: 1, - flags: ProvisionIdentity.FLAG_HAS_IDENTITYID - .or(ProvisionIdentity.FLAG_HAS_WEBHOOK).or(ProvisionIdentity.FLAG_HAS_FQN).toNumber(), - identityId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - systemId: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", - parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - webhook: "https://mydomain.com/webhook", - fqn: "my.fully.vrsc@" - } - - const e = ProvisionIdentity.fromJson(provisionJson); - const r = e.toBuffer(); - const rFromBuf = new ProvisionIdentity; - rFromBuf.fromBuffer(r); - - expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) - }); -}); \ No newline at end of file diff --git a/src/__tests__/vdxf/provisioningidentitydetails.test.ts b/src/__tests__/vdxf/provisioningidentitydetails.test.ts new file mode 100644 index 00000000..960d0d4d --- /dev/null +++ b/src/__tests__/vdxf/provisioningidentitydetails.test.ts @@ -0,0 +1,37 @@ + +import { ProvisionIdentityDetails } from "../../vdxf/classes/requestobjects/ProvisionIdentityDetails"; +import { CompactIdAddressObject, ProvisionIdentityDetailsJson } from "../../vdxf/classes"; + +describe('Serializes and deserializes ProvisionIdentityDetails', () => { + test('(de)serialize ProvisionIdentityDetails', () => { + + const provisionJson: ProvisionIdentityDetailsJson = { + version: 1, + flags: ProvisionIdentityDetails.FLAG_HAS_SYSTEMID.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID).toNumber(), + systemid: {version: 1, flags: CompactIdAddressObject.IS_IDENTITYID.toNumber(), address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootsystemname: "VRSC"}, + parentid: {version: 1, flags: CompactIdAddressObject.IS_IDENTITYID.toNumber(), address: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", rootsystemname: "VRSC"} + } + + const e = ProvisionIdentityDetails.fromJson(provisionJson); + const r = e.toBuffer(); + const rFromBuf = new ProvisionIdentityDetails(); + rFromBuf.fromBuffer(r); + + expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) + }); + test('(de)serialize ProvisionIdentity with fqn', async () => { + + const provisionJson = { + version: 1, + flags: ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION.toNumber(), + identityid: {version: 1, flags: CompactIdAddressObject.IS_FQN.toNumber(), address: "my.fully.vrsc@", rootsystemname: "VRSC"} + } + + const e = ProvisionIdentityDetails.fromJson(provisionJson); + const r = e.toBuffer(); + const rFromBuf = new ProvisionIdentityDetails(); + rFromBuf.fromBuffer(r); + + expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) + }); +}); \ No newline at end of file diff --git a/src/__tests__/vdxf/requestuserdata.test.ts b/src/__tests__/vdxf/requestuserdata.test.ts new file mode 100644 index 00000000..a0fa3b8b --- /dev/null +++ b/src/__tests__/vdxf/requestuserdata.test.ts @@ -0,0 +1,38 @@ + +import { CompactIdAddressObject, RequestUserData, RequestUserDataJson } from "../../vdxf/classes"; + +describe('Serializes and deserializes RequestUserData', () => { + test('(de)serialize RequestUserData', () => { + + const provisionJson: RequestUserDataJson = { + version: 1, + flags: RequestUserData.FULL_DATA.or(RequestUserData.ATTESTATION).or(RequestUserData.HAS_SIGNER).toNumber(), + searchdatakey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], + signer: { version: 1, flags: CompactIdAddressObject.IS_IDENTITYID.toNumber(), address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootsystemname: "VRSC" } + } + + const e = RequestUserData.fromJson(provisionJson); + const r = e.toBuffer(); + const rFromBuf = new RequestUserData(); + rFromBuf.fromBuffer(r); + + expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) + }); + test('(de)serialize RequestUserData with requestedkeys', async () => { + + const provisionJson: RequestUserDataJson = { + version: 1, + flags: RequestUserData.PARTIAL_DATA.or(RequestUserData.ATTESTATION).or(RequestUserData.HAS_SIGNER).toNumber(), + searchdatakey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], + signer: { version: 1, flags: CompactIdAddressObject.IS_FQN.toNumber(), address: "bob@", rootsystemname: "VRSC" }, + requestedkeys: ["iLB8SG7ErJtTYcG1f4w9RLuMJPpAsjFkiL"] + } + + const e = RequestUserData.fromJson(provisionJson); + const r = e.toBuffer(); + const rFromBuf = new RequestUserData(); + rFromBuf.fromBuffer(r); + + expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) + }); +}); \ No newline at end of file diff --git a/src/vdxf/classes/CompactIdAddressObject.ts b/src/vdxf/classes/CompactIdAddressObject.ts index 636aa181..5fdf2b09 100644 --- a/src/vdxf/classes/CompactIdAddressObject.ts +++ b/src/vdxf/classes/CompactIdAddressObject.ts @@ -136,8 +136,8 @@ export class CompactIdAddressObject implements SerializableEntity { } static fromJson(json: any): CompactIdAddressObject { const instance = new CompactIdAddressObject(); - instance.version = new BN(json.version); - instance.flags = new BN(json.flags); + instance.version = new BN(json?.version || CompactIdAddressObject.DEFAULT_VERSION); + instance.flags = new BN(json?.flags || 0); instance.address = json.address; instance.rootSystemName = json.rootsystemname; return instance; diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index b7e507ad..fcadd202 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -49,5 +49,5 @@ export * from './requestobjects/RequestUserData' export * from './requestobjects/LoginRequestDetails' export * from './requestobjects/ProvisionIdentityDetails' export * from './requestobjects/AppEncryptionRequestDetails' -export * from './attestation/AttestationDetails' -export * from './endorsement/Endorsement' \ No newline at end of file +export * from './requestobjects/PersonalUserDataDetails' +export * from './CompactIdAddressObject' \ No newline at end of file diff --git a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts index fe3a2c6f..ee65bfa0 100644 --- a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts @@ -160,11 +160,11 @@ export class AppEncryptionRequestDetails implements SerializableEntity { } if (this.hasFromAddress()) { - writer.writeVarSlice(this.fromAddress.toBuffer()); + writer.writeSlice(this.fromAddress.toBuffer()); } if (this.hasToAddress()) { - writer.writeVarSlice(this.toAddress.toBuffer()); + writer.writeSlice(this.toAddress.toBuffer()); } return writer.buffer; diff --git a/src/vdxf/classes/requestobjects/DataTransferDetails.ts b/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts similarity index 95% rename from src/vdxf/classes/requestobjects/DataTransferDetails.ts rename to src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts index 2c5a58d8..c5aca63b 100644 --- a/src/vdxf/classes/requestobjects/DataTransferDetails.ts +++ b/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts @@ -23,13 +23,14 @@ import bufferutils from '../../../utils/bufferutils'; const { BufferReader, BufferWriter } = bufferutils; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { DataDescriptor, DataDescriptorJson } from '../../../pbaas'; +import { SignatureData, SignatureJsonDataInterface } from '../../../pbaas/SignatureData'; export interface PersonalUserDataDetailsJson { version: number; flags: number; signableobjects: Array; // Array of signable data objects statements?: Array; - signature?: VerifableSignatureDataJson + signature?: SignatureJsonDataInterface } export class PersonalUserDataDetails implements SerializableEntity { @@ -50,7 +51,7 @@ export class PersonalUserDataDetails implements SerializableEntity { flags: BigNumber; signableObjects: Array; statements?: Array; - signature?: VerifableSignatureData; + signature?: SignatureData; constructor(data?: PersonalUserDataDetails) { this.version = data?.version || PersonalUserDataDetails.DEFAULT_VERSION; @@ -182,7 +183,7 @@ export class PersonalUserDataDetails implements SerializableEntity { } if (this.hasSignature()) { - const signature = new VerifableSignatureData(); + const signature = new SignatureData(); reader.offset = signature.fromBuffer(reader.buffer, reader.offset); this.signature = signature; } @@ -216,7 +217,7 @@ export class PersonalUserDataDetails implements SerializableEntity { instance.signableObjects = dataDescriptorObjects; instance.statements = json.statements || []; - instance.signature = json.signature ? VerifableSignatureData.fromJson(json.signature) : undefined; + instance.signature = json.signature ? SignatureData.fromJson(json.signature) : undefined; return instance; } } \ No newline at end of file diff --git a/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts b/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts index d0473e8a..0804eb6b 100644 --- a/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts +++ b/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts @@ -21,7 +21,7 @@ import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import varint from "../../../utils/varint"; import { CompactIdAddressObject, CompactIdAddressObjectJson } from "../CompactIdAddressObject"; -export interface ProvisionIdentityInterfaceJson { +export interface ProvisionIdentityDetailsJson { version?: number; flags: number; systemid?: CompactIdAddressObjectJson; @@ -29,7 +29,7 @@ export interface ProvisionIdentityInterfaceJson { identityid?: CompactIdAddressObjectJson; } -export class ProvisionIdentity implements SerializableEntity { +export class ProvisionIdentityDetails implements SerializableEntity { version: BigNumber; flags: BigNumber; @@ -49,25 +49,25 @@ export class ProvisionIdentity implements SerializableEntity { constructor( - provisionIdentity?: ProvisionIdentity ){ + data?: ProvisionIdentityDetails ){ - this.version = provisionIdentity?.version || ProvisionIdentity.DEFAULT_VERSION; - this.flags = provisionIdentity?.flags || new BN(0, 10); - this.systemId = provisionIdentity?.systemId; - this.parentId = provisionIdentity?.parentId; - this.identityId = provisionIdentity?.identityId; + this.version = data?.version || ProvisionIdentityDetails.DEFAULT_VERSION; + this.flags = data?.flags || new BN(0, 10); + this.systemId = data?.systemId; + this.parentId = data?.parentId; + this.identityId = data?.identityId; } hasSystemId(): boolean { - return this.flags.and(ProvisionIdentity.FLAG_HAS_SYSTEMID).eq(ProvisionIdentity.FLAG_HAS_SYSTEMID); + return this.flags.and(ProvisionIdentityDetails.FLAG_HAS_SYSTEMID).eq(ProvisionIdentityDetails.FLAG_HAS_SYSTEMID); } hasParentId(): boolean { - return this.flags.and(ProvisionIdentity.FLAG_HAS_PARENTID).eq(ProvisionIdentity.FLAG_HAS_PARENTID); + return this.flags.and(ProvisionIdentityDetails.FLAG_HAS_PARENTID).eq(ProvisionIdentityDetails.FLAG_HAS_PARENTID); } hasIdentityId(): boolean { - return this.flags.and(ProvisionIdentity.FLAG_IS_A_DEFINED_NAME_TO_PROVISION).eq(ProvisionIdentity.FLAG_IS_A_DEFINED_NAME_TO_PROVISION); + return this.flags.and(ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION).eq(ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION); } getByteLength(): number { @@ -101,7 +101,7 @@ export class ProvisionIdentity implements SerializableEntity { } if (this.hasParentId()) { - writer.writeVarSlice(this.parentId.toBuffer()); + writer.writeSlice(this.parentId.toBuffer()); } if (this.hasIdentityId()) { @@ -138,7 +138,7 @@ export class ProvisionIdentity implements SerializableEntity { return reader.offset; } - toJson(): ProvisionIdentityInterfaceJson { + toJson(): ProvisionIdentityDetailsJson { this.setFlags(); return { version: this.version.toNumber(), @@ -149,9 +149,9 @@ export class ProvisionIdentity implements SerializableEntity { }; } - static fromJson(data: any): ProvisionIdentity { + static fromJson(data: any): ProvisionIdentityDetails { - const provision = new ProvisionIdentity(); + const provision = new ProvisionIdentityDetails(); provision.version = new BN(data?.version || 0); provision.flags = new BN(data?.flags || 0); @@ -174,15 +174,15 @@ export class ProvisionIdentity implements SerializableEntity { this.flags = new BN(0, 10); if (this.systemId) { - this.flags = this.flags.or(ProvisionIdentity.FLAG_HAS_SYSTEMID); + this.flags = this.flags.or(ProvisionIdentityDetails.FLAG_HAS_SYSTEMID); } if (this.parentId) { - this.flags = this.flags.or(ProvisionIdentity.FLAG_HAS_PARENTID); + this.flags = this.flags.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID); } if (this.identityId) { - this.flags = this.flags.or(ProvisionIdentity.FLAG_IS_A_DEFINED_NAME_TO_PROVISION); + this.flags = this.flags.or(ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION); } } diff --git a/src/vdxf/classes/requestobjects/RequestUserData.ts b/src/vdxf/classes/requestobjects/RequestUserData.ts index 0a9fbc27..550a595f 100644 --- a/src/vdxf/classes/requestobjects/RequestUserData.ts +++ b/src/vdxf/classes/requestobjects/RequestUserData.ts @@ -244,7 +244,7 @@ export class RequestUserData implements SerializableEntity { }; } - fromJSON(json: RequestUserDataJson) { + static fromJson(json: RequestUserDataJson) { const requestData = new RequestUserData(); requestData.version = new BN(json.version); From db1678e12666839a96abc17bcbf80dcc90190641 Mon Sep 17 00:00:00 2001 From: monkins Date: Mon, 20 Oct 2025 21:11:09 +0100 Subject: [PATCH 023/123] Update login tests and add interfaces to request objects --- .../vdxf/loginrequestdetails.test.ts | 411 ++---------------- src/vdxf/classes/CompactIdAddressObject.ts | 9 +- .../AppEncryptionRequestDetails.ts | 12 +- .../requestobjects/LoginRequestDetails.ts | 11 +- .../requestobjects/PersonalUserDataDetails.ts | 10 +- .../ProvisionIdentityDetails.ts | 10 +- .../classes/requestobjects/RequestUserData.ts | 10 +- 7 files changed, 90 insertions(+), 383 deletions(-) diff --git a/src/__tests__/vdxf/loginrequestdetails.test.ts b/src/__tests__/vdxf/loginrequestdetails.test.ts index a31469f3..a9a7a0b4 100644 --- a/src/__tests__/vdxf/loginrequestdetails.test.ts +++ b/src/__tests__/vdxf/loginrequestdetails.test.ts @@ -1,10 +1,9 @@ import { BN } from "bn.js"; import { LoginRequestDetails, - CallbackUriType, LoginRequestDetailsInterface, - LoginPermissionType -} from "../../vdxf/classes/requestobjects/LoginRequestDetails"; +CompactIdAddressObject +} from "../../vdxf/classes"; // Test constants with valid addresses from the codebase const TEST_CHALLENGE_ID = "iMdf3BJ1mEtKMAJqNg8hj5fMnCUCc3bpFN"; @@ -12,410 +11,68 @@ const TEST_IDENTITY_ID_1 = "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"; const TEST_IDENTITY_ID_2 = "i84T3MWcb6zWcwgNZoU3TXtrUn9EqM84A4"; const TEST_IDENTITY_ID_3 = "iJ5LnijKvp1wkL4hB3EsJ5kjcE4T8VL4hD"; -const SERIALIZED_LOGIN_REQUEST_DETAILS = Buffer.from("c72c5b342995a2186f96271e91686c5e942d13e10303012a5fc0e9dedf4f1e8351fe652a140e9dd38fa5a902324afad29f51859c54050db854d2c9bb52acd9bd03a0276f355ad37d8e5d2d10f16c1d051b6f6ead62011c68747470733a2f2f6578616d706c652e636f6d2f63616c6c6261636b", 'hex'); // Replace with actual serialized data +const SERIALIZED_LOGIN_REQUEST_DETAILS = Buffer.from("07c72c5b342995a2186f96271e91686c5e942d13e10301022a5fc0e9dedf4f1e8351fe652a140e9dd38fa5a90202324afad29f51859c54050db854d2c9bb52acd9bd0302a0276f355ad37d8e5d2d10f16c1d051b6f6ead6201011c68747470733a2f2f6578616d706c652e636f6d2f63616c6c6261636bd4c1d5c18419", 'hex'); // Replace with actual serialized data describe("LoginRequestDetails", () => { describe("constructor and basic properties", () => { test("creates instance with minimal required data", () => { const details = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID + requestId: TEST_CHALLENGE_ID }); - expect(details.challengeId).toBe(TEST_CHALLENGE_ID); + const detailsBuffer = details.toBuffer(); + + const newDetails = new LoginRequestDetails(); + newDetails.fromBuffer(detailsBuffer); + + expect(details.requestId).toBe(TEST_CHALLENGE_ID); expect(details.version.toString()).toBe("1"); expect(details.flags?.toString()).toBe("0"); expect(details.permissions).toBeNull(); expect(details.callbackUri).toBeNull(); + expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); }); test("creates instance with all optional data", () => { const details = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID, + requestId: TEST_CHALLENGE_ID, permissions: [ - { type: LoginPermissionType.REQUIRED_ID, identityid: TEST_IDENTITY_ID_1 }, - { type: LoginPermissionType.REQUIRED_SYSTEM, identityid: TEST_IDENTITY_ID_2 }, - { type: LoginPermissionType.REQUIRED_PARENT, identityid: TEST_IDENTITY_ID_3 } + { type: LoginRequestDetails.REQUIRED_ID, identity: new CompactIdAddressObject({ flags: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }, + { type: LoginRequestDetails.REQUIRED_SYSTEM, identity: new CompactIdAddressObject({ flags: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, + { type: LoginRequestDetails.REQUIRED_PARENT, identity: new CompactIdAddressObject({ flags: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } ], - callbackUri: { - type: CallbackUriType.TYPE_WEBHOOK, + callbackUri: [{ + type: LoginRequestDetails.TYPE_WEBHOOK, uri: "https://example.com/callback" - } + }], + expiryTime: new BN(2938475938457) // 1 hour from now }); - - // Need to manually call setFlags as constructor doesn't call it automatically - details.setFlags(); + const detailsBuffer = details.toBuffer(); + + const newDetails = new LoginRequestDetails(); + newDetails.fromBuffer(detailsBuffer); + + expect(newDetails.requestId).toBe(TEST_CHALLENGE_ID); + expect(newDetails.permissions?.length).toBe(3); + expect(newDetails.callbackUri?.length).toBe(1); + expect(newDetails.expiryTime?.toString()).toBe("2938475938457"); + + expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); + expect(details.toBuffer().toString('hex')).toBe(SERIALIZED_LOGIN_REQUEST_DETAILS.toString('hex')); - expect(details.challengeId).toBe(TEST_CHALLENGE_ID); - expect(details.version.toString()).toBe("1"); - expect(details.flags?.toString()).toBe("3"); // Both flags set (1 + 2) - expect(details.permissions).toHaveLength(3); - expect(details.callbackUri).toEqual({ - type: CallbackUriType.TYPE_WEBHOOK, - uri: "https://example.com/callback" - }); + }); test("creates instance with default constructor", () => { const details = new LoginRequestDetails(); - expect(details.challengeId).toBe(""); + expect(details.requestId).toBe(""); expect(details.version.toString()).toBe("1"); expect(details.flags?.toString()).toBe("0"); expect(details.permissions).toBeNull(); expect(details.callbackUri).toBeNull(); }); - }); - - describe("flag management", () => { - test("sets permissions flag when permissions are provided", () => { - const details = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID, - permissions: [ - { type: LoginPermissionType.REQUIRED_ID, identityid: TEST_IDENTITY_ID_1 } - ] - }); - - details.setFlags(); - const hasPermissionsFlag = details.flags?.and(LoginRequestDetails.FLAG_HAS_PERMISSIONS); - expect(hasPermissionsFlag?.eq(LoginRequestDetails.FLAG_HAS_PERMISSIONS)).toBe(true); - }); - - test("sets callback URI flag when callback URI is provided", () => { - const details = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID, - callbackUri: { - type: CallbackUriType.TYPE_REDIRECT, - uri: "https://app.example.com/login" - } - }); - - details.setFlags(); - const hasCallbackFlag = details.flags?.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); - expect(hasCallbackFlag?.eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI)).toBe(true); - }); - - test("sets multiple flags when multiple optional data is provided", () => { - const details = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID, - permissions: [ - { type: LoginPermissionType.REQUIRED_PARENT, identityid: TEST_IDENTITY_ID_3 } - ], - callbackUri: { - type: CallbackUriType.TYPE_DEEPLINK, - uri: "myapp://callback" - } - }); - - details.setFlags(); - const hasPermissionsFlag = details.flags?.and(LoginRequestDetails.FLAG_HAS_PERMISSIONS); - const hasCallbackFlag = details.flags?.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); - - expect(hasPermissionsFlag?.eq(LoginRequestDetails.FLAG_HAS_PERMISSIONS)).toBe(true); - expect(hasCallbackFlag?.eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI)).toBe(true); - }); - - test("does not set flags when optional data is not provided", () => { - const details = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID - }); - - details.setFlags(); - expect(details.flags?.toString()).toBe("0"); - }); - }); - - describe("validation", () => { - test("validates with valid challenge ID", () => { - const details = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID - }); - - expect(details.isValid()).toBe(true); - }); - - test("validates with all data provided", () => { - const details = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID, - permissions: [ - { type: LoginPermissionType.REQUIRED_ID, identityid: TEST_IDENTITY_ID_1 }, - ], - callbackUri: { - type: CallbackUriType.TYPE_OAUTH2, - uri: "https://oauth.example.com/callback" - } - }); - - expect(details.isValid()).toBe(true); - }); - - test("rejects empty challenge ID", () => { - const details = new LoginRequestDetails({ - challengeId: "" - }); - - expect(details.isValid()).toBe(false); - }); - - test("rejects invalid challenge ID format", () => { - const details = new LoginRequestDetails({ - challengeId: "invalid-challenge-id" - }); - - expect(details.isValid()).toBe(false); - }); - }); - - describe("callback URI types", () => { - test("handles webhook callback", () => { - const details = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID, - callbackUri: { - type: CallbackUriType.TYPE_WEBHOOK, - uri: "https://api.example.com/webhook" - } - }); - - expect(details.callbackUri?.type).toBe(CallbackUriType.TYPE_WEBHOOK); - expect(details.callbackUri?.uri).toBe("https://api.example.com/webhook"); - }); - - test("handles redirect callback", () => { - const details = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID, - callbackUri: { - type: CallbackUriType.TYPE_REDIRECT, - uri: "https://app.example.com/login/success" - } - }); - - expect(details.callbackUri?.type).toBe(CallbackUriType.TYPE_REDIRECT); - expect(details.callbackUri?.uri).toBe("https://app.example.com/login/success"); - }); - - test("handles deeplink callback", () => { - const details = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID, - callbackUri: { - type: CallbackUriType.TYPE_DEEPLINK, - uri: "myapp://auth/callback" - } - }); - - expect(details.callbackUri?.type).toBe(CallbackUriType.TYPE_DEEPLINK); - expect(details.callbackUri?.uri).toBe("myapp://auth/callback"); - }); - - test("handles OAuth2 callback", () => { - const details = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID, - callbackUri: { - type: CallbackUriType.TYPE_OAUTH2, - uri: "https://auth.example.com/oauth2/callback" - } - }); - - expect(details.callbackUri?.type).toBe(CallbackUriType.TYPE_OAUTH2); - expect(details.callbackUri?.uri).toBe("https://auth.example.com/oauth2/callback"); - }); - }); - - describe("serialization", () => { - test("roundtrip serialization with minimal data", () => { - const original = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID - }); - - const buffer = original.toBuffer(); - const deserialized = new LoginRequestDetails(); - deserialized.fromBuffer(buffer); - - expect(deserialized.challengeId).toBe(original.challengeId); - expect(deserialized.version.toString()).toBe(original.version.toString()); - expect(deserialized.flags?.toString()).toBe(original.flags?.toString()); - expect(deserialized.permissions).toBe(original.permissions); - expect(deserialized.callbackUri).toBe(original.callbackUri); - }); - - test("roundtrip serialization with permissions", () => { - const original = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID, - permissions: [ - { type: LoginPermissionType.REQUIRED_ID, identityid: TEST_IDENTITY_ID_1 }, - { type: LoginPermissionType.REQUIRED_SYSTEM, identityid: TEST_IDENTITY_ID_2 }, - { type: LoginPermissionType.REQUIRED_PARENT, identityid: TEST_IDENTITY_ID_3 } - ] - }); - - const buffer = original.toBuffer(); - const deserialized = new LoginRequestDetails(); - deserialized.fromBuffer(buffer); - - expect(deserialized.challengeId).toBe(original.challengeId); - expect(deserialized.permissions).toEqual(original.permissions); - }); - - test("roundtrip serialization with callback URI", () => { - const original = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID, - callbackUri: { - type: CallbackUriType.TYPE_WEBHOOK, - uri: "https://api.example.com/callback" - } - }); - - const buffer = original.toBuffer(); - const deserialized = new LoginRequestDetails(); - deserialized.fromBuffer(buffer); - - expect(deserialized.challengeId).toBe(original.challengeId); - expect(deserialized.callbackUri).toEqual(original.callbackUri); - }); - - test("roundtrip serialization with all data", () => { - const original = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID, - permissions: [ - { type: LoginPermissionType.REQUIRED_ID, identityid: TEST_IDENTITY_ID_1 }, - { type: LoginPermissionType.REQUIRED_PARENT, identityid: TEST_IDENTITY_ID_3 } - ], - callbackUri: { - type: CallbackUriType.TYPE_REDIRECT, - uri: "https://app.example.com/success" - } - }); - - const buffer = original.toBuffer(); - const deserialized = new LoginRequestDetails(); - deserialized.fromBuffer(buffer); - - expect(deserialized.challengeId).toBe(original.challengeId); - expect(deserialized.permissions).toEqual(original.permissions); - expect(deserialized.callbackUri).toEqual(original.callbackUri); - }); - - test("roundtrip JSON serialization", () => { - const original = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID, - permissions: [ - { type: LoginPermissionType.REQUIRED_ID, identityid: TEST_IDENTITY_ID_1 } - ], - callbackUri: { - type: CallbackUriType.TYPE_OAUTH2, - uri: "https://oauth.example.com" - } - }); - - const json = original.toJson(); - const fromJson = LoginRequestDetails.fromJson(json); - - expect(fromJson.challengeId).toBe(original.challengeId); - expect(fromJson.permissions).toEqual(original.permissions); - expect(fromJson.callbackUri).toEqual(original.callbackUri); - }); - - test("hex serialization verification with hardcoded expected data", () => { - const original = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID, - permissions: [ - { type: LoginPermissionType.REQUIRED_ID, identityid: TEST_IDENTITY_ID_1 } - ], - callbackUri: { - type: CallbackUriType.TYPE_WEBHOOK, - uri: "https://example.com/webhook" - } - }); - - const buffer = original.toBuffer(); - const hexString = buffer.toString('hex'); - - - // Expected hex string (to be hardcoded after first run) - const expectedHex = "c72c5b342995a2186f96271e91686c5e942d13e10301012a5fc0e9dedf4f1e8351fe652a140e9dd38fa5a9011b68747470733a2f2f6578616d706c652e636f6d2f776562686f6f6b"; // Will be filled after capturing the output - - // For now, just verify the roundtrip works - const deserialized = new LoginRequestDetails(); - deserialized.fromBuffer(buffer); - - expect(hexString).toBe(expectedHex); - expect(deserialized.challengeId).toBe(original.challengeId); - expect(deserialized.permissions).toEqual(original.permissions); - expect(deserialized.callbackUri).toEqual(original.callbackUri); - - // Verify hex length is reasonable - expect(hexString.length).toBeGreaterThan(0); - expect(hexString.length % 2).toBe(0); // Even length for valid hex - }); - }); - - describe("edge cases", () => { - test("handles empty permissions array", () => { - const details = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID, - permissions: [] - }); - - const buffer = details.toBuffer(); - const deserialized = new LoginRequestDetails(); - deserialized.fromBuffer(buffer); - - expect(deserialized.permissions).toEqual([]); - }); - - test("calculates byte length correctly", () => { - const details = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID, - permissions: [ - { type: LoginPermissionType.REQUIRED_ID, identityid: TEST_IDENTITY_ID_1 } - ], - callbackUri: { - type: CallbackUriType.TYPE_WEBHOOK, - uri: "https://example.com" - } - }); - - const expectedLength = details.getByteLength(); - const actualBuffer = details.toBuffer(); - - expect(actualBuffer.length).toBe(expectedLength); - }); - - test("handles multiple permissions", () => { - const longPermissions = [ - { type: LoginPermissionType.REQUIRED_ID, identityid: TEST_IDENTITY_ID_1 }, - { type: LoginPermissionType.REQUIRED_SYSTEM, identityid: TEST_IDENTITY_ID_2 }, - { type: LoginPermissionType.REQUIRED_PARENT, identityid: TEST_IDENTITY_ID_3 }, - { type: LoginPermissionType.REQUIRED_ID, identityid: TEST_IDENTITY_ID_1 }, - { type: LoginPermissionType.REQUIRED_SYSTEM, identityid: TEST_IDENTITY_ID_2 } - ]; - const details = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID, - permissions: longPermissions - }); - - const buffer = details.toBuffer(); - const deserialized = new LoginRequestDetails(); - deserialized.fromBuffer(buffer); - - expect(deserialized.permissions).toEqual(longPermissions); - }); - - test("handles long URIs", () => { - const longUri = "https://very-long-domain-name-for-testing-purposes.example.com/path/to/callback/endpoint/with/query?param1=value1¶m2=value2"; - const details = new LoginRequestDetails({ - challengeId: TEST_CHALLENGE_ID, - callbackUri: { - type: CallbackUriType.TYPE_REDIRECT, - uri: longUri - } - }); - - const buffer = details.toBuffer(); - const deserialized = new LoginRequestDetails(); - deserialized.fromBuffer(buffer); - - expect(deserialized.callbackUri?.uri).toBe(longUri); - }); - }); + }); }); diff --git a/src/vdxf/classes/CompactIdAddressObject.ts b/src/vdxf/classes/CompactIdAddressObject.ts index 5fdf2b09..8bbdb435 100644 --- a/src/vdxf/classes/CompactIdAddressObject.ts +++ b/src/vdxf/classes/CompactIdAddressObject.ts @@ -19,6 +19,13 @@ import { fromBase58Check, toBase58Check, toIAddress } from "../../utils/address" import varint from '../../utils/varint'; import { I_ADDR_VERSION } from '../../constants/vdxf'; +export interface CompactIdAddressObjectInterface { + version?: BigNumber; + flags: BigNumber; + address: string; + rootSystemName: string; +} + export interface CompactIdAddressObjectJson { version: number; flags: number; @@ -41,7 +48,7 @@ export class CompactIdAddressObject implements SerializableEntity { address: string; rootSystemName: string; - constructor(data?: CompactIdAddressObject) { + constructor(data?: CompactIdAddressObjectInterface) { this.version = data?.version || new BN(CompactIdAddressObject.DEFAULT_VERSION); this.flags = data?.flags || new BN(0); this.address = data?.address || ''; diff --git a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts index ee65bfa0..d2604bc2 100644 --- a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts @@ -22,6 +22,16 @@ import { decodeSaplingAddress, toBech32 } from '../../../utils/sapling'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { CompactIdAddressObject } from '../CompactIdAddressObject'; +export interface AppEncryptionRequestDetailsInterface { + version?: BigNumber; + flags: BigNumber; + encryptToZAddress: string; + derivationNumber: BigNumber; + secondaryDerivationNumber?: BigNumber; + fromAddress?: CompactIdAddressObject; + toAddress?: CompactIdAddressObject; +} + export interface AppEncryptionRequestDetailsJson { version: number; flags: number; @@ -68,7 +78,7 @@ export class AppEncryptionRequestDetails implements SerializableEntity { fromAddress?: CompactIdAddressObject; toAddress?: CompactIdAddressObject; - constructor(data?: AppEncryptionRequestDetails) { + constructor(data?: AppEncryptionRequestDetailsInterface) { this.version = data?.version || AppEncryptionRequestDetails.DEFAULT_VERSION; this.flags = data?.flags || new BN(0); this.encryptToZAddress = data?.encryptToZAddress || ''; diff --git a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts index d00e4d84..861810b7 100644 --- a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts @@ -25,6 +25,15 @@ import { fromBase58Check, toBase58Check } from "../../../utils/address"; import varint from "../../../utils/varint"; import { CompactIdAddressObject, CompactIdAddressObjectJson } from "../CompactIdAddressObject"; +export interface LoginRequestDetailsInterface { + version?: BigNumber; + flags?: BigNumber; + requestId: string; + permissions?: Array; + callbackUri?: Array; + expiryTime?: BigNumber; +} + export interface LoginPermissionJson { type: number; identity: CompactIdAddressObjectJson; @@ -81,7 +90,7 @@ export class LoginRequestDetails implements SerializableEntity { static TYPE_DEEPLINK = new BN(3, 10); constructor( - request?: LoginRequestDetails + request?: LoginRequestDetailsInterface ) { this.version = request?.version || LoginRequestDetails.DEFAULT_VERSION; diff --git a/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts b/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts index c5aca63b..911e87db 100644 --- a/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts +++ b/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts @@ -25,6 +25,14 @@ import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { DataDescriptor, DataDescriptorJson } from '../../../pbaas'; import { SignatureData, SignatureJsonDataInterface } from '../../../pbaas/SignatureData'; +export interface PersonalUserDataDetailsInterface { + version?: BigNumber; + flags: BigNumber; + signableObjects: Array; + statements?: Array; + signature?: SignatureData; +} + export interface PersonalUserDataDetailsJson { version: number; flags: number; @@ -53,7 +61,7 @@ export class PersonalUserDataDetails implements SerializableEntity { statements?: Array; signature?: SignatureData; - constructor(data?: PersonalUserDataDetails) { + constructor(data?: PersonalUserDataDetailsInterface) { this.version = data?.version || PersonalUserDataDetails.DEFAULT_VERSION; this.flags = data?.flags || new BN(0); this.signableObjects = data?.signableObjects || []; diff --git a/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts b/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts index 0804eb6b..6ea1cb6e 100644 --- a/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts +++ b/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts @@ -21,6 +21,14 @@ import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import varint from "../../../utils/varint"; import { CompactIdAddressObject, CompactIdAddressObjectJson } from "../CompactIdAddressObject"; +export interface ProvisionIdentityDetailsInterface { + version?: BigNumber; + flags: BigNumber; + systemId?: CompactIdAddressObject; // system e.g. VRSC@ + parentId?: CompactIdAddressObject; // parent e.g. Token@ + identityId?: CompactIdAddressObject; // Full identity e.g. john.VRSC@ +} + export interface ProvisionIdentityDetailsJson { version?: number; flags: number; @@ -49,7 +57,7 @@ export class ProvisionIdentityDetails implements SerializableEntity { constructor( - data?: ProvisionIdentityDetails ){ + data?: ProvisionIdentityDetailsInterface ){ this.version = data?.version || ProvisionIdentityDetails.DEFAULT_VERSION; this.flags = data?.flags || new BN(0, 10); diff --git a/src/vdxf/classes/requestobjects/RequestUserData.ts b/src/vdxf/classes/requestobjects/RequestUserData.ts index 550a595f..5c2ada2d 100644 --- a/src/vdxf/classes/requestobjects/RequestUserData.ts +++ b/src/vdxf/classes/requestobjects/RequestUserData.ts @@ -30,6 +30,14 @@ import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { CompactIdAddressObject, CompactIdAddressObjectJson } from '../CompactIdAddressObject'; import { fromBase58Check, toBase58Check } from '../../../utils/address'; +export interface RequestUserDataInterface { + version?: BigNumber; + flags: BigNumber; + searchDataKey: Array<{[key: string]: string}>; + signer?: CompactIdAddressObject; + requestedKeys?: string[]; +} + export interface RequestUserDataJson { version: number; flags: number; @@ -62,7 +70,7 @@ export class RequestUserData implements SerializableEntity { signer?: CompactIdAddressObject; requestedKeys?: string[]; - constructor(data?: RequestUserData) { + constructor(data?: RequestUserDataInterface) { this.version = data?.version || RequestUserData.DEFAULT_VERSION; this.flags = data?.flags || new BN(0); this.searchDataKey = data?.searchDataKey || []; From bd90966c1039b4be6dd3140b8284d07dd71803b9 Mon Sep 17 00:00:00 2001 From: monkins Date: Mon, 20 Oct 2025 21:20:09 +0100 Subject: [PATCH 024/123] Add login Details Ordinal type --- src/vdxf/classes/OrdinalVdxfObject.ts | 34 ++++++++++++++++++++++++--- src/vdxf/keys.ts | 10 ++++++++ 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/vdxf/classes/OrdinalVdxfObject.ts b/src/vdxf/classes/OrdinalVdxfObject.ts index 88d12789..b19eecf0 100644 --- a/src/vdxf/classes/OrdinalVdxfObject.ts +++ b/src/vdxf/classes/OrdinalVdxfObject.ts @@ -9,8 +9,9 @@ import { HASH160_BYTE_LENGTH, I_ADDR_VERSION, NULL_ADDRESS } from "../../constan import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "./payment/VerusPayInvoiceDetails"; import { OrdinalVdxfObjectOrdinalMap } from "./OrdinalVdxfObjectOrdinalMap"; -import { DATA_TYPE_OBJECT_DATADESCRIPTOR, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../keys"; +import { DATA_TYPE_OBJECT_DATADESCRIPTOR, VERUSPAY_INVOICE_DETAILS_VDXF_KEY, LOGIN_REQUEST_DETAILS_VDXF_KEY } from "../keys"; import { DEFAULT_VERUS_CHAINID, DEFAULT_VERUS_CHAINNAME } from "../../constants/pbaas"; +import { LoginRequestDetails, LoginRequestDetailsJson } from "../.."; export interface OrdinalVdxfObjectInterfaceTemplate { version?: BigNumber; @@ -26,8 +27,8 @@ export type OrdinalVdxfObjectJsonTemplate = { data?: T; } -export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails; -export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson; +export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | LoginRequestDetails; +export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | LoginRequestDetailsJson ; export type BufferOrOrdinalVdxfObjectReservedData = Buffer | OrdinalVdxfObjectReservedData; export type StringOrOrdinalVdxfObjectReservedDataJson = string | OrdinalVdxfObjectReservedDataJson; @@ -40,6 +41,7 @@ export type OrdinalVdxfObjectClass = new (...args: any[]) => OrdinalVdxfObject; export const getOrdinalVdxfObjectClassForType = (type: BigNumber): OrdinalVdxfObjectClass => { if (type.eq(OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR)) return DataDescriptorOrdinalVdxfObject; else if (type.eq(OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE)) return VerusPayInvoiceOrdinalVdxfObject; + else if (type.eq(OrdinalVdxfObject.ORDINAL_LOGIN_REQUEST_DETAILS)) return LoginRequestDetailsOrdinalVdxfObject; else if ( type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR) || type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING) || @@ -61,6 +63,7 @@ export class OrdinalVdxfObject implements SerializableEntity { static ORDINAL_DATA_DESCRIPTOR = new BN(0, 10); static ORDINAL_VERUSPAY_INVOICE = new BN(1, 10); + static ORDINAL_LOGIN_REQUEST_DETAILS = new BN(2, 10); static VDXF_OBJECT_RESERVED_BYTE_I_ADDR = new BN(102, 10); static VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new BN(103, 10); @@ -244,6 +247,7 @@ export class OrdinalVdxfObject implements SerializableEntity { OrdinalVdxfObjectOrdinalMap.registerOrdinal(OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR.toNumber(), DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid); OrdinalVdxfObjectOrdinalMap.registerOrdinal(OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE.toNumber(), VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid); +OrdinalVdxfObjectOrdinalMap.registerOrdinal(OrdinalVdxfObject.ORDINAL_LOGIN_REQUEST_DETAILS.toNumber(), LOGIN_REQUEST_DETAILS_VDXF_KEY.vdxfid); export class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { data: Buffer; @@ -361,4 +365,28 @@ export class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalV data: VerusPayInvoiceDetails.fromJson(details.data) }) } +} + +export class LoginRequestDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: LoginRequestDetails; + + constructor( + request: OrdinalVdxfObjectInterfaceTemplate = { + data: new LoginRequestDetails() + } + ) { + super( + { + type: OrdinalVdxfObject.ORDINAL_LOGIN_REQUEST_DETAILS, + data: request.data + }, + LoginRequestDetails + ); + } + + static fromJson(details: OrdinalVdxfObjectJsonTemplate): LoginRequestDetailsOrdinalVdxfObject { + return new LoginRequestDetailsOrdinalVdxfObject({ + data: LoginRequestDetails.fromJson(details.data) + }) + } } \ No newline at end of file diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index 838b6b13..6bb52802 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -614,3 +614,13 @@ export const ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS: VDXFKeyInterface = { "name": "vrsc::attestation.view.request.multipleattestations" } } + +export const LOGIN_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface = { + "vdxfid": "i4FZ64np4rhtEkSF8mUX7xtaoqqWLPh1cf", + "indexid": "x95fYsDtvAvYrvKGzT8g6MR7qVrXBnjHhp", + "hash160result": "b1fe18b799bd076bfa9afcb206e934468c198408", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::request.loginrequestdetails" + } +} From 61e1daffdc49270bd277b0059d4652fecfccac13 Mon Sep 17 00:00:00 2001 From: monkins Date: Mon, 20 Oct 2025 21:27:10 +0100 Subject: [PATCH 025/123] delete old tests --- .../utils/informationrequest.test.ts | 334 ------------------ .../vdxf/provisioningrequestdetails.test.ts | 206 ----------- 2 files changed, 540 deletions(-) delete mode 100644 src/__tests__/utils/informationrequest.test.ts delete mode 100644 src/__tests__/vdxf/provisioningrequestdetails.test.ts diff --git a/src/__tests__/utils/informationrequest.test.ts b/src/__tests__/utils/informationrequest.test.ts deleted file mode 100644 index 36228eb1..00000000 --- a/src/__tests__/utils/informationrequest.test.ts +++ /dev/null @@ -1,334 +0,0 @@ -import { RequestItem, RequestedFormatFlags, InformationType } from "../../vdxf/classes/requestobjects/InformationRequest"; -import { BN } from "bn.js"; - -describe('Information Request Tests', () => { - const testAttestationKey = {"iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Valu Proof of Life"}; - const testRequestedKeys = ["iPzSt64gwsqmxcz3Ht7zhMngLC6no6S74K", "i6E3RQUUX3jt8CkizuLX6ihZHTegCmmbj4"]; - const testSigner = "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB"; - - describe('RequestItem Tests', () => { - test('should create RequestItem with default values', () => { - const requestItem = new RequestItem(); - - expect(requestItem.version.toNumber()).toBe(1); - expect(requestItem.format.toNumber()).toBe(1); // FULL_DATA - expect(requestItem.type.toNumber()).toBe(1); // ATTESTATION - expect(requestItem.id).toEqual({}); - expect(requestItem.signer).toBe(''); - expect(requestItem.requestedKeys).toEqual([]); - }); - - test('should create RequestItem with provided values', () => { - const testItem = new RequestItem(); - testItem.version = new BN(1); - testItem.format = new BN(RequestedFormatFlags.FULL_DATA); - testItem.type = new BN(InformationType.ATTESTATION); - testItem.id = testAttestationKey; - testItem.signer = testSigner; - testItem.requestedKeys = testRequestedKeys; - - const requestItem = new RequestItem(testItem); - - expect(requestItem.version.toNumber()).toBe(1); - expect(requestItem.format.toNumber()).toBe(RequestedFormatFlags.FULL_DATA); - expect(requestItem.type.toNumber()).toBe(InformationType.ATTESTATION); - expect(requestItem.id).toEqual(testAttestationKey); - expect(requestItem.signer).toBe(testSigner); - expect(requestItem.requestedKeys).toEqual(testRequestedKeys); - }); - - test('should validate format correctly - FULL_DATA', () => { - const requestItem = new RequestItem(); - requestItem.format = new BN(RequestedFormatFlags.FULL_DATA); - - expect(requestItem.isFormatValid()).toBe(true); - }); - - test('should validate format correctly - PARTIAL_DATA', () => { - const requestItem = new RequestItem(); - requestItem.format = new BN(RequestedFormatFlags.PARTIAL_DATA); - - expect(requestItem.isFormatValid()).toBe(true); - }); - - test('should validate format correctly - COLLECTION', () => { - const requestItem = new RequestItem(); - requestItem.format = new BN(RequestedFormatFlags.COLLECTION); - - expect(requestItem.isFormatValid()).toBe(true); - }); - - test('should reject invalid format - FULL_DATA | PARTIAL_DATA (3)', () => { - const requestItem = new RequestItem(); - requestItem.format = new BN(RequestedFormatFlags.FULL_DATA | RequestedFormatFlags.PARTIAL_DATA); - - expect(requestItem.isFormatValid()).toBe(false); - }); - - test('should reject invalid format - random value (7)', () => { - const requestItem = new RequestItem(); - requestItem.format = new BN(7); - - expect(requestItem.isFormatValid()).toBe(false); - }); - - test('should serialize and deserialize to buffer correctly', () => { - const requestItem = new RequestItem(); - requestItem.version = new BN(1); - requestItem.format = new BN(RequestedFormatFlags.PARTIAL_DATA); - requestItem.type = new BN(InformationType.ATTESTATION); - requestItem.id = testAttestationKey; - requestItem.signer = testSigner; - requestItem.requestedKeys = testRequestedKeys; - - // Serialize to buffer - const buffer = requestItem.toBuffer(); - expect(buffer).toBeInstanceOf(Buffer); - - // Deserialize from buffer - const deserializedItem = new RequestItem(); - const bytesRead = deserializedItem.fromBuffer(buffer); - - expect(bytesRead).toBeGreaterThan(0); - expect(deserializedItem.version.toNumber()).toBe(1); - expect(deserializedItem.format.toNumber()).toBe(RequestedFormatFlags.PARTIAL_DATA); - expect(deserializedItem.type.toNumber()).toBe(InformationType.ATTESTATION); - expect(deserializedItem.id).toEqual(testAttestationKey); - expect(deserializedItem.signer).toBe(testSigner); - expect(deserializedItem.requestedKeys).toEqual(testRequestedKeys); - }); - - test('should serialize and deserialize to JSON correctly', () => { - const requestItem = new RequestItem(); - requestItem.version = new BN(1); - requestItem.format = new BN(RequestedFormatFlags.FULL_DATA | RequestedFormatFlags.COLLECTION); - requestItem.type = new BN(InformationType.CREDENTIAL); - requestItem.id = testAttestationKey; - requestItem.signer = testSigner; - requestItem.requestedKeys = testRequestedKeys; - - // Serialize to JSON - const json = requestItem.toJSON(); - expect(json).toEqual({ - version: 1, - format: RequestedFormatFlags.FULL_DATA | RequestedFormatFlags.COLLECTION, - type: InformationType.CREDENTIAL, - id: testAttestationKey, - signer: testSigner, - requestedkeys: testRequestedKeys - }); - - // Deserialize from JSON - const deserializedItem = new RequestItem(); - deserializedItem.fromJSON(json); - - expect(deserializedItem.version.toNumber()).toBe(1); - expect(deserializedItem.format.toNumber()).toBe(RequestedFormatFlags.FULL_DATA | RequestedFormatFlags.COLLECTION); - expect(deserializedItem.type.toNumber()).toBe(InformationType.CREDENTIAL); - expect(deserializedItem.id).toEqual(testAttestationKey); - expect(deserializedItem.signer).toBe(testSigner); - expect(deserializedItem.requestedKeys).toEqual(testRequestedKeys); - }); - - test('should calculate byte length correctly', () => { - const requestItem = new RequestItem(); - requestItem.version = new BN(1); - requestItem.format = new BN(RequestedFormatFlags.FULL_DATA); - requestItem.type = new BN(InformationType.ATTESTATION); - requestItem.id = testAttestationKey; - requestItem.signer = testSigner; - requestItem.requestedKeys = testRequestedKeys; - - const byteLength = requestItem.getByteLength(); - const buffer = requestItem.toBuffer(); - - expect(buffer.length).toBe(byteLength); - }); - - test('should handle empty id object', () => { - const requestItem = new RequestItem(); - requestItem.id = {}; - requestItem.signer = testSigner; - - const buffer = requestItem.toBuffer(); - const deserializedItem = new RequestItem(); - deserializedItem.fromBuffer(buffer); - - expect(deserializedItem.id).toEqual({}); - expect(deserializedItem.signer).toBe(testSigner); - }); - - test('should handle complex id object', () => { - const complexId = { - "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Valu Proof of Life", - "iAnotherKey123": "Another Value", - "iThirdKey456": "Third Value" - }; - - const requestItem = new RequestItem(); - requestItem.id = complexId; - requestItem.signer = testSigner; - - const buffer = requestItem.toBuffer(); - const deserializedItem = new RequestItem(); - deserializedItem.fromBuffer(buffer); - - expect(deserializedItem.id).toEqual(complexId); - expect(deserializedItem.signer).toBe(testSigner); - }); - }); - - describe('Round-trip Tests', () => { - test('should maintain data integrity through multiple serialization formats', () => { - // Create original request item - const originalItem = new RequestItem(); - originalItem.version = new BN(1); - originalItem.format = new BN(RequestedFormatFlags.PARTIAL_DATA | RequestedFormatFlags.COLLECTION); - originalItem.type = new BN(InformationType.CREDENTIAL); - originalItem.id = testAttestationKey; - originalItem.signer = testSigner; - originalItem.requestedKeys = testRequestedKeys; - - // JSON round-trip - const json = originalItem.toJSON(); - const fromJsonItem = new RequestItem(); - fromJsonItem.fromJSON(json); - - // Buffer round-trip from JSON-restored item - const buffer = fromJsonItem.toBuffer(); - const fromBufferItem = new RequestItem(); - fromBufferItem.fromBuffer(buffer); - - // Verify all data is preserved - expect(fromBufferItem.version.toNumber()).toBe(originalItem.version.toNumber()); - expect(fromBufferItem.format.toNumber()).toBe(originalItem.format.toNumber()); - expect(fromBufferItem.type.toNumber()).toBe(originalItem.type.toNumber()); - expect(fromBufferItem.id).toEqual(originalItem.id); - expect(fromBufferItem.signer).toBe(originalItem.signer); - expect(fromBufferItem.requestedKeys).toEqual(originalItem.requestedKeys); - }); - - test('should handle buffer round-trip with hex string', () => { - const requestItem = new RequestItem(); - requestItem.version = new BN(1); - requestItem.format = new BN(RequestedFormatFlags.FULL_DATA); - requestItem.type = new BN(InformationType.ATTESTATION); - requestItem.id = testAttestationKey; - requestItem.signer = testSigner; - requestItem.requestedKeys = testRequestedKeys; - - // Serialize to buffer and convert to hex - const buffer = requestItem.toBuffer(); - const hexString = buffer.toString('hex'); - - // Reconstruct from hex and verify - const reconstructedBuffer = Buffer.from(hexString, 'hex'); - const reconstructedItem = new RequestItem(); - reconstructedItem.fromBuffer(reconstructedBuffer); - - expect(reconstructedItem.id).toEqual(testAttestationKey); - expect(reconstructedItem.signer).toBe(testSigner); - expect(reconstructedItem.requestedKeys).toEqual(testRequestedKeys); - expect(reconstructedItem.format.toNumber()).toBe(RequestedFormatFlags.FULL_DATA); - expect(reconstructedItem.type.toNumber()).toBe(InformationType.ATTESTATION); - }); - - test('should deserialize from known hex string - RequestItem with test data', () => { - // Create original item with test data - const originalItem = new RequestItem(); - originalItem.version = new BN(1); - originalItem.format = new BN(RequestedFormatFlags.PARTIAL_DATA | RequestedFormatFlags.COLLECTION); // 6 - originalItem.type = new BN(InformationType.CREDENTIAL); // 3 - originalItem.id = testAttestationKey; - originalItem.signer = testSigner; - originalItem.requestedKeys = testRequestedKeys; - - // Generate the hex string - const originalBuffer = originalItem.toBuffer(); - const hexString = originalBuffer.toString('hex'); - - // Deserialize from the hex string - const buffer = Buffer.from(hexString, 'hex'); - const deserializedItem = new RequestItem(); - deserializedItem.fromBuffer(buffer); - - // Verify all fields match exactly - expect(deserializedItem.version.toNumber()).toBe(1); - expect(deserializedItem.format.toNumber()).toBe(6); // PARTIAL_DATA | COLLECTION - expect(deserializedItem.type.toNumber()).toBe(3); // CREDENTIAL - expect(deserializedItem.id).toEqual(testAttestationKey); - expect(deserializedItem.signer).toBe(testSigner); - expect(deserializedItem.requestedKeys).toEqual(testRequestedKeys); - - // Verify round-trip integrity - serialize again and compare - const reserializedBuffer = deserializedItem.toBuffer(); - expect(reserializedBuffer.toString('hex')).toBe(hexString); - }); - - test('should handle edge cases in hex deserialization', () => { - // Test with minimal data - const minimalItem = new RequestItem(); - minimalItem.version = new BN(1); - minimalItem.format = new BN(RequestedFormatFlags.FULL_DATA); - minimalItem.type = new BN(InformationType.ATTESTATION); - minimalItem.id = {}; - minimalItem.signer = ""; - minimalItem.requestedKeys = []; - - const minimalBuffer = minimalItem.toBuffer(); - const minimalHex = minimalBuffer.toString('hex'); - - // Deserialize minimal case - const deserializedMinimal = new RequestItem(); - deserializedMinimal.fromBuffer(Buffer.from(minimalHex, 'hex')); - - expect(deserializedMinimal.version.toNumber()).toBe(1); - expect(deserializedMinimal.format.toNumber()).toBe(RequestedFormatFlags.FULL_DATA); - expect(deserializedMinimal.type.toNumber()).toBe(InformationType.ATTESTATION); - expect(deserializedMinimal.id).toEqual({}); - expect(deserializedMinimal.signer).toBe(""); - expect(deserializedMinimal.requestedKeys).toEqual([]); - - // Verify round-trip - const reserializedMinimal = deserializedMinimal.toBuffer(); - expect(reserializedMinimal.toString('hex')).toBe(minimalHex); - }); - - test('should deserialize from hardcoded hex string with test data', () => { - // This hex string represents a RequestItem with: - // - version: 1, format: 6 (PARTIAL_DATA | COLLECTION), type: 3 (CREDENTIAL) - // - id: {"iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Valu Proof of Life"} - // - signer: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB" - // - requestedKeys: ["iPzSt64gwsqmxcz3Ht7zhMngLC6no6S74K", "i6E3RQUUX3jt8CkizuLX6ihZHTegCmmbj4"] - const knownHexString = "06033b7b226945456a566b764d394e697a3475325743723651517a78317a705653764446756231223a2256616c752050726f6f66206f66204c696665227d22694b6a725443776f5046526b3434664169326e594e62504731365a55516a76314e42022269507a53743634677773716d78637a334874377a684d6e674c43366e6f365337344b22693645335251555558336a7438436b697a754c583669685a48546567436d6d626a34"; - - // Deserialize from known hex string - const buffer = Buffer.from(knownHexString, 'hex'); - const deserializedItem = new RequestItem(); - deserializedItem.fromBuffer(buffer); - - // Verify all expected values - expect(deserializedItem.version.toNumber()).toBe(1); - expect(deserializedItem.format.toNumber()).toBe(6); // PARTIAL_DATA | COLLECTION - expect(deserializedItem.type.toNumber()).toBe(3); // CREDENTIAL - expect(deserializedItem.id).toEqual(testAttestationKey); - expect(deserializedItem.signer).toBe(testSigner); - expect(deserializedItem.requestedKeys).toEqual(testRequestedKeys); - - // Verify we can serialize back to the same hex string - const reserializedBuffer = deserializedItem.toBuffer(); - expect(reserializedBuffer.toString('hex')).toBe(knownHexString); - - // Verify JSON output - const json = deserializedItem.toJSON(); - expect(json).toEqual({ - version: 1, - format: 6, - type: 3, - id: testAttestationKey, - signer: testSigner, - requestedkeys: testRequestedKeys - }); - }); - }); -}); diff --git a/src/__tests__/vdxf/provisioningrequestdetails.test.ts b/src/__tests__/vdxf/provisioningrequestdetails.test.ts deleted file mode 100644 index 64710774..00000000 --- a/src/__tests__/vdxf/provisioningrequestdetails.test.ts +++ /dev/null @@ -1,206 +0,0 @@ -import { BN } from "bn.js"; -import { ProvisionIdentity as ProvisioningIdentity } from "../../vdxf/classes"; - -describe("ProvisioningIdentity", () => { - describe("constructor and basic properties", () => { - test("creates instance with minimal values", () => { - const identity = new ProvisioningIdentity({ - flags: new BN(0), - parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB" - }); - - expect(identity.version.toString()).toBe("1"); - expect(identity.flags.toString()).toBe("0"); - expect(identity.parentId).toBe("iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB"); - expect(identity.systemId).toBe(undefined); - expect(identity.identityId).toBe(undefined); - expect(identity.fqn).toBe(undefined); - expect(identity.webhook).toBe(undefined); - }); - - test("creates instance with all values", () => { - const identity = new ProvisioningIdentity({ - version: new BN(1), - flags: new BN(31), // All flags set - systemId: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", - parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - identityId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - fqn: "test.identity", - webhook: "https://webhook.example.com" - }); - - expect(identity.version.toString()).toBe("1"); - expect(identity.flags.toString()).toBe("31"); - expect(identity.systemId).toBe("iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"); - expect(identity.parentId).toBe("iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB"); - expect(identity.identityId).toBe("iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB"); - expect(identity.fqn).toBe("test.identity"); - expect(identity.webhook).toBe("https://webhook.example.com"); - }); - }); - - describe("flag management", () => { - test("sets FLAG_HAS_IDENTITYID when identity ID is provided", () => { - const identity = new ProvisioningIdentity({ - flags: new BN(0), - parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - identityId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB" - }); - - identity.setFlags(); - const hasIdentityFlag = identity.flags.and(ProvisioningIdentity.FLAG_HAS_IDENTITYID); - expect(hasIdentityFlag.eq(ProvisioningIdentity.FLAG_HAS_IDENTITYID)).toBe(true); - }); - - test("sets FLAG_HAS_FQN when FQN is provided", () => { - const identity = new ProvisioningIdentity({ - flags: new BN(0), - parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - fqn: "test.identity" - }); - - identity.setFlags(); - const hasFqnFlag = identity.flags.and(ProvisioningIdentity.FLAG_HAS_FQN); - expect(hasFqnFlag.eq(ProvisioningIdentity.FLAG_HAS_FQN)).toBe(true); - }); - - test("sets FLAG_HAS_WEBHOOK when webhook is provided", () => { - const identity = new ProvisioningIdentity({ - flags: new BN(0), - parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - webhook: "https://example.com/webhook" - }); - - identity.setFlags(); - const hasWebhookFlag = identity.flags.and(ProvisioningIdentity.FLAG_HAS_WEBHOOK); - expect(hasWebhookFlag.eq(ProvisioningIdentity.FLAG_HAS_WEBHOOK)).toBe(true); - }); - - test("sets FLAG_PARENT_AS_FQN when parentId is not a valid address", () => { - const identity = new ProvisioningIdentity({ - flags: new BN(0), - parentId: "invalid.parent.name" - }); - - identity.setFlags(); - const hasParentFqnFlag = identity.flags.and(ProvisioningIdentity.FLAG_PARENT_AS_FQN); - expect(hasParentFqnFlag.eq(ProvisioningIdentity.FLAG_PARENT_AS_FQN)).toBe(true); - }); - - test("sets FLAG_SYSTEM_AS_SIGNATURE when systemId is not provided", () => { - const identity = new ProvisioningIdentity({ - flags: new BN(0), - parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB" - }); - - identity.setFlags(); - const hasSystemSignatureFlag = identity.flags.and(ProvisioningIdentity.FLAG_SYSTEM_AS_SIGNATURE); - expect(hasSystemSignatureFlag.eq(ProvisioningIdentity.FLAG_SYSTEM_AS_SIGNATURE)).toBe(true); - }); - - test("sets multiple flags when multiple values are provided", () => { - const identity = new ProvisioningIdentity({ - flags: new BN(0), - parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - identityId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - fqn: "test.identity", - webhook: "https://example.com/webhook" - }); - - identity.setFlags(); - const hasIdentityFlag = identity.flags.and(ProvisioningIdentity.FLAG_HAS_IDENTITYID); - const hasFqnFlag = identity.flags.and(ProvisioningIdentity.FLAG_HAS_FQN); - const hasWebhookFlag = identity.flags.and(ProvisioningIdentity.FLAG_HAS_WEBHOOK); - const hasSystemSignatureFlag = identity.flags.and(ProvisioningIdentity.FLAG_SYSTEM_AS_SIGNATURE); - - expect(hasIdentityFlag.eq(ProvisioningIdentity.FLAG_HAS_IDENTITYID)).toBe(true); - expect(hasFqnFlag.eq(ProvisioningIdentity.FLAG_HAS_FQN)).toBe(true); - expect(hasWebhookFlag.eq(ProvisioningIdentity.FLAG_HAS_WEBHOOK)).toBe(true); - expect(hasSystemSignatureFlag.eq(ProvisioningIdentity.FLAG_SYSTEM_AS_SIGNATURE)).toBe(true); - }); - }); - - describe("validation", () => { - test("validates with minimal data", () => { - const identity = new ProvisioningIdentity({ - flags: new BN(0), - parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB" - }); - - expect(identity.isValid()).toBe(true); - }); - - test("validates with all data provided", () => { - const identity = new ProvisioningIdentity({ - flags: new BN(0), - systemId: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", - parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - identityId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - fqn: "test.identity", - webhook: "https://example.com/webhook" - }); - - expect(identity.isValid()).toBe(true); - }); - - test("fails validation without parentId", () => { - const identity = new ProvisioningIdentity({ - flags: new BN(0) - }); - - expect(identity.isValid()).toBe(false); - }); - - test("fails validation with empty parentId", () => { - const identity = new ProvisioningIdentity({ - flags: new BN(0), - parentId: "" - }); - - expect(identity.isValid()).toBe(false); - }); - }); - - describe("serialization", () => { - test("roundtrip serialization with buffer", () => { - const original = new ProvisioningIdentity({ - flags: new BN(0), - systemId: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", - parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - identityId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - fqn: "test.identity", - webhook: "https://example.com/webhook" - }); - - const buffer = original.toBuffer(); - const deserialized = new ProvisioningIdentity(); - deserialized.fromBuffer(buffer); - - expect(deserialized.systemId).toBe(original.systemId); - expect(deserialized.parentId).toBe(original.parentId); - expect(deserialized.identityId).toBe(original.identityId); - expect(deserialized.fqn).toBe(original.fqn); - expect(deserialized.webhook).toBe(original.webhook); - }); - - test("roundtrip serialization with JSON", () => { - const original = new ProvisioningIdentity({ - flags: new BN(0), - systemId: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", - parentId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - identityId: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", - fqn: "test.identity", - webhook: "https://example.com/webhook" - }); - - const json = original.toJson(); - const deserialized = ProvisioningIdentity.fromJson(json); - - expect(deserialized.systemId).toBe(original.systemId); - expect(deserialized.parentId).toBe(original.parentId); - expect(deserialized.identityId).toBe(original.identityId); - expect(deserialized.fqn).toBe(original.fqn); - expect(deserialized.webhook).toBe(original.webhook); - }); - }); -}); From 942d44aa1e2bf7e2b733290c6fd678d8ba8180b7 Mon Sep 17 00:00:00 2001 From: monkins Date: Tue, 21 Oct 2025 07:47:19 +0100 Subject: [PATCH 026/123] Sync to master dist --- dist/pbaas/DataDescriptor.js | 4 +- .../classes/attestation/AttestationDetails.js | 1 - .../attestation/InformationRequest.d.ts | 69 ------ .../classes/attestation/InformationRequest.js | 194 --------------- .../vdxf/classes/endorsement/Endorsement.d.ts | 66 ----- dist/vdxf/classes/endorsement/Endorsement.js | 231 ------------------ dist/vdxf/classes/index.d.ts | 3 - dist/vdxf/classes/index.js | 3 - dist/vdxf/keys.d.ts | 1 - dist/vdxf/keys.js | 9 - 10 files changed, 1 insertion(+), 580 deletions(-) delete mode 100644 dist/vdxf/classes/attestation/InformationRequest.d.ts delete mode 100644 dist/vdxf/classes/attestation/InformationRequest.js delete mode 100644 dist/vdxf/classes/endorsement/Endorsement.d.ts delete mode 100644 dist/vdxf/classes/endorsement/Endorsement.js diff --git a/dist/pbaas/DataDescriptor.js b/dist/pbaas/DataDescriptor.js index 90465075..3184dbcf 100644 --- a/dist/pbaas/DataDescriptor.js +++ b/dist/pbaas/DataDescriptor.js @@ -13,7 +13,6 @@ class DataDescriptor { constructor(data) { this.flags = new bn_js_1.BN(0); this.version = DataDescriptor.DEFAULT_VERSION; - this.objectdata = Buffer.from([]); if (data != null) { if (data.flags != null) this.flags = data.flags; @@ -206,7 +205,6 @@ class DataDescriptor { return !!(this.version.gte(DataDescriptor.FIRST_VERSION) && this.version.lte(DataDescriptor.LAST_VERSION) && this.flags.and(DataDescriptor.FLAG_MASK.notn(DataDescriptor.FLAG_MASK.bitLength()))); } toJson() { - var _a; const retval = { version: this.version.toNumber(), flags: this.flags.toNumber() @@ -219,7 +217,7 @@ class DataDescriptor { } let processedObject = new _1.VdxfUniValue(); processedObject.fromBuffer(this.objectdata); - if ((_a = processedObject.values[0]) === null || _a === void 0 ? void 0 : _a[""]) { + if (processedObject.values[0][""]) { const keys = Object.keys(processedObject.values[0]); const values = Object.values(processedObject.values[0]); if (isText && Buffer.isBuffer(values[0]) && keys[0] === "") { diff --git a/dist/vdxf/classes/attestation/AttestationDetails.js b/dist/vdxf/classes/attestation/AttestationDetails.js index 91ae4f4f..12fcf266 100644 --- a/dist/vdxf/classes/attestation/AttestationDetails.js +++ b/dist/vdxf/classes/attestation/AttestationDetails.js @@ -287,7 +287,6 @@ class AttestationDetails { this.attestations.length > 0; } toJson() { - this.setFlags(); // Ensure flags are set before converting to JSON const retval = { version: this.version.toNumber(), attestations: this.attestations.map((attestation) => attestation.toJson()) diff --git a/dist/vdxf/classes/attestation/InformationRequest.d.ts b/dist/vdxf/classes/attestation/InformationRequest.d.ts deleted file mode 100644 index 15fc69de..00000000 --- a/dist/vdxf/classes/attestation/InformationRequest.d.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { BigNumber } from '../../../utils/types/BigNumber'; -import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -export declare enum RequestedFormatFlags { - FULL_DATA = 1,// Whole Credential - PARTIAL_DATA = 2,// Particular leaf + proof + signature - COLLECTION = 4 -} -export declare enum InformationType { - ATTESTATION = 1, - CLAIM = 2, - CREDENTIAL = 3 -} -export interface RequestItemJson { - version: number; - format: RequestedFormatFlags; - type: InformationType; - id: { - [key: string]: string; - }; - signer: string; - requestedkeys?: string[]; -} -export interface IdentityInformationRequestJson { - version: number; - items: RequestItemJson[]; -} -export declare class RequestItem implements SerializableEntity { - static VERSION_INVALID: import("bn.js"); - static FIRST_VERSION: import("bn.js"); - static LAST_VERSION: import("bn.js"); - static DEFAULT_VERSION: import("bn.js"); - static FULL_DATA: import("bn.js"); - static PARTIAL_DATA: import("bn.js"); - static COLLECTION: import("bn.js"); - static ATTESTATION: import("bn.js"); - static CLAIM: import("bn.js"); - static CREDENTIAL: import("bn.js"); - version: BigNumber; - format: BigNumber; - type: BigNumber; - id: { - [key: string]: string; - }; - signer: string; - requestedkeys?: string[]; - constructor(json?: RequestItem); - isFormatValid(): boolean; - isValid(): boolean; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJSON(): RequestItemJson; - fromJSON(json: RequestItemJson): void; -} -export declare class RequestInformation implements SerializableEntity { - static VERSION_INVALID: import("bn.js"); - static FIRST_VERSION: import("bn.js"); - static LAST_VERSION: import("bn.js"); - static DEFAULT_VERSION: import("bn.js"); - version: BigNumber; - items: RequestItem[]; - constructor(data: RequestInformation); - isValid(): boolean; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJSON(): IdentityInformationRequestJson; - fromJSON(json: IdentityInformationRequestJson): void; -} diff --git a/dist/vdxf/classes/attestation/InformationRequest.js b/dist/vdxf/classes/attestation/InformationRequest.js deleted file mode 100644 index 8a14b832..00000000 --- a/dist/vdxf/classes/attestation/InformationRequest.js +++ /dev/null @@ -1,194 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RequestInformation = exports.RequestItem = exports.InformationType = exports.RequestedFormatFlags = void 0; -const bn_js_1 = require("bn.js"); -const varint_1 = require("../../../utils/varint"); -const varuint_1 = require("../../../utils/varuint"); -const bufferutils_1 = require("../../../utils/bufferutils"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -var RequestedFormatFlags; -(function (RequestedFormatFlags) { - RequestedFormatFlags[RequestedFormatFlags["FULL_DATA"] = 1] = "FULL_DATA"; - RequestedFormatFlags[RequestedFormatFlags["PARTIAL_DATA"] = 2] = "PARTIAL_DATA"; - RequestedFormatFlags[RequestedFormatFlags["COLLECTION"] = 4] = "COLLECTION"; // Multiple FULL_DATA only -})(RequestedFormatFlags || (exports.RequestedFormatFlags = RequestedFormatFlags = {})); -var InformationType; -(function (InformationType) { - InformationType[InformationType["ATTESTATION"] = 1] = "ATTESTATION"; - InformationType[InformationType["CLAIM"] = 2] = "CLAIM"; - InformationType[InformationType["CREDENTIAL"] = 3] = "CREDENTIAL"; -})(InformationType || (exports.InformationType = InformationType = {})); -class RequestItem { - constructor(json) { - this.version = (json === null || json === void 0 ? void 0 : json.version) || RequestItem.DEFAULT_VERSION; - this.format = (json === null || json === void 0 ? void 0 : json.format) || RequestItem.FULL_DATA; - this.type = (json === null || json === void 0 ? void 0 : json.type) || RequestItem.ATTESTATION; - this.id = (json === null || json === void 0 ? void 0 : json.id) || {}; - this.signer = (json === null || json === void 0 ? void 0 : json.signer) || ''; - this.requestedkeys = (json === null || json === void 0 ? void 0 : json.requestedkeys) || []; - } - isFormatValid() { - // Allowed values: 1 (FULL), 2 (PARTIAL), 5 (FULL|COLLECTION), 6 (PARTIAL|COLLECTION) - const f = this.format; - return (f.eq(RequestItem.FULL_DATA) || - f.eq(RequestItem.PARTIAL_DATA) || - f.eq(RequestItem.FULL_DATA.or(RequestItem.COLLECTION)) || - f.eq(RequestItem.PARTIAL_DATA.or(RequestItem.COLLECTION))); - } - isValid() { - let valid = this.version.gte(RequestInformation.FIRST_VERSION) && this.version.lte(RequestInformation.LAST_VERSION); - valid && (valid = this.isFormatValid()); - valid && (valid = this.type.gte(RequestItem.ATTESTATION) && this.type.lte(RequestItem.CREDENTIAL)); - return valid; - } - getByteLength() { - let length = 0; - length += varint_1.default.encodingLength(this.version); - length += varint_1.default.encodingLength(this.format); - length += varint_1.default.encodingLength(this.type); - // Serialize id object as JSON string - const idJson = JSON.stringify(this.id); - length += varuint_1.default.encodingLength(Buffer.byteLength(idJson, 'utf8')); - length += Buffer.byteLength(idJson, 'utf8'); - // Add signer length - length += varuint_1.default.encodingLength(Buffer.byteLength(this.signer, 'utf8')); - length += Buffer.byteLength(this.signer, 'utf8'); - length += varuint_1.default.encodingLength(this.requestedkeys ? this.requestedkeys.length : 0); - if (this.requestedkeys) { - for (const key of this.requestedkeys) { - length += varuint_1.default.encodingLength(Buffer.byteLength(key, 'utf8')); - length += Buffer.byteLength(key, 'utf8'); - } - } - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.version); - writer.writeVarInt(this.format); - writer.writeVarInt(this.type); - // Serialize id object as JSON string - const idJson = JSON.stringify(this.id); - writer.writeVarSlice(Buffer.from(idJson, 'utf8')); - // Write signer - writer.writeVarSlice(Buffer.from(this.signer, 'utf8')); - writer.writeCompactSize(this.requestedkeys ? this.requestedkeys.length : 0); - if (this.requestedkeys) { - for (const key of this.requestedkeys) { - writer.writeVarSlice(Buffer.from(key, 'utf8')); - } - } - return writer.buffer; - } - fromBuffer(buffer, offset) { - const reader = new BufferReader(buffer, offset); - this.version = reader.readVarInt(); - this.format = reader.readVarInt(); - this.type = reader.readVarInt(); - // Deserialize id object from JSON string - const idJsonString = reader.readVarSlice().toString('utf8'); - this.id = JSON.parse(idJsonString); - // Read signer - this.signer = reader.readVarSlice().toString('utf8'); - this.requestedkeys = []; - const requestedKeysLength = reader.readCompactSize(); - for (let i = 0; i < requestedKeysLength; i++) { - this.requestedkeys.push(reader.readVarSlice().toString('utf8')); - } - return reader.offset; - } - toJSON() { - return { - version: this.version.toNumber(), - format: this.format.toNumber(), - type: this.type.toNumber(), - id: this.id, - signer: this.signer, - requestedkeys: this.requestedkeys - }; - } - fromJSON(json) { - this.version = new bn_js_1.BN(json.version); - this.format = new bn_js_1.BN(json.format); - this.type = new bn_js_1.BN(json.type); - this.id = json.id; - this.signer = json.signer; - this.requestedkeys = json.requestedkeys || []; - } -} -exports.RequestItem = RequestItem; -RequestItem.VERSION_INVALID = new bn_js_1.BN(0); -RequestItem.FIRST_VERSION = new bn_js_1.BN(1); -RequestItem.LAST_VERSION = new bn_js_1.BN(1); -RequestItem.DEFAULT_VERSION = new bn_js_1.BN(1); -RequestItem.FULL_DATA = new bn_js_1.BN(1); -RequestItem.PARTIAL_DATA = new bn_js_1.BN(2); -RequestItem.COLLECTION = new bn_js_1.BN(4); -RequestItem.ATTESTATION = new bn_js_1.BN(1); -RequestItem.CLAIM = new bn_js_1.BN(2); -RequestItem.CREDENTIAL = new bn_js_1.BN(3); -class RequestInformation { - constructor(data) { - this.version = (data === null || data === void 0 ? void 0 : data.version) ? new bn_js_1.BN(data.version) : RequestInformation.DEFAULT_VERSION; - this.items = (data === null || data === void 0 ? void 0 : data.items) || []; - } - isValid() { - let valid = this.version.gte(RequestInformation.FIRST_VERSION) && this.version.lte(RequestInformation.LAST_VERSION); - valid && (valid = this.items.every(item => { - return item.isValid(); - })); - return valid; - } - getByteLength() { - let length = 0; - length += varint_1.default.encodingLength(this.version); - length += varuint_1.default.encodingLength(this.items.length); - for (const item of this.items) { - length += item.getByteLength(); - } - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.version); - writer.writeCompactSize(this.items ? this.items.length : 0); - if (this.items) { - for (const item of this.items) { - const itemBuffer = item.toBuffer(); - writer.writeSlice(itemBuffer); - } - } - return writer.buffer; - } - fromBuffer(buffer, offset) { - const reader = new BufferReader(buffer, offset); - this.version = reader.readVarInt(); - this.items = []; - const itemsLength = reader.readCompactSize(); - for (let i = 0; i < itemsLength; i++) { - const item = new RequestItem(); - reader.offset = item.fromBuffer(buffer, reader.offset); - this.items.push(item); - } - return reader.offset; - } - toJSON() { - return { - version: this.version.toNumber(), - items: this.items.map(item => item.toJSON()) - }; - } - fromJSON(json) { - this.version = new bn_js_1.BN(json.version); - this.items = json.items.map(itemJson => { - const item = new RequestItem(); - item.fromJSON(itemJson); - return item; - }); - } -} -exports.RequestInformation = RequestInformation; -RequestInformation.VERSION_INVALID = new bn_js_1.BN(0); -RequestInformation.FIRST_VERSION = new bn_js_1.BN(1); -RequestInformation.LAST_VERSION = new bn_js_1.BN(1); -RequestInformation.DEFAULT_VERSION = new bn_js_1.BN(1); diff --git a/dist/vdxf/classes/endorsement/Endorsement.d.ts b/dist/vdxf/classes/endorsement/Endorsement.d.ts deleted file mode 100644 index 9aff3f02..00000000 --- a/dist/vdxf/classes/endorsement/Endorsement.d.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { BigNumber } from '../../../utils/types/BigNumber'; -import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { VdxfUniValue } from '../../../pbaas/VdxfUniValue'; -import { SignatureData, SignatureJsonDataInterface } from '../../../pbaas/SignatureData'; -import { VDXFKeyInterface } from '../../keys'; -export declare const ENDORSEMENT: VDXFKeyInterface; -export declare const ENDORSEMENT_SKILL: VDXFKeyInterface; -export declare const ENDORSEMENT_QUALIFICATION: VDXFKeyInterface; -export declare const ENDORSEMENT_REFERENCE: VDXFKeyInterface; -export declare const ENDORSEMENT_PROJECT: VDXFKeyInterface; -export interface EndorsementJson { - version: number; - flags?: number; - endorsee: string; - message?: string; - reference: string; - metadata?: any; - signature?: SignatureJsonDataInterface; - txid?: string; -} -export declare class Endorsement implements SerializableEntity { - static VERSION_INVALID: import("bn.js"); - static VERSION_FIRST: import("bn.js"); - static VERSION_LAST: import("bn.js"); - static VERSION_CURRENT: import("bn.js"); - static FLAGS_HAS_METADATA: import("bn.js"); - static FLAGS_HAS_SIGNATURE: import("bn.js"); - static FLAGS_HAS_TXID: import("bn.js"); - static FLAGS_HAS_MESSAGE: import("bn.js"); - version: BigNumber; - flags: BigNumber; - endorsee: string; - message: string; - reference: Buffer; - txid: Buffer; - metaData: VdxfUniValue | null; - signature: SignatureData | null; - constructor(data?: { - version?: BigNumber; - flags?: BigNumber; - endorsee?: string; - message?: string; - reference?: Buffer; - metaData?: VdxfUniValue | null; - signature?: SignatureData | null; - txid?: Buffer; - }); - getByteLength(): number; - setFlags(): void; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toIdentityUpdateJson(type: VDXFKeyInterface): { - [key: string]: { - [key: string]: [string]; - }; - }; - createHash(name: any): Buffer; - toJson(): { - version: string; - flags: string; - endorsee: string; - message: string; - reference: string; - }; - static fromJson(json: EndorsementJson): Endorsement; -} diff --git a/dist/vdxf/classes/endorsement/Endorsement.js b/dist/vdxf/classes/endorsement/Endorsement.js deleted file mode 100644 index f08df582..00000000 --- a/dist/vdxf/classes/endorsement/Endorsement.js +++ /dev/null @@ -1,231 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Endorsement = exports.ENDORSEMENT_PROJECT = exports.ENDORSEMENT_REFERENCE = exports.ENDORSEMENT_QUALIFICATION = exports.ENDORSEMENT_SKILL = exports.ENDORSEMENT = void 0; -const varuint_1 = require("../../../utils/varuint"); -const varint_1 = require("../../../utils/varint"); -const bufferutils_1 = require("../../../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const VdxfUniValue_1 = require("../../../pbaas/VdxfUniValue"); -const SignatureData_1 = require("../../../pbaas/SignatureData"); -const crypto_1 = require("crypto"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -exports.ENDORSEMENT = { - "vdxfid": "iDbPhzm8g7mQ94Cy2VNn7dJPVk5zcDRhPS", - "indexid": "xJRWAoCDXRz4mE5ztB2w61pvXQ71WSXnGu", - "hash160result": "dbfcb74829379cb79d39d9dbe81a76627bb8fd6e", - "qualifiedname": { - "namespace": "iNQFA8jtYe9JYq6Qr49ZxAhvWErFurWjTa", - "name": "valu.vrsc::endorsement" - } -}; -exports.ENDORSEMENT_SKILL = { - "vdxfid": "iBJqQMRzpCW1WVYoU2Ty2VbCJnvyTEsE1C", - "indexid": "xG8ws9s5fWig8fRqKi87zt7jLSwzNoJ3s7", - "hash160result": "309091e8f181bd19279b6cd8873aaafaf4d8eb55", - "qualifiedname": { - "namespace": "iNQFA8jtYe9JYq6Qr49ZxAhvWErFurWjTa", - "name": "valu.vrsc::endorsement.skill" - } -}; -exports.ENDORSEMENT_QUALIFICATION = { - "vdxfid": "iGW3WFP1h8ZDsJWLFMvTF3ZqLuiMRBK6jV", - "indexid": "xML9y3p6YSmtVUPN73acDS6NNZjNE6JbQo", - "hash160result": "d2f91effc976eee2d9574d4ab5e4f0456827e38e", - "qualifiedname": { - "namespace": "iNQFA8jtYe9JYq6Qr49ZxAhvWErFurWjTa", - "name": "valu.vrsc::endorsement.qualification" - } -}; -exports.ENDORSEMENT_REFERENCE = { - "vdxfid": "iArNtGt8xYWBQaDtYATfhdR1NXq1ecZgRp", - "indexid": "xFgVM5KDorir2k6vPr7pg1wYQBr2VEywYv", - "hash160result": "ebc99d117c8e67fa10dfdd6a3295d40458e5ea50", - "qualifiedname": { - "namespace": "iNQFA8jtYe9JYq6Qr49ZxAhvWErFurWjTa", - "name": "valu.vrsc::endorsement.reference" - } -}; -exports.ENDORSEMENT_PROJECT = { - "vdxfid": "i7tTikSbJcLDBFpZyb8Uk3UfVjsLxz25Q4", - "indexid": "xCiaBYsg9vYsoRhbqGndiS1CXPtMpCtFg3", - "hash160result": "0ff2447acd00a1c5494156edee5481591c636730", - "qualifiedname": { - "namespace": "iNQFA8jtYe9JYq6Qr49ZxAhvWErFurWjTa", - "name": "valu.vrsc::endorsement.project" - } -}; -const ENDORSEMENT_TYPES = [exports.ENDORSEMENT_SKILL, exports.ENDORSEMENT_QUALIFICATION, exports.ENDORSEMENT_REFERENCE, exports.ENDORSEMENT_PROJECT]; -class Endorsement { - constructor(data = {}) { - this.version = data.version || new bn_js_1.BN(1, 10); - this.flags = data.flags || new bn_js_1.BN(0, 10); - this.endorsee = data.endorsee || ""; - this.message = data.message || ""; - this.reference = data.reference || Buffer.alloc(0); - this.metaData = data.metaData || null; - this.signature = data.signature || null; - this.txid = data.txid || Buffer.alloc(0); - } - getByteLength() { - let byteLength = 0; - byteLength += varint_1.default.encodingLength(this.version); - byteLength += varint_1.default.encodingLength(this.flags); - byteLength += varuint_1.default.encodingLength(Buffer.from(this.endorsee, 'utf-8').byteLength); - byteLength += Buffer.from(this.endorsee, 'utf-8').byteLength; - byteLength += varuint_1.default.encodingLength(this.reference.length); - byteLength += this.reference.length; - if (this.message && this.message.length > 0) { - byteLength += varuint_1.default.encodingLength(Buffer.from(this.message, 'utf-8').byteLength); - byteLength += Buffer.from(this.message, 'utf-8').length; - } - if (this.metaData && Endorsement.FLAGS_HAS_METADATA.and(this.flags).gt(new bn_js_1.BN(0))) { - byteLength += this.metaData.getByteLength(); - } - if (this.signature && Endorsement.FLAGS_HAS_SIGNATURE.and(this.flags).gt(new bn_js_1.BN(0))) { - byteLength += this.signature.getByteLength(); - } - if (this.txid && Endorsement.FLAGS_HAS_TXID.and(this.flags).gt(new bn_js_1.BN(0))) { - byteLength += varuint_1.default.encodingLength(this.txid.length); - byteLength += this.txid.length; - } - return byteLength; - } - setFlags() { - let flags = new bn_js_1.BN(0, 10); - if (this.metaData) { - flags = flags.or(Endorsement.FLAGS_HAS_METADATA); - } - if (this.signature && this.signature.isValid()) { - flags = flags.or(Endorsement.FLAGS_HAS_SIGNATURE); - } - if (this.txid && this.txid.length == 32) { - flags = flags.or(Endorsement.FLAGS_HAS_TXID); - } - if (this.message && this.message.length > 0) { - flags = flags.or(Endorsement.FLAGS_HAS_MESSAGE); - } - this.flags = flags; - } - toBuffer() { - this.setFlags(); - const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); - bufferWriter.writeVarInt(this.version); - bufferWriter.writeVarInt(this.flags); - bufferWriter.writeVarSlice(Buffer.from(this.endorsee, 'utf-8')); - bufferWriter.writeVarSlice(this.reference); - if (this.message && this.message.length > 0) { - bufferWriter.writeVarSlice(Buffer.from(this.message, 'utf-8')); - } - if (this.metaData && Endorsement.FLAGS_HAS_METADATA.and(this.flags).gt(new bn_js_1.BN(0))) { - bufferWriter.writeSlice(this.metaData.toBuffer()); - } - if (this.signature && Endorsement.FLAGS_HAS_SIGNATURE.and(this.flags).gt(new bn_js_1.BN(0))) { - bufferWriter.writeSlice(this.signature.toBuffer()); - } - if (this.txid && Endorsement.FLAGS_HAS_TXID.and(this.flags).gt(new bn_js_1.BN(0))) { - bufferWriter.writeVarSlice(this.txid); - } - return bufferWriter.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.version = reader.readVarInt(); - this.flags = reader.readVarInt(); - this.endorsee = reader.readVarSlice().toString('utf-8'); - this.reference = reader.readVarSlice(); - if (Endorsement.FLAGS_HAS_MESSAGE.and(this.flags).gt(new bn_js_1.BN(0))) { - this.message = reader.readVarSlice().toString('utf-8'); - } - if (Endorsement.FLAGS_HAS_METADATA.and(this.flags).gt(new bn_js_1.BN(0))) { - this.metaData = new VdxfUniValue_1.VdxfUniValue(); - reader.offset = this.metaData.fromBuffer(reader.buffer, reader.offset); - } - if (Endorsement.FLAGS_HAS_SIGNATURE.and(this.flags).gt(new bn_js_1.BN(0))) { - this.signature = new SignatureData_1.SignatureData(); - reader.offset = this.signature.fromBuffer(reader.buffer, reader.offset); - } - if (Endorsement.FLAGS_HAS_TXID.and(this.flags).gt(new bn_js_1.BN(0))) { - this.txid = reader.readVarSlice(); - } - return reader.offset; - } - toIdentityUpdateJson(type) { - const contentmultimap = {}; - if (!type) { - throw new Error('Type is required'); - } - if (!this.signature || !this.signature.isValid()) { - throw new Error('Signature is required'); - } - if (!ENDORSEMENT_TYPES.includes(type)) { - throw new Error('Unsupported endorsement type'); - } - contentmultimap[type.vdxfid] = [{ serializedhex: this.toBuffer().toString('hex') }]; - return { - contentmultimap: contentmultimap - }; - } - createHash(name) { - if (!name) { - throw new Error('Type is required'); - } - if (this.signature) { - throw new Error('Signature should be removed before creating a new one'); - } - const data = this.toBuffer(); - return (0, crypto_1.createHash)('sha256').update(data).digest(); - } - toJson() { - let retVal = { - version: this.version.toString(), - flags: this.flags.toString(), - endorsee: this.endorsee, - message: this.message, - reference: this.reference.toString('hex') - }; - if (this.metaData && Endorsement.FLAGS_HAS_METADATA.and(this.flags).gt(new bn_js_1.BN(0))) { - retVal['metadata'] = this.metaData.toJson(); - } - if (this.signature && Endorsement.FLAGS_HAS_SIGNATURE.and(this.flags).gt(new bn_js_1.BN(0))) { - retVal['signature'] = this.signature.toJson(); - } - if (this.txid && Endorsement.FLAGS_HAS_TXID.and(this.flags).gt(new bn_js_1.BN(0))) { - retVal['txid'] = this.txid.toString('hex'); - } - return retVal; - } - static fromJson(json) { - const flags = new bn_js_1.BN(json.flags || 0, 10); - let metaData = null; - if (json.metadata && Endorsement.FLAGS_HAS_METADATA.and(flags).gt(new bn_js_1.BN(0))) { - metaData = VdxfUniValue_1.VdxfUniValue.fromJson(json.metadata); - } - let signature = null; - if (json.signature && Endorsement.FLAGS_HAS_SIGNATURE.and(flags).gt(new bn_js_1.BN(0))) { - signature = SignatureData_1.SignatureData.fromJson(json.signature); - } - let txid = Buffer.alloc(0); - if (json.txid) { - txid = Buffer.from(json.txid, 'hex'); - } - return new Endorsement({ - version: new bn_js_1.BN(json.version, 10), - flags, - endorsee: json.endorsee, - message: json.message, - reference: Buffer.from(json.reference, 'hex'), - metaData, - signature, - txid - }); - } -} -exports.Endorsement = Endorsement; -Endorsement.VERSION_INVALID = new bn_js_1.BN(0, 10); -Endorsement.VERSION_FIRST = new bn_js_1.BN(1, 10); -Endorsement.VERSION_LAST = new bn_js_1.BN(1, 10); -Endorsement.VERSION_CURRENT = new bn_js_1.BN(1, 10); -Endorsement.FLAGS_HAS_METADATA = new bn_js_1.BN(1, 10); -Endorsement.FLAGS_HAS_SIGNATURE = new bn_js_1.BN(2, 10); -Endorsement.FLAGS_HAS_TXID = new bn_js_1.BN(4, 10); -Endorsement.FLAGS_HAS_MESSAGE = new bn_js_1.BN(8, 10); diff --git a/dist/vdxf/classes/index.d.ts b/dist/vdxf/classes/index.d.ts index 2b2b3b6e..aef658ea 100644 --- a/dist/vdxf/classes/index.d.ts +++ b/dist/vdxf/classes/index.d.ts @@ -30,6 +30,3 @@ export { RedirectUri, Subject, ProvisioningInfo, RequestedPermission, Audience, export { ProvisioningTxid } from './provisioning/ProvisioningResult'; export { Context } from './Context'; export { DataCategory } from './PersonalProfile'; -export * from './attestation/InformationRequest'; -export * from './attestation/AttestationDetails'; -export * from './endorsement/Endorsement'; diff --git a/dist/vdxf/classes/index.js b/dist/vdxf/classes/index.js index cacacdeb..f84172ee 100644 --- a/dist/vdxf/classes/index.js +++ b/dist/vdxf/classes/index.js @@ -62,6 +62,3 @@ var Context_1 = require("./Context"); Object.defineProperty(exports, "Context", { enumerable: true, get: function () { return Context_1.Context; } }); var PersonalProfile_1 = require("./PersonalProfile"); Object.defineProperty(exports, "DataCategory", { enumerable: true, get: function () { return PersonalProfile_1.DataCategory; } }); -__exportStar(require("./attestation/InformationRequest"), exports); -__exportStar(require("./attestation/AttestationDetails"), exports); -__exportStar(require("./endorsement/Endorsement"), exports); diff --git a/dist/vdxf/keys.d.ts b/dist/vdxf/keys.d.ts index 04ddbb8d..8356a346 100644 --- a/dist/vdxf/keys.d.ts +++ b/dist/vdxf/keys.d.ts @@ -73,4 +73,3 @@ export declare const DATA_TYPE_OBJECT_CREDENTIAL: VDXFKeyInterface; export declare const IDENTITY_CREDENTIALS: VDXFKeyInterface; export declare const IDENTITY_CREDENTIAL_PLAINLOGIN: VDXFKeyInterface; export declare const IDENTITY_CREDENTIAL_USERNAME: VDXFKeyInterface; -export declare const ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS: VDXFKeyInterface; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index 086e465a..1ba14ee9 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -523,12 +523,3 @@ exports.IDENTITY_CREDENTIAL_USERNAME = { name: "vrsc::identity.credential.username" }, }; -exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = { - "vdxfid": "i4BWC5Lr7gAT7KzyDx82Ye5DeFQD8ckcXe", - "indexid": "x91cesmvxzP7jVt15dnBX2bkfuRDya9TPq", - "hash160result": "3c520f0bde6be181461ebbff11bce396a604c007", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::attestation.view.request.multipleattestations" - } -}; From 515654bcda20c6bdc145cc97d2f837f3e1cca3f0 Mon Sep 17 00:00:00 2001 From: monkins Date: Tue, 21 Oct 2025 07:57:57 +0100 Subject: [PATCH 027/123] add compactaddressidobject test --- .../vdxf/compactaddressidobject.test.ts | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/__tests__/vdxf/compactaddressidobject.test.ts diff --git a/src/__tests__/vdxf/compactaddressidobject.test.ts b/src/__tests__/vdxf/compactaddressidobject.test.ts new file mode 100644 index 00000000..7dea209e --- /dev/null +++ b/src/__tests__/vdxf/compactaddressidobject.test.ts @@ -0,0 +1,66 @@ +import { CompactIdAddressObject } from '../../vdxf/classes/CompactIdAddressObject'; +import { BN } from "bn.js"; + + + +describe("CompactIdAddressObject", () => { + describe("constructor and basic properties", () => { + + test("creates instance with iaddress", () => { + const item = new CompactIdAddressObject({ + version: new BN(CompactIdAddressObject.DEFAULT_VERSION), + flags: CompactIdAddressObject.IS_IDENTITYID, + address: "iB5PRXMHLYcNtM8dfLB6KwfJrHU2mKDYuU", + rootSystemName: "VRSC" + }); + + const detailsBuffer = item.toBuffer(); + + const newDetails = new CompactIdAddressObject(); + newDetails.fromBuffer(detailsBuffer); + expect(newDetails.version.toString()).toBe("1"); + expect(newDetails.flags.toString()).toBe(CompactIdAddressObject.IS_IDENTITYID.toString()); + expect(newDetails.address).toBe("iB5PRXMHLYcNtM8dfLB6KwfJrHU2mKDYuU"); + expect(newDetails.rootSystemName).toBe("VRSC"); + expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); + }); + + test("creates instance with fqn", () => { + const item = new CompactIdAddressObject({ + version: new BN(CompactIdAddressObject.DEFAULT_VERSION), + flags: CompactIdAddressObject.IS_FQN, + address: "bob.chips@", + rootSystemName: "VRSC" + }); + + const detailsBuffer = item.toBuffer(); + + const newDetails = new CompactIdAddressObject(); + newDetails.fromBuffer(detailsBuffer); + expect(newDetails.version.toString()).toBe("1"); + expect(newDetails.flags.toString()).toBe(CompactIdAddressObject.IS_FQN.toString()); + expect(newDetails.address).toBe("bob.chips@"); + expect(newDetails.rootSystemName).toBe("VRSC"); + expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); + }); + + test("creates instance with fqn that reduces to iaddress for space saving", () => { + const item = new CompactIdAddressObject({ + version: new BN(CompactIdAddressObject.DEFAULT_VERSION), + flags: CompactIdAddressObject.IS_FQN, + address: "bob91283472394872349824728934789234.token823984279847293847239487239847324.chips@", + rootSystemName: "VRSC" + }); + + const detailsBuffer = item.toBuffer(); // this mutates the item to use iaddress internally + + const newDetails = new CompactIdAddressObject(); + newDetails.fromBuffer(detailsBuffer); + expect(newDetails.version.toString()).toBe("1"); + expect(newDetails.flags.toString()).toBe(CompactIdAddressObject.IS_IDENTITYID.toString()); + expect(newDetails.address).toBe("i67xSVGnGC3PVuGk5crPfkVJptiLB4zNjb"); + expect(newDetails.rootSystemName).toBe("VRSC"); + expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); + }); + }); +}); From d9bc34280faa03d6636ddb8e381f603523799631 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Thu, 23 Oct 2025 12:09:44 +0200 Subject: [PATCH 028/123] Add VerifiableSignatureData --- dist/vdxf/classes/CompactIdAddressObject.d.ts | 46 +++ dist/vdxf/classes/CompactIdAddressObject.js | 126 ++++++++ .../vdxf/classes/VerifiableSignatureData.d.ts | 67 ++++ dist/vdxf/classes/VerifiableSignatureData.js | 208 ++++++++++++ dist/vdxf/classes/request/GenericRequest.d.ts | 7 +- dist/vdxf/classes/request/GenericRequest.js | 10 +- src/__tests__/vdxf/genericrequest.test.ts | 34 +- src/vdxf/classes/CompactIdAddressObject.ts | 164 ++++++++++ src/vdxf/classes/VerifiableSignatureData.ts | 297 ++++++++++++++++++ src/vdxf/classes/request/GenericRequest.ts | 16 +- 10 files changed, 940 insertions(+), 35 deletions(-) create mode 100644 dist/vdxf/classes/CompactIdAddressObject.d.ts create mode 100644 dist/vdxf/classes/CompactIdAddressObject.js create mode 100644 dist/vdxf/classes/VerifiableSignatureData.d.ts create mode 100644 dist/vdxf/classes/VerifiableSignatureData.js create mode 100644 src/vdxf/classes/CompactIdAddressObject.ts create mode 100644 src/vdxf/classes/VerifiableSignatureData.ts diff --git a/dist/vdxf/classes/CompactIdAddressObject.d.ts b/dist/vdxf/classes/CompactIdAddressObject.d.ts new file mode 100644 index 00000000..202e1091 --- /dev/null +++ b/dist/vdxf/classes/CompactIdAddressObject.d.ts @@ -0,0 +1,46 @@ +/** + * CompactIdentityObject - Class representing an id in the smallest possible format + * + * This class is used to represent an identity or address in a compact format, allowing for efficient + * storage and transmission. The compact id can be represented either as a fully qualified name (FQN) + * or as an identity address (iaddress). The class includes methods for serialization, deserialization, + * and validation of the compact id object. + */ +import { BigNumber } from '../../utils/types/BigNumber'; +import { SerializableEntity } from '../../utils/types/SerializableEntity'; +export interface CompactIdAddressObjectJson { + version: number; + flags: number; + address: string; + rootsystemname: string; +} +export interface CompactIdAddressObjectInterface { + version?: BigNumber; + flags?: BigNumber; + address: string; + rootSystemName?: string; +} +export declare class CompactIdAddressObject implements SerializableEntity { + static VERSION_INVALID: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static DEFAULT_VERSION: import("bn.js"); + static IS_FQN: import("bn.js"); + static IS_IDENTITYID: import("bn.js"); + version: BigNumber; + flags: BigNumber; + address: string; + rootSystemName: string; + constructor(data?: CompactIdAddressObjectInterface); + isFQN(): boolean; + isIaddress(): boolean; + isValid(): boolean; + toIAddress(): string; + static fromIAddress(iaddr: string): CompactIdAddressObject; + setAddressTransferType(): void; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): any; + static fromJson(json: any): CompactIdAddressObject; +} diff --git a/dist/vdxf/classes/CompactIdAddressObject.js b/dist/vdxf/classes/CompactIdAddressObject.js new file mode 100644 index 00000000..3d215dee --- /dev/null +++ b/dist/vdxf/classes/CompactIdAddressObject.js @@ -0,0 +1,126 @@ +"use strict"; +/** + * CompactIdentityObject - Class representing an id in the smallest possible format + * + * This class is used to represent an identity or address in a compact format, allowing for efficient + * storage and transmission. The compact id can be represented either as a fully qualified name (FQN) + * or as an identity address (iaddress). The class includes methods for serialization, deserialization, + * and validation of the compact id object. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CompactIdAddressObject = void 0; +const bn_js_1 = require("bn.js"); +const bufferutils_1 = require("../../utils/bufferutils"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const varuint_1 = require("../../utils/varuint"); +const address_1 = require("../../utils/address"); +const varint_1 = require("../../utils/varint"); +const vdxf_1 = require("../../constants/vdxf"); +class CompactIdAddressObject { + constructor(data) { + this.version = (data === null || data === void 0 ? void 0 : data.version) || new bn_js_1.BN(CompactIdAddressObject.DEFAULT_VERSION); + this.flags = (data === null || data === void 0 ? void 0 : data.flags) || new bn_js_1.BN(0); + this.address = (data === null || data === void 0 ? void 0 : data.address) || ''; + this.rootSystemName = (data === null || data === void 0 ? void 0 : data.rootSystemName) || 'VRSC'; + } + isFQN() { + return (this.flags.and(CompactIdAddressObject.IS_FQN).eq(CompactIdAddressObject.IS_FQN)); + } + isIaddress() { + return (this.flags.and(CompactIdAddressObject.IS_IDENTITYID).eq(CompactIdAddressObject.IS_IDENTITYID)); + } + isValid() { + return this.address != null && this.address.length > 0 && (this.isFQN() || this.isIaddress()); + } + toIAddress() { + if (this.isIaddress()) + return this.address; + else if (this.isFQN()) { + return (0, address_1.toIAddress)(this.address, this.rootSystemName); + } + else + throw new Error("Unknown type"); + } + static fromIAddress(iaddr) { + return new CompactIdAddressObject({ + address: iaddr, + flags: CompactIdAddressObject.IS_IDENTITYID + }); + } + setAddressTransferType() { + if (!this.isValid()) { + throw new Error('CompactIdAddressObject: invalid address or flags not set'); + } + if (this.isIaddress()) { + return; + } + if (this.isFQN()) { + if (this.address.length > 20) { + this.flags = CompactIdAddressObject.IS_IDENTITYID; + this.address = (0, address_1.toIAddress)(this.address, this.rootSystemName); + } + else { + this.flags = CompactIdAddressObject.IS_FQN; + } + } + } + getByteLength() { + this.setAddressTransferType(); + let length = 0; + length += varint_1.default.encodingLength(this.flags); + if (this.isIaddress()) { + length += 20; // identityuint160 + } + else { + const addrLen = Buffer.from(this.address, 'utf8').byteLength; + length += varuint_1.default.encodingLength(addrLen) + addrLen; + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeVarInt(this.flags); + if (this.isIaddress()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.address).hash); + } + else { + writer.writeVarSlice(Buffer.from(this.address, 'utf8')); + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new BufferReader(buffer, offset); + this.flags = reader.readVarInt(); + if (this.isIaddress()) { + this.address = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + } + else { + this.address = reader.readVarSlice().toString('utf8'); + } + return reader.offset; + } + toJson() { + this.setAddressTransferType(); + return { + version: this.version.toNumber(), + flags: this.flags.toNumber(), + address: this.address, + rootsystemname: this.rootSystemName, + }; + } + static fromJson(json) { + const instance = new CompactIdAddressObject(); + instance.version = new bn_js_1.BN(json.version); + instance.flags = new bn_js_1.BN(json.flags); + instance.address = json.address; + instance.rootSystemName = json.rootsystemname; + return instance; + } +} +exports.CompactIdAddressObject = CompactIdAddressObject; +CompactIdAddressObject.VERSION_INVALID = new bn_js_1.BN(0); +CompactIdAddressObject.FIRST_VERSION = new bn_js_1.BN(1); +CompactIdAddressObject.LAST_VERSION = new bn_js_1.BN(1); +CompactIdAddressObject.DEFAULT_VERSION = new bn_js_1.BN(1); +CompactIdAddressObject.IS_FQN = new bn_js_1.BN(1); +CompactIdAddressObject.IS_IDENTITYID = new bn_js_1.BN(2); diff --git a/dist/vdxf/classes/VerifiableSignatureData.d.ts b/dist/vdxf/classes/VerifiableSignatureData.d.ts new file mode 100644 index 00000000..a12dc219 --- /dev/null +++ b/dist/vdxf/classes/VerifiableSignatureData.d.ts @@ -0,0 +1,67 @@ +import { BigNumber } from '../../utils/types/BigNumber'; +import { SerializableEntity } from '../../utils/types/SerializableEntity'; +import { CompactIdAddressObject } from './CompactIdAddressObject'; +import { SignatureData } from '../../pbaas'; +export interface SignatureJsonDataInterface { + version: number; + flags: number; + hashtype: number; + systemid: string; + identityid: string; + vdxfkeys?: Array; + vdxfkeynames?: Array; + boundhashes?: Array; + signature: string; +} +export interface VerifiableSignatureDataInterface { + version: BigNumber; + flags: BigNumber; + hashType: BigNumber; + systemId: CompactIdAddressObject; + identityId: CompactIdAddressObject; + vdxfKeys?: Array; + vdxfKeyNames?: Array; + boundHashes?: Array; + statements?: Array; + signatureAsVch: Buffer; +} +export declare class VerifiableSignatureData implements SerializableEntity { + version: BigNumber; + flags: BigNumber; + hashType: BigNumber; + identityId: CompactIdAddressObject; + systemId: CompactIdAddressObject; + vdxfKeys?: Array; + vdxfKeyNames?: Array; + boundHashes?: Array; + statements?: Array; + signatureAsVch: Buffer; + static VERSION_INVALID: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static DEFAULT_VERSION: import("bn.js"); + static TYPE_VERUSID_DEFAULT: import("bn.js"); + static FLAG_HAS_VDXF_KEYS: import("bn.js"); + static FLAG_HAS_VDXF_KEY_NAMES: import("bn.js"); + static FLAG_HAS_BOUND_HASHES: import("bn.js"); + static FLAG_HAS_STATEMENTS: import("bn.js"); + constructor(data?: VerifiableSignatureDataInterface); + private hasFlag; + private setFlag; + hasVdxfKeys(): boolean; + hasVdxfKeyNames(): boolean; + hasBoundHashes(): boolean; + hasStatements(): boolean; + setHasVdxfKeys(): void; + setHasVdxfKeyNames(): void; + setHasBoundHashes(): void; + setHasStatements(): void; + setFlags(): void; + private getBufferEncodingLength; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + getIdentityHash(height: number, sigHash: Buffer): Buffer; + toSignatureData(sigHash: Buffer): SignatureData; + toJson(): {}; +} diff --git a/dist/vdxf/classes/VerifiableSignatureData.js b/dist/vdxf/classes/VerifiableSignatureData.js new file mode 100644 index 00000000..a71ee1de --- /dev/null +++ b/dist/vdxf/classes/VerifiableSignatureData.js @@ -0,0 +1,208 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VerifiableSignatureData = void 0; +const varuint_1 = require("../../utils/varuint"); +const address_1 = require("../../utils/address"); +const bufferutils_1 = require("../../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const vdxf_1 = require("../../constants/vdxf"); +const DataDescriptor_1 = require("../../pbaas/DataDescriptor"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const createHash = require("create-hash"); +const vdxf_2 = require("../../constants/vdxf"); +const CompactIdAddressObject_1 = require("./CompactIdAddressObject"); +const pbaas_1 = require("../../constants/pbaas"); +const varint_1 = require("../../utils/varint"); +const pbaas_2 = require("../../pbaas"); +class VerifiableSignatureData { + constructor(data) { + this.version = data && data.flags ? data.flags : new bn_js_1.BN(0); + this.flags = data && data.flags ? data.flags : new bn_js_1.BN(0); + this.systemId = data && data.systemId ? data.systemId : new CompactIdAddressObject_1.CompactIdAddressObject({ flags: CompactIdAddressObject_1.CompactIdAddressObject.IS_FQN, address: pbaas_1.DEFAULT_VERUS_CHAINNAME }); + this.hashType = data && data.hashType ? data.hashType : pbaas_1.HASH_TYPE_SHA256; + this.identityId = data ? data.identityId : undefined; + this.vdxfKeys = data ? data.vdxfKeys : undefined; + this.vdxfKeyNames = data ? data.vdxfKeyNames : undefined; + this.boundHashes = data ? data.boundHashes : undefined; + this.statements = data ? data.statements : undefined; + this.signatureAsVch = data && data.signatureAsVch ? data.signatureAsVch : Buffer.alloc(0); + this.setFlags(); + } + hasFlag(flag) { + return !!(this.flags.and(flag).toNumber()); + } + setFlag(flag) { + this.flags = this.flags.xor(flag); + } + hasVdxfKeys() { + return this.hasFlag(VerifiableSignatureData.FLAG_HAS_VDXF_KEYS); + } + hasVdxfKeyNames() { + return this.hasFlag(VerifiableSignatureData.FLAG_HAS_VDXF_KEY_NAMES); + } + hasBoundHashes() { + return this.hasFlag(VerifiableSignatureData.FLAG_HAS_BOUND_HASHES); + } + hasStatements() { + return this.hasFlag(VerifiableSignatureData.FLAG_HAS_STATEMENTS); + } + setHasVdxfKeys() { + this.setFlag(VerifiableSignatureData.FLAG_HAS_VDXF_KEYS); + } + setHasVdxfKeyNames() { + this.setFlag(VerifiableSignatureData.FLAG_HAS_VDXF_KEY_NAMES); + } + setHasBoundHashes() { + this.setFlag(VerifiableSignatureData.FLAG_HAS_BOUND_HASHES); + } + setHasStatements() { + this.setFlag(VerifiableSignatureData.FLAG_HAS_STATEMENTS); + } + setFlags() { + if (this.vdxfKeys) + this.setHasVdxfKeys(); + if (this.vdxfKeyNames) + this.setHasVdxfKeyNames(); + if (this.boundHashes) + this.setHasBoundHashes(); + if (this.statements) + this.setHasStatements(); + } + getBufferEncodingLength(buf) { + const bufLen = buf.byteLength; + return varuint_1.default.encodingLength(bufLen) + bufLen; + } + getByteLength() { + let byteLength = 0; + byteLength += varint_1.default.encodingLength(this.version); + byteLength += varuint_1.default.encodingLength(this.flags.toNumber()); + byteLength += varuint_1.default.encodingLength(this.hashType.toNumber()); + byteLength += this.systemId.getByteLength(); + byteLength += this.identityId.getByteLength(); + if (this.hasVdxfKeys()) { + byteLength += varuint_1.default.encodingLength(this.vdxfKeys.length); + for (const key of this.vdxfKeys) { + byteLength += vdxf_1.HASH160_BYTE_LENGTH; + } + } + if (this.hasVdxfKeyNames()) { + byteLength += varuint_1.default.encodingLength(this.vdxfKeyNames.length); + for (const key of this.vdxfKeyNames) { + byteLength += this.getBufferEncodingLength(Buffer.from(key, 'utf8')); + } + } + if (this.hasBoundHashes()) { + byteLength += varuint_1.default.encodingLength(this.boundHashes.length); + for (const hash of this.boundHashes) { + byteLength += this.getBufferEncodingLength(hash); + } + } + if (this.hasStatements()) { + byteLength += varuint_1.default.encodingLength(this.statements.length); + for (const statement of this.statements) { + byteLength += this.getBufferEncodingLength(statement); + } + } + byteLength += this.getBufferEncodingLength(this.signatureAsVch); + return byteLength; + } + toBuffer() { + const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); + bufferWriter.writeVarInt(this.version); + bufferWriter.writeCompactSize(this.flags.toNumber()); + bufferWriter.writeCompactSize(this.hashType.toNumber()); + bufferWriter.writeSlice(this.systemId.toBuffer()); + bufferWriter.writeSlice(this.identityId.toBuffer()); + if (this.hasVdxfKeys()) { + bufferWriter.writeArray(this.vdxfKeys.map(x => (0, address_1.fromBase58Check)(x).hash)); + } + if (this.hasVdxfKeyNames()) { + bufferWriter.writeVector(this.vdxfKeyNames.map(x => Buffer.from(x, 'utf8'))); + } + if (this.hasBoundHashes()) { + bufferWriter.writeVector(this.boundHashes); + } + if (this.hasStatements()) { + bufferWriter.writeVector(this.statements); + } + bufferWriter.writeVarSlice(this.signatureAsVch); + return bufferWriter.buffer; + } + fromBuffer(buffer, offset = 0) { + const bufferReader = new BufferReader(buffer, offset); + this.version = bufferReader.readVarInt(); + this.flags = new bn_js_1.BN(bufferReader.readCompactSize()); + this.hashType = new bn_js_1.BN(bufferReader.readCompactSize()); + this.systemId = new CompactIdAddressObject_1.CompactIdAddressObject(); + this.identityId = new CompactIdAddressObject_1.CompactIdAddressObject(); + bufferReader.offset = this.systemId.fromBuffer(bufferReader.buffer, bufferReader.offset); + bufferReader.offset = this.identityId.fromBuffer(bufferReader.buffer, bufferReader.offset); + if (this.hasVdxfKeys()) { + this.vdxfKeys = bufferReader.readArray(vdxf_1.HASH160_BYTE_LENGTH).map(x => (0, address_1.toBase58Check)(x, vdxf_1.I_ADDR_VERSION)); + } + if (this.hasVdxfKeyNames()) { + this.vdxfKeyNames = bufferReader.readVector().map((x) => x.toString('utf8')); + } + if (this.hasBoundHashes()) { + this.boundHashes = bufferReader.readVector(); + } + if (this.hasStatements()) { + this.statements = bufferReader.readVector(); + } + this.signatureAsVch = bufferReader.readVarSlice(); + return bufferReader.offset; + } + // To fully implement, refer to VerusCoin/src/pbaas/crosschainrpc.cpp line 337, IdentitySignatureHash + getIdentityHash(height, sigHash) { + var heightBuffer = Buffer.allocUnsafe(4); + heightBuffer.writeUInt32LE(height); + if (!this.hashType.eq(new bn_js_1.BN(DataDescriptor_1.EHashTypes.HASH_SHA256))) { + throw new Error("Invalid signature type for identity hash"); + } + if (this.version.eq(new bn_js_1.BN(1))) { + return createHash("sha256") + .update(vdxf_2.VERUS_DATA_SIGNATURE_PREFIX) + .update((0, address_1.fromBase58Check)(this.systemId.toIAddress()).hash) + .update(heightBuffer) + .update((0, address_1.fromBase58Check)(this.identityId.toIAddress()).hash) + .update(sigHash) + .digest(); + } + else { + return createHash("sha256") + .update((0, address_1.fromBase58Check)(this.systemId.toIAddress()).hash) + .update(heightBuffer) + .update((0, address_1.fromBase58Check)(this.identityId.toIAddress()).hash) + .update(vdxf_2.VERUS_DATA_SIGNATURE_PREFIX) + .update(sigHash) + .digest(); + } + } + toSignatureData(sigHash) { + return new pbaas_2.SignatureData({ + version: this.version, + system_ID: this.systemId.toIAddress(), + hash_type: this.hashType, + signature_hash: sigHash, + identity_ID: this.identityId.toIAddress(), + sig_type: pbaas_2.SignatureData.TYPE_VERUSID_DEFAULT, + vdxf_keys: this.vdxfKeys, + vdxf_key_names: this.vdxfKeyNames, + bound_hashes: this.boundHashes, + signature_as_vch: this.signatureAsVch + }); + } + toJson() { + return {}; + } +} +exports.VerifiableSignatureData = VerifiableSignatureData; +VerifiableSignatureData.VERSION_INVALID = new bn_js_1.BN(0); +VerifiableSignatureData.FIRST_VERSION = new bn_js_1.BN(1); +VerifiableSignatureData.LAST_VERSION = new bn_js_1.BN(1); +VerifiableSignatureData.DEFAULT_VERSION = new bn_js_1.BN(1); +VerifiableSignatureData.TYPE_VERUSID_DEFAULT = new bn_js_1.BN(1); +VerifiableSignatureData.FLAG_HAS_VDXF_KEYS = new bn_js_1.BN(1); +VerifiableSignatureData.FLAG_HAS_VDXF_KEY_NAMES = new bn_js_1.BN(2); +VerifiableSignatureData.FLAG_HAS_BOUND_HASHES = new bn_js_1.BN(4); +VerifiableSignatureData.FLAG_HAS_STATEMENTS = new bn_js_1.BN(8); diff --git a/dist/vdxf/classes/request/GenericRequest.d.ts b/dist/vdxf/classes/request/GenericRequest.d.ts index 01699538..c9c76226 100644 --- a/dist/vdxf/classes/request/GenericRequest.d.ts +++ b/dist/vdxf/classes/request/GenericRequest.d.ts @@ -1,11 +1,12 @@ import { BigNumber } from "../../../utils/types/BigNumber"; -import { SignatureData, SignatureJsonDataInterface } from "../../../pbaas"; +import { SignatureJsonDataInterface } from "../../../pbaas"; import { OrdinalVdxfObject, OrdinalVdxfObjectJson } from "../OrdinalVdxfObject"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; +import { VerifiableSignatureData } from "../VerifiableSignatureData"; export interface GenericRequestInterface { version?: BigNumber; flags?: BigNumber; - signature?: SignatureData; + signature?: VerifiableSignatureData; createdAt?: BigNumber; salt?: Buffer; details: Array; @@ -21,7 +22,7 @@ export type GenericRequestJson = { export declare class GenericRequest implements SerializableEntity { version: BigNumber; flags: BigNumber; - signature?: SignatureData; + signature?: VerifiableSignatureData; createdAt?: BigNumber; salt?: Buffer; details: Array; diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js index c5388d7f..049eb6c4 100644 --- a/dist/vdxf/classes/request/GenericRequest.js +++ b/dist/vdxf/classes/request/GenericRequest.js @@ -5,10 +5,10 @@ const __1 = require("../../"); const bufferutils_1 = require("../../../utils/bufferutils"); const base64url_1 = require("base64url"); const bn_js_1 = require("bn.js"); -const pbaas_1 = require("../../../pbaas"); const OrdinalVdxfObject_1 = require("../OrdinalVdxfObject"); const varuint_1 = require("../../../utils/varuint"); const crypto_1 = require("crypto"); +const VerifiableSignatureData_1 = require("../VerifiableSignatureData"); class GenericRequest { constructor(request = { details: [], @@ -76,9 +76,7 @@ class GenericRequest { } getDetailsHash(signedBlockheight) { if (this.isSigned()) { - const sigHash = this.getRawDataSha256(); - this.signature.signature_hash = sigHash; - return this.signature.getIdentityHash({ version: 2, hash_type: pbaas_1.EHashTypes.HASH_SHA256, height: signedBlockheight }); + return this.signature.getIdentityHash(signedBlockheight, this.getRawDataSha256()); } else return this.getRawDataSha256(); @@ -156,7 +154,7 @@ class GenericRequest { this.version = new bn_js_1.BN(reader.readCompactSize()); this.flags = new bn_js_1.BN(reader.readCompactSize()); if (this.isSigned()) { - const _sig = new pbaas_1.SignatureData(); + const _sig = new VerifiableSignatureData_1.VerifiableSignatureData(); reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); this.signature = _sig; } @@ -210,7 +208,7 @@ class GenericRequest { } } return { - signature: this.isSigned() ? this.signature.toJson() : undefined, + signature: undefined, //TODO: Add signature toJson function this.isSigned() ? this.signature.toJson() : undefined, details: details, version: this.version.toString(), flags: this.flags.toString(), diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts index a4945357..88660ac4 100644 --- a/src/__tests__/vdxf/genericrequest.test.ts +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -1,16 +1,13 @@ -// __tests__/genericRequest.buffer.test.ts - import { BN } from 'bn.js'; import base64url from 'base64url'; -import { SignatureData } from '../../pbaas'; import { GeneralTypeOrdinalVdxfObject } from '../../vdxf/classes/OrdinalVdxfObject'; -import { DEFAULT_VERUS_CHAINID, TESTNET_VERUS_CHAINID } from '../../constants/pbaas'; -import { WALLET_VDXF_KEY, GENERIC_REQUEST_DEEPLINK_VDXF_KEY, GenericRequest, fromBase58Check } from '../../'; +import { DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256 } from '../../constants/pbaas'; +import { WALLET_VDXF_KEY, GENERIC_REQUEST_DEEPLINK_VDXF_KEY, GenericRequest } from '../../'; import { createHash } from 'crypto'; -import { VERUS_DATA_SIGNATURE_PREFIX } from '../../constants/vdxf'; -import { TEST_IDENTITY_ID } from '../constants/fixtures'; +import { VerifiableSignatureData } from '../../vdxf/classes/VerifiableSignatureData'; +import { CompactIdAddressObject } from '../../vdxf/classes/CompactIdAddressObject'; describe('GenericRequest — buffer / URI / QR operations', () => { function roundTripBuffer(req: GenericRequest): GenericRequest { @@ -68,23 +65,26 @@ describe('GenericRequest — buffer / URI / QR operations', () => { }); it('round trips with createdAt and signature', () => { - const sig = new SignatureData({ + const sig = new VerifiableSignatureData({ + flags: new BN(0), version: new BN(1), - system_ID: DEFAULT_VERUS_CHAINID, - hash_type: new BN(5), - signature_hash: Buffer.from('010203', 'hex'), - identity_ID: DEFAULT_VERUS_CHAINID, - sig_type: new BN(1), - signature_as_vch: Buffer.from('abcd', 'hex'), - vdxf_keys: [], - vdxf_key_names: [], - bound_hashes: [] + systemId: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + hashType: HASH_TYPE_SHA256, + identityId: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + signatureAsVch: Buffer.from('abcd', 'hex'), + vdxfKeys: [DEFAULT_VERUS_CHAINID, DEFAULT_VERUS_CHAINID], + vdxfKeyNames: ["VRSC", "VRSC"], + boundHashes: [Buffer.from('abcd', 'hex')], + statements: [Buffer.from('abcd', 'hex')] }); + const detail = new GeneralTypeOrdinalVdxfObject({ data: Buffer.from('abcd', 'hex'), key: DEFAULT_VERUS_CHAINID }); + const createdAt = new BN(9999); + const req = new GenericRequest({ details: [detail], signature: sig, diff --git a/src/vdxf/classes/CompactIdAddressObject.ts b/src/vdxf/classes/CompactIdAddressObject.ts new file mode 100644 index 00000000..b137c513 --- /dev/null +++ b/src/vdxf/classes/CompactIdAddressObject.ts @@ -0,0 +1,164 @@ +/** + * CompactIdentityObject - Class representing an id in the smallest possible format + * + * This class is used to represent an identity or address in a compact format, allowing for efficient + * storage and transmission. The compact id can be represented either as a fully qualified name (FQN) + * or as an identity address (iaddress). The class includes methods for serialization, deserialization, + * and validation of the compact id object. + */ + +import { BN } from 'bn.js'; +import bufferutils from '../../utils/bufferutils'; +import { BigNumber } from '../../utils/types/BigNumber'; +const { BufferReader, BufferWriter } = bufferutils; +import { SerializableEntity } from '../../utils/types/SerializableEntity'; +import varuint from '../../utils/varuint'; +import { fromBase58Check, toBase58Check, toIAddress } from "../../utils/address"; +import varint from '../../utils/varint'; +import { I_ADDR_VERSION } from '../../constants/vdxf'; + +export interface CompactIdAddressObjectJson { + version: number; + flags: number; + address: string; + rootsystemname: string; +} + +export interface CompactIdAddressObjectInterface { + version?: BigNumber; + flags?: BigNumber; + address: string; + rootSystemName?: string; +} + +export class CompactIdAddressObject implements SerializableEntity { + static VERSION_INVALID = new BN(0); + static FIRST_VERSION = new BN(1); + static LAST_VERSION = new BN(1); + static DEFAULT_VERSION = new BN(1); + + static IS_FQN = new BN(1); + static IS_IDENTITYID = new BN(2); + + version: BigNumber; + flags: BigNumber; + address: string; + rootSystemName: string; + + constructor(data?: CompactIdAddressObjectInterface) { + this.version = data?.version || new BN(CompactIdAddressObject.DEFAULT_VERSION); + this.flags = data?.flags || new BN(0); + this.address = data?.address || ''; + this.rootSystemName = data?.rootSystemName || 'VRSC'; + } + + isFQN(): boolean { + return (this.flags.and(CompactIdAddressObject.IS_FQN).eq(CompactIdAddressObject.IS_FQN)); + } + + isIaddress(): boolean { + return (this.flags.and(CompactIdAddressObject.IS_IDENTITYID).eq(CompactIdAddressObject.IS_IDENTITYID)); + } + + isValid(): boolean { + return this.address != null && this.address.length > 0 && (this.isFQN() || this.isIaddress()); + } + + toIAddress(): string { + if (this.isIaddress()) return this.address; + else if (this.isFQN()) { + return toIAddress(this.address, this.rootSystemName); + } else throw new Error("Unknown type") + } + + static fromIAddress(iaddr: string): CompactIdAddressObject { + return new CompactIdAddressObject({ + address: iaddr, + flags: CompactIdAddressObject.IS_IDENTITYID + }) + } + + setAddressTransferType(): void { + if (!this.isValid()) { + throw new Error('CompactIdAddressObject: invalid address or flags not set'); + } + + if (this.isIaddress()) { + return; + } + + if (this.isFQN()) { + if (this.address.length > 20) { + this.flags = CompactIdAddressObject.IS_IDENTITYID; + this.address = toIAddress(this.address, this.rootSystemName); + } else { + this.flags = CompactIdAddressObject.IS_FQN; + } + } + } + + getByteLength(): number { + this.setAddressTransferType(); + let length = 0; + + length += varint.encodingLength(this.flags); + + if (this.isIaddress()) { + length += 20; // identityuint160 + } else { + const addrLen = Buffer.from(this.address, 'utf8').byteLength; + + length += varuint.encodingLength(addrLen) + addrLen + } + + return length; + } + + toBuffer(): Buffer { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + + writer.writeVarInt(this.flags); + + if (this.isIaddress()) { + writer.writeSlice(fromBase58Check(this.address).hash); + } else { + writer.writeVarSlice(Buffer.from(this.address, 'utf8')); + } + + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset?: number): number { + const reader = new BufferReader(buffer, offset); + + this.flags = reader.readVarInt(); + + if (this.isIaddress()) { + this.address = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); + } else { + this.address = reader.readVarSlice().toString('utf8'); + } + + return reader.offset; + } + + toJson(): any { + this.setAddressTransferType(); + + return { + version: this.version.toNumber(), + flags: this.flags.toNumber(), + address: this.address, + rootsystemname: this.rootSystemName, + }; + } + + static fromJson(json: any): CompactIdAddressObject { + const instance = new CompactIdAddressObject(); + instance.version = new BN(json.version); + instance.flags = new BN(json.flags); + instance.address = json.address; + instance.rootSystemName = json.rootsystemname; + return instance; + } +} \ No newline at end of file diff --git a/src/vdxf/classes/VerifiableSignatureData.ts b/src/vdxf/classes/VerifiableSignatureData.ts new file mode 100644 index 00000000..1c448caf --- /dev/null +++ b/src/vdxf/classes/VerifiableSignatureData.ts @@ -0,0 +1,297 @@ +import varuint from '../../utils/varuint' +import { fromBase58Check, toBase58Check } from "../../utils/address"; +import bufferutils from '../../utils/bufferutils' +import { BN } from 'bn.js'; +import { BigNumber } from '../../utils/types/BigNumber'; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../../constants/vdxf'; +import { SerializableEntity } from '../../utils/types/SerializableEntity'; +import { EHashTypes } from '../../pbaas/DataDescriptor'; +const { BufferReader, BufferWriter } = bufferutils +const createHash = require("create-hash"); +import { VERUS_DATA_SIGNATURE_PREFIX } from "../../constants/vdxf"; +import { CompactIdAddressObject } from './CompactIdAddressObject'; +import { DEFAULT_VERUS_CHAINNAME, HASH_TYPE_SHA256 } from '../../constants/pbaas'; +import varint from '../../utils/varint'; +import { SignatureData } from '../../pbaas'; + +export interface SignatureJsonDataInterface { + version: number; + flags: number; + hashtype: number; + systemid: string; + identityid: string; + vdxfkeys?: Array; + vdxfkeynames?: Array; + boundhashes?: Array; + signature: string +} + +export interface VerifiableSignatureDataInterface { + version: BigNumber; + flags: BigNumber; + hashType: BigNumber; + systemId: CompactIdAddressObject; + identityId: CompactIdAddressObject; + vdxfKeys?: Array; + vdxfKeyNames?: Array; + boundHashes?: Array; + statements?: Array; + signatureAsVch: Buffer; +} + +export class VerifiableSignatureData implements SerializableEntity { + version: BigNumber; + flags: BigNumber; + hashType: BigNumber; + identityId: CompactIdAddressObject; + systemId: CompactIdAddressObject; + vdxfKeys?: Array; + vdxfKeyNames?: Array; + boundHashes?: Array; + statements?: Array; + signatureAsVch: Buffer; + + static VERSION_INVALID = new BN(0); + static FIRST_VERSION = new BN(1); + static LAST_VERSION = new BN(1); + static DEFAULT_VERSION = new BN(1); + static TYPE_VERUSID_DEFAULT = new BN(1); + + static FLAG_HAS_VDXF_KEYS = new BN(1); + static FLAG_HAS_VDXF_KEY_NAMES = new BN(2); + static FLAG_HAS_BOUND_HASHES = new BN(4); + static FLAG_HAS_STATEMENTS = new BN(8); + + constructor(data?: VerifiableSignatureDataInterface) { + this.version = data && data.flags ? data.flags : new BN(0); + this.flags = data && data.flags ? data.flags : new BN(0); + this.systemId = data && data.systemId ? data.systemId : new CompactIdAddressObject({ flags: CompactIdAddressObject.IS_FQN, address: DEFAULT_VERUS_CHAINNAME }); + this.hashType = data && data.hashType ? data.hashType : HASH_TYPE_SHA256; + this.identityId = data ? data.identityId : undefined; + this.vdxfKeys = data ? data.vdxfKeys : undefined; + this.vdxfKeyNames = data ? data.vdxfKeyNames : undefined; + this.boundHashes = data ? data.boundHashes : undefined; + this.statements = data ? data.statements : undefined; + this.signatureAsVch = data && data.signatureAsVch ? data.signatureAsVch : Buffer.alloc(0); + + this.setFlags(); + } + + private hasFlag(flag: BigNumber) { + return !!(this.flags.and(flag).toNumber()); + } + + private setFlag(flag: BigNumber) { + this.flags = this.flags.xor(flag); + } + + hasVdxfKeys() { + return this.hasFlag(VerifiableSignatureData.FLAG_HAS_VDXF_KEYS); + } + + hasVdxfKeyNames() { + return this.hasFlag(VerifiableSignatureData.FLAG_HAS_VDXF_KEY_NAMES); + } + + hasBoundHashes() { + return this.hasFlag(VerifiableSignatureData.FLAG_HAS_BOUND_HASHES); + } + + hasStatements() { + return this.hasFlag(VerifiableSignatureData.FLAG_HAS_STATEMENTS); + } + + setHasVdxfKeys() { + this.setFlag(VerifiableSignatureData.FLAG_HAS_VDXF_KEYS); + } + + setHasVdxfKeyNames() { + this.setFlag(VerifiableSignatureData.FLAG_HAS_VDXF_KEY_NAMES); + } + + setHasBoundHashes() { + this.setFlag(VerifiableSignatureData.FLAG_HAS_BOUND_HASHES); + } + + setHasStatements() { + this.setFlag(VerifiableSignatureData.FLAG_HAS_STATEMENTS); + } + + setFlags() { + if (this.vdxfKeys) this.setHasVdxfKeys(); + if (this.vdxfKeyNames) this.setHasVdxfKeyNames(); + if (this.boundHashes) this.setHasBoundHashes(); + if (this.statements) this.setHasStatements(); + } + + private getBufferEncodingLength(buf: Buffer) { + const bufLen = buf.byteLength; + + return varuint.encodingLength(bufLen) + bufLen; + } + + getByteLength() { + let byteLength = 0; + + byteLength += varint.encodingLength(this.version); + + byteLength += varuint.encodingLength(this.flags.toNumber()); + + byteLength += varuint.encodingLength(this.hashType.toNumber()); + + byteLength += this.systemId.getByteLength(); + byteLength += this.identityId.getByteLength(); + + if (this.hasVdxfKeys()) { + byteLength += varuint.encodingLength(this.vdxfKeys.length); + + for (const key of this.vdxfKeys) { + byteLength += HASH160_BYTE_LENGTH + } + } + + if (this.hasVdxfKeyNames()) { + byteLength += varuint.encodingLength(this.vdxfKeyNames.length); + + for (const key of this.vdxfKeyNames) { + byteLength += this.getBufferEncodingLength(Buffer.from(key, 'utf8')) + } + } + + if (this.hasBoundHashes()) { + byteLength += varuint.encodingLength(this.boundHashes.length); + + for (const hash of this.boundHashes) { + byteLength += this.getBufferEncodingLength(hash) + } + } + + if (this.hasStatements()) { + byteLength += varuint.encodingLength(this.statements.length); + + for (const statement of this.statements) { + byteLength += this.getBufferEncodingLength(statement) + } + } + + byteLength += this.getBufferEncodingLength(this.signatureAsVch) + + return byteLength + } + + toBuffer() { + const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); + + bufferWriter.writeVarInt(this.version); + + bufferWriter.writeCompactSize(this.flags.toNumber()); + + bufferWriter.writeCompactSize(this.hashType.toNumber()); + + bufferWriter.writeSlice(this.systemId.toBuffer()); + bufferWriter.writeSlice(this.identityId.toBuffer()); + + if (this.hasVdxfKeys()) { + bufferWriter.writeArray(this.vdxfKeys!.map(x => fromBase58Check(x).hash)); + } + + if (this.hasVdxfKeyNames()) { + bufferWriter.writeVector(this.vdxfKeyNames!.map(x => Buffer.from(x, 'utf8'))); + } + + if (this.hasBoundHashes()) { + bufferWriter.writeVector(this.boundHashes!); + } + + if (this.hasStatements()) { + bufferWriter.writeVector(this.statements!); + } + + bufferWriter.writeVarSlice(this.signatureAsVch); + + return bufferWriter.buffer; + } + + fromBuffer(buffer: Buffer, offset: number = 0) { + const bufferReader = new BufferReader(buffer, offset); + + this.version = bufferReader.readVarInt(); + + this.flags = new BN(bufferReader.readCompactSize()); + + this.hashType = new BN(bufferReader.readCompactSize()); + + this.systemId = new CompactIdAddressObject(); + this.identityId = new CompactIdAddressObject(); + + bufferReader.offset = this.systemId.fromBuffer(bufferReader.buffer, bufferReader.offset); + bufferReader.offset = this.identityId.fromBuffer(bufferReader.buffer, bufferReader.offset); + + if (this.hasVdxfKeys()) { + this.vdxfKeys = bufferReader.readArray(HASH160_BYTE_LENGTH).map(x => toBase58Check(x, I_ADDR_VERSION)); + } + + if (this.hasVdxfKeyNames()) { + this.vdxfKeyNames = bufferReader.readVector().map((x: Buffer) => x.toString('utf8')); + } + + if (this.hasBoundHashes()) { + this.boundHashes = bufferReader.readVector(); + } + + if (this.hasStatements()) { + this.statements = bufferReader.readVector(); + } + + this.signatureAsVch = bufferReader.readVarSlice(); + + return bufferReader.offset; + } + + // To fully implement, refer to VerusCoin/src/pbaas/crosschainrpc.cpp line 337, IdentitySignatureHash + getIdentityHash(height: number, sigHash: Buffer): Buffer { + var heightBuffer = Buffer.allocUnsafe(4) + heightBuffer.writeUInt32LE(height); + + if (!this.hashType.eq(new BN(EHashTypes.HASH_SHA256))) { + throw new Error("Invalid signature type for identity hash"); + } + + if (this.version.eq(new BN(1))) { + return createHash("sha256") + .update(VERUS_DATA_SIGNATURE_PREFIX) + .update(fromBase58Check(this.systemId.toIAddress()).hash) + .update(heightBuffer) + .update(fromBase58Check(this.identityId.toIAddress()).hash) + .update(sigHash) + .digest(); + } else { + return createHash("sha256") + .update(fromBase58Check(this.systemId.toIAddress()).hash) + .update(heightBuffer) + .update(fromBase58Check(this.identityId.toIAddress()).hash) + .update(VERUS_DATA_SIGNATURE_PREFIX) + .update(sigHash) + .digest(); + } + } + + toSignatureData(sigHash: Buffer): SignatureData { + return new SignatureData({ + version: this.version, + system_ID: this.systemId.toIAddress(), + hash_type: this.hashType, + signature_hash: sigHash, + identity_ID: this.identityId.toIAddress(), + sig_type: SignatureData.TYPE_VERUSID_DEFAULT, + vdxf_keys: this.vdxfKeys, + vdxf_key_names: this.vdxfKeyNames, + bound_hashes: this.boundHashes, + signature_as_vch: this.signatureAsVch + }) + } + + toJson() { + return {} + } +} \ No newline at end of file diff --git a/src/vdxf/classes/request/GenericRequest.ts b/src/vdxf/classes/request/GenericRequest.ts index f3f24bec..0b0187de 100644 --- a/src/vdxf/classes/request/GenericRequest.ts +++ b/src/vdxf/classes/request/GenericRequest.ts @@ -6,16 +6,17 @@ import bufferutils from "../../../utils/bufferutils"; import base64url from "base64url"; import { BN } from 'bn.js'; import { BigNumber } from "../../../utils/types/BigNumber"; -import { EHashTypes, SignatureData, SignatureJsonDataInterface } from "../../../pbaas"; +import { SignatureJsonDataInterface } from "../../../pbaas"; import { OrdinalVdxfObject, OrdinalVdxfObjectJson } from "../OrdinalVdxfObject"; import varuint from "../../../utils/varuint"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import { createHash } from "crypto"; +import { VerifiableSignatureData } from "../VerifiableSignatureData"; export interface GenericRequestInterface { version?: BigNumber; flags?: BigNumber; - signature?: SignatureData; + signature?: VerifiableSignatureData; createdAt?: BigNumber; salt?: Buffer; details: Array; @@ -33,7 +34,7 @@ export type GenericRequestJson = { export class GenericRequest implements SerializableEntity { version: BigNumber; flags: BigNumber; - signature?: SignatureData; + signature?: VerifiableSignatureData; createdAt?: BigNumber; salt?: Buffer; // var length buffer details: Array; @@ -126,10 +127,7 @@ export class GenericRequest implements SerializableEntity { getDetailsHash(signedBlockheight: number): Buffer { if (this.isSigned()) { - const sigHash = this.getRawDataSha256(); - - this.signature.signature_hash = sigHash; - return this.signature.getIdentityHash({ version: 2, hash_type: EHashTypes.HASH_SHA256, height: signedBlockheight }); + return this.signature.getIdentityHash(signedBlockheight, this.getRawDataSha256()); } else return this.getRawDataSha256() } @@ -235,7 +233,7 @@ export class GenericRequest implements SerializableEntity { this.flags = new BN(reader.readCompactSize()); if (this.isSigned()) { - const _sig = new SignatureData(); + const _sig = new VerifiableSignatureData(); reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); this.signature = _sig; } @@ -309,7 +307,7 @@ export class GenericRequest implements SerializableEntity { } return { - signature: this.isSigned() ? this.signature.toJson() : undefined, + signature: undefined, //TODO: Add signature toJson function this.isSigned() ? this.signature.toJson() : undefined, details: details, version: this.version.toString(), flags: this.flags.toString(), From 379a315b8aa79deb038fe745456e7404a54bf1b5 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Thu, 23 Oct 2025 12:33:29 +0200 Subject: [PATCH 029/123] Replace xor with or if word "set" is used instead of "toggle" --- dist/pbaas/Identity.js | 4 ++-- dist/vdxf/classes/VerifiableSignatureData.js | 2 +- .../classes/identity/IdentityUpdateEnvelope.js | 2 +- dist/vdxf/classes/payment/VerusPayInvoice.js | 2 +- .../vdxf/classes/payment/VerusPayInvoiceDetails.js | 14 +++++++------- dist/vdxf/classes/request/GenericRequest.js | 10 +++++----- src/pbaas/Identity.ts | 4 ++-- src/vdxf/classes/VerifiableSignatureData.ts | 2 +- .../classes/identity/IdentityUpdateEnvelope.ts | 2 +- src/vdxf/classes/payment/VerusPayInvoice.ts | 2 +- src/vdxf/classes/payment/VerusPayInvoiceDetails.ts | 14 +++++++------- src/vdxf/classes/request/GenericRequest.ts | 10 +++++----- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/dist/pbaas/Identity.js b/dist/pbaas/Identity.js index 6532339a..d9c7de24 100644 --- a/dist/pbaas/Identity.js +++ b/dist/pbaas/Identity.js @@ -307,7 +307,7 @@ class Identity extends Principal_1.Principal { else if (unlockTime.gt(exports.IDENTITY_MAX_UNLOCK_DELAY)) { unlockAfter = exports.IDENTITY_MAX_UNLOCK_DELAY; } - this.flags = this.flags.xor(exports.IDENTITY_FLAG_LOCKED); + this.flags = this.flags.or(exports.IDENTITY_FLAG_LOCKED); this.unlock_after = unlockAfter; } unlock(height = new bn_js_1.BN(0), txExpiryHeight = new bn_js_1.BN(0)) { @@ -327,7 +327,7 @@ class Identity extends Principal_1.Principal { } } revoke() { - this.flags = this.flags.xor(exports.IDENTITY_FLAG_REVOKED); + this.flags = this.flags.or(exports.IDENTITY_FLAG_REVOKED); this.unlock(); } unrevoke() { diff --git a/dist/vdxf/classes/VerifiableSignatureData.js b/dist/vdxf/classes/VerifiableSignatureData.js index a71ee1de..cd37a237 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.js +++ b/dist/vdxf/classes/VerifiableSignatureData.js @@ -32,7 +32,7 @@ class VerifiableSignatureData { return !!(this.flags.and(flag).toNumber()); } setFlag(flag) { - this.flags = this.flags.xor(flag); + this.flags = this.flags.or(flag); } hasVdxfKeys() { return this.hasFlag(VerifiableSignatureData.FLAG_HAS_VDXF_KEYS); diff --git a/dist/vdxf/classes/identity/IdentityUpdateEnvelope.js b/dist/vdxf/classes/identity/IdentityUpdateEnvelope.js index 4e89f9bb..9f03622d 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateEnvelope.js +++ b/dist/vdxf/classes/identity/IdentityUpdateEnvelope.js @@ -56,7 +56,7 @@ class IdentityUpdateEnvelope extends __1.VDXFObject { return !!(this.version.and(exports.IDENTITY_UPDATE_VERSION_SIGNED).toNumber()); } setSigned() { - this.version = this.version.xor(exports.IDENTITY_UPDATE_VERSION_SIGNED); + this.version = this.version.or(exports.IDENTITY_UPDATE_VERSION_SIGNED); } getDetailsHash(signedBlockheight, signatureVersion = 2) { if (this.isSigned()) { diff --git a/dist/vdxf/classes/payment/VerusPayInvoice.js b/dist/vdxf/classes/payment/VerusPayInvoice.js index 8e80103b..78f2b762 100644 --- a/dist/vdxf/classes/payment/VerusPayInvoice.js +++ b/dist/vdxf/classes/payment/VerusPayInvoice.js @@ -42,7 +42,7 @@ class VerusPayInvoice extends __1.VDXFObject { return !!(this.version.and(exports.VERUSPAY_VERSION_SIGNED).toNumber()); } setSigned() { - this.version = this.version.xor(exports.VERUSPAY_VERSION_SIGNED); + this.version = this.version.or(exports.VERUSPAY_VERSION_SIGNED); } getDetailsHash(signedBlockheight, signatureVersion = 2) { if (this.isSigned()) { diff --git a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js index 7bbbe77b..7b86943f 100644 --- a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js +++ b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js @@ -47,19 +47,19 @@ class VerusPayInvoiceDetails { } setFlags(flags) { if (flags.acceptsConversion) - this.flags = this.flags.xor(exports.VERUSPAY_ACCEPTS_CONVERSION); + this.flags = this.flags.or(exports.VERUSPAY_ACCEPTS_CONVERSION); if (flags.acceptsNonVerusSystems) - this.flags = this.flags.xor(exports.VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS); + this.flags = this.flags.or(exports.VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS); if (flags.expires) - this.flags = this.flags.xor(exports.VERUSPAY_EXPIRES); + this.flags = this.flags.or(exports.VERUSPAY_EXPIRES); if (flags.acceptsAnyAmount) - this.flags = this.flags.xor(exports.VERUSPAY_ACCEPTS_ANY_AMOUNT); + this.flags = this.flags.or(exports.VERUSPAY_ACCEPTS_ANY_AMOUNT); if (flags.acceptsAnyDestination) - this.flags = this.flags.xor(exports.VERUSPAY_ACCEPTS_ANY_DESTINATION); + this.flags = this.flags.or(exports.VERUSPAY_ACCEPTS_ANY_DESTINATION); if (flags.excludesVerusBlockchain) - this.flags = this.flags.xor(exports.VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN); + this.flags = this.flags.or(exports.VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN); if (flags.isTestnet) - this.flags = this.flags.xor(exports.VERUSPAY_IS_TESTNET); + this.flags = this.flags.or(exports.VERUSPAY_IS_TESTNET); } getFlagsJson() { return { diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js index 049eb6c4..0f0365f2 100644 --- a/dist/vdxf/classes/request/GenericRequest.js +++ b/dist/vdxf/classes/request/GenericRequest.js @@ -47,19 +47,19 @@ class GenericRequest { return !!(this.flags.and(GenericRequest.FLAG_IS_TESTNET).toNumber()); } setSigned() { - this.flags = this.flags.xor(GenericRequest.FLAG_SIGNED); + this.flags = this.flags.or(GenericRequest.FLAG_SIGNED); } setHasMultiDetails() { - this.flags = this.flags.xor(GenericRequest.FLAG_MULTI_DETAILS); + this.flags = this.flags.or(GenericRequest.FLAG_MULTI_DETAILS); } setHasCreatedAt() { - this.flags = this.flags.xor(GenericRequest.FLAG_HAS_CREATED_AT); + this.flags = this.flags.or(GenericRequest.FLAG_HAS_CREATED_AT); } setHasSalt() { - this.flags = this.flags.xor(GenericRequest.FLAG_HAS_SALT); + this.flags = this.flags.or(GenericRequest.FLAG_HAS_SALT); } setIsTestnet() { - this.flags = this.flags.xor(GenericRequest.FLAG_IS_TESTNET); + this.flags = this.flags.or(GenericRequest.FLAG_IS_TESTNET); } setFlags() { if (this.createdAt) diff --git a/src/pbaas/Identity.ts b/src/pbaas/Identity.ts index 06ce9315..361db815 100644 --- a/src/pbaas/Identity.ts +++ b/src/pbaas/Identity.ts @@ -425,7 +425,7 @@ export class Identity extends Principal implements SerializableEntity { unlockAfter = IDENTITY_MAX_UNLOCK_DELAY; } - this.flags = this.flags.xor(IDENTITY_FLAG_LOCKED); + this.flags = this.flags.or(IDENTITY_FLAG_LOCKED); this.unlock_after = unlockAfter; } @@ -446,7 +446,7 @@ export class Identity extends Principal implements SerializableEntity { } revoke() { - this.flags = this.flags.xor(IDENTITY_FLAG_REVOKED); + this.flags = this.flags.or(IDENTITY_FLAG_REVOKED); this.unlock(); } diff --git a/src/vdxf/classes/VerifiableSignatureData.ts b/src/vdxf/classes/VerifiableSignatureData.ts index 1c448caf..0fcbd518 100644 --- a/src/vdxf/classes/VerifiableSignatureData.ts +++ b/src/vdxf/classes/VerifiableSignatureData.ts @@ -82,7 +82,7 @@ export class VerifiableSignatureData implements SerializableEntity { } private setFlag(flag: BigNumber) { - this.flags = this.flags.xor(flag); + this.flags = this.flags.or(flag); } hasVdxfKeys() { diff --git a/src/vdxf/classes/identity/IdentityUpdateEnvelope.ts b/src/vdxf/classes/identity/IdentityUpdateEnvelope.ts index 5e7b32ac..e6a3844c 100644 --- a/src/vdxf/classes/identity/IdentityUpdateEnvelope.ts +++ b/src/vdxf/classes/identity/IdentityUpdateEnvelope.ts @@ -98,7 +98,7 @@ export class IdentityUpdateEnvelope extends VDXFObject { } setSigned() { - this.version = this.version.xor(IDENTITY_UPDATE_VERSION_SIGNED); + this.version = this.version.or(IDENTITY_UPDATE_VERSION_SIGNED); } getDetailsHash(signedBlockheight: number, signatureVersion: number = 2) { diff --git a/src/vdxf/classes/payment/VerusPayInvoice.ts b/src/vdxf/classes/payment/VerusPayInvoice.ts index bbe553ba..a61b38db 100644 --- a/src/vdxf/classes/payment/VerusPayInvoice.ts +++ b/src/vdxf/classes/payment/VerusPayInvoice.ts @@ -82,7 +82,7 @@ export class VerusPayInvoice extends VDXFObject { } setSigned() { - this.version = this.version.xor(VERUSPAY_VERSION_SIGNED); + this.version = this.version.or(VERUSPAY_VERSION_SIGNED); } getDetailsHash(signedBlockheight: number, signatureVersion: number = 2) { diff --git a/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts b/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts index 087ff508..0661a263 100644 --- a/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts +++ b/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts @@ -76,13 +76,13 @@ export class VerusPayInvoiceDetails implements SerializableEntity { excludesVerusBlockchain?: boolean, isTestnet?: boolean }) { - if (flags.acceptsConversion) this.flags = this.flags.xor(VERUSPAY_ACCEPTS_CONVERSION); - if (flags.acceptsNonVerusSystems) this.flags = this.flags.xor(VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS); - if (flags.expires) this.flags = this.flags.xor(VERUSPAY_EXPIRES); - if (flags.acceptsAnyAmount) this.flags = this.flags.xor(VERUSPAY_ACCEPTS_ANY_AMOUNT); - if (flags.acceptsAnyDestination) this.flags = this.flags.xor(VERUSPAY_ACCEPTS_ANY_DESTINATION); - if (flags.excludesVerusBlockchain) this.flags = this.flags.xor(VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN); - if (flags.isTestnet) this.flags = this.flags.xor(VERUSPAY_IS_TESTNET); + if (flags.acceptsConversion) this.flags = this.flags.or(VERUSPAY_ACCEPTS_CONVERSION); + if (flags.acceptsNonVerusSystems) this.flags = this.flags.or(VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS); + if (flags.expires) this.flags = this.flags.or(VERUSPAY_EXPIRES); + if (flags.acceptsAnyAmount) this.flags = this.flags.or(VERUSPAY_ACCEPTS_ANY_AMOUNT); + if (flags.acceptsAnyDestination) this.flags = this.flags.or(VERUSPAY_ACCEPTS_ANY_DESTINATION); + if (flags.excludesVerusBlockchain) this.flags = this.flags.or(VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN); + if (flags.isTestnet) this.flags = this.flags.or(VERUSPAY_IS_TESTNET); } getFlagsJson(): { [key: string]: boolean } { diff --git a/src/vdxf/classes/request/GenericRequest.ts b/src/vdxf/classes/request/GenericRequest.ts index 0b0187de..3d3cb21c 100644 --- a/src/vdxf/classes/request/GenericRequest.ts +++ b/src/vdxf/classes/request/GenericRequest.ts @@ -95,23 +95,23 @@ export class GenericRequest implements SerializableEntity { } setSigned() { - this.flags = this.flags.xor(GenericRequest.FLAG_SIGNED); + this.flags = this.flags.or(GenericRequest.FLAG_SIGNED); } setHasMultiDetails() { - this.flags = this.flags.xor(GenericRequest.FLAG_MULTI_DETAILS); + this.flags = this.flags.or(GenericRequest.FLAG_MULTI_DETAILS); } setHasCreatedAt() { - this.flags = this.flags.xor(GenericRequest.FLAG_HAS_CREATED_AT); + this.flags = this.flags.or(GenericRequest.FLAG_HAS_CREATED_AT); } setHasSalt() { - this.flags = this.flags.xor(GenericRequest.FLAG_HAS_SALT); + this.flags = this.flags.or(GenericRequest.FLAG_HAS_SALT); } setIsTestnet() { - this.flags = this.flags.xor(GenericRequest.FLAG_IS_TESTNET); + this.flags = this.flags.or(GenericRequest.FLAG_IS_TESTNET); } setFlags() { From 2ecf78145536a4f089971aa0c23294a91c6a7d1a Mon Sep 17 00:00:00 2001 From: monkins Date: Sat, 25 Oct 2025 19:18:03 +0100 Subject: [PATCH 030/123] Updates to comments #1 --- .../vdxf/appencryptionrequestdetails.test.ts | 8 +- .../vdxf/compactaddressidobject.test.ts | 12 +-- .../vdxf/loginrequestdetails.test.ts | 14 +-- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 37 ++++++- .../vdxf/provisioningidentitydetails.test.ts | 6 +- src/__tests__/vdxf/requestuserdata.test.ts | 4 +- src/vdxf/classes/CompactIdAddressObject.ts | 35 +++--- src/vdxf/classes/VerifiableSignatureData.ts | 2 +- .../AppEncryptionRequestDetails.ts | 4 +- .../requestobjects/LoginRequestDetails.ts | 102 +++++++++--------- .../requestobjects/PersonalUserDataDetails.ts | 15 +-- .../classes/requestobjects/RequestUserData.ts | 2 +- 12 files changed, 139 insertions(+), 102 deletions(-) diff --git a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts index 08e3a410..ed699743 100644 --- a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts +++ b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts @@ -4,9 +4,9 @@ import { TransferDestination } from "../../pbaas/TransferDestination"; import { BigNumber } from "../../utils/types/BigNumber"; // Helper function to create TransferDestination from address string -function createCompactIdAddressObject(flags: BigNumber, address: string): CompactIdAddressObject { +function createCompactIdAddressObject(type: number, address: string): CompactIdAddressObject { const obj = new CompactIdAddressObject(); - obj.flags = flags; + obj.type = type; obj.address = address; return obj; } @@ -66,9 +66,9 @@ describe("AppEncryptionRequestDetails serialization tests", () => { expect(deserializedDetails.encryptToZAddress).toBe(originalDetails.encryptToZAddress); expect(deserializedDetails.derivationNumber.toNumber()).toBe(originalDetails.derivationNumber.toNumber()); expect(deserializedDetails.secondaryDerivationNumber?.toNumber()).toBe(originalDetails.secondaryDerivationNumber?.toNumber()); - expect(deserializedDetails.fromAddress?.flags.toNumber()).toBe(originalDetails.fromAddress?.flags.toNumber()); + expect(deserializedDetails.fromAddress?.type).toBe(originalDetails.fromAddress?.type); expect(deserializedDetails.fromAddress?.address).toBe(originalDetails.fromAddress?.address); - expect(deserializedDetails.toAddress?.flags.toNumber()).toBe(originalDetails.toAddress?.flags.toNumber()); + expect(deserializedDetails.toAddress?.type).toBe(originalDetails.toAddress?.type); expect(deserializedDetails.toAddress?.address).toBe(originalDetails.toAddress?.address); // Verify that serializing both instances produces the same buffer diff --git a/src/__tests__/vdxf/compactaddressidobject.test.ts b/src/__tests__/vdxf/compactaddressidobject.test.ts index 7dea209e..276d515b 100644 --- a/src/__tests__/vdxf/compactaddressidobject.test.ts +++ b/src/__tests__/vdxf/compactaddressidobject.test.ts @@ -9,7 +9,7 @@ describe("CompactIdAddressObject", () => { test("creates instance with iaddress", () => { const item = new CompactIdAddressObject({ version: new BN(CompactIdAddressObject.DEFAULT_VERSION), - flags: CompactIdAddressObject.IS_IDENTITYID, + type: CompactIdAddressObject.IS_IDENTITYID, address: "iB5PRXMHLYcNtM8dfLB6KwfJrHU2mKDYuU", rootSystemName: "VRSC" }); @@ -19,7 +19,7 @@ describe("CompactIdAddressObject", () => { const newDetails = new CompactIdAddressObject(); newDetails.fromBuffer(detailsBuffer); expect(newDetails.version.toString()).toBe("1"); - expect(newDetails.flags.toString()).toBe(CompactIdAddressObject.IS_IDENTITYID.toString()); + expect(newDetails.type).toBe(CompactIdAddressObject.IS_IDENTITYID); expect(newDetails.address).toBe("iB5PRXMHLYcNtM8dfLB6KwfJrHU2mKDYuU"); expect(newDetails.rootSystemName).toBe("VRSC"); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); @@ -28,7 +28,7 @@ describe("CompactIdAddressObject", () => { test("creates instance with fqn", () => { const item = new CompactIdAddressObject({ version: new BN(CompactIdAddressObject.DEFAULT_VERSION), - flags: CompactIdAddressObject.IS_FQN, + type: CompactIdAddressObject.IS_FQN, address: "bob.chips@", rootSystemName: "VRSC" }); @@ -38,7 +38,7 @@ describe("CompactIdAddressObject", () => { const newDetails = new CompactIdAddressObject(); newDetails.fromBuffer(detailsBuffer); expect(newDetails.version.toString()).toBe("1"); - expect(newDetails.flags.toString()).toBe(CompactIdAddressObject.IS_FQN.toString()); + expect(newDetails.type).toBe(CompactIdAddressObject.IS_FQN); expect(newDetails.address).toBe("bob.chips@"); expect(newDetails.rootSystemName).toBe("VRSC"); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); @@ -47,7 +47,7 @@ describe("CompactIdAddressObject", () => { test("creates instance with fqn that reduces to iaddress for space saving", () => { const item = new CompactIdAddressObject({ version: new BN(CompactIdAddressObject.DEFAULT_VERSION), - flags: CompactIdAddressObject.IS_FQN, + type: CompactIdAddressObject.IS_FQN, address: "bob91283472394872349824728934789234.token823984279847293847239487239847324.chips@", rootSystemName: "VRSC" }); @@ -57,7 +57,7 @@ describe("CompactIdAddressObject", () => { const newDetails = new CompactIdAddressObject(); newDetails.fromBuffer(detailsBuffer); expect(newDetails.version.toString()).toBe("1"); - expect(newDetails.flags.toString()).toBe(CompactIdAddressObject.IS_IDENTITYID.toString()); + expect(newDetails.type).toBe(CompactIdAddressObject.IS_IDENTITYID); expect(newDetails.address).toBe("i67xSVGnGC3PVuGk5crPfkVJptiLB4zNjb"); expect(newDetails.rootSystemName).toBe("VRSC"); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); diff --git a/src/__tests__/vdxf/loginrequestdetails.test.ts b/src/__tests__/vdxf/loginrequestdetails.test.ts index a9a7a0b4..6b127d19 100644 --- a/src/__tests__/vdxf/loginrequestdetails.test.ts +++ b/src/__tests__/vdxf/loginrequestdetails.test.ts @@ -30,7 +30,7 @@ describe("LoginRequestDetails", () => { expect(details.version.toString()).toBe("1"); expect(details.flags?.toString()).toBe("0"); expect(details.permissions).toBeNull(); - expect(details.callbackUri).toBeNull(); + expect(details.callbackUris).toBeNull(); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); }); @@ -38,11 +38,11 @@ describe("LoginRequestDetails", () => { const details = new LoginRequestDetails({ requestId: TEST_CHALLENGE_ID, permissions: [ - { type: LoginRequestDetails.REQUIRED_ID, identity: new CompactIdAddressObject({ flags: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }, - { type: LoginRequestDetails.REQUIRED_SYSTEM, identity: new CompactIdAddressObject({ flags: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, - { type: LoginRequestDetails.REQUIRED_PARENT, identity: new CompactIdAddressObject({ flags: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } + { type: LoginRequestDetails.REQUIRED_ID, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }, + { type: LoginRequestDetails.REQUIRED_SYSTEM, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, + { type: LoginRequestDetails.REQUIRED_PARENT, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } ], - callbackUri: [{ + callbackUris: [{ type: LoginRequestDetails.TYPE_WEBHOOK, uri: "https://example.com/callback" }], @@ -56,7 +56,7 @@ describe("LoginRequestDetails", () => { expect(newDetails.requestId).toBe(TEST_CHALLENGE_ID); expect(newDetails.permissions?.length).toBe(3); - expect(newDetails.callbackUri?.length).toBe(1); + expect(newDetails.callbackUris?.length).toBe(1); expect(newDetails.expiryTime?.toString()).toBe("2938475938457"); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); @@ -72,7 +72,7 @@ describe("LoginRequestDetails", () => { expect(details.version.toString()).toBe("1"); expect(details.flags?.toString()).toBe("0"); expect(details.permissions).toBeNull(); - expect(details.callbackUri).toBeNull(); + expect(details.callbackUris).toBeNull(); }); }); }); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 87ffd80b..3d843f49 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -4,11 +4,12 @@ import { DataDescriptorOrdinalVdxfObject, VerusPayInvoiceOrdinalVdxfObject, GeneralTypeOrdinalVdxfObject, - getOrdinalVdxfObjectClassForType + getOrdinalVdxfObjectClassForType, + LoginRequestDetailsOrdinalVdxfObject } from '../../vdxf/classes/OrdinalVdxfObject'; import { DataDescriptor, DEST_PKH, TransferDestination } from '../../pbaas'; -import { VerusPayInvoiceDetails } from '../../vdxf/classes'; +import { CompactIdAddressObject, LoginRequestDetails, VerusPayInvoiceDetails } from '../../vdxf/classes'; import { DEFAULT_VERUS_CHAINID } from '../../constants/pbaas'; import { fromBase58Check } from '../../utils/address'; @@ -31,6 +32,8 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { newObj = VerusPayInvoiceOrdinalVdxfObject.fromJson(json as any); } else if (obj instanceof GeneralTypeOrdinalVdxfObject) { newObj = GeneralTypeOrdinalVdxfObject.fromJson(json); + } else if (obj instanceof LoginRequestDetailsOrdinalVdxfObject) { + newObj = LoginRequestDetailsOrdinalVdxfObject.fromJson(json as any); } else { throw new Error("Unrecognized type") } @@ -165,4 +168,34 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { // data is undefined or empty expect(parsed.data).toBeUndefined(); }); + + it('should serialize / deserialize a LoginRequestDetailsOrdinalVdxfObject via buffer', () => { + const obj = new LoginRequestDetails({ + requestId: "iBJqQMRzpCW1WVYoU2Ty2VbCJnvyTEsE1C", + flags: new BN(LoginRequestDetails.FLAG_HAS_PERMISSIONS) + .or(new BN(LoginRequestDetails.FLAG_HAS_CALLBACK_URI)) + .or(new BN(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME)), + permissions: [{type: new BN(1), identity: new CompactIdAddressObject({ + version: new BN(1), + type: CompactIdAddressObject.IS_IDENTITYID, + address: "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv", + rootSystemName: "VRSC" + })}], + callbackUris: [{type: new BN(LoginRequestDetails.TYPE_WEBHOOK), uri: "https://example.com/callback"}], + expiryTime: new BN(345353453), + }); + + const objOrdinal = new LoginRequestDetailsOrdinalVdxfObject({ data: obj }); + + const round = roundTripBuffer(objOrdinal); + expect(round).toBeInstanceOf(LoginRequestDetailsOrdinalVdxfObject); + const d2 = (round as LoginRequestDetailsOrdinalVdxfObject).data; + expect(d2.requestId).toEqual(objOrdinal.data.requestId); + const json = objOrdinal.toJson(); + expect(json.data).toBeDefined(); + const roundJ = roundTripJson(objOrdinal); + expect(roundJ).toBeInstanceOf(LoginRequestDetailsOrdinalVdxfObject); + const d3 = (roundJ as LoginRequestDetailsOrdinalVdxfObject).data; + expect(d3.requestId).toEqual(objOrdinal.data.requestId); + }); }); \ No newline at end of file diff --git a/src/__tests__/vdxf/provisioningidentitydetails.test.ts b/src/__tests__/vdxf/provisioningidentitydetails.test.ts index 960d0d4d..4ba48f29 100644 --- a/src/__tests__/vdxf/provisioningidentitydetails.test.ts +++ b/src/__tests__/vdxf/provisioningidentitydetails.test.ts @@ -8,8 +8,8 @@ describe('Serializes and deserializes ProvisionIdentityDetails', () => { const provisionJson: ProvisionIdentityDetailsJson = { version: 1, flags: ProvisionIdentityDetails.FLAG_HAS_SYSTEMID.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID).toNumber(), - systemid: {version: 1, flags: CompactIdAddressObject.IS_IDENTITYID.toNumber(), address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootsystemname: "VRSC"}, - parentid: {version: 1, flags: CompactIdAddressObject.IS_IDENTITYID.toNumber(), address: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", rootsystemname: "VRSC"} + systemid: {version: 1, type: CompactIdAddressObject.IS_IDENTITYID, address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootsystemname: "VRSC"}, + parentid: {version: 1, type: CompactIdAddressObject.IS_IDENTITYID, address: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", rootsystemname: "VRSC"} } const e = ProvisionIdentityDetails.fromJson(provisionJson); @@ -24,7 +24,7 @@ describe('Serializes and deserializes ProvisionIdentityDetails', () => { const provisionJson = { version: 1, flags: ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION.toNumber(), - identityid: {version: 1, flags: CompactIdAddressObject.IS_FQN.toNumber(), address: "my.fully.vrsc@", rootsystemname: "VRSC"} + identityid: {version: 1, type: CompactIdAddressObject.IS_FQN, address: "my.fully.vrsc@", rootsystemname: "VRSC"} } const e = ProvisionIdentityDetails.fromJson(provisionJson); diff --git a/src/__tests__/vdxf/requestuserdata.test.ts b/src/__tests__/vdxf/requestuserdata.test.ts index a0fa3b8b..86508451 100644 --- a/src/__tests__/vdxf/requestuserdata.test.ts +++ b/src/__tests__/vdxf/requestuserdata.test.ts @@ -8,7 +8,7 @@ describe('Serializes and deserializes RequestUserData', () => { version: 1, flags: RequestUserData.FULL_DATA.or(RequestUserData.ATTESTATION).or(RequestUserData.HAS_SIGNER).toNumber(), searchdatakey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], - signer: { version: 1, flags: CompactIdAddressObject.IS_IDENTITYID.toNumber(), address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootsystemname: "VRSC" } + signer: { version: 1, type: CompactIdAddressObject.IS_IDENTITYID, address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootsystemname: "VRSC" } } const e = RequestUserData.fromJson(provisionJson); @@ -24,7 +24,7 @@ describe('Serializes and deserializes RequestUserData', () => { version: 1, flags: RequestUserData.PARTIAL_DATA.or(RequestUserData.ATTESTATION).or(RequestUserData.HAS_SIGNER).toNumber(), searchdatakey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], - signer: { version: 1, flags: CompactIdAddressObject.IS_FQN.toNumber(), address: "bob@", rootsystemname: "VRSC" }, + signer: { version: 1, type: CompactIdAddressObject.IS_FQN, address: "bob@", rootsystemname: "VRSC" }, requestedkeys: ["iLB8SG7ErJtTYcG1f4w9RLuMJPpAsjFkiL"] } diff --git a/src/vdxf/classes/CompactIdAddressObject.ts b/src/vdxf/classes/CompactIdAddressObject.ts index b137c513..1eedcbf9 100644 --- a/src/vdxf/classes/CompactIdAddressObject.ts +++ b/src/vdxf/classes/CompactIdAddressObject.ts @@ -19,14 +19,14 @@ import { I_ADDR_VERSION } from '../../constants/vdxf'; export interface CompactIdAddressObjectJson { version: number; - flags: number; + type: number; address: string; rootsystemname: string; } export interface CompactIdAddressObjectInterface { version?: BigNumber; - flags?: BigNumber; + type?: number; address: string; rootSystemName?: string; } @@ -37,27 +37,27 @@ export class CompactIdAddressObject implements SerializableEntity { static LAST_VERSION = new BN(1); static DEFAULT_VERSION = new BN(1); - static IS_FQN = new BN(1); - static IS_IDENTITYID = new BN(2); + static IS_FQN = 1; + static IS_IDENTITYID = 2; version: BigNumber; - flags: BigNumber; + type: number; address: string; rootSystemName: string; constructor(data?: CompactIdAddressObjectInterface) { this.version = data?.version || new BN(CompactIdAddressObject.DEFAULT_VERSION); - this.flags = data?.flags || new BN(0); + this.type = data?.type || 0; this.address = data?.address || ''; this.rootSystemName = data?.rootSystemName || 'VRSC'; } isFQN(): boolean { - return (this.flags.and(CompactIdAddressObject.IS_FQN).eq(CompactIdAddressObject.IS_FQN)); + return (this.type === CompactIdAddressObject.IS_FQN); } isIaddress(): boolean { - return (this.flags.and(CompactIdAddressObject.IS_IDENTITYID).eq(CompactIdAddressObject.IS_IDENTITYID)); + return (this.type === CompactIdAddressObject.IS_IDENTITYID); } isValid(): boolean { @@ -74,7 +74,7 @@ export class CompactIdAddressObject implements SerializableEntity { static fromIAddress(iaddr: string): CompactIdAddressObject { return new CompactIdAddressObject({ address: iaddr, - flags: CompactIdAddressObject.IS_IDENTITYID + type: CompactIdAddressObject.IS_IDENTITYID }) } @@ -89,10 +89,10 @@ export class CompactIdAddressObject implements SerializableEntity { if (this.isFQN()) { if (this.address.length > 20) { - this.flags = CompactIdAddressObject.IS_IDENTITYID; + this.type = CompactIdAddressObject.IS_IDENTITYID; this.address = toIAddress(this.address, this.rootSystemName); } else { - this.flags = CompactIdAddressObject.IS_FQN; + this.type = CompactIdAddressObject.IS_FQN; } } } @@ -101,7 +101,8 @@ export class CompactIdAddressObject implements SerializableEntity { this.setAddressTransferType(); let length = 0; - length += varint.encodingLength(this.flags); + length += varint.encodingLength(this.version); + length += varuint.encodingLength(this.type); if (this.isIaddress()) { length += 20; // identityuint160 @@ -117,7 +118,8 @@ export class CompactIdAddressObject implements SerializableEntity { toBuffer(): Buffer { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.flags); + writer.writeVarInt(this.version); + writer.writeCompactSize(this.type); if (this.isIaddress()) { writer.writeSlice(fromBase58Check(this.address).hash); @@ -131,7 +133,8 @@ export class CompactIdAddressObject implements SerializableEntity { fromBuffer(buffer: Buffer, offset?: number): number { const reader = new BufferReader(buffer, offset); - this.flags = reader.readVarInt(); + this.version = reader.readVarInt(); + this.type = reader.readCompactSize(); if (this.isIaddress()) { this.address = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); @@ -147,7 +150,7 @@ export class CompactIdAddressObject implements SerializableEntity { return { version: this.version.toNumber(), - flags: this.flags.toNumber(), + flags: this.type, address: this.address, rootsystemname: this.rootSystemName, }; @@ -156,7 +159,7 @@ export class CompactIdAddressObject implements SerializableEntity { static fromJson(json: any): CompactIdAddressObject { const instance = new CompactIdAddressObject(); instance.version = new BN(json.version); - instance.flags = new BN(json.flags); + instance.type = json.type; instance.address = json.address; instance.rootSystemName = json.rootsystemname; return instance; diff --git a/src/vdxf/classes/VerifiableSignatureData.ts b/src/vdxf/classes/VerifiableSignatureData.ts index 0fcbd518..1605d944 100644 --- a/src/vdxf/classes/VerifiableSignatureData.ts +++ b/src/vdxf/classes/VerifiableSignatureData.ts @@ -65,7 +65,7 @@ export class VerifiableSignatureData implements SerializableEntity { constructor(data?: VerifiableSignatureDataInterface) { this.version = data && data.flags ? data.flags : new BN(0); this.flags = data && data.flags ? data.flags : new BN(0); - this.systemId = data && data.systemId ? data.systemId : new CompactIdAddressObject({ flags: CompactIdAddressObject.IS_FQN, address: DEFAULT_VERUS_CHAINNAME }); + this.systemId = data && data.systemId ? data.systemId : new CompactIdAddressObject({ type: CompactIdAddressObject.IS_FQN, address: DEFAULT_VERUS_CHAINNAME }); this.hashType = data && data.hashType ? data.hashType : HASH_TYPE_SHA256; this.identityId = data ? data.identityId : undefined; this.vdxfKeys = data ? data.vdxfKeys : undefined; diff --git a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts index d2604bc2..49eff041 100644 --- a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts @@ -214,7 +214,7 @@ export class AppEncryptionRequestDetails implements SerializableEntity { return reader.offset; } - toJSON(): AppEncryptionRequestDetailsJson { + toJson(): AppEncryptionRequestDetailsJson { // Set flags before serialization this.setFlags(); @@ -229,7 +229,7 @@ export class AppEncryptionRequestDetails implements SerializableEntity { }; } - static fromJSON(json: AppEncryptionRequestDetailsJson): AppEncryptionRequestDetails { + static fromJson(json: AppEncryptionRequestDetailsJson): AppEncryptionRequestDetails { const instance = new AppEncryptionRequestDetails(); instance.version = new BN(json.version); instance.flags = new BN(json.flags); diff --git a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts index 861810b7..aac73499 100644 --- a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts @@ -30,8 +30,8 @@ export interface LoginRequestDetailsInterface { flags?: BigNumber; requestId: string; permissions?: Array; - callbackUri?: Array; - expiryTime?: BigNumber; + callbackUris?: Array; + expiryTime?: number; // UNIX Timestamp } export interface LoginPermissionJson { @@ -39,17 +39,17 @@ export interface LoginPermissionJson { identity: CompactIdAddressObjectJson; } -export interface CallbackUriJson { +export interface callbackUrisJson { type: number; uri: string; } export interface LoginPermission { - type: BigNumber; + type: number; identity: CompactIdAddressObject; } -export interface CallbackUri { - type: BigNumber; +export interface callbackUris { + type: number; uri: string; } @@ -58,7 +58,7 @@ export interface LoginRequestDetailsJson { requestid: string; flags: number; permissions?: Array; - callbackuri?: Array; + callbackUris?: Array; expirytime?: number; } @@ -67,8 +67,8 @@ export class LoginRequestDetails implements SerializableEntity { flags?: BigNumber; requestId: string; permissions?: Array; - callbackUri?: Array; - expiryTime?: BigNumber; + callbackUris?: Array; + expiryTime?: number; // UNIX Timestamp // Version static DEFAULT_VERSION = new BN(1, 10) @@ -80,14 +80,14 @@ export class LoginRequestDetails implements SerializableEntity { static FLAG_HAS_EXPIRY_TIME = new BN(4, 10); // Permission Types - static REQUIRED_ID = new BN(1, 10); - static REQUIRED_SYSTEM = new BN(2, 10); - static REQUIRED_PARENT = new BN(3, 10); + static REQUIRED_ID = 1; + static REQUIRED_SYSTEM = 2; + static REQUIRED_PARENT = 3; // Callback URI Types - static TYPE_WEBHOOK = new BN(1, 10); - static TYPE_REDIRECT = new BN(2, 10); - static TYPE_DEEPLINK = new BN(3, 10); + static TYPE_WEBHOOK = 1; + static TYPE_REDIRECT = 2; + static TYPE_DEEPLINK = 3; constructor( request?: LoginRequestDetailsInterface @@ -97,7 +97,7 @@ export class LoginRequestDetails implements SerializableEntity { this.requestId = request?.requestId || ''; this.flags = request?.flags || new BN(0, 10); this.permissions = request?.permissions || null; - this.callbackUri = request?.callbackUri || null; + this.callbackUris = request?.callbackUris || null; this.expiryTime = request?.expiryTime || null; } @@ -105,7 +105,7 @@ export class LoginRequestDetails implements SerializableEntity { return this.flags.and(LoginRequestDetails.FLAG_HAS_PERMISSIONS).eq(LoginRequestDetails.FLAG_HAS_PERMISSIONS); } - hasCallbackUri(): boolean { + hascallbackUris(): boolean { return this.flags.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI).eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); } @@ -124,22 +124,22 @@ export class LoginRequestDetails implements SerializableEntity { length += varuint.encodingLength(this.permissions.length); for (let i = 0; i < this.permissions.length; i++) { - length += varint.encodingLength(new BN(this.permissions[i].type)); + length += varuint.encodingLength(this.permissions[i].type); length += this.permissions[i].identity.getByteLength(); } } - if (this.hasCallbackUri()) { - length += varuint.encodingLength(this.callbackUri.length); - for (let i = 0; i < this.callbackUri.length; i++) { - length += varint.encodingLength(new BN(this.callbackUri[i].type)); - length += varuint.encodingLength(Buffer.from(this.callbackUri[i].uri, 'utf8').byteLength); - length += Buffer.from(this.callbackUri[i].uri, 'utf8').byteLength; + if (this.hascallbackUris()) { + length += varuint.encodingLength(this.callbackUris.length); + for (let i = 0; i < this.callbackUris.length; i++) { + length += varuint.encodingLength(this.callbackUris[i].type); + length += varuint.encodingLength(Buffer.from(this.callbackUris[i].uri, 'utf8').byteLength); + length += Buffer.from(this.callbackUris[i].uri, 'utf8').byteLength; } } if (this.hasExpiryTime()) { - length += varint.encodingLength(this.expiryTime); + length += varuint.encodingLength(this.expiryTime); } return length; @@ -156,21 +156,21 @@ export class LoginRequestDetails implements SerializableEntity { writer.writeCompactSize(this.permissions.length); for (let i = 0; i < this.permissions.length; i++) { - writer.writeVarInt(new BN(this.permissions[i].type)); + writer.writeCompactSize(this.permissions[i].type); writer.writeSlice(this.permissions[i].identity.toBuffer()); } } - if (this.hasCallbackUri()) { - writer.writeCompactSize(this.callbackUri.length); - for (let i = 0; i < this.callbackUri.length; i++) { - writer.writeVarInt(new BN(this.callbackUri[i].type)); - writer.writeVarSlice(Buffer.from(this.callbackUri[i].uri, 'utf8')); + if (this.hascallbackUris()) { + writer.writeCompactSize(this.callbackUris.length); + for (let i = 0; i < this.callbackUris.length; i++) { + writer.writeCompactSize(this.callbackUris[i].type); + writer.writeVarSlice(Buffer.from(this.callbackUris[i].uri, 'utf8')); } } if (this.hasExpiryTime()) { - writer.writeVarInt(this.expiryTime); + writer.writeCompactSize(this.expiryTime); } return writer.buffer; @@ -187,7 +187,7 @@ export class LoginRequestDetails implements SerializableEntity { const permissionsLength = reader.readCompactSize(); for (let i = 0; i < permissionsLength; i++) { const compactId = new CompactIdAddressObject(); - const type = reader.readVarInt(); + const type = reader.readCompactSize(); const identityOffset = reader.offset; reader.offset = compactId.fromBuffer(buffer, identityOffset); this.permissions.push({ @@ -197,19 +197,19 @@ export class LoginRequestDetails implements SerializableEntity { } } - if (this.hasCallbackUri()) { - this.callbackUri = []; - const callbackUriLength = reader.readCompactSize(); - for (let i = 0; i < callbackUriLength; i++) { - this.callbackUri.push({ - type: reader.readVarInt(), + if (this.hascallbackUris()) { + this.callbackUris = []; + const callbackUrisLength = reader.readCompactSize(); + for (let i = 0; i < callbackUrisLength; i++) { + this.callbackUris.push({ + type: reader.readCompactSize(), uri: reader.readVarSlice().toString('utf8') }); } } if (this.hasExpiryTime()) { - this.expiryTime = reader.readVarInt(); + this.expiryTime = reader.readCompactSize(); } return reader.offset; @@ -222,10 +222,10 @@ export class LoginRequestDetails implements SerializableEntity { version: this.version.toNumber(), flags: this.flags.toNumber(), requestid: this.requestId, - permissions: this.permissions ? this.permissions.map(p => ({type: p.type.toNumber(), + permissions: this.permissions ? this.permissions.map(p => ({type: p.type, identity: p.identity.toJson()})) : undefined, - callbackuri: this.callbackUri ? this.callbackUri : undefined, - expirytime: this.expiryTime ? this.expiryTime.toNumber() : undefined + callbackUris: this.callbackUris ? this.callbackUris : undefined, + expirytime: this.expiryTime ? this.expiryTime : undefined }; return retval; @@ -240,17 +240,17 @@ export class LoginRequestDetails implements SerializableEntity { loginDetails.requestId = data.requestid; if(loginDetails.hasPermissions() && data.permissions) { - loginDetails.permissions = data.permissions.map(p => ({type: new BN(p.type), + loginDetails.permissions = data.permissions.map(p => ({type: p.type, identity: CompactIdAddressObject.fromJson(p.identity)})); } - if(loginDetails.hasCallbackUri() && data.callbackuri) { - loginDetails.callbackUri = data.callbackuri.map(c => ({type: new BN(c.type), + if(loginDetails.hascallbackUris() && data.callbackUris) { + loginDetails.callbackUris = data.callbackUris.map(c => ({type: c.type, uri: c.uri})); } if(loginDetails.hasExpiryTime() && data.expirytime) { - loginDetails.expiryTime = new BN(data.expirytime); + loginDetails.expiryTime = data.expirytime; } return loginDetails; @@ -262,7 +262,7 @@ export class LoginRequestDetails implements SerializableEntity { if (this.permissions) { this.flags = this.flags.or(LoginRequestDetails.FLAG_HAS_PERMISSIONS); } - if (this.callbackUri) { + if (this.callbackUris) { this.flags = this.flags.or(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); } if (this.expiryTime) { @@ -287,14 +287,14 @@ export class LoginRequestDetails implements SerializableEntity { } } - if (this.hasCallbackUri()) { - if (!this.callbackUri || this.callbackUri.length === 0) { + if (this.hascallbackUris()) { + if (!this.callbackUris || this.callbackUris.length === 0) { return false; } } if (this.hasExpiryTime()) { - if (!this.expiryTime || this.expiryTime.lte(new BN(0))) { + if (!this.expiryTime || this.expiryTime === 0) { return false; } } diff --git a/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts b/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts index 911e87db..737fc233 100644 --- a/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts +++ b/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts @@ -23,14 +23,15 @@ import bufferutils from '../../../utils/bufferutils'; const { BufferReader, BufferWriter } = bufferutils; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { DataDescriptor, DataDescriptorJson } from '../../../pbaas'; -import { SignatureData, SignatureJsonDataInterface } from '../../../pbaas/SignatureData'; +import { VerifiableSignatureData, SignatureJsonDataInterface } from '../../../vdxf/classes/VerifiableSignatureData'; + export interface PersonalUserDataDetailsInterface { version?: BigNumber; flags: BigNumber; signableObjects: Array; statements?: Array; - signature?: SignatureData; + signature?: VerifiableSignatureData; } export interface PersonalUserDataDetailsJson { @@ -59,7 +60,7 @@ export class PersonalUserDataDetails implements SerializableEntity { flags: BigNumber; signableObjects: Array; statements?: Array; - signature?: SignatureData; + signature?: VerifiableSignatureData; constructor(data?: PersonalUserDataDetailsInterface) { this.version = data?.version || PersonalUserDataDetails.DEFAULT_VERSION; @@ -191,7 +192,7 @@ export class PersonalUserDataDetails implements SerializableEntity { } if (this.hasSignature()) { - const signature = new SignatureData(); + const signature = new VerifiableSignatureData(); reader.offset = signature.fromBuffer(reader.buffer, reader.offset); this.signature = signature; } @@ -199,7 +200,7 @@ export class PersonalUserDataDetails implements SerializableEntity { return reader.offset; } - toJSON(): PersonalUserDataDetailsJson { + toJson(): PersonalUserDataDetailsJson { this.setFlags(); return { @@ -211,7 +212,7 @@ export class PersonalUserDataDetails implements SerializableEntity { }; } - static fromJSON(json: PersonalUserDataDetailsJson): PersonalUserDataDetails { + static fromJson(json: PersonalUserDataDetailsJson): PersonalUserDataDetails { const instance = new PersonalUserDataDetails(); instance.version = new BN(json.version); instance.flags = new BN(json.flags); @@ -225,7 +226,7 @@ export class PersonalUserDataDetails implements SerializableEntity { instance.signableObjects = dataDescriptorObjects; instance.statements = json.statements || []; - instance.signature = json.signature ? SignatureData.fromJson(json.signature) : undefined; + instance.signature = json.signature ? VerifiableSignatureData.fromJson(json.signature) : undefined; return instance; } } \ No newline at end of file diff --git a/src/vdxf/classes/requestobjects/RequestUserData.ts b/src/vdxf/classes/requestobjects/RequestUserData.ts index 5c2ada2d..b08fb2d7 100644 --- a/src/vdxf/classes/requestobjects/RequestUserData.ts +++ b/src/vdxf/classes/requestobjects/RequestUserData.ts @@ -239,7 +239,7 @@ export class RequestUserData implements SerializableEntity { return reader.offset; } - toJSON(): RequestUserDataJson { + toJson(): RequestUserDataJson { // Set flags before serialization this.setFlags(); From 20f361041bcf2e16557991da359652f551e99d44 Mon Sep 17 00:00:00 2001 From: monkins Date: Sun, 26 Oct 2025 12:00:44 +0000 Subject: [PATCH 031/123] Update #2 to comments --- .../vdxf/appencryptionrequestdetails.test.ts | 83 ++++++++++++++----- .../vdxf/loginrequestdetails.test.ts | 2 +- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 4 +- .../vdxf/personaluserdatadetails.test.ts | 34 ++++++-- src/vdxf/classes/VerifiableSignatureData.ts | 31 ++++++- .../AppEncryptionRequestDetails.ts | 9 +- .../requestobjects/LoginRequestDetails.ts | 22 ++--- .../requestobjects/PersonalUserDataDetails.ts | 9 +- .../ProvisionIdentityDetails.ts | 7 +- .../classes/requestobjects/RequestUserData.ts | 8 +- 10 files changed, 149 insertions(+), 60 deletions(-) diff --git a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts index ed699743..95f68c00 100644 --- a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts +++ b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts @@ -14,17 +14,25 @@ function createCompactIdAddressObject(type: number, address: string): CompactIdA describe("AppEncryptionRequestDetails serialization tests", () => { test("creates valid AppEncryptionRequestDetails with zaddress", () => { - const details = new AppEncryptionRequestDetails(); - details.version = AppEncryptionRequestDetails.DEFAULT_VERSION; - details.flags = AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER - .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) - .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS); - details.encryptToZAddress = "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4"; - details.derivationNumber = new BN(42); - details.secondaryDerivationNumber = new BN(234); - - details.fromAddress = createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"); - details.toAddress = createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"); + const details = new AppEncryptionRequestDetails({ + version: AppEncryptionRequestDetails.DEFAULT_VERSION, + flags: AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER + .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) + .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS), + encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", + derivationNumber: new BN(42), + secondaryDerivationNumber: new BN(234), + fromAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), + toAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + }); + + const newDetails = new AppEncryptionRequestDetails(); + const buffer = details.toBuffer(); + newDetails.fromBuffer(buffer); + const originalBuffer = details.toBuffer(); + const deserializedBuffer = newDetails.toBuffer(); + expect(originalBuffer.toString('hex')).toBe(deserializedBuffer.toString('hex')); + expect(details.isValid()).toBe(true); expect(details.encryptToZAddress).toBe("zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4"); @@ -37,17 +45,17 @@ describe("AppEncryptionRequestDetails serialization tests", () => { test("serializes and deserializes AppEncryptionRequestDetails correctly", () => { // Create the first AppEncryptionRequestDetails - const originalDetails = new AppEncryptionRequestDetails(); - originalDetails.version = AppEncryptionRequestDetails.DEFAULT_VERSION; - originalDetails.flags = AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER + const originalDetails = new AppEncryptionRequestDetails({ + version: AppEncryptionRequestDetails.DEFAULT_VERSION, + flags: AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) - .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS); - originalDetails.encryptToZAddress = "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4"; - originalDetails.derivationNumber = new BN(42); - originalDetails.secondaryDerivationNumber = new BN(234); - - originalDetails.fromAddress = createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"); - originalDetails.toAddress = createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"); + .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS), + encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", + derivationNumber: new BN(42), + secondaryDerivationNumber: new BN(234), + fromAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), + toAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + }); // Serialize to buffer const buffer = originalDetails.toBuffer(); @@ -74,7 +82,38 @@ describe("AppEncryptionRequestDetails serialization tests", () => { // Verify that serializing both instances produces the same buffer const originalBuffer = originalDetails.toBuffer(); const deserializedBuffer = deserializedDetails.toBuffer(); - expect(originalBuffer.equals(deserializedBuffer)).toBe(true); + expect(originalBuffer.toString('hex')).toBe(deserializedBuffer.toString('hex')); + }); + + test("fromIAddress creates valid CompactIdAddressObject", () => { + const iaddr = "iDZvpsGCfX6vMJxi3F7m26qCX2Ns6QtQYk"; + const compactObj = CompactIdAddressObject.fromIAddress(iaddr); + + expect(compactObj).toBeInstanceOf(CompactIdAddressObject); + expect(compactObj.address).toBe(iaddr); + expect(compactObj.type).toBe(CompactIdAddressObject.IS_IDENTITYID); + + const item = new CompactIdAddressObject(); + item.fromBuffer(compactObj.toBuffer()); + + expect(compactObj.toBuffer().toString('hex')).toBe(item.toBuffer().toString('hex')); + }); + test("toIAddress converts FQN to IAddress correctly", () => { + const fqn = "myidentity.VRSC@"; + const compactObj = new CompactIdAddressObject({ + type: CompactIdAddressObject.IS_FQN, + address: fqn, + rootSystemName: "VRSC" + }); + const iaddr = compactObj.toIAddress(); + + expect(iaddr).toBe("iDZvpsGCfX6vMJxi3F7m26qCX2Ns6QtQYk"); + const item = new CompactIdAddressObject(); + item.fromBuffer(compactObj.toBuffer()); + + expect(compactObj.toBuffer().toString('hex')).toBe(item.toBuffer().toString('hex')); + + }); }); diff --git a/src/__tests__/vdxf/loginrequestdetails.test.ts b/src/__tests__/vdxf/loginrequestdetails.test.ts index 6b127d19..733b0d41 100644 --- a/src/__tests__/vdxf/loginrequestdetails.test.ts +++ b/src/__tests__/vdxf/loginrequestdetails.test.ts @@ -11,7 +11,7 @@ const TEST_IDENTITY_ID_1 = "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"; const TEST_IDENTITY_ID_2 = "i84T3MWcb6zWcwgNZoU3TXtrUn9EqM84A4"; const TEST_IDENTITY_ID_3 = "iJ5LnijKvp1wkL4hB3EsJ5kjcE4T8VL4hD"; -const SERIALIZED_LOGIN_REQUEST_DETAILS = Buffer.from("07c72c5b342995a2186f96271e91686c5e942d13e10301022a5fc0e9dedf4f1e8351fe652a140e9dd38fa5a90202324afad29f51859c54050db854d2c9bb52acd9bd0302a0276f355ad37d8e5d2d10f16c1d051b6f6ead6201011c68747470733a2f2f6578616d706c652e636f6d2f63616c6c6261636bd4c1d5c18419", 'hex'); // Replace with actual serialized data +const SERIALIZED_LOGIN_REQUEST_DETAILS = Buffer.from("07c72c5b342995a2186f96271e91686c5e942d13e1030101022a5fc0e9dedf4f1e8351fe652a140e9dd38fa5a9020102324afad29f51859c54050db854d2c9bb52acd9bd030102a0276f355ad37d8e5d2d10f16c1d051b6f6ead6201011c68747470733a2f2f6578616d706c652e636f6d2f63616c6c6261636bff9982d02aac020000", 'hex'); describe("LoginRequestDetails", () => { diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 3d843f49..1896b972 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -175,13 +175,13 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { flags: new BN(LoginRequestDetails.FLAG_HAS_PERMISSIONS) .or(new BN(LoginRequestDetails.FLAG_HAS_CALLBACK_URI)) .or(new BN(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME)), - permissions: [{type: new BN(1), identity: new CompactIdAddressObject({ + permissions: [{type: 1, identity: new CompactIdAddressObject({ version: new BN(1), type: CompactIdAddressObject.IS_IDENTITYID, address: "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv", rootSystemName: "VRSC" })}], - callbackUris: [{type: new BN(LoginRequestDetails.TYPE_WEBHOOK), uri: "https://example.com/callback"}], + callbackUris: [{type: 2, uri: "https://example.com/callback"}], expiryTime: new BN(345353453), }); diff --git a/src/__tests__/vdxf/personaluserdatadetails.test.ts b/src/__tests__/vdxf/personaluserdatadetails.test.ts index 50d84d6b..62dfc0a3 100644 --- a/src/__tests__/vdxf/personaluserdatadetails.test.ts +++ b/src/__tests__/vdxf/personaluserdatadetails.test.ts @@ -1,8 +1,10 @@ import { BN } from "bn.js"; import { + CompactIdAddressObject, PersonalUserDataDetails, PersonalUserDataDetailsJson } from "../../vdxf/classes"; import { DataDescriptor } from "../../pbaas"; +import { VerifiableSignatureData } from "../../vdxf/classes/VerifiableSignatureData"; describe("PersonalUserDataDetails", () => { @@ -12,20 +14,36 @@ describe("PersonalUserDataDetails", () => { const item = new PersonalUserDataDetails({ version: new BN(PersonalUserDataDetails.DEFAULT_VERSION), flags: PersonalUserDataDetails.HAS_STATEMENTS.or(PersonalUserDataDetails.HAS_SIGNATURE), - signableobjects: [DataDescriptor.fromJson({ label: "123", objectdata : Buffer.from([1,2,3]), flags: DataDescriptor.FLAG_LABEL_PRESENT})], + signableObjects: [DataDescriptor.fromJson({ version: new BN(1), label: "123", objectdata : "0011223344aabbcc", flags: DataDescriptor.FLAG_LABEL_PRESENT})], statements: ["Statement 1", "Statement 2"], - signature: ["key1", "key2"] //TODO + signature: new VerifiableSignatureData({version: new BN(1), + signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), + hashType: new BN(1), + flags: new BN(0), + identityId: new CompactIdAddressObject({version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC"}), + systemId: new CompactIdAddressObject({version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC"}), + }) }); - expect(item.version.toString()).toBe("1"); - expect(item.flags.toNumber()).toBe(PersonalUserDataDetails.HAS_STATEMENTS.toNumber()); - expect(item.signableObjects).toEqual([{ label: "123", objectdata: Buffer.from([1, 2, 3]), flags: DataDescriptor.FLAG_LABEL_PRESENT }]); - expect(item.statements).toEqual(["Statement 1", "Statement 2"]); - expect(item.signature).toEqual(["key1", "key2"]); //TODO + const detailsBuffer = item.toBuffer(); + + const newDetails = new PersonalUserDataDetails(); + newDetails.fromBuffer(detailsBuffer); + + expect(newDetails.toJson()).toEqual(item.toJson()); + + expect(newDetails.version.toString()).toBe(item.version.toString()); + expect(newDetails.flags.toString()).toBe(item.flags.toString()); + expect(newDetails.signableObjects.length).toBe(1); + expect(newDetails.signableObjects[0].toJson().label).toBe("123"); + expect(newDetails.statements?.length).toBe(2); + expect(newDetails.statements?.[0]).toBe("Statement 1"); + expect(newDetails.signature?.signatureAsVch.toString('hex')).toBe("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf"); + }); }); -//TODO when verifiable signature data comes add tests + }); diff --git a/src/vdxf/classes/VerifiableSignatureData.ts b/src/vdxf/classes/VerifiableSignatureData.ts index 1605d944..66a5d608 100644 --- a/src/vdxf/classes/VerifiableSignatureData.ts +++ b/src/vdxf/classes/VerifiableSignatureData.ts @@ -23,6 +23,7 @@ export interface SignatureJsonDataInterface { vdxfkeys?: Array; vdxfkeynames?: Array; boundhashes?: Array; + statements?: Array; signature: string } @@ -292,6 +293,34 @@ export class VerifiableSignatureData implements SerializableEntity { } toJson() { - return {} + + this.setFlags(); + return { + version: this.version.toNumber(), + flags: this.flags.toNumber(), + hashtype: this.hashType.toNumber(), + systemid: this.systemId.toJson(), + identityid: this.identityId.toJson(), + vdxfkeys: this.vdxfKeys, + vdxfkeynames: this.vdxfKeyNames, + boundhashes: this.boundHashes?.map(x => x.toString('hex')), + statements: this.statements?.map(x => x.toString('hex')), + signature: this.signatureAsVch.toString('hex') + }; + } + + static fromJson(json: SignatureJsonDataInterface): VerifiableSignatureData { + const instance = new VerifiableSignatureData(); + instance.version = new BN(json.version); + instance.flags = new BN(json.flags); + instance.hashType = new BN(json.hashtype); + instance.systemId = CompactIdAddressObject.fromJson(json.systemid); + instance.identityId = CompactIdAddressObject.fromJson(json.identityid); + instance.vdxfKeys = json?.vdxfkeys; + instance.vdxfKeyNames = json?.vdxfkeynames; + instance.boundHashes = json.boundhashes?.map(x => Buffer.from(x, 'hex')); + instance.statements = json.statements?.map(x => Buffer.from(x, 'hex')); + instance.signatureAsVch = Buffer.from(json.signature, 'hex'); + return instance; } } \ No newline at end of file diff --git a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts index 49eff041..bbd9ae9e 100644 --- a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts @@ -21,6 +21,7 @@ const { BufferReader, BufferWriter } = bufferutils; import { decodeSaplingAddress, toBech32 } from '../../../utils/sapling'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { CompactIdAddressObject } from '../CompactIdAddressObject'; +import varuint from '../../../utils/varuint'; export interface AppEncryptionRequestDetailsInterface { version?: BigNumber; @@ -127,12 +128,12 @@ export class AppEncryptionRequestDetails implements SerializableEntity { getByteLength(): number { let length = 0; - length += varint.encodingLength(this.flags); + length += varuint.encodingLength(this.flags.toNumber()); // encryptToKey - zaddress encoding (43 bytes for sapling address data) length += 43; // Sapling address decoded data (11 + 32 bytes) - length += varint.encodingLength(this.derivationNumber); + length += varuint.encodingLength(this.derivationNumber.toNumber()); if (this.hasSecondarySeedDerivation()) { length += varint.encodingLength(this.secondaryDerivationNumber); @@ -156,7 +157,7 @@ export class AppEncryptionRequestDetails implements SerializableEntity { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); // Write flags - writer.writeVarInt(this.flags); + writer.writeCompactSize(this.flags.toNumber()); // Write encryptToAddress as decoded sapling address data const saplingData = decodeSaplingAddress(this.encryptToZAddress); @@ -184,7 +185,7 @@ export class AppEncryptionRequestDetails implements SerializableEntity { const reader = new BufferReader(buffer, offset); // Read flags - this.flags = reader.readVarInt(); + this.flags = new BN(reader.readCompactSize()); // Read encryptToAddress as 43-byte sapling data and encode as sapling address const saplingData = reader.readSlice(43); diff --git a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts index aac73499..859fa62a 100644 --- a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts @@ -31,7 +31,7 @@ export interface LoginRequestDetailsInterface { requestId: string; permissions?: Array; callbackUris?: Array; - expiryTime?: number; // UNIX Timestamp + expiryTime?: BigNumber; // UNIX Timestamp } export interface LoginPermissionJson { @@ -68,7 +68,7 @@ export class LoginRequestDetails implements SerializableEntity { requestId: string; permissions?: Array; callbackUris?: Array; - expiryTime?: number; // UNIX Timestamp + expiryTime?: BigNumber; // UNIX Timestamp // Version static DEFAULT_VERSION = new BN(1, 10) @@ -117,7 +117,7 @@ export class LoginRequestDetails implements SerializableEntity { this.setFlags(); // Ensure flags are set correctly for length calculation let length = 0; - length += varint.encodingLength(this.flags); + length += varuint.encodingLength(this.flags.toNumber()); length += 20; // requestId hash length if (this.hasPermissions()) { @@ -139,7 +139,7 @@ export class LoginRequestDetails implements SerializableEntity { } if (this.hasExpiryTime()) { - length += varuint.encodingLength(this.expiryTime); + length += varuint.encodingLength(this.expiryTime.toNumber()); } return length; @@ -149,7 +149,7 @@ export class LoginRequestDetails implements SerializableEntity { const writer = new bufferutils.BufferWriter(Buffer.alloc(this.getByteLength())) - writer.writeVarInt(this.flags); + writer.writeCompactSize(this.flags.toNumber()); writer.writeSlice(fromBase58Check(this.requestId).hash); if (this.hasPermissions()) { @@ -170,7 +170,7 @@ export class LoginRequestDetails implements SerializableEntity { } if (this.hasExpiryTime()) { - writer.writeCompactSize(this.expiryTime); + writer.writeCompactSize(this.expiryTime.toNumber()); } return writer.buffer; @@ -179,7 +179,7 @@ export class LoginRequestDetails implements SerializableEntity { fromBuffer(buffer: Buffer, offset?: number): number { const reader = new bufferutils.BufferReader(buffer, offset); - this.flags = reader.readVarInt(); + this.flags = new BN(reader.readCompactSize()); this.requestId = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); if (this.hasPermissions()) { @@ -209,7 +209,7 @@ export class LoginRequestDetails implements SerializableEntity { } if (this.hasExpiryTime()) { - this.expiryTime = reader.readCompactSize(); + this.expiryTime = new BN(reader.readCompactSize()); } return reader.offset; @@ -225,7 +225,7 @@ export class LoginRequestDetails implements SerializableEntity { permissions: this.permissions ? this.permissions.map(p => ({type: p.type, identity: p.identity.toJson()})) : undefined, callbackUris: this.callbackUris ? this.callbackUris : undefined, - expirytime: this.expiryTime ? this.expiryTime : undefined + expirytime: this.expiryTime ? this.expiryTime.toNumber() : undefined }; return retval; @@ -250,7 +250,7 @@ export class LoginRequestDetails implements SerializableEntity { } if(loginDetails.hasExpiryTime() && data.expirytime) { - loginDetails.expiryTime = data.expirytime; + loginDetails.expiryTime = new BN(data.expirytime); } return loginDetails; @@ -294,7 +294,7 @@ export class LoginRequestDetails implements SerializableEntity { } if (this.hasExpiryTime()) { - if (!this.expiryTime || this.expiryTime === 0) { + if (!this.expiryTime || this.expiryTime.isZero()) { return false; } } diff --git a/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts b/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts index 737fc233..9766d7e8 100644 --- a/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts +++ b/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts @@ -103,7 +103,7 @@ export class PersonalUserDataDetails implements SerializableEntity { } if (this.hasSignature()) { - valid &&= this.signature !== undefined && this.signature.isValid(); + valid &&= this.signature !== undefined; // TODO: && this.signature.isValid(); } return valid; @@ -113,7 +113,7 @@ export class PersonalUserDataDetails implements SerializableEntity { this.setFlags(); let length = 0; - length += varint.encodingLength(this.flags); + length += varuint.encodingLength(this.flags.toNumber()); // Add length for signableObjects array length += varuint.encodingLength(this.signableObjects.length); @@ -143,7 +143,7 @@ export class PersonalUserDataDetails implements SerializableEntity { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.flags); + writer.writeCompactSize(this.flags.toNumber()); // Write signableObjects array writer.writeCompactSize(this.signableObjects.length); @@ -154,6 +154,7 @@ export class PersonalUserDataDetails implements SerializableEntity { // Write statements if present if (this.hasStatements()) { + writer.writeCompactSize(this.statements.length); for (const stmt of this.statements) { writer.writeVarSlice(Buffer.from(stmt, 'utf8')); } @@ -169,7 +170,7 @@ export class PersonalUserDataDetails implements SerializableEntity { fromBuffer(buffer: Buffer, offset?: number): number { const reader = new BufferReader(buffer, offset); - this.flags = reader.readVarInt(); + this.flags = new BN(reader.readCompactSize()); // Read signableObjects array const objectCount = reader.readCompactSize(); diff --git a/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts b/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts index 6ea1cb6e..51a1db7d 100644 --- a/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts +++ b/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts @@ -20,6 +20,7 @@ import { BN } from "bn.js"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import varint from "../../../utils/varint"; import { CompactIdAddressObject, CompactIdAddressObjectJson } from "../CompactIdAddressObject"; +import varuint from "../../../utils/varuint"; export interface ProvisionIdentityDetailsInterface { version?: BigNumber; @@ -82,7 +83,7 @@ export class ProvisionIdentityDetails implements SerializableEntity { this.setFlags(); let length = 0; - length += varint.encodingLength(this.flags); + length += varuint.encodingLength(this.flags.toNumber()); if (this.hasSystemId()) { length += this.systemId.getByteLength(); } @@ -102,7 +103,7 @@ export class ProvisionIdentityDetails implements SerializableEntity { const writer = new bufferutils.BufferWriter(Buffer.alloc(this.getByteLength())) - writer.writeVarInt(this.flags); + writer.writeCompactSize(this.flags.toNumber()); if (this.hasSystemId()) { writer.writeSlice(this.systemId.toBuffer()); @@ -123,7 +124,7 @@ export class ProvisionIdentityDetails implements SerializableEntity { const reader = new bufferutils.BufferReader(buffer, offset); if (buffer.length == 0) throw new Error("Cannot create provision identity from empty buffer"); - this.flags = reader.readVarInt(); + this.flags = new BN(reader.readCompactSize()); if (this.hasSystemId()) { const systemId = new CompactIdAddressObject(); diff --git a/src/vdxf/classes/requestobjects/RequestUserData.ts b/src/vdxf/classes/requestobjects/RequestUserData.ts index b08fb2d7..16f621c3 100644 --- a/src/vdxf/classes/requestobjects/RequestUserData.ts +++ b/src/vdxf/classes/requestobjects/RequestUserData.ts @@ -145,8 +145,8 @@ export class RequestUserData implements SerializableEntity { this.setFlags(); let length = 0; - - length += varint.encodingLength(this.flags); + + length += varuint.encodingLength(this.flags.toNumber()); length += varuint.encodingLength(this.searchDataKey.length); for (const item of this.searchDataKey) { @@ -178,7 +178,7 @@ export class RequestUserData implements SerializableEntity { this.setFlags(); const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.flags); + writer.writeCompactSize(this.flags.toNumber()); writer.writeCompactSize(this.searchDataKey.length); @@ -206,7 +206,7 @@ export class RequestUserData implements SerializableEntity { fromBuffer(buffer: Buffer, offset?: number): number { const reader = new BufferReader(buffer, offset); - this.flags = reader.readVarInt(); + this.flags = new BN(reader.readCompactSize()); const searchDataKeyLength = reader.readCompactSize(); this.searchDataKey = []; From f5f2b6553e194affcba51de657b2a1b3dc883ff3 Mon Sep 17 00:00:00 2001 From: monkins Date: Sun, 26 Oct 2025 13:54:39 +0000 Subject: [PATCH 032/123] Add VerifiableSignature into dist --- dist/vdxf/classes/index.d.ts | 7 +++++++ dist/vdxf/classes/index.js | 10 +++++++++- src/vdxf/classes/index.ts | 6 +++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/dist/vdxf/classes/index.d.ts b/dist/vdxf/classes/index.d.ts index aef658ea..20cf8182 100644 --- a/dist/vdxf/classes/index.d.ts +++ b/dist/vdxf/classes/index.d.ts @@ -30,3 +30,10 @@ export { RedirectUri, Subject, ProvisioningInfo, RequestedPermission, Audience, export { ProvisioningTxid } from './provisioning/ProvisioningResult'; export { Context } from './Context'; export { DataCategory } from './PersonalProfile'; +export * from './requestobjects/RequestUserData'; +export * from './requestobjects/LoginRequestDetails'; +export * from './requestobjects/ProvisionIdentityDetails'; +export * from './requestobjects/AppEncryptionRequestDetails'; +export * from './requestobjects/PersonalUserDataDetails'; +export * from './CompactIdAddressObject'; +export { VerifiableSignatureData, SignatureJsonDataInterface as VerifiableSignatureDataInterface } from './VerifiableSignatureData'; diff --git a/dist/vdxf/classes/index.js b/dist/vdxf/classes/index.js index f84172ee..7b883d97 100644 --- a/dist/vdxf/classes/index.js +++ b/dist/vdxf/classes/index.js @@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.DataCategory = exports.Context = exports.ProvisioningTxid = exports.Attestation = exports.AltAuthFactor = exports.Audience = exports.RequestedPermission = exports.ProvisioningInfo = exports.Subject = exports.RedirectUri = exports.Hash160 = exports.LoginConsentProvisioningResult = exports.LoginConsentProvisioningDecision = exports.LoginConsentProvisioningResponse = exports.LoginConsentProvisioningChallenge = exports.LoginConsentProvisioningRequest = exports.VerusPayInvoice = exports.VerusPayInvoiceDetails = exports.SignedSessionObjectData = exports.SignedSessionObject = exports.LoginConsentResponse = exports.LoginConsentRequest = exports.LoginConsentDecision = exports.LoginConsentChallenge = void 0; +exports.VerifiableSignatureData = exports.DataCategory = exports.Context = exports.ProvisioningTxid = exports.Attestation = exports.AltAuthFactor = exports.Audience = exports.RequestedPermission = exports.ProvisioningInfo = exports.Subject = exports.RedirectUri = exports.Hash160 = exports.LoginConsentProvisioningResult = exports.LoginConsentProvisioningDecision = exports.LoginConsentProvisioningResponse = exports.LoginConsentProvisioningChallenge = exports.LoginConsentProvisioningRequest = exports.VerusPayInvoice = exports.VerusPayInvoiceDetails = exports.SignedSessionObjectData = exports.SignedSessionObject = exports.LoginConsentResponse = exports.LoginConsentRequest = exports.LoginConsentDecision = exports.LoginConsentChallenge = void 0; var Challenge_1 = require("./Challenge"); Object.defineProperty(exports, "LoginConsentChallenge", { enumerable: true, get: function () { return Challenge_1.Challenge; } }); var Decision_1 = require("./Decision"); @@ -62,3 +62,11 @@ var Context_1 = require("./Context"); Object.defineProperty(exports, "Context", { enumerable: true, get: function () { return Context_1.Context; } }); var PersonalProfile_1 = require("./PersonalProfile"); Object.defineProperty(exports, "DataCategory", { enumerable: true, get: function () { return PersonalProfile_1.DataCategory; } }); +__exportStar(require("./requestobjects/RequestUserData"), exports); +__exportStar(require("./requestobjects/LoginRequestDetails"), exports); +__exportStar(require("./requestobjects/ProvisionIdentityDetails"), exports); +__exportStar(require("./requestobjects/AppEncryptionRequestDetails"), exports); +__exportStar(require("./requestobjects/PersonalUserDataDetails"), exports); +__exportStar(require("./CompactIdAddressObject"), exports); +var VerifiableSignatureData_1 = require("./VerifiableSignatureData"); +Object.defineProperty(exports, "VerifiableSignatureData", { enumerable: true, get: function () { return VerifiableSignatureData_1.VerifiableSignatureData; } }); diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index fcadd202..62cc56bc 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -50,4 +50,8 @@ export * from './requestobjects/LoginRequestDetails' export * from './requestobjects/ProvisionIdentityDetails' export * from './requestobjects/AppEncryptionRequestDetails' export * from './requestobjects/PersonalUserDataDetails' -export * from './CompactIdAddressObject' \ No newline at end of file +export * from './CompactIdAddressObject' +export { + VerifiableSignatureData, + SignatureJsonDataInterface as VerifiableSignatureDataInterface +} from './VerifiableSignatureData' \ No newline at end of file From 66519bd88e667fbb65c9b466c68ce98f5b836567 Mon Sep 17 00:00:00 2001 From: monkins Date: Tue, 28 Oct 2025 10:54:26 +0000 Subject: [PATCH 033/123] Updates to Comments #3 --- .../vdxf/appencryptionrequestdetails.test.ts | 6 +-- .../vdxf/compactaddressidobject.test.ts | 6 +-- .../vdxf/provisioningidentitydetails.test.ts | 4 +- src/__tests__/vdxf/requestuserdata.test.ts | 4 +- src/vdxf/classes/CompactIdAddressObject.ts | 39 +++++++++---------- src/vdxf/classes/VerifiableSignatureData.ts | 8 ++-- .../AppEncryptionRequestDetails.ts | 28 +++++++------ .../requestobjects/LoginRequestDetails.ts | 37 ++++++++++-------- .../requestobjects/PersonalUserDataDetails.ts | 27 +++++++------ .../ProvisionIdentityDetails.ts | 33 ++++++++++------ .../classes/requestobjects/RequestUserData.ts | 34 ++++++++-------- 11 files changed, 124 insertions(+), 102 deletions(-) diff --git a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts index 95f68c00..6455f5d8 100644 --- a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts +++ b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts @@ -4,7 +4,7 @@ import { TransferDestination } from "../../pbaas/TransferDestination"; import { BigNumber } from "../../utils/types/BigNumber"; // Helper function to create TransferDestination from address string -function createCompactIdAddressObject(type: number, address: string): CompactIdAddressObject { +function createCompactIdAddressObject(type: BigNumber, address: string): CompactIdAddressObject { const obj = new CompactIdAddressObject(); obj.type = type; obj.address = address; @@ -74,9 +74,9 @@ describe("AppEncryptionRequestDetails serialization tests", () => { expect(deserializedDetails.encryptToZAddress).toBe(originalDetails.encryptToZAddress); expect(deserializedDetails.derivationNumber.toNumber()).toBe(originalDetails.derivationNumber.toNumber()); expect(deserializedDetails.secondaryDerivationNumber?.toNumber()).toBe(originalDetails.secondaryDerivationNumber?.toNumber()); - expect(deserializedDetails.fromAddress?.type).toBe(originalDetails.fromAddress?.type); + expect(deserializedDetails.fromAddress?.type.toNumber()).toBe(originalDetails.fromAddress?.type.toNumber()); expect(deserializedDetails.fromAddress?.address).toBe(originalDetails.fromAddress?.address); - expect(deserializedDetails.toAddress?.type).toBe(originalDetails.toAddress?.type); + expect(deserializedDetails.toAddress?.type.toNumber()).toBe(originalDetails.toAddress?.type.toNumber()); expect(deserializedDetails.toAddress?.address).toBe(originalDetails.toAddress?.address); // Verify that serializing both instances produces the same buffer diff --git a/src/__tests__/vdxf/compactaddressidobject.test.ts b/src/__tests__/vdxf/compactaddressidobject.test.ts index 276d515b..69e8e35b 100644 --- a/src/__tests__/vdxf/compactaddressidobject.test.ts +++ b/src/__tests__/vdxf/compactaddressidobject.test.ts @@ -19,7 +19,7 @@ describe("CompactIdAddressObject", () => { const newDetails = new CompactIdAddressObject(); newDetails.fromBuffer(detailsBuffer); expect(newDetails.version.toString()).toBe("1"); - expect(newDetails.type).toBe(CompactIdAddressObject.IS_IDENTITYID); + expect(newDetails.type.toNumber()).toBe(CompactIdAddressObject.IS_IDENTITYID.toNumber()); expect(newDetails.address).toBe("iB5PRXMHLYcNtM8dfLB6KwfJrHU2mKDYuU"); expect(newDetails.rootSystemName).toBe("VRSC"); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); @@ -38,7 +38,7 @@ describe("CompactIdAddressObject", () => { const newDetails = new CompactIdAddressObject(); newDetails.fromBuffer(detailsBuffer); expect(newDetails.version.toString()).toBe("1"); - expect(newDetails.type).toBe(CompactIdAddressObject.IS_FQN); + expect(newDetails.type.toNumber()).toBe(CompactIdAddressObject.IS_FQN.toNumber()); expect(newDetails.address).toBe("bob.chips@"); expect(newDetails.rootSystemName).toBe("VRSC"); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); @@ -57,7 +57,7 @@ describe("CompactIdAddressObject", () => { const newDetails = new CompactIdAddressObject(); newDetails.fromBuffer(detailsBuffer); expect(newDetails.version.toString()).toBe("1"); - expect(newDetails.type).toBe(CompactIdAddressObject.IS_IDENTITYID); + expect(newDetails.type.toNumber()).toBe(CompactIdAddressObject.IS_IDENTITYID.toNumber()); expect(newDetails.address).toBe("i67xSVGnGC3PVuGk5crPfkVJptiLB4zNjb"); expect(newDetails.rootSystemName).toBe("VRSC"); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); diff --git a/src/__tests__/vdxf/provisioningidentitydetails.test.ts b/src/__tests__/vdxf/provisioningidentitydetails.test.ts index 4ba48f29..8d930143 100644 --- a/src/__tests__/vdxf/provisioningidentitydetails.test.ts +++ b/src/__tests__/vdxf/provisioningidentitydetails.test.ts @@ -8,8 +8,8 @@ describe('Serializes and deserializes ProvisionIdentityDetails', () => { const provisionJson: ProvisionIdentityDetailsJson = { version: 1, flags: ProvisionIdentityDetails.FLAG_HAS_SYSTEMID.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID).toNumber(), - systemid: {version: 1, type: CompactIdAddressObject.IS_IDENTITYID, address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootsystemname: "VRSC"}, - parentid: {version: 1, type: CompactIdAddressObject.IS_IDENTITYID, address: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", rootsystemname: "VRSC"} + systemid: {version: 1, type: CompactIdAddressObject.IS_IDENTITYID.toNumber(), address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootsystemname: "VRSC"}, + parentid: {version: 1, type: CompactIdAddressObject.IS_IDENTITYID.toNumber(), address: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", rootsystemname: "VRSC"} } const e = ProvisionIdentityDetails.fromJson(provisionJson); diff --git a/src/__tests__/vdxf/requestuserdata.test.ts b/src/__tests__/vdxf/requestuserdata.test.ts index 86508451..7fa8aa40 100644 --- a/src/__tests__/vdxf/requestuserdata.test.ts +++ b/src/__tests__/vdxf/requestuserdata.test.ts @@ -8,7 +8,7 @@ describe('Serializes and deserializes RequestUserData', () => { version: 1, flags: RequestUserData.FULL_DATA.or(RequestUserData.ATTESTATION).or(RequestUserData.HAS_SIGNER).toNumber(), searchdatakey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], - signer: { version: 1, type: CompactIdAddressObject.IS_IDENTITYID, address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootsystemname: "VRSC" } + signer: { version: 1, type: CompactIdAddressObject.IS_IDENTITYID.toNumber(), address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootsystemname: "VRSC" } } const e = RequestUserData.fromJson(provisionJson); @@ -24,7 +24,7 @@ describe('Serializes and deserializes RequestUserData', () => { version: 1, flags: RequestUserData.PARTIAL_DATA.or(RequestUserData.ATTESTATION).or(RequestUserData.HAS_SIGNER).toNumber(), searchdatakey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], - signer: { version: 1, type: CompactIdAddressObject.IS_FQN, address: "bob@", rootsystemname: "VRSC" }, + signer: { version: 1, type: CompactIdAddressObject.IS_FQN.toNumber(), address: "bob@", rootsystemname: "VRSC" }, requestedkeys: ["iLB8SG7ErJtTYcG1f4w9RLuMJPpAsjFkiL"] } diff --git a/src/vdxf/classes/CompactIdAddressObject.ts b/src/vdxf/classes/CompactIdAddressObject.ts index 1eedcbf9..144aeac2 100644 --- a/src/vdxf/classes/CompactIdAddressObject.ts +++ b/src/vdxf/classes/CompactIdAddressObject.ts @@ -26,7 +26,7 @@ export interface CompactIdAddressObjectJson { export interface CompactIdAddressObjectInterface { version?: BigNumber; - type?: number; + type: BigNumber; address: string; rootSystemName?: string; } @@ -37,27 +37,28 @@ export class CompactIdAddressObject implements SerializableEntity { static LAST_VERSION = new BN(1); static DEFAULT_VERSION = new BN(1); - static IS_FQN = 1; - static IS_IDENTITYID = 2; + static IS_FQN = new BN(1); + static IS_IDENTITYID = new BN(2); version: BigNumber; - type: number; + type: BigNumber; address: string; rootSystemName: string; constructor(data?: CompactIdAddressObjectInterface) { this.version = data?.version || new BN(CompactIdAddressObject.DEFAULT_VERSION); - this.type = data?.type || 0; + this.type = data?.type || new BN(0); this.address = data?.address || ''; this.rootSystemName = data?.rootSystemName || 'VRSC'; + this.setAddressTransferType(); } isFQN(): boolean { - return (this.type === CompactIdAddressObject.IS_FQN); + return (this.type.eq(CompactIdAddressObject.IS_FQN)); } isIaddress(): boolean { - return (this.type === CompactIdAddressObject.IS_IDENTITYID); + return (this.type.eq(CompactIdAddressObject.IS_IDENTITYID)); } isValid(): boolean { @@ -79,9 +80,6 @@ export class CompactIdAddressObject implements SerializableEntity { } setAddressTransferType(): void { - if (!this.isValid()) { - throw new Error('CompactIdAddressObject: invalid address or flags not set'); - } if (this.isIaddress()) { return; @@ -98,11 +96,11 @@ export class CompactIdAddressObject implements SerializableEntity { } getByteLength(): number { - this.setAddressTransferType(); + let length = 0; - length += varint.encodingLength(this.version); - length += varuint.encodingLength(this.type); + length += varuint.encodingLength(this.version.toNumber()); + length += varuint.encodingLength(this.type.toNumber()); if (this.isIaddress()) { length += 20; // identityuint160 @@ -118,8 +116,8 @@ export class CompactIdAddressObject implements SerializableEntity { toBuffer(): Buffer { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.version); - writer.writeCompactSize(this.type); + writer.writeCompactSize(this.version.toNumber()); + writer.writeCompactSize(this.type.toNumber()); if (this.isIaddress()) { writer.writeSlice(fromBase58Check(this.address).hash); @@ -133,8 +131,8 @@ export class CompactIdAddressObject implements SerializableEntity { fromBuffer(buffer: Buffer, offset?: number): number { const reader = new BufferReader(buffer, offset); - this.version = reader.readVarInt(); - this.type = reader.readCompactSize(); + this.version = new BN(reader.readCompactSize()); + this.type = new BN(reader.readCompactSize()); if (this.isIaddress()) { this.address = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); @@ -145,12 +143,11 @@ export class CompactIdAddressObject implements SerializableEntity { return reader.offset; } - toJson(): any { - this.setAddressTransferType(); + toJson(): CompactIdAddressObjectJson { return { version: this.version.toNumber(), - flags: this.type, + type: this.type.toNumber(), address: this.address, rootsystemname: this.rootSystemName, }; @@ -159,7 +156,7 @@ export class CompactIdAddressObject implements SerializableEntity { static fromJson(json: any): CompactIdAddressObject { const instance = new CompactIdAddressObject(); instance.version = new BN(json.version); - instance.type = json.type; + instance.type = new BN(json.type); instance.address = json.address; instance.rootSystemName = json.rootsystemname; return instance; diff --git a/src/vdxf/classes/VerifiableSignatureData.ts b/src/vdxf/classes/VerifiableSignatureData.ts index 66a5d608..3f4696cf 100644 --- a/src/vdxf/classes/VerifiableSignatureData.ts +++ b/src/vdxf/classes/VerifiableSignatureData.ts @@ -9,7 +9,7 @@ import { EHashTypes } from '../../pbaas/DataDescriptor'; const { BufferReader, BufferWriter } = bufferutils const createHash = require("create-hash"); import { VERUS_DATA_SIGNATURE_PREFIX } from "../../constants/vdxf"; -import { CompactIdAddressObject } from './CompactIdAddressObject'; +import { CompactIdAddressObject, CompactIdAddressObjectJson } from './CompactIdAddressObject'; import { DEFAULT_VERUS_CHAINNAME, HASH_TYPE_SHA256 } from '../../constants/pbaas'; import varint from '../../utils/varint'; import { SignatureData } from '../../pbaas'; @@ -18,8 +18,8 @@ export interface SignatureJsonDataInterface { version: number; flags: number; hashtype: number; - systemid: string; - identityid: string; + systemid: CompactIdAddressObjectJson; + identityid: CompactIdAddressObjectJson; vdxfkeys?: Array; vdxfkeynames?: Array; boundhashes?: Array; @@ -292,7 +292,7 @@ export class VerifiableSignatureData implements SerializableEntity { }) } - toJson() { + toJson(): SignatureJsonDataInterface { this.setFlags(); return { diff --git a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts index bbd9ae9e..7810ebf5 100644 --- a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts @@ -20,7 +20,7 @@ import bufferutils from '../../../utils/bufferutils'; const { BufferReader, BufferWriter } = bufferutils; import { decodeSaplingAddress, toBech32 } from '../../../utils/sapling'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { CompactIdAddressObject } from '../CompactIdAddressObject'; +import { CompactIdAddressObject, CompactIdAddressObjectJson } from '../CompactIdAddressObject'; import varuint from '../../../utils/varuint'; export interface AppEncryptionRequestDetailsInterface { @@ -39,8 +39,8 @@ export interface AppEncryptionRequestDetailsJson { encrypttozaddress: string; derivationnumber: number; secondaryderivationnumber?: number; - fromaddress?: string; - toaddress?: string; + fromaddress?: CompactIdAddressObjectJson; + toaddress?: CompactIdAddressObjectJson; } /** @@ -87,22 +87,30 @@ export class AppEncryptionRequestDetails implements SerializableEntity { this.secondaryDerivationNumber = data?.secondaryDerivationNumber; this.fromAddress = data?.fromAddress; this.toAddress = data?.toAddress; + + this.setFlags(); } setFlags(): void { - this.flags = new BN(0); + this.flags = this.calcFlags(); + } + + calcFlags(): BigNumber { + let flags = new BN(0); if (this.secondaryDerivationNumber != null) { - this.flags = this.flags.or(AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER); + flags = flags.or(AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER); } if (this.fromAddress != null) { - this.flags = this.flags.or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS); + flags = flags.or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS); } if (this.toAddress != null) { - this.flags = this.flags.or(AppEncryptionRequestDetails.HAS_TO_ADDRESS); + flags = flags.or(AppEncryptionRequestDetails.HAS_TO_ADDRESS); } + + return flags; } isValid(): boolean { @@ -151,8 +159,6 @@ export class AppEncryptionRequestDetails implements SerializableEntity { } toBuffer(): Buffer { - // Set flags before serialization - this.setFlags(); const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); @@ -217,11 +223,11 @@ export class AppEncryptionRequestDetails implements SerializableEntity { toJson(): AppEncryptionRequestDetailsJson { // Set flags before serialization - this.setFlags(); + const flags = this.calcFlags(); return { version: this.version.toNumber(), - flags: this.flags.toNumber(), + flags: flags.toNumber(), encrypttozaddress: this.encryptToZAddress, derivationnumber: this.derivationNumber.toNumber(), secondaryderivationnumber: this.secondaryDerivationNumber?.toNumber(), diff --git a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts index 859fa62a..8ea09340 100644 --- a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts @@ -79,7 +79,7 @@ export class LoginRequestDetails implements SerializableEntity { static FLAG_HAS_CALLBACK_URI = new BN(2, 10); static FLAG_HAS_EXPIRY_TIME = new BN(4, 10); - // Permission Types + // Permission Types - What types of Identity can login, e.g. REQUIRED_SYSTEM and "VRSC" means only identities on the Verus chain can login static REQUIRED_ID = 1; static REQUIRED_SYSTEM = 2; static REQUIRED_PARENT = 3; @@ -87,7 +87,6 @@ export class LoginRequestDetails implements SerializableEntity { // Callback URI Types static TYPE_WEBHOOK = 1; static TYPE_REDIRECT = 2; - static TYPE_DEEPLINK = 3; constructor( request?: LoginRequestDetailsInterface @@ -99,6 +98,8 @@ export class LoginRequestDetails implements SerializableEntity { this.permissions = request?.permissions || null; this.callbackUris = request?.callbackUris || null; this.expiryTime = request?.expiryTime || null; + + this.setFlags(); } hasPermissions(): boolean { @@ -113,8 +114,22 @@ export class LoginRequestDetails implements SerializableEntity { return this.flags.and(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME).eq(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME); } + calcFlags(): BigNumber { + let flags = new BN(0, 10); + if (this.permissions) { + flags = flags.or(LoginRequestDetails.FLAG_HAS_PERMISSIONS); + } + if (this.callbackUris) { + flags = flags.or(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); + } + if (this.expiryTime) { + flags = flags.or(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME); + } + return flags; + } + getByteLength(): number { - this.setFlags(); // Ensure flags are set correctly for length calculation + let length = 0; length += varuint.encodingLength(this.flags.toNumber()); @@ -216,11 +231,11 @@ export class LoginRequestDetails implements SerializableEntity { } toJson() { - this.setFlags(); + const flags = this.calcFlags(); const retval = { version: this.version.toNumber(), - flags: this.flags.toNumber(), + flags: flags.toNumber(), requestid: this.requestId, permissions: this.permissions ? this.permissions.map(p => ({type: p.type, identity: p.identity.toJson()})) : undefined, @@ -256,18 +271,8 @@ export class LoginRequestDetails implements SerializableEntity { return loginDetails; } - setFlags() { - this.flags = new BN(0, 10); - if (this.permissions) { - this.flags = this.flags.or(LoginRequestDetails.FLAG_HAS_PERMISSIONS); - } - if (this.callbackUris) { - this.flags = this.flags.or(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); - } - if (this.expiryTime) { - this.flags = this.flags.or(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME); - } + this.flags = this.calcFlags(); } isValid(): boolean { diff --git a/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts b/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts index 9766d7e8..8b858d74 100644 --- a/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts +++ b/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts @@ -68,20 +68,26 @@ export class PersonalUserDataDetails implements SerializableEntity { this.signableObjects = data?.signableObjects || []; this.statements = data?.statements || []; this.signature = data?.signature || undefined; + + this.setFlags(); } - setFlags(): void { - // Initialize flags if not already a BigNumber - if (!BN.isBN(this.flags)) { - this.flags = new BN(0); - } + setFlags(): void { + this.flags = this.calcFlags(); + } + + calcFlags(): BigNumber { + let flags = new BN(0); + if (this.statements && this.statements.length > 0) { - this.flags = this.flags.or(PersonalUserDataDetails.HAS_STATEMENTS); + flags = flags.or(PersonalUserDataDetails.HAS_STATEMENTS); } if (this.signature ) { - this.flags = this.flags.or(PersonalUserDataDetails.HAS_SIGNATURE); + flags = flags.or(PersonalUserDataDetails.HAS_SIGNATURE); } + + return flags; } hasStatements(): boolean { @@ -110,7 +116,7 @@ export class PersonalUserDataDetails implements SerializableEntity { } getByteLength(): number { - this.setFlags(); + let length = 0; length += varuint.encodingLength(this.flags.toNumber()); @@ -139,7 +145,6 @@ export class PersonalUserDataDetails implements SerializableEntity { } toBuffer(): Buffer { - this.setFlags(); const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); @@ -202,11 +207,11 @@ export class PersonalUserDataDetails implements SerializableEntity { } toJson(): PersonalUserDataDetailsJson { - this.setFlags(); + const flags = this.calcFlags(); return { version: this.version.toNumber(), - flags: this.flags.toNumber(), + flags: flags.toNumber(), signableobjects: this.signableObjects.map(obj => obj.toJson()), statements: this.statements, signature: this.signature ? this.signature.toJson() : undefined diff --git a/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts b/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts index 51a1db7d..85f9691a 100644 --- a/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts +++ b/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts @@ -65,6 +65,8 @@ export class ProvisionIdentityDetails implements SerializableEntity { this.systemId = data?.systemId; this.parentId = data?.parentId; this.identityId = data?.identityId; + + this.setFlags(); } hasSystemId(): boolean { @@ -80,7 +82,7 @@ export class ProvisionIdentityDetails implements SerializableEntity { } getByteLength(): number { - this.setFlags(); + let length = 0; length += varuint.encodingLength(this.flags.toNumber()); @@ -148,10 +150,10 @@ export class ProvisionIdentityDetails implements SerializableEntity { } toJson(): ProvisionIdentityDetailsJson { - this.setFlags(); + const flags = this.calcFlags(); return { version: this.version.toNumber(), - flags: this.flags.toNumber(), + flags: flags.toNumber(), systemid: this.systemId ? this.systemId.toJson() : null, parentid: this.parentId ? this.parentId.toJson() : null, identityid: this.identityId ? this.identityId.toJson() : null, @@ -179,21 +181,28 @@ export class ProvisionIdentityDetails implements SerializableEntity { return provision; } - setFlags() { - this.flags = new BN(0, 10); - + calcFlags(): BigNumber { + let flags = new BN(0, 10); + if (this.systemId) { - this.flags = this.flags.or(ProvisionIdentityDetails.FLAG_HAS_SYSTEMID); + flags = flags.or(ProvisionIdentityDetails.FLAG_HAS_SYSTEMID); } - + if (this.parentId) { - this.flags = this.flags.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID); + flags = flags.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID); } - + if (this.identityId) { - this.flags = this.flags.or(ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION); + flags = flags.or(ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION); } - } + + return flags; + } + + setFlags() { + this.flags = this.calcFlags(); + } + isValid(): boolean { diff --git a/src/vdxf/classes/requestobjects/RequestUserData.ts b/src/vdxf/classes/requestobjects/RequestUserData.ts index 16f621c3..c15f0bec 100644 --- a/src/vdxf/classes/requestobjects/RequestUserData.ts +++ b/src/vdxf/classes/requestobjects/RequestUserData.ts @@ -77,21 +77,25 @@ export class RequestUserData implements SerializableEntity { this.signer = data?.signer; this.requestedKeys = data?.requestedKeys; - } + this.setFlags(); - setFlags(): void { - // Initialize flags if not already a BigNumber - if (!BN.isBN(this.flags)) { - this.flags = new BN(0); - } + } + calcFlags(): BigNumber { + let flags = new BN(0); if (this.requestedKeys && this.requestedKeys.length > 0) { - this.flags = this.flags.or(RequestUserData.HAS_REQUESTED_KEYS); + flags = flags.or(RequestUserData.HAS_REQUESTED_KEYS); } - if (this.signer) { - this.flags = this.flags.or(RequestUserData.HAS_SIGNER); + flags = flags.or(RequestUserData.HAS_SIGNER); } + + return flags; + } + + setFlags(): void { + + this.flags = this.calcFlags(); } hasSigner(): boolean { @@ -143,7 +147,6 @@ export class RequestUserData implements SerializableEntity { getByteLength(): number { - this.setFlags(); let length = 0; length += varuint.encodingLength(this.flags.toNumber()); @@ -174,8 +177,6 @@ export class RequestUserData implements SerializableEntity { } toBuffer(): Buffer { - // Set flags before serialization - this.setFlags(); const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); writer.writeCompactSize(this.flags.toNumber()); @@ -198,8 +199,7 @@ export class RequestUserData implements SerializableEntity { for (const key of this.requestedKeys) { writer.writeSlice(fromBase58Check(key).hash); // 20-byte VDXF key } - } - + } return writer.buffer; } @@ -240,12 +240,12 @@ export class RequestUserData implements SerializableEntity { } toJson(): RequestUserDataJson { - // Set flags before serialization - this.setFlags(); + + const flags = this.calcFlags(); return { version: this.version.toNumber(), - flags: this.flags.toNumber(), + flags: flags.toNumber(), searchdatakey: this.searchDataKey, signer: this.signer.toJson(), requestedkeys: this.requestedKeys From 6a9f83bc7660dc5b08e7ef264dbadadb72968e41 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Wed, 29 Oct 2025 16:45:17 +0100 Subject: [PATCH 034/123] Add GenericResponse type with requestHash and requestHashType and add encryptResponseToAddress property to GenericRequest --- dist/constants/pbaas.d.ts | 6 +- dist/constants/pbaas.js | 12 +- dist/pbaas/DataDescriptor.d.ts | 14 +- dist/pbaas/DataDescriptor.js | 15 +- dist/pbaas/SignatureData.d.ts | 3 +- .../vdxf/classes/VerifiableSignatureData.d.ts | 2 +- .../classes/envelope/GenericEnvelope.d.ts | 66 ++++ dist/vdxf/classes/envelope/GenericEnvelope.js | 231 +++++++++++++ dist/vdxf/classes/index.d.ts | 1 + dist/vdxf/classes/index.js | 1 + dist/vdxf/classes/request/GenericRequest.d.ts | 64 +--- dist/vdxf/classes/request/GenericRequest.js | 227 ++----------- .../classes/response/GenericResponse.d.ts | 33 ++ dist/vdxf/classes/response/GenericResponse.js | 83 +++++ src/__tests__/vdxf/genericrequest.test.ts | 10 +- src/__tests__/vdxf/genericresponse.test.ts | 175 ++++++++++ src/constants/pbaas.ts | 14 +- src/pbaas/DataDescriptor.ts | 15 +- src/vdxf/classes/VerifiableSignatureData.ts | 2 +- src/vdxf/classes/envelope/GenericEnvelope.ts | 320 ++++++++++++++++++ src/vdxf/classes/index.ts | 1 + src/vdxf/classes/request/GenericRequest.ts | 305 +++-------------- src/vdxf/classes/response/GenericResponse.ts | 125 +++++++ 23 files changed, 1187 insertions(+), 538 deletions(-) create mode 100644 dist/vdxf/classes/envelope/GenericEnvelope.d.ts create mode 100644 dist/vdxf/classes/envelope/GenericEnvelope.js create mode 100644 dist/vdxf/classes/response/GenericResponse.d.ts create mode 100644 dist/vdxf/classes/response/GenericResponse.js create mode 100644 src/__tests__/vdxf/genericresponse.test.ts create mode 100644 src/vdxf/classes/envelope/GenericEnvelope.ts create mode 100644 src/vdxf/classes/response/GenericResponse.ts diff --git a/dist/constants/pbaas.d.ts b/dist/constants/pbaas.d.ts index 50f2cf94..456ac926 100644 --- a/dist/constants/pbaas.d.ts +++ b/dist/constants/pbaas.d.ts @@ -7,10 +7,12 @@ export declare const DATA_TYPE_HEX: import("bn.js"); export declare const DATA_TYPE_BASE64: import("bn.js"); export declare const DATA_TYPE_DATAHASH: import("bn.js"); export declare const DATA_TYPE_RAWSTRINGDATA: import("bn.js"); -export declare const HASH_TYPE_SHA256: import("bn.js"); -export declare const HASH_TYPE_SHA256D: import("bn.js"); +export declare const HASH_TYPE_INVALID: import("bn.js"); export declare const HASH_TYPE_BLAKE2B: import("bn.js"); +export declare const HASH_TYPE_BLAKE2BMMR2: import("bn.js"); export declare const HASH_TYPE_KECCAK256: import("bn.js"); +export declare const HASH_TYPE_SHA256D: import("bn.js"); +export declare const HASH_TYPE_SHA256: import("bn.js"); export declare const HASH_TYPE_SHA256_NAME = "sha256"; export declare const HASH_TYPE_SHA256D_NAME = "sha256D"; export declare const HASH_TYPE_BLAKE2B_NAME = "blake2b"; diff --git a/dist/constants/pbaas.js b/dist/constants/pbaas.js index 4ffc76d7..89594331 100644 --- a/dist/constants/pbaas.js +++ b/dist/constants/pbaas.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.NULL_I_ADDR = exports.KOMODO_ASSETCHAIN_MAXLEN = exports.DEFAULT_VERUS_CHAINNAME = exports.TESTNET_VERUS_CHAINID = exports.DEFAULT_VERUS_CHAINID = exports.UINT_256_LENGTH = exports.HASH_NAMES = exports.DEFAULT_HASH_TYPE_MMR = exports.DEFAULT_HASH_TYPE = exports.HASH_TYPE_KECCAK256_NAME = exports.HASH_TYPE_BLAKE2B_NAME = exports.HASH_TYPE_SHA256D_NAME = exports.HASH_TYPE_SHA256_NAME = exports.HASH_TYPE_KECCAK256 = exports.HASH_TYPE_BLAKE2B = exports.HASH_TYPE_SHA256D = exports.HASH_TYPE_SHA256 = exports.DATA_TYPE_RAWSTRINGDATA = exports.DATA_TYPE_DATAHASH = exports.DATA_TYPE_BASE64 = exports.DATA_TYPE_HEX = exports.DATA_TYPE_VDXFDATA = exports.DATA_TYPE_MESSAGE = exports.DATA_TYPE_FILENAME = exports.DATA_TYPE_MMRDATA = exports.DATA_TYPE_UNKNOWN = void 0; +exports.NULL_I_ADDR = exports.KOMODO_ASSETCHAIN_MAXLEN = exports.DEFAULT_VERUS_CHAINNAME = exports.TESTNET_VERUS_CHAINID = exports.DEFAULT_VERUS_CHAINID = exports.UINT_256_LENGTH = exports.HASH_NAMES = exports.DEFAULT_HASH_TYPE_MMR = exports.DEFAULT_HASH_TYPE = exports.HASH_TYPE_KECCAK256_NAME = exports.HASH_TYPE_BLAKE2B_NAME = exports.HASH_TYPE_SHA256D_NAME = exports.HASH_TYPE_SHA256_NAME = exports.HASH_TYPE_SHA256 = exports.HASH_TYPE_SHA256D = exports.HASH_TYPE_KECCAK256 = exports.HASH_TYPE_BLAKE2BMMR2 = exports.HASH_TYPE_BLAKE2B = exports.HASH_TYPE_INVALID = exports.DATA_TYPE_RAWSTRINGDATA = exports.DATA_TYPE_DATAHASH = exports.DATA_TYPE_BASE64 = exports.DATA_TYPE_HEX = exports.DATA_TYPE_VDXFDATA = exports.DATA_TYPE_MESSAGE = exports.DATA_TYPE_FILENAME = exports.DATA_TYPE_MMRDATA = exports.DATA_TYPE_UNKNOWN = void 0; const bn_js_1 = require("bn.js"); exports.DATA_TYPE_UNKNOWN = new bn_js_1.BN("0", 10); exports.DATA_TYPE_MMRDATA = new bn_js_1.BN("1", 10); @@ -11,10 +11,12 @@ exports.DATA_TYPE_HEX = new bn_js_1.BN("5", 10); exports.DATA_TYPE_BASE64 = new bn_js_1.BN("6", 10); exports.DATA_TYPE_DATAHASH = new bn_js_1.BN("7", 10); exports.DATA_TYPE_RAWSTRINGDATA = new bn_js_1.BN("8", 10); -exports.HASH_TYPE_SHA256 = new bn_js_1.BN("1", 10); -exports.HASH_TYPE_SHA256D = new bn_js_1.BN("2", 10); -exports.HASH_TYPE_BLAKE2B = new bn_js_1.BN("3", 10); -exports.HASH_TYPE_KECCAK256 = new bn_js_1.BN("4", 10); +exports.HASH_TYPE_INVALID = new bn_js_1.BN(0, 10); +exports.HASH_TYPE_BLAKE2B = new bn_js_1.BN(1, 10); +exports.HASH_TYPE_BLAKE2BMMR2 = new bn_js_1.BN(2, 10); +exports.HASH_TYPE_KECCAK256 = new bn_js_1.BN(3, 10); +exports.HASH_TYPE_SHA256D = new bn_js_1.BN(4, 10); +exports.HASH_TYPE_SHA256 = new bn_js_1.BN(5, 10); exports.HASH_TYPE_SHA256_NAME = "sha256"; exports.HASH_TYPE_SHA256D_NAME = "sha256D"; exports.HASH_TYPE_BLAKE2B_NAME = "blake2b"; diff --git a/dist/pbaas/DataDescriptor.d.ts b/dist/pbaas/DataDescriptor.d.ts index 6f716166..d682dfe4 100644 --- a/dist/pbaas/DataDescriptor.d.ts +++ b/dist/pbaas/DataDescriptor.d.ts @@ -82,11 +82,11 @@ export declare class VDXFDataDescriptor extends BufferDataVdxfObject { SetFlags(): void; } export declare enum EHashTypes { - HASH_INVALID = 0, - HASH_BLAKE2BMMR = 1, - HASH_BLAKE2BMMR2 = 2, - HASH_KECCAK = 3, - HASH_SHA256D = 4, - HASH_SHA256 = 5, - HASH_LASTTYPE = 5 + HASH_INVALID, + HASH_BLAKE2BMMR, + HASH_BLAKE2BMMR2, + HASH_KECCAK, + HASH_SHA256D, + HASH_SHA256, + HASH_LASTTYPE } diff --git a/dist/pbaas/DataDescriptor.js b/dist/pbaas/DataDescriptor.js index 3184dbcf..2bd9f58c 100644 --- a/dist/pbaas/DataDescriptor.js +++ b/dist/pbaas/DataDescriptor.js @@ -9,6 +9,7 @@ const { BufferReader, BufferWriter } = bufferutils_1.default; const _1 = require("."); const index_1 = require("../vdxf/index"); const VDXF_Data = require("../vdxf/vdxfdatakeys"); +const pbaas_1 = require("../constants/pbaas"); class DataDescriptor { constructor(data) { this.flags = new bn_js_1.BN(0); @@ -321,12 +322,12 @@ exports.VDXFDataDescriptor = VDXFDataDescriptor; ; var EHashTypes; (function (EHashTypes) { - EHashTypes[EHashTypes["HASH_INVALID"] = 0] = "HASH_INVALID"; - EHashTypes[EHashTypes["HASH_BLAKE2BMMR"] = 1] = "HASH_BLAKE2BMMR"; - EHashTypes[EHashTypes["HASH_BLAKE2BMMR2"] = 2] = "HASH_BLAKE2BMMR2"; - EHashTypes[EHashTypes["HASH_KECCAK"] = 3] = "HASH_KECCAK"; - EHashTypes[EHashTypes["HASH_SHA256D"] = 4] = "HASH_SHA256D"; - EHashTypes[EHashTypes["HASH_SHA256"] = 5] = "HASH_SHA256"; - EHashTypes[EHashTypes["HASH_LASTTYPE"] = 5] = "HASH_LASTTYPE"; + EHashTypes[EHashTypes["HASH_INVALID"] = pbaas_1.HASH_TYPE_INVALID.toNumber()] = "HASH_INVALID"; + EHashTypes[EHashTypes["HASH_BLAKE2BMMR"] = pbaas_1.HASH_TYPE_BLAKE2B.toNumber()] = "HASH_BLAKE2BMMR"; + EHashTypes[EHashTypes["HASH_BLAKE2BMMR2"] = pbaas_1.HASH_TYPE_BLAKE2BMMR2.toNumber()] = "HASH_BLAKE2BMMR2"; + EHashTypes[EHashTypes["HASH_KECCAK"] = pbaas_1.HASH_TYPE_KECCAK256.toNumber()] = "HASH_KECCAK"; + EHashTypes[EHashTypes["HASH_SHA256D"] = pbaas_1.HASH_TYPE_SHA256D.toNumber()] = "HASH_SHA256D"; + EHashTypes[EHashTypes["HASH_SHA256"] = pbaas_1.HASH_TYPE_SHA256.toNumber()] = "HASH_SHA256"; + EHashTypes[EHashTypes["HASH_LASTTYPE"] = pbaas_1.HASH_TYPE_SHA256.toNumber()] = "HASH_LASTTYPE"; })(EHashTypes || (exports.EHashTypes = EHashTypes = {})); ; diff --git a/dist/pbaas/SignatureData.d.ts b/dist/pbaas/SignatureData.d.ts index efabefa7..3bbd7ece 100644 --- a/dist/pbaas/SignatureData.d.ts +++ b/dist/pbaas/SignatureData.d.ts @@ -1,5 +1,6 @@ import { BigNumber } from '../utils/types/BigNumber'; import { SerializableEntity } from '../utils/types/SerializableEntity'; +import { EHashTypes } from './DataDescriptor'; export interface SignatureJsonDataInterface { version: number; systemid: string; @@ -55,7 +56,7 @@ export declare class SignatureData implements SerializableEntity { * introduces a new hash type. For all other versions, the default hash type * is `EHashTypes.HASH_SHA256`. */ - static getSignatureHashType(input: Buffer): number; + static getSignatureHashType(input: Buffer): number | EHashTypes.HASH_SHA256; getByteLength(): number; toBuffer(): Buffer; fromBuffer(buffer: Buffer, offset?: number): number; diff --git a/dist/vdxf/classes/VerifiableSignatureData.d.ts b/dist/vdxf/classes/VerifiableSignatureData.d.ts index a12dc219..03fdb95c 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.d.ts +++ b/dist/vdxf/classes/VerifiableSignatureData.d.ts @@ -2,7 +2,7 @@ import { BigNumber } from '../../utils/types/BigNumber'; import { SerializableEntity } from '../../utils/types/SerializableEntity'; import { CompactIdAddressObject } from './CompactIdAddressObject'; import { SignatureData } from '../../pbaas'; -export interface SignatureJsonDataInterface { +export interface VerifiableSignatureDataJson { version: number; flags: number; hashtype: number; diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts new file mode 100644 index 00000000..efb06bda --- /dev/null +++ b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts @@ -0,0 +1,66 @@ +import { BigNumber } from "../../../utils/types/BigNumber"; +import { OrdinalVdxfObject, OrdinalVdxfObjectJson } from "../OrdinalVdxfObject"; +import { SerializableEntity } from "../../../utils/types/SerializableEntity"; +import { VerifiableSignatureData, VerifiableSignatureDataJson } from "../VerifiableSignatureData"; +export interface GenericEnvelopeInterface { + version?: BigNumber; + flags?: BigNumber; + signature?: VerifiableSignatureData; + createdAt?: BigNumber; + salt?: Buffer; + details: Array; +} +export type GenericEnvelopeJson = { + version: string; + flags?: string; + signature?: VerifiableSignatureDataJson; + createdat?: string; + salt?: string; + details: Array; +}; +export declare class GenericEnvelope implements SerializableEntity { + version: BigNumber; + flags: BigNumber; + signature?: VerifiableSignatureData; + createdAt?: BigNumber; + salt?: Buffer; + details: Array; + static VERSION_CURRENT: import("bn.js"); + static VERSION_FIRSTVALID: import("bn.js"); + static VERSION_LASTVALID: import("bn.js"); + static BASE_FLAGS: import("bn.js"); + static FLAG_SIGNED: import("bn.js"); + static FLAG_HAS_CREATED_AT: import("bn.js"); + static FLAG_MULTI_DETAILS: import("bn.js"); + static FLAG_IS_TESTNET: import("bn.js"); + static FLAG_HAS_SALT: import("bn.js"); + constructor(envelope?: GenericEnvelopeInterface); + isValidVersion(): boolean; + isSigned(): boolean; + hasMultiDetails(): boolean; + hasCreatedAt(): boolean; + hasSalt(): boolean; + isTestnet(): boolean; + setSigned(): void; + setHasMultiDetails(): void; + setHasCreatedAt(): void; + setHasSalt(): void; + setIsTestnet(): void; + setFlags(): void; + protected getRawDataSha256(): Buffer; + getDetailsHash(signedBlockheight: number): Buffer; + getDetails(index?: number): OrdinalVdxfObject; + protected getDetailsBufferLength(): number; + protected getDetailsBuffer(): Buffer; + private internalGetByteLength; + getByteLength(): number; + protected toBufferOptionalSig(includeSig?: boolean): Buffer; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toString(): string; + toWalletDeeplinkUri(): string; + static fromWalletDeeplinkUri(uri: string): GenericEnvelope; + toQrString(): string; + static fromQrString(qrstring: string): GenericEnvelope; + toJson(): GenericEnvelopeJson; +} diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.js b/dist/vdxf/classes/envelope/GenericEnvelope.js new file mode 100644 index 00000000..8dc09093 --- /dev/null +++ b/dist/vdxf/classes/envelope/GenericEnvelope.js @@ -0,0 +1,231 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GenericEnvelope = void 0; +const __1 = require("../../"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const base64url_1 = require("base64url"); +const bn_js_1 = require("bn.js"); +const OrdinalVdxfObject_1 = require("../OrdinalVdxfObject"); +const varuint_1 = require("../../../utils/varuint"); +const crypto_1 = require("crypto"); +const VerifiableSignatureData_1 = require("../VerifiableSignatureData"); +class GenericEnvelope { + constructor(envelope = { + details: [], + flags: GenericEnvelope.BASE_FLAGS + }) { + this.signature = envelope.signature; + this.details = envelope.details; + this.createdAt = envelope.createdAt; + this.salt = envelope.salt; + if (envelope.flags) + this.flags = envelope.flags; + else + this.flags = GenericEnvelope.BASE_FLAGS; + if (envelope.version) + this.version = envelope.version; + else + this.version = GenericEnvelope.VERSION_CURRENT; + this.setFlags(); + } + isValidVersion() { + return this.version.gte(GenericEnvelope.VERSION_FIRSTVALID) && this.version.lte(GenericEnvelope.VERSION_LASTVALID); + } + isSigned() { + return !!(this.flags.and(GenericEnvelope.FLAG_SIGNED).toNumber()); + } + hasMultiDetails() { + return !!(this.flags.and(GenericEnvelope.FLAG_MULTI_DETAILS).toNumber()); + } + hasCreatedAt() { + return !!(this.flags.and(GenericEnvelope.FLAG_HAS_CREATED_AT).toNumber()); + } + hasSalt() { + return !!(this.flags.and(GenericEnvelope.FLAG_HAS_SALT).toNumber()); + } + isTestnet() { + return !!(this.flags.and(GenericEnvelope.FLAG_IS_TESTNET).toNumber()); + } + setSigned() { + this.flags = this.flags.or(GenericEnvelope.FLAG_SIGNED); + } + setHasMultiDetails() { + this.flags = this.flags.or(GenericEnvelope.FLAG_MULTI_DETAILS); + } + setHasCreatedAt() { + this.flags = this.flags.or(GenericEnvelope.FLAG_HAS_CREATED_AT); + } + setHasSalt() { + this.flags = this.flags.or(GenericEnvelope.FLAG_HAS_SALT); + } + setIsTestnet() { + this.flags = this.flags.or(GenericEnvelope.FLAG_IS_TESTNET); + } + setFlags() { + if (this.createdAt) + this.setHasCreatedAt(); + if (this.details && this.details.length > 1) + this.setHasMultiDetails(); + if (this.signature) + this.setSigned(); + if (this.salt) + this.setHasSalt(); + } + getRawDataSha256() { + return (0, crypto_1.createHash)("sha256").update(this.toBufferOptionalSig(false)).digest(); + } + getDetailsHash(signedBlockheight) { + if (this.isSigned()) { + return this.signature.getIdentityHash(signedBlockheight, this.getRawDataSha256()); + } + else + return this.getRawDataSha256(); + } + getDetails(index = 0) { + return this.details[index]; + } + getDetailsBufferLength() { + let length = 0; + if (this.hasCreatedAt()) { + length += varuint_1.default.encodingLength(this.createdAt.toNumber()); + } + if (this.hasSalt()) { + const saltLen = this.salt.length; + length += varuint_1.default.encodingLength(saltLen); + length += saltLen; + } + if (this.hasMultiDetails()) { + length += varuint_1.default.encodingLength(this.details.length); + for (const detail of this.details) { + length += detail.getByteLength(); + } + } + else { + length += this.getDetails().getByteLength(); + } + return length; + } + getDetailsBuffer() { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getDetailsBufferLength())); + if (this.hasCreatedAt()) { + writer.writeCompactSize(this.createdAt.toNumber()); + } + if (this.hasSalt()) { + writer.writeVarSlice(this.salt); + } + if (this.hasMultiDetails()) { + writer.writeCompactSize(this.details.length); + for (const detail of this.details) { + writer.writeSlice(detail.toBuffer()); + } + } + else { + writer.writeSlice(this.getDetails().toBuffer()); + } + return writer.buffer; + } + internalGetByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.version.toNumber()); + length += varuint_1.default.encodingLength(this.flags.toNumber()); + if (this.isSigned()) { + length += this.signature.getByteLength(); + } + length += this.getDetailsBufferLength(); + return length; + } + getByteLength() { + return this.internalGetByteLength(); + } + toBufferOptionalSig(includeSig = true) { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.internalGetByteLength())); + writer.writeCompactSize(this.version.toNumber()); + writer.writeCompactSize(this.flags.toNumber()); + if (this.isSigned() && includeSig) { + writer.writeSlice(this.signature.toBuffer()); + } + writer.writeSlice(this.getDetailsBuffer()); + return writer.buffer; + } + toBuffer() { + return this.toBufferOptionalSig(true); + } + fromBuffer(buffer, offset) { + if (buffer.length == 0) + throw new Error("Cannot create envelope from empty buffer"); + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + this.version = new bn_js_1.BN(reader.readCompactSize()); + this.flags = new bn_js_1.BN(reader.readCompactSize()); + if (this.isSigned()) { + const _sig = new VerifiableSignatureData_1.VerifiableSignatureData(); + reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); + this.signature = _sig; + } + if (this.hasCreatedAt()) { + this.createdAt = new bn_js_1.BN(reader.readCompactSize()); + } + if (this.hasSalt()) { + this.salt = reader.readVarSlice(); + } + if (this.hasMultiDetails()) { + this.details = []; + const numItems = reader.readCompactSize(); + for (let i = 0; i < numItems; i++) { + const ord = OrdinalVdxfObject_1.OrdinalVdxfObject.createFromBuffer(reader.buffer, reader.offset); + reader.offset = ord.offset; + this.details.push(ord.obj); + } + } + else { + const ord = OrdinalVdxfObject_1.OrdinalVdxfObject.createFromBuffer(reader.buffer, reader.offset); + reader.offset = ord.offset; + this.details = [ord.obj]; + } + return reader.offset; + } + toString() { + return base64url_1.default.encode(this.toBuffer()); + } + toWalletDeeplinkUri() { + return `${__1.WALLET_VDXF_KEY.vdxfid.toLowerCase()}:/${__1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/${this.toString()}`; + } + static fromWalletDeeplinkUri(uri) { + const split = uri.split(`${__1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); + const inv = new GenericEnvelope(); + inv.fromBuffer(base64url_1.default.toBuffer(split[1]), 0); + return inv; + } + toQrString() { + return this.toString(); + } + static fromQrString(qrstring) { + const inv = new GenericEnvelope(); + inv.fromBuffer(base64url_1.default.toBuffer(qrstring), 0); + return inv; + } + toJson() { + const details = []; + if (this.details != null) { + for (const detail of this.details) { + details.push(detail.toJson()); + } + } + return { + signature: undefined, //TODO: Add signature toJson function this.isSigned() ? this.signature.toJson() : undefined, + details: details, + version: this.version.toString(), + flags: this.flags.toString(), + createdat: this.hasCreatedAt() ? this.createdAt.toString() : undefined + }; + } +} +exports.GenericEnvelope = GenericEnvelope; +GenericEnvelope.VERSION_CURRENT = new bn_js_1.BN(1, 10); +GenericEnvelope.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); +GenericEnvelope.VERSION_LASTVALID = new bn_js_1.BN(1, 10); +GenericEnvelope.BASE_FLAGS = new bn_js_1.BN(0, 10); +GenericEnvelope.FLAG_SIGNED = new bn_js_1.BN(1, 10); +GenericEnvelope.FLAG_HAS_CREATED_AT = new bn_js_1.BN(2, 10); +GenericEnvelope.FLAG_MULTI_DETAILS = new bn_js_1.BN(4, 10); +GenericEnvelope.FLAG_IS_TESTNET = new bn_js_1.BN(8, 10); +GenericEnvelope.FLAG_HAS_SALT = new bn_js_1.BN(16, 10); diff --git a/dist/vdxf/classes/index.d.ts b/dist/vdxf/classes/index.d.ts index aef658ea..42c66f2f 100644 --- a/dist/vdxf/classes/index.d.ts +++ b/dist/vdxf/classes/index.d.ts @@ -25,6 +25,7 @@ export * from "./identity/IdentityUpdateRequestDetails"; export * from "./identity/IdentityUpdateResponseDetails"; export * from './ResponseUri'; export * from './request/GenericRequest'; +export * from './response/GenericResponse'; export { Hash160 } from './Hash160'; export { RedirectUri, Subject, ProvisioningInfo, RequestedPermission, Audience, AltAuthFactor, Attestation, } from "./Challenge"; export { ProvisioningTxid } from './provisioning/ProvisioningResult'; diff --git a/dist/vdxf/classes/index.js b/dist/vdxf/classes/index.js index f84172ee..67411600 100644 --- a/dist/vdxf/classes/index.js +++ b/dist/vdxf/classes/index.js @@ -46,6 +46,7 @@ __exportStar(require("./identity/IdentityUpdateRequestDetails"), exports); __exportStar(require("./identity/IdentityUpdateResponseDetails"), exports); __exportStar(require("./ResponseUri"), exports); __exportStar(require("./request/GenericRequest"), exports); +__exportStar(require("./response/GenericResponse"), exports); var Hash160_1 = require("./Hash160"); Object.defineProperty(exports, "Hash160", { enumerable: true, get: function () { return Hash160_1.Hash160; } }); var Challenge_2 = require("./Challenge"); diff --git a/dist/vdxf/classes/request/GenericRequest.d.ts b/dist/vdxf/classes/request/GenericRequest.d.ts index c9c76226..c1216719 100644 --- a/dist/vdxf/classes/request/GenericRequest.d.ts +++ b/dist/vdxf/classes/request/GenericRequest.d.ts @@ -1,31 +1,14 @@ -import { BigNumber } from "../../../utils/types/BigNumber"; -import { SignatureJsonDataInterface } from "../../../pbaas"; -import { OrdinalVdxfObject, OrdinalVdxfObjectJson } from "../OrdinalVdxfObject"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; -import { VerifiableSignatureData } from "../VerifiableSignatureData"; -export interface GenericRequestInterface { - version?: BigNumber; - flags?: BigNumber; - signature?: VerifiableSignatureData; - createdAt?: BigNumber; - salt?: Buffer; - details: Array; -} -export type GenericRequestJson = { - version: string; - flags?: string; - signature?: SignatureJsonDataInterface; - createdat?: string; - salt?: string; - details: Array; +import { GenericEnvelope, GenericEnvelopeInterface, GenericEnvelopeJson } from "../envelope/GenericEnvelope"; +import { SaplingPaymentAddress } from '../../../pbaas/SaplingPaymentAddress'; +export type GenericRequestJson = GenericEnvelopeJson & { + encryptresponsetoaddress?: string; +}; +export type GenericRequestInterface = GenericEnvelopeInterface & { + encryptResponseToAddress?: SaplingPaymentAddress; }; -export declare class GenericRequest implements SerializableEntity { - version: BigNumber; - flags: BigNumber; - signature?: VerifiableSignatureData; - createdAt?: BigNumber; - salt?: Buffer; - details: Array; +export declare class GenericRequest extends GenericEnvelope implements SerializableEntity { + encryptResponseToAddress?: SaplingPaymentAddress; static VERSION_CURRENT: import("bn.js"); static VERSION_FIRSTVALID: import("bn.js"); static VERSION_LASTVALID: import("bn.js"); @@ -35,32 +18,13 @@ export declare class GenericRequest implements SerializableEntity { static FLAG_MULTI_DETAILS: import("bn.js"); static FLAG_IS_TESTNET: import("bn.js"); static FLAG_HAS_SALT: import("bn.js"); - constructor(request?: GenericRequestInterface); - isValidVersion(): boolean; - isSigned(): boolean; - hasMultiDetails(): boolean; - hasCreatedAt(): boolean; - hasSalt(): boolean; - isTestnet(): boolean; - setSigned(): void; - setHasMultiDetails(): void; - setHasCreatedAt(): void; - setHasSalt(): void; - setIsTestnet(): void; + static FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS: import("bn.js"); + constructor(envelope?: GenericRequestInterface); + hasEncryptResponseToAddress(): boolean; + setHasEncryptResponseToAddress(): void; setFlags(): void; - private getRawDataSha256; - getDetailsHash(signedBlockheight: number): Buffer; - getDetails(index?: number): OrdinalVdxfObject; - private getDetailsBufferLength; - private getDetailsBuffer; getByteLength(): number; - private toBufferOptionalSig; - toBuffer(): Buffer; + protected toBufferOptionalSig(includeSig?: boolean): Buffer; fromBuffer(buffer: Buffer, offset?: number): number; - toString(): string; - toWalletDeeplinkUri(): string; - static fromWalletDeeplinkUri(uri: string): GenericRequest; - toQrString(): string; - static fromQrString(qrstring: string): GenericRequest; toJson(): GenericRequestJson; } diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js index 0f0365f2..4424525f 100644 --- a/dist/vdxf/classes/request/GenericRequest.js +++ b/dist/vdxf/classes/request/GenericRequest.js @@ -1,228 +1,73 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GenericRequest = void 0; -const __1 = require("../../"); -const bufferutils_1 = require("../../../utils/bufferutils"); -const base64url_1 = require("base64url"); const bn_js_1 = require("bn.js"); -const OrdinalVdxfObject_1 = require("../OrdinalVdxfObject"); -const varuint_1 = require("../../../utils/varuint"); -const crypto_1 = require("crypto"); -const VerifiableSignatureData_1 = require("../VerifiableSignatureData"); -class GenericRequest { - constructor(request = { +const GenericEnvelope_1 = require("../envelope/GenericEnvelope"); +const SaplingPaymentAddress_1 = require("../../../pbaas/SaplingPaymentAddress"); +const bufferutils_1 = require("../../../utils/bufferutils"); +class GenericRequest extends GenericEnvelope_1.GenericEnvelope { + constructor(envelope = { details: [], flags: GenericRequest.BASE_FLAGS }) { - this.signature = request.signature; - this.details = request.details; - this.createdAt = request.createdAt; - this.salt = request.salt; - if (request.flags) - this.flags = request.flags; - else - this.flags = GenericRequest.BASE_FLAGS; - if (request.version) - this.version = request.version; - else - this.version = GenericRequest.VERSION_CURRENT; + super(envelope); + this.encryptResponseToAddress = envelope.encryptResponseToAddress; this.setFlags(); } - isValidVersion() { - return this.version.gte(GenericRequest.VERSION_FIRSTVALID) && this.version.lte(GenericRequest.VERSION_LASTVALID); - } - isSigned() { - return !!(this.flags.and(GenericRequest.FLAG_SIGNED).toNumber()); - } - hasMultiDetails() { - return !!(this.flags.and(GenericRequest.FLAG_MULTI_DETAILS).toNumber()); - } - hasCreatedAt() { - return !!(this.flags.and(GenericRequest.FLAG_HAS_CREATED_AT).toNumber()); - } - hasSalt() { - return !!(this.flags.and(GenericRequest.FLAG_HAS_SALT).toNumber()); - } - isTestnet() { - return !!(this.flags.and(GenericRequest.FLAG_IS_TESTNET).toNumber()); - } - setSigned() { - this.flags = this.flags.or(GenericRequest.FLAG_SIGNED); - } - setHasMultiDetails() { - this.flags = this.flags.or(GenericRequest.FLAG_MULTI_DETAILS); - } - setHasCreatedAt() { - this.flags = this.flags.or(GenericRequest.FLAG_HAS_CREATED_AT); + hasEncryptResponseToAddress() { + return !!(this.flags.and(GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS).toNumber()); } - setHasSalt() { - this.flags = this.flags.or(GenericRequest.FLAG_HAS_SALT); - } - setIsTestnet() { - this.flags = this.flags.or(GenericRequest.FLAG_IS_TESTNET); + setHasEncryptResponseToAddress() { + this.flags = this.flags.or(GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS); } setFlags() { - if (this.createdAt) - this.setHasCreatedAt(); - if (this.details && this.details.length > 1) - this.setHasMultiDetails(); - if (this.signature) - this.setSigned(); - if (this.salt) - this.setHasSalt(); - } - getRawDataSha256() { - return (0, crypto_1.createHash)("sha256").update(this.toBufferOptionalSig(false)).digest(); - } - getDetailsHash(signedBlockheight) { - if (this.isSigned()) { - return this.signature.getIdentityHash(signedBlockheight, this.getRawDataSha256()); - } - else - return this.getRawDataSha256(); - } - getDetails(index = 0) { - return this.details[index]; - } - getDetailsBufferLength() { - let length = 0; - if (this.hasCreatedAt()) { - length += varuint_1.default.encodingLength(this.createdAt.toNumber()); - } - if (this.hasSalt()) { - const saltLen = this.salt.length; - length += varuint_1.default.encodingLength(saltLen); - length += saltLen; - } - if (this.hasMultiDetails()) { - length += varuint_1.default.encodingLength(this.details.length); - for (const detail of this.details) { - length += detail.getByteLength(); - } - } - else { - length += this.getDetails().getByteLength(); - } - return length; - } - getDetailsBuffer() { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getDetailsBufferLength())); - if (this.hasCreatedAt()) { - writer.writeCompactSize(this.createdAt.toNumber()); - } - if (this.hasSalt()) { - writer.writeVarSlice(this.salt); - } - if (this.hasMultiDetails()) { - writer.writeCompactSize(this.details.length); - for (const detail of this.details) { - writer.writeSlice(detail.toBuffer()); - } - } - else { - writer.writeSlice(this.getDetails().toBuffer()); - } - return writer.buffer; + super.setFlags(); + if (this.encryptResponseToAddress) + this.setHasEncryptResponseToAddress(); } getByteLength() { - let length = 0; - length += varuint_1.default.encodingLength(this.version.toNumber()); - length += varuint_1.default.encodingLength(this.flags.toNumber()); - if (this.isSigned()) { - length += this.signature.getByteLength(); + let length = super.getByteLength(); + if (this.hasEncryptResponseToAddress()) { + length += this.encryptResponseToAddress.getByteLength(); } - length += this.getDetailsBufferLength(); return length; } toBufferOptionalSig(includeSig = true) { const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeCompactSize(this.version.toNumber()); - writer.writeCompactSize(this.flags.toNumber()); - if (this.isSigned() && includeSig) { - writer.writeSlice(this.signature.toBuffer()); + const superBuf = super.toBufferOptionalSig(includeSig); + writer.writeSlice(superBuf); + if (this.hasEncryptResponseToAddress()) { + writer.writeSlice(this.encryptResponseToAddress.toBuffer()); } - writer.writeSlice(this.getDetailsBuffer()); return writer.buffer; } - toBuffer() { - return this.toBufferOptionalSig(true); - } fromBuffer(buffer, offset) { if (buffer.length == 0) throw new Error("Cannot create request from empty buffer"); const reader = new bufferutils_1.default.BufferReader(buffer, offset); - this.version = new bn_js_1.BN(reader.readCompactSize()); - this.flags = new bn_js_1.BN(reader.readCompactSize()); - if (this.isSigned()) { - const _sig = new VerifiableSignatureData_1.VerifiableSignatureData(); - reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); - this.signature = _sig; - } - if (this.hasCreatedAt()) { - this.createdAt = new bn_js_1.BN(reader.readCompactSize()); - } - if (this.hasSalt()) { - this.salt = reader.readVarSlice(); - } - if (this.hasMultiDetails()) { - this.details = []; - const numItems = reader.readCompactSize(); - for (let i = 0; i < numItems; i++) { - const ord = OrdinalVdxfObject_1.OrdinalVdxfObject.createFromBuffer(reader.buffer, reader.offset); - reader.offset = ord.offset; - this.details.push(ord.obj); - } - } - else { - const ord = OrdinalVdxfObject_1.OrdinalVdxfObject.createFromBuffer(reader.buffer, reader.offset); - reader.offset = ord.offset; - this.details = [ord.obj]; + reader.offset = super.fromBuffer(reader.buffer, reader.offset); + if (this.hasEncryptResponseToAddress()) { + this.encryptResponseToAddress = new SaplingPaymentAddress_1.SaplingPaymentAddress(); + reader.offset = this.encryptResponseToAddress.fromBuffer(reader.buffer, reader.offset); } return reader.offset; } - toString() { - return base64url_1.default.encode(this.toBuffer()); - } - toWalletDeeplinkUri() { - return `${__1.WALLET_VDXF_KEY.vdxfid.toLowerCase()}:/${__1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/${this.toString()}`; - } - static fromWalletDeeplinkUri(uri) { - const split = uri.split(`${__1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); - const inv = new GenericRequest(); - inv.fromBuffer(base64url_1.default.toBuffer(split[1]), 0); - return inv; - } - toQrString() { - return this.toString(); - } - static fromQrString(qrstring) { - const inv = new GenericRequest(); - inv.fromBuffer(base64url_1.default.toBuffer(qrstring), 0); - return inv; - } toJson() { - const details = []; - if (this.details != null) { - for (const detail of this.details) { - details.push(detail.toJson()); - } + const parentJson = super.toJson(); + if (this.hasEncryptResponseToAddress()) { + parentJson["encryptresponsetoaddress"] = this.encryptResponseToAddress.toAddressString(); } - return { - signature: undefined, //TODO: Add signature toJson function this.isSigned() ? this.signature.toJson() : undefined, - details: details, - version: this.version.toString(), - flags: this.flags.toString(), - createdat: this.hasCreatedAt() ? this.createdAt.toString() : undefined - }; + return parentJson; } } exports.GenericRequest = GenericRequest; GenericRequest.VERSION_CURRENT = new bn_js_1.BN(1, 10); GenericRequest.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); GenericRequest.VERSION_LASTVALID = new bn_js_1.BN(1, 10); -GenericRequest.BASE_FLAGS = new bn_js_1.BN(0, 10); -GenericRequest.FLAG_SIGNED = new bn_js_1.BN(1, 10); -GenericRequest.FLAG_HAS_CREATED_AT = new bn_js_1.BN(2, 10); -GenericRequest.FLAG_MULTI_DETAILS = new bn_js_1.BN(4, 10); -GenericRequest.FLAG_IS_TESTNET = new bn_js_1.BN(8, 10); -GenericRequest.FLAG_HAS_SALT = new bn_js_1.BN(16, 10); +GenericRequest.BASE_FLAGS = GenericEnvelope_1.GenericEnvelope.BASE_FLAGS; +GenericRequest.FLAG_SIGNED = GenericEnvelope_1.GenericEnvelope.FLAG_SIGNED; +GenericRequest.FLAG_HAS_CREATED_AT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_CREATED_AT; +GenericRequest.FLAG_MULTI_DETAILS = GenericEnvelope_1.GenericEnvelope.FLAG_MULTI_DETAILS; +GenericRequest.FLAG_IS_TESTNET = GenericEnvelope_1.GenericEnvelope.FLAG_IS_TESTNET; +GenericRequest.FLAG_HAS_SALT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_SALT; +GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS = new bn_js_1.BN(32, 10); diff --git a/dist/vdxf/classes/response/GenericResponse.d.ts b/dist/vdxf/classes/response/GenericResponse.d.ts new file mode 100644 index 00000000..73950c88 --- /dev/null +++ b/dist/vdxf/classes/response/GenericResponse.d.ts @@ -0,0 +1,33 @@ +import { SerializableEntity } from "../../../utils/types/SerializableEntity"; +import { GenericEnvelope, GenericEnvelopeInterface, GenericEnvelopeJson } from "../envelope/GenericEnvelope"; +import { BigNumber } from '../../../utils/types/BigNumber'; +export type GenericResponseJson = GenericEnvelopeJson & { + requesthash?: string; + requesthashtype?: number; +}; +export type GenericResponseInterface = GenericEnvelopeInterface & { + requestHash?: Buffer; + requestHashType?: BigNumber; +}; +export declare class GenericResponse extends GenericEnvelope implements SerializableEntity { + requestHash?: Buffer; + requestHashType?: BigNumber; + static VERSION_CURRENT: import("bn.js"); + static VERSION_FIRSTVALID: import("bn.js"); + static VERSION_LASTVALID: import("bn.js"); + static BASE_FLAGS: import("bn.js"); + static FLAG_SIGNED: import("bn.js"); + static FLAG_HAS_CREATED_AT: import("bn.js"); + static FLAG_MULTI_DETAILS: import("bn.js"); + static FLAG_IS_TESTNET: import("bn.js"); + static FLAG_HAS_SALT: import("bn.js"); + static FLAG_HAS_REQUEST_HASH: import("bn.js"); + constructor(envelope?: GenericResponseInterface); + hasRequestHash(): boolean; + setHasRequestHash(): void; + setFlags(): void; + getByteLength(): number; + protected toBufferOptionalSig(includeSig?: boolean): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): GenericResponseJson; +} diff --git a/dist/vdxf/classes/response/GenericResponse.js b/dist/vdxf/classes/response/GenericResponse.js new file mode 100644 index 00000000..05d57843 --- /dev/null +++ b/dist/vdxf/classes/response/GenericResponse.js @@ -0,0 +1,83 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GenericResponse = void 0; +const bn_js_1 = require("bn.js"); +const GenericEnvelope_1 = require("../envelope/GenericEnvelope"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const DataDescriptor_1 = require("../../../pbaas/DataDescriptor"); +const varuint_1 = require("../../../utils/varuint"); +class GenericResponse extends GenericEnvelope_1.GenericEnvelope { + constructor(envelope = { + details: [], + flags: GenericResponse.BASE_FLAGS + }) { + super(envelope); + this.requestHash = envelope.requestHash; + this.setFlags(); + this.requestHashType = envelope.requestHashType; + if (this.requestHashType == null && this.hasRequestHash()) { + this.requestHashType = new bn_js_1.BN(DataDescriptor_1.EHashTypes.HASH_SHA256); + } + } + hasRequestHash() { + return !!(this.flags.and(GenericResponse.FLAG_HAS_REQUEST_HASH).toNumber()); + } + setHasRequestHash() { + this.flags = this.flags.or(GenericResponse.FLAG_HAS_REQUEST_HASH); + } + setFlags() { + super.setFlags(); + if (this.requestHash) + this.setHasRequestHash(); + } + getByteLength() { + let length = super.getByteLength(); + if (this.hasRequestHash()) { + const hashLen = this.requestHash.length; + length += varuint_1.default.encodingLength(this.requestHashType.toNumber()); + length += varuint_1.default.encodingLength(this.requestHash.length); + length += hashLen; + } + return length; + } + toBufferOptionalSig(includeSig = true) { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); + const superBuf = super.toBufferOptionalSig(includeSig); + writer.writeSlice(superBuf); + if (this.hasRequestHash()) { + writer.writeCompactSize(this.requestHashType.toNumber()); + writer.writeVarSlice(this.requestHash); + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + if (buffer.length == 0) + throw new Error("Cannot create response from empty buffer"); + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + reader.offset = super.fromBuffer(reader.buffer, reader.offset); + if (this.hasRequestHash()) { + this.requestHashType = new bn_js_1.BN(reader.readCompactSize()); + this.requestHash = reader.readVarSlice(); + } + return reader.offset; + } + toJson() { + const parentJson = super.toJson(); + if (this.hasRequestHash()) { + parentJson["requesthash"] = this.requestHash.toString('hex'); + parentJson["requesthashtype"] = this.requestHashType.toNumber(); + } + return parentJson; + } +} +exports.GenericResponse = GenericResponse; +GenericResponse.VERSION_CURRENT = new bn_js_1.BN(1, 10); +GenericResponse.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); +GenericResponse.VERSION_LASTVALID = new bn_js_1.BN(1, 10); +GenericResponse.BASE_FLAGS = GenericEnvelope_1.GenericEnvelope.BASE_FLAGS; +GenericResponse.FLAG_SIGNED = GenericEnvelope_1.GenericEnvelope.FLAG_SIGNED; +GenericResponse.FLAG_HAS_CREATED_AT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_CREATED_AT; +GenericResponse.FLAG_MULTI_DETAILS = GenericEnvelope_1.GenericEnvelope.FLAG_MULTI_DETAILS; +GenericResponse.FLAG_IS_TESTNET = GenericEnvelope_1.GenericEnvelope.FLAG_IS_TESTNET; +GenericResponse.FLAG_HAS_SALT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_SALT; +GenericResponse.FLAG_HAS_REQUEST_HASH = new bn_js_1.BN(32, 10); diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts index 88660ac4..9b4e20d2 100644 --- a/src/__tests__/vdxf/genericrequest.test.ts +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -4,7 +4,7 @@ import { GeneralTypeOrdinalVdxfObject } from '../../vdxf/classes/OrdinalVdxfObject'; import { DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256 } from '../../constants/pbaas'; -import { WALLET_VDXF_KEY, GENERIC_REQUEST_DEEPLINK_VDXF_KEY, GenericRequest } from '../../'; +import { WALLET_VDXF_KEY, GENERIC_REQUEST_DEEPLINK_VDXF_KEY, GenericRequest, SaplingPaymentAddress } from '../../'; import { createHash } from 'crypto'; import { VerifiableSignatureData } from '../../vdxf/classes/VerifiableSignatureData'; import { CompactIdAddressObject } from '../../vdxf/classes/CompactIdAddressObject'; @@ -64,7 +64,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); }); - it('round trips with createdAt and signature', () => { + it('round trips with createdAt, signature, and encryptResponseToAddress', () => { const sig = new VerifiableSignatureData({ flags: new BN(0), version: new BN(1), @@ -84,11 +84,13 @@ describe('GenericRequest — buffer / URI / QR operations', () => { }); const createdAt = new BN(9999); + const saplingAddr = "zs1wczplx4kegw32h8g0f7xwl57p5tvnprwdmnzmdnsw50chcl26f7tws92wk2ap03ykaq6jyyztfa" const req = new GenericRequest({ details: [detail], signature: sig, - createdAt + createdAt, + encryptResponseToAddress: SaplingPaymentAddress.fromAddressString(saplingAddr) }); expect(req.isSigned()).toBe(true); @@ -97,6 +99,8 @@ describe('GenericRequest — buffer / URI / QR operations', () => { const round = roundTripBuffer(req); expect(round.signature).toBeDefined(); expect(round.createdAt?.toString()).toEqual(createdAt.toString()); + expect(round.hasEncryptResponseToAddress()).toBe(true) + expect(round.encryptResponseToAddress?.toAddressString()).toBe(saplingAddr) const d2 = round.getDetails(0); expect((d2 as GeneralTypeOrdinalVdxfObject).data).toEqual(detail.data); expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); diff --git a/src/__tests__/vdxf/genericresponse.test.ts b/src/__tests__/vdxf/genericresponse.test.ts new file mode 100644 index 00000000..6d6500fe --- /dev/null +++ b/src/__tests__/vdxf/genericresponse.test.ts @@ -0,0 +1,175 @@ +import { BN } from 'bn.js'; +import base64url from 'base64url'; +import { + GeneralTypeOrdinalVdxfObject +} from '../../vdxf/classes/OrdinalVdxfObject'; +import { DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256 } from '../../constants/pbaas'; +import { WALLET_VDXF_KEY, GENERIC_REQUEST_DEEPLINK_VDXF_KEY, GenericResponse, SaplingPaymentAddress } from '../../'; +import { createHash } from 'crypto'; +import { VerifiableSignatureData } from '../../vdxf/classes/VerifiableSignatureData'; +import { CompactIdAddressObject } from '../../vdxf/classes/CompactIdAddressObject'; + +describe('GenericResponse — buffer / URI / QR operations', () => { + function roundTripBuffer(req: GenericResponse): GenericResponse { + const buf = req.toBuffer(); + const clone = new GenericResponse(); + clone.fromBuffer(buf, 0); + return clone; + } + + function rawDetailsSha256(req: GenericResponse): Buffer { + // replicate the same behavior as getRawDetailsSha256() + const buf = req['toBufferOptionalSig'](false); // call internal method + return createHash("sha256").update(buf).digest(); + } + + it('round trips with a single detail (no signature / createdAt)', () => { + const detail = new GeneralTypeOrdinalVdxfObject({ + data: Buffer.from('cafebabe', 'hex'), + key: DEFAULT_VERUS_CHAINID + }); + const req = new GenericResponse({ details: [detail] }); + + expect(req.hasMultiDetails()).toBe(false); + expect(req.hasCreatedAt()).toBe(false); + expect(req.isSigned()).toBe(false); + + const round = roundTripBuffer(req); + expect(round.version.toString()).toEqual(req.version.toString()); + expect(round.flags.toString()).toEqual(req.flags.toString()); + expect(round.details.length).toBe(1); + const d2 = round.getDetails(0); + expect(d2).toBeInstanceOf(GeneralTypeOrdinalVdxfObject); + expect((d2 as GeneralTypeOrdinalVdxfObject).data).toEqual(detail.data); + expect((d2 as GeneralTypeOrdinalVdxfObject).key).toEqual(detail.key); + expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); + }); + + it('round trips with multiple details', () => { + const d1 = new GeneralTypeOrdinalVdxfObject({ + data: Buffer.from('aa', 'hex'), + key: DEFAULT_VERUS_CHAINID + }); + const d2 = new GeneralTypeOrdinalVdxfObject({ + data: Buffer.from('bb', 'hex'), + key: DEFAULT_VERUS_CHAINID + }); + const req = new GenericResponse({ details: [d1, d2] }); + expect(req.hasMultiDetails()).toBe(true); + + const round = roundTripBuffer(req); + expect(round.details.length).toBe(2); + expect((round.getDetails(0) as GeneralTypeOrdinalVdxfObject).data).toEqual(d1.data); + expect((round.getDetails(1) as GeneralTypeOrdinalVdxfObject).data).toEqual(d2.data); + expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); + }); + + it('round trips with createdAt, signature, and requestHash/requestHashType', () => { + const sig = new VerifiableSignatureData({ + flags: new BN(0), + version: new BN(1), + systemId: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + hashType: HASH_TYPE_SHA256, + identityId: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + signatureAsVch: Buffer.from('abcd', 'hex'), + vdxfKeys: [DEFAULT_VERUS_CHAINID, DEFAULT_VERUS_CHAINID], + vdxfKeyNames: ["VRSC", "VRSC"], + boundHashes: [Buffer.from('abcd', 'hex')], + statements: [Buffer.from('abcd', 'hex')] + }); + + const detail = new GeneralTypeOrdinalVdxfObject({ + data: Buffer.from('abcd', 'hex'), + key: DEFAULT_VERUS_CHAINID + }); + + const createdAt = new BN(9999); + const requestHash = Buffer.from('abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd', 'hex'); + const requestHashType = HASH_TYPE_SHA256; + + const req = new GenericResponse({ + details: [detail], + signature: sig, + createdAt, + requestHash: requestHash, + requestHashType: requestHashType + }); + + expect(req.isSigned()).toBe(true); + expect(req.hasCreatedAt()).toBe(true); + + const round = roundTripBuffer(req); + expect(round.signature).toBeDefined(); + expect(round.createdAt?.toString()).toEqual(createdAt.toString()); + expect(round.hasRequestHash()).toBe(true) + expect(round.requestHash?.toString('hex')).toBe(requestHash.toString('hex')) + expect(round.requestHashType?.toNumber()).toBe(requestHashType.toNumber()) + const d2 = round.getDetails(0); + expect((d2 as GeneralTypeOrdinalVdxfObject).data).toEqual(detail.data); + expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); + }); + + it('toString / fromQrString consistency', () => { + const detail = new GeneralTypeOrdinalVdxfObject({ + data: Buffer.from('feed', 'hex'), + key: DEFAULT_VERUS_CHAINID + }); + const req = new GenericResponse({ details: [detail] }); + + const str = req.toString(); + const buf = base64url.toBuffer(str); + const parsed = new GenericResponse(); + parsed.fromBuffer(buf, 0); + expect(parsed.details[0].toJson()).toEqual(detail.toJson()); + }); + + it('deeplink URI round trip', () => { + const detail = new GeneralTypeOrdinalVdxfObject({ + data: Buffer.from('face', 'hex'), + key: DEFAULT_VERUS_CHAINID + }); + const req = new GenericResponse({ details: [detail] }); + const uri = req.toWalletDeeplinkUri(); + + expect(uri).toContain(WALLET_VDXF_KEY.vdxfid.toLowerCase()); + expect(uri).toContain(`${GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); + + const parsed = GenericResponse.fromWalletDeeplinkUri(uri); + expect(parsed.version.toString()).toEqual(req.version.toString()); + expect(parsed.details[0].toJson()).toEqual(detail.toJson()); + expect(parsed.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); + }); + + it('fromQrString should parse correctly', () => { + const detail = new GeneralTypeOrdinalVdxfObject({ + data: Buffer.from('bead', 'hex'), + key: DEFAULT_VERUS_CHAINID + }); + const req = new GenericResponse({ details: [detail] }); + const qr = req.toQrString(); + const parsed = GenericResponse.fromQrString(qr); + expect(parsed.details[0].toJson()).toEqual(detail.toJson()); + expect(parsed.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); + }); + + it('fromBuffer with empty buffer should throw', () => { + const empty = Buffer.alloc(0); + const req = new GenericResponse(); + expect(() => { + req.fromBuffer(empty, 0); + }).toThrow("Cannot create response from empty buffer"); + }); + + it("returns raw SHA256 when not signed", () => { + const detail = new GeneralTypeOrdinalVdxfObject({ + data: Buffer.from("abcd", "hex"), + key: DEFAULT_VERUS_CHAINID + }); + const req = new GenericResponse({ details: [detail] }); + expect(req.isSigned()).toBe(false); + + const hash = req.getDetailsHash(123456); + const expected = rawDetailsSha256(req); + expect(hash).toEqual(expected); + }); +}); \ No newline at end of file diff --git a/src/constants/pbaas.ts b/src/constants/pbaas.ts index ab77a689..62cc052f 100644 --- a/src/constants/pbaas.ts +++ b/src/constants/pbaas.ts @@ -1,5 +1,4 @@ import { BN } from "bn.js"; -import { toBase58Check } from "../utils/address"; export const DATA_TYPE_UNKNOWN = new BN("0", 10); export const DATA_TYPE_MMRDATA = new BN("1", 10); @@ -11,20 +10,23 @@ export const DATA_TYPE_BASE64 = new BN("6", 10); export const DATA_TYPE_DATAHASH = new BN("7", 10); export const DATA_TYPE_RAWSTRINGDATA = new BN("8", 10); -export const HASH_TYPE_SHA256 = new BN("1", 10); -export const HASH_TYPE_SHA256D = new BN("2", 10); -export const HASH_TYPE_BLAKE2B = new BN("3", 10); -export const HASH_TYPE_KECCAK256 = new BN("4", 10); +export const HASH_TYPE_INVALID = new BN(0, 10); +export const HASH_TYPE_BLAKE2B = new BN(1, 10); +export const HASH_TYPE_BLAKE2BMMR2 = new BN(2, 10); +export const HASH_TYPE_KECCAK256 = new BN(3, 10); +export const HASH_TYPE_SHA256D = new BN(4, 10); +export const HASH_TYPE_SHA256 = new BN(5, 10); + export const HASH_TYPE_SHA256_NAME = "sha256"; export const HASH_TYPE_SHA256D_NAME = "sha256D"; export const HASH_TYPE_BLAKE2B_NAME = "blake2b"; export const HASH_TYPE_KECCAK256_NAME = "keccak256"; + export const DEFAULT_HASH_TYPE = HASH_TYPE_SHA256; export const DEFAULT_HASH_TYPE_MMR = HASH_TYPE_BLAKE2B; export const HASH_NAMES = [HASH_TYPE_SHA256_NAME, HASH_TYPE_SHA256D_NAME, HASH_TYPE_BLAKE2B_NAME, HASH_TYPE_KECCAK256_NAME]; export type AllowedHashes = (typeof HASH_NAMES)[number]; - export const UINT_256_LENGTH = 32; export const DEFAULT_VERUS_CHAINID = "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV"; diff --git a/src/pbaas/DataDescriptor.ts b/src/pbaas/DataDescriptor.ts index 735e1ee0..6273bc01 100644 --- a/src/pbaas/DataDescriptor.ts +++ b/src/pbaas/DataDescriptor.ts @@ -8,6 +8,7 @@ import { VdxfUniValue } from '.'; import { BufferDataVdxfObject } from '../vdxf/index'; import * as VDXF_Data from '../vdxf/vdxfdatakeys'; import { SerializableEntity } from '../utils/types/SerializableEntity'; +import { HASH_TYPE_BLAKE2B, HASH_TYPE_BLAKE2BMMR2, HASH_TYPE_INVALID, HASH_TYPE_KECCAK256, HASH_TYPE_SHA256, HASH_TYPE_SHA256D } from '../constants/pbaas'; export interface DataDescriptorJson { version: number; @@ -427,12 +428,12 @@ export class VDXFDataDescriptor extends BufferDataVdxfObject { }; export enum EHashTypes { - HASH_INVALID = 0, - HASH_BLAKE2BMMR = 1, - HASH_BLAKE2BMMR2 = 2, - HASH_KECCAK = 3, - HASH_SHA256D = 4, - HASH_SHA256 = 5, - HASH_LASTTYPE = 5 + HASH_INVALID = HASH_TYPE_INVALID.toNumber(), + HASH_BLAKE2BMMR = HASH_TYPE_BLAKE2B.toNumber(), + HASH_BLAKE2BMMR2 = HASH_TYPE_BLAKE2BMMR2.toNumber(), + HASH_KECCAK = HASH_TYPE_KECCAK256.toNumber(), + HASH_SHA256D = HASH_TYPE_SHA256D.toNumber(), + HASH_SHA256 = HASH_TYPE_SHA256.toNumber(), + HASH_LASTTYPE = HASH_TYPE_SHA256.toNumber() }; diff --git a/src/vdxf/classes/VerifiableSignatureData.ts b/src/vdxf/classes/VerifiableSignatureData.ts index 0fcbd518..e067e097 100644 --- a/src/vdxf/classes/VerifiableSignatureData.ts +++ b/src/vdxf/classes/VerifiableSignatureData.ts @@ -14,7 +14,7 @@ import { DEFAULT_VERUS_CHAINNAME, HASH_TYPE_SHA256 } from '../../constants/pbaas import varint from '../../utils/varint'; import { SignatureData } from '../../pbaas'; -export interface SignatureJsonDataInterface { +export interface VerifiableSignatureDataJson { version: number; flags: number; hashtype: number; diff --git a/src/vdxf/classes/envelope/GenericEnvelope.ts b/src/vdxf/classes/envelope/GenericEnvelope.ts new file mode 100644 index 00000000..17051fef --- /dev/null +++ b/src/vdxf/classes/envelope/GenericEnvelope.ts @@ -0,0 +1,320 @@ +import { + WALLET_VDXF_KEY, + GENERIC_REQUEST_DEEPLINK_VDXF_KEY +} from "../../"; +import bufferutils from "../../../utils/bufferutils"; +import base64url from "base64url"; +import { BN } from 'bn.js'; +import { BigNumber } from "../../../utils/types/BigNumber"; +import { OrdinalVdxfObject, OrdinalVdxfObjectJson } from "../OrdinalVdxfObject"; +import varuint from "../../../utils/varuint"; +import { SerializableEntity } from "../../../utils/types/SerializableEntity"; +import { createHash } from "crypto"; +import { VerifiableSignatureData, VerifiableSignatureDataJson } from "../VerifiableSignatureData"; + +export interface GenericEnvelopeInterface { + version?: BigNumber; + flags?: BigNumber; + signature?: VerifiableSignatureData; + createdAt?: BigNumber; + salt?: Buffer; + details: Array; +} + +export type GenericEnvelopeJson = { + version: string; + flags?: string; + signature?: VerifiableSignatureDataJson; + createdat?: string; + salt?: string; + details: Array; +} + +export class GenericEnvelope implements SerializableEntity { + version: BigNumber; + flags: BigNumber; + signature?: VerifiableSignatureData; + createdAt?: BigNumber; + salt?: Buffer; // var length buffer + details: Array; + + static VERSION_CURRENT = new BN(1, 10) + static VERSION_FIRSTVALID = new BN(1, 10) + static VERSION_LASTVALID = new BN(1, 10) + + static BASE_FLAGS = new BN(0, 10) + static FLAG_SIGNED = new BN(1, 10) + static FLAG_HAS_CREATED_AT = new BN(2, 10) + static FLAG_MULTI_DETAILS = new BN(4, 10) + static FLAG_IS_TESTNET = new BN(8, 10) + static FLAG_HAS_SALT = new BN(16, 10) + + constructor( + envelope: GenericEnvelopeInterface = { + details: [], + flags: GenericEnvelope.BASE_FLAGS + } + ) { + this.signature = envelope.signature; + this.details = envelope.details; + this.createdAt = envelope.createdAt; + this.salt = envelope.salt; + + if (envelope.flags) this.flags = envelope.flags; + else this.flags = GenericEnvelope.BASE_FLAGS; + + if (envelope.version) this.version = envelope.version; + else this.version = GenericEnvelope.VERSION_CURRENT; + + this.setFlags(); + } + + isValidVersion(): boolean { + return this.version.gte(GenericEnvelope.VERSION_FIRSTVALID) && this.version.lte(GenericEnvelope.VERSION_LASTVALID); + } + + isSigned() { + return !!(this.flags.and(GenericEnvelope.FLAG_SIGNED).toNumber()); + } + + hasMultiDetails() { + return !!(this.flags.and(GenericEnvelope.FLAG_MULTI_DETAILS).toNumber()); + } + + hasCreatedAt() { + return !!(this.flags.and(GenericEnvelope.FLAG_HAS_CREATED_AT).toNumber()); + } + + hasSalt() { + return !!(this.flags.and(GenericEnvelope.FLAG_HAS_SALT).toNumber()); + } + + isTestnet() { + return !!(this.flags.and(GenericEnvelope.FLAG_IS_TESTNET).toNumber()); + } + + setSigned() { + this.flags = this.flags.or(GenericEnvelope.FLAG_SIGNED); + } + + setHasMultiDetails() { + this.flags = this.flags.or(GenericEnvelope.FLAG_MULTI_DETAILS); + } + + setHasCreatedAt() { + this.flags = this.flags.or(GenericEnvelope.FLAG_HAS_CREATED_AT); + } + + setHasSalt() { + this.flags = this.flags.or(GenericEnvelope.FLAG_HAS_SALT); + } + + setIsTestnet() { + this.flags = this.flags.or(GenericEnvelope.FLAG_IS_TESTNET); + } + + setFlags() { + if (this.createdAt) this.setHasCreatedAt(); + if (this.details && this.details.length > 1) this.setHasMultiDetails(); + if (this.signature) this.setSigned(); + if (this.salt) this.setHasSalt(); + } + + protected getRawDataSha256() { + return createHash("sha256").update(this.toBufferOptionalSig(false)).digest(); + } + + getDetailsHash(signedBlockheight: number): Buffer { + if (this.isSigned()) { + return this.signature.getIdentityHash(signedBlockheight, this.getRawDataSha256()); + } else return this.getRawDataSha256() + } + + getDetails(index = 0): OrdinalVdxfObject { + return this.details[index]; + } + + protected getDetailsBufferLength(): number { + let length = 0; + + if (this.hasCreatedAt()) { + length += varuint.encodingLength(this.createdAt.toNumber()); + } + + if (this.hasSalt()) { + const saltLen = this.salt.length; + + length += varuint.encodingLength(saltLen); + length += saltLen; + } + + if (this.hasMultiDetails()) { + length += varuint.encodingLength(this.details.length); + + for (const detail of this.details) { + length += detail.getByteLength(); + } + } else { + length += this.getDetails().getByteLength(); + } + + return length; + } + + protected getDetailsBuffer(): Buffer { + const writer = new bufferutils.BufferWriter( + Buffer.alloc(this.getDetailsBufferLength()) + ); + + if (this.hasCreatedAt()) { + writer.writeCompactSize(this.createdAt.toNumber()); + } + + if (this.hasSalt()) { + writer.writeVarSlice(this.salt); + } + + if (this.hasMultiDetails()) { + writer.writeCompactSize(this.details.length); + + for (const detail of this.details) { + writer.writeSlice(detail.toBuffer()); + } + } else { + writer.writeSlice(this.getDetails().toBuffer()); + } + + return writer.buffer; + } + + private internalGetByteLength(): number { + let length = 0; + + length += varuint.encodingLength(this.version.toNumber()); + length += varuint.encodingLength(this.flags.toNumber()); + + if (this.isSigned()) { + length += this.signature!.getByteLength(); + } + + length += this.getDetailsBufferLength(); + + return length; + } + + getByteLength(): number { + return this.internalGetByteLength(); + } + + protected toBufferOptionalSig(includeSig = true) { + const writer = new bufferutils.BufferWriter( + Buffer.alloc(this.internalGetByteLength()) + ); + + writer.writeCompactSize(this.version.toNumber()); + writer.writeCompactSize(this.flags.toNumber()); + + if (this.isSigned() && includeSig) { + writer.writeSlice(this.signature!.toBuffer()); + } + + writer.writeSlice(this.getDetailsBuffer()); + + return writer.buffer; + } + + toBuffer(): Buffer { + return this.toBufferOptionalSig(true); + } + + fromBuffer(buffer: Buffer, offset?: number): number { + if (buffer.length == 0) throw new Error("Cannot create envelope from empty buffer"); + + const reader = new bufferutils.BufferReader(buffer, offset); + + this.version = new BN(reader.readCompactSize()); + this.flags = new BN(reader.readCompactSize()); + + if (this.isSigned()) { + const _sig = new VerifiableSignatureData(); + reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); + this.signature = _sig; + } + + if (this.hasCreatedAt()) { + this.createdAt = new BN(reader.readCompactSize()); + } + + if (this.hasSalt()) { + this.salt = reader.readVarSlice(); + } + + if (this.hasMultiDetails()) { + this.details = []; + + const numItems = reader.readCompactSize(); + + for (let i = 0; i < numItems; i++) { + const ord = OrdinalVdxfObject.createFromBuffer(reader.buffer, reader.offset); + + reader.offset = ord.offset; + this.details.push(ord.obj); + } + } else { + const ord = OrdinalVdxfObject.createFromBuffer(reader.buffer, reader.offset); + + reader.offset = ord.offset; + this.details = [ord.obj] + } + + return reader.offset; + } + + toString() { + return base64url.encode(this.toBuffer()); + } + + toWalletDeeplinkUri(): string { + return `${WALLET_VDXF_KEY.vdxfid.toLowerCase()}:/${ + GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid + }/${this.toString()}`; + } + + static fromWalletDeeplinkUri(uri: string): GenericEnvelope { + const split = uri.split(`${GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); + + const inv = new GenericEnvelope(); + inv.fromBuffer(base64url.toBuffer(split[1]), 0); + + return inv; + } + + toQrString(): string { + return this.toString(); + } + + static fromQrString(qrstring: string): GenericEnvelope { + const inv = new GenericEnvelope(); + inv.fromBuffer(base64url.toBuffer(qrstring), 0); + + return inv; + } + + toJson(): GenericEnvelopeJson { + const details = []; + + if (this.details != null) { + for (const detail of this.details) { + details.push(detail.toJson()) + } + } + + return { + signature: undefined, //TODO: Add signature toJson function this.isSigned() ? this.signature.toJson() : undefined, + details: details, + version: this.version.toString(), + flags: this.flags.toString(), + createdat: this.hasCreatedAt() ? this.createdAt.toString() : undefined + }; + } +} \ No newline at end of file diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index 611b1437..0707cdf7 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -29,6 +29,7 @@ export * from "./identity/IdentityUpdateRequestDetails"; export * from "./identity/IdentityUpdateResponseDetails"; export * from './ResponseUri'; export * from './request/GenericRequest'; +export * from './response/GenericResponse'; export { Hash160 } from './Hash160' export { diff --git a/src/vdxf/classes/request/GenericRequest.ts b/src/vdxf/classes/request/GenericRequest.ts index 3d3cb21c..2527f6c4 100644 --- a/src/vdxf/classes/request/GenericRequest.ts +++ b/src/vdxf/classes/request/GenericRequest.ts @@ -1,317 +1,108 @@ -import { - WALLET_VDXF_KEY, - GENERIC_REQUEST_DEEPLINK_VDXF_KEY -} from "../../"; -import bufferutils from "../../../utils/bufferutils"; -import base64url from "base64url"; import { BN } from 'bn.js'; -import { BigNumber } from "../../../utils/types/BigNumber"; -import { SignatureJsonDataInterface } from "../../../pbaas"; -import { OrdinalVdxfObject, OrdinalVdxfObjectJson } from "../OrdinalVdxfObject"; -import varuint from "../../../utils/varuint"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; -import { createHash } from "crypto"; -import { VerifiableSignatureData } from "../VerifiableSignatureData"; +import { GenericEnvelope, GenericEnvelopeInterface, GenericEnvelopeJson } from "../envelope/GenericEnvelope"; +import { SaplingPaymentAddress } from '../../../pbaas/SaplingPaymentAddress'; +import bufferutils from '../../../utils/bufferutils'; -export interface GenericRequestInterface { - version?: BigNumber; - flags?: BigNumber; - signature?: VerifiableSignatureData; - createdAt?: BigNumber; - salt?: Buffer; - details: Array; -} +export type GenericRequestJson = GenericEnvelopeJson & { + encryptresponsetoaddress?: string; +}; -export type GenericRequestJson = { - version: string; - flags?: string; - signature?: SignatureJsonDataInterface; - createdat?: string; - salt?: string; - details: Array; +export type GenericRequestInterface = GenericEnvelopeInterface & { + encryptResponseToAddress?: SaplingPaymentAddress; } -export class GenericRequest implements SerializableEntity { - version: BigNumber; - flags: BigNumber; - signature?: VerifiableSignatureData; - createdAt?: BigNumber; - salt?: Buffer; // var length buffer - details: Array; +export class GenericRequest extends GenericEnvelope implements SerializableEntity { + encryptResponseToAddress?: SaplingPaymentAddress; - static VERSION_CURRENT = new BN(1, 10) - static VERSION_FIRSTVALID = new BN(1, 10) - static VERSION_LASTVALID = new BN(1, 10) + static VERSION_CURRENT = new BN(1, 10); + static VERSION_FIRSTVALID = new BN(1, 10); + static VERSION_LASTVALID = new BN(1, 10); - static BASE_FLAGS = new BN(0, 10) - static FLAG_SIGNED = new BN(1, 10) - static FLAG_HAS_CREATED_AT = new BN(2, 10) - static FLAG_MULTI_DETAILS = new BN(4, 10) - static FLAG_IS_TESTNET = new BN(8, 10) - static FLAG_HAS_SALT = new BN(16, 10) + static BASE_FLAGS = GenericEnvelope.BASE_FLAGS; + static FLAG_SIGNED = GenericEnvelope.FLAG_SIGNED; + static FLAG_HAS_CREATED_AT = GenericEnvelope.FLAG_HAS_CREATED_AT; + static FLAG_MULTI_DETAILS = GenericEnvelope.FLAG_MULTI_DETAILS; + static FLAG_IS_TESTNET = GenericEnvelope.FLAG_IS_TESTNET; + static FLAG_HAS_SALT = GenericEnvelope.FLAG_HAS_SALT; + static FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS = new BN(32, 10); constructor( - request: GenericRequestInterface = { + envelope: GenericRequestInterface = { details: [], flags: GenericRequest.BASE_FLAGS } ) { - this.signature = request.signature; - this.details = request.details; - this.createdAt = request.createdAt; - this.salt = request.salt; - - if (request.flags) this.flags = request.flags; - else this.flags = GenericRequest.BASE_FLAGS; + super(envelope) - if (request.version) this.version = request.version; - else this.version = GenericRequest.VERSION_CURRENT; + this.encryptResponseToAddress = envelope.encryptResponseToAddress; this.setFlags(); } - isValidVersion(): boolean { - return this.version.gte(GenericRequest.VERSION_FIRSTVALID) && this.version.lte(GenericRequest.VERSION_LASTVALID); - } - - isSigned() { - return !!(this.flags.and(GenericRequest.FLAG_SIGNED).toNumber()); - } - - hasMultiDetails() { - return !!(this.flags.and(GenericRequest.FLAG_MULTI_DETAILS).toNumber()); - } - - hasCreatedAt() { - return !!(this.flags.and(GenericRequest.FLAG_HAS_CREATED_AT).toNumber()); - } - - hasSalt() { - return !!(this.flags.and(GenericRequest.FLAG_HAS_SALT).toNumber()); - } - - isTestnet() { - return !!(this.flags.and(GenericRequest.FLAG_IS_TESTNET).toNumber()); - } - - setSigned() { - this.flags = this.flags.or(GenericRequest.FLAG_SIGNED); - } - - setHasMultiDetails() { - this.flags = this.flags.or(GenericRequest.FLAG_MULTI_DETAILS); - } - - setHasCreatedAt() { - this.flags = this.flags.or(GenericRequest.FLAG_HAS_CREATED_AT); - } - - setHasSalt() { - this.flags = this.flags.or(GenericRequest.FLAG_HAS_SALT); + hasEncryptResponseToAddress() { + return !!(this.flags.and(GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS).toNumber()); } - setIsTestnet() { - this.flags = this.flags.or(GenericRequest.FLAG_IS_TESTNET); + setHasEncryptResponseToAddress() { + this.flags = this.flags.or(GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS); } setFlags() { - if (this.createdAt) this.setHasCreatedAt(); - if (this.details && this.details.length > 1) this.setHasMultiDetails(); - if (this.signature) this.setSigned(); - if (this.salt) this.setHasSalt(); - } - - private getRawDataSha256() { - return createHash("sha256").update(this.toBufferOptionalSig(false)).digest(); - } - - getDetailsHash(signedBlockheight: number): Buffer { - if (this.isSigned()) { - return this.signature.getIdentityHash(signedBlockheight, this.getRawDataSha256()); - } else return this.getRawDataSha256() - } + super.setFlags(); - getDetails(index = 0): OrdinalVdxfObject { - return this.details[index]; - } - - private getDetailsBufferLength(): number { - let length = 0; - - if (this.hasCreatedAt()) { - length += varuint.encodingLength(this.createdAt.toNumber()); - } - - if (this.hasSalt()) { - const saltLen = this.salt.length; - - length += varuint.encodingLength(saltLen); - length += saltLen; - } - - if (this.hasMultiDetails()) { - length += varuint.encodingLength(this.details.length); - - for (const detail of this.details) { - length += detail.getByteLength(); - } - } else { - length += this.getDetails().getByteLength(); - } - - return length; - } - - private getDetailsBuffer(): Buffer { - const writer = new bufferutils.BufferWriter( - Buffer.alloc(this.getDetailsBufferLength()) - ); - - if (this.hasCreatedAt()) { - writer.writeCompactSize(this.createdAt.toNumber()); - } - - if (this.hasSalt()) { - writer.writeVarSlice(this.salt); - } - - if (this.hasMultiDetails()) { - writer.writeCompactSize(this.details.length); - - for (const detail of this.details) { - writer.writeSlice(detail.toBuffer()); - } - } else { - writer.writeSlice(this.getDetails().toBuffer()); - } - - return writer.buffer; + if (this.encryptResponseToAddress) this.setHasEncryptResponseToAddress(); } getByteLength(): number { - let length = 0; + let length = super.getByteLength(); - length += varuint.encodingLength(this.version.toNumber()); - length += varuint.encodingLength(this.flags.toNumber()); - - if (this.isSigned()) { - length += this.signature!.getByteLength(); + if (this.hasEncryptResponseToAddress()) { + length += this.encryptResponseToAddress.getByteLength(); } - - length += this.getDetailsBufferLength(); return length; } - private toBufferOptionalSig(includeSig = true) { + protected toBufferOptionalSig(includeSig = true) { const writer = new bufferutils.BufferWriter( Buffer.alloc(this.getByteLength()) ); - writer.writeCompactSize(this.version.toNumber()); - writer.writeCompactSize(this.flags.toNumber()); + const superBuf = super.toBufferOptionalSig(includeSig); - if (this.isSigned() && includeSig) { - writer.writeSlice(this.signature!.toBuffer()); - } + writer.writeSlice(superBuf); - writer.writeSlice(this.getDetailsBuffer()); + if (this.hasEncryptResponseToAddress()) { + writer.writeSlice(this.encryptResponseToAddress.toBuffer()); + } return writer.buffer; } - toBuffer(): Buffer { - return this.toBufferOptionalSig(true); - } - fromBuffer(buffer: Buffer, offset?: number): number { if (buffer.length == 0) throw new Error("Cannot create request from empty buffer"); - - const reader = new bufferutils.BufferReader(buffer, offset); - - this.version = new BN(reader.readCompactSize()); - this.flags = new BN(reader.readCompactSize()); - - if (this.isSigned()) { - const _sig = new VerifiableSignatureData(); - reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); - this.signature = _sig; - } - - if (this.hasCreatedAt()) { - this.createdAt = new BN(reader.readCompactSize()); - } - - if (this.hasSalt()) { - this.salt = reader.readVarSlice(); - } - if (this.hasMultiDetails()) { - this.details = []; - - const numItems = reader.readCompactSize(); + const reader = new bufferutils.BufferReader(buffer, offset); - for (let i = 0; i < numItems; i++) { - const ord = OrdinalVdxfObject.createFromBuffer(reader.buffer, reader.offset); + reader.offset = super.fromBuffer(reader.buffer, reader.offset); - reader.offset = ord.offset; - this.details.push(ord.obj); - } - } else { - const ord = OrdinalVdxfObject.createFromBuffer(reader.buffer, reader.offset); + if (this.hasEncryptResponseToAddress()) { + this.encryptResponseToAddress = new SaplingPaymentAddress(); - reader.offset = ord.offset; - this.details = [ord.obj] + reader.offset = this.encryptResponseToAddress.fromBuffer(reader.buffer, reader.offset); } return reader.offset; } - toString() { - return base64url.encode(this.toBuffer()); - } - - toWalletDeeplinkUri(): string { - return `${WALLET_VDXF_KEY.vdxfid.toLowerCase()}:/${ - GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid - }/${this.toString()}`; - } - - static fromWalletDeeplinkUri(uri: string): GenericRequest { - const split = uri.split(`${GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); - - const inv = new GenericRequest(); - inv.fromBuffer(base64url.toBuffer(split[1]), 0); - - return inv; - } - - toQrString(): string { - return this.toString(); - } - - static fromQrString(qrstring: string): GenericRequest { - const inv = new GenericRequest(); - inv.fromBuffer(base64url.toBuffer(qrstring), 0); - - return inv; - } - toJson(): GenericRequestJson { - const details = []; + const parentJson = super.toJson(); - if (this.details != null) { - for (const detail of this.details) { - details.push(detail.toJson()) - } + if (this.hasEncryptResponseToAddress()) { + parentJson["encryptresponsetoaddress"] = this.encryptResponseToAddress.toAddressString(); } - - return { - signature: undefined, //TODO: Add signature toJson function this.isSigned() ? this.signature.toJson() : undefined, - details: details, - version: this.version.toString(), - flags: this.flags.toString(), - createdat: this.hasCreatedAt() ? this.createdAt.toString() : undefined - }; + + return parentJson; } } \ No newline at end of file diff --git a/src/vdxf/classes/response/GenericResponse.ts b/src/vdxf/classes/response/GenericResponse.ts new file mode 100644 index 00000000..87c5ae55 --- /dev/null +++ b/src/vdxf/classes/response/GenericResponse.ts @@ -0,0 +1,125 @@ +import { BN } from 'bn.js'; +import { SerializableEntity } from "../../../utils/types/SerializableEntity"; +import { GenericEnvelope, GenericEnvelopeInterface, GenericEnvelopeJson } from "../envelope/GenericEnvelope"; +import bufferutils from '../../../utils/bufferutils'; +import { BigNumber } from '../../../utils/types/BigNumber'; +import { EHashTypes } from '../../../pbaas/DataDescriptor'; +import varuint from '../../../utils/varuint'; + +export type GenericResponseJson = GenericEnvelopeJson & { + requesthash?: string, + requesthashtype?: number +} + +export type GenericResponseInterface = GenericEnvelopeInterface & { + requestHash?: Buffer, + requestHashType?: BigNumber +} + +export class GenericResponse extends GenericEnvelope implements SerializableEntity { + requestHash?: Buffer; + requestHashType?: BigNumber; + + static VERSION_CURRENT = new BN(1, 10); + static VERSION_FIRSTVALID = new BN(1, 10); + static VERSION_LASTVALID = new BN(1, 10); + + static BASE_FLAGS = GenericEnvelope.BASE_FLAGS; + static FLAG_SIGNED = GenericEnvelope.FLAG_SIGNED; + static FLAG_HAS_CREATED_AT = GenericEnvelope.FLAG_HAS_CREATED_AT; + static FLAG_MULTI_DETAILS = GenericEnvelope.FLAG_MULTI_DETAILS; + static FLAG_IS_TESTNET = GenericEnvelope.FLAG_IS_TESTNET; + static FLAG_HAS_SALT = GenericEnvelope.FLAG_HAS_SALT; + static FLAG_HAS_REQUEST_HASH = new BN(32, 10); + + constructor( + envelope: GenericResponseInterface = { + details: [], + flags: GenericResponse.BASE_FLAGS + } + ) { + super(envelope) + + this.requestHash = envelope.requestHash; + + this.setFlags(); + + this.requestHashType = envelope.requestHashType; + + if (this.requestHashType == null && this.hasRequestHash()) { + this.requestHashType = new BN(EHashTypes.HASH_SHA256) + } + } + + hasRequestHash() { + return !!(this.flags.and(GenericResponse.FLAG_HAS_REQUEST_HASH).toNumber()); + } + + setHasRequestHash() { + this.flags = this.flags.or(GenericResponse.FLAG_HAS_REQUEST_HASH); + } + + setFlags() { + super.setFlags(); + + if (this.requestHash) this.setHasRequestHash(); + } + + getByteLength(): number { + let length = super.getByteLength(); + + if (this.hasRequestHash()) { + const hashLen = this.requestHash.length; + + length += varuint.encodingLength(this.requestHashType.toNumber()); + + length += varuint.encodingLength(this.requestHash.length); + length += hashLen; + } + + return length; + } + + protected toBufferOptionalSig(includeSig = true) { + const writer = new bufferutils.BufferWriter( + Buffer.alloc(this.getByteLength()) + ); + + const superBuf = super.toBufferOptionalSig(includeSig); + + writer.writeSlice(superBuf); + + if (this.hasRequestHash()) { + writer.writeCompactSize(this.requestHashType.toNumber()); + writer.writeVarSlice(this.requestHash); + } + + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset?: number): number { + if (buffer.length == 0) throw new Error("Cannot create response from empty buffer"); + + const reader = new bufferutils.BufferReader(buffer, offset); + + reader.offset = super.fromBuffer(reader.buffer, reader.offset); + + if (this.hasRequestHash()) { + this.requestHashType = new BN(reader.readCompactSize()); + this.requestHash = reader.readVarSlice(); + } + + return reader.offset; + } + + toJson(): GenericResponseJson { + const parentJson = super.toJson(); + + if (this.hasRequestHash()) { + parentJson["requesthash"] = this.requestHash.toString('hex'); + parentJson["requesthashtype"] = this.requestHashType.toNumber(); + } + + return parentJson; + } +} \ No newline at end of file From 85c96fdbf7e56eb7dce84fe4019619da6068465a Mon Sep 17 00:00:00 2001 From: michaeltout Date: Wed, 29 Oct 2025 17:13:55 +0100 Subject: [PATCH 035/123] Move vdxf ordinal definitions into src/constants/ordinals --- dist/constants/ordinals.d.ts | 8 +++++++ dist/constants/ordinals.js | 11 +++++++++ dist/vdxf/classes/OrdinalVdxfObject.d.ts | 5 +--- dist/vdxf/classes/OrdinalVdxfObject.js | 18 ++++++--------- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 7 +++--- src/constants/ordinals.ts | 16 +++++++++++++ src/vdxf/classes/OrdinalVdxfObject.ts | 24 +++++++------------- 7 files changed, 55 insertions(+), 34 deletions(-) create mode 100644 dist/constants/ordinals.d.ts create mode 100644 dist/constants/ordinals.js create mode 100644 src/constants/ordinals.ts diff --git a/dist/constants/ordinals.d.ts b/dist/constants/ordinals.d.ts new file mode 100644 index 00000000..1a070011 --- /dev/null +++ b/dist/constants/ordinals.d.ts @@ -0,0 +1,8 @@ +import { DataDescriptor, DataDescriptorJson } from "../pbaas"; +import { IdentityUpdateDetailsJson, IdentityUpdateRequestDetails, VerusPayInvoiceDetails } from "../vdxf/classes"; +import { VerusPayInvoiceDetailsJson } from "../vdxf/classes/payment/VerusPayInvoiceDetails"; +export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails; +export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateDetailsJson; +export declare const VDXF_ORDINAL_DATA_DESCRIPTOR: import("bn.js"); +export declare const VDXF_ORDINAL_VERUSPAY_INVOICE: import("bn.js"); +export declare const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST: import("bn.js"); diff --git a/dist/constants/ordinals.js b/dist/constants/ordinals.js new file mode 100644 index 00000000..4a963735 --- /dev/null +++ b/dist/constants/ordinals.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = exports.VDXF_ORDINAL_VERUSPAY_INVOICE = exports.VDXF_ORDINAL_DATA_DESCRIPTOR = void 0; +const bn_js_1 = require("bn.js"); +const OrdinalVdxfObjectOrdinalMap_1 = require("../vdxf/classes/OrdinalVdxfObjectOrdinalMap"); +const vdxf_1 = require("../vdxf"); +exports.VDXF_ORDINAL_DATA_DESCRIPTOR = new bn_js_1.BN(0, 10); +exports.VDXF_ORDINAL_VERUSPAY_INVOICE = new bn_js_1.BN(1, 10); +exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new bn_js_1.BN(3, 10); +OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(exports.VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), vdxf_1.DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid); +OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(exports.VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), vdxf_1.VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid); diff --git a/dist/vdxf/classes/OrdinalVdxfObject.d.ts b/dist/vdxf/classes/OrdinalVdxfObject.d.ts index 82e616a8..3763a8fc 100644 --- a/dist/vdxf/classes/OrdinalVdxfObject.d.ts +++ b/dist/vdxf/classes/OrdinalVdxfObject.d.ts @@ -2,6 +2,7 @@ import { BigNumber } from "../../utils/types/BigNumber"; import { SerializableDataEntity, SerializableEntity } from "../../utils/types/SerializableEntity"; import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "./payment/VerusPayInvoiceDetails"; +import { OrdinalVdxfObjectReservedData, OrdinalVdxfObjectReservedDataJson } from "../../constants/ordinals"; export interface OrdinalVdxfObjectInterfaceTemplate { version?: BigNumber; type?: BigNumber; @@ -14,8 +15,6 @@ export type OrdinalVdxfObjectJsonTemplate = { vdxfkey?: string; data?: T; }; -export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails; -export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson; export type BufferOrOrdinalVdxfObjectReservedData = Buffer | OrdinalVdxfObjectReservedData; export type StringOrOrdinalVdxfObjectReservedDataJson = string | OrdinalVdxfObjectReservedDataJson; export type OrdinalVdxfObjectInterface = OrdinalVdxfObjectInterfaceTemplate; @@ -32,8 +31,6 @@ export declare class OrdinalVdxfObject implements SerializableEntity { static VERSION_FIRST: import("bn.js"); static VERSION_LAST: import("bn.js"); static VERSION_CURRENT: import("bn.js"); - static ORDINAL_DATA_DESCRIPTOR: import("bn.js"); - static ORDINAL_VERUSPAY_INVOICE: import("bn.js"); static VDXF_OBJECT_RESERVED_BYTE_I_ADDR: import("bn.js"); static VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING: import("bn.js"); static VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY: import("bn.js"); diff --git a/dist/vdxf/classes/OrdinalVdxfObject.js b/dist/vdxf/classes/OrdinalVdxfObject.js index 3d113edd..d71c86f1 100644 --- a/dist/vdxf/classes/OrdinalVdxfObject.js +++ b/dist/vdxf/classes/OrdinalVdxfObject.js @@ -10,12 +10,12 @@ const vdxf_1 = require("../../constants/vdxf"); const pbaas_1 = require("../../pbaas"); const VerusPayInvoiceDetails_1 = require("./payment/VerusPayInvoiceDetails"); const OrdinalVdxfObjectOrdinalMap_1 = require("./OrdinalVdxfObjectOrdinalMap"); -const keys_1 = require("../keys"); const pbaas_2 = require("../../constants/pbaas"); +const ordinals_1 = require("../../constants/ordinals"); const getOrdinalVdxfObjectClassForType = (type) => { - if (type.eq(OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR)) + if (type.eq(ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR)) return DataDescriptorOrdinalVdxfObject; - else if (type.eq(OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE)) + else if (type.eq(ordinals_1.VDXF_ORDINAL_VERUSPAY_INVOICE)) return VerusPayInvoiceOrdinalVdxfObject; else if (type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR) || type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING) || @@ -27,7 +27,7 @@ const getOrdinalVdxfObjectClassForType = (type) => { exports.getOrdinalVdxfObjectClassForType = getOrdinalVdxfObjectClassForType; class OrdinalVdxfObject { constructor(request = { - type: OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR + type: ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR }) { if (request.key) { this.type = OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR; @@ -39,7 +39,7 @@ class OrdinalVdxfObject { this.data = Buffer.alloc(0); } else if (request.type == null) { - this.type = OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR; + this.type = ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR; } else { this.type = request.type; @@ -171,13 +171,9 @@ OrdinalVdxfObject.VERSION_INVALID = new bn_js_1.BN(0, 10); OrdinalVdxfObject.VERSION_FIRST = new bn_js_1.BN(1, 10); OrdinalVdxfObject.VERSION_LAST = new bn_js_1.BN(1, 10); OrdinalVdxfObject.VERSION_CURRENT = new bn_js_1.BN(1, 10); -OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR = new bn_js_1.BN(0, 10); -OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE = new bn_js_1.BN(1, 10); OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = new bn_js_1.BN(102, 10); OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new bn_js_1.BN(103, 10); OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = new bn_js_1.BN(104, 10); -OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR.toNumber(), keys_1.DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid); -OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE.toNumber(), keys_1.VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid); class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject { constructor(request = { type: OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR, @@ -234,7 +230,7 @@ class DataDescriptorOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObjec data: new pbaas_1.DataDescriptor() }) { super({ - type: OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR, + type: ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR, data: request.data }, pbaas_1.DataDescriptor); } @@ -250,7 +246,7 @@ class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObje data: new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails() }) { super({ - type: OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE, + type: ordinals_1.VDXF_ORDINAL_VERUSPAY_INVOICE, data: request.data }, VerusPayInvoiceDetails_1.VerusPayInvoiceDetails); } diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 87ffd80b..54bfae1c 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -11,6 +11,7 @@ import { DataDescriptor, DEST_PKH, TransferDestination } from '../../pbaas'; import { VerusPayInvoiceDetails } from '../../vdxf/classes'; import { DEFAULT_VERUS_CHAINID } from '../../constants/pbaas'; import { fromBase58Check } from '../../utils/address'; +import { VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_VERUSPAY_INVOICE } from '../../constants/ordinals'; describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { function roundTripBuffer(obj: T): T { @@ -141,9 +142,9 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { }); it('getOrdinalVdxfObjectClassForType should map to correct classes', () => { - expect(getOrdinalVdxfObjectClassForType(OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR)) + expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_DATA_DESCRIPTOR)) .toBe(DataDescriptorOrdinalVdxfObject); - expect(getOrdinalVdxfObjectClassForType(OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE)) + expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_VERUSPAY_INVOICE)) .toBe(VerusPayInvoiceOrdinalVdxfObject); expect(getOrdinalVdxfObjectClassForType(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR)) .toBe(GeneralTypeOrdinalVdxfObject); @@ -154,7 +155,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { it('base OrdinalVdxfObject buffer round trip (no key path)', () => { // This tests the fallback when no key is provided - const base = new OrdinalVdxfObject({ type: OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR }); + const base = new OrdinalVdxfObject({ type: VDXF_ORDINAL_DATA_DESCRIPTOR }); const buf = base.toBuffer(); const parsed = new OrdinalVdxfObject(); parsed.fromBuffer(buf); diff --git a/src/constants/ordinals.ts b/src/constants/ordinals.ts new file mode 100644 index 00000000..e5f95b6b --- /dev/null +++ b/src/constants/ordinals.ts @@ -0,0 +1,16 @@ +import { BN } from "bn.js"; +import { DataDescriptor, DataDescriptorJson } from "../pbaas"; +import { IdentityUpdateDetailsJson, IdentityUpdateRequestDetails, VerusPayInvoiceDetails } from "../vdxf/classes"; +import { VerusPayInvoiceDetailsJson } from "../vdxf/classes/payment/VerusPayInvoiceDetails"; +import { OrdinalVdxfObjectOrdinalMap } from "../vdxf/classes/OrdinalVdxfObjectOrdinalMap"; +import { DATA_TYPE_OBJECT_DATADESCRIPTOR, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../vdxf"; + +export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails; +export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateDetailsJson; + +export const VDXF_ORDINAL_DATA_DESCRIPTOR = new BN(0, 10); +export const VDXF_ORDINAL_VERUSPAY_INVOICE = new BN(1, 10); +export const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new BN(3, 10); + +OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid); +OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid); \ No newline at end of file diff --git a/src/vdxf/classes/OrdinalVdxfObject.ts b/src/vdxf/classes/OrdinalVdxfObject.ts index 88d12789..d7136fd7 100644 --- a/src/vdxf/classes/OrdinalVdxfObject.ts +++ b/src/vdxf/classes/OrdinalVdxfObject.ts @@ -9,8 +9,8 @@ import { HASH160_BYTE_LENGTH, I_ADDR_VERSION, NULL_ADDRESS } from "../../constan import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "./payment/VerusPayInvoiceDetails"; import { OrdinalVdxfObjectOrdinalMap } from "./OrdinalVdxfObjectOrdinalMap"; -import { DATA_TYPE_OBJECT_DATADESCRIPTOR, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../keys"; -import { DEFAULT_VERUS_CHAINID, DEFAULT_VERUS_CHAINNAME } from "../../constants/pbaas"; +import { DEFAULT_VERUS_CHAINNAME } from "../../constants/pbaas"; +import { VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_VERUSPAY_INVOICE, OrdinalVdxfObjectReservedData, OrdinalVdxfObjectReservedDataJson } from "../../constants/ordinals"; export interface OrdinalVdxfObjectInterfaceTemplate { version?: BigNumber; @@ -26,8 +26,6 @@ export type OrdinalVdxfObjectJsonTemplate = { data?: T; } -export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails; -export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson; export type BufferOrOrdinalVdxfObjectReservedData = Buffer | OrdinalVdxfObjectReservedData; export type StringOrOrdinalVdxfObjectReservedDataJson = string | OrdinalVdxfObjectReservedDataJson; @@ -38,8 +36,8 @@ export type OrdinalVdxfObjectDataClass = new (...args: any[]) => OrdinalVdxfObje export type OrdinalVdxfObjectClass = new (...args: any[]) => OrdinalVdxfObject; export const getOrdinalVdxfObjectClassForType = (type: BigNumber): OrdinalVdxfObjectClass => { - if (type.eq(OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR)) return DataDescriptorOrdinalVdxfObject; - else if (type.eq(OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE)) return VerusPayInvoiceOrdinalVdxfObject; + if (type.eq(VDXF_ORDINAL_DATA_DESCRIPTOR)) return DataDescriptorOrdinalVdxfObject; + else if (type.eq(VDXF_ORDINAL_VERUSPAY_INVOICE)) return VerusPayInvoiceOrdinalVdxfObject; else if ( type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR) || type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING) || @@ -59,16 +57,13 @@ export class OrdinalVdxfObject implements SerializableEntity { static VERSION_LAST = new BN(1, 10) static VERSION_CURRENT = new BN(1, 10) - static ORDINAL_DATA_DESCRIPTOR = new BN(0, 10); - static ORDINAL_VERUSPAY_INVOICE = new BN(1, 10); - static VDXF_OBJECT_RESERVED_BYTE_I_ADDR = new BN(102, 10); static VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new BN(103, 10); static VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = new BN(104, 10); constructor( request: OrdinalVdxfObjectInterfaceTemplate = { - type: OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR + type: VDXF_ORDINAL_DATA_DESCRIPTOR } ) { if (request.key) { @@ -79,7 +74,7 @@ export class OrdinalVdxfObject implements SerializableEntity { this.data = request.data; } else this.data = Buffer.alloc(0); } else if (request.type == null) { - this.type = OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR; + this.type = VDXF_ORDINAL_DATA_DESCRIPTOR; } else { this.type = request.type; } @@ -242,9 +237,6 @@ export class OrdinalVdxfObject implements SerializableEntity { } } -OrdinalVdxfObjectOrdinalMap.registerOrdinal(OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR.toNumber(), DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid); -OrdinalVdxfObjectOrdinalMap.registerOrdinal(OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE.toNumber(), VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid); - export class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { data: Buffer; key: string; @@ -325,7 +317,7 @@ export class DataDescriptorOrdinalVdxfObject extends SerializableEntityOrdinalVd ) { super( { - type: OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR, + type: VDXF_ORDINAL_DATA_DESCRIPTOR, data: request.data }, DataDescriptor @@ -349,7 +341,7 @@ export class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalV ) { super( { - type: OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE, + type: VDXF_ORDINAL_VERUSPAY_INVOICE, data: request.data }, VerusPayInvoiceDetails From e2b6abfda3e1538f35fd691435d9c8c53d533781 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Thu, 30 Oct 2025 17:28:20 +0100 Subject: [PATCH 036/123] Restructure exports for OrdinalVdxfObject and associated types, change ResponseUri to use varuint for type --- dist/constants/ordinals.d.ts | 8 - dist/constants/ordinals.js | 11 - dist/constants/ordinals/helpers.d.ts | 9 + dist/constants/ordinals/helpers.js | 33 +++ dist/constants/ordinals/ordinals.d.ts | 7 + dist/constants/ordinals/ordinals.js | 11 + dist/constants/ordinals/register.d.ts | 1 + dist/constants/ordinals/register.js | 17 ++ dist/constants/ordinals/types.d.ts | 5 + dist/constants/ordinals/types.js | 2 + dist/index.d.ts | 3 + dist/index.js | 3 + dist/vdxf/classes/OrdinalVdxfObject.d.ts | 3 +- dist/vdxf/classes/OrdinalVdxfObject.js | 21 +- .../classes/OrdinalVdxfObjectOrdinalMap.d.ts | 6 +- .../classes/OrdinalVdxfObjectOrdinalMap.js | 20 +- dist/vdxf/classes/ResponseUri.js | 7 +- .../classes/envelope/GenericEnvelope.d.ts | 2 +- dist/vdxf/classes/envelope/GenericEnvelope.js | 2 +- ...dentityUpdateRequestOrdinalVdxfObject.d.ts | 8 + .../IdentityUpdateRequestOrdinalVdxfObject.js | 22 ++ ...entityUpdateResponseOrdinalVdxfObject.d.ts | 8 + ...IdentityUpdateResponseOrdinalVdxfObject.js | 22 ++ dist/vdxf/classes/index.d.ts | 1 + dist/vdxf/classes/index.js | 1 + .../DataDescriptorOrdinalVdxfObject.d.ts | 9 + .../DataDescriptorOrdinalVdxfObject.js | 22 ++ .../GeneralTypeOrdinalVdxfObject.d.ts | 1 + .../ordinals/GeneralTypeOrdinalVdxfObject.js | 2 + ...dentityUpdateRequestOrdinalVdxfObject.d.ts | 9 + .../IdentityUpdateRequestOrdinalVdxfObject.js | 22 ++ ...entityUpdateResponseOrdinalVdxfObject.d.ts | 9 + ...IdentityUpdateResponseOrdinalVdxfObject.js | 22 ++ .../classes/ordinals/OrdinalVdxfObject.d.ts | 58 ++++ .../classes/ordinals/OrdinalVdxfObject.js | 205 +++++++++++++ .../ordinals/OrdinalVdxfObjectOrdinalMap.d.ts | 17 ++ .../ordinals/OrdinalVdxfObjectOrdinalMap.js | 44 +++ .../SerializableEntityOrdinalVdxfObject.d.ts | 11 + .../SerializableEntityOrdinalVdxfObject.js | 26 ++ .../VerusPayInvoiceOrdinalVdxfObject.d.ts | 9 + .../VerusPayInvoiceOrdinalVdxfObject.js | 22 ++ dist/vdxf/classes/ordinals/index.d.ts | 7 + dist/vdxf/classes/ordinals/index.js | 25 ++ dist/vdxf/keys.d.ts | 2 + dist/vdxf/keys.js | 22 +- src/__tests__/constants/fixtures.ts | 126 +++++++- src/__tests__/vdxf/genericrequest.test.ts | 4 +- src/__tests__/vdxf/genericresponse.test.ts | 4 +- .../vdxf/identityupdateenvelope.test.ts | 278 +++++------------- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 68 ++++- src/constants/ordinals.ts | 16 - src/constants/ordinals/ordinals.ts | 9 + src/constants/ordinals/register.ts | 14 + src/constants/ordinals/types.ts | 7 + src/index.ts | 4 + src/vdxf/classes/ResponseUri.ts | 6 +- src/vdxf/classes/envelope/GenericEnvelope.ts | 2 +- src/vdxf/classes/index.ts | 2 + .../DataDescriptorOrdinalVdxfObject.ts | 29 ++ .../IdentityUpdateRequestOrdinalVdxfObject.ts | 29 ++ ...IdentityUpdateResponseOrdinalVdxfObject.ts | 29 ++ .../{ => ordinals}/OrdinalVdxfObject.ts | 135 ++------- .../OrdinalVdxfObjectOrdinalMap.ts | 21 +- .../SerializableEntityOrdinalVdxfObject.ts | 35 +++ .../VerusPayInvoiceOrdinalVdxfObject.ts | 29 ++ src/vdxf/classes/ordinals/index.ts | 11 + src/vdxf/keys.ts | 20 ++ 67 files changed, 1261 insertions(+), 394 deletions(-) delete mode 100644 dist/constants/ordinals.d.ts delete mode 100644 dist/constants/ordinals.js create mode 100644 dist/constants/ordinals/helpers.d.ts create mode 100644 dist/constants/ordinals/helpers.js create mode 100644 dist/constants/ordinals/ordinals.d.ts create mode 100644 dist/constants/ordinals/ordinals.js create mode 100644 dist/constants/ordinals/register.d.ts create mode 100644 dist/constants/ordinals/register.js create mode 100644 dist/constants/ordinals/types.d.ts create mode 100644 dist/constants/ordinals/types.js create mode 100644 dist/vdxf/classes/identity/IdentityUpdateRequestOrdinalVdxfObject.d.ts create mode 100644 dist/vdxf/classes/identity/IdentityUpdateRequestOrdinalVdxfObject.js create mode 100644 dist/vdxf/classes/identity/IdentityUpdateResponseOrdinalVdxfObject.d.ts create mode 100644 dist/vdxf/classes/identity/IdentityUpdateResponseOrdinalVdxfObject.js create mode 100644 dist/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.js create mode 100644 dist/vdxf/classes/ordinals/GeneralTypeOrdinalVdxfObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/GeneralTypeOrdinalVdxfObject.js create mode 100644 dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.js create mode 100644 dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.js create mode 100644 dist/vdxf/classes/ordinals/OrdinalVdxfObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/OrdinalVdxfObject.js create mode 100644 dist/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.d.ts create mode 100644 dist/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.js create mode 100644 dist/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.js create mode 100644 dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.js create mode 100644 dist/vdxf/classes/ordinals/index.d.ts create mode 100644 dist/vdxf/classes/ordinals/index.js delete mode 100644 src/constants/ordinals.ts create mode 100644 src/constants/ordinals/ordinals.ts create mode 100644 src/constants/ordinals/register.ts create mode 100644 src/constants/ordinals/types.ts create mode 100644 src/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.ts create mode 100644 src/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.ts create mode 100644 src/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.ts rename src/vdxf/classes/{ => ordinals}/OrdinalVdxfObject.ts (65%) rename src/vdxf/classes/{ => ordinals}/OrdinalVdxfObjectOrdinalMap.ts (57%) create mode 100644 src/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.ts create mode 100644 src/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.ts create mode 100644 src/vdxf/classes/ordinals/index.ts diff --git a/dist/constants/ordinals.d.ts b/dist/constants/ordinals.d.ts deleted file mode 100644 index 1a070011..00000000 --- a/dist/constants/ordinals.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { DataDescriptor, DataDescriptorJson } from "../pbaas"; -import { IdentityUpdateDetailsJson, IdentityUpdateRequestDetails, VerusPayInvoiceDetails } from "../vdxf/classes"; -import { VerusPayInvoiceDetailsJson } from "../vdxf/classes/payment/VerusPayInvoiceDetails"; -export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails; -export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateDetailsJson; -export declare const VDXF_ORDINAL_DATA_DESCRIPTOR: import("bn.js"); -export declare const VDXF_ORDINAL_VERUSPAY_INVOICE: import("bn.js"); -export declare const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST: import("bn.js"); diff --git a/dist/constants/ordinals.js b/dist/constants/ordinals.js deleted file mode 100644 index 4a963735..00000000 --- a/dist/constants/ordinals.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = exports.VDXF_ORDINAL_VERUSPAY_INVOICE = exports.VDXF_ORDINAL_DATA_DESCRIPTOR = void 0; -const bn_js_1 = require("bn.js"); -const OrdinalVdxfObjectOrdinalMap_1 = require("../vdxf/classes/OrdinalVdxfObjectOrdinalMap"); -const vdxf_1 = require("../vdxf"); -exports.VDXF_ORDINAL_DATA_DESCRIPTOR = new bn_js_1.BN(0, 10); -exports.VDXF_ORDINAL_VERUSPAY_INVOICE = new bn_js_1.BN(1, 10); -exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new bn_js_1.BN(3, 10); -OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(exports.VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), vdxf_1.DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid); -OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(exports.VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), vdxf_1.VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid); diff --git a/dist/constants/ordinals/helpers.d.ts b/dist/constants/ordinals/helpers.d.ts new file mode 100644 index 00000000..9a8bdd05 --- /dev/null +++ b/dist/constants/ordinals/helpers.d.ts @@ -0,0 +1,9 @@ +import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; +import { IdentityUpdateDetailsJson, IdentityUpdateRequestDetails, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; +import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; +import { OrdinalVdxfObjectClass } from "../../vdxf/classes/OrdinalVdxfObject"; +import { BigNumber } from "../../utils/types/BigNumber"; +export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails; +export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateDetailsJson | IdentityUpdateResponseDetailsJson; +export declare const registerOrdinals: () => void; +export declare const getOrdinalVdxfObjectClassForType: (type: BigNumber) => OrdinalVdxfObjectClass; diff --git a/dist/constants/ordinals/helpers.js b/dist/constants/ordinals/helpers.js new file mode 100644 index 00000000..bd52ead9 --- /dev/null +++ b/dist/constants/ordinals/helpers.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getOrdinalVdxfObjectClassForType = exports.registerOrdinals = void 0; +const OrdinalVdxfObjectOrdinalMap_1 = require("../../vdxf/classes/OrdinalVdxfObjectOrdinalMap"); +const vdxf_1 = require("../../vdxf"); +const OrdinalVdxfObject_1 = require("../../vdxf/classes/OrdinalVdxfObject"); +const ordinals_1 = require("./ordinals"); +const IdentityUpdateRequestOrdinalVdxfObject_1 = require("../../vdxf/classes/identity/IdentityUpdateRequestOrdinalVdxfObject"); +const registerOrdinals = () => { + OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), vdxf_1.DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, OrdinalVdxfObject_1.DataDescriptorOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), vdxf_1.VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid, OrdinalVdxfObject_1.VerusPayInvoiceOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), vdxf_1.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVdxfObject_1.IdentityUpdateRequestOrdinalVdxfObject, false); +}; +exports.registerOrdinals = registerOrdinals; +// OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject); +const getOrdinalVdxfObjectClassForType = (type) => { + if (OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.isRecognizedOrdinal(type.toNumber())) { + const key = OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.getVdxfKeyForOrdinal(type.toNumber()); + if (OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.hasClassForVdxfKey(key)) { + return OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.getClassForVdxfKey(OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.getVdxfKeyForOrdinal(type.toNumber())); + } + else { + throw new Error("No class found for " + key); + } + } + else if (type.eq(OrdinalVdxfObject_1.OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR) || + type.eq(OrdinalVdxfObject_1.OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING) || + type.eq(OrdinalVdxfObject_1.OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY)) + return OrdinalVdxfObject_1.GeneralTypeOrdinalVdxfObject; + else + throw new Error("Unrecognized vdxf ordinal object type"); +}; +exports.getOrdinalVdxfObjectClassForType = getOrdinalVdxfObjectClassForType; diff --git a/dist/constants/ordinals/ordinals.d.ts b/dist/constants/ordinals/ordinals.d.ts new file mode 100644 index 00000000..5722e3a5 --- /dev/null +++ b/dist/constants/ordinals/ordinals.d.ts @@ -0,0 +1,7 @@ +export declare const VDXF_OBJECT_RESERVED_BYTE_I_ADDR: import("bn.js"); +export declare const VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING: import("bn.js"); +export declare const VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY: import("bn.js"); +export declare const VDXF_ORDINAL_DATA_DESCRIPTOR: import("bn.js"); +export declare const VDXF_ORDINAL_VERUSPAY_INVOICE: import("bn.js"); +export declare const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST: import("bn.js"); +export declare const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE: import("bn.js"); diff --git a/dist/constants/ordinals/ordinals.js b/dist/constants/ordinals/ordinals.js new file mode 100644 index 00000000..da64b1d3 --- /dev/null +++ b/dist/constants/ordinals/ordinals.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = exports.VDXF_ORDINAL_VERUSPAY_INVOICE = exports.VDXF_ORDINAL_DATA_DESCRIPTOR = exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = void 0; +const bn_js_1 = require("bn.js"); +exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = new bn_js_1.BN(102, 10); +exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new bn_js_1.BN(103, 10); +exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = new bn_js_1.BN(104, 10); +exports.VDXF_ORDINAL_DATA_DESCRIPTOR = new bn_js_1.BN(0, 10); +exports.VDXF_ORDINAL_VERUSPAY_INVOICE = new bn_js_1.BN(1, 10); +exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new bn_js_1.BN(3, 10); +exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new bn_js_1.BN(4, 10); diff --git a/dist/constants/ordinals/register.d.ts b/dist/constants/ordinals/register.d.ts new file mode 100644 index 00000000..d3677b75 --- /dev/null +++ b/dist/constants/ordinals/register.d.ts @@ -0,0 +1 @@ +export declare const registerOrdinals: () => void; diff --git a/dist/constants/ordinals/register.js b/dist/constants/ordinals/register.js new file mode 100644 index 00000000..dc609805 --- /dev/null +++ b/dist/constants/ordinals/register.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.registerOrdinals = void 0; +const vdxf_1 = require("../../vdxf"); +const DataDescriptorOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject"); +const IdentityUpdateRequestOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject"); +const IdentityUpdateResponseOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject"); +const OrdinalVdxfObjectOrdinalMap_1 = require("../../vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap"); +const VerusPayInvoiceOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject"); +const ordinals_1 = require("./ordinals"); +const registerOrdinals = () => { + OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), vdxf_1.DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVdxfObject_1.DataDescriptorOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), vdxf_1.VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid, VerusPayInvoiceOrdinalVdxfObject_1.VerusPayInvoiceOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), vdxf_1.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVdxfObject_1.IdentityUpdateRequestOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), vdxf_1.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject_1.IdentityUpdateResponseOrdinalVdxfObject, false); +}; +exports.registerOrdinals = registerOrdinals; diff --git a/dist/constants/ordinals/types.d.ts b/dist/constants/ordinals/types.d.ts new file mode 100644 index 00000000..0d71c536 --- /dev/null +++ b/dist/constants/ordinals/types.d.ts @@ -0,0 +1,5 @@ +import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; +import { IdentityUpdateDetailsJson, IdentityUpdateRequestDetails, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; +import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; +export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails; +export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateDetailsJson | IdentityUpdateResponseDetailsJson; diff --git a/dist/constants/ordinals/types.js b/dist/constants/ordinals/types.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/constants/ordinals/types.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/index.d.ts b/dist/index.d.ts index f7acdc5a..4f4af619 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -17,6 +17,9 @@ export * from './pbaas/PartialIdentity'; export * from './pbaas/PartialMMRData'; export * from './pbaas/PartialSignData'; export * from './constants/pbaas'; +export * from './constants/ordinals/register'; +export * from './constants/ordinals/ordinals'; +export * from './constants/ordinals/types'; export * from './identity/IdentityDefinition'; export * from './currency/CurrencyDefinition'; export { BN as BigNumber } from 'bn.js'; diff --git a/dist/index.js b/dist/index.js index a332701c..a926a27e 100644 --- a/dist/index.js +++ b/dist/index.js @@ -34,6 +34,9 @@ __exportStar(require("./pbaas/PartialIdentity"), exports); __exportStar(require("./pbaas/PartialMMRData"), exports); __exportStar(require("./pbaas/PartialSignData"), exports); __exportStar(require("./constants/pbaas"), exports); +__exportStar(require("./constants/ordinals/register"), exports); +__exportStar(require("./constants/ordinals/ordinals"), exports); +__exportStar(require("./constants/ordinals/types"), exports); __exportStar(require("./identity/IdentityDefinition"), exports); __exportStar(require("./currency/CurrencyDefinition"), exports); var bn_js_1 = require("bn.js"); diff --git a/dist/vdxf/classes/OrdinalVdxfObject.d.ts b/dist/vdxf/classes/OrdinalVdxfObject.d.ts index 3763a8fc..0543f541 100644 --- a/dist/vdxf/classes/OrdinalVdxfObject.d.ts +++ b/dist/vdxf/classes/OrdinalVdxfObject.d.ts @@ -2,7 +2,7 @@ import { BigNumber } from "../../utils/types/BigNumber"; import { SerializableDataEntity, SerializableEntity } from "../../utils/types/SerializableEntity"; import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "./payment/VerusPayInvoiceDetails"; -import { OrdinalVdxfObjectReservedData, OrdinalVdxfObjectReservedDataJson } from "../../constants/ordinals"; +import { OrdinalVdxfObjectReservedData, OrdinalVdxfObjectReservedDataJson } from "../../constants/ordinals/helpers"; export interface OrdinalVdxfObjectInterfaceTemplate { version?: BigNumber; type?: BigNumber; @@ -21,7 +21,6 @@ export type OrdinalVdxfObjectInterface = OrdinalVdxfObjectInterfaceTemplate; export type OrdinalVdxfObjectDataClass = new (...args: any[]) => OrdinalVdxfObjectReservedData; export type OrdinalVdxfObjectClass = new (...args: any[]) => OrdinalVdxfObject; -export declare const getOrdinalVdxfObjectClassForType: (type: BigNumber) => OrdinalVdxfObjectClass; export declare class OrdinalVdxfObject implements SerializableEntity { version: BigNumber; type: BigNumber; diff --git a/dist/vdxf/classes/OrdinalVdxfObject.js b/dist/vdxf/classes/OrdinalVdxfObject.js index d71c86f1..b08612e2 100644 --- a/dist/vdxf/classes/OrdinalVdxfObject.js +++ b/dist/vdxf/classes/OrdinalVdxfObject.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.VerusPayInvoiceOrdinalVdxfObject = exports.DataDescriptorOrdinalVdxfObject = exports.SerializableEntityOrdinalVdxfObject = exports.GeneralTypeOrdinalVdxfObject = exports.OrdinalVdxfObject = exports.getOrdinalVdxfObjectClassForType = void 0; +exports.VerusPayInvoiceOrdinalVdxfObject = exports.DataDescriptorOrdinalVdxfObject = exports.SerializableEntityOrdinalVdxfObject = exports.GeneralTypeOrdinalVdxfObject = exports.OrdinalVdxfObject = void 0; const bufferutils_1 = require("../../utils/bufferutils"); const bn_js_1 = require("bn.js"); const varuint_1 = require("../../utils/varuint"); @@ -11,20 +11,8 @@ const pbaas_1 = require("../../pbaas"); const VerusPayInvoiceDetails_1 = require("./payment/VerusPayInvoiceDetails"); const OrdinalVdxfObjectOrdinalMap_1 = require("./OrdinalVdxfObjectOrdinalMap"); const pbaas_2 = require("../../constants/pbaas"); -const ordinals_1 = require("../../constants/ordinals"); -const getOrdinalVdxfObjectClassForType = (type) => { - if (type.eq(ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR)) - return DataDescriptorOrdinalVdxfObject; - else if (type.eq(ordinals_1.VDXF_ORDINAL_VERUSPAY_INVOICE)) - return VerusPayInvoiceOrdinalVdxfObject; - else if (type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR) || - type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING) || - type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY)) - return GeneralTypeOrdinalVdxfObject; - else - throw new Error("Unrecognized vdxf ordinal object type"); -}; -exports.getOrdinalVdxfObjectClassForType = getOrdinalVdxfObjectClassForType; +const helpers_1 = require("../../constants/ordinals/helpers"); +const ordinals_1 = require("../../constants/ordinals/ordinals"); class OrdinalVdxfObject { constructor(request = { type: ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR @@ -135,12 +123,13 @@ class OrdinalVdxfObject { }; } static createFromBuffer(buffer, offset, optimizeWithOrdinal = false, rootSystemName = pbaas_2.DEFAULT_VERUS_CHAINNAME) { + (0, helpers_1.registerOrdinals)(); if (buffer.length == 0) throw new Error("Cannot create request from empty buffer"); const reader = new bufferutils_1.default.BufferReader(buffer, offset); let type = new bn_js_1.BN(reader.readCompactSize()); const rootSystemId = (0, address_1.toIAddress)(rootSystemName); - const Entity = (0, exports.getOrdinalVdxfObjectClassForType)(type); + const Entity = (0, helpers_1.getOrdinalVdxfObjectClassForType)(type); const ord = new Entity({ type }); let key; if (optimizeWithOrdinal) { diff --git a/dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.d.ts b/dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.d.ts index 4dd43b8c..2b2498ea 100644 --- a/dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.d.ts +++ b/dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.d.ts @@ -1,13 +1,17 @@ +import { OrdinalVdxfObjectClass } from "./OrdinalVdxfObject"; declare class _OrdinalVdxfObjectOrdinalMap { private keyToOrdinalMap; private ordinalToKeyMap; + keyToOrdinalClass: Map; constructor(); private updateOrdinalToKeyMap; - registerOrdinal(ordinal: number, vdxfKey: string): void; + registerOrdinal(ordinal: number, vdxfKey: string, ordinalClass: OrdinalVdxfObjectClass, throwOnDuplicate?: boolean): void; isRecognizedOrdinal(ordinal: number): boolean; vdxfKeyHasOrdinal(vdxfKey: string): boolean; + hasClassForVdxfKey(vdxfKey: string): boolean; getOrdinalForVdxfKey(vdxfKey: string): number; getVdxfKeyForOrdinal(ordinal: number): string; + getClassForVdxfKey(vdxfKey: string): OrdinalVdxfObjectClass; } export declare const OrdinalVdxfObjectOrdinalMap: _OrdinalVdxfObjectOrdinalMap; export {}; diff --git a/dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.js b/dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.js index 7d069ac3..dad33880 100644 --- a/dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.js +++ b/dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.js @@ -6,16 +6,20 @@ class _OrdinalVdxfObjectOrdinalMap { constructor() { this.keyToOrdinalMap = new Map(); this.ordinalToKeyMap = new Map(); + this.keyToOrdinalClass = new Map(); } updateOrdinalToKeyMap() { this.ordinalToKeyMap = new Map(Array.from(this.keyToOrdinalMap, a => a.reverse())); } - registerOrdinal(ordinal, vdxfKey) { - if (this.isRecognizedOrdinal(ordinal)) - throw new Error("Cannot register new ordinal for existing vdxfkey"); - if (this.vdxfKeyHasOrdinal(vdxfKey)) - throw new Error("Cannot register new key for existing ordinal"); + registerOrdinal(ordinal, vdxfKey, ordinalClass, throwOnDuplicate = true) { + if (this.isRecognizedOrdinal(ordinal) || this.vdxfKeyHasOrdinal(vdxfKey)) { + if (throwOnDuplicate) + throw new Error("Cannot overwrite existing ordinal"); + else + return; + } this.keyToOrdinalMap.set(vdxfKey, ordinal); + this.keyToOrdinalClass.set(vdxfKey, ordinalClass); this.updateOrdinalToKeyMap(); } isRecognizedOrdinal(ordinal) { @@ -24,11 +28,17 @@ class _OrdinalVdxfObjectOrdinalMap { vdxfKeyHasOrdinal(vdxfKey) { return this.keyToOrdinalMap.has(vdxfKey); } + hasClassForVdxfKey(vdxfKey) { + return this.keyToOrdinalClass.has(vdxfKey); + } getOrdinalForVdxfKey(vdxfKey) { return this.keyToOrdinalMap.get(vdxfKey); } getVdxfKeyForOrdinal(ordinal) { return this.ordinalToKeyMap.get(ordinal); } + getClassForVdxfKey(vdxfKey) { + return this.keyToOrdinalClass.get(vdxfKey); + } } exports.OrdinalVdxfObjectOrdinalMap = new _OrdinalVdxfObjectOrdinalMap(); diff --git a/dist/vdxf/classes/ResponseUri.js b/dist/vdxf/classes/ResponseUri.js index 05c63ad4..b6d42c39 100644 --- a/dist/vdxf/classes/ResponseUri.js +++ b/dist/vdxf/classes/ResponseUri.js @@ -2,7 +2,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.ResponseUri = void 0; const bn_js_1 = require("bn.js"); -const varint_1 = require("../../utils/varint"); const varuint_1 = require("../../utils/varuint"); const bufferutils_1 = require("../../utils/bufferutils"); class ResponseUri { @@ -24,7 +23,7 @@ class ResponseUri { } getByteLength() { let length = 0; - length += varint_1.default.encodingLength(this.type); + length += varuint_1.default.encodingLength(this.type.toNumber()); let uriBufLen = this.uri.length; length += varuint_1.default.encodingLength(uriBufLen); length += uriBufLen; @@ -32,13 +31,13 @@ class ResponseUri { } toBuffer() { const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.type); + writer.writeCompactSize(this.type.toNumber()); writer.writeVarSlice(this.uri); return writer.buffer; } fromBuffer(buffer, offset) { const reader = new bufferutils_1.default.BufferReader(buffer, offset); - this.type = reader.readVarInt(); + this.type = new bn_js_1.BN(reader.readCompactSize()); this.uri = reader.readVarSlice(); return reader.offset; } diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts index efb06bda..5328debd 100644 --- a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts +++ b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts @@ -1,5 +1,5 @@ import { BigNumber } from "../../../utils/types/BigNumber"; -import { OrdinalVdxfObject, OrdinalVdxfObjectJson } from "../OrdinalVdxfObject"; +import { OrdinalVdxfObject, OrdinalVdxfObjectJson } from "../ordinals/OrdinalVdxfObject"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import { VerifiableSignatureData, VerifiableSignatureDataJson } from "../VerifiableSignatureData"; export interface GenericEnvelopeInterface { diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.js b/dist/vdxf/classes/envelope/GenericEnvelope.js index 8dc09093..71b47d88 100644 --- a/dist/vdxf/classes/envelope/GenericEnvelope.js +++ b/dist/vdxf/classes/envelope/GenericEnvelope.js @@ -5,7 +5,7 @@ const __1 = require("../../"); const bufferutils_1 = require("../../../utils/bufferutils"); const base64url_1 = require("base64url"); const bn_js_1 = require("bn.js"); -const OrdinalVdxfObject_1 = require("../OrdinalVdxfObject"); +const OrdinalVdxfObject_1 = require("../ordinals/OrdinalVdxfObject"); const varuint_1 = require("../../../utils/varuint"); const crypto_1 = require("crypto"); const VerifiableSignatureData_1 = require("../VerifiableSignatureData"); diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestOrdinalVdxfObject.d.ts b/dist/vdxf/classes/identity/IdentityUpdateRequestOrdinalVdxfObject.d.ts new file mode 100644 index 00000000..ba9fd198 --- /dev/null +++ b/dist/vdxf/classes/identity/IdentityUpdateRequestOrdinalVdxfObject.d.ts @@ -0,0 +1,8 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate, SerializableEntityOrdinalVdxfObject } from "../OrdinalVdxfObject"; +import { IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson } from "./IdentityUpdateRequestDetails"; +export declare class IdentityUpdateRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: IdentityUpdateRequestDetails; + constructor(request?: OrdinalVdxfObjectInterfaceTemplate); + static fromJson(details: OrdinalVdxfObjectJsonTemplate): IdentityUpdateRequestOrdinalVdxfObject; +} diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestOrdinalVdxfObject.js b/dist/vdxf/classes/identity/IdentityUpdateRequestOrdinalVdxfObject.js new file mode 100644 index 00000000..6ce991ef --- /dev/null +++ b/dist/vdxf/classes/identity/IdentityUpdateRequestOrdinalVdxfObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IdentityUpdateRequestOrdinalVdxfObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const OrdinalVdxfObject_1 = require("../OrdinalVdxfObject"); +const IdentityUpdateRequestDetails_1 = require("./IdentityUpdateRequestDetails"); +class IdentityUpdateRequestOrdinalVdxfObject extends OrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { + constructor(request = { + data: new IdentityUpdateRequestDetails_1.IdentityUpdateRequestDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, + data: request.data + }, IdentityUpdateRequestDetails_1.IdentityUpdateRequestDetails); + } + static fromJson(details) { + return new IdentityUpdateRequestOrdinalVdxfObject({ + data: IdentityUpdateRequestDetails_1.IdentityUpdateRequestDetails.fromJson(details.data) + }); + } +} +exports.IdentityUpdateRequestOrdinalVdxfObject = IdentityUpdateRequestOrdinalVdxfObject; diff --git a/dist/vdxf/classes/identity/IdentityUpdateResponseOrdinalVdxfObject.d.ts b/dist/vdxf/classes/identity/IdentityUpdateResponseOrdinalVdxfObject.d.ts new file mode 100644 index 00000000..bdedfdf5 --- /dev/null +++ b/dist/vdxf/classes/identity/IdentityUpdateResponseOrdinalVdxfObject.d.ts @@ -0,0 +1,8 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate, SerializableEntityOrdinalVdxfObject } from "../OrdinalVdxfObject"; +import { IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson } from "./IdentityUpdateResponseDetails"; +export declare class IdentityUpdateResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: IdentityUpdateResponseDetails; + constructor(response?: OrdinalVdxfObjectInterfaceTemplate); + static fromJson(details: OrdinalVdxfObjectJsonTemplate): IdentityUpdateResponseOrdinalVdxfObject; +} diff --git a/dist/vdxf/classes/identity/IdentityUpdateResponseOrdinalVdxfObject.js b/dist/vdxf/classes/identity/IdentityUpdateResponseOrdinalVdxfObject.js new file mode 100644 index 00000000..2c450039 --- /dev/null +++ b/dist/vdxf/classes/identity/IdentityUpdateResponseOrdinalVdxfObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IdentityUpdateResponseOrdinalVdxfObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const OrdinalVdxfObject_1 = require("../OrdinalVdxfObject"); +const IdentityUpdateResponseDetails_1 = require("./IdentityUpdateResponseDetails"); +class IdentityUpdateResponseOrdinalVdxfObject extends OrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { + constructor(response = { + data: new IdentityUpdateResponseDetails_1.IdentityUpdateResponseDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, + data: response.data + }, IdentityUpdateResponseDetails_1.IdentityUpdateResponseDetails); + } + static fromJson(details) { + return new IdentityUpdateResponseOrdinalVdxfObject({ + data: IdentityUpdateResponseDetails_1.IdentityUpdateResponseDetails.fromJson(details.data) + }); + } +} +exports.IdentityUpdateResponseOrdinalVdxfObject = IdentityUpdateResponseOrdinalVdxfObject; diff --git a/dist/vdxf/classes/index.d.ts b/dist/vdxf/classes/index.d.ts index 42c66f2f..89a2dfee 100644 --- a/dist/vdxf/classes/index.d.ts +++ b/dist/vdxf/classes/index.d.ts @@ -26,6 +26,7 @@ export * from "./identity/IdentityUpdateResponseDetails"; export * from './ResponseUri'; export * from './request/GenericRequest'; export * from './response/GenericResponse'; +export * from './ordinals'; export { Hash160 } from './Hash160'; export { RedirectUri, Subject, ProvisioningInfo, RequestedPermission, Audience, AltAuthFactor, Attestation, } from "./Challenge"; export { ProvisioningTxid } from './provisioning/ProvisioningResult'; diff --git a/dist/vdxf/classes/index.js b/dist/vdxf/classes/index.js index 67411600..ecb217f2 100644 --- a/dist/vdxf/classes/index.js +++ b/dist/vdxf/classes/index.js @@ -47,6 +47,7 @@ __exportStar(require("./identity/IdentityUpdateResponseDetails"), exports); __exportStar(require("./ResponseUri"), exports); __exportStar(require("./request/GenericRequest"), exports); __exportStar(require("./response/GenericResponse"), exports); +__exportStar(require("./ordinals"), exports); var Hash160_1 = require("./Hash160"); Object.defineProperty(exports, "Hash160", { enumerable: true, get: function () { return Hash160_1.Hash160; } }); var Challenge_2 = require("./Challenge"); diff --git a/dist/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.d.ts new file mode 100644 index 00000000..ab0fe47b --- /dev/null +++ b/dist/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.d.ts @@ -0,0 +1,9 @@ +import { DataDescriptor, DataDescriptorJson } from "../../../pbaas"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +export declare class DataDescriptorOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: DataDescriptor; + constructor(request?: OrdinalVdxfObjectInterfaceTemplate); + static fromJson(details: OrdinalVdxfObjectJsonTemplate): DataDescriptorOrdinalVdxfObject; +} diff --git a/dist/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.js new file mode 100644 index 00000000..5ae82bef --- /dev/null +++ b/dist/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DataDescriptorOrdinalVdxfObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const pbaas_1 = require("../../../pbaas"); +const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); +class DataDescriptorOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { + constructor(request = { + data: new pbaas_1.DataDescriptor() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR, + data: request.data + }, pbaas_1.DataDescriptor); + } + static fromJson(details) { + return new DataDescriptorOrdinalVdxfObject({ + data: pbaas_1.DataDescriptor.fromJson(details.data) + }); + } +} +exports.DataDescriptorOrdinalVdxfObject = DataDescriptorOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/GeneralTypeOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/GeneralTypeOrdinalVdxfObject.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/dist/vdxf/classes/ordinals/GeneralTypeOrdinalVdxfObject.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/vdxf/classes/ordinals/GeneralTypeOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/GeneralTypeOrdinalVdxfObject.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/vdxf/classes/ordinals/GeneralTypeOrdinalVdxfObject.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.d.ts new file mode 100644 index 00000000..5bf1e005 --- /dev/null +++ b/dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson } from "../identity/IdentityUpdateRequestDetails"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +export declare class IdentityUpdateRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: IdentityUpdateRequestDetails; + constructor(request?: OrdinalVdxfObjectInterfaceTemplate); + static fromJson(details: OrdinalVdxfObjectJsonTemplate): IdentityUpdateRequestOrdinalVdxfObject; +} diff --git a/dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.js new file mode 100644 index 00000000..1c89e577 --- /dev/null +++ b/dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IdentityUpdateRequestOrdinalVdxfObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const IdentityUpdateRequestDetails_1 = require("../identity/IdentityUpdateRequestDetails"); +const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); +class IdentityUpdateRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { + constructor(request = { + data: new IdentityUpdateRequestDetails_1.IdentityUpdateRequestDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, + data: request.data + }, IdentityUpdateRequestDetails_1.IdentityUpdateRequestDetails); + } + static fromJson(details) { + return new IdentityUpdateRequestOrdinalVdxfObject({ + data: IdentityUpdateRequestDetails_1.IdentityUpdateRequestDetails.fromJson(details.data) + }); + } +} +exports.IdentityUpdateRequestOrdinalVdxfObject = IdentityUpdateRequestOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.d.ts new file mode 100644 index 00000000..c1250286 --- /dev/null +++ b/dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson } from "../identity/IdentityUpdateResponseDetails"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +export declare class IdentityUpdateResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: IdentityUpdateResponseDetails; + constructor(response?: OrdinalVdxfObjectInterfaceTemplate); + static fromJson(details: OrdinalVdxfObjectJsonTemplate): IdentityUpdateResponseOrdinalVdxfObject; +} diff --git a/dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.js new file mode 100644 index 00000000..a029e3d9 --- /dev/null +++ b/dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IdentityUpdateResponseOrdinalVdxfObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const IdentityUpdateResponseDetails_1 = require("../identity/IdentityUpdateResponseDetails"); +const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); +class IdentityUpdateResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { + constructor(response = { + data: new IdentityUpdateResponseDetails_1.IdentityUpdateResponseDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, + data: response.data + }, IdentityUpdateResponseDetails_1.IdentityUpdateResponseDetails); + } + static fromJson(details) { + return new IdentityUpdateResponseOrdinalVdxfObject({ + data: IdentityUpdateResponseDetails_1.IdentityUpdateResponseDetails.fromJson(details.data) + }); + } +} +exports.IdentityUpdateResponseOrdinalVdxfObject = IdentityUpdateResponseOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/OrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/OrdinalVdxfObject.d.ts new file mode 100644 index 00000000..36f2fbe5 --- /dev/null +++ b/dist/vdxf/classes/ordinals/OrdinalVdxfObject.d.ts @@ -0,0 +1,58 @@ +import { BigNumber } from "../../../utils/types/BigNumber"; +import { SerializableDataEntity, SerializableEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectReservedData, OrdinalVdxfObjectReservedDataJson } from "../../../constants/ordinals/types"; +export interface OrdinalVdxfObjectInterfaceTemplate { + version?: BigNumber; + type?: BigNumber; + key?: string; + data?: T; +} +export type OrdinalVdxfObjectJsonTemplate = { + version: string; + type: string; + vdxfkey?: string; + data?: T; +}; +export type BufferOrOrdinalVdxfObjectReservedData = Buffer | OrdinalVdxfObjectReservedData; +export type StringOrOrdinalVdxfObjectReservedDataJson = string | OrdinalVdxfObjectReservedDataJson; +export type OrdinalVdxfObjectInterface = OrdinalVdxfObjectInterfaceTemplate; +export type OrdinalVdxfObjectJson = OrdinalVdxfObjectJsonTemplate; +export type OrdinalVdxfObjectDataClass = new (...args: any[]) => OrdinalVdxfObjectReservedData; +export type OrdinalVdxfObjectClass = new (...args: any[]) => OrdinalVdxfObject; +export declare const getOrdinalVdxfObjectClassForType: (type: BigNumber) => OrdinalVdxfObjectClass; +export declare class OrdinalVdxfObject implements SerializableEntity { + version: BigNumber; + type: BigNumber; + key?: string; + data?: BufferOrOrdinalVdxfObjectReservedData; + static VERSION_INVALID: import("bn.js"); + static VERSION_FIRST: import("bn.js"); + static VERSION_LAST: import("bn.js"); + static VERSION_CURRENT: import("bn.js"); + constructor(request?: OrdinalVdxfObjectInterfaceTemplate); + isDefinedByVdxfKey(): boolean; + isDefinedByTextVdxfKey(): boolean; + isDefinedByCurrencyOrId(): boolean; + isDefinedByCustomKey(): boolean; + getDataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer): void; + getByteLength(): number; + toBuffer(): Buffer; + fromBufferOptionalType(buffer: Buffer, offset?: number, type?: BigNumber, key?: string): number; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): OrdinalVdxfObjectJson; + static createFromBuffer(buffer: Buffer, offset?: number, optimizeWithOrdinal?: boolean, rootSystemName?: string): { + offset: number; + obj: OrdinalVdxfObject; + }; +} +export declare class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { + data: Buffer; + key: string; + constructor(request?: OrdinalVdxfObjectInterfaceTemplate); + getDataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer): void; + static fromJson(details: OrdinalVdxfObjectJson): GeneralTypeOrdinalVdxfObject; +} diff --git a/dist/vdxf/classes/ordinals/OrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/OrdinalVdxfObject.js new file mode 100644 index 00000000..f93ea485 --- /dev/null +++ b/dist/vdxf/classes/ordinals/OrdinalVdxfObject.js @@ -0,0 +1,205 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GeneralTypeOrdinalVdxfObject = exports.OrdinalVdxfObject = exports.getOrdinalVdxfObjectClassForType = void 0; +const bufferutils_1 = require("../../../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const varuint_1 = require("../../../utils/varuint"); +const address_1 = require("../../../utils/address"); +const varint_1 = require("../../../utils/varint"); +const vdxf_1 = require("../../../constants/vdxf"); +const OrdinalVdxfObjectOrdinalMap_1 = require("./OrdinalVdxfObjectOrdinalMap"); +const pbaas_1 = require("../../../constants/pbaas"); +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const getOrdinalVdxfObjectClassForType = (type) => { + if (OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.isRecognizedOrdinal(type.toNumber())) { + const key = OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.getVdxfKeyForOrdinal(type.toNumber()); + if (OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.hasClassForVdxfKey(key)) { + return OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.getClassForVdxfKey(OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.getVdxfKeyForOrdinal(type.toNumber())); + } + else { + throw new Error("No class found for " + key); + } + } + else if (type.eq(ordinals_1.VDXF_OBJECT_RESERVED_BYTE_I_ADDR) || + type.eq(ordinals_1.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING) || + type.eq(ordinals_1.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY)) + return GeneralTypeOrdinalVdxfObject; + else + throw new Error("Unrecognized vdxf ordinal object type " + type.toNumber()); +}; +exports.getOrdinalVdxfObjectClassForType = getOrdinalVdxfObjectClassForType; +class OrdinalVdxfObject { + constructor(request = { + type: ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR + }) { + if (request.key) { + this.type = ordinals_1.VDXF_OBJECT_RESERVED_BYTE_I_ADDR; + this.key = request.key; + if (request.data) { + this.data = request.data; + } + else + this.data = Buffer.alloc(0); + } + else if (request.type == null) { + this.type = ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR; + } + else { + this.type = request.type; + } + if (request.version) + this.version = request.version; + else + this.version = OrdinalVdxfObject.VERSION_CURRENT; + } + isDefinedByVdxfKey() { + return this.type.eq(ordinals_1.VDXF_OBJECT_RESERVED_BYTE_I_ADDR); + } + isDefinedByTextVdxfKey() { + return this.type.eq(ordinals_1.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING); + } + isDefinedByCurrencyOrId() { + return this.type.eq(ordinals_1.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY); + } + isDefinedByCustomKey() { + return this.isDefinedByCurrencyOrId() || this.isDefinedByTextVdxfKey() || this.isDefinedByVdxfKey(); + } + getDataByteLength() { + return 0; + } + toDataBuffer() { + return Buffer.alloc(0); + } + fromDataBuffer(buffer) { } + getByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.type.toNumber()); + if (this.isDefinedByVdxfKey()) { + length += (0, address_1.fromBase58Check)(this.key).hash.length; + } + else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { + const utf8Key = Buffer.from(this.key, 'utf8'); + length += varuint_1.default.encodingLength(utf8Key.length); + length += utf8Key.length; + } + length += varint_1.default.encodingLength(this.version); + const dataLength = this.getDataByteLength(); + length += varuint_1.default.encodingLength(dataLength); + length += dataLength; + return length; + } + toBuffer() { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeCompactSize(this.type.toNumber()); + if (this.isDefinedByVdxfKey()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.key).hash); + } + else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { + writer.writeVarSlice(Buffer.from(this.key, 'utf8')); + } + writer.writeVarInt(this.version); + writer.writeVarSlice(this.toDataBuffer()); + return writer.buffer; + } + fromBufferOptionalType(buffer, offset, type, key) { + if (buffer.length == 0) + throw new Error("Cannot create request from empty buffer"); + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + if (!type) { + this.type = new bn_js_1.BN(reader.readCompactSize()); + } + else + this.type = type; + if (!key) { + if (this.isDefinedByVdxfKey()) { + this.key = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + } + else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { + this.key = reader.readVarSlice().toString('utf8'); + } + } + else { + this.key = key; + } + this.version = reader.readVarInt(); + const dataBuf = reader.readVarSlice(); + this.fromDataBuffer(dataBuf); + return reader.offset; + } + fromBuffer(buffer, offset) { + return this.fromBufferOptionalType(buffer, offset); + } + toJson() { + return { + type: this.type ? this.type.toString() : undefined, + version: this.version ? this.version.toString() : undefined, + vdxfkey: this.key, + data: this.data ? this.isDefinedByCustomKey() ? this.data.toString('hex') : this.data.toJson() : undefined + }; + } + static createFromBuffer(buffer, offset, optimizeWithOrdinal = false, rootSystemName = pbaas_1.DEFAULT_VERUS_CHAINNAME) { + if (buffer.length == 0) + throw new Error("Cannot create request from empty buffer"); + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + let type = new bn_js_1.BN(reader.readCompactSize()); + const rootSystemId = (0, address_1.toIAddress)(rootSystemName); + const Entity = (0, exports.getOrdinalVdxfObjectClassForType)(type); + const ord = new Entity({ type }); + let key; + if (optimizeWithOrdinal) { + let vdxfKey; + if (ord.isDefinedByVdxfKey()) { + key = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + vdxfKey = key; + } + else if (ord.isDefinedByTextVdxfKey() || ord.isDefinedByCurrencyOrId()) { + key = reader.readVarSlice().toString('utf8'); + if (ord.isDefinedByTextVdxfKey()) { + vdxfKey = (0, address_1.getDataKey)(key, undefined, rootSystemId).id; + } + else { + vdxfKey = (0, address_1.toIAddress)(key, rootSystemName); + } + } + if (OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.vdxfKeyHasOrdinal(vdxfKey)) { + type = new bn_js_1.BN(OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.getOrdinalForVdxfKey(vdxfKey)); + } + } + reader.offset = ord.fromBufferOptionalType(buffer, reader.offset, type, key); + return { offset: reader.offset, obj: ord }; + } +} +exports.OrdinalVdxfObject = OrdinalVdxfObject; +OrdinalVdxfObject.VERSION_INVALID = new bn_js_1.BN(0, 10); +OrdinalVdxfObject.VERSION_FIRST = new bn_js_1.BN(1, 10); +OrdinalVdxfObject.VERSION_LAST = new bn_js_1.BN(1, 10); +OrdinalVdxfObject.VERSION_CURRENT = new bn_js_1.BN(1, 10); +class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject { + constructor(request = { + type: ordinals_1.VDXF_OBJECT_RESERVED_BYTE_I_ADDR, + data: Buffer.alloc(0), + key: vdxf_1.NULL_ADDRESS + }) { + super({ + type: request.type, + data: request.data, + key: request.key + }); + } + getDataByteLength() { + return this.data.length; + } + toDataBuffer() { + return this.data; + } + fromDataBuffer(buffer) { + this.data = Buffer.from(buffer); + } + static fromJson(details) { + return new GeneralTypeOrdinalVdxfObject({ + key: details.vdxfkey, + data: details.data ? Buffer.from(details.data, 'hex') : undefined + }); + } +} +exports.GeneralTypeOrdinalVdxfObject = GeneralTypeOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.d.ts b/dist/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.d.ts new file mode 100644 index 00000000..2b2498ea --- /dev/null +++ b/dist/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.d.ts @@ -0,0 +1,17 @@ +import { OrdinalVdxfObjectClass } from "./OrdinalVdxfObject"; +declare class _OrdinalVdxfObjectOrdinalMap { + private keyToOrdinalMap; + private ordinalToKeyMap; + keyToOrdinalClass: Map; + constructor(); + private updateOrdinalToKeyMap; + registerOrdinal(ordinal: number, vdxfKey: string, ordinalClass: OrdinalVdxfObjectClass, throwOnDuplicate?: boolean): void; + isRecognizedOrdinal(ordinal: number): boolean; + vdxfKeyHasOrdinal(vdxfKey: string): boolean; + hasClassForVdxfKey(vdxfKey: string): boolean; + getOrdinalForVdxfKey(vdxfKey: string): number; + getVdxfKeyForOrdinal(ordinal: number): string; + getClassForVdxfKey(vdxfKey: string): OrdinalVdxfObjectClass; +} +export declare const OrdinalVdxfObjectOrdinalMap: _OrdinalVdxfObjectOrdinalMap; +export {}; diff --git a/dist/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.js b/dist/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.js new file mode 100644 index 00000000..dad33880 --- /dev/null +++ b/dist/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.js @@ -0,0 +1,44 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OrdinalVdxfObjectOrdinalMap = void 0; +// Singleton class that exists to create a bidirectional map of ordinals <-> vdxf keys +class _OrdinalVdxfObjectOrdinalMap { + constructor() { + this.keyToOrdinalMap = new Map(); + this.ordinalToKeyMap = new Map(); + this.keyToOrdinalClass = new Map(); + } + updateOrdinalToKeyMap() { + this.ordinalToKeyMap = new Map(Array.from(this.keyToOrdinalMap, a => a.reverse())); + } + registerOrdinal(ordinal, vdxfKey, ordinalClass, throwOnDuplicate = true) { + if (this.isRecognizedOrdinal(ordinal) || this.vdxfKeyHasOrdinal(vdxfKey)) { + if (throwOnDuplicate) + throw new Error("Cannot overwrite existing ordinal"); + else + return; + } + this.keyToOrdinalMap.set(vdxfKey, ordinal); + this.keyToOrdinalClass.set(vdxfKey, ordinalClass); + this.updateOrdinalToKeyMap(); + } + isRecognizedOrdinal(ordinal) { + return this.ordinalToKeyMap.has(ordinal); + } + vdxfKeyHasOrdinal(vdxfKey) { + return this.keyToOrdinalMap.has(vdxfKey); + } + hasClassForVdxfKey(vdxfKey) { + return this.keyToOrdinalClass.has(vdxfKey); + } + getOrdinalForVdxfKey(vdxfKey) { + return this.keyToOrdinalMap.get(vdxfKey); + } + getVdxfKeyForOrdinal(ordinal) { + return this.ordinalToKeyMap.get(ordinal); + } + getClassForVdxfKey(vdxfKey) { + return this.keyToOrdinalClass.get(vdxfKey); + } +} +exports.OrdinalVdxfObjectOrdinalMap = new _OrdinalVdxfObjectOrdinalMap(); diff --git a/dist/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.d.ts new file mode 100644 index 00000000..ac6ea3d2 --- /dev/null +++ b/dist/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.d.ts @@ -0,0 +1,11 @@ +import { OrdinalVdxfObjectReservedData } from "../../../constants/ordinals/types"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObject, OrdinalVdxfObjectDataClass, OrdinalVdxfObjectInterfaceTemplate } from "./OrdinalVdxfObject"; +export declare class SerializableEntityOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { + data: OrdinalVdxfObjectReservedData; + entity: OrdinalVdxfObjectDataClass; + constructor(request: OrdinalVdxfObjectInterfaceTemplate, entity: OrdinalVdxfObjectDataClass); + getDataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer): void; +} diff --git a/dist/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.js new file mode 100644 index 00000000..0d887698 --- /dev/null +++ b/dist/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SerializableEntityOrdinalVdxfObject = void 0; +const OrdinalVdxfObject_1 = require("./OrdinalVdxfObject"); +class SerializableEntityOrdinalVdxfObject extends OrdinalVdxfObject_1.OrdinalVdxfObject { + constructor(request, entity) { + if (!request || !request.type) + throw new Error("Expected request with data and type"); + super({ + type: request.type + }); + this.entity = entity; + this.data = request.data ? request.data : new entity(); + } + getDataByteLength() { + return this.data.getByteLength(); + } + toDataBuffer() { + return this.data.toBuffer(); + } + fromDataBuffer(buffer) { + this.data = new this.entity(); + this.data.fromBuffer(buffer); + } +} +exports.SerializableEntityOrdinalVdxfObject = SerializableEntityOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.d.ts new file mode 100644 index 00000000..bf008690 --- /dev/null +++ b/dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "../payment/VerusPayInvoiceDetails"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +export declare class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: VerusPayInvoiceDetails; + constructor(request?: OrdinalVdxfObjectInterfaceTemplate); + static fromJson(details: OrdinalVdxfObjectJsonTemplate): VerusPayInvoiceOrdinalVdxfObject; +} diff --git a/dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.js new file mode 100644 index 00000000..883c4684 --- /dev/null +++ b/dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VerusPayInvoiceOrdinalVdxfObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const VerusPayInvoiceDetails_1 = require("../payment/VerusPayInvoiceDetails"); +const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); +class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { + constructor(request = { + data: new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_VERUSPAY_INVOICE, + data: request.data + }, VerusPayInvoiceDetails_1.VerusPayInvoiceDetails); + } + static fromJson(details) { + return new VerusPayInvoiceOrdinalVdxfObject({ + data: VerusPayInvoiceDetails_1.VerusPayInvoiceDetails.fromJson(details.data) + }); + } +} +exports.VerusPayInvoiceOrdinalVdxfObject = VerusPayInvoiceOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/index.d.ts b/dist/vdxf/classes/ordinals/index.d.ts new file mode 100644 index 00000000..93c57476 --- /dev/null +++ b/dist/vdxf/classes/ordinals/index.d.ts @@ -0,0 +1,7 @@ +export * from './DataDescriptorOrdinalVdxfObject'; +export * from './IdentityUpdateRequestOrdinalVdxfObject'; +export * from './IdentityUpdateResponseOrdinalVdxfObject'; +export * from './OrdinalVdxfObject'; +export * from './OrdinalVdxfObjectOrdinalMap'; +export * from './SerializableEntityOrdinalVdxfObject'; +export * from './VerusPayInvoiceOrdinalVdxfObject'; diff --git a/dist/vdxf/classes/ordinals/index.js b/dist/vdxf/classes/ordinals/index.js new file mode 100644 index 00000000..84161c13 --- /dev/null +++ b/dist/vdxf/classes/ordinals/index.js @@ -0,0 +1,25 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const register_1 = require("../../../constants/ordinals/register"); +__exportStar(require("./DataDescriptorOrdinalVdxfObject"), exports); +__exportStar(require("./IdentityUpdateRequestOrdinalVdxfObject"), exports); +__exportStar(require("./IdentityUpdateResponseOrdinalVdxfObject"), exports); +__exportStar(require("./OrdinalVdxfObject"), exports); +__exportStar(require("./OrdinalVdxfObjectOrdinalMap"), exports); +__exportStar(require("./SerializableEntityOrdinalVdxfObject"), exports); +__exportStar(require("./VerusPayInvoiceOrdinalVdxfObject"), exports); +(0, register_1.registerOrdinals)(); diff --git a/dist/vdxf/keys.d.ts b/dist/vdxf/keys.d.ts index 8356a346..92648220 100644 --- a/dist/vdxf/keys.d.ts +++ b/dist/vdxf/keys.d.ts @@ -14,7 +14,9 @@ export declare const VERUSPAY_INVOICE_VDXF_KEY: VDXFKeyInterface; export declare const VERUSPAY_INVOICE_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const GENERIC_REQUEST_DEEPLINK_VDXF_KEY: VDXFKeyInterface; export declare const IDENTITY_UPDATE_REQUEST_VDXF_KEY: VDXFKeyInterface; +export declare const IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const IDENTITY_UPDATE_RESPONSE_VDXF_KEY: VDXFKeyInterface; +export declare const IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const IDENTITY_AUTH_SIG_VDXF_KEY: VDXFKeyInterface; export declare const LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY: VDXFKeyInterface; export declare const LOGIN_CONSENT_REQUEST_VDXF_KEY: VDXFKeyInterface; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index 1ba14ee9..dcd5ea2c 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; -exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = void 0; +exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; +exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; exports.VERUSPAY_INVOICE_VDXF_KEY = { hash160result: "628efc28c2e2d40050e1a9de7a93e7ddf2aa0076", qualifiedname: { @@ -37,6 +37,15 @@ exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = { }, "vdxfid": "iQJAPr53wZnjLyGpGdjiNZhSwSTXSfyoYy" }; +exports.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY = { + "hash160result": "4cedf62ce2a66dbb228ba8abe7a10bbffe35db93", + "indexid": "xMnRq7oBMqxzdJqzFniFTtfKyf6qh3BVPs", + "qualifiedname": { + "name": "vrsc::identity.update.request.details", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iGxKNKN6WXkL18xxQ746VW8nx15prPMP7L" +}; exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = { "hash160result": "667802c74fbf3dd3a9693bb9aec9bef1250b2b14", "indexid": "xA9GyS1bt1WGERamNVqVrhuGvGJeYuWyNk", @@ -46,6 +55,15 @@ exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = { }, "vdxfid": "i5KAWdaX2hHbcFhjWpBLtKNjtcHdeQFjuX" }; +exports.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY = { + "hash160result": "4f9a304beccceaa5692247c0d5789814a24f66be", + "indexid": "xRfNr2GNGNEnckSRSPZe4TgbZRKqZfLxqk", + "qualifiedname": { + "name": "vrsc::identity.update.response.details", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iLqGPDqHR427zaZPahuV65A4XmJpiqb9eF" +}; exports.IDENTITY_AUTH_SIG_VDXF_KEY = { vdxfid: "iPi1DPgDDu7hP1mAp5xJ8rHBWwXSzc6yA8", hash160result: "06d4b963da3dcf17f00905b0720f7a4c241defdd", diff --git a/src/__tests__/constants/fixtures.ts b/src/__tests__/constants/fixtures.ts index b890401d..c747c7e0 100644 --- a/src/__tests__/constants/fixtures.ts +++ b/src/__tests__/constants/fixtures.ts @@ -1,3 +1,10 @@ +import { BN } from "bn.js" +import { ContentMultiMap, IDENTITY_VERSION_PBAAS, IdentityID, KeyID, SaplingPaymentAddress } from "../../pbaas" +import { PartialIdentity } from "../../pbaas/PartialIdentity" +import { PartialMMRData } from "../../pbaas/PartialMMRData" +import { PartialSignData, PartialSignDataInitData } from "../../pbaas/PartialSignData" +import { DATA_TYPE_MMRDATA } from "../../constants/pbaas" + export const manyContentMultimapData = { "iGdWifeNFcN69JiFwmcZTYT1zPYpFumGhq": [ // String @@ -322,4 +329,121 @@ export const mmrDescriptorForRootProof = { } } -export const TEST_IDENTITY_ID = "i8jHXEEYEQ7KEoYe6eKXBib8cUBZ6vjWSd" \ No newline at end of file +export const TEST_IDENTITY_ID = "i8jHXEEYEQ7KEoYe6eKXBib8cUBZ6vjWSd" + +export const TEST_SYSTEMID = IdentityID.fromAddress("iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"); +export const TEST_SIGNINGID = IdentityID.fromAddress("iPsFBfFoCcxtuZNzE8yxPQhXVn4dmytf8j"); +export const TEST_REQUESTID = new BN("123456", 10); +export const TEST_CREATEDAT = new BN("1700000000", 10); +export const TEST_EXPIRYHEIGHT = new BN("123456"); +export const TEST_SALT = Buffer.from('=H319X:)@H2Z'); +export const TEST_TXID = "2474d2c7b3586cedd8bf7f4a9af7c26e794ea2fc44853f17a30148e2ed857a95"; + +export const TEST_CONTENTMAP = new Map(); +TEST_CONTENTMAP.set("iPsFBfFoCcxtuZNzE8yxPQhXVn4dmytf8j", Buffer.alloc(32)); +TEST_CONTENTMAP.set("iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c", Buffer.alloc(32)); + +export const TEST_CLI_ID_UPDATE_REQUEST_JSON = { + "name": "data", + "contentmultimap": { + "i5CXAPoCLothTntExgvc5kK38u2wyHtFCg": { + "data": {"createmmr":true, "mmrdata":[{"message": "{\"rail_transport\": 43326.71, \"public_bus_transport\": 83452.4, \"air_transport\": 1306.83, \"urban_public_transport\": -1, \"time\": 993945600}", "mimetype": "application/json", "label": "quarter_3_2001_transport_passenger_data_cz"}]} + } + } +} + +export const TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX = { + "name":"[32][32]", + "parent":"iF6hHpRXpmhLq77eksQzqQrWuminKtzmxT", + "contentmultimap": { + "i4d7U1aZhmoxZbWx8AVezh6z1YewAnuw3V": [ + { + "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv": { + "version": 1, + "flags": 32, + "label": "i3bgiLuaxTr6smF8q6xLG4jvvhF1mmrkM2", + "objectdata": { + "serializedhex": "08a2ebb2c55f83a8e2a426a53320ed4d42124f4d010c012001010776657273696f6e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d011d01600a656d706c6f796d656e7404747970650a746578742f706c61696e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d011d016009446576656c6f706572057469746c650a746578742f706c61696e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d0157016044426f6479206f6620636c61696d20676f657320686572652c207768617420796f75206861766520646f6e652c207768617420796f7520686176652061636869657665642e04626f64790a746578742f706c61696e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d011d016009323031392d323032300564617465730a746578742f706c61696e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d011f01600a323032352d30312d3330066973737565640a746578742f706c61696e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d012f012020cc2b8109fb5566cf98297aaf5c80e2fb0a5051c3252a7957b13ba5433767e23a0b7265666572656e63654944" + } + } + }, + { + "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv": { + "version": 1, + "flags": 32, + "label": "i3bgiLuaxTr6smF8q6xLG4jvvhF1mmrkM2", + "objectdata": { + "serializedhex": "08a2ebb2c55f83a8e2a426a53320ed4d42124f4d010c012001010776657273696f6e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d011d01600a656d706c6f796d656e7404747970650a746578742f706c61696e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d012301600f436869656620446576656c6f706572057469746c650a746578742f706c61696e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d0157016044426f6479206f6620636c61696d20676f657320686572652c207768617420796f75206861766520646f6e652c207768617420796f7520686176652061636869657665642e04626f64790a746578742f706c61696e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d011d016009323032312d323032340564617465730a746578742f706c61696e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d011f01600a323032352d30312d3239066973737565640a746578742f706c61696e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d015a016040373962343830376333303465383035333831666438653165376234383865353062363032613033333366663266663633636264313564363362366163383835650b7265666572656e636549440a746578742f706c61696e" + } + } + } + ] + } +} + +export const TEST_PARTIAL_IDENTITY = new PartialIdentity({ + flags: new BN("0"), + version: IDENTITY_VERSION_PBAAS, + min_sigs: new BN(1), + primary_addresses: [ + KeyID.fromAddress("RQVsJRf98iq8YmRQdehzRcbLGHEx6YfjdH"), + KeyID.fromAddress("RP4Qct9197i5vrS11qHVtdyRRoAHVNJS47") + ], + parent: IdentityID.fromAddress("iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"), + system_id: IdentityID.fromAddress("iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"), + name: "TestID", + content_map: TEST_CONTENTMAP, + content_multimap: ContentMultiMap.fromJson({ + iPsFBfFoCcxtuZNzE8yxPQhXVn4dmytf8j: [ + { iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c: 'Test String 123454321' }, + { iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c: 'Test String 123454321' }, + { iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c: 'Test String 123454321' }, + { iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c: 'Test String 123454321' } + ], + iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq: '6868686868686868686868686868686868686868', + i5v3h9FWVdRFbNHU7DfcpGykQjRaHtMqu7: [ + '6868686868686868686868686868686868686868', + '6868686868686868686868686868686868686868', + '6868686868686868686868686868686868686868' + ], + i81XL8ZpuCo9jmWLv5L5ikdxrGuHrrpQLz: { iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c: 'Test String 123454321' } + }), + recovery_authority: IdentityID.fromAddress("i81XL8ZpuCo9jmWLv5L5ikdxrGuHrrpQLz"), + revocation_authority: IdentityID.fromAddress("i5v3h9FWVdRFbNHU7DfcpGykQjRaHtMqu7"), + unlock_after: new BN("123456", 10), + private_addresses: [SaplingPaymentAddress.fromAddressString("zs1wczplx4kegw32h8g0f7xwl57p5tvnprwdmnzmdnsw50chcl26f7tws92wk2ap03ykaq6jyyztfa")] +}); + +export const TEST_MMR_DATA = new PartialMMRData({ + flags: new BN('0', 10), + data: [ + { type: new BN('2', 10), data: Buffer.from('src/__tests__/pbaas/partialmmrdata.test.ts', 'utf-8') }, + { type: new BN('3', 10), data: Buffer.from('Hello test message 12345', 'utf-8') }, + ], + salt: [Buffer.from('=H319X:)@H2Z'), Buffer.from('s*1UHmVr?feI')], + mmrhashtype: new BN('1', 10), // e.g. PartialMMRData.HASH_TYPE_SHA256 + priormmr: [ + Buffer.from('80a28cdff6bd91a2e96a473c234371fd8b67705a8c4956255ce7b8c7bf20470f02381c9a935f06cdf986a7c5facd77625befa11cf9fd4b59857b457394a8af979ab2830087a3b27041b37bc318484175'), + Buffer.from('d97fd4bbd9e88ca0c5822c12d5c9b272b2044722aa48b1c8fde178be6b59ccea509f403d3acd226c16ba3c32f0cb92e2fcaaa02b40d0bc5257e0fbf2e6c3d3d7f1a1df066967b193d131158ba5bef732') + ], +}) + +export const TEST_BASE_SIGN_DATA_WITH_MMR_DATA: PartialSignDataInitData = { + flags: new BN('0', 10), + address: IdentityID.fromAddress('iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq'), + prefixstring: Buffer.from('example prefix', 'utf8'), + vdxfkeys: [IdentityID.fromAddress('i81XL8ZpuCo9jmWLv5L5ikdxrGuHrrpQLz')], + vdxfkeynames: [Buffer.from('VDXFNAME', 'utf8')], + boundhashes: [Buffer.from('0873c6ba879ce87f5c207a4382b273cac164361af0b9fe63d6d7b0d7af401fec', 'hex'), Buffer.from('0873c6ba879ce87f5c207a4382b273cac164361af0b9fe63d6d7b0d7af401fec', 'hex')], + hashtype: new BN('1', 10), + encrypttoaddress: SaplingPaymentAddress.fromAddressString( + 'zs1wczplx4kegw32h8g0f7xwl57p5tvnprwdmnzmdnsw50chcl26f7tws92wk2ap03ykaq6jyyztfa' + ), + createmmr: true, + signature: Buffer.from('AeNjMwABQSAPBEuajDkRyy+OBJsWmDP3EUoqN9UjCJK9nmoSQiNoZWBK19OgGCYdEqr1CiFfBf8SFHVoUv4r2tb5Q3qsMTrp', 'base64'), + datatype: DATA_TYPE_MMRDATA, + data: TEST_MMR_DATA, // This is the PartialMMRData object +} + +export const TEST_SIGNDATA_MAP = new Map(); +TEST_SIGNDATA_MAP.set("iBvyi1nuCrTA4g44xN9N7EU1t6a7gwb4h8", new PartialSignData(TEST_BASE_SIGN_DATA_WITH_MMR_DATA)) \ No newline at end of file diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts index 9b4e20d2..3aaf58c5 100644 --- a/src/__tests__/vdxf/genericrequest.test.ts +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -1,13 +1,11 @@ import { BN } from 'bn.js'; import base64url from 'base64url'; -import { - GeneralTypeOrdinalVdxfObject -} from '../../vdxf/classes/OrdinalVdxfObject'; import { DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256 } from '../../constants/pbaas'; import { WALLET_VDXF_KEY, GENERIC_REQUEST_DEEPLINK_VDXF_KEY, GenericRequest, SaplingPaymentAddress } from '../../'; import { createHash } from 'crypto'; import { VerifiableSignatureData } from '../../vdxf/classes/VerifiableSignatureData'; import { CompactIdAddressObject } from '../../vdxf/classes/CompactIdAddressObject'; +import { GeneralTypeOrdinalVdxfObject } from '../../vdxf/classes/ordinals'; describe('GenericRequest — buffer / URI / QR operations', () => { function roundTripBuffer(req: GenericRequest): GenericRequest { diff --git a/src/__tests__/vdxf/genericresponse.test.ts b/src/__tests__/vdxf/genericresponse.test.ts index 6d6500fe..897e4ff0 100644 --- a/src/__tests__/vdxf/genericresponse.test.ts +++ b/src/__tests__/vdxf/genericresponse.test.ts @@ -1,13 +1,11 @@ import { BN } from 'bn.js'; import base64url from 'base64url'; -import { - GeneralTypeOrdinalVdxfObject -} from '../../vdxf/classes/OrdinalVdxfObject'; import { DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256 } from '../../constants/pbaas'; import { WALLET_VDXF_KEY, GENERIC_REQUEST_DEEPLINK_VDXF_KEY, GenericResponse, SaplingPaymentAddress } from '../../'; import { createHash } from 'crypto'; import { VerifiableSignatureData } from '../../vdxf/classes/VerifiableSignatureData'; import { CompactIdAddressObject } from '../../vdxf/classes/CompactIdAddressObject'; +import { GeneralTypeOrdinalVdxfObject } from '../../vdxf/classes/ordinals'; describe('GenericResponse — buffer / URI / QR operations', () => { function roundTripBuffer(req: GenericResponse): GenericResponse { diff --git a/src/__tests__/vdxf/identityupdateenvelope.test.ts b/src/__tests__/vdxf/identityupdateenvelope.test.ts index 6bfdab3c..84041ca3 100644 --- a/src/__tests__/vdxf/identityupdateenvelope.test.ts +++ b/src/__tests__/vdxf/identityupdateenvelope.test.ts @@ -8,125 +8,9 @@ import { ResponseUri } from "../../vdxf/classes/ResponseUri"; import { PartialMMRData } from "../../pbaas/PartialMMRData"; import { PartialSignData, PartialSignDataInitData } from "../../pbaas/PartialSignData"; import { DATA_TYPE_MMRDATA } from "../../constants/pbaas"; +import { TEST_BASE_SIGN_DATA_WITH_MMR_DATA, TEST_CLI_ID_UPDATE_REQUEST_JSON, TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, TEST_CREATEDAT, TEST_EXPIRYHEIGHT, TEST_MMR_DATA, TEST_PARTIAL_IDENTITY, TEST_REQUESTID, TEST_SALT, TEST_SIGNDATA_MAP, TEST_SIGNINGID, TEST_SYSTEMID, TEST_TXID } from "../constants/fixtures"; describe("IdentityUpdateEnvelope Serialization", () => { - const systemID = IdentityID.fromAddress("iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"); - const signingID = IdentityID.fromAddress("iPsFBfFoCcxtuZNzE8yxPQhXVn4dmytf8j"); - const requestID = new BN("123456", 10); - const createdAt = new BN("1700000000", 10); - const expiryHeight = new BN("123456"); - const salt = Buffer.from('=H319X:)@H2Z'); - const txid = "2474d2c7b3586cedd8bf7f4a9af7c26e794ea2fc44853f17a30148e2ed857a95"; - - const contentmap = new Map(); - contentmap.set("iPsFBfFoCcxtuZNzE8yxPQhXVn4dmytf8j", Buffer.alloc(32)); - contentmap.set("iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c", Buffer.alloc(32)); - - const cliIdUpdateRequestJson = { - "name": "data", - "contentmultimap": { - "i5CXAPoCLothTntExgvc5kK38u2wyHtFCg": { - "data": {"createmmr":true, "mmrdata":[{"message": "{\"rail_transport\": 43326.71, \"public_bus_transport\": 83452.4, \"air_transport\": 1306.83, \"urban_public_transport\": -1, \"time\": 993945600}", "mimetype": "application/json", "label": "quarter_3_2001_transport_passenger_data_cz"}]} - } - } - } - - const cliIdUpdateRequestJsonHex = { - "name":"[32][32]", - "parent":"iF6hHpRXpmhLq77eksQzqQrWuminKtzmxT", - "contentmultimap": { - "i4d7U1aZhmoxZbWx8AVezh6z1YewAnuw3V": [ - { - "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv": { - "version": 1, - "flags": 32, - "label": "i3bgiLuaxTr6smF8q6xLG4jvvhF1mmrkM2", - "objectdata": { - "serializedhex": "08a2ebb2c55f83a8e2a426a53320ed4d42124f4d010c012001010776657273696f6e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d011d01600a656d706c6f796d656e7404747970650a746578742f706c61696e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d011d016009446576656c6f706572057469746c650a746578742f706c61696e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d0157016044426f6479206f6620636c61696d20676f657320686572652c207768617420796f75206861766520646f6e652c207768617420796f7520686176652061636869657665642e04626f64790a746578742f706c61696e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d011d016009323031392d323032300564617465730a746578742f706c61696e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d011f01600a323032352d30312d3330066973737565640a746578742f706c61696e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d012f012020cc2b8109fb5566cf98297aaf5c80e2fb0a5051c3252a7957b13ba5433767e23a0b7265666572656e63654944" - } - } - }, - { - "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv": { - "version": 1, - "flags": 32, - "label": "i3bgiLuaxTr6smF8q6xLG4jvvhF1mmrkM2", - "objectdata": { - "serializedhex": "08a2ebb2c55f83a8e2a426a53320ed4d42124f4d010c012001010776657273696f6e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d011d01600a656d706c6f796d656e7404747970650a746578742f706c61696e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d012301600f436869656620446576656c6f706572057469746c650a746578742f706c61696e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d0157016044426f6479206f6620636c61696d20676f657320686572652c207768617420796f75206861766520646f6e652c207768617420796f7520686176652061636869657665642e04626f64790a746578742f706c61696e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d011d016009323032312d323032340564617465730a746578742f706c61696e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d011f01600a323032352d30312d3239066973737565640a746578742f706c61696e08a2ebb2c55f83a8e2a426a53320ed4d42124f4d015a016040373962343830376333303465383035333831666438653165376234383865353062363032613033333366663266663633636264313564363362366163383835650b7265666572656e636549440a746578742f706c61696e" - } - } - } - ] - } - } - - const partialIdentity = new PartialIdentity({ - flags: new BN("0"), - version: IDENTITY_VERSION_PBAAS, - min_sigs: new BN(1), - primary_addresses: [ - KeyID.fromAddress("RQVsJRf98iq8YmRQdehzRcbLGHEx6YfjdH"), - KeyID.fromAddress("RP4Qct9197i5vrS11qHVtdyRRoAHVNJS47") - ], - parent: IdentityID.fromAddress("iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"), - system_id: IdentityID.fromAddress("iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"), - name: "TestID", - content_map: contentmap, - content_multimap: ContentMultiMap.fromJson({ - iPsFBfFoCcxtuZNzE8yxPQhXVn4dmytf8j: [ - { iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c: 'Test String 123454321' }, - { iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c: 'Test String 123454321' }, - { iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c: 'Test String 123454321' }, - { iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c: 'Test String 123454321' } - ], - iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq: '6868686868686868686868686868686868686868', - i5v3h9FWVdRFbNHU7DfcpGykQjRaHtMqu7: [ - '6868686868686868686868686868686868686868', - '6868686868686868686868686868686868686868', - '6868686868686868686868686868686868686868' - ], - i81XL8ZpuCo9jmWLv5L5ikdxrGuHrrpQLz: { iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c: 'Test String 123454321' } - }), - recovery_authority: IdentityID.fromAddress("i81XL8ZpuCo9jmWLv5L5ikdxrGuHrrpQLz"), - revocation_authority: IdentityID.fromAddress("i5v3h9FWVdRFbNHU7DfcpGykQjRaHtMqu7"), - unlock_after: new BN("123456", 10), - private_addresses: [SaplingPaymentAddress.fromAddressString("zs1wczplx4kegw32h8g0f7xwl57p5tvnprwdmnzmdnsw50chcl26f7tws92wk2ap03ykaq6jyyztfa")] - }); - - const mmrData = new PartialMMRData({ - flags: new BN('0', 10), - data: [ - { type: new BN('2', 10), data: Buffer.from('src/__tests__/pbaas/partialmmrdata.test.ts', 'utf-8') }, - { type: new BN('3', 10), data: Buffer.from('Hello test message 12345', 'utf-8') }, - ], - salt: [Buffer.from('=H319X:)@H2Z'), Buffer.from('s*1UHmVr?feI')], - mmrhashtype: new BN('1', 10), // e.g. PartialMMRData.HASH_TYPE_SHA256 - priormmr: [ - Buffer.from('80a28cdff6bd91a2e96a473c234371fd8b67705a8c4956255ce7b8c7bf20470f02381c9a935f06cdf986a7c5facd77625befa11cf9fd4b59857b457394a8af979ab2830087a3b27041b37bc318484175'), - Buffer.from('d97fd4bbd9e88ca0c5822c12d5c9b272b2044722aa48b1c8fde178be6b59ccea509f403d3acd226c16ba3c32f0cb92e2fcaaa02b40d0bc5257e0fbf2e6c3d3d7f1a1df066967b193d131158ba5bef732') - ], - }) - - const baseSignDataWithMMR: PartialSignDataInitData = { - flags: new BN('0', 10), - address: IdentityID.fromAddress('iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq'), - prefixstring: Buffer.from('example prefix', 'utf8'), - vdxfkeys: [IdentityID.fromAddress('i81XL8ZpuCo9jmWLv5L5ikdxrGuHrrpQLz')], - vdxfkeynames: [Buffer.from('VDXFNAME', 'utf8')], - boundhashes: [Buffer.from('0873c6ba879ce87f5c207a4382b273cac164361af0b9fe63d6d7b0d7af401fec', 'hex'), Buffer.from('0873c6ba879ce87f5c207a4382b273cac164361af0b9fe63d6d7b0d7af401fec', 'hex')], - hashtype: new BN('1', 10), - encrypttoaddress: SaplingPaymentAddress.fromAddressString( - 'zs1wczplx4kegw32h8g0f7xwl57p5tvnprwdmnzmdnsw50chcl26f7tws92wk2ap03ykaq6jyyztfa' - ), - createmmr: true, - signature: Buffer.from('AeNjMwABQSAPBEuajDkRyy+OBJsWmDP3EUoqN9UjCJK9nmoSQiNoZWBK19OgGCYdEqr1CiFfBf8SFHVoUv4r2tb5Q3qsMTrp', 'base64'), - datatype: DATA_TYPE_MMRDATA, - data: mmrData, // This is the PartialMMRData object - } - - const signdatamap = new Map(); - signdatamap.set("iBvyi1nuCrTA4g44xN9N7EU1t6a7gwb4h8", new PartialSignData(baseSignDataWithMMR)) - function testSerialization(instance) { const fromBufferInstance = new instance.constructor(); fromBufferInstance.fromBuffer(instance.toBuffer()); @@ -151,13 +35,13 @@ describe("IdentityUpdateEnvelope Serialization", () => { test("Serialize/Deserialize unsigned IdentityUpdateRequest", () => { const requestDetails = new IdentityUpdateRequestDetails({ - requestid: requestID, - createdat: createdAt, - systemid: systemID, - identity: partialIdentity, - expiryheight: expiryHeight, - salt: salt, - signdatamap + requestid: TEST_REQUESTID, + createdat: TEST_CREATEDAT, + systemid: TEST_SYSTEMID, + identity: TEST_PARTIAL_IDENTITY, + expiryheight: TEST_EXPIRYHEIGHT, + salt: TEST_SALT, + signdatamap: TEST_SIGNDATA_MAP }); const request = new IdentityUpdateRequest({ details: requestDetails }); testSerialization(request); @@ -166,18 +50,18 @@ describe("IdentityUpdateEnvelope Serialization", () => { test("Serialize/Deserialize signed IdentityUpdateRequest", () => { const requestDetails = new IdentityUpdateRequestDetails({ - requestid: requestID, - createdat: createdAt, - systemid: systemID, - identity: partialIdentity, - expiryheight: expiryHeight, - salt: salt, - signdatamap + requestid: TEST_REQUESTID, + createdat: TEST_CREATEDAT, + systemid: TEST_SYSTEMID, + identity: TEST_PARTIAL_IDENTITY, + expiryheight: TEST_EXPIRYHEIGHT, + salt: TEST_SALT, + signdatamap: TEST_SIGNDATA_MAP }); const request = new IdentityUpdateRequest({ details: requestDetails, - systemid: systemID, - signingid: signingID, + systemid: TEST_SYSTEMID, + signingid: TEST_SIGNINGID, signature: "AeNjMwABQSAPBEuajDkRyy+OBJsWmDP3EUoqN9UjCJK9nmoSQiNoZWBK19OgGCYdEqr1CiFfBf8SFHVoUv4r2tb5Q3qsMTrp" }); @@ -186,17 +70,17 @@ describe("IdentityUpdateEnvelope Serialization", () => { }); test("Serialize/Deserialize unsigned IdentityUpdateResponse", () => { - const responseDetails = new IdentityUpdateResponseDetails({ requestid: requestID, createdat: createdAt }); + const responseDetails = new IdentityUpdateResponseDetails({ requestid: TEST_REQUESTID, createdat: TEST_CREATEDAT }); const response = new IdentityUpdateResponse({ details: responseDetails }); testSerialization(response); }); test("Serialize/Deserialize signed IdentityUpdateResponse", () => { - const responseDetails = new IdentityUpdateResponseDetails({ requestid: requestID, createdat: createdAt }); + const responseDetails = new IdentityUpdateResponseDetails({ requestid: TEST_REQUESTID, createdat: TEST_CREATEDAT }); const response = new IdentityUpdateResponse({ details: responseDetails, - systemid: systemID, - signingid: signingID, + systemid: TEST_SYSTEMID, + signingid: TEST_SIGNINGID, signature: "AeNjMwABQSAPBEuajDkRyy+OBJsWmDP3EUoqN9UjCJK9nmoSQiNoZWBK19OgGCYdEqr1CiFfBf8SFHVoUv4r2tb5Q3qsMTrp" }); testSerialization(response); @@ -204,14 +88,14 @@ describe("IdentityUpdateEnvelope Serialization", () => { test("Remove optional fields from unsigned IdentityUpdateRequest", () => { let baseRequestDetailsConfig = { - requestid: requestID, - createdat: createdAt, - systemid: systemID, - identity: partialIdentity, - expiryheight: expiryHeight, + requestid: TEST_REQUESTID, + createdat: TEST_CREATEDAT, + systemid: TEST_SYSTEMID, + identity: TEST_PARTIAL_IDENTITY, + expiryheight: TEST_EXPIRYHEIGHT, responseuris: [ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_REDIRECT), ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_POST)], - signdatamap: signdatamap, - salt + signdatamap: TEST_SIGNDATA_MAP, + salt: TEST_SALT }; const toRemove = ["expiryheight", "responseuris", "signdatamap", "salt", "systemid"]; @@ -230,8 +114,8 @@ describe("IdentityUpdateEnvelope Serialization", () => { }); test("Remove optional fields from IdentityUpdateResponse", () => { - const txidbuf = Buffer.from(txid, 'hex').reverse(); - let baseResponseDetailsConfig = { requestid: requestID, createdat: createdAt, txid: txidbuf, salt }; + const txidbuf = Buffer.from(TEST_TXID, 'hex').reverse(); + let baseResponseDetailsConfig = { requestid: TEST_REQUESTID, createdat: TEST_CREATEDAT, txid: txidbuf, TEST_SALT }; const toRemove = ["txid", "salt"]; @@ -249,13 +133,13 @@ describe("IdentityUpdateEnvelope Serialization", () => { test("Serialize/Deserialize IdentityUpdateRequest to/from JSON", () => { const requestDetails = new IdentityUpdateRequestDetails({ - requestid: requestID, - createdat: createdAt, - systemid: systemID, - identity: partialIdentity, - expiryheight: expiryHeight, - salt: salt, - signdatamap + requestid: TEST_REQUESTID, + createdat: TEST_CREATEDAT, + systemid: TEST_SYSTEMID, + identity: TEST_PARTIAL_IDENTITY, + expiryheight: TEST_EXPIRYHEIGHT, + salt: TEST_SALT, + signdatamap: TEST_SIGNDATA_MAP }); const request = new IdentityUpdateRequest({ details: requestDetails }); @@ -265,19 +149,19 @@ describe("IdentityUpdateEnvelope Serialization", () => { test("Serialize/Deserialize signed IdentityUpdateRequest to/from JSON", () => { const requestDetails = new IdentityUpdateRequestDetails({ - requestid: requestID, - createdat: createdAt, - systemid: systemID, - identity: partialIdentity, - expiryheight: expiryHeight, - salt: salt, - signdatamap + requestid: TEST_REQUESTID, + createdat: TEST_CREATEDAT, + systemid: TEST_SYSTEMID, + identity: TEST_PARTIAL_IDENTITY, + expiryheight: TEST_EXPIRYHEIGHT, + salt: TEST_SALT, + signdatamap: TEST_SIGNDATA_MAP }); const request = new IdentityUpdateRequest({ details: requestDetails, - systemid: systemID, - signingid: signingID, + systemid: TEST_SYSTEMID, + signingid: TEST_SIGNINGID, signature: "AeNjMwABQSAPBEuajDkRyy+OBJsWmDP3EUoqN9UjCJK9nmoSQiNoZWBK19OgGCYdEqr1CiFfBf8SFHVoUv4r2tb5Q3qsMTrp" }); @@ -286,8 +170,8 @@ describe("IdentityUpdateEnvelope Serialization", () => { }); test("Serialize/Deserialize IdentityUpdateResponse to/from JSON", () => { - const txidbuf = Buffer.from(txid, 'hex').reverse(); - let baseResponseDetailsConfig = { requestid: requestID, createdat: createdAt, txid: txidbuf, salt }; + const txidbuf = Buffer.from(TEST_TXID, 'hex').reverse(); + let baseResponseDetailsConfig = { requestid: TEST_REQUESTID, createdat: TEST_CREATEDAT, txid: txidbuf, salt: TEST_SALT }; const responseDetails = new IdentityUpdateResponseDetails(baseResponseDetailsConfig); const response = new IdentityUpdateResponse({ details: responseDetails }); @@ -295,15 +179,15 @@ describe("IdentityUpdateEnvelope Serialization", () => { }); test("Serialize/Deserialize signed IdentityUpdateResponse to/from JSON", () => { - const txidbuf = Buffer.from(txid, 'hex').reverse(); - let baseResponseDetailsConfig = { requestid: requestID, createdat: createdAt, txid: txidbuf, salt }; + const txidbuf = Buffer.from(TEST_TXID, 'hex').reverse(); + let baseResponseDetailsConfig = { requestid: TEST_REQUESTID, createdat: TEST_CREATEDAT, txid: txidbuf, salt: TEST_SALT }; const responseDetails = new IdentityUpdateResponseDetails(baseResponseDetailsConfig); const response = new IdentityUpdateResponse({ details: responseDetails, - systemid: systemID, - signingid: signingID, + systemid: TEST_SYSTEMID, + signingid: TEST_SIGNINGID, signature: "AeNjMwABQSAPBEuajDkRyy+OBJsWmDP3EUoqN9UjCJK9nmoSQiNoZWBK19OgGCYdEqr1CiFfBf8SFHVoUv4r2tb5Q3qsMTrp" }); @@ -312,13 +196,13 @@ describe("IdentityUpdateEnvelope Serialization", () => { test("Serialize/Deserialize IdentityUpdateRequestDetails to/from JSON", () => { const requestDetails = new IdentityUpdateRequestDetails({ - requestid: requestID, - createdat: createdAt, - systemid: systemID, - identity: partialIdentity, - expiryheight: expiryHeight, - salt: salt, - signdatamap + requestid: TEST_REQUESTID, + createdat: TEST_CREATEDAT, + systemid: TEST_SYSTEMID, + identity: TEST_PARTIAL_IDENTITY, + expiryheight: TEST_EXPIRYHEIGHT, + salt: TEST_SALT, + signdatamap: TEST_SIGNDATA_MAP }); testJsonSerialization(requestDetails); @@ -327,26 +211,26 @@ describe("IdentityUpdateEnvelope Serialization", () => { test("Serialize/Deserialize IdentityUpdateResponseDetails to/from JSON", () => { const responseDetails = new IdentityUpdateResponseDetails({ - requestid: requestID, - createdat: createdAt, - txid: Buffer.from(txid, 'hex').reverse(), - salt + requestid: TEST_REQUESTID, + createdat: TEST_CREATEDAT, + txid: Buffer.from(TEST_TXID, 'hex').reverse(), + salt: TEST_SALT }); testJsonSerialization(responseDetails); }); test("Serialize/Deserialize PartialIdentity to/from JSON", () => { - testJsonSerialization(partialIdentity); + testJsonSerialization(TEST_PARTIAL_IDENTITY); }); test("Serialize/Deserialize PartialSignData to/from JSON", () => { - const partialSignData = new PartialSignData(baseSignDataWithMMR); + const partialSignData = new PartialSignData(TEST_BASE_SIGN_DATA_WITH_MMR_DATA); testJsonSerialization(partialSignData); }); test("Serialize/Deserialize PartialMMRData to/from JSON", () => { - testJsonSerialization(mmrData); + testJsonSerialization(TEST_MMR_DATA); }); test("Serialize/Deserialize ResponseUri to/from JSON", () => { @@ -365,32 +249,32 @@ describe("IdentityUpdateEnvelope Serialization", () => { }); test("Deserialize cli identity update details", () => { - const req = IdentityUpdateRequestDetails.fromCLIJson(cliIdUpdateRequestJson); + const req = IdentityUpdateRequestDetails.fromCLIJson(TEST_CLI_ID_UPDATE_REQUEST_JSON); testCLIJsonSerialization(req); }) test("Deserialize cli identity update details", () => { const req = IdentityUpdateRequestDetails.fromCLIJson( - cliIdUpdateRequestJsonHex, + TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, { - systemid: systemID.toAddress() as string, - requestid: requestID.toString(), - createdat: createdAt.toString(), - expiryheight: expiryHeight.toString(), + systemid: TEST_SYSTEMID.toAddress() as string, + requestid: TEST_REQUESTID.toString(), + createdat: TEST_CREATEDAT.toString(), + expiryheight: TEST_EXPIRYHEIGHT.toString(), responseuris: [ ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_REDIRECT).toJson(), ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_POST).toJson() ], - salt: salt.toString('hex'), - txid + salt: TEST_SALT.toString('hex'), + txid: TEST_TXID } ); const env = new IdentityUpdateRequest({ details: req, - signingid: signingID, - systemid: systemID, + signingid: TEST_SIGNINGID, + systemid: TEST_SYSTEMID, signature: "AeNjMwABQSAPBEuajDkRyy+OBJsWmDP3EUoqN9UjCJK9nmoSQiNoZWBK19OgGCYdEqr1CiFfBf8SFHVoUv4r2tb5Q3qsMTrp" }); @@ -407,15 +291,15 @@ describe("IdentityUpdateEnvelope Serialization", () => { test("Deserialize cli identity update details", () => { const detailsProps = { - requestid: requestID.toString(), - createdat: createdAt.toString(), - expiryheight: expiryHeight.toString(), + requestid: TEST_REQUESTID.toString(), + createdat: TEST_CREATEDAT.toString(), + expiryheight: TEST_EXPIRYHEIGHT.toString(), responseuris: [ ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_REDIRECT).toJson(), ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_POST).toJson() ], - salt: salt.toString('hex'), - txid + salt: TEST_SALT.toString('hex'), + txid: TEST_TXID }; expect(IdentityUpdateRequestDetails.fromCLIJson( diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 54bfae1c..348b2b72 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -1,17 +1,21 @@ import { BN } from 'bn.js'; import { - OrdinalVdxfObject, - DataDescriptorOrdinalVdxfObject, - VerusPayInvoiceOrdinalVdxfObject, GeneralTypeOrdinalVdxfObject, - getOrdinalVdxfObjectClassForType -} from '../../vdxf/classes/OrdinalVdxfObject'; - + getOrdinalVdxfObjectClassForType, + IdentityUpdateRequestOrdinalVdxfObject, + IdentityUpdateResponseOrdinalVdxfObject, + OrdinalVdxfObject, +} from '../../vdxf/classes/ordinals'; +import { + DataDescriptorOrdinalVdxfObject +} from '../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject'; import { DataDescriptor, DEST_PKH, TransferDestination } from '../../pbaas'; -import { VerusPayInvoiceDetails } from '../../vdxf/classes'; +import { IdentityUpdateRequestDetails, ResponseUri, VerusPayInvoiceDetails } from '../../vdxf/classes'; import { DEFAULT_VERUS_CHAINID } from '../../constants/pbaas'; import { fromBase58Check } from '../../utils/address'; -import { VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_VERUSPAY_INVOICE } from '../../constants/ordinals'; +import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_VERUSPAY_INVOICE } from '../../constants/ordinals/ordinals'; +import { VerusPayInvoiceOrdinalVdxfObject } from '../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject'; +import { TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, TEST_CREATEDAT, TEST_EXPIRYHEIGHT, TEST_REQUESTID, TEST_SALT, TEST_SYSTEMID, TEST_TXID } from '../constants/fixtures'; describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { function roundTripBuffer(obj: T): T { @@ -32,6 +36,8 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { newObj = VerusPayInvoiceOrdinalVdxfObject.fromJson(json as any); } else if (obj instanceof GeneralTypeOrdinalVdxfObject) { newObj = GeneralTypeOrdinalVdxfObject.fromJson(json); + } else if (obj instanceof IdentityUpdateRequestOrdinalVdxfObject) { + newObj = IdentityUpdateRequestOrdinalVdxfObject.fromJson(json as any); } else { throw new Error("Unrecognized type") } @@ -141,12 +147,56 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(d3.amount.toString()).toEqual(details.amount.toString()); }); + it('should serialize / deserialize a IdentityUpdateRequestOrdinalVdxfObject via buffer', () => { + const details = IdentityUpdateRequestDetails.fromCLIJson( + TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, + { + systemid: TEST_SYSTEMID.toAddress() as string, + requestid: TEST_REQUESTID.toString(), + createdat: TEST_CREATEDAT.toString(), + expiryheight: TEST_EXPIRYHEIGHT.toString(), + responseuris: [ + ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_REDIRECT).toJson(), + ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_POST).toJson() + ], + salt: TEST_SALT.toString('hex'), + txid: TEST_TXID + } + ); + + const obj = new IdentityUpdateRequestOrdinalVdxfObject({ data: details }); + + const round = roundTripBuffer(obj); + expect(round).toBeInstanceOf(IdentityUpdateRequestOrdinalVdxfObject); + + const d2 = (round as IdentityUpdateRequestOrdinalVdxfObject).data; + expect(d2.systemid!.toAddress()).toEqual(details.systemid!.toAddress()); + expect(d2.requestid!.toString()).toEqual(details.requestid!.toString()); + expect(d2.createdat!.toNumber()).toEqual(details.createdat!.toNumber()); + expect(d2.expiryheight!.toString()).toEqual(details.expiryheight!.toString()); + + const json = obj.toJson(); + expect(json.data).toBeDefined(); + const roundJ = roundTripJson(obj); + expect(roundJ).toBeInstanceOf(IdentityUpdateRequestOrdinalVdxfObject); + + const d3 = (roundJ as IdentityUpdateRequestOrdinalVdxfObject).data; + expect(d3.systemid!.toAddress()).toEqual(details.systemid!.toAddress()); + expect(d3.requestid!.toString()).toEqual(details.requestid!.toString()); + expect(d3.createdat!.toNumber()).toEqual(details.createdat!.toNumber()); + expect(d3.expiryheight!.toString()).toEqual(details.expiryheight!.toString()); + }); + it('getOrdinalVdxfObjectClassForType should map to correct classes', () => { expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_DATA_DESCRIPTOR)) .toBe(DataDescriptorOrdinalVdxfObject); expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_VERUSPAY_INVOICE)) .toBe(VerusPayInvoiceOrdinalVdxfObject); - expect(getOrdinalVdxfObjectClassForType(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR)) + expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST)) + .toBe(IdentityUpdateRequestOrdinalVdxfObject); + expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE)) + .toBe(IdentityUpdateResponseOrdinalVdxfObject); + expect(getOrdinalVdxfObjectClassForType(VDXF_OBJECT_RESERVED_BYTE_I_ADDR)) .toBe(GeneralTypeOrdinalVdxfObject); // unrecognized diff --git a/src/constants/ordinals.ts b/src/constants/ordinals.ts deleted file mode 100644 index e5f95b6b..00000000 --- a/src/constants/ordinals.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { BN } from "bn.js"; -import { DataDescriptor, DataDescriptorJson } from "../pbaas"; -import { IdentityUpdateDetailsJson, IdentityUpdateRequestDetails, VerusPayInvoiceDetails } from "../vdxf/classes"; -import { VerusPayInvoiceDetailsJson } from "../vdxf/classes/payment/VerusPayInvoiceDetails"; -import { OrdinalVdxfObjectOrdinalMap } from "../vdxf/classes/OrdinalVdxfObjectOrdinalMap"; -import { DATA_TYPE_OBJECT_DATADESCRIPTOR, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../vdxf"; - -export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails; -export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateDetailsJson; - -export const VDXF_ORDINAL_DATA_DESCRIPTOR = new BN(0, 10); -export const VDXF_ORDINAL_VERUSPAY_INVOICE = new BN(1, 10); -export const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new BN(3, 10); - -OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid); -OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid); \ No newline at end of file diff --git a/src/constants/ordinals/ordinals.ts b/src/constants/ordinals/ordinals.ts new file mode 100644 index 00000000..0feb4641 --- /dev/null +++ b/src/constants/ordinals/ordinals.ts @@ -0,0 +1,9 @@ +import { BN } from "bn.js"; + +export const VDXF_OBJECT_RESERVED_BYTE_I_ADDR = new BN(102, 10); +export const VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new BN(103, 10); +export const VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = new BN(104, 10); +export const VDXF_ORDINAL_DATA_DESCRIPTOR = new BN(0, 10); +export const VDXF_ORDINAL_VERUSPAY_INVOICE = new BN(1, 10); +export const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new BN(3, 10); +export const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new BN(4, 10); \ No newline at end of file diff --git a/src/constants/ordinals/register.ts b/src/constants/ordinals/register.ts new file mode 100644 index 00000000..33a07b81 --- /dev/null +++ b/src/constants/ordinals/register.ts @@ -0,0 +1,14 @@ +import { DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../../vdxf"; +import { DataDescriptorOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject"; +import { IdentityUpdateRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject"; +import { IdentityUpdateResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject"; +import { OrdinalVdxfObjectOrdinalMap } from "../../vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap"; +import { VerusPayInvoiceOrdinalVdxfObject } from "../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject"; +import { VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_VERUSPAY_INVOICE } from "./ordinals"; + +export const registerOrdinals = () => { + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid, VerusPayInvoiceOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject, false); +} \ No newline at end of file diff --git a/src/constants/ordinals/types.ts b/src/constants/ordinals/types.ts new file mode 100644 index 00000000..c3417f4d --- /dev/null +++ b/src/constants/ordinals/types.ts @@ -0,0 +1,7 @@ +import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; +import { IdentityUpdateDetailsJson, IdentityUpdateRequestDetails, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; +import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; + +export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails; +export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateDetailsJson | IdentityUpdateResponseDetailsJson; + diff --git a/src/index.ts b/src/index.ts index 98a96389..10d23719 100644 --- a/src/index.ts +++ b/src/index.ts @@ -19,7 +19,11 @@ export * from './pbaas/index' export * from './pbaas/PartialIdentity' export * from './pbaas/PartialMMRData' export * from './pbaas/PartialSignData' + export * from './constants/pbaas' +export * from './constants/ordinals/register' +export * from './constants/ordinals/ordinals' +export * from './constants/ordinals/types' export * from './identity/IdentityDefinition' export * from './currency/CurrencyDefinition' diff --git a/src/vdxf/classes/ResponseUri.ts b/src/vdxf/classes/ResponseUri.ts index f872feb2..e33cb0f8 100644 --- a/src/vdxf/classes/ResponseUri.ts +++ b/src/vdxf/classes/ResponseUri.ts @@ -44,7 +44,7 @@ export class ResponseUri implements SerializableEntity { getByteLength(): number { let length = 0; - length += varint.encodingLength(this.type); + length += varuint.encodingLength(this.type.toNumber()); let uriBufLen = this.uri.length; @@ -57,7 +57,7 @@ export class ResponseUri implements SerializableEntity { toBuffer(): Buffer { const writer = new bufferutils.BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.type); + writer.writeCompactSize(this.type.toNumber()); writer.writeVarSlice(this.uri); @@ -67,7 +67,7 @@ export class ResponseUri implements SerializableEntity { fromBuffer(buffer: Buffer, offset?: number): number { const reader = new bufferutils.BufferReader(buffer, offset); - this.type = reader.readVarInt(); + this.type = new BN(reader.readCompactSize()); this.uri = reader.readVarSlice(); diff --git a/src/vdxf/classes/envelope/GenericEnvelope.ts b/src/vdxf/classes/envelope/GenericEnvelope.ts index 17051fef..7f61e432 100644 --- a/src/vdxf/classes/envelope/GenericEnvelope.ts +++ b/src/vdxf/classes/envelope/GenericEnvelope.ts @@ -6,7 +6,7 @@ import bufferutils from "../../../utils/bufferutils"; import base64url from "base64url"; import { BN } from 'bn.js'; import { BigNumber } from "../../../utils/types/BigNumber"; -import { OrdinalVdxfObject, OrdinalVdxfObjectJson } from "../OrdinalVdxfObject"; +import { OrdinalVdxfObject, OrdinalVdxfObjectJson } from "../ordinals/OrdinalVdxfObject"; import varuint from "../../../utils/varuint"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import { createHash } from "crypto"; diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index 0707cdf7..9824859e 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -31,6 +31,8 @@ export * from './ResponseUri'; export * from './request/GenericRequest'; export * from './response/GenericResponse'; +export * from './ordinals'; + export { Hash160 } from './Hash160' export { RedirectUri, diff --git a/src/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.ts new file mode 100644 index 00000000..a0d57eb2 --- /dev/null +++ b/src/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.ts @@ -0,0 +1,29 @@ +import { VDXF_ORDINAL_DATA_DESCRIPTOR } from "../../../constants/ordinals/ordinals"; +import { DataDescriptor, DataDescriptorJson } from "../../../pbaas"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; + +export class DataDescriptorOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: DataDescriptor; + + constructor( + request: OrdinalVdxfObjectInterfaceTemplate = { + data: new DataDescriptor() + } + ) { + super( + { + type: VDXF_ORDINAL_DATA_DESCRIPTOR, + data: request.data + }, + DataDescriptor + ); + } + + static fromJson(details: OrdinalVdxfObjectJsonTemplate): DataDescriptorOrdinalVdxfObject { + return new DataDescriptorOrdinalVdxfObject({ + data: DataDescriptor.fromJson(details.data) + }) + } +} \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.ts new file mode 100644 index 00000000..35e070ce --- /dev/null +++ b/src/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.ts @@ -0,0 +1,29 @@ +import { VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST } from "../../../constants/ordinals/ordinals"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson } from "../identity/IdentityUpdateRequestDetails"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; + +export class IdentityUpdateRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: IdentityUpdateRequestDetails; + + constructor( + request: OrdinalVdxfObjectInterfaceTemplate = { + data: new IdentityUpdateRequestDetails() + } + ) { + super( + { + type: VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, + data: request.data + }, + IdentityUpdateRequestDetails + ); + } + + static fromJson(details: OrdinalVdxfObjectJsonTemplate): IdentityUpdateRequestOrdinalVdxfObject { + return new IdentityUpdateRequestOrdinalVdxfObject({ + data: IdentityUpdateRequestDetails.fromJson(details.data) + }) + } +} \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.ts new file mode 100644 index 00000000..cef03bc2 --- /dev/null +++ b/src/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.ts @@ -0,0 +1,29 @@ +import { VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE } from "../../../constants/ordinals/ordinals"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson } from "../identity/IdentityUpdateResponseDetails"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; + +export class IdentityUpdateResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: IdentityUpdateResponseDetails; + + constructor( + response: OrdinalVdxfObjectInterfaceTemplate = { + data: new IdentityUpdateResponseDetails() + } + ) { + super( + { + type: VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, + data: response.data + }, + IdentityUpdateResponseDetails + ); + } + + static fromJson(details: OrdinalVdxfObjectJsonTemplate): IdentityUpdateResponseOrdinalVdxfObject { + return new IdentityUpdateResponseOrdinalVdxfObject({ + data: IdentityUpdateResponseDetails.fromJson(details.data) + }) + } +} \ No newline at end of file diff --git a/src/vdxf/classes/OrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/OrdinalVdxfObject.ts similarity index 65% rename from src/vdxf/classes/OrdinalVdxfObject.ts rename to src/vdxf/classes/ordinals/OrdinalVdxfObject.ts index d7136fd7..2bda5419 100644 --- a/src/vdxf/classes/OrdinalVdxfObject.ts +++ b/src/vdxf/classes/ordinals/OrdinalVdxfObject.ts @@ -1,16 +1,15 @@ -import bufferutils from "../../utils/bufferutils"; +import bufferutils from "../../../utils/bufferutils"; import { BN } from 'bn.js'; -import { BigNumber } from "../../utils/types/BigNumber"; -import { SerializableDataEntity, SerializableEntity } from "../../utils/types/SerializableEntity"; -import varuint from "../../utils/varuint"; -import { fromBase58Check, getDataKey, toBase58Check, toIAddress } from "../../utils/address"; -import varint from "../../utils/varint"; -import { HASH160_BYTE_LENGTH, I_ADDR_VERSION, NULL_ADDRESS } from "../../constants/vdxf"; -import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; -import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "./payment/VerusPayInvoiceDetails"; +import { BigNumber } from "../../../utils/types/BigNumber"; +import { SerializableDataEntity, SerializableEntity } from "../../../utils/types/SerializableEntity"; +import varuint from "../../../utils/varuint"; +import { fromBase58Check, getDataKey, toBase58Check, toIAddress } from "../../../utils/address"; +import varint from "../../../utils/varint"; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION, NULL_ADDRESS } from "../../../constants/vdxf"; import { OrdinalVdxfObjectOrdinalMap } from "./OrdinalVdxfObjectOrdinalMap"; -import { DEFAULT_VERUS_CHAINNAME } from "../../constants/pbaas"; -import { VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_VERUSPAY_INVOICE, OrdinalVdxfObjectReservedData, OrdinalVdxfObjectReservedDataJson } from "../../constants/ordinals"; +import { DEFAULT_VERUS_CHAINNAME } from "../../../constants/pbaas"; +import { OrdinalVdxfObjectReservedData, OrdinalVdxfObjectReservedDataJson } from "../../../constants/ordinals/types"; +import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY, VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING, VDXF_ORDINAL_DATA_DESCRIPTOR } from "../../../constants/ordinals/ordinals"; export interface OrdinalVdxfObjectInterfaceTemplate { version?: BigNumber; @@ -36,14 +35,20 @@ export type OrdinalVdxfObjectDataClass = new (...args: any[]) => OrdinalVdxfObje export type OrdinalVdxfObjectClass = new (...args: any[]) => OrdinalVdxfObject; export const getOrdinalVdxfObjectClassForType = (type: BigNumber): OrdinalVdxfObjectClass => { - if (type.eq(VDXF_ORDINAL_DATA_DESCRIPTOR)) return DataDescriptorOrdinalVdxfObject; - else if (type.eq(VDXF_ORDINAL_VERUSPAY_INVOICE)) return VerusPayInvoiceOrdinalVdxfObject; - else if ( - type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR) || - type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING) || - type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY) + if (OrdinalVdxfObjectOrdinalMap.isRecognizedOrdinal(type.toNumber())) { + const key = OrdinalVdxfObjectOrdinalMap.getVdxfKeyForOrdinal(type.toNumber()); + + if (OrdinalVdxfObjectOrdinalMap.hasClassForVdxfKey(key)) { + return OrdinalVdxfObjectOrdinalMap.getClassForVdxfKey(OrdinalVdxfObjectOrdinalMap.getVdxfKeyForOrdinal(type.toNumber())); + } else { + throw new Error("No class found for " + key) + } + } else if ( + type.eq(VDXF_OBJECT_RESERVED_BYTE_I_ADDR) || + type.eq(VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING) || + type.eq(VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY) ) return GeneralTypeOrdinalVdxfObject; - else throw new Error("Unrecognized vdxf ordinal object type"); + else throw new Error("Unrecognized vdxf ordinal object type " + type.toNumber()); } export class OrdinalVdxfObject implements SerializableEntity { @@ -57,17 +62,13 @@ export class OrdinalVdxfObject implements SerializableEntity { static VERSION_LAST = new BN(1, 10) static VERSION_CURRENT = new BN(1, 10) - static VDXF_OBJECT_RESERVED_BYTE_I_ADDR = new BN(102, 10); - static VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new BN(103, 10); - static VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = new BN(104, 10); - constructor( request: OrdinalVdxfObjectInterfaceTemplate = { type: VDXF_ORDINAL_DATA_DESCRIPTOR } ) { if (request.key) { - this.type = OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR; + this.type = VDXF_OBJECT_RESERVED_BYTE_I_ADDR; this.key = request.key; if (request.data) { @@ -84,15 +85,15 @@ export class OrdinalVdxfObject implements SerializableEntity { } isDefinedByVdxfKey() { - return this.type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR); + return this.type.eq(VDXF_OBJECT_RESERVED_BYTE_I_ADDR); } isDefinedByTextVdxfKey() { - return this.type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING); + return this.type.eq(VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING); } isDefinedByCurrencyOrId() { - return this.type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY); + return this.type.eq(VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY); } isDefinedByCustomKey() { @@ -243,7 +244,7 @@ export class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements S constructor( request: OrdinalVdxfObjectInterfaceTemplate = { - type: OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR, + type: VDXF_OBJECT_RESERVED_BYTE_I_ADDR, data: Buffer.alloc(0), key: NULL_ADDRESS } @@ -273,84 +274,4 @@ export class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements S data: details.data ? Buffer.from(details.data as string, 'hex') : undefined }); } -} - -export class SerializableEntityOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { - data: OrdinalVdxfObjectReservedData; - entity: OrdinalVdxfObjectDataClass; - - constructor( - request: OrdinalVdxfObjectInterfaceTemplate, - entity: OrdinalVdxfObjectDataClass - ) { - if (!request || !request.type) throw new Error("Expected request with data and type") - - super({ - type: request.type - }); - - this.entity = entity; - this.data = request.data ? request.data : new entity(); - } - - getDataByteLength(): number { - return this.data.getByteLength() - } - - toDataBuffer(): Buffer { - return this.data.toBuffer(); - } - - fromDataBuffer(buffer: Buffer): void { - this.data = new this.entity(); - this.data.fromBuffer(buffer); - } -} - -export class DataDescriptorOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: DataDescriptor; - - constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { - data: new DataDescriptor() - } - ) { - super( - { - type: VDXF_ORDINAL_DATA_DESCRIPTOR, - data: request.data - }, - DataDescriptor - ); - } - - static fromJson(details: OrdinalVdxfObjectJsonTemplate): DataDescriptorOrdinalVdxfObject { - return new DataDescriptorOrdinalVdxfObject({ - data: DataDescriptor.fromJson(details.data) - }) - } -} - -export class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: VerusPayInvoiceDetails; - - constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { - data: new VerusPayInvoiceDetails() - } - ) { - super( - { - type: VDXF_ORDINAL_VERUSPAY_INVOICE, - data: request.data - }, - VerusPayInvoiceDetails - ); - } - - static fromJson(details: OrdinalVdxfObjectJsonTemplate): VerusPayInvoiceOrdinalVdxfObject { - return new VerusPayInvoiceOrdinalVdxfObject({ - data: VerusPayInvoiceDetails.fromJson(details.data) - }) - } } \ No newline at end of file diff --git a/src/vdxf/classes/OrdinalVdxfObjectOrdinalMap.ts b/src/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.ts similarity index 57% rename from src/vdxf/classes/OrdinalVdxfObjectOrdinalMap.ts rename to src/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.ts index a187ce63..ff60e306 100644 --- a/src/vdxf/classes/OrdinalVdxfObjectOrdinalMap.ts +++ b/src/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.ts @@ -1,22 +1,29 @@ +import { OrdinalVdxfObjectClass } from "./OrdinalVdxfObject"; + // Singleton class that exists to create a bidirectional map of ordinals <-> vdxf keys class _OrdinalVdxfObjectOrdinalMap { private keyToOrdinalMap: Map; private ordinalToKeyMap: Map; + keyToOrdinalClass: Map; constructor() { this.keyToOrdinalMap = new Map(); this.ordinalToKeyMap = new Map(); + this.keyToOrdinalClass = new Map(); } private updateOrdinalToKeyMap() { this.ordinalToKeyMap = new Map(Array.from(this.keyToOrdinalMap, a => a.reverse() as [number,string])); } - registerOrdinal(ordinal: number, vdxfKey: string): void { - if (this.isRecognizedOrdinal(ordinal)) throw new Error("Cannot register new ordinal for existing vdxfkey"); - if (this.vdxfKeyHasOrdinal(vdxfKey)) throw new Error("Cannot register new key for existing ordinal"); + registerOrdinal(ordinal: number, vdxfKey: string, ordinalClass: OrdinalVdxfObjectClass, throwOnDuplicate: boolean = true): void { + if (this.isRecognizedOrdinal(ordinal) || this.vdxfKeyHasOrdinal(vdxfKey)) { + if (throwOnDuplicate) throw new Error("Cannot overwrite existing ordinal"); + else return; + } this.keyToOrdinalMap.set(vdxfKey, ordinal); + this.keyToOrdinalClass.set(vdxfKey, ordinalClass); this.updateOrdinalToKeyMap(); } @@ -28,6 +35,10 @@ class _OrdinalVdxfObjectOrdinalMap { return this.keyToOrdinalMap.has(vdxfKey); } + hasClassForVdxfKey(vdxfKey: string): boolean { + return this.keyToOrdinalClass.has(vdxfKey); + } + getOrdinalForVdxfKey(vdxfKey: string): number { return this.keyToOrdinalMap.get(vdxfKey); } @@ -35,6 +46,10 @@ class _OrdinalVdxfObjectOrdinalMap { getVdxfKeyForOrdinal(ordinal: number): string { return this.ordinalToKeyMap.get(ordinal); } + + getClassForVdxfKey(vdxfKey: string): OrdinalVdxfObjectClass { + return this.keyToOrdinalClass.get(vdxfKey); + } } export const OrdinalVdxfObjectOrdinalMap = new _OrdinalVdxfObjectOrdinalMap(); \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.ts new file mode 100644 index 00000000..c89c1aef --- /dev/null +++ b/src/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.ts @@ -0,0 +1,35 @@ +import { OrdinalVdxfObjectReservedData } from "../../../constants/ordinals/types"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObject, OrdinalVdxfObjectDataClass, OrdinalVdxfObjectInterfaceTemplate } from "./OrdinalVdxfObject"; + +export class SerializableEntityOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { + data: OrdinalVdxfObjectReservedData; + entity: OrdinalVdxfObjectDataClass; + + constructor( + request: OrdinalVdxfObjectInterfaceTemplate, + entity: OrdinalVdxfObjectDataClass + ) { + if (!request || !request.type) throw new Error("Expected request with data and type") + + super({ + type: request.type + }); + + this.entity = entity; + this.data = request.data ? request.data : new entity(); + } + + getDataByteLength(): number { + return this.data.getByteLength() + } + + toDataBuffer(): Buffer { + return this.data.toBuffer(); + } + + fromDataBuffer(buffer: Buffer): void { + this.data = new this.entity(); + this.data.fromBuffer(buffer); + } +} \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.ts new file mode 100644 index 00000000..4841bfc9 --- /dev/null +++ b/src/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.ts @@ -0,0 +1,29 @@ +import { VDXF_ORDINAL_VERUSPAY_INVOICE } from "../../../constants/ordinals/ordinals"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "../payment/VerusPayInvoiceDetails"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; + +export class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: VerusPayInvoiceDetails; + + constructor( + request: OrdinalVdxfObjectInterfaceTemplate = { + data: new VerusPayInvoiceDetails() + } + ) { + super( + { + type: VDXF_ORDINAL_VERUSPAY_INVOICE, + data: request.data + }, + VerusPayInvoiceDetails + ); + } + + static fromJson(details: OrdinalVdxfObjectJsonTemplate): VerusPayInvoiceOrdinalVdxfObject { + return new VerusPayInvoiceOrdinalVdxfObject({ + data: VerusPayInvoiceDetails.fromJson(details.data) + }) + } +} \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/index.ts b/src/vdxf/classes/ordinals/index.ts new file mode 100644 index 00000000..22b38b93 --- /dev/null +++ b/src/vdxf/classes/ordinals/index.ts @@ -0,0 +1,11 @@ +import { registerOrdinals } from '../../../constants/ordinals/register' + +export * from './DataDescriptorOrdinalVdxfObject' +export * from './IdentityUpdateRequestOrdinalVdxfObject' +export * from './IdentityUpdateResponseOrdinalVdxfObject' +export * from './OrdinalVdxfObject' +export * from './OrdinalVdxfObjectOrdinalMap' +export * from './SerializableEntityOrdinalVdxfObject' +export * from './VerusPayInvoiceOrdinalVdxfObject' + +registerOrdinals(); \ No newline at end of file diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index 34f10d7f..1b1c6a1e 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -50,6 +50,16 @@ export const IDENTITY_UPDATE_REQUEST_VDXF_KEY: VDXFKeyInterface = { "vdxfid": "iQJAPr53wZnjLyGpGdjiNZhSwSTXSfyoYy" }; +export const IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface = { + "hash160result": "4cedf62ce2a66dbb228ba8abe7a10bbffe35db93", + "indexid": "xMnRq7oBMqxzdJqzFniFTtfKyf6qh3BVPs", + "qualifiedname": { + "name": "vrsc::identity.update.request.details", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iGxKNKN6WXkL18xxQ746VW8nx15prPMP7L" +} + export const IDENTITY_UPDATE_RESPONSE_VDXF_KEY: VDXFKeyInterface = { "hash160result": "667802c74fbf3dd3a9693bb9aec9bef1250b2b14", "indexid": "xA9GyS1bt1WGERamNVqVrhuGvGJeYuWyNk", @@ -60,6 +70,16 @@ export const IDENTITY_UPDATE_RESPONSE_VDXF_KEY: VDXFKeyInterface = { "vdxfid": "i5KAWdaX2hHbcFhjWpBLtKNjtcHdeQFjuX" }; +export const IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY: VDXFKeyInterface = { + "hash160result": "4f9a304beccceaa5692247c0d5789814a24f66be", + "indexid": "xRfNr2GNGNEnckSRSPZe4TgbZRKqZfLxqk", + "qualifiedname": { + "name": "vrsc::identity.update.response.details", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iLqGPDqHR427zaZPahuV65A4XmJpiqb9eF" +} + export const IDENTITY_AUTH_SIG_VDXF_KEY: VDXFKeyInterface = { vdxfid: "iPi1DPgDDu7hP1mAp5xJ8rHBWwXSzc6yA8", hash160result: "06d4b963da3dcf17f00905b0720f7a4c241defdd", From 8445bc77a2fe43184b80aa194f5854c3755fb4a3 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Thu, 30 Oct 2025 18:29:05 +0100 Subject: [PATCH 037/123] Standardize naming where possible in new OrdinalVdxf objects --- dist/pbaas/PartialSignData.d.ts | 48 ++-- dist/pbaas/PartialSignData.js | 220 +++++++------- .../vdxf/classes/VerifiableSignatureData.d.ts | 8 +- dist/vdxf/classes/VerifiableSignatureData.js | 32 +-- .../IdentityUpdateRequestDetails.d.ts | 24 +- .../identity/IdentityUpdateRequestDetails.js | 130 ++++----- .../IdentityUpdateResponseDetails.d.ts | 8 +- .../identity/IdentityUpdateResponseDetails.js | 30 +- src/__tests__/constants/fixtures.ts | 16 +- src/__tests__/pbaas/partialsigndata.test.ts | 30 +- src/__tests__/vdxf/genericrequest.test.ts | 4 +- src/__tests__/vdxf/genericresponse.test.ts | 4 +- .../vdxf/identityupdateenvelope.test.ts | 207 +++++--------- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 62 +++- src/pbaas/Identity.ts | 1 - src/pbaas/PartialSignData.ts | 268 +++++++++--------- src/vdxf/classes/VerifiableSignatureData.ts | 40 +-- .../identity/IdentityUpdateRequestDetails.ts | 152 +++++----- .../identity/IdentityUpdateResponseDetails.ts | 38 +-- 19 files changed, 643 insertions(+), 679 deletions(-) diff --git a/dist/pbaas/PartialSignData.d.ts b/dist/pbaas/PartialSignData.d.ts index 01076c18..44a583dd 100644 --- a/dist/pbaas/PartialSignData.d.ts +++ b/dist/pbaas/PartialSignData.d.ts @@ -9,15 +9,15 @@ import { VdxfUniValue, VdxfUniValueJson } from './VdxfUniValue'; export type PartialSignDataInitData = { flags?: BigNumber; address?: IdentityID | KeyID; - prefixstring?: Buffer; - vdxfkeys?: Array; - vdxfkeynames?: Array; - boundhashes?: Array; - hashtype?: BigNumber; - encrypttoaddress?: SaplingPaymentAddress; - createmmr?: boolean; + prefixString?: Buffer; + vdxfKeys?: Array; + vdxfKeyNames?: Array; + boundHashes?: Array; + hashType?: BigNumber; + encryptToAddress?: SaplingPaymentAddress; + createMMR?: boolean; signature?: Buffer; - datatype?: BigNumber; + dataType?: BigNumber; data?: Buffer | PartialMMRData | VdxfUniValue; }; export type PartialSignDataJson = { @@ -51,15 +51,15 @@ type SignDataKeys = { }; type BaseFields = { address?: string; - prefixstring?: string; - vdxfkeys?: Array; - vdxfkeynames?: Array; - boundhashes?: Array; - hashtype?: string; - encrypttoaddress?: string; - createmmr?: boolean; + prefixString?: string; + vdxfKeys?: Array; + vdxfKeyNames?: Array; + boundHashes?: Array; + hashType?: string; + encryptToAddress?: string; + createMMR?: boolean; signature?: string; - datatype?: string; + dataType?: string; data?: string; }; type MMRFields = { @@ -71,15 +71,15 @@ export type PartialSignDataCLIJson = ((AtLeastOne> export declare class PartialSignData implements SerializableEntity { flags: BigNumber; address?: IdentityID | KeyID; - prefixstring?: Buffer; - vdxfkeys?: Array; - vdxfkeynames?: Array; - boundhashes?: Array; - hashtype?: BigNumber; - encrypttoaddress?: SaplingPaymentAddress; - createmmr?: boolean; + prefixString?: Buffer; + vdxfKeys?: Array; + vdxfKeyNames?: Array; + boundHashes?: Array; + hashType?: BigNumber; + encryptToAddress?: SaplingPaymentAddress; + createMMR?: boolean; signature?: Buffer; - datatype?: BigNumber; + dataType?: BigNumber; data?: Buffer | PartialMMRData | VdxfUniValue; static CONTAINS_DATA: import("bn.js"); static CONTAINS_ADDRESS: import("bn.js"); diff --git a/dist/pbaas/PartialSignData.js b/dist/pbaas/PartialSignData.js index 80208de0..327f9053 100644 --- a/dist/pbaas/PartialSignData.js +++ b/dist/pbaas/PartialSignData.js @@ -18,52 +18,52 @@ const { BufferReader, BufferWriter } = bufferutils_1.default; class PartialSignData { constructor(data) { this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0"); - this.createmmr = data && data.createmmr ? data.createmmr : false; + this.createMMR = data && data.createMMR ? data.createMMR : false; if (data === null || data === void 0 ? void 0 : data.address) { if (!this.containsAddress()) this.toggleContainsAddress(); this.address = data.address; } - if (data === null || data === void 0 ? void 0 : data.prefixstring) { + if (data === null || data === void 0 ? void 0 : data.prefixString) { if (!this.containsPrefixString()) this.toggleContainsPrefixString(); - this.prefixstring = data.prefixstring; + this.prefixString = data.prefixString; } - if (data === null || data === void 0 ? void 0 : data.vdxfkeys) { + if (data === null || data === void 0 ? void 0 : data.vdxfKeys) { if (!this.containsVdxfKeys()) this.toggleContainsVdxfKeys(); - this.vdxfkeys = data.vdxfkeys; + this.vdxfKeys = data.vdxfKeys; } - if (data === null || data === void 0 ? void 0 : data.vdxfkeynames) { + if (data === null || data === void 0 ? void 0 : data.vdxfKeyNames) { if (!this.containsVdxfKeyNames()) this.toggleContainsVdxfKeyNames(); - this.vdxfkeynames = data.vdxfkeynames; + this.vdxfKeyNames = data.vdxfKeyNames; } - if (data === null || data === void 0 ? void 0 : data.hashtype) { - this.hashtype = data.hashtype; + if (data === null || data === void 0 ? void 0 : data.hashType) { + this.hashType = data.hashType; } else - this.hashtype = pbaas_1.DEFAULT_HASH_TYPE; - if (data === null || data === void 0 ? void 0 : data.boundhashes) { + this.hashType = pbaas_1.DEFAULT_HASH_TYPE; + if (data === null || data === void 0 ? void 0 : data.boundHashes) { if (!this.containsBoundhashes()) this.toggleContainsBoundHashes(); - this.boundhashes = data.boundhashes; + this.boundHashes = data.boundHashes; } - if (data === null || data === void 0 ? void 0 : data.encrypttoaddress) { + if (data === null || data === void 0 ? void 0 : data.encryptToAddress) { if (!this.containsEncrypttoAddress()) this.toggleContainsEncryptToAddress(); - this.encrypttoaddress = data.encrypttoaddress; + this.encryptToAddress = data.encryptToAddress; } if (data === null || data === void 0 ? void 0 : data.signature) { if (!this.containsCurrentSig()) this.toggleContainsCurrentSig(); this.signature = data.signature; } - if ((data === null || data === void 0 ? void 0 : data.datatype) && (data === null || data === void 0 ? void 0 : data.data)) { + if ((data === null || data === void 0 ? void 0 : data.dataType) && (data === null || data === void 0 ? void 0 : data.data)) { if (!this.containsData()) this.toggleContainsData(); this.data = data.data; - this.datatype = data.datatype; + this.dataType = data.dataType; } } containsData() { @@ -115,10 +115,10 @@ class PartialSignData { this.flags = this.flags.xor(PartialSignData.CONTAINS_BOUNDHASHES); } isMMRData() { - return this.datatype && this.datatype.eq(pbaas_1.DATA_TYPE_MMRDATA); + return this.dataType && this.dataType.eq(pbaas_1.DATA_TYPE_MMRDATA); } isVdxfData() { - return this.datatype && this.datatype.eq(pbaas_1.DATA_TYPE_VDXFDATA); + return this.dataType && this.dataType.eq(pbaas_1.DATA_TYPE_VDXFDATA); } getPartialSignDataByteLength() { function calculateVectorLength(items, getItemLength, varlength = true) { @@ -137,26 +137,26 @@ class PartialSignData { if (this.containsAddress()) length += this.address.getByteLength(); if (this.containsPrefixString()) { - const prefixLen = this.prefixstring.length; + const prefixLen = this.prefixString.length; length += varuint_1.default.encodingLength(prefixLen); length += prefixLen; } if (this.containsVdxfKeys()) { - length += calculateVectorLength(this.vdxfkeys, (vdxfkey) => vdxfkey.getByteLength(), false); + length += calculateVectorLength(this.vdxfKeys, (vdxfkey) => vdxfkey.getByteLength(), false); } if (this.containsVdxfKeyNames()) { - length += calculateVectorLength(this.vdxfkeynames, (vdxfname) => vdxfname.length); + length += calculateVectorLength(this.vdxfKeyNames, (vdxfname) => vdxfname.length); } - length += varint_1.default.encodingLength(this.hashtype); + length += varint_1.default.encodingLength(this.hashType); if (this.containsBoundhashes()) { - length += calculateVectorLength(this.boundhashes, (hash) => hash.length); + length += calculateVectorLength(this.boundHashes, (hash) => hash.length); } if (this.containsEncrypttoAddress()) { - length += this.encrypttoaddress.getByteLength(); + length += this.encryptToAddress.getByteLength(); } length += 1; // Createmmr boolean value if (this.containsData()) { - length += varint_1.default.encodingLength(this.datatype); + length += varint_1.default.encodingLength(this.dataType); if (this.isMMRData()) { length += this.data.getByteLength(); } @@ -192,33 +192,33 @@ class PartialSignData { throw new Error("Unrecognized address version"); } if (this.containsPrefixString()) { - this.prefixstring = reader.readVarSlice(); + this.prefixString = reader.readVarSlice(); } if (this.containsVdxfKeys()) { const count = reader.readCompactSize(); - this.vdxfkeys = []; + this.vdxfKeys = []; for (let i = 0; i < count; i++) { const varSlice = reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH); const idId = new IdentityID_1.IdentityID(); idId.fromBuffer(varSlice); - this.vdxfkeys.push(idId); + this.vdxfKeys.push(idId); } } if (this.containsVdxfKeyNames()) { - this.vdxfkeynames = reader.readVector(); + this.vdxfKeyNames = reader.readVector(); } - this.hashtype = reader.readVarInt(); + this.hashType = reader.readVarInt(); if (this.containsBoundhashes()) { - this.boundhashes = reader.readVector(); + this.boundHashes = reader.readVector(); } if (this.containsEncrypttoAddress()) { const saplingAddr = new SaplingPaymentAddress_1.SaplingPaymentAddress(); reader.offset = saplingAddr.fromBuffer(reader.buffer, reader.offset); - this.encrypttoaddress = saplingAddr; + this.encryptToAddress = saplingAddr; } - this.createmmr = !!reader.readUInt8(); + this.createMMR = !!reader.readUInt8(); if (this.containsData()) { - this.datatype = reader.readVarInt(); + this.dataType = reader.readVarInt(); if (this.isMMRData()) { const partialMMRData = new PartialMMRData_1.PartialMMRData(); reader.offset = partialMMRData.fromBuffer(reader.buffer, reader.offset); @@ -251,51 +251,51 @@ class PartialSignData { } // Prefix string if (this.containsPrefixString()) { - if (!this.prefixstring) { + if (!this.prefixString) { throw new Error("Prefix string is required but not provided"); } - writer.writeVarSlice(this.prefixstring); + writer.writeVarSlice(this.prefixString); } // VDXF keys if (this.containsVdxfKeys()) { - if (!this.vdxfkeys) { + if (!this.vdxfKeys) { throw new Error("VDXF keys are required but not provided"); } - writer.writeCompactSize(this.vdxfkeys.length); - for (const vdxfkey of this.vdxfkeys) { + writer.writeCompactSize(this.vdxfKeys.length); + for (const vdxfkey of this.vdxfKeys) { writer.writeSlice(vdxfkey.toBuffer()); } } // VDXF key names if (this.containsVdxfKeyNames()) { - if (!this.vdxfkeynames) { + if (!this.vdxfKeyNames) { throw new Error("VDXF key names are required but not provided"); } - writer.writeVector(this.vdxfkeynames); + writer.writeVector(this.vdxfKeyNames); } - writer.writeVarInt(this.hashtype); + writer.writeVarInt(this.hashType); // Bound hashes if (this.containsBoundhashes()) { - if (!this.boundhashes) { + if (!this.boundHashes) { throw new Error("Bound hashes are required but not provided"); } - writer.writeVector(this.boundhashes); + writer.writeVector(this.boundHashes); } // Encrypt-to address (Sapling) if (this.containsEncrypttoAddress()) { - if (!this.encrypttoaddress || !(this.encrypttoaddress instanceof SaplingPaymentAddress_1.SaplingPaymentAddress)) { + if (!this.encryptToAddress || !(this.encryptToAddress instanceof SaplingPaymentAddress_1.SaplingPaymentAddress)) { throw new Error("Sapling payment address is required but not provided"); } - writer.writeSlice(this.encrypttoaddress.toBuffer()); + writer.writeSlice(this.encryptToAddress.toBuffer()); } - // createmmr (boolean) - writer.writeUInt8(this.createmmr ? 1 : 0); + // createMMR (boolean) + writer.writeUInt8(this.createMMR ? 1 : 0); // Data if (this.containsData()) { - if (!this.data || !this.datatype) { + if (!this.data || !this.dataType) { throw new Error("Data is required but not provided"); } - writer.writeVarInt(this.datatype); + writer.writeVarInt(this.dataType); if (this.isMMRData()) { const mmrData = this.data; writer.writeSlice(mmrData.toBuffer()); @@ -314,15 +314,15 @@ class PartialSignData { return { flags: this.flags ? this.flags.toString(10) : undefined, address: this.address ? this.address.toAddress() : undefined, - prefixstring: this.prefixstring ? this.prefixstring.toString('utf-8') : undefined, - vdxfkeys: this.vdxfkeys ? this.vdxfkeys.map(x => x.toAddress()) : undefined, - vdxfkeynames: this.vdxfkeynames ? this.vdxfkeynames.map(x => x.toString('utf-8')) : undefined, - boundhashes: this.boundhashes ? this.boundhashes.map(x => x.toString('hex')) : undefined, - hashtype: this.hashtype ? this.hashtype.toString(10) : undefined, - encrypttoaddress: this.encrypttoaddress ? this.encrypttoaddress.toAddressString() : undefined, - createmmr: this.createmmr, + prefixstring: this.prefixString ? this.prefixString.toString('utf-8') : undefined, + vdxfkeys: this.vdxfKeys ? this.vdxfKeys.map(x => x.toAddress()) : undefined, + vdxfkeynames: this.vdxfKeyNames ? this.vdxfKeyNames.map(x => x.toString('utf-8')) : undefined, + boundhashes: this.boundHashes ? this.boundHashes.map(x => x.toString('hex')) : undefined, + hashtype: this.hashType ? this.hashType.toString(10) : undefined, + encrypttoaddress: this.encryptToAddress ? this.encryptToAddress.toAddressString() : undefined, + createmmr: this.createMMR, signature: this.signature ? this.signature.toString('base64') : undefined, - datatype: this.datatype ? this.datatype.toString(10) : undefined, + datatype: this.dataType ? this.dataType.toString(10) : undefined, data: this.data ? this.data instanceof PartialMMRData_1.PartialMMRData ? this.data.toJson() : this.data.toString('hex') : undefined }; } @@ -339,24 +339,24 @@ class PartialSignData { else throw new Error("Unrecognized address version"); } - const datatype = json.datatype ? new bn_js_1.BN(json.datatype, 10) : undefined; + const dataType = json.datatype ? new bn_js_1.BN(json.datatype, 10) : undefined; return new PartialSignData({ flags: json.flags ? new bn_js_1.BN(json.flags, 10) : undefined, address: addr, - prefixstring: json.prefixstring ? Buffer.from(json.prefixstring, 'utf-8') : undefined, - vdxfkeys: json.vdxfkeys ? json.vdxfkeys.map(x => IdentityID_1.IdentityID.fromAddress(x)) : undefined, - vdxfkeynames: json.vdxfkeynames ? json.vdxfkeynames.map(x => Buffer.from(x, 'utf-8')) : undefined, - boundhashes: json.boundhashes ? json.boundhashes.map(x => Buffer.from(x, 'hex')) : undefined, - hashtype: json.hashtype ? new bn_js_1.BN(json.hashtype, 10) : undefined, - encrypttoaddress: json.encrypttoaddress ? SaplingPaymentAddress_1.SaplingPaymentAddress.fromAddressString(json.encrypttoaddress) : undefined, - createmmr: json.createmmr, + prefixString: json.prefixstring ? Buffer.from(json.prefixstring, 'utf-8') : undefined, + vdxfKeys: json.vdxfkeys ? json.vdxfkeys.map(x => IdentityID_1.IdentityID.fromAddress(x)) : undefined, + vdxfKeyNames: json.vdxfkeynames ? json.vdxfkeynames.map(x => Buffer.from(x, 'utf-8')) : undefined, + boundHashes: json.boundhashes ? json.boundhashes.map(x => Buffer.from(x, 'hex')) : undefined, + hashType: json.hashtype ? new bn_js_1.BN(json.hashtype, 10) : undefined, + encryptToAddress: json.encrypttoaddress ? SaplingPaymentAddress_1.SaplingPaymentAddress.fromAddressString(json.encrypttoaddress) : undefined, + createMMR: json.createmmr, signature: json.signature ? Buffer.from(json.signature, 'base64') : undefined, - datatype: json.datatype ? new bn_js_1.BN(json.datatype, 10) : undefined, + dataType: json.datatype ? new bn_js_1.BN(json.datatype, 10) : undefined, data: json.data ? typeof json.data === 'string' ? Buffer.from(json.data, 'hex') : - datatype && datatype.eq(pbaas_1.DATA_TYPE_MMRDATA) ? + dataType && dataType.eq(pbaas_1.DATA_TYPE_MMRDATA) ? PartialMMRData_1.PartialMMRData.fromJson(json.data) : VdxfUniValue_1.VdxfUniValue.fromJson(json.data) @@ -367,23 +367,23 @@ class PartialSignData { toCLIJson() { const ret = { address: this.address ? this.address.toAddress() : undefined, - prefixstring: this.prefixstring ? this.prefixstring.toString('utf-8') : undefined, - vdxfkeys: this.vdxfkeys ? this.vdxfkeys.map(x => x.toAddress()) : undefined, - vdxfkeynames: this.vdxfkeynames ? this.vdxfkeynames.map(x => x.toString('utf-8')) : undefined, - boundhashes: this.boundhashes ? this.boundhashes.map(x => x.toString('hex')) : undefined, - encrypttoaddress: this.encrypttoaddress ? this.encrypttoaddress.toAddressString() : undefined, - createmmr: this.createmmr, + prefixString: this.prefixString ? this.prefixString.toString('utf-8') : undefined, + vdxfKeys: this.vdxfKeys ? this.vdxfKeys.map(x => x.toAddress()) : undefined, + vdxfKeyNames: this.vdxfKeyNames ? this.vdxfKeyNames.map(x => x.toString('utf-8')) : undefined, + boundHashes: this.boundHashes ? this.boundHashes.map(x => x.toString('hex')) : undefined, + encryptToAddress: this.encryptToAddress ? this.encryptToAddress.toAddressString() : undefined, + createMMR: this.createMMR, signature: this.signature ? this.signature.toString('base64') : undefined }; - if (this.containsData() && this.data && this.datatype) { - if (this.datatype.eq(pbaas_1.DATA_TYPE_MMRDATA)) { + if (this.containsData() && this.data && this.dataType) { + if (this.dataType.eq(pbaas_1.DATA_TYPE_MMRDATA)) { const mmrCLIJson = this.data.toCLIJson(); ret['mmrdata'] = mmrCLIJson.mmrdata; ret['mmrsalt'] = mmrCLIJson.mmrsalt; ret['mmrhashtype'] = mmrCLIJson.mmrhashtype; ret['priormmr'] = mmrCLIJson.priormmr; } - else if (this.datatype.eq(pbaas_1.DATA_TYPE_VDXFDATA)) { + else if (this.dataType.eq(pbaas_1.DATA_TYPE_VDXFDATA)) { const uniJson = this.data.toJson(); if (Array.isArray(uniJson)) throw new Error("VDXF univalue arrays not supported as sign data param"); @@ -391,36 +391,36 @@ class PartialSignData { } else { const dataBuf = this.data; - if (this.datatype.eq(pbaas_1.DATA_TYPE_FILENAME)) { + if (this.dataType.eq(pbaas_1.DATA_TYPE_FILENAME)) { ret['filename'] = dataBuf.toString('utf-8'); } - else if (this.datatype.eq(pbaas_1.DATA_TYPE_MESSAGE)) { + else if (this.dataType.eq(pbaas_1.DATA_TYPE_MESSAGE)) { ret['message'] = dataBuf.toString('utf-8'); } - else if (this.datatype.eq(pbaas_1.DATA_TYPE_HEX)) { + else if (this.dataType.eq(pbaas_1.DATA_TYPE_HEX)) { ret['messagehex'] = dataBuf.toString('hex'); } - else if (this.datatype.eq(pbaas_1.DATA_TYPE_BASE64)) { + else if (this.dataType.eq(pbaas_1.DATA_TYPE_BASE64)) { ret['messagebase64'] = dataBuf.toString('base64'); } - else if (this.datatype.eq(pbaas_1.DATA_TYPE_DATAHASH)) { + else if (this.dataType.eq(pbaas_1.DATA_TYPE_DATAHASH)) { ret['datahash'] = dataBuf.toString('hex'); } else - throw new Error("Unrecognized datatype"); + throw new Error("Unrecognized dataType"); } } - if (this.hashtype.eq(pbaas_1.HASH_TYPE_SHA256)) { - ret['hashtype'] = pbaas_1.HASH_TYPE_SHA256_NAME; + if (this.hashType.eq(pbaas_1.HASH_TYPE_SHA256)) { + ret['hashType'] = pbaas_1.HASH_TYPE_SHA256_NAME; } - else if (this.hashtype.eq(pbaas_1.HASH_TYPE_SHA256D)) { - ret['hashtype'] = pbaas_1.HASH_TYPE_SHA256D_NAME; + else if (this.hashType.eq(pbaas_1.HASH_TYPE_SHA256D)) { + ret['hashType'] = pbaas_1.HASH_TYPE_SHA256D_NAME; } - else if (this.hashtype.eq(pbaas_1.HASH_TYPE_BLAKE2B)) { - ret['hashtype'] = pbaas_1.HASH_TYPE_BLAKE2B_NAME; + else if (this.hashType.eq(pbaas_1.HASH_TYPE_BLAKE2B)) { + ret['hashType'] = pbaas_1.HASH_TYPE_BLAKE2B_NAME; } - else if (this.hashtype.eq(pbaas_1.HASH_TYPE_KECCAK256)) { - ret['hashtype'] = pbaas_1.HASH_TYPE_KECCAK256_NAME; + else if (this.hashType.eq(pbaas_1.HASH_TYPE_KECCAK256)) { + ret['hashType'] = pbaas_1.HASH_TYPE_KECCAK256_NAME; } else throw new Error("Unrecognized hash type"); @@ -445,12 +445,12 @@ class PartialSignData { } const config = { address: addr, - prefixstring: json.prefixstring ? Buffer.from(json.prefixstring, 'utf-8') : undefined, - vdxfkeys: json.vdxfkeys ? json.vdxfkeys.map(x => IdentityID_1.IdentityID.fromAddress(x)) : undefined, - vdxfkeynames: json.vdxfkeynames ? json.vdxfkeynames.map(x => Buffer.from(x, 'utf-8')) : undefined, - boundhashes: json.boundhashes ? json.boundhashes.map(x => Buffer.from(x, 'hex')) : undefined, - encrypttoaddress: json.encrypttoaddress ? SaplingPaymentAddress_1.SaplingPaymentAddress.fromAddressString(json.encrypttoaddress) : undefined, - createmmr: json.createmmr, + prefixString: json.prefixString ? Buffer.from(json.prefixString, 'utf-8') : undefined, + vdxfKeys: json.vdxfKeys ? json.vdxfKeys.map(x => IdentityID_1.IdentityID.fromAddress(x)) : undefined, + vdxfKeyNames: json.vdxfKeyNames ? json.vdxfKeyNames.map(x => Buffer.from(x, 'utf-8')) : undefined, + boundHashes: json.boundHashes ? json.boundHashes.map(x => Buffer.from(x, 'hex')) : undefined, + encryptToAddress: json.encryptToAddress ? SaplingPaymentAddress_1.SaplingPaymentAddress.fromAddressString(json.encryptToAddress) : undefined, + createMMR: json.createMMR, signature: json.signature ? Buffer.from(json.signature, 'base64') : undefined }; if ('mmrdata' in json) { @@ -461,45 +461,45 @@ class PartialSignData { priormmr: json.priormmr }); config.data = pmd; - config.datatype = pbaas_1.DATA_TYPE_MMRDATA; + config.dataType = pbaas_1.DATA_TYPE_MMRDATA; } else if (json.filename) { config.data = Buffer.from(json.filename, 'utf-8'); - config.datatype = pbaas_1.DATA_TYPE_FILENAME; + config.dataType = pbaas_1.DATA_TYPE_FILENAME; } else if (json.message) { config.data = Buffer.from(json.message, 'utf-8'); - config.datatype = pbaas_1.DATA_TYPE_MESSAGE; + config.dataType = pbaas_1.DATA_TYPE_MESSAGE; } else if (json.vdxfdata) { config.data = VdxfUniValue_1.VdxfUniValue.fromJson(json.vdxfdata); - config.datatype = pbaas_1.DATA_TYPE_VDXFDATA; + config.dataType = pbaas_1.DATA_TYPE_VDXFDATA; } else if (json.messagehex) { config.data = Buffer.from(json.messagehex, 'hex'); - config.datatype = pbaas_1.DATA_TYPE_HEX; + config.dataType = pbaas_1.DATA_TYPE_HEX; } else if (json.messagebase64) { config.data = Buffer.from(json.messagebase64, 'base64'); - config.datatype = pbaas_1.DATA_TYPE_BASE64; + config.dataType = pbaas_1.DATA_TYPE_BASE64; } else if (json.datahash) { config.data = Buffer.from(json.datahash, 'hex'); - config.datatype = pbaas_1.DATA_TYPE_DATAHASH; + config.dataType = pbaas_1.DATA_TYPE_DATAHASH; } - if (json.hashtype) { - switch (json.hashtype) { + if (json.hashType) { + switch (json.hashType) { case pbaas_1.HASH_TYPE_SHA256_NAME: - config.hashtype = pbaas_1.HASH_TYPE_SHA256; + config.hashType = pbaas_1.HASH_TYPE_SHA256; break; case pbaas_1.HASH_TYPE_SHA256D_NAME: - config.hashtype = pbaas_1.HASH_TYPE_SHA256D; + config.hashType = pbaas_1.HASH_TYPE_SHA256D; break; case pbaas_1.HASH_TYPE_BLAKE2B_NAME: - config.hashtype = pbaas_1.HASH_TYPE_BLAKE2B; + config.hashType = pbaas_1.HASH_TYPE_BLAKE2B; break; case pbaas_1.HASH_TYPE_KECCAK256_NAME: - config.hashtype = pbaas_1.HASH_TYPE_KECCAK256; + config.hashType = pbaas_1.HASH_TYPE_KECCAK256; break; default: throw new Error("Unrecognized hash type"); diff --git a/dist/vdxf/classes/VerifiableSignatureData.d.ts b/dist/vdxf/classes/VerifiableSignatureData.d.ts index 03fdb95c..11bdf14b 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.d.ts +++ b/dist/vdxf/classes/VerifiableSignatureData.d.ts @@ -17,8 +17,8 @@ export interface VerifiableSignatureDataInterface { version: BigNumber; flags: BigNumber; hashType: BigNumber; - systemId: CompactIdAddressObject; - identityId: CompactIdAddressObject; + systemID: CompactIdAddressObject; + identityID: CompactIdAddressObject; vdxfKeys?: Array; vdxfKeyNames?: Array; boundHashes?: Array; @@ -29,8 +29,8 @@ export declare class VerifiableSignatureData implements SerializableEntity { version: BigNumber; flags: BigNumber; hashType: BigNumber; - identityId: CompactIdAddressObject; - systemId: CompactIdAddressObject; + identityID: CompactIdAddressObject; + systemID: CompactIdAddressObject; vdxfKeys?: Array; vdxfKeyNames?: Array; boundHashes?: Array; diff --git a/dist/vdxf/classes/VerifiableSignatureData.js b/dist/vdxf/classes/VerifiableSignatureData.js index cd37a237..ac0596cc 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.js +++ b/dist/vdxf/classes/VerifiableSignatureData.js @@ -18,9 +18,9 @@ class VerifiableSignatureData { constructor(data) { this.version = data && data.flags ? data.flags : new bn_js_1.BN(0); this.flags = data && data.flags ? data.flags : new bn_js_1.BN(0); - this.systemId = data && data.systemId ? data.systemId : new CompactIdAddressObject_1.CompactIdAddressObject({ flags: CompactIdAddressObject_1.CompactIdAddressObject.IS_FQN, address: pbaas_1.DEFAULT_VERUS_CHAINNAME }); + this.systemID = data && data.systemID ? data.systemID : new CompactIdAddressObject_1.CompactIdAddressObject({ flags: CompactIdAddressObject_1.CompactIdAddressObject.IS_FQN, address: pbaas_1.DEFAULT_VERUS_CHAINNAME }); this.hashType = data && data.hashType ? data.hashType : pbaas_1.HASH_TYPE_SHA256; - this.identityId = data ? data.identityId : undefined; + this.identityID = data ? data.identityID : undefined; this.vdxfKeys = data ? data.vdxfKeys : undefined; this.vdxfKeyNames = data ? data.vdxfKeyNames : undefined; this.boundHashes = data ? data.boundHashes : undefined; @@ -77,8 +77,8 @@ class VerifiableSignatureData { byteLength += varint_1.default.encodingLength(this.version); byteLength += varuint_1.default.encodingLength(this.flags.toNumber()); byteLength += varuint_1.default.encodingLength(this.hashType.toNumber()); - byteLength += this.systemId.getByteLength(); - byteLength += this.identityId.getByteLength(); + byteLength += this.systemID.getByteLength(); + byteLength += this.identityID.getByteLength(); if (this.hasVdxfKeys()) { byteLength += varuint_1.default.encodingLength(this.vdxfKeys.length); for (const key of this.vdxfKeys) { @@ -111,8 +111,8 @@ class VerifiableSignatureData { bufferWriter.writeVarInt(this.version); bufferWriter.writeCompactSize(this.flags.toNumber()); bufferWriter.writeCompactSize(this.hashType.toNumber()); - bufferWriter.writeSlice(this.systemId.toBuffer()); - bufferWriter.writeSlice(this.identityId.toBuffer()); + bufferWriter.writeSlice(this.systemID.toBuffer()); + bufferWriter.writeSlice(this.identityID.toBuffer()); if (this.hasVdxfKeys()) { bufferWriter.writeArray(this.vdxfKeys.map(x => (0, address_1.fromBase58Check)(x).hash)); } @@ -133,10 +133,10 @@ class VerifiableSignatureData { this.version = bufferReader.readVarInt(); this.flags = new bn_js_1.BN(bufferReader.readCompactSize()); this.hashType = new bn_js_1.BN(bufferReader.readCompactSize()); - this.systemId = new CompactIdAddressObject_1.CompactIdAddressObject(); - this.identityId = new CompactIdAddressObject_1.CompactIdAddressObject(); - bufferReader.offset = this.systemId.fromBuffer(bufferReader.buffer, bufferReader.offset); - bufferReader.offset = this.identityId.fromBuffer(bufferReader.buffer, bufferReader.offset); + this.systemID = new CompactIdAddressObject_1.CompactIdAddressObject(); + this.identityID = new CompactIdAddressObject_1.CompactIdAddressObject(); + bufferReader.offset = this.systemID.fromBuffer(bufferReader.buffer, bufferReader.offset); + bufferReader.offset = this.identityID.fromBuffer(bufferReader.buffer, bufferReader.offset); if (this.hasVdxfKeys()) { this.vdxfKeys = bufferReader.readArray(vdxf_1.HASH160_BYTE_LENGTH).map(x => (0, address_1.toBase58Check)(x, vdxf_1.I_ADDR_VERSION)); } @@ -162,17 +162,17 @@ class VerifiableSignatureData { if (this.version.eq(new bn_js_1.BN(1))) { return createHash("sha256") .update(vdxf_2.VERUS_DATA_SIGNATURE_PREFIX) - .update((0, address_1.fromBase58Check)(this.systemId.toIAddress()).hash) + .update((0, address_1.fromBase58Check)(this.systemID.toIAddress()).hash) .update(heightBuffer) - .update((0, address_1.fromBase58Check)(this.identityId.toIAddress()).hash) + .update((0, address_1.fromBase58Check)(this.identityID.toIAddress()).hash) .update(sigHash) .digest(); } else { return createHash("sha256") - .update((0, address_1.fromBase58Check)(this.systemId.toIAddress()).hash) + .update((0, address_1.fromBase58Check)(this.systemID.toIAddress()).hash) .update(heightBuffer) - .update((0, address_1.fromBase58Check)(this.identityId.toIAddress()).hash) + .update((0, address_1.fromBase58Check)(this.identityID.toIAddress()).hash) .update(vdxf_2.VERUS_DATA_SIGNATURE_PREFIX) .update(sigHash) .digest(); @@ -181,10 +181,10 @@ class VerifiableSignatureData { toSignatureData(sigHash) { return new pbaas_2.SignatureData({ version: this.version, - system_ID: this.systemId.toIAddress(), + system_ID: this.systemID.toIAddress(), hash_type: this.hashType, signature_hash: sigHash, - identity_ID: this.identityId.toIAddress(), + identity_ID: this.identityID.toIAddress(), sig_type: pbaas_2.SignatureData.TYPE_VERUSID_DEFAULT, vdxf_keys: this.vdxfKeys, vdxf_key_names: this.vdxfKeyNames, diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts index aedfa051..342b578d 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts +++ b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts @@ -26,13 +26,13 @@ export type IdentityUpdateRequestDetailsJson = { }; export declare class IdentityUpdateRequestDetails implements SerializableEntity { flags?: BigNumber; - requestid?: BigNumber; - createdat?: BigNumber; + requestID?: BigNumber; + createdAt?: BigNumber; identity?: PartialIdentity; - expiryheight?: BigNumber; - systemid?: IdentityID; - responseuris?: Array; - signdatamap?: SignDataMap; + expiryHeight?: BigNumber; + systemID?: IdentityID; + responseURIs?: Array; + signDataMap?: SignDataMap; salt?: Buffer; txid?: Buffer; static IDENTITY_UPDATE_REQUEST_VALID: import("bn.js"); @@ -45,14 +45,14 @@ export declare class IdentityUpdateRequestDetails implements SerializableEntity static IDENTITY_UPDATE_REQUEST_IS_TESTNET: import("bn.js"); constructor(data?: { flags?: BigNumber; - requestid?: BigNumber; - createdat?: BigNumber; + requestID?: BigNumber; + createdAt?: BigNumber; identity?: PartialIdentity; - expiryheight?: BigNumber; - systemid?: IdentityID; + expiryHeight?: BigNumber; + systemID?: IdentityID; txid?: Buffer; - responseuris?: Array; - signdatamap?: SignDataMap; + responseURIs?: Array; + signDataMap?: SignDataMap; salt?: Buffer; }); expires(): boolean; diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js index 9773525f..d0a08536 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js +++ b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js @@ -17,43 +17,43 @@ const { BufferReader, BufferWriter } = bufferutils_1.default; class IdentityUpdateRequestDetails { constructor(data) { this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0", 10); - if (data === null || data === void 0 ? void 0 : data.requestid) { - this.requestid = data.requestid; + if (data === null || data === void 0 ? void 0 : data.requestID) { + this.requestID = data.requestID; } else - this.requestid = new bn_js_1.BN("0", 10); - if (data === null || data === void 0 ? void 0 : data.createdat) { - this.createdat = data.createdat; + this.requestID = new bn_js_1.BN("0", 10); + if (data === null || data === void 0 ? void 0 : data.createdAt) { + this.createdAt = data.createdAt; } else - this.createdat = new bn_js_1.BN("0", 10); + this.createdAt = new bn_js_1.BN("0", 10); if (data === null || data === void 0 ? void 0 : data.identity) { this.identity = data.identity; } - if (data === null || data === void 0 ? void 0 : data.expiryheight) { + if (data === null || data === void 0 ? void 0 : data.expiryHeight) { if (!this.expires()) this.toggleExpires(); - this.expiryheight = data.expiryheight; + this.expiryHeight = data.expiryHeight; } - if (data === null || data === void 0 ? void 0 : data.systemid) { + if (data === null || data === void 0 ? void 0 : data.systemID) { if (!this.containsSystem()) this.toggleContainsSystem(); - this.systemid = data.systemid; + this.systemID = data.systemID; } if (data === null || data === void 0 ? void 0 : data.txid) { if (!this.containsTxid()) this.toggleContainsTxid(); this.txid = data.txid; } - if (data === null || data === void 0 ? void 0 : data.responseuris) { + if (data === null || data === void 0 ? void 0 : data.responseURIs) { if (!this.containsResponseUris()) this.toggleContainsResponseUris(); - this.responseuris = data.responseuris; + this.responseURIs = data.responseURIs; } - if (data === null || data === void 0 ? void 0 : data.signdatamap) { + if (data === null || data === void 0 ? void 0 : data.signDataMap) { if (!this.containsSignData()) this.toggleContainsSignData(); - this.signdatamap = data.signdatamap; + this.signDataMap = data.signDataMap; } if (data === null || data === void 0 ? void 0 : data.salt) { if (!this.containsSalt()) @@ -123,23 +123,23 @@ class IdentityUpdateRequestDetails { getByteLength() { let length = 0; length += varint_1.default.encodingLength(this.flags); - length += varint_1.default.encodingLength(this.requestid); - length += varint_1.default.encodingLength(this.createdat); + length += varint_1.default.encodingLength(this.requestID); + length += varint_1.default.encodingLength(this.createdAt); length += this.identity.getByteLength(); if (this.expires()) - length += varint_1.default.encodingLength(this.expiryheight); + length += varint_1.default.encodingLength(this.expiryHeight); if (this.containsSystem()) - length += this.systemid.getByteLength(); + length += this.systemID.getByteLength(); if (this.containsTxid()) { length += pbaas_2.UINT_256_LENGTH; } if (this.containsResponseUris()) { - length += varuint_1.default.encodingLength(this.responseuris.length); - length += this.responseuris.reduce((sum, current) => sum + current.getByteLength(), 0); + length += varuint_1.default.encodingLength(this.responseURIs.length); + length += this.responseURIs.reduce((sum, current) => sum + current.getByteLength(), 0); } if (this.containsSignData()) { - length += varuint_1.default.encodingLength(this.signdatamap.size); - for (const [key, value] of this.signdatamap.entries()) { + length += varuint_1.default.encodingLength(this.signDataMap.size); + for (const [key, value] of this.signDataMap.entries()) { length += (0, address_1.fromBase58Check)(key).hash.length; length += value.getByteLength(); } @@ -153,24 +153,24 @@ class IdentityUpdateRequestDetails { toBuffer() { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); writer.writeVarInt(this.flags); - writer.writeVarInt(this.requestid); - writer.writeVarInt(this.createdat); + writer.writeVarInt(this.requestID); + writer.writeVarInt(this.createdAt); writer.writeSlice(this.identity.toBuffer()); if (this.expires()) - writer.writeVarInt(this.expiryheight); + writer.writeVarInt(this.expiryHeight); if (this.containsSystem()) - writer.writeSlice(this.systemid.toBuffer()); + writer.writeSlice(this.systemID.toBuffer()); if (this.containsTxid()) { if (this.txid.length !== pbaas_2.UINT_256_LENGTH) throw new Error("invalid txid length"); writer.writeSlice(this.txid); } if (this.containsResponseUris()) { - writer.writeArray(this.responseuris.map((x) => x.toBuffer())); + writer.writeArray(this.responseURIs.map((x) => x.toBuffer())); } if (this.containsSignData()) { - writer.writeCompactSize(this.signdatamap.size); - for (const [key, value] of this.signdatamap.entries()) { + writer.writeCompactSize(this.signDataMap.size); + for (const [key, value] of this.signDataMap.entries()) { writer.writeSlice((0, address_1.fromBase58Check)(key).hash); writer.writeSlice(value.toBuffer()); } @@ -183,37 +183,37 @@ class IdentityUpdateRequestDetails { fromBuffer(buffer, offset = 0, parseVdxfObjects = true) { const reader = new BufferReader(buffer, offset); this.flags = reader.readVarInt(); - this.requestid = reader.readVarInt(); - this.createdat = reader.readVarInt(); + this.requestID = reader.readVarInt(); + this.createdAt = reader.readVarInt(); this.identity = new PartialIdentity_1.PartialIdentity(); reader.offset = this.identity.fromBuffer(reader.buffer, reader.offset, parseVdxfObjects); if (this.expires()) { - this.expiryheight = reader.readVarInt(); + this.expiryHeight = reader.readVarInt(); } if (this.containsSystem()) { - this.systemid = new pbaas_1.IdentityID(); - reader.offset = this.systemid.fromBuffer(reader.buffer, reader.offset); + this.systemID = new pbaas_1.IdentityID(); + reader.offset = this.systemID.fromBuffer(reader.buffer, reader.offset); } if (this.containsTxid()) { this.txid = reader.readSlice(pbaas_2.UINT_256_LENGTH); } if (this.containsResponseUris()) { - this.responseuris = []; + this.responseURIs = []; const urisLength = reader.readCompactSize(); for (let i = 0; i < urisLength; i++) { const uri = new ResponseUri_1.ResponseUri(); reader.offset = uri.fromBuffer(reader.buffer, reader.offset); - this.responseuris.push(uri); + this.responseURIs.push(uri); } } if (this.containsSignData()) { - this.signdatamap = new Map(); + this.signDataMap = new Map(); const size = reader.readCompactSize(); for (let i = 0; i < size; i++) { const key = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); const value = new PartialSignData_1.PartialSignData(); reader.offset = value.fromBuffer(reader.buffer, reader.offset); - this.signdatamap.set(key, value); + this.signDataMap.set(key, value); } } if (this.containsSalt()) { @@ -223,42 +223,42 @@ class IdentityUpdateRequestDetails { } toJson() { let signDataJson; - if (this.signdatamap) { + if (this.signDataMap) { signDataJson = {}; - for (const [key, psd] of this.signdatamap.entries()) { + for (const [key, psd] of this.signDataMap.entries()) { signDataJson[key] = psd.toJson(); } } return { flags: this.flags ? this.flags.toString(10) : undefined, - requestid: this.requestid ? this.requestid.toString(10) : undefined, - createdat: this.createdat ? this.createdat.toString(10) : undefined, + requestid: this.requestID ? this.requestID.toString(10) : undefined, + createdat: this.createdAt ? this.createdAt.toString(10) : undefined, identity: this.identity ? this.identity.toJson() : undefined, - expiryheight: this.expiryheight ? this.expiryheight.toString(10) : undefined, - systemid: this.systemid ? this.systemid.toAddress() : undefined, + expiryheight: this.expiryHeight ? this.expiryHeight.toString(10) : undefined, + systemid: this.systemID ? this.systemID.toAddress() : undefined, txid: this.txid ? (Buffer.from(this.txid.toString('hex'), 'hex').reverse()).toString('hex') : undefined, - responseuris: this.responseuris ? this.responseuris.map(x => x.toJson()) : undefined, + responseuris: this.responseURIs ? this.responseURIs.map(x => x.toJson()) : undefined, signdatamap: signDataJson, salt: this.salt ? this.salt.toString('hex') : undefined }; } static fromJson(json) { - let signdatamap; + let signDataMap; if (json.signdatamap) { - signdatamap = new Map(); + signDataMap = new Map(); for (const key in json.signdatamap) { - signdatamap.set(key, PartialSignData_1.PartialSignData.fromJson(json.signdatamap[key])); + signDataMap.set(key, PartialSignData_1.PartialSignData.fromJson(json.signdatamap[key])); } } return new IdentityUpdateRequestDetails({ flags: json.flags ? new bn_js_1.BN(json.flags, 10) : undefined, - requestid: json.requestid ? new bn_js_1.BN(json.requestid, 10) : undefined, - createdat: json.createdat ? new bn_js_1.BN(json.createdat, 10) : undefined, + requestID: json.requestid ? new bn_js_1.BN(json.requestid, 10) : undefined, + createdAt: json.createdat ? new bn_js_1.BN(json.createdat, 10) : undefined, identity: json.identity ? PartialIdentity_1.PartialIdentity.fromJson(json.identity) : undefined, - expiryheight: json.expiryheight ? new bn_js_1.BN(json.expiryheight, 10) : undefined, - systemid: json.systemid ? pbaas_1.IdentityID.fromAddress(json.systemid) : undefined, - responseuris: json.responseuris ? json.responseuris.map(x => ResponseUri_1.ResponseUri.fromJson(x)) : undefined, - signdatamap, + expiryHeight: json.expiryheight ? new bn_js_1.BN(json.expiryheight, 10) : undefined, + systemID: json.systemid ? pbaas_1.IdentityID.fromAddress(json.systemid) : undefined, + responseURIs: json.responseuris ? json.responseuris.map(x => ResponseUri_1.ResponseUri.fromJson(x)) : undefined, + signDataMap, salt: json.salt ? Buffer.from(json.salt, 'hex') : undefined, txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined, }); @@ -268,7 +268,7 @@ class IdentityUpdateRequestDetails { throw new Error("No identity details to update"); const idJson = this.identity.toJson(); if (this.containsSignData()) { - for (const [key, psd] of this.signdatamap.entries()) { + for (const [key, psd] of this.signDataMap.entries()) { idJson.contentmultimap[key] = { "data": psd.toCLIJson() }; @@ -278,15 +278,15 @@ class IdentityUpdateRequestDetails { } static fromCLIJson(json, details) { let identity; - let signdatamap; + let signDataMap; if (json.contentmultimap) { const cmm = Object.assign({}, json.contentmultimap); for (const key in cmm) { if (cmm[key]['data']) { - if (!signdatamap) - signdatamap = new Map(); + if (!signDataMap) + signDataMap = new Map(); const psd = PartialSignData_1.PartialSignData.fromCLIJson(cmm[key]['data']); - signdatamap.set(key, psd); + signDataMap.set(key, psd); delete cmm[key]; } } @@ -295,12 +295,12 @@ class IdentityUpdateRequestDetails { identity = PartialIdentity_1.PartialIdentity.fromJson(json); return new IdentityUpdateRequestDetails({ identity, - signdatamap, - systemid: (details === null || details === void 0 ? void 0 : details.systemid) ? pbaas_1.IdentityID.fromAddress(details.systemid) : undefined, - requestid: (details === null || details === void 0 ? void 0 : details.requestid) ? new bn_js_1.BN(details.requestid, 10) : undefined, - createdat: (details === null || details === void 0 ? void 0 : details.createdat) ? new bn_js_1.BN(details.createdat, 10) : undefined, - expiryheight: (details === null || details === void 0 ? void 0 : details.expiryheight) ? new bn_js_1.BN(details.expiryheight, 10) : undefined, - responseuris: (details === null || details === void 0 ? void 0 : details.responseuris) ? details.responseuris.map(x => ResponseUri_1.ResponseUri.fromJson(x)) : undefined, + signDataMap, + systemID: (details === null || details === void 0 ? void 0 : details.systemid) ? pbaas_1.IdentityID.fromAddress(details.systemid) : undefined, + requestID: (details === null || details === void 0 ? void 0 : details.requestid) ? new bn_js_1.BN(details.requestid, 10) : undefined, + createdAt: (details === null || details === void 0 ? void 0 : details.createdat) ? new bn_js_1.BN(details.createdat, 10) : undefined, + expiryHeight: (details === null || details === void 0 ? void 0 : details.expiryheight) ? new bn_js_1.BN(details.expiryheight, 10) : undefined, + responseURIs: (details === null || details === void 0 ? void 0 : details.responseuris) ? details.responseuris.map(x => ResponseUri_1.ResponseUri.fromJson(x)) : undefined, salt: (details === null || details === void 0 ? void 0 : details.salt) ? Buffer.from(details.salt, 'hex') : undefined, txid: (details === null || details === void 0 ? void 0 : details.txid) ? Buffer.from(details.txid, 'hex').reverse() : undefined, }); diff --git a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts index 88049967..bad34ed2 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts +++ b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts @@ -9,8 +9,8 @@ export type IdentityUpdateResponseDetailsJson = { }; export declare class IdentityUpdateResponseDetails implements SerializableEntity { flags?: BigNumber; - requestid?: BigNumber; - createdat?: BigNumber; + requestID?: BigNumber; + createdAt?: BigNumber; txid?: Buffer; salt?: Buffer; static IDENTITY_UPDATE_RESPONSE_VALID: import("bn.js"); @@ -18,8 +18,8 @@ export declare class IdentityUpdateResponseDetails implements SerializableEntity static IDENTITY_UPDATE_RESPONSE_CONTAINS_SALT: import("bn.js"); constructor(data?: { flags?: BigNumber; - requestid?: BigNumber; - createdat?: BigNumber; + requestID?: BigNumber; + createdAt?: BigNumber; txid?: Buffer; salt?: Buffer; }); diff --git a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js index f17fc8b5..c096ef2f 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js +++ b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js @@ -11,13 +11,13 @@ const { BufferReader, BufferWriter } = bufferutils_1.default; class IdentityUpdateResponseDetails { constructor(data) { this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0", 10); - if (data === null || data === void 0 ? void 0 : data.requestid) { - this.requestid = data.requestid; + if (data === null || data === void 0 ? void 0 : data.requestID) { + this.requestID = data.requestID; } else - this.requestid = new bn_js_1.BN("0", 10); - if (data === null || data === void 0 ? void 0 : data.createdat) { - this.createdat = data.createdat; + this.requestID = new bn_js_1.BN("0", 10); + if (data === null || data === void 0 ? void 0 : data.createdAt) { + this.createdAt = data.createdAt; } if (data === null || data === void 0 ? void 0 : data.txid) { if (!this.containsTxid()) @@ -48,8 +48,8 @@ class IdentityUpdateResponseDetails { getByteLength() { let length = 0; length += varint_1.default.encodingLength(this.flags); - length += varint_1.default.encodingLength(this.requestid); - length += varint_1.default.encodingLength(this.createdat); + length += varint_1.default.encodingLength(this.requestID); + length += varint_1.default.encodingLength(this.createdAt); if (this.containsTxid()) { length += pbaas_1.UINT_256_LENGTH; } @@ -63,8 +63,8 @@ class IdentityUpdateResponseDetails { toBuffer() { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); writer.writeVarInt(this.flags); - writer.writeVarInt(this.requestid); - writer.writeVarInt(this.createdat); + writer.writeVarInt(this.requestID); + writer.writeVarInt(this.createdAt); if (this.containsTxid()) { if (this.txid.length !== pbaas_1.UINT_256_LENGTH) throw new Error("invalid txid length"); @@ -78,8 +78,8 @@ class IdentityUpdateResponseDetails { fromBuffer(buffer, offset = 0) { const reader = new BufferReader(buffer, offset); this.flags = reader.readVarInt(); - this.requestid = reader.readVarInt(); - this.createdat = reader.readVarInt(); + this.requestID = reader.readVarInt(); + this.createdAt = reader.readVarInt(); if (this.containsTxid()) { this.txid = reader.readSlice(pbaas_1.UINT_256_LENGTH); } @@ -91,8 +91,8 @@ class IdentityUpdateResponseDetails { toJson() { return { flags: this.flags.toString(10), - requestid: this.requestid.toString(10), - createdat: this.createdat.toString(10), + requestid: this.requestID.toString(10), + createdat: this.createdAt.toString(10), txid: this.containsTxid() ? (Buffer.from(this.txid.toString('hex'), 'hex').reverse()).toString('hex') : undefined, salt: this.containsSalt() ? this.salt.toString('hex') : undefined }; @@ -100,8 +100,8 @@ class IdentityUpdateResponseDetails { static fromJson(json) { return new IdentityUpdateResponseDetails({ flags: new bn_js_1.BN(json.flags, 10), - requestid: new bn_js_1.BN(json.requestid, 10), - createdat: new bn_js_1.BN(json.createdat, 10), + requestID: new bn_js_1.BN(json.requestid, 10), + createdAt: new bn_js_1.BN(json.createdat, 10), txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined, salt: json.salt ? Buffer.from(json.salt, 'hex') : undefined }); diff --git a/src/__tests__/constants/fixtures.ts b/src/__tests__/constants/fixtures.ts index c747c7e0..a33e8c80 100644 --- a/src/__tests__/constants/fixtures.ts +++ b/src/__tests__/constants/fixtures.ts @@ -431,17 +431,17 @@ export const TEST_MMR_DATA = new PartialMMRData({ export const TEST_BASE_SIGN_DATA_WITH_MMR_DATA: PartialSignDataInitData = { flags: new BN('0', 10), address: IdentityID.fromAddress('iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq'), - prefixstring: Buffer.from('example prefix', 'utf8'), - vdxfkeys: [IdentityID.fromAddress('i81XL8ZpuCo9jmWLv5L5ikdxrGuHrrpQLz')], - vdxfkeynames: [Buffer.from('VDXFNAME', 'utf8')], - boundhashes: [Buffer.from('0873c6ba879ce87f5c207a4382b273cac164361af0b9fe63d6d7b0d7af401fec', 'hex'), Buffer.from('0873c6ba879ce87f5c207a4382b273cac164361af0b9fe63d6d7b0d7af401fec', 'hex')], - hashtype: new BN('1', 10), - encrypttoaddress: SaplingPaymentAddress.fromAddressString( + prefixString: Buffer.from('example prefix', 'utf8'), + vdxfKeys: [IdentityID.fromAddress('i81XL8ZpuCo9jmWLv5L5ikdxrGuHrrpQLz')], + vdxfKeyNames: [Buffer.from('VDXFNAME', 'utf8')], + boundHashes: [Buffer.from('0873c6ba879ce87f5c207a4382b273cac164361af0b9fe63d6d7b0d7af401fec', 'hex'), Buffer.from('0873c6ba879ce87f5c207a4382b273cac164361af0b9fe63d6d7b0d7af401fec', 'hex')], + hashType: new BN('1', 10), + encryptToAddress: SaplingPaymentAddress.fromAddressString( 'zs1wczplx4kegw32h8g0f7xwl57p5tvnprwdmnzmdnsw50chcl26f7tws92wk2ap03ykaq6jyyztfa' ), - createmmr: true, + createMMR: true, signature: Buffer.from('AeNjMwABQSAPBEuajDkRyy+OBJsWmDP3EUoqN9UjCJK9nmoSQiNoZWBK19OgGCYdEqr1CiFfBf8SFHVoUv4r2tb5Q3qsMTrp', 'base64'), - datatype: DATA_TYPE_MMRDATA, + dataType: DATA_TYPE_MMRDATA, data: TEST_MMR_DATA, // This is the PartialMMRData object } diff --git a/src/__tests__/pbaas/partialsigndata.test.ts b/src/__tests__/pbaas/partialsigndata.test.ts index b15d7ef7..c47d21ab 100644 --- a/src/__tests__/pbaas/partialsigndata.test.ts +++ b/src/__tests__/pbaas/partialsigndata.test.ts @@ -38,24 +38,24 @@ describe('PartialSignData serialization/deserialization', () => { const baseDataWithMMR: PartialSignDataInitData = { flags: new BN('0', 10), address: IdentityID.fromAddress('iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq'), - prefixstring: Buffer.from('example prefix', 'utf8'), - vdxfkeys: [IdentityID.fromAddress('i81XL8ZpuCo9jmWLv5L5ikdxrGuHrrpQLz')], - vdxfkeynames: [Buffer.from('VDXFNAME', 'utf8')], - boundhashes: [Buffer.from('0873c6ba879ce87f5c207a4382b273cac164361af0b9fe63d6d7b0d7af401fec', 'hex'), Buffer.from('0873c6ba879ce87f5c207a4382b273cac164361af0b9fe63d6d7b0d7af401fec', 'hex')], - hashtype: new BN('1', 10), - encrypttoaddress: SaplingPaymentAddress.fromAddressString( + prefixString: Buffer.from('example prefix', 'utf8'), + vdxfKeys: [IdentityID.fromAddress('i81XL8ZpuCo9jmWLv5L5ikdxrGuHrrpQLz')], + vdxfKeyNames: [Buffer.from('VDXFNAME', 'utf8')], + boundHashes: [Buffer.from('0873c6ba879ce87f5c207a4382b273cac164361af0b9fe63d6d7b0d7af401fec', 'hex'), Buffer.from('0873c6ba879ce87f5c207a4382b273cac164361af0b9fe63d6d7b0d7af401fec', 'hex')], + hashType: new BN('1', 10), + encryptToAddress: SaplingPaymentAddress.fromAddressString( 'zs1wczplx4kegw32h8g0f7xwl57p5tvnprwdmnzmdnsw50chcl26f7tws92wk2ap03ykaq6jyyztfa' ), - createmmr: true, + createMMR: true, signature: Buffer.from('AeNjMwABQSAPBEuajDkRyy+OBJsWmDP3EUoqN9UjCJK9nmoSQiNoZWBK19OgGCYdEqr1CiFfBf8SFHVoUv4r2tb5Q3qsMTrp', 'base64'), - datatype: DATA_TYPE_MMRDATA, + dataType: DATA_TYPE_MMRDATA, data: mmrData, // This is the PartialMMRData object } // Define a base set of parameters for PartialSignData — with simple buffer data const baseDataWithBuffer = { ...baseDataWithMMR, - datatype: DATA_TYPE_MESSAGE, + dataType: DATA_TYPE_MESSAGE, data: Buffer.from('regular buffer data', 'utf8'), } @@ -63,11 +63,11 @@ describe('PartialSignData serialization/deserialization', () => { const baseConfigs = [baseDataWithMMR, baseDataWithBuffer]; const removableKeys = [ 'address', - 'prefixstring', - 'vdxfkeys', - 'vdxfkeynames', - 'boundhashes', - 'encrypttoaddress', + 'prefixString', + 'vdxfKeys', + 'vdxfKeyNames', + 'boundHashes', + 'encryptToAddress', 'signature', 'data' ] as const; @@ -85,7 +85,7 @@ describe('PartialSignData serialization/deserialization', () => { // If removing data, also remove datatype if (key === 'data') { - delete newConfig.datatype; + delete newConfig.dataType; } finalTestData.push(newConfig); diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts index 3aaf58c5..7ff2fb15 100644 --- a/src/__tests__/vdxf/genericrequest.test.ts +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -66,9 +66,9 @@ describe('GenericRequest — buffer / URI / QR operations', () => { const sig = new VerifiableSignatureData({ flags: new BN(0), version: new BN(1), - systemId: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + systemID: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), hashType: HASH_TYPE_SHA256, - identityId: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + identityID: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), signatureAsVch: Buffer.from('abcd', 'hex'), vdxfKeys: [DEFAULT_VERUS_CHAINID, DEFAULT_VERUS_CHAINID], vdxfKeyNames: ["VRSC", "VRSC"], diff --git a/src/__tests__/vdxf/genericresponse.test.ts b/src/__tests__/vdxf/genericresponse.test.ts index 897e4ff0..0f7cea6a 100644 --- a/src/__tests__/vdxf/genericresponse.test.ts +++ b/src/__tests__/vdxf/genericresponse.test.ts @@ -66,9 +66,9 @@ describe('GenericResponse — buffer / URI / QR operations', () => { const sig = new VerifiableSignatureData({ flags: new BN(0), version: new BN(1), - systemId: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + systemID: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), hashType: HASH_TYPE_SHA256, - identityId: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + identityID: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), signatureAsVch: Buffer.from('abcd', 'hex'), vdxfKeys: [DEFAULT_VERUS_CHAINID, DEFAULT_VERUS_CHAINID], vdxfKeyNames: ["VRSC", "VRSC"], diff --git a/src/__tests__/vdxf/identityupdateenvelope.test.ts b/src/__tests__/vdxf/identityupdateenvelope.test.ts index 84041ca3..af72f794 100644 --- a/src/__tests__/vdxf/identityupdateenvelope.test.ts +++ b/src/__tests__/vdxf/identityupdateenvelope.test.ts @@ -1,23 +1,31 @@ -import { BN } from "bn.js"; -import { IdentityUpdateRequest, IdentityUpdateResponse, IdentityUpdateEnvelope } from "../../vdxf/classes/identity/IdentityUpdateEnvelope"; import { IdentityUpdateRequestDetails } from "../../vdxf/classes/identity/IdentityUpdateRequestDetails"; import { IdentityUpdateResponseDetails } from "../../vdxf/classes/identity/IdentityUpdateResponseDetails"; -import { ContentMultiMap, IDENTITY_VERSION_PBAAS, IdentityID, KeyID, SaplingPaymentAddress } from "../../pbaas"; -import { PartialIdentity } from "../../pbaas/PartialIdentity"; +import { ContentMultiMap } from "../../pbaas"; import { ResponseUri } from "../../vdxf/classes/ResponseUri"; -import { PartialMMRData } from "../../pbaas/PartialMMRData"; -import { PartialSignData, PartialSignDataInitData } from "../../pbaas/PartialSignData"; -import { DATA_TYPE_MMRDATA } from "../../constants/pbaas"; -import { TEST_BASE_SIGN_DATA_WITH_MMR_DATA, TEST_CLI_ID_UPDATE_REQUEST_JSON, TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, TEST_CREATEDAT, TEST_EXPIRYHEIGHT, TEST_MMR_DATA, TEST_PARTIAL_IDENTITY, TEST_REQUESTID, TEST_SALT, TEST_SIGNDATA_MAP, TEST_SIGNINGID, TEST_SYSTEMID, TEST_TXID } from "../constants/fixtures"; +import { PartialSignData } from "../../pbaas/PartialSignData"; +import { + TEST_BASE_SIGN_DATA_WITH_MMR_DATA, + TEST_CLI_ID_UPDATE_REQUEST_JSON, + TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, + TEST_CREATEDAT, + TEST_EXPIRYHEIGHT, + TEST_MMR_DATA, + TEST_PARTIAL_IDENTITY, + TEST_REQUESTID, + TEST_SALT, + TEST_SIGNDATA_MAP, + TEST_SYSTEMID, + TEST_TXID +} from "../constants/fixtures"; describe("IdentityUpdateEnvelope Serialization", () => { - function testSerialization(instance) { + function testSerialization(instance: any) { const fromBufferInstance = new instance.constructor(); fromBufferInstance.fromBuffer(instance.toBuffer()); expect(fromBufferInstance.toBuffer().toString("hex")).toBe(instance.toBuffer().toString("hex")); } - function testJsonSerialization(instance) { + function testJsonSerialization(instance: any) { const json = instance.toJson(); const fromJsonInstance = instance.constructor.fromJson(json); const newJson = fromJsonInstance.toJson(); @@ -33,79 +41,46 @@ describe("IdentityUpdateEnvelope Serialization", () => { expect(fromCLIJsonInstance.toCLIJson()).toEqual(cliJson); } - test("Serialize/Deserialize unsigned IdentityUpdateRequest", () => { + test("Serialize/Deserialize basic IdentityUpdateRequestDetails", () => { const requestDetails = new IdentityUpdateRequestDetails({ - requestid: TEST_REQUESTID, - createdat: TEST_CREATEDAT, - systemid: TEST_SYSTEMID, + requestID: TEST_REQUESTID, + createdAt: TEST_CREATEDAT, + systemID: TEST_SYSTEMID, identity: TEST_PARTIAL_IDENTITY, - expiryheight: TEST_EXPIRYHEIGHT, + expiryHeight: TEST_EXPIRYHEIGHT, salt: TEST_SALT, - signdatamap: TEST_SIGNDATA_MAP + signDataMap: TEST_SIGNDATA_MAP }); - const request = new IdentityUpdateRequest({ details: requestDetails }); - testSerialization(request); - testCLIJsonSerialization(request.details as IdentityUpdateRequestDetails); - }); - test("Serialize/Deserialize signed IdentityUpdateRequest", () => { - const requestDetails = new IdentityUpdateRequestDetails({ - requestid: TEST_REQUESTID, - createdat: TEST_CREATEDAT, - systemid: TEST_SYSTEMID, - identity: TEST_PARTIAL_IDENTITY, - expiryheight: TEST_EXPIRYHEIGHT, - salt: TEST_SALT, - signdatamap: TEST_SIGNDATA_MAP - }); - const request = new IdentityUpdateRequest({ - details: requestDetails, - systemid: TEST_SYSTEMID, - signingid: TEST_SIGNINGID, - signature: "AeNjMwABQSAPBEuajDkRyy+OBJsWmDP3EUoqN9UjCJK9nmoSQiNoZWBK19OgGCYdEqr1CiFfBf8SFHVoUv4r2tb5Q3qsMTrp" - }); - - testSerialization(request); - testCLIJsonSerialization(request.details as IdentityUpdateRequestDetails); + testSerialization(requestDetails); + testCLIJsonSerialization(requestDetails); }); - test("Serialize/Deserialize unsigned IdentityUpdateResponse", () => { - const responseDetails = new IdentityUpdateResponseDetails({ requestid: TEST_REQUESTID, createdat: TEST_CREATEDAT }); - const response = new IdentityUpdateResponse({ details: responseDetails }); - testSerialization(response); - }); + test("Serialize/Deserialize basic IdentityUpdateResponseDetails", () => { + const responseDetails = new IdentityUpdateResponseDetails({ requestID: TEST_REQUESTID, createdAt: TEST_CREATEDAT }); - test("Serialize/Deserialize signed IdentityUpdateResponse", () => { - const responseDetails = new IdentityUpdateResponseDetails({ requestid: TEST_REQUESTID, createdat: TEST_CREATEDAT }); - const response = new IdentityUpdateResponse({ - details: responseDetails, - systemid: TEST_SYSTEMID, - signingid: TEST_SIGNINGID, - signature: "AeNjMwABQSAPBEuajDkRyy+OBJsWmDP3EUoqN9UjCJK9nmoSQiNoZWBK19OgGCYdEqr1CiFfBf8SFHVoUv4r2tb5Q3qsMTrp" - }); - testSerialization(response); + testSerialization(responseDetails); }); - test("Remove optional fields from unsigned IdentityUpdateRequest", () => { + test("Remove optional fields from IdentityUpdateRequestDetails", () => { let baseRequestDetailsConfig = { - requestid: TEST_REQUESTID, - createdat: TEST_CREATEDAT, - systemid: TEST_SYSTEMID, + requestID: TEST_REQUESTID, + createdAt: TEST_CREATEDAT, + systemID: TEST_SYSTEMID, identity: TEST_PARTIAL_IDENTITY, - expiryheight: TEST_EXPIRYHEIGHT, - responseuris: [ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_REDIRECT), ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_POST)], - signdatamap: TEST_SIGNDATA_MAP, + expiryHeight: TEST_EXPIRYHEIGHT, + responseURIs: [ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_REDIRECT), ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_POST)], + signDataMap: TEST_SIGNDATA_MAP, salt: TEST_SALT }; - const toRemove = ["expiryheight", "responseuris", "signdatamap", "salt", "systemid"]; + const toRemove = ["expiryHeight", "responseURIs", "signDataMap", "salt", "systemID"]; for (let i = 0; i < toRemove.length + 1; i++) { const newRequestDetails = new IdentityUpdateRequestDetails({ ...baseRequestDetailsConfig }); - const request = new IdentityUpdateRequest({ details: newRequestDetails }); - testSerialization(request); - testCLIJsonSerialization(request.details as IdentityUpdateRequestDetails); + testSerialization(newRequestDetails); + testCLIJsonSerialization(newRequestDetails as IdentityUpdateRequestDetails); if (i < toRemove.length) { delete baseRequestDetailsConfig[toRemove[i]] @@ -113,17 +88,16 @@ describe("IdentityUpdateEnvelope Serialization", () => { } }); - test("Remove optional fields from IdentityUpdateResponse", () => { + test("Remove optional fields from IdentityUpdateResponseDetails", () => { const txidbuf = Buffer.from(TEST_TXID, 'hex').reverse(); - let baseResponseDetailsConfig = { requestid: TEST_REQUESTID, createdat: TEST_CREATEDAT, txid: txidbuf, TEST_SALT }; + let baseResponseDetailsConfig = { requestID: TEST_REQUESTID, createdAt: TEST_CREATEDAT, txid: txidbuf, TEST_SALT }; const toRemove = ["txid", "salt"]; for (let i = 0; i < toRemove.length + 1; i++) { const newResponseDetails = new IdentityUpdateResponseDetails({ ...baseResponseDetailsConfig }); - const response = new IdentityUpdateResponse({ details: newResponseDetails }); - testSerialization(response); + testSerialization(newResponseDetails); if (i < toRemove.length) { delete baseResponseDetailsConfig[toRemove[i]] @@ -131,78 +105,40 @@ describe("IdentityUpdateEnvelope Serialization", () => { } }); - test("Serialize/Deserialize IdentityUpdateRequest to/from JSON", () => { - const requestDetails = new IdentityUpdateRequestDetails({ - requestid: TEST_REQUESTID, - createdat: TEST_CREATEDAT, - systemid: TEST_SYSTEMID, - identity: TEST_PARTIAL_IDENTITY, - expiryheight: TEST_EXPIRYHEIGHT, - salt: TEST_SALT, - signdatamap: TEST_SIGNDATA_MAP - }); - - const request = new IdentityUpdateRequest({ details: requestDetails }); - testJsonSerialization(request); - testCLIJsonSerialization(request.details as IdentityUpdateRequestDetails); - }); - - test("Serialize/Deserialize signed IdentityUpdateRequest to/from JSON", () => { + test("Serialize/Deserialize IdentityUpdateRequestDetails to/from JSON", () => { const requestDetails = new IdentityUpdateRequestDetails({ - requestid: TEST_REQUESTID, - createdat: TEST_CREATEDAT, - systemid: TEST_SYSTEMID, + requestID: TEST_REQUESTID, + createdAt: TEST_CREATEDAT, + systemID: TEST_SYSTEMID, identity: TEST_PARTIAL_IDENTITY, - expiryheight: TEST_EXPIRYHEIGHT, + expiryHeight: TEST_EXPIRYHEIGHT, salt: TEST_SALT, - signdatamap: TEST_SIGNDATA_MAP - }); - - const request = new IdentityUpdateRequest({ - details: requestDetails, - systemid: TEST_SYSTEMID, - signingid: TEST_SIGNINGID, - signature: "AeNjMwABQSAPBEuajDkRyy+OBJsWmDP3EUoqN9UjCJK9nmoSQiNoZWBK19OgGCYdEqr1CiFfBf8SFHVoUv4r2tb5Q3qsMTrp" + signDataMap: TEST_SIGNDATA_MAP }); - testJsonSerialization(request); - testCLIJsonSerialization(request.details as IdentityUpdateRequestDetails); + testJsonSerialization(requestDetails); + testCLIJsonSerialization(requestDetails); }); - test("Serialize/Deserialize IdentityUpdateResponse to/from JSON", () => { + test("Serialize/Deserialize IdentityUpdateResponseDetails to/from JSON", () => { const txidbuf = Buffer.from(TEST_TXID, 'hex').reverse(); - let baseResponseDetailsConfig = { requestid: TEST_REQUESTID, createdat: TEST_CREATEDAT, txid: txidbuf, salt: TEST_SALT }; - const responseDetails = new IdentityUpdateResponseDetails(baseResponseDetailsConfig); - const response = new IdentityUpdateResponse({ details: responseDetails }); - testJsonSerialization(response); - }); - - test("Serialize/Deserialize signed IdentityUpdateResponse to/from JSON", () => { - const txidbuf = Buffer.from(TEST_TXID, 'hex').reverse(); - let baseResponseDetailsConfig = { requestid: TEST_REQUESTID, createdat: TEST_CREATEDAT, txid: txidbuf, salt: TEST_SALT }; + let baseResponseDetailsConfig = { requestID: TEST_REQUESTID, createdAt: TEST_CREATEDAT, txid: txidbuf, salt: TEST_SALT }; const responseDetails = new IdentityUpdateResponseDetails(baseResponseDetailsConfig); - const response = new IdentityUpdateResponse({ - details: responseDetails, - systemid: TEST_SYSTEMID, - signingid: TEST_SIGNINGID, - signature: "AeNjMwABQSAPBEuajDkRyy+OBJsWmDP3EUoqN9UjCJK9nmoSQiNoZWBK19OgGCYdEqr1CiFfBf8SFHVoUv4r2tb5Q3qsMTrp" - }); - - testJsonSerialization(response); + testJsonSerialization(responseDetails); }); test("Serialize/Deserialize IdentityUpdateRequestDetails to/from JSON", () => { const requestDetails = new IdentityUpdateRequestDetails({ - requestid: TEST_REQUESTID, - createdat: TEST_CREATEDAT, - systemid: TEST_SYSTEMID, + requestID: TEST_REQUESTID, + createdAt: TEST_CREATEDAT, + systemID: TEST_SYSTEMID, identity: TEST_PARTIAL_IDENTITY, - expiryheight: TEST_EXPIRYHEIGHT, + expiryHeight: TEST_EXPIRYHEIGHT, salt: TEST_SALT, - signdatamap: TEST_SIGNDATA_MAP + signDataMap: TEST_SIGNDATA_MAP }); testJsonSerialization(requestDetails); @@ -211,8 +147,8 @@ describe("IdentityUpdateEnvelope Serialization", () => { test("Serialize/Deserialize IdentityUpdateResponseDetails to/from JSON", () => { const responseDetails = new IdentityUpdateResponseDetails({ - requestid: TEST_REQUESTID, - createdat: TEST_CREATEDAT, + requestID: TEST_REQUESTID, + createdAt: TEST_CREATEDAT, txid: Buffer.from(TEST_TXID, 'hex').reverse(), salt: TEST_SALT }); @@ -271,29 +207,16 @@ describe("IdentityUpdateEnvelope Serialization", () => { } ); - const env = new IdentityUpdateRequest({ - details: req, - signingid: TEST_SIGNINGID, - systemid: TEST_SYSTEMID, - signature: "AeNjMwABQSAPBEuajDkRyy+OBJsWmDP3EUoqN9UjCJK9nmoSQiNoZWBK19OgGCYdEqr1CiFfBf8SFHVoUv4r2tb5Q3qsMTrp" - }); - - const envBuf = env.toBuffer(); - - const envFromBuf = new IdentityUpdateRequest(); - envFromBuf.fromBuffer(envBuf); - - expect(JSON.stringify(env.toJson())).toEqual(JSON.stringify(IdentityUpdateRequest.fromWalletDeeplinkUri(env.toWalletDeeplinkUri()).toJson())); testCLIJsonSerialization(req); - testJsonSerialization(env); - testSerialization(env); + testJsonSerialization(req); + testSerialization(req); }) test("Deserialize cli identity update details", () => { const detailsProps = { - requestid: TEST_REQUESTID.toString(), - createdat: TEST_CREATEDAT.toString(), - expiryheight: TEST_EXPIRYHEIGHT.toString(), + requestID: TEST_REQUESTID.toString(), + createdAt: TEST_CREATEDAT.toString(), + expiryHeight: TEST_EXPIRYHEIGHT.toString(), responseuris: [ ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_REDIRECT).toJson(), ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_POST).toJson() diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 348b2b72..9c264f4e 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -10,7 +10,7 @@ import { DataDescriptorOrdinalVdxfObject } from '../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject'; import { DataDescriptor, DEST_PKH, TransferDestination } from '../../pbaas'; -import { IdentityUpdateRequestDetails, ResponseUri, VerusPayInvoiceDetails } from '../../vdxf/classes'; +import { IdentityUpdateRequestDetails, IdentityUpdateResponseDetails, ResponseUri, VerusPayInvoiceDetails } from '../../vdxf/classes'; import { DEFAULT_VERUS_CHAINID } from '../../constants/pbaas'; import { fromBase58Check } from '../../utils/address'; import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_VERUSPAY_INVOICE } from '../../constants/ordinals/ordinals'; @@ -22,8 +22,13 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const buf = obj.toBuffer(); // Use the factory createFromBuffer so the correct subclass is used const { obj: parsed } = OrdinalVdxfObject.createFromBuffer(buf); + // Type assertion - return parsed as T; + const parsedTyped = parsed as T; + + expect(parsedTyped.toBuffer().toString('hex')).toBe(buf.toString('hex')); + + return parsedTyped; } function roundTripJson(obj: T): T { @@ -38,6 +43,8 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { newObj = GeneralTypeOrdinalVdxfObject.fromJson(json); } else if (obj instanceof IdentityUpdateRequestOrdinalVdxfObject) { newObj = IdentityUpdateRequestOrdinalVdxfObject.fromJson(json as any); + } else if (obj instanceof IdentityUpdateResponseOrdinalVdxfObject) { + newObj = IdentityUpdateResponseOrdinalVdxfObject.fromJson(json as any); } else { throw new Error("Unrecognized type") } @@ -170,10 +177,12 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(round).toBeInstanceOf(IdentityUpdateRequestOrdinalVdxfObject); const d2 = (round as IdentityUpdateRequestOrdinalVdxfObject).data; - expect(d2.systemid!.toAddress()).toEqual(details.systemid!.toAddress()); - expect(d2.requestid!.toString()).toEqual(details.requestid!.toString()); - expect(d2.createdat!.toNumber()).toEqual(details.createdat!.toNumber()); - expect(d2.expiryheight!.toString()).toEqual(details.expiryheight!.toString()); + expect(d2.systemID!.toAddress()).toEqual(details.systemID!.toAddress()); + expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); + expect(d2.createdAt!.toNumber()).toEqual(details.createdAt!.toNumber()); + expect(d2.expiryHeight!.toString()).toEqual(details.expiryHeight!.toString()); + expect(d2.salt!.toString('hex')).toEqual(details.salt!.toString('hex')); + expect(d2.txid!.toString('hex')).toEqual(details.txid!.toString('hex')); const json = obj.toJson(); expect(json.data).toBeDefined(); @@ -181,10 +190,43 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(roundJ).toBeInstanceOf(IdentityUpdateRequestOrdinalVdxfObject); const d3 = (roundJ as IdentityUpdateRequestOrdinalVdxfObject).data; - expect(d3.systemid!.toAddress()).toEqual(details.systemid!.toAddress()); - expect(d3.requestid!.toString()).toEqual(details.requestid!.toString()); - expect(d3.createdat!.toNumber()).toEqual(details.createdat!.toNumber()); - expect(d3.expiryheight!.toString()).toEqual(details.expiryheight!.toString()); + expect(d3.systemID!.toAddress()).toEqual(details.systemID!.toAddress()); + expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); + expect(d3.createdAt!.toNumber()).toEqual(details.createdAt!.toNumber()); + expect(d3.expiryHeight!.toString()).toEqual(details.expiryHeight!.toString()); + expect(d3.salt!.toString('hex')).toEqual(details.salt!.toString('hex')); + expect(d3.txid!.toString('hex')).toEqual(details.txid!.toString('hex')); + }); + + it('should serialize / deserialize a IdentityUpdateResponseOrdinalVdxfObject via buffer', () => { + const details = new IdentityUpdateResponseDetails({ + requestID: TEST_REQUESTID, + createdAt: TEST_CREATEDAT, + txid: Buffer.from(TEST_TXID, 'hex').reverse(), + salt: TEST_SALT + }); + + const obj = new IdentityUpdateResponseOrdinalVdxfObject({ data: details }); + + const round = roundTripBuffer(obj); + expect(round).toBeInstanceOf(IdentityUpdateResponseOrdinalVdxfObject); + + const d2 = (round as IdentityUpdateResponseOrdinalVdxfObject).data; + expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); + expect(d2.createdAt!.toNumber()).toEqual(details.createdAt!.toNumber()); + expect(d2.salt!.toString('hex')).toEqual(details.salt!.toString('hex')); + expect(d2.txid!.toString('hex')).toEqual(details.txid!.toString('hex')); + + const json = obj.toJson(); + expect(json.data).toBeDefined(); + const roundJ = roundTripJson(obj); + expect(roundJ).toBeInstanceOf(IdentityUpdateResponseOrdinalVdxfObject); + + const d3 = (roundJ as IdentityUpdateResponseOrdinalVdxfObject).data; + expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); + expect(d3.createdAt!.toNumber()).toEqual(details.createdAt!.toNumber()); + expect(d3.salt!.toString('hex')).toEqual(details.salt!.toString('hex')); + expect(d3.txid!.toString('hex')).toEqual(details.txid!.toString('hex')); }); it('getOrdinalVdxfObjectClassForType should map to correct classes', () => { diff --git a/src/pbaas/Identity.ts b/src/pbaas/Identity.ts index 361db815..27285c6a 100644 --- a/src/pbaas/Identity.ts +++ b/src/pbaas/Identity.ts @@ -10,7 +10,6 @@ import { SaplingPaymentAddress } from './SaplingPaymentAddress'; import { ContentMultiMap, ContentMultiMapJson } from './ContentMultiMap'; import { SerializableEntity } from '../utils/types/SerializableEntity'; import { KeyID } from './KeyID'; -import { PartialSignDataCLIJson } from './PartialSignData'; export const IDENTITY_VERSION_VAULT = new BN(2, 10); export const IDENTITY_VERSION_PBAAS = new BN(3, 10); diff --git a/src/pbaas/PartialSignData.ts b/src/pbaas/PartialSignData.ts index 00877ccb..5fc65092 100644 --- a/src/pbaas/PartialSignData.ts +++ b/src/pbaas/PartialSignData.ts @@ -19,15 +19,15 @@ const { BufferReader, BufferWriter } = bufferutils; export type PartialSignDataInitData = { flags?: BigNumber; address?: IdentityID | KeyID; - prefixstring?: Buffer; - vdxfkeys?: Array; - vdxfkeynames?: Array; - boundhashes?: Array; - hashtype?: BigNumber; - encrypttoaddress?: SaplingPaymentAddress; - createmmr?: boolean; + prefixString?: Buffer; + vdxfKeys?: Array; + vdxfKeyNames?: Array; + boundHashes?: Array; + hashType?: BigNumber; + encryptToAddress?: SaplingPaymentAddress; + createMMR?: boolean; signature?: Buffer; - datatype?: BigNumber; + dataType?: BigNumber; data?: Buffer | PartialMMRData | VdxfUniValue; } @@ -72,15 +72,15 @@ type SignDataKeys = { // Base fields (always optional) type BaseFields = { address?: string; - prefixstring?: string; - vdxfkeys?: Array; - vdxfkeynames?: Array; - boundhashes?: Array; - hashtype?: string; - encrypttoaddress?: string; - createmmr?: boolean; + prefixString?: string; + vdxfKeys?: Array; + vdxfKeyNames?: Array; + boundHashes?: Array; + hashType?: string; + encryptToAddress?: string; + createMMR?: boolean; signature?: string; - datatype?: string; + dataType?: string; data?: string; }; @@ -102,16 +102,16 @@ export type PartialSignDataCLIJson = ( export class PartialSignData implements SerializableEntity { flags: BigNumber; address?: IdentityID | KeyID; - prefixstring?: Buffer; // UTF-8 Encoded prefix string - vdxfkeys?: Array; - vdxfkeynames?: Array; // UTF-8 Encoded vdxf key names - boundhashes?: Array; - hashtype?: BigNumber; - encrypttoaddress?: SaplingPaymentAddress; - createmmr?: boolean; + prefixString?: Buffer; // UTF-8 Encoded prefix string + vdxfKeys?: Array; + vdxfKeyNames?: Array; // UTF-8 Encoded vdxf key names + boundHashes?: Array; + hashType?: BigNumber; + encryptToAddress?: SaplingPaymentAddress; + createMMR?: boolean; signature?: Buffer; - datatype?: BigNumber; + dataType?: BigNumber; data?: Buffer | PartialMMRData | VdxfUniValue; static CONTAINS_DATA = new BN("1", 10); @@ -125,40 +125,40 @@ export class PartialSignData implements SerializableEntity { constructor(data?: PartialSignDataInitData) { this.flags = data && data.flags ? data.flags : new BN("0"); - this.createmmr = data && data.createmmr ? data.createmmr : false; + this.createMMR = data && data.createMMR ? data.createMMR : false; if (data?.address) { if (!this.containsAddress()) this.toggleContainsAddress(); this.address = data.address; } - if (data?.prefixstring) { + if (data?.prefixString) { if (!this.containsPrefixString()) this.toggleContainsPrefixString(); - this.prefixstring = data.prefixstring; + this.prefixString = data.prefixString; } - if (data?.vdxfkeys) { + if (data?.vdxfKeys) { if (!this.containsVdxfKeys()) this.toggleContainsVdxfKeys(); - this.vdxfkeys = data.vdxfkeys; + this.vdxfKeys = data.vdxfKeys; } - if (data?.vdxfkeynames) { + if (data?.vdxfKeyNames) { if (!this.containsVdxfKeyNames()) this.toggleContainsVdxfKeyNames(); - this.vdxfkeynames = data.vdxfkeynames; + this.vdxfKeyNames = data.vdxfKeyNames; } - if (data?.hashtype) { - this.hashtype = data.hashtype; - } else this.hashtype = DEFAULT_HASH_TYPE; + if (data?.hashType) { + this.hashType = data.hashType; + } else this.hashType = DEFAULT_HASH_TYPE; - if (data?.boundhashes) { + if (data?.boundHashes) { if (!this.containsBoundhashes()) this.toggleContainsBoundHashes(); - this.boundhashes = data.boundhashes; + this.boundHashes = data.boundHashes; } - if (data?.encrypttoaddress) { + if (data?.encryptToAddress) { if (!this.containsEncrypttoAddress()) this.toggleContainsEncryptToAddress(); - this.encrypttoaddress = data.encrypttoaddress; + this.encryptToAddress = data.encryptToAddress; } if (data?.signature) { @@ -166,10 +166,10 @@ export class PartialSignData implements SerializableEntity { this.signature = data.signature; } - if (data?.datatype && data?.data) { + if (data?.dataType && data?.data) { if (!this.containsData()) this.toggleContainsData(); this.data = data.data; - this.datatype = data.datatype; + this.dataType = data.dataType; } } @@ -238,11 +238,11 @@ export class PartialSignData implements SerializableEntity { } isMMRData(): boolean { - return this.datatype && this.datatype.eq(DATA_TYPE_MMRDATA); + return this.dataType && this.dataType.eq(DATA_TYPE_MMRDATA); } isVdxfData(): boolean { - return this.datatype && this.datatype.eq(DATA_TYPE_VDXFDATA); + return this.dataType && this.dataType.eq(DATA_TYPE_VDXFDATA); } private getPartialSignDataByteLength(): number { @@ -268,34 +268,34 @@ export class PartialSignData implements SerializableEntity { if (this.containsAddress()) length += this.address!.getByteLength(); if (this.containsPrefixString()) { - const prefixLen = this.prefixstring!.length; + const prefixLen = this.prefixString!.length; length += varuint.encodingLength(prefixLen); length += prefixLen; } if (this.containsVdxfKeys()) { - length += calculateVectorLength(this.vdxfkeys!, (vdxfkey) => vdxfkey.getByteLength(), false); + length += calculateVectorLength(this.vdxfKeys!, (vdxfkey) => vdxfkey.getByteLength(), false); } if (this.containsVdxfKeyNames()) { - length += calculateVectorLength(this.vdxfkeynames!, (vdxfname) => vdxfname.length); + length += calculateVectorLength(this.vdxfKeyNames!, (vdxfname) => vdxfname.length); } - length += varint.encodingLength(this.hashtype); + length += varint.encodingLength(this.hashType); if (this.containsBoundhashes()) { - length += calculateVectorLength(this.boundhashes!, (hash) => hash.length); + length += calculateVectorLength(this.boundHashes!, (hash) => hash.length); } if (this.containsEncrypttoAddress()) { - length += this.encrypttoaddress!.getByteLength(); + length += this.encryptToAddress!.getByteLength(); } length += 1; // Createmmr boolean value if (this.containsData()) { - length += varint.encodingLength(this.datatype!); + length += varint.encodingLength(this.dataType!); if (this.isMMRData()) { length += (this.data as PartialMMRData).getByteLength(); @@ -337,12 +337,12 @@ export class PartialSignData implements SerializableEntity { } if (this.containsPrefixString()) { - this.prefixstring = reader.readVarSlice(); + this.prefixString = reader.readVarSlice(); } if (this.containsVdxfKeys()) { const count = reader.readCompactSize(); - this.vdxfkeys = []; + this.vdxfKeys = []; for (let i = 0; i < count; i++) { const varSlice = reader.readSlice(HASH160_BYTE_LENGTH); @@ -350,18 +350,18 @@ export class PartialSignData implements SerializableEntity { const idId = new IdentityID(); idId.fromBuffer(varSlice); - this.vdxfkeys.push(idId); + this.vdxfKeys.push(idId); } } if (this.containsVdxfKeyNames()) { - this.vdxfkeynames = reader.readVector(); + this.vdxfKeyNames = reader.readVector(); } - this.hashtype = reader.readVarInt(); + this.hashType = reader.readVarInt(); if (this.containsBoundhashes()) { - this.boundhashes = reader.readVector(); + this.boundHashes = reader.readVector(); } if (this.containsEncrypttoAddress()) { @@ -369,13 +369,13 @@ export class PartialSignData implements SerializableEntity { reader.offset = saplingAddr.fromBuffer(reader.buffer, reader.offset); - this.encrypttoaddress = saplingAddr; + this.encryptToAddress = saplingAddr; } - this.createmmr = !!reader.readUInt8(); + this.createMMR = !!reader.readUInt8(); if (this.containsData()) { - this.datatype = reader.readVarInt(); + this.dataType = reader.readVarInt(); if (this.isMMRData()) { const partialMMRData = new PartialMMRData(); @@ -415,60 +415,60 @@ export class PartialSignData implements SerializableEntity { // Prefix string if (this.containsPrefixString()) { - if (!this.prefixstring) { + if (!this.prefixString) { throw new Error("Prefix string is required but not provided"); } - writer.writeVarSlice(this.prefixstring); + writer.writeVarSlice(this.prefixString); } // VDXF keys if (this.containsVdxfKeys()) { - if (!this.vdxfkeys) { + if (!this.vdxfKeys) { throw new Error("VDXF keys are required but not provided"); } - writer.writeCompactSize(this.vdxfkeys.length); + writer.writeCompactSize(this.vdxfKeys.length); - for (const vdxfkey of this.vdxfkeys) { + for (const vdxfkey of this.vdxfKeys) { writer.writeSlice(vdxfkey.toBuffer()); } } // VDXF key names if (this.containsVdxfKeyNames()) { - if (!this.vdxfkeynames) { + if (!this.vdxfKeyNames) { throw new Error("VDXF key names are required but not provided"); } - writer.writeVector(this.vdxfkeynames); + writer.writeVector(this.vdxfKeyNames); } - writer.writeVarInt(this.hashtype); + writer.writeVarInt(this.hashType); // Bound hashes if (this.containsBoundhashes()) { - if (!this.boundhashes) { + if (!this.boundHashes) { throw new Error("Bound hashes are required but not provided"); } - writer.writeVector(this.boundhashes); + writer.writeVector(this.boundHashes); } // Encrypt-to address (Sapling) if (this.containsEncrypttoAddress()) { - if (!this.encrypttoaddress || !(this.encrypttoaddress instanceof SaplingPaymentAddress)) { + if (!this.encryptToAddress || !(this.encryptToAddress instanceof SaplingPaymentAddress)) { throw new Error("Sapling payment address is required but not provided"); } - writer.writeSlice(this.encrypttoaddress.toBuffer()); + writer.writeSlice(this.encryptToAddress.toBuffer()); } - // createmmr (boolean) - writer.writeUInt8(this.createmmr ? 1 : 0); + // createMMR (boolean) + writer.writeUInt8(this.createMMR ? 1 : 0); // Data if (this.containsData()) { - if (!this.data || !this.datatype) { + if (!this.data || !this.dataType) { throw new Error("Data is required but not provided"); } - writer.writeVarInt(this.datatype); + writer.writeVarInt(this.dataType); if (this.isMMRData()) { const mmrData = this.data as PartialMMRData; @@ -490,15 +490,15 @@ export class PartialSignData implements SerializableEntity { return { flags: this.flags ? this.flags.toString(10) : undefined, address: this.address ? this.address.toAddress() : undefined, - prefixstring: this.prefixstring ? this.prefixstring.toString('utf-8') : undefined, - vdxfkeys: this.vdxfkeys ? this.vdxfkeys.map(x => x.toAddress()) : undefined, - vdxfkeynames: this.vdxfkeynames ? this.vdxfkeynames.map(x => x.toString('utf-8')) : undefined, - boundhashes: this.boundhashes ? this.boundhashes.map(x => x.toString('hex')) : undefined, - hashtype: this.hashtype ? this.hashtype.toString(10) : undefined, - encrypttoaddress: this.encrypttoaddress ? this.encrypttoaddress.toAddressString() : undefined, - createmmr: this.createmmr, + prefixstring: this.prefixString ? this.prefixString.toString('utf-8') : undefined, + vdxfkeys: this.vdxfKeys ? this.vdxfKeys.map(x => x.toAddress()) : undefined, + vdxfkeynames: this.vdxfKeyNames ? this.vdxfKeyNames.map(x => x.toString('utf-8')) : undefined, + boundhashes: this.boundHashes ? this.boundHashes.map(x => x.toString('hex')) : undefined, + hashtype: this.hashType ? this.hashType.toString(10) : undefined, + encrypttoaddress: this.encryptToAddress ? this.encryptToAddress.toAddressString() : undefined, + createmmr: this.createMMR, signature: this.signature ? this.signature.toString('base64') : undefined, - datatype: this.datatype ? this.datatype.toString(10) : undefined, + datatype: this.dataType ? this.dataType.toString(10) : undefined, data: this.data ? this.data instanceof PartialMMRData ? this.data.toJson() : this.data.toString('hex') : undefined } } @@ -516,25 +516,25 @@ export class PartialSignData implements SerializableEntity { } else throw new Error("Unrecognized address version"); } - const datatype = json.datatype ? new BN(json.datatype, 10) : undefined; + const dataType = json.datatype ? new BN(json.datatype, 10) : undefined; return new PartialSignData({ flags: json.flags ? new BN(json.flags, 10) : undefined, address: addr, - prefixstring: json.prefixstring ? Buffer.from(json.prefixstring, 'utf-8') : undefined, - vdxfkeys: json.vdxfkeys ? json.vdxfkeys.map(x => IdentityID.fromAddress(x)) : undefined, - vdxfkeynames: json.vdxfkeynames ? json.vdxfkeynames.map(x => Buffer.from(x, 'utf-8')) : undefined, - boundhashes: json.boundhashes ? json.boundhashes.map(x => Buffer.from(x, 'hex')) : undefined, - hashtype: json.hashtype ? new BN(json.hashtype, 10) : undefined, - encrypttoaddress: json.encrypttoaddress ? SaplingPaymentAddress.fromAddressString(json.encrypttoaddress) : undefined, - createmmr: json.createmmr, + prefixString: json.prefixstring ? Buffer.from(json.prefixstring, 'utf-8') : undefined, + vdxfKeys: json.vdxfkeys ? json.vdxfkeys.map(x => IdentityID.fromAddress(x)) : undefined, + vdxfKeyNames: json.vdxfkeynames ? json.vdxfkeynames.map(x => Buffer.from(x, 'utf-8')) : undefined, + boundHashes: json.boundhashes ? json.boundhashes.map(x => Buffer.from(x, 'hex')) : undefined, + hashType: json.hashtype ? new BN(json.hashtype, 10) : undefined, + encryptToAddress: json.encrypttoaddress ? SaplingPaymentAddress.fromAddressString(json.encrypttoaddress) : undefined, + createMMR: json.createmmr, signature: json.signature ? Buffer.from(json.signature, 'base64') : undefined, - datatype: json.datatype ? new BN(json.datatype, 10) : undefined, + dataType: json.datatype ? new BN(json.datatype, 10) : undefined, data: json.data ? typeof json.data === 'string' ? Buffer.from(json.data, 'hex') : - datatype && datatype.eq(DATA_TYPE_MMRDATA) ? + dataType && dataType.eq(DATA_TYPE_MMRDATA) ? PartialMMRData.fromJson(json.data as PartialMMRDataJson) : VdxfUniValue.fromJson(json.data as VdxfUniValueJson) @@ -546,24 +546,24 @@ export class PartialSignData implements SerializableEntity { toCLIJson(): PartialSignDataCLIJson { const ret: PartialSignDataCLIJson = { address: this.address ? this.address.toAddress() : undefined, - prefixstring: this.prefixstring ? this.prefixstring.toString('utf-8') : undefined, - vdxfkeys: this.vdxfkeys ? this.vdxfkeys.map(x => x.toAddress()) : undefined, - vdxfkeynames: this.vdxfkeynames ? this.vdxfkeynames.map(x => x.toString('utf-8')) : undefined, - boundhashes: this.boundhashes ? this.boundhashes.map(x => x.toString('hex')) : undefined, - encrypttoaddress: this.encrypttoaddress ? this.encrypttoaddress.toAddressString() : undefined, - createmmr: this.createmmr, + prefixString: this.prefixString ? this.prefixString.toString('utf-8') : undefined, + vdxfKeys: this.vdxfKeys ? this.vdxfKeys.map(x => x.toAddress()) : undefined, + vdxfKeyNames: this.vdxfKeyNames ? this.vdxfKeyNames.map(x => x.toString('utf-8')) : undefined, + boundHashes: this.boundHashes ? this.boundHashes.map(x => x.toString('hex')) : undefined, + encryptToAddress: this.encryptToAddress ? this.encryptToAddress.toAddressString() : undefined, + createMMR: this.createMMR, signature: this.signature ? this.signature.toString('base64') : undefined }; - if (this.containsData() && this.data && this.datatype) { - if (this.datatype.eq(DATA_TYPE_MMRDATA)) { + if (this.containsData() && this.data && this.dataType) { + if (this.dataType.eq(DATA_TYPE_MMRDATA)) { const mmrCLIJson = (this.data as PartialMMRData).toCLIJson(); ret['mmrdata'] = mmrCLIJson.mmrdata; ret['mmrsalt'] = mmrCLIJson.mmrsalt; ret['mmrhashtype'] = mmrCLIJson.mmrhashtype; ret['priormmr'] = mmrCLIJson.priormmr; - } else if (this.datatype.eq(DATA_TYPE_VDXFDATA)) { + } else if (this.dataType.eq(DATA_TYPE_VDXFDATA)) { const uniJson = (this.data as VdxfUniValue).toJson(); if (Array.isArray(uniJson)) throw new Error("VDXF univalue arrays not supported as sign data param") @@ -572,28 +572,28 @@ export class PartialSignData implements SerializableEntity { } else { const dataBuf = this.data as Buffer; - if (this.datatype.eq(DATA_TYPE_FILENAME)){ + if (this.dataType.eq(DATA_TYPE_FILENAME)){ ret['filename'] = dataBuf.toString('utf-8'); - } else if (this.datatype.eq(DATA_TYPE_MESSAGE)) { + } else if (this.dataType.eq(DATA_TYPE_MESSAGE)) { ret['message'] = dataBuf.toString('utf-8'); - } else if (this.datatype.eq(DATA_TYPE_HEX)) { + } else if (this.dataType.eq(DATA_TYPE_HEX)) { ret['messagehex'] = dataBuf.toString('hex'); - } else if (this.datatype.eq(DATA_TYPE_BASE64)) { + } else if (this.dataType.eq(DATA_TYPE_BASE64)) { ret['messagebase64'] = dataBuf.toString('base64'); - } else if (this.datatype.eq(DATA_TYPE_DATAHASH)) { + } else if (this.dataType.eq(DATA_TYPE_DATAHASH)) { ret['datahash'] = dataBuf.toString('hex'); - } else throw new Error("Unrecognized datatype"); + } else throw new Error("Unrecognized dataType"); } } - if (this.hashtype.eq(HASH_TYPE_SHA256)){ - ret['hashtype'] = HASH_TYPE_SHA256_NAME; - } else if (this.hashtype.eq(HASH_TYPE_SHA256D)) { - ret['hashtype'] = HASH_TYPE_SHA256D_NAME; - } else if (this.hashtype.eq(HASH_TYPE_BLAKE2B)) { - ret['hashtype'] = HASH_TYPE_BLAKE2B_NAME; - } else if (this.hashtype.eq(HASH_TYPE_KECCAK256)) { - ret['hashtype'] = HASH_TYPE_KECCAK256_NAME; + if (this.hashType.eq(HASH_TYPE_SHA256)){ + ret['hashType'] = HASH_TYPE_SHA256_NAME; + } else if (this.hashType.eq(HASH_TYPE_SHA256D)) { + ret['hashType'] = HASH_TYPE_SHA256D_NAME; + } else if (this.hashType.eq(HASH_TYPE_BLAKE2B)) { + ret['hashType'] = HASH_TYPE_BLAKE2B_NAME; + } else if (this.hashType.eq(HASH_TYPE_KECCAK256)) { + ret['hashType'] = HASH_TYPE_KECCAK256_NAME; } else throw new Error("Unrecognized hash type"); for (const key in ret) { @@ -618,12 +618,12 @@ export class PartialSignData implements SerializableEntity { const config: PartialSignDataInitData = { address: addr, - prefixstring: json.prefixstring ? Buffer.from(json.prefixstring, 'utf-8') : undefined, - vdxfkeys: json.vdxfkeys ? json.vdxfkeys.map(x => IdentityID.fromAddress(x)) : undefined, - vdxfkeynames: json.vdxfkeynames ? json.vdxfkeynames.map(x => Buffer.from(x, 'utf-8')) : undefined, - boundhashes: json.boundhashes ? json.boundhashes.map(x => Buffer.from(x, 'hex')) : undefined, - encrypttoaddress: json.encrypttoaddress ? SaplingPaymentAddress.fromAddressString(json.encrypttoaddress) : undefined, - createmmr: json.createmmr, + prefixString: json.prefixString ? Buffer.from(json.prefixString, 'utf-8') : undefined, + vdxfKeys: json.vdxfKeys ? json.vdxfKeys.map(x => IdentityID.fromAddress(x)) : undefined, + vdxfKeyNames: json.vdxfKeyNames ? json.vdxfKeyNames.map(x => Buffer.from(x, 'utf-8')) : undefined, + boundHashes: json.boundHashes ? json.boundHashes.map(x => Buffer.from(x, 'hex')) : undefined, + encryptToAddress: json.encryptToAddress ? SaplingPaymentAddress.fromAddressString(json.encryptToAddress) : undefined, + createMMR: json.createMMR, signature: json.signature ? Buffer.from(json.signature, 'base64') : undefined }; @@ -636,40 +636,40 @@ export class PartialSignData implements SerializableEntity { }) config.data = pmd; - config.datatype = DATA_TYPE_MMRDATA; + config.dataType = DATA_TYPE_MMRDATA; } else if (json.filename) { config.data = Buffer.from(json.filename, 'utf-8'); - config.datatype = DATA_TYPE_FILENAME; + config.dataType = DATA_TYPE_FILENAME; } else if (json.message) { config.data = Buffer.from(json.message, 'utf-8'); - config.datatype = DATA_TYPE_MESSAGE; + config.dataType = DATA_TYPE_MESSAGE; } else if (json.vdxfdata) { config.data = VdxfUniValue.fromJson(json.vdxfdata); - config.datatype = DATA_TYPE_VDXFDATA; + config.dataType = DATA_TYPE_VDXFDATA; } else if (json.messagehex) { config.data = Buffer.from(json.messagehex, 'hex'); - config.datatype = DATA_TYPE_HEX; + config.dataType = DATA_TYPE_HEX; } else if (json.messagebase64) { config.data = Buffer.from(json.messagebase64, 'base64'); - config.datatype = DATA_TYPE_BASE64; + config.dataType = DATA_TYPE_BASE64; } else if (json.datahash) { config.data = Buffer.from(json.datahash, 'hex'); - config.datatype = DATA_TYPE_DATAHASH; + config.dataType = DATA_TYPE_DATAHASH; } - if (json.hashtype) { - switch (json.hashtype) { + if (json.hashType) { + switch (json.hashType) { case HASH_TYPE_SHA256_NAME: - config.hashtype = HASH_TYPE_SHA256; + config.hashType = HASH_TYPE_SHA256; break; case HASH_TYPE_SHA256D_NAME: - config.hashtype = HASH_TYPE_SHA256D; + config.hashType = HASH_TYPE_SHA256D; break; case HASH_TYPE_BLAKE2B_NAME: - config.hashtype = HASH_TYPE_BLAKE2B; + config.hashType = HASH_TYPE_BLAKE2B; break; case HASH_TYPE_KECCAK256_NAME: - config.hashtype = HASH_TYPE_KECCAK256; + config.hashType = HASH_TYPE_KECCAK256; break; default: throw new Error("Unrecognized hash type"); diff --git a/src/vdxf/classes/VerifiableSignatureData.ts b/src/vdxf/classes/VerifiableSignatureData.ts index e067e097..04445ca2 100644 --- a/src/vdxf/classes/VerifiableSignatureData.ts +++ b/src/vdxf/classes/VerifiableSignatureData.ts @@ -30,8 +30,8 @@ export interface VerifiableSignatureDataInterface { version: BigNumber; flags: BigNumber; hashType: BigNumber; - systemId: CompactIdAddressObject; - identityId: CompactIdAddressObject; + systemID: CompactIdAddressObject; + identityID: CompactIdAddressObject; vdxfKeys?: Array; vdxfKeyNames?: Array; boundHashes?: Array; @@ -43,8 +43,8 @@ export class VerifiableSignatureData implements SerializableEntity { version: BigNumber; flags: BigNumber; hashType: BigNumber; - identityId: CompactIdAddressObject; - systemId: CompactIdAddressObject; + identityID: CompactIdAddressObject; + systemID: CompactIdAddressObject; vdxfKeys?: Array; vdxfKeyNames?: Array; boundHashes?: Array; @@ -65,9 +65,9 @@ export class VerifiableSignatureData implements SerializableEntity { constructor(data?: VerifiableSignatureDataInterface) { this.version = data && data.flags ? data.flags : new BN(0); this.flags = data && data.flags ? data.flags : new BN(0); - this.systemId = data && data.systemId ? data.systemId : new CompactIdAddressObject({ flags: CompactIdAddressObject.IS_FQN, address: DEFAULT_VERUS_CHAINNAME }); + this.systemID = data && data.systemID ? data.systemID : new CompactIdAddressObject({ flags: CompactIdAddressObject.IS_FQN, address: DEFAULT_VERUS_CHAINNAME }); this.hashType = data && data.hashType ? data.hashType : HASH_TYPE_SHA256; - this.identityId = data ? data.identityId : undefined; + this.identityID = data ? data.identityID : undefined; this.vdxfKeys = data ? data.vdxfKeys : undefined; this.vdxfKeyNames = data ? data.vdxfKeyNames : undefined; this.boundHashes = data ? data.boundHashes : undefined; @@ -139,8 +139,8 @@ export class VerifiableSignatureData implements SerializableEntity { byteLength += varuint.encodingLength(this.hashType.toNumber()); - byteLength += this.systemId.getByteLength(); - byteLength += this.identityId.getByteLength(); + byteLength += this.systemID.getByteLength(); + byteLength += this.identityID.getByteLength(); if (this.hasVdxfKeys()) { byteLength += varuint.encodingLength(this.vdxfKeys.length); @@ -188,8 +188,8 @@ export class VerifiableSignatureData implements SerializableEntity { bufferWriter.writeCompactSize(this.hashType.toNumber()); - bufferWriter.writeSlice(this.systemId.toBuffer()); - bufferWriter.writeSlice(this.identityId.toBuffer()); + bufferWriter.writeSlice(this.systemID.toBuffer()); + bufferWriter.writeSlice(this.identityID.toBuffer()); if (this.hasVdxfKeys()) { bufferWriter.writeArray(this.vdxfKeys!.map(x => fromBase58Check(x).hash)); @@ -221,11 +221,11 @@ export class VerifiableSignatureData implements SerializableEntity { this.hashType = new BN(bufferReader.readCompactSize()); - this.systemId = new CompactIdAddressObject(); - this.identityId = new CompactIdAddressObject(); + this.systemID = new CompactIdAddressObject(); + this.identityID = new CompactIdAddressObject(); - bufferReader.offset = this.systemId.fromBuffer(bufferReader.buffer, bufferReader.offset); - bufferReader.offset = this.identityId.fromBuffer(bufferReader.buffer, bufferReader.offset); + bufferReader.offset = this.systemID.fromBuffer(bufferReader.buffer, bufferReader.offset); + bufferReader.offset = this.identityID.fromBuffer(bufferReader.buffer, bufferReader.offset); if (this.hasVdxfKeys()) { this.vdxfKeys = bufferReader.readArray(HASH160_BYTE_LENGTH).map(x => toBase58Check(x, I_ADDR_VERSION)); @@ -260,16 +260,16 @@ export class VerifiableSignatureData implements SerializableEntity { if (this.version.eq(new BN(1))) { return createHash("sha256") .update(VERUS_DATA_SIGNATURE_PREFIX) - .update(fromBase58Check(this.systemId.toIAddress()).hash) + .update(fromBase58Check(this.systemID.toIAddress()).hash) .update(heightBuffer) - .update(fromBase58Check(this.identityId.toIAddress()).hash) + .update(fromBase58Check(this.identityID.toIAddress()).hash) .update(sigHash) .digest(); } else { return createHash("sha256") - .update(fromBase58Check(this.systemId.toIAddress()).hash) + .update(fromBase58Check(this.systemID.toIAddress()).hash) .update(heightBuffer) - .update(fromBase58Check(this.identityId.toIAddress()).hash) + .update(fromBase58Check(this.identityID.toIAddress()).hash) .update(VERUS_DATA_SIGNATURE_PREFIX) .update(sigHash) .digest(); @@ -279,10 +279,10 @@ export class VerifiableSignatureData implements SerializableEntity { toSignatureData(sigHash: Buffer): SignatureData { return new SignatureData({ version: this.version, - system_ID: this.systemId.toIAddress(), + system_ID: this.systemID.toIAddress(), hash_type: this.hashType, signature_hash: sigHash, - identity_ID: this.identityId.toIAddress(), + identity_ID: this.identityID.toIAddress(), sig_type: SignatureData.TYPE_VERUSID_DEFAULT, vdxf_keys: this.vdxfKeys, vdxf_key_names: this.vdxfKeyNames, diff --git a/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts b/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts index b5062244..75e7e803 100644 --- a/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts +++ b/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts @@ -34,13 +34,13 @@ export type IdentityUpdateRequestDetailsJson = { export class IdentityUpdateRequestDetails implements SerializableEntity { flags?: BigNumber; - requestid?: BigNumber; // ID of request, to be referenced in response - createdat?: BigNumber; // Unix timestamp of request creation + requestID?: BigNumber; // ID of request, to be referenced in response + createdAt?: BigNumber; // Unix timestamp of request creation identity?: PartialIdentity; // Parts of the identity to update - expiryheight?: BigNumber; // Time after which update request will no longer be accepted - systemid?: IdentityID; // System that identity should be updated on (will default to VRSC/VRSCTEST if not present, depending on testnet flag) - responseuris?: Array; // Array of uris + type to send response to (type can be post, redirect, etc. depending on how response is expected to be received) - signdatamap?: SignDataMap; // Map of data to pass to signdata + expiryHeight?: BigNumber; // Time after which update request will no longer be accepted + systemID?: IdentityID; // System that identity should be updated on (will default to VRSC/VRSCTEST if not present, depending on testnet flag) + responseURIs?: Array; // Array of uris + type to send response to (type can be post, redirect, etc. depending on how response is expected to be received) + signDataMap?: SignDataMap; // Map of data to pass to signdata salt?: Buffer; // Optional salt txid?: Buffer; // 32 byte transaction ID of transaction that must be spent to update identity, on same system asked for in request // stored in natural order, if displayed as text make sure to reverse! @@ -56,38 +56,38 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { constructor (data?: { flags?: BigNumber, - requestid?: BigNumber, - createdat?: BigNumber, + requestID?: BigNumber, + createdAt?: BigNumber, identity?: PartialIdentity, - expiryheight?: BigNumber, - systemid?: IdentityID, + expiryHeight?: BigNumber, + systemID?: IdentityID, txid?: Buffer, - responseuris?: Array, - signdatamap?: SignDataMap, + responseURIs?: Array, + signDataMap?: SignDataMap, salt?: Buffer }) { this.flags = data && data.flags ? data.flags : new BN("0", 10); - if (data?.requestid) { - this.requestid = data.requestid; - } else this.requestid = new BN("0", 10); + if (data?.requestID) { + this.requestID = data.requestID; + } else this.requestID = new BN("0", 10); - if (data?.createdat) { - this.createdat = data.createdat; - } else this.createdat = new BN("0", 10); + if (data?.createdAt) { + this.createdAt = data.createdAt; + } else this.createdAt = new BN("0", 10); if (data?.identity) { this.identity = data.identity; } - if (data?.expiryheight) { + if (data?.expiryHeight) { if (!this.expires()) this.toggleExpires(); - this.expiryheight = data.expiryheight; + this.expiryHeight = data.expiryHeight; } - if (data?.systemid) { + if (data?.systemID) { if (!this.containsSystem()) this.toggleContainsSystem(); - this.systemid = data.systemid; + this.systemID = data.systemID; } if (data?.txid) { @@ -95,14 +95,14 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { this.txid = data.txid; } - if (data?.responseuris) { + if (data?.responseURIs) { if (!this.containsResponseUris()) this.toggleContainsResponseUris(); - this.responseuris = data.responseuris; + this.responseURIs = data.responseURIs; } - if (data?.signdatamap) { + if (data?.signDataMap) { if (!this.containsSignData()) this.toggleContainsSignData(); - this.signdatamap = data.signdatamap; + this.signDataMap = data.signDataMap; } if (data?.salt) { @@ -188,31 +188,31 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { length += varint.encodingLength(this.flags); - length += varint.encodingLength(this.requestid); + length += varint.encodingLength(this.requestID); - length += varint.encodingLength(this.createdat); + length += varint.encodingLength(this.createdAt); length += this.identity.getByteLength(); - if (this.expires()) length += varint.encodingLength(this.expiryheight); + if (this.expires()) length += varint.encodingLength(this.expiryHeight); - if (this.containsSystem()) length += this.systemid.getByteLength(); + if (this.containsSystem()) length += this.systemID.getByteLength(); if (this.containsTxid()) { length += UINT_256_LENGTH; } if (this.containsResponseUris()) { - length += varuint.encodingLength(this.responseuris.length); - length += this.responseuris.reduce( + length += varuint.encodingLength(this.responseURIs.length); + length += this.responseURIs.reduce( (sum: number, current: ResponseUri) => sum + current.getByteLength(), 0 ); } if (this.containsSignData()) { - length += varuint.encodingLength(this.signdatamap.size); - for (const [key, value] of this.signdatamap.entries()) { + length += varuint.encodingLength(this.signDataMap.size); + for (const [key, value] of this.signDataMap.entries()) { length += fromBase58Check(key).hash.length; length += value.getByteLength(); } @@ -231,15 +231,15 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { writer.writeVarInt(this.flags); - writer.writeVarInt(this.requestid); + writer.writeVarInt(this.requestID); - writer.writeVarInt(this.createdat); + writer.writeVarInt(this.createdAt); writer.writeSlice(this.identity.toBuffer()); - if (this.expires()) writer.writeVarInt(this.expiryheight); + if (this.expires()) writer.writeVarInt(this.expiryHeight); - if (this.containsSystem()) writer.writeSlice(this.systemid.toBuffer()); + if (this.containsSystem()) writer.writeSlice(this.systemID.toBuffer()); if (this.containsTxid()) { if (this.txid.length !== UINT_256_LENGTH) throw new Error("invalid txid length"); @@ -248,12 +248,12 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { } if (this.containsResponseUris()) { - writer.writeArray(this.responseuris.map((x) => x.toBuffer())); + writer.writeArray(this.responseURIs.map((x) => x.toBuffer())); } if (this.containsSignData()) { - writer.writeCompactSize(this.signdatamap.size); - for (const [key, value] of this.signdatamap.entries()) { + writer.writeCompactSize(this.signDataMap.size); + for (const [key, value] of this.signDataMap.entries()) { writer.writeSlice(fromBase58Check(key).hash); writer.writeSlice(value.toBuffer()); } @@ -271,20 +271,20 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { this.flags = reader.readVarInt(); - this.requestid = reader.readVarInt(); + this.requestID = reader.readVarInt(); - this.createdat = reader.readVarInt(); + this.createdAt = reader.readVarInt(); this.identity = new PartialIdentity(); reader.offset = this.identity.fromBuffer(reader.buffer, reader.offset, parseVdxfObjects); if (this.expires()) { - this.expiryheight = reader.readVarInt(); + this.expiryHeight = reader.readVarInt(); } if (this.containsSystem()) { - this.systemid = new IdentityID(); - reader.offset = this.systemid.fromBuffer(reader.buffer, reader.offset); + this.systemID = new IdentityID(); + reader.offset = this.systemID.fromBuffer(reader.buffer, reader.offset); } if (this.containsTxid()) { @@ -292,7 +292,7 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { } if (this.containsResponseUris()) { - this.responseuris = []; + this.responseURIs = []; const urisLength = reader.readCompactSize(); for (let i = 0; i < urisLength; i++) { @@ -301,12 +301,12 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { reader.buffer, reader.offset ); - this.responseuris.push(uri); + this.responseURIs.push(uri); } } if (this.containsSignData()) { - this.signdatamap = new Map(); + this.signDataMap = new Map(); const size = reader.readCompactSize(); @@ -316,7 +316,7 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { reader.offset = value.fromBuffer(reader.buffer, reader.offset); - this.signdatamap.set(key, value); + this.signDataMap.set(key, value); } } @@ -330,48 +330,48 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { toJson(): IdentityUpdateRequestDetailsJson { let signDataJson: { [key: string]: PartialSignDataJson }; - if (this.signdatamap) { + if (this.signDataMap) { signDataJson = {}; - for (const [key, psd] of this.signdatamap.entries()) { + for (const [key, psd] of this.signDataMap.entries()) { signDataJson[key] = psd.toJson(); } } return { flags: this.flags ? this.flags.toString(10) : undefined, - requestid: this.requestid ? this.requestid.toString(10) : undefined, - createdat: this.createdat ? this.createdat.toString(10) : undefined, + requestid: this.requestID ? this.requestID.toString(10) : undefined, + createdat: this.createdAt ? this.createdAt.toString(10) : undefined, identity: this.identity ? this.identity.toJson() : undefined, - expiryheight: this.expiryheight ? this.expiryheight.toString(10) : undefined, - systemid: this.systemid ? this.systemid.toAddress() : undefined, + expiryheight: this.expiryHeight ? this.expiryHeight.toString(10) : undefined, + systemid: this.systemID ? this.systemID.toAddress() : undefined, txid: this.txid ? (Buffer.from(this.txid.toString('hex'), 'hex').reverse()).toString('hex') : undefined, - responseuris: this.responseuris ? this.responseuris.map(x => x.toJson()) : undefined, + responseuris: this.responseURIs ? this.responseURIs.map(x => x.toJson()) : undefined, signdatamap: signDataJson, salt: this.salt ? this.salt.toString('hex') : undefined } } static fromJson(json: IdentityUpdateRequestDetailsJson): IdentityUpdateRequestDetails { - let signdatamap: SignDataMap; + let signDataMap: SignDataMap; if (json.signdatamap) { - signdatamap = new Map(); + signDataMap = new Map(); for (const key in json.signdatamap) { - signdatamap.set(key, PartialSignData.fromJson(json.signdatamap[key])) + signDataMap.set(key, PartialSignData.fromJson(json.signdatamap[key])) } } return new IdentityUpdateRequestDetails({ flags: json.flags ? new BN(json.flags, 10) : undefined, - requestid: json.requestid ? new BN(json.requestid, 10) : undefined, - createdat: json.createdat ? new BN(json.createdat, 10) : undefined, + requestID: json.requestid ? new BN(json.requestid, 10) : undefined, + createdAt: json.createdat ? new BN(json.createdat, 10) : undefined, identity: json.identity ? PartialIdentity.fromJson(json.identity) : undefined, - expiryheight: json.expiryheight ? new BN(json.expiryheight, 10) : undefined, - systemid: json.systemid ? IdentityID.fromAddress(json.systemid) : undefined, - responseuris: json.responseuris ? json.responseuris.map(x => ResponseUri.fromJson(x)) : undefined, - signdatamap, + expiryHeight: json.expiryheight ? new BN(json.expiryheight, 10) : undefined, + systemID: json.systemid ? IdentityID.fromAddress(json.systemid) : undefined, + responseURIs: json.responseuris ? json.responseuris.map(x => ResponseUri.fromJson(x)) : undefined, + signDataMap, salt: json.salt ? Buffer.from(json.salt, 'hex') : undefined, txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined, }) @@ -383,7 +383,7 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { const idJson = (this.identity.toJson() as VerusCLIVerusIDJsonWithData); if (this.containsSignData()) { - for (const [key, psd] of this.signdatamap.entries()) { + for (const [key, psd] of this.signDataMap.entries()) { idJson.contentmultimap[key] = { "data": psd.toCLIJson() } @@ -398,17 +398,17 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { details?: IdentityUpdateRequestDetailsJson ): IdentityUpdateRequestDetails { let identity: PartialIdentity; - let signdatamap: SignDataMap; + let signDataMap: SignDataMap; if (json.contentmultimap) { const cmm = { ...json.contentmultimap }; for (const key in cmm) { if (cmm[key]['data']) { - if (!signdatamap) signdatamap = new Map(); + if (!signDataMap) signDataMap = new Map(); const psd = PartialSignData.fromCLIJson(cmm[key]['data']); - signdatamap.set(key, psd); + signDataMap.set(key, psd); delete cmm[key]; } @@ -421,12 +421,12 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { return new IdentityUpdateRequestDetails({ identity, - signdatamap, - systemid: details?.systemid ? IdentityID.fromAddress(details.systemid) : undefined, - requestid: details?.requestid ? new BN(details.requestid, 10) : undefined, - createdat: details?.createdat ? new BN(details.createdat, 10) : undefined, - expiryheight: details?.expiryheight ? new BN(details.expiryheight, 10) : undefined, - responseuris: details?.responseuris ? details.responseuris.map(x => ResponseUri.fromJson(x)) : undefined, + signDataMap, + systemID: details?.systemid ? IdentityID.fromAddress(details.systemid) : undefined, + requestID: details?.requestid ? new BN(details.requestid, 10) : undefined, + createdAt: details?.createdat ? new BN(details.createdat, 10) : undefined, + expiryHeight: details?.expiryheight ? new BN(details.expiryheight, 10) : undefined, + responseURIs: details?.responseuris ? details.responseuris.map(x => ResponseUri.fromJson(x)) : undefined, salt: details?.salt ? Buffer.from(details.salt, 'hex') : undefined, txid: details?.txid ? Buffer.from(details.txid, 'hex').reverse() : undefined, }) diff --git a/src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts b/src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts index d73611af..aab3e629 100644 --- a/src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts +++ b/src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts @@ -18,8 +18,8 @@ export type IdentityUpdateResponseDetailsJson = { export class IdentityUpdateResponseDetails implements SerializableEntity { flags?: BigNumber; - requestid?: BigNumber; // ID of request, to be referenced in response - createdat?: BigNumber; // Unix timestamp of request creation + requestID?: BigNumber; // ID of request, to be referenced in response + createdAt?: BigNumber; // Unix timestamp of request creation txid?: Buffer; // 32 byte transaction ID of identity update tx posted to blockchain, on same system asked for in request // stored in natural order, if displayed as text make sure to reverse! salt?: Buffer; // Optional salt @@ -30,19 +30,19 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { constructor (data?: { flags?: BigNumber, - requestid?: BigNumber, - createdat?: BigNumber, + requestID?: BigNumber, + createdAt?: BigNumber, txid?: Buffer, salt?: Buffer }) { this.flags = data && data.flags ? data.flags : new BN("0", 10); - if (data?.requestid) { - this.requestid = data.requestid; - } else this.requestid = new BN("0", 10); + if (data?.requestID) { + this.requestID = data.requestID; + } else this.requestID = new BN("0", 10); - if (data?.createdat) { - this.createdat = data.createdat; + if (data?.createdAt) { + this.createdAt = data.createdAt; } if (data?.txid) { @@ -81,9 +81,9 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { length += varint.encodingLength(this.flags); - length += varint.encodingLength(this.requestid); + length += varint.encodingLength(this.requestID); - length += varint.encodingLength(this.createdat); + length += varint.encodingLength(this.createdAt); if (this.containsTxid()) { length += UINT_256_LENGTH; @@ -104,9 +104,9 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { writer.writeVarInt(this.flags); - writer.writeVarInt(this.requestid); + writer.writeVarInt(this.requestID); - writer.writeVarInt(this.createdat); + writer.writeVarInt(this.createdAt); if (this.containsTxid()) { if (this.txid.length !== UINT_256_LENGTH) throw new Error("invalid txid length"); @@ -126,9 +126,9 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { this.flags = reader.readVarInt(); - this.requestid = reader.readVarInt(); + this.requestID = reader.readVarInt(); - this.createdat = reader.readVarInt(); + this.createdAt = reader.readVarInt(); if (this.containsTxid()) { this.txid = reader.readSlice(UINT_256_LENGTH); @@ -144,8 +144,8 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { toJson(): IdentityUpdateResponseDetailsJson { return { flags: this.flags.toString(10), - requestid: this.requestid.toString(10), - createdat: this.createdat.toString(10), + requestid: this.requestID.toString(10), + createdat: this.createdAt.toString(10), txid: this.containsTxid() ? (Buffer.from(this.txid.toString('hex'), 'hex').reverse()).toString('hex') : undefined, salt: this.containsSalt() ? this.salt.toString('hex') : undefined } @@ -154,8 +154,8 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { static fromJson(json: IdentityUpdateResponseDetailsJson): IdentityUpdateResponseDetails { return new IdentityUpdateResponseDetails({ flags: new BN(json.flags, 10), - requestid: new BN(json.requestid, 10), - createdat: new BN(json.createdat, 10), + requestID: new BN(json.requestid, 10), + createdAt: new BN(json.createdat, 10), txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined, salt: json.salt ? Buffer.from(json.salt, 'hex') : undefined }); From fa476db755416e08efe2d1a802203c71eb135f83 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Thu, 30 Oct 2025 18:34:06 +0100 Subject: [PATCH 038/123] Remove deprecated IdentityUpdateEnvelope --- dist/constants/ordinals/types.d.ts | 4 +- dist/vdxf/classes/index.d.ts | 1 - dist/vdxf/classes/index.js | 1 - .../vdxf/identityupdateenvelope.test.ts | 2 +- src/constants/ordinals/types.ts | 4 +- .../identity/IdentityUpdateEnvelope.ts | 301 ------------------ src/vdxf/classes/index.ts | 1 - 7 files changed, 5 insertions(+), 309 deletions(-) delete mode 100644 src/vdxf/classes/identity/IdentityUpdateEnvelope.ts diff --git a/dist/constants/ordinals/types.d.ts b/dist/constants/ordinals/types.d.ts index 0d71c536..4bb2870c 100644 --- a/dist/constants/ordinals/types.d.ts +++ b/dist/constants/ordinals/types.d.ts @@ -1,5 +1,5 @@ import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; -import { IdentityUpdateDetailsJson, IdentityUpdateRequestDetails, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; +import { IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails; -export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateDetailsJson | IdentityUpdateResponseDetailsJson; +export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson; diff --git a/dist/vdxf/classes/index.d.ts b/dist/vdxf/classes/index.d.ts index 89a2dfee..9484811f 100644 --- a/dist/vdxf/classes/index.d.ts +++ b/dist/vdxf/classes/index.d.ts @@ -20,7 +20,6 @@ export { ProvisioningChallengeInterface as LoginConsentProvisioningChallengeInte export { ProvisioningResponseInterface as LoginConsentProvisioningResponseInterface } from "./provisioning/ProvisioningResponse"; export { ProvisioningDecisionInterface as LoginConsentProvisioningDecisionInterface } from "./provisioning/ProvisioningDecision"; export { ProvisioningResultInterface as LoginConsentProvisioningResultInterface } from "./provisioning/ProvisioningResult"; -export * from "./identity/IdentityUpdateEnvelope"; export * from "./identity/IdentityUpdateRequestDetails"; export * from "./identity/IdentityUpdateResponseDetails"; export * from './ResponseUri'; diff --git a/dist/vdxf/classes/index.js b/dist/vdxf/classes/index.js index ecb217f2..72f81a64 100644 --- a/dist/vdxf/classes/index.js +++ b/dist/vdxf/classes/index.js @@ -41,7 +41,6 @@ var ProvisioningDecision_1 = require("./provisioning/ProvisioningDecision"); Object.defineProperty(exports, "LoginConsentProvisioningDecision", { enumerable: true, get: function () { return ProvisioningDecision_1.ProvisioningDecision; } }); var ProvisioningResult_1 = require("./provisioning/ProvisioningResult"); Object.defineProperty(exports, "LoginConsentProvisioningResult", { enumerable: true, get: function () { return ProvisioningResult_1.ProvisioningResult; } }); -__exportStar(require("./identity/IdentityUpdateEnvelope"), exports); __exportStar(require("./identity/IdentityUpdateRequestDetails"), exports); __exportStar(require("./identity/IdentityUpdateResponseDetails"), exports); __exportStar(require("./ResponseUri"), exports); diff --git a/src/__tests__/vdxf/identityupdateenvelope.test.ts b/src/__tests__/vdxf/identityupdateenvelope.test.ts index af72f794..5f7db2f2 100644 --- a/src/__tests__/vdxf/identityupdateenvelope.test.ts +++ b/src/__tests__/vdxf/identityupdateenvelope.test.ts @@ -18,7 +18,7 @@ import { TEST_TXID } from "../constants/fixtures"; -describe("IdentityUpdateEnvelope Serialization", () => { +describe("IdentityUpdate request/response details Serialization", () => { function testSerialization(instance: any) { const fromBufferInstance = new instance.constructor(); fromBufferInstance.fromBuffer(instance.toBuffer()); diff --git a/src/constants/ordinals/types.ts b/src/constants/ordinals/types.ts index c3417f4d..1726920b 100644 --- a/src/constants/ordinals/types.ts +++ b/src/constants/ordinals/types.ts @@ -1,7 +1,7 @@ import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; -import { IdentityUpdateDetailsJson, IdentityUpdateRequestDetails, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; +import { IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails; -export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateDetailsJson | IdentityUpdateResponseDetailsJson; +export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson; diff --git a/src/vdxf/classes/identity/IdentityUpdateEnvelope.ts b/src/vdxf/classes/identity/IdentityUpdateEnvelope.ts deleted file mode 100644 index e6a3844c..00000000 --- a/src/vdxf/classes/identity/IdentityUpdateEnvelope.ts +++ /dev/null @@ -1,301 +0,0 @@ -import { - WALLET_VDXF_KEY, - VDXFObject, - VerusIDSignature, - VerusIDSignatureJson, -} from "../.."; -import { IDENTITY_AUTH_SIG_VDXF_KEY, IDENTITY_UPDATE_REQUEST_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_VDXF_KEY } from "../../keys"; -import bufferutils from "../../../utils/bufferutils"; -import { VERUS_DATA_SIGNATURE_PREFIX } from "../../../constants/vdxf"; -import createHash = require("create-hash"); -import base64url from "base64url"; -import { BN } from 'bn.js'; -import { BigNumber } from "../../../utils/types/BigNumber"; -import { IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson } from "./IdentityUpdateRequestDetails"; -import { IdentityID } from "../../../pbaas"; -import { IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson } from "./IdentityUpdateResponseDetails"; - -export const IDENTITY_UPDATE_VERSION_CURRENT = new BN(1, 10) -export const IDENTITY_UPDATE_VERSION_FIRSTVALID = new BN(1, 10) -export const IDENTITY_UPDATE_VERSION_LASTVALID = new BN(1, 10) -export const IDENTITY_UPDATE_VERSION_SIGNED = new BN('80000000', 16) -export const IDENTITY_UPDATE_VERSION_MASK = IDENTITY_UPDATE_VERSION_SIGNED; - -export type IdentityUpdateDetails = IdentityUpdateRequestDetails | IdentityUpdateResponseDetails; -export type IdentityUpdateDetailsJson = IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson; - -export interface IdentityUpdateEnvelopeInterface { - details: IdentityUpdateDetails; - systemid?: IdentityID; - signingid?: IdentityID; - signature?: string; - version?: BigNumber; -} - -export interface IdentityUpdateEnvelopeJson { - details: IdentityUpdateDetailsJson; - systemid?: string; - signingid?: string; - signature?: string; - version?: string; -} - -export class IdentityUpdateEnvelope extends VDXFObject { - systemid: IdentityID; - signingid: IdentityID; - signature?: VerusIDSignature; - details: IdentityUpdateDetails; - - constructor( - vdxfkey: string, - request: IdentityUpdateEnvelopeInterface = { - details: undefined - } - ) { - super(vdxfkey); - - if (request.version) this.version = request.version; - else this.version = IDENTITY_UPDATE_VERSION_CURRENT; - - if (!request.details) { - this.details = this.createEmptyDetails(); - } - - this.systemid = request.systemid; - this.signingid = request.signingid; - - if (request.signature) { - this.signature = new VerusIDSignature( - { signature: request.signature }, - IDENTITY_AUTH_SIG_VDXF_KEY, - false - ); - - this.setSigned() - } - - this.details = request.details; - } - - private createEmptyDetails(): IdentityUpdateDetails { - if (this.vdxfkey === IDENTITY_UPDATE_REQUEST_VDXF_KEY.vdxfid) { - return new IdentityUpdateRequestDetails(); - } else if (this.vdxfkey === IDENTITY_UPDATE_RESPONSE_VDXF_KEY.vdxfid) { - return new IdentityUpdateResponseDetails(); - } else throw new Error("Unrecognized vdxf key for identity update"); - } - - getVersionNoFlags(): BigNumber { - return this.version.and(IDENTITY_UPDATE_VERSION_MASK.notn(IDENTITY_UPDATE_VERSION_MASK.bitLength())) - } - - isValidVersion(): boolean { - return this.getVersionNoFlags().gte(IDENTITY_UPDATE_VERSION_FIRSTVALID) && this.getVersionNoFlags().lte(IDENTITY_UPDATE_VERSION_LASTVALID); - } - - isSigned() { - return !!(this.version.and(IDENTITY_UPDATE_VERSION_SIGNED).toNumber()); - } - - setSigned() { - this.version = this.version.or(IDENTITY_UPDATE_VERSION_SIGNED); - } - - getDetailsHash(signedBlockheight: number, signatureVersion: number = 2) { - if (this.isSigned()) { - var heightBufferWriter = new bufferutils.BufferWriter( - Buffer.allocUnsafe(4) - ); - heightBufferWriter.writeUInt32(signedBlockheight); - - if (signatureVersion === 1) { - return createHash("sha256") - .update(VERUS_DATA_SIGNATURE_PREFIX) - .update(this.systemid.toBuffer()) - .update(heightBufferWriter.buffer) - .update(this.signingid.toBuffer()) - .update(this.details.toSha256()) - .digest(); - } else { - return createHash("sha256") - .update(this.systemid.toBuffer()) - .update(heightBufferWriter.buffer) - .update(this.signingid.toBuffer()) - .update(VERUS_DATA_SIGNATURE_PREFIX) - .update(this.details.toSha256()) - .digest(); - } - } else return this.details.toSha256() - } - - protected _dataByteLength(signer: IdentityID = this.signingid): number { - if (this.isSigned()) { - let length = 0; - - const _signature = this.signature - ? this.signature - : new VerusIDSignature( - { signature: "" }, - IDENTITY_AUTH_SIG_VDXF_KEY, - false - ); - - length += this.systemid.getByteLength(); - - length += signer.getByteLength(); - - length += _signature.byteLength(); - length += this.details.getByteLength(); - - return length; - } else return this.details.getByteLength() - } - - protected _toDataBuffer(signer: IdentityID = this.signingid): Buffer { - const writer = new bufferutils.BufferWriter( - Buffer.alloc(this.dataByteLength()) - ); - - if (this.isSigned()) { - const _signature = this.signature - ? this.signature - : new VerusIDSignature( - { signature: "" }, - IDENTITY_AUTH_SIG_VDXF_KEY, - false - ); - - writer.writeSlice(this.systemid.toBuffer()); - - writer.writeSlice(signer.toBuffer()); - - writer.writeSlice(_signature.toBuffer()); - } - - writer.writeSlice(this.details.toBuffer()); - - return writer.buffer; - } - - dataByteLength(): number { - return this._dataByteLength(); - } - - toDataBuffer(): Buffer { - return this._toDataBuffer(); - } - - protected _fromDataBuffer(buffer: Buffer, offset?: number): number { - const reader = new bufferutils.BufferReader(buffer, offset); - const reqLength = reader.readCompactSize(); - - if (reqLength == 0) { - throw new Error("Cannot create request from empty buffer"); - } else { - if (this.isSigned()) { - this.systemid = new IdentityID(); - reader.offset = this.systemid.fromBuffer(reader.buffer, reader.offset); - - this.signingid = new IdentityID(); - reader.offset = this.signingid.fromBuffer(reader.buffer, reader.offset); - - const _sig = new VerusIDSignature(undefined, IDENTITY_AUTH_SIG_VDXF_KEY, false); - reader.offset = _sig.fromBuffer(reader.buffer, reader.offset, IDENTITY_AUTH_SIG_VDXF_KEY.vdxfid); - this.signature = _sig; - } - - const _details = this.createEmptyDetails(); - reader.offset = _details.fromBuffer(reader.buffer, reader.offset); - this.details = _details; - } - - return reader.offset; - } - - fromDataBuffer(buffer: Buffer, offset?: number): number { - return this._fromDataBuffer(buffer, offset); - } - - toWalletDeeplinkUri(): string { - return `${WALLET_VDXF_KEY.vdxfid.toLowerCase()}://x-callback-url/${ - IDENTITY_UPDATE_REQUEST_VDXF_KEY.vdxfid - }/${this.toString(false)}`; - } - - static fromWalletDeeplinkUri(vdxfkey: string, uri: string): IdentityUpdateEnvelope { - const split = uri.split(`${IDENTITY_UPDATE_REQUEST_VDXF_KEY.vdxfid}/`); - const inv = new IdentityUpdateEnvelope(vdxfkey); - inv.fromBuffer(base64url.toBuffer(split[1]), 0, IDENTITY_UPDATE_REQUEST_VDXF_KEY.vdxfid); - - return inv; - } - - toQrString(): string { - return this.toString(true); - } - - static fromQrString(vdxfkey: string, qrstring: string): IdentityUpdateEnvelope { - const inv = new IdentityUpdateEnvelope(vdxfkey); - inv.fromBuffer(base64url.toBuffer(qrstring), 0); - - return inv; - } - - toJson(): IdentityUpdateEnvelopeJson { - return { - systemid: this.systemid ? this.systemid.toAddress() : undefined, - signingid: this.signingid ? this.signingid.toAddress() : undefined, - signature: this.signature ? this.signature.signature : undefined, - details: this.details ? this.details.toJson() : undefined - } - } - - protected static internalFromJson( - json: IdentityUpdateEnvelopeJson, - ctor: new (...args: any[]) => T, - detailsFromJson: (json: IdentityUpdateDetailsJson) => IdentityUpdateDetails - ): T { - return new ctor({ - systemid: json.systemid ? IdentityID.fromAddress(json.systemid) : undefined, - signingid: json.signingid ? IdentityID.fromAddress(json.signingid) : undefined, - signature: json.signature, - details: json.details ? detailsFromJson(json.details) : undefined - }); - } -} - -export class IdentityUpdateRequest extends IdentityUpdateEnvelope { - constructor(request?: IdentityUpdateEnvelopeInterface) { - super(IDENTITY_UPDATE_REQUEST_VDXF_KEY.vdxfid, request); - } - - static fromWalletDeeplinkUri(uri: string): IdentityUpdateRequest { - return (IdentityUpdateEnvelope.fromWalletDeeplinkUri(IDENTITY_UPDATE_REQUEST_VDXF_KEY.vdxfid, uri) as IdentityUpdateRequest); - } - - static fromQrString(qrstring: string): IdentityUpdateRequest { - return (IdentityUpdateEnvelope.fromQrString(IDENTITY_UPDATE_REQUEST_VDXF_KEY.vdxfid, qrstring) as IdentityUpdateRequest); - } - - static fromJson(json: IdentityUpdateEnvelopeJson) { - return IdentityUpdateEnvelope.internalFromJson(json, IdentityUpdateRequest, IdentityUpdateRequestDetails.fromJson); - } -} - -export class IdentityUpdateResponse extends IdentityUpdateEnvelope { - constructor(response?: IdentityUpdateEnvelopeInterface) { - super(IDENTITY_UPDATE_RESPONSE_VDXF_KEY.vdxfid, response); - } - - static fromWalletDeeplinkUri(uri: string): IdentityUpdateEnvelope { - return IdentityUpdateEnvelope.fromWalletDeeplinkUri(IDENTITY_UPDATE_RESPONSE_VDXF_KEY.vdxfid, uri); - } - - static fromQrString(qrstring: string): IdentityUpdateResponse { - return (IdentityUpdateEnvelope.fromQrString(IDENTITY_UPDATE_RESPONSE_VDXF_KEY.vdxfid, qrstring) as IdentityUpdateResponse); - } - - static fromJson(json: IdentityUpdateEnvelopeJson) { - return IdentityUpdateEnvelope.internalFromJson(json, IdentityUpdateResponse, IdentityUpdateResponseDetails.fromJson); - } -} diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index 9824859e..272949bd 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -24,7 +24,6 @@ export { ProvisioningResponseInterface as LoginConsentProvisioningResponseInterf export { ProvisioningDecisionInterface as LoginConsentProvisioningDecisionInterface } from "./provisioning/ProvisioningDecision"; export { ProvisioningResultInterface as LoginConsentProvisioningResultInterface } from "./provisioning/ProvisioningResult"; -export * from "./identity/IdentityUpdateEnvelope"; export * from "./identity/IdentityUpdateRequestDetails"; export * from "./identity/IdentityUpdateResponseDetails"; export * from './ResponseUri'; From 8dd8bb354c2edff7e78e9d692afeb4c7c8600691 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Thu, 30 Oct 2025 18:53:26 +0100 Subject: [PATCH 039/123] Remove salt from identity update response/request details due to its presence in wrapper class --- .../IdentityUpdateRequestDetails.d.ts | 6 --- .../identity/IdentityUpdateRequestDetails.js | 29 +------------ .../IdentityUpdateResponseDetails.d.ts | 6 --- .../identity/IdentityUpdateResponseDetails.js | 31 ++----------- .../vdxf/identityupdateenvelope.test.ts | 28 +++++------- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 8 +--- .../identity/IdentityUpdateRequestDetails.ts | 39 ++--------------- .../identity/IdentityUpdateResponseDetails.ts | 43 ++----------------- 8 files changed, 23 insertions(+), 167 deletions(-) diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts index 342b578d..ff6ad711 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts +++ b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts @@ -21,7 +21,6 @@ export type IdentityUpdateRequestDetailsJson = { signdatamap?: { [key: string]: PartialSignDataJson; }; - salt?: string; txid?: string; }; export declare class IdentityUpdateRequestDetails implements SerializableEntity { @@ -33,7 +32,6 @@ export declare class IdentityUpdateRequestDetails implements SerializableEntity systemID?: IdentityID; responseURIs?: Array; signDataMap?: SignDataMap; - salt?: Buffer; txid?: Buffer; static IDENTITY_UPDATE_REQUEST_VALID: import("bn.js"); static IDENTITY_UPDATE_REQUEST_CONTAINS_SIGNDATA: import("bn.js"); @@ -41,7 +39,6 @@ export declare class IdentityUpdateRequestDetails implements SerializableEntity static IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS: import("bn.js"); static IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM: import("bn.js"); static IDENTITY_UPDATE_REQUEST_CONTAINS_TXID: import("bn.js"); - static IDENTITY_UPDATE_REQUEST_CONTAINS_SALT: import("bn.js"); static IDENTITY_UPDATE_REQUEST_IS_TESTNET: import("bn.js"); constructor(data?: { flags?: BigNumber; @@ -53,21 +50,18 @@ export declare class IdentityUpdateRequestDetails implements SerializableEntity txid?: Buffer; responseURIs?: Array; signDataMap?: SignDataMap; - salt?: Buffer; }); expires(): boolean; containsSignData(): boolean; containsSystem(): boolean; containsTxid(): boolean; containsResponseUris(): boolean; - containsSalt(): boolean; isTestnet(): boolean; toggleExpires(): void; toggleContainsSignData(): void; toggleContainsSystem(): void; toggleContainsTxid(): void; toggleContainsResponseUris(): void; - toggleContainsSalt(): void; toggleIsTestnet(): void; toSha256(): Buffer; getIdentityAddress(): string; diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js index d0a08536..eeeb5bc9 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js +++ b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js @@ -55,11 +55,6 @@ class IdentityUpdateRequestDetails { this.toggleContainsSignData(); this.signDataMap = data.signDataMap; } - if (data === null || data === void 0 ? void 0 : data.salt) { - if (!this.containsSalt()) - this.toggleContainsSalt(); - this.salt = data.salt; - } } expires() { return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_EXPIRES).toNumber()); @@ -76,9 +71,6 @@ class IdentityUpdateRequestDetails { containsResponseUris() { return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS).toNumber()); } - containsSalt() { - return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SALT).toNumber()); - } isTestnet() { return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET).toNumber()); } @@ -97,9 +89,6 @@ class IdentityUpdateRequestDetails { toggleContainsResponseUris() { this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS); } - toggleContainsSalt() { - this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SALT); - } toggleIsTestnet() { this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET); } @@ -144,10 +133,6 @@ class IdentityUpdateRequestDetails { length += value.getByteLength(); } } - if (this.containsSalt()) { - length += varuint_1.default.encodingLength(this.salt.length); - length += this.salt.length; - } return length; } toBuffer() { @@ -175,9 +160,6 @@ class IdentityUpdateRequestDetails { writer.writeSlice(value.toBuffer()); } } - if (this.containsSalt()) { - writer.writeVarSlice(this.salt); - } return writer.buffer; } fromBuffer(buffer, offset = 0, parseVdxfObjects = true) { @@ -216,9 +198,6 @@ class IdentityUpdateRequestDetails { this.signDataMap.set(key, value); } } - if (this.containsSalt()) { - this.salt = reader.readVarSlice(); - } return reader.offset; } toJson() { @@ -238,8 +217,7 @@ class IdentityUpdateRequestDetails { systemid: this.systemID ? this.systemID.toAddress() : undefined, txid: this.txid ? (Buffer.from(this.txid.toString('hex'), 'hex').reverse()).toString('hex') : undefined, responseuris: this.responseURIs ? this.responseURIs.map(x => x.toJson()) : undefined, - signdatamap: signDataJson, - salt: this.salt ? this.salt.toString('hex') : undefined + signdatamap: signDataJson }; } static fromJson(json) { @@ -259,7 +237,6 @@ class IdentityUpdateRequestDetails { systemID: json.systemid ? pbaas_1.IdentityID.fromAddress(json.systemid) : undefined, responseURIs: json.responseuris ? json.responseuris.map(x => ResponseUri_1.ResponseUri.fromJson(x)) : undefined, signDataMap, - salt: json.salt ? Buffer.from(json.salt, 'hex') : undefined, txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined, }); } @@ -301,7 +278,6 @@ class IdentityUpdateRequestDetails { createdAt: (details === null || details === void 0 ? void 0 : details.createdat) ? new bn_js_1.BN(details.createdat, 10) : undefined, expiryHeight: (details === null || details === void 0 ? void 0 : details.expiryheight) ? new bn_js_1.BN(details.expiryheight, 10) : undefined, responseURIs: (details === null || details === void 0 ? void 0 : details.responseuris) ? details.responseuris.map(x => ResponseUri_1.ResponseUri.fromJson(x)) : undefined, - salt: (details === null || details === void 0 ? void 0 : details.salt) ? Buffer.from(details.salt, 'hex') : undefined, txid: (details === null || details === void 0 ? void 0 : details.txid) ? Buffer.from(details.txid, 'hex').reverse() : undefined, }); } @@ -314,5 +290,4 @@ IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_EXPIRES = new bn_js_1.BN(2, IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS = new bn_js_1.BN(4, 10); IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM = new bn_js_1.BN(8, 10); IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID = new bn_js_1.BN(16, 10); -IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SALT = new bn_js_1.BN(32, 10); -IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET = new bn_js_1.BN(64, 10); +IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET = new bn_js_1.BN(32, 10); diff --git a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts index bad34ed2..354b5218 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts +++ b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts @@ -5,28 +5,22 @@ export type IdentityUpdateResponseDetailsJson = { requestid: string; createdat: string; txid?: string; - salt?: string; }; export declare class IdentityUpdateResponseDetails implements SerializableEntity { flags?: BigNumber; requestID?: BigNumber; createdAt?: BigNumber; txid?: Buffer; - salt?: Buffer; static IDENTITY_UPDATE_RESPONSE_VALID: import("bn.js"); static IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID: import("bn.js"); - static IDENTITY_UPDATE_RESPONSE_CONTAINS_SALT: import("bn.js"); constructor(data?: { flags?: BigNumber; requestID?: BigNumber; createdAt?: BigNumber; txid?: Buffer; - salt?: Buffer; }); containsTxid(): boolean; - containsSalt(): boolean; toggleContainsTxid(): void; - toggleContainsSalt(): void; toSha256(): Buffer; getByteLength(): number; toBuffer(): Buffer; diff --git a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js index c096ef2f..bf1fe059 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js +++ b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js @@ -6,7 +6,6 @@ const bufferutils_1 = require("../../../utils/bufferutils"); const createHash = require("create-hash"); const bn_js_1 = require("bn.js"); const pbaas_1 = require("../../../constants/pbaas"); -const varuint_1 = require("../../../utils/varuint"); const { BufferReader, BufferWriter } = bufferutils_1.default; class IdentityUpdateResponseDetails { constructor(data) { @@ -24,24 +23,13 @@ class IdentityUpdateResponseDetails { this.toggleContainsTxid(); this.txid = data.txid; } - if (data === null || data === void 0 ? void 0 : data.salt) { - if (!this.containsSalt()) - this.toggleContainsSalt(); - this.salt = data.salt; - } } containsTxid() { return !!(this.flags.and(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID).toNumber()); } - containsSalt() { - return !!(this.flags.and(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_SALT).toNumber()); - } toggleContainsTxid() { this.flags = this.flags.xor(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID); } - toggleContainsSalt() { - this.flags = this.flags.xor(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_SALT); - } toSha256() { return createHash("sha256").update(this.toBuffer()).digest(); } @@ -53,11 +41,6 @@ class IdentityUpdateResponseDetails { if (this.containsTxid()) { length += pbaas_1.UINT_256_LENGTH; } - if (this.containsSalt()) { - const saltLen = this.salt.length; - length += varuint_1.default.encodingLength(saltLen); - length += saltLen; - } return length; } toBuffer() { @@ -70,9 +53,6 @@ class IdentityUpdateResponseDetails { throw new Error("invalid txid length"); writer.writeSlice(this.txid); } - if (this.containsSalt()) { - writer.writeVarSlice(this.salt); - } return writer.buffer; } fromBuffer(buffer, offset = 0) { @@ -83,9 +63,6 @@ class IdentityUpdateResponseDetails { if (this.containsTxid()) { this.txid = reader.readSlice(pbaas_1.UINT_256_LENGTH); } - if (this.containsSalt()) { - this.salt = reader.readVarSlice(); - } return reader.offset; } toJson() { @@ -93,8 +70,7 @@ class IdentityUpdateResponseDetails { flags: this.flags.toString(10), requestid: this.requestID.toString(10), createdat: this.createdAt.toString(10), - txid: this.containsTxid() ? (Buffer.from(this.txid.toString('hex'), 'hex').reverse()).toString('hex') : undefined, - salt: this.containsSalt() ? this.salt.toString('hex') : undefined + txid: this.containsTxid() ? (Buffer.from(this.txid.toString('hex'), 'hex').reverse()).toString('hex') : undefined }; } static fromJson(json) { @@ -102,12 +78,11 @@ class IdentityUpdateResponseDetails { flags: new bn_js_1.BN(json.flags, 10), requestID: new bn_js_1.BN(json.requestid, 10), createdAt: new bn_js_1.BN(json.createdat, 10), - txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined, - salt: json.salt ? Buffer.from(json.salt, 'hex') : undefined + txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined }); } } exports.IdentityUpdateResponseDetails = IdentityUpdateResponseDetails; +// stored in natural order, if displayed as text make sure to reverse! IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_VALID = new bn_js_1.BN(0, 10); IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID = new bn_js_1.BN(1, 10); -IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_SALT = new bn_js_1.BN(2, 10); diff --git a/src/__tests__/vdxf/identityupdateenvelope.test.ts b/src/__tests__/vdxf/identityupdateenvelope.test.ts index 5f7db2f2..245f7dd4 100644 --- a/src/__tests__/vdxf/identityupdateenvelope.test.ts +++ b/src/__tests__/vdxf/identityupdateenvelope.test.ts @@ -11,8 +11,7 @@ import { TEST_EXPIRYHEIGHT, TEST_MMR_DATA, TEST_PARTIAL_IDENTITY, - TEST_REQUESTID, - TEST_SALT, + TEST_REQUESTID, TEST_SIGNDATA_MAP, TEST_SYSTEMID, TEST_TXID @@ -47,8 +46,7 @@ describe("IdentityUpdate request/response details Serialization", () => { createdAt: TEST_CREATEDAT, systemID: TEST_SYSTEMID, identity: TEST_PARTIAL_IDENTITY, - expiryHeight: TEST_EXPIRYHEIGHT, - salt: TEST_SALT, + expiryHeight: TEST_EXPIRYHEIGHT, signDataMap: TEST_SIGNDATA_MAP }); @@ -70,11 +68,10 @@ describe("IdentityUpdate request/response details Serialization", () => { identity: TEST_PARTIAL_IDENTITY, expiryHeight: TEST_EXPIRYHEIGHT, responseURIs: [ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_REDIRECT), ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_POST)], - signDataMap: TEST_SIGNDATA_MAP, - salt: TEST_SALT + signDataMap: TEST_SIGNDATA_MAP }; - const toRemove = ["expiryHeight", "responseURIs", "signDataMap", "salt", "systemID"]; + const toRemove = ["expiryHeight", "responseURIs", "signDataMap", "systemID"]; for (let i = 0; i < toRemove.length + 1; i++) { const newRequestDetails = new IdentityUpdateRequestDetails({ ...baseRequestDetailsConfig }); @@ -90,9 +87,9 @@ describe("IdentityUpdate request/response details Serialization", () => { test("Remove optional fields from IdentityUpdateResponseDetails", () => { const txidbuf = Buffer.from(TEST_TXID, 'hex').reverse(); - let baseResponseDetailsConfig = { requestID: TEST_REQUESTID, createdAt: TEST_CREATEDAT, txid: txidbuf, TEST_SALT }; + let baseResponseDetailsConfig = { requestID: TEST_REQUESTID, createdAt: TEST_CREATEDAT, txid: txidbuf }; - const toRemove = ["txid", "salt"]; + const toRemove = ["txid"]; for (let i = 0; i < toRemove.length + 1; i++) { const newResponseDetails = new IdentityUpdateResponseDetails({ ...baseResponseDetailsConfig }); @@ -111,8 +108,7 @@ describe("IdentityUpdate request/response details Serialization", () => { createdAt: TEST_CREATEDAT, systemID: TEST_SYSTEMID, identity: TEST_PARTIAL_IDENTITY, - expiryHeight: TEST_EXPIRYHEIGHT, - salt: TEST_SALT, + expiryHeight: TEST_EXPIRYHEIGHT, signDataMap: TEST_SIGNDATA_MAP }); @@ -123,7 +119,7 @@ describe("IdentityUpdate request/response details Serialization", () => { test("Serialize/Deserialize IdentityUpdateResponseDetails to/from JSON", () => { const txidbuf = Buffer.from(TEST_TXID, 'hex').reverse(); - let baseResponseDetailsConfig = { requestID: TEST_REQUESTID, createdAt: TEST_CREATEDAT, txid: txidbuf, salt: TEST_SALT }; + let baseResponseDetailsConfig = { requestID: TEST_REQUESTID, createdAt: TEST_CREATEDAT, txid: txidbuf }; const responseDetails = new IdentityUpdateResponseDetails(baseResponseDetailsConfig); @@ -136,8 +132,7 @@ describe("IdentityUpdate request/response details Serialization", () => { createdAt: TEST_CREATEDAT, systemID: TEST_SYSTEMID, identity: TEST_PARTIAL_IDENTITY, - expiryHeight: TEST_EXPIRYHEIGHT, - salt: TEST_SALT, + expiryHeight: TEST_EXPIRYHEIGHT, signDataMap: TEST_SIGNDATA_MAP }); @@ -149,8 +144,7 @@ describe("IdentityUpdate request/response details Serialization", () => { const responseDetails = new IdentityUpdateResponseDetails({ requestID: TEST_REQUESTID, createdAt: TEST_CREATEDAT, - txid: Buffer.from(TEST_TXID, 'hex').reverse(), - salt: TEST_SALT + txid: Buffer.from(TEST_TXID, 'hex').reverse() }); testJsonSerialization(responseDetails); @@ -202,7 +196,6 @@ describe("IdentityUpdate request/response details Serialization", () => { ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_REDIRECT).toJson(), ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_POST).toJson() ], - salt: TEST_SALT.toString('hex'), txid: TEST_TXID } ); @@ -221,7 +214,6 @@ describe("IdentityUpdate request/response details Serialization", () => { ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_REDIRECT).toJson(), ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_POST).toJson() ], - salt: TEST_SALT.toString('hex'), txid: TEST_TXID }; diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 9c264f4e..9c6c1069 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -166,7 +166,6 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_REDIRECT).toJson(), ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_POST).toJson() ], - salt: TEST_SALT.toString('hex'), txid: TEST_TXID } ); @@ -181,7 +180,6 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d2.createdAt!.toNumber()).toEqual(details.createdAt!.toNumber()); expect(d2.expiryHeight!.toString()).toEqual(details.expiryHeight!.toString()); - expect(d2.salt!.toString('hex')).toEqual(details.salt!.toString('hex')); expect(d2.txid!.toString('hex')).toEqual(details.txid!.toString('hex')); const json = obj.toJson(); @@ -194,7 +192,6 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d3.createdAt!.toNumber()).toEqual(details.createdAt!.toNumber()); expect(d3.expiryHeight!.toString()).toEqual(details.expiryHeight!.toString()); - expect(d3.salt!.toString('hex')).toEqual(details.salt!.toString('hex')); expect(d3.txid!.toString('hex')).toEqual(details.txid!.toString('hex')); }); @@ -202,8 +199,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const details = new IdentityUpdateResponseDetails({ requestID: TEST_REQUESTID, createdAt: TEST_CREATEDAT, - txid: Buffer.from(TEST_TXID, 'hex').reverse(), - salt: TEST_SALT + txid: Buffer.from(TEST_TXID, 'hex').reverse() }); const obj = new IdentityUpdateResponseOrdinalVdxfObject({ data: details }); @@ -214,7 +210,6 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const d2 = (round as IdentityUpdateResponseOrdinalVdxfObject).data; expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d2.createdAt!.toNumber()).toEqual(details.createdAt!.toNumber()); - expect(d2.salt!.toString('hex')).toEqual(details.salt!.toString('hex')); expect(d2.txid!.toString('hex')).toEqual(details.txid!.toString('hex')); const json = obj.toJson(); @@ -225,7 +220,6 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const d3 = (roundJ as IdentityUpdateResponseOrdinalVdxfObject).data; expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d3.createdAt!.toNumber()).toEqual(details.createdAt!.toNumber()); - expect(d3.salt!.toString('hex')).toEqual(details.salt!.toString('hex')); expect(d3.txid!.toString('hex')).toEqual(details.txid!.toString('hex')); }); diff --git a/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts b/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts index 75e7e803..fd8c2798 100644 --- a/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts +++ b/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts @@ -28,7 +28,6 @@ export type IdentityUpdateRequestDetailsJson = { systemid?: string; responseuris?: Array; signdatamap?: { [key: string]: PartialSignDataJson }; - salt?: string; txid?: string; } @@ -41,7 +40,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { systemID?: IdentityID; // System that identity should be updated on (will default to VRSC/VRSCTEST if not present, depending on testnet flag) responseURIs?: Array; // Array of uris + type to send response to (type can be post, redirect, etc. depending on how response is expected to be received) signDataMap?: SignDataMap; // Map of data to pass to signdata - salt?: Buffer; // Optional salt txid?: Buffer; // 32 byte transaction ID of transaction that must be spent to update identity, on same system asked for in request // stored in natural order, if displayed as text make sure to reverse! @@ -51,8 +49,7 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { static IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS = new BN(4, 10); static IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM = new BN(8, 10); static IDENTITY_UPDATE_REQUEST_CONTAINS_TXID = new BN(16, 10); - static IDENTITY_UPDATE_REQUEST_CONTAINS_SALT = new BN(32, 10); - static IDENTITY_UPDATE_REQUEST_IS_TESTNET = new BN(64, 10); + static IDENTITY_UPDATE_REQUEST_IS_TESTNET = new BN(32, 10); constructor (data?: { flags?: BigNumber, @@ -63,8 +60,7 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { systemID?: IdentityID, txid?: Buffer, responseURIs?: Array, - signDataMap?: SignDataMap, - salt?: Buffer + signDataMap?: SignDataMap }) { this.flags = data && data.flags ? data.flags : new BN("0", 10); @@ -104,11 +100,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { if (!this.containsSignData()) this.toggleContainsSignData(); this.signDataMap = data.signDataMap; } - - if (data?.salt) { - if (!this.containsSalt()) this.toggleContainsSalt(); - this.salt = data.salt; - } } expires() { @@ -131,10 +122,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS).toNumber()); } - containsSalt() { - return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SALT).toNumber()); - } - isTestnet() { return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET).toNumber()); } @@ -159,10 +146,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS); } - toggleContainsSalt() { - this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SALT); - } - toggleIsTestnet() { this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET); } @@ -218,11 +201,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { } } - if (this.containsSalt()) { - length += varuint.encodingLength(this.salt.length); - length += this.salt.length; - } - return length; } @@ -259,10 +237,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { } } - if (this.containsSalt()) { - writer.writeVarSlice(this.salt); - } - return writer.buffer; } @@ -320,10 +294,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { } } - if (this.containsSalt()) { - this.salt = reader.readVarSlice() - } - return reader.offset; } @@ -347,8 +317,7 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { systemid: this.systemID ? this.systemID.toAddress() : undefined, txid: this.txid ? (Buffer.from(this.txid.toString('hex'), 'hex').reverse()).toString('hex') : undefined, responseuris: this.responseURIs ? this.responseURIs.map(x => x.toJson()) : undefined, - signdatamap: signDataJson, - salt: this.salt ? this.salt.toString('hex') : undefined + signdatamap: signDataJson } } @@ -372,7 +341,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { systemID: json.systemid ? IdentityID.fromAddress(json.systemid) : undefined, responseURIs: json.responseuris ? json.responseuris.map(x => ResponseUri.fromJson(x)) : undefined, signDataMap, - salt: json.salt ? Buffer.from(json.salt, 'hex') : undefined, txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined, }) } @@ -427,7 +395,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { createdAt: details?.createdat ? new BN(details.createdat, 10) : undefined, expiryHeight: details?.expiryheight ? new BN(details.expiryheight, 10) : undefined, responseURIs: details?.responseuris ? details.responseuris.map(x => ResponseUri.fromJson(x)) : undefined, - salt: details?.salt ? Buffer.from(details.salt, 'hex') : undefined, txid: details?.txid ? Buffer.from(details.txid, 'hex').reverse() : undefined, }) } diff --git a/src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts b/src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts index aab3e629..73a52f3e 100644 --- a/src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts +++ b/src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts @@ -4,7 +4,6 @@ import createHash = require('create-hash'); import { BigNumber } from '../../../utils/types/BigNumber'; import { BN } from 'bn.js'; import { UINT_256_LENGTH } from '../../../constants/pbaas'; -import varuint from '../../../utils/varuint'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; const { BufferReader, BufferWriter } = bufferutils; @@ -12,8 +11,7 @@ export type IdentityUpdateResponseDetailsJson = { flags: string, requestid: string, createdat: string, - txid?: string, - salt?: string + txid?: string } export class IdentityUpdateResponseDetails implements SerializableEntity { @@ -22,18 +20,15 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { createdAt?: BigNumber; // Unix timestamp of request creation txid?: Buffer; // 32 byte transaction ID of identity update tx posted to blockchain, on same system asked for in request // stored in natural order, if displayed as text make sure to reverse! - salt?: Buffer; // Optional salt static IDENTITY_UPDATE_RESPONSE_VALID = new BN(0, 10); static IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID = new BN(1, 10); - static IDENTITY_UPDATE_RESPONSE_CONTAINS_SALT = new BN(2, 10); constructor (data?: { flags?: BigNumber, requestID?: BigNumber, createdAt?: BigNumber, - txid?: Buffer, - salt?: Buffer + txid?: Buffer }) { this.flags = data && data.flags ? data.flags : new BN("0", 10); @@ -49,29 +44,16 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { if (!this.containsTxid()) this.toggleContainsTxid(); this.txid = data.txid; } - - if (data?.salt) { - if (!this.containsSalt()) this.toggleContainsSalt(); - this.salt = data.salt; - } } containsTxid() { return !!(this.flags.and(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID).toNumber()); } - containsSalt() { - return !!(this.flags.and(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_SALT).toNumber()); - } - toggleContainsTxid() { this.flags = this.flags.xor(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID); } - toggleContainsSalt() { - this.flags = this.flags.xor(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_SALT); - } - toSha256() { return createHash("sha256").update(this.toBuffer()).digest(); } @@ -89,13 +71,6 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { length += UINT_256_LENGTH; } - if (this.containsSalt()) { - const saltLen = this.salt.length; - - length += varuint.encodingLength(saltLen); - length += saltLen; - } - return length; } @@ -114,10 +89,6 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { writer.writeSlice(this.txid); } - if (this.containsSalt()) { - writer.writeVarSlice(this.salt); - } - return writer.buffer; } @@ -134,10 +105,6 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { this.txid = reader.readSlice(UINT_256_LENGTH); } - if (this.containsSalt()) { - this.salt = reader.readVarSlice(); - } - return reader.offset; } @@ -146,8 +113,7 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { flags: this.flags.toString(10), requestid: this.requestID.toString(10), createdat: this.createdAt.toString(10), - txid: this.containsTxid() ? (Buffer.from(this.txid.toString('hex'), 'hex').reverse()).toString('hex') : undefined, - salt: this.containsSalt() ? this.salt.toString('hex') : undefined + txid: this.containsTxid() ? (Buffer.from(this.txid.toString('hex'), 'hex').reverse()).toString('hex') : undefined } } @@ -156,8 +122,7 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { flags: new BN(json.flags, 10), requestID: new BN(json.requestid, 10), createdAt: new BN(json.createdat, 10), - txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined, - salt: json.salt ? Buffer.from(json.salt, 'hex') : undefined + txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined }); } } \ No newline at end of file From 1e8079356d8cb7fb3622e07c9e901006fff1a190 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Tue, 4 Nov 2025 15:54:53 +0100 Subject: [PATCH 040/123] Change unnecessary varints to varuints in PartialSignData and IdentityUpdateRequestDetails --- dist/pbaas/PartialSignData.js | 19 ++++++------ .../identity/IdentityUpdateRequestDetails.js | 25 ++++++++-------- src/pbaas/PartialSignData.ts | 18 +++++------ .../identity/IdentityUpdateRequestDetails.ts | 30 ++++++++----------- 4 files changed, 42 insertions(+), 50 deletions(-) diff --git a/dist/pbaas/PartialSignData.js b/dist/pbaas/PartialSignData.js index 327f9053..795f49e4 100644 --- a/dist/pbaas/PartialSignData.js +++ b/dist/pbaas/PartialSignData.js @@ -2,7 +2,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.PartialSignData = void 0; const bn_js_1 = require("bn.js"); -const varint_1 = require("../utils/varint"); const bufferutils_1 = require("../utils/bufferutils"); const IdentityID_1 = require("./IdentityID"); const KeyID_1 = require("./KeyID"); @@ -133,7 +132,7 @@ class PartialSignData { return totalLength; } let length = 0; - length += varint_1.default.encodingLength(this.flags); + length += varuint_1.default.encodingLength(this.flags.toNumber()); if (this.containsAddress()) length += this.address.getByteLength(); if (this.containsPrefixString()) { @@ -147,7 +146,7 @@ class PartialSignData { if (this.containsVdxfKeyNames()) { length += calculateVectorLength(this.vdxfKeyNames, (vdxfname) => vdxfname.length); } - length += varint_1.default.encodingLength(this.hashType); + length += varuint_1.default.encodingLength(this.hashType.toNumber()); if (this.containsBoundhashes()) { length += calculateVectorLength(this.boundHashes, (hash) => hash.length); } @@ -156,7 +155,7 @@ class PartialSignData { } length += 1; // Createmmr boolean value if (this.containsData()) { - length += varint_1.default.encodingLength(this.dataType); + length += varuint_1.default.encodingLength(this.dataType.toNumber()); if (this.isMMRData()) { length += this.data.getByteLength(); } @@ -178,7 +177,7 @@ class PartialSignData { } fromBuffer(buffer, offset = 0) { const reader = new BufferReader(buffer, offset); - this.flags = reader.readVarInt(); + this.flags = new bn_js_1.BN(reader.readCompactSize()); if (this.containsAddress()) { const hash160 = new Hash160_1.Hash160SerEnt(); hash160.fromBuffer(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH)); @@ -207,7 +206,7 @@ class PartialSignData { if (this.containsVdxfKeyNames()) { this.vdxfKeyNames = reader.readVector(); } - this.hashType = reader.readVarInt(); + this.hashType = new bn_js_1.BN(reader.readCompactSize()); if (this.containsBoundhashes()) { this.boundHashes = reader.readVector(); } @@ -218,7 +217,7 @@ class PartialSignData { } this.createMMR = !!reader.readUInt8(); if (this.containsData()) { - this.dataType = reader.readVarInt(); + this.dataType = new bn_js_1.BN(reader.readCompactSize()); if (this.isMMRData()) { const partialMMRData = new PartialMMRData_1.PartialMMRData(); reader.offset = partialMMRData.fromBuffer(reader.buffer, reader.offset); @@ -241,7 +240,7 @@ class PartialSignData { // Make sure getPartialSignDataByteLength() accounts for all fields in your updated model. const writer = new BufferWriter(Buffer.alloc(this.getPartialSignDataByteLength())); // Serialize flags - writer.writeVarInt(this.flags); + writer.writeCompactSize(this.flags.toNumber()); // Address if (this.containsAddress()) { if (!this.address) { @@ -273,7 +272,7 @@ class PartialSignData { } writer.writeVector(this.vdxfKeyNames); } - writer.writeVarInt(this.hashType); + writer.writeCompactSize(this.hashType.toNumber()); // Bound hashes if (this.containsBoundhashes()) { if (!this.boundHashes) { @@ -295,7 +294,7 @@ class PartialSignData { if (!this.data || !this.dataType) { throw new Error("Data is required but not provided"); } - writer.writeVarInt(this.dataType); + writer.writeCompactSize(this.dataType.toNumber()); if (this.isMMRData()) { const mmrData = this.data; writer.writeSlice(mmrData.toBuffer()); diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js index eeeb5bc9..933a8535 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js +++ b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js @@ -1,7 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IdentityUpdateRequestDetails = void 0; -const varint_1 = require("../../../utils/varint"); const varuint_1 = require("../../../utils/varuint"); const bufferutils_1 = require("../../../utils/bufferutils"); const address_1 = require("../../../utils/address"); @@ -111,12 +110,12 @@ class IdentityUpdateRequestDetails { } getByteLength() { let length = 0; - length += varint_1.default.encodingLength(this.flags); - length += varint_1.default.encodingLength(this.requestID); - length += varint_1.default.encodingLength(this.createdAt); + length += varuint_1.default.encodingLength(this.flags.toNumber()); + length += varuint_1.default.encodingLength(this.requestID.toNumber()); + length += varuint_1.default.encodingLength(this.createdAt.toNumber()); length += this.identity.getByteLength(); if (this.expires()) - length += varint_1.default.encodingLength(this.expiryHeight); + length += varuint_1.default.encodingLength(this.expiryHeight.toNumber()); if (this.containsSystem()) length += this.systemID.getByteLength(); if (this.containsTxid()) { @@ -137,12 +136,12 @@ class IdentityUpdateRequestDetails { } toBuffer() { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.flags); - writer.writeVarInt(this.requestID); - writer.writeVarInt(this.createdAt); + writer.writeCompactSize(this.flags.toNumber()); + writer.writeCompactSize(this.requestID.toNumber()); + writer.writeCompactSize(this.createdAt.toNumber()); writer.writeSlice(this.identity.toBuffer()); if (this.expires()) - writer.writeVarInt(this.expiryHeight); + writer.writeCompactSize(this.expiryHeight.toNumber()); if (this.containsSystem()) writer.writeSlice(this.systemID.toBuffer()); if (this.containsTxid()) { @@ -164,13 +163,13 @@ class IdentityUpdateRequestDetails { } fromBuffer(buffer, offset = 0, parseVdxfObjects = true) { const reader = new BufferReader(buffer, offset); - this.flags = reader.readVarInt(); - this.requestID = reader.readVarInt(); - this.createdAt = reader.readVarInt(); + this.flags = new bn_js_1.BN(reader.readCompactSize()); + this.requestID = new bn_js_1.BN(reader.readCompactSize()); + this.createdAt = new bn_js_1.BN(reader.readCompactSize()); this.identity = new PartialIdentity_1.PartialIdentity(); reader.offset = this.identity.fromBuffer(reader.buffer, reader.offset, parseVdxfObjects); if (this.expires()) { - this.expiryHeight = reader.readVarInt(); + this.expiryHeight = new bn_js_1.BN(reader.readCompactSize()); } if (this.containsSystem()) { this.systemID = new pbaas_1.IdentityID(); diff --git a/src/pbaas/PartialSignData.ts b/src/pbaas/PartialSignData.ts index 5fc65092..fa62ee2c 100644 --- a/src/pbaas/PartialSignData.ts +++ b/src/pbaas/PartialSignData.ts @@ -263,7 +263,7 @@ export class PartialSignData implements SerializableEntity { let length = 0; - length += varint.encodingLength(this.flags); + length += varuint.encodingLength(this.flags.toNumber()); if (this.containsAddress()) length += this.address!.getByteLength(); @@ -282,7 +282,7 @@ export class PartialSignData implements SerializableEntity { length += calculateVectorLength(this.vdxfKeyNames!, (vdxfname) => vdxfname.length); } - length += varint.encodingLength(this.hashType); + length += varuint.encodingLength(this.hashType.toNumber()); if (this.containsBoundhashes()) { length += calculateVectorLength(this.boundHashes!, (hash) => hash.length); @@ -295,7 +295,7 @@ export class PartialSignData implements SerializableEntity { length += 1; // Createmmr boolean value if (this.containsData()) { - length += varint.encodingLength(this.dataType!); + length += varuint.encodingLength(this.dataType!.toNumber()); if (this.isMMRData()) { length += (this.data as PartialMMRData).getByteLength(); @@ -322,7 +322,7 @@ export class PartialSignData implements SerializableEntity { fromBuffer(buffer: Buffer, offset: number = 0): number { const reader = new BufferReader(buffer, offset); - this.flags = reader.readVarInt(); + this.flags = new BN(reader.readCompactSize()); if (this.containsAddress()) { const hash160 = new Hash160SerEnt(); @@ -358,7 +358,7 @@ export class PartialSignData implements SerializableEntity { this.vdxfKeyNames = reader.readVector(); } - this.hashType = reader.readVarInt(); + this.hashType = new BN(reader.readCompactSize()); if (this.containsBoundhashes()) { this.boundHashes = reader.readVector(); @@ -375,7 +375,7 @@ export class PartialSignData implements SerializableEntity { this.createMMR = !!reader.readUInt8(); if (this.containsData()) { - this.dataType = reader.readVarInt(); + this.dataType = new BN(reader.readCompactSize()); if (this.isMMRData()) { const partialMMRData = new PartialMMRData(); @@ -403,7 +403,7 @@ export class PartialSignData implements SerializableEntity { const writer = new BufferWriter(Buffer.alloc(this.getPartialSignDataByteLength())); // Serialize flags - writer.writeVarInt(this.flags); + writer.writeCompactSize(this.flags.toNumber()); // Address if (this.containsAddress()) { @@ -441,7 +441,7 @@ export class PartialSignData implements SerializableEntity { writer.writeVector(this.vdxfKeyNames); } - writer.writeVarInt(this.hashType); + writer.writeCompactSize(this.hashType.toNumber()); // Bound hashes if (this.containsBoundhashes()) { @@ -468,7 +468,7 @@ export class PartialSignData implements SerializableEntity { if (!this.data || !this.dataType) { throw new Error("Data is required but not provided"); } - writer.writeVarInt(this.dataType); + writer.writeCompactSize(this.dataType.toNumber()); if (this.isMMRData()) { const mmrData = this.data as PartialMMRData; diff --git a/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts b/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts index fd8c2798..ad976af9 100644 --- a/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts +++ b/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts @@ -169,15 +169,13 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { getByteLength(): number { let length = 0; - length += varint.encodingLength(this.flags); - - length += varint.encodingLength(this.requestID); - - length += varint.encodingLength(this.createdAt); + length += varuint.encodingLength(this.flags.toNumber()); + length += varuint.encodingLength(this.requestID.toNumber()); + length += varuint.encodingLength(this.createdAt.toNumber()); length += this.identity.getByteLength(); - if (this.expires()) length += varint.encodingLength(this.expiryHeight); + if (this.expires()) length += varuint.encodingLength(this.expiryHeight.toNumber()); if (this.containsSystem()) length += this.systemID.getByteLength(); @@ -207,15 +205,13 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { toBuffer() { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.flags); - - writer.writeVarInt(this.requestID); - - writer.writeVarInt(this.createdAt); + writer.writeCompactSize(this.flags.toNumber()); + writer.writeCompactSize(this.requestID.toNumber()); + writer.writeCompactSize(this.createdAt.toNumber()); writer.writeSlice(this.identity.toBuffer()); - if (this.expires()) writer.writeVarInt(this.expiryHeight); + if (this.expires()) writer.writeCompactSize(this.expiryHeight.toNumber()); if (this.containsSystem()) writer.writeSlice(this.systemID.toBuffer()); @@ -243,17 +239,15 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { fromBuffer(buffer: Buffer, offset: number = 0, parseVdxfObjects: boolean = true) { const reader = new BufferReader(buffer, offset); - this.flags = reader.readVarInt(); - - this.requestID = reader.readVarInt(); - - this.createdAt = reader.readVarInt(); + this.flags = new BN(reader.readCompactSize()); + this.requestID = new BN(reader.readCompactSize()); + this.createdAt = new BN(reader.readCompactSize()); this.identity = new PartialIdentity(); reader.offset = this.identity.fromBuffer(reader.buffer, reader.offset, parseVdxfObjects); if (this.expires()) { - this.expiryHeight = reader.readVarInt(); + this.expiryHeight = new BN(reader.readCompactSize()); } if (this.containsSystem()) { From 01e03728ce87144f55b67bc63874ec624623307a Mon Sep 17 00:00:00 2001 From: monkins Date: Sat, 8 Nov 2025 14:08:09 +0000 Subject: [PATCH 041/123] UPdates to flags and labels --- .../vdxf/loginrequestdetails.test.ts | 8 +-- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 4 +- src/vdxf/classes/VerifiableSignatureData.ts | 13 +++- .../AppEncryptionRequestDetails.ts | 33 +++++---- .../requestobjects/LoginRequestDetails.ts | 70 +++++++++---------- 5 files changed, 70 insertions(+), 58 deletions(-) diff --git a/src/__tests__/vdxf/loginrequestdetails.test.ts b/src/__tests__/vdxf/loginrequestdetails.test.ts index 733b0d41..42ff6652 100644 --- a/src/__tests__/vdxf/loginrequestdetails.test.ts +++ b/src/__tests__/vdxf/loginrequestdetails.test.ts @@ -29,7 +29,7 @@ describe("LoginRequestDetails", () => { expect(details.requestId).toBe(TEST_CHALLENGE_ID); expect(details.version.toString()).toBe("1"); expect(details.flags?.toString()).toBe("0"); - expect(details.permissions).toBeNull(); + expect(details.recipientContraints).toBeNull(); expect(details.callbackUris).toBeNull(); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); }); @@ -37,7 +37,7 @@ describe("LoginRequestDetails", () => { test("creates instance with all optional data", () => { const details = new LoginRequestDetails({ requestId: TEST_CHALLENGE_ID, - permissions: [ + recipientContraints: [ { type: LoginRequestDetails.REQUIRED_ID, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }, { type: LoginRequestDetails.REQUIRED_SYSTEM, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, { type: LoginRequestDetails.REQUIRED_PARENT, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } @@ -55,7 +55,7 @@ describe("LoginRequestDetails", () => { newDetails.fromBuffer(detailsBuffer); expect(newDetails.requestId).toBe(TEST_CHALLENGE_ID); - expect(newDetails.permissions?.length).toBe(3); + expect(newDetails.recipientContraints?.length).toBe(3); expect(newDetails.callbackUris?.length).toBe(1); expect(newDetails.expiryTime?.toString()).toBe("2938475938457"); @@ -71,7 +71,7 @@ describe("LoginRequestDetails", () => { expect(details.requestId).toBe(""); expect(details.version.toString()).toBe("1"); expect(details.flags?.toString()).toBe("0"); - expect(details.permissions).toBeNull(); + expect(details.recipientContraints).toBeNull(); expect(details.callbackUris).toBeNull(); }); }); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 1896b972..b8324426 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -172,10 +172,10 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { it('should serialize / deserialize a LoginRequestDetailsOrdinalVdxfObject via buffer', () => { const obj = new LoginRequestDetails({ requestId: "iBJqQMRzpCW1WVYoU2Ty2VbCJnvyTEsE1C", - flags: new BN(LoginRequestDetails.FLAG_HAS_PERMISSIONS) + flags: new BN(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS) .or(new BN(LoginRequestDetails.FLAG_HAS_CALLBACK_URI)) .or(new BN(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME)), - permissions: [{type: 1, identity: new CompactIdAddressObject({ + recipientContraints: [{type: 1, identity: new CompactIdAddressObject({ version: new BN(1), type: CompactIdAddressObject.IS_IDENTITYID, address: "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv", diff --git a/src/vdxf/classes/VerifiableSignatureData.ts b/src/vdxf/classes/VerifiableSignatureData.ts index 3f4696cf..5bb9f199 100644 --- a/src/vdxf/classes/VerifiableSignatureData.ts +++ b/src/vdxf/classes/VerifiableSignatureData.ts @@ -118,6 +118,15 @@ export class VerifiableSignatureData implements SerializableEntity { this.setFlag(VerifiableSignatureData.FLAG_HAS_STATEMENTS); } + calcFlags(): BigNumber { + let flags = new BN(0); + if (this.hasVdxfKeys()) flags = flags.or(VerifiableSignatureData.FLAG_HAS_VDXF_KEYS); + if (this.hasVdxfKeyNames()) flags = flags.or(VerifiableSignatureData.FLAG_HAS_VDXF_KEY_NAMES); + if (this.hasBoundHashes()) flags = flags.or(VerifiableSignatureData.FLAG_HAS_BOUND_HASHES); + if (this.hasStatements()) flags = flags.or(VerifiableSignatureData.FLAG_HAS_STATEMENTS); + return flags; + } + setFlags() { if (this.vdxfKeys) this.setHasVdxfKeys(); if (this.vdxfKeyNames) this.setHasVdxfKeyNames(); @@ -294,10 +303,10 @@ export class VerifiableSignatureData implements SerializableEntity { toJson(): SignatureJsonDataInterface { - this.setFlags(); + const flags = this.calcFlags(); return { version: this.version.toNumber(), - flags: this.flags.toNumber(), + flags: flags.toNumber(), hashtype: this.hashType.toNumber(), systemid: this.systemId.toJson(), identityid: this.identityId.toJson(), diff --git a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts index 7810ebf5..15ca3449 100644 --- a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts @@ -121,37 +121,40 @@ export class AppEncryptionRequestDetails implements SerializableEntity { return valid; } - hasSecondarySeedDerivation(): boolean { - return this.flags.and(AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER).gt(new BN(0)); + hasSecondarySeedDerivation(flags: BigNumber = this.flags): boolean { + return flags.and(AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER).gt(new BN(0)); } - hasFromAddress(): boolean { - return this.flags.and(AppEncryptionRequestDetails.HAS_FROM_ADDRESS).gt(new BN(0)); + hasFromAddress(flags: BigNumber = this.flags): boolean { + return flags.and(AppEncryptionRequestDetails.HAS_FROM_ADDRESS).gt(new BN(0)); } - hasToAddress(): boolean { - return this.flags.and(AppEncryptionRequestDetails.HAS_TO_ADDRESS).gt(new BN(0)); + hasToAddress(flags: BigNumber = this.flags): boolean { + return flags.and(AppEncryptionRequestDetails.HAS_TO_ADDRESS).gt(new BN(0)); } getByteLength(): number { + + const flags = this.calcFlags(); + let length = 0; - length += varuint.encodingLength(this.flags.toNumber()); + length += varuint.encodingLength(flags.toNumber()); // encryptToKey - zaddress encoding (43 bytes for sapling address data) length += 43; // Sapling address decoded data (11 + 32 bytes) length += varuint.encodingLength(this.derivationNumber.toNumber()); - if (this.hasSecondarySeedDerivation()) { + if (this.hasSecondarySeedDerivation(flags)) { length += varint.encodingLength(this.secondaryDerivationNumber); } - if (this.hasFromAddress()) { + if (this.hasFromAddress(flags)) { length += this.fromAddress.getByteLength(); } - if (this.hasToAddress()) { + if (this.hasToAddress(flags)) { length += this.toAddress.getByteLength(); } @@ -159,11 +162,11 @@ export class AppEncryptionRequestDetails implements SerializableEntity { } toBuffer(): Buffer { - + const flags = this.calcFlags(); const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); // Write flags - writer.writeCompactSize(this.flags.toNumber()); + writer.writeCompactSize(flags.toNumber()); // Write encryptToAddress as decoded sapling address data const saplingData = decodeSaplingAddress(this.encryptToZAddress); @@ -172,15 +175,15 @@ export class AppEncryptionRequestDetails implements SerializableEntity { // Write mandatory derivation number writer.writeVarInt(this.derivationNumber); - if (this.hasSecondarySeedDerivation()) { + if (this.hasSecondarySeedDerivation(flags)) { writer.writeVarInt(this.secondaryDerivationNumber); } - if (this.hasFromAddress()) { + if (this.hasFromAddress(flags)) { writer.writeSlice(this.fromAddress.toBuffer()); } - if (this.hasToAddress()) { + if (this.hasToAddress(flags)) { writer.writeSlice(this.toAddress.toBuffer()); } diff --git a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts index 8ea09340..688d7159 100644 --- a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts @@ -3,14 +3,14 @@ * LoginRequestDetails - Class for handling application login and authentication requests * * This class is used when an application is requesting authentication or login from the user, - * including specific permissions and callback information. The request includes: + * including specific recipientContraints and callback information. The request includes: * - Request ID for tracking the authentication session * - Permission sets defining what access the application is requesting * - Callback URIs for post-authentication redirects * - Optional expiry time for the authentication session * * The user's wallet can use these parameters to present a clear authentication request - * to the user, showing exactly what permissions are being requested and where they will + * to the user, showing exactly what recipientContraints are being requested and where they will * be redirected after successful authentication. This enables secure, user-controlled * authentication flows with granular permission management. */ @@ -29,7 +29,7 @@ export interface LoginRequestDetailsInterface { version?: BigNumber; flags?: BigNumber; requestId: string; - permissions?: Array; + recipientContraints?: Array; callbackUris?: Array; expiryTime?: BigNumber; // UNIX Timestamp } @@ -57,7 +57,7 @@ export interface LoginRequestDetailsJson { version: number; requestid: string; flags: number; - permissions?: Array; + recipientcontraints?: Array; callbackUris?: Array; expirytime?: number; } @@ -66,7 +66,7 @@ export class LoginRequestDetails implements SerializableEntity { version: BigNumber; flags?: BigNumber; requestId: string; - permissions?: Array; + recipientContraints?: Array; callbackUris?: Array; expiryTime?: BigNumber; // UNIX Timestamp @@ -75,11 +75,11 @@ export class LoginRequestDetails implements SerializableEntity { static VERSION_FIRSTVALID = new BN(1, 10) static VERSION_LASTVALID = new BN(1, 10) - static FLAG_HAS_PERMISSIONS = new BN(1, 10); + static FLAG_HAS_RECIPIENT_CONSTRAINTS = new BN(1, 10); static FLAG_HAS_CALLBACK_URI = new BN(2, 10); static FLAG_HAS_EXPIRY_TIME = new BN(4, 10); - // Permission Types - What types of Identity can login, e.g. REQUIRED_SYSTEM and "VRSC" means only identities on the Verus chain can login + // Recipient Constraint Types - What types of Identity can login, e.g. REQUIRED_SYSTEM and "VRSC" means only identities on the Verus chain can login static REQUIRED_ID = 1; static REQUIRED_SYSTEM = 2; static REQUIRED_PARENT = 3; @@ -95,15 +95,15 @@ export class LoginRequestDetails implements SerializableEntity { this.version = request?.version || LoginRequestDetails.DEFAULT_VERSION; this.requestId = request?.requestId || ''; this.flags = request?.flags || new BN(0, 10); - this.permissions = request?.permissions || null; + this.recipientContraints = request?.recipientContraints || null; this.callbackUris = request?.callbackUris || null; this.expiryTime = request?.expiryTime || null; this.setFlags(); } - hasPermissions(): boolean { - return this.flags.and(LoginRequestDetails.FLAG_HAS_PERMISSIONS).eq(LoginRequestDetails.FLAG_HAS_PERMISSIONS); + hasRecipentConstraints(): boolean { + return this.flags.and(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS).eq(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); } hascallbackUris(): boolean { @@ -114,10 +114,10 @@ export class LoginRequestDetails implements SerializableEntity { return this.flags.and(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME).eq(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME); } - calcFlags(): BigNumber { - let flags = new BN(0, 10); - if (this.permissions) { - flags = flags.or(LoginRequestDetails.FLAG_HAS_PERMISSIONS); + calcFlags(flags: BigNumber = this.flags): BigNumber { + + if (this.recipientContraints) { + flags = flags.or(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); } if (this.callbackUris) { flags = flags.or(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); @@ -135,12 +135,12 @@ export class LoginRequestDetails implements SerializableEntity { length += varuint.encodingLength(this.flags.toNumber()); length += 20; // requestId hash length - if (this.hasPermissions()) { + if (this.hasRecipentConstraints()) { - length += varuint.encodingLength(this.permissions.length); - for (let i = 0; i < this.permissions.length; i++) { - length += varuint.encodingLength(this.permissions[i].type); - length += this.permissions[i].identity.getByteLength(); + length += varuint.encodingLength(this.recipientContraints.length); + for (let i = 0; i < this.recipientContraints.length; i++) { + length += varuint.encodingLength(this.recipientContraints[i].type); + length += this.recipientContraints[i].identity.getByteLength(); } } @@ -167,12 +167,12 @@ export class LoginRequestDetails implements SerializableEntity { writer.writeCompactSize(this.flags.toNumber()); writer.writeSlice(fromBase58Check(this.requestId).hash); - if (this.hasPermissions()) { + if (this.hasRecipentConstraints()) { - writer.writeCompactSize(this.permissions.length); - for (let i = 0; i < this.permissions.length; i++) { - writer.writeCompactSize(this.permissions[i].type); - writer.writeSlice(this.permissions[i].identity.toBuffer()); + writer.writeCompactSize(this.recipientContraints.length); + for (let i = 0; i < this.recipientContraints.length; i++) { + writer.writeCompactSize(this.recipientContraints[i].type); + writer.writeSlice(this.recipientContraints[i].identity.toBuffer()); } } @@ -197,15 +197,15 @@ export class LoginRequestDetails implements SerializableEntity { this.flags = new BN(reader.readCompactSize()); this.requestId = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); - if (this.hasPermissions()) { - this.permissions = []; - const permissionsLength = reader.readCompactSize(); - for (let i = 0; i < permissionsLength; i++) { + if (this.hasRecipentConstraints()) { + this.recipientContraints = []; + const recipientContraintsLength = reader.readCompactSize(); + for (let i = 0; i < recipientContraintsLength; i++) { const compactId = new CompactIdAddressObject(); const type = reader.readCompactSize(); const identityOffset = reader.offset; reader.offset = compactId.fromBuffer(buffer, identityOffset); - this.permissions.push({ + this.recipientContraints.push({ type: type, identity: compactId }); @@ -230,14 +230,14 @@ export class LoginRequestDetails implements SerializableEntity { return reader.offset; } - toJson() { + toJson(): LoginRequestDetailsJson { const flags = this.calcFlags(); const retval = { version: this.version.toNumber(), flags: flags.toNumber(), requestid: this.requestId, - permissions: this.permissions ? this.permissions.map(p => ({type: p.type, + recipientcontraints: this.recipientContraints ? this.recipientContraints.map(p => ({type: p.type, identity: p.identity.toJson()})) : undefined, callbackUris: this.callbackUris ? this.callbackUris : undefined, expirytime: this.expiryTime ? this.expiryTime.toNumber() : undefined @@ -254,8 +254,8 @@ export class LoginRequestDetails implements SerializableEntity { loginDetails.flags = new BN(data?.flags || 0); loginDetails.requestId = data.requestid; - if(loginDetails.hasPermissions() && data.permissions) { - loginDetails.permissions = data.permissions.map(p => ({type: p.type, + if(loginDetails.hasRecipentConstraints() && data.recipientcontraints) { + loginDetails.recipientContraints = data.recipientcontraints.map(p => ({type: p.type, identity: CompactIdAddressObject.fromJson(p.identity)})); } @@ -286,8 +286,8 @@ export class LoginRequestDetails implements SerializableEntity { valid = false; } - if (this.hasPermissions()) { - if (!this.permissions || this.permissions.length === 0) { + if (this.hasRecipentConstraints()) { + if (!this.recipientContraints || this.recipientContraints.length === 0) { return false; } } From 3da4555d08bf0c4fa007347c31f93bfe67e674f4 Mon Sep 17 00:00:00 2001 From: monkins Date: Sat, 8 Nov 2025 14:16:24 +0000 Subject: [PATCH 042/123] merge updates --- .../classes/ordinals/OrdinalVdxfObject.ts | 143 ++---------------- 1 file changed, 15 insertions(+), 128 deletions(-) diff --git a/src/vdxf/classes/ordinals/OrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/OrdinalVdxfObject.ts index 6140cac6..2bda5419 100644 --- a/src/vdxf/classes/ordinals/OrdinalVdxfObject.ts +++ b/src/vdxf/classes/ordinals/OrdinalVdxfObject.ts @@ -7,9 +7,9 @@ import { fromBase58Check, getDataKey, toBase58Check, toIAddress } from "../../.. import varint from "../../../utils/varint"; import { HASH160_BYTE_LENGTH, I_ADDR_VERSION, NULL_ADDRESS } from "../../../constants/vdxf"; import { OrdinalVdxfObjectOrdinalMap } from "./OrdinalVdxfObjectOrdinalMap"; -import { DATA_TYPE_OBJECT_DATADESCRIPTOR, VERUSPAY_INVOICE_DETAILS_VDXF_KEY, LOGIN_REQUEST_DETAILS_VDXF_KEY } from "../keys"; -import { DEFAULT_VERUS_CHAINID, DEFAULT_VERUS_CHAINNAME } from "../../constants/pbaas"; -import { LoginRequestDetails, LoginRequestDetailsJson } from "../.."; +import { DEFAULT_VERUS_CHAINNAME } from "../../../constants/pbaas"; +import { OrdinalVdxfObjectReservedData, OrdinalVdxfObjectReservedDataJson } from "../../../constants/ordinals/types"; +import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY, VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING, VDXF_ORDINAL_DATA_DESCRIPTOR } from "../../../constants/ordinals/ordinals"; export interface OrdinalVdxfObjectInterfaceTemplate { version?: BigNumber; @@ -25,8 +25,6 @@ export type OrdinalVdxfObjectJsonTemplate = { data?: T; } -export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | LoginRequestDetails; -export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | LoginRequestDetailsJson ; export type BufferOrOrdinalVdxfObjectReservedData = Buffer | OrdinalVdxfObjectReservedData; export type StringOrOrdinalVdxfObjectReservedDataJson = string | OrdinalVdxfObjectReservedDataJson; @@ -37,13 +35,18 @@ export type OrdinalVdxfObjectDataClass = new (...args: any[]) => OrdinalVdxfObje export type OrdinalVdxfObjectClass = new (...args: any[]) => OrdinalVdxfObject; export const getOrdinalVdxfObjectClassForType = (type: BigNumber): OrdinalVdxfObjectClass => { - if (type.eq(OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR)) return DataDescriptorOrdinalVdxfObject; - else if (type.eq(OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE)) return VerusPayInvoiceOrdinalVdxfObject; - else if (type.eq(OrdinalVdxfObject.ORDINAL_LOGIN_REQUEST_DETAILS)) return LoginRequestDetailsOrdinalVdxfObject; - else if ( - type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR) || - type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING) || - type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY) + if (OrdinalVdxfObjectOrdinalMap.isRecognizedOrdinal(type.toNumber())) { + const key = OrdinalVdxfObjectOrdinalMap.getVdxfKeyForOrdinal(type.toNumber()); + + if (OrdinalVdxfObjectOrdinalMap.hasClassForVdxfKey(key)) { + return OrdinalVdxfObjectOrdinalMap.getClassForVdxfKey(OrdinalVdxfObjectOrdinalMap.getVdxfKeyForOrdinal(type.toNumber())); + } else { + throw new Error("No class found for " + key) + } + } else if ( + type.eq(VDXF_OBJECT_RESERVED_BYTE_I_ADDR) || + type.eq(VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING) || + type.eq(VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY) ) return GeneralTypeOrdinalVdxfObject; else throw new Error("Unrecognized vdxf ordinal object type " + type.toNumber()); } @@ -59,14 +62,6 @@ export class OrdinalVdxfObject implements SerializableEntity { static VERSION_LAST = new BN(1, 10) static VERSION_CURRENT = new BN(1, 10) - static ORDINAL_DATA_DESCRIPTOR = new BN(0, 10); - static ORDINAL_VERUSPAY_INVOICE = new BN(1, 10); - static ORDINAL_LOGIN_REQUEST_DETAILS = new BN(2, 10); - - static VDXF_OBJECT_RESERVED_BYTE_I_ADDR = new BN(102, 10); - static VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new BN(103, 10); - static VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = new BN(104, 10); - constructor( request: OrdinalVdxfObjectInterfaceTemplate = { type: VDXF_ORDINAL_DATA_DESCRIPTOR @@ -243,10 +238,6 @@ export class OrdinalVdxfObject implements SerializableEntity { } } -OrdinalVdxfObjectOrdinalMap.registerOrdinal(OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR.toNumber(), DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid); -OrdinalVdxfObjectOrdinalMap.registerOrdinal(OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE.toNumber(), VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid); -OrdinalVdxfObjectOrdinalMap.registerOrdinal(OrdinalVdxfObject.ORDINAL_LOGIN_REQUEST_DETAILS.toNumber(), LOGIN_REQUEST_DETAILS_VDXF_KEY.vdxfid); - export class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { data: Buffer; key: string; @@ -283,108 +274,4 @@ export class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements S data: details.data ? Buffer.from(details.data as string, 'hex') : undefined }); } -} - -export class SerializableEntityOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { - data: OrdinalVdxfObjectReservedData; - entity: OrdinalVdxfObjectDataClass; - - constructor( - request: OrdinalVdxfObjectInterfaceTemplate, - entity: OrdinalVdxfObjectDataClass - ) { - if (!request || !request.type) throw new Error("Expected request with data and type") - - super({ - type: request.type - }); - - this.entity = entity; - this.data = request.data ? request.data : new entity(); - } - - getDataByteLength(): number { - return this.data.getByteLength() - } - - toDataBuffer(): Buffer { - return this.data.toBuffer(); - } - - fromDataBuffer(buffer: Buffer): void { - this.data = new this.entity(); - this.data.fromBuffer(buffer); - } -} - -export class DataDescriptorOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: DataDescriptor; - - constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { - data: new DataDescriptor() - } - ) { - super( - { - type: OrdinalVdxfObject.ORDINAL_DATA_DESCRIPTOR, - data: request.data - }, - DataDescriptor - ); - } - - static fromJson(details: OrdinalVdxfObjectJsonTemplate): DataDescriptorOrdinalVdxfObject { - return new DataDescriptorOrdinalVdxfObject({ - data: DataDescriptor.fromJson(details.data) - }) - } -} - -export class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: VerusPayInvoiceDetails; - - constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { - data: new VerusPayInvoiceDetails() - } - ) { - super( - { - type: OrdinalVdxfObject.ORDINAL_VERUSPAY_INVOICE, - data: request.data - }, - VerusPayInvoiceDetails - ); - } - - static fromJson(details: OrdinalVdxfObjectJsonTemplate): VerusPayInvoiceOrdinalVdxfObject { - return new VerusPayInvoiceOrdinalVdxfObject({ - data: VerusPayInvoiceDetails.fromJson(details.data) - }) - } -} - -export class LoginRequestDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: LoginRequestDetails; - - constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { - data: new LoginRequestDetails() - } - ) { - super( - { - type: OrdinalVdxfObject.ORDINAL_LOGIN_REQUEST_DETAILS, - data: request.data - }, - LoginRequestDetails - ); - } - - static fromJson(details: OrdinalVdxfObjectJsonTemplate): LoginRequestDetailsOrdinalVdxfObject { - return new LoginRequestDetailsOrdinalVdxfObject({ - data: LoginRequestDetails.fromJson(details.data) - }) - } } \ No newline at end of file From 1ad274a3a66a8a5dee7da34bbf66451d4edd54f3 Mon Sep 17 00:00:00 2001 From: monkins Date: Mon, 10 Nov 2025 12:11:29 +0000 Subject: [PATCH 043/123] merge fix from new naming --- src/__tests__/vdxf/personaluserdatadetails.test.ts | 4 ++-- src/vdxf/classes/VerifiableSignatureData.ts | 14 +++++++------- src/vdxf/classes/index.ts | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/__tests__/vdxf/personaluserdatadetails.test.ts b/src/__tests__/vdxf/personaluserdatadetails.test.ts index 62dfc0a3..ac4d5d2f 100644 --- a/src/__tests__/vdxf/personaluserdatadetails.test.ts +++ b/src/__tests__/vdxf/personaluserdatadetails.test.ts @@ -20,8 +20,8 @@ describe("PersonalUserDataDetails", () => { signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), hashType: new BN(1), flags: new BN(0), - identityId: new CompactIdAddressObject({version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC"}), - systemId: new CompactIdAddressObject({version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC"}), + identityID: new CompactIdAddressObject({version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC"}), + systemID: new CompactIdAddressObject({version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC"}), }) }); diff --git a/src/vdxf/classes/VerifiableSignatureData.ts b/src/vdxf/classes/VerifiableSignatureData.ts index 2ad6e781..57c6498c 100644 --- a/src/vdxf/classes/VerifiableSignatureData.ts +++ b/src/vdxf/classes/VerifiableSignatureData.ts @@ -66,7 +66,7 @@ export class VerifiableSignatureData implements SerializableEntity { constructor(data?: VerifiableSignatureDataInterface) { this.version = data && data.flags ? data.flags : new BN(0); this.flags = data && data.flags ? data.flags : new BN(0); - this.systemID = data && data.systemID ? data.systemID : new CompactIdAddressObject({ flags: CompactIdAddressObject.IS_FQN, address: DEFAULT_VERUS_CHAINNAME }); + this.systemID = data && data.systemID ? data.systemID : new CompactIdAddressObject({ type: CompactIdAddressObject.IS_FQN, address: DEFAULT_VERUS_CHAINNAME }); this.hashType = data && data.hashType ? data.hashType : HASH_TYPE_SHA256; this.identityID = data ? data.identityID : undefined; this.vdxfKeys = data ? data.vdxfKeys : undefined; @@ -301,15 +301,15 @@ export class VerifiableSignatureData implements SerializableEntity { }) } - toJson(): SignatureJsonDataInterface { + toJson(): VerifiableSignatureDataJson { const flags = this.calcFlags(); return { version: this.version.toNumber(), flags: flags.toNumber(), hashtype: this.hashType.toNumber(), - systemid: this.systemId.toJson(), - identityid: this.identityId.toJson(), + systemid: this.systemID.toJson(), + identityid: this.identityID.toJson(), vdxfkeys: this.vdxfKeys, vdxfkeynames: this.vdxfKeyNames, boundhashes: this.boundHashes?.map(x => x.toString('hex')), @@ -318,13 +318,13 @@ export class VerifiableSignatureData implements SerializableEntity { }; } - static fromJson(json: SignatureJsonDataInterface): VerifiableSignatureData { + static fromJson(json: VerifiableSignatureDataJson): VerifiableSignatureData { const instance = new VerifiableSignatureData(); instance.version = new BN(json.version); instance.flags = new BN(json.flags); instance.hashType = new BN(json.hashtype); - instance.systemId = CompactIdAddressObject.fromJson(json.systemid); - instance.identityId = CompactIdAddressObject.fromJson(json.identityid); + instance.systemID = CompactIdAddressObject.fromJson(json.systemid); + instance.identityID = CompactIdAddressObject.fromJson(json.identityid); instance.vdxfKeys = json?.vdxfkeys; instance.vdxfKeyNames = json?.vdxfkeynames; instance.boundHashes = json.boundhashes?.map(x => Buffer.from(x, 'hex')); diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index e9871391..285bee61 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -55,5 +55,5 @@ export * from './requestobjects/PersonalUserDataDetails' export * from './CompactIdAddressObject' export { VerifiableSignatureData, - SignatureJsonDataInterface as VerifiableSignatureDataInterface + VerifiableSignatureDataJson } from './VerifiableSignatureData' \ No newline at end of file From a3612b533dab531aa4999e08216f50654bfa67dc Mon Sep 17 00:00:00 2001 From: monkins Date: Mon, 10 Nov 2025 21:00:20 +0000 Subject: [PATCH 044/123] Fix type --- .../vdxf/loginrequestdetails.test.ts | 8 +-- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 2 +- .../requestobjects/LoginRequestDetails.ts | 50 +++++++++---------- .../requestobjects/PersonalUserDataDetails.ts | 4 +- 4 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/__tests__/vdxf/loginrequestdetails.test.ts b/src/__tests__/vdxf/loginrequestdetails.test.ts index 42ff6652..24a96357 100644 --- a/src/__tests__/vdxf/loginrequestdetails.test.ts +++ b/src/__tests__/vdxf/loginrequestdetails.test.ts @@ -29,7 +29,7 @@ describe("LoginRequestDetails", () => { expect(details.requestId).toBe(TEST_CHALLENGE_ID); expect(details.version.toString()).toBe("1"); expect(details.flags?.toString()).toBe("0"); - expect(details.recipientContraints).toBeNull(); + expect(details.recipientConstraints).toBeNull(); expect(details.callbackUris).toBeNull(); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); }); @@ -37,7 +37,7 @@ describe("LoginRequestDetails", () => { test("creates instance with all optional data", () => { const details = new LoginRequestDetails({ requestId: TEST_CHALLENGE_ID, - recipientContraints: [ + recipientConstraints: [ { type: LoginRequestDetails.REQUIRED_ID, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }, { type: LoginRequestDetails.REQUIRED_SYSTEM, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, { type: LoginRequestDetails.REQUIRED_PARENT, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } @@ -55,7 +55,7 @@ describe("LoginRequestDetails", () => { newDetails.fromBuffer(detailsBuffer); expect(newDetails.requestId).toBe(TEST_CHALLENGE_ID); - expect(newDetails.recipientContraints?.length).toBe(3); + expect(newDetails.recipientConstraints?.length).toBe(3); expect(newDetails.callbackUris?.length).toBe(1); expect(newDetails.expiryTime?.toString()).toBe("2938475938457"); @@ -71,7 +71,7 @@ describe("LoginRequestDetails", () => { expect(details.requestId).toBe(""); expect(details.version.toString()).toBe("1"); expect(details.flags?.toString()).toBe("0"); - expect(details.recipientContraints).toBeNull(); + expect(details.recipientConstraints).toBeNull(); expect(details.callbackUris).toBeNull(); }); }); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 6b6dd776..75278b07 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -259,7 +259,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { flags: new BN(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS) .or(new BN(LoginRequestDetails.FLAG_HAS_CALLBACK_URI)) .or(new BN(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME)), - recipientContraints: [{type: 1, identity: new CompactIdAddressObject({ + recipientConstraints: [{type: 1, identity: new CompactIdAddressObject({ version: new BN(1), type: CompactIdAddressObject.IS_IDENTITYID, address: "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv", diff --git a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts index 688d7159..3e0701f6 100644 --- a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts @@ -3,14 +3,14 @@ * LoginRequestDetails - Class for handling application login and authentication requests * * This class is used when an application is requesting authentication or login from the user, - * including specific recipientContraints and callback information. The request includes: + * including specific recipientConstraints and callback information. The request includes: * - Request ID for tracking the authentication session * - Permission sets defining what access the application is requesting * - Callback URIs for post-authentication redirects * - Optional expiry time for the authentication session * * The user's wallet can use these parameters to present a clear authentication request - * to the user, showing exactly what recipientContraints are being requested and where they will + * to the user, showing exactly what recipientConstraints are being requested and where they will * be redirected after successful authentication. This enables secure, user-controlled * authentication flows with granular permission management. */ @@ -29,12 +29,12 @@ export interface LoginRequestDetailsInterface { version?: BigNumber; flags?: BigNumber; requestId: string; - recipientContraints?: Array; + recipientConstraints?: Array; callbackUris?: Array; expiryTime?: BigNumber; // UNIX Timestamp } -export interface LoginPermissionJson { +export interface RecipientConstraintJson { type: number; identity: CompactIdAddressObjectJson; } @@ -43,7 +43,7 @@ export interface callbackUrisJson { type: number; uri: string; } -export interface LoginPermission { +export interface RecipientConstraint { type: number; identity: CompactIdAddressObject; } @@ -57,7 +57,7 @@ export interface LoginRequestDetailsJson { version: number; requestid: string; flags: number; - recipientcontraints?: Array; + recipientConstraints?: Array; callbackUris?: Array; expirytime?: number; } @@ -66,7 +66,7 @@ export class LoginRequestDetails implements SerializableEntity { version: BigNumber; flags?: BigNumber; requestId: string; - recipientContraints?: Array; + recipientConstraints?: Array; callbackUris?: Array; expiryTime?: BigNumber; // UNIX Timestamp @@ -95,7 +95,7 @@ export class LoginRequestDetails implements SerializableEntity { this.version = request?.version || LoginRequestDetails.DEFAULT_VERSION; this.requestId = request?.requestId || ''; this.flags = request?.flags || new BN(0, 10); - this.recipientContraints = request?.recipientContraints || null; + this.recipientConstraints = request?.recipientConstraints || null; this.callbackUris = request?.callbackUris || null; this.expiryTime = request?.expiryTime || null; @@ -116,7 +116,7 @@ export class LoginRequestDetails implements SerializableEntity { calcFlags(flags: BigNumber = this.flags): BigNumber { - if (this.recipientContraints) { + if (this.recipientConstraints) { flags = flags.or(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); } if (this.callbackUris) { @@ -137,10 +137,10 @@ export class LoginRequestDetails implements SerializableEntity { if (this.hasRecipentConstraints()) { - length += varuint.encodingLength(this.recipientContraints.length); - for (let i = 0; i < this.recipientContraints.length; i++) { - length += varuint.encodingLength(this.recipientContraints[i].type); - length += this.recipientContraints[i].identity.getByteLength(); + length += varuint.encodingLength(this.recipientConstraints.length); + for (let i = 0; i < this.recipientConstraints.length; i++) { + length += varuint.encodingLength(this.recipientConstraints[i].type); + length += this.recipientConstraints[i].identity.getByteLength(); } } @@ -169,10 +169,10 @@ export class LoginRequestDetails implements SerializableEntity { if (this.hasRecipentConstraints()) { - writer.writeCompactSize(this.recipientContraints.length); - for (let i = 0; i < this.recipientContraints.length; i++) { - writer.writeCompactSize(this.recipientContraints[i].type); - writer.writeSlice(this.recipientContraints[i].identity.toBuffer()); + writer.writeCompactSize(this.recipientConstraints.length); + for (let i = 0; i < this.recipientConstraints.length; i++) { + writer.writeCompactSize(this.recipientConstraints[i].type); + writer.writeSlice(this.recipientConstraints[i].identity.toBuffer()); } } @@ -198,14 +198,14 @@ export class LoginRequestDetails implements SerializableEntity { this.requestId = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); if (this.hasRecipentConstraints()) { - this.recipientContraints = []; - const recipientContraintsLength = reader.readCompactSize(); - for (let i = 0; i < recipientContraintsLength; i++) { + this.recipientConstraints = []; + const recipientConstraintsLength = reader.readCompactSize(); + for (let i = 0; i < recipientConstraintsLength; i++) { const compactId = new CompactIdAddressObject(); const type = reader.readCompactSize(); const identityOffset = reader.offset; reader.offset = compactId.fromBuffer(buffer, identityOffset); - this.recipientContraints.push({ + this.recipientConstraints.push({ type: type, identity: compactId }); @@ -237,7 +237,7 @@ export class LoginRequestDetails implements SerializableEntity { version: this.version.toNumber(), flags: flags.toNumber(), requestid: this.requestId, - recipientcontraints: this.recipientContraints ? this.recipientContraints.map(p => ({type: p.type, + recipientConstraints: this.recipientConstraints ? this.recipientConstraints.map(p => ({type: p.type, identity: p.identity.toJson()})) : undefined, callbackUris: this.callbackUris ? this.callbackUris : undefined, expirytime: this.expiryTime ? this.expiryTime.toNumber() : undefined @@ -254,8 +254,8 @@ export class LoginRequestDetails implements SerializableEntity { loginDetails.flags = new BN(data?.flags || 0); loginDetails.requestId = data.requestid; - if(loginDetails.hasRecipentConstraints() && data.recipientcontraints) { - loginDetails.recipientContraints = data.recipientcontraints.map(p => ({type: p.type, + if(loginDetails.hasRecipentConstraints() && data.recipientConstraints) { + loginDetails.recipientConstraints = data.recipientConstraints.map(p => ({type: p.type, identity: CompactIdAddressObject.fromJson(p.identity)})); } @@ -287,7 +287,7 @@ export class LoginRequestDetails implements SerializableEntity { } if (this.hasRecipentConstraints()) { - if (!this.recipientContraints || this.recipientContraints.length === 0) { + if (!this.recipientConstraints || this.recipientConstraints.length === 0) { return false; } } diff --git a/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts b/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts index 8b858d74..9aa3ba75 100644 --- a/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts +++ b/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts @@ -23,7 +23,7 @@ import bufferutils from '../../../utils/bufferutils'; const { BufferReader, BufferWriter } = bufferutils; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { DataDescriptor, DataDescriptorJson } from '../../../pbaas'; -import { VerifiableSignatureData, SignatureJsonDataInterface } from '../../../vdxf/classes/VerifiableSignatureData'; +import { VerifiableSignatureData, VerifiableSignatureDataJson } from '../../../vdxf/classes/VerifiableSignatureData'; export interface PersonalUserDataDetailsInterface { @@ -39,7 +39,7 @@ export interface PersonalUserDataDetailsJson { flags: number; signableobjects: Array; // Array of signable data objects statements?: Array; - signature?: SignatureJsonDataInterface + signature?: VerifiableSignatureDataJson } export class PersonalUserDataDetails implements SerializableEntity { From 7e95a86fa2239c121c0fabacc088e44a6d22e6e8 Mon Sep 17 00:00:00 2001 From: monkins Date: Mon, 10 Nov 2025 21:02:46 +0000 Subject: [PATCH 045/123] Update Acronym --- .../vdxf/loginrequestdetails.test.ts | 8 +-- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 2 +- .../requestobjects/LoginRequestDetails.ts | 58 +++++++++---------- 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/__tests__/vdxf/loginrequestdetails.test.ts b/src/__tests__/vdxf/loginrequestdetails.test.ts index 24a96357..fa1c26f3 100644 --- a/src/__tests__/vdxf/loginrequestdetails.test.ts +++ b/src/__tests__/vdxf/loginrequestdetails.test.ts @@ -30,7 +30,7 @@ describe("LoginRequestDetails", () => { expect(details.version.toString()).toBe("1"); expect(details.flags?.toString()).toBe("0"); expect(details.recipientConstraints).toBeNull(); - expect(details.callbackUris).toBeNull(); + expect(details.callbackURIs).toBeNull(); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); }); @@ -42,7 +42,7 @@ describe("LoginRequestDetails", () => { { type: LoginRequestDetails.REQUIRED_SYSTEM, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, { type: LoginRequestDetails.REQUIRED_PARENT, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } ], - callbackUris: [{ + callbackURIs: [{ type: LoginRequestDetails.TYPE_WEBHOOK, uri: "https://example.com/callback" }], @@ -56,7 +56,7 @@ describe("LoginRequestDetails", () => { expect(newDetails.requestId).toBe(TEST_CHALLENGE_ID); expect(newDetails.recipientConstraints?.length).toBe(3); - expect(newDetails.callbackUris?.length).toBe(1); + expect(newDetails.callbackURIs?.length).toBe(1); expect(newDetails.expiryTime?.toString()).toBe("2938475938457"); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); @@ -72,7 +72,7 @@ describe("LoginRequestDetails", () => { expect(details.version.toString()).toBe("1"); expect(details.flags?.toString()).toBe("0"); expect(details.recipientConstraints).toBeNull(); - expect(details.callbackUris).toBeNull(); + expect(details.callbackURIs).toBeNull(); }); }); }); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 75278b07..2d82c6f8 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -265,7 +265,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { address: "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv", rootSystemName: "VRSC" })}], - callbackUris: [{type: 2, uri: "https://example.com/callback"}], + callbackURIs: [{type: 2, uri: "https://example.com/callback"}], expiryTime: new BN(345353453), }); diff --git a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts index 3e0701f6..01ebe5a3 100644 --- a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts @@ -30,7 +30,7 @@ export interface LoginRequestDetailsInterface { flags?: BigNumber; requestId: string; recipientConstraints?: Array; - callbackUris?: Array; + callbackURIs?: Array; expiryTime?: BigNumber; // UNIX Timestamp } @@ -39,7 +39,7 @@ export interface RecipientConstraintJson { identity: CompactIdAddressObjectJson; } -export interface callbackUrisJson { +export interface callbackURIsJson { type: number; uri: string; } @@ -48,7 +48,7 @@ export interface RecipientConstraint { identity: CompactIdAddressObject; } -export interface callbackUris { +export interface callbackURIs { type: number; uri: string; } @@ -58,7 +58,7 @@ export interface LoginRequestDetailsJson { requestid: string; flags: number; recipientConstraints?: Array; - callbackUris?: Array; + callbackURIs?: Array; expirytime?: number; } @@ -67,7 +67,7 @@ export class LoginRequestDetails implements SerializableEntity { flags?: BigNumber; requestId: string; recipientConstraints?: Array; - callbackUris?: Array; + callbackURIs?: Array; expiryTime?: BigNumber; // UNIX Timestamp // Version @@ -96,7 +96,7 @@ export class LoginRequestDetails implements SerializableEntity { this.requestId = request?.requestId || ''; this.flags = request?.flags || new BN(0, 10); this.recipientConstraints = request?.recipientConstraints || null; - this.callbackUris = request?.callbackUris || null; + this.callbackURIs = request?.callbackURIs || null; this.expiryTime = request?.expiryTime || null; this.setFlags(); @@ -106,7 +106,7 @@ export class LoginRequestDetails implements SerializableEntity { return this.flags.and(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS).eq(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); } - hascallbackUris(): boolean { + hascallbackURIs(): boolean { return this.flags.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI).eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); } @@ -119,7 +119,7 @@ export class LoginRequestDetails implements SerializableEntity { if (this.recipientConstraints) { flags = flags.or(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); } - if (this.callbackUris) { + if (this.callbackURIs) { flags = flags.or(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); } if (this.expiryTime) { @@ -144,12 +144,12 @@ export class LoginRequestDetails implements SerializableEntity { } } - if (this.hascallbackUris()) { - length += varuint.encodingLength(this.callbackUris.length); - for (let i = 0; i < this.callbackUris.length; i++) { - length += varuint.encodingLength(this.callbackUris[i].type); - length += varuint.encodingLength(Buffer.from(this.callbackUris[i].uri, 'utf8').byteLength); - length += Buffer.from(this.callbackUris[i].uri, 'utf8').byteLength; + if (this.hascallbackURIs()) { + length += varuint.encodingLength(this.callbackURIs.length); + for (let i = 0; i < this.callbackURIs.length; i++) { + length += varuint.encodingLength(this.callbackURIs[i].type); + length += varuint.encodingLength(Buffer.from(this.callbackURIs[i].uri, 'utf8').byteLength); + length += Buffer.from(this.callbackURIs[i].uri, 'utf8').byteLength; } } @@ -176,11 +176,11 @@ export class LoginRequestDetails implements SerializableEntity { } } - if (this.hascallbackUris()) { - writer.writeCompactSize(this.callbackUris.length); - for (let i = 0; i < this.callbackUris.length; i++) { - writer.writeCompactSize(this.callbackUris[i].type); - writer.writeVarSlice(Buffer.from(this.callbackUris[i].uri, 'utf8')); + if (this.hascallbackURIs()) { + writer.writeCompactSize(this.callbackURIs.length); + for (let i = 0; i < this.callbackURIs.length; i++) { + writer.writeCompactSize(this.callbackURIs[i].type); + writer.writeVarSlice(Buffer.from(this.callbackURIs[i].uri, 'utf8')); } } @@ -212,11 +212,11 @@ export class LoginRequestDetails implements SerializableEntity { } } - if (this.hascallbackUris()) { - this.callbackUris = []; - const callbackUrisLength = reader.readCompactSize(); - for (let i = 0; i < callbackUrisLength; i++) { - this.callbackUris.push({ + if (this.hascallbackURIs()) { + this.callbackURIs = []; + const callbackURIsLength = reader.readCompactSize(); + for (let i = 0; i < callbackURIsLength; i++) { + this.callbackURIs.push({ type: reader.readCompactSize(), uri: reader.readVarSlice().toString('utf8') }); @@ -239,7 +239,7 @@ export class LoginRequestDetails implements SerializableEntity { requestid: this.requestId, recipientConstraints: this.recipientConstraints ? this.recipientConstraints.map(p => ({type: p.type, identity: p.identity.toJson()})) : undefined, - callbackUris: this.callbackUris ? this.callbackUris : undefined, + callbackURIs: this.callbackURIs ? this.callbackURIs : undefined, expirytime: this.expiryTime ? this.expiryTime.toNumber() : undefined }; @@ -259,8 +259,8 @@ export class LoginRequestDetails implements SerializableEntity { identity: CompactIdAddressObject.fromJson(p.identity)})); } - if(loginDetails.hascallbackUris() && data.callbackUris) { - loginDetails.callbackUris = data.callbackUris.map(c => ({type: c.type, + if(loginDetails.hascallbackURIs() && data.callbackURIs) { + loginDetails.callbackURIs = data.callbackURIs.map(c => ({type: c.type, uri: c.uri})); } @@ -292,8 +292,8 @@ export class LoginRequestDetails implements SerializableEntity { } } - if (this.hascallbackUris()) { - if (!this.callbackUris || this.callbackUris.length === 0) { + if (this.hascallbackURIs()) { + if (!this.callbackURIs || this.callbackURIs.length === 0) { return false; } } From c3eced3a47507dc8dc0696a1e2194054429c8766 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Tue, 11 Nov 2025 17:27:53 +0100 Subject: [PATCH 046/123] Add VerusPay v4 and accomodating functions to VerusPayInvoiceDetails in preperation for generic request --- dist/constants/vdxf/veruspay.d.ts | 7 + dist/constants/vdxf/veruspay.js | 11 + dist/index.d.ts | 1 + dist/index.js | 1 + .../vdxf/classes/payment/VerusPayInvoice.d.ts | 5 - dist/vdxf/classes/payment/VerusPayInvoice.js | 24 +-- .../payment/VerusPayInvoiceDetails.d.ts | 24 ++- .../classes/payment/VerusPayInvoiceDetails.js | 99 ++++++--- src/__tests__/vdxf/veruspayinvoice.test.ts | 194 +++++++++++++++--- src/constants/vdxf/veruspay.ts | 11 + src/index.ts | 1 + src/vdxf/classes/payment/VerusPayInvoice.ts | 20 +- .../classes/payment/VerusPayInvoiceDetails.ts | 113 +++++++--- 13 files changed, 395 insertions(+), 116 deletions(-) create mode 100644 dist/constants/vdxf/veruspay.d.ts create mode 100644 dist/constants/vdxf/veruspay.js create mode 100644 src/constants/vdxf/veruspay.ts diff --git a/dist/constants/vdxf/veruspay.d.ts b/dist/constants/vdxf/veruspay.d.ts new file mode 100644 index 00000000..23206769 --- /dev/null +++ b/dist/constants/vdxf/veruspay.d.ts @@ -0,0 +1,7 @@ +export declare const VERUSPAY_VERSION_3: import("bn.js"); +export declare const VERUSPAY_VERSION_4: import("bn.js"); +export declare const VERUSPAY_VERSION_CURRENT: import("bn.js"); +export declare const VERUSPAY_VERSION_FIRSTVALID: import("bn.js"); +export declare const VERUSPAY_VERSION_LASTVALID: import("bn.js"); +export declare const VERUSPAY_VERSION_SIGNED: import("bn.js"); +export declare const VERUSPAY_VERSION_MASK: import("bn.js"); diff --git a/dist/constants/vdxf/veruspay.js b/dist/constants/vdxf/veruspay.js new file mode 100644 index 00000000..229947cd --- /dev/null +++ b/dist/constants/vdxf/veruspay.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VERUSPAY_VERSION_MASK = exports.VERUSPAY_VERSION_SIGNED = exports.VERUSPAY_VERSION_LASTVALID = exports.VERUSPAY_VERSION_FIRSTVALID = exports.VERUSPAY_VERSION_CURRENT = exports.VERUSPAY_VERSION_4 = exports.VERUSPAY_VERSION_3 = void 0; +const bn_js_1 = require("bn.js"); +exports.VERUSPAY_VERSION_3 = new bn_js_1.BN(3, 10); +exports.VERUSPAY_VERSION_4 = new bn_js_1.BN(4, 10); +exports.VERUSPAY_VERSION_CURRENT = new bn_js_1.BN(4, 10); +exports.VERUSPAY_VERSION_FIRSTVALID = new bn_js_1.BN(3, 10); +exports.VERUSPAY_VERSION_LASTVALID = new bn_js_1.BN(4, 10); +exports.VERUSPAY_VERSION_SIGNED = new bn_js_1.BN('80000000', 16); +exports.VERUSPAY_VERSION_MASK = exports.VERUSPAY_VERSION_SIGNED; diff --git a/dist/index.d.ts b/dist/index.d.ts index 4f4af619..c9fecb3b 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -20,6 +20,7 @@ export * from './constants/pbaas'; export * from './constants/ordinals/register'; export * from './constants/ordinals/ordinals'; export * from './constants/ordinals/types'; +export * from './constants/vdxf/veruspay'; export * from './identity/IdentityDefinition'; export * from './currency/CurrencyDefinition'; export { BN as BigNumber } from 'bn.js'; diff --git a/dist/index.js b/dist/index.js index a926a27e..cf20571c 100644 --- a/dist/index.js +++ b/dist/index.js @@ -37,6 +37,7 @@ __exportStar(require("./constants/pbaas"), exports); __exportStar(require("./constants/ordinals/register"), exports); __exportStar(require("./constants/ordinals/ordinals"), exports); __exportStar(require("./constants/ordinals/types"), exports); +__exportStar(require("./constants/vdxf/veruspay"), exports); __exportStar(require("./identity/IdentityDefinition"), exports); __exportStar(require("./currency/CurrencyDefinition"), exports); var bn_js_1 = require("bn.js"); diff --git a/dist/vdxf/classes/payment/VerusPayInvoice.d.ts b/dist/vdxf/classes/payment/VerusPayInvoice.d.ts index 1a3c38b9..2d01279c 100644 --- a/dist/vdxf/classes/payment/VerusPayInvoice.d.ts +++ b/dist/vdxf/classes/payment/VerusPayInvoice.d.ts @@ -1,11 +1,6 @@ import { VDXFObject, VerusIDSignature, VerusIDSignatureInterface, VerusIDSignatureJson } from "../../"; import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "./VerusPayInvoiceDetails"; import { BigNumber } from "../../../utils/types/BigNumber"; -export declare const VERUSPAY_VERSION_CURRENT: import("bn.js"); -export declare const VERUSPAY_VERSION_FIRSTVALID: import("bn.js"); -export declare const VERUSPAY_VERSION_LASTVALID: import("bn.js"); -export declare const VERUSPAY_VERSION_SIGNED: import("bn.js"); -export declare const VERUSPAY_VERSION_MASK: import("bn.js"); export interface VerusPayInvoiceInterface { details: VerusPayInvoiceDetails; system_id?: string; diff --git a/dist/vdxf/classes/payment/VerusPayInvoice.js b/dist/vdxf/classes/payment/VerusPayInvoice.js index 78f2b762..018b70d6 100644 --- a/dist/vdxf/classes/payment/VerusPayInvoice.js +++ b/dist/vdxf/classes/payment/VerusPayInvoice.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.VerusPayInvoice = exports.VERUSPAY_VERSION_MASK = exports.VERUSPAY_VERSION_SIGNED = exports.VERUSPAY_VERSION_LASTVALID = exports.VERUSPAY_VERSION_FIRSTVALID = exports.VERUSPAY_VERSION_CURRENT = void 0; +exports.VerusPayInvoice = void 0; const __1 = require("../../"); const keys_1 = require("../../keys"); const Hash160_1 = require("./../Hash160"); @@ -11,11 +11,7 @@ const createHash = require("create-hash"); const base64url_1 = require("base64url"); const VerusPayInvoiceDetails_1 = require("./VerusPayInvoiceDetails"); const bn_js_1 = require("bn.js"); -exports.VERUSPAY_VERSION_CURRENT = new bn_js_1.BN(3, 10); -exports.VERUSPAY_VERSION_FIRSTVALID = new bn_js_1.BN(3, 10); -exports.VERUSPAY_VERSION_LASTVALID = new bn_js_1.BN(3, 10); -exports.VERUSPAY_VERSION_SIGNED = new bn_js_1.BN('80000000', 16); -exports.VERUSPAY_VERSION_MASK = exports.VERUSPAY_VERSION_SIGNED; +const veruspay_1 = require("../../../constants/vdxf/veruspay"); class VerusPayInvoice extends __1.VDXFObject { constructor(request = { details: new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails(), @@ -26,23 +22,23 @@ class VerusPayInvoice extends __1.VDXFObject { this.signature = request.signature ? new __1.VerusIDSignature(request.signature, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false) : undefined; - this.details = new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails(request.details); if (request.version) this.version = request.version; else - this.version = exports.VERUSPAY_VERSION_CURRENT; + this.version = veruspay_1.VERUSPAY_VERSION_CURRENT; + this.details = new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails(request.details, this.getVersionNoFlags()); } getVersionNoFlags() { - return this.version.and(exports.VERUSPAY_VERSION_MASK.notn(exports.VERUSPAY_VERSION_MASK.bitLength())); + return this.version.and(veruspay_1.VERUSPAY_VERSION_MASK.notn(veruspay_1.VERUSPAY_VERSION_MASK.bitLength())); } isValidVersion() { - return this.getVersionNoFlags().gte(exports.VERUSPAY_VERSION_FIRSTVALID) && this.getVersionNoFlags().lte(exports.VERUSPAY_VERSION_LASTVALID); + return this.getVersionNoFlags().gte(veruspay_1.VERUSPAY_VERSION_FIRSTVALID) && this.getVersionNoFlags().lte(veruspay_1.VERUSPAY_VERSION_LASTVALID); } isSigned() { - return !!(this.version.and(exports.VERUSPAY_VERSION_SIGNED).toNumber()); + return !!(this.version.and(veruspay_1.VERUSPAY_VERSION_SIGNED).toNumber()); } setSigned() { - this.version = this.version.or(exports.VERUSPAY_VERSION_SIGNED); + this.version = this.version.or(veruspay_1.VERUSPAY_VERSION_SIGNED); } getDetailsHash(signedBlockheight, signatureVersion = 2) { if (this.isSigned()) { @@ -123,7 +119,7 @@ class VerusPayInvoice extends __1.VDXFObject { this.signature = _sig; } const _details = new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails(); - reader.offset = _details.fromBuffer(reader.buffer, reader.offset); + reader.offset = _details.fromBuffer(reader.buffer, reader.offset, this.getVersionNoFlags()); this.details = _details; } return reader.offset; @@ -150,7 +146,7 @@ class VerusPayInvoice extends __1.VDXFObject { } static fromJson(data) { return new VerusPayInvoice({ - details: VerusPayInvoiceDetails_1.VerusPayInvoiceDetails.fromJson(data.details), + details: VerusPayInvoiceDetails_1.VerusPayInvoiceDetails.fromJson(data.details, data.version ? new bn_js_1.BN(data.version) : veruspay_1.VERUSPAY_VERSION_CURRENT), signature: data.signature != null ? __1.VerusIDSignature.fromJson(data.signature) : undefined, signing_id: data.signing_id, system_id: data.system_id, diff --git a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.d.ts b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.d.ts index c7f83f19..e817991d 100644 --- a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.d.ts +++ b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.d.ts @@ -1,6 +1,7 @@ import { BigNumber } from '../../../utils/types/BigNumber'; import { TransferDestination, TransferDestinationJson } from '../../../pbaas/TransferDestination'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { SaplingPaymentAddress } from '../../../pbaas'; export declare const VERUSPAY_INVALID: import("bn.js"); export declare const VERUSPAY_VALID: import("bn.js"); export declare const VERUSPAY_ACCEPTS_CONVERSION: import("bn.js"); @@ -10,19 +11,22 @@ export declare const VERUSPAY_ACCEPTS_ANY_DESTINATION: import("bn.js"); export declare const VERUSPAY_ACCEPTS_ANY_AMOUNT: import("bn.js"); export declare const VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN: import("bn.js"); export declare const VERUSPAY_IS_TESTNET: import("bn.js"); +export declare const VERUSPAY_IS_PRECONVERT: import("bn.js"); +export declare const VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS: import("bn.js"); export type VerusPayInvoiceDetailsJson = { flags?: string; amount?: string; - destination?: TransferDestinationJson; + destination?: TransferDestinationJson | string; requestedcurrencyid: string; expiryheight?: string; maxestimatedslippage?: string; acceptedsystems?: Array; }; export declare class VerusPayInvoiceDetails implements SerializableEntity { + verusPayVersion: BigNumber; flags: BigNumber; amount: BigNumber; - destination: TransferDestination; + destination: TransferDestination | SaplingPaymentAddress; requestedcurrencyid: string; expiryheight: BigNumber; maxestimatedslippage: BigNumber; @@ -30,12 +34,12 @@ export declare class VerusPayInvoiceDetails implements SerializableEntity { constructor(data?: { flags?: BigNumber; amount?: BigNumber; - destination?: TransferDestination; + destination?: TransferDestination | SaplingPaymentAddress; requestedcurrencyid: string; expiryheight?: BigNumber; maxestimatedslippage?: BigNumber; acceptedsystems?: Array; - }); + }, verusPayVersion?: BigNumber); setFlags(flags: { acceptsConversion?: boolean; acceptsNonVerusSystems?: boolean; @@ -44,6 +48,8 @@ export declare class VerusPayInvoiceDetails implements SerializableEntity { acceptsAnyDestination?: boolean; excludesVerusBlockchain?: boolean; isTestnet?: boolean; + isPreconvert?: boolean; + destinationIsSaplingPaymentAddress?: boolean; }): void; getFlagsJson(): { [key: string]: boolean; @@ -56,10 +62,16 @@ export declare class VerusPayInvoiceDetails implements SerializableEntity { expires(): boolean; excludesVerusBlockchain(): boolean; isTestnet(): boolean; + isPreconvert(): boolean; + destinationIsSaplingPaymentAddress(): boolean; isValid(): boolean; + isGTEV4(): boolean; + private getVarUIntEncodingLength; + private writeVarUInt; + private readVarUInt; getByteLength(): number; toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - static fromJson(data: VerusPayInvoiceDetailsJson): VerusPayInvoiceDetails; + fromBuffer(buffer: Buffer, offset?: number, verusPayVersion?: BigNumber): number; + static fromJson(data: VerusPayInvoiceDetailsJson, verusPayVersion?: BigNumber): VerusPayInvoiceDetails; toJson(): VerusPayInvoiceDetailsJson; } diff --git a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js index 7b86943f..c10b4392 100644 --- a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js +++ b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.VerusPayInvoiceDetails = exports.VERUSPAY_IS_TESTNET = exports.VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN = exports.VERUSPAY_ACCEPTS_ANY_AMOUNT = exports.VERUSPAY_ACCEPTS_ANY_DESTINATION = exports.VERUSPAY_EXPIRES = exports.VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS = exports.VERUSPAY_ACCEPTS_CONVERSION = exports.VERUSPAY_VALID = exports.VERUSPAY_INVALID = void 0; +exports.VerusPayInvoiceDetails = exports.VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS = exports.VERUSPAY_IS_PRECONVERT = exports.VERUSPAY_IS_TESTNET = exports.VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN = exports.VERUSPAY_ACCEPTS_ANY_AMOUNT = exports.VERUSPAY_ACCEPTS_ANY_DESTINATION = exports.VERUSPAY_EXPIRES = exports.VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS = exports.VERUSPAY_ACCEPTS_CONVERSION = exports.VERUSPAY_VALID = exports.VERUSPAY_INVALID = void 0; const varint_1 = require("../../../utils/varint"); const varuint_1 = require("../../../utils/varuint"); const bufferutils_1 = require("../../../utils/bufferutils"); @@ -9,18 +9,24 @@ const TransferDestination_1 = require("../../../pbaas/TransferDestination"); const address_1 = require("../../../utils/address"); const vdxf_1 = require("../../../constants/vdxf"); const createHash = require("create-hash"); +const veruspay_1 = require("../../../constants/vdxf/veruspay"); +const pbaas_1 = require("../../../pbaas"); const { BufferReader, BufferWriter } = bufferutils_1.default; +// Added in V3 exports.VERUSPAY_INVALID = new bn_js_1.BN(0, 10); exports.VERUSPAY_VALID = new bn_js_1.BN(1, 10); exports.VERUSPAY_ACCEPTS_CONVERSION = new bn_js_1.BN(2, 10); exports.VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS = new bn_js_1.BN(4, 10); exports.VERUSPAY_EXPIRES = new bn_js_1.BN(8, 10); -exports.VERUSPAY_ACCEPTS_ANY_DESTINATION = new bn_js_1.BN(16, 0); -exports.VERUSPAY_ACCEPTS_ANY_AMOUNT = new bn_js_1.BN(32, 0); -exports.VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN = new bn_js_1.BN(64, 0); -exports.VERUSPAY_IS_TESTNET = new bn_js_1.BN(128, 0); +exports.VERUSPAY_ACCEPTS_ANY_DESTINATION = new bn_js_1.BN(16, 10); +exports.VERUSPAY_ACCEPTS_ANY_AMOUNT = new bn_js_1.BN(32, 10); +exports.VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN = new bn_js_1.BN(64, 10); +exports.VERUSPAY_IS_TESTNET = new bn_js_1.BN(128, 10); +// Added in V4 +exports.VERUSPAY_IS_PRECONVERT = new bn_js_1.BN(256, 10); +exports.VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS = new bn_js_1.BN(512, 10); class VerusPayInvoiceDetails { - constructor(data) { + constructor(data, verusPayVersion = veruspay_1.VERUSPAY_VERSION_CURRENT) { this.flags = exports.VERUSPAY_VALID; this.amount = null; this.destination = null; @@ -28,6 +34,7 @@ class VerusPayInvoiceDetails { this.expiryheight = null; this.maxestimatedslippage = null; this.acceptedsystems = null; + this.verusPayVersion = verusPayVersion; if (data != null) { if (data.flags != null) this.flags = data.flags; @@ -60,6 +67,12 @@ class VerusPayInvoiceDetails { this.flags = this.flags.or(exports.VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN); if (flags.isTestnet) this.flags = this.flags.or(exports.VERUSPAY_IS_TESTNET); + if (this.isGTEV4()) { + if (flags.isPreconvert) + this.flags = this.flags.or(exports.VERUSPAY_IS_PRECONVERT); + if (flags.destinationIsSaplingPaymentAddress) + this.flags = this.flags.or(exports.VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS); + } } getFlagsJson() { return { @@ -69,7 +82,9 @@ class VerusPayInvoiceDetails { acceptsAnyAmount: this.acceptsAnyAmount(), acceptsAnyDestination: this.acceptsAnyDestination(), excludesVerusBlockchain: this.excludesVerusBlockchain(), - isTestnet: this.isTestnet() + isTestnet: this.isTestnet(), + isPreconvert: this.isPreconvert(), + destinationIsSaplingPaymentAddress: this.destinationIsSaplingPaymentAddress() }; } toSha256() { @@ -96,24 +111,53 @@ class VerusPayInvoiceDetails { isTestnet() { return !!(this.flags.and(exports.VERUSPAY_IS_TESTNET).toNumber()); } + isPreconvert() { + return this.isGTEV4() && !!(this.flags.and(exports.VERUSPAY_IS_PRECONVERT).toNumber()); + } + destinationIsSaplingPaymentAddress() { + return this.isGTEV4() && !!(this.flags.and(exports.VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS).toNumber()); + } isValid() { return (!!(this.flags.and(exports.VERUSPAY_VALID).toNumber())); } + isGTEV4() { + return (this.verusPayVersion.gte(veruspay_1.VERUSPAY_VERSION_4)); + } + // Functions to deal with change in v4 + getVarUIntEncodingLength(uint) { + return this.isGTEV4() ? varuint_1.default.encodingLength(uint.toNumber()) : varint_1.default.encodingLength(uint); + } + writeVarUInt(writer = new BufferWriter(Buffer.alloc(0)), uint) { + if (this.isGTEV4()) { + return writer.writeCompactSize(uint.toNumber()); + } + else { + return writer.writeVarInt(uint); + } + } + readVarUInt(reader = new BufferReader(Buffer.alloc(0))) { + if (this.isGTEV4()) { + return new bn_js_1.BN(reader.readCompactSize()); + } + else { + return reader.readVarInt(); + } + } getByteLength() { let length = 0; - length += varint_1.default.encodingLength(this.flags); + length += this.getVarUIntEncodingLength(this.flags); if (!this.acceptsAnyAmount()) { - length += varint_1.default.encodingLength(this.amount); + length += this.getVarUIntEncodingLength(this.amount); } if (!this.acceptsAnyDestination()) { length += this.destination.getByteLength(); } length += (0, address_1.fromBase58Check)(this.requestedcurrencyid).hash.length; if (this.expires()) { - length += varint_1.default.encodingLength(this.expiryheight); + length += this.getVarUIntEncodingLength(this.expiryheight); } if (this.acceptsConversion()) { - length += varint_1.default.encodingLength(this.maxestimatedslippage); + length += this.getVarUIntEncodingLength(this.maxestimatedslippage); } if (this.acceptsNonVerusSystems()) { length += varuint_1.default.encodingLength(this.acceptedsystems.length); @@ -125,38 +169,43 @@ class VerusPayInvoiceDetails { } toBuffer() { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.flags); + this.writeVarUInt(writer, this.flags); if (!this.acceptsAnyAmount()) - writer.writeVarInt(this.amount); + this.writeVarUInt(writer, this.amount); if (!this.acceptsAnyDestination()) writer.writeSlice(this.destination.toBuffer()); writer.writeSlice((0, address_1.fromBase58Check)(this.requestedcurrencyid).hash); if (this.expires()) { - writer.writeVarInt(this.expiryheight); + this.writeVarUInt(writer, this.expiryheight); } if (this.acceptsConversion()) { - writer.writeVarInt(this.maxestimatedslippage); + this.writeVarUInt(writer, this.maxestimatedslippage); } if (this.acceptsNonVerusSystems()) { writer.writeArray(this.acceptedsystems.map(x => (0, address_1.fromBase58Check)(x).hash)); } return writer.buffer; } - fromBuffer(buffer, offset = 0) { + fromBuffer(buffer, offset = 0, verusPayVersion = veruspay_1.VERUSPAY_VERSION_CURRENT) { const reader = new BufferReader(buffer, offset); - this.flags = reader.readVarInt(); + this.verusPayVersion = verusPayVersion; + this.flags = this.readVarUInt(reader); if (!this.acceptsAnyAmount()) - this.amount = reader.readVarInt(); + this.amount = this.readVarUInt(reader); if (!this.acceptsAnyDestination()) { - this.destination = new TransferDestination_1.TransferDestination(); + if (this.destinationIsSaplingPaymentAddress()) { + this.destination = new pbaas_1.SaplingPaymentAddress(); + } + else + this.destination = new TransferDestination_1.TransferDestination(); reader.offset = this.destination.fromBuffer(buffer, reader.offset); } this.requestedcurrencyid = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); if (this.expires()) { - this.expiryheight = reader.readVarInt(); + this.expiryheight = this.readVarUInt(reader); } if (this.acceptsConversion()) { - this.maxestimatedslippage = reader.readVarInt(); + this.maxestimatedslippage = this.readVarUInt(reader); } if (this.acceptsNonVerusSystems()) { const acceptedSystemsBuffers = reader.readArray(20); @@ -164,22 +213,22 @@ class VerusPayInvoiceDetails { } return reader.offset; } - static fromJson(data) { + static fromJson(data, verusPayVersion = veruspay_1.VERUSPAY_VERSION_CURRENT) { return new VerusPayInvoiceDetails({ flags: new bn_js_1.BN(data.flags), amount: data.amount != null ? new bn_js_1.BN(data.amount) : undefined, - destination: data.destination != null ? TransferDestination_1.TransferDestination.fromJson(data.destination) : undefined, + destination: data.destination != null ? typeof data.destination === 'string' ? pbaas_1.SaplingPaymentAddress.fromAddressString(data.destination) : TransferDestination_1.TransferDestination.fromJson(data.destination) : undefined, requestedcurrencyid: data.requestedcurrencyid, expiryheight: data.expiryheight != null ? new bn_js_1.BN(data.expiryheight) : undefined, maxestimatedslippage: data.maxestimatedslippage != null ? new bn_js_1.BN(data.maxestimatedslippage) : undefined, acceptedsystems: data.acceptedsystems - }); + }, verusPayVersion); } toJson() { return { flags: this.flags.toString(), amount: this.acceptsAnyAmount() ? undefined : this.amount.toString(), - destination: this.acceptsAnyDestination() ? undefined : this.destination.toJson(), + destination: this.acceptsAnyDestination() ? undefined : this.destinationIsSaplingPaymentAddress() ? this.destination.toAddressString() : this.destination.toJson(), requestedcurrencyid: this.requestedcurrencyid, expiryheight: this.expires() ? this.expiryheight.toString() : undefined, maxestimatedslippage: this.acceptsConversion() ? this.maxestimatedslippage.toString() : undefined, diff --git a/src/__tests__/vdxf/veruspayinvoice.test.ts b/src/__tests__/vdxf/veruspayinvoice.test.ts index fc292a98..f3d1364c 100644 --- a/src/__tests__/vdxf/veruspayinvoice.test.ts +++ b/src/__tests__/vdxf/veruspayinvoice.test.ts @@ -2,7 +2,9 @@ import { BN } from "bn.js"; import { VerusPayInvoice, VerusPayInvoiceDetails } from "../../vdxf/classes"; import { DEST_PKH, TransferDestination } from "../../pbaas/TransferDestination"; import { fromBase58Check } from "../../utils/address"; -import { VERUSPAY_VERSION_FIRSTVALID, VERUSPAY_VERSION_LASTVALID } from "../../vdxf/classes/payment/VerusPayInvoice"; +import { VERUSPAY_VERSION_3, VERUSPAY_VERSION_4, VERUSPAY_VERSION_FIRSTVALID, VERUSPAY_VERSION_LASTVALID } from "../../constants/vdxf/veruspay"; +import { BigNumber } from "../../utils/types/BigNumber"; +import { SaplingPaymentAddress } from "../../pbaas"; describe('Serializes and deserializes VerusPay invoice', () => { test('basic verus pay invoice with invalid version', async () => { @@ -13,7 +15,7 @@ describe('Serializes and deserializes VerusPay invoice', () => { destination_bytes: fromBase58Check("R9J8E2no2HVjQmzX6Ntes2ShSGcn7WiRcx").hash }), requestedcurrencyid: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq" - }) + }, VERUSPAY_VERSION_3) const inv = new VerusPayInvoice({ details, @@ -43,7 +45,12 @@ describe('Serializes and deserializes VerusPay invoice', () => { expect(() => _inv2.fromBuffer(invbuf2)).toThrow("Unsupported version for vdxf object.") }); - test('basic verus pay invoice without signature', async () => { + const testEveryVersion = async (test: (version: BigNumber) => Promise) => { + await test(VERUSPAY_VERSION_3) + await test(VERUSPAY_VERSION_4) + } + + const basicTestWithoutSig = async (version: BigNumber) => { const details = new VerusPayInvoiceDetails({ amount: new BN(10000000000, 10), destination: new TransferDestination({ @@ -51,10 +58,11 @@ describe('Serializes and deserializes VerusPay invoice', () => { destination_bytes: fromBase58Check("R9J8E2no2HVjQmzX6Ntes2ShSGcn7WiRcx").hash }), requestedcurrencyid: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq" - }) + }, version) const inv = new VerusPayInvoice({ - details + details, + version: version }) const invbuf = inv.toBuffer() @@ -72,9 +80,9 @@ describe('Serializes and deserializes VerusPay invoice', () => { const _invfromqrstring = VerusPayInvoice.fromQrString(invqrstring) expect(_invfromqrstring.toBuffer().toString('hex')).toBe(inv.toBuffer().toString('hex')); - }); + } - test('JSON test basic verus pay invoice without signature', async () => { + const basicJSONTestWithoutSig = async (version: BigNumber) => { const details = new VerusPayInvoiceDetails({ amount: new BN(10000000000, 10), destination: new TransferDestination({ @@ -82,21 +90,22 @@ describe('Serializes and deserializes VerusPay invoice', () => { destination_bytes: fromBase58Check("R9J8E2no2HVjQmzX6Ntes2ShSGcn7WiRcx").hash }), requestedcurrencyid: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq" - }) + }, version) const inv = new VerusPayInvoice({ - details + details, + version: version }) const invFromJson = VerusPayInvoice.fromJson(inv.toJson()); expect(invFromJson.toBuffer().toString('hex')).toBe(inv.toBuffer().toString('hex')); - }); + } - test('basic verus pay invoice without signature that accepts any amount and destination', async () => { + const testNoSigAcceptsAnyAmountAcceptsAnyDest = async (version: BigNumber) => { const details = new VerusPayInvoiceDetails({ requestedcurrencyid: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq" - }) + }, version) details.setFlags({ acceptsAnyAmount: true, @@ -104,7 +113,8 @@ describe('Serializes and deserializes VerusPay invoice', () => { }) const inv = new VerusPayInvoice({ - details + details, + version: version }) const invbuf = inv.toBuffer() @@ -122,9 +132,9 @@ describe('Serializes and deserializes VerusPay invoice', () => { const _invfromqrstring = VerusPayInvoice.fromQrString(invqrstring) expect(_invfromqrstring.toBuffer().toString('hex')).toBe(inv.toBuffer().toString('hex')); - }); + } - test('verus pay invoice without signature that accepts conversion', async () => { + const testNoSigAcceptsConversion = async (version: BigNumber) => { const details = new VerusPayInvoiceDetails({ amount: new BN(10000000000, 10), destination: new TransferDestination({ @@ -133,14 +143,15 @@ describe('Serializes and deserializes VerusPay invoice', () => { }), requestedcurrencyid: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", maxestimatedslippage: new BN(40000000, 10), - }) + }, version) details.setFlags({ acceptsConversion: true }) const inv = new VerusPayInvoice({ - details + details, + version: version }) const invbuf = inv.toBuffer() @@ -158,9 +169,9 @@ describe('Serializes and deserializes VerusPay invoice', () => { const _invfromqrstring = VerusPayInvoice.fromQrString(invqrstring) expect(_invfromqrstring.toBuffer().toString('hex')).toBe(inv.toBuffer().toString('hex')); - }); + } - test('verus pay invoice without signature that accepts conversion and expires', async () => { + const testNoSigAcceptsConversionExpires = async (version: BigNumber) => { const details = new VerusPayInvoiceDetails({ amount: new BN(10000000000, 10), destination: new TransferDestination({ @@ -170,7 +181,7 @@ describe('Serializes and deserializes VerusPay invoice', () => { requestedcurrencyid: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", maxestimatedslippage: new BN(40000000, 10), expiryheight: new BN(2000000, 10) - }) + }, version) details.setFlags({ acceptsConversion: true, @@ -178,7 +189,8 @@ describe('Serializes and deserializes VerusPay invoice', () => { }) const inv = new VerusPayInvoice({ - details + details, + version: version }) const invbuf = inv.toBuffer() @@ -196,9 +208,9 @@ describe('Serializes and deserializes VerusPay invoice', () => { const _invfromqrstring = VerusPayInvoice.fromQrString(invqrstring) expect(_invfromqrstring.toBuffer().toString('hex')).toBe(inv.toBuffer().toString('hex')); - }); + } - test('verus pay invoice without signature that accepts conversion on 2 non-verus systems and expires', async () => { + const testNoSigAcceptsConversionHasNonVerusSystemsExpires = async (version: BigNumber) => { const details = new VerusPayInvoiceDetails({ amount: new BN(10000000000, 10), destination: new TransferDestination({ @@ -209,7 +221,7 @@ describe('Serializes and deserializes VerusPay invoice', () => { maxestimatedslippage: new BN(40000000, 10), expiryheight: new BN(2000000, 10), acceptedsystems: ["iNC9NG5Jqk2tqVtqfjfiSpaqxrXaFU6RDu", "iBDkVJqik6BrtcDBQfFygffiYzTMy6EuhU"] - }) + }, version) details.setFlags({ acceptsConversion: true, @@ -218,7 +230,8 @@ describe('Serializes and deserializes VerusPay invoice', () => { }) const inv = new VerusPayInvoice({ - details + details, + version: version }) const invbuf = inv.toBuffer() @@ -236,9 +249,9 @@ describe('Serializes and deserializes VerusPay invoice', () => { const _invfromqrstring = VerusPayInvoice.fromQrString(invqrstring) expect(_invfromqrstring.toBuffer().toString('hex')).toBe(inv.toBuffer().toString('hex')); - }); + } - test('verus pay invoice with signature that accepts conversion on 2 non-verus systems and expires', async () => { + const testSignedAcceptsConversionHasNonVerusSystemsExpires = async (version: BigNumber) => { const details = new VerusPayInvoiceDetails({ amount: new BN(10000000000, 10), destination: new TransferDestination({ @@ -249,7 +262,7 @@ describe('Serializes and deserializes VerusPay invoice', () => { maxestimatedslippage: new BN(40000000, 10), expiryheight: new BN(2000000, 10), acceptedsystems: ["iNC9NG5Jqk2tqVtqfjfiSpaqxrXaFU6RDu", "iBDkVJqik6BrtcDBQfFygffiYzTMy6EuhU"] - }) + }, version) details.setFlags({ acceptsConversion: true, @@ -265,6 +278,60 @@ describe('Serializes and deserializes VerusPay invoice', () => { signature: "AYG2IQABQSAN1fp6A9NIVbxvKuOVLLU+0I+G3oQGbRtS6u4Eampfb217Cdf5FCMScQhV9kMxtjI9GWzpchmjuiTB2tctk6qT", }, + version: version + }) + + inv.setSigned() + + const invbuf = inv.toBuffer() + const _inv = new VerusPayInvoice() + _inv.fromBuffer(invbuf) + + expect(_inv.toBuffer().toString('hex')).toBe(invbuf.toString('hex')); + + const invuri = inv.toWalletDeeplinkUri() + const _invfromuri = VerusPayInvoice.fromWalletDeeplinkUri(invuri) + + expect(_invfromuri.toBuffer().toString('hex')).toBe(inv.toBuffer().toString('hex')); + + const invqrstring = inv.toQrString() + const _invfromqrstring = VerusPayInvoice.fromQrString(invqrstring) + + expect(_invfromqrstring.toBuffer().toString('hex')).toBe(inv.toBuffer().toString('hex')); + + const invFromJson = VerusPayInvoice.fromJson(inv.toJson()); + + expect(invFromJson.toBuffer().toString('hex')).toBe(inv.toBuffer().toString('hex')); + } + + const testSignedAcceptsConversionHasNonVerusSystemsExpiresWithSaplingAddressPreconvert = async (version: BigNumber) => { + const addrString = "zs1wczplx4kegw32h8g0f7xwl57p5tvnprwdmnzmdnsw50chcl26f7tws92wk2ap03ykaq6jyyztfa"; + + const details = new VerusPayInvoiceDetails({ + amount: new BN(10000000000, 10), + destination: SaplingPaymentAddress.fromAddressString(addrString), + requestedcurrencyid: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", + maxestimatedslippage: new BN(40000000, 10), + expiryheight: new BN(2000000, 10), + acceptedsystems: ["iNC9NG5Jqk2tqVtqfjfiSpaqxrXaFU6RDu", "iBDkVJqik6BrtcDBQfFygffiYzTMy6EuhU"] + }, version) + + details.setFlags({ + acceptsConversion: true, + expires: true, + acceptsNonVerusSystems: true, + destinationIsSaplingPaymentAddress: true + }) + + const inv = new VerusPayInvoice({ + details, + system_id: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + signing_id: "iB5PRXMHLYcNtM8dfLB6KwfJrHU2mKDYuU", + signature: { + signature: + "AYG2IQABQSAN1fp6A9NIVbxvKuOVLLU+0I+G3oQGbRtS6u4Eampfb217Cdf5FCMScQhV9kMxtjI9GWzpchmjuiTB2tctk6qT", + }, + version: version }) inv.setSigned() @@ -286,7 +353,76 @@ describe('Serializes and deserializes VerusPay invoice', () => { expect(_invfromqrstring.toBuffer().toString('hex')).toBe(inv.toBuffer().toString('hex')); const invFromJson = VerusPayInvoice.fromJson(inv.toJson()); - + expect(invFromJson.toBuffer().toString('hex')).toBe(inv.toBuffer().toString('hex')); + } + + const testNoSigAcceptsAnyAmountAcceptsAnyDestPreconvert = async (version: BigNumber) => { + const details = new VerusPayInvoiceDetails({ + requestedcurrencyid: "iNC9NG5Jqk2tqVtqfjfiSpaqxrXaFU6RDu" + }, version) + + details.setFlags({ + acceptsAnyAmount: true, + acceptsAnyDestination: true, + isPreconvert: true + }) + + const inv = new VerusPayInvoice({ + details, + version: version + }) + + const invbuf = inv.toBuffer() + const _inv = new VerusPayInvoice() + _inv.fromBuffer(invbuf) + + expect(_inv.toBuffer().toString('hex')).toBe(invbuf.toString('hex')); + + const invuri = inv.toWalletDeeplinkUri() + const _invfromuri = VerusPayInvoice.fromWalletDeeplinkUri(invuri) + + expect(_invfromuri.toBuffer().toString('hex')).toBe(inv.toBuffer().toString('hex')); + + const invqrstring = inv.toQrString() + const _invfromqrstring = VerusPayInvoice.fromQrString(invqrstring) + + expect(_invfromqrstring.toBuffer().toString('hex')).toBe(inv.toBuffer().toString('hex')); + } + + test('basic verus pay invoice without signature', async () => { + await testEveryVersion(basicTestWithoutSig); + }); + + test('JSON test basic verus pay invoice without signature', async () => { + await testEveryVersion(basicJSONTestWithoutSig); + }); + + test('basic verus pay invoice without signature that accepts any amount and destination', async () => { + await testEveryVersion(testNoSigAcceptsAnyAmountAcceptsAnyDest); + }); + + test('verus pay invoice without signature that accepts conversion', async () => { + await testEveryVersion(testNoSigAcceptsConversion); }); + + test('verus pay invoice without signature that accepts conversion and expires', async () => { + await testEveryVersion(testNoSigAcceptsConversionExpires); + }); + + test('verus pay invoice without signature that accepts conversion on 2 non-verus systems and expires', async () => { + await testEveryVersion(testNoSigAcceptsConversionHasNonVerusSystemsExpires); + }); + + test('verus pay invoice with signature that accepts conversion on 2 non-verus systems and expires', async () => { + await testEveryVersion(testSignedAcceptsConversionHasNonVerusSystemsExpires); + }); + + test('verus pay invoice with signature that accepts conversion on 2 non-verus systems and expires with sapling address', async () => { + await testSignedAcceptsConversionHasNonVerusSystemsExpiresWithSaplingAddressPreconvert(VERUSPAY_VERSION_4); + }) + + test('verus pay invoice without signature that accepts any amount and destination for preconvert', async () => { + await testNoSigAcceptsAnyAmountAcceptsAnyDestPreconvert(VERUSPAY_VERSION_4); + }) }); diff --git a/src/constants/vdxf/veruspay.ts b/src/constants/vdxf/veruspay.ts new file mode 100644 index 00000000..96b2614a --- /dev/null +++ b/src/constants/vdxf/veruspay.ts @@ -0,0 +1,11 @@ +import { BN } from "bn.js" + +export const VERUSPAY_VERSION_3 = new BN(3, 10) +export const VERUSPAY_VERSION_4 = new BN(4, 10) +export const VERUSPAY_VERSION_CURRENT = new BN(4, 10) + +export const VERUSPAY_VERSION_FIRSTVALID = new BN(3, 10) +export const VERUSPAY_VERSION_LASTVALID = new BN(4, 10) + +export const VERUSPAY_VERSION_SIGNED = new BN('80000000', 16) +export const VERUSPAY_VERSION_MASK = VERUSPAY_VERSION_SIGNED; \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 10d23719..5b55ee4c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -24,6 +24,7 @@ export * from './constants/pbaas' export * from './constants/ordinals/register' export * from './constants/ordinals/ordinals' export * from './constants/ordinals/types' +export * from './constants/vdxf/veruspay' export * from './identity/IdentityDefinition' export * from './currency/CurrencyDefinition' diff --git a/src/vdxf/classes/payment/VerusPayInvoice.ts b/src/vdxf/classes/payment/VerusPayInvoice.ts index a61b38db..0739127c 100644 --- a/src/vdxf/classes/payment/VerusPayInvoice.ts +++ b/src/vdxf/classes/payment/VerusPayInvoice.ts @@ -17,12 +17,13 @@ import base64url from "base64url"; import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "./VerusPayInvoiceDetails"; import { BN } from 'bn.js'; import { BigNumber } from "../../../utils/types/BigNumber"; - -export const VERUSPAY_VERSION_CURRENT = new BN(3, 10) -export const VERUSPAY_VERSION_FIRSTVALID = new BN(3, 10) -export const VERUSPAY_VERSION_LASTVALID = new BN(3, 10) -export const VERUSPAY_VERSION_SIGNED = new BN('80000000', 16) -export const VERUSPAY_VERSION_MASK = VERUSPAY_VERSION_SIGNED; +import { + VERUSPAY_VERSION_CURRENT, + VERUSPAY_VERSION_FIRSTVALID, + VERUSPAY_VERSION_LASTVALID, + VERUSPAY_VERSION_MASK, + VERUSPAY_VERSION_SIGNED +} from "../../../constants/vdxf/veruspay"; export interface VerusPayInvoiceInterface { details: VerusPayInvoiceDetails; @@ -63,10 +64,11 @@ export class VerusPayInvoice extends VDXFObject { false ) : undefined; - this.details = new VerusPayInvoiceDetails(request.details); if (request.version) this.version = request.version; else this.version = VERUSPAY_VERSION_CURRENT; + + this.details = new VerusPayInvoiceDetails(request.details, this.getVersionNoFlags()); } getVersionNoFlags(): BigNumber { @@ -197,7 +199,7 @@ export class VerusPayInvoice extends VDXFObject { } const _details = new VerusPayInvoiceDetails(); - reader.offset = _details.fromBuffer(reader.buffer, reader.offset); + reader.offset = _details.fromBuffer(reader.buffer, reader.offset, this.getVersionNoFlags()); this.details = _details; } @@ -235,7 +237,7 @@ export class VerusPayInvoice extends VDXFObject { static fromJson(data: VerusPayInvoiceJson): VerusPayInvoice { return new VerusPayInvoice({ - details: VerusPayInvoiceDetails.fromJson(data.details), + details: VerusPayInvoiceDetails.fromJson(data.details, data.version ? new BN(data.version) : VERUSPAY_VERSION_CURRENT), signature: data.signature != null ? VerusIDSignature.fromJson(data.signature) : undefined, signing_id: data.signing_id, system_id: data.system_id, diff --git a/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts b/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts index 0661a263..6f3adc03 100644 --- a/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts +++ b/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts @@ -8,22 +8,29 @@ import { fromBase58Check, toBase58Check } from '../../../utils/address'; import { I_ADDR_VERSION } from '../../../constants/vdxf'; import createHash = require('create-hash'); import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { VERUSPAY_VERSION_4, VERUSPAY_VERSION_CURRENT } from '../../../constants/vdxf/veruspay'; +import { SaplingPaymentAddress } from '../../../pbaas'; const { BufferReader, BufferWriter } = bufferutils; +// Added in V3 export const VERUSPAY_INVALID = new BN(0, 10) export const VERUSPAY_VALID = new BN(1, 10) export const VERUSPAY_ACCEPTS_CONVERSION = new BN(2, 10) export const VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS = new BN(4, 10) export const VERUSPAY_EXPIRES = new BN(8, 10) -export const VERUSPAY_ACCEPTS_ANY_DESTINATION = new BN(16, 0) -export const VERUSPAY_ACCEPTS_ANY_AMOUNT = new BN(32, 0) -export const VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN = new BN(64, 0) -export const VERUSPAY_IS_TESTNET = new BN(128, 0) +export const VERUSPAY_ACCEPTS_ANY_DESTINATION = new BN(16, 10) +export const VERUSPAY_ACCEPTS_ANY_AMOUNT = new BN(32, 10) +export const VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN = new BN(64, 10) +export const VERUSPAY_IS_TESTNET = new BN(128, 10) + +// Added in V4 +export const VERUSPAY_IS_PRECONVERT = new BN(256, 10) +export const VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS = new BN(512, 10) export type VerusPayInvoiceDetailsJson = { flags?: string, amount?: string, - destination?: TransferDestinationJson, + destination?: TransferDestinationJson | string, requestedcurrencyid: string, expiryheight?: string, maxestimatedslippage?: string, @@ -31,9 +38,11 @@ export type VerusPayInvoiceDetailsJson = { } export class VerusPayInvoiceDetails implements SerializableEntity { + verusPayVersion: BigNumber; + flags: BigNumber; amount: BigNumber; - destination: TransferDestination; + destination: TransferDestination | SaplingPaymentAddress; requestedcurrencyid: string; expiryheight: BigNumber; maxestimatedslippage: BigNumber; @@ -42,12 +51,12 @@ export class VerusPayInvoiceDetails implements SerializableEntity { constructor (data?: { flags?: BigNumber, amount?: BigNumber, - destination?: TransferDestination, + destination?: TransferDestination | SaplingPaymentAddress, requestedcurrencyid: string, expiryheight?: BigNumber, maxestimatedslippage?: BigNumber, acceptedsystems?: Array, - }) { + }, verusPayVersion: BigNumber = VERUSPAY_VERSION_CURRENT) { this.flags = VERUSPAY_VALID; this.amount = null; this.destination = null; @@ -55,6 +64,7 @@ export class VerusPayInvoiceDetails implements SerializableEntity { this.expiryheight = null; this.maxestimatedslippage = null; this.acceptedsystems = null; + this.verusPayVersion = verusPayVersion; if (data != null) { if (data.flags != null) this.flags = data.flags @@ -74,7 +84,9 @@ export class VerusPayInvoiceDetails implements SerializableEntity { acceptsAnyAmount?: boolean, acceptsAnyDestination?: boolean, excludesVerusBlockchain?: boolean, - isTestnet?: boolean + isTestnet?: boolean, + isPreconvert?: boolean, + destinationIsSaplingPaymentAddress?: boolean }) { if (flags.acceptsConversion) this.flags = this.flags.or(VERUSPAY_ACCEPTS_CONVERSION); if (flags.acceptsNonVerusSystems) this.flags = this.flags.or(VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS); @@ -83,6 +95,11 @@ export class VerusPayInvoiceDetails implements SerializableEntity { if (flags.acceptsAnyDestination) this.flags = this.flags.or(VERUSPAY_ACCEPTS_ANY_DESTINATION); if (flags.excludesVerusBlockchain) this.flags = this.flags.or(VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN); if (flags.isTestnet) this.flags = this.flags.or(VERUSPAY_IS_TESTNET); + + if (this.isGTEV4()) { + if (flags.isPreconvert) this.flags = this.flags.or(VERUSPAY_IS_PRECONVERT); + if (flags.destinationIsSaplingPaymentAddress) this.flags = this.flags.or(VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS); + } } getFlagsJson(): { [key: string]: boolean } { @@ -93,7 +110,9 @@ export class VerusPayInvoiceDetails implements SerializableEntity { acceptsAnyAmount: this.acceptsAnyAmount(), acceptsAnyDestination: this.acceptsAnyDestination(), excludesVerusBlockchain: this.excludesVerusBlockchain(), - isTestnet: this.isTestnet() + isTestnet: this.isTestnet(), + isPreconvert: this.isPreconvert(), + destinationIsSaplingPaymentAddress: this.destinationIsSaplingPaymentAddress() } } @@ -129,19 +148,52 @@ export class VerusPayInvoiceDetails implements SerializableEntity { return !!(this.flags.and(VERUSPAY_IS_TESTNET).toNumber()) } + isPreconvert() { + return this.isGTEV4() && !!(this.flags.and(VERUSPAY_IS_PRECONVERT).toNumber()) + } + + destinationIsSaplingPaymentAddress() { + return this.isGTEV4() && !!(this.flags.and(VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS).toNumber()) + } + isValid () { return ( !!(this.flags.and(VERUSPAY_VALID).toNumber()) ) } + isGTEV4() { + return (this.verusPayVersion.gte(VERUSPAY_VERSION_4)) + } + + // Functions to deal with change in v4 + private getVarUIntEncodingLength(uint: BigNumber): number { + return this.isGTEV4() ? varuint.encodingLength(uint.toNumber()) : varint.encodingLength(uint); + } + + private writeVarUInt(writer = new BufferWriter(Buffer.alloc(0)), uint: BigNumber): void { + if (this.isGTEV4()) { + return writer.writeCompactSize(uint.toNumber()); + } else { + return writer.writeVarInt(uint); + } + } + + private readVarUInt(reader = new BufferReader(Buffer.alloc(0))): BigNumber { + if (this.isGTEV4()) { + return new BN(reader.readCompactSize()); + } else { + return reader.readVarInt(); + } + } + getByteLength(): number { let length = 0; - length += varint.encodingLength(this.flags); + length += this.getVarUIntEncodingLength(this.flags); if (!this.acceptsAnyAmount()) { - length += varint.encodingLength(this.amount); + length += this.getVarUIntEncodingLength(this.amount); } if (!this.acceptsAnyDestination()) { @@ -151,11 +203,11 @@ export class VerusPayInvoiceDetails implements SerializableEntity { length += fromBase58Check(this.requestedcurrencyid).hash.length; if (this.expires()) { - length += varint.encodingLength(this.expiryheight); + length += this.getVarUIntEncodingLength(this.expiryheight); } if (this.acceptsConversion()) { - length += varint.encodingLength(this.maxestimatedslippage); + length += this.getVarUIntEncodingLength(this.maxestimatedslippage); } if (this.acceptsNonVerusSystems()) { @@ -172,19 +224,19 @@ export class VerusPayInvoiceDetails implements SerializableEntity { toBuffer () { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.flags); + this.writeVarUInt(writer, this.flags); - if (!this.acceptsAnyAmount()) writer.writeVarInt(this.amount); + if (!this.acceptsAnyAmount()) this.writeVarUInt(writer, this.amount); if (!this.acceptsAnyDestination()) writer.writeSlice(this.destination.toBuffer()); writer.writeSlice(fromBase58Check(this.requestedcurrencyid).hash); if (this.expires()) { - writer.writeVarInt(this.expiryheight); + this.writeVarUInt(writer, this.expiryheight); } if (this.acceptsConversion()) { - writer.writeVarInt(this.maxestimatedslippage); + this.writeVarUInt(writer, this.maxestimatedslippage); } if (this.acceptsNonVerusSystems()) { @@ -194,26 +246,31 @@ export class VerusPayInvoiceDetails implements SerializableEntity { return writer.buffer; } - fromBuffer (buffer: Buffer, offset: number = 0) { + fromBuffer (buffer: Buffer, offset: number = 0, verusPayVersion: BigNumber = VERUSPAY_VERSION_CURRENT) { const reader = new BufferReader(buffer, offset); - this.flags = reader.readVarInt(); + this.verusPayVersion = verusPayVersion; + + this.flags = this.readVarUInt(reader); - if (!this.acceptsAnyAmount()) this.amount = reader.readVarInt(); + if (!this.acceptsAnyAmount()) this.amount = this.readVarUInt(reader); if (!this.acceptsAnyDestination()) { - this.destination = new TransferDestination(); + if (this.destinationIsSaplingPaymentAddress()) { + this.destination = new SaplingPaymentAddress(); + } else this.destination = new TransferDestination(); + reader.offset = this.destination.fromBuffer(buffer, reader.offset); } this.requestedcurrencyid = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); if (this.expires()) { - this.expiryheight = reader.readVarInt(); + this.expiryheight = this.readVarUInt(reader); } if (this.acceptsConversion()) { - this.maxestimatedslippage = reader.readVarInt(); + this.maxestimatedslippage = this.readVarUInt(reader); } if (this.acceptsNonVerusSystems()) { @@ -225,23 +282,23 @@ export class VerusPayInvoiceDetails implements SerializableEntity { return reader.offset; } - static fromJson(data: VerusPayInvoiceDetailsJson): VerusPayInvoiceDetails { + static fromJson(data: VerusPayInvoiceDetailsJson, verusPayVersion: BigNumber = VERUSPAY_VERSION_CURRENT): VerusPayInvoiceDetails { return new VerusPayInvoiceDetails({ flags: new BN(data.flags), amount: data.amount != null ? new BN(data.amount) : undefined, - destination: data.destination != null ? TransferDestination.fromJson(data.destination) : undefined, + destination: data.destination != null ? typeof data.destination === 'string' ? SaplingPaymentAddress.fromAddressString(data.destination) : TransferDestination.fromJson(data.destination) : undefined, requestedcurrencyid: data.requestedcurrencyid, expiryheight: data.expiryheight != null ? new BN(data.expiryheight) : undefined, maxestimatedslippage: data.maxestimatedslippage != null ? new BN(data.maxestimatedslippage) : undefined, acceptedsystems: data.acceptedsystems - }) + }, verusPayVersion) } toJson(): VerusPayInvoiceDetailsJson { return { flags: this.flags.toString(), amount: this.acceptsAnyAmount() ? undefined : this.amount.toString(), - destination: this.acceptsAnyDestination() ? undefined : this.destination.toJson(), + destination: this.acceptsAnyDestination() ? undefined : this.destinationIsSaplingPaymentAddress() ? (this.destination as SaplingPaymentAddress).toAddressString() : (this.destination as TransferDestination).toJson(), requestedcurrencyid: this.requestedcurrencyid, expiryheight: this.expires() ? this.expiryheight.toString() : undefined, maxestimatedslippage: this.acceptsConversion() ? this.maxestimatedslippage.toString() : undefined, From 8e527c47497bbb5f38ad04b8de140fa56e6fca7d Mon Sep 17 00:00:00 2001 From: monkins Date: Tue, 11 Nov 2025 20:54:17 +0000 Subject: [PATCH 047/123] Temp remove tests of Loginrequest for merge --- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 29 -------------------- 1 file changed, 29 deletions(-) diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 2d82c6f8..08b10ef4 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -253,33 +253,4 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(parsed.data).toBeUndefined(); }); - it('should serialize / deserialize a LoginRequestDetailsOrdinalVdxfObject via buffer', () => { - const obj = new LoginRequestDetails({ - requestId: "iBJqQMRzpCW1WVYoU2Ty2VbCJnvyTEsE1C", - flags: new BN(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS) - .or(new BN(LoginRequestDetails.FLAG_HAS_CALLBACK_URI)) - .or(new BN(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME)), - recipientConstraints: [{type: 1, identity: new CompactIdAddressObject({ - version: new BN(1), - type: CompactIdAddressObject.IS_IDENTITYID, - address: "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv", - rootSystemName: "VRSC" - })}], - callbackURIs: [{type: 2, uri: "https://example.com/callback"}], - expiryTime: new BN(345353453), - }); - - const objOrdinal = new LoginRequestDetailsOrdinalVdxfObject({ data: obj }); - - const round = roundTripBuffer(objOrdinal); - expect(round).toBeInstanceOf(LoginRequestDetailsOrdinalVdxfObject); - const d2 = (round as LoginRequestDetailsOrdinalVdxfObject).data; - expect(d2.requestId).toEqual(objOrdinal.data.requestId); - const json = objOrdinal.toJson(); - expect(json.data).toBeDefined(); - const roundJ = roundTripJson(objOrdinal); - expect(roundJ).toBeInstanceOf(LoginRequestDetailsOrdinalVdxfObject); - const d3 = (roundJ as LoginRequestDetailsOrdinalVdxfObject).data; - expect(d3.requestId).toEqual(objOrdinal.data.requestId); - }); }); \ No newline at end of file From 6bf4aa028ecb1a408401dd882faaadca5e5c0cfa Mon Sep 17 00:00:00 2001 From: michaeltout Date: Wed, 12 Nov 2025 11:19:00 +0100 Subject: [PATCH 048/123] Add build files from PR --- dist/pbaas/DataDescriptor.js | 4 +- dist/vdxf/classes/CompactIdAddressObject.d.ts | 8 +- dist/vdxf/classes/CompactIdAddressObject.js | 32 ++- .../vdxf/classes/VerifiableSignatureData.d.ts | 11 +- dist/vdxf/classes/VerifiableSignatureData.js | 44 +++- dist/vdxf/classes/index.d.ts | 2 +- .../AppEncryptionRequestDetails.d.ts | 78 +++++++ .../AppEncryptionRequestDetails.js | 184 +++++++++++++++ .../requestobjects/LoginRequestDetails.d.ts | 81 +++++++ .../requestobjects/LoginRequestDetails.js | 212 ++++++++++++++++++ .../PersonalUserDataDetails.d.ts | 61 +++++ .../requestobjects/PersonalUserDataDetails.js | 170 ++++++++++++++ .../ProvisionIdentityDetails.d.ts | 57 +++++ .../ProvisionIdentityDetails.js | 146 ++++++++++++ .../requestobjects/RequestUserData.d.ts | 83 +++++++ .../classes/requestobjects/RequestUserData.js | 193 ++++++++++++++++ dist/vdxf/keys.d.ts | 2 + dist/vdxf/keys.js | 20 +- 18 files changed, 1358 insertions(+), 30 deletions(-) create mode 100644 dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts create mode 100644 dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js create mode 100644 dist/vdxf/classes/requestobjects/LoginRequestDetails.d.ts create mode 100644 dist/vdxf/classes/requestobjects/LoginRequestDetails.js create mode 100644 dist/vdxf/classes/requestobjects/PersonalUserDataDetails.d.ts create mode 100644 dist/vdxf/classes/requestobjects/PersonalUserDataDetails.js create mode 100644 dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts create mode 100644 dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js create mode 100644 dist/vdxf/classes/requestobjects/RequestUserData.d.ts create mode 100644 dist/vdxf/classes/requestobjects/RequestUserData.js diff --git a/dist/pbaas/DataDescriptor.js b/dist/pbaas/DataDescriptor.js index 2bd9f58c..23c1a977 100644 --- a/dist/pbaas/DataDescriptor.js +++ b/dist/pbaas/DataDescriptor.js @@ -14,6 +14,7 @@ class DataDescriptor { constructor(data) { this.flags = new bn_js_1.BN(0); this.version = DataDescriptor.DEFAULT_VERSION; + this.objectdata = Buffer.from([]); if (data != null) { if (data.flags != null) this.flags = data.flags; @@ -206,6 +207,7 @@ class DataDescriptor { return !!(this.version.gte(DataDescriptor.FIRST_VERSION) && this.version.lte(DataDescriptor.LAST_VERSION) && this.flags.and(DataDescriptor.FLAG_MASK.notn(DataDescriptor.FLAG_MASK.bitLength()))); } toJson() { + var _a; const retval = { version: this.version.toNumber(), flags: this.flags.toNumber() @@ -218,7 +220,7 @@ class DataDescriptor { } let processedObject = new _1.VdxfUniValue(); processedObject.fromBuffer(this.objectdata); - if (processedObject.values[0][""]) { + if ((_a = processedObject.values[0]) === null || _a === void 0 ? void 0 : _a[""]) { const keys = Object.keys(processedObject.values[0]); const values = Object.values(processedObject.values[0]); if (isText && Buffer.isBuffer(values[0]) && keys[0] === "") { diff --git a/dist/vdxf/classes/CompactIdAddressObject.d.ts b/dist/vdxf/classes/CompactIdAddressObject.d.ts index 202e1091..aedd2c9e 100644 --- a/dist/vdxf/classes/CompactIdAddressObject.d.ts +++ b/dist/vdxf/classes/CompactIdAddressObject.d.ts @@ -10,13 +10,13 @@ import { BigNumber } from '../../utils/types/BigNumber'; import { SerializableEntity } from '../../utils/types/SerializableEntity'; export interface CompactIdAddressObjectJson { version: number; - flags: number; + type: number; address: string; rootsystemname: string; } export interface CompactIdAddressObjectInterface { version?: BigNumber; - flags?: BigNumber; + type: BigNumber; address: string; rootSystemName?: string; } @@ -28,7 +28,7 @@ export declare class CompactIdAddressObject implements SerializableEntity { static IS_FQN: import("bn.js"); static IS_IDENTITYID: import("bn.js"); version: BigNumber; - flags: BigNumber; + type: BigNumber; address: string; rootSystemName: string; constructor(data?: CompactIdAddressObjectInterface); @@ -41,6 +41,6 @@ export declare class CompactIdAddressObject implements SerializableEntity { getByteLength(): number; toBuffer(): Buffer; fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): any; + toJson(): CompactIdAddressObjectJson; static fromJson(json: any): CompactIdAddressObject; } diff --git a/dist/vdxf/classes/CompactIdAddressObject.js b/dist/vdxf/classes/CompactIdAddressObject.js index 3d215dee..b5f2aaa1 100644 --- a/dist/vdxf/classes/CompactIdAddressObject.js +++ b/dist/vdxf/classes/CompactIdAddressObject.js @@ -14,20 +14,20 @@ const bufferutils_1 = require("../../utils/bufferutils"); const { BufferReader, BufferWriter } = bufferutils_1.default; const varuint_1 = require("../../utils/varuint"); const address_1 = require("../../utils/address"); -const varint_1 = require("../../utils/varint"); const vdxf_1 = require("../../constants/vdxf"); class CompactIdAddressObject { constructor(data) { this.version = (data === null || data === void 0 ? void 0 : data.version) || new bn_js_1.BN(CompactIdAddressObject.DEFAULT_VERSION); - this.flags = (data === null || data === void 0 ? void 0 : data.flags) || new bn_js_1.BN(0); + this.type = (data === null || data === void 0 ? void 0 : data.type) || new bn_js_1.BN(0); this.address = (data === null || data === void 0 ? void 0 : data.address) || ''; this.rootSystemName = (data === null || data === void 0 ? void 0 : data.rootSystemName) || 'VRSC'; + this.setAddressTransferType(); } isFQN() { - return (this.flags.and(CompactIdAddressObject.IS_FQN).eq(CompactIdAddressObject.IS_FQN)); + return (this.type.eq(CompactIdAddressObject.IS_FQN)); } isIaddress() { - return (this.flags.and(CompactIdAddressObject.IS_IDENTITYID).eq(CompactIdAddressObject.IS_IDENTITYID)); + return (this.type.eq(CompactIdAddressObject.IS_IDENTITYID)); } isValid() { return this.address != null && this.address.length > 0 && (this.isFQN() || this.isIaddress()); @@ -44,30 +44,27 @@ class CompactIdAddressObject { static fromIAddress(iaddr) { return new CompactIdAddressObject({ address: iaddr, - flags: CompactIdAddressObject.IS_IDENTITYID + type: CompactIdAddressObject.IS_IDENTITYID }); } setAddressTransferType() { - if (!this.isValid()) { - throw new Error('CompactIdAddressObject: invalid address or flags not set'); - } if (this.isIaddress()) { return; } if (this.isFQN()) { if (this.address.length > 20) { - this.flags = CompactIdAddressObject.IS_IDENTITYID; + this.type = CompactIdAddressObject.IS_IDENTITYID; this.address = (0, address_1.toIAddress)(this.address, this.rootSystemName); } else { - this.flags = CompactIdAddressObject.IS_FQN; + this.type = CompactIdAddressObject.IS_FQN; } } } getByteLength() { - this.setAddressTransferType(); let length = 0; - length += varint_1.default.encodingLength(this.flags); + length += varuint_1.default.encodingLength(this.version.toNumber()); + length += varuint_1.default.encodingLength(this.type.toNumber()); if (this.isIaddress()) { length += 20; // identityuint160 } @@ -79,7 +76,8 @@ class CompactIdAddressObject { } toBuffer() { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.flags); + writer.writeCompactSize(this.version.toNumber()); + writer.writeCompactSize(this.type.toNumber()); if (this.isIaddress()) { writer.writeSlice((0, address_1.fromBase58Check)(this.address).hash); } @@ -90,7 +88,8 @@ class CompactIdAddressObject { } fromBuffer(buffer, offset) { const reader = new BufferReader(buffer, offset); - this.flags = reader.readVarInt(); + this.version = new bn_js_1.BN(reader.readCompactSize()); + this.type = new bn_js_1.BN(reader.readCompactSize()); if (this.isIaddress()) { this.address = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); } @@ -100,10 +99,9 @@ class CompactIdAddressObject { return reader.offset; } toJson() { - this.setAddressTransferType(); return { version: this.version.toNumber(), - flags: this.flags.toNumber(), + type: this.type.toNumber(), address: this.address, rootsystemname: this.rootSystemName, }; @@ -111,7 +109,7 @@ class CompactIdAddressObject { static fromJson(json) { const instance = new CompactIdAddressObject(); instance.version = new bn_js_1.BN(json.version); - instance.flags = new bn_js_1.BN(json.flags); + instance.type = new bn_js_1.BN(json.type); instance.address = json.address; instance.rootSystemName = json.rootsystemname; return instance; diff --git a/dist/vdxf/classes/VerifiableSignatureData.d.ts b/dist/vdxf/classes/VerifiableSignatureData.d.ts index 11bdf14b..ae026575 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.d.ts +++ b/dist/vdxf/classes/VerifiableSignatureData.d.ts @@ -1,16 +1,17 @@ import { BigNumber } from '../../utils/types/BigNumber'; import { SerializableEntity } from '../../utils/types/SerializableEntity'; -import { CompactIdAddressObject } from './CompactIdAddressObject'; +import { CompactIdAddressObject, CompactIdAddressObjectJson } from './CompactIdAddressObject'; import { SignatureData } from '../../pbaas'; export interface VerifiableSignatureDataJson { version: number; flags: number; hashtype: number; - systemid: string; - identityid: string; + systemid: CompactIdAddressObjectJson; + identityid: CompactIdAddressObjectJson; vdxfkeys?: Array; vdxfkeynames?: Array; boundhashes?: Array; + statements?: Array; signature: string; } export interface VerifiableSignatureDataInterface { @@ -56,6 +57,7 @@ export declare class VerifiableSignatureData implements SerializableEntity { setHasVdxfKeyNames(): void; setHasBoundHashes(): void; setHasStatements(): void; + calcFlags(): BigNumber; setFlags(): void; private getBufferEncodingLength; getByteLength(): number; @@ -63,5 +65,6 @@ export declare class VerifiableSignatureData implements SerializableEntity { fromBuffer(buffer: Buffer, offset?: number): number; getIdentityHash(height: number, sigHash: Buffer): Buffer; toSignatureData(sigHash: Buffer): SignatureData; - toJson(): {}; + toJson(): VerifiableSignatureDataJson; + static fromJson(json: VerifiableSignatureDataJson): VerifiableSignatureData; } diff --git a/dist/vdxf/classes/VerifiableSignatureData.js b/dist/vdxf/classes/VerifiableSignatureData.js index ac0596cc..5065d3f6 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.js +++ b/dist/vdxf/classes/VerifiableSignatureData.js @@ -18,7 +18,7 @@ class VerifiableSignatureData { constructor(data) { this.version = data && data.flags ? data.flags : new bn_js_1.BN(0); this.flags = data && data.flags ? data.flags : new bn_js_1.BN(0); - this.systemID = data && data.systemID ? data.systemID : new CompactIdAddressObject_1.CompactIdAddressObject({ flags: CompactIdAddressObject_1.CompactIdAddressObject.IS_FQN, address: pbaas_1.DEFAULT_VERUS_CHAINNAME }); + this.systemID = data && data.systemID ? data.systemID : new CompactIdAddressObject_1.CompactIdAddressObject({ type: CompactIdAddressObject_1.CompactIdAddressObject.IS_FQN, address: pbaas_1.DEFAULT_VERUS_CHAINNAME }); this.hashType = data && data.hashType ? data.hashType : pbaas_1.HASH_TYPE_SHA256; this.identityID = data ? data.identityID : undefined; this.vdxfKeys = data ? data.vdxfKeys : undefined; @@ -58,6 +58,18 @@ class VerifiableSignatureData { setHasStatements() { this.setFlag(VerifiableSignatureData.FLAG_HAS_STATEMENTS); } + calcFlags() { + let flags = new bn_js_1.BN(0); + if (this.hasVdxfKeys()) + flags = flags.or(VerifiableSignatureData.FLAG_HAS_VDXF_KEYS); + if (this.hasVdxfKeyNames()) + flags = flags.or(VerifiableSignatureData.FLAG_HAS_VDXF_KEY_NAMES); + if (this.hasBoundHashes()) + flags = flags.or(VerifiableSignatureData.FLAG_HAS_BOUND_HASHES); + if (this.hasStatements()) + flags = flags.or(VerifiableSignatureData.FLAG_HAS_STATEMENTS); + return flags; + } setFlags() { if (this.vdxfKeys) this.setHasVdxfKeys(); @@ -193,7 +205,35 @@ class VerifiableSignatureData { }); } toJson() { - return {}; + var _a, _b; + const flags = this.calcFlags(); + return { + version: this.version.toNumber(), + flags: flags.toNumber(), + hashtype: this.hashType.toNumber(), + systemid: this.systemID.toJson(), + identityid: this.identityID.toJson(), + vdxfkeys: this.vdxfKeys, + vdxfkeynames: this.vdxfKeyNames, + boundhashes: (_a = this.boundHashes) === null || _a === void 0 ? void 0 : _a.map(x => x.toString('hex')), + statements: (_b = this.statements) === null || _b === void 0 ? void 0 : _b.map(x => x.toString('hex')), + signature: this.signatureAsVch.toString('hex') + }; + } + static fromJson(json) { + var _a, _b; + const instance = new VerifiableSignatureData(); + instance.version = new bn_js_1.BN(json.version); + instance.flags = new bn_js_1.BN(json.flags); + instance.hashType = new bn_js_1.BN(json.hashtype); + instance.systemID = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(json.systemid); + instance.identityID = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(json.identityid); + instance.vdxfKeys = json === null || json === void 0 ? void 0 : json.vdxfkeys; + instance.vdxfKeyNames = json === null || json === void 0 ? void 0 : json.vdxfkeynames; + instance.boundHashes = (_a = json.boundhashes) === null || _a === void 0 ? void 0 : _a.map(x => Buffer.from(x, 'hex')); + instance.statements = (_b = json.statements) === null || _b === void 0 ? void 0 : _b.map(x => Buffer.from(x, 'hex')); + instance.signatureAsVch = Buffer.from(json.signature, 'hex'); + return instance; } } exports.VerifiableSignatureData = VerifiableSignatureData; diff --git a/dist/vdxf/classes/index.d.ts b/dist/vdxf/classes/index.d.ts index a4ce1c88..16e4a245 100644 --- a/dist/vdxf/classes/index.d.ts +++ b/dist/vdxf/classes/index.d.ts @@ -37,4 +37,4 @@ export * from './requestobjects/ProvisionIdentityDetails'; export * from './requestobjects/AppEncryptionRequestDetails'; export * from './requestobjects/PersonalUserDataDetails'; export * from './CompactIdAddressObject'; -export { VerifiableSignatureData, SignatureJsonDataInterface as VerifiableSignatureDataInterface } from './VerifiableSignatureData'; +export { VerifiableSignatureData, VerifiableSignatureDataJson } from './VerifiableSignatureData'; diff --git a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts new file mode 100644 index 00000000..8bdfce9e --- /dev/null +++ b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts @@ -0,0 +1,78 @@ +/** + * AppEncryptionRequestDetails - Class for handling application requests for encrypted derived seeds + * + * This class is used when an application is requesting an encrypted derived seed from the user's master seed, + * using specific parameters passed by the application. The request includes: + * - A target encryption key (zaddress format) + * - Derivation numbers for seed generation + * - Optional source and destination addresses for context + * + * The user's wallet can use these parameters to derive a specific seed from their master seed + * and encrypt it using the provided encryption key, ensuring the application receives only + * the specific derived seed it needs without exposing the master seed. + */ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { CompactIdAddressObject, CompactIdAddressObjectJson } from '../CompactIdAddressObject'; +export interface AppEncryptionRequestDetailsInterface { + version?: BigNumber; + flags: BigNumber; + encryptToZAddress: string; + derivationNumber: BigNumber; + secondaryDerivationNumber?: BigNumber; + fromAddress?: CompactIdAddressObject; + toAddress?: CompactIdAddressObject; +} +export interface AppEncryptionRequestDetailsJson { + version: number; + flags: number; + encrypttozaddress: string; + derivationnumber: number; + secondaryderivationnumber?: number; + fromaddress?: CompactIdAddressObjectJson; + toaddress?: CompactIdAddressObjectJson; +} +/** + * Checks if a string is a valid hexadecimal address + * @param flags - Optional flags for the request + * @flag HAS_FROM_ADDRESS - Indicates if a from address is included + * @flag HAS_TO_ADDRESS - Indicates if a to address is included + * @flag HAS_OPTIONAL_SEED_DERIVATION - Indicates if an optional derivation number is included + * @flag ADDRESSES_NOT_FQN - Indicates if addresses are in hex format rather than FQN + * + * @param encryptToZAddress - The encryption key to use for encrypting to + * @param derivationNumber - The derivation number to validate + * @param secondaryDerivationNumber - The optional derivation number to validate + * @param fromAddress - The from address to be included in the encryption either + * john.domain@ or [20-byte hex iaddress][20-byte hex system] + * @param toAddress - The to address to be included in the encryption either + * john.domain@ or [20-byte hex iaddress][20-byte hex system] + */ +export declare class AppEncryptionRequestDetails implements SerializableEntity { + static VERSION_INVALID: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static DEFAULT_VERSION: import("bn.js"); + static HAS_FROM_ADDRESS: import("bn.js"); + static HAS_TO_ADDRESS: import("bn.js"); + static HAS_SECONDARY_SEED_DERIVATION_NUMBER: import("bn.js"); + version: BigNumber; + flags: BigNumber; + encryptToZAddress: string; + derivationNumber: BigNumber; + secondaryDerivationNumber?: BigNumber; + fromAddress?: CompactIdAddressObject; + toAddress?: CompactIdAddressObject; + constructor(data?: AppEncryptionRequestDetailsInterface); + setFlags(): void; + calcFlags(): BigNumber; + isValid(): boolean; + hasSecondarySeedDerivation(flags?: BigNumber): boolean; + hasFromAddress(flags?: BigNumber): boolean; + hasToAddress(flags?: BigNumber): boolean; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): AppEncryptionRequestDetailsJson; + static fromJson(json: AppEncryptionRequestDetailsJson): AppEncryptionRequestDetails; +} diff --git a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js new file mode 100644 index 00000000..5e3ea403 --- /dev/null +++ b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js @@ -0,0 +1,184 @@ +"use strict"; +/** + * AppEncryptionRequestDetails - Class for handling application requests for encrypted derived seeds + * + * This class is used when an application is requesting an encrypted derived seed from the user's master seed, + * using specific parameters passed by the application. The request includes: + * - A target encryption key (zaddress format) + * - Derivation numbers for seed generation + * - Optional source and destination addresses for context + * + * The user's wallet can use these parameters to derive a specific seed from their master seed + * and encrypt it using the provided encryption key, ensuring the application receives only + * the specific derived seed it needs without exposing the master seed. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AppEncryptionRequestDetails = void 0; +const bn_js_1 = require("bn.js"); +const varint_1 = require("../../../utils/varint"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const sapling_1 = require("../../../utils/sapling"); +const CompactIdAddressObject_1 = require("../CompactIdAddressObject"); +const varuint_1 = require("../../../utils/varuint"); +/** + * Checks if a string is a valid hexadecimal address + * @param flags - Optional flags for the request + * @flag HAS_FROM_ADDRESS - Indicates if a from address is included + * @flag HAS_TO_ADDRESS - Indicates if a to address is included + * @flag HAS_OPTIONAL_SEED_DERIVATION - Indicates if an optional derivation number is included + * @flag ADDRESSES_NOT_FQN - Indicates if addresses are in hex format rather than FQN + * + * @param encryptToZAddress - The encryption key to use for encrypting to + * @param derivationNumber - The derivation number to validate + * @param secondaryDerivationNumber - The optional derivation number to validate + * @param fromAddress - The from address to be included in the encryption either + * john.domain@ or [20-byte hex iaddress][20-byte hex system] + * @param toAddress - The to address to be included in the encryption either + * john.domain@ or [20-byte hex iaddress][20-byte hex system] + */ +class AppEncryptionRequestDetails { + constructor(data) { + this.version = (data === null || data === void 0 ? void 0 : data.version) || AppEncryptionRequestDetails.DEFAULT_VERSION; + this.flags = (data === null || data === void 0 ? void 0 : data.flags) || new bn_js_1.BN(0); + this.encryptToZAddress = (data === null || data === void 0 ? void 0 : data.encryptToZAddress) || ''; + this.derivationNumber = (data === null || data === void 0 ? void 0 : data.derivationNumber) || new bn_js_1.BN(0); + this.secondaryDerivationNumber = data === null || data === void 0 ? void 0 : data.secondaryDerivationNumber; + this.fromAddress = data === null || data === void 0 ? void 0 : data.fromAddress; + this.toAddress = data === null || data === void 0 ? void 0 : data.toAddress; + this.setFlags(); + } + setFlags() { + this.flags = this.calcFlags(); + } + calcFlags() { + let flags = new bn_js_1.BN(0); + if (this.secondaryDerivationNumber != null) { + flags = flags.or(AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER); + } + if (this.fromAddress != null) { + flags = flags.or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS); + } + if (this.toAddress != null) { + flags = flags.or(AppEncryptionRequestDetails.HAS_TO_ADDRESS); + } + return flags; + } + isValid() { + let valid = this.encryptToZAddress != null && this.encryptToZAddress.length > 0; + valid && (valid = this.derivationNumber != null && this.derivationNumber.gte(new bn_js_1.BN(0))); + valid && (valid = this.secondaryDerivationNumber == null || this.secondaryDerivationNumber.gte(new bn_js_1.BN(0))); + return valid; + } + hasSecondarySeedDerivation(flags = this.flags) { + return flags.and(AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER).gt(new bn_js_1.BN(0)); + } + hasFromAddress(flags = this.flags) { + return flags.and(AppEncryptionRequestDetails.HAS_FROM_ADDRESS).gt(new bn_js_1.BN(0)); + } + hasToAddress(flags = this.flags) { + return flags.and(AppEncryptionRequestDetails.HAS_TO_ADDRESS).gt(new bn_js_1.BN(0)); + } + getByteLength() { + const flags = this.calcFlags(); + let length = 0; + length += varuint_1.default.encodingLength(flags.toNumber()); + // encryptToKey - zaddress encoding (43 bytes for sapling address data) + length += 43; // Sapling address decoded data (11 + 32 bytes) + length += varuint_1.default.encodingLength(this.derivationNumber.toNumber()); + if (this.hasSecondarySeedDerivation(flags)) { + length += varint_1.default.encodingLength(this.secondaryDerivationNumber); + } + if (this.hasFromAddress(flags)) { + length += this.fromAddress.getByteLength(); + } + if (this.hasToAddress(flags)) { + length += this.toAddress.getByteLength(); + } + return length; + } + toBuffer() { + const flags = this.calcFlags(); + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + // Write flags + writer.writeCompactSize(flags.toNumber()); + // Write encryptToAddress as decoded sapling address data + const saplingData = (0, sapling_1.decodeSaplingAddress)(this.encryptToZAddress); + writer.writeSlice(Buffer.concat([saplingData.d, saplingData.pk_d])); + // Write mandatory derivation number + writer.writeVarInt(this.derivationNumber); + if (this.hasSecondarySeedDerivation(flags)) { + writer.writeVarInt(this.secondaryDerivationNumber); + } + if (this.hasFromAddress(flags)) { + writer.writeSlice(this.fromAddress.toBuffer()); + } + if (this.hasToAddress(flags)) { + writer.writeSlice(this.toAddress.toBuffer()); + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new BufferReader(buffer, offset); + // Read flags + this.flags = new bn_js_1.BN(reader.readCompactSize()); + // Read encryptToAddress as 43-byte sapling data and encode as sapling address + const saplingData = reader.readSlice(43); + this.encryptToZAddress = (0, sapling_1.toBech32)('zs', saplingData); + // Read mandatory derivation number + this.derivationNumber = reader.readVarInt(); + // Read optional derivation number if flag is set + if (this.hasSecondarySeedDerivation()) { + this.secondaryDerivationNumber = reader.readVarInt(); + } + // Read addresses based on flags + if (this.hasFromAddress()) { + const CompactId = new CompactIdAddressObject_1.CompactIdAddressObject(); + reader.offset = CompactId.fromBuffer(reader.buffer, reader.offset); + this.fromAddress = CompactId; + } + if (this.hasToAddress()) { + const CompactId = new CompactIdAddressObject_1.CompactIdAddressObject(); + reader.offset = CompactId.fromBuffer(reader.buffer, reader.offset); + this.toAddress = CompactId; + } + return reader.offset; + } + toJson() { + var _a; + // Set flags before serialization + const flags = this.calcFlags(); + return { + version: this.version.toNumber(), + flags: flags.toNumber(), + encrypttozaddress: this.encryptToZAddress, + derivationnumber: this.derivationNumber.toNumber(), + secondaryderivationnumber: (_a = this.secondaryDerivationNumber) === null || _a === void 0 ? void 0 : _a.toNumber(), + fromaddress: this.fromAddress.toJson(), + toaddress: this.toAddress.toJson() + }; + } + static fromJson(json) { + const instance = new AppEncryptionRequestDetails(); + instance.version = new bn_js_1.BN(json.version); + instance.flags = new bn_js_1.BN(json.flags); + instance.encryptToZAddress = json.encrypttozaddress; + instance.derivationNumber = new bn_js_1.BN(json.derivationnumber); + instance.secondaryDerivationNumber = (json === null || json === void 0 ? void 0 : json.secondaryderivationnumber) ? new bn_js_1.BN(json.secondaryderivationnumber) : undefined; + if (instance.hasFromAddress()) { + instance.fromAddress = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(json === null || json === void 0 ? void 0 : json.fromaddress); + } + if (instance.hasToAddress()) { + instance.toAddress = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(json === null || json === void 0 ? void 0 : json.toaddress); + } + return instance; + } +} +exports.AppEncryptionRequestDetails = AppEncryptionRequestDetails; +AppEncryptionRequestDetails.VERSION_INVALID = new bn_js_1.BN(0); +AppEncryptionRequestDetails.FIRST_VERSION = new bn_js_1.BN(1); +AppEncryptionRequestDetails.LAST_VERSION = new bn_js_1.BN(1); +AppEncryptionRequestDetails.DEFAULT_VERSION = new bn_js_1.BN(1); +AppEncryptionRequestDetails.HAS_FROM_ADDRESS = new bn_js_1.BN(1); +AppEncryptionRequestDetails.HAS_TO_ADDRESS = new bn_js_1.BN(2); +AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER = new bn_js_1.BN(4); diff --git a/dist/vdxf/classes/requestobjects/LoginRequestDetails.d.ts b/dist/vdxf/classes/requestobjects/LoginRequestDetails.d.ts new file mode 100644 index 00000000..d365b368 --- /dev/null +++ b/dist/vdxf/classes/requestobjects/LoginRequestDetails.d.ts @@ -0,0 +1,81 @@ +/** + * LoginRequestDetails - Class for handling application login and authentication requests + * + * This class is used when an application is requesting authentication or login from the user, + * including specific recipientConstraints and callback information. The request includes: + * - Request ID for tracking the authentication session + * - Permission sets defining what access the application is requesting + * - Callback URIs for post-authentication redirects + * - Optional expiry time for the authentication session + * + * The user's wallet can use these parameters to present a clear authentication request + * to the user, showing exactly what recipientConstraints are being requested and where they will + * be redirected after successful authentication. This enables secure, user-controlled + * authentication flows with granular permission management. + */ +import { BigNumber } from "../../../utils/types/BigNumber"; +import { SerializableEntity } from "../../../utils/types/SerializableEntity"; +import { CompactIdAddressObject, CompactIdAddressObjectJson } from "../CompactIdAddressObject"; +export interface LoginRequestDetailsInterface { + version?: BigNumber; + flags?: BigNumber; + requestId: string; + recipientConstraints?: Array; + callbackURIs?: Array; + expiryTime?: BigNumber; +} +export interface RecipientConstraintJson { + type: number; + identity: CompactIdAddressObjectJson; +} +export interface callbackURIsJson { + type: number; + uri: string; +} +export interface RecipientConstraint { + type: number; + identity: CompactIdAddressObject; +} +export interface callbackURIs { + type: number; + uri: string; +} +export interface LoginRequestDetailsJson { + version: number; + requestid: string; + flags: number; + recipientConstraints?: Array; + callbackURIs?: Array; + expirytime?: number; +} +export declare class LoginRequestDetails implements SerializableEntity { + version: BigNumber; + flags?: BigNumber; + requestId: string; + recipientConstraints?: Array; + callbackURIs?: Array; + expiryTime?: BigNumber; + static DEFAULT_VERSION: import("bn.js"); + static VERSION_FIRSTVALID: import("bn.js"); + static VERSION_LASTVALID: import("bn.js"); + static FLAG_HAS_RECIPIENT_CONSTRAINTS: import("bn.js"); + static FLAG_HAS_CALLBACK_URI: import("bn.js"); + static FLAG_HAS_EXPIRY_TIME: import("bn.js"); + static REQUIRED_ID: number; + static REQUIRED_SYSTEM: number; + static REQUIRED_PARENT: number; + static TYPE_WEBHOOK: number; + static TYPE_REDIRECT: number; + constructor(request?: LoginRequestDetailsInterface); + hasRecipentConstraints(): boolean; + hascallbackURIs(): boolean; + hasExpiryTime(): boolean; + calcFlags(flags?: BigNumber): BigNumber; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): LoginRequestDetailsJson; + static fromJson(data: LoginRequestDetailsJson): LoginRequestDetails; + setFlags(): void; + isValid(): boolean; +} diff --git a/dist/vdxf/classes/requestobjects/LoginRequestDetails.js b/dist/vdxf/classes/requestobjects/LoginRequestDetails.js new file mode 100644 index 00000000..cb0a9009 --- /dev/null +++ b/dist/vdxf/classes/requestobjects/LoginRequestDetails.js @@ -0,0 +1,212 @@ +"use strict"; +/** + * LoginRequestDetails - Class for handling application login and authentication requests + * + * This class is used when an application is requesting authentication or login from the user, + * including specific recipientConstraints and callback information. The request includes: + * - Request ID for tracking the authentication session + * - Permission sets defining what access the application is requesting + * - Callback URIs for post-authentication redirects + * - Optional expiry time for the authentication session + * + * The user's wallet can use these parameters to present a clear authentication request + * to the user, showing exactly what recipientConstraints are being requested and where they will + * be redirected after successful authentication. This enables secure, user-controlled + * authentication flows with granular permission management. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LoginRequestDetails = void 0; +const bufferutils_1 = require("../../../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const varuint_1 = require("../../../utils/varuint"); +const vdxf_1 = require("../../../constants/vdxf"); +const address_1 = require("../../../utils/address"); +const CompactIdAddressObject_1 = require("../CompactIdAddressObject"); +class LoginRequestDetails { + constructor(request) { + this.version = (request === null || request === void 0 ? void 0 : request.version) || LoginRequestDetails.DEFAULT_VERSION; + this.requestId = (request === null || request === void 0 ? void 0 : request.requestId) || ''; + this.flags = (request === null || request === void 0 ? void 0 : request.flags) || new bn_js_1.BN(0, 10); + this.recipientConstraints = (request === null || request === void 0 ? void 0 : request.recipientConstraints) || null; + this.callbackURIs = (request === null || request === void 0 ? void 0 : request.callbackURIs) || null; + this.expiryTime = (request === null || request === void 0 ? void 0 : request.expiryTime) || null; + this.setFlags(); + } + hasRecipentConstraints() { + return this.flags.and(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS).eq(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); + } + hascallbackURIs() { + return this.flags.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI).eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); + } + hasExpiryTime() { + return this.flags.and(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME).eq(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME); + } + calcFlags(flags = this.flags) { + if (this.recipientConstraints) { + flags = flags.or(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); + } + if (this.callbackURIs) { + flags = flags.or(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); + } + if (this.expiryTime) { + flags = flags.or(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME); + } + return flags; + } + getByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.flags.toNumber()); + length += 20; // requestId hash length + if (this.hasRecipentConstraints()) { + length += varuint_1.default.encodingLength(this.recipientConstraints.length); + for (let i = 0; i < this.recipientConstraints.length; i++) { + length += varuint_1.default.encodingLength(this.recipientConstraints[i].type); + length += this.recipientConstraints[i].identity.getByteLength(); + } + } + if (this.hascallbackURIs()) { + length += varuint_1.default.encodingLength(this.callbackURIs.length); + for (let i = 0; i < this.callbackURIs.length; i++) { + length += varuint_1.default.encodingLength(this.callbackURIs[i].type); + length += varuint_1.default.encodingLength(Buffer.from(this.callbackURIs[i].uri, 'utf8').byteLength); + length += Buffer.from(this.callbackURIs[i].uri, 'utf8').byteLength; + } + } + if (this.hasExpiryTime()) { + length += varuint_1.default.encodingLength(this.expiryTime.toNumber()); + } + return length; + } + toBuffer() { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeCompactSize(this.flags.toNumber()); + writer.writeSlice((0, address_1.fromBase58Check)(this.requestId).hash); + if (this.hasRecipentConstraints()) { + writer.writeCompactSize(this.recipientConstraints.length); + for (let i = 0; i < this.recipientConstraints.length; i++) { + writer.writeCompactSize(this.recipientConstraints[i].type); + writer.writeSlice(this.recipientConstraints[i].identity.toBuffer()); + } + } + if (this.hascallbackURIs()) { + writer.writeCompactSize(this.callbackURIs.length); + for (let i = 0; i < this.callbackURIs.length; i++) { + writer.writeCompactSize(this.callbackURIs[i].type); + writer.writeVarSlice(Buffer.from(this.callbackURIs[i].uri, 'utf8')); + } + } + if (this.hasExpiryTime()) { + writer.writeCompactSize(this.expiryTime.toNumber()); + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + this.flags = new bn_js_1.BN(reader.readCompactSize()); + this.requestId = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + if (this.hasRecipentConstraints()) { + this.recipientConstraints = []; + const recipientConstraintsLength = reader.readCompactSize(); + for (let i = 0; i < recipientConstraintsLength; i++) { + const compactId = new CompactIdAddressObject_1.CompactIdAddressObject(); + const type = reader.readCompactSize(); + const identityOffset = reader.offset; + reader.offset = compactId.fromBuffer(buffer, identityOffset); + this.recipientConstraints.push({ + type: type, + identity: compactId + }); + } + } + if (this.hascallbackURIs()) { + this.callbackURIs = []; + const callbackURIsLength = reader.readCompactSize(); + for (let i = 0; i < callbackURIsLength; i++) { + this.callbackURIs.push({ + type: reader.readCompactSize(), + uri: reader.readVarSlice().toString('utf8') + }); + } + } + if (this.hasExpiryTime()) { + this.expiryTime = new bn_js_1.BN(reader.readCompactSize()); + } + return reader.offset; + } + toJson() { + const flags = this.calcFlags(); + const retval = { + version: this.version.toNumber(), + flags: flags.toNumber(), + requestid: this.requestId, + recipientConstraints: this.recipientConstraints ? this.recipientConstraints.map(p => ({ type: p.type, + identity: p.identity.toJson() })) : undefined, + callbackURIs: this.callbackURIs ? this.callbackURIs : undefined, + expirytime: this.expiryTime ? this.expiryTime.toNumber() : undefined + }; + return retval; + } + static fromJson(data) { + const loginDetails = new LoginRequestDetails(); + loginDetails.version = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.version) || 0); + loginDetails.flags = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.flags) || 0); + loginDetails.requestId = data.requestid; + if (loginDetails.hasRecipentConstraints() && data.recipientConstraints) { + loginDetails.recipientConstraints = data.recipientConstraints.map(p => ({ type: p.type, + identity: CompactIdAddressObject_1.CompactIdAddressObject.fromJson(p.identity) })); + } + if (loginDetails.hascallbackURIs() && data.callbackURIs) { + loginDetails.callbackURIs = data.callbackURIs.map(c => ({ type: c.type, + uri: c.uri })); + } + if (loginDetails.hasExpiryTime() && data.expirytime) { + loginDetails.expiryTime = new bn_js_1.BN(data.expirytime); + } + return loginDetails; + } + setFlags() { + this.flags = this.calcFlags(); + } + isValid() { + let valid = this.requestId != null && this.requestId.length > 0; + valid && (valid = this.flags != null && this.flags.gte(new bn_js_1.BN(0))); + // Validate requestId is a valid base58 address + try { + (0, address_1.fromBase58Check)(this.requestId); + } + catch (_a) { + valid = false; + } + if (this.hasRecipentConstraints()) { + if (!this.recipientConstraints || this.recipientConstraints.length === 0) { + return false; + } + } + if (this.hascallbackURIs()) { + if (!this.callbackURIs || this.callbackURIs.length === 0) { + return false; + } + } + if (this.hasExpiryTime()) { + if (!this.expiryTime || this.expiryTime.isZero()) { + return false; + } + } + return valid; + } +} +exports.LoginRequestDetails = LoginRequestDetails; +// Version +LoginRequestDetails.DEFAULT_VERSION = new bn_js_1.BN(1, 10); +LoginRequestDetails.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); +LoginRequestDetails.VERSION_LASTVALID = new bn_js_1.BN(1, 10); +LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS = new bn_js_1.BN(1, 10); +LoginRequestDetails.FLAG_HAS_CALLBACK_URI = new bn_js_1.BN(2, 10); +LoginRequestDetails.FLAG_HAS_EXPIRY_TIME = new bn_js_1.BN(4, 10); +// Recipient Constraint Types - What types of Identity can login, e.g. REQUIRED_SYSTEM and "VRSC" means only identities on the Verus chain can login +LoginRequestDetails.REQUIRED_ID = 1; +LoginRequestDetails.REQUIRED_SYSTEM = 2; +LoginRequestDetails.REQUIRED_PARENT = 3; +// Callback URI Types +LoginRequestDetails.TYPE_WEBHOOK = 1; +LoginRequestDetails.TYPE_REDIRECT = 2; diff --git a/dist/vdxf/classes/requestobjects/PersonalUserDataDetails.d.ts b/dist/vdxf/classes/requestobjects/PersonalUserDataDetails.d.ts new file mode 100644 index 00000000..605cbb5e --- /dev/null +++ b/dist/vdxf/classes/requestobjects/PersonalUserDataDetails.d.ts @@ -0,0 +1,61 @@ +/** + * PersonalUserDataDetails - Class for handling personal user data transfer requests + * + * This class is used when an application is requesting to transfer or receive personal + * user data. The request includes: + * - Data objects as DataDescriptor instances containing the user's personal data + * - Optional statements array for additional context or transfer conditions + * - Optional signature data for verification of the transfer + * - Flags indicating transfer direction and optional components + * + * The user's wallet can use these parameters to present the data transfer request + * to the user, showing what personal data is being transferred, any associated + * statements or conditions, and whether it's for the user's signature or being + * transmitted to/from the user. This enables secure, user-controlled personal + * data sharing with clear visibility into what data is being transferred. + */ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { DataDescriptor, DataDescriptorJson } from '../../../pbaas'; +import { VerifiableSignatureData, VerifiableSignatureDataJson } from '../../../vdxf/classes/VerifiableSignatureData'; +export interface PersonalUserDataDetailsInterface { + version?: BigNumber; + flags: BigNumber; + signableObjects: Array; + statements?: Array; + signature?: VerifiableSignatureData; +} +export interface PersonalUserDataDetailsJson { + version: number; + flags: number; + signableobjects: Array; + statements?: Array; + signature?: VerifiableSignatureDataJson; +} +export declare class PersonalUserDataDetails implements SerializableEntity { + static VERSION_INVALID: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static DEFAULT_VERSION: import("bn.js"); + static HAS_STATEMENTS: import("bn.js"); + static HAS_SIGNATURE: import("bn.js"); + static FOR_USERS_SIGNATURE: import("bn.js"); + static FOR_TRANSMITTAL_TO_USER: import("bn.js"); + static HAS_URL_FOR_DOWNLOAD: import("bn.js"); + version: BigNumber; + flags: BigNumber; + signableObjects: Array; + statements?: Array; + signature?: VerifiableSignatureData; + constructor(data?: PersonalUserDataDetailsInterface); + setFlags(): void; + calcFlags(): BigNumber; + hasStatements(): boolean; + hasSignature(): boolean; + isValid(): boolean; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): PersonalUserDataDetailsJson; + static fromJson(json: PersonalUserDataDetailsJson): PersonalUserDataDetails; +} diff --git a/dist/vdxf/classes/requestobjects/PersonalUserDataDetails.js b/dist/vdxf/classes/requestobjects/PersonalUserDataDetails.js new file mode 100644 index 00000000..b27d9415 --- /dev/null +++ b/dist/vdxf/classes/requestobjects/PersonalUserDataDetails.js @@ -0,0 +1,170 @@ +"use strict"; +/** + * PersonalUserDataDetails - Class for handling personal user data transfer requests + * + * This class is used when an application is requesting to transfer or receive personal + * user data. The request includes: + * - Data objects as DataDescriptor instances containing the user's personal data + * - Optional statements array for additional context or transfer conditions + * - Optional signature data for verification of the transfer + * - Flags indicating transfer direction and optional components + * + * The user's wallet can use these parameters to present the data transfer request + * to the user, showing what personal data is being transferred, any associated + * statements or conditions, and whether it's for the user's signature or being + * transmitted to/from the user. This enables secure, user-controlled personal + * data sharing with clear visibility into what data is being transferred. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PersonalUserDataDetails = void 0; +const bn_js_1 = require("bn.js"); +const varuint_1 = require("../../../utils/varuint"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const pbaas_1 = require("../../../pbaas"); +const VerifiableSignatureData_1 = require("../../../vdxf/classes/VerifiableSignatureData"); +class PersonalUserDataDetails { + constructor(data) { + this.version = (data === null || data === void 0 ? void 0 : data.version) || PersonalUserDataDetails.DEFAULT_VERSION; + this.flags = (data === null || data === void 0 ? void 0 : data.flags) || new bn_js_1.BN(0); + this.signableObjects = (data === null || data === void 0 ? void 0 : data.signableObjects) || []; + this.statements = (data === null || data === void 0 ? void 0 : data.statements) || []; + this.signature = (data === null || data === void 0 ? void 0 : data.signature) || undefined; + this.setFlags(); + } + setFlags() { + this.flags = this.calcFlags(); + } + calcFlags() { + let flags = new bn_js_1.BN(0); + if (this.statements && this.statements.length > 0) { + flags = flags.or(PersonalUserDataDetails.HAS_STATEMENTS); + } + if (this.signature) { + flags = flags.or(PersonalUserDataDetails.HAS_SIGNATURE); + } + return flags; + } + hasStatements() { + return this.flags.and(PersonalUserDataDetails.HAS_STATEMENTS).eq(PersonalUserDataDetails.HAS_STATEMENTS); + } + hasSignature() { + return this.flags.and(PersonalUserDataDetails.HAS_SIGNATURE).eq(PersonalUserDataDetails.HAS_SIGNATURE); + } + isValid() { + let valid = this.version.gte(PersonalUserDataDetails.FIRST_VERSION) && + this.version.lte(PersonalUserDataDetails.LAST_VERSION); + // Check that we have signable objects + valid && (valid = this.signableObjects.length > 0); + if (this.hasStatements()) { + valid && (valid = this.statements !== undefined && this.statements.length > 0); + } + if (this.hasSignature()) { + valid && (valid = this.signature !== undefined); // TODO: && this.signature.isValid(); + } + return valid; + } + getByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.flags.toNumber()); + // Add length for signableObjects array + length += varuint_1.default.encodingLength(this.signableObjects.length); + for (const obj of this.signableObjects) { + length += obj.getByteLength(); + } + // Add signer length if present + if (this.hasStatements()) { + length += varuint_1.default.encodingLength(this.statements.length); + for (const stmt of this.statements) { + length += varuint_1.default.encodingLength(Buffer.byteLength(stmt, 'utf8')); + length += Buffer.byteLength(stmt, 'utf8'); + } + } + if (this.hasSignature() && this.signature) { + length += this.signature.getByteLength(); + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeCompactSize(this.flags.toNumber()); + // Write signableObjects array + writer.writeCompactSize(this.signableObjects.length); + for (const obj of this.signableObjects) { + writer.writeSlice(obj.toBuffer()); + } + // Write statements if present + if (this.hasStatements()) { + writer.writeCompactSize(this.statements.length); + for (const stmt of this.statements) { + writer.writeVarSlice(Buffer.from(stmt, 'utf8')); + } + } + if (this.hasSignature() && this.signature) { + writer.writeSlice(this.signature.toBuffer()); + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new BufferReader(buffer, offset); + this.flags = new bn_js_1.BN(reader.readCompactSize()); + // Read signableObjects array + const objectCount = reader.readCompactSize(); + this.signableObjects = []; + for (let i = 0; i < objectCount; i++) { + const obj = new pbaas_1.DataDescriptor(); + reader.offset = obj.fromBuffer(reader.buffer, reader.offset); + this.signableObjects.push(obj); + } + // Read statements if flag is set + if (this.hasStatements()) { + this.statements = []; + const statementCount = reader.readCompactSize(); + for (let i = 0; i < statementCount; i++) { + const stmt = reader.readVarSlice().toString('utf8'); + this.statements.push(stmt); + } + } + if (this.hasSignature()) { + const signature = new VerifiableSignatureData_1.VerifiableSignatureData(); + reader.offset = signature.fromBuffer(reader.buffer, reader.offset); + this.signature = signature; + } + return reader.offset; + } + toJson() { + const flags = this.calcFlags(); + return { + version: this.version.toNumber(), + flags: flags.toNumber(), + signableobjects: this.signableObjects.map(obj => obj.toJson()), + statements: this.statements, + signature: this.signature ? this.signature.toJson() : undefined + }; + } + static fromJson(json) { + const instance = new PersonalUserDataDetails(); + instance.version = new bn_js_1.BN(json.version); + instance.flags = new bn_js_1.BN(json.flags); + const dataDescriptorObjects = []; + for (const objJson of json.signableobjects) { + const dataDescriptor = pbaas_1.DataDescriptor.fromJson(objJson); + dataDescriptorObjects.push(dataDescriptor); + } + instance.signableObjects = dataDescriptorObjects; + instance.statements = json.statements || []; + instance.signature = json.signature ? VerifiableSignatureData_1.VerifiableSignatureData.fromJson(json.signature) : undefined; + return instance; + } +} +exports.PersonalUserDataDetails = PersonalUserDataDetails; +PersonalUserDataDetails.VERSION_INVALID = new bn_js_1.BN(0); +PersonalUserDataDetails.FIRST_VERSION = new bn_js_1.BN(1); +PersonalUserDataDetails.LAST_VERSION = new bn_js_1.BN(1); +PersonalUserDataDetails.DEFAULT_VERSION = new bn_js_1.BN(1); +// types of data to sign +PersonalUserDataDetails.HAS_STATEMENTS = new bn_js_1.BN(1); +PersonalUserDataDetails.HAS_SIGNATURE = new bn_js_1.BN(2); +PersonalUserDataDetails.FOR_USERS_SIGNATURE = new bn_js_1.BN(4); +PersonalUserDataDetails.FOR_TRANSMITTAL_TO_USER = new bn_js_1.BN(8); +PersonalUserDataDetails.HAS_URL_FOR_DOWNLOAD = new bn_js_1.BN(16); diff --git a/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts new file mode 100644 index 00000000..6de80b0b --- /dev/null +++ b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts @@ -0,0 +1,57 @@ +/** + * ProvisioningIdentity - Class for handling identity provisioning requests + * + * This class is used when an application is requesting the provisioning or creation of a new identity + * within the Verus blockchain ecosystem. The request includes: + * - System ID (e.g., VRSC@) defining the blockchain system + * - Parent ID (e.g., Token@) defining the parent namespace + * - Identity ID (e.g., john.VRSC@) defining the full identity to be provisioned + * - Flags indicating which components are present and required + * + * The user's wallet can use these parameters to understand the complete identity hierarchy + * and present a clear provisioning request to the user, showing the system context, + * parent namespace, and the specific identity being created. This enables secure, + * user-controlled identity provisioning with proper namespace management. + */ +import { BigNumber } from "../../../utils/types/BigNumber"; +import { SerializableEntity } from "../../../utils/types/SerializableEntity"; +import { CompactIdAddressObject, CompactIdAddressObjectJson } from "../CompactIdAddressObject"; +export interface ProvisionIdentityDetailsInterface { + version?: BigNumber; + flags: BigNumber; + systemId?: CompactIdAddressObject; + parentId?: CompactIdAddressObject; + identityId?: CompactIdAddressObject; +} +export interface ProvisionIdentityDetailsJson { + version?: number; + flags: number; + systemid?: CompactIdAddressObjectJson; + parentid?: CompactIdAddressObjectJson; + identityid?: CompactIdAddressObjectJson; +} +export declare class ProvisionIdentityDetails implements SerializableEntity { + version: BigNumber; + flags: BigNumber; + systemId?: CompactIdAddressObject; + parentId?: CompactIdAddressObject; + identityId?: CompactIdAddressObject; + static DEFAULT_VERSION: import("bn.js"); + static VERSION_FIRSTVALID: import("bn.js"); + static VERSION_LASTVALID: import("bn.js"); + static FLAG_HAS_SYSTEMID: import("bn.js"); + static FLAG_HAS_PARENTID: import("bn.js"); + static FLAG_IS_A_DEFINED_NAME_TO_PROVISION: import("bn.js"); + constructor(data?: ProvisionIdentityDetailsInterface); + hasSystemId(): boolean; + hasParentId(): boolean; + hasIdentityId(): boolean; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): ProvisionIdentityDetailsJson; + static fromJson(data: any): ProvisionIdentityDetails; + calcFlags(): BigNumber; + setFlags(): void; + isValid(): boolean; +} diff --git a/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js new file mode 100644 index 00000000..e68ed355 --- /dev/null +++ b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js @@ -0,0 +1,146 @@ +"use strict"; +/** + * ProvisioningIdentity - Class for handling identity provisioning requests + * + * This class is used when an application is requesting the provisioning or creation of a new identity + * within the Verus blockchain ecosystem. The request includes: + * - System ID (e.g., VRSC@) defining the blockchain system + * - Parent ID (e.g., Token@) defining the parent namespace + * - Identity ID (e.g., john.VRSC@) defining the full identity to be provisioned + * - Flags indicating which components are present and required + * + * The user's wallet can use these parameters to understand the complete identity hierarchy + * and present a clear provisioning request to the user, showing the system context, + * parent namespace, and the specific identity being created. This enables secure, + * user-controlled identity provisioning with proper namespace management. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ProvisionIdentityDetails = void 0; +const bufferutils_1 = require("../../../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const CompactIdAddressObject_1 = require("../CompactIdAddressObject"); +const varuint_1 = require("../../../utils/varuint"); +class ProvisionIdentityDetails { + constructor(data) { + this.version = (data === null || data === void 0 ? void 0 : data.version) || ProvisionIdentityDetails.DEFAULT_VERSION; + this.flags = (data === null || data === void 0 ? void 0 : data.flags) || new bn_js_1.BN(0, 10); + this.systemId = data === null || data === void 0 ? void 0 : data.systemId; + this.parentId = data === null || data === void 0 ? void 0 : data.parentId; + this.identityId = data === null || data === void 0 ? void 0 : data.identityId; + this.setFlags(); + } + hasSystemId() { + return this.flags.and(ProvisionIdentityDetails.FLAG_HAS_SYSTEMID).eq(ProvisionIdentityDetails.FLAG_HAS_SYSTEMID); + } + hasParentId() { + return this.flags.and(ProvisionIdentityDetails.FLAG_HAS_PARENTID).eq(ProvisionIdentityDetails.FLAG_HAS_PARENTID); + } + hasIdentityId() { + return this.flags.and(ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION).eq(ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION); + } + getByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.flags.toNumber()); + if (this.hasSystemId()) { + length += this.systemId.getByteLength(); + } + if (this.hasParentId()) { + length += this.parentId.getByteLength(); + } + if (this.hasIdentityId()) { + length += this.identityId.getByteLength(); + } + return length; + } + toBuffer() { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeCompactSize(this.flags.toNumber()); + if (this.hasSystemId()) { + writer.writeSlice(this.systemId.toBuffer()); + } + if (this.hasParentId()) { + writer.writeSlice(this.parentId.toBuffer()); + } + if (this.hasIdentityId()) { + writer.writeSlice(this.identityId.toBuffer()); + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + if (buffer.length == 0) + throw new Error("Cannot create provision identity from empty buffer"); + this.flags = new bn_js_1.BN(reader.readCompactSize()); + if (this.hasSystemId()) { + const systemId = new CompactIdAddressObject_1.CompactIdAddressObject(); + reader.offset = systemId.fromBuffer(reader.buffer, reader.offset); + this.systemId = systemId; + } + if (this.hasParentId()) { + const parentId = new CompactIdAddressObject_1.CompactIdAddressObject(); + reader.offset = parentId.fromBuffer(reader.buffer, reader.offset); + this.parentId = parentId; + } + if (this.hasIdentityId()) { + const identityId = new CompactIdAddressObject_1.CompactIdAddressObject(); + reader.offset = identityId.fromBuffer(reader.buffer, reader.offset); + this.identityId = identityId; + } + return reader.offset; + } + toJson() { + const flags = this.calcFlags(); + return { + version: this.version.toNumber(), + flags: flags.toNumber(), + systemid: this.systemId ? this.systemId.toJson() : null, + parentid: this.parentId ? this.parentId.toJson() : null, + identityid: this.identityId ? this.identityId.toJson() : null, + }; + } + static fromJson(data) { + const provision = new ProvisionIdentityDetails(); + provision.version = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.version) || 0); + provision.flags = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.flags) || 0); + if (provision.hasSystemId()) { + provision.systemId = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(data.systemid); + } + if (provision.hasParentId()) { + provision.parentId = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(data.parentid); + } + if (provision.hasIdentityId()) { + provision.identityId = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(data.identityid); + } + return provision; + } + calcFlags() { + let flags = new bn_js_1.BN(0, 10); + if (this.systemId) { + flags = flags.or(ProvisionIdentityDetails.FLAG_HAS_SYSTEMID); + } + if (this.parentId) { + flags = flags.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID); + } + if (this.identityId) { + flags = flags.or(ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION); + } + return flags; + } + setFlags() { + this.flags = this.calcFlags(); + } + isValid() { + let valid = this.flags != null && this.flags.gte(new bn_js_1.BN(0)); + valid && (valid = this.version != null); + return valid; + } +} +exports.ProvisionIdentityDetails = ProvisionIdentityDetails; +// Version +ProvisionIdentityDetails.DEFAULT_VERSION = new bn_js_1.BN(1, 10); +ProvisionIdentityDetails.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); +ProvisionIdentityDetails.VERSION_LASTVALID = new bn_js_1.BN(1, 10); +// flags include params // parent same as signer +ProvisionIdentityDetails.FLAG_HAS_SYSTEMID = new bn_js_1.BN(1, 10); +ProvisionIdentityDetails.FLAG_HAS_PARENTID = new bn_js_1.BN(2, 10); +ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION = new bn_js_1.BN(4, 10); diff --git a/dist/vdxf/classes/requestobjects/RequestUserData.d.ts b/dist/vdxf/classes/requestobjects/RequestUserData.d.ts new file mode 100644 index 00000000..6f7b6f57 --- /dev/null +++ b/dist/vdxf/classes/requestobjects/RequestUserData.d.ts @@ -0,0 +1,83 @@ +/** + * InformationRequest - Class for handling application requests for specific user information/data + * + * This class is used when an application is requesting specific information or data from the user's + * identity or data stores. The request includes: + * - Search data keys (VDXF keys) to identify the specific data being requested + * - Optional specific keys within the data object for partial data requests + * - Signer information to identify wanted signer of the data + * - Optional statement for boundhashes in the signature + * + * The user's wallet can use these parameters to locate the signed object information and present + * it to the user for approval before sharing with the requesting application. This enables + * selective disclosure of personal information while maintaining user privacy and control. + * + * Flags determine the type and scope of the request: + * - FULL_DATA vs PARTIAL_DATA: Whether complete objects or specific fields are requested + * - COLLECTION: Whether multiple data objects are being requested + * - HAS_STATEMENT: Whether the request includes an attestation statement + * - ATTESTATION/CLAIM/CREDENTIAL: Type of verification being requested + */ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { CompactIdAddressObject, CompactIdAddressObjectJson } from '../CompactIdAddressObject'; +export interface RequestUserDataInterface { + version?: BigNumber; + flags: BigNumber; + searchDataKey: Array<{ + [key: string]: string; + }>; + signer?: CompactIdAddressObject; + requestedKeys?: string[]; +} +export interface RequestUserDataJson { + version: number; + flags: number; + searchdatakey: Array<{ + [key: string]: string; + }>; + signer?: CompactIdAddressObjectJson; + requestedkeys?: string[]; +} +export declare class RequestUserData implements SerializableEntity { + static VERSION_INVALID: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static DEFAULT_VERSION: import("bn.js"); + static FULL_DATA: import("bn.js"); + static PARTIAL_DATA: import("bn.js"); + static COLLECTION: import("bn.js"); + static ATTESTATION: import("bn.js"); + static CLAIM: import("bn.js"); + static CREDENTIAL: import("bn.js"); + static HAS_SIGNER: import("bn.js"); + static HAS_REQUESTED_KEYS: import("bn.js"); + version: BigNumber; + flags: BigNumber; + searchDataKey: Array<{ + [key: string]: string; + }>; + signer?: CompactIdAddressObject; + requestedKeys?: string[]; + constructor(data?: RequestUserDataInterface); + calcFlags(): BigNumber; + setFlags(): void; + hasSigner(): boolean; + hasRequestedKeys(): boolean; + /** + * Checks if exactly one data type flag is set (FULL_DATA, PARTIAL_DATA, or COLLECTION) + * @returns True if exactly one data type flag is set + */ + hasDataTypeSet(): boolean; + /** + * Checks if exactly one request type flag is set (ATTESTATION, CLAIM, or CREDENTIAL) + * @returns True if exactly one request type flag is set + */ + hasRequestTypeSet(): boolean; + isValid(): boolean; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): RequestUserDataJson; + static fromJson(json: RequestUserDataJson): RequestUserData; +} diff --git a/dist/vdxf/classes/requestobjects/RequestUserData.js b/dist/vdxf/classes/requestobjects/RequestUserData.js new file mode 100644 index 00000000..acfda80b --- /dev/null +++ b/dist/vdxf/classes/requestobjects/RequestUserData.js @@ -0,0 +1,193 @@ +"use strict"; +/** + * InformationRequest - Class for handling application requests for specific user information/data + * + * This class is used when an application is requesting specific information or data from the user's + * identity or data stores. The request includes: + * - Search data keys (VDXF keys) to identify the specific data being requested + * - Optional specific keys within the data object for partial data requests + * - Signer information to identify wanted signer of the data + * - Optional statement for boundhashes in the signature + * + * The user's wallet can use these parameters to locate the signed object information and present + * it to the user for approval before sharing with the requesting application. This enables + * selective disclosure of personal information while maintaining user privacy and control. + * + * Flags determine the type and scope of the request: + * - FULL_DATA vs PARTIAL_DATA: Whether complete objects or specific fields are requested + * - COLLECTION: Whether multiple data objects are being requested + * - HAS_STATEMENT: Whether the request includes an attestation statement + * - ATTESTATION/CLAIM/CREDENTIAL: Type of verification being requested + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.RequestUserData = void 0; +const bn_js_1 = require("bn.js"); +const varuint_1 = require("../../../utils/varuint"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const CompactIdAddressObject_1 = require("../CompactIdAddressObject"); +const address_1 = require("../../../utils/address"); +class RequestUserData { + constructor(data) { + this.version = (data === null || data === void 0 ? void 0 : data.version) || RequestUserData.DEFAULT_VERSION; + this.flags = (data === null || data === void 0 ? void 0 : data.flags) || new bn_js_1.BN(0); + this.searchDataKey = (data === null || data === void 0 ? void 0 : data.searchDataKey) || []; + this.signer = data === null || data === void 0 ? void 0 : data.signer; + this.requestedKeys = data === null || data === void 0 ? void 0 : data.requestedKeys; + this.setFlags(); + } + calcFlags() { + let flags = new bn_js_1.BN(0); + if (this.requestedKeys && this.requestedKeys.length > 0) { + flags = flags.or(RequestUserData.HAS_REQUESTED_KEYS); + } + if (this.signer) { + flags = flags.or(RequestUserData.HAS_SIGNER); + } + return flags; + } + setFlags() { + this.flags = this.calcFlags(); + } + hasSigner() { + return this.flags.and(RequestUserData.HAS_SIGNER).eq(RequestUserData.HAS_SIGNER); + } + hasRequestedKeys() { + return this.flags.and(RequestUserData.HAS_REQUESTED_KEYS).eq(RequestUserData.HAS_REQUESTED_KEYS); + } + /** + * Checks if exactly one data type flag is set (FULL_DATA, PARTIAL_DATA, or COLLECTION) + * @returns True if exactly one data type flag is set + */ + hasDataTypeSet() { + const dataTypeFlags = RequestUserData.FULL_DATA.or(RequestUserData.PARTIAL_DATA).or(RequestUserData.COLLECTION); + const setDataFlags = this.flags.and(dataTypeFlags); + // Check if exactly one flag is set by verifying it's a power of 2 + return !setDataFlags.isZero() && setDataFlags.and(setDataFlags.sub(new bn_js_1.BN(1))).isZero(); + } + /** + * Checks if exactly one request type flag is set (ATTESTATION, CLAIM, or CREDENTIAL) + * @returns True if exactly one request type flag is set + */ + hasRequestTypeSet() { + const requestTypeFlags = RequestUserData.ATTESTATION.or(RequestUserData.CLAIM).or(RequestUserData.CREDENTIAL); + const setRequestFlags = this.flags.and(requestTypeFlags); + // Check if exactly one flag is set by verifying it's a power of 2 + return !setRequestFlags.isZero() && setRequestFlags.and(setRequestFlags.sub(new bn_js_1.BN(1))).isZero(); + } + isValid() { + let valid = this.version.gte(RequestUserData.FIRST_VERSION) && this.version.lte(RequestUserData.LAST_VERSION); + // Check that exactly one data type flag is set + valid && (valid = this.hasDataTypeSet()); + // Check that exactly one request type flag is set + valid && (valid = this.hasRequestTypeSet()); + // Check that searchDataKey is present + valid && (valid = Object.keys(this.searchDataKey).length > 0); + return valid; + } + getByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.flags.toNumber()); + length += varuint_1.default.encodingLength(this.searchDataKey.length); + for (const item of this.searchDataKey) { + const key = Object.keys(item)[0]; + const value = item[key]; + length += 20; // VDXF key length + length += varuint_1.default.encodingLength(Buffer.byteLength(value, 'utf8')); + length += Buffer.byteLength(value, 'utf8'); + } + if (this.hasSigner()) { + length += this.signer.getByteLength(); + } + if (this.hasRequestedKeys()) { + length += varuint_1.default.encodingLength(this.requestedKeys ? this.requestedKeys.length : 0); + if (this.requestedKeys) { + for (const key of this.requestedKeys) { + length += 20; // VDXF key length + } + } + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeCompactSize(this.flags.toNumber()); + writer.writeCompactSize(this.searchDataKey.length); + for (const item of this.searchDataKey) { + const key = Object.keys(item)[0]; + const value = item[key]; + writer.writeSlice((0, address_1.fromBase58Check)(key).hash); // 20-byte VDXF key + writer.writeVarSlice(Buffer.from(value, 'utf8')); + } + if (this.hasSigner()) { + writer.writeSlice(this.signer.toBuffer()); + } + if (this.hasRequestedKeys()) { + writer.writeCompactSize(this.requestedKeys.length); + for (const key of this.requestedKeys) { + writer.writeSlice((0, address_1.fromBase58Check)(key).hash); // 20-byte VDXF key + } + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new BufferReader(buffer, offset); + this.flags = new bn_js_1.BN(reader.readCompactSize()); + const searchDataKeyLength = reader.readCompactSize(); + this.searchDataKey = []; + for (let i = 0; i < searchDataKeyLength; i++) { + const keyHash = reader.readSlice(20); // 20-byte VDXF key + const valueBuffer = reader.readVarSlice(); + const value = valueBuffer.toString('utf8'); + const key = (0, address_1.toBase58Check)(keyHash, 102); + this.searchDataKey.push({ [key]: value }); + } + if (this.hasSigner()) { + const signer = new CompactIdAddressObject_1.CompactIdAddressObject(); + reader.offset = signer.fromBuffer(reader.buffer, reader.offset); + this.signer = signer; + } + if (this.hasRequestedKeys()) { + const requestedKeysLength = reader.readCompactSize(); + this.requestedKeys = []; + for (let i = 0; i < requestedKeysLength; i++) { + const keyHash = reader.readSlice(20); // 20-byte VDXF key + const key = (0, address_1.toBase58Check)(keyHash, 102); + this.requestedKeys.push(key); + } + } + return reader.offset; + } + toJson() { + const flags = this.calcFlags(); + return { + version: this.version.toNumber(), + flags: flags.toNumber(), + searchdatakey: this.searchDataKey, + signer: this.signer.toJson(), + requestedkeys: this.requestedKeys + }; + } + static fromJson(json) { + const requestData = new RequestUserData(); + requestData.version = new bn_js_1.BN(json.version); + requestData.flags = new bn_js_1.BN(json.flags); + requestData.searchDataKey = json.searchdatakey; + requestData.signer = json.signer ? CompactIdAddressObject_1.CompactIdAddressObject.fromJson(json.signer) : undefined; + requestData.requestedKeys = json.requestedkeys; + return requestData; + } +} +exports.RequestUserData = RequestUserData; +RequestUserData.VERSION_INVALID = new bn_js_1.BN(0); +RequestUserData.FIRST_VERSION = new bn_js_1.BN(1); +RequestUserData.LAST_VERSION = new bn_js_1.BN(1); +RequestUserData.DEFAULT_VERSION = new bn_js_1.BN(1); +RequestUserData.FULL_DATA = new bn_js_1.BN(1); +RequestUserData.PARTIAL_DATA = new bn_js_1.BN(2); +RequestUserData.COLLECTION = new bn_js_1.BN(4); +RequestUserData.ATTESTATION = new bn_js_1.BN(8); +RequestUserData.CLAIM = new bn_js_1.BN(16); +RequestUserData.CREDENTIAL = new bn_js_1.BN(32); +RequestUserData.HAS_SIGNER = new bn_js_1.BN(64); +RequestUserData.HAS_REQUESTED_KEYS = new bn_js_1.BN(128); diff --git a/dist/vdxf/keys.d.ts b/dist/vdxf/keys.d.ts index 92648220..1a1f0536 100644 --- a/dist/vdxf/keys.d.ts +++ b/dist/vdxf/keys.d.ts @@ -75,3 +75,5 @@ export declare const DATA_TYPE_OBJECT_CREDENTIAL: VDXFKeyInterface; export declare const IDENTITY_CREDENTIALS: VDXFKeyInterface; export declare const IDENTITY_CREDENTIAL_PLAINLOGIN: VDXFKeyInterface; export declare const IDENTITY_CREDENTIAL_USERNAME: VDXFKeyInterface; +export declare const ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS: VDXFKeyInterface; +export declare const LOGIN_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index dcd5ea2c..70462336 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; -exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; +exports.LOGIN_REQUEST_DETAILS_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; exports.VERUSPAY_INVOICE_VDXF_KEY = { hash160result: "628efc28c2e2d40050e1a9de7a93e7ddf2aa0076", qualifiedname: { @@ -541,3 +541,21 @@ exports.IDENTITY_CREDENTIAL_USERNAME = { name: "vrsc::identity.credential.username" }, }; +exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = { + "vdxfid": "i4BWC5Lr7gAT7KzyDx82Ye5DeFQD8ckcXe", + "indexid": "x91cesmvxzP7jVt15dnBX2bkfuRDya9TPq", + "hash160result": "3c520f0bde6be181461ebbff11bce396a604c007", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::attestation.view.request.multipleattestations" + } +}; +exports.LOGIN_REQUEST_DETAILS_VDXF_KEY = { + "vdxfid": "i4FZ64np4rhtEkSF8mUX7xtaoqqWLPh1cf", + "indexid": "x95fYsDtvAvYrvKGzT8g6MR7qVrXBnjHhp", + "hash160result": "b1fe18b799bd076bfa9afcb206e934468c198408", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::request.loginrequestdetails" + } +}; From ec6d0c1722d07d8c9325bb52a0d6692dd55b5add Mon Sep 17 00:00:00 2001 From: michaeltout Date: Wed, 12 Nov 2025 16:07:19 +0100 Subject: [PATCH 049/123] Wrap ProvisionIdentityDetails and LoginRequestDetails in GenericRequest --- dist/constants/ordinals/ordinals.d.ts | 2 + dist/constants/ordinals/ordinals.js | 4 +- dist/constants/ordinals/register.js | 4 + dist/constants/ordinals/types.d.ts | 6 +- .../LoginRequestDetailsOrdinalVdxfObject.d.ts | 9 +++ .../LoginRequestDetailsOrdinalVdxfObject.js | 22 ++++++ ...isionIdentityDetailsOrdinalVdxfObject.d.ts | 9 +++ ...ovisionIdentityDetailsOrdinalVdxfObject.js | 22 ++++++ dist/vdxf/classes/ordinals/index.d.ts | 1 + dist/vdxf/classes/ordinals/index.js | 1 + .../requestobjects/LoginRequestDetails.d.ts | 4 +- .../requestobjects/LoginRequestDetails.js | 18 ++--- .../ProvisionIdentityDetails.d.ts | 12 +-- .../ProvisionIdentityDetails.js | 54 ++++++------- dist/vdxf/keys.d.ts | 1 + dist/vdxf/keys.js | 23 ++++-- src/__tests__/constants/fixtures.ts | 10 ++- .../vdxf/loginrequestdetails.test.ts | 20 ++--- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 77 ++++++++++++++++++- .../vdxf/personaluserdatadetails.test.ts | 18 ++--- .../vdxf/provisioningidentitydetails.test.ts | 61 ++++++++------- src/constants/ordinals/ordinals.ts | 4 +- src/constants/ordinals/register.ts | 8 +- src/constants/ordinals/types.ts | 6 +- .../LoginRequestDetailsOrdinalVdxfObject.ts | 29 +++++++ ...ovisionIdentityDetailsOrdinalVdxfObject.ts | 29 +++++++ src/vdxf/classes/ordinals/index.ts | 1 + .../requestobjects/LoginRequestDetails.ts | 24 +++--- .../ProvisionIdentityDetails.ts | 73 ++++++++---------- src/vdxf/keys.ts | 22 ++++-- 30 files changed, 396 insertions(+), 178 deletions(-) create mode 100644 dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.js create mode 100644 dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.js create mode 100644 src/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.ts create mode 100644 src/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.ts diff --git a/dist/constants/ordinals/ordinals.d.ts b/dist/constants/ordinals/ordinals.d.ts index 5722e3a5..10b36ef9 100644 --- a/dist/constants/ordinals/ordinals.d.ts +++ b/dist/constants/ordinals/ordinals.d.ts @@ -3,5 +3,7 @@ export declare const VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING: import("bn.js"); export declare const VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY: import("bn.js"); export declare const VDXF_ORDINAL_DATA_DESCRIPTOR: import("bn.js"); export declare const VDXF_ORDINAL_VERUSPAY_INVOICE: import("bn.js"); +export declare const VDXF_ORDINAL_LOGIN_REQUEST: import("bn.js"); export declare const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST: import("bn.js"); export declare const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE: import("bn.js"); +export declare const VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS: import("bn.js"); diff --git a/dist/constants/ordinals/ordinals.js b/dist/constants/ordinals/ordinals.js index da64b1d3..9158ba3b 100644 --- a/dist/constants/ordinals/ordinals.js +++ b/dist/constants/ordinals/ordinals.js @@ -1,11 +1,13 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = exports.VDXF_ORDINAL_VERUSPAY_INVOICE = exports.VDXF_ORDINAL_DATA_DESCRIPTOR = exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = void 0; +exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = exports.VDXF_ORDINAL_LOGIN_REQUEST = exports.VDXF_ORDINAL_VERUSPAY_INVOICE = exports.VDXF_ORDINAL_DATA_DESCRIPTOR = exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = void 0; const bn_js_1 = require("bn.js"); exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = new bn_js_1.BN(102, 10); exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new bn_js_1.BN(103, 10); exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = new bn_js_1.BN(104, 10); exports.VDXF_ORDINAL_DATA_DESCRIPTOR = new bn_js_1.BN(0, 10); exports.VDXF_ORDINAL_VERUSPAY_INVOICE = new bn_js_1.BN(1, 10); +exports.VDXF_ORDINAL_LOGIN_REQUEST = new bn_js_1.BN(2, 10); exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new bn_js_1.BN(3, 10); exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new bn_js_1.BN(4, 10); +exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new bn_js_1.BN(5, 10); diff --git a/dist/constants/ordinals/register.js b/dist/constants/ordinals/register.js index dc609805..fecf5d84 100644 --- a/dist/constants/ordinals/register.js +++ b/dist/constants/ordinals/register.js @@ -5,13 +5,17 @@ const vdxf_1 = require("../../vdxf"); const DataDescriptorOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject"); const IdentityUpdateRequestOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject"); const IdentityUpdateResponseOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject"); +const LoginRequestDetailsOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject"); const OrdinalVdxfObjectOrdinalMap_1 = require("../../vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap"); +const ProvisionIdentityDetailsOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject"); const VerusPayInvoiceOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject"); const ordinals_1 = require("./ordinals"); const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), vdxf_1.DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVdxfObject_1.DataDescriptorOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), vdxf_1.VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid, VerusPayInvoiceOrdinalVdxfObject_1.VerusPayInvoiceOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_LOGIN_REQUEST.toNumber(), vdxf_1.LOGIN_REQUEST_DETAILS_VDXF_KEY.vdxfid, LoginRequestDetailsOrdinalVdxfObject_1.LoginRequestOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), vdxf_1.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVdxfObject_1.IdentityUpdateRequestOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), vdxf_1.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject_1.IdentityUpdateResponseOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), vdxf_1.PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVdxfObject_1.ProvisionIdentityDetailsOrdinalVdxfObject, false); }; exports.registerOrdinals = registerOrdinals; diff --git a/dist/constants/ordinals/types.d.ts b/dist/constants/ordinals/types.d.ts index 4bb2870c..4753be33 100644 --- a/dist/constants/ordinals/types.d.ts +++ b/dist/constants/ordinals/types.d.ts @@ -1,5 +1,5 @@ import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; -import { IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; +import { IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, LoginRequestDetails, LoginRequestDetailsJson, ProvisionIdentityDetails, ProvisionIdentityDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; -export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails; -export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson; +export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails | LoginRequestDetails | ProvisionIdentityDetails; +export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson | LoginRequestDetailsJson | ProvisionIdentityDetailsJson; diff --git a/dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.d.ts new file mode 100644 index 00000000..ef2471ef --- /dev/null +++ b/dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { LoginRequestDetails, LoginRequestDetailsJson } from "../requestobjects/LoginRequestDetails"; +export declare class LoginRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: LoginRequestDetails; + constructor(request?: OrdinalVdxfObjectInterfaceTemplate); + static fromJson(details: OrdinalVdxfObjectJsonTemplate): LoginRequestOrdinalVdxfObject; +} diff --git a/dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.js new file mode 100644 index 00000000..c26c80ec --- /dev/null +++ b/dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LoginRequestOrdinalVdxfObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); +const LoginRequestDetails_1 = require("../requestobjects/LoginRequestDetails"); +class LoginRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { + constructor(request = { + data: new LoginRequestDetails_1.LoginRequestDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_LOGIN_REQUEST, + data: request.data + }, LoginRequestDetails_1.LoginRequestDetails); + } + static fromJson(details) { + return new LoginRequestOrdinalVdxfObject({ + data: LoginRequestDetails_1.LoginRequestDetails.fromJson(details.data) + }); + } +} +exports.LoginRequestOrdinalVdxfObject = LoginRequestOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.d.ts new file mode 100644 index 00000000..21151870 --- /dev/null +++ b/dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { ProvisionIdentityDetails, ProvisionIdentityDetailsJson } from "../requestobjects/ProvisionIdentityDetails"; +export declare class ProvisionIdentityDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: ProvisionIdentityDetails; + constructor(request?: OrdinalVdxfObjectInterfaceTemplate); + static fromJson(details: OrdinalVdxfObjectJsonTemplate): ProvisionIdentityDetailsOrdinalVdxfObject; +} diff --git a/dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.js new file mode 100644 index 00000000..8059cc25 --- /dev/null +++ b/dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ProvisionIdentityDetailsOrdinalVdxfObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); +const ProvisionIdentityDetails_1 = require("../requestobjects/ProvisionIdentityDetails"); +class ProvisionIdentityDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { + constructor(request = { + data: new ProvisionIdentityDetails_1.ProvisionIdentityDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, + data: request.data + }, ProvisionIdentityDetails_1.ProvisionIdentityDetails); + } + static fromJson(details) { + return new ProvisionIdentityDetailsOrdinalVdxfObject({ + data: ProvisionIdentityDetails_1.ProvisionIdentityDetails.fromJson(details.data) + }); + } +} +exports.ProvisionIdentityDetailsOrdinalVdxfObject = ProvisionIdentityDetailsOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/index.d.ts b/dist/vdxf/classes/ordinals/index.d.ts index 93c57476..0a334b54 100644 --- a/dist/vdxf/classes/ordinals/index.d.ts +++ b/dist/vdxf/classes/ordinals/index.d.ts @@ -5,3 +5,4 @@ export * from './OrdinalVdxfObject'; export * from './OrdinalVdxfObjectOrdinalMap'; export * from './SerializableEntityOrdinalVdxfObject'; export * from './VerusPayInvoiceOrdinalVdxfObject'; +export * from './LoginRequestDetailsOrdinalVdxfObject'; diff --git a/dist/vdxf/classes/ordinals/index.js b/dist/vdxf/classes/ordinals/index.js index 84161c13..308fbeca 100644 --- a/dist/vdxf/classes/ordinals/index.js +++ b/dist/vdxf/classes/ordinals/index.js @@ -22,4 +22,5 @@ __exportStar(require("./OrdinalVdxfObject"), exports); __exportStar(require("./OrdinalVdxfObjectOrdinalMap"), exports); __exportStar(require("./SerializableEntityOrdinalVdxfObject"), exports); __exportStar(require("./VerusPayInvoiceOrdinalVdxfObject"), exports); +__exportStar(require("./LoginRequestDetailsOrdinalVdxfObject"), exports); (0, register_1.registerOrdinals)(); diff --git a/dist/vdxf/classes/requestobjects/LoginRequestDetails.d.ts b/dist/vdxf/classes/requestobjects/LoginRequestDetails.d.ts index d365b368..e8cd1ff1 100644 --- a/dist/vdxf/classes/requestobjects/LoginRequestDetails.d.ts +++ b/dist/vdxf/classes/requestobjects/LoginRequestDetails.d.ts @@ -19,7 +19,7 @@ import { CompactIdAddressObject, CompactIdAddressObjectJson } from "../CompactId export interface LoginRequestDetailsInterface { version?: BigNumber; flags?: BigNumber; - requestId: string; + requestID: string; recipientConstraints?: Array; callbackURIs?: Array; expiryTime?: BigNumber; @@ -51,7 +51,7 @@ export interface LoginRequestDetailsJson { export declare class LoginRequestDetails implements SerializableEntity { version: BigNumber; flags?: BigNumber; - requestId: string; + requestID: string; recipientConstraints?: Array; callbackURIs?: Array; expiryTime?: BigNumber; diff --git a/dist/vdxf/classes/requestobjects/LoginRequestDetails.js b/dist/vdxf/classes/requestobjects/LoginRequestDetails.js index cb0a9009..0873b6a9 100644 --- a/dist/vdxf/classes/requestobjects/LoginRequestDetails.js +++ b/dist/vdxf/classes/requestobjects/LoginRequestDetails.js @@ -25,7 +25,7 @@ const CompactIdAddressObject_1 = require("../CompactIdAddressObject"); class LoginRequestDetails { constructor(request) { this.version = (request === null || request === void 0 ? void 0 : request.version) || LoginRequestDetails.DEFAULT_VERSION; - this.requestId = (request === null || request === void 0 ? void 0 : request.requestId) || ''; + this.requestID = (request === null || request === void 0 ? void 0 : request.requestID) || ''; this.flags = (request === null || request === void 0 ? void 0 : request.flags) || new bn_js_1.BN(0, 10); this.recipientConstraints = (request === null || request === void 0 ? void 0 : request.recipientConstraints) || null; this.callbackURIs = (request === null || request === void 0 ? void 0 : request.callbackURIs) || null; @@ -56,7 +56,7 @@ class LoginRequestDetails { getByteLength() { let length = 0; length += varuint_1.default.encodingLength(this.flags.toNumber()); - length += 20; // requestId hash length + length += 20; // requestID hash length if (this.hasRecipentConstraints()) { length += varuint_1.default.encodingLength(this.recipientConstraints.length); for (let i = 0; i < this.recipientConstraints.length; i++) { @@ -80,7 +80,7 @@ class LoginRequestDetails { toBuffer() { const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); writer.writeCompactSize(this.flags.toNumber()); - writer.writeSlice((0, address_1.fromBase58Check)(this.requestId).hash); + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); if (this.hasRecipentConstraints()) { writer.writeCompactSize(this.recipientConstraints.length); for (let i = 0; i < this.recipientConstraints.length; i++) { @@ -103,7 +103,7 @@ class LoginRequestDetails { fromBuffer(buffer, offset) { const reader = new bufferutils_1.default.BufferReader(buffer, offset); this.flags = new bn_js_1.BN(reader.readCompactSize()); - this.requestId = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); if (this.hasRecipentConstraints()) { this.recipientConstraints = []; const recipientConstraintsLength = reader.readCompactSize(); @@ -138,7 +138,7 @@ class LoginRequestDetails { const retval = { version: this.version.toNumber(), flags: flags.toNumber(), - requestid: this.requestId, + requestid: this.requestID, recipientConstraints: this.recipientConstraints ? this.recipientConstraints.map(p => ({ type: p.type, identity: p.identity.toJson() })) : undefined, callbackURIs: this.callbackURIs ? this.callbackURIs : undefined, @@ -150,7 +150,7 @@ class LoginRequestDetails { const loginDetails = new LoginRequestDetails(); loginDetails.version = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.version) || 0); loginDetails.flags = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.flags) || 0); - loginDetails.requestId = data.requestid; + loginDetails.requestID = data.requestid; if (loginDetails.hasRecipentConstraints() && data.recipientConstraints) { loginDetails.recipientConstraints = data.recipientConstraints.map(p => ({ type: p.type, identity: CompactIdAddressObject_1.CompactIdAddressObject.fromJson(p.identity) })); @@ -168,11 +168,11 @@ class LoginRequestDetails { this.flags = this.calcFlags(); } isValid() { - let valid = this.requestId != null && this.requestId.length > 0; + let valid = this.requestID != null && this.requestID.length > 0; valid && (valid = this.flags != null && this.flags.gte(new bn_js_1.BN(0))); - // Validate requestId is a valid base58 address + // Validate requestID is a valid base58 address try { - (0, address_1.fromBase58Check)(this.requestId); + (0, address_1.fromBase58Check)(this.requestID); } catch (_a) { valid = false; diff --git a/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts index 6de80b0b..b14bf33d 100644 --- a/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts +++ b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts @@ -19,9 +19,9 @@ import { CompactIdAddressObject, CompactIdAddressObjectJson } from "../CompactId export interface ProvisionIdentityDetailsInterface { version?: BigNumber; flags: BigNumber; - systemId?: CompactIdAddressObject; - parentId?: CompactIdAddressObject; - identityId?: CompactIdAddressObject; + systemID?: CompactIdAddressObject; + parentID?: CompactIdAddressObject; + identityID?: CompactIdAddressObject; } export interface ProvisionIdentityDetailsJson { version?: number; @@ -33,9 +33,9 @@ export interface ProvisionIdentityDetailsJson { export declare class ProvisionIdentityDetails implements SerializableEntity { version: BigNumber; flags: BigNumber; - systemId?: CompactIdAddressObject; - parentId?: CompactIdAddressObject; - identityId?: CompactIdAddressObject; + systemID?: CompactIdAddressObject; + parentID?: CompactIdAddressObject; + identityID?: CompactIdAddressObject; static DEFAULT_VERSION: import("bn.js"); static VERSION_FIRSTVALID: import("bn.js"); static VERSION_LASTVALID: import("bn.js"); diff --git a/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js index e68ed355..d0bd1431 100644 --- a/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js +++ b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js @@ -24,9 +24,9 @@ class ProvisionIdentityDetails { constructor(data) { this.version = (data === null || data === void 0 ? void 0 : data.version) || ProvisionIdentityDetails.DEFAULT_VERSION; this.flags = (data === null || data === void 0 ? void 0 : data.flags) || new bn_js_1.BN(0, 10); - this.systemId = data === null || data === void 0 ? void 0 : data.systemId; - this.parentId = data === null || data === void 0 ? void 0 : data.parentId; - this.identityId = data === null || data === void 0 ? void 0 : data.identityId; + this.systemID = data === null || data === void 0 ? void 0 : data.systemID; + this.parentID = data === null || data === void 0 ? void 0 : data.parentID; + this.identityID = data === null || data === void 0 ? void 0 : data.identityID; this.setFlags(); } hasSystemId() { @@ -42,13 +42,13 @@ class ProvisionIdentityDetails { let length = 0; length += varuint_1.default.encodingLength(this.flags.toNumber()); if (this.hasSystemId()) { - length += this.systemId.getByteLength(); + length += this.systemID.getByteLength(); } if (this.hasParentId()) { - length += this.parentId.getByteLength(); + length += this.parentID.getByteLength(); } if (this.hasIdentityId()) { - length += this.identityId.getByteLength(); + length += this.identityID.getByteLength(); } return length; } @@ -56,13 +56,13 @@ class ProvisionIdentityDetails { const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); writer.writeCompactSize(this.flags.toNumber()); if (this.hasSystemId()) { - writer.writeSlice(this.systemId.toBuffer()); + writer.writeSlice(this.systemID.toBuffer()); } if (this.hasParentId()) { - writer.writeSlice(this.parentId.toBuffer()); + writer.writeSlice(this.parentID.toBuffer()); } if (this.hasIdentityId()) { - writer.writeSlice(this.identityId.toBuffer()); + writer.writeSlice(this.identityID.toBuffer()); } return writer.buffer; } @@ -72,19 +72,19 @@ class ProvisionIdentityDetails { throw new Error("Cannot create provision identity from empty buffer"); this.flags = new bn_js_1.BN(reader.readCompactSize()); if (this.hasSystemId()) { - const systemId = new CompactIdAddressObject_1.CompactIdAddressObject(); - reader.offset = systemId.fromBuffer(reader.buffer, reader.offset); - this.systemId = systemId; + const systemID = new CompactIdAddressObject_1.CompactIdAddressObject(); + reader.offset = systemID.fromBuffer(reader.buffer, reader.offset); + this.systemID = systemID; } if (this.hasParentId()) { - const parentId = new CompactIdAddressObject_1.CompactIdAddressObject(); - reader.offset = parentId.fromBuffer(reader.buffer, reader.offset); - this.parentId = parentId; + const parentID = new CompactIdAddressObject_1.CompactIdAddressObject(); + reader.offset = parentID.fromBuffer(reader.buffer, reader.offset); + this.parentID = parentID; } if (this.hasIdentityId()) { - const identityId = new CompactIdAddressObject_1.CompactIdAddressObject(); - reader.offset = identityId.fromBuffer(reader.buffer, reader.offset); - this.identityId = identityId; + const identityID = new CompactIdAddressObject_1.CompactIdAddressObject(); + reader.offset = identityID.fromBuffer(reader.buffer, reader.offset); + this.identityID = identityID; } return reader.offset; } @@ -93,9 +93,9 @@ class ProvisionIdentityDetails { return { version: this.version.toNumber(), flags: flags.toNumber(), - systemid: this.systemId ? this.systemId.toJson() : null, - parentid: this.parentId ? this.parentId.toJson() : null, - identityid: this.identityId ? this.identityId.toJson() : null, + systemid: this.systemID ? this.systemID.toJson() : null, + parentid: this.parentID ? this.parentID.toJson() : null, + identityid: this.identityID ? this.identityID.toJson() : null, }; } static fromJson(data) { @@ -103,25 +103,25 @@ class ProvisionIdentityDetails { provision.version = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.version) || 0); provision.flags = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.flags) || 0); if (provision.hasSystemId()) { - provision.systemId = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(data.systemid); + provision.systemID = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(data.systemid); } if (provision.hasParentId()) { - provision.parentId = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(data.parentid); + provision.parentID = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(data.parentid); } if (provision.hasIdentityId()) { - provision.identityId = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(data.identityid); + provision.identityID = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(data.identityid); } return provision; } calcFlags() { let flags = new bn_js_1.BN(0, 10); - if (this.systemId) { + if (this.systemID) { flags = flags.or(ProvisionIdentityDetails.FLAG_HAS_SYSTEMID); } - if (this.parentId) { + if (this.parentID) { flags = flags.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID); } - if (this.identityId) { + if (this.identityID) { flags = flags.or(ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION); } return flags; diff --git a/dist/vdxf/keys.d.ts b/dist/vdxf/keys.d.ts index 1a1f0536..e8e76325 100644 --- a/dist/vdxf/keys.d.ts +++ b/dist/vdxf/keys.d.ts @@ -77,3 +77,4 @@ export declare const IDENTITY_CREDENTIAL_PLAINLOGIN: VDXFKeyInterface; export declare const IDENTITY_CREDENTIAL_USERNAME: VDXFKeyInterface; export declare const ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS: VDXFKeyInterface; export declare const LOGIN_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface; +export declare const PROVISION_IDENTITY_DETAILS_VDXF_KEY: VDXFKeyInterface; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index 70462336..12101f97 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; -exports.LOGIN_REQUEST_DETAILS_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; +exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.LOGIN_REQUEST_DETAILS_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; exports.VERUSPAY_INVOICE_VDXF_KEY = { hash160result: "628efc28c2e2d40050e1a9de7a93e7ddf2aa0076", qualifiedname: { @@ -551,11 +551,20 @@ exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = { } }; exports.LOGIN_REQUEST_DETAILS_VDXF_KEY = { - "vdxfid": "i4FZ64np4rhtEkSF8mUX7xtaoqqWLPh1cf", - "indexid": "x95fYsDtvAvYrvKGzT8g6MR7qVrXBnjHhp", - "hash160result": "b1fe18b799bd076bfa9afcb206e934468c198408", + "hash160result": "bf65d30f52d523170e8422ed7204342607d44229", + "indexid": "xC4of3pbeRqveks6kRNYdV9FQ1L5x5wXRE", "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::request.loginrequestdetails" - } + "name": "vrsc::identity.login.request.details", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "i7EhCFPWo7dG2az4tjiPf6ciNMK5671Z5A" +}; +exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = { + "hash160result": "1ed843dce0f4d9a2bbb839994e3927807eb1878c", + "indexid": "xM7h3sXBovFXuwGQ3wvK2ibtUmMHn3mYkM", + "qualifiedname": { + "name": "vrsc::identity.provision.details", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iGHab566xc2sHmPNCGGA4L5MT7LGoJzmCa" }; diff --git a/src/__tests__/constants/fixtures.ts b/src/__tests__/constants/fixtures.ts index a33e8c80..2ce10b84 100644 --- a/src/__tests__/constants/fixtures.ts +++ b/src/__tests__/constants/fixtures.ts @@ -446,4 +446,12 @@ export const TEST_BASE_SIGN_DATA_WITH_MMR_DATA: PartialSignDataInitData = { } export const TEST_SIGNDATA_MAP = new Map(); -TEST_SIGNDATA_MAP.set("iBvyi1nuCrTA4g44xN9N7EU1t6a7gwb4h8", new PartialSignData(TEST_BASE_SIGN_DATA_WITH_MMR_DATA)) \ No newline at end of file +TEST_SIGNDATA_MAP.set("iBvyi1nuCrTA4g44xN9N7EU1t6a7gwb4h8", new PartialSignData(TEST_BASE_SIGN_DATA_WITH_MMR_DATA)) + +// Test constants with valid addresses from the codebase +export const TEST_CHALLENGE_ID = "iMdf3BJ1mEtKMAJqNg8hj5fMnCUCc3bpFN"; +export const TEST_IDENTITY_ID_1 = "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"; +export const TEST_IDENTITY_ID_2 = "i84T3MWcb6zWcwgNZoU3TXtrUn9EqM84A4"; +export const TEST_IDENTITY_ID_3 = "iJ5LnijKvp1wkL4hB3EsJ5kjcE4T8VL4hD"; + +export const SERIALIZED_LOGIN_REQUEST_DETAILS = Buffer.from("07c72c5b342995a2186f96271e91686c5e942d13e1030101022a5fc0e9dedf4f1e8351fe652a140e9dd38fa5a9020102324afad29f51859c54050db854d2c9bb52acd9bd030102a0276f355ad37d8e5d2d10f16c1d051b6f6ead6201011c68747470733a2f2f6578616d706c652e636f6d2f63616c6c6261636bff9982d02aac020000", 'hex'); \ No newline at end of file diff --git a/src/__tests__/vdxf/loginrequestdetails.test.ts b/src/__tests__/vdxf/loginrequestdetails.test.ts index fa1c26f3..8d97be0f 100644 --- a/src/__tests__/vdxf/loginrequestdetails.test.ts +++ b/src/__tests__/vdxf/loginrequestdetails.test.ts @@ -4,21 +4,13 @@ import { LoginRequestDetailsInterface, CompactIdAddressObject } from "../../vdxf/classes"; - -// Test constants with valid addresses from the codebase -const TEST_CHALLENGE_ID = "iMdf3BJ1mEtKMAJqNg8hj5fMnCUCc3bpFN"; -const TEST_IDENTITY_ID_1 = "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"; -const TEST_IDENTITY_ID_2 = "i84T3MWcb6zWcwgNZoU3TXtrUn9EqM84A4"; -const TEST_IDENTITY_ID_3 = "iJ5LnijKvp1wkL4hB3EsJ5kjcE4T8VL4hD"; - -const SERIALIZED_LOGIN_REQUEST_DETAILS = Buffer.from("07c72c5b342995a2186f96271e91686c5e942d13e1030101022a5fc0e9dedf4f1e8351fe652a140e9dd38fa5a9020102324afad29f51859c54050db854d2c9bb52acd9bd030102a0276f355ad37d8e5d2d10f16c1d051b6f6ead6201011c68747470733a2f2f6578616d706c652e636f6d2f63616c6c6261636bff9982d02aac020000", 'hex'); - +import { SERIALIZED_LOGIN_REQUEST_DETAILS, TEST_CHALLENGE_ID, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3 } from "../constants/fixtures"; describe("LoginRequestDetails", () => { describe("constructor and basic properties", () => { test("creates instance with minimal required data", () => { const details = new LoginRequestDetails({ - requestId: TEST_CHALLENGE_ID + requestID: TEST_CHALLENGE_ID }); const detailsBuffer = details.toBuffer(); @@ -26,7 +18,7 @@ describe("LoginRequestDetails", () => { const newDetails = new LoginRequestDetails(); newDetails.fromBuffer(detailsBuffer); - expect(details.requestId).toBe(TEST_CHALLENGE_ID); + expect(details.requestID).toBe(TEST_CHALLENGE_ID); expect(details.version.toString()).toBe("1"); expect(details.flags?.toString()).toBe("0"); expect(details.recipientConstraints).toBeNull(); @@ -36,7 +28,7 @@ describe("LoginRequestDetails", () => { test("creates instance with all optional data", () => { const details = new LoginRequestDetails({ - requestId: TEST_CHALLENGE_ID, + requestID: TEST_CHALLENGE_ID, recipientConstraints: [ { type: LoginRequestDetails.REQUIRED_ID, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }, { type: LoginRequestDetails.REQUIRED_SYSTEM, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, @@ -54,7 +46,7 @@ describe("LoginRequestDetails", () => { const newDetails = new LoginRequestDetails(); newDetails.fromBuffer(detailsBuffer); - expect(newDetails.requestId).toBe(TEST_CHALLENGE_ID); + expect(newDetails.requestID).toBe(TEST_CHALLENGE_ID); expect(newDetails.recipientConstraints?.length).toBe(3); expect(newDetails.callbackURIs?.length).toBe(1); expect(newDetails.expiryTime?.toString()).toBe("2938475938457"); @@ -68,7 +60,7 @@ describe("LoginRequestDetails", () => { test("creates instance with default constructor", () => { const details = new LoginRequestDetails(); - expect(details.requestId).toBe(""); + expect(details.requestID).toBe(""); expect(details.version.toString()).toBe("1"); expect(details.flags?.toString()).toBe("0"); expect(details.recipientConstraints).toBeNull(); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 08b10ef4..900691a8 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -4,18 +4,20 @@ import { getOrdinalVdxfObjectClassForType, IdentityUpdateRequestOrdinalVdxfObject, IdentityUpdateResponseOrdinalVdxfObject, + LoginRequestOrdinalVdxfObject, OrdinalVdxfObject, } from '../../vdxf/classes/ordinals'; import { DataDescriptorOrdinalVdxfObject } from '../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject'; import { DataDescriptor, DEST_PKH, TransferDestination } from '../../pbaas'; -import { IdentityUpdateRequestDetails, IdentityUpdateResponseDetails, ResponseUri, VerusPayInvoiceDetails } from '../../vdxf/classes'; +import { CompactIdAddressObject, IdentityUpdateRequestDetails, IdentityUpdateResponseDetails, LoginRequestDetails, ProvisionIdentityDetails, ResponseUri, VerusPayInvoiceDetails } from '../../vdxf/classes'; import { DEFAULT_VERUS_CHAINID } from '../../constants/pbaas'; import { fromBase58Check } from '../../utils/address'; -import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_VERUSPAY_INVOICE } from '../../constants/ordinals/ordinals'; +import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from '../../constants/ordinals/ordinals'; import { VerusPayInvoiceOrdinalVdxfObject } from '../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject'; -import { TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, TEST_CREATEDAT, TEST_EXPIRYHEIGHT, TEST_REQUESTID, TEST_SALT, TEST_SYSTEMID, TEST_TXID } from '../constants/fixtures'; +import { TEST_CHALLENGE_ID, TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, TEST_CREATEDAT, TEST_EXPIRYHEIGHT, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3, TEST_REQUESTID, TEST_SALT, TEST_SYSTEMID, TEST_TXID } from '../constants/fixtures'; +import { ProvisionIdentityDetailsOrdinalVdxfObject } from '../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject'; describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { function roundTripBuffer(obj: T): T { @@ -45,6 +47,10 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { newObj = IdentityUpdateRequestOrdinalVdxfObject.fromJson(json as any); } else if (obj instanceof IdentityUpdateResponseOrdinalVdxfObject) { newObj = IdentityUpdateResponseOrdinalVdxfObject.fromJson(json as any); + } else if (obj instanceof LoginRequestOrdinalVdxfObject) { + newObj = LoginRequestOrdinalVdxfObject.fromJson(json as any); + } else if (obj instanceof ProvisionIdentityDetailsOrdinalVdxfObject) { + newObj = ProvisionIdentityDetailsOrdinalVdxfObject.fromJson(json as any); } else { throw new Error("Unrecognized type") } @@ -223,6 +229,67 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(d3.txid!.toString('hex')).toEqual(details.txid!.toString('hex')); }); + it('should serialize / deserialize a LoginRequestOrdinalVdxfObject via buffer', () => { + const details = new LoginRequestDetails({ + requestID: TEST_CHALLENGE_ID, + recipientConstraints: [ + { type: LoginRequestDetails.REQUIRED_ID, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }, + { type: LoginRequestDetails.REQUIRED_SYSTEM, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, + { type: LoginRequestDetails.REQUIRED_PARENT, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } + ], + callbackURIs: [{ + type: LoginRequestDetails.TYPE_WEBHOOK, + uri: "https://example.com/callback" + }], + expiryTime: new BN(2938475938457) + }); + + const obj = new LoginRequestOrdinalVdxfObject({ data: details }); + + const round = roundTripBuffer(obj); + expect(round).toBeInstanceOf(LoginRequestOrdinalVdxfObject); + + const d2 = (round as LoginRequestOrdinalVdxfObject).data; + expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); + expect(d2.expiryTime!.toNumber()).toEqual(details.expiryTime!.toNumber()); + + const json = obj.toJson(); + expect(json.data).toBeDefined(); + const roundJ = roundTripJson(obj); + expect(roundJ).toBeInstanceOf(LoginRequestOrdinalVdxfObject); + + const d3 = (roundJ as LoginRequestOrdinalVdxfObject).data; + expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); + expect(d3.expiryTime!.toNumber()).toEqual(details.expiryTime!.toNumber()); + }); + + it('should serialize / deserialize a ProvisionIdentityDetailsOrdinalVdxfObject via buffer', () => { + const details = new ProvisionIdentityDetails({ + version: new BN(1, 10), + flags: ProvisionIdentityDetails.FLAG_HAS_SYSTEMID.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID), + systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }), + parentID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) + }) + + const obj = new ProvisionIdentityDetailsOrdinalVdxfObject({ data: details }); + + const round = roundTripBuffer(obj); + expect(round).toBeInstanceOf(ProvisionIdentityDetailsOrdinalVdxfObject); + + const d2 = (round as ProvisionIdentityDetailsOrdinalVdxfObject).data; + expect(d2.systemID!.toIAddress()).toEqual(details.systemID!.toIAddress()); + expect(d2.parentID!.toIAddress()).toEqual(details.parentID!.toIAddress()); + + const json = obj.toJson(); + expect(json.data).toBeDefined(); + const roundJ = roundTripJson(obj); + expect(roundJ).toBeInstanceOf(ProvisionIdentityDetailsOrdinalVdxfObject); + + const d3 = (roundJ as ProvisionIdentityDetailsOrdinalVdxfObject).data; + expect(d3.systemID!.toIAddress()).toEqual(details.systemID!.toIAddress()); + expect(d3.parentID!.toIAddress()).toEqual(details.parentID!.toIAddress()); + }); + it('getOrdinalVdxfObjectClassForType should map to correct classes', () => { expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_DATA_DESCRIPTOR)) .toBe(DataDescriptorOrdinalVdxfObject); @@ -234,6 +301,10 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { .toBe(IdentityUpdateResponseOrdinalVdxfObject); expect(getOrdinalVdxfObjectClassForType(VDXF_OBJECT_RESERVED_BYTE_I_ADDR)) .toBe(GeneralTypeOrdinalVdxfObject); + expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_LOGIN_REQUEST)) + .toBe(LoginRequestOrdinalVdxfObject); + expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS)) + .toBe(ProvisionIdentityDetailsOrdinalVdxfObject); // unrecognized expect(() => getOrdinalVdxfObjectClassForType(new BN(999))).toThrow(); diff --git a/src/__tests__/vdxf/personaluserdatadetails.test.ts b/src/__tests__/vdxf/personaluserdatadetails.test.ts index ac4d5d2f..6867ea68 100644 --- a/src/__tests__/vdxf/personaluserdatadetails.test.ts +++ b/src/__tests__/vdxf/personaluserdatadetails.test.ts @@ -9,20 +9,20 @@ import { VerifiableSignatureData } from "../../vdxf/classes/VerifiableSignatureD describe("PersonalUserDataDetails", () => { describe("constructor and basic properties", () => { - test("creates instance with custom values", () => { const item = new PersonalUserDataDetails({ version: new BN(PersonalUserDataDetails.DEFAULT_VERSION), flags: PersonalUserDataDetails.HAS_STATEMENTS.or(PersonalUserDataDetails.HAS_SIGNATURE), - signableObjects: [DataDescriptor.fromJson({ version: new BN(1), label: "123", objectdata : "0011223344aabbcc", flags: DataDescriptor.FLAG_LABEL_PRESENT})], + signableObjects: [DataDescriptor.fromJson({ version: new BN(1), label: "123", objectdata: "0011223344aabbcc", flags: DataDescriptor.FLAG_LABEL_PRESENT })], statements: ["Statement 1", "Statement 2"], - signature: new VerifiableSignatureData({version: new BN(1), + signature: new VerifiableSignatureData({ + version: new BN(1), signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), hashType: new BN(1), flags: new BN(0), - identityID: new CompactIdAddressObject({version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC"}), - systemID: new CompactIdAddressObject({version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC"}), - }) + identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC" }), + }) }); const detailsBuffer = item.toBuffer(); @@ -39,11 +39,7 @@ describe("PersonalUserDataDetails", () => { expect(newDetails.statements?.length).toBe(2); expect(newDetails.statements?.[0]).toBe("Statement 1"); expect(newDetails.signature?.signatureAsVch.toString('hex')).toBe("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf"); - - - + expect(newDetails.toBuffer().toString('hex')).toBe(detailsBuffer.toString('hex')); }); }); - - }); diff --git a/src/__tests__/vdxf/provisioningidentitydetails.test.ts b/src/__tests__/vdxf/provisioningidentitydetails.test.ts index 8d930143..88150137 100644 --- a/src/__tests__/vdxf/provisioningidentitydetails.test.ts +++ b/src/__tests__/vdxf/provisioningidentitydetails.test.ts @@ -1,37 +1,36 @@ import { ProvisionIdentityDetails } from "../../vdxf/classes/requestobjects/ProvisionIdentityDetails"; import { CompactIdAddressObject, ProvisionIdentityDetailsJson } from "../../vdxf/classes"; +import { BN } from "bn.js"; +import { TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2 } from "../constants/fixtures"; describe('Serializes and deserializes ProvisionIdentityDetails', () => { - test('(de)serialize ProvisionIdentityDetails', () => { - - const provisionJson: ProvisionIdentityDetailsJson = { - version: 1, - flags: ProvisionIdentityDetails.FLAG_HAS_SYSTEMID.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID).toNumber(), - systemid: {version: 1, type: CompactIdAddressObject.IS_IDENTITYID.toNumber(), address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootsystemname: "VRSC"}, - parentid: {version: 1, type: CompactIdAddressObject.IS_IDENTITYID.toNumber(), address: "iKjrTCwoPFRk44fAi2nYNbPG16ZUQjv1NB", rootsystemname: "VRSC"} - } - - const e = ProvisionIdentityDetails.fromJson(provisionJson); - const r = e.toBuffer(); - const rFromBuf = new ProvisionIdentityDetails(); - rFromBuf.fromBuffer(r); - - expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) - }); - test('(de)serialize ProvisionIdentity with fqn', async () => { - - const provisionJson = { - version: 1, - flags: ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION.toNumber(), - identityid: {version: 1, type: CompactIdAddressObject.IS_FQN, address: "my.fully.vrsc@", rootsystemname: "VRSC"} - } - - const e = ProvisionIdentityDetails.fromJson(provisionJson); - const r = e.toBuffer(); - const rFromBuf = new ProvisionIdentityDetails(); - rFromBuf.fromBuffer(r); - - expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) - }); + test('(de)serialize ProvisionIdentityDetails', () => { + const e = new ProvisionIdentityDetails({ + version: new BN(1, 10), + flags: ProvisionIdentityDetails.FLAG_HAS_SYSTEMID.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID), + systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }), + parentID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) + }) + + const r = e.toBuffer(); + const rFromBuf = new ProvisionIdentityDetails(); + rFromBuf.fromBuffer(r); + + expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) + }); + + test('(de)serialize ProvisionIdentity with fqn', async () => { + const e = new ProvisionIdentityDetails({ + version: new BN(1, 10), + flags: ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION, + identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) + }) + + const r = e.toBuffer(); + const rFromBuf = new ProvisionIdentityDetails(); + rFromBuf.fromBuffer(r); + + expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) + }); }); \ No newline at end of file diff --git a/src/constants/ordinals/ordinals.ts b/src/constants/ordinals/ordinals.ts index 0feb4641..817bd997 100644 --- a/src/constants/ordinals/ordinals.ts +++ b/src/constants/ordinals/ordinals.ts @@ -5,5 +5,7 @@ export const VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new BN(103, 10); export const VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = new BN(104, 10); export const VDXF_ORDINAL_DATA_DESCRIPTOR = new BN(0, 10); export const VDXF_ORDINAL_VERUSPAY_INVOICE = new BN(1, 10); +export const VDXF_ORDINAL_LOGIN_REQUEST = new BN(2, 10); export const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new BN(3, 10); -export const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new BN(4, 10); \ No newline at end of file +export const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new BN(4, 10); +export const VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new BN(5, 10); \ No newline at end of file diff --git a/src/constants/ordinals/register.ts b/src/constants/ordinals/register.ts index 33a07b81..0f7bd42f 100644 --- a/src/constants/ordinals/register.ts +++ b/src/constants/ordinals/register.ts @@ -1,14 +1,18 @@ -import { DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../../vdxf"; +import { DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, LOGIN_REQUEST_DETAILS_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../../vdxf"; import { DataDescriptorOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject"; import { IdentityUpdateRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject"; import { IdentityUpdateResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject"; +import { LoginRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject"; import { OrdinalVdxfObjectOrdinalMap } from "../../vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap"; +import { ProvisionIdentityDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject"; import { VerusPayInvoiceOrdinalVdxfObject } from "../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject"; -import { VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_VERUSPAY_INVOICE } from "./ordinals"; +import { VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from "./ordinals"; export const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid, VerusPayInvoiceOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_LOGIN_REQUEST.toNumber(), LOGIN_REQUEST_DETAILS_VDXF_KEY.vdxfid, LoginRequestOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVdxfObject, false); } \ No newline at end of file diff --git a/src/constants/ordinals/types.ts b/src/constants/ordinals/types.ts index 1726920b..70edb3da 100644 --- a/src/constants/ordinals/types.ts +++ b/src/constants/ordinals/types.ts @@ -1,7 +1,7 @@ import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; -import { IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; +import { IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, LoginRequestDetails, LoginRequestDetailsJson, ProvisionIdentityDetails, ProvisionIdentityDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; -export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails; -export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson; +export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails | LoginRequestDetails | ProvisionIdentityDetails; +export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson | LoginRequestDetailsJson | ProvisionIdentityDetailsJson; diff --git a/src/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.ts new file mode 100644 index 00000000..b78350d5 --- /dev/null +++ b/src/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.ts @@ -0,0 +1,29 @@ +import { VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_LOGIN_REQUEST } from "../../../constants/ordinals/ordinals"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { LoginRequestDetails, LoginRequestDetailsJson } from "../requestobjects/LoginRequestDetails"; + +export class LoginRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: LoginRequestDetails; + + constructor( + request: OrdinalVdxfObjectInterfaceTemplate = { + data: new LoginRequestDetails() + } + ) { + super( + { + type: VDXF_ORDINAL_LOGIN_REQUEST, + data: request.data + }, + LoginRequestDetails + ); + } + + static fromJson(details: OrdinalVdxfObjectJsonTemplate): LoginRequestOrdinalVdxfObject { + return new LoginRequestOrdinalVdxfObject({ + data: LoginRequestDetails.fromJson(details.data) + }) + } +} \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.ts new file mode 100644 index 00000000..89ce2257 --- /dev/null +++ b/src/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.ts @@ -0,0 +1,29 @@ +import { VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS } from "../../../constants/ordinals/ordinals"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { ProvisionIdentityDetails, ProvisionIdentityDetailsJson } from "../requestobjects/ProvisionIdentityDetails"; + +export class ProvisionIdentityDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: ProvisionIdentityDetails; + + constructor( + request: OrdinalVdxfObjectInterfaceTemplate = { + data: new ProvisionIdentityDetails() + } + ) { + super( + { + type: VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, + data: request.data + }, + ProvisionIdentityDetails + ); + } + + static fromJson(details: OrdinalVdxfObjectJsonTemplate): ProvisionIdentityDetailsOrdinalVdxfObject { + return new ProvisionIdentityDetailsOrdinalVdxfObject({ + data: ProvisionIdentityDetails.fromJson(details.data) + }) + } +} \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/index.ts b/src/vdxf/classes/ordinals/index.ts index 22b38b93..87eff201 100644 --- a/src/vdxf/classes/ordinals/index.ts +++ b/src/vdxf/classes/ordinals/index.ts @@ -7,5 +7,6 @@ export * from './OrdinalVdxfObject' export * from './OrdinalVdxfObjectOrdinalMap' export * from './SerializableEntityOrdinalVdxfObject' export * from './VerusPayInvoiceOrdinalVdxfObject' +export * from './LoginRequestDetailsOrdinalVdxfObject' registerOrdinals(); \ No newline at end of file diff --git a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts index 01ebe5a3..074c52cc 100644 --- a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/LoginRequestDetails.ts @@ -22,13 +22,12 @@ import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import varuint from "../../../utils/varuint"; import { I_ADDR_VERSION } from '../../../constants/vdxf'; import { fromBase58Check, toBase58Check } from "../../../utils/address"; -import varint from "../../../utils/varint"; import { CompactIdAddressObject, CompactIdAddressObjectJson } from "../CompactIdAddressObject"; export interface LoginRequestDetailsInterface { version?: BigNumber; flags?: BigNumber; - requestId: string; + requestID: string; recipientConstraints?: Array; callbackURIs?: Array; expiryTime?: BigNumber; // UNIX Timestamp @@ -43,6 +42,7 @@ export interface callbackURIsJson { type: number; uri: string; } + export interface RecipientConstraint { type: number; identity: CompactIdAddressObject; @@ -65,7 +65,7 @@ export interface LoginRequestDetailsJson { export class LoginRequestDetails implements SerializableEntity { version: BigNumber; flags?: BigNumber; - requestId: string; + requestID: string; recipientConstraints?: Array; callbackURIs?: Array; expiryTime?: BigNumber; // UNIX Timestamp @@ -93,7 +93,7 @@ export class LoginRequestDetails implements SerializableEntity { ) { this.version = request?.version || LoginRequestDetails.DEFAULT_VERSION; - this.requestId = request?.requestId || ''; + this.requestID = request?.requestID || ''; this.flags = request?.flags || new BN(0, 10); this.recipientConstraints = request?.recipientConstraints || null; this.callbackURIs = request?.callbackURIs || null; @@ -133,7 +133,7 @@ export class LoginRequestDetails implements SerializableEntity { let length = 0; length += varuint.encodingLength(this.flags.toNumber()); - length += 20; // requestId hash length + length += 20; // requestID hash length if (this.hasRecipentConstraints()) { @@ -165,7 +165,7 @@ export class LoginRequestDetails implements SerializableEntity { const writer = new bufferutils.BufferWriter(Buffer.alloc(this.getByteLength())) writer.writeCompactSize(this.flags.toNumber()); - writer.writeSlice(fromBase58Check(this.requestId).hash); + writer.writeSlice(fromBase58Check(this.requestID).hash); if (this.hasRecipentConstraints()) { @@ -195,7 +195,7 @@ export class LoginRequestDetails implements SerializableEntity { const reader = new bufferutils.BufferReader(buffer, offset); this.flags = new BN(reader.readCompactSize()); - this.requestId = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); + this.requestID = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); if (this.hasRecipentConstraints()) { this.recipientConstraints = []; @@ -236,7 +236,7 @@ export class LoginRequestDetails implements SerializableEntity { const retval = { version: this.version.toNumber(), flags: flags.toNumber(), - requestid: this.requestId, + requestid: this.requestID, recipientConstraints: this.recipientConstraints ? this.recipientConstraints.map(p => ({type: p.type, identity: p.identity.toJson()})) : undefined, callbackURIs: this.callbackURIs ? this.callbackURIs : undefined, @@ -252,7 +252,7 @@ export class LoginRequestDetails implements SerializableEntity { loginDetails.version = new BN(data?.version || 0); loginDetails.flags = new BN(data?.flags || 0); - loginDetails.requestId = data.requestid; + loginDetails.requestID = data.requestid; if(loginDetails.hasRecipentConstraints() && data.recipientConstraints) { loginDetails.recipientConstraints = data.recipientConstraints.map(p => ({type: p.type, @@ -276,12 +276,12 @@ export class LoginRequestDetails implements SerializableEntity { } isValid(): boolean { - let valid = this.requestId != null && this.requestId.length > 0; + let valid = this.requestID != null && this.requestID.length > 0; valid &&= this.flags != null && this.flags.gte(new BN(0)); - // Validate requestId is a valid base58 address + // Validate requestID is a valid base58 address try { - fromBase58Check(this.requestId); + fromBase58Check(this.requestID); } catch { valid = false; } diff --git a/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts b/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts index 85f9691a..58c41051 100644 --- a/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts +++ b/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts @@ -25,9 +25,9 @@ import varuint from "../../../utils/varuint"; export interface ProvisionIdentityDetailsInterface { version?: BigNumber; flags: BigNumber; - systemId?: CompactIdAddressObject; // system e.g. VRSC@ - parentId?: CompactIdAddressObject; // parent e.g. Token@ - identityId?: CompactIdAddressObject; // Full identity e.g. john.VRSC@ + systemID?: CompactIdAddressObject; // system e.g. VRSC@ + parentID?: CompactIdAddressObject; // parent e.g. Token@ + identityID?: CompactIdAddressObject; // Full identity e.g. john.VRSC@ } export interface ProvisionIdentityDetailsJson { @@ -42,9 +42,9 @@ export class ProvisionIdentityDetails implements SerializableEntity { version: BigNumber; flags: BigNumber; - systemId?: CompactIdAddressObject; // system e.g. VRSC@ - parentId?: CompactIdAddressObject; // parent e.g. Token@ - identityId?: CompactIdAddressObject; // Full identity e.g. john.VRSC@ + systemID?: CompactIdAddressObject; // system e.g. VRSC@ + parentID?: CompactIdAddressObject; // parent e.g. Token@ + identityID?: CompactIdAddressObject; // Full identity e.g. john.VRSC@ // Version static DEFAULT_VERSION = new BN(1, 10) @@ -57,14 +57,12 @@ export class ProvisionIdentityDetails implements SerializableEntity { static FLAG_IS_A_DEFINED_NAME_TO_PROVISION = new BN(4, 10); - constructor( - data?: ProvisionIdentityDetailsInterface ){ - + constructor(data?: ProvisionIdentityDetailsInterface) { this.version = data?.version || ProvisionIdentityDetails.DEFAULT_VERSION; this.flags = data?.flags || new BN(0, 10); - this.systemId = data?.systemId; - this.parentId = data?.parentId; - this.identityId = data?.identityId; + this.systemID = data?.systemID; + this.parentID = data?.parentID; + this.identityID = data?.identityID; this.setFlags(); } @@ -82,41 +80,39 @@ export class ProvisionIdentityDetails implements SerializableEntity { } getByteLength(): number { - let length = 0; length += varuint.encodingLength(this.flags.toNumber()); if (this.hasSystemId()) { - length += this.systemId.getByteLength(); + length += this.systemID.getByteLength(); } if (this.hasParentId()) { - length += this.parentId.getByteLength(); + length += this.parentID.getByteLength(); } if (this.hasIdentityId()) { - length += this.identityId.getByteLength(); + length += this.identityID.getByteLength(); } return length; } toBuffer(): Buffer { - const writer = new bufferutils.BufferWriter(Buffer.alloc(this.getByteLength())) writer.writeCompactSize(this.flags.toNumber()); if (this.hasSystemId()) { - writer.writeSlice(this.systemId.toBuffer()); + writer.writeSlice(this.systemID.toBuffer()); } if (this.hasParentId()) { - writer.writeSlice(this.parentId.toBuffer()); + writer.writeSlice(this.parentID.toBuffer()); } if (this.hasIdentityId()) { - writer.writeSlice(this.identityId.toBuffer()); + writer.writeSlice(this.identityID.toBuffer()); } return writer.buffer; @@ -129,21 +125,21 @@ export class ProvisionIdentityDetails implements SerializableEntity { this.flags = new BN(reader.readCompactSize()); if (this.hasSystemId()) { - const systemId = new CompactIdAddressObject(); - reader.offset = systemId.fromBuffer(reader.buffer, reader.offset); - this.systemId = systemId; + const systemID = new CompactIdAddressObject(); + reader.offset = systemID.fromBuffer(reader.buffer, reader.offset); + this.systemID = systemID; } if (this.hasParentId()) { - const parentId = new CompactIdAddressObject(); - reader.offset = parentId.fromBuffer(reader.buffer, reader.offset); - this.parentId = parentId; + const parentID = new CompactIdAddressObject(); + reader.offset = parentID.fromBuffer(reader.buffer, reader.offset); + this.parentID = parentID; } if (this.hasIdentityId()) { - const identityId = new CompactIdAddressObject(); - reader.offset = identityId.fromBuffer(reader.buffer, reader.offset); - this.identityId = identityId; + const identityID = new CompactIdAddressObject(); + reader.offset = identityID.fromBuffer(reader.buffer, reader.offset); + this.identityID = identityID; } return reader.offset; @@ -154,9 +150,9 @@ export class ProvisionIdentityDetails implements SerializableEntity { return { version: this.version.toNumber(), flags: flags.toNumber(), - systemid: this.systemId ? this.systemId.toJson() : null, - parentid: this.parentId ? this.parentId.toJson() : null, - identityid: this.identityId ? this.identityId.toJson() : null, + systemid: this.systemID ? this.systemID.toJson() : null, + parentid: this.parentID ? this.parentID.toJson() : null, + identityid: this.identityID ? this.identityID.toJson() : null, }; } @@ -167,15 +163,15 @@ export class ProvisionIdentityDetails implements SerializableEntity { provision.flags = new BN(data?.flags || 0); if (provision.hasSystemId()) { - provision.systemId = CompactIdAddressObject.fromJson(data.systemid); + provision.systemID = CompactIdAddressObject.fromJson(data.systemid); } if (provision.hasParentId()) { - provision.parentId = CompactIdAddressObject.fromJson(data.parentid); + provision.parentID = CompactIdAddressObject.fromJson(data.parentid); } if (provision.hasIdentityId()) { - provision.identityId = CompactIdAddressObject.fromJson(data.identityid); + provision.identityID = CompactIdAddressObject.fromJson(data.identityid); } return provision; @@ -184,15 +180,15 @@ export class ProvisionIdentityDetails implements SerializableEntity { calcFlags(): BigNumber { let flags = new BN(0, 10); - if (this.systemId) { + if (this.systemID) { flags = flags.or(ProvisionIdentityDetails.FLAG_HAS_SYSTEMID); } - if (this.parentId) { + if (this.parentID) { flags = flags.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID); } - if (this.identityId) { + if (this.identityID) { flags = flags.or(ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION); } @@ -205,7 +201,6 @@ export class ProvisionIdentityDetails implements SerializableEntity { isValid(): boolean { - let valid = this.flags != null && this.flags.gte(new BN(0)); valid &&= this.version != null; diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index 3901d078..032ab2c6 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -636,11 +636,21 @@ export const ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS: VDXFKeyInterface = { } export const LOGIN_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface = { - "vdxfid": "i4FZ64np4rhtEkSF8mUX7xtaoqqWLPh1cf", - "indexid": "x95fYsDtvAvYrvKGzT8g6MR7qVrXBnjHhp", - "hash160result": "b1fe18b799bd076bfa9afcb206e934468c198408", + "hash160result": "bf65d30f52d523170e8422ed7204342607d44229", + "indexid": "xC4of3pbeRqveks6kRNYdV9FQ1L5x5wXRE", "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::request.loginrequestdetails" - } + "name": "vrsc::identity.login.request.details", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "i7EhCFPWo7dG2az4tjiPf6ciNMK5671Z5A" } + +export const PROVISION_IDENTITY_DETAILS_VDXF_KEY: VDXFKeyInterface = { + "hash160result": "1ed843dce0f4d9a2bbb839994e3927807eb1878c", + "indexid": "xM7h3sXBovFXuwGQ3wvK2ibtUmMHn3mYkM", + "qualifiedname": { + "name": "vrsc::identity.provision.details", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iGHab566xc2sHmPNCGGA4L5MT7LGoJzmCa" +} \ No newline at end of file From 3e33ddefad3b0142bb368d5a5144178cefad266b Mon Sep 17 00:00:00 2001 From: michaeltout Date: Wed, 12 Nov 2025 17:10:22 +0100 Subject: [PATCH 050/123] Wrap AppEncryptionRequestDetails in Ordinal VDXF object --- dist/constants/ordinals/ordinals.d.ts | 1 + dist/constants/ordinals/ordinals.js | 3 +- dist/constants/ordinals/register.js | 2 + dist/constants/ordinals/types.d.ts | 6 +- ...yptionRequestDetailsOrdinalVdxfObject.d.ts | 9 +++ ...cryptionRequestDetailsOrdinalVdxfObject.js | 22 ++++++ dist/vdxf/classes/ordinals/index.d.ts | 2 + dist/vdxf/classes/ordinals/index.js | 2 + dist/vdxf/keys.d.ts | 1 + dist/vdxf/keys.js | 11 ++- .../vdxf/appencryptionrequestdetails.test.ts | 4 +- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 67 ++++++++++++++++++- src/constants/ordinals/ordinals.ts | 4 +- src/constants/ordinals/register.ts | 6 +- src/constants/ordinals/types.ts | 33 ++++++++- ...cryptionRequestDetailsOrdinalVdxfObject.ts | 29 ++++++++ .../LoginRequestDetailsOrdinalVdxfObject.ts | 2 +- .../classes/ordinals/OrdinalVdxfObject.ts | 7 +- src/vdxf/classes/ordinals/index.ts | 2 + .../AppEncryptionRequestDetails.ts | 2 - .../requestobjects/PersonalUserDataDetails.ts | 5 -- .../ProvisionIdentityDetails.ts | 3 - .../classes/requestobjects/RequestUserData.ts | 9 --- src/vdxf/keys.ts | 10 +++ 24 files changed, 204 insertions(+), 38 deletions(-) create mode 100644 dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.js create mode 100644 src/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.ts diff --git a/dist/constants/ordinals/ordinals.d.ts b/dist/constants/ordinals/ordinals.d.ts index 10b36ef9..61bf3b24 100644 --- a/dist/constants/ordinals/ordinals.d.ts +++ b/dist/constants/ordinals/ordinals.d.ts @@ -7,3 +7,4 @@ export declare const VDXF_ORDINAL_LOGIN_REQUEST: import("bn.js"); export declare const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST: import("bn.js"); export declare const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE: import("bn.js"); export declare const VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS: import("bn.js"); +export declare const VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS: import("bn.js"); diff --git a/dist/constants/ordinals/ordinals.js b/dist/constants/ordinals/ordinals.js index 9158ba3b..0a0cdc24 100644 --- a/dist/constants/ordinals/ordinals.js +++ b/dist/constants/ordinals/ordinals.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = exports.VDXF_ORDINAL_LOGIN_REQUEST = exports.VDXF_ORDINAL_VERUSPAY_INVOICE = exports.VDXF_ORDINAL_DATA_DESCRIPTOR = exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = void 0; +exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS = exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = exports.VDXF_ORDINAL_LOGIN_REQUEST = exports.VDXF_ORDINAL_VERUSPAY_INVOICE = exports.VDXF_ORDINAL_DATA_DESCRIPTOR = exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = void 0; const bn_js_1 = require("bn.js"); exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = new bn_js_1.BN(102, 10); exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new bn_js_1.BN(103, 10); @@ -11,3 +11,4 @@ exports.VDXF_ORDINAL_LOGIN_REQUEST = new bn_js_1.BN(2, 10); exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new bn_js_1.BN(3, 10); exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new bn_js_1.BN(4, 10); exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new bn_js_1.BN(5, 10); +exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS = new bn_js_1.BN(6, 10); diff --git a/dist/constants/ordinals/register.js b/dist/constants/ordinals/register.js index fecf5d84..2cd5d95e 100644 --- a/dist/constants/ordinals/register.js +++ b/dist/constants/ordinals/register.js @@ -2,6 +2,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.registerOrdinals = void 0; const vdxf_1 = require("../../vdxf"); +const AppEncryptionRequestDetailsOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject"); const DataDescriptorOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject"); const IdentityUpdateRequestOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject"); const IdentityUpdateResponseOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject"); @@ -17,5 +18,6 @@ const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), vdxf_1.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVdxfObject_1.IdentityUpdateRequestOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), vdxf_1.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject_1.IdentityUpdateResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), vdxf_1.PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVdxfObject_1.ProvisionIdentityDetailsOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS.toNumber(), vdxf_1.APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY.vdxfid, AppEncryptionRequestDetailsOrdinalVdxfObject_1.AppEncryptionRequestDetailsOrdinalVdxfObject, false); }; exports.registerOrdinals = registerOrdinals; diff --git a/dist/constants/ordinals/types.d.ts b/dist/constants/ordinals/types.d.ts index 4753be33..b316d1e4 100644 --- a/dist/constants/ordinals/types.d.ts +++ b/dist/constants/ordinals/types.d.ts @@ -1,5 +1,5 @@ import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; -import { IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, LoginRequestDetails, LoginRequestDetailsJson, ProvisionIdentityDetails, ProvisionIdentityDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; +import { AppEncryptionRequestDetails, AppEncryptionRequestDetailsJson, IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, LoginRequestDetails, LoginRequestDetailsJson, ProvisionIdentityDetails, ProvisionIdentityDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; -export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails | LoginRequestDetails | ProvisionIdentityDetails; -export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson | LoginRequestDetailsJson | ProvisionIdentityDetailsJson; +export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails | LoginRequestDetails | ProvisionIdentityDetails | AppEncryptionRequestDetails; +export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson | LoginRequestDetailsJson | ProvisionIdentityDetailsJson | AppEncryptionRequestDetailsJson; diff --git a/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.d.ts new file mode 100644 index 00000000..47bee9a7 --- /dev/null +++ b/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { AppEncryptionRequestDetails, AppEncryptionRequestDetailsJson } from "../requestobjects/AppEncryptionRequestDetails"; +export declare class AppEncryptionRequestDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: AppEncryptionRequestDetails; + constructor(request?: OrdinalVdxfObjectInterfaceTemplate); + static fromJson(details: OrdinalVdxfObjectJsonTemplate): AppEncryptionRequestDetailsOrdinalVdxfObject; +} diff --git a/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.js new file mode 100644 index 00000000..01ee0780 --- /dev/null +++ b/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AppEncryptionRequestDetailsOrdinalVdxfObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); +const AppEncryptionRequestDetails_1 = require("../requestobjects/AppEncryptionRequestDetails"); +class AppEncryptionRequestDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { + constructor(request = { + data: new AppEncryptionRequestDetails_1.AppEncryptionRequestDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS, + data: request.data + }, AppEncryptionRequestDetails_1.AppEncryptionRequestDetails); + } + static fromJson(details) { + return new AppEncryptionRequestDetailsOrdinalVdxfObject({ + data: AppEncryptionRequestDetails_1.AppEncryptionRequestDetails.fromJson(details.data) + }); + } +} +exports.AppEncryptionRequestDetailsOrdinalVdxfObject = AppEncryptionRequestDetailsOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/index.d.ts b/dist/vdxf/classes/ordinals/index.d.ts index 0a334b54..8d8fc5cb 100644 --- a/dist/vdxf/classes/ordinals/index.d.ts +++ b/dist/vdxf/classes/ordinals/index.d.ts @@ -6,3 +6,5 @@ export * from './OrdinalVdxfObjectOrdinalMap'; export * from './SerializableEntityOrdinalVdxfObject'; export * from './VerusPayInvoiceOrdinalVdxfObject'; export * from './LoginRequestDetailsOrdinalVdxfObject'; +export * from './AppEncryptionRequestDetailsOrdinalVdxfObject'; +export * from './ProvisionIdentityDetailsOrdinalVdxfObject'; diff --git a/dist/vdxf/classes/ordinals/index.js b/dist/vdxf/classes/ordinals/index.js index 308fbeca..191de1d4 100644 --- a/dist/vdxf/classes/ordinals/index.js +++ b/dist/vdxf/classes/ordinals/index.js @@ -23,4 +23,6 @@ __exportStar(require("./OrdinalVdxfObjectOrdinalMap"), exports); __exportStar(require("./SerializableEntityOrdinalVdxfObject"), exports); __exportStar(require("./VerusPayInvoiceOrdinalVdxfObject"), exports); __exportStar(require("./LoginRequestDetailsOrdinalVdxfObject"), exports); +__exportStar(require("./AppEncryptionRequestDetailsOrdinalVdxfObject"), exports); +__exportStar(require("./ProvisionIdentityDetailsOrdinalVdxfObject"), exports); (0, register_1.registerOrdinals)(); diff --git a/dist/vdxf/keys.d.ts b/dist/vdxf/keys.d.ts index e8e76325..0afe7894 100644 --- a/dist/vdxf/keys.d.ts +++ b/dist/vdxf/keys.d.ts @@ -78,3 +78,4 @@ export declare const IDENTITY_CREDENTIAL_USERNAME: VDXFKeyInterface; export declare const ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS: VDXFKeyInterface; export declare const LOGIN_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const PROVISION_IDENTITY_DETAILS_VDXF_KEY: VDXFKeyInterface; +export declare const APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index 12101f97..00a78b29 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; -exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.LOGIN_REQUEST_DETAILS_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; +exports.APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.LOGIN_REQUEST_DETAILS_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; exports.VERUSPAY_INVOICE_VDXF_KEY = { hash160result: "628efc28c2e2d40050e1a9de7a93e7ddf2aa0076", qualifiedname: { @@ -568,3 +568,12 @@ exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = { }, "vdxfid": "iGHab566xc2sHmPNCGGA4L5MT7LGoJzmCa" }; +exports.APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY = { + "hash160result": "f178871fedb335cf6659f8527a6c9652bc8e1d79", + "indexid": "xKM34nS3HiFvf3WDKL8DBrhpj2GqVWEaH4", + "qualifiedname": { + "name": "vrsc::application.encryption.request.details", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iEWvbyzxSQ3G2sdBTeU4DUBHhNFpd6rUFx" +}; diff --git a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts index 6455f5d8..381f4565 100644 --- a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts +++ b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts @@ -1,6 +1,5 @@ import { BN } from "bn.js"; -import { AppEncryptionRequestDetails, AppEncryptionRequestDetailsJson, CompactIdAddressObject } from "../../vdxf/classes"; -import { TransferDestination } from "../../pbaas/TransferDestination"; +import { AppEncryptionRequestDetails, CompactIdAddressObject } from "../../vdxf/classes"; import { BigNumber } from "../../utils/types/BigNumber"; // Helper function to create TransferDestination from address string @@ -11,7 +10,6 @@ function createCompactIdAddressObject(type: BigNumber, address: string): Compact return obj; } - describe("AppEncryptionRequestDetails serialization tests", () => { test("creates valid AppEncryptionRequestDetails with zaddress", () => { const details = new AppEncryptionRequestDetails({ diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 900691a8..fba81087 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -1,5 +1,6 @@ import { BN } from 'bn.js'; import { + AppEncryptionRequestDetailsOrdinalVdxfObject, GeneralTypeOrdinalVdxfObject, getOrdinalVdxfObjectClassForType, IdentityUpdateRequestOrdinalVdxfObject, @@ -11,13 +12,31 @@ import { DataDescriptorOrdinalVdxfObject } from '../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject'; import { DataDescriptor, DEST_PKH, TransferDestination } from '../../pbaas'; -import { CompactIdAddressObject, IdentityUpdateRequestDetails, IdentityUpdateResponseDetails, LoginRequestDetails, ProvisionIdentityDetails, ResponseUri, VerusPayInvoiceDetails } from '../../vdxf/classes'; +import { + AppEncryptionRequestDetails, + CompactIdAddressObject, + IdentityUpdateRequestDetails, + IdentityUpdateResponseDetails, + LoginRequestDetails, + ProvisionIdentityDetails, + ResponseUri, + VerusPayInvoiceDetails +} from '../../vdxf/classes'; import { DEFAULT_VERUS_CHAINID } from '../../constants/pbaas'; import { fromBase58Check } from '../../utils/address'; -import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from '../../constants/ordinals/ordinals'; +import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from '../../constants/ordinals/ordinals'; import { VerusPayInvoiceOrdinalVdxfObject } from '../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject'; import { TEST_CHALLENGE_ID, TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, TEST_CREATEDAT, TEST_EXPIRYHEIGHT, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3, TEST_REQUESTID, TEST_SALT, TEST_SYSTEMID, TEST_TXID } from '../constants/fixtures'; import { ProvisionIdentityDetailsOrdinalVdxfObject } from '../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject'; +import { BigNumber } from '../../utils/types/BigNumber'; + +// Helper function to create TransferDestination from address string +function createCompactIdAddressObject(type: BigNumber, address: string): CompactIdAddressObject { + const obj = new CompactIdAddressObject(); + obj.type = type; + obj.address = address; + return obj; +} describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { function roundTripBuffer(obj: T): T { @@ -51,6 +70,8 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { newObj = LoginRequestOrdinalVdxfObject.fromJson(json as any); } else if (obj instanceof ProvisionIdentityDetailsOrdinalVdxfObject) { newObj = ProvisionIdentityDetailsOrdinalVdxfObject.fromJson(json as any); + } else if (obj instanceof AppEncryptionRequestDetailsOrdinalVdxfObject) { + newObj = AppEncryptionRequestDetailsOrdinalVdxfObject.fromJson(json as any); } else { throw new Error("Unrecognized type") } @@ -263,7 +284,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(d3.expiryTime!.toNumber()).toEqual(details.expiryTime!.toNumber()); }); - it('should serialize / deserialize a ProvisionIdentityDetailsOrdinalVdxfObject via buffer', () => { + it('should serialize / deserialize a ProvisionIdentityDetailsOrdinalVdxfObject', () => { const details = new ProvisionIdentityDetails({ version: new BN(1, 10), flags: ProvisionIdentityDetails.FLAG_HAS_SYSTEMID.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID), @@ -290,6 +311,44 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(d3.parentID!.toIAddress()).toEqual(details.parentID!.toIAddress()); }); + it('should serialize / deserialize an AppEncryptionRequestOrdinalVdxfObject', () => { + const details = new AppEncryptionRequestDetails({ + version: AppEncryptionRequestDetails.DEFAULT_VERSION, + flags: AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER + .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) + .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS), + encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", + derivationNumber: new BN(42), + secondaryDerivationNumber: new BN(234), + fromAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), + toAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + }); + + const obj = new AppEncryptionRequestDetailsOrdinalVdxfObject({ data: details }); + + const round = roundTripBuffer(obj); + expect(round).toBeInstanceOf(AppEncryptionRequestDetailsOrdinalVdxfObject); + + const d2 = (round as AppEncryptionRequestDetailsOrdinalVdxfObject).data; + expect(d2.encryptToZAddress!).toEqual(details.encryptToZAddress); + expect(d2.derivationNumber!.toString()).toEqual(details.derivationNumber!.toString()); + expect(d2.secondaryDerivationNumber!.toString()).toEqual(details.secondaryDerivationNumber!.toString()); + expect(d2.fromAddress!.toIAddress()).toEqual(details.fromAddress!.toIAddress()); + expect(d2.toAddress!.toIAddress()).toEqual(details.toAddress!.toIAddress()); + + const json = obj.toJson(); + expect(json.data).toBeDefined(); + const roundJ = roundTripJson(obj); + expect(roundJ).toBeInstanceOf(AppEncryptionRequestDetailsOrdinalVdxfObject); + + const d3 = (roundJ as AppEncryptionRequestDetailsOrdinalVdxfObject).data; + expect(d3.encryptToZAddress!).toEqual(details.encryptToZAddress); + expect(d3.derivationNumber!.toString()).toEqual(details.derivationNumber!.toString()); + expect(d3.secondaryDerivationNumber!.toString()).toEqual(details.secondaryDerivationNumber!.toString()); + expect(d3.fromAddress!.toIAddress()).toEqual(details.fromAddress!.toIAddress()); + expect(d3.toAddress!.toIAddress()).toEqual(details.toAddress!.toIAddress()); + }); + it('getOrdinalVdxfObjectClassForType should map to correct classes', () => { expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_DATA_DESCRIPTOR)) .toBe(DataDescriptorOrdinalVdxfObject); @@ -305,6 +364,8 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { .toBe(LoginRequestOrdinalVdxfObject); expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS)) .toBe(ProvisionIdentityDetailsOrdinalVdxfObject); + expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS)) + .toBe(AppEncryptionRequestDetailsOrdinalVdxfObject); // unrecognized expect(() => getOrdinalVdxfObjectClassForType(new BN(999))).toThrow(); diff --git a/src/constants/ordinals/ordinals.ts b/src/constants/ordinals/ordinals.ts index 817bd997..6201ded8 100644 --- a/src/constants/ordinals/ordinals.ts +++ b/src/constants/ordinals/ordinals.ts @@ -3,9 +3,11 @@ import { BN } from "bn.js"; export const VDXF_OBJECT_RESERVED_BYTE_I_ADDR = new BN(102, 10); export const VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new BN(103, 10); export const VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = new BN(104, 10); + export const VDXF_ORDINAL_DATA_DESCRIPTOR = new BN(0, 10); export const VDXF_ORDINAL_VERUSPAY_INVOICE = new BN(1, 10); export const VDXF_ORDINAL_LOGIN_REQUEST = new BN(2, 10); export const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new BN(3, 10); export const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new BN(4, 10); -export const VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new BN(5, 10); \ No newline at end of file +export const VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new BN(5, 10); +export const VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS = new BN(6, 10); \ No newline at end of file diff --git a/src/constants/ordinals/register.ts b/src/constants/ordinals/register.ts index 0f7bd42f..ee41bc9a 100644 --- a/src/constants/ordinals/register.ts +++ b/src/constants/ordinals/register.ts @@ -1,4 +1,5 @@ -import { DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, LOGIN_REQUEST_DETAILS_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../../vdxf"; +import { APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY, DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, LOGIN_REQUEST_DETAILS_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../../vdxf"; +import { AppEncryptionRequestDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject"; import { DataDescriptorOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject"; import { IdentityUpdateRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject"; import { IdentityUpdateResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject"; @@ -6,7 +7,7 @@ import { LoginRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/Login import { OrdinalVdxfObjectOrdinalMap } from "../../vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap"; import { ProvisionIdentityDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject"; import { VerusPayInvoiceOrdinalVdxfObject } from "../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject"; -import { VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from "./ordinals"; +import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from "./ordinals"; export const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVdxfObject, false); @@ -15,4 +16,5 @@ export const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS.toNumber(), APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY.vdxfid, AppEncryptionRequestDetailsOrdinalVdxfObject, false); } \ No newline at end of file diff --git a/src/constants/ordinals/types.ts b/src/constants/ordinals/types.ts index 70edb3da..1bc6ecbe 100644 --- a/src/constants/ordinals/types.ts +++ b/src/constants/ordinals/types.ts @@ -1,7 +1,34 @@ import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; -import { IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, LoginRequestDetails, LoginRequestDetailsJson, ProvisionIdentityDetails, ProvisionIdentityDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; +import { + AppEncryptionRequestDetails, + AppEncryptionRequestDetailsJson, + IdentityUpdateRequestDetails, + IdentityUpdateRequestDetailsJson, + IdentityUpdateResponseDetails, + IdentityUpdateResponseDetailsJson, + LoginRequestDetails, + LoginRequestDetailsJson, + ProvisionIdentityDetails, + ProvisionIdentityDetailsJson, + VerusPayInvoiceDetails +} from "../../vdxf/classes"; import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; -export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails | LoginRequestDetails | ProvisionIdentityDetails; -export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson | LoginRequestDetailsJson | ProvisionIdentityDetailsJson; +export type OrdinalVdxfObjectReservedData = + DataDescriptor | + VerusPayInvoiceDetails | + IdentityUpdateRequestDetails | + IdentityUpdateResponseDetails | + LoginRequestDetails | + ProvisionIdentityDetails | + AppEncryptionRequestDetails; + +export type OrdinalVdxfObjectReservedDataJson = + DataDescriptorJson | + VerusPayInvoiceDetailsJson | + IdentityUpdateRequestDetailsJson | + IdentityUpdateResponseDetailsJson | + LoginRequestDetailsJson | + ProvisionIdentityDetailsJson | + AppEncryptionRequestDetailsJson; diff --git a/src/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.ts new file mode 100644 index 00000000..94c4a9f6 --- /dev/null +++ b/src/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.ts @@ -0,0 +1,29 @@ +import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS } from "../../../constants/ordinals/ordinals"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { AppEncryptionRequestDetails, AppEncryptionRequestDetailsJson } from "../requestobjects/AppEncryptionRequestDetails"; + +export class AppEncryptionRequestDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: AppEncryptionRequestDetails; + + constructor( + request: OrdinalVdxfObjectInterfaceTemplate = { + data: new AppEncryptionRequestDetails() + } + ) { + super( + { + type: VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS, + data: request.data + }, + AppEncryptionRequestDetails + ); + } + + static fromJson(details: OrdinalVdxfObjectJsonTemplate): AppEncryptionRequestDetailsOrdinalVdxfObject { + return new AppEncryptionRequestDetailsOrdinalVdxfObject({ + data: AppEncryptionRequestDetails.fromJson(details.data) + }) + } +} \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.ts index b78350d5..805b2fec 100644 --- a/src/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.ts +++ b/src/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.ts @@ -1,4 +1,4 @@ -import { VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_LOGIN_REQUEST } from "../../../constants/ordinals/ordinals"; +import { VDXF_ORDINAL_LOGIN_REQUEST } from "../../../constants/ordinals/ordinals"; import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; diff --git a/src/vdxf/classes/ordinals/OrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/OrdinalVdxfObject.ts index 2bda5419..dd2a7bb9 100644 --- a/src/vdxf/classes/ordinals/OrdinalVdxfObject.ts +++ b/src/vdxf/classes/ordinals/OrdinalVdxfObject.ts @@ -9,7 +9,12 @@ import { HASH160_BYTE_LENGTH, I_ADDR_VERSION, NULL_ADDRESS } from "../../../cons import { OrdinalVdxfObjectOrdinalMap } from "./OrdinalVdxfObjectOrdinalMap"; import { DEFAULT_VERUS_CHAINNAME } from "../../../constants/pbaas"; import { OrdinalVdxfObjectReservedData, OrdinalVdxfObjectReservedDataJson } from "../../../constants/ordinals/types"; -import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY, VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING, VDXF_ORDINAL_DATA_DESCRIPTOR } from "../../../constants/ordinals/ordinals"; +import { + VDXF_OBJECT_RESERVED_BYTE_I_ADDR, + VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY, + VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING, + VDXF_ORDINAL_DATA_DESCRIPTOR +} from "../../../constants/ordinals/ordinals"; export interface OrdinalVdxfObjectInterfaceTemplate { version?: BigNumber; diff --git a/src/vdxf/classes/ordinals/index.ts b/src/vdxf/classes/ordinals/index.ts index 87eff201..e8cbe87d 100644 --- a/src/vdxf/classes/ordinals/index.ts +++ b/src/vdxf/classes/ordinals/index.ts @@ -8,5 +8,7 @@ export * from './OrdinalVdxfObjectOrdinalMap' export * from './SerializableEntityOrdinalVdxfObject' export * from './VerusPayInvoiceOrdinalVdxfObject' export * from './LoginRequestDetailsOrdinalVdxfObject' +export * from './AppEncryptionRequestDetailsOrdinalVdxfObject' +export * from './ProvisionIdentityDetailsOrdinalVdxfObject' registerOrdinals(); \ No newline at end of file diff --git a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts index 15ca3449..3eefd142 100644 --- a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts @@ -61,7 +61,6 @@ export interface AppEncryptionRequestDetailsJson { */ export class AppEncryptionRequestDetails implements SerializableEntity { - static VERSION_INVALID = new BN(0); static FIRST_VERSION = new BN(1); static LAST_VERSION = new BN(1); @@ -257,5 +256,4 @@ export class AppEncryptionRequestDetails implements SerializableEntity { return instance; } - } diff --git a/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts b/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts index 9aa3ba75..799ad158 100644 --- a/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts +++ b/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts @@ -17,7 +17,6 @@ import { BigNumber } from '../../../utils/types/BigNumber'; import { BN } from 'bn.js'; -import varint from '../../../utils/varint'; import varuint from '../../../utils/varuint'; import bufferutils from '../../../utils/bufferutils'; const { BufferReader, BufferWriter } = bufferutils; @@ -25,7 +24,6 @@ import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { DataDescriptor, DataDescriptorJson } from '../../../pbaas'; import { VerifiableSignatureData, VerifiableSignatureDataJson } from '../../../vdxf/classes/VerifiableSignatureData'; - export interface PersonalUserDataDetailsInterface { version?: BigNumber; flags: BigNumber; @@ -43,7 +41,6 @@ export interface PersonalUserDataDetailsJson { } export class PersonalUserDataDetails implements SerializableEntity { - static VERSION_INVALID = new BN(0); static FIRST_VERSION = new BN(1); static LAST_VERSION = new BN(1); @@ -116,7 +113,6 @@ export class PersonalUserDataDetails implements SerializableEntity { } getByteLength(): number { - let length = 0; length += varuint.encodingLength(this.flags.toNumber()); @@ -145,7 +141,6 @@ export class PersonalUserDataDetails implements SerializableEntity { } toBuffer(): Buffer { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); writer.writeCompactSize(this.flags.toNumber()); diff --git a/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts b/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts index 58c41051..0940e379 100644 --- a/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts +++ b/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts @@ -18,7 +18,6 @@ import bufferutils from "../../../utils/bufferutils"; import { BigNumber } from "../../../utils/types/BigNumber"; import { BN } from "bn.js"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; -import varint from "../../../utils/varint"; import { CompactIdAddressObject, CompactIdAddressObjectJson } from "../CompactIdAddressObject"; import varuint from "../../../utils/varuint"; @@ -39,7 +38,6 @@ export interface ProvisionIdentityDetailsJson { } export class ProvisionIdentityDetails implements SerializableEntity { - version: BigNumber; flags: BigNumber; systemID?: CompactIdAddressObject; // system e.g. VRSC@ @@ -56,7 +54,6 @@ export class ProvisionIdentityDetails implements SerializableEntity { static FLAG_HAS_PARENTID = new BN(2, 10); static FLAG_IS_A_DEFINED_NAME_TO_PROVISION = new BN(4, 10); - constructor(data?: ProvisionIdentityDetailsInterface) { this.version = data?.version || ProvisionIdentityDetails.DEFAULT_VERSION; this.flags = data?.flags || new BN(0, 10); diff --git a/src/vdxf/classes/requestobjects/RequestUserData.ts b/src/vdxf/classes/requestobjects/RequestUserData.ts index c15f0bec..cbda797a 100644 --- a/src/vdxf/classes/requestobjects/RequestUserData.ts +++ b/src/vdxf/classes/requestobjects/RequestUserData.ts @@ -22,7 +22,6 @@ import { BigNumber } from '../../../utils/types/BigNumber'; import { BN } from 'bn.js'; -import varint from '../../../utils/varint'; import varuint from '../../../utils/varuint'; import bufferutils from '../../../utils/bufferutils'; const { BufferReader, BufferWriter } = bufferutils; @@ -47,7 +46,6 @@ export interface RequestUserDataJson { } export class RequestUserData implements SerializableEntity { - static VERSION_INVALID = new BN(0); static FIRST_VERSION = new BN(1); static LAST_VERSION = new BN(1); @@ -78,7 +76,6 @@ export class RequestUserData implements SerializableEntity { this.requestedKeys = data?.requestedKeys; this.setFlags(); - } calcFlags(): BigNumber { @@ -94,7 +91,6 @@ export class RequestUserData implements SerializableEntity { } setFlags(): void { - this.flags = this.calcFlags(); } @@ -146,7 +142,6 @@ export class RequestUserData implements SerializableEntity { } getByteLength(): number { - let length = 0; length += varuint.encodingLength(this.flags.toNumber()); @@ -177,7 +172,6 @@ export class RequestUserData implements SerializableEntity { } toBuffer(): Buffer { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); writer.writeCompactSize(this.flags.toNumber()); @@ -240,7 +234,6 @@ export class RequestUserData implements SerializableEntity { } toJson(): RequestUserDataJson { - const flags = this.calcFlags(); return { @@ -253,7 +246,6 @@ export class RequestUserData implements SerializableEntity { } static fromJson(json: RequestUserDataJson) { - const requestData = new RequestUserData(); requestData.version = new BN(json.version); requestData.flags = new BN(json.flags); @@ -263,5 +255,4 @@ export class RequestUserData implements SerializableEntity { return requestData; } - } diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index 032ab2c6..d9e16915 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -653,4 +653,14 @@ export const PROVISION_IDENTITY_DETAILS_VDXF_KEY: VDXFKeyInterface = { "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, "vdxfid": "iGHab566xc2sHmPNCGGA4L5MT7LGoJzmCa" +} + +export const APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface = { + "hash160result": "f178871fedb335cf6659f8527a6c9652bc8e1d79", + "indexid": "xKM34nS3HiFvf3WDKL8DBrhpj2GqVWEaH4", + "qualifiedname": { + "name": "vrsc::application.encryption.request.details", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iEWvbyzxSQ3G2sdBTeU4DUBHhNFpd6rUFx" } \ No newline at end of file From 909ec24127fb93d995da148a2b272f40ca5bd871 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 14 Nov 2025 18:49:56 +0100 Subject: [PATCH 051/123] Add LoginResponseDetails --- dist/constants/ordinals/ordinals.d.ts | 1 + dist/constants/ordinals/ordinals.js | 11 +- dist/constants/ordinals/register.js | 2 + dist/constants/ordinals/types.d.ts | 6 +- .../IdentityUpdateRequestDetails.d.ts | 7 +- .../identity/IdentityUpdateRequestDetails.js | 35 ++- .../IdentityUpdateResponseDetails.d.ts | 7 +- .../identity/IdentityUpdateResponseDetails.js | 29 ++- dist/vdxf/classes/index.d.ts | 3 +- dist/vdxf/classes/index.js | 3 +- .../classes/login/LoginRequestDetails.d.ts | 81 +++++++ .../vdxf/classes/login/LoginRequestDetails.js | 212 ++++++++++++++++++ .../classes/login/LoginResponseDetails.d.ts | 23 ++ .../classes/login/LoginResponseDetails.js | 63 ++++++ .../LoginRequestDetailsOrdinalVdxfObject.d.ts | 2 +- .../LoginRequestDetailsOrdinalVdxfObject.js | 2 +- ...LoginResponseDetailsOrdinalVdxfObject.d.ts | 9 + .../LoginResponseDetailsOrdinalVdxfObject.js | 22 ++ dist/vdxf/classes/ordinals/index.d.ts | 1 + dist/vdxf/classes/ordinals/index.js | 1 + dist/vdxf/keys.d.ts | 1 + dist/vdxf/keys.js | 11 +- src/__tests__/constants/fixtures.ts | 2 +- .../vdxf/loginresponsedetails.test.ts | 26 +++ src/__tests__/vdxf/ordinalvdxfobject.test.ts | 29 +++ src/constants/ordinals/ordinals.ts | 9 +- src/constants/ordinals/register.ts | 6 +- src/constants/ordinals/types.ts | 4 + .../identity/IdentityUpdateRequestDetails.ts | 47 ++-- .../identity/IdentityUpdateResponseDetails.ts | 36 ++- src/vdxf/classes/index.ts | 3 +- .../LoginRequestDetails.ts | 3 +- .../classes/login/LoginResponseDetails.ts | 94 ++++++++ .../LoginRequestDetailsOrdinalVdxfObject.ts | 2 +- .../LoginResponseDetailsOrdinalVdxfObject.ts | 29 +++ src/vdxf/classes/ordinals/index.ts | 1 + src/vdxf/keys.ts | 10 + 37 files changed, 765 insertions(+), 68 deletions(-) create mode 100644 dist/vdxf/classes/login/LoginRequestDetails.d.ts create mode 100644 dist/vdxf/classes/login/LoginRequestDetails.js create mode 100644 dist/vdxf/classes/login/LoginResponseDetails.d.ts create mode 100644 dist/vdxf/classes/login/LoginResponseDetails.js create mode 100644 dist/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.js create mode 100644 src/__tests__/vdxf/loginresponsedetails.test.ts rename src/vdxf/classes/{requestobjects => login}/LoginRequestDetails.ts (98%) create mode 100644 src/vdxf/classes/login/LoginResponseDetails.ts create mode 100644 src/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.ts diff --git a/dist/constants/ordinals/ordinals.d.ts b/dist/constants/ordinals/ordinals.d.ts index 61bf3b24..0a7e0a15 100644 --- a/dist/constants/ordinals/ordinals.d.ts +++ b/dist/constants/ordinals/ordinals.d.ts @@ -4,6 +4,7 @@ export declare const VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY: import("bn.js"); export declare const VDXF_ORDINAL_DATA_DESCRIPTOR: import("bn.js"); export declare const VDXF_ORDINAL_VERUSPAY_INVOICE: import("bn.js"); export declare const VDXF_ORDINAL_LOGIN_REQUEST: import("bn.js"); +export declare const VDXF_ORDINAL_LOGIN_RESPONSE: import("bn.js"); export declare const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST: import("bn.js"); export declare const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE: import("bn.js"); export declare const VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS: import("bn.js"); diff --git a/dist/constants/ordinals/ordinals.js b/dist/constants/ordinals/ordinals.js index 0a0cdc24..4ec866a1 100644 --- a/dist/constants/ordinals/ordinals.js +++ b/dist/constants/ordinals/ordinals.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS = exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = exports.VDXF_ORDINAL_LOGIN_REQUEST = exports.VDXF_ORDINAL_VERUSPAY_INVOICE = exports.VDXF_ORDINAL_DATA_DESCRIPTOR = exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = void 0; +exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS = exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = exports.VDXF_ORDINAL_LOGIN_RESPONSE = exports.VDXF_ORDINAL_LOGIN_REQUEST = exports.VDXF_ORDINAL_VERUSPAY_INVOICE = exports.VDXF_ORDINAL_DATA_DESCRIPTOR = exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = void 0; const bn_js_1 = require("bn.js"); exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = new bn_js_1.BN(102, 10); exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new bn_js_1.BN(103, 10); @@ -8,7 +8,8 @@ exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = new bn_js_1.BN(104, 10); exports.VDXF_ORDINAL_DATA_DESCRIPTOR = new bn_js_1.BN(0, 10); exports.VDXF_ORDINAL_VERUSPAY_INVOICE = new bn_js_1.BN(1, 10); exports.VDXF_ORDINAL_LOGIN_REQUEST = new bn_js_1.BN(2, 10); -exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new bn_js_1.BN(3, 10); -exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new bn_js_1.BN(4, 10); -exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new bn_js_1.BN(5, 10); -exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS = new bn_js_1.BN(6, 10); +exports.VDXF_ORDINAL_LOGIN_RESPONSE = new bn_js_1.BN(3, 10); +exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new bn_js_1.BN(4, 10); +exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new bn_js_1.BN(5, 10); +exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new bn_js_1.BN(6, 10); +exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS = new bn_js_1.BN(7, 10); diff --git a/dist/constants/ordinals/register.js b/dist/constants/ordinals/register.js index 2cd5d95e..a88c50d7 100644 --- a/dist/constants/ordinals/register.js +++ b/dist/constants/ordinals/register.js @@ -7,6 +7,7 @@ const DataDescriptorOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/D const IdentityUpdateRequestOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject"); const IdentityUpdateResponseOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject"); const LoginRequestDetailsOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject"); +const LoginResponseDetailsOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject"); const OrdinalVdxfObjectOrdinalMap_1 = require("../../vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap"); const ProvisionIdentityDetailsOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject"); const VerusPayInvoiceOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject"); @@ -15,6 +16,7 @@ const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), vdxf_1.DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVdxfObject_1.DataDescriptorOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), vdxf_1.VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid, VerusPayInvoiceOrdinalVdxfObject_1.VerusPayInvoiceOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_LOGIN_REQUEST.toNumber(), vdxf_1.LOGIN_REQUEST_DETAILS_VDXF_KEY.vdxfid, LoginRequestDetailsOrdinalVdxfObject_1.LoginRequestOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_LOGIN_RESPONSE.toNumber(), vdxf_1.LOGIN_RESPONSE_DETAILS_VDXF_KEY.vdxfid, LoginResponseDetailsOrdinalVdxfObject_1.LoginResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), vdxf_1.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVdxfObject_1.IdentityUpdateRequestOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), vdxf_1.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject_1.IdentityUpdateResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), vdxf_1.PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVdxfObject_1.ProvisionIdentityDetailsOrdinalVdxfObject, false); diff --git a/dist/constants/ordinals/types.d.ts b/dist/constants/ordinals/types.d.ts index b316d1e4..bc8905fd 100644 --- a/dist/constants/ordinals/types.d.ts +++ b/dist/constants/ordinals/types.d.ts @@ -1,5 +1,5 @@ import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; -import { AppEncryptionRequestDetails, AppEncryptionRequestDetailsJson, IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, LoginRequestDetails, LoginRequestDetailsJson, ProvisionIdentityDetails, ProvisionIdentityDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; +import { AppEncryptionRequestDetails, AppEncryptionRequestDetailsJson, IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, LoginRequestDetails, LoginRequestDetailsJson, LoginResponseDetails, LoginResponseDetailsJson, ProvisionIdentityDetails, ProvisionIdentityDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; -export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails | LoginRequestDetails | ProvisionIdentityDetails | AppEncryptionRequestDetails; -export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson | LoginRequestDetailsJson | ProvisionIdentityDetailsJson | AppEncryptionRequestDetailsJson; +export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails | LoginRequestDetails | LoginResponseDetails | ProvisionIdentityDetails | AppEncryptionRequestDetails; +export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson | LoginRequestDetailsJson | LoginResponseDetailsJson | ProvisionIdentityDetailsJson | AppEncryptionRequestDetailsJson; diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts index ff6ad711..542f7768 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts +++ b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts @@ -25,7 +25,7 @@ export type IdentityUpdateRequestDetailsJson = { }; export declare class IdentityUpdateRequestDetails implements SerializableEntity { flags?: BigNumber; - requestID?: BigNumber; + requestID?: string; createdAt?: BigNumber; identity?: PartialIdentity; expiryHeight?: BigNumber; @@ -37,12 +37,13 @@ export declare class IdentityUpdateRequestDetails implements SerializableEntity static IDENTITY_UPDATE_REQUEST_CONTAINS_SIGNDATA: import("bn.js"); static IDENTITY_UPDATE_REQUEST_EXPIRES: import("bn.js"); static IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS: import("bn.js"); + static IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID: import("bn.js"); static IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM: import("bn.js"); static IDENTITY_UPDATE_REQUEST_CONTAINS_TXID: import("bn.js"); static IDENTITY_UPDATE_REQUEST_IS_TESTNET: import("bn.js"); constructor(data?: { flags?: BigNumber; - requestID?: BigNumber; + requestID?: string; createdAt?: BigNumber; identity?: PartialIdentity; expiryHeight?: BigNumber; @@ -54,12 +55,14 @@ export declare class IdentityUpdateRequestDetails implements SerializableEntity expires(): boolean; containsSignData(): boolean; containsSystem(): boolean; + containsRequestID(): boolean; containsTxid(): boolean; containsResponseUris(): boolean; isTestnet(): boolean; toggleExpires(): void; toggleContainsSignData(): void; toggleContainsSystem(): void; + toggleContainsRequestID(): void; toggleContainsTxid(): void; toggleContainsResponseUris(): void; toggleIsTestnet(): void; diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js index 933a8535..ecdeabfc 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js +++ b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js @@ -17,10 +17,10 @@ class IdentityUpdateRequestDetails { constructor(data) { this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0", 10); if (data === null || data === void 0 ? void 0 : data.requestID) { + if (!this.containsRequestID()) + this.toggleContainsRequestID(); this.requestID = data.requestID; } - else - this.requestID = new bn_js_1.BN("0", 10); if (data === null || data === void 0 ? void 0 : data.createdAt) { this.createdAt = data.createdAt; } @@ -64,6 +64,9 @@ class IdentityUpdateRequestDetails { containsSystem() { return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM).toNumber()); } + containsRequestID() { + return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID).toNumber()); + } containsTxid() { return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID).toNumber()); } @@ -82,6 +85,9 @@ class IdentityUpdateRequestDetails { toggleContainsSystem() { this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM); } + toggleContainsRequestID() { + this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID); + } toggleContainsTxid() { this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID); } @@ -111,7 +117,9 @@ class IdentityUpdateRequestDetails { getByteLength() { let length = 0; length += varuint_1.default.encodingLength(this.flags.toNumber()); - length += varuint_1.default.encodingLength(this.requestID.toNumber()); + if (this.containsRequestID()) { + length += vdxf_1.HASH160_BYTE_LENGTH; + } length += varuint_1.default.encodingLength(this.createdAt.toNumber()); length += this.identity.getByteLength(); if (this.expires()) @@ -137,7 +145,9 @@ class IdentityUpdateRequestDetails { toBuffer() { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); writer.writeCompactSize(this.flags.toNumber()); - writer.writeCompactSize(this.requestID.toNumber()); + if (this.containsRequestID()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + } writer.writeCompactSize(this.createdAt.toNumber()); writer.writeSlice(this.identity.toBuffer()); if (this.expires()) @@ -164,7 +174,9 @@ class IdentityUpdateRequestDetails { fromBuffer(buffer, offset = 0, parseVdxfObjects = true) { const reader = new BufferReader(buffer, offset); this.flags = new bn_js_1.BN(reader.readCompactSize()); - this.requestID = new bn_js_1.BN(reader.readCompactSize()); + if (this.containsRequestID()) { + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + } this.createdAt = new bn_js_1.BN(reader.readCompactSize()); this.identity = new PartialIdentity_1.PartialIdentity(); reader.offset = this.identity.fromBuffer(reader.buffer, reader.offset, parseVdxfObjects); @@ -209,7 +221,7 @@ class IdentityUpdateRequestDetails { } return { flags: this.flags ? this.flags.toString(10) : undefined, - requestid: this.requestID ? this.requestID.toString(10) : undefined, + requestid: this.containsRequestID() ? this.requestID : undefined, createdat: this.createdAt ? this.createdAt.toString(10) : undefined, identity: this.identity ? this.identity.toJson() : undefined, expiryheight: this.expiryHeight ? this.expiryHeight.toString(10) : undefined, @@ -229,7 +241,7 @@ class IdentityUpdateRequestDetails { } return new IdentityUpdateRequestDetails({ flags: json.flags ? new bn_js_1.BN(json.flags, 10) : undefined, - requestID: json.requestid ? new bn_js_1.BN(json.requestid, 10) : undefined, + requestID: json.requestid, createdAt: json.createdat ? new bn_js_1.BN(json.createdat, 10) : undefined, identity: json.identity ? PartialIdentity_1.PartialIdentity.fromJson(json.identity) : undefined, expiryHeight: json.expiryheight ? new bn_js_1.BN(json.expiryheight, 10) : undefined, @@ -273,7 +285,7 @@ class IdentityUpdateRequestDetails { identity, signDataMap, systemID: (details === null || details === void 0 ? void 0 : details.systemid) ? pbaas_1.IdentityID.fromAddress(details.systemid) : undefined, - requestID: (details === null || details === void 0 ? void 0 : details.requestid) ? new bn_js_1.BN(details.requestid, 10) : undefined, + requestID: details === null || details === void 0 ? void 0 : details.requestid, createdAt: (details === null || details === void 0 ? void 0 : details.createdat) ? new bn_js_1.BN(details.createdat, 10) : undefined, expiryHeight: (details === null || details === void 0 ? void 0 : details.expiryheight) ? new bn_js_1.BN(details.expiryheight, 10) : undefined, responseURIs: (details === null || details === void 0 ? void 0 : details.responseuris) ? details.responseuris.map(x => ResponseUri_1.ResponseUri.fromJson(x)) : undefined, @@ -287,6 +299,7 @@ IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_VALID = new bn_js_1.BN(0, 1 IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SIGNDATA = new bn_js_1.BN(1, 10); IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_EXPIRES = new bn_js_1.BN(2, 10); IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS = new bn_js_1.BN(4, 10); -IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM = new bn_js_1.BN(8, 10); -IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID = new bn_js_1.BN(16, 10); -IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET = new bn_js_1.BN(32, 10); +IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID = new bn_js_1.BN(8, 10); +IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM = new bn_js_1.BN(16, 10); +IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID = new bn_js_1.BN(32, 10); +IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET = new bn_js_1.BN(64, 10); diff --git a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts index 354b5218..1ddea825 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts +++ b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts @@ -8,19 +8,22 @@ export type IdentityUpdateResponseDetailsJson = { }; export declare class IdentityUpdateResponseDetails implements SerializableEntity { flags?: BigNumber; - requestID?: BigNumber; + requestID?: string; createdAt?: BigNumber; txid?: Buffer; static IDENTITY_UPDATE_RESPONSE_VALID: import("bn.js"); static IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID: import("bn.js"); + static IDENTITY_UPDATE_RESPONSE_CONTAINS_REQUEST_ID: import("bn.js"); constructor(data?: { flags?: BigNumber; - requestID?: BigNumber; + requestID?: string; createdAt?: BigNumber; txid?: Buffer; }); containsTxid(): boolean; + containsRequestID(): boolean; toggleContainsTxid(): void; + toggleContainsRequestID(): void; toSha256(): Buffer; getByteLength(): number; toBuffer(): Buffer; diff --git a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js index bf1fe059..715534dc 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js +++ b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js @@ -6,15 +6,17 @@ const bufferutils_1 = require("../../../utils/bufferutils"); const createHash = require("create-hash"); const bn_js_1 = require("bn.js"); const pbaas_1 = require("../../../constants/pbaas"); +const vdxf_1 = require("../../../constants/vdxf"); +const address_1 = require("../../../utils/address"); const { BufferReader, BufferWriter } = bufferutils_1.default; class IdentityUpdateResponseDetails { constructor(data) { this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0", 10); if (data === null || data === void 0 ? void 0 : data.requestID) { + if (!this.containsRequestID()) + this.toggleContainsRequestID(); this.requestID = data.requestID; } - else - this.requestID = new bn_js_1.BN("0", 10); if (data === null || data === void 0 ? void 0 : data.createdAt) { this.createdAt = data.createdAt; } @@ -27,16 +29,24 @@ class IdentityUpdateResponseDetails { containsTxid() { return !!(this.flags.and(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID).toNumber()); } + containsRequestID() { + return !!(this.flags.and(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_REQUEST_ID).toNumber()); + } toggleContainsTxid() { this.flags = this.flags.xor(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID); } + toggleContainsRequestID() { + this.flags = this.flags.xor(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_REQUEST_ID); + } toSha256() { return createHash("sha256").update(this.toBuffer()).digest(); } getByteLength() { let length = 0; length += varint_1.default.encodingLength(this.flags); - length += varint_1.default.encodingLength(this.requestID); + if (this.containsRequestID()) { + length += vdxf_1.HASH160_BYTE_LENGTH; + } length += varint_1.default.encodingLength(this.createdAt); if (this.containsTxid()) { length += pbaas_1.UINT_256_LENGTH; @@ -46,7 +56,9 @@ class IdentityUpdateResponseDetails { toBuffer() { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); writer.writeVarInt(this.flags); - writer.writeVarInt(this.requestID); + if (this.containsRequestID()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + } writer.writeVarInt(this.createdAt); if (this.containsTxid()) { if (this.txid.length !== pbaas_1.UINT_256_LENGTH) @@ -58,7 +70,9 @@ class IdentityUpdateResponseDetails { fromBuffer(buffer, offset = 0) { const reader = new BufferReader(buffer, offset); this.flags = reader.readVarInt(); - this.requestID = reader.readVarInt(); + if (this.containsRequestID()) { + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + } this.createdAt = reader.readVarInt(); if (this.containsTxid()) { this.txid = reader.readSlice(pbaas_1.UINT_256_LENGTH); @@ -68,7 +82,7 @@ class IdentityUpdateResponseDetails { toJson() { return { flags: this.flags.toString(10), - requestid: this.requestID.toString(10), + requestid: this.containsRequestID() ? this.requestID : undefined, createdat: this.createdAt.toString(10), txid: this.containsTxid() ? (Buffer.from(this.txid.toString('hex'), 'hex').reverse()).toString('hex') : undefined }; @@ -76,7 +90,7 @@ class IdentityUpdateResponseDetails { static fromJson(json) { return new IdentityUpdateResponseDetails({ flags: new bn_js_1.BN(json.flags, 10), - requestID: new bn_js_1.BN(json.requestid, 10), + requestID: json.requestid, createdAt: new bn_js_1.BN(json.createdat, 10), txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined }); @@ -86,3 +100,4 @@ exports.IdentityUpdateResponseDetails = IdentityUpdateResponseDetails; // stored in natural order, if displayed as text make sure to reverse! IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_VALID = new bn_js_1.BN(0, 10); IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID = new bn_js_1.BN(1, 10); +IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_REQUEST_ID = new bn_js_1.BN(2, 10); diff --git a/dist/vdxf/classes/index.d.ts b/dist/vdxf/classes/index.d.ts index 16e4a245..2327b834 100644 --- a/dist/vdxf/classes/index.d.ts +++ b/dist/vdxf/classes/index.d.ts @@ -32,7 +32,8 @@ export { ProvisioningTxid } from './provisioning/ProvisioningResult'; export { Context } from './Context'; export { DataCategory } from './PersonalProfile'; export * from './requestobjects/RequestUserData'; -export * from './requestobjects/LoginRequestDetails'; +export * from './login/LoginRequestDetails'; +export * from './login/LoginResponseDetails'; export * from './requestobjects/ProvisionIdentityDetails'; export * from './requestobjects/AppEncryptionRequestDetails'; export * from './requestobjects/PersonalUserDataDetails'; diff --git a/dist/vdxf/classes/index.js b/dist/vdxf/classes/index.js index f81e4667..f5df5cf5 100644 --- a/dist/vdxf/classes/index.js +++ b/dist/vdxf/classes/index.js @@ -64,7 +64,8 @@ Object.defineProperty(exports, "Context", { enumerable: true, get: function () { var PersonalProfile_1 = require("./PersonalProfile"); Object.defineProperty(exports, "DataCategory", { enumerable: true, get: function () { return PersonalProfile_1.DataCategory; } }); __exportStar(require("./requestobjects/RequestUserData"), exports); -__exportStar(require("./requestobjects/LoginRequestDetails"), exports); +__exportStar(require("./login/LoginRequestDetails"), exports); +__exportStar(require("./login/LoginResponseDetails"), exports); __exportStar(require("./requestobjects/ProvisionIdentityDetails"), exports); __exportStar(require("./requestobjects/AppEncryptionRequestDetails"), exports); __exportStar(require("./requestobjects/PersonalUserDataDetails"), exports); diff --git a/dist/vdxf/classes/login/LoginRequestDetails.d.ts b/dist/vdxf/classes/login/LoginRequestDetails.d.ts new file mode 100644 index 00000000..e8cd1ff1 --- /dev/null +++ b/dist/vdxf/classes/login/LoginRequestDetails.d.ts @@ -0,0 +1,81 @@ +/** + * LoginRequestDetails - Class for handling application login and authentication requests + * + * This class is used when an application is requesting authentication or login from the user, + * including specific recipientConstraints and callback information. The request includes: + * - Request ID for tracking the authentication session + * - Permission sets defining what access the application is requesting + * - Callback URIs for post-authentication redirects + * - Optional expiry time for the authentication session + * + * The user's wallet can use these parameters to present a clear authentication request + * to the user, showing exactly what recipientConstraints are being requested and where they will + * be redirected after successful authentication. This enables secure, user-controlled + * authentication flows with granular permission management. + */ +import { BigNumber } from "../../../utils/types/BigNumber"; +import { SerializableEntity } from "../../../utils/types/SerializableEntity"; +import { CompactIdAddressObject, CompactIdAddressObjectJson } from "../CompactIdAddressObject"; +export interface LoginRequestDetailsInterface { + version?: BigNumber; + flags?: BigNumber; + requestID: string; + recipientConstraints?: Array; + callbackURIs?: Array; + expiryTime?: BigNumber; +} +export interface RecipientConstraintJson { + type: number; + identity: CompactIdAddressObjectJson; +} +export interface callbackURIsJson { + type: number; + uri: string; +} +export interface RecipientConstraint { + type: number; + identity: CompactIdAddressObject; +} +export interface callbackURIs { + type: number; + uri: string; +} +export interface LoginRequestDetailsJson { + version: number; + requestid: string; + flags: number; + recipientConstraints?: Array; + callbackURIs?: Array; + expirytime?: number; +} +export declare class LoginRequestDetails implements SerializableEntity { + version: BigNumber; + flags?: BigNumber; + requestID: string; + recipientConstraints?: Array; + callbackURIs?: Array; + expiryTime?: BigNumber; + static DEFAULT_VERSION: import("bn.js"); + static VERSION_FIRSTVALID: import("bn.js"); + static VERSION_LASTVALID: import("bn.js"); + static FLAG_HAS_RECIPIENT_CONSTRAINTS: import("bn.js"); + static FLAG_HAS_CALLBACK_URI: import("bn.js"); + static FLAG_HAS_EXPIRY_TIME: import("bn.js"); + static REQUIRED_ID: number; + static REQUIRED_SYSTEM: number; + static REQUIRED_PARENT: number; + static TYPE_WEBHOOK: number; + static TYPE_REDIRECT: number; + constructor(request?: LoginRequestDetailsInterface); + hasRecipentConstraints(): boolean; + hascallbackURIs(): boolean; + hasExpiryTime(): boolean; + calcFlags(flags?: BigNumber): BigNumber; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): LoginRequestDetailsJson; + static fromJson(data: LoginRequestDetailsJson): LoginRequestDetails; + setFlags(): void; + isValid(): boolean; +} diff --git a/dist/vdxf/classes/login/LoginRequestDetails.js b/dist/vdxf/classes/login/LoginRequestDetails.js new file mode 100644 index 00000000..0873b6a9 --- /dev/null +++ b/dist/vdxf/classes/login/LoginRequestDetails.js @@ -0,0 +1,212 @@ +"use strict"; +/** + * LoginRequestDetails - Class for handling application login and authentication requests + * + * This class is used when an application is requesting authentication or login from the user, + * including specific recipientConstraints and callback information. The request includes: + * - Request ID for tracking the authentication session + * - Permission sets defining what access the application is requesting + * - Callback URIs for post-authentication redirects + * - Optional expiry time for the authentication session + * + * The user's wallet can use these parameters to present a clear authentication request + * to the user, showing exactly what recipientConstraints are being requested and where they will + * be redirected after successful authentication. This enables secure, user-controlled + * authentication flows with granular permission management. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LoginRequestDetails = void 0; +const bufferutils_1 = require("../../../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const varuint_1 = require("../../../utils/varuint"); +const vdxf_1 = require("../../../constants/vdxf"); +const address_1 = require("../../../utils/address"); +const CompactIdAddressObject_1 = require("../CompactIdAddressObject"); +class LoginRequestDetails { + constructor(request) { + this.version = (request === null || request === void 0 ? void 0 : request.version) || LoginRequestDetails.DEFAULT_VERSION; + this.requestID = (request === null || request === void 0 ? void 0 : request.requestID) || ''; + this.flags = (request === null || request === void 0 ? void 0 : request.flags) || new bn_js_1.BN(0, 10); + this.recipientConstraints = (request === null || request === void 0 ? void 0 : request.recipientConstraints) || null; + this.callbackURIs = (request === null || request === void 0 ? void 0 : request.callbackURIs) || null; + this.expiryTime = (request === null || request === void 0 ? void 0 : request.expiryTime) || null; + this.setFlags(); + } + hasRecipentConstraints() { + return this.flags.and(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS).eq(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); + } + hascallbackURIs() { + return this.flags.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI).eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); + } + hasExpiryTime() { + return this.flags.and(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME).eq(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME); + } + calcFlags(flags = this.flags) { + if (this.recipientConstraints) { + flags = flags.or(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); + } + if (this.callbackURIs) { + flags = flags.or(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); + } + if (this.expiryTime) { + flags = flags.or(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME); + } + return flags; + } + getByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.flags.toNumber()); + length += 20; // requestID hash length + if (this.hasRecipentConstraints()) { + length += varuint_1.default.encodingLength(this.recipientConstraints.length); + for (let i = 0; i < this.recipientConstraints.length; i++) { + length += varuint_1.default.encodingLength(this.recipientConstraints[i].type); + length += this.recipientConstraints[i].identity.getByteLength(); + } + } + if (this.hascallbackURIs()) { + length += varuint_1.default.encodingLength(this.callbackURIs.length); + for (let i = 0; i < this.callbackURIs.length; i++) { + length += varuint_1.default.encodingLength(this.callbackURIs[i].type); + length += varuint_1.default.encodingLength(Buffer.from(this.callbackURIs[i].uri, 'utf8').byteLength); + length += Buffer.from(this.callbackURIs[i].uri, 'utf8').byteLength; + } + } + if (this.hasExpiryTime()) { + length += varuint_1.default.encodingLength(this.expiryTime.toNumber()); + } + return length; + } + toBuffer() { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeCompactSize(this.flags.toNumber()); + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + if (this.hasRecipentConstraints()) { + writer.writeCompactSize(this.recipientConstraints.length); + for (let i = 0; i < this.recipientConstraints.length; i++) { + writer.writeCompactSize(this.recipientConstraints[i].type); + writer.writeSlice(this.recipientConstraints[i].identity.toBuffer()); + } + } + if (this.hascallbackURIs()) { + writer.writeCompactSize(this.callbackURIs.length); + for (let i = 0; i < this.callbackURIs.length; i++) { + writer.writeCompactSize(this.callbackURIs[i].type); + writer.writeVarSlice(Buffer.from(this.callbackURIs[i].uri, 'utf8')); + } + } + if (this.hasExpiryTime()) { + writer.writeCompactSize(this.expiryTime.toNumber()); + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + this.flags = new bn_js_1.BN(reader.readCompactSize()); + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + if (this.hasRecipentConstraints()) { + this.recipientConstraints = []; + const recipientConstraintsLength = reader.readCompactSize(); + for (let i = 0; i < recipientConstraintsLength; i++) { + const compactId = new CompactIdAddressObject_1.CompactIdAddressObject(); + const type = reader.readCompactSize(); + const identityOffset = reader.offset; + reader.offset = compactId.fromBuffer(buffer, identityOffset); + this.recipientConstraints.push({ + type: type, + identity: compactId + }); + } + } + if (this.hascallbackURIs()) { + this.callbackURIs = []; + const callbackURIsLength = reader.readCompactSize(); + for (let i = 0; i < callbackURIsLength; i++) { + this.callbackURIs.push({ + type: reader.readCompactSize(), + uri: reader.readVarSlice().toString('utf8') + }); + } + } + if (this.hasExpiryTime()) { + this.expiryTime = new bn_js_1.BN(reader.readCompactSize()); + } + return reader.offset; + } + toJson() { + const flags = this.calcFlags(); + const retval = { + version: this.version.toNumber(), + flags: flags.toNumber(), + requestid: this.requestID, + recipientConstraints: this.recipientConstraints ? this.recipientConstraints.map(p => ({ type: p.type, + identity: p.identity.toJson() })) : undefined, + callbackURIs: this.callbackURIs ? this.callbackURIs : undefined, + expirytime: this.expiryTime ? this.expiryTime.toNumber() : undefined + }; + return retval; + } + static fromJson(data) { + const loginDetails = new LoginRequestDetails(); + loginDetails.version = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.version) || 0); + loginDetails.flags = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.flags) || 0); + loginDetails.requestID = data.requestid; + if (loginDetails.hasRecipentConstraints() && data.recipientConstraints) { + loginDetails.recipientConstraints = data.recipientConstraints.map(p => ({ type: p.type, + identity: CompactIdAddressObject_1.CompactIdAddressObject.fromJson(p.identity) })); + } + if (loginDetails.hascallbackURIs() && data.callbackURIs) { + loginDetails.callbackURIs = data.callbackURIs.map(c => ({ type: c.type, + uri: c.uri })); + } + if (loginDetails.hasExpiryTime() && data.expirytime) { + loginDetails.expiryTime = new bn_js_1.BN(data.expirytime); + } + return loginDetails; + } + setFlags() { + this.flags = this.calcFlags(); + } + isValid() { + let valid = this.requestID != null && this.requestID.length > 0; + valid && (valid = this.flags != null && this.flags.gte(new bn_js_1.BN(0))); + // Validate requestID is a valid base58 address + try { + (0, address_1.fromBase58Check)(this.requestID); + } + catch (_a) { + valid = false; + } + if (this.hasRecipentConstraints()) { + if (!this.recipientConstraints || this.recipientConstraints.length === 0) { + return false; + } + } + if (this.hascallbackURIs()) { + if (!this.callbackURIs || this.callbackURIs.length === 0) { + return false; + } + } + if (this.hasExpiryTime()) { + if (!this.expiryTime || this.expiryTime.isZero()) { + return false; + } + } + return valid; + } +} +exports.LoginRequestDetails = LoginRequestDetails; +// Version +LoginRequestDetails.DEFAULT_VERSION = new bn_js_1.BN(1, 10); +LoginRequestDetails.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); +LoginRequestDetails.VERSION_LASTVALID = new bn_js_1.BN(1, 10); +LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS = new bn_js_1.BN(1, 10); +LoginRequestDetails.FLAG_HAS_CALLBACK_URI = new bn_js_1.BN(2, 10); +LoginRequestDetails.FLAG_HAS_EXPIRY_TIME = new bn_js_1.BN(4, 10); +// Recipient Constraint Types - What types of Identity can login, e.g. REQUIRED_SYSTEM and "VRSC" means only identities on the Verus chain can login +LoginRequestDetails.REQUIRED_ID = 1; +LoginRequestDetails.REQUIRED_SYSTEM = 2; +LoginRequestDetails.REQUIRED_PARENT = 3; +// Callback URI Types +LoginRequestDetails.TYPE_WEBHOOK = 1; +LoginRequestDetails.TYPE_REDIRECT = 2; diff --git a/dist/vdxf/classes/login/LoginResponseDetails.d.ts b/dist/vdxf/classes/login/LoginResponseDetails.d.ts new file mode 100644 index 00000000..76120384 --- /dev/null +++ b/dist/vdxf/classes/login/LoginResponseDetails.d.ts @@ -0,0 +1,23 @@ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +export type LoginResponseDetailsJson = { + flags: string; + requestid: string; + createdat: string; +}; +export declare class LoginResponseDetails implements SerializableEntity { + flags?: BigNumber; + requestID?: string; + createdAt?: BigNumber; + constructor(data?: { + flags?: BigNumber; + requestID?: string; + createdAt?: BigNumber; + }); + toSha256(): Buffer; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): LoginResponseDetailsJson; + static fromJson(json: LoginResponseDetailsJson): LoginResponseDetails; +} diff --git a/dist/vdxf/classes/login/LoginResponseDetails.js b/dist/vdxf/classes/login/LoginResponseDetails.js new file mode 100644 index 00000000..feea048f --- /dev/null +++ b/dist/vdxf/classes/login/LoginResponseDetails.js @@ -0,0 +1,63 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LoginResponseDetails = void 0; +const varint_1 = require("../../../utils/varint"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const createHash = require("create-hash"); +const bn_js_1 = require("bn.js"); +const address_1 = require("../../../utils/address"); +const vdxf_1 = require("../../../constants/vdxf"); +const varuint_1 = require("../../../utils/varuint"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class LoginResponseDetails { + constructor(data) { + this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0", 10); + if (data === null || data === void 0 ? void 0 : data.requestID) { + this.requestID = data.requestID; + } + else + this.requestID = ''; + if (data === null || data === void 0 ? void 0 : data.createdAt) { + this.createdAt = data.createdAt; + } + } + toSha256() { + return createHash("sha256").update(this.toBuffer()).digest(); + } + getByteLength() { + let length = 0; + length += varint_1.default.encodingLength(this.flags); + length += vdxf_1.HASH160_BYTE_LENGTH; + length += varuint_1.default.encodingLength(this.createdAt.toNumber()); + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeVarInt(this.flags); + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + writer.writeCompactSize(this.createdAt.toNumber()); + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.flags = reader.readVarInt(); + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + this.createdAt = new bn_js_1.BN(reader.readCompactSize()); + return reader.offset; + } + toJson() { + return { + flags: this.flags.toString(10), + requestid: this.requestID, + createdat: this.createdAt.toString(10) + }; + } + static fromJson(json) { + return new LoginResponseDetails({ + flags: new bn_js_1.BN(json.flags, 10), + requestID: json.requestid, + createdAt: new bn_js_1.BN(json.createdat, 10) + }); + } +} +exports.LoginResponseDetails = LoginResponseDetails; diff --git a/dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.d.ts index ef2471ef..cc730c7e 100644 --- a/dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.d.ts +++ b/dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.d.ts @@ -1,7 +1,7 @@ import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { LoginRequestDetails, LoginRequestDetailsJson } from "../requestobjects/LoginRequestDetails"; +import { LoginRequestDetails, LoginRequestDetailsJson } from "../login/LoginRequestDetails"; export declare class LoginRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { data: LoginRequestDetails; constructor(request?: OrdinalVdxfObjectInterfaceTemplate); diff --git a/dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.js index c26c80ec..054b9271 100644 --- a/dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.js +++ b/dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.js @@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.LoginRequestOrdinalVdxfObject = void 0; const ordinals_1 = require("../../../constants/ordinals/ordinals"); const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); -const LoginRequestDetails_1 = require("../requestobjects/LoginRequestDetails"); +const LoginRequestDetails_1 = require("../login/LoginRequestDetails"); class LoginRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { constructor(request = { data: new LoginRequestDetails_1.LoginRequestDetails() diff --git a/dist/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.d.ts new file mode 100644 index 00000000..f1d7475a --- /dev/null +++ b/dist/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { LoginResponseDetails, LoginResponseDetailsJson } from "../login/LoginResponseDetails"; +export declare class LoginResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: LoginResponseDetails; + constructor(response?: OrdinalVdxfObjectInterfaceTemplate); + static fromJson(details: OrdinalVdxfObjectJsonTemplate): LoginResponseOrdinalVdxfObject; +} diff --git a/dist/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.js new file mode 100644 index 00000000..3dec1721 --- /dev/null +++ b/dist/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LoginResponseOrdinalVdxfObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); +const LoginResponseDetails_1 = require("../login/LoginResponseDetails"); +class LoginResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { + constructor(response = { + data: new LoginResponseDetails_1.LoginResponseDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_LOGIN_RESPONSE, + data: response.data + }, LoginResponseDetails_1.LoginResponseDetails); + } + static fromJson(details) { + return new LoginResponseOrdinalVdxfObject({ + data: LoginResponseDetails_1.LoginResponseDetails.fromJson(details.data) + }); + } +} +exports.LoginResponseOrdinalVdxfObject = LoginResponseOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/index.d.ts b/dist/vdxf/classes/ordinals/index.d.ts index 8d8fc5cb..b4c953a1 100644 --- a/dist/vdxf/classes/ordinals/index.d.ts +++ b/dist/vdxf/classes/ordinals/index.d.ts @@ -6,5 +6,6 @@ export * from './OrdinalVdxfObjectOrdinalMap'; export * from './SerializableEntityOrdinalVdxfObject'; export * from './VerusPayInvoiceOrdinalVdxfObject'; export * from './LoginRequestDetailsOrdinalVdxfObject'; +export * from './LoginResponseDetailsOrdinalVdxfObject'; export * from './AppEncryptionRequestDetailsOrdinalVdxfObject'; export * from './ProvisionIdentityDetailsOrdinalVdxfObject'; diff --git a/dist/vdxf/classes/ordinals/index.js b/dist/vdxf/classes/ordinals/index.js index 191de1d4..f944e6ec 100644 --- a/dist/vdxf/classes/ordinals/index.js +++ b/dist/vdxf/classes/ordinals/index.js @@ -23,6 +23,7 @@ __exportStar(require("./OrdinalVdxfObjectOrdinalMap"), exports); __exportStar(require("./SerializableEntityOrdinalVdxfObject"), exports); __exportStar(require("./VerusPayInvoiceOrdinalVdxfObject"), exports); __exportStar(require("./LoginRequestDetailsOrdinalVdxfObject"), exports); +__exportStar(require("./LoginResponseDetailsOrdinalVdxfObject"), exports); __exportStar(require("./AppEncryptionRequestDetailsOrdinalVdxfObject"), exports); __exportStar(require("./ProvisionIdentityDetailsOrdinalVdxfObject"), exports); (0, register_1.registerOrdinals)(); diff --git a/dist/vdxf/keys.d.ts b/dist/vdxf/keys.d.ts index 0afe7894..7a8ee0c4 100644 --- a/dist/vdxf/keys.d.ts +++ b/dist/vdxf/keys.d.ts @@ -77,5 +77,6 @@ export declare const IDENTITY_CREDENTIAL_PLAINLOGIN: VDXFKeyInterface; export declare const IDENTITY_CREDENTIAL_USERNAME: VDXFKeyInterface; export declare const ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS: VDXFKeyInterface; export declare const LOGIN_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface; +export declare const LOGIN_RESPONSE_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const PROVISION_IDENTITY_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index 00a78b29..658c6864 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; -exports.APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.LOGIN_REQUEST_DETAILS_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; +exports.APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.LOGIN_RESPONSE_DETAILS_VDXF_KEY = exports.LOGIN_REQUEST_DETAILS_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; exports.VERUSPAY_INVOICE_VDXF_KEY = { hash160result: "628efc28c2e2d40050e1a9de7a93e7ddf2aa0076", qualifiedname: { @@ -559,6 +559,15 @@ exports.LOGIN_REQUEST_DETAILS_VDXF_KEY = { }, "vdxfid": "i7EhCFPWo7dG2az4tjiPf6ciNMK5671Z5A" }; +exports.LOGIN_RESPONSE_DETAILS_VDXF_KEY = { + "hash160result": "e65d6b3f3b49ec499762e4c9369f1f7f72b251bb", + "indexid": "xRP68AHAxF9zbxeFpMFA5y85H2RhLiUJ9U", + "qualifiedname": { + "name": "vrsc::identity.login.response.details", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iLYyfMr66vwKynmDxfb17abYFNQgU71i6T" +}; exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = { "hash160result": "1ed843dce0f4d9a2bbb839994e3927807eb1878c", "indexid": "xM7h3sXBovFXuwGQ3wvK2ibtUmMHn3mYkM", diff --git a/src/__tests__/constants/fixtures.ts b/src/__tests__/constants/fixtures.ts index 2ce10b84..23dc2419 100644 --- a/src/__tests__/constants/fixtures.ts +++ b/src/__tests__/constants/fixtures.ts @@ -333,7 +333,7 @@ export const TEST_IDENTITY_ID = "i8jHXEEYEQ7KEoYe6eKXBib8cUBZ6vjWSd" export const TEST_SYSTEMID = IdentityID.fromAddress("iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"); export const TEST_SIGNINGID = IdentityID.fromAddress("iPsFBfFoCcxtuZNzE8yxPQhXVn4dmytf8j"); -export const TEST_REQUESTID = new BN("123456", 10); +export const TEST_REQUESTID = "iPsFBfFoCcxtuZNzE8yxPQhXVn4dmytf8j"; export const TEST_CREATEDAT = new BN("1700000000", 10); export const TEST_EXPIRYHEIGHT = new BN("123456"); export const TEST_SALT = Buffer.from('=H319X:)@H2Z'); diff --git a/src/__tests__/vdxf/loginresponsedetails.test.ts b/src/__tests__/vdxf/loginresponsedetails.test.ts new file mode 100644 index 00000000..406dda52 --- /dev/null +++ b/src/__tests__/vdxf/loginresponsedetails.test.ts @@ -0,0 +1,26 @@ +import { BN } from "bn.js"; +import { + LoginResponseDetails +} from "../../vdxf/classes"; +import { TEST_CHALLENGE_ID } from "../constants/fixtures"; + +describe("LoginRequestDetails", () => { + describe("constructor and basic properties", () => { + test("creates instance with all optional data", () => { + const details = new LoginResponseDetails({ + requestID: TEST_CHALLENGE_ID, + createdAt: new BN(2938475938457) // 1 hour from now + }); + + const detailsBuffer = details.toBuffer(); + + const newDetails = new LoginResponseDetails(); + newDetails.fromBuffer(detailsBuffer); + + expect(newDetails.requestID).toBe(TEST_CHALLENGE_ID); + expect(newDetails.createdAt?.toString()).toBe("2938475938457"); + + expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); + }); + }); +}); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index fba81087..bfc1fb38 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -6,6 +6,7 @@ import { IdentityUpdateRequestOrdinalVdxfObject, IdentityUpdateResponseOrdinalVdxfObject, LoginRequestOrdinalVdxfObject, + LoginResponseOrdinalVdxfObject, OrdinalVdxfObject, } from '../../vdxf/classes/ordinals'; import { @@ -18,6 +19,7 @@ import { IdentityUpdateRequestDetails, IdentityUpdateResponseDetails, LoginRequestDetails, + LoginResponseDetails, ProvisionIdentityDetails, ResponseUri, VerusPayInvoiceDetails @@ -68,6 +70,8 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { newObj = IdentityUpdateResponseOrdinalVdxfObject.fromJson(json as any); } else if (obj instanceof LoginRequestOrdinalVdxfObject) { newObj = LoginRequestOrdinalVdxfObject.fromJson(json as any); + } else if (obj instanceof LoginResponseOrdinalVdxfObject) { + newObj = LoginResponseOrdinalVdxfObject.fromJson(json as any); } else if (obj instanceof ProvisionIdentityDetailsOrdinalVdxfObject) { newObj = ProvisionIdentityDetailsOrdinalVdxfObject.fromJson(json as any); } else if (obj instanceof AppEncryptionRequestDetailsOrdinalVdxfObject) { @@ -284,6 +288,31 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(d3.expiryTime!.toNumber()).toEqual(details.expiryTime!.toNumber()); }); + it('should serialize / deserialize a LoginResponseOrdinalVdxfObject via buffer', () => { + const details = new LoginResponseDetails({ + requestID: TEST_CHALLENGE_ID, + createdAt: new BN(2938475938457) + }); + + const obj = new LoginResponseOrdinalVdxfObject({ data: details }); + + const round = roundTripBuffer(obj); + expect(round).toBeInstanceOf(LoginResponseOrdinalVdxfObject); + + const d2 = (round as LoginResponseOrdinalVdxfObject).data; + expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); + expect(d2.createdAt!.toNumber()).toEqual(details.createdAt!.toNumber()); + + const json = obj.toJson(); + expect(json.data).toBeDefined(); + const roundJ = roundTripJson(obj); + expect(roundJ).toBeInstanceOf(LoginResponseOrdinalVdxfObject); + + const d3 = (roundJ as LoginResponseOrdinalVdxfObject).data; + expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); + expect(d3.createdAt!.toNumber()).toEqual(details.createdAt!.toNumber()); + }); + it('should serialize / deserialize a ProvisionIdentityDetailsOrdinalVdxfObject', () => { const details = new ProvisionIdentityDetails({ version: new BN(1, 10), diff --git a/src/constants/ordinals/ordinals.ts b/src/constants/ordinals/ordinals.ts index 6201ded8..2aeb0ed8 100644 --- a/src/constants/ordinals/ordinals.ts +++ b/src/constants/ordinals/ordinals.ts @@ -7,7 +7,8 @@ export const VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = new BN(104, 10); export const VDXF_ORDINAL_DATA_DESCRIPTOR = new BN(0, 10); export const VDXF_ORDINAL_VERUSPAY_INVOICE = new BN(1, 10); export const VDXF_ORDINAL_LOGIN_REQUEST = new BN(2, 10); -export const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new BN(3, 10); -export const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new BN(4, 10); -export const VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new BN(5, 10); -export const VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS = new BN(6, 10); \ No newline at end of file +export const VDXF_ORDINAL_LOGIN_RESPONSE = new BN(3, 10); +export const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new BN(4, 10); +export const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new BN(5, 10); +export const VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new BN(6, 10); +export const VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS = new BN(7, 10); \ No newline at end of file diff --git a/src/constants/ordinals/register.ts b/src/constants/ordinals/register.ts index ee41bc9a..72e94fa8 100644 --- a/src/constants/ordinals/register.ts +++ b/src/constants/ordinals/register.ts @@ -1,18 +1,20 @@ -import { APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY, DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, LOGIN_REQUEST_DETAILS_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../../vdxf"; +import { APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY, DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, LOGIN_REQUEST_DETAILS_VDXF_KEY, LOGIN_RESPONSE_DETAILS_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../../vdxf"; import { AppEncryptionRequestDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject"; import { DataDescriptorOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject"; import { IdentityUpdateRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject"; import { IdentityUpdateResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject"; import { LoginRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject"; +import { LoginResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject"; import { OrdinalVdxfObjectOrdinalMap } from "../../vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap"; import { ProvisionIdentityDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject"; import { VerusPayInvoiceOrdinalVdxfObject } from "../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject"; -import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from "./ordinals"; +import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_LOGIN_RESPONSE, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from "./ordinals"; export const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid, VerusPayInvoiceOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_LOGIN_REQUEST.toNumber(), LOGIN_REQUEST_DETAILS_VDXF_KEY.vdxfid, LoginRequestOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_LOGIN_RESPONSE.toNumber(), LOGIN_RESPONSE_DETAILS_VDXF_KEY.vdxfid, LoginResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVdxfObject, false); diff --git a/src/constants/ordinals/types.ts b/src/constants/ordinals/types.ts index 1bc6ecbe..aac3585e 100644 --- a/src/constants/ordinals/types.ts +++ b/src/constants/ordinals/types.ts @@ -8,6 +8,8 @@ import { IdentityUpdateResponseDetailsJson, LoginRequestDetails, LoginRequestDetailsJson, + LoginResponseDetails, + LoginResponseDetailsJson, ProvisionIdentityDetails, ProvisionIdentityDetailsJson, VerusPayInvoiceDetails @@ -20,6 +22,7 @@ export type OrdinalVdxfObjectReservedData = IdentityUpdateRequestDetails | IdentityUpdateResponseDetails | LoginRequestDetails | + LoginResponseDetails | ProvisionIdentityDetails | AppEncryptionRequestDetails; @@ -29,6 +32,7 @@ export type OrdinalVdxfObjectReservedDataJson = IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson | LoginRequestDetailsJson | + LoginResponseDetailsJson | ProvisionIdentityDetailsJson | AppEncryptionRequestDetailsJson; diff --git a/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts b/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts index ad976af9..9acaced9 100644 --- a/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts +++ b/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts @@ -1,4 +1,3 @@ -import varint from '../../../utils/varint' import varuint from '../../../utils/varuint' import bufferutils from '../../../utils/bufferutils' import { fromBase58Check, nameAndParentAddrToIAddr, toBase58Check } from '../../../utils/address'; @@ -33,7 +32,7 @@ export type IdentityUpdateRequestDetailsJson = { export class IdentityUpdateRequestDetails implements SerializableEntity { flags?: BigNumber; - requestID?: BigNumber; // ID of request, to be referenced in response + requestID?: string; // ID of request, to be referenced in response createdAt?: BigNumber; // Unix timestamp of request creation identity?: PartialIdentity; // Parts of the identity to update expiryHeight?: BigNumber; // Time after which update request will no longer be accepted @@ -47,13 +46,14 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { static IDENTITY_UPDATE_REQUEST_CONTAINS_SIGNDATA = new BN(1, 10); static IDENTITY_UPDATE_REQUEST_EXPIRES = new BN(2, 10); static IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS = new BN(4, 10); - static IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM = new BN(8, 10); - static IDENTITY_UPDATE_REQUEST_CONTAINS_TXID = new BN(16, 10); - static IDENTITY_UPDATE_REQUEST_IS_TESTNET = new BN(32, 10); + static IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID = new BN(8, 10); + static IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM = new BN(16, 10); + static IDENTITY_UPDATE_REQUEST_CONTAINS_TXID = new BN(32, 10); + static IDENTITY_UPDATE_REQUEST_IS_TESTNET = new BN(64, 10); constructor (data?: { flags?: BigNumber, - requestID?: BigNumber, + requestID?: string, createdAt?: BigNumber, identity?: PartialIdentity, expiryHeight?: BigNumber, @@ -65,8 +65,9 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { this.flags = data && data.flags ? data.flags : new BN("0", 10); if (data?.requestID) { + if (!this.containsRequestID()) this.toggleContainsRequestID(); this.requestID = data.requestID; - } else this.requestID = new BN("0", 10); + } if (data?.createdAt) { this.createdAt = data.createdAt; @@ -114,6 +115,10 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM).toNumber()); } + containsRequestID() { + return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID).toNumber()); + } + containsTxid() { return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID).toNumber()); } @@ -138,6 +143,10 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM); } + toggleContainsRequestID() { + this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID); + } + toggleContainsTxid() { this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID); } @@ -170,7 +179,11 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { let length = 0; length += varuint.encodingLength(this.flags.toNumber()); - length += varuint.encodingLength(this.requestID.toNumber()); + + if (this.containsRequestID()) { + length += HASH160_BYTE_LENGTH; + } + length += varuint.encodingLength(this.createdAt.toNumber()); length += this.identity.getByteLength(); @@ -206,7 +219,11 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); writer.writeCompactSize(this.flags.toNumber()); - writer.writeCompactSize(this.requestID.toNumber()); + + if (this.containsRequestID()) { + writer.writeSlice(fromBase58Check(this.requestID).hash); + } + writer.writeCompactSize(this.createdAt.toNumber()); writer.writeSlice(this.identity.toBuffer()); @@ -240,7 +257,11 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { const reader = new BufferReader(buffer, offset); this.flags = new BN(reader.readCompactSize()); - this.requestID = new BN(reader.readCompactSize()); + + if (this.containsRequestID()) { + this.requestID = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); + } + this.createdAt = new BN(reader.readCompactSize()); this.identity = new PartialIdentity(); @@ -304,7 +325,7 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { return { flags: this.flags ? this.flags.toString(10) : undefined, - requestid: this.requestID ? this.requestID.toString(10) : undefined, + requestid: this.containsRequestID() ? this.requestID : undefined, createdat: this.createdAt ? this.createdAt.toString(10) : undefined, identity: this.identity ? this.identity.toJson() : undefined, expiryheight: this.expiryHeight ? this.expiryHeight.toString(10) : undefined, @@ -328,7 +349,7 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { return new IdentityUpdateRequestDetails({ flags: json.flags ? new BN(json.flags, 10) : undefined, - requestID: json.requestid ? new BN(json.requestid, 10) : undefined, + requestID: json.requestid, createdAt: json.createdat ? new BN(json.createdat, 10) : undefined, identity: json.identity ? PartialIdentity.fromJson(json.identity) : undefined, expiryHeight: json.expiryheight ? new BN(json.expiryheight, 10) : undefined, @@ -385,7 +406,7 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { identity, signDataMap, systemID: details?.systemid ? IdentityID.fromAddress(details.systemid) : undefined, - requestID: details?.requestid ? new BN(details.requestid, 10) : undefined, + requestID: details?.requestid, createdAt: details?.createdat ? new BN(details.createdat, 10) : undefined, expiryHeight: details?.expiryheight ? new BN(details.expiryheight, 10) : undefined, responseURIs: details?.responseuris ? details.responseuris.map(x => ResponseUri.fromJson(x)) : undefined, diff --git a/src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts b/src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts index 73a52f3e..11e66074 100644 --- a/src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts +++ b/src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts @@ -5,6 +5,8 @@ import { BigNumber } from '../../../utils/types/BigNumber'; import { BN } from 'bn.js'; import { UINT_256_LENGTH } from '../../../constants/pbaas'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../../../constants/vdxf'; +import { fromBase58Check, toBase58Check } from '../../../utils/address'; const { BufferReader, BufferWriter } = bufferutils; export type IdentityUpdateResponseDetailsJson = { @@ -16,25 +18,27 @@ export type IdentityUpdateResponseDetailsJson = { export class IdentityUpdateResponseDetails implements SerializableEntity { flags?: BigNumber; - requestID?: BigNumber; // ID of request, to be referenced in response - createdAt?: BigNumber; // Unix timestamp of request creation + requestID?: string; // ID of request, to be referenced in response + createdAt?: BigNumber; // Unix timestamp of response creation txid?: Buffer; // 32 byte transaction ID of identity update tx posted to blockchain, on same system asked for in request // stored in natural order, if displayed as text make sure to reverse! static IDENTITY_UPDATE_RESPONSE_VALID = new BN(0, 10); static IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID = new BN(1, 10); + static IDENTITY_UPDATE_RESPONSE_CONTAINS_REQUEST_ID = new BN(2, 10); constructor (data?: { flags?: BigNumber, - requestID?: BigNumber, + requestID?: string, createdAt?: BigNumber, txid?: Buffer }) { this.flags = data && data.flags ? data.flags : new BN("0", 10); if (data?.requestID) { + if (!this.containsRequestID()) this.toggleContainsRequestID(); this.requestID = data.requestID; - } else this.requestID = new BN("0", 10); + } if (data?.createdAt) { this.createdAt = data.createdAt; @@ -50,10 +54,18 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { return !!(this.flags.and(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID).toNumber()); } + containsRequestID() { + return !!(this.flags.and(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_REQUEST_ID).toNumber()); + } + toggleContainsTxid() { this.flags = this.flags.xor(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID); } + toggleContainsRequestID() { + this.flags = this.flags.xor(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_REQUEST_ID); + } + toSha256() { return createHash("sha256").update(this.toBuffer()).digest(); } @@ -63,7 +75,9 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { length += varint.encodingLength(this.flags); - length += varint.encodingLength(this.requestID); + if (this.containsRequestID()) { + length += HASH160_BYTE_LENGTH; + } length += varint.encodingLength(this.createdAt); @@ -79,7 +93,9 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { writer.writeVarInt(this.flags); - writer.writeVarInt(this.requestID); + if (this.containsRequestID()) { + writer.writeSlice(fromBase58Check(this.requestID).hash); + } writer.writeVarInt(this.createdAt); @@ -97,7 +113,9 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { this.flags = reader.readVarInt(); - this.requestID = reader.readVarInt(); + if (this.containsRequestID()) { + this.requestID = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); + } this.createdAt = reader.readVarInt(); @@ -111,7 +129,7 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { toJson(): IdentityUpdateResponseDetailsJson { return { flags: this.flags.toString(10), - requestid: this.requestID.toString(10), + requestid: this.containsRequestID() ? this.requestID : undefined, createdat: this.createdAt.toString(10), txid: this.containsTxid() ? (Buffer.from(this.txid.toString('hex'), 'hex').reverse()).toString('hex') : undefined } @@ -120,7 +138,7 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { static fromJson(json: IdentityUpdateResponseDetailsJson): IdentityUpdateResponseDetails { return new IdentityUpdateResponseDetails({ flags: new BN(json.flags, 10), - requestID: new BN(json.requestid, 10), + requestID: json.requestid, createdAt: new BN(json.createdat, 10), txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined }); diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index 285bee61..d3ed0212 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -48,7 +48,8 @@ export { export { Context } from './Context' export { DataCategory } from './PersonalProfile' export * from './requestobjects/RequestUserData' -export * from './requestobjects/LoginRequestDetails' +export * from './login/LoginRequestDetails' +export * from './login/LoginResponseDetails' export * from './requestobjects/ProvisionIdentityDetails' export * from './requestobjects/AppEncryptionRequestDetails' export * from './requestobjects/PersonalUserDataDetails' diff --git a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts b/src/vdxf/classes/login/LoginRequestDetails.ts similarity index 98% rename from src/vdxf/classes/requestobjects/LoginRequestDetails.ts rename to src/vdxf/classes/login/LoginRequestDetails.ts index 074c52cc..fd0e7df9 100644 --- a/src/vdxf/classes/requestobjects/LoginRequestDetails.ts +++ b/src/vdxf/classes/login/LoginRequestDetails.ts @@ -91,7 +91,6 @@ export class LoginRequestDetails implements SerializableEntity { constructor( request?: LoginRequestDetailsInterface ) { - this.version = request?.version || LoginRequestDetails.DEFAULT_VERSION; this.requestID = request?.requestID || ''; this.flags = request?.flags || new BN(0, 10); @@ -103,7 +102,7 @@ export class LoginRequestDetails implements SerializableEntity { } hasRecipentConstraints(): boolean { - return this.flags.and(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS).eq(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); + return this.flags.and(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS).eq(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); } hascallbackURIs(): boolean { diff --git a/src/vdxf/classes/login/LoginResponseDetails.ts b/src/vdxf/classes/login/LoginResponseDetails.ts new file mode 100644 index 00000000..30ca715c --- /dev/null +++ b/src/vdxf/classes/login/LoginResponseDetails.ts @@ -0,0 +1,94 @@ +import varint from '../../../utils/varint' +import bufferutils from '../../../utils/bufferutils' +import createHash = require('create-hash'); +import { BigNumber } from '../../../utils/types/BigNumber'; +import { BN } from 'bn.js'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { fromBase58Check, toBase58Check } from '../../../utils/address'; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../../../constants/vdxf'; +import varuint from '../../../utils/varuint'; +const { BufferReader, BufferWriter } = bufferutils; + +export type LoginResponseDetailsJson = { + flags: string, + requestid: string, + createdat: string +} + +export class LoginResponseDetails implements SerializableEntity { + flags?: BigNumber; + requestID?: string; // ID of request, to be referenced in response + createdAt?: BigNumber; // Unix timestamp of response creation + + constructor (data?: { + flags?: BigNumber, + requestID?: string, + createdAt?: BigNumber + }) { + this.flags = data && data.flags ? data.flags : new BN("0", 10); + + if (data?.requestID) { + this.requestID = data.requestID; + } else this.requestID = ''; + + if (data?.createdAt) { + this.createdAt = data.createdAt; + } + } + + toSha256() { + return createHash("sha256").update(this.toBuffer()).digest(); + } + + getByteLength(): number { + let length = 0; + + length += varint.encodingLength(this.flags); + + length += HASH160_BYTE_LENGTH; + + length += varuint.encodingLength(this.createdAt.toNumber()); + + return length; + } + + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + + writer.writeVarInt(this.flags); + + writer.writeSlice(fromBase58Check(this.requestID).hash); + + writer.writeCompactSize(this.createdAt.toNumber()); + + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset: number = 0) { + const reader = new BufferReader(buffer, offset); + + this.flags = reader.readVarInt(); + + this.requestID = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); + + this.createdAt = new BN(reader.readCompactSize()); + + return reader.offset; + } + + toJson(): LoginResponseDetailsJson { + return { + flags: this.flags.toString(10), + requestid: this.requestID, + createdat: this.createdAt.toString(10) + } + } + + static fromJson(json: LoginResponseDetailsJson): LoginResponseDetails { + return new LoginResponseDetails({ + flags: new BN(json.flags, 10), + requestID: json.requestid, + createdAt: new BN(json.createdat, 10) + }); + } +} \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.ts index 805b2fec..68529854 100644 --- a/src/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.ts +++ b/src/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.ts @@ -2,7 +2,7 @@ import { VDXF_ORDINAL_LOGIN_REQUEST } from "../../../constants/ordinals/ordinals import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { LoginRequestDetails, LoginRequestDetailsJson } from "../requestobjects/LoginRequestDetails"; +import { LoginRequestDetails, LoginRequestDetailsJson } from "../login/LoginRequestDetails"; export class LoginRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { data: LoginRequestDetails; diff --git a/src/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.ts new file mode 100644 index 00000000..6565ab96 --- /dev/null +++ b/src/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.ts @@ -0,0 +1,29 @@ +import { VDXF_ORDINAL_LOGIN_RESPONSE } from "../../../constants/ordinals/ordinals"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { LoginResponseDetails, LoginResponseDetailsJson } from "../login/LoginResponseDetails"; + +export class LoginResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: LoginResponseDetails; + + constructor( + response: OrdinalVdxfObjectInterfaceTemplate = { + data: new LoginResponseDetails() + } + ) { + super( + { + type: VDXF_ORDINAL_LOGIN_RESPONSE, + data: response.data + }, + LoginResponseDetails + ); + } + + static fromJson(details: OrdinalVdxfObjectJsonTemplate): LoginResponseOrdinalVdxfObject { + return new LoginResponseOrdinalVdxfObject({ + data: LoginResponseDetails.fromJson(details.data) + }) + } +} \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/index.ts b/src/vdxf/classes/ordinals/index.ts index e8cbe87d..820eaa53 100644 --- a/src/vdxf/classes/ordinals/index.ts +++ b/src/vdxf/classes/ordinals/index.ts @@ -8,6 +8,7 @@ export * from './OrdinalVdxfObjectOrdinalMap' export * from './SerializableEntityOrdinalVdxfObject' export * from './VerusPayInvoiceOrdinalVdxfObject' export * from './LoginRequestDetailsOrdinalVdxfObject' +export * from './LoginResponseDetailsOrdinalVdxfObject' export * from './AppEncryptionRequestDetailsOrdinalVdxfObject' export * from './ProvisionIdentityDetailsOrdinalVdxfObject' diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index d9e16915..7d59b99d 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -645,6 +645,16 @@ export const LOGIN_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface = { "vdxfid": "i7EhCFPWo7dG2az4tjiPf6ciNMK5671Z5A" } +export const LOGIN_RESPONSE_DETAILS_VDXF_KEY: VDXFKeyInterface = { + "hash160result": "e65d6b3f3b49ec499762e4c9369f1f7f72b251bb", + "indexid": "xRP68AHAxF9zbxeFpMFA5y85H2RhLiUJ9U", + "qualifiedname": { + "name": "vrsc::identity.login.response.details", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iLYyfMr66vwKynmDxfb17abYFNQgU71i6T" +} + export const PROVISION_IDENTITY_DETAILS_VDXF_KEY: VDXFKeyInterface = { "hash160result": "1ed843dce0f4d9a2bbb839994e3927807eb1878c", "indexid": "xM7h3sXBovFXuwGQ3wvK2ibtUmMHn3mYkM", From d3dcead060832a3ed6502b24fa6e1b59c9323b53 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Wed, 19 Nov 2025 15:02:17 +0100 Subject: [PATCH 052/123] Remove unecessary flag from IdentityUpdateResponseDetails --- src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts b/src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts index 11e66074..d05d84a5 100644 --- a/src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts +++ b/src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts @@ -23,7 +23,6 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { txid?: Buffer; // 32 byte transaction ID of identity update tx posted to blockchain, on same system asked for in request // stored in natural order, if displayed as text make sure to reverse! - static IDENTITY_UPDATE_RESPONSE_VALID = new BN(0, 10); static IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID = new BN(1, 10); static IDENTITY_UPDATE_RESPONSE_CONTAINS_REQUEST_ID = new BN(2, 10); From d2d7857b7c208878982b4fe45b80b5fdc47ea8a8 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Wed, 19 Nov 2025 15:29:14 +0100 Subject: [PATCH 053/123] Add function to get raw sha256 with sig to GenericEnvelope --- src/vdxf/classes/envelope/GenericEnvelope.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vdxf/classes/envelope/GenericEnvelope.ts b/src/vdxf/classes/envelope/GenericEnvelope.ts index 7f61e432..1698435b 100644 --- a/src/vdxf/classes/envelope/GenericEnvelope.ts +++ b/src/vdxf/classes/envelope/GenericEnvelope.ts @@ -120,8 +120,8 @@ export class GenericEnvelope implements SerializableEntity { if (this.salt) this.setHasSalt(); } - protected getRawDataSha256() { - return createHash("sha256").update(this.toBufferOptionalSig(false)).digest(); + getRawDataSha256(includeSig = false) { + return createHash("sha256").update(this.toBufferOptionalSig(includeSig)).digest(); } getDetailsHash(signedBlockheight: number): Buffer { From 25f8c860a23f895a794c906493e3b21620327e04 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Wed, 19 Nov 2025 15:29:23 +0100 Subject: [PATCH 054/123] Update build files --- dist/vdxf/classes/envelope/GenericEnvelope.d.ts | 2 +- dist/vdxf/classes/envelope/GenericEnvelope.js | 4 ++-- dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts | 1 - dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js | 1 - 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts index 5328debd..aec9ceb6 100644 --- a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts +++ b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts @@ -47,7 +47,7 @@ export declare class GenericEnvelope implements SerializableEntity { setHasSalt(): void; setIsTestnet(): void; setFlags(): void; - protected getRawDataSha256(): Buffer; + getRawDataSha256(includeSig?: boolean): Buffer; getDetailsHash(signedBlockheight: number): Buffer; getDetails(index?: number): OrdinalVdxfObject; protected getDetailsBufferLength(): number; diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.js b/dist/vdxf/classes/envelope/GenericEnvelope.js index 71b47d88..e153f1d1 100644 --- a/dist/vdxf/classes/envelope/GenericEnvelope.js +++ b/dist/vdxf/classes/envelope/GenericEnvelope.js @@ -71,8 +71,8 @@ class GenericEnvelope { if (this.salt) this.setHasSalt(); } - getRawDataSha256() { - return (0, crypto_1.createHash)("sha256").update(this.toBufferOptionalSig(false)).digest(); + getRawDataSha256(includeSig = false) { + return (0, crypto_1.createHash)("sha256").update(this.toBufferOptionalSig(includeSig)).digest(); } getDetailsHash(signedBlockheight) { if (this.isSigned()) { diff --git a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts index 1ddea825..f8e889ac 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts +++ b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts @@ -11,7 +11,6 @@ export declare class IdentityUpdateResponseDetails implements SerializableEntity requestID?: string; createdAt?: BigNumber; txid?: Buffer; - static IDENTITY_UPDATE_RESPONSE_VALID: import("bn.js"); static IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID: import("bn.js"); static IDENTITY_UPDATE_RESPONSE_CONTAINS_REQUEST_ID: import("bn.js"); constructor(data?: { diff --git a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js index 715534dc..44f07fa0 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js +++ b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js @@ -98,6 +98,5 @@ class IdentityUpdateResponseDetails { } exports.IdentityUpdateResponseDetails = IdentityUpdateResponseDetails; // stored in natural order, if displayed as text make sure to reverse! -IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_VALID = new bn_js_1.BN(0, 10); IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID = new bn_js_1.BN(1, 10); IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_REQUEST_ID = new bn_js_1.BN(2, 10); From 3bb5f30ae9fab80151f5a2a62b9834ce58d948d0 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Wed, 19 Nov 2025 15:46:26 +0100 Subject: [PATCH 055/123] Add TODO for TYPE_Z_ADDR_REF --- src/vdxf/classes/ResponseUri.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/vdxf/classes/ResponseUri.ts b/src/vdxf/classes/ResponseUri.ts index e33cb0f8..891e0732 100644 --- a/src/vdxf/classes/ResponseUri.ts +++ b/src/vdxf/classes/ResponseUri.ts @@ -17,6 +17,8 @@ export class ResponseUri implements SerializableEntity { static TYPE_INVALID = new BN(0, 10); static TYPE_REDIRECT = new BN(1, 10); static TYPE_POST = new BN(2, 10); + // TODO: Add TYPE_Z_ADDR_REF where response is encrypted and sent to encoded sapling address, + // with optional amount specified constructor(data?: { uri?: Buffer, From 6bdc0839090cbaf0397cdb454e8139856be1882b Mon Sep 17 00:00:00 2001 From: monkins Date: Wed, 19 Nov 2025 18:48:17 +0000 Subject: [PATCH 056/123] Add in ordinal objects and tests --- .../vdxf/appencryptionrequestdetails.test.ts | 6 +- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 120 +++++++++++- src/__tests__/vdxf/requestuserdata.test.ts | 38 ---- .../vdxf/userdatarequestdetails.test.ts | 40 ++++ ... => userspecificdatapacketdetails.test.ts} | 15 +- src/constants/ordinals/ordinals.ts | 6 +- src/constants/ordinals/register.ts | 10 +- src/constants/ordinals/types.ts | 15 +- src/vdxf/classes/index.ts | 4 +- ...DataDescriptorResponseOrdinalVdxfObject.ts | 30 +++ ...UserDataRequestDetailsOrdinalVdxfObject.ts | 29 +++ ...cificDataPacketDetailsOrdinalVdxfObject.ts | 29 +++ src/vdxf/classes/ordinals/index.ts | 3 + .../AppEncryptionRequestDetails.ts | 37 +++- ...tUserData.ts => UserDataRequestDetails.ts} | 67 +++++-- ...ls.ts => UserSpecificDataPacketDetails.ts} | 70 +++++-- .../response/DataDescriptorResponse.ts | 171 ++++++++++++++++++ src/vdxf/keys.ts | 29 +++ 18 files changed, 625 insertions(+), 94 deletions(-) delete mode 100644 src/__tests__/vdxf/requestuserdata.test.ts create mode 100644 src/__tests__/vdxf/userdatarequestdetails.test.ts rename src/__tests__/vdxf/{personaluserdatadetails.test.ts => userspecificdatapacketdetails.test.ts} (80%) create mode 100644 src/vdxf/classes/ordinals/DataDescriptorResponseOrdinalVdxfObject.ts create mode 100644 src/vdxf/classes/ordinals/UserDataRequestDetailsOrdinalVdxfObject.ts create mode 100644 src/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.ts rename src/vdxf/classes/requestobjects/{RequestUserData.ts => UserDataRequestDetails.ts} (77%) rename src/vdxf/classes/requestobjects/{PersonalUserDataDetails.ts => UserSpecificDataPacketDetails.ts} (74%) create mode 100644 src/vdxf/classes/response/DataDescriptorResponse.ts diff --git a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts index 381f4565..cdeeae4c 100644 --- a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts +++ b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts @@ -22,6 +22,7 @@ describe("AppEncryptionRequestDetails serialization tests", () => { secondaryDerivationNumber: new BN(234), fromAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), toAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); const newDetails = new AppEncryptionRequestDetails(); @@ -34,11 +35,12 @@ describe("AppEncryptionRequestDetails serialization tests", () => { expect(details.isValid()).toBe(true); expect(details.encryptToZAddress).toBe("zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4"); - expect(details.flags.toNumber()).toBe(1+2+4); + expect(details.flags.toNumber()).toBe(1+2+4+8); expect(details.derivationNumber.toNumber()).toBe(42); expect(details.secondaryDerivationNumber?.toNumber()).toBe(234); expect(details.fromAddress?.address).toBe("i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"); expect(details.toAddress?.address).toBe("i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"); + expect(details.requestID).toBe("iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ"); }); test("serializes and deserializes AppEncryptionRequestDetails correctly", () => { @@ -53,6 +55,7 @@ describe("AppEncryptionRequestDetails serialization tests", () => { secondaryDerivationNumber: new BN(234), fromAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), toAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); // Serialize to buffer @@ -76,6 +79,7 @@ describe("AppEncryptionRequestDetails serialization tests", () => { expect(deserializedDetails.fromAddress?.address).toBe(originalDetails.fromAddress?.address); expect(deserializedDetails.toAddress?.type.toNumber()).toBe(originalDetails.toAddress?.type.toNumber()); expect(deserializedDetails.toAddress?.address).toBe(originalDetails.toAddress?.address); + expect(deserializedDetails.requestID).toBe(originalDetails.requestID); // Verify that serializing both instances produces the same buffer const originalBuffer = originalDetails.toBuffer(); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index bfc1fb38..3dc05a60 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -8,6 +8,9 @@ import { LoginRequestOrdinalVdxfObject, LoginResponseOrdinalVdxfObject, OrdinalVdxfObject, + UserDataRequestDetailsOrdinalVdxfObject, + UserSpecificDataPacketDetailsOrdinalVdxfObject, + DataDescriptorResponseOrdinalVdxfObject } from '../../vdxf/classes/ordinals'; import { DataDescriptorOrdinalVdxfObject @@ -22,7 +25,9 @@ import { LoginResponseDetails, ProvisionIdentityDetails, ResponseUri, - VerusPayInvoiceDetails + VerusPayInvoiceDetails, + UserDataRequestDetails, + UserSpecificDataPacketDetails } from '../../vdxf/classes'; import { DEFAULT_VERUS_CHAINID } from '../../constants/pbaas'; import { fromBase58Check } from '../../utils/address'; @@ -31,6 +36,8 @@ import { VerusPayInvoiceOrdinalVdxfObject } from '../../vdxf/classes/ordinals/Ve import { TEST_CHALLENGE_ID, TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, TEST_CREATEDAT, TEST_EXPIRYHEIGHT, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3, TEST_REQUESTID, TEST_SALT, TEST_SYSTEMID, TEST_TXID } from '../constants/fixtures'; import { ProvisionIdentityDetailsOrdinalVdxfObject } from '../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject'; import { BigNumber } from '../../utils/types/BigNumber'; +import { DataDescriptorResponse } from '../../vdxf/classes/response/DataDescriptorResponse'; +import { VerifiableSignatureData } from '../../vdxf/classes/VerifiableSignatureData'; // Helper function to create TransferDestination from address string function createCompactIdAddressObject(type: BigNumber, address: string): CompactIdAddressObject { @@ -76,6 +83,12 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { newObj = ProvisionIdentityDetailsOrdinalVdxfObject.fromJson(json as any); } else if (obj instanceof AppEncryptionRequestDetailsOrdinalVdxfObject) { newObj = AppEncryptionRequestDetailsOrdinalVdxfObject.fromJson(json as any); + } else if (obj instanceof DataDescriptorResponseOrdinalVdxfObject) { + newObj = DataDescriptorResponseOrdinalVdxfObject.fromJson(json as any); + } else if (obj instanceof UserDataRequestDetailsOrdinalVdxfObject) { + newObj = UserDataRequestDetailsOrdinalVdxfObject.fromJson(json as any); + } else if (obj instanceof UserSpecificDataPacketDetailsOrdinalVdxfObject) { + newObj = UserSpecificDataPacketDetailsOrdinalVdxfObject.fromJson(json as any); } else { throw new Error("Unrecognized type") } @@ -351,6 +364,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { secondaryDerivationNumber: new BN(234), fromAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), toAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); const obj = new AppEncryptionRequestDetailsOrdinalVdxfObject({ data: details }); @@ -364,6 +378,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(d2.secondaryDerivationNumber!.toString()).toEqual(details.secondaryDerivationNumber!.toString()); expect(d2.fromAddress!.toIAddress()).toEqual(details.fromAddress!.toIAddress()); expect(d2.toAddress!.toIAddress()).toEqual(details.toAddress!.toIAddress()); + expect(d2.requestID).toEqual(details.requestID); const json = obj.toJson(); expect(json.data).toBeDefined(); @@ -376,6 +391,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(d3.secondaryDerivationNumber!.toString()).toEqual(details.secondaryDerivationNumber!.toString()); expect(d3.fromAddress!.toIAddress()).toEqual(details.fromAddress!.toIAddress()); expect(d3.toAddress!.toIAddress()).toEqual(details.toAddress!.toIAddress()); + expect(d3.requestID).toEqual(details.requestID); }); it('getOrdinalVdxfObjectClassForType should map to correct classes', () => { @@ -414,4 +430,106 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(parsed.data).toBeUndefined(); }); + it('should serialize / deserialize a DataDescriptorResponse via buffer', () => { + const details = new DataDescriptorResponse({ + flags: new BN(0), + requestID: TEST_CHALLENGE_ID, + createdAt: new BN(2938475938457), + data: new DataDescriptor({ + version: new BN(1, 10), + "flags": new BN(2, 10), + "objectdata": Buffer.from("deadbeef", "hex"), + "salt": Buffer.from("4f66603f256d3f757b6dc3ea44802d4041d2a1901e06005028fd60b85a5878a2", "hex") + }) + }); + + const obj = new DataDescriptorResponseOrdinalVdxfObject({ data: details }); + + const round = roundTripBuffer(obj); + expect(round).toBeInstanceOf(DataDescriptorResponseOrdinalVdxfObject); + + const d2 = (round as DataDescriptorResponseOrdinalVdxfObject).data; + expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); + expect(d2.createdAt!.toNumber()).toEqual(details.createdAt!.toNumber()); + + const json = obj.toJson(); + expect(json.data).toBeDefined(); + const roundJ = roundTripJson(obj); + expect(roundJ).toBeInstanceOf(DataDescriptorResponseOrdinalVdxfObject); + + const d3 = (roundJ as DataDescriptorResponseOrdinalVdxfObject).data; + expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); + expect(d3.createdAt!.toNumber()).toEqual(details.createdAt!.toNumber()); + }); + + it('should serialize / deserialize a UserDataRequestDetailsOrdinalVdxfObject via buffer', () => { + const details = new UserDataRequestDetails({ + version: new BN(1), + flags: UserDataRequestDetails.FULL_DATA.or(UserDataRequestDetails.ATTESTATION).or(UserDataRequestDetails.HAS_SIGNER), + searchDataKey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], + signer: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootSystemName: "VRSC" }), + requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" + }); + + const obj = new UserDataRequestDetailsOrdinalVdxfObject({ data: details }); + + const round = roundTripBuffer(obj); + expect(round).toBeInstanceOf(UserDataRequestDetailsOrdinalVdxfObject); + + const d2 = (round as UserDataRequestDetailsOrdinalVdxfObject).data; + expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); + expect(d2.searchDataKey).toEqual(details.searchDataKey); + expect(d2.signer!.toIAddress()).toEqual(details.signer!.toIAddress()); + + const json = obj.toJson(); + expect(json.data).toBeDefined(); + const roundJ = roundTripJson(obj); + expect(roundJ).toBeInstanceOf(UserDataRequestDetailsOrdinalVdxfObject); + + const d3 = (roundJ as UserDataRequestDetailsOrdinalVdxfObject).data; + expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); + expect(d3.searchDataKey).toEqual(details.searchDataKey); + expect(d3.signer!.toIAddress()).toEqual(details.signer!.toIAddress()); + }); + + it('should serialize / deserialize a UserSpecificDataPacketDetailsOrdinalVdxfObject via buffer', () => { + const details = new UserSpecificDataPacketDetails({ + version: new BN(1), + flags: UserSpecificDataPacketDetails.HAS_STATEMENTS.or(UserSpecificDataPacketDetails.HAS_SIGNATURE), + signableObjects: [DataDescriptor.fromJson({ version: new BN(1), label: "123", objectdata: "0011223344aabbcc", flags: DataDescriptor.FLAG_LABEL_PRESENT })], + statements: ["Statement 1", "Statement 2"], + signature: new VerifiableSignatureData({ + version: new BN(1), + signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), + hashType: new BN(1), + flags: new BN(0), + identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC" }), + }), + requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" + }); + + const obj = new UserSpecificDataPacketDetailsOrdinalVdxfObject({ data: details }); + + const round = roundTripBuffer(obj); + expect(round).toBeInstanceOf(UserSpecificDataPacketDetailsOrdinalVdxfObject); + + const d2 = (round as UserSpecificDataPacketDetailsOrdinalVdxfObject).data; + expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); + expect(d2.signableObjects.length).toBe(1); + expect(d2.statements?.length).toBe(2); + expect(d2.signature?.signatureAsVch.toString('hex')).toBe("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf"); + + const json = obj.toJson(); + expect(json.data).toBeDefined(); + const roundJ = roundTripJson(obj); + expect(roundJ).toBeInstanceOf(UserSpecificDataPacketDetailsOrdinalVdxfObject); + + const d3 = (roundJ as UserSpecificDataPacketDetailsOrdinalVdxfObject).data; + expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); + expect(d3.signableObjects.length).toBe(1); + expect(d3.statements?.length).toBe(2); + expect(d3.signature?.signatureAsVch.toString('hex')).toBe("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf"); + }); + }); \ No newline at end of file diff --git a/src/__tests__/vdxf/requestuserdata.test.ts b/src/__tests__/vdxf/requestuserdata.test.ts deleted file mode 100644 index 7fa8aa40..00000000 --- a/src/__tests__/vdxf/requestuserdata.test.ts +++ /dev/null @@ -1,38 +0,0 @@ - -import { CompactIdAddressObject, RequestUserData, RequestUserDataJson } from "../../vdxf/classes"; - -describe('Serializes and deserializes RequestUserData', () => { - test('(de)serialize RequestUserData', () => { - - const provisionJson: RequestUserDataJson = { - version: 1, - flags: RequestUserData.FULL_DATA.or(RequestUserData.ATTESTATION).or(RequestUserData.HAS_SIGNER).toNumber(), - searchdatakey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], - signer: { version: 1, type: CompactIdAddressObject.IS_IDENTITYID.toNumber(), address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootsystemname: "VRSC" } - } - - const e = RequestUserData.fromJson(provisionJson); - const r = e.toBuffer(); - const rFromBuf = new RequestUserData(); - rFromBuf.fromBuffer(r); - - expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) - }); - test('(de)serialize RequestUserData with requestedkeys', async () => { - - const provisionJson: RequestUserDataJson = { - version: 1, - flags: RequestUserData.PARTIAL_DATA.or(RequestUserData.ATTESTATION).or(RequestUserData.HAS_SIGNER).toNumber(), - searchdatakey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], - signer: { version: 1, type: CompactIdAddressObject.IS_FQN.toNumber(), address: "bob@", rootsystemname: "VRSC" }, - requestedkeys: ["iLB8SG7ErJtTYcG1f4w9RLuMJPpAsjFkiL"] - } - - const e = RequestUserData.fromJson(provisionJson); - const r = e.toBuffer(); - const rFromBuf = new RequestUserData(); - rFromBuf.fromBuffer(r); - - expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) - }); -}); \ No newline at end of file diff --git a/src/__tests__/vdxf/userdatarequestdetails.test.ts b/src/__tests__/vdxf/userdatarequestdetails.test.ts new file mode 100644 index 00000000..0121359e --- /dev/null +++ b/src/__tests__/vdxf/userdatarequestdetails.test.ts @@ -0,0 +1,40 @@ + +import { CompactIdAddressObject, UserDataRequestDetails, UserDataRequestDetailsJson } from "../../vdxf/classes"; + +describe('Serializes and deserializes UserDataRequestDetails', () => { + test('(de)serialize UserDataRequestDetails', () => { + + const provisionJson: UserDataRequestDetailsJson = { + version: 1, + flags: UserDataRequestDetails.FULL_DATA.or(UserDataRequestDetails.ATTESTATION).or(UserDataRequestDetails.HAS_SIGNER).toNumber(), + searchdatakey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], + signer: { version: 1, type: CompactIdAddressObject.IS_IDENTITYID.toNumber(), address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootsystemname: "VRSC" }, + requestid: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" + } + + const e = UserDataRequestDetails.fromJson(provisionJson); + const r = e.toBuffer(); + const rFromBuf = new UserDataRequestDetails(); + rFromBuf.fromBuffer(r); + + expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) + }); + test('(de)serialize UserDataRequestDetails with requestedkeys', async () => { + + const provisionJson: UserDataRequestDetailsJson = { + version: 1, + flags: UserDataRequestDetails.PARTIAL_DATA.or(UserDataRequestDetails.ATTESTATION).or(UserDataRequestDetails.HAS_SIGNER).toNumber(), + searchdatakey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], + signer: { version: 1, type: CompactIdAddressObject.IS_FQN.toNumber(), address: "bob@", rootsystemname: "VRSC" }, + requestedkeys: ["iLB8SG7ErJtTYcG1f4w9RLuMJPpAsjFkiL"], + requestid: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" + } + + const e = UserDataRequestDetails.fromJson(provisionJson); + const r = e.toBuffer(); + const rFromBuf = new UserDataRequestDetails(); + rFromBuf.fromBuffer(r); + + expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) + }); +}); \ No newline at end of file diff --git a/src/__tests__/vdxf/personaluserdatadetails.test.ts b/src/__tests__/vdxf/userspecificdatapacketdetails.test.ts similarity index 80% rename from src/__tests__/vdxf/personaluserdatadetails.test.ts rename to src/__tests__/vdxf/userspecificdatapacketdetails.test.ts index 6867ea68..68054e2c 100644 --- a/src/__tests__/vdxf/personaluserdatadetails.test.ts +++ b/src/__tests__/vdxf/userspecificdatapacketdetails.test.ts @@ -1,18 +1,18 @@ import { BN } from "bn.js"; import { CompactIdAddressObject, - PersonalUserDataDetails, PersonalUserDataDetailsJson + UserSpecificDataPacketDetails, UserSpecificDataPacketDetailsJson } from "../../vdxf/classes"; import { DataDescriptor } from "../../pbaas"; import { VerifiableSignatureData } from "../../vdxf/classes/VerifiableSignatureData"; -describe("PersonalUserDataDetails", () => { +describe("UserSpecificDataPacketDetails", () => { describe("constructor and basic properties", () => { test("creates instance with custom values", () => { - const item = new PersonalUserDataDetails({ - version: new BN(PersonalUserDataDetails.DEFAULT_VERSION), - flags: PersonalUserDataDetails.HAS_STATEMENTS.or(PersonalUserDataDetails.HAS_SIGNATURE), + const item = new UserSpecificDataPacketDetails({ + version: new BN(UserSpecificDataPacketDetails.DEFAULT_VERSION), + flags: UserSpecificDataPacketDetails.HAS_STATEMENTS.or(UserSpecificDataPacketDetails.HAS_SIGNATURE), signableObjects: [DataDescriptor.fromJson({ version: new BN(1), label: "123", objectdata: "0011223344aabbcc", flags: DataDescriptor.FLAG_LABEL_PRESENT })], statements: ["Statement 1", "Statement 2"], signature: new VerifiableSignatureData({ @@ -22,12 +22,13 @@ describe("PersonalUserDataDetails", () => { flags: new BN(0), identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC" }), - }) + }), + requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); const detailsBuffer = item.toBuffer(); - const newDetails = new PersonalUserDataDetails(); + const newDetails = new UserSpecificDataPacketDetails(); newDetails.fromBuffer(detailsBuffer); expect(newDetails.toJson()).toEqual(item.toJson()); diff --git a/src/constants/ordinals/ordinals.ts b/src/constants/ordinals/ordinals.ts index 2aeb0ed8..1823219c 100644 --- a/src/constants/ordinals/ordinals.ts +++ b/src/constants/ordinals/ordinals.ts @@ -11,4 +11,8 @@ export const VDXF_ORDINAL_LOGIN_RESPONSE = new BN(3, 10); export const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new BN(4, 10); export const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new BN(5, 10); export const VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new BN(6, 10); -export const VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS = new BN(7, 10); \ No newline at end of file + +export const VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS = new BN(8, 10); +export const VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET = new BN(10, 10); +export const VDXF_ORDINAL_USER_DATA_REQUEST = new BN(12, 10); +export const VDXF_ORDINAL_DATA_DESCRIPTOR_RESPONSE = new BN(13, 10); diff --git a/src/constants/ordinals/register.ts b/src/constants/ordinals/register.ts index 72e94fa8..b9165292 100644 --- a/src/constants/ordinals/register.ts +++ b/src/constants/ordinals/register.ts @@ -1,6 +1,9 @@ -import { APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY, DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, LOGIN_REQUEST_DETAILS_VDXF_KEY, LOGIN_RESPONSE_DETAILS_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../../vdxf"; +import { APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY, DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, LOGIN_REQUEST_DETAILS_VDXF_KEY, LOGIN_RESPONSE_DETAILS_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY, DATA_DESCRIPTOR_RESPONSE_VDXF_KEY, USER_DATA_REQUEST_DETAILS_VDXF_KEY, USER_SPECIFIC_DATA_PACKET_VDXF_KEY } from "../../vdxf"; import { AppEncryptionRequestDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject"; import { DataDescriptorOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject"; +import { DataDescriptorResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataDescriptorResponseOrdinalVdxfObject"; +import { UserDataRequestDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/UserDataRequestDetailsOrdinalVdxfObject"; +import { UserSpecificDataPacketDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject"; import { IdentityUpdateRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject"; import { IdentityUpdateResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject"; import { LoginRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject"; @@ -8,7 +11,7 @@ import { LoginResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/Logi import { OrdinalVdxfObjectOrdinalMap } from "../../vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap"; import { ProvisionIdentityDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject"; import { VerusPayInvoiceOrdinalVdxfObject } from "../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject"; -import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_LOGIN_RESPONSE, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from "./ordinals"; +import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_LOGIN_RESPONSE, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE, VDXF_ORDINAL_DATA_DESCRIPTOR_RESPONSE, VDXF_ORDINAL_USER_DATA_REQUEST, VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET } from "./ordinals"; export const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVdxfObject, false); @@ -19,4 +22,7 @@ export const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS.toNumber(), APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY.vdxfid, AppEncryptionRequestDetailsOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_DESCRIPTOR_RESPONSE.toNumber(), DATA_DESCRIPTOR_RESPONSE_VDXF_KEY.vdxfid, DataDescriptorResponseOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_USER_DATA_REQUEST.toNumber(), USER_DATA_REQUEST_DETAILS_VDXF_KEY.vdxfid, UserDataRequestDetailsOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET.toNumber(), USER_SPECIFIC_DATA_PACKET_VDXF_KEY.vdxfid, UserSpecificDataPacketDetailsOrdinalVdxfObject, false); } \ No newline at end of file diff --git a/src/constants/ordinals/types.ts b/src/constants/ordinals/types.ts index aac3585e..27f24336 100644 --- a/src/constants/ordinals/types.ts +++ b/src/constants/ordinals/types.ts @@ -12,9 +12,14 @@ import { LoginResponseDetailsJson, ProvisionIdentityDetails, ProvisionIdentityDetailsJson, + UserDataRequestDetails, + UserDataRequestDetailsJson, + UserSpecificDataPacketDetails, + UserSpecificDataPacketDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; +import { DataDescriptorResponse, DataDescriptorResponseJson } from "../../vdxf/classes/response/DataDescriptorResponse"; export type OrdinalVdxfObjectReservedData = DataDescriptor | @@ -24,7 +29,10 @@ export type OrdinalVdxfObjectReservedData = LoginRequestDetails | LoginResponseDetails | ProvisionIdentityDetails | - AppEncryptionRequestDetails; + AppEncryptionRequestDetails | + DataDescriptorResponse | + UserDataRequestDetails | + UserSpecificDataPacketDetails; export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | @@ -34,5 +42,8 @@ export type OrdinalVdxfObjectReservedDataJson = LoginRequestDetailsJson | LoginResponseDetailsJson | ProvisionIdentityDetailsJson | - AppEncryptionRequestDetailsJson; + AppEncryptionRequestDetailsJson | + DataDescriptorResponseJson | + UserDataRequestDetailsJson | + UserSpecificDataPacketDetailsJson; diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index d3ed0212..c6766564 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -47,12 +47,12 @@ export { } from './provisioning/ProvisioningResult' export { Context } from './Context' export { DataCategory } from './PersonalProfile' -export * from './requestobjects/RequestUserData' +export * from './requestobjects/UserDataRequestDetails' export * from './login/LoginRequestDetails' export * from './login/LoginResponseDetails' export * from './requestobjects/ProvisionIdentityDetails' export * from './requestobjects/AppEncryptionRequestDetails' -export * from './requestobjects/PersonalUserDataDetails' +export * from './requestobjects/UserSpecificDataPacketDetails' export * from './CompactIdAddressObject' export { VerifiableSignatureData, diff --git a/src/vdxf/classes/ordinals/DataDescriptorResponseOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/DataDescriptorResponseOrdinalVdxfObject.ts new file mode 100644 index 00000000..f4138b16 --- /dev/null +++ b/src/vdxf/classes/ordinals/DataDescriptorResponseOrdinalVdxfObject.ts @@ -0,0 +1,30 @@ +import { VDXF_ORDINAL_DATA_DESCRIPTOR_RESPONSE } from "../../../constants/ordinals/ordinals"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { AppEncryptionRequestDetails, AppEncryptionRequestDetailsJson } from "../requestobjects/AppEncryptionRequestDetails"; +import { DataDescriptorResponse, DataDescriptorResponseJson } from "../response/DataDescriptorResponse"; + +export class DataDescriptorResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: DataDescriptorResponse; + + constructor( + request: OrdinalVdxfObjectInterfaceTemplate = { + data: new DataDescriptorResponse() + } + ) { + super( + { + type: VDXF_ORDINAL_DATA_DESCRIPTOR_RESPONSE, + data: request.data + }, + DataDescriptorResponse + ); + } + + static fromJson(details: OrdinalVdxfObjectJsonTemplate): DataDescriptorResponseOrdinalVdxfObject { + return new DataDescriptorResponseOrdinalVdxfObject({ + data: DataDescriptorResponse.fromJson(details.data) + }) + } +} \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/UserDataRequestDetailsOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/UserDataRequestDetailsOrdinalVdxfObject.ts new file mode 100644 index 00000000..1ee775ae --- /dev/null +++ b/src/vdxf/classes/ordinals/UserDataRequestDetailsOrdinalVdxfObject.ts @@ -0,0 +1,29 @@ +import { VDXF_ORDINAL_USER_DATA_REQUEST } from "../../../constants/ordinals/ordinals"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { UserDataRequestDetails, UserDataRequestDetailsJson } from "../requestobjects/UserDataRequestDetails"; + +export class UserDataRequestDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: UserDataRequestDetails; + + constructor( + request: OrdinalVdxfObjectInterfaceTemplate = { + data: new UserDataRequestDetails() + } + ) { + super( + { + type: VDXF_ORDINAL_USER_DATA_REQUEST, + data: request.data + }, + UserDataRequestDetails + ); + } + + static fromJson(details: OrdinalVdxfObjectJsonTemplate): UserDataRequestDetailsOrdinalVdxfObject { + return new UserDataRequestDetailsOrdinalVdxfObject({ + data: UserDataRequestDetails.fromJson(details.data) + }) + } +} diff --git a/src/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.ts new file mode 100644 index 00000000..f30fbfec --- /dev/null +++ b/src/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.ts @@ -0,0 +1,29 @@ +import { VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET } from "../../../constants/ordinals/ordinals"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { UserSpecificDataPacketDetails, UserSpecificDataPacketDetailsJson } from "../requestobjects/UserSpecificDataPacketDetails"; + +export class UserSpecificDataPacketDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: UserSpecificDataPacketDetails; + + constructor( + request: OrdinalVdxfObjectInterfaceTemplate = { + data: new UserSpecificDataPacketDetails() + } + ) { + super( + { + type: VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET, + data: request.data + }, + UserSpecificDataPacketDetails + ); + } + + static fromJson(details: OrdinalVdxfObjectJsonTemplate): UserSpecificDataPacketDetailsOrdinalVdxfObject { + return new UserSpecificDataPacketDetailsOrdinalVdxfObject({ + data: UserSpecificDataPacketDetails.fromJson(details.data) + }) + } +} diff --git a/src/vdxf/classes/ordinals/index.ts b/src/vdxf/classes/ordinals/index.ts index 820eaa53..1711a47e 100644 --- a/src/vdxf/classes/ordinals/index.ts +++ b/src/vdxf/classes/ordinals/index.ts @@ -11,5 +11,8 @@ export * from './LoginRequestDetailsOrdinalVdxfObject' export * from './LoginResponseDetailsOrdinalVdxfObject' export * from './AppEncryptionRequestDetailsOrdinalVdxfObject' export * from './ProvisionIdentityDetailsOrdinalVdxfObject' +export * from './DataDescriptorResponseOrdinalVdxfObject' +export * from './UserDataRequestDetailsOrdinalVdxfObject' +export * from './UserSpecificDataPacketDetailsOrdinalVdxfObject' registerOrdinals(); \ No newline at end of file diff --git a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts index 3eefd142..308b5c37 100644 --- a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts @@ -22,6 +22,8 @@ import { decodeSaplingAddress, toBech32 } from '../../../utils/sapling'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { CompactIdAddressObject, CompactIdAddressObjectJson } from '../CompactIdAddressObject'; import varuint from '../../../utils/varuint'; +import { fromBase58Check, toBase58Check } from '../../../utils/address'; +import { I_ADDR_VERSION } from '../../../constants/vdxf'; export interface AppEncryptionRequestDetailsInterface { version?: BigNumber; @@ -31,6 +33,7 @@ export interface AppEncryptionRequestDetailsInterface { secondaryDerivationNumber?: BigNumber; fromAddress?: CompactIdAddressObject; toAddress?: CompactIdAddressObject; + requestID?: string; } export interface AppEncryptionRequestDetailsJson { @@ -41,6 +44,7 @@ export interface AppEncryptionRequestDetailsJson { secondaryderivationnumber?: number; fromaddress?: CompactIdAddressObjectJson; toaddress?: CompactIdAddressObjectJson; + requestid?: string; } /** @@ -69,6 +73,7 @@ export class AppEncryptionRequestDetails implements SerializableEntity { static HAS_FROM_ADDRESS = new BN(1); static HAS_TO_ADDRESS = new BN(2); static HAS_SECONDARY_SEED_DERIVATION_NUMBER = new BN(4); + static HAS_REQUEST_ID = new BN(8); version: BigNumber; flags: BigNumber; @@ -77,6 +82,7 @@ export class AppEncryptionRequestDetails implements SerializableEntity { secondaryDerivationNumber?: BigNumber; fromAddress?: CompactIdAddressObject; toAddress?: CompactIdAddressObject; + requestID?: string; constructor(data?: AppEncryptionRequestDetailsInterface) { this.version = data?.version || AppEncryptionRequestDetails.DEFAULT_VERSION; @@ -86,6 +92,7 @@ export class AppEncryptionRequestDetails implements SerializableEntity { this.secondaryDerivationNumber = data?.secondaryDerivationNumber; this.fromAddress = data?.fromAddress; this.toAddress = data?.toAddress; + this.requestID = data?.requestID; this.setFlags(); } @@ -109,6 +116,10 @@ export class AppEncryptionRequestDetails implements SerializableEntity { flags = flags.or(AppEncryptionRequestDetails.HAS_TO_ADDRESS); } + if (this.requestID != null) { + flags = flags.or(AppEncryptionRequestDetails.HAS_REQUEST_ID); + } + return flags; } @@ -132,6 +143,10 @@ export class AppEncryptionRequestDetails implements SerializableEntity { return flags.and(AppEncryptionRequestDetails.HAS_TO_ADDRESS).gt(new BN(0)); } + hasRequestID(flags: BigNumber = this.flags): boolean { + return flags.and(AppEncryptionRequestDetails.HAS_REQUEST_ID).gt(new BN(0)); + } + getByteLength(): number { const flags = this.calcFlags(); @@ -157,6 +172,10 @@ export class AppEncryptionRequestDetails implements SerializableEntity { length += this.toAddress.getByteLength(); } + if (this.hasRequestID(flags)) { + length += 20; // HASH160_BYTE_LENGTH for i-address + } + return length; } @@ -186,6 +205,11 @@ export class AppEncryptionRequestDetails implements SerializableEntity { writer.writeSlice(this.toAddress.toBuffer()); } + if (this.hasRequestID(flags)) { + + writer.writeSlice(fromBase58Check(this.requestID).hash); + } + return writer.buffer; } @@ -220,6 +244,10 @@ export class AppEncryptionRequestDetails implements SerializableEntity { this.toAddress = CompactId; } + if (this.hasRequestID()) { + this.requestID = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); + } + return reader.offset; } @@ -233,8 +261,9 @@ export class AppEncryptionRequestDetails implements SerializableEntity { encrypttozaddress: this.encryptToZAddress, derivationnumber: this.derivationNumber.toNumber(), secondaryderivationnumber: this.secondaryDerivationNumber?.toNumber(), - fromaddress: this.fromAddress.toJson(), - toaddress: this.toAddress.toJson() + fromaddress: this.fromAddress?.toJson(), + toaddress: this.toAddress?.toJson(), + requestid: this.requestID }; } @@ -253,6 +282,10 @@ export class AppEncryptionRequestDetails implements SerializableEntity { if(instance.hasToAddress()) { instance.toAddress = CompactIdAddressObject.fromJson(json?.toaddress); } + + if(instance.hasRequestID()) { + instance.requestID = json?.requestid; + } return instance; } diff --git a/src/vdxf/classes/requestobjects/RequestUserData.ts b/src/vdxf/classes/requestobjects/UserDataRequestDetails.ts similarity index 77% rename from src/vdxf/classes/requestobjects/RequestUserData.ts rename to src/vdxf/classes/requestobjects/UserDataRequestDetails.ts index cbda797a..7e5bfb59 100644 --- a/src/vdxf/classes/requestobjects/RequestUserData.ts +++ b/src/vdxf/classes/requestobjects/UserDataRequestDetails.ts @@ -28,24 +28,27 @@ const { BufferReader, BufferWriter } = bufferutils; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { CompactIdAddressObject, CompactIdAddressObjectJson } from '../CompactIdAddressObject'; import { fromBase58Check, toBase58Check } from '../../../utils/address'; +import { I_ADDR_VERSION } from '../../../constants/vdxf'; -export interface RequestUserDataInterface { +export interface UserDataRequestDetailsInterface { version?: BigNumber; flags: BigNumber; searchDataKey: Array<{[key: string]: string}>; signer?: CompactIdAddressObject; requestedKeys?: string[]; + requestID?: string; } -export interface RequestUserDataJson { +export interface UserDataRequestDetailsJson { version: number; flags: number; searchdatakey: Array<{[key: string]: string}>; // ID object of the specific information requested signer?: CompactIdAddressObjectJson; requestedkeys?: string[]; // Specific keys within the data object being requested + requestid?: string; } -export class RequestUserData implements SerializableEntity { +export class UserDataRequestDetails implements SerializableEntity { static VERSION_INVALID = new BN(0); static FIRST_VERSION = new BN(1); static LAST_VERSION = new BN(1); @@ -61,19 +64,22 @@ export class RequestUserData implements SerializableEntity { static HAS_SIGNER = new BN(64); static HAS_REQUESTED_KEYS = new BN(128); + static HAS_REQUEST_ID = new BN(256); version: BigNumber; flags: BigNumber; searchDataKey: Array<{[key: string]: string}>; signer?: CompactIdAddressObject; requestedKeys?: string[]; + requestID?: string; - constructor(data?: RequestUserDataInterface) { - this.version = data?.version || RequestUserData.DEFAULT_VERSION; + constructor(data?: UserDataRequestDetailsInterface) { + this.version = data?.version || UserDataRequestDetails.DEFAULT_VERSION; this.flags = data?.flags || new BN(0); this.searchDataKey = data?.searchDataKey || []; this.signer = data?.signer; this.requestedKeys = data?.requestedKeys; + this.requestID = data?.requestID; this.setFlags(); } @@ -81,10 +87,13 @@ export class RequestUserData implements SerializableEntity { calcFlags(): BigNumber { let flags = new BN(0); if (this.requestedKeys && this.requestedKeys.length > 0) { - flags = flags.or(RequestUserData.HAS_REQUESTED_KEYS); + flags = flags.or(UserDataRequestDetails.HAS_REQUESTED_KEYS); } if (this.signer) { - flags = flags.or(RequestUserData.HAS_SIGNER); + flags = flags.or(UserDataRequestDetails.HAS_SIGNER); + } + if (this.requestID) { + flags = flags.or(UserDataRequestDetails.HAS_REQUEST_ID); } return flags; @@ -95,11 +104,15 @@ export class RequestUserData implements SerializableEntity { } hasSigner(): boolean { - return this.flags.and(RequestUserData.HAS_SIGNER).eq(RequestUserData.HAS_SIGNER); + return this.flags.and(UserDataRequestDetails.HAS_SIGNER).eq(UserDataRequestDetails.HAS_SIGNER); } hasRequestedKeys(): boolean { - return this.flags.and(RequestUserData.HAS_REQUESTED_KEYS).eq(RequestUserData.HAS_REQUESTED_KEYS); + return this.flags.and(UserDataRequestDetails.HAS_REQUESTED_KEYS).eq(UserDataRequestDetails.HAS_REQUESTED_KEYS); + } + + hasRequestID(): boolean { + return this.flags.and(UserDataRequestDetails.HAS_REQUEST_ID).eq(UserDataRequestDetails.HAS_REQUEST_ID); } /** @@ -107,7 +120,7 @@ export class RequestUserData implements SerializableEntity { * @returns True if exactly one data type flag is set */ hasDataTypeSet(): boolean { - const dataTypeFlags = RequestUserData.FULL_DATA.or(RequestUserData.PARTIAL_DATA).or(RequestUserData.COLLECTION); + const dataTypeFlags = UserDataRequestDetails.FULL_DATA.or(UserDataRequestDetails.PARTIAL_DATA).or(UserDataRequestDetails.COLLECTION); const setDataFlags = this.flags.and(dataTypeFlags); // Check if exactly one flag is set by verifying it's a power of 2 @@ -119,7 +132,7 @@ export class RequestUserData implements SerializableEntity { * @returns True if exactly one request type flag is set */ hasRequestTypeSet(): boolean { - const requestTypeFlags = RequestUserData.ATTESTATION.or(RequestUserData.CLAIM).or(RequestUserData.CREDENTIAL); + const requestTypeFlags = UserDataRequestDetails.ATTESTATION.or(UserDataRequestDetails.CLAIM).or(UserDataRequestDetails.CREDENTIAL); const setRequestFlags = this.flags.and(requestTypeFlags); // Check if exactly one flag is set by verifying it's a power of 2 @@ -127,7 +140,7 @@ export class RequestUserData implements SerializableEntity { } isValid(): boolean { - let valid = this.version.gte(RequestUserData.FIRST_VERSION) && this.version.lte(RequestUserData.LAST_VERSION); + let valid = this.version.gte(UserDataRequestDetails.FIRST_VERSION) && this.version.lte(UserDataRequestDetails.LAST_VERSION); // Check that exactly one data type flag is set valid &&= this.hasDataTypeSet(); @@ -167,6 +180,10 @@ export class RequestUserData implements SerializableEntity { } } } + + if (this.hasRequestID()) { + length += 20; // HASH160_BYTE_LENGTH for i-address + } return length; } @@ -193,7 +210,11 @@ export class RequestUserData implements SerializableEntity { for (const key of this.requestedKeys) { writer.writeSlice(fromBase58Check(key).hash); // 20-byte VDXF key } - } + } + + if (this.hasRequestID()) { + writer.writeSlice(fromBase58Check(this.requestID).hash); + } return writer.buffer; } @@ -209,7 +230,7 @@ export class RequestUserData implements SerializableEntity { const keyHash = reader.readSlice(20); // 20-byte VDXF key const valueBuffer = reader.readVarSlice(); const value = valueBuffer.toString('utf8'); - const key = toBase58Check(keyHash, 102); + const key = toBase58Check(keyHash, I_ADDR_VERSION); this.searchDataKey.push({ [key]: value }); } @@ -225,33 +246,39 @@ export class RequestUserData implements SerializableEntity { this.requestedKeys = []; for (let i = 0; i < requestedKeysLength; i++) { const keyHash = reader.readSlice(20); // 20-byte VDXF key - const key = toBase58Check(keyHash, 102); + const key = toBase58Check(keyHash, I_ADDR_VERSION); this.requestedKeys.push(key); } } + if (this.hasRequestID()) { + this.requestID = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); + } + return reader.offset; } - toJson(): RequestUserDataJson { + toJson(): UserDataRequestDetailsJson { const flags = this.calcFlags(); return { version: this.version.toNumber(), flags: flags.toNumber(), searchdatakey: this.searchDataKey, - signer: this.signer.toJson(), - requestedkeys: this.requestedKeys + signer: this.signer?.toJson(), + requestedkeys: this.requestedKeys, + requestid: this.requestID }; } - static fromJson(json: RequestUserDataJson) { - const requestData = new RequestUserData(); + static fromJson(json: UserDataRequestDetailsJson) { + const requestData = new UserDataRequestDetails(); requestData.version = new BN(json.version); requestData.flags = new BN(json.flags); requestData.searchDataKey = json.searchdatakey; requestData.signer = json.signer ? CompactIdAddressObject.fromJson(json.signer) : undefined; requestData.requestedKeys = json.requestedkeys; + requestData.requestID = json.requestid; return requestData; } diff --git a/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts b/src/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.ts similarity index 74% rename from src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts rename to src/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.ts index 799ad158..c06c40b9 100644 --- a/src/vdxf/classes/requestobjects/PersonalUserDataDetails.ts +++ b/src/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.ts @@ -1,5 +1,6 @@ /** - * PersonalUserDataDetails - Class for handling personal user data transfer requests + * UserSpecificDataPacketDetails - Class for sending personal data to user or requesting the user + * signature on personal data * * This class is used when an application is requesting to transfer or receive personal * user data. The request includes: @@ -13,6 +14,8 @@ * statements or conditions, and whether it's for the user's signature or being * transmitted to/from the user. This enables secure, user-controlled personal * data sharing with clear visibility into what data is being transferred. + * + */ import { BigNumber } from '../../../utils/types/BigNumber'; @@ -22,25 +25,31 @@ import bufferutils from '../../../utils/bufferutils'; const { BufferReader, BufferWriter } = bufferutils; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { DataDescriptor, DataDescriptorJson } from '../../../pbaas'; -import { VerifiableSignatureData, VerifiableSignatureDataJson } from '../../../vdxf/classes/VerifiableSignatureData'; +import { VerifiableSignatureData, VerifiableSignatureDataJson } from '../VerifiableSignatureData'; +import { fromBase58Check, toBase58Check } from '../../../utils/address'; +import { I_ADDR_VERSION } from '../../../constants/vdxf'; -export interface PersonalUserDataDetailsInterface { +export interface UserSpecificDataPacketDetailsInterface { version?: BigNumber; flags: BigNumber; signableObjects: Array; statements?: Array; signature?: VerifiableSignatureData; + requestID?: string; } -export interface PersonalUserDataDetailsJson { +export interface UserSpecificDataPacketDetailsJson { version: number; flags: number; signableobjects: Array; // Array of signable data objects statements?: Array; - signature?: VerifiableSignatureDataJson + signature?: VerifiableSignatureDataJson; + requestid?: string; } -export class PersonalUserDataDetails implements SerializableEntity { + +// User_specific_data_packet +export class UserSpecificDataPacketDetails implements SerializableEntity { static VERSION_INVALID = new BN(0); static FIRST_VERSION = new BN(1); static LAST_VERSION = new BN(1); @@ -52,19 +61,22 @@ export class PersonalUserDataDetails implements SerializableEntity { static FOR_USERS_SIGNATURE = new BN(4); static FOR_TRANSMITTAL_TO_USER = new BN(8); static HAS_URL_FOR_DOWNLOAD = new BN(16); + static HAS_REQUEST_ID = new BN(32); version: BigNumber; flags: BigNumber; signableObjects: Array; statements?: Array; signature?: VerifiableSignatureData; + requestID?: string; - constructor(data?: PersonalUserDataDetailsInterface) { - this.version = data?.version || PersonalUserDataDetails.DEFAULT_VERSION; + constructor(data?: UserSpecificDataPacketDetailsInterface) { + this.version = data?.version || UserSpecificDataPacketDetails.DEFAULT_VERSION; this.flags = data?.flags || new BN(0); this.signableObjects = data?.signableObjects || []; this.statements = data?.statements || []; this.signature = data?.signature || undefined; + this.requestID = data?.requestID; this.setFlags(); } @@ -77,27 +89,35 @@ export class PersonalUserDataDetails implements SerializableEntity { let flags = new BN(0); if (this.statements && this.statements.length > 0) { - flags = flags.or(PersonalUserDataDetails.HAS_STATEMENTS); + flags = flags.or(UserSpecificDataPacketDetails.HAS_STATEMENTS); } if (this.signature ) { - flags = flags.or(PersonalUserDataDetails.HAS_SIGNATURE); + flags = flags.or(UserSpecificDataPacketDetails.HAS_SIGNATURE); + } + + if (this.requestID) { + flags = flags.or(UserSpecificDataPacketDetails.HAS_REQUEST_ID); } return flags; } hasStatements(): boolean { - return this.flags.and(PersonalUserDataDetails.HAS_STATEMENTS).eq(PersonalUserDataDetails.HAS_STATEMENTS); + return this.flags.and(UserSpecificDataPacketDetails.HAS_STATEMENTS).eq(UserSpecificDataPacketDetails.HAS_STATEMENTS); } hasSignature(): boolean { - return this.flags.and(PersonalUserDataDetails.HAS_SIGNATURE).eq(PersonalUserDataDetails.HAS_SIGNATURE); + return this.flags.and(UserSpecificDataPacketDetails.HAS_SIGNATURE).eq(UserSpecificDataPacketDetails.HAS_SIGNATURE); + } + + hasRequestID(): boolean { + return this.flags.and(UserSpecificDataPacketDetails.HAS_REQUEST_ID).eq(UserSpecificDataPacketDetails.HAS_REQUEST_ID); } isValid(): boolean { - let valid = this.version.gte(PersonalUserDataDetails.FIRST_VERSION) && - this.version.lte(PersonalUserDataDetails.LAST_VERSION); + let valid = this.version.gte(UserSpecificDataPacketDetails.FIRST_VERSION) && + this.version.lte(UserSpecificDataPacketDetails.LAST_VERSION); // Check that we have signable objects valid &&= this.signableObjects.length > 0; @@ -137,6 +157,10 @@ export class PersonalUserDataDetails implements SerializableEntity { length += this.signature.getByteLength(); } + if (this.hasRequestID()) { + length += 20; // HASH160_BYTE_LENGTH for i-address + } + return length; } @@ -164,6 +188,10 @@ export class PersonalUserDataDetails implements SerializableEntity { writer.writeSlice(this.signature.toBuffer()); } + if (this.hasRequestID()) { + writer.writeSlice(fromBase58Check(this.requestID).hash); + } + return writer.buffer; } @@ -198,10 +226,14 @@ export class PersonalUserDataDetails implements SerializableEntity { this.signature = signature; } + if (this.hasRequestID()) { + this.requestID = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); + } + return reader.offset; } - toJson(): PersonalUserDataDetailsJson { + toJson(): UserSpecificDataPacketDetailsJson { const flags = this.calcFlags(); return { @@ -209,12 +241,13 @@ export class PersonalUserDataDetails implements SerializableEntity { flags: flags.toNumber(), signableobjects: this.signableObjects.map(obj => obj.toJson()), statements: this.statements, - signature: this.signature ? this.signature.toJson() : undefined + signature: this.signature ? this.signature.toJson() : undefined, + requestid: this.requestID }; } - static fromJson(json: PersonalUserDataDetailsJson): PersonalUserDataDetails { - const instance = new PersonalUserDataDetails(); + static fromJson(json: UserSpecificDataPacketDetailsJson): UserSpecificDataPacketDetails { + const instance = new UserSpecificDataPacketDetails(); instance.version = new BN(json.version); instance.flags = new BN(json.flags); @@ -228,6 +261,7 @@ export class PersonalUserDataDetails implements SerializableEntity { instance.signableObjects = dataDescriptorObjects; instance.statements = json.statements || []; instance.signature = json.signature ? VerifiableSignatureData.fromJson(json.signature) : undefined; + instance.requestID = json.requestid; return instance; } } \ No newline at end of file diff --git a/src/vdxf/classes/response/DataDescriptorResponse.ts b/src/vdxf/classes/response/DataDescriptorResponse.ts new file mode 100644 index 00000000..fe7532ed --- /dev/null +++ b/src/vdxf/classes/response/DataDescriptorResponse.ts @@ -0,0 +1,171 @@ + + + +/** + * DataDescriptorResponse - Class for providing structured responses to various request types + * + * This class serves as a universal response mechanism that can be used to reply to multiple + * types of requests. It packages response data within a DataDescriptor along with metadata + * for request tracking and timestamping. + * + * USAGE AS RESPONSE TO DIFFERENT REQUEST TYPES: + * + * 1. AppEncryptionRequestDetails Response: + * - The DataDescriptor 'data' field contains the encrypted derived seed + * - The requestID references the original AppEncryptionRequestDetails.requestID + * - Enables secure delivery of application-specific encrypted keys + * + * 2. UserDataRequestDetails Response: + * - The DataDescriptor 'data' field contains requested user data/attestations + * - The requestID references the original UserDataRequestDetails.requestID + * - Allows selective disclosure of personal information + * + * 3. UserSpecificDataPacketDetails Response: + * - The DataDescriptor 'data' field contains the response data or signed content + * - The requestID references the original UserSpecificDataPacketDetails.requestID + * - Supports bidirectional data exchange with signatures and statements + * + * REQUEST-RESPONSE CORRELATION: + * Each of the above request types includes its own requestID field. This response object's + * requestID field can be used to match responses back to their originating requests, enabling + * proper request-response correlation in asynchronous communication flows. + * + * GENERAL DATA REPLIES: + * This response format can also be used for other general data replies where: + * - Structured data needs to be transmitted via DataDescriptor + * - Request tracking through requestID is desired + * - Timestamp metadata (createdAt) is needed for the response + * - Response validation and integrity checking via SHA-256 is required + */ + +import { BigNumber } from '../../../utils/types/BigNumber'; +import { BN } from 'bn.js'; +import varint from '../../../utils/varint'; +import bufferutils from '../../../utils/bufferutils'; +const { BufferReader, BufferWriter } = bufferutils; +import { decodeSaplingAddress, toBech32 } from '../../../utils/sapling'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { fromBase58Check, toBase58Check } from '../../../utils/address'; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../../../constants/vdxf'; +import { DataDescriptor, DataDescriptorJson } from '../../../pbaas'; +import createHash = require("create-hash"); + +export interface DataDescriptorResponseInterface { + flags?: BigNumber; + requestID?: string; // ID of request, to be referenced in response + createdAt: BigNumber; // Unix timestamp of response creation + data: DataDescriptor; +} + +export interface DataDescriptorResponseJson { + flags?: number; + requestid?: string; // ID of request, to be referenced in response + createdat: number; // Unix timestamp of response creation + data: DataDescriptorJson; +} + +export class DataDescriptorResponse implements SerializableEntity { + flags?: BigNumber; + requestID?: string; // ID of request, to be referenced in response + createdAt: BigNumber; // Unix timestamp of response creation + data: DataDescriptor; + + static APP_ENCRYPTION_RESPONSE_VALID = new BN(1, 10); + static APP_ENCRYPTION_RESPONSE_CONTAINS_REQUEST_ID = new BN(2, 10); + + constructor (data?: { + flags?: BigNumber, + requestID?: string, + createdAt: BigNumber, + data: DataDescriptor + }) { + this.flags = data && data.flags ? data.flags : new BN("0", 10); + this.createdAt = data?.createdAt; + + if (data?.requestID) { + if (!this.containsRequestID()) this.toggleContainsRequestID(); + this.requestID = data.requestID; + } + + this.data = data?.data; + + } + + containsRequestID() { + return !!(this.flags.and(DataDescriptorResponse.APP_ENCRYPTION_RESPONSE_CONTAINS_REQUEST_ID).toNumber()); + } + + toggleContainsRequestID() { + this.flags = this.flags.xor(DataDescriptorResponse.APP_ENCRYPTION_RESPONSE_CONTAINS_REQUEST_ID); + } + + toSha256() { + return createHash("sha256").update(this.toBuffer()).digest(); + } + + getByteLength(): number { + let length = 0; + + length += varint.encodingLength(this.flags); + + if (this.containsRequestID()) { + length += HASH160_BYTE_LENGTH; + } + + length += varint.encodingLength(this.createdAt); + length += this.data.getByteLength(); + + return length; + } + + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + + writer.writeVarInt(this.flags); + + if (this.containsRequestID()) { + writer.writeSlice(fromBase58Check(this.requestID).hash); + } + + writer.writeVarInt(this.createdAt); + writer.writeSlice(this.data.toBuffer()); + + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset: number = 0) { + const reader = new BufferReader(buffer, offset); + + this.flags = reader.readVarInt(); + + if (this.containsRequestID()) { + this.requestID = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); + } + + this.createdAt = reader.readVarInt(); + + this.data = new DataDescriptor(); + this.data.fromBuffer(reader.buffer, reader.offset); + reader.offset += this.data.getByteLength(); + + return reader.offset; + } + + toJson(): DataDescriptorResponseJson { + return { + flags: this.flags.toNumber(), + requestid: this.containsRequestID() ? this.requestID : undefined, + createdat: this.createdAt.toNumber(), + data: this.data.toJson() + } + } + + static fromJson(json: DataDescriptorResponseJson): DataDescriptorResponse { + return new DataDescriptorResponse({ + flags: new BN(json.flags, 10), + requestID: json.requestid, + createdAt: new BN(json.createdat, 10), + data: DataDescriptor.fromJson(json.data) + }); + } +} diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index 7d59b99d..73c3c44f 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -673,4 +673,33 @@ export const APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface = { "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, "vdxfid": "iEWvbyzxSQ3G2sdBTeU4DUBHhNFpd6rUFx" +} + +export const DATA_DESCRIPTOR_RESPONSE_VDXF_KEY: VDXFKeyInterface = { + "hash160result": "2ff523bad4a35bfa3db954295acd192e1d805dd9", + "vdxfid": "iPHr5EDp6QGdbAJS8Rqu8293HyQrYjgRap", + "indexid": "xU7xY2etwiVJDLBTz7W46QfaKdRsSoos4g", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::response.generic.datadescriptor" + } +} +export const USER_DATA_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface = { + "vdxfid": "iHFtTBRZufoaL9N8wDotQrvxAZrUfMv82u", + "indexid": "xN5zuyrekz2ExKFAnuU3PFTVCDsVSc5NMp", + "hash160result": "3f5e59f4434b601a64aaa4de8fd66dc336e62d97", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::request.generic.userdata.details" + } +} + +export const USER_SPECIFIC_DATA_PACKET_VDXF_KEY: VDXFKeyInterface = { + "vdxfid": "iBfMRtzM1ztWZ84RiBsbCNj9U1tpbiF5PS", + "indexid": "xGVTthRRsK7BBHwTZsXkAmFgVfuqSM24tK", + "hash160result": "dc4dd05e257f6b3ac266c2a6086dc2c54f3bcd59", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::request.generic.user.specificdata" + } } \ No newline at end of file From 3ca2814c036ed8e43ab01a6a03805d52810d4f85 Mon Sep 17 00:00:00 2001 From: monkins Date: Wed, 19 Nov 2025 18:58:34 +0000 Subject: [PATCH 057/123] Fix wording msitake --- src/vdxf/classes/response/DataDescriptorResponse.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/vdxf/classes/response/DataDescriptorResponse.ts b/src/vdxf/classes/response/DataDescriptorResponse.ts index fe7532ed..a405c95f 100644 --- a/src/vdxf/classes/response/DataDescriptorResponse.ts +++ b/src/vdxf/classes/response/DataDescriptorResponse.ts @@ -70,8 +70,8 @@ export class DataDescriptorResponse implements SerializableEntity { createdAt: BigNumber; // Unix timestamp of response creation data: DataDescriptor; - static APP_ENCRYPTION_RESPONSE_VALID = new BN(1, 10); - static APP_ENCRYPTION_RESPONSE_CONTAINS_REQUEST_ID = new BN(2, 10); + + static RESPONSE_CONTAINS_REQUEST_ID = new BN(2, 10); constructor (data?: { flags?: BigNumber, @@ -92,11 +92,11 @@ export class DataDescriptorResponse implements SerializableEntity { } containsRequestID() { - return !!(this.flags.and(DataDescriptorResponse.APP_ENCRYPTION_RESPONSE_CONTAINS_REQUEST_ID).toNumber()); + return !!(this.flags.and(DataDescriptorResponse.RESPONSE_CONTAINS_REQUEST_ID).toNumber()); } toggleContainsRequestID() { - this.flags = this.flags.xor(DataDescriptorResponse.APP_ENCRYPTION_RESPONSE_CONTAINS_REQUEST_ID); + this.flags = this.flags.xor(DataDescriptorResponse.RESPONSE_CONTAINS_REQUEST_ID); } toSha256() { From 433de022a2a9fee364910131e6aef2cbd3846a9f Mon Sep 17 00:00:00 2001 From: michaeltout Date: Thu, 20 Nov 2025 14:07:37 +0100 Subject: [PATCH 058/123] Correct app ancryption request name to omit "details" because it doesn't represent a "details" object --- dist/constants/ordinals/ordinals.d.ts | 2 +- dist/constants/ordinals/ordinals.js | 4 ++-- dist/constants/ordinals/register.js | 2 +- dist/vdxf/classes/ResponseUri.js | 2 ++ .../AppEncryptionRequestDetailsOrdinalVdxfObject.js | 2 +- dist/vdxf/keys.d.ts | 2 +- dist/vdxf/keys.js | 12 ++++++------ src/__tests__/vdxf/ordinalvdxfobject.test.ts | 4 ++-- src/constants/ordinals/ordinals.ts | 2 +- src/constants/ordinals/register.ts | 6 +++--- .../AppEncryptionRequestDetailsOrdinalVdxfObject.ts | 4 ++-- src/vdxf/keys.ts | 10 +++++----- 12 files changed, 27 insertions(+), 25 deletions(-) diff --git a/dist/constants/ordinals/ordinals.d.ts b/dist/constants/ordinals/ordinals.d.ts index 0a7e0a15..c26b7e5e 100644 --- a/dist/constants/ordinals/ordinals.d.ts +++ b/dist/constants/ordinals/ordinals.d.ts @@ -8,4 +8,4 @@ export declare const VDXF_ORDINAL_LOGIN_RESPONSE: import("bn.js"); export declare const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST: import("bn.js"); export declare const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE: import("bn.js"); export declare const VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS: import("bn.js"); -export declare const VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS: import("bn.js"); +export declare const VDXF_ORDINAL_APP_ENCRYPTION_REQUEST: import("bn.js"); diff --git a/dist/constants/ordinals/ordinals.js b/dist/constants/ordinals/ordinals.js index 4ec866a1..ada36edb 100644 --- a/dist/constants/ordinals/ordinals.js +++ b/dist/constants/ordinals/ordinals.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS = exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = exports.VDXF_ORDINAL_LOGIN_RESPONSE = exports.VDXF_ORDINAL_LOGIN_REQUEST = exports.VDXF_ORDINAL_VERUSPAY_INVOICE = exports.VDXF_ORDINAL_DATA_DESCRIPTOR = exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = void 0; +exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = exports.VDXF_ORDINAL_LOGIN_RESPONSE = exports.VDXF_ORDINAL_LOGIN_REQUEST = exports.VDXF_ORDINAL_VERUSPAY_INVOICE = exports.VDXF_ORDINAL_DATA_DESCRIPTOR = exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = void 0; const bn_js_1 = require("bn.js"); exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = new bn_js_1.BN(102, 10); exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new bn_js_1.BN(103, 10); @@ -12,4 +12,4 @@ exports.VDXF_ORDINAL_LOGIN_RESPONSE = new bn_js_1.BN(3, 10); exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new bn_js_1.BN(4, 10); exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new bn_js_1.BN(5, 10); exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new bn_js_1.BN(6, 10); -exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS = new bn_js_1.BN(7, 10); +exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = new bn_js_1.BN(7, 10); diff --git a/dist/constants/ordinals/register.js b/dist/constants/ordinals/register.js index a88c50d7..5e287783 100644 --- a/dist/constants/ordinals/register.js +++ b/dist/constants/ordinals/register.js @@ -20,6 +20,6 @@ const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), vdxf_1.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVdxfObject_1.IdentityUpdateRequestOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), vdxf_1.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject_1.IdentityUpdateResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), vdxf_1.PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVdxfObject_1.ProvisionIdentityDetailsOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS.toNumber(), vdxf_1.APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY.vdxfid, AppEncryptionRequestDetailsOrdinalVdxfObject_1.AppEncryptionRequestDetailsOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST.toNumber(), vdxf_1.APP_ENCRYPTION_REQUEST_VDXF_KEY.vdxfid, AppEncryptionRequestDetailsOrdinalVdxfObject_1.AppEncryptionRequestDetailsOrdinalVdxfObject, false); }; exports.registerOrdinals = registerOrdinals; diff --git a/dist/vdxf/classes/ResponseUri.js b/dist/vdxf/classes/ResponseUri.js index b6d42c39..5c66ddd7 100644 --- a/dist/vdxf/classes/ResponseUri.js +++ b/dist/vdxf/classes/ResponseUri.js @@ -5,6 +5,8 @@ const bn_js_1 = require("bn.js"); const varuint_1 = require("../../utils/varuint"); const bufferutils_1 = require("../../utils/bufferutils"); class ResponseUri { + // TODO: Add TYPE_Z_ADDR_REF where response is encrypted and sent to encoded sapling address, + // with optional amount specified constructor(data) { if (data) { if (data.uri != null) { diff --git a/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.js index 01ee0780..da6b289a 100644 --- a/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.js +++ b/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.js @@ -9,7 +9,7 @@ class AppEncryptionRequestDetailsOrdinalVdxfObject extends SerializableEntityOrd data: new AppEncryptionRequestDetails_1.AppEncryptionRequestDetails() }) { super({ - type: ordinals_1.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS, + type: ordinals_1.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, data: request.data }, AppEncryptionRequestDetails_1.AppEncryptionRequestDetails); } diff --git a/dist/vdxf/keys.d.ts b/dist/vdxf/keys.d.ts index 7a8ee0c4..cda6e0bb 100644 --- a/dist/vdxf/keys.d.ts +++ b/dist/vdxf/keys.d.ts @@ -79,4 +79,4 @@ export declare const ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS: VDXFKeyInter export declare const LOGIN_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const LOGIN_RESPONSE_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const PROVISION_IDENTITY_DETAILS_VDXF_KEY: VDXFKeyInterface; -export declare const APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface; +export declare const APP_ENCRYPTION_REQUEST_VDXF_KEY: VDXFKeyInterface; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index 658c6864..c7513e71 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; -exports.APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.LOGIN_RESPONSE_DETAILS_VDXF_KEY = exports.LOGIN_REQUEST_DETAILS_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; +exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.LOGIN_RESPONSE_DETAILS_VDXF_KEY = exports.LOGIN_REQUEST_DETAILS_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; exports.VERUSPAY_INVOICE_VDXF_KEY = { hash160result: "628efc28c2e2d40050e1a9de7a93e7ddf2aa0076", qualifiedname: { @@ -577,12 +577,12 @@ exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = { }, "vdxfid": "iGHab566xc2sHmPNCGGA4L5MT7LGoJzmCa" }; -exports.APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY = { - "hash160result": "f178871fedb335cf6659f8527a6c9652bc8e1d79", - "indexid": "xKM34nS3HiFvf3WDKL8DBrhpj2GqVWEaH4", +exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = { + "hash160result": "5f398b165b8ea8c547b5f473f951178fc5482db6", + "indexid": "xQuu8CLZyYyPcB7gMkyP2D3pw8UgHevmcM", "qualifiedname": { - "name": "vrsc::application.encryption.request.details", + "name": "vrsc::application.encryption.request", "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, - "vdxfid": "iEWvbyzxSQ3G2sdBTeU4DUBHhNFpd6rUFx" + "vdxfid": "iL5nfPuV8Ekiz1EeW5KE3pXHuUTfQf6QC9" }; diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index bfc1fb38..05bb943e 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -26,7 +26,7 @@ import { } from '../../vdxf/classes'; import { DEFAULT_VERUS_CHAINID } from '../../constants/pbaas'; import { fromBase58Check } from '../../utils/address'; -import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from '../../constants/ordinals/ordinals'; +import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from '../../constants/ordinals/ordinals'; import { VerusPayInvoiceOrdinalVdxfObject } from '../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject'; import { TEST_CHALLENGE_ID, TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, TEST_CREATEDAT, TEST_EXPIRYHEIGHT, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3, TEST_REQUESTID, TEST_SALT, TEST_SYSTEMID, TEST_TXID } from '../constants/fixtures'; import { ProvisionIdentityDetailsOrdinalVdxfObject } from '../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject'; @@ -393,7 +393,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { .toBe(LoginRequestOrdinalVdxfObject); expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS)) .toBe(ProvisionIdentityDetailsOrdinalVdxfObject); - expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS)) + expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST)) .toBe(AppEncryptionRequestDetailsOrdinalVdxfObject); // unrecognized diff --git a/src/constants/ordinals/ordinals.ts b/src/constants/ordinals/ordinals.ts index 2aeb0ed8..1ad9842c 100644 --- a/src/constants/ordinals/ordinals.ts +++ b/src/constants/ordinals/ordinals.ts @@ -11,4 +11,4 @@ export const VDXF_ORDINAL_LOGIN_RESPONSE = new BN(3, 10); export const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new BN(4, 10); export const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new BN(5, 10); export const VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new BN(6, 10); -export const VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS = new BN(7, 10); \ No newline at end of file +export const VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = new BN(7, 10); \ No newline at end of file diff --git a/src/constants/ordinals/register.ts b/src/constants/ordinals/register.ts index 72e94fa8..8e51418f 100644 --- a/src/constants/ordinals/register.ts +++ b/src/constants/ordinals/register.ts @@ -1,4 +1,4 @@ -import { APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY, DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, LOGIN_REQUEST_DETAILS_VDXF_KEY, LOGIN_RESPONSE_DETAILS_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../../vdxf"; +import { APP_ENCRYPTION_REQUEST_VDXF_KEY, DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, LOGIN_REQUEST_DETAILS_VDXF_KEY, LOGIN_RESPONSE_DETAILS_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../../vdxf"; import { AppEncryptionRequestDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject"; import { DataDescriptorOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject"; import { IdentityUpdateRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject"; @@ -8,7 +8,7 @@ import { LoginResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/Logi import { OrdinalVdxfObjectOrdinalMap } from "../../vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap"; import { ProvisionIdentityDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject"; import { VerusPayInvoiceOrdinalVdxfObject } from "../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject"; -import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_LOGIN_RESPONSE, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from "./ordinals"; +import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_LOGIN_RESPONSE, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from "./ordinals"; export const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVdxfObject, false); @@ -18,5 +18,5 @@ export const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS.toNumber(), APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY.vdxfid, AppEncryptionRequestDetailsOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST.toNumber(), APP_ENCRYPTION_REQUEST_VDXF_KEY.vdxfid, AppEncryptionRequestDetailsOrdinalVdxfObject, false); } \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.ts index 94c4a9f6..7a304135 100644 --- a/src/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.ts +++ b/src/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.ts @@ -1,4 +1,4 @@ -import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS } from "../../../constants/ordinals/ordinals"; +import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST } from "../../../constants/ordinals/ordinals"; import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; @@ -14,7 +14,7 @@ export class AppEncryptionRequestDetailsOrdinalVdxfObject extends SerializableEn ) { super( { - type: VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS, + type: VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, data: request.data }, AppEncryptionRequestDetails diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index 7d59b99d..a5db7929 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -665,12 +665,12 @@ export const PROVISION_IDENTITY_DETAILS_VDXF_KEY: VDXFKeyInterface = { "vdxfid": "iGHab566xc2sHmPNCGGA4L5MT7LGoJzmCa" } -export const APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface = { - "hash160result": "f178871fedb335cf6659f8527a6c9652bc8e1d79", - "indexid": "xKM34nS3HiFvf3WDKL8DBrhpj2GqVWEaH4", +export const APP_ENCRYPTION_REQUEST_VDXF_KEY: VDXFKeyInterface = { + "hash160result": "5f398b165b8ea8c547b5f473f951178fc5482db6", + "indexid": "xQuu8CLZyYyPcB7gMkyP2D3pw8UgHevmcM", "qualifiedname": { - "name": "vrsc::application.encryption.request.details", + "name": "vrsc::application.encryption.request", "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, - "vdxfid": "iEWvbyzxSQ3G2sdBTeU4DUBHhNFpd6rUFx" + "vdxfid": "iL5nfPuV8Ekiz1EeW5KE3pXHuUTfQf6QC9" } \ No newline at end of file From f6fba28a3faf1af3e630185c2e791cc258c822be Mon Sep 17 00:00:00 2001 From: michaeltout Date: Thu, 20 Nov 2025 15:34:42 +0100 Subject: [PATCH 059/123] Export vdxf classes --- dist/index.d.ts | 1 + dist/index.js | 1 + src/index.ts | 2 ++ 3 files changed, 4 insertions(+) diff --git a/dist/index.d.ts b/dist/index.d.ts index c9fecb3b..beeabf1d 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -23,4 +23,5 @@ export * from './constants/ordinals/types'; export * from './constants/vdxf/veruspay'; export * from './identity/IdentityDefinition'; export * from './currency/CurrencyDefinition'; +export * from './vdxf/classes'; export { BN as BigNumber } from 'bn.js'; diff --git a/dist/index.js b/dist/index.js index cf20571c..a5b55c80 100644 --- a/dist/index.js +++ b/dist/index.js @@ -40,5 +40,6 @@ __exportStar(require("./constants/ordinals/types"), exports); __exportStar(require("./constants/vdxf/veruspay"), exports); __exportStar(require("./identity/IdentityDefinition"), exports); __exportStar(require("./currency/CurrencyDefinition"), exports); +__exportStar(require("./vdxf/classes"), exports); var bn_js_1 = require("bn.js"); Object.defineProperty(exports, "BigNumber", { enumerable: true, get: function () { return bn_js_1.BN; } }); diff --git a/src/index.ts b/src/index.ts index 5b55ee4c..fab03f47 100644 --- a/src/index.ts +++ b/src/index.ts @@ -29,4 +29,6 @@ export * from './constants/vdxf/veruspay' export * from './identity/IdentityDefinition' export * from './currency/CurrencyDefinition' +export * from './vdxf/classes' + export { BN as BigNumber } from 'bn.js' \ No newline at end of file From ffd5a2c1c09b8887a9c2f000ac8b556b7a9295d1 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Thu, 20 Nov 2025 16:26:47 +0100 Subject: [PATCH 060/123] Add error thrown from VerifiableSignatureData if non implemented features are present --- dist/vdxf/classes/VerifiableSignatureData.js | 3 +++ src/vdxf/classes/VerifiableSignatureData.ts | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/dist/vdxf/classes/VerifiableSignatureData.js b/dist/vdxf/classes/VerifiableSignatureData.js index 5065d3f6..d7dce1d5 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.js +++ b/dist/vdxf/classes/VerifiableSignatureData.js @@ -168,6 +168,9 @@ class VerifiableSignatureData { getIdentityHash(height, sigHash) { var heightBuffer = Buffer.allocUnsafe(4); heightBuffer.writeUInt32LE(height); + if (this.hasBoundHashes() || this.hasStatements() || this.hasVdxfKeys() || this.hasVdxfKeyNames()) { + throw new Error("Bound hashes, statements, and vdxfkeys in signature not yet supported."); + } if (!this.hashType.eq(new bn_js_1.BN(DataDescriptor_1.EHashTypes.HASH_SHA256))) { throw new Error("Invalid signature type for identity hash"); } diff --git a/src/vdxf/classes/VerifiableSignatureData.ts b/src/vdxf/classes/VerifiableSignatureData.ts index 57c6498c..31397fa0 100644 --- a/src/vdxf/classes/VerifiableSignatureData.ts +++ b/src/vdxf/classes/VerifiableSignatureData.ts @@ -263,6 +263,10 @@ export class VerifiableSignatureData implements SerializableEntity { var heightBuffer = Buffer.allocUnsafe(4) heightBuffer.writeUInt32LE(height); + if (this.hasBoundHashes() || this.hasStatements() || this.hasVdxfKeys() || this.hasVdxfKeyNames()) { + throw new Error("Bound hashes, statements, and vdxfkeys in signature not yet supported."); + } + if (!this.hashType.eq(new BN(EHashTypes.HASH_SHA256))) { throw new Error("Invalid signature type for identity hash"); } From 91bd0df0482efe7eaf67f9c15e7f8c16d570ac6e Mon Sep 17 00:00:00 2001 From: michaeltout Date: Thu, 20 Nov 2025 18:04:22 +0100 Subject: [PATCH 061/123] Remove createdAt from objects designed to be used in GenericEnvelope, which already contains createdAt --- .../IdentityUpdateRequestDetails.d.ts | 3 -- .../identity/IdentityUpdateRequestDetails.js | 11 ------- .../IdentityUpdateResponseDetails.d.ts | 3 -- .../identity/IdentityUpdateResponseDetails.js | 8 ----- .../classes/login/LoginResponseDetails.d.ts | 3 -- .../classes/login/LoginResponseDetails.js | 11 +------ .../vdxf/identityupdateenvelope.test.ts | 30 +++++++------------ .../vdxf/loginresponsedetails.test.ts | 4 +-- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 13 ++------ .../identity/IdentityUpdateRequestDetails.ts | 16 ---------- .../identity/IdentityUpdateResponseDetails.ts | 15 ---------- .../classes/login/LoginResponseDetails.ts | 21 ++----------- 12 files changed, 18 insertions(+), 120 deletions(-) diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts index 542f7768..e968158a 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts +++ b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts @@ -13,7 +13,6 @@ export type VerusCLIVerusIDJsonWithData = VerusCLIVerusIDJsonBase<{ export type IdentityUpdateRequestDetailsJson = { flags?: string; requestid?: string; - createdat?: string; identity?: VerusCLIVerusIDJson; expiryheight?: string; systemid?: string; @@ -26,7 +25,6 @@ export type IdentityUpdateRequestDetailsJson = { export declare class IdentityUpdateRequestDetails implements SerializableEntity { flags?: BigNumber; requestID?: string; - createdAt?: BigNumber; identity?: PartialIdentity; expiryHeight?: BigNumber; systemID?: IdentityID; @@ -44,7 +42,6 @@ export declare class IdentityUpdateRequestDetails implements SerializableEntity constructor(data?: { flags?: BigNumber; requestID?: string; - createdAt?: BigNumber; identity?: PartialIdentity; expiryHeight?: BigNumber; systemID?: IdentityID; diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js index ecdeabfc..4ab9394d 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js +++ b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js @@ -21,11 +21,6 @@ class IdentityUpdateRequestDetails { this.toggleContainsRequestID(); this.requestID = data.requestID; } - if (data === null || data === void 0 ? void 0 : data.createdAt) { - this.createdAt = data.createdAt; - } - else - this.createdAt = new bn_js_1.BN("0", 10); if (data === null || data === void 0 ? void 0 : data.identity) { this.identity = data.identity; } @@ -120,7 +115,6 @@ class IdentityUpdateRequestDetails { if (this.containsRequestID()) { length += vdxf_1.HASH160_BYTE_LENGTH; } - length += varuint_1.default.encodingLength(this.createdAt.toNumber()); length += this.identity.getByteLength(); if (this.expires()) length += varuint_1.default.encodingLength(this.expiryHeight.toNumber()); @@ -148,7 +142,6 @@ class IdentityUpdateRequestDetails { if (this.containsRequestID()) { writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); } - writer.writeCompactSize(this.createdAt.toNumber()); writer.writeSlice(this.identity.toBuffer()); if (this.expires()) writer.writeCompactSize(this.expiryHeight.toNumber()); @@ -177,7 +170,6 @@ class IdentityUpdateRequestDetails { if (this.containsRequestID()) { this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); } - this.createdAt = new bn_js_1.BN(reader.readCompactSize()); this.identity = new PartialIdentity_1.PartialIdentity(); reader.offset = this.identity.fromBuffer(reader.buffer, reader.offset, parseVdxfObjects); if (this.expires()) { @@ -222,7 +214,6 @@ class IdentityUpdateRequestDetails { return { flags: this.flags ? this.flags.toString(10) : undefined, requestid: this.containsRequestID() ? this.requestID : undefined, - createdat: this.createdAt ? this.createdAt.toString(10) : undefined, identity: this.identity ? this.identity.toJson() : undefined, expiryheight: this.expiryHeight ? this.expiryHeight.toString(10) : undefined, systemid: this.systemID ? this.systemID.toAddress() : undefined, @@ -242,7 +233,6 @@ class IdentityUpdateRequestDetails { return new IdentityUpdateRequestDetails({ flags: json.flags ? new bn_js_1.BN(json.flags, 10) : undefined, requestID: json.requestid, - createdAt: json.createdat ? new bn_js_1.BN(json.createdat, 10) : undefined, identity: json.identity ? PartialIdentity_1.PartialIdentity.fromJson(json.identity) : undefined, expiryHeight: json.expiryheight ? new bn_js_1.BN(json.expiryheight, 10) : undefined, systemID: json.systemid ? pbaas_1.IdentityID.fromAddress(json.systemid) : undefined, @@ -286,7 +276,6 @@ class IdentityUpdateRequestDetails { signDataMap, systemID: (details === null || details === void 0 ? void 0 : details.systemid) ? pbaas_1.IdentityID.fromAddress(details.systemid) : undefined, requestID: details === null || details === void 0 ? void 0 : details.requestid, - createdAt: (details === null || details === void 0 ? void 0 : details.createdat) ? new bn_js_1.BN(details.createdat, 10) : undefined, expiryHeight: (details === null || details === void 0 ? void 0 : details.expiryheight) ? new bn_js_1.BN(details.expiryheight, 10) : undefined, responseURIs: (details === null || details === void 0 ? void 0 : details.responseuris) ? details.responseuris.map(x => ResponseUri_1.ResponseUri.fromJson(x)) : undefined, txid: (details === null || details === void 0 ? void 0 : details.txid) ? Buffer.from(details.txid, 'hex').reverse() : undefined, diff --git a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts index f8e889ac..eb319c96 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts +++ b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts @@ -3,20 +3,17 @@ import { SerializableEntity } from '../../../utils/types/SerializableEntity'; export type IdentityUpdateResponseDetailsJson = { flags: string; requestid: string; - createdat: string; txid?: string; }; export declare class IdentityUpdateResponseDetails implements SerializableEntity { flags?: BigNumber; requestID?: string; - createdAt?: BigNumber; txid?: Buffer; static IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID: import("bn.js"); static IDENTITY_UPDATE_RESPONSE_CONTAINS_REQUEST_ID: import("bn.js"); constructor(data?: { flags?: BigNumber; requestID?: string; - createdAt?: BigNumber; txid?: Buffer; }); containsTxid(): boolean; diff --git a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js index 44f07fa0..c677b35a 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js +++ b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js @@ -17,9 +17,6 @@ class IdentityUpdateResponseDetails { this.toggleContainsRequestID(); this.requestID = data.requestID; } - if (data === null || data === void 0 ? void 0 : data.createdAt) { - this.createdAt = data.createdAt; - } if (data === null || data === void 0 ? void 0 : data.txid) { if (!this.containsTxid()) this.toggleContainsTxid(); @@ -47,7 +44,6 @@ class IdentityUpdateResponseDetails { if (this.containsRequestID()) { length += vdxf_1.HASH160_BYTE_LENGTH; } - length += varint_1.default.encodingLength(this.createdAt); if (this.containsTxid()) { length += pbaas_1.UINT_256_LENGTH; } @@ -59,7 +55,6 @@ class IdentityUpdateResponseDetails { if (this.containsRequestID()) { writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); } - writer.writeVarInt(this.createdAt); if (this.containsTxid()) { if (this.txid.length !== pbaas_1.UINT_256_LENGTH) throw new Error("invalid txid length"); @@ -73,7 +68,6 @@ class IdentityUpdateResponseDetails { if (this.containsRequestID()) { this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); } - this.createdAt = reader.readVarInt(); if (this.containsTxid()) { this.txid = reader.readSlice(pbaas_1.UINT_256_LENGTH); } @@ -83,7 +77,6 @@ class IdentityUpdateResponseDetails { return { flags: this.flags.toString(10), requestid: this.containsRequestID() ? this.requestID : undefined, - createdat: this.createdAt.toString(10), txid: this.containsTxid() ? (Buffer.from(this.txid.toString('hex'), 'hex').reverse()).toString('hex') : undefined }; } @@ -91,7 +84,6 @@ class IdentityUpdateResponseDetails { return new IdentityUpdateResponseDetails({ flags: new bn_js_1.BN(json.flags, 10), requestID: json.requestid, - createdAt: new bn_js_1.BN(json.createdat, 10), txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined }); } diff --git a/dist/vdxf/classes/login/LoginResponseDetails.d.ts b/dist/vdxf/classes/login/LoginResponseDetails.d.ts index 76120384..1ad0816f 100644 --- a/dist/vdxf/classes/login/LoginResponseDetails.d.ts +++ b/dist/vdxf/classes/login/LoginResponseDetails.d.ts @@ -3,16 +3,13 @@ import { SerializableEntity } from '../../../utils/types/SerializableEntity'; export type LoginResponseDetailsJson = { flags: string; requestid: string; - createdat: string; }; export declare class LoginResponseDetails implements SerializableEntity { flags?: BigNumber; requestID?: string; - createdAt?: BigNumber; constructor(data?: { flags?: BigNumber; requestID?: string; - createdAt?: BigNumber; }); toSha256(): Buffer; getByteLength(): number; diff --git a/dist/vdxf/classes/login/LoginResponseDetails.js b/dist/vdxf/classes/login/LoginResponseDetails.js index feea048f..4d7b94f1 100644 --- a/dist/vdxf/classes/login/LoginResponseDetails.js +++ b/dist/vdxf/classes/login/LoginResponseDetails.js @@ -7,7 +7,6 @@ const createHash = require("create-hash"); const bn_js_1 = require("bn.js"); const address_1 = require("../../../utils/address"); const vdxf_1 = require("../../../constants/vdxf"); -const varuint_1 = require("../../../utils/varuint"); const { BufferReader, BufferWriter } = bufferutils_1.default; class LoginResponseDetails { constructor(data) { @@ -17,9 +16,6 @@ class LoginResponseDetails { } else this.requestID = ''; - if (data === null || data === void 0 ? void 0 : data.createdAt) { - this.createdAt = data.createdAt; - } } toSha256() { return createHash("sha256").update(this.toBuffer()).digest(); @@ -28,35 +24,30 @@ class LoginResponseDetails { let length = 0; length += varint_1.default.encodingLength(this.flags); length += vdxf_1.HASH160_BYTE_LENGTH; - length += varuint_1.default.encodingLength(this.createdAt.toNumber()); return length; } toBuffer() { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); writer.writeVarInt(this.flags); writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); - writer.writeCompactSize(this.createdAt.toNumber()); return writer.buffer; } fromBuffer(buffer, offset = 0) { const reader = new BufferReader(buffer, offset); this.flags = reader.readVarInt(); this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - this.createdAt = new bn_js_1.BN(reader.readCompactSize()); return reader.offset; } toJson() { return { flags: this.flags.toString(10), requestid: this.requestID, - createdat: this.createdAt.toString(10) }; } static fromJson(json) { return new LoginResponseDetails({ flags: new bn_js_1.BN(json.flags, 10), - requestID: json.requestid, - createdAt: new bn_js_1.BN(json.createdat, 10) + requestID: json.requestid }); } } diff --git a/src/__tests__/vdxf/identityupdateenvelope.test.ts b/src/__tests__/vdxf/identityupdateenvelope.test.ts index 245f7dd4..6e7b371f 100644 --- a/src/__tests__/vdxf/identityupdateenvelope.test.ts +++ b/src/__tests__/vdxf/identityupdateenvelope.test.ts @@ -6,8 +6,7 @@ import { PartialSignData } from "../../pbaas/PartialSignData"; import { TEST_BASE_SIGN_DATA_WITH_MMR_DATA, TEST_CLI_ID_UPDATE_REQUEST_JSON, - TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, - TEST_CREATEDAT, + TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, TEST_EXPIRYHEIGHT, TEST_MMR_DATA, TEST_PARTIAL_IDENTITY, @@ -42,8 +41,7 @@ describe("IdentityUpdate request/response details Serialization", () => { test("Serialize/Deserialize basic IdentityUpdateRequestDetails", () => { const requestDetails = new IdentityUpdateRequestDetails({ - requestID: TEST_REQUESTID, - createdAt: TEST_CREATEDAT, + requestID: TEST_REQUESTID, systemID: TEST_SYSTEMID, identity: TEST_PARTIAL_IDENTITY, expiryHeight: TEST_EXPIRYHEIGHT, @@ -55,15 +53,14 @@ describe("IdentityUpdate request/response details Serialization", () => { }); test("Serialize/Deserialize basic IdentityUpdateResponseDetails", () => { - const responseDetails = new IdentityUpdateResponseDetails({ requestID: TEST_REQUESTID, createdAt: TEST_CREATEDAT }); + const responseDetails = new IdentityUpdateResponseDetails({ requestID: TEST_REQUESTID }); testSerialization(responseDetails); }); test("Remove optional fields from IdentityUpdateRequestDetails", () => { let baseRequestDetailsConfig = { - requestID: TEST_REQUESTID, - createdAt: TEST_CREATEDAT, + requestID: TEST_REQUESTID, systemID: TEST_SYSTEMID, identity: TEST_PARTIAL_IDENTITY, expiryHeight: TEST_EXPIRYHEIGHT, @@ -87,7 +84,7 @@ describe("IdentityUpdate request/response details Serialization", () => { test("Remove optional fields from IdentityUpdateResponseDetails", () => { const txidbuf = Buffer.from(TEST_TXID, 'hex').reverse(); - let baseResponseDetailsConfig = { requestID: TEST_REQUESTID, createdAt: TEST_CREATEDAT, txid: txidbuf }; + let baseResponseDetailsConfig = { requestID: TEST_REQUESTID, txid: txidbuf }; const toRemove = ["txid"]; @@ -104,8 +101,7 @@ describe("IdentityUpdate request/response details Serialization", () => { test("Serialize/Deserialize IdentityUpdateRequestDetails to/from JSON", () => { const requestDetails = new IdentityUpdateRequestDetails({ - requestID: TEST_REQUESTID, - createdAt: TEST_CREATEDAT, + requestID: TEST_REQUESTID, systemID: TEST_SYSTEMID, identity: TEST_PARTIAL_IDENTITY, expiryHeight: TEST_EXPIRYHEIGHT, @@ -119,7 +115,7 @@ describe("IdentityUpdate request/response details Serialization", () => { test("Serialize/Deserialize IdentityUpdateResponseDetails to/from JSON", () => { const txidbuf = Buffer.from(TEST_TXID, 'hex').reverse(); - let baseResponseDetailsConfig = { requestID: TEST_REQUESTID, createdAt: TEST_CREATEDAT, txid: txidbuf }; + let baseResponseDetailsConfig = { requestID: TEST_REQUESTID, txid: txidbuf }; const responseDetails = new IdentityUpdateResponseDetails(baseResponseDetailsConfig); @@ -128,8 +124,7 @@ describe("IdentityUpdate request/response details Serialization", () => { test("Serialize/Deserialize IdentityUpdateRequestDetails to/from JSON", () => { const requestDetails = new IdentityUpdateRequestDetails({ - requestID: TEST_REQUESTID, - createdAt: TEST_CREATEDAT, + requestID: TEST_REQUESTID, systemID: TEST_SYSTEMID, identity: TEST_PARTIAL_IDENTITY, expiryHeight: TEST_EXPIRYHEIGHT, @@ -142,8 +137,7 @@ describe("IdentityUpdate request/response details Serialization", () => { test("Serialize/Deserialize IdentityUpdateResponseDetails to/from JSON", () => { const responseDetails = new IdentityUpdateResponseDetails({ - requestID: TEST_REQUESTID, - createdAt: TEST_CREATEDAT, + requestID: TEST_REQUESTID, txid: Buffer.from(TEST_TXID, 'hex').reverse() }); @@ -189,8 +183,7 @@ describe("IdentityUpdate request/response details Serialization", () => { TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, { systemid: TEST_SYSTEMID.toAddress() as string, - requestid: TEST_REQUESTID.toString(), - createdat: TEST_CREATEDAT.toString(), + requestid: TEST_REQUESTID.toString(), expiryheight: TEST_EXPIRYHEIGHT.toString(), responseuris: [ ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_REDIRECT).toJson(), @@ -207,8 +200,7 @@ describe("IdentityUpdate request/response details Serialization", () => { test("Deserialize cli identity update details", () => { const detailsProps = { - requestID: TEST_REQUESTID.toString(), - createdAt: TEST_CREATEDAT.toString(), + requestID: TEST_REQUESTID.toString(), expiryHeight: TEST_EXPIRYHEIGHT.toString(), responseuris: [ ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_REDIRECT).toJson(), diff --git a/src/__tests__/vdxf/loginresponsedetails.test.ts b/src/__tests__/vdxf/loginresponsedetails.test.ts index 406dda52..25167282 100644 --- a/src/__tests__/vdxf/loginresponsedetails.test.ts +++ b/src/__tests__/vdxf/loginresponsedetails.test.ts @@ -8,8 +8,7 @@ describe("LoginRequestDetails", () => { describe("constructor and basic properties", () => { test("creates instance with all optional data", () => { const details = new LoginResponseDetails({ - requestID: TEST_CHALLENGE_ID, - createdAt: new BN(2938475938457) // 1 hour from now + requestID: TEST_CHALLENGE_ID }); const detailsBuffer = details.toBuffer(); @@ -18,7 +17,6 @@ describe("LoginRequestDetails", () => { newDetails.fromBuffer(detailsBuffer); expect(newDetails.requestID).toBe(TEST_CHALLENGE_ID); - expect(newDetails.createdAt?.toString()).toBe("2938475938457"); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); }); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 05bb943e..c04a8a87 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -28,7 +28,7 @@ import { DEFAULT_VERUS_CHAINID } from '../../constants/pbaas'; import { fromBase58Check } from '../../utils/address'; import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from '../../constants/ordinals/ordinals'; import { VerusPayInvoiceOrdinalVdxfObject } from '../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject'; -import { TEST_CHALLENGE_ID, TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, TEST_CREATEDAT, TEST_EXPIRYHEIGHT, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3, TEST_REQUESTID, TEST_SALT, TEST_SYSTEMID, TEST_TXID } from '../constants/fixtures'; +import { TEST_CHALLENGE_ID, TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, TEST_EXPIRYHEIGHT, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3, TEST_REQUESTID, TEST_SALT, TEST_SYSTEMID, TEST_TXID } from '../constants/fixtures'; import { ProvisionIdentityDetailsOrdinalVdxfObject } from '../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject'; import { BigNumber } from '../../utils/types/BigNumber'; @@ -191,7 +191,6 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { { systemid: TEST_SYSTEMID.toAddress() as string, requestid: TEST_REQUESTID.toString(), - createdat: TEST_CREATEDAT.toString(), expiryheight: TEST_EXPIRYHEIGHT.toString(), responseuris: [ ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_REDIRECT).toJson(), @@ -209,7 +208,6 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const d2 = (round as IdentityUpdateRequestOrdinalVdxfObject).data; expect(d2.systemID!.toAddress()).toEqual(details.systemID!.toAddress()); expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); - expect(d2.createdAt!.toNumber()).toEqual(details.createdAt!.toNumber()); expect(d2.expiryHeight!.toString()).toEqual(details.expiryHeight!.toString()); expect(d2.txid!.toString('hex')).toEqual(details.txid!.toString('hex')); @@ -221,7 +219,6 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const d3 = (roundJ as IdentityUpdateRequestOrdinalVdxfObject).data; expect(d3.systemID!.toAddress()).toEqual(details.systemID!.toAddress()); expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); - expect(d3.createdAt!.toNumber()).toEqual(details.createdAt!.toNumber()); expect(d3.expiryHeight!.toString()).toEqual(details.expiryHeight!.toString()); expect(d3.txid!.toString('hex')).toEqual(details.txid!.toString('hex')); }); @@ -229,7 +226,6 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { it('should serialize / deserialize a IdentityUpdateResponseOrdinalVdxfObject via buffer', () => { const details = new IdentityUpdateResponseDetails({ requestID: TEST_REQUESTID, - createdAt: TEST_CREATEDAT, txid: Buffer.from(TEST_TXID, 'hex').reverse() }); @@ -240,7 +236,6 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const d2 = (round as IdentityUpdateResponseOrdinalVdxfObject).data; expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); - expect(d2.createdAt!.toNumber()).toEqual(details.createdAt!.toNumber()); expect(d2.txid!.toString('hex')).toEqual(details.txid!.toString('hex')); const json = obj.toJson(); @@ -250,7 +245,6 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const d3 = (roundJ as IdentityUpdateResponseOrdinalVdxfObject).data; expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); - expect(d3.createdAt!.toNumber()).toEqual(details.createdAt!.toNumber()); expect(d3.txid!.toString('hex')).toEqual(details.txid!.toString('hex')); }); @@ -290,8 +284,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { it('should serialize / deserialize a LoginResponseOrdinalVdxfObject via buffer', () => { const details = new LoginResponseDetails({ - requestID: TEST_CHALLENGE_ID, - createdAt: new BN(2938475938457) + requestID: TEST_CHALLENGE_ID }); const obj = new LoginResponseOrdinalVdxfObject({ data: details }); @@ -301,7 +294,6 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const d2 = (round as LoginResponseOrdinalVdxfObject).data; expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); - expect(d2.createdAt!.toNumber()).toEqual(details.createdAt!.toNumber()); const json = obj.toJson(); expect(json.data).toBeDefined(); @@ -310,7 +302,6 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const d3 = (roundJ as LoginResponseOrdinalVdxfObject).data; expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); - expect(d3.createdAt!.toNumber()).toEqual(details.createdAt!.toNumber()); }); it('should serialize / deserialize a ProvisionIdentityDetailsOrdinalVdxfObject', () => { diff --git a/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts b/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts index 9acaced9..4c5be915 100644 --- a/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts +++ b/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts @@ -21,7 +21,6 @@ export type VerusCLIVerusIDJsonWithData = VerusCLIVerusIDJsonBase<{ [key: string export type IdentityUpdateRequestDetailsJson = { flags?: string; requestid?: string; - createdat?: string; identity?: VerusCLIVerusIDJson; expiryheight?: string; systemid?: string; @@ -33,7 +32,6 @@ export type IdentityUpdateRequestDetailsJson = { export class IdentityUpdateRequestDetails implements SerializableEntity { flags?: BigNumber; requestID?: string; // ID of request, to be referenced in response - createdAt?: BigNumber; // Unix timestamp of request creation identity?: PartialIdentity; // Parts of the identity to update expiryHeight?: BigNumber; // Time after which update request will no longer be accepted systemID?: IdentityID; // System that identity should be updated on (will default to VRSC/VRSCTEST if not present, depending on testnet flag) @@ -54,7 +52,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { constructor (data?: { flags?: BigNumber, requestID?: string, - createdAt?: BigNumber, identity?: PartialIdentity, expiryHeight?: BigNumber, systemID?: IdentityID, @@ -69,10 +66,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { this.requestID = data.requestID; } - if (data?.createdAt) { - this.createdAt = data.createdAt; - } else this.createdAt = new BN("0", 10); - if (data?.identity) { this.identity = data.identity; } @@ -183,8 +176,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { if (this.containsRequestID()) { length += HASH160_BYTE_LENGTH; } - - length += varuint.encodingLength(this.createdAt.toNumber()); length += this.identity.getByteLength(); @@ -223,8 +214,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { if (this.containsRequestID()) { writer.writeSlice(fromBase58Check(this.requestID).hash); } - - writer.writeCompactSize(this.createdAt.toNumber()); writer.writeSlice(this.identity.toBuffer()); @@ -262,8 +251,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { this.requestID = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); } - this.createdAt = new BN(reader.readCompactSize()); - this.identity = new PartialIdentity(); reader.offset = this.identity.fromBuffer(reader.buffer, reader.offset, parseVdxfObjects); @@ -326,7 +313,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { return { flags: this.flags ? this.flags.toString(10) : undefined, requestid: this.containsRequestID() ? this.requestID : undefined, - createdat: this.createdAt ? this.createdAt.toString(10) : undefined, identity: this.identity ? this.identity.toJson() : undefined, expiryheight: this.expiryHeight ? this.expiryHeight.toString(10) : undefined, systemid: this.systemID ? this.systemID.toAddress() : undefined, @@ -350,7 +336,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { return new IdentityUpdateRequestDetails({ flags: json.flags ? new BN(json.flags, 10) : undefined, requestID: json.requestid, - createdAt: json.createdat ? new BN(json.createdat, 10) : undefined, identity: json.identity ? PartialIdentity.fromJson(json.identity) : undefined, expiryHeight: json.expiryheight ? new BN(json.expiryheight, 10) : undefined, systemID: json.systemid ? IdentityID.fromAddress(json.systemid) : undefined, @@ -407,7 +392,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { signDataMap, systemID: details?.systemid ? IdentityID.fromAddress(details.systemid) : undefined, requestID: details?.requestid, - createdAt: details?.createdat ? new BN(details.createdat, 10) : undefined, expiryHeight: details?.expiryheight ? new BN(details.expiryheight, 10) : undefined, responseURIs: details?.responseuris ? details.responseuris.map(x => ResponseUri.fromJson(x)) : undefined, txid: details?.txid ? Buffer.from(details.txid, 'hex').reverse() : undefined, diff --git a/src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts b/src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts index d05d84a5..81868c01 100644 --- a/src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts +++ b/src/vdxf/classes/identity/IdentityUpdateResponseDetails.ts @@ -12,14 +12,12 @@ const { BufferReader, BufferWriter } = bufferutils; export type IdentityUpdateResponseDetailsJson = { flags: string, requestid: string, - createdat: string, txid?: string } export class IdentityUpdateResponseDetails implements SerializableEntity { flags?: BigNumber; requestID?: string; // ID of request, to be referenced in response - createdAt?: BigNumber; // Unix timestamp of response creation txid?: Buffer; // 32 byte transaction ID of identity update tx posted to blockchain, on same system asked for in request // stored in natural order, if displayed as text make sure to reverse! @@ -29,7 +27,6 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { constructor (data?: { flags?: BigNumber, requestID?: string, - createdAt?: BigNumber, txid?: Buffer }) { this.flags = data && data.flags ? data.flags : new BN("0", 10); @@ -39,10 +36,6 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { this.requestID = data.requestID; } - if (data?.createdAt) { - this.createdAt = data.createdAt; - } - if (data?.txid) { if (!this.containsTxid()) this.toggleContainsTxid(); this.txid = data.txid; @@ -78,8 +71,6 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { length += HASH160_BYTE_LENGTH; } - length += varint.encodingLength(this.createdAt); - if (this.containsTxid()) { length += UINT_256_LENGTH; } @@ -96,8 +87,6 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { writer.writeSlice(fromBase58Check(this.requestID).hash); } - writer.writeVarInt(this.createdAt); - if (this.containsTxid()) { if (this.txid.length !== UINT_256_LENGTH) throw new Error("invalid txid length"); @@ -116,8 +105,6 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { this.requestID = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); } - this.createdAt = reader.readVarInt(); - if (this.containsTxid()) { this.txid = reader.readSlice(UINT_256_LENGTH); } @@ -129,7 +116,6 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { return { flags: this.flags.toString(10), requestid: this.containsRequestID() ? this.requestID : undefined, - createdat: this.createdAt.toString(10), txid: this.containsTxid() ? (Buffer.from(this.txid.toString('hex'), 'hex').reverse()).toString('hex') : undefined } } @@ -138,7 +124,6 @@ export class IdentityUpdateResponseDetails implements SerializableEntity { return new IdentityUpdateResponseDetails({ flags: new BN(json.flags, 10), requestID: json.requestid, - createdAt: new BN(json.createdat, 10), txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined }); } diff --git a/src/vdxf/classes/login/LoginResponseDetails.ts b/src/vdxf/classes/login/LoginResponseDetails.ts index 30ca715c..34a2eb98 100644 --- a/src/vdxf/classes/login/LoginResponseDetails.ts +++ b/src/vdxf/classes/login/LoginResponseDetails.ts @@ -11,29 +11,22 @@ const { BufferReader, BufferWriter } = bufferutils; export type LoginResponseDetailsJson = { flags: string, - requestid: string, - createdat: string + requestid: string } export class LoginResponseDetails implements SerializableEntity { flags?: BigNumber; requestID?: string; // ID of request, to be referenced in response - createdAt?: BigNumber; // Unix timestamp of response creation constructor (data?: { flags?: BigNumber, - requestID?: string, - createdAt?: BigNumber + requestID?: string }) { this.flags = data && data.flags ? data.flags : new BN("0", 10); if (data?.requestID) { this.requestID = data.requestID; } else this.requestID = ''; - - if (data?.createdAt) { - this.createdAt = data.createdAt; - } } toSha256() { @@ -47,8 +40,6 @@ export class LoginResponseDetails implements SerializableEntity { length += HASH160_BYTE_LENGTH; - length += varuint.encodingLength(this.createdAt.toNumber()); - return length; } @@ -59,8 +50,6 @@ export class LoginResponseDetails implements SerializableEntity { writer.writeSlice(fromBase58Check(this.requestID).hash); - writer.writeCompactSize(this.createdAt.toNumber()); - return writer.buffer; } @@ -71,8 +60,6 @@ export class LoginResponseDetails implements SerializableEntity { this.requestID = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); - this.createdAt = new BN(reader.readCompactSize()); - return reader.offset; } @@ -80,15 +67,13 @@ export class LoginResponseDetails implements SerializableEntity { return { flags: this.flags.toString(10), requestid: this.requestID, - createdat: this.createdAt.toString(10) } } static fromJson(json: LoginResponseDetailsJson): LoginResponseDetails { return new LoginResponseDetails({ flags: new BN(json.flags, 10), - requestID: json.requestid, - createdAt: new BN(json.createdat, 10) + requestID: json.requestid }); } } \ No newline at end of file From da92fd52ea9aa5e5e325476a2bfc56f0a3943cde Mon Sep 17 00:00:00 2001 From: monkins Date: Fri, 21 Nov 2025 11:34:09 +0000 Subject: [PATCH 062/123] Updates to comments --- .../vdxf/appencryptionrequestdetails.test.ts | 34 ++++---- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 85 +++++++++---------- ...etails.test.ts => userdatarequest.test.ts} | 24 +++--- .../userspecificdatapacketdetails.test.ts | 4 +- src/constants/ordinals/ordinals.ts | 2 +- src/constants/ordinals/register.ts | 16 ++-- src/constants/ordinals/types.ts | 22 ++--- src/pbaas/ContentMultiMapRemove.ts | 6 +- src/pbaas/Credential.ts | 4 +- src/pbaas/CurrencyValueMap.ts | 4 +- src/pbaas/EvidenceData.ts | 4 +- src/pbaas/Identity.ts | 10 +-- src/pbaas/IdentityMultimapRef.ts | 10 +-- src/pbaas/PBaaSEvidenceRef.ts | 4 +- src/pbaas/Rating.ts | 4 +- src/pbaas/SaltedData.ts | 4 +- src/pbaas/SignatureData.ts | 6 +- src/pbaas/URLRef.ts | 4 +- src/pbaas/UTXORef.ts | 7 +- src/vdxf/classes/CompactIdAddressObject.ts | 4 +- src/vdxf/classes/SaltedData.ts | 4 +- src/vdxf/classes/index.ts | 4 +- src/vdxf/classes/login/LoginRequestDetails.ts | 4 +- ... AppEncryptionRequestOrdinalVdxfObject.ts} | 18 ++-- ...DataDescriptorResponseOrdinalVdxfObject.ts | 30 ------- .../ordinals/DataResponseOrdinalVdxfObject.ts | 29 +++++++ ...UserDataRequestDetailsOrdinalVdxfObject.ts | 29 ------- .../UserDataRequestOrdinalVdxfObject.ts | 29 +++++++ src/vdxf/classes/ordinals/index.ts | 6 +- .../classes/payment/VerusPayInvoiceDetails.ts | 4 +- ...uestDetails.ts => AppEncryptionRequest.ts} | 38 ++++----- ...taRequestDetails.ts => UserDataRequest.ts} | 44 +++++----- .../UserSpecificDataPacketDetails.ts | 36 ++++---- ...aDescriptorResponse.ts => DataResponse.ts} | 40 +++------ src/vdxf/keys.ts | 31 +++---- 35 files changed, 293 insertions(+), 311 deletions(-) rename src/__tests__/vdxf/{userdatarequestdetails.test.ts => userdatarequest.test.ts} (50%) rename src/vdxf/classes/ordinals/{AppEncryptionRequestDetailsOrdinalVdxfObject.ts => AppEncryptionRequestOrdinalVdxfObject.ts} (53%) delete mode 100644 src/vdxf/classes/ordinals/DataDescriptorResponseOrdinalVdxfObject.ts create mode 100644 src/vdxf/classes/ordinals/DataResponseOrdinalVdxfObject.ts delete mode 100644 src/vdxf/classes/ordinals/UserDataRequestDetailsOrdinalVdxfObject.ts create mode 100644 src/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.ts rename src/vdxf/classes/requestobjects/{AppEncryptionRequestDetails.ts => AppEncryptionRequest.ts} (86%) rename src/vdxf/classes/requestobjects/{UserDataRequestDetails.ts => UserDataRequest.ts} (83%) rename src/vdxf/classes/response/{DataDescriptorResponse.ts => DataResponse.ts} (76%) diff --git a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts index cdeeae4c..56e19d1b 100644 --- a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts +++ b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts @@ -1,5 +1,5 @@ import { BN } from "bn.js"; -import { AppEncryptionRequestDetails, CompactIdAddressObject } from "../../vdxf/classes"; +import { AppEncryptionRequest, CompactIdAddressObject } from "../../vdxf/classes"; import { BigNumber } from "../../utils/types/BigNumber"; // Helper function to create TransferDestination from address string @@ -10,13 +10,13 @@ function createCompactIdAddressObject(type: BigNumber, address: string): Compact return obj; } -describe("AppEncryptionRequestDetails serialization tests", () => { - test("creates valid AppEncryptionRequestDetails with zaddress", () => { - const details = new AppEncryptionRequestDetails({ - version: AppEncryptionRequestDetails.DEFAULT_VERSION, - flags: AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER - .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) - .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS), +describe("AppEncryptionRequest serialization tests", () => { + test("creates valid AppEncryptionRequest with zaddress", () => { + const details = new AppEncryptionRequest({ + version: AppEncryptionRequest.DEFAULT_VERSION, + flags: AppEncryptionRequest.HAS_SECONDARY_SEED_DERIVATION_NUMBER + .or(AppEncryptionRequest.HAS_FROM_ADDRESS) + .or(AppEncryptionRequest.HAS_TO_ADDRESS), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), secondaryDerivationNumber: new BN(234), @@ -25,7 +25,7 @@ describe("AppEncryptionRequestDetails serialization tests", () => { requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); - const newDetails = new AppEncryptionRequestDetails(); + const newDetails = new AppEncryptionRequest(); const buffer = details.toBuffer(); newDetails.fromBuffer(buffer); const originalBuffer = details.toBuffer(); @@ -43,13 +43,13 @@ describe("AppEncryptionRequestDetails serialization tests", () => { expect(details.requestID).toBe("iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ"); }); - test("serializes and deserializes AppEncryptionRequestDetails correctly", () => { - // Create the first AppEncryptionRequestDetails - const originalDetails = new AppEncryptionRequestDetails({ - version: AppEncryptionRequestDetails.DEFAULT_VERSION, - flags: AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER - .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) - .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS), + test("serializes and deserializes AppEncryptionRequest correctly", () => { + // Create the first AppEncryptionRequest + const originalDetails = new AppEncryptionRequest({ + version: AppEncryptionRequest.DEFAULT_VERSION, + flags: AppEncryptionRequest.HAS_SECONDARY_SEED_DERIVATION_NUMBER + .or(AppEncryptionRequest.HAS_FROM_ADDRESS) + .or(AppEncryptionRequest.HAS_TO_ADDRESS), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), secondaryDerivationNumber: new BN(234), @@ -62,7 +62,7 @@ describe("AppEncryptionRequestDetails serialization tests", () => { const buffer = originalDetails.toBuffer(); // Create a new instance and deserialize from buffer - const deserializedDetails = new AppEncryptionRequestDetails(); + const deserializedDetails = new AppEncryptionRequest(); deserializedDetails.fromBuffer(buffer); // Verify both instances are valid diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 3dc05a60..963f0d9b 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -1,6 +1,6 @@ import { BN } from 'bn.js'; import { - AppEncryptionRequestDetailsOrdinalVdxfObject, + AppEncryptionRequestOrdinalVdxfObject, GeneralTypeOrdinalVdxfObject, getOrdinalVdxfObjectClassForType, IdentityUpdateRequestOrdinalVdxfObject, @@ -8,16 +8,16 @@ import { LoginRequestOrdinalVdxfObject, LoginResponseOrdinalVdxfObject, OrdinalVdxfObject, - UserDataRequestDetailsOrdinalVdxfObject, + UserDataRequestOrdinalVdxfObject, UserSpecificDataPacketDetailsOrdinalVdxfObject, - DataDescriptorResponseOrdinalVdxfObject + DataResponseOrdinalVdxfObject } from '../../vdxf/classes/ordinals'; import { DataDescriptorOrdinalVdxfObject } from '../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject'; import { DataDescriptor, DEST_PKH, TransferDestination } from '../../pbaas'; import { - AppEncryptionRequestDetails, + AppEncryptionRequest, CompactIdAddressObject, IdentityUpdateRequestDetails, IdentityUpdateResponseDetails, @@ -26,7 +26,7 @@ import { ProvisionIdentityDetails, ResponseUri, VerusPayInvoiceDetails, - UserDataRequestDetails, + UserDataRequest, UserSpecificDataPacketDetails } from '../../vdxf/classes'; import { DEFAULT_VERUS_CHAINID } from '../../constants/pbaas'; @@ -36,7 +36,7 @@ import { VerusPayInvoiceOrdinalVdxfObject } from '../../vdxf/classes/ordinals/Ve import { TEST_CHALLENGE_ID, TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, TEST_CREATEDAT, TEST_EXPIRYHEIGHT, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3, TEST_REQUESTID, TEST_SALT, TEST_SYSTEMID, TEST_TXID } from '../constants/fixtures'; import { ProvisionIdentityDetailsOrdinalVdxfObject } from '../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject'; import { BigNumber } from '../../utils/types/BigNumber'; -import { DataDescriptorResponse } from '../../vdxf/classes/response/DataDescriptorResponse'; +import { DataResponse } from '../../vdxf/classes/response/DataResponse'; import { VerifiableSignatureData } from '../../vdxf/classes/VerifiableSignatureData'; // Helper function to create TransferDestination from address string @@ -81,12 +81,12 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { newObj = LoginResponseOrdinalVdxfObject.fromJson(json as any); } else if (obj instanceof ProvisionIdentityDetailsOrdinalVdxfObject) { newObj = ProvisionIdentityDetailsOrdinalVdxfObject.fromJson(json as any); - } else if (obj instanceof AppEncryptionRequestDetailsOrdinalVdxfObject) { - newObj = AppEncryptionRequestDetailsOrdinalVdxfObject.fromJson(json as any); - } else if (obj instanceof DataDescriptorResponseOrdinalVdxfObject) { - newObj = DataDescriptorResponseOrdinalVdxfObject.fromJson(json as any); - } else if (obj instanceof UserDataRequestDetailsOrdinalVdxfObject) { - newObj = UserDataRequestDetailsOrdinalVdxfObject.fromJson(json as any); + } else if (obj instanceof AppEncryptionRequestOrdinalVdxfObject) { + newObj = AppEncryptionRequestOrdinalVdxfObject.fromJson(json as any); + } else if (obj instanceof DataResponseOrdinalVdxfObject) { + newObj = DataResponseOrdinalVdxfObject.fromJson(json as any); + } else if (obj instanceof UserDataRequestOrdinalVdxfObject) { + newObj = UserDataRequestOrdinalVdxfObject.fromJson(json as any); } else if (obj instanceof UserSpecificDataPacketDetailsOrdinalVdxfObject) { newObj = UserSpecificDataPacketDetailsOrdinalVdxfObject.fromJson(json as any); } else { @@ -354,11 +354,11 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { }); it('should serialize / deserialize an AppEncryptionRequestOrdinalVdxfObject', () => { - const details = new AppEncryptionRequestDetails({ - version: AppEncryptionRequestDetails.DEFAULT_VERSION, - flags: AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER - .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) - .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS), + const details = new AppEncryptionRequest({ + version: AppEncryptionRequest.DEFAULT_VERSION, + flags: AppEncryptionRequest.HAS_SECONDARY_SEED_DERIVATION_NUMBER + .or(AppEncryptionRequest.HAS_FROM_ADDRESS) + .or(AppEncryptionRequest.HAS_TO_ADDRESS), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), secondaryDerivationNumber: new BN(234), @@ -367,12 +367,12 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); - const obj = new AppEncryptionRequestDetailsOrdinalVdxfObject({ data: details }); + const obj = new AppEncryptionRequestOrdinalVdxfObject({ data: details }); const round = roundTripBuffer(obj); - expect(round).toBeInstanceOf(AppEncryptionRequestDetailsOrdinalVdxfObject); + expect(round).toBeInstanceOf(AppEncryptionRequestOrdinalVdxfObject); - const d2 = (round as AppEncryptionRequestDetailsOrdinalVdxfObject).data; + const d2 = (round as AppEncryptionRequestOrdinalVdxfObject).data; expect(d2.encryptToZAddress!).toEqual(details.encryptToZAddress); expect(d2.derivationNumber!.toString()).toEqual(details.derivationNumber!.toString()); expect(d2.secondaryDerivationNumber!.toString()).toEqual(details.secondaryDerivationNumber!.toString()); @@ -383,9 +383,9 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const json = obj.toJson(); expect(json.data).toBeDefined(); const roundJ = roundTripJson(obj); - expect(roundJ).toBeInstanceOf(AppEncryptionRequestDetailsOrdinalVdxfObject); + expect(roundJ).toBeInstanceOf(AppEncryptionRequestOrdinalVdxfObject); - const d3 = (roundJ as AppEncryptionRequestDetailsOrdinalVdxfObject).data; + const d3 = (roundJ as AppEncryptionRequestOrdinalVdxfObject).data; expect(d3.encryptToZAddress!).toEqual(details.encryptToZAddress); expect(d3.derivationNumber!.toString()).toEqual(details.derivationNumber!.toString()); expect(d3.secondaryDerivationNumber!.toString()).toEqual(details.secondaryDerivationNumber!.toString()); @@ -410,7 +410,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS)) .toBe(ProvisionIdentityDetailsOrdinalVdxfObject); expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS)) - .toBe(AppEncryptionRequestDetailsOrdinalVdxfObject); + .toBe(AppEncryptionRequestOrdinalVdxfObject); // unrecognized expect(() => getOrdinalVdxfObjectClassForType(new BN(999))).toThrow(); @@ -430,11 +430,10 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(parsed.data).toBeUndefined(); }); - it('should serialize / deserialize a DataDescriptorResponse via buffer', () => { - const details = new DataDescriptorResponse({ + it('should serialize / deserialize a DataResponse via buffer', () => { + const details = new DataResponse({ flags: new BN(0), requestID: TEST_CHALLENGE_ID, - createdAt: new BN(2938475938457), data: new DataDescriptor({ version: new BN(1, 10), "flags": new BN(2, 10), @@ -443,40 +442,38 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { }) }); - const obj = new DataDescriptorResponseOrdinalVdxfObject({ data: details }); + const obj = new DataResponseOrdinalVdxfObject({ data: details }); const round = roundTripBuffer(obj); - expect(round).toBeInstanceOf(DataDescriptorResponseOrdinalVdxfObject); + expect(round).toBeInstanceOf(DataResponseOrdinalVdxfObject); - const d2 = (round as DataDescriptorResponseOrdinalVdxfObject).data; + const d2 = (round as DataResponseOrdinalVdxfObject).data; expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); - expect(d2.createdAt!.toNumber()).toEqual(details.createdAt!.toNumber()); const json = obj.toJson(); expect(json.data).toBeDefined(); const roundJ = roundTripJson(obj); - expect(roundJ).toBeInstanceOf(DataDescriptorResponseOrdinalVdxfObject); + expect(roundJ).toBeInstanceOf(DataResponseOrdinalVdxfObject); - const d3 = (roundJ as DataDescriptorResponseOrdinalVdxfObject).data; + const d3 = (roundJ as DataResponseOrdinalVdxfObject).data; expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); - expect(d3.createdAt!.toNumber()).toEqual(details.createdAt!.toNumber()); }); - it('should serialize / deserialize a UserDataRequestDetailsOrdinalVdxfObject via buffer', () => { - const details = new UserDataRequestDetails({ + it('should serialize / deserialize a UserDataRequestOrdinalVdxfObject via buffer', () => { + const details = new UserDataRequest({ version: new BN(1), - flags: UserDataRequestDetails.FULL_DATA.or(UserDataRequestDetails.ATTESTATION).or(UserDataRequestDetails.HAS_SIGNER), + flags: UserDataRequest.FULL_DATA.or(UserDataRequest.ATTESTATION).or(UserDataRequest.HAS_SIGNER), searchDataKey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], signer: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootSystemName: "VRSC" }), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); - const obj = new UserDataRequestDetailsOrdinalVdxfObject({ data: details }); + const obj = new UserDataRequestOrdinalVdxfObject({ data: details }); const round = roundTripBuffer(obj); - expect(round).toBeInstanceOf(UserDataRequestDetailsOrdinalVdxfObject); + expect(round).toBeInstanceOf(UserDataRequestOrdinalVdxfObject); - const d2 = (round as UserDataRequestDetailsOrdinalVdxfObject).data; + const d2 = (round as UserDataRequestOrdinalVdxfObject).data; expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d2.searchDataKey).toEqual(details.searchDataKey); expect(d2.signer!.toIAddress()).toEqual(details.signer!.toIAddress()); @@ -484,9 +481,9 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const json = obj.toJson(); expect(json.data).toBeDefined(); const roundJ = roundTripJson(obj); - expect(roundJ).toBeInstanceOf(UserDataRequestDetailsOrdinalVdxfObject); + expect(roundJ).toBeInstanceOf(UserDataRequestOrdinalVdxfObject); - const d3 = (roundJ as UserDataRequestDetailsOrdinalVdxfObject).data; + const d3 = (roundJ as UserDataRequestOrdinalVdxfObject).data; expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d3.searchDataKey).toEqual(details.searchDataKey); expect(d3.signer!.toIAddress()).toEqual(details.signer!.toIAddress()); @@ -506,7 +503,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC" }), }), - requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" + detailsID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); const obj = new UserSpecificDataPacketDetailsOrdinalVdxfObject({ data: details }); @@ -515,7 +512,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(round).toBeInstanceOf(UserSpecificDataPacketDetailsOrdinalVdxfObject); const d2 = (round as UserSpecificDataPacketDetailsOrdinalVdxfObject).data; - expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); + expect(d2.detailsID!.toString()).toEqual(details.detailsID!.toString()); expect(d2.signableObjects.length).toBe(1); expect(d2.statements?.length).toBe(2); expect(d2.signature?.signatureAsVch.toString('hex')).toBe("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf"); @@ -526,7 +523,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(roundJ).toBeInstanceOf(UserSpecificDataPacketDetailsOrdinalVdxfObject); const d3 = (roundJ as UserSpecificDataPacketDetailsOrdinalVdxfObject).data; - expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); + expect(d3.detailsID!.toString()).toEqual(details.detailsID!.toString()); expect(d3.signableObjects.length).toBe(1); expect(d3.statements?.length).toBe(2); expect(d3.signature?.signatureAsVch.toString('hex')).toBe("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf"); diff --git a/src/__tests__/vdxf/userdatarequestdetails.test.ts b/src/__tests__/vdxf/userdatarequest.test.ts similarity index 50% rename from src/__tests__/vdxf/userdatarequestdetails.test.ts rename to src/__tests__/vdxf/userdatarequest.test.ts index 0121359e..90304aeb 100644 --- a/src/__tests__/vdxf/userdatarequestdetails.test.ts +++ b/src/__tests__/vdxf/userdatarequest.test.ts @@ -1,38 +1,38 @@ -import { CompactIdAddressObject, UserDataRequestDetails, UserDataRequestDetailsJson } from "../../vdxf/classes"; +import { CompactIdAddressObject, UserDataRequest, UserDataRequestJson } from "../../vdxf/classes"; -describe('Serializes and deserializes UserDataRequestDetails', () => { - test('(de)serialize UserDataRequestDetails', () => { +describe('Serializes and deserializes UserDataRequest', () => { + test('(de)serialize UserDataRequest', () => { - const provisionJson: UserDataRequestDetailsJson = { + const provisionJson: UserDataRequestJson = { version: 1, - flags: UserDataRequestDetails.FULL_DATA.or(UserDataRequestDetails.ATTESTATION).or(UserDataRequestDetails.HAS_SIGNER).toNumber(), + flags: UserDataRequest.FULL_DATA.or(UserDataRequest.ATTESTATION).or(UserDataRequest.HAS_SIGNER).toNumber(), searchdatakey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], signer: { version: 1, type: CompactIdAddressObject.IS_IDENTITYID.toNumber(), address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootsystemname: "VRSC" }, requestid: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" } - const e = UserDataRequestDetails.fromJson(provisionJson); + const e = UserDataRequest.fromJson(provisionJson); const r = e.toBuffer(); - const rFromBuf = new UserDataRequestDetails(); + const rFromBuf = new UserDataRequest(); rFromBuf.fromBuffer(r); expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) }); - test('(de)serialize UserDataRequestDetails with requestedkeys', async () => { + test('(de)serialize UserDataRequest with requestedkeys', async () => { - const provisionJson: UserDataRequestDetailsJson = { + const provisionJson: UserDataRequestJson = { version: 1, - flags: UserDataRequestDetails.PARTIAL_DATA.or(UserDataRequestDetails.ATTESTATION).or(UserDataRequestDetails.HAS_SIGNER).toNumber(), + flags: UserDataRequest.PARTIAL_DATA.or(UserDataRequest.ATTESTATION).or(UserDataRequest.HAS_SIGNER).toNumber(), searchdatakey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], signer: { version: 1, type: CompactIdAddressObject.IS_FQN.toNumber(), address: "bob@", rootsystemname: "VRSC" }, requestedkeys: ["iLB8SG7ErJtTYcG1f4w9RLuMJPpAsjFkiL"], requestid: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" } - const e = UserDataRequestDetails.fromJson(provisionJson); + const e = UserDataRequest.fromJson(provisionJson); const r = e.toBuffer(); - const rFromBuf = new UserDataRequestDetails(); + const rFromBuf = new UserDataRequest(); rFromBuf.fromBuffer(r); expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) diff --git a/src/__tests__/vdxf/userspecificdatapacketdetails.test.ts b/src/__tests__/vdxf/userspecificdatapacketdetails.test.ts index 68054e2c..f08f6bdb 100644 --- a/src/__tests__/vdxf/userspecificdatapacketdetails.test.ts +++ b/src/__tests__/vdxf/userspecificdatapacketdetails.test.ts @@ -12,7 +12,7 @@ describe("UserSpecificDataPacketDetails", () => { test("creates instance with custom values", () => { const item = new UserSpecificDataPacketDetails({ version: new BN(UserSpecificDataPacketDetails.DEFAULT_VERSION), - flags: UserSpecificDataPacketDetails.HAS_STATEMENTS.or(UserSpecificDataPacketDetails.HAS_SIGNATURE), + flags: UserSpecificDataPacketDetails.HAS_STATEMENTS.or(UserSpecificDataPacketDetails.HAS_SIGNATURE).or(UserSpecificDataPacketDetails.HAS_DETAILS_ID), signableObjects: [DataDescriptor.fromJson({ version: new BN(1), label: "123", objectdata: "0011223344aabbcc", flags: DataDescriptor.FLAG_LABEL_PRESENT })], statements: ["Statement 1", "Statement 2"], signature: new VerifiableSignatureData({ @@ -23,7 +23,7 @@ describe("UserSpecificDataPacketDetails", () => { identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC" }), }), - requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" + detailsID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); const detailsBuffer = item.toBuffer(); diff --git a/src/constants/ordinals/ordinals.ts b/src/constants/ordinals/ordinals.ts index 1823219c..94e79f53 100644 --- a/src/constants/ordinals/ordinals.ts +++ b/src/constants/ordinals/ordinals.ts @@ -15,4 +15,4 @@ export const VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new BN(6, 10); export const VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS = new BN(8, 10); export const VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET = new BN(10, 10); export const VDXF_ORDINAL_USER_DATA_REQUEST = new BN(12, 10); -export const VDXF_ORDINAL_DATA_DESCRIPTOR_RESPONSE = new BN(13, 10); +export const VDXF_ORDINAL_DATA_RESPONSE = new BN(13, 10); diff --git a/src/constants/ordinals/register.ts b/src/constants/ordinals/register.ts index b9165292..2df50e31 100644 --- a/src/constants/ordinals/register.ts +++ b/src/constants/ordinals/register.ts @@ -1,8 +1,8 @@ -import { APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY, DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, LOGIN_REQUEST_DETAILS_VDXF_KEY, LOGIN_RESPONSE_DETAILS_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY, DATA_DESCRIPTOR_RESPONSE_VDXF_KEY, USER_DATA_REQUEST_DETAILS_VDXF_KEY, USER_SPECIFIC_DATA_PACKET_VDXF_KEY } from "../../vdxf"; -import { AppEncryptionRequestDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject"; +import { APP_ENCRYPTION_REQUEST_VDXF_KEY, DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, LOGIN_REQUEST_DETAILS_VDXF_KEY, LOGIN_RESPONSE_DETAILS_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY, DATA_RESPONSE_VDXF_KEY, USER_DATA_REQUEST_VDXF_KEY, USER_SPECIFIC_DATA_PACKET_VDXF_KEY } from "../../vdxf"; +import { AppEncryptionRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject"; import { DataDescriptorOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject"; -import { DataDescriptorResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataDescriptorResponseOrdinalVdxfObject"; -import { UserDataRequestDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/UserDataRequestDetailsOrdinalVdxfObject"; +import { DataResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataResponseOrdinalVdxfObject"; +import { UserDataRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject"; import { UserSpecificDataPacketDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject"; import { IdentityUpdateRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject"; import { IdentityUpdateResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject"; @@ -11,7 +11,7 @@ import { LoginResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/Logi import { OrdinalVdxfObjectOrdinalMap } from "../../vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap"; import { ProvisionIdentityDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject"; import { VerusPayInvoiceOrdinalVdxfObject } from "../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject"; -import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_LOGIN_RESPONSE, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE, VDXF_ORDINAL_DATA_DESCRIPTOR_RESPONSE, VDXF_ORDINAL_USER_DATA_REQUEST, VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET } from "./ordinals"; +import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_LOGIN_RESPONSE, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE, VDXF_ORDINAL_DATA_RESPONSE, VDXF_ORDINAL_USER_DATA_REQUEST, VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET } from "./ordinals"; export const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVdxfObject, false); @@ -21,8 +21,8 @@ export const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS.toNumber(), APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY.vdxfid, AppEncryptionRequestDetailsOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_DESCRIPTOR_RESPONSE.toNumber(), DATA_DESCRIPTOR_RESPONSE_VDXF_KEY.vdxfid, DataDescriptorResponseOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_USER_DATA_REQUEST.toNumber(), USER_DATA_REQUEST_DETAILS_VDXF_KEY.vdxfid, UserDataRequestDetailsOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS.toNumber(), APP_ENCRYPTION_REQUEST_VDXF_KEY.vdxfid, AppEncryptionRequestOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_RESPONSE.toNumber(), DATA_RESPONSE_VDXF_KEY.vdxfid, DataResponseOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_USER_DATA_REQUEST.toNumber(), USER_DATA_REQUEST_VDXF_KEY.vdxfid, UserDataRequestOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET.toNumber(), USER_SPECIFIC_DATA_PACKET_VDXF_KEY.vdxfid, UserSpecificDataPacketDetailsOrdinalVdxfObject, false); } \ No newline at end of file diff --git a/src/constants/ordinals/types.ts b/src/constants/ordinals/types.ts index 27f24336..2ead1a98 100644 --- a/src/constants/ordinals/types.ts +++ b/src/constants/ordinals/types.ts @@ -1,7 +1,7 @@ import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; import { - AppEncryptionRequestDetails, - AppEncryptionRequestDetailsJson, + AppEncryptionRequest, + AppEncryptionRequestJson, IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, @@ -12,14 +12,14 @@ import { LoginResponseDetailsJson, ProvisionIdentityDetails, ProvisionIdentityDetailsJson, - UserDataRequestDetails, - UserDataRequestDetailsJson, + UserDataRequest, + UserDataRequestJson, UserSpecificDataPacketDetails, UserSpecificDataPacketDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; -import { DataDescriptorResponse, DataDescriptorResponseJson } from "../../vdxf/classes/response/DataDescriptorResponse"; +import { DataResponse, DataResponseJson } from "../../vdxf/classes/response/DataResponse"; export type OrdinalVdxfObjectReservedData = DataDescriptor | @@ -29,9 +29,9 @@ export type OrdinalVdxfObjectReservedData = LoginRequestDetails | LoginResponseDetails | ProvisionIdentityDetails | - AppEncryptionRequestDetails | - DataDescriptorResponse | - UserDataRequestDetails | + AppEncryptionRequest | + DataResponse | + UserDataRequest | UserSpecificDataPacketDetails; export type OrdinalVdxfObjectReservedDataJson = @@ -42,8 +42,8 @@ export type OrdinalVdxfObjectReservedDataJson = LoginRequestDetailsJson | LoginResponseDetailsJson | ProvisionIdentityDetailsJson | - AppEncryptionRequestDetailsJson | - DataDescriptorResponseJson | - UserDataRequestDetailsJson | + AppEncryptionRequestJson | + DataResponseJson | + UserDataRequestJson | UserSpecificDataPacketDetailsJson; diff --git a/src/pbaas/ContentMultiMapRemove.ts b/src/pbaas/ContentMultiMapRemove.ts index 64b0170d..47649e11 100644 --- a/src/pbaas/ContentMultiMapRemove.ts +++ b/src/pbaas/ContentMultiMapRemove.ts @@ -4,7 +4,7 @@ import { fromBase58Check, toBase58Check } from "../utils/address"; import bufferutils from '../utils/bufferutils' import { BN } from 'bn.js'; import { BigNumber } from '../utils/types/BigNumber'; -import { I_ADDR_VERSION } from '../constants/vdxf'; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION, HASH256_BYTE_LENGTH } from '../constants/vdxf'; import { SerializableEntity } from '../utils/types/SerializableEntity'; const { BufferReader, BufferWriter } = bufferutils @@ -45,9 +45,9 @@ export class ContentMultiMapRemove implements SerializableEntity { byteLength += varint.encodingLength(this.version); byteLength += varint.encodingLength(this.action); if (this.action != ContentMultiMapRemove.ACTION_CLEAR_MAP) { - byteLength += 20 + byteLength += HASH160_BYTE_LENGTH if (this.action != ContentMultiMapRemove.ACTION_REMOVE_ALL_KEY) { - byteLength += 32 + byteLength += HASH256_BYTE_LENGTH; } } return byteLength diff --git a/src/pbaas/Credential.ts b/src/pbaas/Credential.ts index e4d01ab5..6201cdaf 100644 --- a/src/pbaas/Credential.ts +++ b/src/pbaas/Credential.ts @@ -3,7 +3,7 @@ import { BigNumber } from "../utils/types/BigNumber"; import { SerializableEntity } from "../utils/types/SerializableEntity"; import bufferutils from "../utils/bufferutils"; import varuint from "../utils/varuint"; -import { I_ADDR_VERSION, NULL_ADDRESS } from '../constants/vdxf'; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION, NULL_ADDRESS } from '../constants/vdxf'; import varint from '../utils/varint'; import { readLimitedString } from '../utils/string'; import { fromBase58Check, toBase58Check } from '../utils/address'; @@ -77,7 +77,7 @@ export class Credential implements SerializableEntity { length += varint.encodingLength(this.version); length += varint.encodingLength(this.flags); - length += 20 // Credential key + length += HASH160_BYTE_LENGTH // Credential key // Both the credential and scopes are serialized as JSON strings. const credStr = JSON.stringify(this.credential); diff --git a/src/pbaas/CurrencyValueMap.ts b/src/pbaas/CurrencyValueMap.ts index 7a34aa99..8ae00a46 100644 --- a/src/pbaas/CurrencyValueMap.ts +++ b/src/pbaas/CurrencyValueMap.ts @@ -4,7 +4,7 @@ import { fromBase58Check, toBase58Check } from "../utils/address"; import bufferutils from '../utils/bufferutils' import { BN } from 'bn.js'; import { BigNumber } from '../utils/types/BigNumber'; -import { I_ADDR_VERSION } from '../constants/vdxf'; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../constants/vdxf'; import { SerializableEntity } from '../utils/types/SerializableEntity'; const { BufferReader, BufferWriter } = bufferutils import { bnToDecimal, decimalToBn } from '../utils/numberConversion'; @@ -29,7 +29,7 @@ export class CurrencyValueMap implements SerializableEntity { } for (const [key, value] of this.value_map) { - byteLength += 20 + byteLength += HASH160_BYTE_LENGTH byteLength += this.multivalue ? 8 : varint.encodingLength(value) } diff --git a/src/pbaas/EvidenceData.ts b/src/pbaas/EvidenceData.ts index 6e37a366..7aea4d02 100644 --- a/src/pbaas/EvidenceData.ts +++ b/src/pbaas/EvidenceData.ts @@ -4,7 +4,7 @@ import { fromBase58Check, toBase58Check } from "../utils/address"; import bufferutils from '../utils/bufferutils' import { BN } from 'bn.js'; import { BigNumber } from '../utils/types/BigNumber'; -import { I_ADDR_VERSION } from '../constants/vdxf'; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../constants/vdxf'; import { SerializableEntity } from '../utils/types/SerializableEntity'; import * as VDXF_Data from '../vdxf/vdxfdatakeys'; @@ -97,7 +97,7 @@ export class EvidenceData implements SerializableEntity { if (this.type.eq(new BN(ETypes.TYPE_MULTIPART_DATA))) { byteLength += this.md.getByteLength(); } else { - byteLength += 20; + byteLength += HASH160_BYTE_LENGTH; } byteLength += varuint.encodingLength(this.data_vec.length); byteLength += this.data_vec.length; diff --git a/src/pbaas/Identity.ts b/src/pbaas/Identity.ts index 27285c6a..36f79de8 100644 --- a/src/pbaas/Identity.ts +++ b/src/pbaas/Identity.ts @@ -3,7 +3,7 @@ import bufferutils from '../utils/bufferutils' import { BigNumber } from '../utils/types/BigNumber'; import { Principal } from './Principal'; import { fromBase58Check, nameAndParentAddrToIAddr, toBase58Check } from '../utils/address'; -import { I_ADDR_VERSION, R_ADDR_VERSION } from '../constants/vdxf'; +import { I_ADDR_VERSION, R_ADDR_VERSION, HASH160_BYTE_LENGTH, HASH256_BYTE_LENGTH } from '../constants/vdxf'; import { BN } from 'bn.js'; import { IdentityID } from './IdentityID'; import { SaplingPaymentAddress } from './SaplingPaymentAddress'; @@ -157,16 +157,16 @@ export class Identity extends Principal implements SerializableEntity { length += varuint.encodingLength(this.content_map.size); for (const m of this.content_map.entries()) { - length += 20; //uint160 key - length += 32; //uint256 hash + length += HASH160_BYTE_LENGTH; //uint160 key + length += HASH256_BYTE_LENGTH } } length += varuint.encodingLength(this.content_map.size); for (const m of this.content_map.entries()) { - length += 20; //uint160 key - length += 32; //uint256 hash + length += HASH160_BYTE_LENGTH; //uint160 key + length += HASH256_BYTE_LENGTH; //uint256 hash } } diff --git a/src/pbaas/IdentityMultimapRef.ts b/src/pbaas/IdentityMultimapRef.ts index 2dc14492..aa7bc192 100644 --- a/src/pbaas/IdentityMultimapRef.ts +++ b/src/pbaas/IdentityMultimapRef.ts @@ -4,7 +4,7 @@ import { fromBase58Check, toBase58Check } from "../utils/address"; import bufferutils from '../utils/bufferutils' import { BN } from 'bn.js'; import { BigNumber } from '../utils/types/BigNumber'; -import { I_ADDR_VERSION } from '../constants/vdxf'; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION, HASH256_BYTE_LENGTH } from '../constants/vdxf'; import { SerializableEntity } from '../utils/types/SerializableEntity'; const { BufferReader, BufferWriter } = bufferutils @@ -66,18 +66,18 @@ export class IdentityMultimapRef implements SerializableEntity { byteLength += varint.encodingLength(this.version); byteLength += varint.encodingLength(this.flags); - byteLength += 20; // id_ID uint160 - byteLength += 20; // key uint160 + byteLength += HASH160_BYTE_LENGTH; // id_ID + byteLength += HASH160_BYTE_LENGTH; // vdxfkey byteLength += varint.encodingLength(this.height_start); // height_start uint32 byteLength += varint.encodingLength(this.height_end); // height_end uint32 if (this.flags.and(IdentityMultimapRef.FLAG_HAS_DATAHASH).gt(new BN(0))) { - byteLength += 32; + byteLength += HASH256_BYTE_LENGTH; } if (this.flags.and(IdentityMultimapRef.FLAG_HAS_SYSTEM).gt(new BN(0))) { - byteLength += 20 + byteLength += HASH160_BYTE_LENGTH } return byteLength } diff --git a/src/pbaas/PBaaSEvidenceRef.ts b/src/pbaas/PBaaSEvidenceRef.ts index dd203d94..fe2e4508 100644 --- a/src/pbaas/PBaaSEvidenceRef.ts +++ b/src/pbaas/PBaaSEvidenceRef.ts @@ -4,7 +4,7 @@ import { fromBase58Check, toBase58Check } from "../utils/address"; import bufferutils from '../utils/bufferutils' import { BN } from 'bn.js'; import { BigNumber } from '../utils/types/BigNumber'; -import { I_ADDR_VERSION } from '../constants/vdxf'; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../constants/vdxf'; import { SerializableEntity } from '../utils/types/SerializableEntity'; import { UTXORef } from './UTXORef'; import { IdentityMultimapRef } from './IdentityMultimapRef'; @@ -64,7 +64,7 @@ export class PBaaSEvidenceRef implements SerializableEntity { byteLength += varint.encodingLength(this.sub_object); if (this.flags.and(PBaaSEvidenceRef.FLAG_HAS_SYSTEM).gt(new BN(0))) { - byteLength += 20; + byteLength += HASH160_BYTE_LENGTH; } return byteLength diff --git a/src/pbaas/Rating.ts b/src/pbaas/Rating.ts index 3e0ff7b5..d6015bca 100644 --- a/src/pbaas/Rating.ts +++ b/src/pbaas/Rating.ts @@ -3,7 +3,7 @@ import { fromBase58Check, toBase58Check } from "../utils/address"; import bufferutils from '../utils/bufferutils' import { BN } from 'bn.js'; import { BigNumber } from '../utils/types/BigNumber'; -import { I_ADDR_VERSION } from '../constants/vdxf'; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../constants/vdxf'; import { SerializableEntity } from '../utils/types/SerializableEntity'; const { BufferReader, BufferWriter } = bufferutils @@ -43,7 +43,7 @@ export class Rating implements SerializableEntity { byteLength += varuint.encodingLength(this.ratings.size); for (const [key, value] of this.ratings) { - byteLength += 20 + byteLength += HASH160_BYTE_LENGTH byteLength += varuint.encodingLength(value.length) byteLength += value.length diff --git a/src/pbaas/SaltedData.ts b/src/pbaas/SaltedData.ts index e0646317..4d62af9d 100644 --- a/src/pbaas/SaltedData.ts +++ b/src/pbaas/SaltedData.ts @@ -4,7 +4,7 @@ import { fromBase58Check, toBase58Check } from "../utils/address"; import bufferutils from '../utils/bufferutils' import { BN } from 'bn.js'; import { BigNumber } from '../utils/types/BigNumber'; -import { I_ADDR_VERSION } from '../constants/vdxf'; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../constants/vdxf'; import { VDXFData } from '../vdxf/index'; const { BufferReader, BufferWriter } = bufferutils const createHash = require("create-hash"); @@ -51,7 +51,7 @@ export class SaltedData extends VDXFData { getByteLength() { let byteLength = 0; - byteLength += 20; //key + byteLength += HASH160_BYTE_LENGTH; // vdxfkey byteLength += varint.encodingLength(this.version); byteLength += varuint.encodingLength(this.data.length + this.salt.length); byteLength += this.data.length + this.salt.length; diff --git a/src/pbaas/SignatureData.ts b/src/pbaas/SignatureData.ts index 17780ea9..02414cf5 100644 --- a/src/pbaas/SignatureData.ts +++ b/src/pbaas/SignatureData.ts @@ -4,7 +4,7 @@ import { fromBase58Check, toBase58Check } from "../utils/address"; import bufferutils from '../utils/bufferutils' import { BN } from 'bn.js'; import { BigNumber } from '../utils/types/BigNumber'; -import { I_ADDR_VERSION } from '../constants/vdxf'; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../constants/vdxf'; import { SerializableEntity } from '../utils/types/SerializableEntity'; import { EHashTypes } from './DataDescriptor'; const { BufferReader, BufferWriter } = bufferutils @@ -115,11 +115,11 @@ export class SignatureData implements SerializableEntity { let byteLength = 0; byteLength += varint.encodingLength(this.version); - byteLength += 20; // system_ID uint160 + byteLength += HASH160_BYTE_LENGTH; // system_ID uint160 byteLength += varint.encodingLength(this.hash_type); byteLength += varuint.encodingLength(this.signature_hash.length); byteLength += this.signature_hash.length; - byteLength += 20; // identity_ID uint160 + byteLength += HASH160_BYTE_LENGTH; // identity_ID uint160 byteLength += varint.encodingLength(this.sig_type); byteLength += varuint.encodingLength(this.vdxf_keys.length); byteLength += this.vdxf_keys.length * 20; diff --git a/src/pbaas/URLRef.ts b/src/pbaas/URLRef.ts index 4324d719..06222502 100644 --- a/src/pbaas/URLRef.ts +++ b/src/pbaas/URLRef.ts @@ -4,7 +4,7 @@ import { fromBase58Check, toBase58Check } from "../utils/address"; import bufferutils from '../utils/bufferutils' import { BN } from 'bn.js'; import { BigNumber } from '../utils/types/BigNumber'; -import { I_ADDR_VERSION } from '../constants/vdxf'; +import { HASH256_BYTE_LENGTH } from '../constants/vdxf'; import { SerializableEntity } from '../utils/types/SerializableEntity'; const { BufferReader, BufferWriter } = bufferutils @@ -52,7 +52,7 @@ export class URLRef implements SerializableEntity { if( this.flags.and(URLRef.FLAG_HAS_HASH).eq(URLRef.FLAG_HAS_HASH) ) { // If the FLAG_HAS_HASH is set, we include the data hash - byteLength += 32; // 32 bytes for the hash + byteLength += HASH256_BYTE_LENGTH; // 32 bytes for the hash } } diff --git a/src/pbaas/UTXORef.ts b/src/pbaas/UTXORef.ts index 18811f05..d5a5b127 100644 --- a/src/pbaas/UTXORef.ts +++ b/src/pbaas/UTXORef.ts @@ -1,10 +1,7 @@ -import varint from '../utils/varint' -import varuint from '../utils/varuint' -import { fromBase58Check, toBase58Check } from "../utils/address"; import bufferutils from '../utils/bufferutils' import { BN } from 'bn.js'; import { BigNumber } from '../utils/types/BigNumber'; -import { I_ADDR_VERSION } from '../constants/vdxf'; +import { HASH256_BYTE_LENGTH } from '../constants/vdxf'; import { SerializableEntity } from '../utils/types/SerializableEntity'; const { BufferReader, BufferWriter } = bufferutils @@ -21,7 +18,7 @@ export class UTXORef implements SerializableEntity { getByteLength() { let byteLength = 0; - byteLength += 32; // hash uint256 + byteLength += HASH256_BYTE_LENGTH; // hash uint256 byteLength += 4; // n uint32 return byteLength diff --git a/src/vdxf/classes/CompactIdAddressObject.ts b/src/vdxf/classes/CompactIdAddressObject.ts index 144aeac2..9fc0471f 100644 --- a/src/vdxf/classes/CompactIdAddressObject.ts +++ b/src/vdxf/classes/CompactIdAddressObject.ts @@ -15,7 +15,7 @@ import { SerializableEntity } from '../../utils/types/SerializableEntity'; import varuint from '../../utils/varuint'; import { fromBase58Check, toBase58Check, toIAddress } from "../../utils/address"; import varint from '../../utils/varint'; -import { I_ADDR_VERSION } from '../../constants/vdxf'; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../../constants/vdxf'; export interface CompactIdAddressObjectJson { version: number; @@ -103,7 +103,7 @@ export class CompactIdAddressObject implements SerializableEntity { length += varuint.encodingLength(this.type.toNumber()); if (this.isIaddress()) { - length += 20; // identityuint160 + length += HASH160_BYTE_LENGTH; // identityuint160 } else { const addrLen = Buffer.from(this.address, 'utf8').byteLength; diff --git a/src/vdxf/classes/SaltedData.ts b/src/vdxf/classes/SaltedData.ts index ff60484d..91aa9b4d 100644 --- a/src/vdxf/classes/SaltedData.ts +++ b/src/vdxf/classes/SaltedData.ts @@ -4,7 +4,7 @@ import { fromBase58Check, toBase58Check } from "../../utils/address"; import bufferutils from '../../utils/bufferutils' import { BN } from 'bn.js'; import { BigNumber } from '../../utils/types/BigNumber'; -import { I_ADDR_VERSION } from '../../constants/vdxf'; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../../constants/vdxf'; import { VDXFData } from '../../'; import { EHashTypes } from '../../pbaas/DataDescriptor'; const { BufferReader, BufferWriter } = bufferutils @@ -51,7 +51,7 @@ export class SaltedData extends VDXFData { getByteLength() { let byteLength = 0; - byteLength += 20; //key + byteLength += HASH160_BYTE_LENGTH; byteLength += varint.encodingLength(this.version); byteLength += varuint.encodingLength(this.data.length + this.salt.length); byteLength += this.data.length + this.salt.length; diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index c6766564..1603d4fe 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -47,11 +47,11 @@ export { } from './provisioning/ProvisioningResult' export { Context } from './Context' export { DataCategory } from './PersonalProfile' -export * from './requestobjects/UserDataRequestDetails' +export * from './requestobjects/UserDataRequest' export * from './login/LoginRequestDetails' export * from './login/LoginResponseDetails' export * from './requestobjects/ProvisionIdentityDetails' -export * from './requestobjects/AppEncryptionRequestDetails' +export * from './requestobjects/AppEncryptionRequest' export * from './requestobjects/UserSpecificDataPacketDetails' export * from './CompactIdAddressObject' export { diff --git a/src/vdxf/classes/login/LoginRequestDetails.ts b/src/vdxf/classes/login/LoginRequestDetails.ts index fd0e7df9..74c67823 100644 --- a/src/vdxf/classes/login/LoginRequestDetails.ts +++ b/src/vdxf/classes/login/LoginRequestDetails.ts @@ -20,7 +20,7 @@ import { BigNumber } from "../../../utils/types/BigNumber"; import { BN } from "bn.js"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import varuint from "../../../utils/varuint"; -import { I_ADDR_VERSION } from '../../../constants/vdxf'; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../../../constants/vdxf'; import { fromBase58Check, toBase58Check } from "../../../utils/address"; import { CompactIdAddressObject, CompactIdAddressObjectJson } from "../CompactIdAddressObject"; @@ -132,7 +132,7 @@ export class LoginRequestDetails implements SerializableEntity { let length = 0; length += varuint.encodingLength(this.flags.toNumber()); - length += 20; // requestID hash length + length += HASH160_BYTE_LENGTH; if (this.hasRecipentConstraints()) { diff --git a/src/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.ts similarity index 53% rename from src/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.ts rename to src/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.ts index 94c4a9f6..20c00d58 100644 --- a/src/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.ts +++ b/src/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.ts @@ -2,14 +2,14 @@ import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS } from "../../../constants/ import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { AppEncryptionRequestDetails, AppEncryptionRequestDetailsJson } from "../requestobjects/AppEncryptionRequestDetails"; +import { AppEncryptionRequest, AppEncryptionRequestJson } from "../requestobjects/AppEncryptionRequest"; -export class AppEncryptionRequestDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: AppEncryptionRequestDetails; +export class AppEncryptionRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: AppEncryptionRequest; constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { - data: new AppEncryptionRequestDetails() + request: OrdinalVdxfObjectInterfaceTemplate = { + data: new AppEncryptionRequest() } ) { super( @@ -17,13 +17,13 @@ export class AppEncryptionRequestDetailsOrdinalVdxfObject extends SerializableEn type: VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS, data: request.data }, - AppEncryptionRequestDetails + AppEncryptionRequest ); } - static fromJson(details: OrdinalVdxfObjectJsonTemplate): AppEncryptionRequestDetailsOrdinalVdxfObject { - return new AppEncryptionRequestDetailsOrdinalVdxfObject({ - data: AppEncryptionRequestDetails.fromJson(details.data) + static fromJson(details: OrdinalVdxfObjectJsonTemplate): AppEncryptionRequestOrdinalVdxfObject { + return new AppEncryptionRequestOrdinalVdxfObject({ + data: AppEncryptionRequest.fromJson(details.data) }) } } \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/DataDescriptorResponseOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/DataDescriptorResponseOrdinalVdxfObject.ts deleted file mode 100644 index f4138b16..00000000 --- a/src/vdxf/classes/ordinals/DataDescriptorResponseOrdinalVdxfObject.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { VDXF_ORDINAL_DATA_DESCRIPTOR_RESPONSE } from "../../../constants/ordinals/ordinals"; -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { AppEncryptionRequestDetails, AppEncryptionRequestDetailsJson } from "../requestobjects/AppEncryptionRequestDetails"; -import { DataDescriptorResponse, DataDescriptorResponseJson } from "../response/DataDescriptorResponse"; - -export class DataDescriptorResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: DataDescriptorResponse; - - constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { - data: new DataDescriptorResponse() - } - ) { - super( - { - type: VDXF_ORDINAL_DATA_DESCRIPTOR_RESPONSE, - data: request.data - }, - DataDescriptorResponse - ); - } - - static fromJson(details: OrdinalVdxfObjectJsonTemplate): DataDescriptorResponseOrdinalVdxfObject { - return new DataDescriptorResponseOrdinalVdxfObject({ - data: DataDescriptorResponse.fromJson(details.data) - }) - } -} \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/DataResponseOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/DataResponseOrdinalVdxfObject.ts new file mode 100644 index 00000000..880cf0c7 --- /dev/null +++ b/src/vdxf/classes/ordinals/DataResponseOrdinalVdxfObject.ts @@ -0,0 +1,29 @@ +import { VDXF_ORDINAL_DATA_RESPONSE } from "../../../constants/ordinals/ordinals"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { DataResponse, DataResponseJson } from "../response/DataResponse"; + +export class DataResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: DataResponse; + + constructor( + request: OrdinalVdxfObjectInterfaceTemplate = { + data: new DataResponse() + } + ) { + super( + { + type: VDXF_ORDINAL_DATA_RESPONSE, + data: request.data + }, + DataResponse + ); + } + + static fromJson(details: OrdinalVdxfObjectJsonTemplate): DataResponseOrdinalVdxfObject { + return new DataResponseOrdinalVdxfObject({ + data: DataResponse.fromJson(details.data) + }) + } +} \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/UserDataRequestDetailsOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/UserDataRequestDetailsOrdinalVdxfObject.ts deleted file mode 100644 index 1ee775ae..00000000 --- a/src/vdxf/classes/ordinals/UserDataRequestDetailsOrdinalVdxfObject.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { VDXF_ORDINAL_USER_DATA_REQUEST } from "../../../constants/ordinals/ordinals"; -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { UserDataRequestDetails, UserDataRequestDetailsJson } from "../requestobjects/UserDataRequestDetails"; - -export class UserDataRequestDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: UserDataRequestDetails; - - constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { - data: new UserDataRequestDetails() - } - ) { - super( - { - type: VDXF_ORDINAL_USER_DATA_REQUEST, - data: request.data - }, - UserDataRequestDetails - ); - } - - static fromJson(details: OrdinalVdxfObjectJsonTemplate): UserDataRequestDetailsOrdinalVdxfObject { - return new UserDataRequestDetailsOrdinalVdxfObject({ - data: UserDataRequestDetails.fromJson(details.data) - }) - } -} diff --git a/src/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.ts new file mode 100644 index 00000000..6e4f4869 --- /dev/null +++ b/src/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.ts @@ -0,0 +1,29 @@ +import { VDXF_ORDINAL_USER_DATA_REQUEST } from "../../../constants/ordinals/ordinals"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { UserDataRequest, UserDataRequestJson } from "../requestobjects/UserDataRequest"; + +export class UserDataRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: UserDataRequest; + + constructor( + request: OrdinalVdxfObjectInterfaceTemplate = { + data: new UserDataRequest() + } + ) { + super( + { + type: VDXF_ORDINAL_USER_DATA_REQUEST, + data: request.data + }, + UserDataRequest + ); + } + + static fromJson(details: OrdinalVdxfObjectJsonTemplate): UserDataRequestOrdinalVdxfObject { + return new UserDataRequestOrdinalVdxfObject({ + data: UserDataRequest.fromJson(details.data) + }) + } +} diff --git a/src/vdxf/classes/ordinals/index.ts b/src/vdxf/classes/ordinals/index.ts index 1711a47e..5f6c75f6 100644 --- a/src/vdxf/classes/ordinals/index.ts +++ b/src/vdxf/classes/ordinals/index.ts @@ -9,10 +9,10 @@ export * from './SerializableEntityOrdinalVdxfObject' export * from './VerusPayInvoiceOrdinalVdxfObject' export * from './LoginRequestDetailsOrdinalVdxfObject' export * from './LoginResponseDetailsOrdinalVdxfObject' -export * from './AppEncryptionRequestDetailsOrdinalVdxfObject' +export * from './AppEncryptionRequestOrdinalVdxfObject' export * from './ProvisionIdentityDetailsOrdinalVdxfObject' -export * from './DataDescriptorResponseOrdinalVdxfObject' -export * from './UserDataRequestDetailsOrdinalVdxfObject' +export * from './DataResponseOrdinalVdxfObject' +export * from './UserDataRequestOrdinalVdxfObject' export * from './UserSpecificDataPacketDetailsOrdinalVdxfObject' registerOrdinals(); \ No newline at end of file diff --git a/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts b/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts index 6f3adc03..462b90dc 100644 --- a/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts +++ b/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts @@ -5,7 +5,7 @@ import { BN } from 'bn.js'; import { BigNumber } from '../../../utils/types/BigNumber'; import { TransferDestination, TransferDestinationJson } from '../../../pbaas/TransferDestination'; import { fromBase58Check, toBase58Check } from '../../../utils/address'; -import { I_ADDR_VERSION } from '../../../constants/vdxf'; +import { I_ADDR_VERSION, HASH160_BYTE_LENGTH } from '../../../constants/vdxf'; import createHash = require('create-hash'); import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { VERUSPAY_VERSION_4, VERUSPAY_VERSION_CURRENT } from '../../../constants/vdxf/veruspay'; @@ -214,7 +214,7 @@ export class VerusPayInvoiceDetails implements SerializableEntity { length += varuint.encodingLength(this.acceptedsystems.length); this.acceptedsystems.forEach(() => { - length += 20 + length += HASH160_BYTE_LENGTH }) } diff --git a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts b/src/vdxf/classes/requestobjects/AppEncryptionRequest.ts similarity index 86% rename from src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts rename to src/vdxf/classes/requestobjects/AppEncryptionRequest.ts index 308b5c37..cd502865 100644 --- a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/AppEncryptionRequest.ts @@ -1,6 +1,6 @@ /** - * AppEncryptionRequestDetails - Class for handling application requests for encrypted derived seeds + * AppEncryptionRequest - Class for handling application requests for encrypted derived seeds * * This class is used when an application is requesting an encrypted derived seed from the user's master seed, * using specific parameters passed by the application. The request includes: @@ -23,9 +23,9 @@ import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { CompactIdAddressObject, CompactIdAddressObjectJson } from '../CompactIdAddressObject'; import varuint from '../../../utils/varuint'; import { fromBase58Check, toBase58Check } from '../../../utils/address'; -import { I_ADDR_VERSION } from '../../../constants/vdxf'; +import { I_ADDR_VERSION, HASH160_BYTE_LENGTH } from '../../../constants/vdxf'; -export interface AppEncryptionRequestDetailsInterface { +export interface AppEncryptionRequestInterface { version?: BigNumber; flags: BigNumber; encryptToZAddress: string; @@ -36,7 +36,7 @@ export interface AppEncryptionRequestDetailsInterface { requestID?: string; } -export interface AppEncryptionRequestDetailsJson { +export interface AppEncryptionRequestJson { version: number; flags: number; encrypttozaddress: string; @@ -64,7 +64,7 @@ export interface AppEncryptionRequestDetailsJson { * john.domain@ or [20-byte hex iaddress][20-byte hex system] */ -export class AppEncryptionRequestDetails implements SerializableEntity { +export class AppEncryptionRequest implements SerializableEntity { static VERSION_INVALID = new BN(0); static FIRST_VERSION = new BN(1); static LAST_VERSION = new BN(1); @@ -84,8 +84,8 @@ export class AppEncryptionRequestDetails implements SerializableEntity { toAddress?: CompactIdAddressObject; requestID?: string; - constructor(data?: AppEncryptionRequestDetailsInterface) { - this.version = data?.version || AppEncryptionRequestDetails.DEFAULT_VERSION; + constructor(data?: AppEncryptionRequestInterface) { + this.version = data?.version || AppEncryptionRequest.DEFAULT_VERSION; this.flags = data?.flags || new BN(0); this.encryptToZAddress = data?.encryptToZAddress || ''; this.derivationNumber = data?.derivationNumber || new BN(0); @@ -105,19 +105,19 @@ export class AppEncryptionRequestDetails implements SerializableEntity { let flags = new BN(0); if (this.secondaryDerivationNumber != null) { - flags = flags.or(AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER); + flags = flags.or(AppEncryptionRequest.HAS_SECONDARY_SEED_DERIVATION_NUMBER); } if (this.fromAddress != null) { - flags = flags.or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS); + flags = flags.or(AppEncryptionRequest.HAS_FROM_ADDRESS); } if (this.toAddress != null) { - flags = flags.or(AppEncryptionRequestDetails.HAS_TO_ADDRESS); + flags = flags.or(AppEncryptionRequest.HAS_TO_ADDRESS); } if (this.requestID != null) { - flags = flags.or(AppEncryptionRequestDetails.HAS_REQUEST_ID); + flags = flags.or(AppEncryptionRequest.HAS_REQUEST_ID); } return flags; @@ -132,19 +132,19 @@ export class AppEncryptionRequestDetails implements SerializableEntity { } hasSecondarySeedDerivation(flags: BigNumber = this.flags): boolean { - return flags.and(AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER).gt(new BN(0)); + return flags.and(AppEncryptionRequest.HAS_SECONDARY_SEED_DERIVATION_NUMBER).gt(new BN(0)); } hasFromAddress(flags: BigNumber = this.flags): boolean { - return flags.and(AppEncryptionRequestDetails.HAS_FROM_ADDRESS).gt(new BN(0)); + return flags.and(AppEncryptionRequest.HAS_FROM_ADDRESS).gt(new BN(0)); } hasToAddress(flags: BigNumber = this.flags): boolean { - return flags.and(AppEncryptionRequestDetails.HAS_TO_ADDRESS).gt(new BN(0)); + return flags.and(AppEncryptionRequest.HAS_TO_ADDRESS).gt(new BN(0)); } hasRequestID(flags: BigNumber = this.flags): boolean { - return flags.and(AppEncryptionRequestDetails.HAS_REQUEST_ID).gt(new BN(0)); + return flags.and(AppEncryptionRequest.HAS_REQUEST_ID).gt(new BN(0)); } getByteLength(): number { @@ -173,7 +173,7 @@ export class AppEncryptionRequestDetails implements SerializableEntity { } if (this.hasRequestID(flags)) { - length += 20; // HASH160_BYTE_LENGTH for i-address + length += HASH160_BYTE_LENGTH; } return length; @@ -251,7 +251,7 @@ export class AppEncryptionRequestDetails implements SerializableEntity { return reader.offset; } - toJson(): AppEncryptionRequestDetailsJson { + toJson(): AppEncryptionRequestJson { // Set flags before serialization const flags = this.calcFlags(); @@ -267,8 +267,8 @@ export class AppEncryptionRequestDetails implements SerializableEntity { }; } - static fromJson(json: AppEncryptionRequestDetailsJson): AppEncryptionRequestDetails { - const instance = new AppEncryptionRequestDetails(); + static fromJson(json: AppEncryptionRequestJson): AppEncryptionRequest { + const instance = new AppEncryptionRequest(); instance.version = new BN(json.version); instance.flags = new BN(json.flags); instance.encryptToZAddress = json.encrypttozaddress; diff --git a/src/vdxf/classes/requestobjects/UserDataRequestDetails.ts b/src/vdxf/classes/requestobjects/UserDataRequest.ts similarity index 83% rename from src/vdxf/classes/requestobjects/UserDataRequestDetails.ts rename to src/vdxf/classes/requestobjects/UserDataRequest.ts index 7e5bfb59..836f69a5 100644 --- a/src/vdxf/classes/requestobjects/UserDataRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/UserDataRequest.ts @@ -28,9 +28,9 @@ const { BufferReader, BufferWriter } = bufferutils; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { CompactIdAddressObject, CompactIdAddressObjectJson } from '../CompactIdAddressObject'; import { fromBase58Check, toBase58Check } from '../../../utils/address'; -import { I_ADDR_VERSION } from '../../../constants/vdxf'; +import { I_ADDR_VERSION, HASH160_BYTE_LENGTH } from '../../../constants/vdxf'; -export interface UserDataRequestDetailsInterface { +export interface UserDataRequestInterface { version?: BigNumber; flags: BigNumber; searchDataKey: Array<{[key: string]: string}>; @@ -39,7 +39,7 @@ export interface UserDataRequestDetailsInterface { requestID?: string; } -export interface UserDataRequestDetailsJson { +export interface UserDataRequestJson { version: number; flags: number; searchdatakey: Array<{[key: string]: string}>; // ID object of the specific information requested @@ -48,7 +48,7 @@ export interface UserDataRequestDetailsJson { requestid?: string; } -export class UserDataRequestDetails implements SerializableEntity { +export class UserDataRequest implements SerializableEntity { static VERSION_INVALID = new BN(0); static FIRST_VERSION = new BN(1); static LAST_VERSION = new BN(1); @@ -73,8 +73,8 @@ export class UserDataRequestDetails implements SerializableEntity { requestedKeys?: string[]; requestID?: string; - constructor(data?: UserDataRequestDetailsInterface) { - this.version = data?.version || UserDataRequestDetails.DEFAULT_VERSION; + constructor(data?: UserDataRequestInterface) { + this.version = data?.version || UserDataRequest.DEFAULT_VERSION; this.flags = data?.flags || new BN(0); this.searchDataKey = data?.searchDataKey || []; this.signer = data?.signer; @@ -87,13 +87,13 @@ export class UserDataRequestDetails implements SerializableEntity { calcFlags(): BigNumber { let flags = new BN(0); if (this.requestedKeys && this.requestedKeys.length > 0) { - flags = flags.or(UserDataRequestDetails.HAS_REQUESTED_KEYS); + flags = flags.or(UserDataRequest.HAS_REQUESTED_KEYS); } if (this.signer) { - flags = flags.or(UserDataRequestDetails.HAS_SIGNER); + flags = flags.or(UserDataRequest.HAS_SIGNER); } if (this.requestID) { - flags = flags.or(UserDataRequestDetails.HAS_REQUEST_ID); + flags = flags.or(UserDataRequest.HAS_REQUEST_ID); } return flags; @@ -104,15 +104,15 @@ export class UserDataRequestDetails implements SerializableEntity { } hasSigner(): boolean { - return this.flags.and(UserDataRequestDetails.HAS_SIGNER).eq(UserDataRequestDetails.HAS_SIGNER); + return this.flags.and(UserDataRequest.HAS_SIGNER).eq(UserDataRequest.HAS_SIGNER); } hasRequestedKeys(): boolean { - return this.flags.and(UserDataRequestDetails.HAS_REQUESTED_KEYS).eq(UserDataRequestDetails.HAS_REQUESTED_KEYS); + return this.flags.and(UserDataRequest.HAS_REQUESTED_KEYS).eq(UserDataRequest.HAS_REQUESTED_KEYS); } hasRequestID(): boolean { - return this.flags.and(UserDataRequestDetails.HAS_REQUEST_ID).eq(UserDataRequestDetails.HAS_REQUEST_ID); + return this.flags.and(UserDataRequest.HAS_REQUEST_ID).eq(UserDataRequest.HAS_REQUEST_ID); } /** @@ -120,7 +120,7 @@ export class UserDataRequestDetails implements SerializableEntity { * @returns True if exactly one data type flag is set */ hasDataTypeSet(): boolean { - const dataTypeFlags = UserDataRequestDetails.FULL_DATA.or(UserDataRequestDetails.PARTIAL_DATA).or(UserDataRequestDetails.COLLECTION); + const dataTypeFlags = UserDataRequest.FULL_DATA.or(UserDataRequest.PARTIAL_DATA).or(UserDataRequest.COLLECTION); const setDataFlags = this.flags.and(dataTypeFlags); // Check if exactly one flag is set by verifying it's a power of 2 @@ -132,7 +132,7 @@ export class UserDataRequestDetails implements SerializableEntity { * @returns True if exactly one request type flag is set */ hasRequestTypeSet(): boolean { - const requestTypeFlags = UserDataRequestDetails.ATTESTATION.or(UserDataRequestDetails.CLAIM).or(UserDataRequestDetails.CREDENTIAL); + const requestTypeFlags = UserDataRequest.ATTESTATION.or(UserDataRequest.CLAIM).or(UserDataRequest.CREDENTIAL); const setRequestFlags = this.flags.and(requestTypeFlags); // Check if exactly one flag is set by verifying it's a power of 2 @@ -140,7 +140,7 @@ export class UserDataRequestDetails implements SerializableEntity { } isValid(): boolean { - let valid = this.version.gte(UserDataRequestDetails.FIRST_VERSION) && this.version.lte(UserDataRequestDetails.LAST_VERSION); + let valid = this.version.gte(UserDataRequest.FIRST_VERSION) && this.version.lte(UserDataRequest.LAST_VERSION); // Check that exactly one data type flag is set valid &&= this.hasDataTypeSet(); @@ -163,7 +163,7 @@ export class UserDataRequestDetails implements SerializableEntity { for (const item of this.searchDataKey) { const key = Object.keys(item)[0]; const value = item[key]; - length += 20 // VDXF key length + length += HASH160_BYTE_LENGTH; length += varuint.encodingLength(Buffer.byteLength(value, 'utf8')); length += Buffer.byteLength(value, 'utf8'); } @@ -176,13 +176,13 @@ export class UserDataRequestDetails implements SerializableEntity { length += varuint.encodingLength(this.requestedKeys ? this.requestedKeys.length : 0); if (this.requestedKeys) { for (const key of this.requestedKeys) { - length += 20 // VDXF key length + length += HASH160_BYTE_LENGTH; } } } if (this.hasRequestID()) { - length += 20; // HASH160_BYTE_LENGTH for i-address + length += HASH160_BYTE_LENGTH; } return length; @@ -227,7 +227,7 @@ export class UserDataRequestDetails implements SerializableEntity { this.searchDataKey = []; for (let i = 0; i < searchDataKeyLength; i++) { - const keyHash = reader.readSlice(20); // 20-byte VDXF key + const keyHash = reader.readSlice(HASH160_BYTE_LENGTH); // 20-byte VDXF key const valueBuffer = reader.readVarSlice(); const value = valueBuffer.toString('utf8'); const key = toBase58Check(keyHash, I_ADDR_VERSION); @@ -258,7 +258,7 @@ export class UserDataRequestDetails implements SerializableEntity { return reader.offset; } - toJson(): UserDataRequestDetailsJson { + toJson(): UserDataRequestJson { const flags = this.calcFlags(); return { @@ -271,8 +271,8 @@ export class UserDataRequestDetails implements SerializableEntity { }; } - static fromJson(json: UserDataRequestDetailsJson) { - const requestData = new UserDataRequestDetails(); + static fromJson(json: UserDataRequestJson) { + const requestData = new UserDataRequest(); requestData.version = new BN(json.version); requestData.flags = new BN(json.flags); requestData.searchDataKey = json.searchdatakey; diff --git a/src/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.ts b/src/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.ts index c06c40b9..2d6b8038 100644 --- a/src/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.ts +++ b/src/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.ts @@ -27,7 +27,7 @@ import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { DataDescriptor, DataDescriptorJson } from '../../../pbaas'; import { VerifiableSignatureData, VerifiableSignatureDataJson } from '../VerifiableSignatureData'; import { fromBase58Check, toBase58Check } from '../../../utils/address'; -import { I_ADDR_VERSION } from '../../../constants/vdxf'; +import { I_ADDR_VERSION, HASH160_BYTE_LENGTH } from '../../../constants/vdxf'; export interface UserSpecificDataPacketDetailsInterface { version?: BigNumber; @@ -35,7 +35,7 @@ export interface UserSpecificDataPacketDetailsInterface { signableObjects: Array; statements?: Array; signature?: VerifiableSignatureData; - requestID?: string; + detailsID?: string; } export interface UserSpecificDataPacketDetailsJson { @@ -44,7 +44,7 @@ export interface UserSpecificDataPacketDetailsJson { signableobjects: Array; // Array of signable data objects statements?: Array; signature?: VerifiableSignatureDataJson; - requestid?: string; + detailsid?: string; } @@ -61,14 +61,14 @@ export class UserSpecificDataPacketDetails implements SerializableEntity { static FOR_USERS_SIGNATURE = new BN(4); static FOR_TRANSMITTAL_TO_USER = new BN(8); static HAS_URL_FOR_DOWNLOAD = new BN(16); - static HAS_REQUEST_ID = new BN(32); + static HAS_DETAILS_ID = new BN(32); version: BigNumber; flags: BigNumber; signableObjects: Array; statements?: Array; signature?: VerifiableSignatureData; - requestID?: string; + detailsID?: string; constructor(data?: UserSpecificDataPacketDetailsInterface) { this.version = data?.version || UserSpecificDataPacketDetails.DEFAULT_VERSION; @@ -76,7 +76,7 @@ export class UserSpecificDataPacketDetails implements SerializableEntity { this.signableObjects = data?.signableObjects || []; this.statements = data?.statements || []; this.signature = data?.signature || undefined; - this.requestID = data?.requestID; + this.detailsID = data?.detailsID; this.setFlags(); } @@ -96,8 +96,8 @@ export class UserSpecificDataPacketDetails implements SerializableEntity { flags = flags.or(UserSpecificDataPacketDetails.HAS_SIGNATURE); } - if (this.requestID) { - flags = flags.or(UserSpecificDataPacketDetails.HAS_REQUEST_ID); + if (this.detailsID) { + flags = flags.or(UserSpecificDataPacketDetails.HAS_DETAILS_ID); } return flags; @@ -111,8 +111,8 @@ export class UserSpecificDataPacketDetails implements SerializableEntity { return this.flags.and(UserSpecificDataPacketDetails.HAS_SIGNATURE).eq(UserSpecificDataPacketDetails.HAS_SIGNATURE); } - hasRequestID(): boolean { - return this.flags.and(UserSpecificDataPacketDetails.HAS_REQUEST_ID).eq(UserSpecificDataPacketDetails.HAS_REQUEST_ID); + hasDetailsID(): boolean { + return this.flags.and(UserSpecificDataPacketDetails.HAS_DETAILS_ID).eq(UserSpecificDataPacketDetails.HAS_DETAILS_ID); } isValid(): boolean { @@ -157,8 +157,8 @@ export class UserSpecificDataPacketDetails implements SerializableEntity { length += this.signature.getByteLength(); } - if (this.hasRequestID()) { - length += 20; // HASH160_BYTE_LENGTH for i-address + if (this.hasDetailsID()) { + length += HASH160_BYTE_LENGTH; } return length; @@ -188,8 +188,8 @@ export class UserSpecificDataPacketDetails implements SerializableEntity { writer.writeSlice(this.signature.toBuffer()); } - if (this.hasRequestID()) { - writer.writeSlice(fromBase58Check(this.requestID).hash); + if (this.hasDetailsID()) { + writer.writeSlice(fromBase58Check(this.detailsID).hash); } return writer.buffer; @@ -226,8 +226,8 @@ export class UserSpecificDataPacketDetails implements SerializableEntity { this.signature = signature; } - if (this.hasRequestID()) { - this.requestID = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); + if (this.hasDetailsID()) { + this.detailsID = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); } return reader.offset; @@ -242,7 +242,7 @@ export class UserSpecificDataPacketDetails implements SerializableEntity { signableobjects: this.signableObjects.map(obj => obj.toJson()), statements: this.statements, signature: this.signature ? this.signature.toJson() : undefined, - requestid: this.requestID + detailsid: this.detailsID }; } @@ -261,7 +261,7 @@ export class UserSpecificDataPacketDetails implements SerializableEntity { instance.signableObjects = dataDescriptorObjects; instance.statements = json.statements || []; instance.signature = json.signature ? VerifiableSignatureData.fromJson(json.signature) : undefined; - instance.requestID = json.requestid; + instance.detailsID = json.detailsid; return instance; } } \ No newline at end of file diff --git a/src/vdxf/classes/response/DataDescriptorResponse.ts b/src/vdxf/classes/response/DataResponse.ts similarity index 76% rename from src/vdxf/classes/response/DataDescriptorResponse.ts rename to src/vdxf/classes/response/DataResponse.ts index a405c95f..ead887d9 100644 --- a/src/vdxf/classes/response/DataDescriptorResponse.ts +++ b/src/vdxf/classes/response/DataResponse.ts @@ -2,7 +2,7 @@ /** - * DataDescriptorResponse - Class for providing structured responses to various request types + * DataResponse - Class for providing structured responses to various request types * * This class serves as a universal response mechanism that can be used to reply to multiple * types of requests. It packages response data within a DataDescriptor along with metadata @@ -10,14 +10,14 @@ * * USAGE AS RESPONSE TO DIFFERENT REQUEST TYPES: * - * 1. AppEncryptionRequestDetails Response: + * 1. AppEncryptionRequest Response: * - The DataDescriptor 'data' field contains the encrypted derived seed - * - The requestID references the original AppEncryptionRequestDetails.requestID + * - The requestID references the original AppEncryptionRequest.requestID * - Enables secure delivery of application-specific encrypted keys * - * 2. UserDataRequestDetails Response: + * 2. UserDataRequest Response: * - The DataDescriptor 'data' field contains requested user data/attestations - * - The requestID references the original UserDataRequestDetails.requestID + * - The requestID references the original UserDataRequest.requestID * - Allows selective disclosure of personal information * * 3. UserSpecificDataPacketDetails Response: @@ -50,37 +50,31 @@ import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../../../constants/vdxf'; import { DataDescriptor, DataDescriptorJson } from '../../../pbaas'; import createHash = require("create-hash"); -export interface DataDescriptorResponseInterface { +export interface DataResponseInterface { flags?: BigNumber; requestID?: string; // ID of request, to be referenced in response - createdAt: BigNumber; // Unix timestamp of response creation data: DataDescriptor; } -export interface DataDescriptorResponseJson { +export interface DataResponseJson { flags?: number; requestid?: string; // ID of request, to be referenced in response - createdat: number; // Unix timestamp of response creation data: DataDescriptorJson; } -export class DataDescriptorResponse implements SerializableEntity { +export class DataResponse implements SerializableEntity { flags?: BigNumber; requestID?: string; // ID of request, to be referenced in response - createdAt: BigNumber; // Unix timestamp of response creation data: DataDescriptor; - - static RESPONSE_CONTAINS_REQUEST_ID = new BN(2, 10); + static RESPONSE_CONTAINS_REQUEST_ID = new BN(1, 10); constructor (data?: { flags?: BigNumber, requestID?: string, - createdAt: BigNumber, data: DataDescriptor }) { this.flags = data && data.flags ? data.flags : new BN("0", 10); - this.createdAt = data?.createdAt; if (data?.requestID) { if (!this.containsRequestID()) this.toggleContainsRequestID(); @@ -92,11 +86,11 @@ export class DataDescriptorResponse implements SerializableEntity { } containsRequestID() { - return !!(this.flags.and(DataDescriptorResponse.RESPONSE_CONTAINS_REQUEST_ID).toNumber()); + return !!(this.flags.and(DataResponse.RESPONSE_CONTAINS_REQUEST_ID).toNumber()); } toggleContainsRequestID() { - this.flags = this.flags.xor(DataDescriptorResponse.RESPONSE_CONTAINS_REQUEST_ID); + this.flags = this.flags.xor(DataResponse.RESPONSE_CONTAINS_REQUEST_ID); } toSha256() { @@ -112,7 +106,6 @@ export class DataDescriptorResponse implements SerializableEntity { length += HASH160_BYTE_LENGTH; } - length += varint.encodingLength(this.createdAt); length += this.data.getByteLength(); return length; @@ -127,7 +120,6 @@ export class DataDescriptorResponse implements SerializableEntity { writer.writeSlice(fromBase58Check(this.requestID).hash); } - writer.writeVarInt(this.createdAt); writer.writeSlice(this.data.toBuffer()); return writer.buffer; @@ -142,8 +134,6 @@ export class DataDescriptorResponse implements SerializableEntity { this.requestID = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); } - this.createdAt = reader.readVarInt(); - this.data = new DataDescriptor(); this.data.fromBuffer(reader.buffer, reader.offset); reader.offset += this.data.getByteLength(); @@ -151,20 +141,18 @@ export class DataDescriptorResponse implements SerializableEntity { return reader.offset; } - toJson(): DataDescriptorResponseJson { + toJson(): DataResponseJson { return { flags: this.flags.toNumber(), requestid: this.containsRequestID() ? this.requestID : undefined, - createdat: this.createdAt.toNumber(), data: this.data.toJson() } } - static fromJson(json: DataDescriptorResponseJson): DataDescriptorResponse { - return new DataDescriptorResponse({ + static fromJson(json: DataResponseJson): DataResponse { + return new DataResponse({ flags: new BN(json.flags, 10), requestID: json.requestid, - createdAt: new BN(json.createdat, 10), data: DataDescriptor.fromJson(json.data) }); } diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index 73c3c44f..9440d329 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -665,7 +665,7 @@ export const PROVISION_IDENTITY_DETAILS_VDXF_KEY: VDXFKeyInterface = { "vdxfid": "iGHab566xc2sHmPNCGGA4L5MT7LGoJzmCa" } -export const APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface = { +export const APP_ENCRYPTION_REQUEST_VDXF_KEY: VDXFKeyInterface = { "hash160result": "f178871fedb335cf6659f8527a6c9652bc8e1d79", "indexid": "xKM34nS3HiFvf3WDKL8DBrhpj2GqVWEaH4", "qualifiedname": { @@ -675,31 +675,32 @@ export const APP_ENCRYPTION_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface = { "vdxfid": "iEWvbyzxSQ3G2sdBTeU4DUBHhNFpd6rUFx" } -export const DATA_DESCRIPTOR_RESPONSE_VDXF_KEY: VDXFKeyInterface = { - "hash160result": "2ff523bad4a35bfa3db954295acd192e1d805dd9", - "vdxfid": "iPHr5EDp6QGdbAJS8Rqu8293HyQrYjgRap", - "indexid": "xU7xY2etwiVJDLBTz7W46QfaKdRsSoos4g", +export const DATA_RESPONSE_VDXF_KEY: VDXFKeyInterface = { + "vdxfid": "i5L8SNcCqY68X3KZEPgJEjGxY2zvMPzutN", + "indexid": "xAAEuB3HgrJo9DCb65LTD7oVZh1wAjCfTC", + "hash160result": "47ecd4c56c93486380a1ec0d06e186ae8cba5914", "qualifiedname": { "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::response.generic.datadescriptor" + "name": "vrsc::generic.data.packet.response" } } -export const USER_DATA_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface = { - "vdxfid": "iHFtTBRZufoaL9N8wDotQrvxAZrUfMv82u", - "indexid": "xN5zuyrekz2ExKFAnuU3PFTVCDsVSc5NMp", - "hash160result": "3f5e59f4434b601a64aaa4de8fd66dc336e62d97", + +export const USER_DATA_REQUEST_VDXF_KEY: VDXFKeyInterface = { + "vdxfid": "iC7kqU8mfKtqe2gcE2qpuyN4CEcPFTxKGL", + "indexid": "xGwsJGZrWe7WGCZe5iVytMtbDtdQCPvmno", + "hash160result": "d1fba3d9bf18a5293ff912374fc64725db95cb5e", "qualifiedname": { "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::request.generic.userdata.details" + "name": "user.data.request" } } export const USER_SPECIFIC_DATA_PACKET_VDXF_KEY: VDXFKeyInterface = { - "vdxfid": "iBfMRtzM1ztWZ84RiBsbCNj9U1tpbiF5PS", - "indexid": "xGVTthRRsK7BBHwTZsXkAmFgVfuqSM24tK", - "hash160result": "dc4dd05e257f6b3ac266c2a6086dc2c54f3bcd59", + "vdxfid": "i6JYTdVNLz4Sb6515B73BSX6C1Xba63tNQ", + "indexid": "xB8evRvTCJH7DFx2vrmC9q3dDfYcXW1F15", + "hash160result": "34dfdf234ec37a8451790a19538dbd162913051f", "qualifiedname": { "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::request.generic.user.specificdata" + "name": "user.data.packet.details" } } \ No newline at end of file From f3db47e694125d619a5ca01e38c73a4dc455f58b Mon Sep 17 00:00:00 2001 From: monkins Date: Fri, 21 Nov 2025 11:50:46 +0000 Subject: [PATCH 063/123] Fix merge conflicts --- dist/constants/ordinals/register.js | 4 +-- ...yptionRequestDetailsOrdinalVdxfObject.d.ts | 4 +-- ...cryptionRequestDetailsOrdinalVdxfObject.js | 8 ++--- dist/vdxf/classes/ordinals/index.d.ts | 2 +- dist/vdxf/classes/ordinals/index.js | 2 +- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 2 -- src/constants/ordinals/register.ts | 11 ++++--- src/vdxf/keys.ts | 30 ------------------- 8 files changed, 17 insertions(+), 46 deletions(-) diff --git a/dist/constants/ordinals/register.js b/dist/constants/ordinals/register.js index 5e287783..e4176176 100644 --- a/dist/constants/ordinals/register.js +++ b/dist/constants/ordinals/register.js @@ -2,7 +2,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.registerOrdinals = void 0; const vdxf_1 = require("../../vdxf"); -const AppEncryptionRequestDetailsOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject"); +const AppEncryptionRequestOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject"); const DataDescriptorOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject"); const IdentityUpdateRequestOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject"); const IdentityUpdateResponseOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject"); @@ -20,6 +20,6 @@ const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), vdxf_1.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVdxfObject_1.IdentityUpdateRequestOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), vdxf_1.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject_1.IdentityUpdateResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), vdxf_1.PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVdxfObject_1.ProvisionIdentityDetailsOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST.toNumber(), vdxf_1.APP_ENCRYPTION_REQUEST_VDXF_KEY.vdxfid, AppEncryptionRequestDetailsOrdinalVdxfObject_1.AppEncryptionRequestDetailsOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST.toNumber(), vdxf_1.APP_ENCRYPTION_REQUEST_VDXF_KEY.vdxfid, AppEncryptionRequestOrdinalVdxfObject_1.AppEncryptionRequestOrdinalVdxfObject, false); }; exports.registerOrdinals = registerOrdinals; diff --git a/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.d.ts index 47bee9a7..7295e316 100644 --- a/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.d.ts +++ b/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.d.ts @@ -2,8 +2,8 @@ import { SerializableDataEntity } from "../../../utils/types/SerializableEntity" import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; import { AppEncryptionRequestDetails, AppEncryptionRequestDetailsJson } from "../requestobjects/AppEncryptionRequestDetails"; -export declare class AppEncryptionRequestDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { +export declare class AppEncryptionRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { data: AppEncryptionRequestDetails; constructor(request?: OrdinalVdxfObjectInterfaceTemplate); - static fromJson(details: OrdinalVdxfObjectJsonTemplate): AppEncryptionRequestDetailsOrdinalVdxfObject; + static fromJson(details: OrdinalVdxfObjectJsonTemplate): AppEncryptionRequestOrdinalVdxfObject; } diff --git a/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.js index da6b289a..7661c67e 100644 --- a/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.js +++ b/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.js @@ -1,10 +1,10 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.AppEncryptionRequestDetailsOrdinalVdxfObject = void 0; +exports.AppEncryptionRequestOrdinalVdxfObject = void 0; const ordinals_1 = require("../../../constants/ordinals/ordinals"); const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); const AppEncryptionRequestDetails_1 = require("../requestobjects/AppEncryptionRequestDetails"); -class AppEncryptionRequestDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { +class AppEncryptionRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { constructor(request = { data: new AppEncryptionRequestDetails_1.AppEncryptionRequestDetails() }) { @@ -14,9 +14,9 @@ class AppEncryptionRequestDetailsOrdinalVdxfObject extends SerializableEntityOrd }, AppEncryptionRequestDetails_1.AppEncryptionRequestDetails); } static fromJson(details) { - return new AppEncryptionRequestDetailsOrdinalVdxfObject({ + return new AppEncryptionRequestOrdinalVdxfObject({ data: AppEncryptionRequestDetails_1.AppEncryptionRequestDetails.fromJson(details.data) }); } } -exports.AppEncryptionRequestDetailsOrdinalVdxfObject = AppEncryptionRequestDetailsOrdinalVdxfObject; +exports.AppEncryptionRequestOrdinalVdxfObject = AppEncryptionRequestOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/index.d.ts b/dist/vdxf/classes/ordinals/index.d.ts index b4c953a1..cfdac426 100644 --- a/dist/vdxf/classes/ordinals/index.d.ts +++ b/dist/vdxf/classes/ordinals/index.d.ts @@ -7,5 +7,5 @@ export * from './SerializableEntityOrdinalVdxfObject'; export * from './VerusPayInvoiceOrdinalVdxfObject'; export * from './LoginRequestDetailsOrdinalVdxfObject'; export * from './LoginResponseDetailsOrdinalVdxfObject'; -export * from './AppEncryptionRequestDetailsOrdinalVdxfObject'; +export * from './AppEncryptionRequestOrdinalVdxfObject'; export * from './ProvisionIdentityDetailsOrdinalVdxfObject'; diff --git a/dist/vdxf/classes/ordinals/index.js b/dist/vdxf/classes/ordinals/index.js index f944e6ec..1754a84c 100644 --- a/dist/vdxf/classes/ordinals/index.js +++ b/dist/vdxf/classes/ordinals/index.js @@ -24,6 +24,6 @@ __exportStar(require("./SerializableEntityOrdinalVdxfObject"), exports); __exportStar(require("./VerusPayInvoiceOrdinalVdxfObject"), exports); __exportStar(require("./LoginRequestDetailsOrdinalVdxfObject"), exports); __exportStar(require("./LoginResponseDetailsOrdinalVdxfObject"), exports); -__exportStar(require("./AppEncryptionRequestDetailsOrdinalVdxfObject"), exports); +__exportStar(require("./AppEncryptionRequestOrdinalVdxfObject"), exports); __exportStar(require("./ProvisionIdentityDetailsOrdinalVdxfObject"), exports); (0, register_1.registerOrdinals)(); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index c55fa215..f245d9d1 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -401,8 +401,6 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS)) .toBe(ProvisionIdentityDetailsOrdinalVdxfObject); expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST)) - .toBe(AppEncryptionRequestDetailsOrdinalVdxfObject); - expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST_DETAILS)) .toBe(AppEncryptionRequestOrdinalVdxfObject); // unrecognized diff --git a/src/constants/ordinals/register.ts b/src/constants/ordinals/register.ts index 971713e6..3f795d4f 100644 --- a/src/constants/ordinals/register.ts +++ b/src/constants/ordinals/register.ts @@ -1,5 +1,5 @@ -import { APP_ENCRYPTION_REQUEST_VDXF_KEY, DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, LOGIN_REQUEST_DETAILS_VDXF_KEY, LOGIN_RESPONSE_DETAILS_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../../vdxf"; -import { AppEncryptionRequestDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject"; +import { APP_ENCRYPTION_REQUEST_VDXF_KEY, DATA_RESPONSE_VDXF_KEY, DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, LOGIN_REQUEST_DETAILS_VDXF_KEY, LOGIN_RESPONSE_DETAILS_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, USER_DATA_REQUEST_VDXF_KEY, USER_SPECIFIC_DATA_PACKET_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../../vdxf"; +import { AppEncryptionRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject"; import { DataDescriptorOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject"; import { DataResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataResponseOrdinalVdxfObject"; import { UserDataRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject"; @@ -11,7 +11,7 @@ import { LoginResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/Logi import { OrdinalVdxfObjectOrdinalMap } from "../../vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap"; import { ProvisionIdentityDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject"; import { VerusPayInvoiceOrdinalVdxfObject } from "../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject"; -import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_LOGIN_RESPONSE, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from "./ordinals"; +import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_DATA_RESPONSE, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_LOGIN_RESPONSE, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_USER_DATA_REQUEST, VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET, VDXF_ORDINAL_VERUSPAY_INVOICE } from "./ordinals"; export const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVdxfObject, false); @@ -21,5 +21,8 @@ export const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST.toNumber(), APP_ENCRYPTION_REQUEST_VDXF_KEY.vdxfid, AppEncryptionRequestDetailsOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST.toNumber(), APP_ENCRYPTION_REQUEST_VDXF_KEY.vdxfid, AppEncryptionRequestOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_RESPONSE.toNumber(), DATA_RESPONSE_VDXF_KEY.vdxfid, DataResponseOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_USER_DATA_REQUEST.toNumber(), USER_DATA_REQUEST_VDXF_KEY.vdxfid, UserDataRequestOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET.toNumber(), USER_SPECIFIC_DATA_PACKET_VDXF_KEY.vdxfid, UserSpecificDataPacketDetailsOrdinalVdxfObject, false); } \ No newline at end of file diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index f46d6be9..80809818 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -704,33 +704,3 @@ export const USER_SPECIFIC_DATA_PACKET_VDXF_KEY: VDXFKeyInterface = { "name": "user.data.packet.details" } } - -export const DATA_RESPONSE_VDXF_KEY: VDXFKeyInterface = { - "vdxfid": "i5L8SNcCqY68X3KZEPgJEjGxY2zvMPzutN", - "indexid": "xAAEuB3HgrJo9DCb65LTD7oVZh1wAjCfTC", - "hash160result": "47ecd4c56c93486380a1ec0d06e186ae8cba5914", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::generic.data.packet.response" - } -} - -export const USER_DATA_REQUEST_VDXF_KEY: VDXFKeyInterface = { - "vdxfid": "iC7kqU8mfKtqe2gcE2qpuyN4CEcPFTxKGL", - "indexid": "xGwsJGZrWe7WGCZe5iVytMtbDtdQCPvmno", - "hash160result": "d1fba3d9bf18a5293ff912374fc64725db95cb5e", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "user.data.request" - } -} - -export const USER_SPECIFIC_DATA_PACKET_VDXF_KEY: VDXFKeyInterface = { - "vdxfid": "i6JYTdVNLz4Sb6515B73BSX6C1Xba63tNQ", - "indexid": "xB8evRvTCJH7DFx2vrmC9q3dDfYcXW1F15", - "hash160result": "34dfdf234ec37a8451790a19538dbd162913051f", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "user.data.packet.details" - } -} \ No newline at end of file From 764dbda718930b883bf6612cef5f96bcf2717a48 Mon Sep 17 00:00:00 2001 From: monkins Date: Fri, 21 Nov 2025 11:58:36 +0000 Subject: [PATCH 064/123] Change objects back to details --- .../vdxf/appencryptionrequestdetails.test.ts | 34 +++++++++---------- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 18 +++++----- src/__tests__/vdxf/userdatarequest.test.ts | 20 +++++------ src/constants/ordinals/types.ts | 8 ++--- src/vdxf/classes/index.ts | 4 +-- .../AppEncryptionRequestOrdinalVdxfObject.ts | 12 +++---- .../UserDataRequestOrdinalVdxfObject.ts | 12 +++---- ...uest.ts => AppEncryptionRequestDetails.ts} | 26 +++++++------- ...taRequest.ts => UserDataRequestDetails.ts} | 24 ++++++------- src/vdxf/classes/response/DataResponse.ts | 8 ++--- 10 files changed, 83 insertions(+), 83 deletions(-) rename src/vdxf/classes/requestobjects/{AppEncryptionRequest.ts => AppEncryptionRequestDetails.ts} (90%) rename src/vdxf/classes/requestobjects/{UserDataRequest.ts => UserDataRequestDetails.ts} (88%) diff --git a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts index 56e19d1b..cdeeae4c 100644 --- a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts +++ b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts @@ -1,5 +1,5 @@ import { BN } from "bn.js"; -import { AppEncryptionRequest, CompactIdAddressObject } from "../../vdxf/classes"; +import { AppEncryptionRequestDetails, CompactIdAddressObject } from "../../vdxf/classes"; import { BigNumber } from "../../utils/types/BigNumber"; // Helper function to create TransferDestination from address string @@ -10,13 +10,13 @@ function createCompactIdAddressObject(type: BigNumber, address: string): Compact return obj; } -describe("AppEncryptionRequest serialization tests", () => { - test("creates valid AppEncryptionRequest with zaddress", () => { - const details = new AppEncryptionRequest({ - version: AppEncryptionRequest.DEFAULT_VERSION, - flags: AppEncryptionRequest.HAS_SECONDARY_SEED_DERIVATION_NUMBER - .or(AppEncryptionRequest.HAS_FROM_ADDRESS) - .or(AppEncryptionRequest.HAS_TO_ADDRESS), +describe("AppEncryptionRequestDetails serialization tests", () => { + test("creates valid AppEncryptionRequestDetails with zaddress", () => { + const details = new AppEncryptionRequestDetails({ + version: AppEncryptionRequestDetails.DEFAULT_VERSION, + flags: AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER + .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) + .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), secondaryDerivationNumber: new BN(234), @@ -25,7 +25,7 @@ describe("AppEncryptionRequest serialization tests", () => { requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); - const newDetails = new AppEncryptionRequest(); + const newDetails = new AppEncryptionRequestDetails(); const buffer = details.toBuffer(); newDetails.fromBuffer(buffer); const originalBuffer = details.toBuffer(); @@ -43,13 +43,13 @@ describe("AppEncryptionRequest serialization tests", () => { expect(details.requestID).toBe("iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ"); }); - test("serializes and deserializes AppEncryptionRequest correctly", () => { - // Create the first AppEncryptionRequest - const originalDetails = new AppEncryptionRequest({ - version: AppEncryptionRequest.DEFAULT_VERSION, - flags: AppEncryptionRequest.HAS_SECONDARY_SEED_DERIVATION_NUMBER - .or(AppEncryptionRequest.HAS_FROM_ADDRESS) - .or(AppEncryptionRequest.HAS_TO_ADDRESS), + test("serializes and deserializes AppEncryptionRequestDetails correctly", () => { + // Create the first AppEncryptionRequestDetails + const originalDetails = new AppEncryptionRequestDetails({ + version: AppEncryptionRequestDetails.DEFAULT_VERSION, + flags: AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER + .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) + .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), secondaryDerivationNumber: new BN(234), @@ -62,7 +62,7 @@ describe("AppEncryptionRequest serialization tests", () => { const buffer = originalDetails.toBuffer(); // Create a new instance and deserialize from buffer - const deserializedDetails = new AppEncryptionRequest(); + const deserializedDetails = new AppEncryptionRequestDetails(); deserializedDetails.fromBuffer(buffer); // Verify both instances are valid diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index f245d9d1..e634b572 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -17,7 +17,7 @@ import { } from '../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject'; import { DataDescriptor, DEST_PKH, TransferDestination } from '../../pbaas'; import { - AppEncryptionRequest, + AppEncryptionRequestDetails, CompactIdAddressObject, IdentityUpdateRequestDetails, IdentityUpdateResponseDetails, @@ -26,7 +26,7 @@ import { ProvisionIdentityDetails, ResponseUri, VerusPayInvoiceDetails, - UserDataRequest, + UserDataRequestDetails, UserSpecificDataPacketDetails } from '../../vdxf/classes'; import { DEFAULT_VERUS_CHAINID } from '../../constants/pbaas'; @@ -345,11 +345,11 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { }); it('should serialize / deserialize an AppEncryptionRequestOrdinalVdxfObject', () => { - const details = new AppEncryptionRequest({ - version: AppEncryptionRequest.DEFAULT_VERSION, - flags: AppEncryptionRequest.HAS_SECONDARY_SEED_DERIVATION_NUMBER - .or(AppEncryptionRequest.HAS_FROM_ADDRESS) - .or(AppEncryptionRequest.HAS_TO_ADDRESS), + const details = new AppEncryptionRequestDetails({ + version: AppEncryptionRequestDetails.DEFAULT_VERSION, + flags: AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER + .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) + .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), secondaryDerivationNumber: new BN(234), @@ -451,9 +451,9 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { }); it('should serialize / deserialize a UserDataRequestOrdinalVdxfObject via buffer', () => { - const details = new UserDataRequest({ + const details = new UserDataRequestDetails({ version: new BN(1), - flags: UserDataRequest.FULL_DATA.or(UserDataRequest.ATTESTATION).or(UserDataRequest.HAS_SIGNER), + flags: UserDataRequestDetails.FULL_DATA.or(UserDataRequestDetails.ATTESTATION).or(UserDataRequestDetails.HAS_SIGNER), searchDataKey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], signer: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootSystemName: "VRSC" }), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" diff --git a/src/__tests__/vdxf/userdatarequest.test.ts b/src/__tests__/vdxf/userdatarequest.test.ts index 90304aeb..03fff014 100644 --- a/src/__tests__/vdxf/userdatarequest.test.ts +++ b/src/__tests__/vdxf/userdatarequest.test.ts @@ -1,38 +1,38 @@ -import { CompactIdAddressObject, UserDataRequest, UserDataRequestJson } from "../../vdxf/classes"; +import { CompactIdAddressObject, UserDataRequestDetails, UserDataRequestJson } from "../../vdxf/classes"; -describe('Serializes and deserializes UserDataRequest', () => { - test('(de)serialize UserDataRequest', () => { +describe('Serializes and deserializes UserDataRequestDetails', () => { + test('(de)serialize UserDataRequestDetails', () => { const provisionJson: UserDataRequestJson = { version: 1, - flags: UserDataRequest.FULL_DATA.or(UserDataRequest.ATTESTATION).or(UserDataRequest.HAS_SIGNER).toNumber(), + flags: UserDataRequestDetails.FULL_DATA.or(UserDataRequestDetails.ATTESTATION).or(UserDataRequestDetails.HAS_SIGNER).toNumber(), searchdatakey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], signer: { version: 1, type: CompactIdAddressObject.IS_IDENTITYID.toNumber(), address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootsystemname: "VRSC" }, requestid: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" } - const e = UserDataRequest.fromJson(provisionJson); + const e = UserDataRequestDetails.fromJson(provisionJson); const r = e.toBuffer(); - const rFromBuf = new UserDataRequest(); + const rFromBuf = new UserDataRequestDetails(); rFromBuf.fromBuffer(r); expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) }); - test('(de)serialize UserDataRequest with requestedkeys', async () => { + test('(de)serialize UserDataRequestDetails with requestedkeys', async () => { const provisionJson: UserDataRequestJson = { version: 1, - flags: UserDataRequest.PARTIAL_DATA.or(UserDataRequest.ATTESTATION).or(UserDataRequest.HAS_SIGNER).toNumber(), + flags: UserDataRequestDetails.PARTIAL_DATA.or(UserDataRequestDetails.ATTESTATION).or(UserDataRequestDetails.HAS_SIGNER).toNumber(), searchdatakey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], signer: { version: 1, type: CompactIdAddressObject.IS_FQN.toNumber(), address: "bob@", rootsystemname: "VRSC" }, requestedkeys: ["iLB8SG7ErJtTYcG1f4w9RLuMJPpAsjFkiL"], requestid: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" } - const e = UserDataRequest.fromJson(provisionJson); + const e = UserDataRequestDetails.fromJson(provisionJson); const r = e.toBuffer(); - const rFromBuf = new UserDataRequest(); + const rFromBuf = new UserDataRequestDetails(); rFromBuf.fromBuffer(r); expect(rFromBuf.toBuffer().toString('hex')).toBe(r.toString('hex')) diff --git a/src/constants/ordinals/types.ts b/src/constants/ordinals/types.ts index 2ead1a98..adacc2b7 100644 --- a/src/constants/ordinals/types.ts +++ b/src/constants/ordinals/types.ts @@ -1,6 +1,6 @@ import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; import { - AppEncryptionRequest, + AppEncryptionRequestDetails, AppEncryptionRequestJson, IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, @@ -12,7 +12,7 @@ import { LoginResponseDetailsJson, ProvisionIdentityDetails, ProvisionIdentityDetailsJson, - UserDataRequest, + UserDataRequestDetails, UserDataRequestJson, UserSpecificDataPacketDetails, UserSpecificDataPacketDetailsJson, @@ -29,9 +29,9 @@ export type OrdinalVdxfObjectReservedData = LoginRequestDetails | LoginResponseDetails | ProvisionIdentityDetails | - AppEncryptionRequest | + AppEncryptionRequestDetails | DataResponse | - UserDataRequest | + UserDataRequestDetails | UserSpecificDataPacketDetails; export type OrdinalVdxfObjectReservedDataJson = diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index 1603d4fe..c6766564 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -47,11 +47,11 @@ export { } from './provisioning/ProvisioningResult' export { Context } from './Context' export { DataCategory } from './PersonalProfile' -export * from './requestobjects/UserDataRequest' +export * from './requestobjects/UserDataRequestDetails' export * from './login/LoginRequestDetails' export * from './login/LoginResponseDetails' export * from './requestobjects/ProvisionIdentityDetails' -export * from './requestobjects/AppEncryptionRequest' +export * from './requestobjects/AppEncryptionRequestDetails' export * from './requestobjects/UserSpecificDataPacketDetails' export * from './CompactIdAddressObject' export { diff --git a/src/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.ts index 3ad7416e..f864f371 100644 --- a/src/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.ts +++ b/src/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.ts @@ -2,14 +2,14 @@ import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST } from "../../../constants/ordinals import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { AppEncryptionRequest, AppEncryptionRequestJson } from "../requestobjects/AppEncryptionRequest"; +import { AppEncryptionRequestDetails, AppEncryptionRequestJson } from "../requestobjects/AppEncryptionRequestDetails"; export class AppEncryptionRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: AppEncryptionRequest; + data: AppEncryptionRequestDetails; constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { - data: new AppEncryptionRequest() + request: OrdinalVdxfObjectInterfaceTemplate = { + data: new AppEncryptionRequestDetails() } ) { super( @@ -17,13 +17,13 @@ export class AppEncryptionRequestOrdinalVdxfObject extends SerializableEntityOrd type: VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, data: request.data }, - AppEncryptionRequest + AppEncryptionRequestDetails ); } static fromJson(details: OrdinalVdxfObjectJsonTemplate): AppEncryptionRequestOrdinalVdxfObject { return new AppEncryptionRequestOrdinalVdxfObject({ - data: AppEncryptionRequest.fromJson(details.data) + data: AppEncryptionRequestDetails.fromJson(details.data) }) } } \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.ts index 6e4f4869..ccf3d2de 100644 --- a/src/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.ts +++ b/src/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.ts @@ -2,14 +2,14 @@ import { VDXF_ORDINAL_USER_DATA_REQUEST } from "../../../constants/ordinals/ordi import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { UserDataRequest, UserDataRequestJson } from "../requestobjects/UserDataRequest"; +import { UserDataRequestDetails, UserDataRequestJson } from "../requestobjects/UserDataRequestDetails"; export class UserDataRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: UserDataRequest; + data: UserDataRequestDetails; constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { - data: new UserDataRequest() + request: OrdinalVdxfObjectInterfaceTemplate = { + data: new UserDataRequestDetails() } ) { super( @@ -17,13 +17,13 @@ export class UserDataRequestOrdinalVdxfObject extends SerializableEntityOrdinalV type: VDXF_ORDINAL_USER_DATA_REQUEST, data: request.data }, - UserDataRequest + UserDataRequestDetails ); } static fromJson(details: OrdinalVdxfObjectJsonTemplate): UserDataRequestOrdinalVdxfObject { return new UserDataRequestOrdinalVdxfObject({ - data: UserDataRequest.fromJson(details.data) + data: UserDataRequestDetails.fromJson(details.data) }) } } diff --git a/src/vdxf/classes/requestobjects/AppEncryptionRequest.ts b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts similarity index 90% rename from src/vdxf/classes/requestobjects/AppEncryptionRequest.ts rename to src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts index cd502865..e6423563 100644 --- a/src/vdxf/classes/requestobjects/AppEncryptionRequest.ts +++ b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts @@ -1,6 +1,6 @@ /** - * AppEncryptionRequest - Class for handling application requests for encrypted derived seeds + * AppEncryptionRequestDetails - Class for handling application requests for encrypted derived seeds * * This class is used when an application is requesting an encrypted derived seed from the user's master seed, * using specific parameters passed by the application. The request includes: @@ -64,7 +64,7 @@ export interface AppEncryptionRequestJson { * john.domain@ or [20-byte hex iaddress][20-byte hex system] */ -export class AppEncryptionRequest implements SerializableEntity { +export class AppEncryptionRequestDetails implements SerializableEntity { static VERSION_INVALID = new BN(0); static FIRST_VERSION = new BN(1); static LAST_VERSION = new BN(1); @@ -85,7 +85,7 @@ export class AppEncryptionRequest implements SerializableEntity { requestID?: string; constructor(data?: AppEncryptionRequestInterface) { - this.version = data?.version || AppEncryptionRequest.DEFAULT_VERSION; + this.version = data?.version || AppEncryptionRequestDetails.DEFAULT_VERSION; this.flags = data?.flags || new BN(0); this.encryptToZAddress = data?.encryptToZAddress || ''; this.derivationNumber = data?.derivationNumber || new BN(0); @@ -105,19 +105,19 @@ export class AppEncryptionRequest implements SerializableEntity { let flags = new BN(0); if (this.secondaryDerivationNumber != null) { - flags = flags.or(AppEncryptionRequest.HAS_SECONDARY_SEED_DERIVATION_NUMBER); + flags = flags.or(AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER); } if (this.fromAddress != null) { - flags = flags.or(AppEncryptionRequest.HAS_FROM_ADDRESS); + flags = flags.or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS); } if (this.toAddress != null) { - flags = flags.or(AppEncryptionRequest.HAS_TO_ADDRESS); + flags = flags.or(AppEncryptionRequestDetails.HAS_TO_ADDRESS); } if (this.requestID != null) { - flags = flags.or(AppEncryptionRequest.HAS_REQUEST_ID); + flags = flags.or(AppEncryptionRequestDetails.HAS_REQUEST_ID); } return flags; @@ -132,19 +132,19 @@ export class AppEncryptionRequest implements SerializableEntity { } hasSecondarySeedDerivation(flags: BigNumber = this.flags): boolean { - return flags.and(AppEncryptionRequest.HAS_SECONDARY_SEED_DERIVATION_NUMBER).gt(new BN(0)); + return flags.and(AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER).gt(new BN(0)); } hasFromAddress(flags: BigNumber = this.flags): boolean { - return flags.and(AppEncryptionRequest.HAS_FROM_ADDRESS).gt(new BN(0)); + return flags.and(AppEncryptionRequestDetails.HAS_FROM_ADDRESS).gt(new BN(0)); } hasToAddress(flags: BigNumber = this.flags): boolean { - return flags.and(AppEncryptionRequest.HAS_TO_ADDRESS).gt(new BN(0)); + return flags.and(AppEncryptionRequestDetails.HAS_TO_ADDRESS).gt(new BN(0)); } hasRequestID(flags: BigNumber = this.flags): boolean { - return flags.and(AppEncryptionRequest.HAS_REQUEST_ID).gt(new BN(0)); + return flags.and(AppEncryptionRequestDetails.HAS_REQUEST_ID).gt(new BN(0)); } getByteLength(): number { @@ -267,8 +267,8 @@ export class AppEncryptionRequest implements SerializableEntity { }; } - static fromJson(json: AppEncryptionRequestJson): AppEncryptionRequest { - const instance = new AppEncryptionRequest(); + static fromJson(json: AppEncryptionRequestJson): AppEncryptionRequestDetails { + const instance = new AppEncryptionRequestDetails(); instance.version = new BN(json.version); instance.flags = new BN(json.flags); instance.encryptToZAddress = json.encrypttozaddress; diff --git a/src/vdxf/classes/requestobjects/UserDataRequest.ts b/src/vdxf/classes/requestobjects/UserDataRequestDetails.ts similarity index 88% rename from src/vdxf/classes/requestobjects/UserDataRequest.ts rename to src/vdxf/classes/requestobjects/UserDataRequestDetails.ts index 836f69a5..ab9b15df 100644 --- a/src/vdxf/classes/requestobjects/UserDataRequest.ts +++ b/src/vdxf/classes/requestobjects/UserDataRequestDetails.ts @@ -48,7 +48,7 @@ export interface UserDataRequestJson { requestid?: string; } -export class UserDataRequest implements SerializableEntity { +export class UserDataRequestDetails implements SerializableEntity { static VERSION_INVALID = new BN(0); static FIRST_VERSION = new BN(1); static LAST_VERSION = new BN(1); @@ -74,7 +74,7 @@ export class UserDataRequest implements SerializableEntity { requestID?: string; constructor(data?: UserDataRequestInterface) { - this.version = data?.version || UserDataRequest.DEFAULT_VERSION; + this.version = data?.version || UserDataRequestDetails.DEFAULT_VERSION; this.flags = data?.flags || new BN(0); this.searchDataKey = data?.searchDataKey || []; this.signer = data?.signer; @@ -87,13 +87,13 @@ export class UserDataRequest implements SerializableEntity { calcFlags(): BigNumber { let flags = new BN(0); if (this.requestedKeys && this.requestedKeys.length > 0) { - flags = flags.or(UserDataRequest.HAS_REQUESTED_KEYS); + flags = flags.or(UserDataRequestDetails.HAS_REQUESTED_KEYS); } if (this.signer) { - flags = flags.or(UserDataRequest.HAS_SIGNER); + flags = flags.or(UserDataRequestDetails.HAS_SIGNER); } if (this.requestID) { - flags = flags.or(UserDataRequest.HAS_REQUEST_ID); + flags = flags.or(UserDataRequestDetails.HAS_REQUEST_ID); } return flags; @@ -104,15 +104,15 @@ export class UserDataRequest implements SerializableEntity { } hasSigner(): boolean { - return this.flags.and(UserDataRequest.HAS_SIGNER).eq(UserDataRequest.HAS_SIGNER); + return this.flags.and(UserDataRequestDetails.HAS_SIGNER).eq(UserDataRequestDetails.HAS_SIGNER); } hasRequestedKeys(): boolean { - return this.flags.and(UserDataRequest.HAS_REQUESTED_KEYS).eq(UserDataRequest.HAS_REQUESTED_KEYS); + return this.flags.and(UserDataRequestDetails.HAS_REQUESTED_KEYS).eq(UserDataRequestDetails.HAS_REQUESTED_KEYS); } hasRequestID(): boolean { - return this.flags.and(UserDataRequest.HAS_REQUEST_ID).eq(UserDataRequest.HAS_REQUEST_ID); + return this.flags.and(UserDataRequestDetails.HAS_REQUEST_ID).eq(UserDataRequestDetails.HAS_REQUEST_ID); } /** @@ -120,7 +120,7 @@ export class UserDataRequest implements SerializableEntity { * @returns True if exactly one data type flag is set */ hasDataTypeSet(): boolean { - const dataTypeFlags = UserDataRequest.FULL_DATA.or(UserDataRequest.PARTIAL_DATA).or(UserDataRequest.COLLECTION); + const dataTypeFlags = UserDataRequestDetails.FULL_DATA.or(UserDataRequestDetails.PARTIAL_DATA).or(UserDataRequestDetails.COLLECTION); const setDataFlags = this.flags.and(dataTypeFlags); // Check if exactly one flag is set by verifying it's a power of 2 @@ -132,7 +132,7 @@ export class UserDataRequest implements SerializableEntity { * @returns True if exactly one request type flag is set */ hasRequestTypeSet(): boolean { - const requestTypeFlags = UserDataRequest.ATTESTATION.or(UserDataRequest.CLAIM).or(UserDataRequest.CREDENTIAL); + const requestTypeFlags = UserDataRequestDetails.ATTESTATION.or(UserDataRequestDetails.CLAIM).or(UserDataRequestDetails.CREDENTIAL); const setRequestFlags = this.flags.and(requestTypeFlags); // Check if exactly one flag is set by verifying it's a power of 2 @@ -140,7 +140,7 @@ export class UserDataRequest implements SerializableEntity { } isValid(): boolean { - let valid = this.version.gte(UserDataRequest.FIRST_VERSION) && this.version.lte(UserDataRequest.LAST_VERSION); + let valid = this.version.gte(UserDataRequestDetails.FIRST_VERSION) && this.version.lte(UserDataRequestDetails.LAST_VERSION); // Check that exactly one data type flag is set valid &&= this.hasDataTypeSet(); @@ -272,7 +272,7 @@ export class UserDataRequest implements SerializableEntity { } static fromJson(json: UserDataRequestJson) { - const requestData = new UserDataRequest(); + const requestData = new UserDataRequestDetails(); requestData.version = new BN(json.version); requestData.flags = new BN(json.flags); requestData.searchDataKey = json.searchdatakey; diff --git a/src/vdxf/classes/response/DataResponse.ts b/src/vdxf/classes/response/DataResponse.ts index ead887d9..34bbfbb3 100644 --- a/src/vdxf/classes/response/DataResponse.ts +++ b/src/vdxf/classes/response/DataResponse.ts @@ -10,14 +10,14 @@ * * USAGE AS RESPONSE TO DIFFERENT REQUEST TYPES: * - * 1. AppEncryptionRequest Response: + * 1. AppEncryptionRequestDetails Response: * - The DataDescriptor 'data' field contains the encrypted derived seed - * - The requestID references the original AppEncryptionRequest.requestID + * - The requestID references the original AppEncryptionRequestDetails.requestID * - Enables secure delivery of application-specific encrypted keys * - * 2. UserDataRequest Response: + * 2. UserDataRequestDetails Response: * - The DataDescriptor 'data' field contains requested user data/attestations - * - The requestID references the original UserDataRequest.requestID + * - The requestID references the original UserDataRequestDetails.requestID * - Allows selective disclosure of personal information * * 3. UserSpecificDataPacketDetails Response: From fce8e8cf5910768b3e3aa4d79a59a644f402c4d8 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 21 Nov 2025 13:36:34 +0100 Subject: [PATCH 065/123] Move static methods out of GenericEnvelope and into GenericRequest and GenericResponse --- .../vdxf/classes/envelope/GenericEnvelope.d.ts | 2 -- dist/vdxf/classes/envelope/GenericEnvelope.js | 11 ----------- dist/vdxf/classes/request/GenericRequest.d.ts | 2 ++ dist/vdxf/classes/request/GenericRequest.js | 13 +++++++++++++ .../vdxf/classes/response/GenericResponse.d.ts | 2 ++ dist/vdxf/classes/response/GenericResponse.js | 13 +++++++++++++ src/__tests__/vdxf/genericrequest.test.ts | 3 ++- src/__tests__/vdxf/genericresponse.test.ts | 3 ++- src/vdxf/classes/envelope/GenericEnvelope.ts | 16 ---------------- src/vdxf/classes/request/GenericRequest.ts | 18 ++++++++++++++++++ src/vdxf/classes/response/GenericResponse.ts | 18 ++++++++++++++++++ 11 files changed, 70 insertions(+), 31 deletions(-) diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts index aec9ceb6..3a5af234 100644 --- a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts +++ b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts @@ -59,8 +59,6 @@ export declare class GenericEnvelope implements SerializableEntity { fromBuffer(buffer: Buffer, offset?: number): number; toString(): string; toWalletDeeplinkUri(): string; - static fromWalletDeeplinkUri(uri: string): GenericEnvelope; toQrString(): string; - static fromQrString(qrstring: string): GenericEnvelope; toJson(): GenericEnvelopeJson; } diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.js b/dist/vdxf/classes/envelope/GenericEnvelope.js index e153f1d1..a78bac34 100644 --- a/dist/vdxf/classes/envelope/GenericEnvelope.js +++ b/dist/vdxf/classes/envelope/GenericEnvelope.js @@ -189,20 +189,9 @@ class GenericEnvelope { toWalletDeeplinkUri() { return `${__1.WALLET_VDXF_KEY.vdxfid.toLowerCase()}:/${__1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/${this.toString()}`; } - static fromWalletDeeplinkUri(uri) { - const split = uri.split(`${__1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); - const inv = new GenericEnvelope(); - inv.fromBuffer(base64url_1.default.toBuffer(split[1]), 0); - return inv; - } toQrString() { return this.toString(); } - static fromQrString(qrstring) { - const inv = new GenericEnvelope(); - inv.fromBuffer(base64url_1.default.toBuffer(qrstring), 0); - return inv; - } toJson() { const details = []; if (this.details != null) { diff --git a/dist/vdxf/classes/request/GenericRequest.d.ts b/dist/vdxf/classes/request/GenericRequest.d.ts index c1216719..1019fef5 100644 --- a/dist/vdxf/classes/request/GenericRequest.d.ts +++ b/dist/vdxf/classes/request/GenericRequest.d.ts @@ -27,4 +27,6 @@ export declare class GenericRequest extends GenericEnvelope implements Serializa protected toBufferOptionalSig(includeSig?: boolean): Buffer; fromBuffer(buffer: Buffer, offset?: number): number; toJson(): GenericRequestJson; + static fromWalletDeeplinkUri(uri: string): GenericRequest; + static fromQrString(qrstring: string): GenericRequest; } diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js index 4424525f..04723be4 100644 --- a/dist/vdxf/classes/request/GenericRequest.js +++ b/dist/vdxf/classes/request/GenericRequest.js @@ -5,6 +5,8 @@ const bn_js_1 = require("bn.js"); const GenericEnvelope_1 = require("../envelope/GenericEnvelope"); const SaplingPaymentAddress_1 = require("../../../pbaas/SaplingPaymentAddress"); const bufferutils_1 = require("../../../utils/bufferutils"); +const keys_1 = require("../../keys"); +const base64url_1 = require("base64url"); class GenericRequest extends GenericEnvelope_1.GenericEnvelope { constructor(envelope = { details: [], @@ -59,6 +61,17 @@ class GenericRequest extends GenericEnvelope_1.GenericEnvelope { } return parentJson; } + static fromWalletDeeplinkUri(uri) { + const split = uri.split(`${keys_1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); + const inv = new GenericRequest(); + inv.fromBuffer(base64url_1.default.toBuffer(split[1]), 0); + return inv; + } + static fromQrString(qrstring) { + const inv = new GenericRequest(); + inv.fromBuffer(base64url_1.default.toBuffer(qrstring), 0); + return inv; + } } exports.GenericRequest = GenericRequest; GenericRequest.VERSION_CURRENT = new bn_js_1.BN(1, 10); diff --git a/dist/vdxf/classes/response/GenericResponse.d.ts b/dist/vdxf/classes/response/GenericResponse.d.ts index 73950c88..1164261c 100644 --- a/dist/vdxf/classes/response/GenericResponse.d.ts +++ b/dist/vdxf/classes/response/GenericResponse.d.ts @@ -30,4 +30,6 @@ export declare class GenericResponse extends GenericEnvelope implements Serializ protected toBufferOptionalSig(includeSig?: boolean): Buffer; fromBuffer(buffer: Buffer, offset?: number): number; toJson(): GenericResponseJson; + static fromWalletDeeplinkUri(uri: string): GenericResponse; + static fromQrString(qrstring: string): GenericResponse; } diff --git a/dist/vdxf/classes/response/GenericResponse.js b/dist/vdxf/classes/response/GenericResponse.js index 05d57843..825151a9 100644 --- a/dist/vdxf/classes/response/GenericResponse.js +++ b/dist/vdxf/classes/response/GenericResponse.js @@ -6,6 +6,8 @@ const GenericEnvelope_1 = require("../envelope/GenericEnvelope"); const bufferutils_1 = require("../../../utils/bufferutils"); const DataDescriptor_1 = require("../../../pbaas/DataDescriptor"); const varuint_1 = require("../../../utils/varuint"); +const keys_1 = require("../../keys"); +const base64url_1 = require("base64url"); class GenericResponse extends GenericEnvelope_1.GenericEnvelope { constructor(envelope = { details: [], @@ -69,6 +71,17 @@ class GenericResponse extends GenericEnvelope_1.GenericEnvelope { } return parentJson; } + static fromWalletDeeplinkUri(uri) { + const split = uri.split(`${keys_1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); + const inv = new GenericResponse(); + inv.fromBuffer(base64url_1.default.toBuffer(split[1]), 0); + return inv; + } + static fromQrString(qrstring) { + const inv = new GenericResponse(); + inv.fromBuffer(base64url_1.default.toBuffer(qrstring), 0); + return inv; + } } exports.GenericResponse = GenericResponse; GenericResponse.VERSION_CURRENT = new bn_js_1.BN(1, 10); diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts index 7ff2fb15..9fe67956 100644 --- a/src/__tests__/vdxf/genericrequest.test.ts +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -12,7 +12,8 @@ describe('GenericRequest — buffer / URI / QR operations', () => { const buf = req.toBuffer(); const clone = new GenericRequest(); clone.fromBuffer(buf, 0); - return clone; + + return GenericRequest.fromQrString((GenericRequest.fromWalletDeeplinkUri(clone.toWalletDeeplinkUri())).toQrString()); } function rawDetailsSha256(req: GenericRequest): Buffer { diff --git a/src/__tests__/vdxf/genericresponse.test.ts b/src/__tests__/vdxf/genericresponse.test.ts index 0f7cea6a..fcb0c770 100644 --- a/src/__tests__/vdxf/genericresponse.test.ts +++ b/src/__tests__/vdxf/genericresponse.test.ts @@ -12,7 +12,8 @@ describe('GenericResponse — buffer / URI / QR operations', () => { const buf = req.toBuffer(); const clone = new GenericResponse(); clone.fromBuffer(buf, 0); - return clone; + + return GenericResponse.fromQrString((GenericResponse.fromWalletDeeplinkUri(clone.toWalletDeeplinkUri())).toQrString()); } function rawDetailsSha256(req: GenericResponse): Buffer { diff --git a/src/vdxf/classes/envelope/GenericEnvelope.ts b/src/vdxf/classes/envelope/GenericEnvelope.ts index 1698435b..1101f4a8 100644 --- a/src/vdxf/classes/envelope/GenericEnvelope.ts +++ b/src/vdxf/classes/envelope/GenericEnvelope.ts @@ -280,26 +280,10 @@ export class GenericEnvelope implements SerializableEntity { }/${this.toString()}`; } - static fromWalletDeeplinkUri(uri: string): GenericEnvelope { - const split = uri.split(`${GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); - - const inv = new GenericEnvelope(); - inv.fromBuffer(base64url.toBuffer(split[1]), 0); - - return inv; - } - toQrString(): string { return this.toString(); } - static fromQrString(qrstring: string): GenericEnvelope { - const inv = new GenericEnvelope(); - inv.fromBuffer(base64url.toBuffer(qrstring), 0); - - return inv; - } - toJson(): GenericEnvelopeJson { const details = []; diff --git a/src/vdxf/classes/request/GenericRequest.ts b/src/vdxf/classes/request/GenericRequest.ts index 2527f6c4..d7200708 100644 --- a/src/vdxf/classes/request/GenericRequest.ts +++ b/src/vdxf/classes/request/GenericRequest.ts @@ -3,6 +3,8 @@ import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import { GenericEnvelope, GenericEnvelopeInterface, GenericEnvelopeJson } from "../envelope/GenericEnvelope"; import { SaplingPaymentAddress } from '../../../pbaas/SaplingPaymentAddress'; import bufferutils from '../../../utils/bufferutils'; +import { GENERIC_REQUEST_DEEPLINK_VDXF_KEY } from '../../keys'; +import base64url from 'base64url'; export type GenericRequestJson = GenericEnvelopeJson & { encryptresponsetoaddress?: string; @@ -105,4 +107,20 @@ export class GenericRequest extends GenericEnvelope implements SerializableEntit return parentJson; } + + static fromWalletDeeplinkUri(uri: string): GenericRequest { + const split = uri.split(`${GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); + + const inv = new GenericRequest(); + inv.fromBuffer(base64url.toBuffer(split[1]), 0); + + return inv; + } + + static fromQrString(qrstring: string): GenericRequest { + const inv = new GenericRequest(); + inv.fromBuffer(base64url.toBuffer(qrstring), 0); + + return inv; + } } \ No newline at end of file diff --git a/src/vdxf/classes/response/GenericResponse.ts b/src/vdxf/classes/response/GenericResponse.ts index 87c5ae55..3ed6fb91 100644 --- a/src/vdxf/classes/response/GenericResponse.ts +++ b/src/vdxf/classes/response/GenericResponse.ts @@ -5,6 +5,8 @@ import bufferutils from '../../../utils/bufferutils'; import { BigNumber } from '../../../utils/types/BigNumber'; import { EHashTypes } from '../../../pbaas/DataDescriptor'; import varuint from '../../../utils/varuint'; +import { GENERIC_REQUEST_DEEPLINK_VDXF_KEY } from '../../keys'; +import base64url from 'base64url'; export type GenericResponseJson = GenericEnvelopeJson & { requesthash?: string, @@ -122,4 +124,20 @@ export class GenericResponse extends GenericEnvelope implements SerializableEnti return parentJson; } + + static fromWalletDeeplinkUri(uri: string): GenericResponse { + const split = uri.split(`${GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); + + const inv = new GenericResponse(); + inv.fromBuffer(base64url.toBuffer(split[1]), 0); + + return inv; + } + + static fromQrString(qrstring: string): GenericResponse { + const inv = new GenericResponse(); + inv.fromBuffer(base64url.toBuffer(qrstring), 0); + + return inv; + } } \ No newline at end of file From c74dc5088ceb61b880e45170e5a08224a879bfdc Mon Sep 17 00:00:00 2001 From: monkins Date: Fri, 21 Nov 2025 12:42:33 +0000 Subject: [PATCH 066/123] fix encryption key --- src/vdxf/keys.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index 80809818..12e634bb 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -666,13 +666,13 @@ export const PROVISION_IDENTITY_DETAILS_VDXF_KEY: VDXFKeyInterface = { } export const APP_ENCRYPTION_REQUEST_VDXF_KEY: VDXFKeyInterface = { - "hash160result": "f178871fedb335cf6659f8527a6c9652bc8e1d79", - "indexid": "xKM34nS3HiFvf3WDKL8DBrhpj2GqVWEaH4", + "vdxfid": "iL5nfPuV8Ekiz1EeW5KE3pXHuUTfQf6QC9", + "indexid": "xQuu8CLZyYyPcB7gMkyP2D3pw8UgHevmcM", + "hash160result": "5f398b165b8ea8c547b5f473f951178fc5482db6", "qualifiedname": { - "name": "vrsc::application.encryption.request", - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" - }, - "vdxfid": "iL5nfPuV8Ekiz1EeW5KE3pXHuUTfQf6QC9" + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "application.encryption.request" + } } export const DATA_RESPONSE_VDXF_KEY: VDXFKeyInterface = { From 5b85ca9efe850a003d8a86eca1ff22f4a5f61a0a Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 21 Nov 2025 13:45:35 +0100 Subject: [PATCH 067/123] Update name of generic deeplink type to generic envelope --- dist/vdxf/classes/envelope/GenericEnvelope.js | 2 +- dist/vdxf/classes/request/GenericRequest.js | 2 +- dist/vdxf/classes/response/GenericResponse.js | 2 +- dist/vdxf/keys.d.ts | 2 +- dist/vdxf/keys.js | 6 +++--- src/__tests__/vdxf/genericrequest.test.ts | 4 ++-- src/__tests__/vdxf/genericresponse.test.ts | 4 ++-- src/vdxf/classes/envelope/GenericEnvelope.ts | 4 ++-- src/vdxf/classes/request/GenericRequest.ts | 4 ++-- src/vdxf/classes/response/GenericResponse.ts | 4 ++-- src/vdxf/keys.ts | 4 ++-- 11 files changed, 19 insertions(+), 19 deletions(-) diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.js b/dist/vdxf/classes/envelope/GenericEnvelope.js index a78bac34..f6687f51 100644 --- a/dist/vdxf/classes/envelope/GenericEnvelope.js +++ b/dist/vdxf/classes/envelope/GenericEnvelope.js @@ -187,7 +187,7 @@ class GenericEnvelope { return base64url_1.default.encode(this.toBuffer()); } toWalletDeeplinkUri() { - return `${__1.WALLET_VDXF_KEY.vdxfid.toLowerCase()}:/${__1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/${this.toString()}`; + return `${__1.WALLET_VDXF_KEY.vdxfid.toLowerCase()}:/${__1.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY.vdxfid}/${this.toString()}`; } toQrString() { return this.toString(); diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js index 04723be4..e56183ce 100644 --- a/dist/vdxf/classes/request/GenericRequest.js +++ b/dist/vdxf/classes/request/GenericRequest.js @@ -62,7 +62,7 @@ class GenericRequest extends GenericEnvelope_1.GenericEnvelope { return parentJson; } static fromWalletDeeplinkUri(uri) { - const split = uri.split(`${keys_1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); + const split = uri.split(`${keys_1.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY.vdxfid}/`); const inv = new GenericRequest(); inv.fromBuffer(base64url_1.default.toBuffer(split[1]), 0); return inv; diff --git a/dist/vdxf/classes/response/GenericResponse.js b/dist/vdxf/classes/response/GenericResponse.js index 825151a9..91474f93 100644 --- a/dist/vdxf/classes/response/GenericResponse.js +++ b/dist/vdxf/classes/response/GenericResponse.js @@ -72,7 +72,7 @@ class GenericResponse extends GenericEnvelope_1.GenericEnvelope { return parentJson; } static fromWalletDeeplinkUri(uri) { - const split = uri.split(`${keys_1.GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); + const split = uri.split(`${keys_1.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY.vdxfid}/`); const inv = new GenericResponse(); inv.fromBuffer(base64url_1.default.toBuffer(split[1]), 0); return inv; diff --git a/dist/vdxf/keys.d.ts b/dist/vdxf/keys.d.ts index cda6e0bb..1b91be13 100644 --- a/dist/vdxf/keys.d.ts +++ b/dist/vdxf/keys.d.ts @@ -12,7 +12,7 @@ export interface VDXFKeyInterface { } export declare const VERUSPAY_INVOICE_VDXF_KEY: VDXFKeyInterface; export declare const VERUSPAY_INVOICE_DETAILS_VDXF_KEY: VDXFKeyInterface; -export declare const GENERIC_REQUEST_DEEPLINK_VDXF_KEY: VDXFKeyInterface; +export declare const GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY: VDXFKeyInterface; export declare const IDENTITY_UPDATE_REQUEST_VDXF_KEY: VDXFKeyInterface; export declare const IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const IDENTITY_UPDATE_RESPONSE_VDXF_KEY: VDXFKeyInterface; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index c7513e71..a84bec62 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; +exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.LOGIN_RESPONSE_DETAILS_VDXF_KEY = exports.LOGIN_REQUEST_DETAILS_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; exports.VERUSPAY_INVOICE_VDXF_KEY = { hash160result: "628efc28c2e2d40050e1a9de7a93e7ddf2aa0076", @@ -19,11 +19,11 @@ exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = { }, "vdxfid": "iJNsPqAhjovi3iVR3hvLGqrQxcCkHq9n9H" }; -exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = { +exports.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY = { "hash160result": "bc05c4263031cc791296fa8bd15553ccef3de4ba", "indexid": "xRLq15vpenCUGVpmZgqEtoygZW2b32oVgX", "qualifiedname": { - "name": "vrsc::request.generic", + "name": "vrsc::envelope.generic", "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, "vdxfid": "iLWiYHVjoTyoeKwji1B5vRT9Xr1aA9yyvX" diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts index 9fe67956..04894ce4 100644 --- a/src/__tests__/vdxf/genericrequest.test.ts +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -1,7 +1,7 @@ import { BN } from 'bn.js'; import base64url from 'base64url'; import { DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256 } from '../../constants/pbaas'; -import { WALLET_VDXF_KEY, GENERIC_REQUEST_DEEPLINK_VDXF_KEY, GenericRequest, SaplingPaymentAddress } from '../../'; +import { WALLET_VDXF_KEY, GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY, GenericRequest, SaplingPaymentAddress } from '../../'; import { createHash } from 'crypto'; import { VerifiableSignatureData } from '../../vdxf/classes/VerifiableSignatureData'; import { CompactIdAddressObject } from '../../vdxf/classes/CompactIdAddressObject'; @@ -128,7 +128,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { const uri = req.toWalletDeeplinkUri(); expect(uri).toContain(WALLET_VDXF_KEY.vdxfid.toLowerCase()); - expect(uri).toContain(`${GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); + expect(uri).toContain(`${GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY.vdxfid}/`); const parsed = GenericRequest.fromWalletDeeplinkUri(uri); expect(parsed.version.toString()).toEqual(req.version.toString()); diff --git a/src/__tests__/vdxf/genericresponse.test.ts b/src/__tests__/vdxf/genericresponse.test.ts index fcb0c770..6fc03d30 100644 --- a/src/__tests__/vdxf/genericresponse.test.ts +++ b/src/__tests__/vdxf/genericresponse.test.ts @@ -1,7 +1,7 @@ import { BN } from 'bn.js'; import base64url from 'base64url'; import { DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256 } from '../../constants/pbaas'; -import { WALLET_VDXF_KEY, GENERIC_REQUEST_DEEPLINK_VDXF_KEY, GenericResponse, SaplingPaymentAddress } from '../../'; +import { WALLET_VDXF_KEY, GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY, GenericResponse, SaplingPaymentAddress } from '../../'; import { createHash } from 'crypto'; import { VerifiableSignatureData } from '../../vdxf/classes/VerifiableSignatureData'; import { CompactIdAddressObject } from '../../vdxf/classes/CompactIdAddressObject'; @@ -131,7 +131,7 @@ describe('GenericResponse — buffer / URI / QR operations', () => { const uri = req.toWalletDeeplinkUri(); expect(uri).toContain(WALLET_VDXF_KEY.vdxfid.toLowerCase()); - expect(uri).toContain(`${GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); + expect(uri).toContain(`${GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY.vdxfid}/`); const parsed = GenericResponse.fromWalletDeeplinkUri(uri); expect(parsed.version.toString()).toEqual(req.version.toString()); diff --git a/src/vdxf/classes/envelope/GenericEnvelope.ts b/src/vdxf/classes/envelope/GenericEnvelope.ts index 1101f4a8..51cfa199 100644 --- a/src/vdxf/classes/envelope/GenericEnvelope.ts +++ b/src/vdxf/classes/envelope/GenericEnvelope.ts @@ -1,6 +1,6 @@ import { WALLET_VDXF_KEY, - GENERIC_REQUEST_DEEPLINK_VDXF_KEY + GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY } from "../../"; import bufferutils from "../../../utils/bufferutils"; import base64url from "base64url"; @@ -276,7 +276,7 @@ export class GenericEnvelope implements SerializableEntity { toWalletDeeplinkUri(): string { return `${WALLET_VDXF_KEY.vdxfid.toLowerCase()}:/${ - GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid + GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY.vdxfid }/${this.toString()}`; } diff --git a/src/vdxf/classes/request/GenericRequest.ts b/src/vdxf/classes/request/GenericRequest.ts index d7200708..f2090c13 100644 --- a/src/vdxf/classes/request/GenericRequest.ts +++ b/src/vdxf/classes/request/GenericRequest.ts @@ -3,7 +3,7 @@ import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import { GenericEnvelope, GenericEnvelopeInterface, GenericEnvelopeJson } from "../envelope/GenericEnvelope"; import { SaplingPaymentAddress } from '../../../pbaas/SaplingPaymentAddress'; import bufferutils from '../../../utils/bufferutils'; -import { GENERIC_REQUEST_DEEPLINK_VDXF_KEY } from '../../keys'; +import { GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY } from '../../keys'; import base64url from 'base64url'; export type GenericRequestJson = GenericEnvelopeJson & { @@ -109,7 +109,7 @@ export class GenericRequest extends GenericEnvelope implements SerializableEntit } static fromWalletDeeplinkUri(uri: string): GenericRequest { - const split = uri.split(`${GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); + const split = uri.split(`${GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY.vdxfid}/`); const inv = new GenericRequest(); inv.fromBuffer(base64url.toBuffer(split[1]), 0); diff --git a/src/vdxf/classes/response/GenericResponse.ts b/src/vdxf/classes/response/GenericResponse.ts index 3ed6fb91..f4fdb677 100644 --- a/src/vdxf/classes/response/GenericResponse.ts +++ b/src/vdxf/classes/response/GenericResponse.ts @@ -5,7 +5,7 @@ import bufferutils from '../../../utils/bufferutils'; import { BigNumber } from '../../../utils/types/BigNumber'; import { EHashTypes } from '../../../pbaas/DataDescriptor'; import varuint from '../../../utils/varuint'; -import { GENERIC_REQUEST_DEEPLINK_VDXF_KEY } from '../../keys'; +import { GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY } from '../../keys'; import base64url from 'base64url'; export type GenericResponseJson = GenericEnvelopeJson & { @@ -126,7 +126,7 @@ export class GenericResponse extends GenericEnvelope implements SerializableEnti } static fromWalletDeeplinkUri(uri: string): GenericResponse { - const split = uri.split(`${GENERIC_REQUEST_DEEPLINK_VDXF_KEY.vdxfid}/`); + const split = uri.split(`${GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY.vdxfid}/`); const inv = new GenericResponse(); inv.fromBuffer(base64url.toBuffer(split[1]), 0); diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index a5db7929..c62095c3 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -30,11 +30,11 @@ export const VERUSPAY_INVOICE_DETAILS_VDXF_KEY: VDXFKeyInterface = { "vdxfid": "iJNsPqAhjovi3iVR3hvLGqrQxcCkHq9n9H" } -export const GENERIC_REQUEST_DEEPLINK_VDXF_KEY: VDXFKeyInterface = { +export const GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY: VDXFKeyInterface = { "hash160result": "bc05c4263031cc791296fa8bd15553ccef3de4ba", "indexid": "xRLq15vpenCUGVpmZgqEtoygZW2b32oVgX", "qualifiedname": { - "name": "vrsc::request.generic", + "name": "vrsc::envelope.generic", "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, "vdxfid": "iLWiYHVjoTyoeKwji1B5vRT9Xr1aA9yyvX" From a4b96c048302492150237f595da699348a33d68e Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 21 Nov 2025 14:00:30 +0100 Subject: [PATCH 068/123] Rename DataResponse, push build files --- dist/constants/ordinals/helpers.d.ts | 9 - dist/constants/ordinals/helpers.js | 33 -- dist/constants/ordinals/ordinals.d.ts | 3 + dist/constants/ordinals/ordinals.js | 7 +- dist/constants/ordinals/register.js | 6 + dist/constants/ordinals/types.d.ts | 7 +- dist/pbaas/ContentMultiMapRemove.js | 4 +- dist/pbaas/Credential.js | 2 +- dist/pbaas/CurrencyValueMap.js | 2 +- dist/pbaas/EvidenceData.js | 2 +- dist/pbaas/Identity.js | 8 +- dist/pbaas/IdentityMultimapRef.js | 8 +- dist/pbaas/PBaaSEvidenceRef.js | 2 +- dist/pbaas/Rating.js | 2 +- dist/pbaas/SaltedData.js | 2 +- dist/pbaas/SignatureData.js | 4 +- dist/pbaas/URLRef.js | 3 +- dist/pbaas/UTXORef.js | 3 +- dist/vdxf/classes/CompactIdAddressObject.js | 2 +- dist/vdxf/classes/OrdinalVdxfObject.d.ts | 80 ----- dist/vdxf/classes/OrdinalVdxfObject.js | 248 -------------- .../classes/OrdinalVdxfObjectOrdinalMap.d.ts | 17 - .../classes/OrdinalVdxfObjectOrdinalMap.js | 44 --- dist/vdxf/classes/SaltedData.js | 2 +- .../attestation/AttestationDetails.d.ts | 123 ------- .../classes/attestation/AttestationDetails.js | 317 ------------------ .../datapacket/DataPacketResponse.d.ts | 68 ++++ .../classes/datapacket/DataPacketResponse.js | 112 +++++++ .../identity/IdentityUpdateEnvelope.d.ts | 63 ---- .../identity/IdentityUpdateEnvelope.js | 210 ------------ ...dentityUpdateRequestOrdinalVdxfObject.d.ts | 8 - .../IdentityUpdateRequestOrdinalVdxfObject.js | 22 -- ...entityUpdateResponseOrdinalVdxfObject.d.ts | 8 - ...IdentityUpdateResponseOrdinalVdxfObject.js | 22 -- dist/vdxf/classes/index.d.ts | 4 +- dist/vdxf/classes/index.js | 4 +- .../vdxf/classes/login/LoginRequestDetails.js | 2 +- ...ppEncryptionRequestOrdinalVdxfObject.d.ts} | 4 +- ... AppEncryptionRequestOrdinalVdxfObject.js} | 0 .../DataPacketResponseOrdinalVdxfObject.d.ts | 9 + .../DataPacketResponseOrdinalVdxfObject.js | 22 ++ .../GeneralTypeOrdinalVdxfObject.d.ts | 1 - .../ordinals/GeneralTypeOrdinalVdxfObject.js | 2 - .../UserDataRequestOrdinalVdxfObject.d.ts | 9 + .../UserDataRequestOrdinalVdxfObject.js | 22 ++ ...ficDataPacketDetailsOrdinalVdxfObject.d.ts | 9 + ...cificDataPacketDetailsOrdinalVdxfObject.js | 22 ++ dist/vdxf/classes/ordinals/index.d.ts | 3 + dist/vdxf/classes/ordinals/index.js | 3 + .../classes/payment/VerusPayInvoiceDetails.js | 2 +- .../AppEncryptionRequestDetails.d.ts | 15 +- .../AppEncryptionRequestDetails.js | 29 +- .../requestobjects/LoginRequestDetails.d.ts | 81 ----- .../requestobjects/LoginRequestDetails.js | 212 ------------ ...rData.d.ts => UserDataRequestDetails.d.ts} | 17 +- ...tUserData.js => UserDataRequestDetails.js} | 83 +++-- ....ts => UserSpecificDataPacketDetails.d.ts} | 24 +- ...ls.js => UserSpecificDataPacketDetails.js} | 71 ++-- dist/vdxf/keys.d.ts | 3 + dist/vdxf/keys.js | 39 ++- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 22 +- src/constants/ordinals/register.ts | 4 +- src/constants/ordinals/types.ts | 4 +- .../DataPacketResponse.ts} | 13 +- ...=> DataPacketResponseOrdinalVdxfObject.ts} | 18 +- src/vdxf/classes/ordinals/index.ts | 2 +- 66 files changed, 559 insertions(+), 1649 deletions(-) delete mode 100644 dist/constants/ordinals/helpers.d.ts delete mode 100644 dist/constants/ordinals/helpers.js delete mode 100644 dist/vdxf/classes/OrdinalVdxfObject.d.ts delete mode 100644 dist/vdxf/classes/OrdinalVdxfObject.js delete mode 100644 dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.d.ts delete mode 100644 dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.js delete mode 100644 dist/vdxf/classes/attestation/AttestationDetails.d.ts delete mode 100644 dist/vdxf/classes/attestation/AttestationDetails.js create mode 100644 dist/vdxf/classes/datapacket/DataPacketResponse.d.ts create mode 100644 dist/vdxf/classes/datapacket/DataPacketResponse.js delete mode 100644 dist/vdxf/classes/identity/IdentityUpdateEnvelope.d.ts delete mode 100644 dist/vdxf/classes/identity/IdentityUpdateEnvelope.js delete mode 100644 dist/vdxf/classes/identity/IdentityUpdateRequestOrdinalVdxfObject.d.ts delete mode 100644 dist/vdxf/classes/identity/IdentityUpdateRequestOrdinalVdxfObject.js delete mode 100644 dist/vdxf/classes/identity/IdentityUpdateResponseOrdinalVdxfObject.d.ts delete mode 100644 dist/vdxf/classes/identity/IdentityUpdateResponseOrdinalVdxfObject.js rename dist/vdxf/classes/ordinals/{AppEncryptionRequestDetailsOrdinalVdxfObject.d.ts => AppEncryptionRequestOrdinalVdxfObject.d.ts} (75%) rename dist/vdxf/classes/ordinals/{AppEncryptionRequestDetailsOrdinalVdxfObject.js => AppEncryptionRequestOrdinalVdxfObject.js} (100%) create mode 100644 dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.js delete mode 100644 dist/vdxf/classes/ordinals/GeneralTypeOrdinalVdxfObject.d.ts delete mode 100644 dist/vdxf/classes/ordinals/GeneralTypeOrdinalVdxfObject.js create mode 100644 dist/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.js create mode 100644 dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.js delete mode 100644 dist/vdxf/classes/requestobjects/LoginRequestDetails.d.ts delete mode 100644 dist/vdxf/classes/requestobjects/LoginRequestDetails.js rename dist/vdxf/classes/requestobjects/{RequestUserData.d.ts => UserDataRequestDetails.d.ts} (87%) rename dist/vdxf/classes/requestobjects/{RequestUserData.js => UserDataRequestDetails.js} (70%) rename dist/vdxf/classes/requestobjects/{PersonalUserDataDetails.d.ts => UserSpecificDataPacketDetails.d.ts} (75%) rename dist/vdxf/classes/requestobjects/{PersonalUserDataDetails.js => UserSpecificDataPacketDetails.js} (70%) rename src/vdxf/classes/{response/DataResponse.ts => datapacket/DataPacketResponse.ts} (91%) rename src/vdxf/classes/ordinals/{DataResponseOrdinalVdxfObject.ts => DataPacketResponseOrdinalVdxfObject.ts} (51%) diff --git a/dist/constants/ordinals/helpers.d.ts b/dist/constants/ordinals/helpers.d.ts deleted file mode 100644 index 9a8bdd05..00000000 --- a/dist/constants/ordinals/helpers.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; -import { IdentityUpdateDetailsJson, IdentityUpdateRequestDetails, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; -import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; -import { OrdinalVdxfObjectClass } from "../../vdxf/classes/OrdinalVdxfObject"; -import { BigNumber } from "../../utils/types/BigNumber"; -export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails; -export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateDetailsJson | IdentityUpdateResponseDetailsJson; -export declare const registerOrdinals: () => void; -export declare const getOrdinalVdxfObjectClassForType: (type: BigNumber) => OrdinalVdxfObjectClass; diff --git a/dist/constants/ordinals/helpers.js b/dist/constants/ordinals/helpers.js deleted file mode 100644 index bd52ead9..00000000 --- a/dist/constants/ordinals/helpers.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getOrdinalVdxfObjectClassForType = exports.registerOrdinals = void 0; -const OrdinalVdxfObjectOrdinalMap_1 = require("../../vdxf/classes/OrdinalVdxfObjectOrdinalMap"); -const vdxf_1 = require("../../vdxf"); -const OrdinalVdxfObject_1 = require("../../vdxf/classes/OrdinalVdxfObject"); -const ordinals_1 = require("./ordinals"); -const IdentityUpdateRequestOrdinalVdxfObject_1 = require("../../vdxf/classes/identity/IdentityUpdateRequestOrdinalVdxfObject"); -const registerOrdinals = () => { - OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), vdxf_1.DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, OrdinalVdxfObject_1.DataDescriptorOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), vdxf_1.VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid, OrdinalVdxfObject_1.VerusPayInvoiceOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), vdxf_1.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVdxfObject_1.IdentityUpdateRequestOrdinalVdxfObject, false); -}; -exports.registerOrdinals = registerOrdinals; -// OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject); -const getOrdinalVdxfObjectClassForType = (type) => { - if (OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.isRecognizedOrdinal(type.toNumber())) { - const key = OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.getVdxfKeyForOrdinal(type.toNumber()); - if (OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.hasClassForVdxfKey(key)) { - return OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.getClassForVdxfKey(OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.getVdxfKeyForOrdinal(type.toNumber())); - } - else { - throw new Error("No class found for " + key); - } - } - else if (type.eq(OrdinalVdxfObject_1.OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR) || - type.eq(OrdinalVdxfObject_1.OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING) || - type.eq(OrdinalVdxfObject_1.OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY)) - return OrdinalVdxfObject_1.GeneralTypeOrdinalVdxfObject; - else - throw new Error("Unrecognized vdxf ordinal object type"); -}; -exports.getOrdinalVdxfObjectClassForType = getOrdinalVdxfObjectClassForType; diff --git a/dist/constants/ordinals/ordinals.d.ts b/dist/constants/ordinals/ordinals.d.ts index c26b7e5e..baca9d56 100644 --- a/dist/constants/ordinals/ordinals.d.ts +++ b/dist/constants/ordinals/ordinals.d.ts @@ -9,3 +9,6 @@ export declare const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST: import("bn.js"); export declare const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE: import("bn.js"); export declare const VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS: import("bn.js"); export declare const VDXF_ORDINAL_APP_ENCRYPTION_REQUEST: import("bn.js"); +export declare const VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET: import("bn.js"); +export declare const VDXF_ORDINAL_USER_DATA_REQUEST: import("bn.js"); +export declare const VDXF_ORDINAL_DATA_RESPONSE: import("bn.js"); diff --git a/dist/constants/ordinals/ordinals.js b/dist/constants/ordinals/ordinals.js index ada36edb..2b5c5bf9 100644 --- a/dist/constants/ordinals/ordinals.js +++ b/dist/constants/ordinals/ordinals.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = exports.VDXF_ORDINAL_LOGIN_RESPONSE = exports.VDXF_ORDINAL_LOGIN_REQUEST = exports.VDXF_ORDINAL_VERUSPAY_INVOICE = exports.VDXF_ORDINAL_DATA_DESCRIPTOR = exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = void 0; +exports.VDXF_ORDINAL_DATA_RESPONSE = exports.VDXF_ORDINAL_USER_DATA_REQUEST = exports.VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET = exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = exports.VDXF_ORDINAL_LOGIN_RESPONSE = exports.VDXF_ORDINAL_LOGIN_REQUEST = exports.VDXF_ORDINAL_VERUSPAY_INVOICE = exports.VDXF_ORDINAL_DATA_DESCRIPTOR = exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = void 0; const bn_js_1 = require("bn.js"); exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = new bn_js_1.BN(102, 10); exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new bn_js_1.BN(103, 10); @@ -12,4 +12,7 @@ exports.VDXF_ORDINAL_LOGIN_RESPONSE = new bn_js_1.BN(3, 10); exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new bn_js_1.BN(4, 10); exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new bn_js_1.BN(5, 10); exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new bn_js_1.BN(6, 10); -exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = new bn_js_1.BN(7, 10); +exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = new bn_js_1.BN(8, 10); +exports.VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET = new bn_js_1.BN(10, 10); +exports.VDXF_ORDINAL_USER_DATA_REQUEST = new bn_js_1.BN(12, 10); +exports.VDXF_ORDINAL_DATA_RESPONSE = new bn_js_1.BN(13, 10); diff --git a/dist/constants/ordinals/register.js b/dist/constants/ordinals/register.js index e4176176..1f64e95b 100644 --- a/dist/constants/ordinals/register.js +++ b/dist/constants/ordinals/register.js @@ -4,6 +4,9 @@ exports.registerOrdinals = void 0; const vdxf_1 = require("../../vdxf"); const AppEncryptionRequestOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject"); const DataDescriptorOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject"); +const DataPacketResponseOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject"); +const UserDataRequestOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject"); +const UserSpecificDataPacketDetailsOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject"); const IdentityUpdateRequestOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject"); const IdentityUpdateResponseOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject"); const LoginRequestDetailsOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject"); @@ -21,5 +24,8 @@ const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), vdxf_1.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject_1.IdentityUpdateResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), vdxf_1.PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVdxfObject_1.ProvisionIdentityDetailsOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST.toNumber(), vdxf_1.APP_ENCRYPTION_REQUEST_VDXF_KEY.vdxfid, AppEncryptionRequestOrdinalVdxfObject_1.AppEncryptionRequestOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_DATA_RESPONSE.toNumber(), vdxf_1.DATA_RESPONSE_VDXF_KEY.vdxfid, DataPacketResponseOrdinalVdxfObject_1.DataPacketResponseOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_USER_DATA_REQUEST.toNumber(), vdxf_1.USER_DATA_REQUEST_VDXF_KEY.vdxfid, UserDataRequestOrdinalVdxfObject_1.UserDataRequestOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET.toNumber(), vdxf_1.USER_SPECIFIC_DATA_PACKET_VDXF_KEY.vdxfid, UserSpecificDataPacketDetailsOrdinalVdxfObject_1.UserSpecificDataPacketDetailsOrdinalVdxfObject, false); }; exports.registerOrdinals = registerOrdinals; diff --git a/dist/constants/ordinals/types.d.ts b/dist/constants/ordinals/types.d.ts index bc8905fd..56b86e20 100644 --- a/dist/constants/ordinals/types.d.ts +++ b/dist/constants/ordinals/types.d.ts @@ -1,5 +1,6 @@ import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; -import { AppEncryptionRequestDetails, AppEncryptionRequestDetailsJson, IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, LoginRequestDetails, LoginRequestDetailsJson, LoginResponseDetails, LoginResponseDetailsJson, ProvisionIdentityDetails, ProvisionIdentityDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; +import { AppEncryptionRequestDetails, AppEncryptionRequestJson, IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, LoginRequestDetails, LoginRequestDetailsJson, LoginResponseDetails, LoginResponseDetailsJson, ProvisionIdentityDetails, ProvisionIdentityDetailsJson, UserDataRequestDetails, UserDataRequestJson, UserSpecificDataPacketDetails, UserSpecificDataPacketDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; -export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails | LoginRequestDetails | LoginResponseDetails | ProvisionIdentityDetails | AppEncryptionRequestDetails; -export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson | LoginRequestDetailsJson | LoginResponseDetailsJson | ProvisionIdentityDetailsJson | AppEncryptionRequestDetailsJson; +import { DataPacketResponse, DataResponseJson } from "../../vdxf/classes/datapacket/DataPacketResponse"; +export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails | LoginRequestDetails | LoginResponseDetails | ProvisionIdentityDetails | AppEncryptionRequestDetails | DataPacketResponse | UserDataRequestDetails | UserSpecificDataPacketDetails; +export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson | LoginRequestDetailsJson | LoginResponseDetailsJson | ProvisionIdentityDetailsJson | AppEncryptionRequestJson | DataResponseJson | UserDataRequestJson | UserSpecificDataPacketDetailsJson; diff --git a/dist/pbaas/ContentMultiMapRemove.js b/dist/pbaas/ContentMultiMapRemove.js index b238983c..e8b2e9dc 100644 --- a/dist/pbaas/ContentMultiMapRemove.js +++ b/dist/pbaas/ContentMultiMapRemove.js @@ -19,9 +19,9 @@ class ContentMultiMapRemove { byteLength += varint_1.default.encodingLength(this.version); byteLength += varint_1.default.encodingLength(this.action); if (this.action != ContentMultiMapRemove.ACTION_CLEAR_MAP) { - byteLength += 20; + byteLength += vdxf_1.HASH160_BYTE_LENGTH; if (this.action != ContentMultiMapRemove.ACTION_REMOVE_ALL_KEY) { - byteLength += 32; + byteLength += vdxf_1.HASH256_BYTE_LENGTH; } } return byteLength; diff --git a/dist/pbaas/Credential.js b/dist/pbaas/Credential.js index 9aedd7ff..f62cf0b5 100644 --- a/dist/pbaas/Credential.js +++ b/dist/pbaas/Credential.js @@ -41,7 +41,7 @@ class Credential { let length = 0; length += varint_1.default.encodingLength(this.version); length += varint_1.default.encodingLength(this.flags); - length += 20; // Credential key + length += vdxf_1.HASH160_BYTE_LENGTH; // Credential key // Both the credential and scopes are serialized as JSON strings. const credStr = JSON.stringify(this.credential); const credentialLength = credStr.length; diff --git a/dist/pbaas/CurrencyValueMap.js b/dist/pbaas/CurrencyValueMap.js index dfeefe05..c1c62f6d 100644 --- a/dist/pbaas/CurrencyValueMap.js +++ b/dist/pbaas/CurrencyValueMap.js @@ -23,7 +23,7 @@ class CurrencyValueMap { byteLength += varuint_1.default.encodingLength(this.value_map.size); } for (const [key, value] of this.value_map) { - byteLength += 20; + byteLength += vdxf_1.HASH160_BYTE_LENGTH; byteLength += this.multivalue ? 8 : varint_1.default.encodingLength(value); } return byteLength; diff --git a/dist/pbaas/EvidenceData.js b/dist/pbaas/EvidenceData.js index 05d7682c..c1a404eb 100644 --- a/dist/pbaas/EvidenceData.js +++ b/dist/pbaas/EvidenceData.js @@ -64,7 +64,7 @@ class EvidenceData { byteLength += this.md.getByteLength(); } else { - byteLength += 20; + byteLength += vdxf_1.HASH160_BYTE_LENGTH; } byteLength += varuint_1.default.encodingLength(this.data_vec.length); byteLength += this.data_vec.length; diff --git a/dist/pbaas/Identity.js b/dist/pbaas/Identity.js index d9c7de24..a1348af7 100644 --- a/dist/pbaas/Identity.js +++ b/dist/pbaas/Identity.js @@ -95,14 +95,14 @@ class Identity extends Principal_1.Principal { if (this.version.lt(exports.IDENTITY_VERSION_PBAAS)) { length += varuint_1.default.encodingLength(this.content_map.size); for (const m of this.content_map.entries()) { - length += 20; //uint160 key - length += 32; //uint256 hash + length += vdxf_1.HASH160_BYTE_LENGTH; //uint160 key + length += vdxf_1.HASH256_BYTE_LENGTH; } } length += varuint_1.default.encodingLength(this.content_map.size); for (const m of this.content_map.entries()) { - length += 20; //uint160 key - length += 32; //uint256 hash + length += vdxf_1.HASH160_BYTE_LENGTH; //uint160 key + length += vdxf_1.HASH256_BYTE_LENGTH; //uint256 hash } } if (this.containsRevocation()) diff --git a/dist/pbaas/IdentityMultimapRef.js b/dist/pbaas/IdentityMultimapRef.js index ff7526d4..ac6dd1eb 100644 --- a/dist/pbaas/IdentityMultimapRef.js +++ b/dist/pbaas/IdentityMultimapRef.js @@ -34,15 +34,15 @@ class IdentityMultimapRef { this.setFlags(); byteLength += varint_1.default.encodingLength(this.version); byteLength += varint_1.default.encodingLength(this.flags); - byteLength += 20; // id_ID uint160 - byteLength += 20; // key uint160 + byteLength += vdxf_1.HASH160_BYTE_LENGTH; // id_ID + byteLength += vdxf_1.HASH160_BYTE_LENGTH; // vdxfkey byteLength += varint_1.default.encodingLength(this.height_start); // height_start uint32 byteLength += varint_1.default.encodingLength(this.height_end); // height_end uint32 if (this.flags.and(IdentityMultimapRef.FLAG_HAS_DATAHASH).gt(new bn_js_1.BN(0))) { - byteLength += 32; + byteLength += vdxf_1.HASH256_BYTE_LENGTH; } if (this.flags.and(IdentityMultimapRef.FLAG_HAS_SYSTEM).gt(new bn_js_1.BN(0))) { - byteLength += 20; + byteLength += vdxf_1.HASH160_BYTE_LENGTH; } return byteLength; } diff --git a/dist/pbaas/PBaaSEvidenceRef.js b/dist/pbaas/PBaaSEvidenceRef.js index 43a25143..08afd9e2 100644 --- a/dist/pbaas/PBaaSEvidenceRef.js +++ b/dist/pbaas/PBaaSEvidenceRef.js @@ -34,7 +34,7 @@ class PBaaSEvidenceRef { byteLength += varint_1.default.encodingLength(this.object_num); byteLength += varint_1.default.encodingLength(this.sub_object); if (this.flags.and(PBaaSEvidenceRef.FLAG_HAS_SYSTEM).gt(new bn_js_1.BN(0))) { - byteLength += 20; + byteLength += vdxf_1.HASH160_BYTE_LENGTH; } return byteLength; } diff --git a/dist/pbaas/Rating.js b/dist/pbaas/Rating.js index f823c0ec..b315273d 100644 --- a/dist/pbaas/Rating.js +++ b/dist/pbaas/Rating.js @@ -19,7 +19,7 @@ class Rating { byteLength += 1; // trust_level uint8 byteLength += varuint_1.default.encodingLength(this.ratings.size); for (const [key, value] of this.ratings) { - byteLength += 20; + byteLength += vdxf_1.HASH160_BYTE_LENGTH; byteLength += varuint_1.default.encodingLength(value.length); byteLength += value.length; } diff --git a/dist/pbaas/SaltedData.js b/dist/pbaas/SaltedData.js index cc685204..0a73a8e7 100644 --- a/dist/pbaas/SaltedData.js +++ b/dist/pbaas/SaltedData.js @@ -40,7 +40,7 @@ class SaltedData extends index_1.VDXFData { } getByteLength() { let byteLength = 0; - byteLength += 20; //key + byteLength += vdxf_1.HASH160_BYTE_LENGTH; // vdxfkey byteLength += varint_1.default.encodingLength(this.version); byteLength += varuint_1.default.encodingLength(this.data.length + this.salt.length); byteLength += this.data.length + this.salt.length; diff --git a/dist/pbaas/SignatureData.js b/dist/pbaas/SignatureData.js index 9a46e733..5574cf65 100644 --- a/dist/pbaas/SignatureData.js +++ b/dist/pbaas/SignatureData.js @@ -73,11 +73,11 @@ class SignatureData { getByteLength() { let byteLength = 0; byteLength += varint_1.default.encodingLength(this.version); - byteLength += 20; // system_ID uint160 + byteLength += vdxf_1.HASH160_BYTE_LENGTH; // system_ID uint160 byteLength += varint_1.default.encodingLength(this.hash_type); byteLength += varuint_1.default.encodingLength(this.signature_hash.length); byteLength += this.signature_hash.length; - byteLength += 20; // identity_ID uint160 + byteLength += vdxf_1.HASH160_BYTE_LENGTH; // identity_ID uint160 byteLength += varint_1.default.encodingLength(this.sig_type); byteLength += varuint_1.default.encodingLength(this.vdxf_keys.length); byteLength += this.vdxf_keys.length * 20; diff --git a/dist/pbaas/URLRef.js b/dist/pbaas/URLRef.js index b554b34a..8b4d5723 100644 --- a/dist/pbaas/URLRef.js +++ b/dist/pbaas/URLRef.js @@ -5,6 +5,7 @@ const varint_1 = require("../utils/varint"); const varuint_1 = require("../utils/varuint"); const bufferutils_1 = require("../utils/bufferutils"); const bn_js_1 = require("bn.js"); +const vdxf_1 = require("../constants/vdxf"); const { BufferReader, BufferWriter } = bufferutils_1.default; class URLRef { constructor(data) { @@ -24,7 +25,7 @@ class URLRef { byteLength += varint_1.default.encodingLength(this.flags); if (this.flags.and(URLRef.FLAG_HAS_HASH).eq(URLRef.FLAG_HAS_HASH)) { // If the FLAG_HAS_HASH is set, we include the data hash - byteLength += 32; // 32 bytes for the hash + byteLength += vdxf_1.HASH256_BYTE_LENGTH; // 32 bytes for the hash } } byteLength += varuint_1.default.encodingLength(Buffer.from(this.url, 'utf8').length); diff --git a/dist/pbaas/UTXORef.js b/dist/pbaas/UTXORef.js index 45799a5c..88e3b585 100644 --- a/dist/pbaas/UTXORef.js +++ b/dist/pbaas/UTXORef.js @@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.UTXORef = void 0; const bufferutils_1 = require("../utils/bufferutils"); const bn_js_1 = require("bn.js"); +const vdxf_1 = require("../constants/vdxf"); const { BufferReader, BufferWriter } = bufferutils_1.default; class UTXORef { constructor(data) { @@ -11,7 +12,7 @@ class UTXORef { } getByteLength() { let byteLength = 0; - byteLength += 32; // hash uint256 + byteLength += vdxf_1.HASH256_BYTE_LENGTH; // hash uint256 byteLength += 4; // n uint32 return byteLength; } diff --git a/dist/vdxf/classes/CompactIdAddressObject.js b/dist/vdxf/classes/CompactIdAddressObject.js index b5f2aaa1..e4b76eec 100644 --- a/dist/vdxf/classes/CompactIdAddressObject.js +++ b/dist/vdxf/classes/CompactIdAddressObject.js @@ -66,7 +66,7 @@ class CompactIdAddressObject { length += varuint_1.default.encodingLength(this.version.toNumber()); length += varuint_1.default.encodingLength(this.type.toNumber()); if (this.isIaddress()) { - length += 20; // identityuint160 + length += vdxf_1.HASH160_BYTE_LENGTH; // identityuint160 } else { const addrLen = Buffer.from(this.address, 'utf8').byteLength; diff --git a/dist/vdxf/classes/OrdinalVdxfObject.d.ts b/dist/vdxf/classes/OrdinalVdxfObject.d.ts deleted file mode 100644 index 0543f541..00000000 --- a/dist/vdxf/classes/OrdinalVdxfObject.d.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { BigNumber } from "../../utils/types/BigNumber"; -import { SerializableDataEntity, SerializableEntity } from "../../utils/types/SerializableEntity"; -import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; -import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "./payment/VerusPayInvoiceDetails"; -import { OrdinalVdxfObjectReservedData, OrdinalVdxfObjectReservedDataJson } from "../../constants/ordinals/helpers"; -export interface OrdinalVdxfObjectInterfaceTemplate { - version?: BigNumber; - type?: BigNumber; - key?: string; - data?: T; -} -export type OrdinalVdxfObjectJsonTemplate = { - version: string; - type: string; - vdxfkey?: string; - data?: T; -}; -export type BufferOrOrdinalVdxfObjectReservedData = Buffer | OrdinalVdxfObjectReservedData; -export type StringOrOrdinalVdxfObjectReservedDataJson = string | OrdinalVdxfObjectReservedDataJson; -export type OrdinalVdxfObjectInterface = OrdinalVdxfObjectInterfaceTemplate; -export type OrdinalVdxfObjectJson = OrdinalVdxfObjectJsonTemplate; -export type OrdinalVdxfObjectDataClass = new (...args: any[]) => OrdinalVdxfObjectReservedData; -export type OrdinalVdxfObjectClass = new (...args: any[]) => OrdinalVdxfObject; -export declare class OrdinalVdxfObject implements SerializableEntity { - version: BigNumber; - type: BigNumber; - key?: string; - data?: BufferOrOrdinalVdxfObjectReservedData; - static VERSION_INVALID: import("bn.js"); - static VERSION_FIRST: import("bn.js"); - static VERSION_LAST: import("bn.js"); - static VERSION_CURRENT: import("bn.js"); - static VDXF_OBJECT_RESERVED_BYTE_I_ADDR: import("bn.js"); - static VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING: import("bn.js"); - static VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY: import("bn.js"); - constructor(request?: OrdinalVdxfObjectInterfaceTemplate); - isDefinedByVdxfKey(): boolean; - isDefinedByTextVdxfKey(): boolean; - isDefinedByCurrencyOrId(): boolean; - isDefinedByCustomKey(): boolean; - getDataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer): void; - getByteLength(): number; - toBuffer(): Buffer; - fromBufferOptionalType(buffer: Buffer, offset?: number, type?: BigNumber, key?: string): number; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): OrdinalVdxfObjectJson; - static createFromBuffer(buffer: Buffer, offset?: number, optimizeWithOrdinal?: boolean, rootSystemName?: string): { - offset: number; - obj: OrdinalVdxfObject; - }; -} -export declare class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { - data: Buffer; - key: string; - constructor(request?: OrdinalVdxfObjectInterfaceTemplate); - getDataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer): void; - static fromJson(details: OrdinalVdxfObjectJson): GeneralTypeOrdinalVdxfObject; -} -export declare class SerializableEntityOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { - data: OrdinalVdxfObjectReservedData; - entity: OrdinalVdxfObjectDataClass; - constructor(request: OrdinalVdxfObjectInterfaceTemplate, entity: OrdinalVdxfObjectDataClass); - getDataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer): void; -} -export declare class DataDescriptorOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: DataDescriptor; - constructor(request?: OrdinalVdxfObjectInterfaceTemplate); - static fromJson(details: OrdinalVdxfObjectJsonTemplate): DataDescriptorOrdinalVdxfObject; -} -export declare class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: VerusPayInvoiceDetails; - constructor(request?: OrdinalVdxfObjectInterfaceTemplate); - static fromJson(details: OrdinalVdxfObjectJsonTemplate): VerusPayInvoiceOrdinalVdxfObject; -} diff --git a/dist/vdxf/classes/OrdinalVdxfObject.js b/dist/vdxf/classes/OrdinalVdxfObject.js deleted file mode 100644 index b08612e2..00000000 --- a/dist/vdxf/classes/OrdinalVdxfObject.js +++ /dev/null @@ -1,248 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VerusPayInvoiceOrdinalVdxfObject = exports.DataDescriptorOrdinalVdxfObject = exports.SerializableEntityOrdinalVdxfObject = exports.GeneralTypeOrdinalVdxfObject = exports.OrdinalVdxfObject = void 0; -const bufferutils_1 = require("../../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const varuint_1 = require("../../utils/varuint"); -const address_1 = require("../../utils/address"); -const varint_1 = require("../../utils/varint"); -const vdxf_1 = require("../../constants/vdxf"); -const pbaas_1 = require("../../pbaas"); -const VerusPayInvoiceDetails_1 = require("./payment/VerusPayInvoiceDetails"); -const OrdinalVdxfObjectOrdinalMap_1 = require("./OrdinalVdxfObjectOrdinalMap"); -const pbaas_2 = require("../../constants/pbaas"); -const helpers_1 = require("../../constants/ordinals/helpers"); -const ordinals_1 = require("../../constants/ordinals/ordinals"); -class OrdinalVdxfObject { - constructor(request = { - type: ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR - }) { - if (request.key) { - this.type = OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR; - this.key = request.key; - if (request.data) { - this.data = request.data; - } - else - this.data = Buffer.alloc(0); - } - else if (request.type == null) { - this.type = ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR; - } - else { - this.type = request.type; - } - if (request.version) - this.version = request.version; - else - this.version = OrdinalVdxfObject.VERSION_CURRENT; - } - isDefinedByVdxfKey() { - return this.type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR); - } - isDefinedByTextVdxfKey() { - return this.type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING); - } - isDefinedByCurrencyOrId() { - return this.type.eq(OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY); - } - isDefinedByCustomKey() { - return this.isDefinedByCurrencyOrId() || this.isDefinedByTextVdxfKey() || this.isDefinedByVdxfKey(); - } - getDataByteLength() { - return 0; - } - toDataBuffer() { - return Buffer.alloc(0); - } - fromDataBuffer(buffer) { } - getByteLength() { - let length = 0; - length += varuint_1.default.encodingLength(this.type.toNumber()); - if (this.isDefinedByVdxfKey()) { - length += (0, address_1.fromBase58Check)(this.key).hash.length; - } - else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { - const utf8Key = Buffer.from(this.key, 'utf8'); - length += varuint_1.default.encodingLength(utf8Key.length); - length += utf8Key.length; - } - length += varint_1.default.encodingLength(this.version); - const dataLength = this.getDataByteLength(); - length += varuint_1.default.encodingLength(dataLength); - length += dataLength; - return length; - } - toBuffer() { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeCompactSize(this.type.toNumber()); - if (this.isDefinedByVdxfKey()) { - writer.writeSlice((0, address_1.fromBase58Check)(this.key).hash); - } - else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { - writer.writeVarSlice(Buffer.from(this.key, 'utf8')); - } - writer.writeVarInt(this.version); - writer.writeVarSlice(this.toDataBuffer()); - return writer.buffer; - } - fromBufferOptionalType(buffer, offset, type, key) { - if (buffer.length == 0) - throw new Error("Cannot create request from empty buffer"); - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - if (!type) { - this.type = new bn_js_1.BN(reader.readCompactSize()); - } - else - this.type = type; - if (!key) { - if (this.isDefinedByVdxfKey()) { - this.key = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - } - else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { - this.key = reader.readVarSlice().toString('utf8'); - } - } - else { - this.key = key; - } - this.version = reader.readVarInt(); - const dataBuf = reader.readVarSlice(); - this.fromDataBuffer(dataBuf); - return reader.offset; - } - fromBuffer(buffer, offset) { - return this.fromBufferOptionalType(buffer, offset); - } - toJson() { - return { - type: this.type ? this.type.toString() : undefined, - version: this.version ? this.version.toString() : undefined, - vdxfkey: this.key, - data: this.data ? this.isDefinedByCustomKey() ? this.data.toString('hex') : this.data.toJson() : undefined - }; - } - static createFromBuffer(buffer, offset, optimizeWithOrdinal = false, rootSystemName = pbaas_2.DEFAULT_VERUS_CHAINNAME) { - (0, helpers_1.registerOrdinals)(); - if (buffer.length == 0) - throw new Error("Cannot create request from empty buffer"); - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - let type = new bn_js_1.BN(reader.readCompactSize()); - const rootSystemId = (0, address_1.toIAddress)(rootSystemName); - const Entity = (0, helpers_1.getOrdinalVdxfObjectClassForType)(type); - const ord = new Entity({ type }); - let key; - if (optimizeWithOrdinal) { - let vdxfKey; - if (ord.isDefinedByVdxfKey()) { - key = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - vdxfKey = key; - } - else if (ord.isDefinedByTextVdxfKey() || ord.isDefinedByCurrencyOrId()) { - key = reader.readVarSlice().toString('utf8'); - if (ord.isDefinedByTextVdxfKey()) { - vdxfKey = (0, address_1.getDataKey)(key, undefined, rootSystemId).id; - } - else { - vdxfKey = (0, address_1.toIAddress)(key, rootSystemName); - } - } - if (OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.vdxfKeyHasOrdinal(vdxfKey)) { - type = new bn_js_1.BN(OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.getOrdinalForVdxfKey(vdxfKey)); - } - } - reader.offset = ord.fromBufferOptionalType(buffer, reader.offset, type, key); - return { offset: reader.offset, obj: ord }; - } -} -exports.OrdinalVdxfObject = OrdinalVdxfObject; -OrdinalVdxfObject.VERSION_INVALID = new bn_js_1.BN(0, 10); -OrdinalVdxfObject.VERSION_FIRST = new bn_js_1.BN(1, 10); -OrdinalVdxfObject.VERSION_LAST = new bn_js_1.BN(1, 10); -OrdinalVdxfObject.VERSION_CURRENT = new bn_js_1.BN(1, 10); -OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = new bn_js_1.BN(102, 10); -OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new bn_js_1.BN(103, 10); -OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = new bn_js_1.BN(104, 10); -class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject { - constructor(request = { - type: OrdinalVdxfObject.VDXF_OBJECT_RESERVED_BYTE_I_ADDR, - data: Buffer.alloc(0), - key: vdxf_1.NULL_ADDRESS - }) { - super({ - type: request.type, - data: request.data, - key: request.key - }); - } - getDataByteLength() { - return this.data.length; - } - toDataBuffer() { - return this.data; - } - fromDataBuffer(buffer) { - this.data = Buffer.from(buffer); - } - static fromJson(details) { - return new GeneralTypeOrdinalVdxfObject({ - key: details.vdxfkey, - data: details.data ? Buffer.from(details.data, 'hex') : undefined - }); - } -} -exports.GeneralTypeOrdinalVdxfObject = GeneralTypeOrdinalVdxfObject; -class SerializableEntityOrdinalVdxfObject extends OrdinalVdxfObject { - constructor(request, entity) { - if (!request || !request.type) - throw new Error("Expected request with data and type"); - super({ - type: request.type - }); - this.entity = entity; - this.data = request.data ? request.data : new entity(); - } - getDataByteLength() { - return this.data.getByteLength(); - } - toDataBuffer() { - return this.data.toBuffer(); - } - fromDataBuffer(buffer) { - this.data = new this.entity(); - this.data.fromBuffer(buffer); - } -} -exports.SerializableEntityOrdinalVdxfObject = SerializableEntityOrdinalVdxfObject; -class DataDescriptorOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject { - constructor(request = { - data: new pbaas_1.DataDescriptor() - }) { - super({ - type: ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR, - data: request.data - }, pbaas_1.DataDescriptor); - } - static fromJson(details) { - return new DataDescriptorOrdinalVdxfObject({ - data: pbaas_1.DataDescriptor.fromJson(details.data) - }); - } -} -exports.DataDescriptorOrdinalVdxfObject = DataDescriptorOrdinalVdxfObject; -class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject { - constructor(request = { - data: new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails() - }) { - super({ - type: ordinals_1.VDXF_ORDINAL_VERUSPAY_INVOICE, - data: request.data - }, VerusPayInvoiceDetails_1.VerusPayInvoiceDetails); - } - static fromJson(details) { - return new VerusPayInvoiceOrdinalVdxfObject({ - data: VerusPayInvoiceDetails_1.VerusPayInvoiceDetails.fromJson(details.data) - }); - } -} -exports.VerusPayInvoiceOrdinalVdxfObject = VerusPayInvoiceOrdinalVdxfObject; diff --git a/dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.d.ts b/dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.d.ts deleted file mode 100644 index 2b2498ea..00000000 --- a/dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { OrdinalVdxfObjectClass } from "./OrdinalVdxfObject"; -declare class _OrdinalVdxfObjectOrdinalMap { - private keyToOrdinalMap; - private ordinalToKeyMap; - keyToOrdinalClass: Map; - constructor(); - private updateOrdinalToKeyMap; - registerOrdinal(ordinal: number, vdxfKey: string, ordinalClass: OrdinalVdxfObjectClass, throwOnDuplicate?: boolean): void; - isRecognizedOrdinal(ordinal: number): boolean; - vdxfKeyHasOrdinal(vdxfKey: string): boolean; - hasClassForVdxfKey(vdxfKey: string): boolean; - getOrdinalForVdxfKey(vdxfKey: string): number; - getVdxfKeyForOrdinal(ordinal: number): string; - getClassForVdxfKey(vdxfKey: string): OrdinalVdxfObjectClass; -} -export declare const OrdinalVdxfObjectOrdinalMap: _OrdinalVdxfObjectOrdinalMap; -export {}; diff --git a/dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.js b/dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.js deleted file mode 100644 index dad33880..00000000 --- a/dist/vdxf/classes/OrdinalVdxfObjectOrdinalMap.js +++ /dev/null @@ -1,44 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OrdinalVdxfObjectOrdinalMap = void 0; -// Singleton class that exists to create a bidirectional map of ordinals <-> vdxf keys -class _OrdinalVdxfObjectOrdinalMap { - constructor() { - this.keyToOrdinalMap = new Map(); - this.ordinalToKeyMap = new Map(); - this.keyToOrdinalClass = new Map(); - } - updateOrdinalToKeyMap() { - this.ordinalToKeyMap = new Map(Array.from(this.keyToOrdinalMap, a => a.reverse())); - } - registerOrdinal(ordinal, vdxfKey, ordinalClass, throwOnDuplicate = true) { - if (this.isRecognizedOrdinal(ordinal) || this.vdxfKeyHasOrdinal(vdxfKey)) { - if (throwOnDuplicate) - throw new Error("Cannot overwrite existing ordinal"); - else - return; - } - this.keyToOrdinalMap.set(vdxfKey, ordinal); - this.keyToOrdinalClass.set(vdxfKey, ordinalClass); - this.updateOrdinalToKeyMap(); - } - isRecognizedOrdinal(ordinal) { - return this.ordinalToKeyMap.has(ordinal); - } - vdxfKeyHasOrdinal(vdxfKey) { - return this.keyToOrdinalMap.has(vdxfKey); - } - hasClassForVdxfKey(vdxfKey) { - return this.keyToOrdinalClass.has(vdxfKey); - } - getOrdinalForVdxfKey(vdxfKey) { - return this.keyToOrdinalMap.get(vdxfKey); - } - getVdxfKeyForOrdinal(ordinal) { - return this.ordinalToKeyMap.get(ordinal); - } - getClassForVdxfKey(vdxfKey) { - return this.keyToOrdinalClass.get(vdxfKey); - } -} -exports.OrdinalVdxfObjectOrdinalMap = new _OrdinalVdxfObjectOrdinalMap(); diff --git a/dist/vdxf/classes/SaltedData.js b/dist/vdxf/classes/SaltedData.js index 7a2d015d..3c08d231 100644 --- a/dist/vdxf/classes/SaltedData.js +++ b/dist/vdxf/classes/SaltedData.js @@ -39,7 +39,7 @@ class SaltedData extends __1.VDXFData { } getByteLength() { let byteLength = 0; - byteLength += 20; //key + byteLength += vdxf_1.HASH160_BYTE_LENGTH; byteLength += varint_1.default.encodingLength(this.version); byteLength += varuint_1.default.encodingLength(this.data.length + this.salt.length); byteLength += this.data.length + this.salt.length; diff --git a/dist/vdxf/classes/attestation/AttestationDetails.d.ts b/dist/vdxf/classes/attestation/AttestationDetails.d.ts deleted file mode 100644 index 259e6559..00000000 --- a/dist/vdxf/classes/attestation/AttestationDetails.d.ts +++ /dev/null @@ -1,123 +0,0 @@ -import { BigNumber } from '../../../utils/types/BigNumber'; -import { MMRDescriptor, MMRDescriptorJson } from '../../../pbaas/MMRDescriptor'; -import { SignatureData, SignatureJsonDataInterface } from '../../../pbaas/SignatureData'; -import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -export interface AttestationPairJson { - mmrdescriptor: MMRDescriptorJson; - signaturedata: SignatureJsonDataInterface; -} -export interface AttestationDetailsJson { - version: number; - flags?: number; - label?: string; - id?: string; - timestamp?: number; - attestations: AttestationPairJson[]; -} -export declare class AttestationPair implements SerializableEntity { - mmrDescriptor: MMRDescriptor; - signatureData: SignatureData; - constructor(data?: { - mmrDescriptor?: MMRDescriptor; - signatureData?: SignatureData; - }); - static fromJson(data: AttestationPairJson): AttestationPair; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): AttestationPairJson; -} -export declare class AttestationDetails implements SerializableEntity { - static VERSION_INVALID: import("bn.js"); - static FIRST_VERSION: import("bn.js"); - static LAST_VERSION: import("bn.js"); - static DEFAULT_VERSION: import("bn.js"); - static FLAG_LABEL: number; - static FLAG_ID: number; - static FLAG_TIMESTAMP: number; - version: BigNumber; - flags: BigNumber; - label?: string; - id?: string; - timestamp?: BigNumber; - attestations: AttestationPair[]; - constructor(data?: { - version?: BigNumber; - flags?: BigNumber; - label?: string; - id?: string; - timestamp?: BigNumber; - attestations?: AttestationPair[]; - }); - static fromJson(data: AttestationDetailsJson): AttestationDetails; - /** - * Create AttestationDetails from a single Verus node response - * @param nodeResponse - The JSON object from Verus node: {"signaturedata": ..., "mmrdescriptor": ...} - * @param options - Optional metadata (label, id, timestamp) - */ - static fromNodeResponse(nodeResponse: { - signaturedata: any; - mmrdescriptor: any; - }, options?: { - label?: string; - id?: string; - timestamp?: number; - }): AttestationDetails; - /** - * Create AttestationDetails from multiple Verus node responses - * @param nodeResponses - Array of JSON objects from Verus node - * @param options - Optional metadata (label, id, timestamp) - */ - static fromNodeResponses(nodeResponses: Array<{ - signaturedata: any; - mmrdescriptor: any; - }>, options?: { - label?: string; - id?: string; - timestamp?: number; - }): AttestationDetails; - hasLabel(): boolean; - hasId(): boolean; - hasTimestamp(): boolean; - setLabel(label: string): void; - setId(id: string): void; - setTimestamp(timestamp: BigNumber): void; - /** - * Calculate flags based on the presence of optional fields - */ - calcFlags(): BigNumber; - /** - * Set the flags based on calculated values from present fields - */ - setFlags(): void; - /** - * Add a new attestation from a Verus node response - * @param nodeResponse - The JSON object from Verus node: {"signaturedata": ..., "mmrdescriptor": ...} - */ - addAttestation(nodeResponse: { - signaturedata: any; - mmrdescriptor: any; - }): void; - /** - * Add multiple attestations from Verus node responses - * @param nodeResponses - Array of JSON objects from Verus node - */ - addAttestations(nodeResponses: Array<{ - signaturedata: any; - mmrdescriptor: any; - }>): void; - /** - * Add an existing AttestationPair to this collection - * @param attestationPair - The AttestationPair to add - */ - addAttestationPair(attestationPair: AttestationPair): void; - /** - * Get the number of attestations in this collection - */ - getAttestationCount(): number; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - isValid(): boolean; - toJson(): AttestationDetailsJson; -} diff --git a/dist/vdxf/classes/attestation/AttestationDetails.js b/dist/vdxf/classes/attestation/AttestationDetails.js deleted file mode 100644 index 12fcf266..00000000 --- a/dist/vdxf/classes/attestation/AttestationDetails.js +++ /dev/null @@ -1,317 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AttestationDetails = exports.AttestationPair = void 0; -const bn_js_1 = require("bn.js"); -const varint_1 = require("../../../utils/varint"); -const varuint_1 = require("../../../utils/varuint"); -const bufferutils_1 = require("../../../utils/bufferutils"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -const MMRDescriptor_1 = require("../../../pbaas/MMRDescriptor"); -const SignatureData_1 = require("../../../pbaas/SignatureData"); -class AttestationPair { - constructor(data) { - if (data) { - this.mmrDescriptor = data.mmrDescriptor || new MMRDescriptor_1.MMRDescriptor(); - this.signatureData = data.signatureData || new SignatureData_1.SignatureData(); - } - else { - this.mmrDescriptor = new MMRDescriptor_1.MMRDescriptor(); - this.signatureData = new SignatureData_1.SignatureData(); - } - } - static fromJson(data) { - return new AttestationPair({ - mmrDescriptor: MMRDescriptor_1.MMRDescriptor.fromJson(data.mmrdescriptor), - signatureData: SignatureData_1.SignatureData.fromJson(data.signaturedata) - }); - } - getByteLength() { - return this.mmrDescriptor.getByteLength() + this.signatureData.getByteLength(); - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeSlice(this.mmrDescriptor.toBuffer()); - writer.writeSlice(this.signatureData.toBuffer()); - return writer.buffer; - } - fromBuffer(buffer, offset) { - const reader = new BufferReader(buffer, offset); - this.mmrDescriptor = new MMRDescriptor_1.MMRDescriptor(); - reader.offset = this.mmrDescriptor.fromBuffer(reader.buffer, reader.offset); - this.signatureData = new SignatureData_1.SignatureData(); - reader.offset = this.signatureData.fromBuffer(reader.buffer, reader.offset); - return reader.offset; - } - toJson() { - return { - mmrdescriptor: this.mmrDescriptor.toJson(), - signaturedata: this.signatureData.toJson() - }; - } -} -exports.AttestationPair = AttestationPair; -class AttestationDetails { - constructor(data) { - if (data) { - this.version = data.version || AttestationDetails.DEFAULT_VERSION; - this.flags = data.flags || new bn_js_1.BN(0); - this.label = data.label; - this.id = data.id; - this.timestamp = data.timestamp; - this.attestations = data.attestations || []; - } - else { - this.version = AttestationDetails.DEFAULT_VERSION; - this.flags = new bn_js_1.BN(0); - this.attestations = []; - } - } - static fromJson(data) { - const newAttestationDetails = new AttestationDetails(); - if (data) { - if (data.version) - newAttestationDetails.version = new bn_js_1.BN(data.version); - if (data.flags !== undefined) - newAttestationDetails.flags = new bn_js_1.BN(data.flags); - if (data.label) - newAttestationDetails.label = data.label; - if (data.id) - newAttestationDetails.id = data.id; - if (data.timestamp) - newAttestationDetails.timestamp = new bn_js_1.BN(data.timestamp); - if (data.attestations) { - newAttestationDetails.attestations = data.attestations.map(attestation => AttestationPair.fromJson(attestation)); - } - } - return newAttestationDetails; - } - /** - * Create AttestationDetails from a single Verus node response - * @param nodeResponse - The JSON object from Verus node: {"signaturedata": ..., "mmrdescriptor": ...} - * @param options - Optional metadata (label, id, timestamp) - */ - static fromNodeResponse(nodeResponse, options) { - const attestationPair = new AttestationPair({ - mmrDescriptor: MMRDescriptor_1.MMRDescriptor.fromJson(nodeResponse.mmrdescriptor), - signatureData: SignatureData_1.SignatureData.fromJson(nodeResponse.signaturedata) - }); - const attestationDetails = new AttestationDetails({ - attestations: [attestationPair] - }); - // Set optional metadata - if (options === null || options === void 0 ? void 0 : options.label) { - attestationDetails.setLabel(options.label); - } - if (options === null || options === void 0 ? void 0 : options.id) { - attestationDetails.setId(options.id); - } - if (options === null || options === void 0 ? void 0 : options.timestamp) { - attestationDetails.setTimestamp(new bn_js_1.BN(options.timestamp)); - } - // Update flags based on set metadata - attestationDetails.setFlags(); - return attestationDetails; - } - /** - * Create AttestationDetails from multiple Verus node responses - * @param nodeResponses - Array of JSON objects from Verus node - * @param options - Optional metadata (label, id, timestamp) - */ - static fromNodeResponses(nodeResponses, options) { - const attestationPairs = nodeResponses.map(response => new AttestationPair({ - mmrDescriptor: MMRDescriptor_1.MMRDescriptor.fromJson(response.mmrdescriptor), - signatureData: SignatureData_1.SignatureData.fromJson(response.signaturedata) - })); - const attestationDetails = new AttestationDetails({ - attestations: attestationPairs - }); - // Set optional metadata - if (options === null || options === void 0 ? void 0 : options.label) { - attestationDetails.setLabel(options.label); - } - if (options === null || options === void 0 ? void 0 : options.id) { - attestationDetails.setId(options.id); - } - if (options === null || options === void 0 ? void 0 : options.timestamp) { - attestationDetails.setTimestamp(new bn_js_1.BN(options.timestamp)); - } - // Update flags based on set metadata - attestationDetails.setFlags(); - return attestationDetails; - } - hasLabel() { - return (this.flags.toNumber() & AttestationDetails.FLAG_LABEL) !== 0; - } - hasId() { - return (this.flags.toNumber() & AttestationDetails.FLAG_ID) !== 0; - } - hasTimestamp() { - return (this.flags.toNumber() & AttestationDetails.FLAG_TIMESTAMP) !== 0; - } - setLabel(label) { - this.label = label; - } - setId(id) { - this.id = id; - } - setTimestamp(timestamp) { - this.timestamp = timestamp; - } - /** - * Calculate flags based on the presence of optional fields - */ - calcFlags() { - let flags = new bn_js_1.BN(0); - if (this.label && this.label.length > 0) { - flags = flags.or(new bn_js_1.BN(AttestationDetails.FLAG_LABEL)); - } - if (this.id && this.id.length > 0) { - flags = flags.or(new bn_js_1.BN(AttestationDetails.FLAG_ID)); - } - if (this.timestamp) { - flags = flags.or(new bn_js_1.BN(AttestationDetails.FLAG_TIMESTAMP)); - } - return flags; - } - /** - * Set the flags based on calculated values from present fields - */ - setFlags() { - this.flags = this.calcFlags(); - } - /** - * Add a new attestation from a Verus node response - * @param nodeResponse - The JSON object from Verus node: {"signaturedata": ..., "mmrdescriptor": ...} - */ - addAttestation(nodeResponse) { - const attestationPair = new AttestationPair({ - mmrDescriptor: MMRDescriptor_1.MMRDescriptor.fromJson(nodeResponse.mmrdescriptor), - signatureData: SignatureData_1.SignatureData.fromJson(nodeResponse.signaturedata) - }); - this.attestations.push(attestationPair); - } - /** - * Add multiple attestations from Verus node responses - * @param nodeResponses - Array of JSON objects from Verus node - */ - addAttestations(nodeResponses) { - const attestationPairs = nodeResponses.map(response => new AttestationPair({ - mmrDescriptor: MMRDescriptor_1.MMRDescriptor.fromJson(response.mmrdescriptor), - signatureData: SignatureData_1.SignatureData.fromJson(response.signaturedata) - })); - this.attestations.push(...attestationPairs); - } - /** - * Add an existing AttestationPair to this collection - * @param attestationPair - The AttestationPair to add - */ - addAttestationPair(attestationPair) { - this.attestations.push(attestationPair); - } - /** - * Get the number of attestations in this collection - */ - getAttestationCount() { - return this.attestations.length; - } - getByteLength() { - this.setFlags(); - let length = 0; - length += varint_1.default.encodingLength(this.version); - length += varint_1.default.encodingLength(this.flags); - if (this.hasLabel() && this.label) { - const labelBuffer = Buffer.from(this.label, 'utf8'); - length += varuint_1.default.encodingLength(labelBuffer.length); - length += labelBuffer.length; - } - if (this.hasId() && this.id) { - const idBuffer = Buffer.from(this.id, 'utf8'); - length += varuint_1.default.encodingLength(idBuffer.length); - length += idBuffer.length; - } - if (this.hasTimestamp() && this.timestamp) { - length += varint_1.default.encodingLength(this.timestamp); - } - length += varuint_1.default.encodingLength(this.attestations.length); - this.attestations.forEach((attestation) => { - length += attestation.getByteLength(); - }); - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.version); - writer.writeVarInt(this.flags); - if (this.hasLabel() && this.label) { - const labelBuffer = Buffer.from(this.label, 'utf8'); - writer.writeVarSlice(labelBuffer); - } - if (this.hasId() && this.id) { - const idBuffer = Buffer.from(this.id, 'utf8'); - writer.writeVarSlice(idBuffer); - } - if (this.hasTimestamp() && this.timestamp) { - writer.writeVarInt(this.timestamp); - } - writer.writeCompactSize(this.attestations.length); - this.attestations.forEach((attestation) => { - writer.writeSlice(attestation.toBuffer()); - }); - return writer.buffer; - } - fromBuffer(buffer, offset) { - const reader = new BufferReader(buffer, offset); - this.version = reader.readVarInt(); - this.flags = reader.readVarInt(); - if (this.hasLabel()) { - this.label = reader.readVarSlice().toString('utf8'); - } - if (this.hasId()) { - this.id = reader.readVarSlice().toString('utf8'); - } - if (this.hasTimestamp()) { - this.timestamp = reader.readVarInt(); - } - const attestationsLength = reader.readCompactSize(); - this.attestations = []; - for (let i = 0; i < attestationsLength; i++) { - const attestation = new AttestationPair(); - reader.offset = attestation.fromBuffer(reader.buffer, reader.offset); - this.attestations.push(attestation); - } - return reader.offset; - } - isValid() { - return this.version.gte(AttestationDetails.FIRST_VERSION) && - this.version.lte(AttestationDetails.LAST_VERSION) && - this.attestations.length > 0; - } - toJson() { - const retval = { - version: this.version.toNumber(), - attestations: this.attestations.map((attestation) => attestation.toJson()) - }; - if (this.flags.gt(new bn_js_1.BN(0))) { - retval.flags = this.flags.toNumber(); - } - if (this.hasLabel() && this.label) { - retval.label = this.label; - } - if (this.hasId() && this.id) { - retval.id = this.id; - } - if (this.hasTimestamp() && this.timestamp) { - retval.timestamp = this.timestamp.toNumber(); - } - return retval; - } -} -exports.AttestationDetails = AttestationDetails; -AttestationDetails.VERSION_INVALID = new bn_js_1.BN(0); -AttestationDetails.FIRST_VERSION = new bn_js_1.BN(1); -AttestationDetails.LAST_VERSION = new bn_js_1.BN(1); -AttestationDetails.DEFAULT_VERSION = new bn_js_1.BN(1); -// Flags -AttestationDetails.FLAG_LABEL = 1; -AttestationDetails.FLAG_ID = 2; -AttestationDetails.FLAG_TIMESTAMP = 4; diff --git a/dist/vdxf/classes/datapacket/DataPacketResponse.d.ts b/dist/vdxf/classes/datapacket/DataPacketResponse.d.ts new file mode 100644 index 00000000..ab3cb927 --- /dev/null +++ b/dist/vdxf/classes/datapacket/DataPacketResponse.d.ts @@ -0,0 +1,68 @@ +/** + * DataPacketResponse - Class for providing structured responses to various request types + * + * This class serves as a universal response mechanism that can be used to reply to multiple + * types of requests. It packages response data within a DataDescriptor along with metadata + * for request tracking and timestamping. + * + * USAGE AS RESPONSE TO DIFFERENT REQUEST TYPES: + * + * 1. AppEncryptionRequestDetails Response: + * - The DataDescriptor 'data' field contains the encrypted derived seed + * - The requestID references the original AppEncryptionRequestDetails.requestID + * - Enables secure delivery of application-specific encrypted keys + * + * 2. UserDataRequestDetails Response: + * - The DataDescriptor 'data' field contains requested user data/attestations + * - The requestID references the original UserDataRequestDetails.requestID + * - Allows selective disclosure of personal information + * + * 3. UserSpecificDataPacketDetails Response: + * - The DataDescriptor 'data' field contains the response data or signed content + * - The requestID references the original UserSpecificDataPacketDetails.requestID + * - Supports bidirectional data exchange with signatures and statements + * + * REQUEST-RESPONSE CORRELATION: + * Each of the above request types includes its own requestID field. This response object's + * requestID field can be used to match responses back to their originating requests, enabling + * proper request-response correlation in asynchronous communication flows. + * + * GENERAL DATA REPLIES: + * This response format can also be used for other general data replies where: + * - Structured data needs to be transmitted via DataDescriptor + * - Request tracking through requestID is desired + * - Timestamp metadata (createdAt) is needed for the response + * - Response validation and integrity checking via SHA-256 is required + */ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { DataDescriptor, DataDescriptorJson } from '../../../pbaas'; +export interface DataResponseInterface { + flags?: BigNumber; + requestID?: string; + data: DataDescriptor; +} +export interface DataResponseJson { + flags?: number; + requestid?: string; + data: DataDescriptorJson; +} +export declare class DataPacketResponse implements SerializableEntity { + flags?: BigNumber; + requestID?: string; + data: DataDescriptor; + static RESPONSE_CONTAINS_REQUEST_ID: import("bn.js"); + constructor(data?: { + flags?: BigNumber; + requestID?: string; + data: DataDescriptor; + }); + containsRequestID(): boolean; + toggleContainsRequestID(): void; + toSha256(): Buffer; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): DataResponseJson; + static fromJson(json: DataResponseJson): DataPacketResponse; +} diff --git a/dist/vdxf/classes/datapacket/DataPacketResponse.js b/dist/vdxf/classes/datapacket/DataPacketResponse.js new file mode 100644 index 00000000..a6beb887 --- /dev/null +++ b/dist/vdxf/classes/datapacket/DataPacketResponse.js @@ -0,0 +1,112 @@ +"use strict"; +/** + * DataPacketResponse - Class for providing structured responses to various request types + * + * This class serves as a universal response mechanism that can be used to reply to multiple + * types of requests. It packages response data within a DataDescriptor along with metadata + * for request tracking and timestamping. + * + * USAGE AS RESPONSE TO DIFFERENT REQUEST TYPES: + * + * 1. AppEncryptionRequestDetails Response: + * - The DataDescriptor 'data' field contains the encrypted derived seed + * - The requestID references the original AppEncryptionRequestDetails.requestID + * - Enables secure delivery of application-specific encrypted keys + * + * 2. UserDataRequestDetails Response: + * - The DataDescriptor 'data' field contains requested user data/attestations + * - The requestID references the original UserDataRequestDetails.requestID + * - Allows selective disclosure of personal information + * + * 3. UserSpecificDataPacketDetails Response: + * - The DataDescriptor 'data' field contains the response data or signed content + * - The requestID references the original UserSpecificDataPacketDetails.requestID + * - Supports bidirectional data exchange with signatures and statements + * + * REQUEST-RESPONSE CORRELATION: + * Each of the above request types includes its own requestID field. This response object's + * requestID field can be used to match responses back to their originating requests, enabling + * proper request-response correlation in asynchronous communication flows. + * + * GENERAL DATA REPLIES: + * This response format can also be used for other general data replies where: + * - Structured data needs to be transmitted via DataDescriptor + * - Request tracking through requestID is desired + * - Timestamp metadata (createdAt) is needed for the response + * - Response validation and integrity checking via SHA-256 is required + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DataPacketResponse = void 0; +const bn_js_1 = require("bn.js"); +const varint_1 = require("../../../utils/varint"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const address_1 = require("../../../utils/address"); +const vdxf_1 = require("../../../constants/vdxf"); +const pbaas_1 = require("../../../pbaas"); +const createHash = require("create-hash"); +class DataPacketResponse { + constructor(data) { + this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0", 10); + if (data === null || data === void 0 ? void 0 : data.requestID) { + if (!this.containsRequestID()) + this.toggleContainsRequestID(); + this.requestID = data.requestID; + } + this.data = data === null || data === void 0 ? void 0 : data.data; + } + containsRequestID() { + return !!(this.flags.and(DataPacketResponse.RESPONSE_CONTAINS_REQUEST_ID).toNumber()); + } + toggleContainsRequestID() { + this.flags = this.flags.xor(DataPacketResponse.RESPONSE_CONTAINS_REQUEST_ID); + } + toSha256() { + return createHash("sha256").update(this.toBuffer()).digest(); + } + getByteLength() { + let length = 0; + length += varint_1.default.encodingLength(this.flags); + if (this.containsRequestID()) { + length += vdxf_1.HASH160_BYTE_LENGTH; + } + length += this.data.getByteLength(); + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeVarInt(this.flags); + if (this.containsRequestID()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + } + writer.writeSlice(this.data.toBuffer()); + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.flags = reader.readVarInt(); + if (this.containsRequestID()) { + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + } + this.data = new pbaas_1.DataDescriptor(); + this.data.fromBuffer(reader.buffer, reader.offset); + reader.offset += this.data.getByteLength(); + return reader.offset; + } + toJson() { + return { + flags: this.flags.toNumber(), + requestid: this.containsRequestID() ? this.requestID : undefined, + data: this.data.toJson() + }; + } + static fromJson(json) { + return new DataPacketResponse({ + flags: new bn_js_1.BN(json.flags, 10), + requestID: json.requestid, + data: pbaas_1.DataDescriptor.fromJson(json.data) + }); + } +} +exports.DataPacketResponse = DataPacketResponse; +DataPacketResponse.RESPONSE_CONTAINS_REQUEST_ID = new bn_js_1.BN(1, 10); diff --git a/dist/vdxf/classes/identity/IdentityUpdateEnvelope.d.ts b/dist/vdxf/classes/identity/IdentityUpdateEnvelope.d.ts deleted file mode 100644 index 51ea6aa6..00000000 --- a/dist/vdxf/classes/identity/IdentityUpdateEnvelope.d.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { VDXFObject, VerusIDSignature } from "../.."; -import { BigNumber } from "../../../utils/types/BigNumber"; -import { IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson } from "./IdentityUpdateRequestDetails"; -import { IdentityID } from "../../../pbaas"; -import { IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson } from "./IdentityUpdateResponseDetails"; -export declare const IDENTITY_UPDATE_VERSION_CURRENT: import("bn.js"); -export declare const IDENTITY_UPDATE_VERSION_FIRSTVALID: import("bn.js"); -export declare const IDENTITY_UPDATE_VERSION_LASTVALID: import("bn.js"); -export declare const IDENTITY_UPDATE_VERSION_SIGNED: import("bn.js"); -export declare const IDENTITY_UPDATE_VERSION_MASK: import("bn.js"); -export type IdentityUpdateDetails = IdentityUpdateRequestDetails | IdentityUpdateResponseDetails; -export type IdentityUpdateDetailsJson = IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson; -export interface IdentityUpdateEnvelopeInterface { - details: IdentityUpdateDetails; - systemid?: IdentityID; - signingid?: IdentityID; - signature?: string; - version?: BigNumber; -} -export interface IdentityUpdateEnvelopeJson { - details: IdentityUpdateDetailsJson; - systemid?: string; - signingid?: string; - signature?: string; - version?: string; -} -export declare class IdentityUpdateEnvelope extends VDXFObject { - systemid: IdentityID; - signingid: IdentityID; - signature?: VerusIDSignature; - details: IdentityUpdateDetails; - constructor(vdxfkey: string, request?: IdentityUpdateEnvelopeInterface); - private createEmptyDetails; - getVersionNoFlags(): BigNumber; - isValidVersion(): boolean; - isSigned(): boolean; - setSigned(): void; - getDetailsHash(signedBlockheight: number, signatureVersion?: number): Buffer; - protected _dataByteLength(signer?: IdentityID): number; - protected _toDataBuffer(signer?: IdentityID): Buffer; - dataByteLength(): number; - toDataBuffer(): Buffer; - protected _fromDataBuffer(buffer: Buffer, offset?: number): number; - fromDataBuffer(buffer: Buffer, offset?: number): number; - toWalletDeeplinkUri(): string; - static fromWalletDeeplinkUri(vdxfkey: string, uri: string): IdentityUpdateEnvelope; - toQrString(): string; - static fromQrString(vdxfkey: string, qrstring: string): IdentityUpdateEnvelope; - toJson(): IdentityUpdateEnvelopeJson; - protected static internalFromJson(json: IdentityUpdateEnvelopeJson, ctor: new (...args: any[]) => T, detailsFromJson: (json: IdentityUpdateDetailsJson) => IdentityUpdateDetails): T; -} -export declare class IdentityUpdateRequest extends IdentityUpdateEnvelope { - constructor(request?: IdentityUpdateEnvelopeInterface); - static fromWalletDeeplinkUri(uri: string): IdentityUpdateRequest; - static fromQrString(qrstring: string): IdentityUpdateRequest; - static fromJson(json: IdentityUpdateEnvelopeJson): IdentityUpdateRequest; -} -export declare class IdentityUpdateResponse extends IdentityUpdateEnvelope { - constructor(response?: IdentityUpdateEnvelopeInterface); - static fromWalletDeeplinkUri(uri: string): IdentityUpdateEnvelope; - static fromQrString(qrstring: string): IdentityUpdateResponse; - static fromJson(json: IdentityUpdateEnvelopeJson): IdentityUpdateResponse; -} diff --git a/dist/vdxf/classes/identity/IdentityUpdateEnvelope.js b/dist/vdxf/classes/identity/IdentityUpdateEnvelope.js deleted file mode 100644 index 9f03622d..00000000 --- a/dist/vdxf/classes/identity/IdentityUpdateEnvelope.js +++ /dev/null @@ -1,210 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.IdentityUpdateResponse = exports.IdentityUpdateRequest = exports.IdentityUpdateEnvelope = exports.IDENTITY_UPDATE_VERSION_MASK = exports.IDENTITY_UPDATE_VERSION_SIGNED = exports.IDENTITY_UPDATE_VERSION_LASTVALID = exports.IDENTITY_UPDATE_VERSION_FIRSTVALID = exports.IDENTITY_UPDATE_VERSION_CURRENT = void 0; -const __1 = require("../.."); -const keys_1 = require("../../keys"); -const bufferutils_1 = require("../../../utils/bufferutils"); -const vdxf_1 = require("../../../constants/vdxf"); -const createHash = require("create-hash"); -const base64url_1 = require("base64url"); -const bn_js_1 = require("bn.js"); -const IdentityUpdateRequestDetails_1 = require("./IdentityUpdateRequestDetails"); -const pbaas_1 = require("../../../pbaas"); -const IdentityUpdateResponseDetails_1 = require("./IdentityUpdateResponseDetails"); -exports.IDENTITY_UPDATE_VERSION_CURRENT = new bn_js_1.BN(1, 10); -exports.IDENTITY_UPDATE_VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); -exports.IDENTITY_UPDATE_VERSION_LASTVALID = new bn_js_1.BN(1, 10); -exports.IDENTITY_UPDATE_VERSION_SIGNED = new bn_js_1.BN('80000000', 16); -exports.IDENTITY_UPDATE_VERSION_MASK = exports.IDENTITY_UPDATE_VERSION_SIGNED; -class IdentityUpdateEnvelope extends __1.VDXFObject { - constructor(vdxfkey, request = { - details: undefined - }) { - super(vdxfkey); - if (request.version) - this.version = request.version; - else - this.version = exports.IDENTITY_UPDATE_VERSION_CURRENT; - if (!request.details) { - this.details = this.createEmptyDetails(); - } - this.systemid = request.systemid; - this.signingid = request.signingid; - if (request.signature) { - this.signature = new __1.VerusIDSignature({ signature: request.signature }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false); - this.setSigned(); - } - this.details = request.details; - } - createEmptyDetails() { - if (this.vdxfkey === keys_1.IDENTITY_UPDATE_REQUEST_VDXF_KEY.vdxfid) { - return new IdentityUpdateRequestDetails_1.IdentityUpdateRequestDetails(); - } - else if (this.vdxfkey === keys_1.IDENTITY_UPDATE_RESPONSE_VDXF_KEY.vdxfid) { - return new IdentityUpdateResponseDetails_1.IdentityUpdateResponseDetails(); - } - else - throw new Error("Unrecognized vdxf key for identity update"); - } - getVersionNoFlags() { - return this.version.and(exports.IDENTITY_UPDATE_VERSION_MASK.notn(exports.IDENTITY_UPDATE_VERSION_MASK.bitLength())); - } - isValidVersion() { - return this.getVersionNoFlags().gte(exports.IDENTITY_UPDATE_VERSION_FIRSTVALID) && this.getVersionNoFlags().lte(exports.IDENTITY_UPDATE_VERSION_LASTVALID); - } - isSigned() { - return !!(this.version.and(exports.IDENTITY_UPDATE_VERSION_SIGNED).toNumber()); - } - setSigned() { - this.version = this.version.or(exports.IDENTITY_UPDATE_VERSION_SIGNED); - } - getDetailsHash(signedBlockheight, signatureVersion = 2) { - if (this.isSigned()) { - var heightBufferWriter = new bufferutils_1.default.BufferWriter(Buffer.allocUnsafe(4)); - heightBufferWriter.writeUInt32(signedBlockheight); - if (signatureVersion === 1) { - return createHash("sha256") - .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) - .update(this.systemid.toBuffer()) - .update(heightBufferWriter.buffer) - .update(this.signingid.toBuffer()) - .update(this.details.toSha256()) - .digest(); - } - else { - return createHash("sha256") - .update(this.systemid.toBuffer()) - .update(heightBufferWriter.buffer) - .update(this.signingid.toBuffer()) - .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) - .update(this.details.toSha256()) - .digest(); - } - } - else - return this.details.toSha256(); - } - _dataByteLength(signer = this.signingid) { - if (this.isSigned()) { - let length = 0; - const _signature = this.signature - ? this.signature - : new __1.VerusIDSignature({ signature: "" }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false); - length += this.systemid.getByteLength(); - length += signer.getByteLength(); - length += _signature.byteLength(); - length += this.details.getByteLength(); - return length; - } - else - return this.details.getByteLength(); - } - _toDataBuffer(signer = this.signingid) { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.dataByteLength())); - if (this.isSigned()) { - const _signature = this.signature - ? this.signature - : new __1.VerusIDSignature({ signature: "" }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false); - writer.writeSlice(this.systemid.toBuffer()); - writer.writeSlice(signer.toBuffer()); - writer.writeSlice(_signature.toBuffer()); - } - writer.writeSlice(this.details.toBuffer()); - return writer.buffer; - } - dataByteLength() { - return this._dataByteLength(); - } - toDataBuffer() { - return this._toDataBuffer(); - } - _fromDataBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - const reqLength = reader.readCompactSize(); - if (reqLength == 0) { - throw new Error("Cannot create request from empty buffer"); - } - else { - if (this.isSigned()) { - this.systemid = new pbaas_1.IdentityID(); - reader.offset = this.systemid.fromBuffer(reader.buffer, reader.offset); - this.signingid = new pbaas_1.IdentityID(); - reader.offset = this.signingid.fromBuffer(reader.buffer, reader.offset); - const _sig = new __1.VerusIDSignature(undefined, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false); - reader.offset = _sig.fromBuffer(reader.buffer, reader.offset, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY.vdxfid); - this.signature = _sig; - } - const _details = this.createEmptyDetails(); - reader.offset = _details.fromBuffer(reader.buffer, reader.offset); - this.details = _details; - } - return reader.offset; - } - fromDataBuffer(buffer, offset) { - return this._fromDataBuffer(buffer, offset); - } - toWalletDeeplinkUri() { - return `${__1.WALLET_VDXF_KEY.vdxfid.toLowerCase()}://x-callback-url/${keys_1.IDENTITY_UPDATE_REQUEST_VDXF_KEY.vdxfid}/${this.toString(false)}`; - } - static fromWalletDeeplinkUri(vdxfkey, uri) { - const split = uri.split(`${keys_1.IDENTITY_UPDATE_REQUEST_VDXF_KEY.vdxfid}/`); - const inv = new IdentityUpdateEnvelope(vdxfkey); - inv.fromBuffer(base64url_1.default.toBuffer(split[1]), 0, keys_1.IDENTITY_UPDATE_REQUEST_VDXF_KEY.vdxfid); - return inv; - } - toQrString() { - return this.toString(true); - } - static fromQrString(vdxfkey, qrstring) { - const inv = new IdentityUpdateEnvelope(vdxfkey); - inv.fromBuffer(base64url_1.default.toBuffer(qrstring), 0); - return inv; - } - toJson() { - return { - systemid: this.systemid ? this.systemid.toAddress() : undefined, - signingid: this.signingid ? this.signingid.toAddress() : undefined, - signature: this.signature ? this.signature.signature : undefined, - details: this.details ? this.details.toJson() : undefined - }; - } - static internalFromJson(json, ctor, detailsFromJson) { - return new ctor({ - systemid: json.systemid ? pbaas_1.IdentityID.fromAddress(json.systemid) : undefined, - signingid: json.signingid ? pbaas_1.IdentityID.fromAddress(json.signingid) : undefined, - signature: json.signature, - details: json.details ? detailsFromJson(json.details) : undefined - }); - } -} -exports.IdentityUpdateEnvelope = IdentityUpdateEnvelope; -class IdentityUpdateRequest extends IdentityUpdateEnvelope { - constructor(request) { - super(keys_1.IDENTITY_UPDATE_REQUEST_VDXF_KEY.vdxfid, request); - } - static fromWalletDeeplinkUri(uri) { - return IdentityUpdateEnvelope.fromWalletDeeplinkUri(keys_1.IDENTITY_UPDATE_REQUEST_VDXF_KEY.vdxfid, uri); - } - static fromQrString(qrstring) { - return IdentityUpdateEnvelope.fromQrString(keys_1.IDENTITY_UPDATE_REQUEST_VDXF_KEY.vdxfid, qrstring); - } - static fromJson(json) { - return IdentityUpdateEnvelope.internalFromJson(json, IdentityUpdateRequest, IdentityUpdateRequestDetails_1.IdentityUpdateRequestDetails.fromJson); - } -} -exports.IdentityUpdateRequest = IdentityUpdateRequest; -class IdentityUpdateResponse extends IdentityUpdateEnvelope { - constructor(response) { - super(keys_1.IDENTITY_UPDATE_RESPONSE_VDXF_KEY.vdxfid, response); - } - static fromWalletDeeplinkUri(uri) { - return IdentityUpdateEnvelope.fromWalletDeeplinkUri(keys_1.IDENTITY_UPDATE_RESPONSE_VDXF_KEY.vdxfid, uri); - } - static fromQrString(qrstring) { - return IdentityUpdateEnvelope.fromQrString(keys_1.IDENTITY_UPDATE_RESPONSE_VDXF_KEY.vdxfid, qrstring); - } - static fromJson(json) { - return IdentityUpdateEnvelope.internalFromJson(json, IdentityUpdateResponse, IdentityUpdateResponseDetails_1.IdentityUpdateResponseDetails.fromJson); - } -} -exports.IdentityUpdateResponse = IdentityUpdateResponse; diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestOrdinalVdxfObject.d.ts b/dist/vdxf/classes/identity/IdentityUpdateRequestOrdinalVdxfObject.d.ts deleted file mode 100644 index ba9fd198..00000000 --- a/dist/vdxf/classes/identity/IdentityUpdateRequestOrdinalVdxfObject.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate, SerializableEntityOrdinalVdxfObject } from "../OrdinalVdxfObject"; -import { IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson } from "./IdentityUpdateRequestDetails"; -export declare class IdentityUpdateRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: IdentityUpdateRequestDetails; - constructor(request?: OrdinalVdxfObjectInterfaceTemplate); - static fromJson(details: OrdinalVdxfObjectJsonTemplate): IdentityUpdateRequestOrdinalVdxfObject; -} diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestOrdinalVdxfObject.js b/dist/vdxf/classes/identity/IdentityUpdateRequestOrdinalVdxfObject.js deleted file mode 100644 index 6ce991ef..00000000 --- a/dist/vdxf/classes/identity/IdentityUpdateRequestOrdinalVdxfObject.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.IdentityUpdateRequestOrdinalVdxfObject = void 0; -const ordinals_1 = require("../../../constants/ordinals/ordinals"); -const OrdinalVdxfObject_1 = require("../OrdinalVdxfObject"); -const IdentityUpdateRequestDetails_1 = require("./IdentityUpdateRequestDetails"); -class IdentityUpdateRequestOrdinalVdxfObject extends OrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { - constructor(request = { - data: new IdentityUpdateRequestDetails_1.IdentityUpdateRequestDetails() - }) { - super({ - type: ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, - data: request.data - }, IdentityUpdateRequestDetails_1.IdentityUpdateRequestDetails); - } - static fromJson(details) { - return new IdentityUpdateRequestOrdinalVdxfObject({ - data: IdentityUpdateRequestDetails_1.IdentityUpdateRequestDetails.fromJson(details.data) - }); - } -} -exports.IdentityUpdateRequestOrdinalVdxfObject = IdentityUpdateRequestOrdinalVdxfObject; diff --git a/dist/vdxf/classes/identity/IdentityUpdateResponseOrdinalVdxfObject.d.ts b/dist/vdxf/classes/identity/IdentityUpdateResponseOrdinalVdxfObject.d.ts deleted file mode 100644 index bdedfdf5..00000000 --- a/dist/vdxf/classes/identity/IdentityUpdateResponseOrdinalVdxfObject.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate, SerializableEntityOrdinalVdxfObject } from "../OrdinalVdxfObject"; -import { IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson } from "./IdentityUpdateResponseDetails"; -export declare class IdentityUpdateResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: IdentityUpdateResponseDetails; - constructor(response?: OrdinalVdxfObjectInterfaceTemplate); - static fromJson(details: OrdinalVdxfObjectJsonTemplate): IdentityUpdateResponseOrdinalVdxfObject; -} diff --git a/dist/vdxf/classes/identity/IdentityUpdateResponseOrdinalVdxfObject.js b/dist/vdxf/classes/identity/IdentityUpdateResponseOrdinalVdxfObject.js deleted file mode 100644 index 2c450039..00000000 --- a/dist/vdxf/classes/identity/IdentityUpdateResponseOrdinalVdxfObject.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.IdentityUpdateResponseOrdinalVdxfObject = void 0; -const ordinals_1 = require("../../../constants/ordinals/ordinals"); -const OrdinalVdxfObject_1 = require("../OrdinalVdxfObject"); -const IdentityUpdateResponseDetails_1 = require("./IdentityUpdateResponseDetails"); -class IdentityUpdateResponseOrdinalVdxfObject extends OrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { - constructor(response = { - data: new IdentityUpdateResponseDetails_1.IdentityUpdateResponseDetails() - }) { - super({ - type: ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, - data: response.data - }, IdentityUpdateResponseDetails_1.IdentityUpdateResponseDetails); - } - static fromJson(details) { - return new IdentityUpdateResponseOrdinalVdxfObject({ - data: IdentityUpdateResponseDetails_1.IdentityUpdateResponseDetails.fromJson(details.data) - }); - } -} -exports.IdentityUpdateResponseOrdinalVdxfObject = IdentityUpdateResponseOrdinalVdxfObject; diff --git a/dist/vdxf/classes/index.d.ts b/dist/vdxf/classes/index.d.ts index 2327b834..b8ab07d6 100644 --- a/dist/vdxf/classes/index.d.ts +++ b/dist/vdxf/classes/index.d.ts @@ -31,11 +31,11 @@ export { RedirectUri, Subject, ProvisioningInfo, RequestedPermission, Audience, export { ProvisioningTxid } from './provisioning/ProvisioningResult'; export { Context } from './Context'; export { DataCategory } from './PersonalProfile'; -export * from './requestobjects/RequestUserData'; +export * from './requestobjects/UserDataRequestDetails'; export * from './login/LoginRequestDetails'; export * from './login/LoginResponseDetails'; export * from './requestobjects/ProvisionIdentityDetails'; export * from './requestobjects/AppEncryptionRequestDetails'; -export * from './requestobjects/PersonalUserDataDetails'; +export * from './requestobjects/UserSpecificDataPacketDetails'; export * from './CompactIdAddressObject'; export { VerifiableSignatureData, VerifiableSignatureDataJson } from './VerifiableSignatureData'; diff --git a/dist/vdxf/classes/index.js b/dist/vdxf/classes/index.js index f5df5cf5..61d85fb3 100644 --- a/dist/vdxf/classes/index.js +++ b/dist/vdxf/classes/index.js @@ -63,12 +63,12 @@ var Context_1 = require("./Context"); Object.defineProperty(exports, "Context", { enumerable: true, get: function () { return Context_1.Context; } }); var PersonalProfile_1 = require("./PersonalProfile"); Object.defineProperty(exports, "DataCategory", { enumerable: true, get: function () { return PersonalProfile_1.DataCategory; } }); -__exportStar(require("./requestobjects/RequestUserData"), exports); +__exportStar(require("./requestobjects/UserDataRequestDetails"), exports); __exportStar(require("./login/LoginRequestDetails"), exports); __exportStar(require("./login/LoginResponseDetails"), exports); __exportStar(require("./requestobjects/ProvisionIdentityDetails"), exports); __exportStar(require("./requestobjects/AppEncryptionRequestDetails"), exports); -__exportStar(require("./requestobjects/PersonalUserDataDetails"), exports); +__exportStar(require("./requestobjects/UserSpecificDataPacketDetails"), exports); __exportStar(require("./CompactIdAddressObject"), exports); var VerifiableSignatureData_1 = require("./VerifiableSignatureData"); Object.defineProperty(exports, "VerifiableSignatureData", { enumerable: true, get: function () { return VerifiableSignatureData_1.VerifiableSignatureData; } }); diff --git a/dist/vdxf/classes/login/LoginRequestDetails.js b/dist/vdxf/classes/login/LoginRequestDetails.js index 0873b6a9..9173a6e4 100644 --- a/dist/vdxf/classes/login/LoginRequestDetails.js +++ b/dist/vdxf/classes/login/LoginRequestDetails.js @@ -56,7 +56,7 @@ class LoginRequestDetails { getByteLength() { let length = 0; length += varuint_1.default.encodingLength(this.flags.toNumber()); - length += 20; // requestID hash length + length += vdxf_1.HASH160_BYTE_LENGTH; if (this.hasRecipentConstraints()) { length += varuint_1.default.encodingLength(this.recipientConstraints.length); for (let i = 0; i < this.recipientConstraints.length; i++) { diff --git a/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.d.ts similarity index 75% rename from dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.d.ts rename to dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.d.ts index 7295e316..5fa4503b 100644 --- a/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.d.ts +++ b/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.d.ts @@ -1,9 +1,9 @@ import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { AppEncryptionRequestDetails, AppEncryptionRequestDetailsJson } from "../requestobjects/AppEncryptionRequestDetails"; +import { AppEncryptionRequestDetails, AppEncryptionRequestJson } from "../requestobjects/AppEncryptionRequestDetails"; export declare class AppEncryptionRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { data: AppEncryptionRequestDetails; constructor(request?: OrdinalVdxfObjectInterfaceTemplate); - static fromJson(details: OrdinalVdxfObjectJsonTemplate): AppEncryptionRequestOrdinalVdxfObject; + static fromJson(details: OrdinalVdxfObjectJsonTemplate): AppEncryptionRequestOrdinalVdxfObject; } diff --git a/dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.js similarity index 100% rename from dist/vdxf/classes/ordinals/AppEncryptionRequestDetailsOrdinalVdxfObject.js rename to dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.js diff --git a/dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.d.ts new file mode 100644 index 00000000..c6af156c --- /dev/null +++ b/dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { DataPacketResponse, DataResponseJson } from "../datapacket/DataPacketResponse"; +export declare class DataPacketResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: DataPacketResponse; + constructor(request?: OrdinalVdxfObjectInterfaceTemplate); + static fromJson(details: OrdinalVdxfObjectJsonTemplate): DataPacketResponseOrdinalVdxfObject; +} diff --git a/dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.js new file mode 100644 index 00000000..2c114197 --- /dev/null +++ b/dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DataPacketResponseOrdinalVdxfObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); +const DataPacketResponse_1 = require("../datapacket/DataPacketResponse"); +class DataPacketResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { + constructor(request = { + data: new DataPacketResponse_1.DataPacketResponse() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_DATA_RESPONSE, + data: request.data + }, DataPacketResponse_1.DataPacketResponse); + } + static fromJson(details) { + return new DataPacketResponseOrdinalVdxfObject({ + data: DataPacketResponse_1.DataPacketResponse.fromJson(details.data) + }); + } +} +exports.DataPacketResponseOrdinalVdxfObject = DataPacketResponseOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/GeneralTypeOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/GeneralTypeOrdinalVdxfObject.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/dist/vdxf/classes/ordinals/GeneralTypeOrdinalVdxfObject.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/dist/vdxf/classes/ordinals/GeneralTypeOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/GeneralTypeOrdinalVdxfObject.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/vdxf/classes/ordinals/GeneralTypeOrdinalVdxfObject.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.d.ts new file mode 100644 index 00000000..59b12237 --- /dev/null +++ b/dist/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { UserDataRequestDetails, UserDataRequestJson } from "../requestobjects/UserDataRequestDetails"; +export declare class UserDataRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: UserDataRequestDetails; + constructor(request?: OrdinalVdxfObjectInterfaceTemplate); + static fromJson(details: OrdinalVdxfObjectJsonTemplate): UserDataRequestOrdinalVdxfObject; +} diff --git a/dist/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.js new file mode 100644 index 00000000..6f6223ee --- /dev/null +++ b/dist/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UserDataRequestOrdinalVdxfObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); +const UserDataRequestDetails_1 = require("../requestobjects/UserDataRequestDetails"); +class UserDataRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { + constructor(request = { + data: new UserDataRequestDetails_1.UserDataRequestDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_USER_DATA_REQUEST, + data: request.data + }, UserDataRequestDetails_1.UserDataRequestDetails); + } + static fromJson(details) { + return new UserDataRequestOrdinalVdxfObject({ + data: UserDataRequestDetails_1.UserDataRequestDetails.fromJson(details.data) + }); + } +} +exports.UserDataRequestOrdinalVdxfObject = UserDataRequestOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.d.ts new file mode 100644 index 00000000..0bd37006 --- /dev/null +++ b/dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { UserSpecificDataPacketDetails, UserSpecificDataPacketDetailsJson } from "../requestobjects/UserSpecificDataPacketDetails"; +export declare class UserSpecificDataPacketDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: UserSpecificDataPacketDetails; + constructor(request?: OrdinalVdxfObjectInterfaceTemplate); + static fromJson(details: OrdinalVdxfObjectJsonTemplate): UserSpecificDataPacketDetailsOrdinalVdxfObject; +} diff --git a/dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.js new file mode 100644 index 00000000..d1f52306 --- /dev/null +++ b/dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UserSpecificDataPacketDetailsOrdinalVdxfObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); +const UserSpecificDataPacketDetails_1 = require("../requestobjects/UserSpecificDataPacketDetails"); +class UserSpecificDataPacketDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { + constructor(request = { + data: new UserSpecificDataPacketDetails_1.UserSpecificDataPacketDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET, + data: request.data + }, UserSpecificDataPacketDetails_1.UserSpecificDataPacketDetails); + } + static fromJson(details) { + return new UserSpecificDataPacketDetailsOrdinalVdxfObject({ + data: UserSpecificDataPacketDetails_1.UserSpecificDataPacketDetails.fromJson(details.data) + }); + } +} +exports.UserSpecificDataPacketDetailsOrdinalVdxfObject = UserSpecificDataPacketDetailsOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/index.d.ts b/dist/vdxf/classes/ordinals/index.d.ts index cfdac426..17832d37 100644 --- a/dist/vdxf/classes/ordinals/index.d.ts +++ b/dist/vdxf/classes/ordinals/index.d.ts @@ -9,3 +9,6 @@ export * from './LoginRequestDetailsOrdinalVdxfObject'; export * from './LoginResponseDetailsOrdinalVdxfObject'; export * from './AppEncryptionRequestOrdinalVdxfObject'; export * from './ProvisionIdentityDetailsOrdinalVdxfObject'; +export * from './DataPacketResponseOrdinalVdxfObject'; +export * from './UserDataRequestOrdinalVdxfObject'; +export * from './UserSpecificDataPacketDetailsOrdinalVdxfObject'; diff --git a/dist/vdxf/classes/ordinals/index.js b/dist/vdxf/classes/ordinals/index.js index 1754a84c..9c9f205a 100644 --- a/dist/vdxf/classes/ordinals/index.js +++ b/dist/vdxf/classes/ordinals/index.js @@ -26,4 +26,7 @@ __exportStar(require("./LoginRequestDetailsOrdinalVdxfObject"), exports); __exportStar(require("./LoginResponseDetailsOrdinalVdxfObject"), exports); __exportStar(require("./AppEncryptionRequestOrdinalVdxfObject"), exports); __exportStar(require("./ProvisionIdentityDetailsOrdinalVdxfObject"), exports); +__exportStar(require("./DataPacketResponseOrdinalVdxfObject"), exports); +__exportStar(require("./UserDataRequestOrdinalVdxfObject"), exports); +__exportStar(require("./UserSpecificDataPacketDetailsOrdinalVdxfObject"), exports); (0, register_1.registerOrdinals)(); diff --git a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js index c10b4392..cab21a49 100644 --- a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js +++ b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js @@ -162,7 +162,7 @@ class VerusPayInvoiceDetails { if (this.acceptsNonVerusSystems()) { length += varuint_1.default.encodingLength(this.acceptedsystems.length); this.acceptedsystems.forEach(() => { - length += 20; + length += vdxf_1.HASH160_BYTE_LENGTH; }); } return length; diff --git a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts index 8bdfce9e..6e752c98 100644 --- a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts +++ b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts @@ -14,7 +14,7 @@ import { BigNumber } from '../../../utils/types/BigNumber'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { CompactIdAddressObject, CompactIdAddressObjectJson } from '../CompactIdAddressObject'; -export interface AppEncryptionRequestDetailsInterface { +export interface AppEncryptionRequestInterface { version?: BigNumber; flags: BigNumber; encryptToZAddress: string; @@ -22,8 +22,9 @@ export interface AppEncryptionRequestDetailsInterface { secondaryDerivationNumber?: BigNumber; fromAddress?: CompactIdAddressObject; toAddress?: CompactIdAddressObject; + requestID?: string; } -export interface AppEncryptionRequestDetailsJson { +export interface AppEncryptionRequestJson { version: number; flags: number; encrypttozaddress: string; @@ -31,6 +32,7 @@ export interface AppEncryptionRequestDetailsJson { secondaryderivationnumber?: number; fromaddress?: CompactIdAddressObjectJson; toaddress?: CompactIdAddressObjectJson; + requestid?: string; } /** * Checks if a string is a valid hexadecimal address @@ -56,6 +58,7 @@ export declare class AppEncryptionRequestDetails implements SerializableEntity { static HAS_FROM_ADDRESS: import("bn.js"); static HAS_TO_ADDRESS: import("bn.js"); static HAS_SECONDARY_SEED_DERIVATION_NUMBER: import("bn.js"); + static HAS_REQUEST_ID: import("bn.js"); version: BigNumber; flags: BigNumber; encryptToZAddress: string; @@ -63,16 +66,18 @@ export declare class AppEncryptionRequestDetails implements SerializableEntity { secondaryDerivationNumber?: BigNumber; fromAddress?: CompactIdAddressObject; toAddress?: CompactIdAddressObject; - constructor(data?: AppEncryptionRequestDetailsInterface); + requestID?: string; + constructor(data?: AppEncryptionRequestInterface); setFlags(): void; calcFlags(): BigNumber; isValid(): boolean; hasSecondarySeedDerivation(flags?: BigNumber): boolean; hasFromAddress(flags?: BigNumber): boolean; hasToAddress(flags?: BigNumber): boolean; + hasRequestID(flags?: BigNumber): boolean; getByteLength(): number; toBuffer(): Buffer; fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): AppEncryptionRequestDetailsJson; - static fromJson(json: AppEncryptionRequestDetailsJson): AppEncryptionRequestDetails; + toJson(): AppEncryptionRequestJson; + static fromJson(json: AppEncryptionRequestJson): AppEncryptionRequestDetails; } diff --git a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js index 5e3ea403..07733e02 100644 --- a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js +++ b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js @@ -21,6 +21,8 @@ const { BufferReader, BufferWriter } = bufferutils_1.default; const sapling_1 = require("../../../utils/sapling"); const CompactIdAddressObject_1 = require("../CompactIdAddressObject"); const varuint_1 = require("../../../utils/varuint"); +const address_1 = require("../../../utils/address"); +const vdxf_1 = require("../../../constants/vdxf"); /** * Checks if a string is a valid hexadecimal address * @param flags - Optional flags for the request @@ -46,6 +48,7 @@ class AppEncryptionRequestDetails { this.secondaryDerivationNumber = data === null || data === void 0 ? void 0 : data.secondaryDerivationNumber; this.fromAddress = data === null || data === void 0 ? void 0 : data.fromAddress; this.toAddress = data === null || data === void 0 ? void 0 : data.toAddress; + this.requestID = data === null || data === void 0 ? void 0 : data.requestID; this.setFlags(); } setFlags() { @@ -62,6 +65,9 @@ class AppEncryptionRequestDetails { if (this.toAddress != null) { flags = flags.or(AppEncryptionRequestDetails.HAS_TO_ADDRESS); } + if (this.requestID != null) { + flags = flags.or(AppEncryptionRequestDetails.HAS_REQUEST_ID); + } return flags; } isValid() { @@ -79,6 +85,9 @@ class AppEncryptionRequestDetails { hasToAddress(flags = this.flags) { return flags.and(AppEncryptionRequestDetails.HAS_TO_ADDRESS).gt(new bn_js_1.BN(0)); } + hasRequestID(flags = this.flags) { + return flags.and(AppEncryptionRequestDetails.HAS_REQUEST_ID).gt(new bn_js_1.BN(0)); + } getByteLength() { const flags = this.calcFlags(); let length = 0; @@ -95,6 +104,9 @@ class AppEncryptionRequestDetails { if (this.hasToAddress(flags)) { length += this.toAddress.getByteLength(); } + if (this.hasRequestID(flags)) { + length += vdxf_1.HASH160_BYTE_LENGTH; + } return length; } toBuffer() { @@ -116,6 +128,9 @@ class AppEncryptionRequestDetails { if (this.hasToAddress(flags)) { writer.writeSlice(this.toAddress.toBuffer()); } + if (this.hasRequestID(flags)) { + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + } return writer.buffer; } fromBuffer(buffer, offset) { @@ -142,10 +157,13 @@ class AppEncryptionRequestDetails { reader.offset = CompactId.fromBuffer(reader.buffer, reader.offset); this.toAddress = CompactId; } + if (this.hasRequestID()) { + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + } return reader.offset; } toJson() { - var _a; + var _a, _b, _c; // Set flags before serialization const flags = this.calcFlags(); return { @@ -154,8 +172,9 @@ class AppEncryptionRequestDetails { encrypttozaddress: this.encryptToZAddress, derivationnumber: this.derivationNumber.toNumber(), secondaryderivationnumber: (_a = this.secondaryDerivationNumber) === null || _a === void 0 ? void 0 : _a.toNumber(), - fromaddress: this.fromAddress.toJson(), - toaddress: this.toAddress.toJson() + fromaddress: (_b = this.fromAddress) === null || _b === void 0 ? void 0 : _b.toJson(), + toaddress: (_c = this.toAddress) === null || _c === void 0 ? void 0 : _c.toJson(), + requestid: this.requestID }; } static fromJson(json) { @@ -171,6 +190,9 @@ class AppEncryptionRequestDetails { if (instance.hasToAddress()) { instance.toAddress = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(json === null || json === void 0 ? void 0 : json.toaddress); } + if (instance.hasRequestID()) { + instance.requestID = json === null || json === void 0 ? void 0 : json.requestid; + } return instance; } } @@ -182,3 +204,4 @@ AppEncryptionRequestDetails.DEFAULT_VERSION = new bn_js_1.BN(1); AppEncryptionRequestDetails.HAS_FROM_ADDRESS = new bn_js_1.BN(1); AppEncryptionRequestDetails.HAS_TO_ADDRESS = new bn_js_1.BN(2); AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER = new bn_js_1.BN(4); +AppEncryptionRequestDetails.HAS_REQUEST_ID = new bn_js_1.BN(8); diff --git a/dist/vdxf/classes/requestobjects/LoginRequestDetails.d.ts b/dist/vdxf/classes/requestobjects/LoginRequestDetails.d.ts deleted file mode 100644 index e8cd1ff1..00000000 --- a/dist/vdxf/classes/requestobjects/LoginRequestDetails.d.ts +++ /dev/null @@ -1,81 +0,0 @@ -/** - * LoginRequestDetails - Class for handling application login and authentication requests - * - * This class is used when an application is requesting authentication or login from the user, - * including specific recipientConstraints and callback information. The request includes: - * - Request ID for tracking the authentication session - * - Permission sets defining what access the application is requesting - * - Callback URIs for post-authentication redirects - * - Optional expiry time for the authentication session - * - * The user's wallet can use these parameters to present a clear authentication request - * to the user, showing exactly what recipientConstraints are being requested and where they will - * be redirected after successful authentication. This enables secure, user-controlled - * authentication flows with granular permission management. - */ -import { BigNumber } from "../../../utils/types/BigNumber"; -import { SerializableEntity } from "../../../utils/types/SerializableEntity"; -import { CompactIdAddressObject, CompactIdAddressObjectJson } from "../CompactIdAddressObject"; -export interface LoginRequestDetailsInterface { - version?: BigNumber; - flags?: BigNumber; - requestID: string; - recipientConstraints?: Array; - callbackURIs?: Array; - expiryTime?: BigNumber; -} -export interface RecipientConstraintJson { - type: number; - identity: CompactIdAddressObjectJson; -} -export interface callbackURIsJson { - type: number; - uri: string; -} -export interface RecipientConstraint { - type: number; - identity: CompactIdAddressObject; -} -export interface callbackURIs { - type: number; - uri: string; -} -export interface LoginRequestDetailsJson { - version: number; - requestid: string; - flags: number; - recipientConstraints?: Array; - callbackURIs?: Array; - expirytime?: number; -} -export declare class LoginRequestDetails implements SerializableEntity { - version: BigNumber; - flags?: BigNumber; - requestID: string; - recipientConstraints?: Array; - callbackURIs?: Array; - expiryTime?: BigNumber; - static DEFAULT_VERSION: import("bn.js"); - static VERSION_FIRSTVALID: import("bn.js"); - static VERSION_LASTVALID: import("bn.js"); - static FLAG_HAS_RECIPIENT_CONSTRAINTS: import("bn.js"); - static FLAG_HAS_CALLBACK_URI: import("bn.js"); - static FLAG_HAS_EXPIRY_TIME: import("bn.js"); - static REQUIRED_ID: number; - static REQUIRED_SYSTEM: number; - static REQUIRED_PARENT: number; - static TYPE_WEBHOOK: number; - static TYPE_REDIRECT: number; - constructor(request?: LoginRequestDetailsInterface); - hasRecipentConstraints(): boolean; - hascallbackURIs(): boolean; - hasExpiryTime(): boolean; - calcFlags(flags?: BigNumber): BigNumber; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): LoginRequestDetailsJson; - static fromJson(data: LoginRequestDetailsJson): LoginRequestDetails; - setFlags(): void; - isValid(): boolean; -} diff --git a/dist/vdxf/classes/requestobjects/LoginRequestDetails.js b/dist/vdxf/classes/requestobjects/LoginRequestDetails.js deleted file mode 100644 index 0873b6a9..00000000 --- a/dist/vdxf/classes/requestobjects/LoginRequestDetails.js +++ /dev/null @@ -1,212 +0,0 @@ -"use strict"; -/** - * LoginRequestDetails - Class for handling application login and authentication requests - * - * This class is used when an application is requesting authentication or login from the user, - * including specific recipientConstraints and callback information. The request includes: - * - Request ID for tracking the authentication session - * - Permission sets defining what access the application is requesting - * - Callback URIs for post-authentication redirects - * - Optional expiry time for the authentication session - * - * The user's wallet can use these parameters to present a clear authentication request - * to the user, showing exactly what recipientConstraints are being requested and where they will - * be redirected after successful authentication. This enables secure, user-controlled - * authentication flows with granular permission management. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LoginRequestDetails = void 0; -const bufferutils_1 = require("../../../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const varuint_1 = require("../../../utils/varuint"); -const vdxf_1 = require("../../../constants/vdxf"); -const address_1 = require("../../../utils/address"); -const CompactIdAddressObject_1 = require("../CompactIdAddressObject"); -class LoginRequestDetails { - constructor(request) { - this.version = (request === null || request === void 0 ? void 0 : request.version) || LoginRequestDetails.DEFAULT_VERSION; - this.requestID = (request === null || request === void 0 ? void 0 : request.requestID) || ''; - this.flags = (request === null || request === void 0 ? void 0 : request.flags) || new bn_js_1.BN(0, 10); - this.recipientConstraints = (request === null || request === void 0 ? void 0 : request.recipientConstraints) || null; - this.callbackURIs = (request === null || request === void 0 ? void 0 : request.callbackURIs) || null; - this.expiryTime = (request === null || request === void 0 ? void 0 : request.expiryTime) || null; - this.setFlags(); - } - hasRecipentConstraints() { - return this.flags.and(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS).eq(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); - } - hascallbackURIs() { - return this.flags.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI).eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); - } - hasExpiryTime() { - return this.flags.and(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME).eq(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME); - } - calcFlags(flags = this.flags) { - if (this.recipientConstraints) { - flags = flags.or(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); - } - if (this.callbackURIs) { - flags = flags.or(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); - } - if (this.expiryTime) { - flags = flags.or(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME); - } - return flags; - } - getByteLength() { - let length = 0; - length += varuint_1.default.encodingLength(this.flags.toNumber()); - length += 20; // requestID hash length - if (this.hasRecipentConstraints()) { - length += varuint_1.default.encodingLength(this.recipientConstraints.length); - for (let i = 0; i < this.recipientConstraints.length; i++) { - length += varuint_1.default.encodingLength(this.recipientConstraints[i].type); - length += this.recipientConstraints[i].identity.getByteLength(); - } - } - if (this.hascallbackURIs()) { - length += varuint_1.default.encodingLength(this.callbackURIs.length); - for (let i = 0; i < this.callbackURIs.length; i++) { - length += varuint_1.default.encodingLength(this.callbackURIs[i].type); - length += varuint_1.default.encodingLength(Buffer.from(this.callbackURIs[i].uri, 'utf8').byteLength); - length += Buffer.from(this.callbackURIs[i].uri, 'utf8').byteLength; - } - } - if (this.hasExpiryTime()) { - length += varuint_1.default.encodingLength(this.expiryTime.toNumber()); - } - return length; - } - toBuffer() { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeCompactSize(this.flags.toNumber()); - writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); - if (this.hasRecipentConstraints()) { - writer.writeCompactSize(this.recipientConstraints.length); - for (let i = 0; i < this.recipientConstraints.length; i++) { - writer.writeCompactSize(this.recipientConstraints[i].type); - writer.writeSlice(this.recipientConstraints[i].identity.toBuffer()); - } - } - if (this.hascallbackURIs()) { - writer.writeCompactSize(this.callbackURIs.length); - for (let i = 0; i < this.callbackURIs.length; i++) { - writer.writeCompactSize(this.callbackURIs[i].type); - writer.writeVarSlice(Buffer.from(this.callbackURIs[i].uri, 'utf8')); - } - } - if (this.hasExpiryTime()) { - writer.writeCompactSize(this.expiryTime.toNumber()); - } - return writer.buffer; - } - fromBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - this.flags = new bn_js_1.BN(reader.readCompactSize()); - this.requestID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - if (this.hasRecipentConstraints()) { - this.recipientConstraints = []; - const recipientConstraintsLength = reader.readCompactSize(); - for (let i = 0; i < recipientConstraintsLength; i++) { - const compactId = new CompactIdAddressObject_1.CompactIdAddressObject(); - const type = reader.readCompactSize(); - const identityOffset = reader.offset; - reader.offset = compactId.fromBuffer(buffer, identityOffset); - this.recipientConstraints.push({ - type: type, - identity: compactId - }); - } - } - if (this.hascallbackURIs()) { - this.callbackURIs = []; - const callbackURIsLength = reader.readCompactSize(); - for (let i = 0; i < callbackURIsLength; i++) { - this.callbackURIs.push({ - type: reader.readCompactSize(), - uri: reader.readVarSlice().toString('utf8') - }); - } - } - if (this.hasExpiryTime()) { - this.expiryTime = new bn_js_1.BN(reader.readCompactSize()); - } - return reader.offset; - } - toJson() { - const flags = this.calcFlags(); - const retval = { - version: this.version.toNumber(), - flags: flags.toNumber(), - requestid: this.requestID, - recipientConstraints: this.recipientConstraints ? this.recipientConstraints.map(p => ({ type: p.type, - identity: p.identity.toJson() })) : undefined, - callbackURIs: this.callbackURIs ? this.callbackURIs : undefined, - expirytime: this.expiryTime ? this.expiryTime.toNumber() : undefined - }; - return retval; - } - static fromJson(data) { - const loginDetails = new LoginRequestDetails(); - loginDetails.version = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.version) || 0); - loginDetails.flags = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.flags) || 0); - loginDetails.requestID = data.requestid; - if (loginDetails.hasRecipentConstraints() && data.recipientConstraints) { - loginDetails.recipientConstraints = data.recipientConstraints.map(p => ({ type: p.type, - identity: CompactIdAddressObject_1.CompactIdAddressObject.fromJson(p.identity) })); - } - if (loginDetails.hascallbackURIs() && data.callbackURIs) { - loginDetails.callbackURIs = data.callbackURIs.map(c => ({ type: c.type, - uri: c.uri })); - } - if (loginDetails.hasExpiryTime() && data.expirytime) { - loginDetails.expiryTime = new bn_js_1.BN(data.expirytime); - } - return loginDetails; - } - setFlags() { - this.flags = this.calcFlags(); - } - isValid() { - let valid = this.requestID != null && this.requestID.length > 0; - valid && (valid = this.flags != null && this.flags.gte(new bn_js_1.BN(0))); - // Validate requestID is a valid base58 address - try { - (0, address_1.fromBase58Check)(this.requestID); - } - catch (_a) { - valid = false; - } - if (this.hasRecipentConstraints()) { - if (!this.recipientConstraints || this.recipientConstraints.length === 0) { - return false; - } - } - if (this.hascallbackURIs()) { - if (!this.callbackURIs || this.callbackURIs.length === 0) { - return false; - } - } - if (this.hasExpiryTime()) { - if (!this.expiryTime || this.expiryTime.isZero()) { - return false; - } - } - return valid; - } -} -exports.LoginRequestDetails = LoginRequestDetails; -// Version -LoginRequestDetails.DEFAULT_VERSION = new bn_js_1.BN(1, 10); -LoginRequestDetails.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); -LoginRequestDetails.VERSION_LASTVALID = new bn_js_1.BN(1, 10); -LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS = new bn_js_1.BN(1, 10); -LoginRequestDetails.FLAG_HAS_CALLBACK_URI = new bn_js_1.BN(2, 10); -LoginRequestDetails.FLAG_HAS_EXPIRY_TIME = new bn_js_1.BN(4, 10); -// Recipient Constraint Types - What types of Identity can login, e.g. REQUIRED_SYSTEM and "VRSC" means only identities on the Verus chain can login -LoginRequestDetails.REQUIRED_ID = 1; -LoginRequestDetails.REQUIRED_SYSTEM = 2; -LoginRequestDetails.REQUIRED_PARENT = 3; -// Callback URI Types -LoginRequestDetails.TYPE_WEBHOOK = 1; -LoginRequestDetails.TYPE_REDIRECT = 2; diff --git a/dist/vdxf/classes/requestobjects/RequestUserData.d.ts b/dist/vdxf/classes/requestobjects/UserDataRequestDetails.d.ts similarity index 87% rename from dist/vdxf/classes/requestobjects/RequestUserData.d.ts rename to dist/vdxf/classes/requestobjects/UserDataRequestDetails.d.ts index 6f7b6f57..be6b1695 100644 --- a/dist/vdxf/classes/requestobjects/RequestUserData.d.ts +++ b/dist/vdxf/classes/requestobjects/UserDataRequestDetails.d.ts @@ -21,7 +21,7 @@ import { BigNumber } from '../../../utils/types/BigNumber'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { CompactIdAddressObject, CompactIdAddressObjectJson } from '../CompactIdAddressObject'; -export interface RequestUserDataInterface { +export interface UserDataRequestInterface { version?: BigNumber; flags: BigNumber; searchDataKey: Array<{ @@ -29,8 +29,9 @@ export interface RequestUserDataInterface { }>; signer?: CompactIdAddressObject; requestedKeys?: string[]; + requestID?: string; } -export interface RequestUserDataJson { +export interface UserDataRequestJson { version: number; flags: number; searchdatakey: Array<{ @@ -38,8 +39,9 @@ export interface RequestUserDataJson { }>; signer?: CompactIdAddressObjectJson; requestedkeys?: string[]; + requestid?: string; } -export declare class RequestUserData implements SerializableEntity { +export declare class UserDataRequestDetails implements SerializableEntity { static VERSION_INVALID: import("bn.js"); static FIRST_VERSION: import("bn.js"); static LAST_VERSION: import("bn.js"); @@ -52,6 +54,7 @@ export declare class RequestUserData implements SerializableEntity { static CREDENTIAL: import("bn.js"); static HAS_SIGNER: import("bn.js"); static HAS_REQUESTED_KEYS: import("bn.js"); + static HAS_REQUEST_ID: import("bn.js"); version: BigNumber; flags: BigNumber; searchDataKey: Array<{ @@ -59,11 +62,13 @@ export declare class RequestUserData implements SerializableEntity { }>; signer?: CompactIdAddressObject; requestedKeys?: string[]; - constructor(data?: RequestUserDataInterface); + requestID?: string; + constructor(data?: UserDataRequestInterface); calcFlags(): BigNumber; setFlags(): void; hasSigner(): boolean; hasRequestedKeys(): boolean; + hasRequestID(): boolean; /** * Checks if exactly one data type flag is set (FULL_DATA, PARTIAL_DATA, or COLLECTION) * @returns True if exactly one data type flag is set @@ -78,6 +83,6 @@ export declare class RequestUserData implements SerializableEntity { getByteLength(): number; toBuffer(): Buffer; fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): RequestUserDataJson; - static fromJson(json: RequestUserDataJson): RequestUserData; + toJson(): UserDataRequestJson; + static fromJson(json: UserDataRequestJson): UserDataRequestDetails; } diff --git a/dist/vdxf/classes/requestobjects/RequestUserData.js b/dist/vdxf/classes/requestobjects/UserDataRequestDetails.js similarity index 70% rename from dist/vdxf/classes/requestobjects/RequestUserData.js rename to dist/vdxf/classes/requestobjects/UserDataRequestDetails.js index acfda80b..6fff923c 100644 --- a/dist/vdxf/classes/requestobjects/RequestUserData.js +++ b/dist/vdxf/classes/requestobjects/UserDataRequestDetails.js @@ -20,29 +20,34 @@ * - ATTESTATION/CLAIM/CREDENTIAL: Type of verification being requested */ Object.defineProperty(exports, "__esModule", { value: true }); -exports.RequestUserData = void 0; +exports.UserDataRequestDetails = void 0; const bn_js_1 = require("bn.js"); const varuint_1 = require("../../../utils/varuint"); const bufferutils_1 = require("../../../utils/bufferutils"); const { BufferReader, BufferWriter } = bufferutils_1.default; const CompactIdAddressObject_1 = require("../CompactIdAddressObject"); const address_1 = require("../../../utils/address"); -class RequestUserData { +const vdxf_1 = require("../../../constants/vdxf"); +class UserDataRequestDetails { constructor(data) { - this.version = (data === null || data === void 0 ? void 0 : data.version) || RequestUserData.DEFAULT_VERSION; + this.version = (data === null || data === void 0 ? void 0 : data.version) || UserDataRequestDetails.DEFAULT_VERSION; this.flags = (data === null || data === void 0 ? void 0 : data.flags) || new bn_js_1.BN(0); this.searchDataKey = (data === null || data === void 0 ? void 0 : data.searchDataKey) || []; this.signer = data === null || data === void 0 ? void 0 : data.signer; this.requestedKeys = data === null || data === void 0 ? void 0 : data.requestedKeys; + this.requestID = data === null || data === void 0 ? void 0 : data.requestID; this.setFlags(); } calcFlags() { let flags = new bn_js_1.BN(0); if (this.requestedKeys && this.requestedKeys.length > 0) { - flags = flags.or(RequestUserData.HAS_REQUESTED_KEYS); + flags = flags.or(UserDataRequestDetails.HAS_REQUESTED_KEYS); } if (this.signer) { - flags = flags.or(RequestUserData.HAS_SIGNER); + flags = flags.or(UserDataRequestDetails.HAS_SIGNER); + } + if (this.requestID) { + flags = flags.or(UserDataRequestDetails.HAS_REQUEST_ID); } return flags; } @@ -50,17 +55,20 @@ class RequestUserData { this.flags = this.calcFlags(); } hasSigner() { - return this.flags.and(RequestUserData.HAS_SIGNER).eq(RequestUserData.HAS_SIGNER); + return this.flags.and(UserDataRequestDetails.HAS_SIGNER).eq(UserDataRequestDetails.HAS_SIGNER); } hasRequestedKeys() { - return this.flags.and(RequestUserData.HAS_REQUESTED_KEYS).eq(RequestUserData.HAS_REQUESTED_KEYS); + return this.flags.and(UserDataRequestDetails.HAS_REQUESTED_KEYS).eq(UserDataRequestDetails.HAS_REQUESTED_KEYS); + } + hasRequestID() { + return this.flags.and(UserDataRequestDetails.HAS_REQUEST_ID).eq(UserDataRequestDetails.HAS_REQUEST_ID); } /** * Checks if exactly one data type flag is set (FULL_DATA, PARTIAL_DATA, or COLLECTION) * @returns True if exactly one data type flag is set */ hasDataTypeSet() { - const dataTypeFlags = RequestUserData.FULL_DATA.or(RequestUserData.PARTIAL_DATA).or(RequestUserData.COLLECTION); + const dataTypeFlags = UserDataRequestDetails.FULL_DATA.or(UserDataRequestDetails.PARTIAL_DATA).or(UserDataRequestDetails.COLLECTION); const setDataFlags = this.flags.and(dataTypeFlags); // Check if exactly one flag is set by verifying it's a power of 2 return !setDataFlags.isZero() && setDataFlags.and(setDataFlags.sub(new bn_js_1.BN(1))).isZero(); @@ -70,13 +78,13 @@ class RequestUserData { * @returns True if exactly one request type flag is set */ hasRequestTypeSet() { - const requestTypeFlags = RequestUserData.ATTESTATION.or(RequestUserData.CLAIM).or(RequestUserData.CREDENTIAL); + const requestTypeFlags = UserDataRequestDetails.ATTESTATION.or(UserDataRequestDetails.CLAIM).or(UserDataRequestDetails.CREDENTIAL); const setRequestFlags = this.flags.and(requestTypeFlags); // Check if exactly one flag is set by verifying it's a power of 2 return !setRequestFlags.isZero() && setRequestFlags.and(setRequestFlags.sub(new bn_js_1.BN(1))).isZero(); } isValid() { - let valid = this.version.gte(RequestUserData.FIRST_VERSION) && this.version.lte(RequestUserData.LAST_VERSION); + let valid = this.version.gte(UserDataRequestDetails.FIRST_VERSION) && this.version.lte(UserDataRequestDetails.LAST_VERSION); // Check that exactly one data type flag is set valid && (valid = this.hasDataTypeSet()); // Check that exactly one request type flag is set @@ -92,7 +100,7 @@ class RequestUserData { for (const item of this.searchDataKey) { const key = Object.keys(item)[0]; const value = item[key]; - length += 20; // VDXF key length + length += vdxf_1.HASH160_BYTE_LENGTH; length += varuint_1.default.encodingLength(Buffer.byteLength(value, 'utf8')); length += Buffer.byteLength(value, 'utf8'); } @@ -103,10 +111,13 @@ class RequestUserData { length += varuint_1.default.encodingLength(this.requestedKeys ? this.requestedKeys.length : 0); if (this.requestedKeys) { for (const key of this.requestedKeys) { - length += 20; // VDXF key length + length += vdxf_1.HASH160_BYTE_LENGTH; } } } + if (this.hasRequestID()) { + length += vdxf_1.HASH160_BYTE_LENGTH; + } return length; } toBuffer() { @@ -128,6 +139,9 @@ class RequestUserData { writer.writeSlice((0, address_1.fromBase58Check)(key).hash); // 20-byte VDXF key } } + if (this.hasRequestID()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + } return writer.buffer; } fromBuffer(buffer, offset) { @@ -136,10 +150,10 @@ class RequestUserData { const searchDataKeyLength = reader.readCompactSize(); this.searchDataKey = []; for (let i = 0; i < searchDataKeyLength; i++) { - const keyHash = reader.readSlice(20); // 20-byte VDXF key + const keyHash = reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH); // 20-byte VDXF key const valueBuffer = reader.readVarSlice(); const value = valueBuffer.toString('utf8'); - const key = (0, address_1.toBase58Check)(keyHash, 102); + const key = (0, address_1.toBase58Check)(keyHash, vdxf_1.I_ADDR_VERSION); this.searchDataKey.push({ [key]: value }); } if (this.hasSigner()) { @@ -152,42 +166,49 @@ class RequestUserData { this.requestedKeys = []; for (let i = 0; i < requestedKeysLength; i++) { const keyHash = reader.readSlice(20); // 20-byte VDXF key - const key = (0, address_1.toBase58Check)(keyHash, 102); + const key = (0, address_1.toBase58Check)(keyHash, vdxf_1.I_ADDR_VERSION); this.requestedKeys.push(key); } } + if (this.hasRequestID()) { + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + } return reader.offset; } toJson() { + var _a; const flags = this.calcFlags(); return { version: this.version.toNumber(), flags: flags.toNumber(), searchdatakey: this.searchDataKey, - signer: this.signer.toJson(), - requestedkeys: this.requestedKeys + signer: (_a = this.signer) === null || _a === void 0 ? void 0 : _a.toJson(), + requestedkeys: this.requestedKeys, + requestid: this.requestID }; } static fromJson(json) { - const requestData = new RequestUserData(); + const requestData = new UserDataRequestDetails(); requestData.version = new bn_js_1.BN(json.version); requestData.flags = new bn_js_1.BN(json.flags); requestData.searchDataKey = json.searchdatakey; requestData.signer = json.signer ? CompactIdAddressObject_1.CompactIdAddressObject.fromJson(json.signer) : undefined; requestData.requestedKeys = json.requestedkeys; + requestData.requestID = json.requestid; return requestData; } } -exports.RequestUserData = RequestUserData; -RequestUserData.VERSION_INVALID = new bn_js_1.BN(0); -RequestUserData.FIRST_VERSION = new bn_js_1.BN(1); -RequestUserData.LAST_VERSION = new bn_js_1.BN(1); -RequestUserData.DEFAULT_VERSION = new bn_js_1.BN(1); -RequestUserData.FULL_DATA = new bn_js_1.BN(1); -RequestUserData.PARTIAL_DATA = new bn_js_1.BN(2); -RequestUserData.COLLECTION = new bn_js_1.BN(4); -RequestUserData.ATTESTATION = new bn_js_1.BN(8); -RequestUserData.CLAIM = new bn_js_1.BN(16); -RequestUserData.CREDENTIAL = new bn_js_1.BN(32); -RequestUserData.HAS_SIGNER = new bn_js_1.BN(64); -RequestUserData.HAS_REQUESTED_KEYS = new bn_js_1.BN(128); +exports.UserDataRequestDetails = UserDataRequestDetails; +UserDataRequestDetails.VERSION_INVALID = new bn_js_1.BN(0); +UserDataRequestDetails.FIRST_VERSION = new bn_js_1.BN(1); +UserDataRequestDetails.LAST_VERSION = new bn_js_1.BN(1); +UserDataRequestDetails.DEFAULT_VERSION = new bn_js_1.BN(1); +UserDataRequestDetails.FULL_DATA = new bn_js_1.BN(1); +UserDataRequestDetails.PARTIAL_DATA = new bn_js_1.BN(2); +UserDataRequestDetails.COLLECTION = new bn_js_1.BN(4); +UserDataRequestDetails.ATTESTATION = new bn_js_1.BN(8); +UserDataRequestDetails.CLAIM = new bn_js_1.BN(16); +UserDataRequestDetails.CREDENTIAL = new bn_js_1.BN(32); +UserDataRequestDetails.HAS_SIGNER = new bn_js_1.BN(64); +UserDataRequestDetails.HAS_REQUESTED_KEYS = new bn_js_1.BN(128); +UserDataRequestDetails.HAS_REQUEST_ID = new bn_js_1.BN(256); diff --git a/dist/vdxf/classes/requestobjects/PersonalUserDataDetails.d.ts b/dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.d.ts similarity index 75% rename from dist/vdxf/classes/requestobjects/PersonalUserDataDetails.d.ts rename to dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.d.ts index 605cbb5e..6d52a609 100644 --- a/dist/vdxf/classes/requestobjects/PersonalUserDataDetails.d.ts +++ b/dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.d.ts @@ -1,5 +1,6 @@ /** - * PersonalUserDataDetails - Class for handling personal user data transfer requests + * UserSpecificDataPacketDetails - Class for sending personal data to user or requesting the user + * signature on personal data * * This class is used when an application is requesting to transfer or receive personal * user data. The request includes: @@ -13,26 +14,30 @@ * statements or conditions, and whether it's for the user's signature or being * transmitted to/from the user. This enables secure, user-controlled personal * data sharing with clear visibility into what data is being transferred. + * + */ import { BigNumber } from '../../../utils/types/BigNumber'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { DataDescriptor, DataDescriptorJson } from '../../../pbaas'; -import { VerifiableSignatureData, VerifiableSignatureDataJson } from '../../../vdxf/classes/VerifiableSignatureData'; -export interface PersonalUserDataDetailsInterface { +import { VerifiableSignatureData, VerifiableSignatureDataJson } from '../VerifiableSignatureData'; +export interface UserSpecificDataPacketDetailsInterface { version?: BigNumber; flags: BigNumber; signableObjects: Array; statements?: Array; signature?: VerifiableSignatureData; + detailsID?: string; } -export interface PersonalUserDataDetailsJson { +export interface UserSpecificDataPacketDetailsJson { version: number; flags: number; signableobjects: Array; statements?: Array; signature?: VerifiableSignatureDataJson; + detailsid?: string; } -export declare class PersonalUserDataDetails implements SerializableEntity { +export declare class UserSpecificDataPacketDetails implements SerializableEntity { static VERSION_INVALID: import("bn.js"); static FIRST_VERSION: import("bn.js"); static LAST_VERSION: import("bn.js"); @@ -42,20 +47,23 @@ export declare class PersonalUserDataDetails implements SerializableEntity { static FOR_USERS_SIGNATURE: import("bn.js"); static FOR_TRANSMITTAL_TO_USER: import("bn.js"); static HAS_URL_FOR_DOWNLOAD: import("bn.js"); + static HAS_DETAILS_ID: import("bn.js"); version: BigNumber; flags: BigNumber; signableObjects: Array; statements?: Array; signature?: VerifiableSignatureData; - constructor(data?: PersonalUserDataDetailsInterface); + detailsID?: string; + constructor(data?: UserSpecificDataPacketDetailsInterface); setFlags(): void; calcFlags(): BigNumber; hasStatements(): boolean; hasSignature(): boolean; + hasDetailsID(): boolean; isValid(): boolean; getByteLength(): number; toBuffer(): Buffer; fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): PersonalUserDataDetailsJson; - static fromJson(json: PersonalUserDataDetailsJson): PersonalUserDataDetails; + toJson(): UserSpecificDataPacketDetailsJson; + static fromJson(json: UserSpecificDataPacketDetailsJson): UserSpecificDataPacketDetails; } diff --git a/dist/vdxf/classes/requestobjects/PersonalUserDataDetails.js b/dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.js similarity index 70% rename from dist/vdxf/classes/requestobjects/PersonalUserDataDetails.js rename to dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.js index b27d9415..a4d68238 100644 --- a/dist/vdxf/classes/requestobjects/PersonalUserDataDetails.js +++ b/dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.js @@ -1,6 +1,7 @@ "use strict"; /** - * PersonalUserDataDetails - Class for handling personal user data transfer requests + * UserSpecificDataPacketDetails - Class for sending personal data to user or requesting the user + * signature on personal data * * This class is used when an application is requesting to transfer or receive personal * user data. The request includes: @@ -14,22 +15,28 @@ * statements or conditions, and whether it's for the user's signature or being * transmitted to/from the user. This enables secure, user-controlled personal * data sharing with clear visibility into what data is being transferred. + * + */ Object.defineProperty(exports, "__esModule", { value: true }); -exports.PersonalUserDataDetails = void 0; +exports.UserSpecificDataPacketDetails = void 0; const bn_js_1 = require("bn.js"); const varuint_1 = require("../../../utils/varuint"); const bufferutils_1 = require("../../../utils/bufferutils"); const { BufferReader, BufferWriter } = bufferutils_1.default; const pbaas_1 = require("../../../pbaas"); -const VerifiableSignatureData_1 = require("../../../vdxf/classes/VerifiableSignatureData"); -class PersonalUserDataDetails { +const VerifiableSignatureData_1 = require("../VerifiableSignatureData"); +const address_1 = require("../../../utils/address"); +const vdxf_1 = require("../../../constants/vdxf"); +// User_specific_data_packet +class UserSpecificDataPacketDetails { constructor(data) { - this.version = (data === null || data === void 0 ? void 0 : data.version) || PersonalUserDataDetails.DEFAULT_VERSION; + this.version = (data === null || data === void 0 ? void 0 : data.version) || UserSpecificDataPacketDetails.DEFAULT_VERSION; this.flags = (data === null || data === void 0 ? void 0 : data.flags) || new bn_js_1.BN(0); this.signableObjects = (data === null || data === void 0 ? void 0 : data.signableObjects) || []; this.statements = (data === null || data === void 0 ? void 0 : data.statements) || []; this.signature = (data === null || data === void 0 ? void 0 : data.signature) || undefined; + this.detailsID = data === null || data === void 0 ? void 0 : data.detailsID; this.setFlags(); } setFlags() { @@ -38,22 +45,28 @@ class PersonalUserDataDetails { calcFlags() { let flags = new bn_js_1.BN(0); if (this.statements && this.statements.length > 0) { - flags = flags.or(PersonalUserDataDetails.HAS_STATEMENTS); + flags = flags.or(UserSpecificDataPacketDetails.HAS_STATEMENTS); } if (this.signature) { - flags = flags.or(PersonalUserDataDetails.HAS_SIGNATURE); + flags = flags.or(UserSpecificDataPacketDetails.HAS_SIGNATURE); + } + if (this.detailsID) { + flags = flags.or(UserSpecificDataPacketDetails.HAS_DETAILS_ID); } return flags; } hasStatements() { - return this.flags.and(PersonalUserDataDetails.HAS_STATEMENTS).eq(PersonalUserDataDetails.HAS_STATEMENTS); + return this.flags.and(UserSpecificDataPacketDetails.HAS_STATEMENTS).eq(UserSpecificDataPacketDetails.HAS_STATEMENTS); } hasSignature() { - return this.flags.and(PersonalUserDataDetails.HAS_SIGNATURE).eq(PersonalUserDataDetails.HAS_SIGNATURE); + return this.flags.and(UserSpecificDataPacketDetails.HAS_SIGNATURE).eq(UserSpecificDataPacketDetails.HAS_SIGNATURE); + } + hasDetailsID() { + return this.flags.and(UserSpecificDataPacketDetails.HAS_DETAILS_ID).eq(UserSpecificDataPacketDetails.HAS_DETAILS_ID); } isValid() { - let valid = this.version.gte(PersonalUserDataDetails.FIRST_VERSION) && - this.version.lte(PersonalUserDataDetails.LAST_VERSION); + let valid = this.version.gte(UserSpecificDataPacketDetails.FIRST_VERSION) && + this.version.lte(UserSpecificDataPacketDetails.LAST_VERSION); // Check that we have signable objects valid && (valid = this.signableObjects.length > 0); if (this.hasStatements()) { @@ -83,6 +96,9 @@ class PersonalUserDataDetails { if (this.hasSignature() && this.signature) { length += this.signature.getByteLength(); } + if (this.hasDetailsID()) { + length += vdxf_1.HASH160_BYTE_LENGTH; + } return length; } toBuffer() { @@ -103,6 +119,9 @@ class PersonalUserDataDetails { if (this.hasSignature() && this.signature) { writer.writeSlice(this.signature.toBuffer()); } + if (this.hasDetailsID()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.detailsID).hash); + } return writer.buffer; } fromBuffer(buffer, offset) { @@ -130,6 +149,9 @@ class PersonalUserDataDetails { reader.offset = signature.fromBuffer(reader.buffer, reader.offset); this.signature = signature; } + if (this.hasDetailsID()) { + this.detailsID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + } return reader.offset; } toJson() { @@ -139,11 +161,12 @@ class PersonalUserDataDetails { flags: flags.toNumber(), signableobjects: this.signableObjects.map(obj => obj.toJson()), statements: this.statements, - signature: this.signature ? this.signature.toJson() : undefined + signature: this.signature ? this.signature.toJson() : undefined, + detailsid: this.detailsID }; } static fromJson(json) { - const instance = new PersonalUserDataDetails(); + const instance = new UserSpecificDataPacketDetails(); instance.version = new bn_js_1.BN(json.version); instance.flags = new bn_js_1.BN(json.flags); const dataDescriptorObjects = []; @@ -154,17 +177,19 @@ class PersonalUserDataDetails { instance.signableObjects = dataDescriptorObjects; instance.statements = json.statements || []; instance.signature = json.signature ? VerifiableSignatureData_1.VerifiableSignatureData.fromJson(json.signature) : undefined; + instance.detailsID = json.detailsid; return instance; } } -exports.PersonalUserDataDetails = PersonalUserDataDetails; -PersonalUserDataDetails.VERSION_INVALID = new bn_js_1.BN(0); -PersonalUserDataDetails.FIRST_VERSION = new bn_js_1.BN(1); -PersonalUserDataDetails.LAST_VERSION = new bn_js_1.BN(1); -PersonalUserDataDetails.DEFAULT_VERSION = new bn_js_1.BN(1); +exports.UserSpecificDataPacketDetails = UserSpecificDataPacketDetails; +UserSpecificDataPacketDetails.VERSION_INVALID = new bn_js_1.BN(0); +UserSpecificDataPacketDetails.FIRST_VERSION = new bn_js_1.BN(1); +UserSpecificDataPacketDetails.LAST_VERSION = new bn_js_1.BN(1); +UserSpecificDataPacketDetails.DEFAULT_VERSION = new bn_js_1.BN(1); // types of data to sign -PersonalUserDataDetails.HAS_STATEMENTS = new bn_js_1.BN(1); -PersonalUserDataDetails.HAS_SIGNATURE = new bn_js_1.BN(2); -PersonalUserDataDetails.FOR_USERS_SIGNATURE = new bn_js_1.BN(4); -PersonalUserDataDetails.FOR_TRANSMITTAL_TO_USER = new bn_js_1.BN(8); -PersonalUserDataDetails.HAS_URL_FOR_DOWNLOAD = new bn_js_1.BN(16); +UserSpecificDataPacketDetails.HAS_STATEMENTS = new bn_js_1.BN(1); +UserSpecificDataPacketDetails.HAS_SIGNATURE = new bn_js_1.BN(2); +UserSpecificDataPacketDetails.FOR_USERS_SIGNATURE = new bn_js_1.BN(4); +UserSpecificDataPacketDetails.FOR_TRANSMITTAL_TO_USER = new bn_js_1.BN(8); +UserSpecificDataPacketDetails.HAS_URL_FOR_DOWNLOAD = new bn_js_1.BN(16); +UserSpecificDataPacketDetails.HAS_DETAILS_ID = new bn_js_1.BN(32); diff --git a/dist/vdxf/keys.d.ts b/dist/vdxf/keys.d.ts index 1b91be13..aca06ac4 100644 --- a/dist/vdxf/keys.d.ts +++ b/dist/vdxf/keys.d.ts @@ -80,3 +80,6 @@ export declare const LOGIN_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const LOGIN_RESPONSE_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const PROVISION_IDENTITY_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const APP_ENCRYPTION_REQUEST_VDXF_KEY: VDXFKeyInterface; +export declare const DATA_RESPONSE_VDXF_KEY: VDXFKeyInterface; +export declare const USER_DATA_REQUEST_VDXF_KEY: VDXFKeyInterface; +export declare const USER_SPECIFIC_DATA_PACKET_VDXF_KEY: VDXFKeyInterface; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index a84bec62..c7e304ca 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; -exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.LOGIN_RESPONSE_DETAILS_VDXF_KEY = exports.LOGIN_REQUEST_DETAILS_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; +exports.USER_SPECIFIC_DATA_PACKET_VDXF_KEY = exports.USER_DATA_REQUEST_VDXF_KEY = exports.DATA_RESPONSE_VDXF_KEY = exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.LOGIN_RESPONSE_DETAILS_VDXF_KEY = exports.LOGIN_REQUEST_DETAILS_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; exports.VERUSPAY_INVOICE_VDXF_KEY = { hash160result: "628efc28c2e2d40050e1a9de7a93e7ddf2aa0076", qualifiedname: { @@ -578,11 +578,38 @@ exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = { "vdxfid": "iGHab566xc2sHmPNCGGA4L5MT7LGoJzmCa" }; exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = { - "hash160result": "5f398b165b8ea8c547b5f473f951178fc5482db6", + "vdxfid": "iL5nfPuV8Ekiz1EeW5KE3pXHuUTfQf6QC9", "indexid": "xQuu8CLZyYyPcB7gMkyP2D3pw8UgHevmcM", + "hash160result": "5f398b165b8ea8c547b5f473f951178fc5482db6", "qualifiedname": { - "name": "vrsc::application.encryption.request", - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" - }, - "vdxfid": "iL5nfPuV8Ekiz1EeW5KE3pXHuUTfQf6QC9" + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "application.encryption.request" + } +}; +exports.DATA_RESPONSE_VDXF_KEY = { + "vdxfid": "i5L8SNcCqY68X3KZEPgJEjGxY2zvMPzutN", + "indexid": "xAAEuB3HgrJo9DCb65LTD7oVZh1wAjCfTC", + "hash160result": "47ecd4c56c93486380a1ec0d06e186ae8cba5914", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::generic.data.packet.response" + } +}; +exports.USER_DATA_REQUEST_VDXF_KEY = { + "vdxfid": "iC7kqU8mfKtqe2gcE2qpuyN4CEcPFTxKGL", + "indexid": "xGwsJGZrWe7WGCZe5iVytMtbDtdQCPvmno", + "hash160result": "d1fba3d9bf18a5293ff912374fc64725db95cb5e", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "user.data.request" + } +}; +exports.USER_SPECIFIC_DATA_PACKET_VDXF_KEY = { + "vdxfid": "i6JYTdVNLz4Sb6515B73BSX6C1Xba63tNQ", + "indexid": "xB8evRvTCJH7DFx2vrmC9q3dDfYcXW1F15", + "hash160result": "34dfdf234ec37a8451790a19538dbd162913051f", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "user.data.packet.details" + } }; diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index e634b572..c4fc1f32 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -10,7 +10,7 @@ import { OrdinalVdxfObject, UserDataRequestOrdinalVdxfObject, UserSpecificDataPacketDetailsOrdinalVdxfObject, - DataResponseOrdinalVdxfObject + DataPacketResponseOrdinalVdxfObject } from '../../vdxf/classes/ordinals'; import { DataDescriptorOrdinalVdxfObject @@ -36,7 +36,7 @@ import { VerusPayInvoiceOrdinalVdxfObject } from '../../vdxf/classes/ordinals/Ve import { TEST_CHALLENGE_ID, TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, TEST_EXPIRYHEIGHT, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3, TEST_REQUESTID, TEST_SALT, TEST_SYSTEMID, TEST_TXID } from '../constants/fixtures'; import { ProvisionIdentityDetailsOrdinalVdxfObject } from '../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject'; import { BigNumber } from '../../utils/types/BigNumber'; -import { DataResponse } from '../../vdxf/classes/response/DataResponse'; +import { DataPacketResponse } from '../../vdxf/classes/datapacket/DataPacketResponse'; import { VerifiableSignatureData } from '../../vdxf/classes/VerifiableSignatureData'; // Helper function to create TransferDestination from address string @@ -83,8 +83,8 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { newObj = ProvisionIdentityDetailsOrdinalVdxfObject.fromJson(json as any); } else if (obj instanceof AppEncryptionRequestOrdinalVdxfObject) { newObj = AppEncryptionRequestOrdinalVdxfObject.fromJson(json as any); - } else if (obj instanceof DataResponseOrdinalVdxfObject) { - newObj = DataResponseOrdinalVdxfObject.fromJson(json as any); + } else if (obj instanceof DataPacketResponseOrdinalVdxfObject) { + newObj = DataPacketResponseOrdinalVdxfObject.fromJson(json as any); } else if (obj instanceof UserDataRequestOrdinalVdxfObject) { newObj = UserDataRequestOrdinalVdxfObject.fromJson(json as any); } else if (obj instanceof UserSpecificDataPacketDetailsOrdinalVdxfObject) { @@ -421,8 +421,8 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(parsed.data).toBeUndefined(); }); - it('should serialize / deserialize a DataResponse via buffer', () => { - const details = new DataResponse({ + it('should serialize / deserialize a DataPacketResponse via buffer', () => { + const details = new DataPacketResponse({ flags: new BN(0), requestID: TEST_CHALLENGE_ID, data: new DataDescriptor({ @@ -433,20 +433,20 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { }) }); - const obj = new DataResponseOrdinalVdxfObject({ data: details }); + const obj = new DataPacketResponseOrdinalVdxfObject({ data: details }); const round = roundTripBuffer(obj); - expect(round).toBeInstanceOf(DataResponseOrdinalVdxfObject); + expect(round).toBeInstanceOf(DataPacketResponseOrdinalVdxfObject); - const d2 = (round as DataResponseOrdinalVdxfObject).data; + const d2 = (round as DataPacketResponseOrdinalVdxfObject).data; expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); const json = obj.toJson(); expect(json.data).toBeDefined(); const roundJ = roundTripJson(obj); - expect(roundJ).toBeInstanceOf(DataResponseOrdinalVdxfObject); + expect(roundJ).toBeInstanceOf(DataPacketResponseOrdinalVdxfObject); - const d3 = (roundJ as DataResponseOrdinalVdxfObject).data; + const d3 = (roundJ as DataPacketResponseOrdinalVdxfObject).data; expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); }); diff --git a/src/constants/ordinals/register.ts b/src/constants/ordinals/register.ts index 3f795d4f..3c887c2a 100644 --- a/src/constants/ordinals/register.ts +++ b/src/constants/ordinals/register.ts @@ -1,7 +1,7 @@ import { APP_ENCRYPTION_REQUEST_VDXF_KEY, DATA_RESPONSE_VDXF_KEY, DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, LOGIN_REQUEST_DETAILS_VDXF_KEY, LOGIN_RESPONSE_DETAILS_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, USER_DATA_REQUEST_VDXF_KEY, USER_SPECIFIC_DATA_PACKET_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../../vdxf"; import { AppEncryptionRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject"; import { DataDescriptorOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject"; -import { DataResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataResponseOrdinalVdxfObject"; +import { DataPacketResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject"; import { UserDataRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject"; import { UserSpecificDataPacketDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject"; import { IdentityUpdateRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject"; @@ -22,7 +22,7 @@ export const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST.toNumber(), APP_ENCRYPTION_REQUEST_VDXF_KEY.vdxfid, AppEncryptionRequestOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_RESPONSE.toNumber(), DATA_RESPONSE_VDXF_KEY.vdxfid, DataResponseOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_RESPONSE.toNumber(), DATA_RESPONSE_VDXF_KEY.vdxfid, DataPacketResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_USER_DATA_REQUEST.toNumber(), USER_DATA_REQUEST_VDXF_KEY.vdxfid, UserDataRequestOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET.toNumber(), USER_SPECIFIC_DATA_PACKET_VDXF_KEY.vdxfid, UserSpecificDataPacketDetailsOrdinalVdxfObject, false); } \ No newline at end of file diff --git a/src/constants/ordinals/types.ts b/src/constants/ordinals/types.ts index adacc2b7..aba70ee9 100644 --- a/src/constants/ordinals/types.ts +++ b/src/constants/ordinals/types.ts @@ -19,7 +19,7 @@ import { VerusPayInvoiceDetails } from "../../vdxf/classes"; import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; -import { DataResponse, DataResponseJson } from "../../vdxf/classes/response/DataResponse"; +import { DataPacketResponse, DataResponseJson } from "../../vdxf/classes/datapacket/DataPacketResponse"; export type OrdinalVdxfObjectReservedData = DataDescriptor | @@ -30,7 +30,7 @@ export type OrdinalVdxfObjectReservedData = LoginResponseDetails | ProvisionIdentityDetails | AppEncryptionRequestDetails | - DataResponse | + DataPacketResponse | UserDataRequestDetails | UserSpecificDataPacketDetails; diff --git a/src/vdxf/classes/response/DataResponse.ts b/src/vdxf/classes/datapacket/DataPacketResponse.ts similarity index 91% rename from src/vdxf/classes/response/DataResponse.ts rename to src/vdxf/classes/datapacket/DataPacketResponse.ts index 34bbfbb3..4ba65f92 100644 --- a/src/vdxf/classes/response/DataResponse.ts +++ b/src/vdxf/classes/datapacket/DataPacketResponse.ts @@ -2,7 +2,7 @@ /** - * DataResponse - Class for providing structured responses to various request types + * DataPacketResponse - Class for providing structured responses to various request types * * This class serves as a universal response mechanism that can be used to reply to multiple * types of requests. It packages response data within a DataDescriptor along with metadata @@ -43,7 +43,6 @@ import { BN } from 'bn.js'; import varint from '../../../utils/varint'; import bufferutils from '../../../utils/bufferutils'; const { BufferReader, BufferWriter } = bufferutils; -import { decodeSaplingAddress, toBech32 } from '../../../utils/sapling'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { fromBase58Check, toBase58Check } from '../../../utils/address'; import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../../../constants/vdxf'; @@ -62,7 +61,7 @@ export interface DataResponseJson { data: DataDescriptorJson; } -export class DataResponse implements SerializableEntity { +export class DataPacketResponse implements SerializableEntity { flags?: BigNumber; requestID?: string; // ID of request, to be referenced in response data: DataDescriptor; @@ -86,11 +85,11 @@ export class DataResponse implements SerializableEntity { } containsRequestID() { - return !!(this.flags.and(DataResponse.RESPONSE_CONTAINS_REQUEST_ID).toNumber()); + return !!(this.flags.and(DataPacketResponse.RESPONSE_CONTAINS_REQUEST_ID).toNumber()); } toggleContainsRequestID() { - this.flags = this.flags.xor(DataResponse.RESPONSE_CONTAINS_REQUEST_ID); + this.flags = this.flags.xor(DataPacketResponse.RESPONSE_CONTAINS_REQUEST_ID); } toSha256() { @@ -149,8 +148,8 @@ export class DataResponse implements SerializableEntity { } } - static fromJson(json: DataResponseJson): DataResponse { - return new DataResponse({ + static fromJson(json: DataResponseJson): DataPacketResponse { + return new DataPacketResponse({ flags: new BN(json.flags, 10), requestID: json.requestid, data: DataDescriptor.fromJson(json.data) diff --git a/src/vdxf/classes/ordinals/DataResponseOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.ts similarity index 51% rename from src/vdxf/classes/ordinals/DataResponseOrdinalVdxfObject.ts rename to src/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.ts index 880cf0c7..1092e43f 100644 --- a/src/vdxf/classes/ordinals/DataResponseOrdinalVdxfObject.ts +++ b/src/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.ts @@ -2,14 +2,14 @@ import { VDXF_ORDINAL_DATA_RESPONSE } from "../../../constants/ordinals/ordinals import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { DataResponse, DataResponseJson } from "../response/DataResponse"; +import { DataPacketResponse, DataResponseJson } from "../datapacket/DataPacketResponse"; -export class DataResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: DataResponse; +export class DataPacketResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: DataPacketResponse; constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { - data: new DataResponse() + request: OrdinalVdxfObjectInterfaceTemplate = { + data: new DataPacketResponse() } ) { super( @@ -17,13 +17,13 @@ export class DataResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxf type: VDXF_ORDINAL_DATA_RESPONSE, data: request.data }, - DataResponse + DataPacketResponse ); } - static fromJson(details: OrdinalVdxfObjectJsonTemplate): DataResponseOrdinalVdxfObject { - return new DataResponseOrdinalVdxfObject({ - data: DataResponse.fromJson(details.data) + static fromJson(details: OrdinalVdxfObjectJsonTemplate): DataPacketResponseOrdinalVdxfObject { + return new DataPacketResponseOrdinalVdxfObject({ + data: DataPacketResponse.fromJson(details.data) }) } } \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/index.ts b/src/vdxf/classes/ordinals/index.ts index 5f6c75f6..9f198123 100644 --- a/src/vdxf/classes/ordinals/index.ts +++ b/src/vdxf/classes/ordinals/index.ts @@ -11,7 +11,7 @@ export * from './LoginRequestDetailsOrdinalVdxfObject' export * from './LoginResponseDetailsOrdinalVdxfObject' export * from './AppEncryptionRequestOrdinalVdxfObject' export * from './ProvisionIdentityDetailsOrdinalVdxfObject' -export * from './DataResponseOrdinalVdxfObject' +export * from './DataPacketResponseOrdinalVdxfObject' export * from './UserDataRequestOrdinalVdxfObject' export * from './UserSpecificDataPacketDetailsOrdinalVdxfObject' From d31508f4bda3a20fade3a9047639953950fa9b37 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 21 Nov 2025 14:17:16 +0100 Subject: [PATCH 069/123] Make a number of VerifiableSignatureDataInterface parameters optional and fix bug in VerifiableSignatureData where version was being set to flags in constructor --- dist/vdxf/classes/VerifiableSignatureData.d.ts | 10 +++++----- dist/vdxf/classes/VerifiableSignatureData.js | 2 +- src/vdxf/classes/VerifiableSignatureData.ts | 12 ++++++------ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/dist/vdxf/classes/VerifiableSignatureData.d.ts b/dist/vdxf/classes/VerifiableSignatureData.d.ts index ae026575..205a4006 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.d.ts +++ b/dist/vdxf/classes/VerifiableSignatureData.d.ts @@ -15,16 +15,16 @@ export interface VerifiableSignatureDataJson { signature: string; } export interface VerifiableSignatureDataInterface { - version: BigNumber; - flags: BigNumber; - hashType: BigNumber; - systemID: CompactIdAddressObject; + version?: BigNumber; + flags?: BigNumber; + hashType?: BigNumber; + systemID?: CompactIdAddressObject; identityID: CompactIdAddressObject; vdxfKeys?: Array; vdxfKeyNames?: Array; boundHashes?: Array; statements?: Array; - signatureAsVch: Buffer; + signatureAsVch?: Buffer; } export declare class VerifiableSignatureData implements SerializableEntity { version: BigNumber; diff --git a/dist/vdxf/classes/VerifiableSignatureData.js b/dist/vdxf/classes/VerifiableSignatureData.js index d7dce1d5..44fe732d 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.js +++ b/dist/vdxf/classes/VerifiableSignatureData.js @@ -16,7 +16,7 @@ const varint_1 = require("../../utils/varint"); const pbaas_2 = require("../../pbaas"); class VerifiableSignatureData { constructor(data) { - this.version = data && data.flags ? data.flags : new bn_js_1.BN(0); + this.version = data && data.version ? data.version : new bn_js_1.BN(0); this.flags = data && data.flags ? data.flags : new bn_js_1.BN(0); this.systemID = data && data.systemID ? data.systemID : new CompactIdAddressObject_1.CompactIdAddressObject({ type: CompactIdAddressObject_1.CompactIdAddressObject.IS_FQN, address: pbaas_1.DEFAULT_VERUS_CHAINNAME }); this.hashType = data && data.hashType ? data.hashType : pbaas_1.HASH_TYPE_SHA256; diff --git a/src/vdxf/classes/VerifiableSignatureData.ts b/src/vdxf/classes/VerifiableSignatureData.ts index 31397fa0..ce0778df 100644 --- a/src/vdxf/classes/VerifiableSignatureData.ts +++ b/src/vdxf/classes/VerifiableSignatureData.ts @@ -28,16 +28,16 @@ export interface VerifiableSignatureDataJson { } export interface VerifiableSignatureDataInterface { - version: BigNumber; - flags: BigNumber; - hashType: BigNumber; - systemID: CompactIdAddressObject; + version?: BigNumber; + flags?: BigNumber; + hashType?: BigNumber; + systemID?: CompactIdAddressObject; identityID: CompactIdAddressObject; vdxfKeys?: Array; vdxfKeyNames?: Array; boundHashes?: Array; statements?: Array; - signatureAsVch: Buffer; + signatureAsVch?: Buffer; } export class VerifiableSignatureData implements SerializableEntity { @@ -64,7 +64,7 @@ export class VerifiableSignatureData implements SerializableEntity { static FLAG_HAS_STATEMENTS = new BN(8); constructor(data?: VerifiableSignatureDataInterface) { - this.version = data && data.flags ? data.flags : new BN(0); + this.version = data && data.version ? data.version : new BN(0); this.flags = data && data.flags ? data.flags : new BN(0); this.systemID = data && data.systemID ? data.systemID : new CompactIdAddressObject({ type: CompactIdAddressObject.IS_FQN, address: DEFAULT_VERUS_CHAINNAME }); this.hashType = data && data.hashType ? data.hashType : HASH_TYPE_SHA256; From 09d64106c7f496a13d426a30c16fdf95a41b6b74 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 21 Nov 2025 16:21:47 +0100 Subject: [PATCH 070/123] Change GenericRequest deeplink URL to new format --- dist/constants/deeplink.d.ts | 2 ++ dist/constants/deeplink.js | 6 ++++ dist/vdxf/classes/envelope/GenericEnvelope.js | 4 +-- dist/vdxf/classes/request/GenericRequest.js | 14 ++++++-- .../classes/response/GenericResponse.d.ts | 2 -- dist/vdxf/classes/response/GenericResponse.js | 13 ------- src/__tests__/vdxf/genericrequest.test.ts | 9 ++--- src/__tests__/vdxf/genericresponse.test.ts | 34 ++----------------- src/constants/deeplink.ts | 4 +++ src/vdxf/classes/envelope/GenericEnvelope.ts | 5 ++- src/vdxf/classes/request/GenericRequest.ts | 14 ++++++-- src/vdxf/classes/response/GenericResponse.ts | 17 +--------- 12 files changed, 48 insertions(+), 76 deletions(-) create mode 100644 dist/constants/deeplink.d.ts create mode 100644 dist/constants/deeplink.js create mode 100644 src/constants/deeplink.ts diff --git a/dist/constants/deeplink.d.ts b/dist/constants/deeplink.d.ts new file mode 100644 index 00000000..9de6f765 --- /dev/null +++ b/dist/constants/deeplink.d.ts @@ -0,0 +1,2 @@ +export declare const DEEPLINK_PROTOCOL_URL_STRING = "verus"; +export declare const DEEPLINK_PROTOCOL_URL_CURRENT_VERSION: import("bn.js"); diff --git a/dist/constants/deeplink.js b/dist/constants/deeplink.js new file mode 100644 index 00000000..757276fc --- /dev/null +++ b/dist/constants/deeplink.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DEEPLINK_PROTOCOL_URL_CURRENT_VERSION = exports.DEEPLINK_PROTOCOL_URL_STRING = void 0; +const bn_js_1 = require("bn.js"); +exports.DEEPLINK_PROTOCOL_URL_STRING = "verus"; +exports.DEEPLINK_PROTOCOL_URL_CURRENT_VERSION = new bn_js_1.BN(1, 10); diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.js b/dist/vdxf/classes/envelope/GenericEnvelope.js index f6687f51..8bb843af 100644 --- a/dist/vdxf/classes/envelope/GenericEnvelope.js +++ b/dist/vdxf/classes/envelope/GenericEnvelope.js @@ -1,7 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GenericEnvelope = void 0; -const __1 = require("../../"); const bufferutils_1 = require("../../../utils/bufferutils"); const base64url_1 = require("base64url"); const bn_js_1 = require("bn.js"); @@ -9,6 +8,7 @@ const OrdinalVdxfObject_1 = require("../ordinals/OrdinalVdxfObject"); const varuint_1 = require("../../../utils/varuint"); const crypto_1 = require("crypto"); const VerifiableSignatureData_1 = require("../VerifiableSignatureData"); +const deeplink_1 = require("../../../constants/deeplink"); class GenericEnvelope { constructor(envelope = { details: [], @@ -187,7 +187,7 @@ class GenericEnvelope { return base64url_1.default.encode(this.toBuffer()); } toWalletDeeplinkUri() { - return `${__1.WALLET_VDXF_KEY.vdxfid.toLowerCase()}:/${__1.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY.vdxfid}/${this.toString()}`; + return `${deeplink_1.DEEPLINK_PROTOCOL_URL_STRING}://${deeplink_1.DEEPLINK_PROTOCOL_URL_CURRENT_VERSION.toString()}/${this.toString()}`; } toQrString() { return this.toString(); diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js index e56183ce..3a3f7212 100644 --- a/dist/vdxf/classes/request/GenericRequest.js +++ b/dist/vdxf/classes/request/GenericRequest.js @@ -5,8 +5,8 @@ const bn_js_1 = require("bn.js"); const GenericEnvelope_1 = require("../envelope/GenericEnvelope"); const SaplingPaymentAddress_1 = require("../../../pbaas/SaplingPaymentAddress"); const bufferutils_1 = require("../../../utils/bufferutils"); -const keys_1 = require("../../keys"); const base64url_1 = require("base64url"); +const deeplink_1 = require("../../../constants/deeplink"); class GenericRequest extends GenericEnvelope_1.GenericEnvelope { constructor(envelope = { details: [], @@ -62,9 +62,17 @@ class GenericRequest extends GenericEnvelope_1.GenericEnvelope { return parentJson; } static fromWalletDeeplinkUri(uri) { - const split = uri.split(`${keys_1.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY.vdxfid}/`); + const urlProtocol = `${deeplink_1.DEEPLINK_PROTOCOL_URL_STRING}:`; + const split = uri.split(`/`); + if (split.length !== 4 || split.some(x => x == null)) + throw new Error("Unrecognized URL format"); + if (split[0] !== urlProtocol) + throw new Error("Unrecognized URL protocol"); + else if (isNaN(Number(split[2])) || !(new bn_js_1.BN(split[2], 10).eq(deeplink_1.DEEPLINK_PROTOCOL_URL_CURRENT_VERSION))) { + throw new Error("Unrecognized or incompatible generic request protocol version"); + } const inv = new GenericRequest(); - inv.fromBuffer(base64url_1.default.toBuffer(split[1]), 0); + inv.fromBuffer(base64url_1.default.toBuffer(split[3]), 0); return inv; } static fromQrString(qrstring) { diff --git a/dist/vdxf/classes/response/GenericResponse.d.ts b/dist/vdxf/classes/response/GenericResponse.d.ts index 1164261c..73950c88 100644 --- a/dist/vdxf/classes/response/GenericResponse.d.ts +++ b/dist/vdxf/classes/response/GenericResponse.d.ts @@ -30,6 +30,4 @@ export declare class GenericResponse extends GenericEnvelope implements Serializ protected toBufferOptionalSig(includeSig?: boolean): Buffer; fromBuffer(buffer: Buffer, offset?: number): number; toJson(): GenericResponseJson; - static fromWalletDeeplinkUri(uri: string): GenericResponse; - static fromQrString(qrstring: string): GenericResponse; } diff --git a/dist/vdxf/classes/response/GenericResponse.js b/dist/vdxf/classes/response/GenericResponse.js index 91474f93..05d57843 100644 --- a/dist/vdxf/classes/response/GenericResponse.js +++ b/dist/vdxf/classes/response/GenericResponse.js @@ -6,8 +6,6 @@ const GenericEnvelope_1 = require("../envelope/GenericEnvelope"); const bufferutils_1 = require("../../../utils/bufferutils"); const DataDescriptor_1 = require("../../../pbaas/DataDescriptor"); const varuint_1 = require("../../../utils/varuint"); -const keys_1 = require("../../keys"); -const base64url_1 = require("base64url"); class GenericResponse extends GenericEnvelope_1.GenericEnvelope { constructor(envelope = { details: [], @@ -71,17 +69,6 @@ class GenericResponse extends GenericEnvelope_1.GenericEnvelope { } return parentJson; } - static fromWalletDeeplinkUri(uri) { - const split = uri.split(`${keys_1.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY.vdxfid}/`); - const inv = new GenericResponse(); - inv.fromBuffer(base64url_1.default.toBuffer(split[1]), 0); - return inv; - } - static fromQrString(qrstring) { - const inv = new GenericResponse(); - inv.fromBuffer(base64url_1.default.toBuffer(qrstring), 0); - return inv; - } } exports.GenericResponse = GenericResponse; GenericResponse.VERSION_CURRENT = new bn_js_1.BN(1, 10); diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts index 04894ce4..bf7be49c 100644 --- a/src/__tests__/vdxf/genericrequest.test.ts +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -1,11 +1,12 @@ import { BN } from 'bn.js'; import base64url from 'base64url'; import { DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256 } from '../../constants/pbaas'; -import { WALLET_VDXF_KEY, GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY, GenericRequest, SaplingPaymentAddress } from '../../'; +import { GenericRequest, SaplingPaymentAddress } from '../../'; import { createHash } from 'crypto'; import { VerifiableSignatureData } from '../../vdxf/classes/VerifiableSignatureData'; import { CompactIdAddressObject } from '../../vdxf/classes/CompactIdAddressObject'; import { GeneralTypeOrdinalVdxfObject } from '../../vdxf/classes/ordinals'; +import { DEEPLINK_PROTOCOL_URL_CURRENT_VERSION, DEEPLINK_PROTOCOL_URL_STRING } from '../../constants/deeplink'; describe('GenericRequest — buffer / URI / QR operations', () => { function roundTripBuffer(req: GenericRequest): GenericRequest { @@ -70,7 +71,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { systemID: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), hashType: HASH_TYPE_SHA256, identityID: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), - signatureAsVch: Buffer.from('abcd', 'hex'), + signatureAsVch: Buffer.from('AgX3RgAAAUEgHAVIHuui1Sc9oLxLbglKvmrv47JJLiM0/RBQwzYL1dlamI/2o9qBc93d79laLXWMhQomqZ4U3Mlr3ueuwl4JFA==', 'base64'), vdxfKeys: [DEFAULT_VERUS_CHAINID, DEFAULT_VERUS_CHAINID], vdxfKeyNames: ["VRSC", "VRSC"], boundHashes: [Buffer.from('abcd', 'hex')], @@ -97,6 +98,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { const round = roundTripBuffer(req); expect(round.signature).toBeDefined(); + expect(round.signature?.signatureAsVch.toString('base64')).toBe(sig.signatureAsVch.toString('base64')) expect(round.createdAt?.toString()).toEqual(createdAt.toString()); expect(round.hasEncryptResponseToAddress()).toBe(true) expect(round.encryptResponseToAddress?.toAddressString()).toBe(saplingAddr) @@ -127,8 +129,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { const req = new GenericRequest({ details: [detail] }); const uri = req.toWalletDeeplinkUri(); - expect(uri).toContain(WALLET_VDXF_KEY.vdxfid.toLowerCase()); - expect(uri).toContain(`${GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY.vdxfid}/`); + expect(uri).toContain(`${DEEPLINK_PROTOCOL_URL_STRING}://${DEEPLINK_PROTOCOL_URL_CURRENT_VERSION}/`); const parsed = GenericRequest.fromWalletDeeplinkUri(uri); expect(parsed.version.toString()).toEqual(req.version.toString()); diff --git a/src/__tests__/vdxf/genericresponse.test.ts b/src/__tests__/vdxf/genericresponse.test.ts index 6fc03d30..ec014278 100644 --- a/src/__tests__/vdxf/genericresponse.test.ts +++ b/src/__tests__/vdxf/genericresponse.test.ts @@ -1,11 +1,12 @@ import { BN } from 'bn.js'; import base64url from 'base64url'; import { DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256 } from '../../constants/pbaas'; -import { WALLET_VDXF_KEY, GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY, GenericResponse, SaplingPaymentAddress } from '../../'; +import { GenericResponse } from '../../'; import { createHash } from 'crypto'; import { VerifiableSignatureData } from '../../vdxf/classes/VerifiableSignatureData'; import { CompactIdAddressObject } from '../../vdxf/classes/CompactIdAddressObject'; import { GeneralTypeOrdinalVdxfObject } from '../../vdxf/classes/ordinals'; +import { DEEPLINK_PROTOCOL_URL_CURRENT_VERSION, DEEPLINK_PROTOCOL_URL_STRING } from '../../constants/deeplink'; describe('GenericResponse — buffer / URI / QR operations', () => { function roundTripBuffer(req: GenericResponse): GenericResponse { @@ -13,7 +14,7 @@ describe('GenericResponse — buffer / URI / QR operations', () => { const clone = new GenericResponse(); clone.fromBuffer(buf, 0); - return GenericResponse.fromQrString((GenericResponse.fromWalletDeeplinkUri(clone.toWalletDeeplinkUri())).toQrString()); + return clone; } function rawDetailsSha256(req: GenericResponse): Buffer { @@ -122,35 +123,6 @@ describe('GenericResponse — buffer / URI / QR operations', () => { expect(parsed.details[0].toJson()).toEqual(detail.toJson()); }); - it('deeplink URI round trip', () => { - const detail = new GeneralTypeOrdinalVdxfObject({ - data: Buffer.from('face', 'hex'), - key: DEFAULT_VERUS_CHAINID - }); - const req = new GenericResponse({ details: [detail] }); - const uri = req.toWalletDeeplinkUri(); - - expect(uri).toContain(WALLET_VDXF_KEY.vdxfid.toLowerCase()); - expect(uri).toContain(`${GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY.vdxfid}/`); - - const parsed = GenericResponse.fromWalletDeeplinkUri(uri); - expect(parsed.version.toString()).toEqual(req.version.toString()); - expect(parsed.details[0].toJson()).toEqual(detail.toJson()); - expect(parsed.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); - }); - - it('fromQrString should parse correctly', () => { - const detail = new GeneralTypeOrdinalVdxfObject({ - data: Buffer.from('bead', 'hex'), - key: DEFAULT_VERUS_CHAINID - }); - const req = new GenericResponse({ details: [detail] }); - const qr = req.toQrString(); - const parsed = GenericResponse.fromQrString(qr); - expect(parsed.details[0].toJson()).toEqual(detail.toJson()); - expect(parsed.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); - }); - it('fromBuffer with empty buffer should throw', () => { const empty = Buffer.alloc(0); const req = new GenericResponse(); diff --git a/src/constants/deeplink.ts b/src/constants/deeplink.ts new file mode 100644 index 00000000..7ce5d20a --- /dev/null +++ b/src/constants/deeplink.ts @@ -0,0 +1,4 @@ +import { BN } from "bn.js" + +export const DEEPLINK_PROTOCOL_URL_STRING = "verus"; +export const DEEPLINK_PROTOCOL_URL_CURRENT_VERSION = new BN(1, 10); \ No newline at end of file diff --git a/src/vdxf/classes/envelope/GenericEnvelope.ts b/src/vdxf/classes/envelope/GenericEnvelope.ts index 51cfa199..adeb7380 100644 --- a/src/vdxf/classes/envelope/GenericEnvelope.ts +++ b/src/vdxf/classes/envelope/GenericEnvelope.ts @@ -11,6 +11,7 @@ import varuint from "../../../utils/varuint"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import { createHash } from "crypto"; import { VerifiableSignatureData, VerifiableSignatureDataJson } from "../VerifiableSignatureData"; +import { DEEPLINK_PROTOCOL_URL_CURRENT_VERSION, DEEPLINK_PROTOCOL_URL_STRING } from "../../../constants/deeplink"; export interface GenericEnvelopeInterface { version?: BigNumber; @@ -275,9 +276,7 @@ export class GenericEnvelope implements SerializableEntity { } toWalletDeeplinkUri(): string { - return `${WALLET_VDXF_KEY.vdxfid.toLowerCase()}:/${ - GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY.vdxfid - }/${this.toString()}`; + return `${DEEPLINK_PROTOCOL_URL_STRING}://${DEEPLINK_PROTOCOL_URL_CURRENT_VERSION.toString()}/${this.toString()}`; } toQrString(): string { diff --git a/src/vdxf/classes/request/GenericRequest.ts b/src/vdxf/classes/request/GenericRequest.ts index f2090c13..e17f1e81 100644 --- a/src/vdxf/classes/request/GenericRequest.ts +++ b/src/vdxf/classes/request/GenericRequest.ts @@ -5,6 +5,7 @@ import { SaplingPaymentAddress } from '../../../pbaas/SaplingPaymentAddress'; import bufferutils from '../../../utils/bufferutils'; import { GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY } from '../../keys'; import base64url from 'base64url'; +import { DEEPLINK_PROTOCOL_URL_CURRENT_VERSION, DEEPLINK_PROTOCOL_URL_STRING } from '../../../constants/deeplink'; export type GenericRequestJson = GenericEnvelopeJson & { encryptresponsetoaddress?: string; @@ -109,10 +110,19 @@ export class GenericRequest extends GenericEnvelope implements SerializableEntit } static fromWalletDeeplinkUri(uri: string): GenericRequest { - const split = uri.split(`${GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY.vdxfid}/`); + const urlProtocol = `${DEEPLINK_PROTOCOL_URL_STRING}:`; + + const split = uri.split(`/`); + + if (split.length !== 4 || split.some(x => x == null)) throw new Error("Unrecognized URL format"); + + if (split[0] !== urlProtocol) throw new Error("Unrecognized URL protocol"); + else if (isNaN(Number(split[2])) || !(new BN(split[2], 10).eq(DEEPLINK_PROTOCOL_URL_CURRENT_VERSION))) { + throw new Error("Unrecognized or incompatible generic request protocol version") + } const inv = new GenericRequest(); - inv.fromBuffer(base64url.toBuffer(split[1]), 0); + inv.fromBuffer(base64url.toBuffer(split[3]), 0); return inv; } diff --git a/src/vdxf/classes/response/GenericResponse.ts b/src/vdxf/classes/response/GenericResponse.ts index f4fdb677..743f68d7 100644 --- a/src/vdxf/classes/response/GenericResponse.ts +++ b/src/vdxf/classes/response/GenericResponse.ts @@ -7,6 +7,7 @@ import { EHashTypes } from '../../../pbaas/DataDescriptor'; import varuint from '../../../utils/varuint'; import { GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY } from '../../keys'; import base64url from 'base64url'; +import { DEEPLINK_PROTOCOL_URL_CURRENT_VERSION, DEEPLINK_PROTOCOL_URL_STRING } from '../../../constants/deeplink'; export type GenericResponseJson = GenericEnvelopeJson & { requesthash?: string, @@ -124,20 +125,4 @@ export class GenericResponse extends GenericEnvelope implements SerializableEnti return parentJson; } - - static fromWalletDeeplinkUri(uri: string): GenericResponse { - const split = uri.split(`${GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY.vdxfid}/`); - - const inv = new GenericResponse(); - inv.fromBuffer(base64url.toBuffer(split[1]), 0); - - return inv; - } - - static fromQrString(qrstring: string): GenericResponse { - const inv = new GenericResponse(); - inv.fromBuffer(base64url.toBuffer(qrstring), 0); - - return inv; - } } \ No newline at end of file From eab6596b9d679d4a79844a6f59ece2123d50b6e5 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 21 Nov 2025 16:26:14 +0100 Subject: [PATCH 071/123] Move toWalletDeeplinkUri and toQrString out of GenericEnvelope and into GenericRequest --- dist/vdxf/classes/envelope/GenericEnvelope.d.ts | 2 -- dist/vdxf/classes/envelope/GenericEnvelope.js | 7 ------- dist/vdxf/classes/request/GenericRequest.d.ts | 2 ++ dist/vdxf/classes/request/GenericRequest.js | 6 ++++++ src/vdxf/classes/envelope/GenericEnvelope.ts | 8 -------- src/vdxf/classes/request/GenericRequest.ts | 8 ++++++++ 6 files changed, 16 insertions(+), 17 deletions(-) diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts index 3a5af234..6dfdd3fe 100644 --- a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts +++ b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts @@ -58,7 +58,5 @@ export declare class GenericEnvelope implements SerializableEntity { toBuffer(): Buffer; fromBuffer(buffer: Buffer, offset?: number): number; toString(): string; - toWalletDeeplinkUri(): string; - toQrString(): string; toJson(): GenericEnvelopeJson; } diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.js b/dist/vdxf/classes/envelope/GenericEnvelope.js index 8bb843af..d71a06a3 100644 --- a/dist/vdxf/classes/envelope/GenericEnvelope.js +++ b/dist/vdxf/classes/envelope/GenericEnvelope.js @@ -8,7 +8,6 @@ const OrdinalVdxfObject_1 = require("../ordinals/OrdinalVdxfObject"); const varuint_1 = require("../../../utils/varuint"); const crypto_1 = require("crypto"); const VerifiableSignatureData_1 = require("../VerifiableSignatureData"); -const deeplink_1 = require("../../../constants/deeplink"); class GenericEnvelope { constructor(envelope = { details: [], @@ -186,12 +185,6 @@ class GenericEnvelope { toString() { return base64url_1.default.encode(this.toBuffer()); } - toWalletDeeplinkUri() { - return `${deeplink_1.DEEPLINK_PROTOCOL_URL_STRING}://${deeplink_1.DEEPLINK_PROTOCOL_URL_CURRENT_VERSION.toString()}/${this.toString()}`; - } - toQrString() { - return this.toString(); - } toJson() { const details = []; if (this.details != null) { diff --git a/dist/vdxf/classes/request/GenericRequest.d.ts b/dist/vdxf/classes/request/GenericRequest.d.ts index 1019fef5..6858604f 100644 --- a/dist/vdxf/classes/request/GenericRequest.d.ts +++ b/dist/vdxf/classes/request/GenericRequest.d.ts @@ -29,4 +29,6 @@ export declare class GenericRequest extends GenericEnvelope implements Serializa toJson(): GenericRequestJson; static fromWalletDeeplinkUri(uri: string): GenericRequest; static fromQrString(qrstring: string): GenericRequest; + toWalletDeeplinkUri(): string; + toQrString(): string; } diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js index 3a3f7212..716e5355 100644 --- a/dist/vdxf/classes/request/GenericRequest.js +++ b/dist/vdxf/classes/request/GenericRequest.js @@ -80,6 +80,12 @@ class GenericRequest extends GenericEnvelope_1.GenericEnvelope { inv.fromBuffer(base64url_1.default.toBuffer(qrstring), 0); return inv; } + toWalletDeeplinkUri() { + return `${deeplink_1.DEEPLINK_PROTOCOL_URL_STRING}://${deeplink_1.DEEPLINK_PROTOCOL_URL_CURRENT_VERSION.toString()}/${this.toString()}`; + } + toQrString() { + return this.toString(); + } } exports.GenericRequest = GenericRequest; GenericRequest.VERSION_CURRENT = new bn_js_1.BN(1, 10); diff --git a/src/vdxf/classes/envelope/GenericEnvelope.ts b/src/vdxf/classes/envelope/GenericEnvelope.ts index adeb7380..9960678b 100644 --- a/src/vdxf/classes/envelope/GenericEnvelope.ts +++ b/src/vdxf/classes/envelope/GenericEnvelope.ts @@ -275,14 +275,6 @@ export class GenericEnvelope implements SerializableEntity { return base64url.encode(this.toBuffer()); } - toWalletDeeplinkUri(): string { - return `${DEEPLINK_PROTOCOL_URL_STRING}://${DEEPLINK_PROTOCOL_URL_CURRENT_VERSION.toString()}/${this.toString()}`; - } - - toQrString(): string { - return this.toString(); - } - toJson(): GenericEnvelopeJson { const details = []; diff --git a/src/vdxf/classes/request/GenericRequest.ts b/src/vdxf/classes/request/GenericRequest.ts index e17f1e81..7a8d54d4 100644 --- a/src/vdxf/classes/request/GenericRequest.ts +++ b/src/vdxf/classes/request/GenericRequest.ts @@ -133,4 +133,12 @@ export class GenericRequest extends GenericEnvelope implements SerializableEntit return inv; } + + toWalletDeeplinkUri(): string { + return `${DEEPLINK_PROTOCOL_URL_STRING}://${DEEPLINK_PROTOCOL_URL_CURRENT_VERSION.toString()}/${this.toString()}`; + } + + toQrString(): string { + return this.toString(); + } } \ No newline at end of file From c2502931a1fda36bd3d421a0da58259449168887 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 21 Nov 2025 17:45:09 +0100 Subject: [PATCH 072/123] Add signatureVersion to VerifiableSignatureData --- .../vdxf/classes/VerifiableSignatureData.d.ts | 3 ++ dist/vdxf/classes/VerifiableSignatureData.js | 16 +++++++- src/__tests__/vdxf/genericrequest.test.ts | 38 ++++++++++++++++++ src/__tests__/vdxf/genericresponse.test.ts | 40 +++++++++++++++++++ src/vdxf/classes/VerifiableSignatureData.ts | 22 ++++++++-- 5 files changed, 114 insertions(+), 5 deletions(-) diff --git a/dist/vdxf/classes/VerifiableSignatureData.d.ts b/dist/vdxf/classes/VerifiableSignatureData.d.ts index 205a4006..64a25a66 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.d.ts +++ b/dist/vdxf/classes/VerifiableSignatureData.d.ts @@ -5,6 +5,7 @@ import { SignatureData } from '../../pbaas'; export interface VerifiableSignatureDataJson { version: number; flags: number; + signatureversion: number; hashtype: number; systemid: CompactIdAddressObjectJson; identityid: CompactIdAddressObjectJson; @@ -17,6 +18,7 @@ export interface VerifiableSignatureDataJson { export interface VerifiableSignatureDataInterface { version?: BigNumber; flags?: BigNumber; + signatureVersion?: BigNumber; hashType?: BigNumber; systemID?: CompactIdAddressObject; identityID: CompactIdAddressObject; @@ -29,6 +31,7 @@ export interface VerifiableSignatureDataInterface { export declare class VerifiableSignatureData implements SerializableEntity { version: BigNumber; flags: BigNumber; + signatureVersion: BigNumber; hashType: BigNumber; identityID: CompactIdAddressObject; systemID: CompactIdAddressObject; diff --git a/dist/vdxf/classes/VerifiableSignatureData.js b/dist/vdxf/classes/VerifiableSignatureData.js index 44fe732d..a2a28899 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.js +++ b/dist/vdxf/classes/VerifiableSignatureData.js @@ -18,6 +18,7 @@ class VerifiableSignatureData { constructor(data) { this.version = data && data.version ? data.version : new bn_js_1.BN(0); this.flags = data && data.flags ? data.flags : new bn_js_1.BN(0); + this.signatureVersion = data && data.signatureVersion ? data.signatureVersion : new bn_js_1.BN(2, 10); this.systemID = data && data.systemID ? data.systemID : new CompactIdAddressObject_1.CompactIdAddressObject({ type: CompactIdAddressObject_1.CompactIdAddressObject.IS_FQN, address: pbaas_1.DEFAULT_VERUS_CHAINNAME }); this.hashType = data && data.hashType ? data.hashType : pbaas_1.HASH_TYPE_SHA256; this.identityID = data ? data.identityID : undefined; @@ -88,6 +89,7 @@ class VerifiableSignatureData { let byteLength = 0; byteLength += varint_1.default.encodingLength(this.version); byteLength += varuint_1.default.encodingLength(this.flags.toNumber()); + byteLength += varuint_1.default.encodingLength(this.signatureVersion.toNumber()); byteLength += varuint_1.default.encodingLength(this.hashType.toNumber()); byteLength += this.systemID.getByteLength(); byteLength += this.identityID.getByteLength(); @@ -122,6 +124,7 @@ class VerifiableSignatureData { const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); bufferWriter.writeVarInt(this.version); bufferWriter.writeCompactSize(this.flags.toNumber()); + bufferWriter.writeCompactSize(this.signatureVersion.toNumber()); bufferWriter.writeCompactSize(this.hashType.toNumber()); bufferWriter.writeSlice(this.systemID.toBuffer()); bufferWriter.writeSlice(this.identityID.toBuffer()); @@ -144,6 +147,7 @@ class VerifiableSignatureData { const bufferReader = new BufferReader(buffer, offset); this.version = bufferReader.readVarInt(); this.flags = new bn_js_1.BN(bufferReader.readCompactSize()); + this.signatureVersion = new bn_js_1.BN(bufferReader.readCompactSize()); this.hashType = new bn_js_1.BN(bufferReader.readCompactSize()); this.systemID = new CompactIdAddressObject_1.CompactIdAddressObject(); this.identityID = new CompactIdAddressObject_1.CompactIdAddressObject(); @@ -174,7 +178,10 @@ class VerifiableSignatureData { if (!this.hashType.eq(new bn_js_1.BN(DataDescriptor_1.EHashTypes.HASH_SHA256))) { throw new Error("Invalid signature type for identity hash"); } - if (this.version.eq(new bn_js_1.BN(1))) { + if (this.signatureVersion.eq(new bn_js_1.BN(0))) { + throw new Error("Invalid sig data version"); + } + else if (this.signatureVersion.eq(new bn_js_1.BN(1))) { return createHash("sha256") .update(vdxf_2.VERUS_DATA_SIGNATURE_PREFIX) .update((0, address_1.fromBase58Check)(this.systemID.toIAddress()).hash) @@ -183,7 +190,7 @@ class VerifiableSignatureData { .update(sigHash) .digest(); } - else { + else if (this.signatureVersion.eq(new bn_js_1.BN(2))) { return createHash("sha256") .update((0, address_1.fromBase58Check)(this.systemID.toIAddress()).hash) .update(heightBuffer) @@ -192,6 +199,9 @@ class VerifiableSignatureData { .update(sigHash) .digest(); } + else { + throw new Error("Unrecognized sig data version"); + } } toSignatureData(sigHash) { return new pbaas_2.SignatureData({ @@ -213,6 +223,7 @@ class VerifiableSignatureData { return { version: this.version.toNumber(), flags: flags.toNumber(), + signatureversion: this.signatureVersion.toNumber(), hashtype: this.hashType.toNumber(), systemid: this.systemID.toJson(), identityid: this.identityID.toJson(), @@ -228,6 +239,7 @@ class VerifiableSignatureData { const instance = new VerifiableSignatureData(); instance.version = new bn_js_1.BN(json.version); instance.flags = new bn_js_1.BN(json.flags); + instance.signatureVersion = new bn_js_1.BN(json.signatureversion); instance.hashType = new bn_js_1.BN(json.hashtype); instance.systemID = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(json.systemid); instance.identityID = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(json.identityid); diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts index bf7be49c..32357099 100644 --- a/src/__tests__/vdxf/genericrequest.test.ts +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -107,6 +107,44 @@ describe('GenericRequest — buffer / URI / QR operations', () => { expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); }); + it('round trips with createdAt, and valid signature that can be hashed', () => { + const sig = new VerifiableSignatureData({ + systemID: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + identityID: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + signatureAsVch: Buffer.from('AgX3RgAAAUEgHAVIHuui1Sc9oLxLbglKvmrv47JJLiM0/RBQwzYL1dlamI/2o9qBc93d79laLXWMhQomqZ4U3Mlr3ueuwl4JFA==', 'base64'), + }); + + const detail = new GeneralTypeOrdinalVdxfObject({ + data: Buffer.from('abcd', 'hex'), + key: DEFAULT_VERUS_CHAINID + }); + + const createdAt = new BN(9999); + const saplingAddr = "zs1wczplx4kegw32h8g0f7xwl57p5tvnprwdmnzmdnsw50chcl26f7tws92wk2ap03ykaq6jyyztfa" + + const req = new GenericRequest({ + details: [detail], + signature: sig, + createdAt, + encryptResponseToAddress: SaplingPaymentAddress.fromAddressString(saplingAddr) + }); + + expect(req.isSigned()).toBe(true); + expect(req.hasCreatedAt()).toBe(true); + expect(req.getDetailsHash(1000)).toBeDefined(); + expect(req.signature?.signatureVersion.toString()).toBe("2"); + + const round = roundTripBuffer(req); + expect(round.signature).toBeDefined(); + expect(round.signature?.signatureAsVch.toString('base64')).toBe(sig.signatureAsVch.toString('base64')) + expect(round.createdAt?.toString()).toEqual(createdAt.toString()); + expect(round.hasEncryptResponseToAddress()).toBe(true) + expect(round.encryptResponseToAddress?.toAddressString()).toBe(saplingAddr) + const d2 = round.getDetails(0); + expect((d2 as GeneralTypeOrdinalVdxfObject).data).toEqual(detail.data); + expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); + }); + it('toString / fromQrString consistency', () => { const detail = new GeneralTypeOrdinalVdxfObject({ data: Buffer.from('feed', 'hex'), diff --git a/src/__tests__/vdxf/genericresponse.test.ts b/src/__tests__/vdxf/genericresponse.test.ts index ec014278..a83310e2 100644 --- a/src/__tests__/vdxf/genericresponse.test.ts +++ b/src/__tests__/vdxf/genericresponse.test.ts @@ -108,6 +108,46 @@ describe('GenericResponse — buffer / URI / QR operations', () => { expect((d2 as GeneralTypeOrdinalVdxfObject).data).toEqual(detail.data); expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); }); + + it('round trips with createdAt, and valid signature that can be hashed', () => { + const sig = new VerifiableSignatureData({ + systemID: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + identityID: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + signatureAsVch: Buffer.from('AgX3RgAAAUEgHAVIHuui1Sc9oLxLbglKvmrv47JJLiM0/RBQwzYL1dlamI/2o9qBc93d79laLXWMhQomqZ4U3Mlr3ueuwl4JFA==', 'base64'), + }); + + const detail = new GeneralTypeOrdinalVdxfObject({ + data: Buffer.from('abcd', 'hex'), + key: DEFAULT_VERUS_CHAINID + }); + + const createdAt = new BN(9999); + const requestHash = Buffer.from('abcdabcdabcdabcdabcdabcdabcdabcdabcdabcd', 'hex'); + const requestHashType = HASH_TYPE_SHA256; + + const req = new GenericResponse({ + details: [detail], + signature: sig, + createdAt, + requestHash: requestHash, + requestHashType: requestHashType + }); + + expect(req.isSigned()).toBe(true); + expect(req.hasCreatedAt()).toBe(true); + expect(req.getDetailsHash(1000)).toBeDefined(); + expect(req.signature?.signatureVersion.toString()).toBe("2"); + + const round = roundTripBuffer(req); + expect(round.signature).toBeDefined(); + expect(round.createdAt?.toString()).toEqual(createdAt.toString()); + expect(round.hasRequestHash()).toBe(true) + expect(round.requestHash?.toString('hex')).toBe(requestHash.toString('hex')) + expect(round.requestHashType?.toNumber()).toBe(requestHashType.toNumber()) + const d2 = round.getDetails(0); + expect((d2 as GeneralTypeOrdinalVdxfObject).data).toEqual(detail.data); + expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); + }); it('toString / fromQrString consistency', () => { const detail = new GeneralTypeOrdinalVdxfObject({ diff --git a/src/vdxf/classes/VerifiableSignatureData.ts b/src/vdxf/classes/VerifiableSignatureData.ts index ce0778df..1d82ef64 100644 --- a/src/vdxf/classes/VerifiableSignatureData.ts +++ b/src/vdxf/classes/VerifiableSignatureData.ts @@ -17,6 +17,7 @@ import { SignatureData } from '../../pbaas'; export interface VerifiableSignatureDataJson { version: number; flags: number; + signatureversion: number; hashtype: number; systemid: CompactIdAddressObjectJson; identityid: CompactIdAddressObjectJson; @@ -30,6 +31,7 @@ export interface VerifiableSignatureDataJson { export interface VerifiableSignatureDataInterface { version?: BigNumber; flags?: BigNumber; + signatureVersion?: BigNumber; hashType?: BigNumber; systemID?: CompactIdAddressObject; identityID: CompactIdAddressObject; @@ -43,6 +45,7 @@ export interface VerifiableSignatureDataInterface { export class VerifiableSignatureData implements SerializableEntity { version: BigNumber; flags: BigNumber; + signatureVersion: BigNumber; hashType: BigNumber; identityID: CompactIdAddressObject; systemID: CompactIdAddressObject; @@ -66,6 +69,7 @@ export class VerifiableSignatureData implements SerializableEntity { constructor(data?: VerifiableSignatureDataInterface) { this.version = data && data.version ? data.version : new BN(0); this.flags = data && data.flags ? data.flags : new BN(0); + this.signatureVersion = data && data.signatureVersion ? data.signatureVersion : new BN(2, 10); this.systemID = data && data.systemID ? data.systemID : new CompactIdAddressObject({ type: CompactIdAddressObject.IS_FQN, address: DEFAULT_VERUS_CHAINNAME }); this.hashType = data && data.hashType ? data.hashType : HASH_TYPE_SHA256; this.identityID = data ? data.identityID : undefined; @@ -147,6 +151,8 @@ export class VerifiableSignatureData implements SerializableEntity { byteLength += varuint.encodingLength(this.flags.toNumber()); + byteLength += varuint.encodingLength(this.signatureVersion.toNumber()); + byteLength += varuint.encodingLength(this.hashType.toNumber()); byteLength += this.systemID.getByteLength(); @@ -196,6 +202,8 @@ export class VerifiableSignatureData implements SerializableEntity { bufferWriter.writeCompactSize(this.flags.toNumber()); + bufferWriter.writeCompactSize(this.signatureVersion.toNumber()); + bufferWriter.writeCompactSize(this.hashType.toNumber()); bufferWriter.writeSlice(this.systemID.toBuffer()); @@ -229,6 +237,8 @@ export class VerifiableSignatureData implements SerializableEntity { this.flags = new BN(bufferReader.readCompactSize()); + this.signatureVersion = new BN(bufferReader.readCompactSize()); + this.hashType = new BN(bufferReader.readCompactSize()); this.systemID = new CompactIdAddressObject(); @@ -271,7 +281,9 @@ export class VerifiableSignatureData implements SerializableEntity { throw new Error("Invalid signature type for identity hash"); } - if (this.version.eq(new BN(1))) { + if (this.signatureVersion.eq(new BN(0))) { + throw new Error("Invalid sig data version") + } else if (this.signatureVersion.eq(new BN(1))) { return createHash("sha256") .update(VERUS_DATA_SIGNATURE_PREFIX) .update(fromBase58Check(this.systemID.toIAddress()).hash) @@ -279,7 +291,7 @@ export class VerifiableSignatureData implements SerializableEntity { .update(fromBase58Check(this.identityID.toIAddress()).hash) .update(sigHash) .digest(); - } else { + } else if (this.signatureVersion.eq(new BN(2))) { return createHash("sha256") .update(fromBase58Check(this.systemID.toIAddress()).hash) .update(heightBuffer) @@ -287,6 +299,8 @@ export class VerifiableSignatureData implements SerializableEntity { .update(VERUS_DATA_SIGNATURE_PREFIX) .update(sigHash) .digest(); + } else { + throw new Error("Unrecognized sig data version") } } @@ -306,11 +320,12 @@ export class VerifiableSignatureData implements SerializableEntity { } toJson(): VerifiableSignatureDataJson { - const flags = this.calcFlags(); + return { version: this.version.toNumber(), flags: flags.toNumber(), + signatureversion: this.signatureVersion.toNumber(), hashtype: this.hashType.toNumber(), systemid: this.systemID.toJson(), identityid: this.identityID.toJson(), @@ -326,6 +341,7 @@ export class VerifiableSignatureData implements SerializableEntity { const instance = new VerifiableSignatureData(); instance.version = new BN(json.version); instance.flags = new BN(json.flags); + instance.signatureVersion = new BN(json.signatureversion); instance.hashType = new BN(json.hashtype); instance.systemID = CompactIdAddressObject.fromJson(json.systemid); instance.identityID = CompactIdAddressObject.fromJson(json.identityid); From f3bf36a1d639603099a0962b8882360c17ab3759 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 21 Nov 2025 17:48:27 +0100 Subject: [PATCH 073/123] Rename getDetailsHash to getDetailsIdentitySignatureHash in GenericEnvelope and enforce presence of VerifiableSignatureData --- dist/vdxf/classes/envelope/GenericEnvelope.d.ts | 2 +- dist/vdxf/classes/envelope/GenericEnvelope.js | 4 ++-- src/__tests__/vdxf/genericrequest.test.ts | 15 +-------------- src/__tests__/vdxf/genericresponse.test.ts | 15 +-------------- src/vdxf/classes/envelope/GenericEnvelope.ts | 4 ++-- 5 files changed, 7 insertions(+), 33 deletions(-) diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts index 6dfdd3fe..28f8d02a 100644 --- a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts +++ b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts @@ -48,7 +48,7 @@ export declare class GenericEnvelope implements SerializableEntity { setIsTestnet(): void; setFlags(): void; getRawDataSha256(includeSig?: boolean): Buffer; - getDetailsHash(signedBlockheight: number): Buffer; + getDetailsIdentitySignatureHash(signedBlockheight: number): Buffer; getDetails(index?: number): OrdinalVdxfObject; protected getDetailsBufferLength(): number; protected getDetailsBuffer(): Buffer; diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.js b/dist/vdxf/classes/envelope/GenericEnvelope.js index d71a06a3..f69ba073 100644 --- a/dist/vdxf/classes/envelope/GenericEnvelope.js +++ b/dist/vdxf/classes/envelope/GenericEnvelope.js @@ -73,12 +73,12 @@ class GenericEnvelope { getRawDataSha256(includeSig = false) { return (0, crypto_1.createHash)("sha256").update(this.toBufferOptionalSig(includeSig)).digest(); } - getDetailsHash(signedBlockheight) { + getDetailsIdentitySignatureHash(signedBlockheight) { if (this.isSigned()) { return this.signature.getIdentityHash(signedBlockheight, this.getRawDataSha256()); } else - return this.getRawDataSha256(); + throw new Error("Must contain verifiable signature with at least systemID and identityID to generate details identity signature hash"); } getDetails(index = 0) { return this.details[index]; diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts index 32357099..6d077163 100644 --- a/src/__tests__/vdxf/genericrequest.test.ts +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -131,7 +131,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { expect(req.isSigned()).toBe(true); expect(req.hasCreatedAt()).toBe(true); - expect(req.getDetailsHash(1000)).toBeDefined(); + expect(req.getDetailsIdentitySignatureHash(1000)).toBeDefined(); expect(req.signature?.signatureVersion.toString()).toBe("2"); const round = roundTripBuffer(req); @@ -194,17 +194,4 @@ describe('GenericRequest — buffer / URI / QR operations', () => { req.fromBuffer(empty, 0); }).toThrow("Cannot create request from empty buffer"); }); - - it("returns raw SHA256 when not signed", () => { - const detail = new GeneralTypeOrdinalVdxfObject({ - data: Buffer.from("abcd", "hex"), - key: DEFAULT_VERUS_CHAINID - }); - const req = new GenericRequest({ details: [detail] }); - expect(req.isSigned()).toBe(false); - - const hash = req.getDetailsHash(123456); - const expected = rawDetailsSha256(req); - expect(hash).toEqual(expected); - }); }); \ No newline at end of file diff --git a/src/__tests__/vdxf/genericresponse.test.ts b/src/__tests__/vdxf/genericresponse.test.ts index a83310e2..d1db2ea0 100644 --- a/src/__tests__/vdxf/genericresponse.test.ts +++ b/src/__tests__/vdxf/genericresponse.test.ts @@ -135,7 +135,7 @@ describe('GenericResponse — buffer / URI / QR operations', () => { expect(req.isSigned()).toBe(true); expect(req.hasCreatedAt()).toBe(true); - expect(req.getDetailsHash(1000)).toBeDefined(); + expect(req.getDetailsIdentitySignatureHash(1000)).toBeDefined(); expect(req.signature?.signatureVersion.toString()).toBe("2"); const round = roundTripBuffer(req); @@ -170,17 +170,4 @@ describe('GenericResponse — buffer / URI / QR operations', () => { req.fromBuffer(empty, 0); }).toThrow("Cannot create response from empty buffer"); }); - - it("returns raw SHA256 when not signed", () => { - const detail = new GeneralTypeOrdinalVdxfObject({ - data: Buffer.from("abcd", "hex"), - key: DEFAULT_VERUS_CHAINID - }); - const req = new GenericResponse({ details: [detail] }); - expect(req.isSigned()).toBe(false); - - const hash = req.getDetailsHash(123456); - const expected = rawDetailsSha256(req); - expect(hash).toEqual(expected); - }); }); \ No newline at end of file diff --git a/src/vdxf/classes/envelope/GenericEnvelope.ts b/src/vdxf/classes/envelope/GenericEnvelope.ts index 9960678b..697290bc 100644 --- a/src/vdxf/classes/envelope/GenericEnvelope.ts +++ b/src/vdxf/classes/envelope/GenericEnvelope.ts @@ -125,10 +125,10 @@ export class GenericEnvelope implements SerializableEntity { return createHash("sha256").update(this.toBufferOptionalSig(includeSig)).digest(); } - getDetailsHash(signedBlockheight: number): Buffer { + getDetailsIdentitySignatureHash(signedBlockheight: number): Buffer { if (this.isSigned()) { return this.signature.getIdentityHash(signedBlockheight, this.getRawDataSha256()); - } else return this.getRawDataSha256() + } else throw new Error("Must contain verifiable signature with at least systemID and identityID to generate details identity signature hash") } getDetails(index = 0): OrdinalVdxfObject { From 9a27b7326a4d44a96e603e26ee87e4e54df5f21e Mon Sep 17 00:00:00 2001 From: monkins Date: Fri, 21 Nov 2025 19:54:26 +0000 Subject: [PATCH 074/123] add app encryption response --- .../pbaas/saplingextendedspendingkey.test.ts | 43 +++++ .../pbaas/saplingextendedviewingkey.test.ts | 43 +++++ .../vdxf/appencryptionresponsedetails.test.ts | 139 +++++++++++++++ src/__tests__/vdxf/ordinalvdxfobject.test.ts | 61 +++++-- src/constants/ordinals/ordinals.ts | 1 + src/constants/ordinals/register.ts | 6 +- src/constants/ordinals/types.ts | 10 +- src/pbaas/SaplingExtendedSpendingKey.ts | 90 ++++++++++ src/pbaas/SaplingExtendedViewingKey.ts | 90 ++++++++++ src/utils/sapling.ts | 114 +++++++++++- src/vdxf/classes/index.ts | 1 + .../AppEncryptionResponseOrdinalVdxfObject.ts | 29 ++++ src/vdxf/classes/ordinals/index.ts | 1 + .../response/AppEncryptionResponseDetails.ts | 163 ++++++++++++++++++ src/vdxf/keys.ts | 10 ++ 15 files changed, 781 insertions(+), 20 deletions(-) create mode 100644 src/__tests__/pbaas/saplingextendedspendingkey.test.ts create mode 100644 src/__tests__/pbaas/saplingextendedviewingkey.test.ts create mode 100644 src/__tests__/vdxf/appencryptionresponsedetails.test.ts create mode 100644 src/pbaas/SaplingExtendedSpendingKey.ts create mode 100644 src/pbaas/SaplingExtendedViewingKey.ts create mode 100644 src/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.ts create mode 100644 src/vdxf/classes/response/AppEncryptionResponseDetails.ts diff --git a/src/__tests__/pbaas/saplingextendedspendingkey.test.ts b/src/__tests__/pbaas/saplingextendedspendingkey.test.ts new file mode 100644 index 00000000..59336ddf --- /dev/null +++ b/src/__tests__/pbaas/saplingextendedspendingkey.test.ts @@ -0,0 +1,43 @@ +import { SaplingExtendedSpendingKey } from '../../pbaas/SaplingExtendedSpendingKey'; + +describe('SaplingExtendedSpendingKey', () => { + const mainnetKey = 'secret-extended-key-main1q0njl87fqqqqpq8vghkp6nz9wx48mwelukvhx3yfwg7msatglv4xy8rrh87k9z472el95h53ym2tku2dazny0j2vfukgmp6fu3k7edzcx9n8egesc32sdy3xr4s2ep4skgc7t5j5zds4ws7hf2nuszf7ltfn2nc5rk3k77gyeqdz905x6xt6kqdx5wn7jvas0733hends8q6s8k87emn6m060xdnhgmvn4zmx0ssrwve84lzxkqu2dnfq5qsjwrtlject0an0k282rs0gws78'; + + it('should decode and encode a mainnet extended spending key', () => { + const key = SaplingExtendedSpendingKey.fromKeyString(mainnetKey); + + expect(key.depth).toBeGreaterThanOrEqual(0); + expect(key.parentFVKTag.length).toBe(4); + expect(key.childIndex.length).toBe(4); + expect(key.chainCode.length).toBe(32); + expect(key.ask.length).toBe(32); + expect(key.nsk.length).toBe(32); + expect(key.ovk.length).toBe(32); + expect(key.dk.length).toBe(32); + + const encoded = key.toKeyString(false); + expect(encoded).toBe(mainnetKey); + }); + + it('should round-trip through buffer serialization', () => { + const key = SaplingExtendedSpendingKey.fromKeyString(mainnetKey); + + const buffer = key.toBuffer(); + expect(buffer.length).toBe(169); + + const key2 = new SaplingExtendedSpendingKey(); + key2.fromBuffer(buffer); + + expect(key2.depth).toBe(key.depth); + expect(key2.parentFVKTag.equals(key.parentFVKTag)).toBe(true); + expect(key2.childIndex.equals(key.childIndex)).toBe(true); + expect(key2.chainCode.equals(key.chainCode)).toBe(true); + expect(key2.ask.equals(key.ask)).toBe(true); + expect(key2.nsk.equals(key.nsk)).toBe(true); + expect(key2.ovk.equals(key.ovk)).toBe(true); + expect(key2.dk.equals(key.dk)).toBe(true); + + const encoded = key2.toKeyString(false); + expect(encoded).toBe(mainnetKey); + }); +}); diff --git a/src/__tests__/pbaas/saplingextendedviewingkey.test.ts b/src/__tests__/pbaas/saplingextendedviewingkey.test.ts new file mode 100644 index 00000000..668a6d07 --- /dev/null +++ b/src/__tests__/pbaas/saplingextendedviewingkey.test.ts @@ -0,0 +1,43 @@ +import { SaplingExtendedViewingKey } from '../../pbaas/SaplingExtendedViewingKey'; + +describe('SaplingExtendedViewingKey', () => { + const mainnetKey = 'zxviews1q0njl87fqqqqpq8vghkp6nz9wx48mwelukvhx3yfwg7msatglv4xy8rrh87k9z472edvlrt950qyy6r766dxnpqktxug7t2wy80s4ug325dwp9hf4vw9a6ethf2mwc9wan28p88dq8q2e8sdlw2mhffg6hy92tjyuquz7a8reqdz905x6xt6kqdx5wn7jvas0733hends8q6s8k87emn6m060xdnhgmvn4zmx0ssrwve84lzxkqu2dnfq5qsjwrtlject0an0k282rsnx0kq4'; + + it('should decode and encode a mainnet extended viewing key', () => { + const key = SaplingExtendedViewingKey.fromKeyString(mainnetKey); + + expect(key.depth).toBeGreaterThanOrEqual(0); + expect(key.parentFVKTag.length).toBe(4); + expect(key.childIndex.length).toBe(4); + expect(key.chainCode.length).toBe(32); + expect(key.ak.length).toBe(32); + expect(key.nk.length).toBe(32); + expect(key.ovk.length).toBe(32); + expect(key.dk.length).toBe(32); + + const encoded = key.toKeyString(false); + expect(encoded).toBe(mainnetKey); + }); + + it('should round-trip through buffer serialization', () => { + const key = SaplingExtendedViewingKey.fromKeyString(mainnetKey); + + const buffer = key.toBuffer(); + expect(buffer.length).toBe(169); + + const key2 = new SaplingExtendedViewingKey(); + key2.fromBuffer(buffer); + + expect(key2.depth).toBe(key.depth); + expect(key2.parentFVKTag.equals(key.parentFVKTag)).toBe(true); + expect(key2.childIndex.equals(key.childIndex)).toBe(true); + expect(key2.chainCode.equals(key.chainCode)).toBe(true); + expect(key2.ak.equals(key.ak)).toBe(true); + expect(key2.nk.equals(key.nk)).toBe(true); + expect(key2.ovk.equals(key.ovk)).toBe(true); + expect(key2.dk.equals(key.dk)).toBe(true); + + const encoded = key2.toKeyString(false); + expect(encoded).toBe(mainnetKey); + }); +}); diff --git a/src/__tests__/vdxf/appencryptionresponsedetails.test.ts b/src/__tests__/vdxf/appencryptionresponsedetails.test.ts new file mode 100644 index 00000000..6e8bb694 --- /dev/null +++ b/src/__tests__/vdxf/appencryptionresponsedetails.test.ts @@ -0,0 +1,139 @@ +import { AppEncryptionResponseDetails } from '../../vdxf/classes/response/AppEncryptionResponseDetails'; +import { SaplingExtendedViewingKey } from '../../pbaas/SaplingExtendedViewingKey'; +import { SaplingExtendedSpendingKey } from '../../pbaas/SaplingExtendedSpendingKey'; +import { SaplingPaymentAddress } from '../../pbaas/SaplingPaymentAddress'; +import { BN } from 'bn.js'; + +describe('AppEncryptionResponseDetails', () => { + const testViewingKey = 'zxviews1q0njl87fqqqqpq8vghkp6nz9wx48mwelukvhx3yfwg7msatglv4xy8rrh87k9z472edvlrt950qyy6r766dxnpqktxug7t2wy80s4ug325dwp9hf4vw9a6ethf2mwc9wan28p88dq8q2e8sdlw2mhffg6hy92tjyuquz7a8reqdz905x6xt6kqdx5wn7jvas0733hends8q6s8k87emn6m060xdnhgmvn4zmx0ssrwve84lzxkqu2dnfq5qsjwrtlject0an0k282rsnx0kq4'; + const testSpendingKey = 'secret-extended-key-main1q0njl87fqqqqpq8vghkp6nz9wx48mwelukvhx3yfwg7msatglv4xy8rrh87k9z472el95h53ym2tku2dazny0j2vfukgmp6fu3k7edzcx9n8egesc32sdy3xr4s2ep4skgc7t5j5zds4ws7hf2nuszf7ltfn2nc5rk3k77gyeqdz905x6xt6kqdx5wn7jvas0733hends8q6s8k87emn6m060xdnhgmvn4zmx0ssrwve84lzxkqu2dnfq5qsjwrtlject0an0k282rs0gws78'; + const testAddress = 'zs1anxaua04mnl7dz2mjpflhw0mt73uxy9rjac53lgduk02kh3lnf0hxufk9d76j5uep5j55f5h5rk'; + const testRequestID = 'iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ'; + + it('should create with minimal data', () => { + const response = new AppEncryptionResponseDetails({ + version: new BN(1), + extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), + address: SaplingPaymentAddress.fromAddressString(testAddress) + }); + + expect(response.extendedViewingKey).toBeInstanceOf(SaplingExtendedViewingKey); + expect(response.address).toBeInstanceOf(SaplingPaymentAddress); + expect(response.containsRequestID()).toBe(false); + expect(response.containsExtendedSpendingKey()).toBe(false); + }); + + it('should create with requestID', () => { + const response = new AppEncryptionResponseDetails({ + version: new BN(1), + requestID: testRequestID, + extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), + address: SaplingPaymentAddress.fromAddressString(testAddress) + }); + + expect(response.requestID).toBe(testRequestID); + expect(response.containsRequestID()).toBe(true); + expect(response.containsExtendedSpendingKey()).toBe(false); + }); + + it('should create with extended spending key', () => { + const response = new AppEncryptionResponseDetails({ + version: new BN(1), + extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), + address: SaplingPaymentAddress.fromAddressString(testAddress), + extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey) + }); + + expect(response.extendedSpendingKey).toBeInstanceOf(SaplingExtendedSpendingKey); + expect(response.containsRequestID()).toBe(false); + expect(response.containsExtendedSpendingKey()).toBe(true); + }); + + it('should create with all optional fields', () => { + const response = new AppEncryptionResponseDetails({ + version: new BN(1), + requestID: testRequestID, + extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), + address: SaplingPaymentAddress.fromAddressString(testAddress), + extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey) + }); + + expect(response.requestID).toBe(testRequestID); + expect(response.containsRequestID()).toBe(true); + expect(response.extendedSpendingKey).toBeInstanceOf(SaplingExtendedSpendingKey); + expect(response.containsExtendedSpendingKey()).toBe(true); + }); + + it('should serialize and deserialize via buffer (minimal)', () => { + const response = new AppEncryptionResponseDetails({ + version: new BN(1), + extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), + address: SaplingPaymentAddress.fromAddressString(testAddress) + }); + + const buffer = response.toBuffer(); + const response2 = new AppEncryptionResponseDetails(); + response2.fromBuffer(buffer); + + expect(response2.containsRequestID()).toBe(false); + expect(response2.containsExtendedSpendingKey()).toBe(false); + expect(response2.extendedViewingKey.toKeyString()).toBe(testViewingKey); + expect(response2.address.toAddressString()).toBe(testAddress); + }); + + it('should serialize and deserialize via buffer (with requestID)', () => { + const response = new AppEncryptionResponseDetails({ + version: new BN(1), + requestID: testRequestID, + extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), + address: SaplingPaymentAddress.fromAddressString(testAddress) + }); + + const buffer = response.toBuffer(); + const response2 = new AppEncryptionResponseDetails(); + response2.fromBuffer(buffer); + + expect(response2.requestID).toBe(testRequestID); + expect(response2.containsRequestID()).toBe(true); + expect(response2.extendedViewingKey.toKeyString()).toBe(testViewingKey); + expect(response2.address.toAddressString()).toBe(testAddress); + }); + + it('should serialize and deserialize via buffer (with spending key)', () => { + const response = new AppEncryptionResponseDetails({ + version: new BN(1), + extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), + address: SaplingPaymentAddress.fromAddressString(testAddress), + extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey) + }); + + const buffer = response.toBuffer(); + const response2 = new AppEncryptionResponseDetails(); + response2.fromBuffer(buffer); + + expect(response2.containsExtendedSpendingKey()).toBe(true); + expect(response2.extendedSpendingKey).toBeDefined(); + expect(response2.extendedSpendingKey!.toKeyString()).toBe(testSpendingKey); + }); + + it('should serialize and deserialize via JSON', () => { + const response = new AppEncryptionResponseDetails({ + version: new BN(1), + requestID: testRequestID, + extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), + address: SaplingPaymentAddress.fromAddressString(testAddress), + extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey) + }); + + const json = response.toJson(); + const response2 = AppEncryptionResponseDetails.fromJson(json); + + expect(response2.requestID).toBe(testRequestID); + expect(response2.containsRequestID()).toBe(true); + expect(response2.extendedViewingKey.toKeyString()).toBe(testViewingKey); + expect(response2.address.toAddressString()).toBe(testAddress); + expect(response2.extendedSpendingKey).toBeDefined(); + expect(response2.extendedSpendingKey!.toKeyString()).toBe(testSpendingKey); + expect(response2.containsExtendedSpendingKey()).toBe(true); + }); +}); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index c4fc1f32..a1cb26b5 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -15,29 +15,33 @@ import { import { DataDescriptorOrdinalVdxfObject } from '../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject'; -import { DataDescriptor, DEST_PKH, TransferDestination } from '../../pbaas'; -import { - AppEncryptionRequestDetails, - CompactIdAddressObject, - IdentityUpdateRequestDetails, - IdentityUpdateResponseDetails, - LoginRequestDetails, - LoginResponseDetails, - ProvisionIdentityDetails, - ResponseUri, +import { DataDescriptor, DEST_PKH, SaplingPaymentAddress, TransferDestination } from '../../pbaas'; +import { + AppEncryptionRequestDetails, + CompactIdAddressObject, + IdentityUpdateRequestDetails, + IdentityUpdateResponseDetails, + LoginRequestDetails, + LoginResponseDetails, + ProvisionIdentityDetails, + ResponseUri, VerusPayInvoiceDetails, UserDataRequestDetails, - UserSpecificDataPacketDetails + UserSpecificDataPacketDetails, + AppEncryptionResponseOrdinalVdxfObject, + AppEncryptionResponseDetails } from '../../vdxf/classes'; import { DEFAULT_VERUS_CHAINID } from '../../constants/pbaas'; import { fromBase58Check } from '../../utils/address'; -import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from '../../constants/ordinals/ordinals'; +import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from '../../constants/ordinals/ordinals'; import { VerusPayInvoiceOrdinalVdxfObject } from '../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject'; import { TEST_CHALLENGE_ID, TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, TEST_EXPIRYHEIGHT, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3, TEST_REQUESTID, TEST_SALT, TEST_SYSTEMID, TEST_TXID } from '../constants/fixtures'; import { ProvisionIdentityDetailsOrdinalVdxfObject } from '../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject'; import { BigNumber } from '../../utils/types/BigNumber'; import { DataPacketResponse } from '../../vdxf/classes/datapacket/DataPacketResponse'; import { VerifiableSignatureData } from '../../vdxf/classes/VerifiableSignatureData'; +import { SaplingExtendedSpendingKey } from '../../pbaas/SaplingExtendedSpendingKey'; +import { SaplingExtendedViewingKey } from '../../pbaas/SaplingExtendedViewingKey'; // Helper function to create TransferDestination from address string function createCompactIdAddressObject(type: BigNumber, address: string): CompactIdAddressObject { @@ -89,6 +93,8 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { newObj = UserDataRequestOrdinalVdxfObject.fromJson(json as any); } else if (obj instanceof UserSpecificDataPacketDetailsOrdinalVdxfObject) { newObj = UserSpecificDataPacketDetailsOrdinalVdxfObject.fromJson(json as any); + } else if (obj instanceof AppEncryptionResponseOrdinalVdxfObject) { + newObj = AppEncryptionResponseOrdinalVdxfObject.fromJson(json as any); } else { throw new Error("Unrecognized type") } @@ -137,7 +143,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { }, "salt": "4f66603f256d3f757b6dc3ea44802d4041d2a1901e06005028fd60b85a5878a2" }); - + // Force flags, etc. dd.SetFlags(); @@ -402,6 +408,8 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { .toBe(ProvisionIdentityDetailsOrdinalVdxfObject); expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST)) .toBe(AppEncryptionRequestOrdinalVdxfObject); + expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE)) + .toBe(AppEncryptionResponseOrdinalVdxfObject); // unrecognized expect(() => getOrdinalVdxfObjectClassForType(new BN(999))).toThrow(); @@ -520,4 +528,31 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(d3.signature?.signatureAsVch.toString('hex')).toBe("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf"); }); + it('should serialize / deserialize an AppEncryptionResponseOrdinalVdxfObject', () => { + + const testViewingKey = 'zxviews1q0njl87fqqqqpq8vghkp6nz9wx48mwelukvhx3yfwg7msatglv4xy8rrh87k9z472edvlrt950qyy6r766dxnpqktxug7t2wy80s4ug325dwp9hf4vw9a6ethf2mwc9wan28p88dq8q2e8sdlw2mhffg6hy92tjyuquz7a8reqdz905x6xt6kqdx5wn7jvas0733hends8q6s8k87emn6m060xdnhgmvn4zmx0ssrwve84lzxkqu2dnfq5qsjwrtlject0an0k282rsnx0kq4'; + const testSpendingKey = 'secret-extended-key-main1q0njl87fqqqqpq8vghkp6nz9wx48mwelukvhx3yfwg7msatglv4xy8rrh87k9z472el95h53ym2tku2dazny0j2vfukgmp6fu3k7edzcx9n8egesc32sdy3xr4s2ep4skgc7t5j5zds4ws7hf2nuszf7ltfn2nc5rk3k77gyeqdz905x6xt6kqdx5wn7jvas0733hends8q6s8k87emn6m060xdnhgmvn4zmx0ssrwve84lzxkqu2dnfq5qsjwrtlject0an0k282rs0gws78'; + const testAddress = 'zs1anxaua04mnl7dz2mjpflhw0mt73uxy9rjac53lgduk02kh3lnf0hxufk9d76j5uep5j55f5h5rk'; + + const details = new AppEncryptionResponseDetails({ + version: new BN(1), + flags: AppEncryptionResponseDetails.RESPONSE_CONTAINS_REQUEST_ID.or(AppEncryptionResponseDetails.RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY), + requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ", + extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), + extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey), + address: SaplingPaymentAddress.fromAddressString(testAddress) + }); + + const obj = new AppEncryptionResponseOrdinalVdxfObject({ data: details }); + + const round = roundTripBuffer(obj); + expect(round).toBeInstanceOf(AppEncryptionResponseOrdinalVdxfObject); + + const d2 = (round as AppEncryptionResponseOrdinalVdxfObject).data; + expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); + expect(d2.extendedViewingKey!.toKeyString()).toEqual(details.extendedViewingKey!.toKeyString()); + expect(d2.extendedSpendingKey!.toKeyString()).toEqual(details.extendedSpendingKey!.toKeyString()); + expect(d2.address!.toAddressString()).toEqual(details.address!.toAddressString()); + + }); }); \ No newline at end of file diff --git a/src/constants/ordinals/ordinals.ts b/src/constants/ordinals/ordinals.ts index 7ba5f647..8fa62226 100644 --- a/src/constants/ordinals/ordinals.ts +++ b/src/constants/ordinals/ordinals.ts @@ -13,6 +13,7 @@ export const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new BN(5, 10); export const VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new BN(6, 10); export const VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = new BN(8, 10); +export const VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE = new BN(9, 10); export const VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET = new BN(10, 10); export const VDXF_ORDINAL_USER_DATA_REQUEST = new BN(12, 10); export const VDXF_ORDINAL_DATA_RESPONSE = new BN(13, 10); diff --git a/src/constants/ordinals/register.ts b/src/constants/ordinals/register.ts index 3c887c2a..aa7c92a4 100644 --- a/src/constants/ordinals/register.ts +++ b/src/constants/ordinals/register.ts @@ -1,4 +1,4 @@ -import { APP_ENCRYPTION_REQUEST_VDXF_KEY, DATA_RESPONSE_VDXF_KEY, DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, LOGIN_REQUEST_DETAILS_VDXF_KEY, LOGIN_RESPONSE_DETAILS_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, USER_DATA_REQUEST_VDXF_KEY, USER_SPECIFIC_DATA_PACKET_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../../vdxf"; +import { APP_ENCRYPTION_REQUEST_VDXF_KEY, APP_ENCRYPTION_RESPONSE_VDXF_KEY, DATA_RESPONSE_VDXF_KEY, DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, LOGIN_REQUEST_DETAILS_VDXF_KEY, LOGIN_RESPONSE_DETAILS_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, USER_DATA_REQUEST_VDXF_KEY, USER_SPECIFIC_DATA_PACKET_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../../vdxf"; import { AppEncryptionRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject"; import { DataDescriptorOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject"; import { DataPacketResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject"; @@ -11,7 +11,8 @@ import { LoginResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/Logi import { OrdinalVdxfObjectOrdinalMap } from "../../vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap"; import { ProvisionIdentityDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject"; import { VerusPayInvoiceOrdinalVdxfObject } from "../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject"; -import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_DATA_RESPONSE, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_LOGIN_RESPONSE, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_USER_DATA_REQUEST, VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET, VDXF_ORDINAL_VERUSPAY_INVOICE } from "./ordinals"; +import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_DATA_RESPONSE, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_LOGIN_RESPONSE, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_USER_DATA_REQUEST, VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET, VDXF_ORDINAL_VERUSPAY_INVOICE } from "./ordinals"; +import { AppEncryptionResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject"; export const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVdxfObject, false); @@ -25,4 +26,5 @@ export const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_RESPONSE.toNumber(), DATA_RESPONSE_VDXF_KEY.vdxfid, DataPacketResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_USER_DATA_REQUEST.toNumber(), USER_DATA_REQUEST_VDXF_KEY.vdxfid, UserDataRequestOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET.toNumber(), USER_SPECIFIC_DATA_PACKET_VDXF_KEY.vdxfid, UserSpecificDataPacketDetailsOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE.toNumber(), APP_ENCRYPTION_RESPONSE_VDXF_KEY.vdxfid, AppEncryptionResponseOrdinalVdxfObject, false); } \ No newline at end of file diff --git a/src/constants/ordinals/types.ts b/src/constants/ordinals/types.ts index aba70ee9..7414765a 100644 --- a/src/constants/ordinals/types.ts +++ b/src/constants/ordinals/types.ts @@ -16,7 +16,9 @@ import { UserDataRequestJson, UserSpecificDataPacketDetails, UserSpecificDataPacketDetailsJson, - VerusPayInvoiceDetails + VerusPayInvoiceDetails, + AppEncryptionResponseDetails, + AppEncryptionResponseDetailsJson } from "../../vdxf/classes"; import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; import { DataPacketResponse, DataResponseJson } from "../../vdxf/classes/datapacket/DataPacketResponse"; @@ -32,7 +34,8 @@ export type OrdinalVdxfObjectReservedData = AppEncryptionRequestDetails | DataPacketResponse | UserDataRequestDetails | - UserSpecificDataPacketDetails; + UserSpecificDataPacketDetails | + AppEncryptionResponseDetails; export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | @@ -45,5 +48,6 @@ export type OrdinalVdxfObjectReservedDataJson = AppEncryptionRequestJson | DataResponseJson | UserDataRequestJson | - UserSpecificDataPacketDetailsJson; + UserSpecificDataPacketDetailsJson | + AppEncryptionResponseDetailsJson; diff --git a/src/pbaas/SaplingExtendedSpendingKey.ts b/src/pbaas/SaplingExtendedSpendingKey.ts new file mode 100644 index 00000000..d025eb11 --- /dev/null +++ b/src/pbaas/SaplingExtendedSpendingKey.ts @@ -0,0 +1,90 @@ +import bufferutils from '../utils/bufferutils'; +import { decodeSaplingExtendedSpendingKey, encodeSaplingExtendedSpendingKey } from '../utils/sapling'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; + +const { BufferReader, BufferWriter } = bufferutils; + +export class SaplingExtendedSpendingKey implements SerializableEntity { + depth: number; + parentFVKTag: Buffer; // 4 bytes + childIndex: Buffer; // 4 bytes + chainCode: Buffer; // 32 bytes + ask: Buffer; // 32 bytes + nsk: Buffer; // 32 bytes + ovk: Buffer; // 32 bytes + dk: Buffer; // 32 bytes + + constructor(data?: { + depth?: number; + parentFVKTag?: Buffer; + childIndex?: Buffer; + chainCode?: Buffer; + ask?: Buffer; + nsk?: Buffer; + ovk?: Buffer; + dk?: Buffer; + }) { + if (data != null) { + this.depth = data.depth ?? 0; + this.parentFVKTag = data.parentFVKTag ?? Buffer.alloc(4); + this.childIndex = data.childIndex ?? Buffer.alloc(4); + this.chainCode = data.chainCode ?? Buffer.alloc(32); + this.ask = data.ask ?? Buffer.alloc(32); + this.nsk = data.nsk ?? Buffer.alloc(32); + this.ovk = data.ovk ?? Buffer.alloc(32); + this.dk = data.dk ?? Buffer.alloc(32); + } + } + + getByteLength() { + return 1 + 4 + 4 + 32 + 32 + 32 + 32 + 32; // 169 bytes total + } + + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + + writer.writeUInt8(this.depth); + writer.writeSlice(this.parentFVKTag); + writer.writeSlice(this.childIndex); + writer.writeSlice(this.chainCode); + writer.writeSlice(this.ask); + writer.writeSlice(this.nsk); + writer.writeSlice(this.ovk); + writer.writeSlice(this.dk); + + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset: number = 0) { + const reader = new BufferReader(buffer, offset); + + this.depth = reader.readUInt8(); + this.parentFVKTag = reader.readSlice(4); + this.childIndex = reader.readSlice(4); + this.chainCode = reader.readSlice(32); + this.ask = reader.readSlice(32); + this.nsk = reader.readSlice(32); + this.ovk = reader.readSlice(32); + this.dk = reader.readSlice(32); + + return reader.offset; + } + + static fromKeyString(key: string): SaplingExtendedSpendingKey { + const decoded = decodeSaplingExtendedSpendingKey(key); + return new SaplingExtendedSpendingKey(decoded); + } + + toKeyString(testnet: boolean = false): string { + return encodeSaplingExtendedSpendingKey({ + depth: this.depth, + parentFVKTag: this.parentFVKTag, + childIndex: this.childIndex, + chainCode: this.chainCode, + ask: this.ask, + nsk: this.nsk, + ovk: this.ovk, + dk: this.dk + }, testnet); + } +} diff --git a/src/pbaas/SaplingExtendedViewingKey.ts b/src/pbaas/SaplingExtendedViewingKey.ts new file mode 100644 index 00000000..2ef8fd8e --- /dev/null +++ b/src/pbaas/SaplingExtendedViewingKey.ts @@ -0,0 +1,90 @@ +import bufferutils from '../utils/bufferutils'; +import { decodeSaplingExtendedViewingKey, encodeSaplingExtendedViewingKey } from '../utils/sapling'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; + +const { BufferReader, BufferWriter } = bufferutils; + +export class SaplingExtendedViewingKey implements SerializableEntity { + depth: number; + parentFVKTag: Buffer; // 4 bytes + childIndex: Buffer; // 4 bytes + chainCode: Buffer; // 32 bytes + ak: Buffer; // 32 bytes + nk: Buffer; // 32 bytes + ovk: Buffer; // 32 bytes + dk: Buffer; // 32 bytes + + constructor(data?: { + depth?: number; + parentFVKTag?: Buffer; + childIndex?: Buffer; + chainCode?: Buffer; + ak?: Buffer; + nk?: Buffer; + ovk?: Buffer; + dk?: Buffer; + }) { + if (data != null) { + this.depth = data.depth ?? 0; + this.parentFVKTag = data.parentFVKTag ?? Buffer.alloc(4); + this.childIndex = data.childIndex ?? Buffer.alloc(4); + this.chainCode = data.chainCode ?? Buffer.alloc(32); + this.ak = data.ak ?? Buffer.alloc(32); + this.nk = data.nk ?? Buffer.alloc(32); + this.ovk = data.ovk ?? Buffer.alloc(32); + this.dk = data.dk ?? Buffer.alloc(32); + } + } + + getByteLength() { + return 1 + 4 + 4 + 32 + 32 + 32 + 32 + 32; // 169 bytes total + } + + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + + writer.writeUInt8(this.depth); + writer.writeSlice(this.parentFVKTag); + writer.writeSlice(this.childIndex); + writer.writeSlice(this.chainCode); + writer.writeSlice(this.ak); + writer.writeSlice(this.nk); + writer.writeSlice(this.ovk); + writer.writeSlice(this.dk); + + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset: number = 0) { + const reader = new BufferReader(buffer, offset); + + this.depth = reader.readUInt8(); + this.parentFVKTag = reader.readSlice(4); + this.childIndex = reader.readSlice(4); + this.chainCode = reader.readSlice(32); + this.ak = reader.readSlice(32); + this.nk = reader.readSlice(32); + this.ovk = reader.readSlice(32); + this.dk = reader.readSlice(32); + + return reader.offset; + } + + static fromKeyString(key: string): SaplingExtendedViewingKey { + const decoded = decodeSaplingExtendedViewingKey(key); + return new SaplingExtendedViewingKey(decoded); + } + + toKeyString(testnet: boolean = false): string { + return encodeSaplingExtendedViewingKey({ + depth: this.depth, + parentFVKTag: this.parentFVKTag, + childIndex: this.childIndex, + chainCode: this.chainCode, + ak: this.ak, + nk: this.nk, + ovk: this.ovk, + dk: this.dk + }, testnet); + } +} diff --git a/src/utils/sapling.ts b/src/utils/sapling.ts index c4c31bea..0c2ef384 100644 --- a/src/utils/sapling.ts +++ b/src/utils/sapling.ts @@ -1,7 +1,7 @@ import { bech32 } from "bech32"; export const fromBech32 = (address: string): { version: number, prefix: string, data: Buffer } => { - var result = bech32.decode(address); + var result = bech32.decode(address, 1000); // Allow longer strings like extended keys var data = bech32.fromWords(result.words); return { @@ -13,7 +13,7 @@ export const fromBech32 = (address: string): { version: number, prefix: string, export const toBech32 = (prefix: string, data: Buffer): string => { const words = bech32.toWords(data); - var result = bech32.encode(prefix, words); + var result = bech32.encode(prefix, words, 1000); // Allow longer strings like extended keys return result; } @@ -68,4 +68,114 @@ export const encodeSaplingAddress = (data: { d: Buffer, pk_d: Buffer }): string //const data = convertBits(buffer, 8, 5, false); return toBech32('zs', buffer); +} + +export interface SaplingExtendedSpendingKeyData { + depth: number; + parentFVKTag: Buffer; + childIndex: Buffer; + chainCode: Buffer; + ask: Buffer; + nsk: Buffer; + ovk: Buffer; + dk: Buffer; +} + +export interface SaplingExtendedViewingKeyData { + depth: number; + parentFVKTag: Buffer; + childIndex: Buffer; + chainCode: Buffer; + ak: Buffer; + nk: Buffer; + ovk: Buffer; + dk: Buffer; +} + +export function decodeSaplingExtendedSpendingKey(encoded: string): SaplingExtendedSpendingKeyData { + const result = fromBech32(encoded); + + // Verify prefix is for extended spending key + if (!result.prefix.startsWith('secret-extended-key-')) { + throw new Error('Invalid Sapling extended spending key prefix'); + } + + // Data should be 169 bytes: 1 (depth) + 4 (parent) + 4 (child) + 32*4 (keys) + if (result.data.length !== 169) { + throw new Error(`Invalid Sapling extended spending key length: expected 169, got ${result.data.length}`); + } + + let offset = 0; + + return { + depth: result.data.readUInt8(offset++), + parentFVKTag: Buffer.from(result.data.subarray(offset, offset += 4)), + childIndex: Buffer.from(result.data.subarray(offset, offset += 4)), + chainCode: Buffer.from(result.data.subarray(offset, offset += 32)), + ask: Buffer.from(result.data.subarray(offset, offset += 32)), + nsk: Buffer.from(result.data.subarray(offset, offset += 32)), + ovk: Buffer.from(result.data.subarray(offset, offset += 32)), + dk: Buffer.from(result.data.subarray(offset, offset += 32)) + }; +} + +export function encodeSaplingExtendedSpendingKey(data: SaplingExtendedSpendingKeyData, testnet: boolean = false): string { + const prefix = testnet ? 'secret-extended-key-test' : 'secret-extended-key-main'; + + const buffer = Buffer.concat([ + Buffer.from([data.depth]), + data.parentFVKTag, + data.childIndex, + data.chainCode, + data.ask, + data.nsk, + data.ovk, + data.dk + ]); + + return toBech32(prefix, buffer); +} + +export function decodeSaplingExtendedViewingKey(encoded: string): SaplingExtendedViewingKeyData { + const result = fromBech32(encoded); + + // Verify prefix is for extended viewing key + if (!result.prefix.startsWith('zxview')) { + throw new Error('Invalid Sapling extended viewing key prefix'); + } + + // Data should be 169 bytes: 1 (depth) + 4 (parent) + 4 (child) + 32*5 (keys) + if (result.data.length !== 169) { + throw new Error('Invalid Sapling extended viewing key length'); + } + + let offset = 0; + + return { + depth: result.data.readUInt8(offset++), + parentFVKTag: Buffer.from(result.data.subarray(offset, offset += 4)), + childIndex: Buffer.from(result.data.subarray(offset, offset += 4)), + chainCode: Buffer.from(result.data.subarray(offset, offset += 32)), + ak: Buffer.from(result.data.subarray(offset, offset += 32)), + nk: Buffer.from(result.data.subarray(offset, offset += 32)), + ovk: Buffer.from(result.data.subarray(offset, offset += 32)), + dk: Buffer.from(result.data.subarray(offset, offset += 32)) + }; +} + +export function encodeSaplingExtendedViewingKey(data: SaplingExtendedViewingKeyData, testnet: boolean = false): string { + const prefix = testnet ? 'zxviewtestsapling' : 'zxviews'; + + const buffer = Buffer.concat([ + Buffer.from([data.depth]), + data.parentFVKTag, + data.childIndex, + data.chainCode, + data.ak, + data.nk, + data.ovk, + data.dk + ]); + + return toBech32(prefix, buffer); } \ No newline at end of file diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index c6766564..9c2d2ef3 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -29,6 +29,7 @@ export * from "./identity/IdentityUpdateResponseDetails"; export * from './ResponseUri'; export * from './request/GenericRequest'; export * from './response/GenericResponse'; +export * from './response/AppEncryptionResponseDetails' export * from './ordinals'; diff --git a/src/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.ts new file mode 100644 index 00000000..887c6622 --- /dev/null +++ b/src/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.ts @@ -0,0 +1,29 @@ +import { VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE } from "../../../constants/ordinals/ordinals"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { AppEncryptionResponseDetails, AppEncryptionResponseDetailsJson } from "../response/AppEncryptionResponseDetails"; + +export class AppEncryptionResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: AppEncryptionResponseDetails; + + constructor( + request: OrdinalVdxfObjectInterfaceTemplate = { + data: new AppEncryptionResponseDetails() + } + ) { + super( + { + type: VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE, + data: request.data + }, + AppEncryptionResponseDetails + ); + } + + static fromJson(details: OrdinalVdxfObjectJsonTemplate): AppEncryptionResponseOrdinalVdxfObject { + return new AppEncryptionResponseOrdinalVdxfObject({ + data: AppEncryptionResponseDetails.fromJson(details.data) + }) + } +} \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/index.ts b/src/vdxf/classes/ordinals/index.ts index 9f198123..a342b287 100644 --- a/src/vdxf/classes/ordinals/index.ts +++ b/src/vdxf/classes/ordinals/index.ts @@ -10,6 +10,7 @@ export * from './VerusPayInvoiceOrdinalVdxfObject' export * from './LoginRequestDetailsOrdinalVdxfObject' export * from './LoginResponseDetailsOrdinalVdxfObject' export * from './AppEncryptionRequestOrdinalVdxfObject' +export * from './AppEncryptionResponseOrdinalVdxfObject' export * from './ProvisionIdentityDetailsOrdinalVdxfObject' export * from './DataPacketResponseOrdinalVdxfObject' export * from './UserDataRequestOrdinalVdxfObject' diff --git a/src/vdxf/classes/response/AppEncryptionResponseDetails.ts b/src/vdxf/classes/response/AppEncryptionResponseDetails.ts new file mode 100644 index 00000000..5f0c744c --- /dev/null +++ b/src/vdxf/classes/response/AppEncryptionResponseDetails.ts @@ -0,0 +1,163 @@ + +import { BigNumber } from '../../../utils/types/BigNumber'; +import { BN } from 'bn.js'; +import varint from '../../../utils/varint'; +import bufferutils from '../../../utils/bufferutils'; +const { BufferReader, BufferWriter } = bufferutils; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { fromBase58Check, toBase58Check } from '../../../utils/address'; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../../../constants/vdxf'; +import { SaplingPaymentAddress } from '../../../pbaas'; +import createHash = require("create-hash"); +import { SaplingExtendedSpendingKey } from '../../../pbaas/SaplingExtendedSpendingKey'; +import { SaplingExtendedViewingKey } from '../../../pbaas/SaplingExtendedViewingKey'; + +export interface AppEncryptionResponseDetailsInterface { + version: BigNumber; + flags?: BigNumber; + requestID?: string; + extendedViewingKey: SaplingExtendedViewingKey; + address: SaplingPaymentAddress; + extendedSpendingKey?: SaplingExtendedSpendingKey; +} + +export interface AppEncryptionResponseDetailsJson { + version: number; + flags?: number; + requestid?: string; + extendedviewingkey: string; + address: string; + extendedspendingkey?: string; +} + +export class AppEncryptionResponseDetails implements SerializableEntity { + version: BigNumber; + flags: BigNumber; + requestID?: string; + extendedViewingKey: SaplingExtendedViewingKey; + address: SaplingPaymentAddress; + extendedSpendingKey?: SaplingExtendedSpendingKey; + + static RESPONSE_CONTAINS_REQUEST_ID = new BN(1, 10); + static RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY = new BN(2, 10); + + constructor(data?: AppEncryptionResponseDetailsInterface) { + this.version = data?.version ?? new BN(1); + this.flags = data?.flags ?? new BN(0, 10); + this.extendedViewingKey = data?.extendedViewingKey ?? new SaplingExtendedViewingKey(); + this.address = data?.address ?? new SaplingPaymentAddress(); + + if (data?.requestID) { + if (!this.containsRequestID()) this.toggleContainsRequestID(); + this.requestID = data.requestID; + } + + if (data?.extendedSpendingKey) { + if (!this.containsExtendedSpendingKey()) this.toggleContainsExtendedSpendingKey(); + this.extendedSpendingKey = data.extendedSpendingKey; + } + } + + containsRequestID() { + return !!(this.flags.and(AppEncryptionResponseDetails.RESPONSE_CONTAINS_REQUEST_ID).toNumber()); + } + + toggleContainsRequestID() { + this.flags = this.flags.xor(AppEncryptionResponseDetails.RESPONSE_CONTAINS_REQUEST_ID); + } + + containsExtendedSpendingKey() { + return !!(this.flags.and(AppEncryptionResponseDetails.RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY).toNumber()); + } + + toggleContainsExtendedSpendingKey() { + this.flags = this.flags.xor(AppEncryptionResponseDetails.RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY); + } + + toSha256() { + return createHash("sha256").update(this.toBuffer()).digest(); + } + + getByteLength(): number { + let length = 0; + + length += varint.encodingLength(this.flags); + + if (this.containsRequestID()) { + length += HASH160_BYTE_LENGTH; + } + + length += this.extendedViewingKey.getByteLength(); + length += this.address.getByteLength(); + + if (this.containsExtendedSpendingKey()) { + length += this.extendedSpendingKey.getByteLength(); + } + + return length; + } + + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + + writer.writeVarInt(this.flags); + + if (this.containsRequestID()) { + writer.writeSlice(fromBase58Check(this.requestID).hash); + } + + writer.writeSlice(this.extendedViewingKey.toBuffer()); + writer.writeSlice(this.address.toBuffer()); + + if (this.containsExtendedSpendingKey()) { + writer.writeSlice(this.extendedSpendingKey.toBuffer()); + } + + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset: number = 0) { + const reader = new BufferReader(buffer, offset); + + this.flags = reader.readVarInt(); + + if (this.containsRequestID()) { + this.requestID = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); + } + + this.extendedViewingKey = new SaplingExtendedViewingKey(); + reader.offset = this.extendedViewingKey.fromBuffer(reader.buffer, reader.offset); + + this.address = new SaplingPaymentAddress(); + reader.offset = this.address.fromBuffer(reader.buffer, reader.offset); + + if (this.containsExtendedSpendingKey()) { + this.extendedSpendingKey = new SaplingExtendedSpendingKey(); + reader.offset = this.extendedSpendingKey.fromBuffer(reader.buffer, reader.offset); + } + + return reader.offset; + } + + toJson(): AppEncryptionResponseDetailsJson { + return { + version: this.version.toNumber(), + flags: this.flags.toNumber(), + requestid: this.containsRequestID() ? this.requestID : undefined, + extendedviewingkey: this.extendedViewingKey.toKeyString(), + address: this.address.toAddressString(), + extendedspendingkey: this.containsExtendedSpendingKey() ? this.extendedSpendingKey.toKeyString() : undefined + }; + } + + static fromJson(json: AppEncryptionResponseDetailsJson): AppEncryptionResponseDetails { + return new AppEncryptionResponseDetails({ + version: new BN(json.version, 10), + flags: new BN(json.flags ?? 0, 10), + requestID: json.requestid, + extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(json.extendedviewingkey), + address: SaplingPaymentAddress.fromAddressString(json.address), + extendedSpendingKey: json.extendedspendingkey ? SaplingExtendedSpendingKey.fromKeyString(json.extendedspendingkey) : undefined + }); + } +} diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index b0d169b8..254fe6f3 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -704,3 +704,13 @@ export const USER_SPECIFIC_DATA_PACKET_VDXF_KEY: VDXFKeyInterface = { "name": "user.data.packet.details" } } + +export const APP_ENCRYPTION_RESPONSE_VDXF_KEY: VDXFKeyInterface = { + "vdxfid": "iLgnRLninDtMa7f7EbH7zsDqHRknC4CUpB", + "indexid": "xRWtt9DodY72CHY96GwGyFkNK5mo1n7Jxe", + "hash160result": "0d3c42aec1d154f1678e0585e557e75202a4cbbc", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "application.encryption.response" + } +} \ No newline at end of file From 6592128e3e337af97dc494f9535b13cbe7f0aa7b Mon Sep 17 00:00:00 2001 From: monkins Date: Wed, 26 Nov 2025 16:25:23 +0000 Subject: [PATCH 075/123] Upadtes to encryption --- .../vdxf/appencryptionrequestdetails.test.ts | 36 ++--- .../vdxf/appencryptionresponsedetails.test.ts | 24 +++ src/__tests__/vdxf/ordinalvdxfobject.test.ts | 23 ++- .../AppEncryptionRequestDetails.ts | 151 ++++++------------ .../response/AppEncryptionResponseDetails.ts | 10 ++ 5 files changed, 112 insertions(+), 132 deletions(-) diff --git a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts index cdeeae4c..f9a00290 100644 --- a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts +++ b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts @@ -14,14 +14,12 @@ describe("AppEncryptionRequestDetails serialization tests", () => { test("creates valid AppEncryptionRequestDetails with zaddress", () => { const details = new AppEncryptionRequestDetails({ version: AppEncryptionRequestDetails.DEFAULT_VERSION, - flags: AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER - .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) - .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS), + flags: AppEncryptionRequestDetails.HAS_DERIVATION_ID + .or(AppEncryptionRequestDetails.HAS_REQUEST_ID), + appOrDelegatedID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), - secondaryDerivationNumber: new BN(234), - fromAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), - toAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + derivationID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); @@ -35,11 +33,10 @@ describe("AppEncryptionRequestDetails serialization tests", () => { expect(details.isValid()).toBe(true); expect(details.encryptToZAddress).toBe("zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4"); - expect(details.flags.toNumber()).toBe(1+2+4+8); + expect(details.flags.toNumber()).toBe(1+2); // HAS_DERIVATION_ID + HAS_REQUEST_ID expect(details.derivationNumber.toNumber()).toBe(42); - expect(details.secondaryDerivationNumber?.toNumber()).toBe(234); - expect(details.fromAddress?.address).toBe("i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"); - expect(details.toAddress?.address).toBe("i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"); + expect(details.appOrDelegatedID?.address).toBe("i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"); + expect(details.derivationID?.address).toBe("i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"); expect(details.requestID).toBe("iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ"); }); @@ -47,14 +44,12 @@ describe("AppEncryptionRequestDetails serialization tests", () => { // Create the first AppEncryptionRequestDetails const originalDetails = new AppEncryptionRequestDetails({ version: AppEncryptionRequestDetails.DEFAULT_VERSION, - flags: AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER - .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) - .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS), + flags: AppEncryptionRequestDetails.HAS_DERIVATION_ID + .or(AppEncryptionRequestDetails.HAS_REQUEST_ID), + appOrDelegatedID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), - secondaryDerivationNumber: new BN(234), - fromAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), - toAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + derivationID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); @@ -74,11 +69,10 @@ describe("AppEncryptionRequestDetails serialization tests", () => { expect(deserializedDetails.flags.toNumber()).toBe(originalDetails.flags.toNumber()); expect(deserializedDetails.encryptToZAddress).toBe(originalDetails.encryptToZAddress); expect(deserializedDetails.derivationNumber.toNumber()).toBe(originalDetails.derivationNumber.toNumber()); - expect(deserializedDetails.secondaryDerivationNumber?.toNumber()).toBe(originalDetails.secondaryDerivationNumber?.toNumber()); - expect(deserializedDetails.fromAddress?.type.toNumber()).toBe(originalDetails.fromAddress?.type.toNumber()); - expect(deserializedDetails.fromAddress?.address).toBe(originalDetails.fromAddress?.address); - expect(deserializedDetails.toAddress?.type.toNumber()).toBe(originalDetails.toAddress?.type.toNumber()); - expect(deserializedDetails.toAddress?.address).toBe(originalDetails.toAddress?.address); + expect(deserializedDetails.appOrDelegatedID?.type.toNumber()).toBe(originalDetails.appOrDelegatedID?.type.toNumber()); + expect(deserializedDetails.appOrDelegatedID?.address).toBe(originalDetails.appOrDelegatedID?.address); + expect(deserializedDetails.derivationID?.type.toNumber()).toBe(originalDetails.derivationID?.type.toNumber()); + expect(deserializedDetails.derivationID?.address).toBe(originalDetails.derivationID?.address); expect(deserializedDetails.requestID).toBe(originalDetails.requestID); // Verify that serializing both instances produces the same buffer diff --git a/src/__tests__/vdxf/appencryptionresponsedetails.test.ts b/src/__tests__/vdxf/appencryptionresponsedetails.test.ts index 6e8bb694..9c004cfe 100644 --- a/src/__tests__/vdxf/appencryptionresponsedetails.test.ts +++ b/src/__tests__/vdxf/appencryptionresponsedetails.test.ts @@ -11,12 +11,15 @@ describe('AppEncryptionResponseDetails', () => { const testRequestID = 'iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ'; it('should create with minimal data', () => { + const testIncomingViewingKey = Buffer.from('be9af283ecfe0552480dd7e1ce9af61a12e64da4927e8011a795cb223f4afc00"', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), + IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress) }); + expect(response.IncomingViewingKey).toEqual(testIncomingViewingKey); expect(response.extendedViewingKey).toBeInstanceOf(SaplingExtendedViewingKey); expect(response.address).toBeInstanceOf(SaplingPaymentAddress); expect(response.containsRequestID()).toBe(false); @@ -24,40 +27,49 @@ describe('AppEncryptionResponseDetails', () => { }); it('should create with requestID', () => { + const testIncomingViewingKey = Buffer.from('1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), requestID: testRequestID, + IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress) }); + expect(response.IncomingViewingKey).toEqual(testIncomingViewingKey); expect(response.requestID).toBe(testRequestID); expect(response.containsRequestID()).toBe(true); expect(response.containsExtendedSpendingKey()).toBe(false); }); it('should create with extended spending key', () => { + const testIncomingViewingKey = Buffer.from('fedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), + IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress), extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey) }); + expect(response.IncomingViewingKey).toEqual(testIncomingViewingKey); expect(response.extendedSpendingKey).toBeInstanceOf(SaplingExtendedSpendingKey); expect(response.containsRequestID()).toBe(false); expect(response.containsExtendedSpendingKey()).toBe(true); }); it('should create with all optional fields', () => { + const testIncomingViewingKey = Buffer.from('0f1e2d3c4b5a69788796a5b4c3d2e1f00f1e2d3c4b5a69788796a5b4c3d2e1f0', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), requestID: testRequestID, + IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress), extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey) }); + expect(response.IncomingViewingKey).toEqual(testIncomingViewingKey); expect(response.requestID).toBe(testRequestID); expect(response.containsRequestID()).toBe(true); expect(response.extendedSpendingKey).toBeInstanceOf(SaplingExtendedSpendingKey); @@ -65,8 +77,10 @@ describe('AppEncryptionResponseDetails', () => { }); it('should serialize and deserialize via buffer (minimal)', () => { + const testIncomingViewingKey = Buffer.from('9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), + IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress) }); @@ -75,6 +89,7 @@ describe('AppEncryptionResponseDetails', () => { const response2 = new AppEncryptionResponseDetails(); response2.fromBuffer(buffer); + expect(response2.IncomingViewingKey.toString('hex')).toBe(testIncomingViewingKey.toString('hex')); expect(response2.containsRequestID()).toBe(false); expect(response2.containsExtendedSpendingKey()).toBe(false); expect(response2.extendedViewingKey.toKeyString()).toBe(testViewingKey); @@ -82,9 +97,11 @@ describe('AppEncryptionResponseDetails', () => { }); it('should serialize and deserialize via buffer (with requestID)', () => { + const testIncomingViewingKey = Buffer.from('abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), requestID: testRequestID, + IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress) }); @@ -93,6 +110,7 @@ describe('AppEncryptionResponseDetails', () => { const response2 = new AppEncryptionResponseDetails(); response2.fromBuffer(buffer); + expect(response2.IncomingViewingKey.toString('hex')).toBe(testIncomingViewingKey.toString('hex')); expect(response2.requestID).toBe(testRequestID); expect(response2.containsRequestID()).toBe(true); expect(response2.extendedViewingKey.toKeyString()).toBe(testViewingKey); @@ -100,8 +118,10 @@ describe('AppEncryptionResponseDetails', () => { }); it('should serialize and deserialize via buffer (with spending key)', () => { + const testIncomingViewingKey = Buffer.from('5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), + IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress), extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey) @@ -111,15 +131,18 @@ describe('AppEncryptionResponseDetails', () => { const response2 = new AppEncryptionResponseDetails(); response2.fromBuffer(buffer); + expect(response2.IncomingViewingKey.toString('hex')).toBe(testIncomingViewingKey.toString('hex')); expect(response2.containsExtendedSpendingKey()).toBe(true); expect(response2.extendedSpendingKey).toBeDefined(); expect(response2.extendedSpendingKey!.toKeyString()).toBe(testSpendingKey); }); it('should serialize and deserialize via JSON', () => { + const testIncomingViewingKey = Buffer.from('b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), requestID: testRequestID, + IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress), extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey) @@ -128,6 +151,7 @@ describe('AppEncryptionResponseDetails', () => { const json = response.toJson(); const response2 = AppEncryptionResponseDetails.fromJson(json); + expect(response2.IncomingViewingKey.toString('hex')).toBe(testIncomingViewingKey.toString('hex')); expect(response2.requestID).toBe(testRequestID); expect(response2.containsRequestID()).toBe(true); expect(response2.extendedViewingKey.toKeyString()).toBe(testViewingKey); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index a1cb26b5..ea36afd5 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -353,14 +353,12 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { it('should serialize / deserialize an AppEncryptionRequestOrdinalVdxfObject', () => { const details = new AppEncryptionRequestDetails({ version: AppEncryptionRequestDetails.DEFAULT_VERSION, - flags: AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER - .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) - .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS), + flags: AppEncryptionRequestDetails.HAS_DERIVATION_ID + .or(AppEncryptionRequestDetails.HAS_REQUEST_ID), + appOrDelegatedID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), - secondaryDerivationNumber: new BN(234), - fromAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), - toAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + derivationID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); @@ -370,11 +368,10 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(round).toBeInstanceOf(AppEncryptionRequestOrdinalVdxfObject); const d2 = (round as AppEncryptionRequestOrdinalVdxfObject).data; + expect(d2.appOrDelegatedID!.toIAddress()).toEqual(details.appOrDelegatedID!.toIAddress()); expect(d2.encryptToZAddress!).toEqual(details.encryptToZAddress); expect(d2.derivationNumber!.toString()).toEqual(details.derivationNumber!.toString()); - expect(d2.secondaryDerivationNumber!.toString()).toEqual(details.secondaryDerivationNumber!.toString()); - expect(d2.fromAddress!.toIAddress()).toEqual(details.fromAddress!.toIAddress()); - expect(d2.toAddress!.toIAddress()).toEqual(details.toAddress!.toIAddress()); + expect(d2.derivationID!.toIAddress()).toEqual(details.derivationID!.toIAddress()); expect(d2.requestID).toEqual(details.requestID); const json = obj.toJson(); @@ -383,11 +380,10 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(roundJ).toBeInstanceOf(AppEncryptionRequestOrdinalVdxfObject); const d3 = (roundJ as AppEncryptionRequestOrdinalVdxfObject).data; + expect(d3.appOrDelegatedID!.toIAddress()).toEqual(details.appOrDelegatedID!.toIAddress()); expect(d3.encryptToZAddress!).toEqual(details.encryptToZAddress); expect(d3.derivationNumber!.toString()).toEqual(details.derivationNumber!.toString()); - expect(d3.secondaryDerivationNumber!.toString()).toEqual(details.secondaryDerivationNumber!.toString()); - expect(d3.fromAddress!.toIAddress()).toEqual(details.fromAddress!.toIAddress()); - expect(d3.toAddress!.toIAddress()).toEqual(details.toAddress!.toIAddress()); + expect(d3.derivationID!.toIAddress()).toEqual(details.derivationID!.toIAddress()); expect(d3.requestID).toEqual(details.requestID); }); @@ -533,11 +529,13 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const testViewingKey = 'zxviews1q0njl87fqqqqpq8vghkp6nz9wx48mwelukvhx3yfwg7msatglv4xy8rrh87k9z472edvlrt950qyy6r766dxnpqktxug7t2wy80s4ug325dwp9hf4vw9a6ethf2mwc9wan28p88dq8q2e8sdlw2mhffg6hy92tjyuquz7a8reqdz905x6xt6kqdx5wn7jvas0733hends8q6s8k87emn6m060xdnhgmvn4zmx0ssrwve84lzxkqu2dnfq5qsjwrtlject0an0k282rsnx0kq4'; const testSpendingKey = 'secret-extended-key-main1q0njl87fqqqqpq8vghkp6nz9wx48mwelukvhx3yfwg7msatglv4xy8rrh87k9z472el95h53ym2tku2dazny0j2vfukgmp6fu3k7edzcx9n8egesc32sdy3xr4s2ep4skgc7t5j5zds4ws7hf2nuszf7ltfn2nc5rk3k77gyeqdz905x6xt6kqdx5wn7jvas0733hends8q6s8k87emn6m060xdnhgmvn4zmx0ssrwve84lzxkqu2dnfq5qsjwrtlject0an0k282rs0gws78'; const testAddress = 'zs1anxaua04mnl7dz2mjpflhw0mt73uxy9rjac53lgduk02kh3lnf0hxufk9d76j5uep5j55f5h5rk'; + const testIncomingViewingKey = Buffer.from('ba9af283ecfe0552480dd7e1ce9af68a12e64da4927e8011a795cb223f4afc00"', 'hex'); const details = new AppEncryptionResponseDetails({ version: new BN(1), flags: AppEncryptionResponseDetails.RESPONSE_CONTAINS_REQUEST_ID.or(AppEncryptionResponseDetails.RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ", + IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey), address: SaplingPaymentAddress.fromAddressString(testAddress) @@ -549,6 +547,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(round).toBeInstanceOf(AppEncryptionResponseOrdinalVdxfObject); const d2 = (round as AppEncryptionResponseOrdinalVdxfObject).data; + expect(d2.IncomingViewingKey.toString('hex')).toEqual(testIncomingViewingKey.toString('hex')); expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d2.extendedViewingKey!.toKeyString()).toEqual(details.extendedViewingKey!.toKeyString()); expect(d2.extendedSpendingKey!.toKeyString()).toEqual(details.extendedSpendingKey!.toKeyString()); diff --git a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts index e6423563..c0380a7c 100644 --- a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts @@ -4,13 +4,17 @@ * * This class is used when an application is requesting an encrypted derived seed from the user's master seed, * using specific parameters passed by the application. The request includes: - * - A target encryption key (zaddress format) - * - Derivation numbers for seed generation - * - Optional source and destination addresses for context + * - App or delegated ID making the request (mandatory) + * - A target encryption key (zaddress format) for encrypting the reply + * - Derivation number for seed generation + * - Optional derivation ID (defaults to Z-address from ID signing if not present) + * - Optional request ID for tracking * * The user's wallet can use these parameters to derive a specific seed from their master seed * and encrypt it using the provided encryption key, ensuring the application receives only * the specific derived seed it needs without exposing the master seed. + * + * The RETURN_ESK flag can be set to signal that the Extended Spending Key should be returned. */ import { BigNumber } from '../../../utils/types/BigNumber'; @@ -28,40 +32,30 @@ import { I_ADDR_VERSION, HASH160_BYTE_LENGTH } from '../../../constants/vdxf'; export interface AppEncryptionRequestInterface { version?: BigNumber; flags: BigNumber; + appOrDelegatedID: CompactIdAddressObject; encryptToZAddress: string; derivationNumber: BigNumber; - secondaryDerivationNumber?: BigNumber; - fromAddress?: CompactIdAddressObject; - toAddress?: CompactIdAddressObject; + derivationID?: CompactIdAddressObject; requestID?: string; } export interface AppEncryptionRequestJson { version: number; flags: number; + appordelegatedid: CompactIdAddressObjectJson; encrypttozaddress: string; derivationnumber: number; - secondaryderivationnumber?: number; - fromaddress?: CompactIdAddressObjectJson; - toaddress?: CompactIdAddressObjectJson; + derivationid?: CompactIdAddressObjectJson; requestid?: string; } /** * Checks if a string is a valid hexadecimal address * @param flags - Optional flags for the request - * @flag HAS_FROM_ADDRESS - Indicates if a from address is included - * @flag HAS_TO_ADDRESS - Indicates if a to address is included - * @flag HAS_OPTIONAL_SEED_DERIVATION - Indicates if an optional derivation number is included - * @flag ADDRESSES_NOT_FQN - Indicates if addresses are in hex format rather than FQN + * @flag HAS_REQUEST_ID - Indicates if a request ID is included * * @param encryptToZAddress - The encryption key to use for encrypting to * @param derivationNumber - The derivation number to validate - * @param secondaryDerivationNumber - The optional derivation number to validate - * @param fromAddress - The from address to be included in the encryption either - * john.domain@ or [20-byte hex iaddress][20-byte hex system] - * @param toAddress - The to address to be included in the encryption either - * john.domain@ or [20-byte hex iaddress][20-byte hex system] */ export class AppEncryptionRequestDetails implements SerializableEntity { @@ -70,28 +64,25 @@ export class AppEncryptionRequestDetails implements SerializableEntity { static LAST_VERSION = new BN(1); static DEFAULT_VERSION = new BN(1); - static HAS_FROM_ADDRESS = new BN(1); - static HAS_TO_ADDRESS = new BN(2); - static HAS_SECONDARY_SEED_DERIVATION_NUMBER = new BN(4); - static HAS_REQUEST_ID = new BN(8); + static HAS_DERIVATION_ID = new BN(1); + static HAS_REQUEST_ID = new BN(2); + static RETURN_ESK = new BN(4); //flag to signal to return the Extended Spending Key version: BigNumber; flags: BigNumber; - encryptToZAddress: string; + appOrDelegatedID?: CompactIdAddressObject; // ID of the app or delegated entity making the request + encryptToZAddress: string; // zaddress reply is encrypted to derivationNumber: BigNumber; - secondaryDerivationNumber?: BigNumber; - fromAddress?: CompactIdAddressObject; - toAddress?: CompactIdAddressObject; - requestID?: string; + derivationID?: CompactIdAddressObject; // Defaults to choosing the Z-address from the ID signing if not present + requestID?: string; // Unique identifier for the request constructor(data?: AppEncryptionRequestInterface) { this.version = data?.version || AppEncryptionRequestDetails.DEFAULT_VERSION; this.flags = data?.flags || new BN(0); + this.appOrDelegatedID = data?.appOrDelegatedID; this.encryptToZAddress = data?.encryptToZAddress || ''; this.derivationNumber = data?.derivationNumber || new BN(0); - this.secondaryDerivationNumber = data?.secondaryDerivationNumber; - this.fromAddress = data?.fromAddress; - this.toAddress = data?.toAddress; + this.derivationID = data?.derivationID; this.requestID = data?.requestID; this.setFlags(); @@ -104,16 +95,8 @@ export class AppEncryptionRequestDetails implements SerializableEntity { calcFlags(): BigNumber { let flags = new BN(0); - if (this.secondaryDerivationNumber != null) { - flags = flags.or(AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER); - } - - if (this.fromAddress != null) { - flags = flags.or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS); - } - - if (this.toAddress != null) { - flags = flags.or(AppEncryptionRequestDetails.HAS_TO_ADDRESS); + if (this.derivationID != null) { + flags = flags.or(AppEncryptionRequestDetails.HAS_DERIVATION_ID); } if (this.requestID != null) { @@ -124,23 +107,15 @@ export class AppEncryptionRequestDetails implements SerializableEntity { } isValid(): boolean { - let valid = this.encryptToZAddress != null && this.encryptToZAddress.length > 0; + let valid = this.appOrDelegatedID != null; + valid &&= this.encryptToZAddress != null && this.encryptToZAddress.length > 0; valid &&= this.derivationNumber != null && this.derivationNumber.gte(new BN(0)); - valid &&= this.secondaryDerivationNumber == null || this.secondaryDerivationNumber.gte(new BN(0)); return valid; } - hasSecondarySeedDerivation(flags: BigNumber = this.flags): boolean { - return flags.and(AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER).gt(new BN(0)); - } - - hasFromAddress(flags: BigNumber = this.flags): boolean { - return flags.and(AppEncryptionRequestDetails.HAS_FROM_ADDRESS).gt(new BN(0)); - } - - hasToAddress(flags: BigNumber = this.flags): boolean { - return flags.and(AppEncryptionRequestDetails.HAS_TO_ADDRESS).gt(new BN(0)); + hasDerivationID(flags: BigNumber = this.flags): boolean { + return flags.and(AppEncryptionRequestDetails.HAS_DERIVATION_ID).gt(new BN(0)); } hasRequestID(flags: BigNumber = this.flags): boolean { @@ -155,21 +130,16 @@ export class AppEncryptionRequestDetails implements SerializableEntity { length += varuint.encodingLength(flags.toNumber()); + // appOrDelegatedID + length += this.appOrDelegatedID.getByteLength(); + // encryptToKey - zaddress encoding (43 bytes for sapling address data) length += 43; // Sapling address decoded data (11 + 32 bytes) length += varuint.encodingLength(this.derivationNumber.toNumber()); - if (this.hasSecondarySeedDerivation(flags)) { - length += varint.encodingLength(this.secondaryDerivationNumber); - } - - if (this.hasFromAddress(flags)) { - length += this.fromAddress.getByteLength(); - } - - if (this.hasToAddress(flags)) { - length += this.toAddress.getByteLength(); + if (this.hasDerivationID(flags)) { + length += this.derivationID.getByteLength(); } if (this.hasRequestID(flags)) { @@ -186,6 +156,9 @@ export class AppEncryptionRequestDetails implements SerializableEntity { // Write flags writer.writeCompactSize(flags.toNumber()); + // Write appOrDelegatedID + writer.writeSlice(this.appOrDelegatedID.toBuffer()); + // Write encryptToAddress as decoded sapling address data const saplingData = decodeSaplingAddress(this.encryptToZAddress); writer.writeSlice(Buffer.concat([saplingData.d, saplingData.pk_d])); @@ -193,16 +166,8 @@ export class AppEncryptionRequestDetails implements SerializableEntity { // Write mandatory derivation number writer.writeVarInt(this.derivationNumber); - if (this.hasSecondarySeedDerivation(flags)) { - writer.writeVarInt(this.secondaryDerivationNumber); - } - - if (this.hasFromAddress(flags)) { - writer.writeSlice(this.fromAddress.toBuffer()); - } - - if (this.hasToAddress(flags)) { - writer.writeSlice(this.toAddress.toBuffer()); + if (this.hasDerivationID(flags)) { + writer.writeSlice(this.derivationID.toBuffer()); } if (this.hasRequestID(flags)) { @@ -219,6 +184,11 @@ export class AppEncryptionRequestDetails implements SerializableEntity { // Read flags this.flags = new BN(reader.readCompactSize()); + // Read appOrDelegatedID + const appOrDelegatedIDObj = new CompactIdAddressObject(); + reader.offset = appOrDelegatedIDObj.fromBuffer(reader.buffer, reader.offset); + this.appOrDelegatedID = appOrDelegatedIDObj; + // Read encryptToAddress as 43-byte sapling data and encode as sapling address const saplingData = reader.readSlice(43); this.encryptToZAddress = toBech32('zs', saplingData); @@ -226,22 +196,10 @@ export class AppEncryptionRequestDetails implements SerializableEntity { // Read mandatory derivation number this.derivationNumber = reader.readVarInt(); - // Read optional derivation number if flag is set - if (this.hasSecondarySeedDerivation()) { - this.secondaryDerivationNumber = reader.readVarInt(); - } - - // Read addresses based on flags - if (this.hasFromAddress()) { - const CompactId = new CompactIdAddressObject(); - reader.offset = CompactId.fromBuffer(reader.buffer, reader.offset); - this.fromAddress = CompactId; - } - - if (this.hasToAddress()) { - const CompactId = new CompactIdAddressObject(); - reader.offset = CompactId.fromBuffer(reader.buffer, reader.offset); - this.toAddress = CompactId; + if (this.hasDerivationID()) { + const derivationIDObj = new CompactIdAddressObject(); + reader.offset = derivationIDObj.fromBuffer(reader.buffer, reader.offset); + this.derivationID = derivationIDObj; } if (this.hasRequestID()) { @@ -258,11 +216,10 @@ export class AppEncryptionRequestDetails implements SerializableEntity { return { version: this.version.toNumber(), flags: flags.toNumber(), + appordelegatedid: this.appOrDelegatedID.toJson(), encrypttozaddress: this.encryptToZAddress, derivationnumber: this.derivationNumber.toNumber(), - secondaryderivationnumber: this.secondaryDerivationNumber?.toNumber(), - fromaddress: this.fromAddress?.toJson(), - toaddress: this.toAddress?.toJson(), + derivationid: this.derivationID?.toJson(), requestid: this.requestID }; } @@ -271,18 +228,14 @@ export class AppEncryptionRequestDetails implements SerializableEntity { const instance = new AppEncryptionRequestDetails(); instance.version = new BN(json.version); instance.flags = new BN(json.flags); + instance.appOrDelegatedID = CompactIdAddressObject.fromJson(json.appordelegatedid); instance.encryptToZAddress = json.encrypttozaddress; instance.derivationNumber = new BN(json.derivationnumber); - instance.secondaryDerivationNumber = json?.secondaryderivationnumber ? new BN(json.secondaryderivationnumber) : undefined; - if(instance.hasFromAddress()) { - instance.fromAddress = CompactIdAddressObject.fromJson(json?.fromaddress); + if(instance.hasDerivationID()) { + instance.derivationID = CompactIdAddressObject.fromJson(json?.derivationid); } - - if(instance.hasToAddress()) { - instance.toAddress = CompactIdAddressObject.fromJson(json?.toaddress); - } - + if(instance.hasRequestID()) { instance.requestID = json?.requestid; } diff --git a/src/vdxf/classes/response/AppEncryptionResponseDetails.ts b/src/vdxf/classes/response/AppEncryptionResponseDetails.ts index 5f0c744c..fd111a5c 100644 --- a/src/vdxf/classes/response/AppEncryptionResponseDetails.ts +++ b/src/vdxf/classes/response/AppEncryptionResponseDetails.ts @@ -16,6 +16,7 @@ export interface AppEncryptionResponseDetailsInterface { version: BigNumber; flags?: BigNumber; requestID?: string; + IncomingViewingKey: Buffer; extendedViewingKey: SaplingExtendedViewingKey; address: SaplingPaymentAddress; extendedSpendingKey?: SaplingExtendedSpendingKey; @@ -25,6 +26,7 @@ export interface AppEncryptionResponseDetailsJson { version: number; flags?: number; requestid?: string; + incomingviewingkey: string; extendedviewingkey: string; address: string; extendedspendingkey?: string; @@ -34,6 +36,7 @@ export class AppEncryptionResponseDetails implements SerializableEntity { version: BigNumber; flags: BigNumber; requestID?: string; + IncomingViewingKey: Buffer; extendedViewingKey: SaplingExtendedViewingKey; address: SaplingPaymentAddress; extendedSpendingKey?: SaplingExtendedSpendingKey; @@ -44,6 +47,7 @@ export class AppEncryptionResponseDetails implements SerializableEntity { constructor(data?: AppEncryptionResponseDetailsInterface) { this.version = data?.version ?? new BN(1); this.flags = data?.flags ?? new BN(0, 10); + this.IncomingViewingKey = data?.IncomingViewingKey ?? Buffer.alloc(32); this.extendedViewingKey = data?.extendedViewingKey ?? new SaplingExtendedViewingKey(); this.address = data?.address ?? new SaplingPaymentAddress(); @@ -87,6 +91,7 @@ export class AppEncryptionResponseDetails implements SerializableEntity { length += HASH160_BYTE_LENGTH; } + length += 32; // IncomingViewingKey length += this.extendedViewingKey.getByteLength(); length += this.address.getByteLength(); @@ -106,6 +111,7 @@ export class AppEncryptionResponseDetails implements SerializableEntity { writer.writeSlice(fromBase58Check(this.requestID).hash); } + writer.writeSlice(this.IncomingViewingKey); writer.writeSlice(this.extendedViewingKey.toBuffer()); writer.writeSlice(this.address.toBuffer()); @@ -125,6 +131,8 @@ export class AppEncryptionResponseDetails implements SerializableEntity { this.requestID = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); } + this.IncomingViewingKey = reader.readSlice(32); + this.extendedViewingKey = new SaplingExtendedViewingKey(); reader.offset = this.extendedViewingKey.fromBuffer(reader.buffer, reader.offset); @@ -144,6 +152,7 @@ export class AppEncryptionResponseDetails implements SerializableEntity { version: this.version.toNumber(), flags: this.flags.toNumber(), requestid: this.containsRequestID() ? this.requestID : undefined, + incomingviewingkey: this.IncomingViewingKey.toString('hex'), extendedviewingkey: this.extendedViewingKey.toKeyString(), address: this.address.toAddressString(), extendedspendingkey: this.containsExtendedSpendingKey() ? this.extendedSpendingKey.toKeyString() : undefined @@ -155,6 +164,7 @@ export class AppEncryptionResponseDetails implements SerializableEntity { version: new BN(json.version, 10), flags: new BN(json.flags ?? 0, 10), requestID: json.requestid, + IncomingViewingKey: Buffer.from(json.incomingviewingkey, 'hex'), extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(json.extendedviewingkey), address: SaplingPaymentAddress.fromAddressString(json.address), extendedSpendingKey: json.extendedspendingkey ? SaplingExtendedSpendingKey.fromKeyString(json.extendedspendingkey) : undefined From 675c7aa5a511c7a82bed605681c5b0327b3d4c84 Mon Sep 17 00:00:00 2001 From: monkins Date: Wed, 26 Nov 2025 16:26:53 +0000 Subject: [PATCH 076/123] Revert "Updates to encryption" This reverts commit 6592128e3e337af97dc494f9535b13cbe7f0aa7b. --- .../vdxf/appencryptionrequestdetails.test.ts | 36 +++-- .../vdxf/appencryptionresponsedetails.test.ts | 24 --- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 23 +-- .../AppEncryptionRequestDetails.ts | 151 ++++++++++++------ .../response/AppEncryptionResponseDetails.ts | 10 -- 5 files changed, 132 insertions(+), 112 deletions(-) diff --git a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts index f9a00290..cdeeae4c 100644 --- a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts +++ b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts @@ -14,12 +14,14 @@ describe("AppEncryptionRequestDetails serialization tests", () => { test("creates valid AppEncryptionRequestDetails with zaddress", () => { const details = new AppEncryptionRequestDetails({ version: AppEncryptionRequestDetails.DEFAULT_VERSION, - flags: AppEncryptionRequestDetails.HAS_DERIVATION_ID - .or(AppEncryptionRequestDetails.HAS_REQUEST_ID), - appOrDelegatedID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), + flags: AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER + .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) + .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), - derivationID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + secondaryDerivationNumber: new BN(234), + fromAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), + toAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); @@ -33,10 +35,11 @@ describe("AppEncryptionRequestDetails serialization tests", () => { expect(details.isValid()).toBe(true); expect(details.encryptToZAddress).toBe("zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4"); - expect(details.flags.toNumber()).toBe(1+2); // HAS_DERIVATION_ID + HAS_REQUEST_ID + expect(details.flags.toNumber()).toBe(1+2+4+8); expect(details.derivationNumber.toNumber()).toBe(42); - expect(details.appOrDelegatedID?.address).toBe("i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"); - expect(details.derivationID?.address).toBe("i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"); + expect(details.secondaryDerivationNumber?.toNumber()).toBe(234); + expect(details.fromAddress?.address).toBe("i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"); + expect(details.toAddress?.address).toBe("i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"); expect(details.requestID).toBe("iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ"); }); @@ -44,12 +47,14 @@ describe("AppEncryptionRequestDetails serialization tests", () => { // Create the first AppEncryptionRequestDetails const originalDetails = new AppEncryptionRequestDetails({ version: AppEncryptionRequestDetails.DEFAULT_VERSION, - flags: AppEncryptionRequestDetails.HAS_DERIVATION_ID - .or(AppEncryptionRequestDetails.HAS_REQUEST_ID), - appOrDelegatedID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), + flags: AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER + .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) + .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), - derivationID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + secondaryDerivationNumber: new BN(234), + fromAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), + toAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); @@ -69,10 +74,11 @@ describe("AppEncryptionRequestDetails serialization tests", () => { expect(deserializedDetails.flags.toNumber()).toBe(originalDetails.flags.toNumber()); expect(deserializedDetails.encryptToZAddress).toBe(originalDetails.encryptToZAddress); expect(deserializedDetails.derivationNumber.toNumber()).toBe(originalDetails.derivationNumber.toNumber()); - expect(deserializedDetails.appOrDelegatedID?.type.toNumber()).toBe(originalDetails.appOrDelegatedID?.type.toNumber()); - expect(deserializedDetails.appOrDelegatedID?.address).toBe(originalDetails.appOrDelegatedID?.address); - expect(deserializedDetails.derivationID?.type.toNumber()).toBe(originalDetails.derivationID?.type.toNumber()); - expect(deserializedDetails.derivationID?.address).toBe(originalDetails.derivationID?.address); + expect(deserializedDetails.secondaryDerivationNumber?.toNumber()).toBe(originalDetails.secondaryDerivationNumber?.toNumber()); + expect(deserializedDetails.fromAddress?.type.toNumber()).toBe(originalDetails.fromAddress?.type.toNumber()); + expect(deserializedDetails.fromAddress?.address).toBe(originalDetails.fromAddress?.address); + expect(deserializedDetails.toAddress?.type.toNumber()).toBe(originalDetails.toAddress?.type.toNumber()); + expect(deserializedDetails.toAddress?.address).toBe(originalDetails.toAddress?.address); expect(deserializedDetails.requestID).toBe(originalDetails.requestID); // Verify that serializing both instances produces the same buffer diff --git a/src/__tests__/vdxf/appencryptionresponsedetails.test.ts b/src/__tests__/vdxf/appencryptionresponsedetails.test.ts index 9c004cfe..6e8bb694 100644 --- a/src/__tests__/vdxf/appencryptionresponsedetails.test.ts +++ b/src/__tests__/vdxf/appencryptionresponsedetails.test.ts @@ -11,15 +11,12 @@ describe('AppEncryptionResponseDetails', () => { const testRequestID = 'iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ'; it('should create with minimal data', () => { - const testIncomingViewingKey = Buffer.from('be9af283ecfe0552480dd7e1ce9af61a12e64da4927e8011a795cb223f4afc00"', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), - IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress) }); - expect(response.IncomingViewingKey).toEqual(testIncomingViewingKey); expect(response.extendedViewingKey).toBeInstanceOf(SaplingExtendedViewingKey); expect(response.address).toBeInstanceOf(SaplingPaymentAddress); expect(response.containsRequestID()).toBe(false); @@ -27,49 +24,40 @@ describe('AppEncryptionResponseDetails', () => { }); it('should create with requestID', () => { - const testIncomingViewingKey = Buffer.from('1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), requestID: testRequestID, - IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress) }); - expect(response.IncomingViewingKey).toEqual(testIncomingViewingKey); expect(response.requestID).toBe(testRequestID); expect(response.containsRequestID()).toBe(true); expect(response.containsExtendedSpendingKey()).toBe(false); }); it('should create with extended spending key', () => { - const testIncomingViewingKey = Buffer.from('fedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), - IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress), extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey) }); - expect(response.IncomingViewingKey).toEqual(testIncomingViewingKey); expect(response.extendedSpendingKey).toBeInstanceOf(SaplingExtendedSpendingKey); expect(response.containsRequestID()).toBe(false); expect(response.containsExtendedSpendingKey()).toBe(true); }); it('should create with all optional fields', () => { - const testIncomingViewingKey = Buffer.from('0f1e2d3c4b5a69788796a5b4c3d2e1f00f1e2d3c4b5a69788796a5b4c3d2e1f0', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), requestID: testRequestID, - IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress), extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey) }); - expect(response.IncomingViewingKey).toEqual(testIncomingViewingKey); expect(response.requestID).toBe(testRequestID); expect(response.containsRequestID()).toBe(true); expect(response.extendedSpendingKey).toBeInstanceOf(SaplingExtendedSpendingKey); @@ -77,10 +65,8 @@ describe('AppEncryptionResponseDetails', () => { }); it('should serialize and deserialize via buffer (minimal)', () => { - const testIncomingViewingKey = Buffer.from('9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), - IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress) }); @@ -89,7 +75,6 @@ describe('AppEncryptionResponseDetails', () => { const response2 = new AppEncryptionResponseDetails(); response2.fromBuffer(buffer); - expect(response2.IncomingViewingKey.toString('hex')).toBe(testIncomingViewingKey.toString('hex')); expect(response2.containsRequestID()).toBe(false); expect(response2.containsExtendedSpendingKey()).toBe(false); expect(response2.extendedViewingKey.toKeyString()).toBe(testViewingKey); @@ -97,11 +82,9 @@ describe('AppEncryptionResponseDetails', () => { }); it('should serialize and deserialize via buffer (with requestID)', () => { - const testIncomingViewingKey = Buffer.from('abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), requestID: testRequestID, - IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress) }); @@ -110,7 +93,6 @@ describe('AppEncryptionResponseDetails', () => { const response2 = new AppEncryptionResponseDetails(); response2.fromBuffer(buffer); - expect(response2.IncomingViewingKey.toString('hex')).toBe(testIncomingViewingKey.toString('hex')); expect(response2.requestID).toBe(testRequestID); expect(response2.containsRequestID()).toBe(true); expect(response2.extendedViewingKey.toKeyString()).toBe(testViewingKey); @@ -118,10 +100,8 @@ describe('AppEncryptionResponseDetails', () => { }); it('should serialize and deserialize via buffer (with spending key)', () => { - const testIncomingViewingKey = Buffer.from('5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), - IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress), extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey) @@ -131,18 +111,15 @@ describe('AppEncryptionResponseDetails', () => { const response2 = new AppEncryptionResponseDetails(); response2.fromBuffer(buffer); - expect(response2.IncomingViewingKey.toString('hex')).toBe(testIncomingViewingKey.toString('hex')); expect(response2.containsExtendedSpendingKey()).toBe(true); expect(response2.extendedSpendingKey).toBeDefined(); expect(response2.extendedSpendingKey!.toKeyString()).toBe(testSpendingKey); }); it('should serialize and deserialize via JSON', () => { - const testIncomingViewingKey = Buffer.from('b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), requestID: testRequestID, - IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress), extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey) @@ -151,7 +128,6 @@ describe('AppEncryptionResponseDetails', () => { const json = response.toJson(); const response2 = AppEncryptionResponseDetails.fromJson(json); - expect(response2.IncomingViewingKey.toString('hex')).toBe(testIncomingViewingKey.toString('hex')); expect(response2.requestID).toBe(testRequestID); expect(response2.containsRequestID()).toBe(true); expect(response2.extendedViewingKey.toKeyString()).toBe(testViewingKey); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index ea36afd5..a1cb26b5 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -353,12 +353,14 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { it('should serialize / deserialize an AppEncryptionRequestOrdinalVdxfObject', () => { const details = new AppEncryptionRequestDetails({ version: AppEncryptionRequestDetails.DEFAULT_VERSION, - flags: AppEncryptionRequestDetails.HAS_DERIVATION_ID - .or(AppEncryptionRequestDetails.HAS_REQUEST_ID), - appOrDelegatedID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), + flags: AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER + .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) + .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), - derivationID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + secondaryDerivationNumber: new BN(234), + fromAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), + toAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); @@ -368,10 +370,11 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(round).toBeInstanceOf(AppEncryptionRequestOrdinalVdxfObject); const d2 = (round as AppEncryptionRequestOrdinalVdxfObject).data; - expect(d2.appOrDelegatedID!.toIAddress()).toEqual(details.appOrDelegatedID!.toIAddress()); expect(d2.encryptToZAddress!).toEqual(details.encryptToZAddress); expect(d2.derivationNumber!.toString()).toEqual(details.derivationNumber!.toString()); - expect(d2.derivationID!.toIAddress()).toEqual(details.derivationID!.toIAddress()); + expect(d2.secondaryDerivationNumber!.toString()).toEqual(details.secondaryDerivationNumber!.toString()); + expect(d2.fromAddress!.toIAddress()).toEqual(details.fromAddress!.toIAddress()); + expect(d2.toAddress!.toIAddress()).toEqual(details.toAddress!.toIAddress()); expect(d2.requestID).toEqual(details.requestID); const json = obj.toJson(); @@ -380,10 +383,11 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(roundJ).toBeInstanceOf(AppEncryptionRequestOrdinalVdxfObject); const d3 = (roundJ as AppEncryptionRequestOrdinalVdxfObject).data; - expect(d3.appOrDelegatedID!.toIAddress()).toEqual(details.appOrDelegatedID!.toIAddress()); expect(d3.encryptToZAddress!).toEqual(details.encryptToZAddress); expect(d3.derivationNumber!.toString()).toEqual(details.derivationNumber!.toString()); - expect(d3.derivationID!.toIAddress()).toEqual(details.derivationID!.toIAddress()); + expect(d3.secondaryDerivationNumber!.toString()).toEqual(details.secondaryDerivationNumber!.toString()); + expect(d3.fromAddress!.toIAddress()).toEqual(details.fromAddress!.toIAddress()); + expect(d3.toAddress!.toIAddress()).toEqual(details.toAddress!.toIAddress()); expect(d3.requestID).toEqual(details.requestID); }); @@ -529,13 +533,11 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const testViewingKey = 'zxviews1q0njl87fqqqqpq8vghkp6nz9wx48mwelukvhx3yfwg7msatglv4xy8rrh87k9z472edvlrt950qyy6r766dxnpqktxug7t2wy80s4ug325dwp9hf4vw9a6ethf2mwc9wan28p88dq8q2e8sdlw2mhffg6hy92tjyuquz7a8reqdz905x6xt6kqdx5wn7jvas0733hends8q6s8k87emn6m060xdnhgmvn4zmx0ssrwve84lzxkqu2dnfq5qsjwrtlject0an0k282rsnx0kq4'; const testSpendingKey = 'secret-extended-key-main1q0njl87fqqqqpq8vghkp6nz9wx48mwelukvhx3yfwg7msatglv4xy8rrh87k9z472el95h53ym2tku2dazny0j2vfukgmp6fu3k7edzcx9n8egesc32sdy3xr4s2ep4skgc7t5j5zds4ws7hf2nuszf7ltfn2nc5rk3k77gyeqdz905x6xt6kqdx5wn7jvas0733hends8q6s8k87emn6m060xdnhgmvn4zmx0ssrwve84lzxkqu2dnfq5qsjwrtlject0an0k282rs0gws78'; const testAddress = 'zs1anxaua04mnl7dz2mjpflhw0mt73uxy9rjac53lgduk02kh3lnf0hxufk9d76j5uep5j55f5h5rk'; - const testIncomingViewingKey = Buffer.from('ba9af283ecfe0552480dd7e1ce9af68a12e64da4927e8011a795cb223f4afc00"', 'hex'); const details = new AppEncryptionResponseDetails({ version: new BN(1), flags: AppEncryptionResponseDetails.RESPONSE_CONTAINS_REQUEST_ID.or(AppEncryptionResponseDetails.RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ", - IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey), address: SaplingPaymentAddress.fromAddressString(testAddress) @@ -547,7 +549,6 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(round).toBeInstanceOf(AppEncryptionResponseOrdinalVdxfObject); const d2 = (round as AppEncryptionResponseOrdinalVdxfObject).data; - expect(d2.IncomingViewingKey.toString('hex')).toEqual(testIncomingViewingKey.toString('hex')); expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d2.extendedViewingKey!.toKeyString()).toEqual(details.extendedViewingKey!.toKeyString()); expect(d2.extendedSpendingKey!.toKeyString()).toEqual(details.extendedSpendingKey!.toKeyString()); diff --git a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts index c0380a7c..e6423563 100644 --- a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts @@ -4,17 +4,13 @@ * * This class is used when an application is requesting an encrypted derived seed from the user's master seed, * using specific parameters passed by the application. The request includes: - * - App or delegated ID making the request (mandatory) - * - A target encryption key (zaddress format) for encrypting the reply - * - Derivation number for seed generation - * - Optional derivation ID (defaults to Z-address from ID signing if not present) - * - Optional request ID for tracking + * - A target encryption key (zaddress format) + * - Derivation numbers for seed generation + * - Optional source and destination addresses for context * * The user's wallet can use these parameters to derive a specific seed from their master seed * and encrypt it using the provided encryption key, ensuring the application receives only * the specific derived seed it needs without exposing the master seed. - * - * The RETURN_ESK flag can be set to signal that the Extended Spending Key should be returned. */ import { BigNumber } from '../../../utils/types/BigNumber'; @@ -32,30 +28,40 @@ import { I_ADDR_VERSION, HASH160_BYTE_LENGTH } from '../../../constants/vdxf'; export interface AppEncryptionRequestInterface { version?: BigNumber; flags: BigNumber; - appOrDelegatedID: CompactIdAddressObject; encryptToZAddress: string; derivationNumber: BigNumber; - derivationID?: CompactIdAddressObject; + secondaryDerivationNumber?: BigNumber; + fromAddress?: CompactIdAddressObject; + toAddress?: CompactIdAddressObject; requestID?: string; } export interface AppEncryptionRequestJson { version: number; flags: number; - appordelegatedid: CompactIdAddressObjectJson; encrypttozaddress: string; derivationnumber: number; - derivationid?: CompactIdAddressObjectJson; + secondaryderivationnumber?: number; + fromaddress?: CompactIdAddressObjectJson; + toaddress?: CompactIdAddressObjectJson; requestid?: string; } /** * Checks if a string is a valid hexadecimal address * @param flags - Optional flags for the request - * @flag HAS_REQUEST_ID - Indicates if a request ID is included + * @flag HAS_FROM_ADDRESS - Indicates if a from address is included + * @flag HAS_TO_ADDRESS - Indicates if a to address is included + * @flag HAS_OPTIONAL_SEED_DERIVATION - Indicates if an optional derivation number is included + * @flag ADDRESSES_NOT_FQN - Indicates if addresses are in hex format rather than FQN * * @param encryptToZAddress - The encryption key to use for encrypting to * @param derivationNumber - The derivation number to validate + * @param secondaryDerivationNumber - The optional derivation number to validate + * @param fromAddress - The from address to be included in the encryption either + * john.domain@ or [20-byte hex iaddress][20-byte hex system] + * @param toAddress - The to address to be included in the encryption either + * john.domain@ or [20-byte hex iaddress][20-byte hex system] */ export class AppEncryptionRequestDetails implements SerializableEntity { @@ -64,25 +70,28 @@ export class AppEncryptionRequestDetails implements SerializableEntity { static LAST_VERSION = new BN(1); static DEFAULT_VERSION = new BN(1); - static HAS_DERIVATION_ID = new BN(1); - static HAS_REQUEST_ID = new BN(2); - static RETURN_ESK = new BN(4); //flag to signal to return the Extended Spending Key + static HAS_FROM_ADDRESS = new BN(1); + static HAS_TO_ADDRESS = new BN(2); + static HAS_SECONDARY_SEED_DERIVATION_NUMBER = new BN(4); + static HAS_REQUEST_ID = new BN(8); version: BigNumber; flags: BigNumber; - appOrDelegatedID?: CompactIdAddressObject; // ID of the app or delegated entity making the request - encryptToZAddress: string; // zaddress reply is encrypted to + encryptToZAddress: string; derivationNumber: BigNumber; - derivationID?: CompactIdAddressObject; // Defaults to choosing the Z-address from the ID signing if not present - requestID?: string; // Unique identifier for the request + secondaryDerivationNumber?: BigNumber; + fromAddress?: CompactIdAddressObject; + toAddress?: CompactIdAddressObject; + requestID?: string; constructor(data?: AppEncryptionRequestInterface) { this.version = data?.version || AppEncryptionRequestDetails.DEFAULT_VERSION; this.flags = data?.flags || new BN(0); - this.appOrDelegatedID = data?.appOrDelegatedID; this.encryptToZAddress = data?.encryptToZAddress || ''; this.derivationNumber = data?.derivationNumber || new BN(0); - this.derivationID = data?.derivationID; + this.secondaryDerivationNumber = data?.secondaryDerivationNumber; + this.fromAddress = data?.fromAddress; + this.toAddress = data?.toAddress; this.requestID = data?.requestID; this.setFlags(); @@ -95,8 +104,16 @@ export class AppEncryptionRequestDetails implements SerializableEntity { calcFlags(): BigNumber { let flags = new BN(0); - if (this.derivationID != null) { - flags = flags.or(AppEncryptionRequestDetails.HAS_DERIVATION_ID); + if (this.secondaryDerivationNumber != null) { + flags = flags.or(AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER); + } + + if (this.fromAddress != null) { + flags = flags.or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS); + } + + if (this.toAddress != null) { + flags = flags.or(AppEncryptionRequestDetails.HAS_TO_ADDRESS); } if (this.requestID != null) { @@ -107,15 +124,23 @@ export class AppEncryptionRequestDetails implements SerializableEntity { } isValid(): boolean { - let valid = this.appOrDelegatedID != null; - valid &&= this.encryptToZAddress != null && this.encryptToZAddress.length > 0; + let valid = this.encryptToZAddress != null && this.encryptToZAddress.length > 0; valid &&= this.derivationNumber != null && this.derivationNumber.gte(new BN(0)); + valid &&= this.secondaryDerivationNumber == null || this.secondaryDerivationNumber.gte(new BN(0)); return valid; } - hasDerivationID(flags: BigNumber = this.flags): boolean { - return flags.and(AppEncryptionRequestDetails.HAS_DERIVATION_ID).gt(new BN(0)); + hasSecondarySeedDerivation(flags: BigNumber = this.flags): boolean { + return flags.and(AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER).gt(new BN(0)); + } + + hasFromAddress(flags: BigNumber = this.flags): boolean { + return flags.and(AppEncryptionRequestDetails.HAS_FROM_ADDRESS).gt(new BN(0)); + } + + hasToAddress(flags: BigNumber = this.flags): boolean { + return flags.and(AppEncryptionRequestDetails.HAS_TO_ADDRESS).gt(new BN(0)); } hasRequestID(flags: BigNumber = this.flags): boolean { @@ -130,16 +155,21 @@ export class AppEncryptionRequestDetails implements SerializableEntity { length += varuint.encodingLength(flags.toNumber()); - // appOrDelegatedID - length += this.appOrDelegatedID.getByteLength(); - // encryptToKey - zaddress encoding (43 bytes for sapling address data) length += 43; // Sapling address decoded data (11 + 32 bytes) length += varuint.encodingLength(this.derivationNumber.toNumber()); - if (this.hasDerivationID(flags)) { - length += this.derivationID.getByteLength(); + if (this.hasSecondarySeedDerivation(flags)) { + length += varint.encodingLength(this.secondaryDerivationNumber); + } + + if (this.hasFromAddress(flags)) { + length += this.fromAddress.getByteLength(); + } + + if (this.hasToAddress(flags)) { + length += this.toAddress.getByteLength(); } if (this.hasRequestID(flags)) { @@ -156,9 +186,6 @@ export class AppEncryptionRequestDetails implements SerializableEntity { // Write flags writer.writeCompactSize(flags.toNumber()); - // Write appOrDelegatedID - writer.writeSlice(this.appOrDelegatedID.toBuffer()); - // Write encryptToAddress as decoded sapling address data const saplingData = decodeSaplingAddress(this.encryptToZAddress); writer.writeSlice(Buffer.concat([saplingData.d, saplingData.pk_d])); @@ -166,8 +193,16 @@ export class AppEncryptionRequestDetails implements SerializableEntity { // Write mandatory derivation number writer.writeVarInt(this.derivationNumber); - if (this.hasDerivationID(flags)) { - writer.writeSlice(this.derivationID.toBuffer()); + if (this.hasSecondarySeedDerivation(flags)) { + writer.writeVarInt(this.secondaryDerivationNumber); + } + + if (this.hasFromAddress(flags)) { + writer.writeSlice(this.fromAddress.toBuffer()); + } + + if (this.hasToAddress(flags)) { + writer.writeSlice(this.toAddress.toBuffer()); } if (this.hasRequestID(flags)) { @@ -184,11 +219,6 @@ export class AppEncryptionRequestDetails implements SerializableEntity { // Read flags this.flags = new BN(reader.readCompactSize()); - // Read appOrDelegatedID - const appOrDelegatedIDObj = new CompactIdAddressObject(); - reader.offset = appOrDelegatedIDObj.fromBuffer(reader.buffer, reader.offset); - this.appOrDelegatedID = appOrDelegatedIDObj; - // Read encryptToAddress as 43-byte sapling data and encode as sapling address const saplingData = reader.readSlice(43); this.encryptToZAddress = toBech32('zs', saplingData); @@ -196,10 +226,22 @@ export class AppEncryptionRequestDetails implements SerializableEntity { // Read mandatory derivation number this.derivationNumber = reader.readVarInt(); - if (this.hasDerivationID()) { - const derivationIDObj = new CompactIdAddressObject(); - reader.offset = derivationIDObj.fromBuffer(reader.buffer, reader.offset); - this.derivationID = derivationIDObj; + // Read optional derivation number if flag is set + if (this.hasSecondarySeedDerivation()) { + this.secondaryDerivationNumber = reader.readVarInt(); + } + + // Read addresses based on flags + if (this.hasFromAddress()) { + const CompactId = new CompactIdAddressObject(); + reader.offset = CompactId.fromBuffer(reader.buffer, reader.offset); + this.fromAddress = CompactId; + } + + if (this.hasToAddress()) { + const CompactId = new CompactIdAddressObject(); + reader.offset = CompactId.fromBuffer(reader.buffer, reader.offset); + this.toAddress = CompactId; } if (this.hasRequestID()) { @@ -216,10 +258,11 @@ export class AppEncryptionRequestDetails implements SerializableEntity { return { version: this.version.toNumber(), flags: flags.toNumber(), - appordelegatedid: this.appOrDelegatedID.toJson(), encrypttozaddress: this.encryptToZAddress, derivationnumber: this.derivationNumber.toNumber(), - derivationid: this.derivationID?.toJson(), + secondaryderivationnumber: this.secondaryDerivationNumber?.toNumber(), + fromaddress: this.fromAddress?.toJson(), + toaddress: this.toAddress?.toJson(), requestid: this.requestID }; } @@ -228,14 +271,18 @@ export class AppEncryptionRequestDetails implements SerializableEntity { const instance = new AppEncryptionRequestDetails(); instance.version = new BN(json.version); instance.flags = new BN(json.flags); - instance.appOrDelegatedID = CompactIdAddressObject.fromJson(json.appordelegatedid); instance.encryptToZAddress = json.encrypttozaddress; instance.derivationNumber = new BN(json.derivationnumber); + instance.secondaryDerivationNumber = json?.secondaryderivationnumber ? new BN(json.secondaryderivationnumber) : undefined; - if(instance.hasDerivationID()) { - instance.derivationID = CompactIdAddressObject.fromJson(json?.derivationid); + if(instance.hasFromAddress()) { + instance.fromAddress = CompactIdAddressObject.fromJson(json?.fromaddress); } - + + if(instance.hasToAddress()) { + instance.toAddress = CompactIdAddressObject.fromJson(json?.toaddress); + } + if(instance.hasRequestID()) { instance.requestID = json?.requestid; } diff --git a/src/vdxf/classes/response/AppEncryptionResponseDetails.ts b/src/vdxf/classes/response/AppEncryptionResponseDetails.ts index fd111a5c..5f0c744c 100644 --- a/src/vdxf/classes/response/AppEncryptionResponseDetails.ts +++ b/src/vdxf/classes/response/AppEncryptionResponseDetails.ts @@ -16,7 +16,6 @@ export interface AppEncryptionResponseDetailsInterface { version: BigNumber; flags?: BigNumber; requestID?: string; - IncomingViewingKey: Buffer; extendedViewingKey: SaplingExtendedViewingKey; address: SaplingPaymentAddress; extendedSpendingKey?: SaplingExtendedSpendingKey; @@ -26,7 +25,6 @@ export interface AppEncryptionResponseDetailsJson { version: number; flags?: number; requestid?: string; - incomingviewingkey: string; extendedviewingkey: string; address: string; extendedspendingkey?: string; @@ -36,7 +34,6 @@ export class AppEncryptionResponseDetails implements SerializableEntity { version: BigNumber; flags: BigNumber; requestID?: string; - IncomingViewingKey: Buffer; extendedViewingKey: SaplingExtendedViewingKey; address: SaplingPaymentAddress; extendedSpendingKey?: SaplingExtendedSpendingKey; @@ -47,7 +44,6 @@ export class AppEncryptionResponseDetails implements SerializableEntity { constructor(data?: AppEncryptionResponseDetailsInterface) { this.version = data?.version ?? new BN(1); this.flags = data?.flags ?? new BN(0, 10); - this.IncomingViewingKey = data?.IncomingViewingKey ?? Buffer.alloc(32); this.extendedViewingKey = data?.extendedViewingKey ?? new SaplingExtendedViewingKey(); this.address = data?.address ?? new SaplingPaymentAddress(); @@ -91,7 +87,6 @@ export class AppEncryptionResponseDetails implements SerializableEntity { length += HASH160_BYTE_LENGTH; } - length += 32; // IncomingViewingKey length += this.extendedViewingKey.getByteLength(); length += this.address.getByteLength(); @@ -111,7 +106,6 @@ export class AppEncryptionResponseDetails implements SerializableEntity { writer.writeSlice(fromBase58Check(this.requestID).hash); } - writer.writeSlice(this.IncomingViewingKey); writer.writeSlice(this.extendedViewingKey.toBuffer()); writer.writeSlice(this.address.toBuffer()); @@ -131,8 +125,6 @@ export class AppEncryptionResponseDetails implements SerializableEntity { this.requestID = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); } - this.IncomingViewingKey = reader.readSlice(32); - this.extendedViewingKey = new SaplingExtendedViewingKey(); reader.offset = this.extendedViewingKey.fromBuffer(reader.buffer, reader.offset); @@ -152,7 +144,6 @@ export class AppEncryptionResponseDetails implements SerializableEntity { version: this.version.toNumber(), flags: this.flags.toNumber(), requestid: this.containsRequestID() ? this.requestID : undefined, - incomingviewingkey: this.IncomingViewingKey.toString('hex'), extendedviewingkey: this.extendedViewingKey.toKeyString(), address: this.address.toAddressString(), extendedspendingkey: this.containsExtendedSpendingKey() ? this.extendedSpendingKey.toKeyString() : undefined @@ -164,7 +155,6 @@ export class AppEncryptionResponseDetails implements SerializableEntity { version: new BN(json.version, 10), flags: new BN(json.flags ?? 0, 10), requestID: json.requestid, - IncomingViewingKey: Buffer.from(json.incomingviewingkey, 'hex'), extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(json.extendedviewingkey), address: SaplingPaymentAddress.fromAddressString(json.address), extendedSpendingKey: json.extendedspendingkey ? SaplingExtendedSpendingKey.fromKeyString(json.extendedspendingkey) : undefined From 37f5548298a30c7ab3b4c7637fb795303eb7d89e Mon Sep 17 00:00:00 2001 From: monkins Date: Wed, 26 Nov 2025 16:28:57 +0000 Subject: [PATCH 077/123] Revert "Revert "Updates to encryption"" This reverts commit 675c7aa5a511c7a82bed605681c5b0327b3d4c84. --- .../vdxf/appencryptionrequestdetails.test.ts | 36 ++--- .../vdxf/appencryptionresponsedetails.test.ts | 24 +++ src/__tests__/vdxf/ordinalvdxfobject.test.ts | 23 ++- .../AppEncryptionRequestDetails.ts | 151 ++++++------------ .../response/AppEncryptionResponseDetails.ts | 10 ++ 5 files changed, 112 insertions(+), 132 deletions(-) diff --git a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts index cdeeae4c..f9a00290 100644 --- a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts +++ b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts @@ -14,14 +14,12 @@ describe("AppEncryptionRequestDetails serialization tests", () => { test("creates valid AppEncryptionRequestDetails with zaddress", () => { const details = new AppEncryptionRequestDetails({ version: AppEncryptionRequestDetails.DEFAULT_VERSION, - flags: AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER - .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) - .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS), + flags: AppEncryptionRequestDetails.HAS_DERIVATION_ID + .or(AppEncryptionRequestDetails.HAS_REQUEST_ID), + appOrDelegatedID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), - secondaryDerivationNumber: new BN(234), - fromAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), - toAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + derivationID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); @@ -35,11 +33,10 @@ describe("AppEncryptionRequestDetails serialization tests", () => { expect(details.isValid()).toBe(true); expect(details.encryptToZAddress).toBe("zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4"); - expect(details.flags.toNumber()).toBe(1+2+4+8); + expect(details.flags.toNumber()).toBe(1+2); // HAS_DERIVATION_ID + HAS_REQUEST_ID expect(details.derivationNumber.toNumber()).toBe(42); - expect(details.secondaryDerivationNumber?.toNumber()).toBe(234); - expect(details.fromAddress?.address).toBe("i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"); - expect(details.toAddress?.address).toBe("i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"); + expect(details.appOrDelegatedID?.address).toBe("i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"); + expect(details.derivationID?.address).toBe("i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"); expect(details.requestID).toBe("iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ"); }); @@ -47,14 +44,12 @@ describe("AppEncryptionRequestDetails serialization tests", () => { // Create the first AppEncryptionRequestDetails const originalDetails = new AppEncryptionRequestDetails({ version: AppEncryptionRequestDetails.DEFAULT_VERSION, - flags: AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER - .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) - .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS), + flags: AppEncryptionRequestDetails.HAS_DERIVATION_ID + .or(AppEncryptionRequestDetails.HAS_REQUEST_ID), + appOrDelegatedID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), - secondaryDerivationNumber: new BN(234), - fromAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), - toAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + derivationID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); @@ -74,11 +69,10 @@ describe("AppEncryptionRequestDetails serialization tests", () => { expect(deserializedDetails.flags.toNumber()).toBe(originalDetails.flags.toNumber()); expect(deserializedDetails.encryptToZAddress).toBe(originalDetails.encryptToZAddress); expect(deserializedDetails.derivationNumber.toNumber()).toBe(originalDetails.derivationNumber.toNumber()); - expect(deserializedDetails.secondaryDerivationNumber?.toNumber()).toBe(originalDetails.secondaryDerivationNumber?.toNumber()); - expect(deserializedDetails.fromAddress?.type.toNumber()).toBe(originalDetails.fromAddress?.type.toNumber()); - expect(deserializedDetails.fromAddress?.address).toBe(originalDetails.fromAddress?.address); - expect(deserializedDetails.toAddress?.type.toNumber()).toBe(originalDetails.toAddress?.type.toNumber()); - expect(deserializedDetails.toAddress?.address).toBe(originalDetails.toAddress?.address); + expect(deserializedDetails.appOrDelegatedID?.type.toNumber()).toBe(originalDetails.appOrDelegatedID?.type.toNumber()); + expect(deserializedDetails.appOrDelegatedID?.address).toBe(originalDetails.appOrDelegatedID?.address); + expect(deserializedDetails.derivationID?.type.toNumber()).toBe(originalDetails.derivationID?.type.toNumber()); + expect(deserializedDetails.derivationID?.address).toBe(originalDetails.derivationID?.address); expect(deserializedDetails.requestID).toBe(originalDetails.requestID); // Verify that serializing both instances produces the same buffer diff --git a/src/__tests__/vdxf/appencryptionresponsedetails.test.ts b/src/__tests__/vdxf/appencryptionresponsedetails.test.ts index 6e8bb694..9c004cfe 100644 --- a/src/__tests__/vdxf/appencryptionresponsedetails.test.ts +++ b/src/__tests__/vdxf/appencryptionresponsedetails.test.ts @@ -11,12 +11,15 @@ describe('AppEncryptionResponseDetails', () => { const testRequestID = 'iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ'; it('should create with minimal data', () => { + const testIncomingViewingKey = Buffer.from('be9af283ecfe0552480dd7e1ce9af61a12e64da4927e8011a795cb223f4afc00"', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), + IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress) }); + expect(response.IncomingViewingKey).toEqual(testIncomingViewingKey); expect(response.extendedViewingKey).toBeInstanceOf(SaplingExtendedViewingKey); expect(response.address).toBeInstanceOf(SaplingPaymentAddress); expect(response.containsRequestID()).toBe(false); @@ -24,40 +27,49 @@ describe('AppEncryptionResponseDetails', () => { }); it('should create with requestID', () => { + const testIncomingViewingKey = Buffer.from('1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), requestID: testRequestID, + IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress) }); + expect(response.IncomingViewingKey).toEqual(testIncomingViewingKey); expect(response.requestID).toBe(testRequestID); expect(response.containsRequestID()).toBe(true); expect(response.containsExtendedSpendingKey()).toBe(false); }); it('should create with extended spending key', () => { + const testIncomingViewingKey = Buffer.from('fedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), + IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress), extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey) }); + expect(response.IncomingViewingKey).toEqual(testIncomingViewingKey); expect(response.extendedSpendingKey).toBeInstanceOf(SaplingExtendedSpendingKey); expect(response.containsRequestID()).toBe(false); expect(response.containsExtendedSpendingKey()).toBe(true); }); it('should create with all optional fields', () => { + const testIncomingViewingKey = Buffer.from('0f1e2d3c4b5a69788796a5b4c3d2e1f00f1e2d3c4b5a69788796a5b4c3d2e1f0', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), requestID: testRequestID, + IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress), extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey) }); + expect(response.IncomingViewingKey).toEqual(testIncomingViewingKey); expect(response.requestID).toBe(testRequestID); expect(response.containsRequestID()).toBe(true); expect(response.extendedSpendingKey).toBeInstanceOf(SaplingExtendedSpendingKey); @@ -65,8 +77,10 @@ describe('AppEncryptionResponseDetails', () => { }); it('should serialize and deserialize via buffer (minimal)', () => { + const testIncomingViewingKey = Buffer.from('9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), + IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress) }); @@ -75,6 +89,7 @@ describe('AppEncryptionResponseDetails', () => { const response2 = new AppEncryptionResponseDetails(); response2.fromBuffer(buffer); + expect(response2.IncomingViewingKey.toString('hex')).toBe(testIncomingViewingKey.toString('hex')); expect(response2.containsRequestID()).toBe(false); expect(response2.containsExtendedSpendingKey()).toBe(false); expect(response2.extendedViewingKey.toKeyString()).toBe(testViewingKey); @@ -82,9 +97,11 @@ describe('AppEncryptionResponseDetails', () => { }); it('should serialize and deserialize via buffer (with requestID)', () => { + const testIncomingViewingKey = Buffer.from('abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), requestID: testRequestID, + IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress) }); @@ -93,6 +110,7 @@ describe('AppEncryptionResponseDetails', () => { const response2 = new AppEncryptionResponseDetails(); response2.fromBuffer(buffer); + expect(response2.IncomingViewingKey.toString('hex')).toBe(testIncomingViewingKey.toString('hex')); expect(response2.requestID).toBe(testRequestID); expect(response2.containsRequestID()).toBe(true); expect(response2.extendedViewingKey.toKeyString()).toBe(testViewingKey); @@ -100,8 +118,10 @@ describe('AppEncryptionResponseDetails', () => { }); it('should serialize and deserialize via buffer (with spending key)', () => { + const testIncomingViewingKey = Buffer.from('5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), + IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress), extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey) @@ -111,15 +131,18 @@ describe('AppEncryptionResponseDetails', () => { const response2 = new AppEncryptionResponseDetails(); response2.fromBuffer(buffer); + expect(response2.IncomingViewingKey.toString('hex')).toBe(testIncomingViewingKey.toString('hex')); expect(response2.containsExtendedSpendingKey()).toBe(true); expect(response2.extendedSpendingKey).toBeDefined(); expect(response2.extendedSpendingKey!.toKeyString()).toBe(testSpendingKey); }); it('should serialize and deserialize via JSON', () => { + const testIncomingViewingKey = Buffer.from('b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), requestID: testRequestID, + IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress), extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey) @@ -128,6 +151,7 @@ describe('AppEncryptionResponseDetails', () => { const json = response.toJson(); const response2 = AppEncryptionResponseDetails.fromJson(json); + expect(response2.IncomingViewingKey.toString('hex')).toBe(testIncomingViewingKey.toString('hex')); expect(response2.requestID).toBe(testRequestID); expect(response2.containsRequestID()).toBe(true); expect(response2.extendedViewingKey.toKeyString()).toBe(testViewingKey); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index a1cb26b5..ea36afd5 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -353,14 +353,12 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { it('should serialize / deserialize an AppEncryptionRequestOrdinalVdxfObject', () => { const details = new AppEncryptionRequestDetails({ version: AppEncryptionRequestDetails.DEFAULT_VERSION, - flags: AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER - .or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS) - .or(AppEncryptionRequestDetails.HAS_TO_ADDRESS), + flags: AppEncryptionRequestDetails.HAS_DERIVATION_ID + .or(AppEncryptionRequestDetails.HAS_REQUEST_ID), + appOrDelegatedID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), - secondaryDerivationNumber: new BN(234), - fromAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), - toAddress: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + derivationID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); @@ -370,11 +368,10 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(round).toBeInstanceOf(AppEncryptionRequestOrdinalVdxfObject); const d2 = (round as AppEncryptionRequestOrdinalVdxfObject).data; + expect(d2.appOrDelegatedID!.toIAddress()).toEqual(details.appOrDelegatedID!.toIAddress()); expect(d2.encryptToZAddress!).toEqual(details.encryptToZAddress); expect(d2.derivationNumber!.toString()).toEqual(details.derivationNumber!.toString()); - expect(d2.secondaryDerivationNumber!.toString()).toEqual(details.secondaryDerivationNumber!.toString()); - expect(d2.fromAddress!.toIAddress()).toEqual(details.fromAddress!.toIAddress()); - expect(d2.toAddress!.toIAddress()).toEqual(details.toAddress!.toIAddress()); + expect(d2.derivationID!.toIAddress()).toEqual(details.derivationID!.toIAddress()); expect(d2.requestID).toEqual(details.requestID); const json = obj.toJson(); @@ -383,11 +380,10 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(roundJ).toBeInstanceOf(AppEncryptionRequestOrdinalVdxfObject); const d3 = (roundJ as AppEncryptionRequestOrdinalVdxfObject).data; + expect(d3.appOrDelegatedID!.toIAddress()).toEqual(details.appOrDelegatedID!.toIAddress()); expect(d3.encryptToZAddress!).toEqual(details.encryptToZAddress); expect(d3.derivationNumber!.toString()).toEqual(details.derivationNumber!.toString()); - expect(d3.secondaryDerivationNumber!.toString()).toEqual(details.secondaryDerivationNumber!.toString()); - expect(d3.fromAddress!.toIAddress()).toEqual(details.fromAddress!.toIAddress()); - expect(d3.toAddress!.toIAddress()).toEqual(details.toAddress!.toIAddress()); + expect(d3.derivationID!.toIAddress()).toEqual(details.derivationID!.toIAddress()); expect(d3.requestID).toEqual(details.requestID); }); @@ -533,11 +529,13 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const testViewingKey = 'zxviews1q0njl87fqqqqpq8vghkp6nz9wx48mwelukvhx3yfwg7msatglv4xy8rrh87k9z472edvlrt950qyy6r766dxnpqktxug7t2wy80s4ug325dwp9hf4vw9a6ethf2mwc9wan28p88dq8q2e8sdlw2mhffg6hy92tjyuquz7a8reqdz905x6xt6kqdx5wn7jvas0733hends8q6s8k87emn6m060xdnhgmvn4zmx0ssrwve84lzxkqu2dnfq5qsjwrtlject0an0k282rsnx0kq4'; const testSpendingKey = 'secret-extended-key-main1q0njl87fqqqqpq8vghkp6nz9wx48mwelukvhx3yfwg7msatglv4xy8rrh87k9z472el95h53ym2tku2dazny0j2vfukgmp6fu3k7edzcx9n8egesc32sdy3xr4s2ep4skgc7t5j5zds4ws7hf2nuszf7ltfn2nc5rk3k77gyeqdz905x6xt6kqdx5wn7jvas0733hends8q6s8k87emn6m060xdnhgmvn4zmx0ssrwve84lzxkqu2dnfq5qsjwrtlject0an0k282rs0gws78'; const testAddress = 'zs1anxaua04mnl7dz2mjpflhw0mt73uxy9rjac53lgduk02kh3lnf0hxufk9d76j5uep5j55f5h5rk'; + const testIncomingViewingKey = Buffer.from('ba9af283ecfe0552480dd7e1ce9af68a12e64da4927e8011a795cb223f4afc00"', 'hex'); const details = new AppEncryptionResponseDetails({ version: new BN(1), flags: AppEncryptionResponseDetails.RESPONSE_CONTAINS_REQUEST_ID.or(AppEncryptionResponseDetails.RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ", + IncomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey), address: SaplingPaymentAddress.fromAddressString(testAddress) @@ -549,6 +547,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(round).toBeInstanceOf(AppEncryptionResponseOrdinalVdxfObject); const d2 = (round as AppEncryptionResponseOrdinalVdxfObject).data; + expect(d2.IncomingViewingKey.toString('hex')).toEqual(testIncomingViewingKey.toString('hex')); expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d2.extendedViewingKey!.toKeyString()).toEqual(details.extendedViewingKey!.toKeyString()); expect(d2.extendedSpendingKey!.toKeyString()).toEqual(details.extendedSpendingKey!.toKeyString()); diff --git a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts index e6423563..c0380a7c 100644 --- a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts @@ -4,13 +4,17 @@ * * This class is used when an application is requesting an encrypted derived seed from the user's master seed, * using specific parameters passed by the application. The request includes: - * - A target encryption key (zaddress format) - * - Derivation numbers for seed generation - * - Optional source and destination addresses for context + * - App or delegated ID making the request (mandatory) + * - A target encryption key (zaddress format) for encrypting the reply + * - Derivation number for seed generation + * - Optional derivation ID (defaults to Z-address from ID signing if not present) + * - Optional request ID for tracking * * The user's wallet can use these parameters to derive a specific seed from their master seed * and encrypt it using the provided encryption key, ensuring the application receives only * the specific derived seed it needs without exposing the master seed. + * + * The RETURN_ESK flag can be set to signal that the Extended Spending Key should be returned. */ import { BigNumber } from '../../../utils/types/BigNumber'; @@ -28,40 +32,30 @@ import { I_ADDR_VERSION, HASH160_BYTE_LENGTH } from '../../../constants/vdxf'; export interface AppEncryptionRequestInterface { version?: BigNumber; flags: BigNumber; + appOrDelegatedID: CompactIdAddressObject; encryptToZAddress: string; derivationNumber: BigNumber; - secondaryDerivationNumber?: BigNumber; - fromAddress?: CompactIdAddressObject; - toAddress?: CompactIdAddressObject; + derivationID?: CompactIdAddressObject; requestID?: string; } export interface AppEncryptionRequestJson { version: number; flags: number; + appordelegatedid: CompactIdAddressObjectJson; encrypttozaddress: string; derivationnumber: number; - secondaryderivationnumber?: number; - fromaddress?: CompactIdAddressObjectJson; - toaddress?: CompactIdAddressObjectJson; + derivationid?: CompactIdAddressObjectJson; requestid?: string; } /** * Checks if a string is a valid hexadecimal address * @param flags - Optional flags for the request - * @flag HAS_FROM_ADDRESS - Indicates if a from address is included - * @flag HAS_TO_ADDRESS - Indicates if a to address is included - * @flag HAS_OPTIONAL_SEED_DERIVATION - Indicates if an optional derivation number is included - * @flag ADDRESSES_NOT_FQN - Indicates if addresses are in hex format rather than FQN + * @flag HAS_REQUEST_ID - Indicates if a request ID is included * * @param encryptToZAddress - The encryption key to use for encrypting to * @param derivationNumber - The derivation number to validate - * @param secondaryDerivationNumber - The optional derivation number to validate - * @param fromAddress - The from address to be included in the encryption either - * john.domain@ or [20-byte hex iaddress][20-byte hex system] - * @param toAddress - The to address to be included in the encryption either - * john.domain@ or [20-byte hex iaddress][20-byte hex system] */ export class AppEncryptionRequestDetails implements SerializableEntity { @@ -70,28 +64,25 @@ export class AppEncryptionRequestDetails implements SerializableEntity { static LAST_VERSION = new BN(1); static DEFAULT_VERSION = new BN(1); - static HAS_FROM_ADDRESS = new BN(1); - static HAS_TO_ADDRESS = new BN(2); - static HAS_SECONDARY_SEED_DERIVATION_NUMBER = new BN(4); - static HAS_REQUEST_ID = new BN(8); + static HAS_DERIVATION_ID = new BN(1); + static HAS_REQUEST_ID = new BN(2); + static RETURN_ESK = new BN(4); //flag to signal to return the Extended Spending Key version: BigNumber; flags: BigNumber; - encryptToZAddress: string; + appOrDelegatedID?: CompactIdAddressObject; // ID of the app or delegated entity making the request + encryptToZAddress: string; // zaddress reply is encrypted to derivationNumber: BigNumber; - secondaryDerivationNumber?: BigNumber; - fromAddress?: CompactIdAddressObject; - toAddress?: CompactIdAddressObject; - requestID?: string; + derivationID?: CompactIdAddressObject; // Defaults to choosing the Z-address from the ID signing if not present + requestID?: string; // Unique identifier for the request constructor(data?: AppEncryptionRequestInterface) { this.version = data?.version || AppEncryptionRequestDetails.DEFAULT_VERSION; this.flags = data?.flags || new BN(0); + this.appOrDelegatedID = data?.appOrDelegatedID; this.encryptToZAddress = data?.encryptToZAddress || ''; this.derivationNumber = data?.derivationNumber || new BN(0); - this.secondaryDerivationNumber = data?.secondaryDerivationNumber; - this.fromAddress = data?.fromAddress; - this.toAddress = data?.toAddress; + this.derivationID = data?.derivationID; this.requestID = data?.requestID; this.setFlags(); @@ -104,16 +95,8 @@ export class AppEncryptionRequestDetails implements SerializableEntity { calcFlags(): BigNumber { let flags = new BN(0); - if (this.secondaryDerivationNumber != null) { - flags = flags.or(AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER); - } - - if (this.fromAddress != null) { - flags = flags.or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS); - } - - if (this.toAddress != null) { - flags = flags.or(AppEncryptionRequestDetails.HAS_TO_ADDRESS); + if (this.derivationID != null) { + flags = flags.or(AppEncryptionRequestDetails.HAS_DERIVATION_ID); } if (this.requestID != null) { @@ -124,23 +107,15 @@ export class AppEncryptionRequestDetails implements SerializableEntity { } isValid(): boolean { - let valid = this.encryptToZAddress != null && this.encryptToZAddress.length > 0; + let valid = this.appOrDelegatedID != null; + valid &&= this.encryptToZAddress != null && this.encryptToZAddress.length > 0; valid &&= this.derivationNumber != null && this.derivationNumber.gte(new BN(0)); - valid &&= this.secondaryDerivationNumber == null || this.secondaryDerivationNumber.gte(new BN(0)); return valid; } - hasSecondarySeedDerivation(flags: BigNumber = this.flags): boolean { - return flags.and(AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER).gt(new BN(0)); - } - - hasFromAddress(flags: BigNumber = this.flags): boolean { - return flags.and(AppEncryptionRequestDetails.HAS_FROM_ADDRESS).gt(new BN(0)); - } - - hasToAddress(flags: BigNumber = this.flags): boolean { - return flags.and(AppEncryptionRequestDetails.HAS_TO_ADDRESS).gt(new BN(0)); + hasDerivationID(flags: BigNumber = this.flags): boolean { + return flags.and(AppEncryptionRequestDetails.HAS_DERIVATION_ID).gt(new BN(0)); } hasRequestID(flags: BigNumber = this.flags): boolean { @@ -155,21 +130,16 @@ export class AppEncryptionRequestDetails implements SerializableEntity { length += varuint.encodingLength(flags.toNumber()); + // appOrDelegatedID + length += this.appOrDelegatedID.getByteLength(); + // encryptToKey - zaddress encoding (43 bytes for sapling address data) length += 43; // Sapling address decoded data (11 + 32 bytes) length += varuint.encodingLength(this.derivationNumber.toNumber()); - if (this.hasSecondarySeedDerivation(flags)) { - length += varint.encodingLength(this.secondaryDerivationNumber); - } - - if (this.hasFromAddress(flags)) { - length += this.fromAddress.getByteLength(); - } - - if (this.hasToAddress(flags)) { - length += this.toAddress.getByteLength(); + if (this.hasDerivationID(flags)) { + length += this.derivationID.getByteLength(); } if (this.hasRequestID(flags)) { @@ -186,6 +156,9 @@ export class AppEncryptionRequestDetails implements SerializableEntity { // Write flags writer.writeCompactSize(flags.toNumber()); + // Write appOrDelegatedID + writer.writeSlice(this.appOrDelegatedID.toBuffer()); + // Write encryptToAddress as decoded sapling address data const saplingData = decodeSaplingAddress(this.encryptToZAddress); writer.writeSlice(Buffer.concat([saplingData.d, saplingData.pk_d])); @@ -193,16 +166,8 @@ export class AppEncryptionRequestDetails implements SerializableEntity { // Write mandatory derivation number writer.writeVarInt(this.derivationNumber); - if (this.hasSecondarySeedDerivation(flags)) { - writer.writeVarInt(this.secondaryDerivationNumber); - } - - if (this.hasFromAddress(flags)) { - writer.writeSlice(this.fromAddress.toBuffer()); - } - - if (this.hasToAddress(flags)) { - writer.writeSlice(this.toAddress.toBuffer()); + if (this.hasDerivationID(flags)) { + writer.writeSlice(this.derivationID.toBuffer()); } if (this.hasRequestID(flags)) { @@ -219,6 +184,11 @@ export class AppEncryptionRequestDetails implements SerializableEntity { // Read flags this.flags = new BN(reader.readCompactSize()); + // Read appOrDelegatedID + const appOrDelegatedIDObj = new CompactIdAddressObject(); + reader.offset = appOrDelegatedIDObj.fromBuffer(reader.buffer, reader.offset); + this.appOrDelegatedID = appOrDelegatedIDObj; + // Read encryptToAddress as 43-byte sapling data and encode as sapling address const saplingData = reader.readSlice(43); this.encryptToZAddress = toBech32('zs', saplingData); @@ -226,22 +196,10 @@ export class AppEncryptionRequestDetails implements SerializableEntity { // Read mandatory derivation number this.derivationNumber = reader.readVarInt(); - // Read optional derivation number if flag is set - if (this.hasSecondarySeedDerivation()) { - this.secondaryDerivationNumber = reader.readVarInt(); - } - - // Read addresses based on flags - if (this.hasFromAddress()) { - const CompactId = new CompactIdAddressObject(); - reader.offset = CompactId.fromBuffer(reader.buffer, reader.offset); - this.fromAddress = CompactId; - } - - if (this.hasToAddress()) { - const CompactId = new CompactIdAddressObject(); - reader.offset = CompactId.fromBuffer(reader.buffer, reader.offset); - this.toAddress = CompactId; + if (this.hasDerivationID()) { + const derivationIDObj = new CompactIdAddressObject(); + reader.offset = derivationIDObj.fromBuffer(reader.buffer, reader.offset); + this.derivationID = derivationIDObj; } if (this.hasRequestID()) { @@ -258,11 +216,10 @@ export class AppEncryptionRequestDetails implements SerializableEntity { return { version: this.version.toNumber(), flags: flags.toNumber(), + appordelegatedid: this.appOrDelegatedID.toJson(), encrypttozaddress: this.encryptToZAddress, derivationnumber: this.derivationNumber.toNumber(), - secondaryderivationnumber: this.secondaryDerivationNumber?.toNumber(), - fromaddress: this.fromAddress?.toJson(), - toaddress: this.toAddress?.toJson(), + derivationid: this.derivationID?.toJson(), requestid: this.requestID }; } @@ -271,18 +228,14 @@ export class AppEncryptionRequestDetails implements SerializableEntity { const instance = new AppEncryptionRequestDetails(); instance.version = new BN(json.version); instance.flags = new BN(json.flags); + instance.appOrDelegatedID = CompactIdAddressObject.fromJson(json.appordelegatedid); instance.encryptToZAddress = json.encrypttozaddress; instance.derivationNumber = new BN(json.derivationnumber); - instance.secondaryDerivationNumber = json?.secondaryderivationnumber ? new BN(json.secondaryderivationnumber) : undefined; - if(instance.hasFromAddress()) { - instance.fromAddress = CompactIdAddressObject.fromJson(json?.fromaddress); + if(instance.hasDerivationID()) { + instance.derivationID = CompactIdAddressObject.fromJson(json?.derivationid); } - - if(instance.hasToAddress()) { - instance.toAddress = CompactIdAddressObject.fromJson(json?.toaddress); - } - + if(instance.hasRequestID()) { instance.requestID = json?.requestid; } diff --git a/src/vdxf/classes/response/AppEncryptionResponseDetails.ts b/src/vdxf/classes/response/AppEncryptionResponseDetails.ts index 5f0c744c..fd111a5c 100644 --- a/src/vdxf/classes/response/AppEncryptionResponseDetails.ts +++ b/src/vdxf/classes/response/AppEncryptionResponseDetails.ts @@ -16,6 +16,7 @@ export interface AppEncryptionResponseDetailsInterface { version: BigNumber; flags?: BigNumber; requestID?: string; + IncomingViewingKey: Buffer; extendedViewingKey: SaplingExtendedViewingKey; address: SaplingPaymentAddress; extendedSpendingKey?: SaplingExtendedSpendingKey; @@ -25,6 +26,7 @@ export interface AppEncryptionResponseDetailsJson { version: number; flags?: number; requestid?: string; + incomingviewingkey: string; extendedviewingkey: string; address: string; extendedspendingkey?: string; @@ -34,6 +36,7 @@ export class AppEncryptionResponseDetails implements SerializableEntity { version: BigNumber; flags: BigNumber; requestID?: string; + IncomingViewingKey: Buffer; extendedViewingKey: SaplingExtendedViewingKey; address: SaplingPaymentAddress; extendedSpendingKey?: SaplingExtendedSpendingKey; @@ -44,6 +47,7 @@ export class AppEncryptionResponseDetails implements SerializableEntity { constructor(data?: AppEncryptionResponseDetailsInterface) { this.version = data?.version ?? new BN(1); this.flags = data?.flags ?? new BN(0, 10); + this.IncomingViewingKey = data?.IncomingViewingKey ?? Buffer.alloc(32); this.extendedViewingKey = data?.extendedViewingKey ?? new SaplingExtendedViewingKey(); this.address = data?.address ?? new SaplingPaymentAddress(); @@ -87,6 +91,7 @@ export class AppEncryptionResponseDetails implements SerializableEntity { length += HASH160_BYTE_LENGTH; } + length += 32; // IncomingViewingKey length += this.extendedViewingKey.getByteLength(); length += this.address.getByteLength(); @@ -106,6 +111,7 @@ export class AppEncryptionResponseDetails implements SerializableEntity { writer.writeSlice(fromBase58Check(this.requestID).hash); } + writer.writeSlice(this.IncomingViewingKey); writer.writeSlice(this.extendedViewingKey.toBuffer()); writer.writeSlice(this.address.toBuffer()); @@ -125,6 +131,8 @@ export class AppEncryptionResponseDetails implements SerializableEntity { this.requestID = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); } + this.IncomingViewingKey = reader.readSlice(32); + this.extendedViewingKey = new SaplingExtendedViewingKey(); reader.offset = this.extendedViewingKey.fromBuffer(reader.buffer, reader.offset); @@ -144,6 +152,7 @@ export class AppEncryptionResponseDetails implements SerializableEntity { version: this.version.toNumber(), flags: this.flags.toNumber(), requestid: this.containsRequestID() ? this.requestID : undefined, + incomingviewingkey: this.IncomingViewingKey.toString('hex'), extendedviewingkey: this.extendedViewingKey.toKeyString(), address: this.address.toAddressString(), extendedspendingkey: this.containsExtendedSpendingKey() ? this.extendedSpendingKey.toKeyString() : undefined @@ -155,6 +164,7 @@ export class AppEncryptionResponseDetails implements SerializableEntity { version: new BN(json.version, 10), flags: new BN(json.flags ?? 0, 10), requestID: json.requestid, + IncomingViewingKey: Buffer.from(json.incomingviewingkey, 'hex'), extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(json.extendedviewingkey), address: SaplingPaymentAddress.fromAddressString(json.address), extendedSpendingKey: json.extendedspendingkey ? SaplingExtendedSpendingKey.fromKeyString(json.extendedspendingkey) : undefined From d9cc8da16dd5d6aaf364e5e461de37245935b18e Mon Sep 17 00:00:00 2001 From: michaeltout Date: Thu, 27 Nov 2025 14:51:25 +0100 Subject: [PATCH 078/123] Add test for failing case where GenericEnvelopes would have different hash before/after signature is added --- .../classes/envelope/GenericEnvelope.d.ts | 1 + dist/vdxf/classes/envelope/GenericEnvelope.js | 11 +- dist/vdxf/classes/request/GenericRequest.d.ts | 4 +- dist/vdxf/classes/request/GenericRequest.js | 6 +- .../classes/response/GenericResponse.d.ts | 2 +- dist/vdxf/classes/response/GenericResponse.js | 6 +- src/__tests__/vdxf/genericrequest.test.ts | 122 +++++++++++++++++- src/__tests__/vdxf/genericresponse.test.ts | 50 ++++++- src/vdxf/classes/envelope/GenericEnvelope.ts | 17 ++- src/vdxf/classes/request/GenericRequest.ts | 8 +- src/vdxf/classes/response/GenericResponse.ts | 6 +- 11 files changed, 196 insertions(+), 37 deletions(-) diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts index 28f8d02a..11e4911f 100644 --- a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts +++ b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts @@ -53,6 +53,7 @@ export declare class GenericEnvelope implements SerializableEntity { protected getDetailsBufferLength(): number; protected getDetailsBuffer(): Buffer; private internalGetByteLength; + protected getByteLengthOptionalSig(includeSig?: boolean): number; getByteLength(): number; protected toBufferOptionalSig(includeSig?: boolean): Buffer; toBuffer(): Buffer; diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.js b/dist/vdxf/classes/envelope/GenericEnvelope.js index f69ba073..36a3b631 100644 --- a/dist/vdxf/classes/envelope/GenericEnvelope.js +++ b/dist/vdxf/classes/envelope/GenericEnvelope.js @@ -123,21 +123,24 @@ class GenericEnvelope { } return writer.buffer; } - internalGetByteLength() { + internalGetByteLength(includeSig = true) { let length = 0; length += varuint_1.default.encodingLength(this.version.toNumber()); length += varuint_1.default.encodingLength(this.flags.toNumber()); - if (this.isSigned()) { + if (this.isSigned() && includeSig) { length += this.signature.getByteLength(); } length += this.getDetailsBufferLength(); return length; } + getByteLengthOptionalSig(includeSig) { + return this.internalGetByteLength(includeSig); + } getByteLength() { - return this.internalGetByteLength(); + return this.getByteLengthOptionalSig(true); } toBufferOptionalSig(includeSig = true) { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.internalGetByteLength())); + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.internalGetByteLength(includeSig))); writer.writeCompactSize(this.version.toNumber()); writer.writeCompactSize(this.flags.toNumber()); if (this.isSigned() && includeSig) { diff --git a/dist/vdxf/classes/request/GenericRequest.d.ts b/dist/vdxf/classes/request/GenericRequest.d.ts index 6858604f..82d07fa8 100644 --- a/dist/vdxf/classes/request/GenericRequest.d.ts +++ b/dist/vdxf/classes/request/GenericRequest.d.ts @@ -23,8 +23,8 @@ export declare class GenericRequest extends GenericEnvelope implements Serializa hasEncryptResponseToAddress(): boolean; setHasEncryptResponseToAddress(): void; setFlags(): void; - getByteLength(): number; - protected toBufferOptionalSig(includeSig?: boolean): Buffer; + getByteLengthOptionalSig(includeSig?: boolean): number; + toBufferOptionalSig(includeSig?: boolean): Buffer; fromBuffer(buffer: Buffer, offset?: number): number; toJson(): GenericRequestJson; static fromWalletDeeplinkUri(uri: string): GenericRequest; diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js index 716e5355..824f14bf 100644 --- a/dist/vdxf/classes/request/GenericRequest.js +++ b/dist/vdxf/classes/request/GenericRequest.js @@ -27,15 +27,15 @@ class GenericRequest extends GenericEnvelope_1.GenericEnvelope { if (this.encryptResponseToAddress) this.setHasEncryptResponseToAddress(); } - getByteLength() { - let length = super.getByteLength(); + getByteLengthOptionalSig(includeSig = true) { + let length = super.getByteLengthOptionalSig(includeSig); if (this.hasEncryptResponseToAddress()) { length += this.encryptResponseToAddress.getByteLength(); } return length; } toBufferOptionalSig(includeSig = true) { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLengthOptionalSig(includeSig))); const superBuf = super.toBufferOptionalSig(includeSig); writer.writeSlice(superBuf); if (this.hasEncryptResponseToAddress()) { diff --git a/dist/vdxf/classes/response/GenericResponse.d.ts b/dist/vdxf/classes/response/GenericResponse.d.ts index 73950c88..b234f8c0 100644 --- a/dist/vdxf/classes/response/GenericResponse.d.ts +++ b/dist/vdxf/classes/response/GenericResponse.d.ts @@ -26,7 +26,7 @@ export declare class GenericResponse extends GenericEnvelope implements Serializ hasRequestHash(): boolean; setHasRequestHash(): void; setFlags(): void; - getByteLength(): number; + getByteLengthOptionalSig(includeSig?: boolean): number; protected toBufferOptionalSig(includeSig?: boolean): Buffer; fromBuffer(buffer: Buffer, offset?: number): number; toJson(): GenericResponseJson; diff --git a/dist/vdxf/classes/response/GenericResponse.js b/dist/vdxf/classes/response/GenericResponse.js index 05d57843..e935907c 100644 --- a/dist/vdxf/classes/response/GenericResponse.js +++ b/dist/vdxf/classes/response/GenericResponse.js @@ -30,8 +30,8 @@ class GenericResponse extends GenericEnvelope_1.GenericEnvelope { if (this.requestHash) this.setHasRequestHash(); } - getByteLength() { - let length = super.getByteLength(); + getByteLengthOptionalSig(includeSig = true) { + let length = super.getByteLengthOptionalSig(includeSig); if (this.hasRequestHash()) { const hashLen = this.requestHash.length; length += varuint_1.default.encodingLength(this.requestHashType.toNumber()); @@ -41,7 +41,7 @@ class GenericResponse extends GenericEnvelope_1.GenericEnvelope { return length; } toBufferOptionalSig(includeSig = true) { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLengthOptionalSig(includeSig))); const superBuf = super.toBufferOptionalSig(includeSig); writer.writeSlice(superBuf); if (this.hasRequestHash()) { diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts index 6d077163..132ecfc9 100644 --- a/src/__tests__/vdxf/genericrequest.test.ts +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -1,11 +1,11 @@ import { BN } from 'bn.js'; import base64url from 'base64url'; -import { DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256 } from '../../constants/pbaas'; -import { GenericRequest, SaplingPaymentAddress } from '../../'; +import { DATA_TYPE_MMRDATA, DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256 } from '../../constants/pbaas'; +import { ContentMultiMap, GenericRequest, IDENTITY_VERSION_PBAAS, IdentityID, IdentityUpdateRequestDetails, KeyID, PartialIdentity, PartialMMRData, PartialSignData, PartialSignDataInitData, SaplingPaymentAddress } from '../../'; import { createHash } from 'crypto'; -import { VerifiableSignatureData } from '../../vdxf/classes/VerifiableSignatureData'; +import { VerifiableSignatureData, VerifiableSignatureDataInterface } from '../../vdxf/classes/VerifiableSignatureData'; import { CompactIdAddressObject } from '../../vdxf/classes/CompactIdAddressObject'; -import { GeneralTypeOrdinalVdxfObject } from '../../vdxf/classes/ordinals'; +import { GeneralTypeOrdinalVdxfObject, IdentityUpdateRequestOrdinalVdxfObject } from '../../vdxf/classes/ordinals'; import { DEEPLINK_PROTOCOL_URL_CURRENT_VERSION, DEEPLINK_PROTOCOL_URL_STRING } from '../../constants/deeplink'; describe('GenericRequest — buffer / URI / QR operations', () => { @@ -145,6 +145,120 @@ describe('GenericRequest — buffer / URI / QR operations', () => { expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); }); + it('same hash before/after signature', () => { + const contentmap = new Map(); + contentmap.set("iPsFBfFoCcxtuZNzE8yxPQhXVn4dmytf8j", Buffer.alloc(32)); + contentmap.set("iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c", Buffer.alloc(32)); + + const systemID = IdentityID.fromAddress("iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"); + const requestID = "iPsFBfFoCcxtuZNzE8yxPQhXVn4dmytf8j" + const createdAt = new BN("1700000000", 10); + const expiryHeight = new BN("123456"); + const salt = Buffer.from('=H319X:)@H2Z'); + + const partialIdentity = new PartialIdentity({ + flags: new BN("0"), + version: IDENTITY_VERSION_PBAAS, + min_sigs: new BN(1), + primary_addresses: [ + KeyID.fromAddress("RQVsJRf98iq8YmRQdehzRcbLGHEx6YfjdH"), + KeyID.fromAddress("RP4Qct9197i5vrS11qHVtdyRRoAHVNJS47") + ], + parent: IdentityID.fromAddress("iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"), + system_id: IdentityID.fromAddress("iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"), + name: "TestID", + content_map: contentmap, + content_multimap: ContentMultiMap.fromJson({ + iPsFBfFoCcxtuZNzE8yxPQhXVn4dmytf8j: [ + { iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c: 'Test String 123454321' }, + { iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c: 'Test String 123454321' }, + { iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c: 'Test String 123454321' }, + { iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c: 'Test String 123454321' } + ], + iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq: '6868686868686868686868686868686868686868', + i5v3h9FWVdRFbNHU7DfcpGykQjRaHtMqu7: [ + '6868686868686868686868686868686868686868', + '6868686868686868686868686868686868686868', + '6868686868686868686868686868686868686868' + ], + i81XL8ZpuCo9jmWLv5L5ikdxrGuHrrpQLz: { iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c: 'Test String 123454321' } + }), + recovery_authority: IdentityID.fromAddress("i81XL8ZpuCo9jmWLv5L5ikdxrGuHrrpQLz"), + revocation_authority: IdentityID.fromAddress("i5v3h9FWVdRFbNHU7DfcpGykQjRaHtMqu7"), + unlock_after: new BN("123456", 10), + private_addresses: [SaplingPaymentAddress.fromAddressString("zs1wczplx4kegw32h8g0f7xwl57p5tvnprwdmnzmdnsw50chcl26f7tws92wk2ap03ykaq6jyyztfa")] + }); + + const mmrData = new PartialMMRData({ + flags: new BN('0', 10), + data: [ + { type: new BN('2', 10), data: Buffer.from('src/__tests__/pbaas/partialmmrdata.test.ts', 'utf-8') }, + { type: new BN('3', 10), data: Buffer.from('Hello test message 12345', 'utf-8') }, + ], + salt: [Buffer.from('=H319X:)@H2Z'), Buffer.from('s*1UHmVr?feI')], + mmrhashtype: new BN('1', 10), // e.g. PartialMMRData.HASH_TYPE_SHA256 + priormmr: [ + Buffer.from('80a28cdff6bd91a2e96a473c234371fd8b67705a8c4956255ce7b8c7bf20470f02381c9a935f06cdf986a7c5facd77625befa11cf9fd4b59857b457394a8af979ab2830087a3b27041b37bc318484175'), + Buffer.from('d97fd4bbd9e88ca0c5822c12d5c9b272b2044722aa48b1c8fde178be6b59ccea509f403d3acd226c16ba3c32f0cb92e2fcaaa02b40d0bc5257e0fbf2e6c3d3d7f1a1df066967b193d131158ba5bef732') + ], + }) + + const baseSignDataWithMMR: PartialSignDataInitData = { + flags: new BN('0', 10), + address: IdentityID.fromAddress('iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq'), + prefixString: Buffer.from('example prefix', 'utf8'), + vdxfKeys: [IdentityID.fromAddress('i81XL8ZpuCo9jmWLv5L5ikdxrGuHrrpQLz')], + vdxfKeyNames: [Buffer.from('VDXFNAME', 'utf8')], + boundHashes: [Buffer.from('0873c6ba879ce87f5c207a4382b273cac164361af0b9fe63d6d7b0d7af401fec', 'hex'), Buffer.from('0873c6ba879ce87f5c207a4382b273cac164361af0b9fe63d6d7b0d7af401fec', 'hex')], + hashType: new BN('1', 10), + encryptToAddress: SaplingPaymentAddress.fromAddressString( + 'zs1wczplx4kegw32h8g0f7xwl57p5tvnprwdmnzmdnsw50chcl26f7tws92wk2ap03ykaq6jyyztfa' + ), + createMMR: true, + signature: Buffer.from('AeNjMwABQSAPBEuajDkRyy+OBJsWmDP3EUoqN9UjCJK9nmoSQiNoZWBK19OgGCYdEqr1CiFfBf8SFHVoUv4r2tb5Q3qsMTrp', 'base64'), + dataType: DATA_TYPE_MMRDATA, + data: mmrData, // This is the PartialMMRData object + } + + const signdatamap = new Map(); + signdatamap.set("iBvyi1nuCrTA4g44xN9N7EU1t6a7gwb4h8", new PartialSignData(baseSignDataWithMMR)) + + const requestDetails = new IdentityUpdateRequestDetails({ + requestID: requestID, + systemID: systemID, + identity: partialIdentity, + expiryHeight: expiryHeight, + signDataMap: signdatamap + }); + + const unsignedSigData: VerifiableSignatureDataInterface = { + systemID: CompactIdAddressObject.fromIAddress(systemID.toAddress()!), + identityID: CompactIdAddressObject.fromIAddress(systemID.toAddress()!) + } + + const req = new GenericRequest({ + createdAt: createdAt, + salt, + encryptResponseToAddress: SaplingPaymentAddress.fromAddressString("zs1wczplx4kegw32h8g0f7xwl57p5tvnprwdmnzmdnsw50chcl26f7tws92wk2ap03ykaq6jyyztfa"), + details: [ + new IdentityUpdateRequestOrdinalVdxfObject({ data: requestDetails }) + ], + signature: new VerifiableSignatureData(unsignedSigData) + }); + + const height = 18167; + + req.setSigned(); + + const preSigHash = req.getDetailsIdentitySignatureHash(height); + + req.signature!.signatureAsVch = Buffer.from("AgX3RgAAAUEgrnmmyGip2lFhWM0pA2zDifZnAX+ZhPhFEzhhQuPOzr8vLYDpa1PzJNMmMm4dKOfwTdohSFeIPE3SCPR99cZ1vg==", 'base64'); + + const postSigHash = req.getDetailsIdentitySignatureHash(height); + + expect(preSigHash.toString('hex')).toBe(postSigHash.toString('hex')); + }); + it('toString / fromQrString consistency', () => { const detail = new GeneralTypeOrdinalVdxfObject({ data: Buffer.from('feed', 'hex'), diff --git a/src/__tests__/vdxf/genericresponse.test.ts b/src/__tests__/vdxf/genericresponse.test.ts index d1db2ea0..37ac735f 100644 --- a/src/__tests__/vdxf/genericresponse.test.ts +++ b/src/__tests__/vdxf/genericresponse.test.ts @@ -1,12 +1,12 @@ import { BN } from 'bn.js'; import base64url from 'base64url'; import { DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256 } from '../../constants/pbaas'; -import { GenericResponse } from '../../'; +import { GenericResponse, IdentityID, IdentityUpdateResponseDetails } from '../../'; import { createHash } from 'crypto'; -import { VerifiableSignatureData } from '../../vdxf/classes/VerifiableSignatureData'; +import { VerifiableSignatureData, VerifiableSignatureDataInterface } from '../../vdxf/classes/VerifiableSignatureData'; import { CompactIdAddressObject } from '../../vdxf/classes/CompactIdAddressObject'; -import { GeneralTypeOrdinalVdxfObject } from '../../vdxf/classes/ordinals'; -import { DEEPLINK_PROTOCOL_URL_CURRENT_VERSION, DEEPLINK_PROTOCOL_URL_STRING } from '../../constants/deeplink'; +import { GeneralTypeOrdinalVdxfObject, IdentityUpdateResponseOrdinalVdxfObject } from '../../vdxf/classes/ordinals'; +import { TEST_TXID } from '../constants/fixtures'; describe('GenericResponse — buffer / URI / QR operations', () => { function roundTripBuffer(req: GenericResponse): GenericResponse { @@ -149,6 +149,48 @@ describe('GenericResponse — buffer / URI / QR operations', () => { expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); }); + it('same hash before/after signature', () => { + const contentmap = new Map(); + contentmap.set("iPsFBfFoCcxtuZNzE8yxPQhXVn4dmytf8j", Buffer.alloc(32)); + contentmap.set("iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c", Buffer.alloc(32)); + + const systemID = IdentityID.fromAddress("iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"); + const requestID = "iPsFBfFoCcxtuZNzE8yxPQhXVn4dmytf8j" + const createdAt = new BN("1700000000", 10); + const salt = Buffer.from('=H319X:)@H2Z'); + + const responseDetails = new IdentityUpdateResponseDetails({ + requestID: requestID, + txid: Buffer.from(TEST_TXID, 'hex') + }); + + const unsignedSigData: VerifiableSignatureDataInterface = { + systemID: CompactIdAddressObject.fromIAddress(systemID.toAddress()!), + identityID: CompactIdAddressObject.fromIAddress(systemID.toAddress()!) + } + + const req = new GenericResponse({ + createdAt: createdAt, + salt, + details: [ + new IdentityUpdateResponseOrdinalVdxfObject({ data: responseDetails }) + ], + signature: new VerifiableSignatureData(unsignedSigData) + }); + + const height = 18167; + + req.setSigned(); + + const preSigHash = req.getDetailsIdentitySignatureHash(height); + + req.signature!.signatureAsVch = Buffer.from("AgX3RgAAAUEgrnmmyGip2lFhWM0pA2zDifZnAX+ZhPhFEzhhQuPOzr8vLYDpa1PzJNMmMm4dKOfwTdohSFeIPE3SCPR99cZ1vg==", 'base64'); + + const postSigHash = req.getDetailsIdentitySignatureHash(height); + + expect(preSigHash.toString('hex')).toBe(postSigHash.toString('hex')); + }); + it('toString / fromQrString consistency', () => { const detail = new GeneralTypeOrdinalVdxfObject({ data: Buffer.from('feed', 'hex'), diff --git a/src/vdxf/classes/envelope/GenericEnvelope.ts b/src/vdxf/classes/envelope/GenericEnvelope.ts index 697290bc..4921b0c9 100644 --- a/src/vdxf/classes/envelope/GenericEnvelope.ts +++ b/src/vdxf/classes/envelope/GenericEnvelope.ts @@ -1,7 +1,3 @@ -import { - WALLET_VDXF_KEY, - GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY -} from "../../"; import bufferutils from "../../../utils/bufferutils"; import base64url from "base64url"; import { BN } from 'bn.js'; @@ -11,7 +7,6 @@ import varuint from "../../../utils/varuint"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import { createHash } from "crypto"; import { VerifiableSignatureData, VerifiableSignatureDataJson } from "../VerifiableSignatureData"; -import { DEEPLINK_PROTOCOL_URL_CURRENT_VERSION, DEEPLINK_PROTOCOL_URL_STRING } from "../../../constants/deeplink"; export interface GenericEnvelopeInterface { version?: BigNumber; @@ -188,13 +183,13 @@ export class GenericEnvelope implements SerializableEntity { return writer.buffer; } - private internalGetByteLength(): number { + private internalGetByteLength(includeSig = true): number { let length = 0; length += varuint.encodingLength(this.version.toNumber()); length += varuint.encodingLength(this.flags.toNumber()); - if (this.isSigned()) { + if (this.isSigned() && includeSig) { length += this.signature!.getByteLength(); } @@ -203,13 +198,17 @@ export class GenericEnvelope implements SerializableEntity { return length; } + protected getByteLengthOptionalSig(includeSig?: boolean): number { + return this.internalGetByteLength(includeSig); + } + getByteLength(): number { - return this.internalGetByteLength(); + return this.getByteLengthOptionalSig(true); } protected toBufferOptionalSig(includeSig = true) { const writer = new bufferutils.BufferWriter( - Buffer.alloc(this.internalGetByteLength()) + Buffer.alloc(this.internalGetByteLength(includeSig)) ); writer.writeCompactSize(this.version.toNumber()); diff --git a/src/vdxf/classes/request/GenericRequest.ts b/src/vdxf/classes/request/GenericRequest.ts index 7a8d54d4..2c8ced84 100644 --- a/src/vdxf/classes/request/GenericRequest.ts +++ b/src/vdxf/classes/request/GenericRequest.ts @@ -57,8 +57,8 @@ export class GenericRequest extends GenericEnvelope implements SerializableEntit if (this.encryptResponseToAddress) this.setHasEncryptResponseToAddress(); } - getByteLength(): number { - let length = super.getByteLength(); + getByteLengthOptionalSig(includeSig = true): number { + let length = super.getByteLengthOptionalSig(includeSig); if (this.hasEncryptResponseToAddress()) { length += this.encryptResponseToAddress.getByteLength(); @@ -67,9 +67,9 @@ export class GenericRequest extends GenericEnvelope implements SerializableEntit return length; } - protected toBufferOptionalSig(includeSig = true) { + toBufferOptionalSig(includeSig = true) { const writer = new bufferutils.BufferWriter( - Buffer.alloc(this.getByteLength()) + Buffer.alloc(this.getByteLengthOptionalSig(includeSig)) ); const superBuf = super.toBufferOptionalSig(includeSig); diff --git a/src/vdxf/classes/response/GenericResponse.ts b/src/vdxf/classes/response/GenericResponse.ts index 743f68d7..56e97e4c 100644 --- a/src/vdxf/classes/response/GenericResponse.ts +++ b/src/vdxf/classes/response/GenericResponse.ts @@ -68,8 +68,8 @@ export class GenericResponse extends GenericEnvelope implements SerializableEnti if (this.requestHash) this.setHasRequestHash(); } - getByteLength(): number { - let length = super.getByteLength(); + getByteLengthOptionalSig(includeSig = true): number { + let length = super.getByteLengthOptionalSig(includeSig); if (this.hasRequestHash()) { const hashLen = this.requestHash.length; @@ -85,7 +85,7 @@ export class GenericResponse extends GenericEnvelope implements SerializableEnti protected toBufferOptionalSig(includeSig = true) { const writer = new bufferutils.BufferWriter( - Buffer.alloc(this.getByteLength()) + Buffer.alloc(this.getByteLengthOptionalSig(includeSig)) ); const superBuf = super.toBufferOptionalSig(includeSig); From b83e2777285eea8923389bcee5adde179833b130 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Thu, 27 Nov 2025 14:52:09 +0100 Subject: [PATCH 079/123] Push build files --- dist/constants/ordinals/ordinals.d.ts | 1 + dist/constants/ordinals/ordinals.js | 3 +- dist/constants/ordinals/register.js | 2 + dist/constants/ordinals/types.d.ts | 6 +- dist/pbaas/SaplingExtendedSpendingKey.d.ts | 26 ++++ dist/pbaas/SaplingExtendedSpendingKey.js | 65 ++++++++++ dist/pbaas/SaplingExtendedViewingKey.d.ts | 26 ++++ dist/pbaas/SaplingExtendedViewingKey.js | 65 ++++++++++ dist/utils/sapling.d.ts | 24 ++++ dist/utils/sapling.js | 80 +++++++++++- dist/vdxf/classes/index.d.ts | 1 + dist/vdxf/classes/index.js | 1 + ...ppEncryptionResponseOrdinalVdxfObject.d.ts | 9 ++ .../AppEncryptionResponseOrdinalVdxfObject.js | 22 ++++ dist/vdxf/classes/ordinals/index.d.ts | 1 + dist/vdxf/classes/ordinals/index.js | 1 + .../AppEncryptionRequestDetails.d.ts | 44 +++---- .../AppEncryptionRequestDetails.js | 119 ++++++------------ .../AppEncryptionResponseDetails.d.ts | 45 +++++++ .../response/AppEncryptionResponseDetails.js | 119 ++++++++++++++++++ dist/vdxf/keys.d.ts | 1 + dist/vdxf/keys.js | 11 +- 22 files changed, 560 insertions(+), 112 deletions(-) create mode 100644 dist/pbaas/SaplingExtendedSpendingKey.d.ts create mode 100644 dist/pbaas/SaplingExtendedSpendingKey.js create mode 100644 dist/pbaas/SaplingExtendedViewingKey.d.ts create mode 100644 dist/pbaas/SaplingExtendedViewingKey.js create mode 100644 dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.js create mode 100644 dist/vdxf/classes/response/AppEncryptionResponseDetails.d.ts create mode 100644 dist/vdxf/classes/response/AppEncryptionResponseDetails.js diff --git a/dist/constants/ordinals/ordinals.d.ts b/dist/constants/ordinals/ordinals.d.ts index baca9d56..6c9c2369 100644 --- a/dist/constants/ordinals/ordinals.d.ts +++ b/dist/constants/ordinals/ordinals.d.ts @@ -9,6 +9,7 @@ export declare const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST: import("bn.js"); export declare const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE: import("bn.js"); export declare const VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS: import("bn.js"); export declare const VDXF_ORDINAL_APP_ENCRYPTION_REQUEST: import("bn.js"); +export declare const VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE: import("bn.js"); export declare const VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET: import("bn.js"); export declare const VDXF_ORDINAL_USER_DATA_REQUEST: import("bn.js"); export declare const VDXF_ORDINAL_DATA_RESPONSE: import("bn.js"); diff --git a/dist/constants/ordinals/ordinals.js b/dist/constants/ordinals/ordinals.js index 2b5c5bf9..c639aa92 100644 --- a/dist/constants/ordinals/ordinals.js +++ b/dist/constants/ordinals/ordinals.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.VDXF_ORDINAL_DATA_RESPONSE = exports.VDXF_ORDINAL_USER_DATA_REQUEST = exports.VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET = exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = exports.VDXF_ORDINAL_LOGIN_RESPONSE = exports.VDXF_ORDINAL_LOGIN_REQUEST = exports.VDXF_ORDINAL_VERUSPAY_INVOICE = exports.VDXF_ORDINAL_DATA_DESCRIPTOR = exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = void 0; +exports.VDXF_ORDINAL_DATA_RESPONSE = exports.VDXF_ORDINAL_USER_DATA_REQUEST = exports.VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET = exports.VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE = exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = exports.VDXF_ORDINAL_LOGIN_RESPONSE = exports.VDXF_ORDINAL_LOGIN_REQUEST = exports.VDXF_ORDINAL_VERUSPAY_INVOICE = exports.VDXF_ORDINAL_DATA_DESCRIPTOR = exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = void 0; const bn_js_1 = require("bn.js"); exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = new bn_js_1.BN(102, 10); exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new bn_js_1.BN(103, 10); @@ -13,6 +13,7 @@ exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new bn_js_1.BN(4, 10); exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new bn_js_1.BN(5, 10); exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new bn_js_1.BN(6, 10); exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = new bn_js_1.BN(8, 10); +exports.VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE = new bn_js_1.BN(9, 10); exports.VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET = new bn_js_1.BN(10, 10); exports.VDXF_ORDINAL_USER_DATA_REQUEST = new bn_js_1.BN(12, 10); exports.VDXF_ORDINAL_DATA_RESPONSE = new bn_js_1.BN(13, 10); diff --git a/dist/constants/ordinals/register.js b/dist/constants/ordinals/register.js index 1f64e95b..13c11dc7 100644 --- a/dist/constants/ordinals/register.js +++ b/dist/constants/ordinals/register.js @@ -15,6 +15,7 @@ const OrdinalVdxfObjectOrdinalMap_1 = require("../../vdxf/classes/ordinals/Ordin const ProvisionIdentityDetailsOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject"); const VerusPayInvoiceOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject"); const ordinals_1 = require("./ordinals"); +const AppEncryptionResponseOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject"); const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), vdxf_1.DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVdxfObject_1.DataDescriptorOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), vdxf_1.VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid, VerusPayInvoiceOrdinalVdxfObject_1.VerusPayInvoiceOrdinalVdxfObject, false); @@ -27,5 +28,6 @@ const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_DATA_RESPONSE.toNumber(), vdxf_1.DATA_RESPONSE_VDXF_KEY.vdxfid, DataPacketResponseOrdinalVdxfObject_1.DataPacketResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_USER_DATA_REQUEST.toNumber(), vdxf_1.USER_DATA_REQUEST_VDXF_KEY.vdxfid, UserDataRequestOrdinalVdxfObject_1.UserDataRequestOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET.toNumber(), vdxf_1.USER_SPECIFIC_DATA_PACKET_VDXF_KEY.vdxfid, UserSpecificDataPacketDetailsOrdinalVdxfObject_1.UserSpecificDataPacketDetailsOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE.toNumber(), vdxf_1.APP_ENCRYPTION_RESPONSE_VDXF_KEY.vdxfid, AppEncryptionResponseOrdinalVdxfObject_1.AppEncryptionResponseOrdinalVdxfObject, false); }; exports.registerOrdinals = registerOrdinals; diff --git a/dist/constants/ordinals/types.d.ts b/dist/constants/ordinals/types.d.ts index 56b86e20..2ff5b1a5 100644 --- a/dist/constants/ordinals/types.d.ts +++ b/dist/constants/ordinals/types.d.ts @@ -1,6 +1,6 @@ import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; -import { AppEncryptionRequestDetails, AppEncryptionRequestJson, IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, LoginRequestDetails, LoginRequestDetailsJson, LoginResponseDetails, LoginResponseDetailsJson, ProvisionIdentityDetails, ProvisionIdentityDetailsJson, UserDataRequestDetails, UserDataRequestJson, UserSpecificDataPacketDetails, UserSpecificDataPacketDetailsJson, VerusPayInvoiceDetails } from "../../vdxf/classes"; +import { AppEncryptionRequestDetails, AppEncryptionRequestJson, IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, LoginRequestDetails, LoginRequestDetailsJson, LoginResponseDetails, LoginResponseDetailsJson, ProvisionIdentityDetails, ProvisionIdentityDetailsJson, UserDataRequestDetails, UserDataRequestJson, UserSpecificDataPacketDetails, UserSpecificDataPacketDetailsJson, VerusPayInvoiceDetails, AppEncryptionResponseDetails, AppEncryptionResponseDetailsJson } from "../../vdxf/classes"; import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; import { DataPacketResponse, DataResponseJson } from "../../vdxf/classes/datapacket/DataPacketResponse"; -export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails | LoginRequestDetails | LoginResponseDetails | ProvisionIdentityDetails | AppEncryptionRequestDetails | DataPacketResponse | UserDataRequestDetails | UserSpecificDataPacketDetails; -export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson | LoginRequestDetailsJson | LoginResponseDetailsJson | ProvisionIdentityDetailsJson | AppEncryptionRequestJson | DataResponseJson | UserDataRequestJson | UserSpecificDataPacketDetailsJson; +export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails | LoginRequestDetails | LoginResponseDetails | ProvisionIdentityDetails | AppEncryptionRequestDetails | DataPacketResponse | UserDataRequestDetails | UserSpecificDataPacketDetails | AppEncryptionResponseDetails; +export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson | LoginRequestDetailsJson | LoginResponseDetailsJson | ProvisionIdentityDetailsJson | AppEncryptionRequestJson | DataResponseJson | UserDataRequestJson | UserSpecificDataPacketDetailsJson | AppEncryptionResponseDetailsJson; diff --git a/dist/pbaas/SaplingExtendedSpendingKey.d.ts b/dist/pbaas/SaplingExtendedSpendingKey.d.ts new file mode 100644 index 00000000..1e081f99 --- /dev/null +++ b/dist/pbaas/SaplingExtendedSpendingKey.d.ts @@ -0,0 +1,26 @@ +import { SerializableEntity } from '../utils/types/SerializableEntity'; +export declare class SaplingExtendedSpendingKey implements SerializableEntity { + depth: number; + parentFVKTag: Buffer; + childIndex: Buffer; + chainCode: Buffer; + ask: Buffer; + nsk: Buffer; + ovk: Buffer; + dk: Buffer; + constructor(data?: { + depth?: number; + parentFVKTag?: Buffer; + childIndex?: Buffer; + chainCode?: Buffer; + ask?: Buffer; + nsk?: Buffer; + ovk?: Buffer; + dk?: Buffer; + }); + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + static fromKeyString(key: string): SaplingExtendedSpendingKey; + toKeyString(testnet?: boolean): string; +} diff --git a/dist/pbaas/SaplingExtendedSpendingKey.js b/dist/pbaas/SaplingExtendedSpendingKey.js new file mode 100644 index 00000000..3790a4cf --- /dev/null +++ b/dist/pbaas/SaplingExtendedSpendingKey.js @@ -0,0 +1,65 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SaplingExtendedSpendingKey = void 0; +const bufferutils_1 = require("../utils/bufferutils"); +const sapling_1 = require("../utils/sapling"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class SaplingExtendedSpendingKey { + constructor(data) { + var _a, _b, _c, _d, _e, _f, _g, _h; + if (data != null) { + this.depth = (_a = data.depth) !== null && _a !== void 0 ? _a : 0; + this.parentFVKTag = (_b = data.parentFVKTag) !== null && _b !== void 0 ? _b : Buffer.alloc(4); + this.childIndex = (_c = data.childIndex) !== null && _c !== void 0 ? _c : Buffer.alloc(4); + this.chainCode = (_d = data.chainCode) !== null && _d !== void 0 ? _d : Buffer.alloc(32); + this.ask = (_e = data.ask) !== null && _e !== void 0 ? _e : Buffer.alloc(32); + this.nsk = (_f = data.nsk) !== null && _f !== void 0 ? _f : Buffer.alloc(32); + this.ovk = (_g = data.ovk) !== null && _g !== void 0 ? _g : Buffer.alloc(32); + this.dk = (_h = data.dk) !== null && _h !== void 0 ? _h : Buffer.alloc(32); + } + } + getByteLength() { + return 1 + 4 + 4 + 32 + 32 + 32 + 32 + 32; // 169 bytes total + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeUInt8(this.depth); + writer.writeSlice(this.parentFVKTag); + writer.writeSlice(this.childIndex); + writer.writeSlice(this.chainCode); + writer.writeSlice(this.ask); + writer.writeSlice(this.nsk); + writer.writeSlice(this.ovk); + writer.writeSlice(this.dk); + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.depth = reader.readUInt8(); + this.parentFVKTag = reader.readSlice(4); + this.childIndex = reader.readSlice(4); + this.chainCode = reader.readSlice(32); + this.ask = reader.readSlice(32); + this.nsk = reader.readSlice(32); + this.ovk = reader.readSlice(32); + this.dk = reader.readSlice(32); + return reader.offset; + } + static fromKeyString(key) { + const decoded = (0, sapling_1.decodeSaplingExtendedSpendingKey)(key); + return new SaplingExtendedSpendingKey(decoded); + } + toKeyString(testnet = false) { + return (0, sapling_1.encodeSaplingExtendedSpendingKey)({ + depth: this.depth, + parentFVKTag: this.parentFVKTag, + childIndex: this.childIndex, + chainCode: this.chainCode, + ask: this.ask, + nsk: this.nsk, + ovk: this.ovk, + dk: this.dk + }, testnet); + } +} +exports.SaplingExtendedSpendingKey = SaplingExtendedSpendingKey; diff --git a/dist/pbaas/SaplingExtendedViewingKey.d.ts b/dist/pbaas/SaplingExtendedViewingKey.d.ts new file mode 100644 index 00000000..c834b5d7 --- /dev/null +++ b/dist/pbaas/SaplingExtendedViewingKey.d.ts @@ -0,0 +1,26 @@ +import { SerializableEntity } from '../utils/types/SerializableEntity'; +export declare class SaplingExtendedViewingKey implements SerializableEntity { + depth: number; + parentFVKTag: Buffer; + childIndex: Buffer; + chainCode: Buffer; + ak: Buffer; + nk: Buffer; + ovk: Buffer; + dk: Buffer; + constructor(data?: { + depth?: number; + parentFVKTag?: Buffer; + childIndex?: Buffer; + chainCode?: Buffer; + ak?: Buffer; + nk?: Buffer; + ovk?: Buffer; + dk?: Buffer; + }); + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + static fromKeyString(key: string): SaplingExtendedViewingKey; + toKeyString(testnet?: boolean): string; +} diff --git a/dist/pbaas/SaplingExtendedViewingKey.js b/dist/pbaas/SaplingExtendedViewingKey.js new file mode 100644 index 00000000..3e3efa77 --- /dev/null +++ b/dist/pbaas/SaplingExtendedViewingKey.js @@ -0,0 +1,65 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SaplingExtendedViewingKey = void 0; +const bufferutils_1 = require("../utils/bufferutils"); +const sapling_1 = require("../utils/sapling"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class SaplingExtendedViewingKey { + constructor(data) { + var _a, _b, _c, _d, _e, _f, _g, _h; + if (data != null) { + this.depth = (_a = data.depth) !== null && _a !== void 0 ? _a : 0; + this.parentFVKTag = (_b = data.parentFVKTag) !== null && _b !== void 0 ? _b : Buffer.alloc(4); + this.childIndex = (_c = data.childIndex) !== null && _c !== void 0 ? _c : Buffer.alloc(4); + this.chainCode = (_d = data.chainCode) !== null && _d !== void 0 ? _d : Buffer.alloc(32); + this.ak = (_e = data.ak) !== null && _e !== void 0 ? _e : Buffer.alloc(32); + this.nk = (_f = data.nk) !== null && _f !== void 0 ? _f : Buffer.alloc(32); + this.ovk = (_g = data.ovk) !== null && _g !== void 0 ? _g : Buffer.alloc(32); + this.dk = (_h = data.dk) !== null && _h !== void 0 ? _h : Buffer.alloc(32); + } + } + getByteLength() { + return 1 + 4 + 4 + 32 + 32 + 32 + 32 + 32; // 169 bytes total + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeUInt8(this.depth); + writer.writeSlice(this.parentFVKTag); + writer.writeSlice(this.childIndex); + writer.writeSlice(this.chainCode); + writer.writeSlice(this.ak); + writer.writeSlice(this.nk); + writer.writeSlice(this.ovk); + writer.writeSlice(this.dk); + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.depth = reader.readUInt8(); + this.parentFVKTag = reader.readSlice(4); + this.childIndex = reader.readSlice(4); + this.chainCode = reader.readSlice(32); + this.ak = reader.readSlice(32); + this.nk = reader.readSlice(32); + this.ovk = reader.readSlice(32); + this.dk = reader.readSlice(32); + return reader.offset; + } + static fromKeyString(key) { + const decoded = (0, sapling_1.decodeSaplingExtendedViewingKey)(key); + return new SaplingExtendedViewingKey(decoded); + } + toKeyString(testnet = false) { + return (0, sapling_1.encodeSaplingExtendedViewingKey)({ + depth: this.depth, + parentFVKTag: this.parentFVKTag, + childIndex: this.childIndex, + chainCode: this.chainCode, + ak: this.ak, + nk: this.nk, + ovk: this.ovk, + dk: this.dk + }, testnet); + } +} +exports.SaplingExtendedViewingKey = SaplingExtendedViewingKey; diff --git a/dist/utils/sapling.d.ts b/dist/utils/sapling.d.ts index 7c365cba..bb4fd722 100644 --- a/dist/utils/sapling.d.ts +++ b/dist/utils/sapling.d.ts @@ -13,3 +13,27 @@ export declare const encodeSaplingAddress: (data: { d: Buffer; pk_d: Buffer; }) => string; +export interface SaplingExtendedSpendingKeyData { + depth: number; + parentFVKTag: Buffer; + childIndex: Buffer; + chainCode: Buffer; + ask: Buffer; + nsk: Buffer; + ovk: Buffer; + dk: Buffer; +} +export interface SaplingExtendedViewingKeyData { + depth: number; + parentFVKTag: Buffer; + childIndex: Buffer; + chainCode: Buffer; + ak: Buffer; + nk: Buffer; + ovk: Buffer; + dk: Buffer; +} +export declare function decodeSaplingExtendedSpendingKey(encoded: string): SaplingExtendedSpendingKeyData; +export declare function encodeSaplingExtendedSpendingKey(data: SaplingExtendedSpendingKeyData, testnet?: boolean): string; +export declare function decodeSaplingExtendedViewingKey(encoded: string): SaplingExtendedViewingKeyData; +export declare function encodeSaplingExtendedViewingKey(data: SaplingExtendedViewingKeyData, testnet?: boolean): string; diff --git a/dist/utils/sapling.js b/dist/utils/sapling.js index 535e8928..2ef0e258 100644 --- a/dist/utils/sapling.js +++ b/dist/utils/sapling.js @@ -1,9 +1,13 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.encodeSaplingAddress = exports.decodeSaplingAddress = exports.convertBits = exports.toBech32 = exports.fromBech32 = void 0; +exports.decodeSaplingExtendedSpendingKey = decodeSaplingExtendedSpendingKey; +exports.encodeSaplingExtendedSpendingKey = encodeSaplingExtendedSpendingKey; +exports.decodeSaplingExtendedViewingKey = decodeSaplingExtendedViewingKey; +exports.encodeSaplingExtendedViewingKey = encodeSaplingExtendedViewingKey; const bech32_1 = require("bech32"); const fromBech32 = (address) => { - var result = bech32_1.bech32.decode(address); + var result = bech32_1.bech32.decode(address, 1000); // Allow longer strings like extended keys var data = bech32_1.bech32.fromWords(result.words); return { version: result.words[0], @@ -14,7 +18,7 @@ const fromBech32 = (address) => { exports.fromBech32 = fromBech32; const toBech32 = (prefix, data) => { const words = bech32_1.bech32.toWords(data); - var result = bech32_1.bech32.encode(prefix, words); + var result = bech32_1.bech32.encode(prefix, words, 1000); // Allow longer strings like extended keys return result; }; exports.toBech32 = toBech32; @@ -63,3 +67,75 @@ const encodeSaplingAddress = (data) => { return (0, exports.toBech32)('zs', buffer); }; exports.encodeSaplingAddress = encodeSaplingAddress; +function decodeSaplingExtendedSpendingKey(encoded) { + const result = (0, exports.fromBech32)(encoded); + // Verify prefix is for extended spending key + if (!result.prefix.startsWith('secret-extended-key-')) { + throw new Error('Invalid Sapling extended spending key prefix'); + } + // Data should be 169 bytes: 1 (depth) + 4 (parent) + 4 (child) + 32*4 (keys) + if (result.data.length !== 169) { + throw new Error(`Invalid Sapling extended spending key length: expected 169, got ${result.data.length}`); + } + let offset = 0; + return { + depth: result.data.readUInt8(offset++), + parentFVKTag: Buffer.from(result.data.subarray(offset, offset += 4)), + childIndex: Buffer.from(result.data.subarray(offset, offset += 4)), + chainCode: Buffer.from(result.data.subarray(offset, offset += 32)), + ask: Buffer.from(result.data.subarray(offset, offset += 32)), + nsk: Buffer.from(result.data.subarray(offset, offset += 32)), + ovk: Buffer.from(result.data.subarray(offset, offset += 32)), + dk: Buffer.from(result.data.subarray(offset, offset += 32)) + }; +} +function encodeSaplingExtendedSpendingKey(data, testnet = false) { + const prefix = testnet ? 'secret-extended-key-test' : 'secret-extended-key-main'; + const buffer = Buffer.concat([ + Buffer.from([data.depth]), + data.parentFVKTag, + data.childIndex, + data.chainCode, + data.ask, + data.nsk, + data.ovk, + data.dk + ]); + return (0, exports.toBech32)(prefix, buffer); +} +function decodeSaplingExtendedViewingKey(encoded) { + const result = (0, exports.fromBech32)(encoded); + // Verify prefix is for extended viewing key + if (!result.prefix.startsWith('zxview')) { + throw new Error('Invalid Sapling extended viewing key prefix'); + } + // Data should be 169 bytes: 1 (depth) + 4 (parent) + 4 (child) + 32*5 (keys) + if (result.data.length !== 169) { + throw new Error('Invalid Sapling extended viewing key length'); + } + let offset = 0; + return { + depth: result.data.readUInt8(offset++), + parentFVKTag: Buffer.from(result.data.subarray(offset, offset += 4)), + childIndex: Buffer.from(result.data.subarray(offset, offset += 4)), + chainCode: Buffer.from(result.data.subarray(offset, offset += 32)), + ak: Buffer.from(result.data.subarray(offset, offset += 32)), + nk: Buffer.from(result.data.subarray(offset, offset += 32)), + ovk: Buffer.from(result.data.subarray(offset, offset += 32)), + dk: Buffer.from(result.data.subarray(offset, offset += 32)) + }; +} +function encodeSaplingExtendedViewingKey(data, testnet = false) { + const prefix = testnet ? 'zxviewtestsapling' : 'zxviews'; + const buffer = Buffer.concat([ + Buffer.from([data.depth]), + data.parentFVKTag, + data.childIndex, + data.chainCode, + data.ak, + data.nk, + data.ovk, + data.dk + ]); + return (0, exports.toBech32)(prefix, buffer); +} diff --git a/dist/vdxf/classes/index.d.ts b/dist/vdxf/classes/index.d.ts index b8ab07d6..87e8e2a8 100644 --- a/dist/vdxf/classes/index.d.ts +++ b/dist/vdxf/classes/index.d.ts @@ -25,6 +25,7 @@ export * from "./identity/IdentityUpdateResponseDetails"; export * from './ResponseUri'; export * from './request/GenericRequest'; export * from './response/GenericResponse'; +export * from './response/AppEncryptionResponseDetails'; export * from './ordinals'; export { Hash160 } from './Hash160'; export { RedirectUri, Subject, ProvisioningInfo, RequestedPermission, Audience, AltAuthFactor, Attestation, } from "./Challenge"; diff --git a/dist/vdxf/classes/index.js b/dist/vdxf/classes/index.js index 61d85fb3..14187f38 100644 --- a/dist/vdxf/classes/index.js +++ b/dist/vdxf/classes/index.js @@ -46,6 +46,7 @@ __exportStar(require("./identity/IdentityUpdateResponseDetails"), exports); __exportStar(require("./ResponseUri"), exports); __exportStar(require("./request/GenericRequest"), exports); __exportStar(require("./response/GenericResponse"), exports); +__exportStar(require("./response/AppEncryptionResponseDetails"), exports); __exportStar(require("./ordinals"), exports); var Hash160_1 = require("./Hash160"); Object.defineProperty(exports, "Hash160", { enumerable: true, get: function () { return Hash160_1.Hash160; } }); diff --git a/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.d.ts new file mode 100644 index 00000000..00cbbcdb --- /dev/null +++ b/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { AppEncryptionResponseDetails, AppEncryptionResponseDetailsJson } from "../response/AppEncryptionResponseDetails"; +export declare class AppEncryptionResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: AppEncryptionResponseDetails; + constructor(request?: OrdinalVdxfObjectInterfaceTemplate); + static fromJson(details: OrdinalVdxfObjectJsonTemplate): AppEncryptionResponseOrdinalVdxfObject; +} diff --git a/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.js new file mode 100644 index 00000000..de620620 --- /dev/null +++ b/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AppEncryptionResponseOrdinalVdxfObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); +const AppEncryptionResponseDetails_1 = require("../response/AppEncryptionResponseDetails"); +class AppEncryptionResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { + constructor(request = { + data: new AppEncryptionResponseDetails_1.AppEncryptionResponseDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE, + data: request.data + }, AppEncryptionResponseDetails_1.AppEncryptionResponseDetails); + } + static fromJson(details) { + return new AppEncryptionResponseOrdinalVdxfObject({ + data: AppEncryptionResponseDetails_1.AppEncryptionResponseDetails.fromJson(details.data) + }); + } +} +exports.AppEncryptionResponseOrdinalVdxfObject = AppEncryptionResponseOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/index.d.ts b/dist/vdxf/classes/ordinals/index.d.ts index 17832d37..459265f9 100644 --- a/dist/vdxf/classes/ordinals/index.d.ts +++ b/dist/vdxf/classes/ordinals/index.d.ts @@ -8,6 +8,7 @@ export * from './VerusPayInvoiceOrdinalVdxfObject'; export * from './LoginRequestDetailsOrdinalVdxfObject'; export * from './LoginResponseDetailsOrdinalVdxfObject'; export * from './AppEncryptionRequestOrdinalVdxfObject'; +export * from './AppEncryptionResponseOrdinalVdxfObject'; export * from './ProvisionIdentityDetailsOrdinalVdxfObject'; export * from './DataPacketResponseOrdinalVdxfObject'; export * from './UserDataRequestOrdinalVdxfObject'; diff --git a/dist/vdxf/classes/ordinals/index.js b/dist/vdxf/classes/ordinals/index.js index 9c9f205a..0652cb97 100644 --- a/dist/vdxf/classes/ordinals/index.js +++ b/dist/vdxf/classes/ordinals/index.js @@ -25,6 +25,7 @@ __exportStar(require("./VerusPayInvoiceOrdinalVdxfObject"), exports); __exportStar(require("./LoginRequestDetailsOrdinalVdxfObject"), exports); __exportStar(require("./LoginResponseDetailsOrdinalVdxfObject"), exports); __exportStar(require("./AppEncryptionRequestOrdinalVdxfObject"), exports); +__exportStar(require("./AppEncryptionResponseOrdinalVdxfObject"), exports); __exportStar(require("./ProvisionIdentityDetailsOrdinalVdxfObject"), exports); __exportStar(require("./DataPacketResponseOrdinalVdxfObject"), exports); __exportStar(require("./UserDataRequestOrdinalVdxfObject"), exports); diff --git a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts index 6e752c98..1e91407d 100644 --- a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts +++ b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts @@ -3,13 +3,17 @@ * * This class is used when an application is requesting an encrypted derived seed from the user's master seed, * using specific parameters passed by the application. The request includes: - * - A target encryption key (zaddress format) - * - Derivation numbers for seed generation - * - Optional source and destination addresses for context + * - App or delegated ID making the request (mandatory) + * - A target encryption key (zaddress format) for encrypting the reply + * - Derivation number for seed generation + * - Optional derivation ID (defaults to Z-address from ID signing if not present) + * - Optional request ID for tracking * * The user's wallet can use these parameters to derive a specific seed from their master seed * and encrypt it using the provided encryption key, ensuring the application receives only * the specific derived seed it needs without exposing the master seed. + * + * The RETURN_ESK flag can be set to signal that the Extended Spending Key should be returned. */ import { BigNumber } from '../../../utils/types/BigNumber'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; @@ -17,63 +21,49 @@ import { CompactIdAddressObject, CompactIdAddressObjectJson } from '../CompactId export interface AppEncryptionRequestInterface { version?: BigNumber; flags: BigNumber; + appOrDelegatedID: CompactIdAddressObject; encryptToZAddress: string; derivationNumber: BigNumber; - secondaryDerivationNumber?: BigNumber; - fromAddress?: CompactIdAddressObject; - toAddress?: CompactIdAddressObject; + derivationID?: CompactIdAddressObject; requestID?: string; } export interface AppEncryptionRequestJson { version: number; flags: number; + appordelegatedid: CompactIdAddressObjectJson; encrypttozaddress: string; derivationnumber: number; - secondaryderivationnumber?: number; - fromaddress?: CompactIdAddressObjectJson; - toaddress?: CompactIdAddressObjectJson; + derivationid?: CompactIdAddressObjectJson; requestid?: string; } /** * Checks if a string is a valid hexadecimal address * @param flags - Optional flags for the request - * @flag HAS_FROM_ADDRESS - Indicates if a from address is included - * @flag HAS_TO_ADDRESS - Indicates if a to address is included - * @flag HAS_OPTIONAL_SEED_DERIVATION - Indicates if an optional derivation number is included - * @flag ADDRESSES_NOT_FQN - Indicates if addresses are in hex format rather than FQN + * @flag HAS_REQUEST_ID - Indicates if a request ID is included * * @param encryptToZAddress - The encryption key to use for encrypting to * @param derivationNumber - The derivation number to validate - * @param secondaryDerivationNumber - The optional derivation number to validate - * @param fromAddress - The from address to be included in the encryption either - * john.domain@ or [20-byte hex iaddress][20-byte hex system] - * @param toAddress - The to address to be included in the encryption either - * john.domain@ or [20-byte hex iaddress][20-byte hex system] */ export declare class AppEncryptionRequestDetails implements SerializableEntity { static VERSION_INVALID: import("bn.js"); static FIRST_VERSION: import("bn.js"); static LAST_VERSION: import("bn.js"); static DEFAULT_VERSION: import("bn.js"); - static HAS_FROM_ADDRESS: import("bn.js"); - static HAS_TO_ADDRESS: import("bn.js"); - static HAS_SECONDARY_SEED_DERIVATION_NUMBER: import("bn.js"); + static HAS_DERIVATION_ID: import("bn.js"); static HAS_REQUEST_ID: import("bn.js"); + static RETURN_ESK: import("bn.js"); version: BigNumber; flags: BigNumber; + appOrDelegatedID?: CompactIdAddressObject; encryptToZAddress: string; derivationNumber: BigNumber; - secondaryDerivationNumber?: BigNumber; - fromAddress?: CompactIdAddressObject; - toAddress?: CompactIdAddressObject; + derivationID?: CompactIdAddressObject; requestID?: string; constructor(data?: AppEncryptionRequestInterface); setFlags(): void; calcFlags(): BigNumber; isValid(): boolean; - hasSecondarySeedDerivation(flags?: BigNumber): boolean; - hasFromAddress(flags?: BigNumber): boolean; - hasToAddress(flags?: BigNumber): boolean; + hasDerivationID(flags?: BigNumber): boolean; hasRequestID(flags?: BigNumber): boolean; getByteLength(): number; toBuffer(): Buffer; diff --git a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js index 07733e02..c3aa0ae8 100644 --- a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js +++ b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js @@ -4,18 +4,21 @@ * * This class is used when an application is requesting an encrypted derived seed from the user's master seed, * using specific parameters passed by the application. The request includes: - * - A target encryption key (zaddress format) - * - Derivation numbers for seed generation - * - Optional source and destination addresses for context + * - App or delegated ID making the request (mandatory) + * - A target encryption key (zaddress format) for encrypting the reply + * - Derivation number for seed generation + * - Optional derivation ID (defaults to Z-address from ID signing if not present) + * - Optional request ID for tracking * * The user's wallet can use these parameters to derive a specific seed from their master seed * and encrypt it using the provided encryption key, ensuring the application receives only * the specific derived seed it needs without exposing the master seed. + * + * The RETURN_ESK flag can be set to signal that the Extended Spending Key should be returned. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.AppEncryptionRequestDetails = void 0; const bn_js_1 = require("bn.js"); -const varint_1 = require("../../../utils/varint"); const bufferutils_1 = require("../../../utils/bufferutils"); const { BufferReader, BufferWriter } = bufferutils_1.default; const sapling_1 = require("../../../utils/sapling"); @@ -26,28 +29,19 @@ const vdxf_1 = require("../../../constants/vdxf"); /** * Checks if a string is a valid hexadecimal address * @param flags - Optional flags for the request - * @flag HAS_FROM_ADDRESS - Indicates if a from address is included - * @flag HAS_TO_ADDRESS - Indicates if a to address is included - * @flag HAS_OPTIONAL_SEED_DERIVATION - Indicates if an optional derivation number is included - * @flag ADDRESSES_NOT_FQN - Indicates if addresses are in hex format rather than FQN + * @flag HAS_REQUEST_ID - Indicates if a request ID is included * * @param encryptToZAddress - The encryption key to use for encrypting to * @param derivationNumber - The derivation number to validate - * @param secondaryDerivationNumber - The optional derivation number to validate - * @param fromAddress - The from address to be included in the encryption either - * john.domain@ or [20-byte hex iaddress][20-byte hex system] - * @param toAddress - The to address to be included in the encryption either - * john.domain@ or [20-byte hex iaddress][20-byte hex system] */ class AppEncryptionRequestDetails { constructor(data) { this.version = (data === null || data === void 0 ? void 0 : data.version) || AppEncryptionRequestDetails.DEFAULT_VERSION; this.flags = (data === null || data === void 0 ? void 0 : data.flags) || new bn_js_1.BN(0); + this.appOrDelegatedID = data === null || data === void 0 ? void 0 : data.appOrDelegatedID; this.encryptToZAddress = (data === null || data === void 0 ? void 0 : data.encryptToZAddress) || ''; this.derivationNumber = (data === null || data === void 0 ? void 0 : data.derivationNumber) || new bn_js_1.BN(0); - this.secondaryDerivationNumber = data === null || data === void 0 ? void 0 : data.secondaryDerivationNumber; - this.fromAddress = data === null || data === void 0 ? void 0 : data.fromAddress; - this.toAddress = data === null || data === void 0 ? void 0 : data.toAddress; + this.derivationID = data === null || data === void 0 ? void 0 : data.derivationID; this.requestID = data === null || data === void 0 ? void 0 : data.requestID; this.setFlags(); } @@ -56,14 +50,8 @@ class AppEncryptionRequestDetails { } calcFlags() { let flags = new bn_js_1.BN(0); - if (this.secondaryDerivationNumber != null) { - flags = flags.or(AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER); - } - if (this.fromAddress != null) { - flags = flags.or(AppEncryptionRequestDetails.HAS_FROM_ADDRESS); - } - if (this.toAddress != null) { - flags = flags.or(AppEncryptionRequestDetails.HAS_TO_ADDRESS); + if (this.derivationID != null) { + flags = flags.or(AppEncryptionRequestDetails.HAS_DERIVATION_ID); } if (this.requestID != null) { flags = flags.or(AppEncryptionRequestDetails.HAS_REQUEST_ID); @@ -71,19 +59,13 @@ class AppEncryptionRequestDetails { return flags; } isValid() { - let valid = this.encryptToZAddress != null && this.encryptToZAddress.length > 0; + let valid = this.appOrDelegatedID != null; + valid && (valid = this.encryptToZAddress != null && this.encryptToZAddress.length > 0); valid && (valid = this.derivationNumber != null && this.derivationNumber.gte(new bn_js_1.BN(0))); - valid && (valid = this.secondaryDerivationNumber == null || this.secondaryDerivationNumber.gte(new bn_js_1.BN(0))); return valid; } - hasSecondarySeedDerivation(flags = this.flags) { - return flags.and(AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER).gt(new bn_js_1.BN(0)); - } - hasFromAddress(flags = this.flags) { - return flags.and(AppEncryptionRequestDetails.HAS_FROM_ADDRESS).gt(new bn_js_1.BN(0)); - } - hasToAddress(flags = this.flags) { - return flags.and(AppEncryptionRequestDetails.HAS_TO_ADDRESS).gt(new bn_js_1.BN(0)); + hasDerivationID(flags = this.flags) { + return flags.and(AppEncryptionRequestDetails.HAS_DERIVATION_ID).gt(new bn_js_1.BN(0)); } hasRequestID(flags = this.flags) { return flags.and(AppEncryptionRequestDetails.HAS_REQUEST_ID).gt(new bn_js_1.BN(0)); @@ -92,17 +74,13 @@ class AppEncryptionRequestDetails { const flags = this.calcFlags(); let length = 0; length += varuint_1.default.encodingLength(flags.toNumber()); + // appOrDelegatedID + length += this.appOrDelegatedID.getByteLength(); // encryptToKey - zaddress encoding (43 bytes for sapling address data) length += 43; // Sapling address decoded data (11 + 32 bytes) length += varuint_1.default.encodingLength(this.derivationNumber.toNumber()); - if (this.hasSecondarySeedDerivation(flags)) { - length += varint_1.default.encodingLength(this.secondaryDerivationNumber); - } - if (this.hasFromAddress(flags)) { - length += this.fromAddress.getByteLength(); - } - if (this.hasToAddress(flags)) { - length += this.toAddress.getByteLength(); + if (this.hasDerivationID(flags)) { + length += this.derivationID.getByteLength(); } if (this.hasRequestID(flags)) { length += vdxf_1.HASH160_BYTE_LENGTH; @@ -114,19 +92,15 @@ class AppEncryptionRequestDetails { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); // Write flags writer.writeCompactSize(flags.toNumber()); + // Write appOrDelegatedID + writer.writeSlice(this.appOrDelegatedID.toBuffer()); // Write encryptToAddress as decoded sapling address data const saplingData = (0, sapling_1.decodeSaplingAddress)(this.encryptToZAddress); writer.writeSlice(Buffer.concat([saplingData.d, saplingData.pk_d])); // Write mandatory derivation number writer.writeVarInt(this.derivationNumber); - if (this.hasSecondarySeedDerivation(flags)) { - writer.writeVarInt(this.secondaryDerivationNumber); - } - if (this.hasFromAddress(flags)) { - writer.writeSlice(this.fromAddress.toBuffer()); - } - if (this.hasToAddress(flags)) { - writer.writeSlice(this.toAddress.toBuffer()); + if (this.hasDerivationID(flags)) { + writer.writeSlice(this.derivationID.toBuffer()); } if (this.hasRequestID(flags)) { writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); @@ -137,25 +111,19 @@ class AppEncryptionRequestDetails { const reader = new BufferReader(buffer, offset); // Read flags this.flags = new bn_js_1.BN(reader.readCompactSize()); + // Read appOrDelegatedID + const appOrDelegatedIDObj = new CompactIdAddressObject_1.CompactIdAddressObject(); + reader.offset = appOrDelegatedIDObj.fromBuffer(reader.buffer, reader.offset); + this.appOrDelegatedID = appOrDelegatedIDObj; // Read encryptToAddress as 43-byte sapling data and encode as sapling address const saplingData = reader.readSlice(43); this.encryptToZAddress = (0, sapling_1.toBech32)('zs', saplingData); // Read mandatory derivation number this.derivationNumber = reader.readVarInt(); - // Read optional derivation number if flag is set - if (this.hasSecondarySeedDerivation()) { - this.secondaryDerivationNumber = reader.readVarInt(); - } - // Read addresses based on flags - if (this.hasFromAddress()) { - const CompactId = new CompactIdAddressObject_1.CompactIdAddressObject(); - reader.offset = CompactId.fromBuffer(reader.buffer, reader.offset); - this.fromAddress = CompactId; - } - if (this.hasToAddress()) { - const CompactId = new CompactIdAddressObject_1.CompactIdAddressObject(); - reader.offset = CompactId.fromBuffer(reader.buffer, reader.offset); - this.toAddress = CompactId; + if (this.hasDerivationID()) { + const derivationIDObj = new CompactIdAddressObject_1.CompactIdAddressObject(); + reader.offset = derivationIDObj.fromBuffer(reader.buffer, reader.offset); + this.derivationID = derivationIDObj; } if (this.hasRequestID()) { this.requestID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); @@ -163,17 +131,16 @@ class AppEncryptionRequestDetails { return reader.offset; } toJson() { - var _a, _b, _c; + var _a; // Set flags before serialization const flags = this.calcFlags(); return { version: this.version.toNumber(), flags: flags.toNumber(), + appordelegatedid: this.appOrDelegatedID.toJson(), encrypttozaddress: this.encryptToZAddress, derivationnumber: this.derivationNumber.toNumber(), - secondaryderivationnumber: (_a = this.secondaryDerivationNumber) === null || _a === void 0 ? void 0 : _a.toNumber(), - fromaddress: (_b = this.fromAddress) === null || _b === void 0 ? void 0 : _b.toJson(), - toaddress: (_c = this.toAddress) === null || _c === void 0 ? void 0 : _c.toJson(), + derivationid: (_a = this.derivationID) === null || _a === void 0 ? void 0 : _a.toJson(), requestid: this.requestID }; } @@ -181,14 +148,11 @@ class AppEncryptionRequestDetails { const instance = new AppEncryptionRequestDetails(); instance.version = new bn_js_1.BN(json.version); instance.flags = new bn_js_1.BN(json.flags); + instance.appOrDelegatedID = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(json.appordelegatedid); instance.encryptToZAddress = json.encrypttozaddress; instance.derivationNumber = new bn_js_1.BN(json.derivationnumber); - instance.secondaryDerivationNumber = (json === null || json === void 0 ? void 0 : json.secondaryderivationnumber) ? new bn_js_1.BN(json.secondaryderivationnumber) : undefined; - if (instance.hasFromAddress()) { - instance.fromAddress = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(json === null || json === void 0 ? void 0 : json.fromaddress); - } - if (instance.hasToAddress()) { - instance.toAddress = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(json === null || json === void 0 ? void 0 : json.toaddress); + if (instance.hasDerivationID()) { + instance.derivationID = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(json === null || json === void 0 ? void 0 : json.derivationid); } if (instance.hasRequestID()) { instance.requestID = json === null || json === void 0 ? void 0 : json.requestid; @@ -201,7 +165,6 @@ AppEncryptionRequestDetails.VERSION_INVALID = new bn_js_1.BN(0); AppEncryptionRequestDetails.FIRST_VERSION = new bn_js_1.BN(1); AppEncryptionRequestDetails.LAST_VERSION = new bn_js_1.BN(1); AppEncryptionRequestDetails.DEFAULT_VERSION = new bn_js_1.BN(1); -AppEncryptionRequestDetails.HAS_FROM_ADDRESS = new bn_js_1.BN(1); -AppEncryptionRequestDetails.HAS_TO_ADDRESS = new bn_js_1.BN(2); -AppEncryptionRequestDetails.HAS_SECONDARY_SEED_DERIVATION_NUMBER = new bn_js_1.BN(4); -AppEncryptionRequestDetails.HAS_REQUEST_ID = new bn_js_1.BN(8); +AppEncryptionRequestDetails.HAS_DERIVATION_ID = new bn_js_1.BN(1); +AppEncryptionRequestDetails.HAS_REQUEST_ID = new bn_js_1.BN(2); +AppEncryptionRequestDetails.RETURN_ESK = new bn_js_1.BN(4); //flag to signal to return the Extended Spending Key diff --git a/dist/vdxf/classes/response/AppEncryptionResponseDetails.d.ts b/dist/vdxf/classes/response/AppEncryptionResponseDetails.d.ts new file mode 100644 index 00000000..e204655b --- /dev/null +++ b/dist/vdxf/classes/response/AppEncryptionResponseDetails.d.ts @@ -0,0 +1,45 @@ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { SaplingPaymentAddress } from '../../../pbaas'; +import { SaplingExtendedSpendingKey } from '../../../pbaas/SaplingExtendedSpendingKey'; +import { SaplingExtendedViewingKey } from '../../../pbaas/SaplingExtendedViewingKey'; +export interface AppEncryptionResponseDetailsInterface { + version: BigNumber; + flags?: BigNumber; + requestID?: string; + IncomingViewingKey: Buffer; + extendedViewingKey: SaplingExtendedViewingKey; + address: SaplingPaymentAddress; + extendedSpendingKey?: SaplingExtendedSpendingKey; +} +export interface AppEncryptionResponseDetailsJson { + version: number; + flags?: number; + requestid?: string; + incomingviewingkey: string; + extendedviewingkey: string; + address: string; + extendedspendingkey?: string; +} +export declare class AppEncryptionResponseDetails implements SerializableEntity { + version: BigNumber; + flags: BigNumber; + requestID?: string; + IncomingViewingKey: Buffer; + extendedViewingKey: SaplingExtendedViewingKey; + address: SaplingPaymentAddress; + extendedSpendingKey?: SaplingExtendedSpendingKey; + static RESPONSE_CONTAINS_REQUEST_ID: import("bn.js"); + static RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY: import("bn.js"); + constructor(data?: AppEncryptionResponseDetailsInterface); + containsRequestID(): boolean; + toggleContainsRequestID(): void; + containsExtendedSpendingKey(): boolean; + toggleContainsExtendedSpendingKey(): void; + toSha256(): Buffer; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): AppEncryptionResponseDetailsJson; + static fromJson(json: AppEncryptionResponseDetailsJson): AppEncryptionResponseDetails; +} diff --git a/dist/vdxf/classes/response/AppEncryptionResponseDetails.js b/dist/vdxf/classes/response/AppEncryptionResponseDetails.js new file mode 100644 index 00000000..c0899c15 --- /dev/null +++ b/dist/vdxf/classes/response/AppEncryptionResponseDetails.js @@ -0,0 +1,119 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AppEncryptionResponseDetails = void 0; +const bn_js_1 = require("bn.js"); +const varint_1 = require("../../../utils/varint"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const address_1 = require("../../../utils/address"); +const vdxf_1 = require("../../../constants/vdxf"); +const pbaas_1 = require("../../../pbaas"); +const createHash = require("create-hash"); +const SaplingExtendedSpendingKey_1 = require("../../../pbaas/SaplingExtendedSpendingKey"); +const SaplingExtendedViewingKey_1 = require("../../../pbaas/SaplingExtendedViewingKey"); +class AppEncryptionResponseDetails { + constructor(data) { + var _a, _b, _c, _d, _e; + this.version = (_a = data === null || data === void 0 ? void 0 : data.version) !== null && _a !== void 0 ? _a : new bn_js_1.BN(1); + this.flags = (_b = data === null || data === void 0 ? void 0 : data.flags) !== null && _b !== void 0 ? _b : new bn_js_1.BN(0, 10); + this.IncomingViewingKey = (_c = data === null || data === void 0 ? void 0 : data.IncomingViewingKey) !== null && _c !== void 0 ? _c : Buffer.alloc(32); + this.extendedViewingKey = (_d = data === null || data === void 0 ? void 0 : data.extendedViewingKey) !== null && _d !== void 0 ? _d : new SaplingExtendedViewingKey_1.SaplingExtendedViewingKey(); + this.address = (_e = data === null || data === void 0 ? void 0 : data.address) !== null && _e !== void 0 ? _e : new pbaas_1.SaplingPaymentAddress(); + if (data === null || data === void 0 ? void 0 : data.requestID) { + if (!this.containsRequestID()) + this.toggleContainsRequestID(); + this.requestID = data.requestID; + } + if (data === null || data === void 0 ? void 0 : data.extendedSpendingKey) { + if (!this.containsExtendedSpendingKey()) + this.toggleContainsExtendedSpendingKey(); + this.extendedSpendingKey = data.extendedSpendingKey; + } + } + containsRequestID() { + return !!(this.flags.and(AppEncryptionResponseDetails.RESPONSE_CONTAINS_REQUEST_ID).toNumber()); + } + toggleContainsRequestID() { + this.flags = this.flags.xor(AppEncryptionResponseDetails.RESPONSE_CONTAINS_REQUEST_ID); + } + containsExtendedSpendingKey() { + return !!(this.flags.and(AppEncryptionResponseDetails.RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY).toNumber()); + } + toggleContainsExtendedSpendingKey() { + this.flags = this.flags.xor(AppEncryptionResponseDetails.RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY); + } + toSha256() { + return createHash("sha256").update(this.toBuffer()).digest(); + } + getByteLength() { + let length = 0; + length += varint_1.default.encodingLength(this.flags); + if (this.containsRequestID()) { + length += vdxf_1.HASH160_BYTE_LENGTH; + } + length += 32; // IncomingViewingKey + length += this.extendedViewingKey.getByteLength(); + length += this.address.getByteLength(); + if (this.containsExtendedSpendingKey()) { + length += this.extendedSpendingKey.getByteLength(); + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeVarInt(this.flags); + if (this.containsRequestID()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + } + writer.writeSlice(this.IncomingViewingKey); + writer.writeSlice(this.extendedViewingKey.toBuffer()); + writer.writeSlice(this.address.toBuffer()); + if (this.containsExtendedSpendingKey()) { + writer.writeSlice(this.extendedSpendingKey.toBuffer()); + } + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.flags = reader.readVarInt(); + if (this.containsRequestID()) { + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + } + this.IncomingViewingKey = reader.readSlice(32); + this.extendedViewingKey = new SaplingExtendedViewingKey_1.SaplingExtendedViewingKey(); + reader.offset = this.extendedViewingKey.fromBuffer(reader.buffer, reader.offset); + this.address = new pbaas_1.SaplingPaymentAddress(); + reader.offset = this.address.fromBuffer(reader.buffer, reader.offset); + if (this.containsExtendedSpendingKey()) { + this.extendedSpendingKey = new SaplingExtendedSpendingKey_1.SaplingExtendedSpendingKey(); + reader.offset = this.extendedSpendingKey.fromBuffer(reader.buffer, reader.offset); + } + return reader.offset; + } + toJson() { + return { + version: this.version.toNumber(), + flags: this.flags.toNumber(), + requestid: this.containsRequestID() ? this.requestID : undefined, + incomingviewingkey: this.IncomingViewingKey.toString('hex'), + extendedviewingkey: this.extendedViewingKey.toKeyString(), + address: this.address.toAddressString(), + extendedspendingkey: this.containsExtendedSpendingKey() ? this.extendedSpendingKey.toKeyString() : undefined + }; + } + static fromJson(json) { + var _a; + return new AppEncryptionResponseDetails({ + version: new bn_js_1.BN(json.version, 10), + flags: new bn_js_1.BN((_a = json.flags) !== null && _a !== void 0 ? _a : 0, 10), + requestID: json.requestid, + IncomingViewingKey: Buffer.from(json.incomingviewingkey, 'hex'), + extendedViewingKey: SaplingExtendedViewingKey_1.SaplingExtendedViewingKey.fromKeyString(json.extendedviewingkey), + address: pbaas_1.SaplingPaymentAddress.fromAddressString(json.address), + extendedSpendingKey: json.extendedspendingkey ? SaplingExtendedSpendingKey_1.SaplingExtendedSpendingKey.fromKeyString(json.extendedspendingkey) : undefined + }); + } +} +exports.AppEncryptionResponseDetails = AppEncryptionResponseDetails; +AppEncryptionResponseDetails.RESPONSE_CONTAINS_REQUEST_ID = new bn_js_1.BN(1, 10); +AppEncryptionResponseDetails.RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY = new bn_js_1.BN(2, 10); diff --git a/dist/vdxf/keys.d.ts b/dist/vdxf/keys.d.ts index aca06ac4..c0a1faad 100644 --- a/dist/vdxf/keys.d.ts +++ b/dist/vdxf/keys.d.ts @@ -83,3 +83,4 @@ export declare const APP_ENCRYPTION_REQUEST_VDXF_KEY: VDXFKeyInterface; export declare const DATA_RESPONSE_VDXF_KEY: VDXFKeyInterface; export declare const USER_DATA_REQUEST_VDXF_KEY: VDXFKeyInterface; export declare const USER_SPECIFIC_DATA_PACKET_VDXF_KEY: VDXFKeyInterface; +export declare const APP_ENCRYPTION_RESPONSE_VDXF_KEY: VDXFKeyInterface; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index c7e304ca..fd7c3a07 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; -exports.USER_SPECIFIC_DATA_PACKET_VDXF_KEY = exports.USER_DATA_REQUEST_VDXF_KEY = exports.DATA_RESPONSE_VDXF_KEY = exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.LOGIN_RESPONSE_DETAILS_VDXF_KEY = exports.LOGIN_REQUEST_DETAILS_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; +exports.APP_ENCRYPTION_RESPONSE_VDXF_KEY = exports.USER_SPECIFIC_DATA_PACKET_VDXF_KEY = exports.USER_DATA_REQUEST_VDXF_KEY = exports.DATA_RESPONSE_VDXF_KEY = exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.LOGIN_RESPONSE_DETAILS_VDXF_KEY = exports.LOGIN_REQUEST_DETAILS_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; exports.VERUSPAY_INVOICE_VDXF_KEY = { hash160result: "628efc28c2e2d40050e1a9de7a93e7ddf2aa0076", qualifiedname: { @@ -613,3 +613,12 @@ exports.USER_SPECIFIC_DATA_PACKET_VDXF_KEY = { "name": "user.data.packet.details" } }; +exports.APP_ENCRYPTION_RESPONSE_VDXF_KEY = { + "vdxfid": "iLgnRLninDtMa7f7EbH7zsDqHRknC4CUpB", + "indexid": "xRWtt9DodY72CHY96GwGyFkNK5mo1n7Jxe", + "hash160result": "0d3c42aec1d154f1678e0585e557e75202a4cbbc", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "application.encryption.response" + } +}; From d9b49b9fa2670ed812edcab1a3ecaa23375c2921 Mon Sep 17 00:00:00 2001 From: monkins Date: Thu, 27 Nov 2025 17:24:32 +0000 Subject: [PATCH 080/123] add signature data --- src/__tests__/vdxf/genericrequest.test.ts | 4 +- src/__tests__/vdxf/genericresponse.test.ts | 4 +- .../vdxf/verifiablesignaturedata.test.ts | 174 ++++++++++++++++++ src/vdxf/classes/VerifiableSignatureData.ts | 83 ++++++++- 4 files changed, 254 insertions(+), 11 deletions(-) create mode 100644 src/__tests__/vdxf/verifiablesignaturedata.test.ts diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts index 6d077163..ff41170f 100644 --- a/src/__tests__/vdxf/genericrequest.test.ts +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -74,8 +74,8 @@ describe('GenericRequest — buffer / URI / QR operations', () => { signatureAsVch: Buffer.from('AgX3RgAAAUEgHAVIHuui1Sc9oLxLbglKvmrv47JJLiM0/RBQwzYL1dlamI/2o9qBc93d79laLXWMhQomqZ4U3Mlr3ueuwl4JFA==', 'base64'), vdxfKeys: [DEFAULT_VERUS_CHAINID, DEFAULT_VERUS_CHAINID], vdxfKeyNames: ["VRSC", "VRSC"], - boundHashes: [Buffer.from('abcd', 'hex')], - statements: [Buffer.from('abcd', 'hex')] + boundHashes: [Buffer.from('abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd', 'hex')], + statements: [Buffer.from('1234123412341234123412341234123412341234123412341234123412341234', 'hex')] }); const detail = new GeneralTypeOrdinalVdxfObject({ diff --git a/src/__tests__/vdxf/genericresponse.test.ts b/src/__tests__/vdxf/genericresponse.test.ts index d1db2ea0..3a1bfa7e 100644 --- a/src/__tests__/vdxf/genericresponse.test.ts +++ b/src/__tests__/vdxf/genericresponse.test.ts @@ -74,8 +74,8 @@ describe('GenericResponse — buffer / URI / QR operations', () => { signatureAsVch: Buffer.from('abcd', 'hex'), vdxfKeys: [DEFAULT_VERUS_CHAINID, DEFAULT_VERUS_CHAINID], vdxfKeyNames: ["VRSC", "VRSC"], - boundHashes: [Buffer.from('abcd', 'hex')], - statements: [Buffer.from('abcd', 'hex')] + boundHashes: [Buffer.from('abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd', 'hex')], + statements: [Buffer.from('1234123412341234123412341234123412341234123412341234123412341234', 'hex')] }); const detail = new GeneralTypeOrdinalVdxfObject({ diff --git a/src/__tests__/vdxf/verifiablesignaturedata.test.ts b/src/__tests__/vdxf/verifiablesignaturedata.test.ts new file mode 100644 index 00000000..677e09e7 --- /dev/null +++ b/src/__tests__/vdxf/verifiablesignaturedata.test.ts @@ -0,0 +1,174 @@ +import { VerifiableSignatureData } from "../../vdxf/classes/VerifiableSignatureData"; +import { CompactIdAddressObject } from "../../vdxf/classes/CompactIdAddressObject"; +import { HASH_TYPE_SHA256 } from '../../constants/pbaas'; +import { BN } from "bn.js"; +import { SignatureData } from "../../pbaas/SignatureData"; + +const createHash = require("create-hash"); + +describe('Serializes and deserializes SignatureData', () => { + test('(de)serialize SignatureData', () => { + + const s = new VerifiableSignatureData({ + version: new BN(1), + signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), + hashType: HASH_TYPE_SHA256, + flags: new BN(0), + identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC" }), + }) + + const sFromBuf = new VerifiableSignatureData(); + + sFromBuf.fromBuffer(s.toBuffer()) + + expect(sFromBuf.toBuffer().toString('hex')).toBe(s.toBuffer().toString('hex')) + }); + + test('(de)serialize SignatureData with vdxfKeys', () => { + const s = new VerifiableSignatureData({ + version: new BN(1), + signatureVersion: new BN(2), + signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), + hashType: HASH_TYPE_SHA256, + identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC" }), + vdxfKeys: ["iRrCKQqLQrWczeNotMgqJkoUW5ZzF182Ax", "iCCSCFbq9n7ftEQCQT94t8CcVV5NdxnTvL"], + }) + + const sFromBuf = new VerifiableSignatureData(); + sFromBuf.fromBuffer(s.toBuffer()) + + expect(sFromBuf.toBuffer().toString('hex')).toBe(s.toBuffer().toString('hex')) + expect(sFromBuf.vdxfKeys).toEqual(s.vdxfKeys) + expect(sFromBuf.hasVdxfKeys()).toBe(true) + }); + + test('(de)serialize SignatureData with vdxfKeyNames', () => { + const s = new VerifiableSignatureData({ + version: new BN(1), + signatureVersion: new BN(2), + signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), + hashType: HASH_TYPE_SHA256, + identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC" }), + vdxfKeyNames: ["key.name.one", "key.name.two", "another.key"], + }) + + const sFromBuf = new VerifiableSignatureData(); + sFromBuf.fromBuffer(s.toBuffer()) + + expect(sFromBuf.toBuffer().toString('hex')).toBe(s.toBuffer().toString('hex')) + expect(sFromBuf.vdxfKeyNames).toEqual(s.vdxfKeyNames) + expect(sFromBuf.hasVdxfKeyNames()).toBe(true) + }); + + test('(de)serialize SignatureData with boundHashes', () => { + const s = new VerifiableSignatureData({ + version: new BN(1), + signatureVersion: new BN(2), + signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), + hashType: HASH_TYPE_SHA256, + identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC" }), + boundHashes: [ + Buffer.from("a".repeat(64), 'hex'), + Buffer.from("b".repeat(64), 'hex'), + ], + }) + + const sFromBuf = new VerifiableSignatureData(); + sFromBuf.fromBuffer(s.toBuffer()) + + expect(sFromBuf.toBuffer().toString('hex')).toBe(s.toBuffer().toString('hex')) + expect(sFromBuf.boundHashes?.length).toBe(2) + expect(sFromBuf.hasBoundHashes()).toBe(true) + }); + + test('(de)serialize SignatureData with all extra data', () => { + const s = new VerifiableSignatureData({ + version: new BN(1), + signatureVersion: new BN(2), + signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), + hashType: HASH_TYPE_SHA256, + identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC" }), + vdxfKeys: ["iRrCKQqLQrWczeNotMgqJkoUW5ZzF182Ax", "iCCSCFbq9n7ftEQCQT94t8CcVV5NdxnTvL"], + vdxfKeyNames: ["key.name.one", "key.name.two"], + boundHashes: [ + Buffer.from("a".repeat(64), 'hex'), + Buffer.from("b".repeat(64), 'hex'), + ], + }) + + const sFromBuf = new VerifiableSignatureData(); + sFromBuf.fromBuffer(s.toBuffer()) + + expect(sFromBuf.toBuffer().toString('hex')).toBe(s.toBuffer().toString('hex')) + expect(sFromBuf.vdxfKeys).toEqual(s.vdxfKeys) + expect(sFromBuf.vdxfKeyNames).toEqual(s.vdxfKeyNames) + expect(sFromBuf.boundHashes?.length).toBe(2) + expect(sFromBuf.hasVdxfKeys()).toBe(true) + expect(sFromBuf.hasVdxfKeyNames()).toBe(true) + expect(sFromBuf.hasBoundHashes()).toBe(true) + }); + + test('getIdentityHash with extra data - vdxfKeys are sorted by buffer value', () => { + // Create with keys in non-sorted order + const s = new VerifiableSignatureData({ + version: new BN(1), + signatureVersion: new BN(2), + signatureAsVch: Buffer.from("AgVfngwAAUEgywnMVejMz6iZj88qRawIivovU9L9uQtGcDbD635QbNt2G/QoZjxT6c7w099JjBd2cGa8ajI99KG0MTbHT99ZZw==", 'base64'), + hashType: HASH_TYPE_SHA256, + identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", rootSystemName: "VRSCTEST" }), + systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSCTEST", rootSystemName: "VRSCTEST" }), + vdxfKeys: ["iQRWB2Ay9rEbzStXDjMFpveh4oEmD6YWXa"], + }) + + const sigHash = createHash("sha256").update("hello world1").digest(); + const hash1 = s.getIdentityHash(826975, sigHash); + console.log(`run verifyhash "${s.identityID.toIAddress()}" "${s.signatureAsVch.toString('base64')}" "${hash1.toString('hex')}"`); + + // Create with same keys but different order + const s2 = new VerifiableSignatureData({ + version: new BN(1), + signatureVersion: new BN(2), + signatureAsVch: Buffer.from("AgVfngwAAUEgywnMVejMz6iZj88qRawIivovU9L9uQtGcDbD635QbNt2G/QoZjxT6c7w099JjBd2cGa8ajI99KG0MTbHT99ZZw==", 'base64'), + hashType: HASH_TYPE_SHA256, + identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", rootSystemName: "VRSCTEST" }), + systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSCTEST", rootSystemName: "VRSCTEST" }), + vdxfKeys: ["iQRWB2Ay9rEbzStXDjMFpveh4oEmD6YWXa"], + }) + + const hash2 = s2.getIdentityHash(826975, sigHash); + + // Hashes should be identical because keys are sorted before hashing + expect(hash1.toString('hex')).toBe(hash2.toString('hex')) + console.log(`1 run verifyhash "${s2.identityID.toIAddress()}" "${s2.signatureAsVch.toString('base64')}" "${hash2.toString('hex')}"`); + console.log(`1 run verifyhash "${s2.identityID.toIAddress()}" "${s2.signatureAsVch.toString('base64')}" "${hash2.reverse().toString('hex')}"`); + }); + + test('getIdentityHash with extra data - vdxfKeys are sorted by buffer value', () => { + // Create with keys in non-sorted order + const s = new VerifiableSignatureData({ + version: new BN(1), + signatureVersion: new BN(2), + signatureAsVch: Buffer.from("AgV1ngwAAUEfYEg7UW5l0zS88ERfSBXZJ6+RWiUwXQ8BwMkkUesmemFBF29LEVw0C60csXMbMdLYxt3qGLLhgHnev9XIwWFIvw==", 'base64'), + hashType: HASH_TYPE_SHA256, + identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", rootSystemName: "VRSCTEST" }), + systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSCTEST", rootSystemName: "VRSCTEST" }), + }) + + const sigHash = createHash("sha256").update("hello world1").digest(); + const hash1 = s.getIdentityHash(826997, sigHash); + console.log(`2 run verifyhash "${s.identityID.toIAddress()}" "${s.signatureAsVch.toString('base64')}" "${hash1.toString('hex')}"`); + console.log(`2 run verifyhash "${s.identityID.toIAddress()}" "${s.signatureAsVch.toString('base64')}" "${hash1.reverse().toString('hex')}"`); + + + // Hashes should be identical because keys are sorted before hashing + expect(hash1.toString('hex')).toBe(hash1.toString('hex')) + + }); + + +}); diff --git a/src/vdxf/classes/VerifiableSignatureData.ts b/src/vdxf/classes/VerifiableSignatureData.ts index 1d82ef64..76a3013b 100644 --- a/src/vdxf/classes/VerifiableSignatureData.ts +++ b/src/vdxf/classes/VerifiableSignatureData.ts @@ -3,7 +3,7 @@ import { fromBase58Check, toBase58Check } from "../../utils/address"; import bufferutils from '../../utils/bufferutils' import { BN } from 'bn.js'; import { BigNumber } from '../../utils/types/BigNumber'; -import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../../constants/vdxf'; +import { HASH160_BYTE_LENGTH, HASH256_BYTE_LENGTH, I_ADDR_VERSION } from '../../constants/vdxf'; import { SerializableEntity } from '../../utils/types/SerializableEntity'; import { EHashTypes } from '../../pbaas/DataDescriptor'; const { BufferReader, BufferWriter } = bufferutils @@ -144,6 +144,61 @@ export class VerifiableSignatureData implements SerializableEntity { return varuint.encodingLength(bufLen) + bufLen; } + private getExtraHashDataByteLength(): number { + let byteLength = 0; + + if (this.vdxfKeys && this.vdxfKeys.length > 0) { + byteLength += varuint.encodingLength(this.vdxfKeys.length); + byteLength += this.vdxfKeys.length * HASH160_BYTE_LENGTH; + } + + if (this.vdxfKeyNames && this.vdxfKeyNames.length > 0) { + byteLength += varuint.encodingLength(this.vdxfKeyNames.length); + for (const name of this.vdxfKeyNames) { + byteLength += this.getBufferEncodingLength(Buffer.from(name, 'utf8')); + } + } + + if (this.boundHashes && this.boundHashes.length > 0) { + byteLength += varuint.encodingLength(this.boundHashes.length); + byteLength += this.boundHashes.length * HASH256_BYTE_LENGTH; + + } + + return byteLength; + } + + private getExtraHashData(): Buffer { + const byteLength = this.getExtraHashDataByteLength(); + + if (byteLength === 0) { + return Buffer.alloc(0); + } + + const bufferWriter = new BufferWriter(Buffer.alloc(byteLength)); + + if (this.vdxfKeys && this.vdxfKeys.length > 0) { + // Sort vdxfKeys by their 20-byte buffer values before writing + const keyBuffers = this.vdxfKeys.map(x => fromBase58Check(x).hash); + const sortedBuffers = keyBuffers.sort(Buffer.compare); + bufferWriter.writeArray(sortedBuffers); + } + + if (this.vdxfKeyNames && this.vdxfKeyNames.length > 0) { + // Sort vdxfKeyNames before writing + const sortedNames = [...this.vdxfKeyNames].sort(); + bufferWriter.writeVector(sortedNames.map(x => Buffer.from(x, 'utf8'))); + } + + if (this.boundHashes && this.boundHashes.length > 0) { + // Sort boundHashes before writing + const sortedHashes = [...this.boundHashes].sort(Buffer.compare); + bufferWriter.writeArray(sortedHashes); + } + + return bufferWriter.buffer; + } + getByteLength() { let byteLength = 0; @@ -273,12 +328,12 @@ export class VerifiableSignatureData implements SerializableEntity { var heightBuffer = Buffer.allocUnsafe(4) heightBuffer.writeUInt32LE(height); - if (this.hasBoundHashes() || this.hasStatements() || this.hasVdxfKeys() || this.hasVdxfKeyNames()) { - throw new Error("Bound hashes, statements, and vdxfkeys in signature not yet supported."); + if (this.hasStatements()) { + throw new Error("Statements in signature not yet supported."); } if (!this.hashType.eq(new BN(EHashTypes.HASH_SHA256))) { - throw new Error("Invalid signature type for identity hash"); + throw new Error("Only SHA256 hash type is currently supported."); } if (this.signatureVersion.eq(new BN(0))) { @@ -292,10 +347,24 @@ export class VerifiableSignatureData implements SerializableEntity { .update(sigHash) .digest(); } else if (this.signatureVersion.eq(new BN(2))) { - return createHash("sha256") - .update(fromBase58Check(this.systemID.toIAddress()).hash) + const extraHashData = this.getExtraHashData(); + const hash = createHash("sha256"); + + if (extraHashData.length > 0) { + hash.update(extraHashData); + } + + const systemidiaddress = this.systemID.toIAddress(); + const identityidiaddress = this.identityID.toIAddress(); + console.log(`systemid address: ${systemidiaddress}`); + console.log(`identityid address: ${identityidiaddress}`); + const systemidbuf = fromBase58Check(systemidiaddress).hash; + const identityidbuf = fromBase58Check(identityidiaddress).hash; + + return hash + .update(systemidbuf) .update(heightBuffer) - .update(fromBase58Check(this.identityID.toIAddress()).hash) + .update(identityidbuf) .update(VERUS_DATA_SIGNATURE_PREFIX) .update(sigHash) .digest(); From eaaa449b5586bab61516ed72d348fd4ab90b0a3a Mon Sep 17 00:00:00 2001 From: monkins Date: Thu, 27 Nov 2025 18:09:37 +0000 Subject: [PATCH 081/123] build dist --- .../vdxf/classes/VerifiableSignatureData.d.ts | 2 + dist/vdxf/classes/VerifiableSignatureData.js | 65 +++++++++++++++++-- 2 files changed, 61 insertions(+), 6 deletions(-) diff --git a/dist/vdxf/classes/VerifiableSignatureData.d.ts b/dist/vdxf/classes/VerifiableSignatureData.d.ts index 64a25a66..fe6428a7 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.d.ts +++ b/dist/vdxf/classes/VerifiableSignatureData.d.ts @@ -63,6 +63,8 @@ export declare class VerifiableSignatureData implements SerializableEntity { calcFlags(): BigNumber; setFlags(): void; private getBufferEncodingLength; + private getExtraHashDataByteLength; + private getExtraHashData; getByteLength(): number; toBuffer(): Buffer; fromBuffer(buffer: Buffer, offset?: number): number; diff --git a/dist/vdxf/classes/VerifiableSignatureData.js b/dist/vdxf/classes/VerifiableSignatureData.js index a2a28899..a6fb1717 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.js +++ b/dist/vdxf/classes/VerifiableSignatureData.js @@ -85,6 +85,48 @@ class VerifiableSignatureData { const bufLen = buf.byteLength; return varuint_1.default.encodingLength(bufLen) + bufLen; } + getExtraHashDataByteLength() { + let byteLength = 0; + if (this.vdxfKeys && this.vdxfKeys.length > 0) { + byteLength += varuint_1.default.encodingLength(this.vdxfKeys.length); + byteLength += this.vdxfKeys.length * vdxf_1.HASH160_BYTE_LENGTH; + } + if (this.vdxfKeyNames && this.vdxfKeyNames.length > 0) { + byteLength += varuint_1.default.encodingLength(this.vdxfKeyNames.length); + for (const name of this.vdxfKeyNames) { + byteLength += this.getBufferEncodingLength(Buffer.from(name, 'utf8')); + } + } + if (this.boundHashes && this.boundHashes.length > 0) { + byteLength += varuint_1.default.encodingLength(this.boundHashes.length); + byteLength += this.boundHashes.length * vdxf_1.HASH256_BYTE_LENGTH; + } + return byteLength; + } + getExtraHashData() { + const byteLength = this.getExtraHashDataByteLength(); + if (byteLength === 0) { + return Buffer.alloc(0); + } + const bufferWriter = new BufferWriter(Buffer.alloc(byteLength)); + if (this.vdxfKeys && this.vdxfKeys.length > 0) { + // Sort vdxfKeys by their 20-byte buffer values before writing + const keyBuffers = this.vdxfKeys.map(x => (0, address_1.fromBase58Check)(x).hash); + const sortedBuffers = keyBuffers.sort(Buffer.compare); + bufferWriter.writeArray(sortedBuffers); + } + if (this.vdxfKeyNames && this.vdxfKeyNames.length > 0) { + // Sort vdxfKeyNames before writing + const sortedNames = [...this.vdxfKeyNames].sort(); + bufferWriter.writeVector(sortedNames.map(x => Buffer.from(x, 'utf8'))); + } + if (this.boundHashes && this.boundHashes.length > 0) { + // Sort boundHashes before writing + const sortedHashes = [...this.boundHashes].sort(Buffer.compare); + bufferWriter.writeArray(sortedHashes); + } + return bufferWriter.buffer; + } getByteLength() { let byteLength = 0; byteLength += varint_1.default.encodingLength(this.version); @@ -172,11 +214,11 @@ class VerifiableSignatureData { getIdentityHash(height, sigHash) { var heightBuffer = Buffer.allocUnsafe(4); heightBuffer.writeUInt32LE(height); - if (this.hasBoundHashes() || this.hasStatements() || this.hasVdxfKeys() || this.hasVdxfKeyNames()) { - throw new Error("Bound hashes, statements, and vdxfkeys in signature not yet supported."); + if (this.hasStatements()) { + throw new Error("Statements in signature not yet supported."); } if (!this.hashType.eq(new bn_js_1.BN(DataDescriptor_1.EHashTypes.HASH_SHA256))) { - throw new Error("Invalid signature type for identity hash"); + throw new Error("Only SHA256 hash type is currently supported."); } if (this.signatureVersion.eq(new bn_js_1.BN(0))) { throw new Error("Invalid sig data version"); @@ -191,10 +233,21 @@ class VerifiableSignatureData { .digest(); } else if (this.signatureVersion.eq(new bn_js_1.BN(2))) { - return createHash("sha256") - .update((0, address_1.fromBase58Check)(this.systemID.toIAddress()).hash) + const extraHashData = this.getExtraHashData(); + const hash = createHash("sha256"); + if (extraHashData.length > 0) { + hash.update(extraHashData); + } + const systemidiaddress = this.systemID.toIAddress(); + const identityidiaddress = this.identityID.toIAddress(); + console.log(`systemid address: ${systemidiaddress}`); + console.log(`identityid address: ${identityidiaddress}`); + const systemidbuf = (0, address_1.fromBase58Check)(systemidiaddress).hash; + const identityidbuf = (0, address_1.fromBase58Check)(identityidiaddress).hash; + return hash + .update(systemidbuf) .update(heightBuffer) - .update((0, address_1.fromBase58Check)(this.identityID.toIAddress()).hash) + .update(identityidbuf) .update(vdxf_2.VERUS_DATA_SIGNATURE_PREFIX) .update(sigHash) .digest(); From 77d87cbd2f72ae3a5bfb58d7415c72d1cd28e74f Mon Sep 17 00:00:00 2001 From: monkins Date: Thu, 27 Nov 2025 19:03:14 +0000 Subject: [PATCH 082/123] remove statements --- dist/vdxf/classes/VerifiableSignatureData.js | 13 ++----------- src/vdxf/classes/VerifiableSignatureData.ts | 15 ++------------- 2 files changed, 4 insertions(+), 24 deletions(-) diff --git a/dist/vdxf/classes/VerifiableSignatureData.js b/dist/vdxf/classes/VerifiableSignatureData.js index a6fb1717..d7622d9f 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.js +++ b/dist/vdxf/classes/VerifiableSignatureData.js @@ -214,9 +214,6 @@ class VerifiableSignatureData { getIdentityHash(height, sigHash) { var heightBuffer = Buffer.allocUnsafe(4); heightBuffer.writeUInt32LE(height); - if (this.hasStatements()) { - throw new Error("Statements in signature not yet supported."); - } if (!this.hashType.eq(new bn_js_1.BN(DataDescriptor_1.EHashTypes.HASH_SHA256))) { throw new Error("Only SHA256 hash type is currently supported."); } @@ -238,16 +235,10 @@ class VerifiableSignatureData { if (extraHashData.length > 0) { hash.update(extraHashData); } - const systemidiaddress = this.systemID.toIAddress(); - const identityidiaddress = this.identityID.toIAddress(); - console.log(`systemid address: ${systemidiaddress}`); - console.log(`identityid address: ${identityidiaddress}`); - const systemidbuf = (0, address_1.fromBase58Check)(systemidiaddress).hash; - const identityidbuf = (0, address_1.fromBase58Check)(identityidiaddress).hash; return hash - .update(systemidbuf) + .update((0, address_1.fromBase58Check)(this.systemID.toIAddress()).hash) .update(heightBuffer) - .update(identityidbuf) + .update((0, address_1.fromBase58Check)(this.identityID.toIAddress()).hash) .update(vdxf_2.VERUS_DATA_SIGNATURE_PREFIX) .update(sigHash) .digest(); diff --git a/src/vdxf/classes/VerifiableSignatureData.ts b/src/vdxf/classes/VerifiableSignatureData.ts index 76a3013b..969b5ffd 100644 --- a/src/vdxf/classes/VerifiableSignatureData.ts +++ b/src/vdxf/classes/VerifiableSignatureData.ts @@ -328,10 +328,6 @@ export class VerifiableSignatureData implements SerializableEntity { var heightBuffer = Buffer.allocUnsafe(4) heightBuffer.writeUInt32LE(height); - if (this.hasStatements()) { - throw new Error("Statements in signature not yet supported."); - } - if (!this.hashType.eq(new BN(EHashTypes.HASH_SHA256))) { throw new Error("Only SHA256 hash type is currently supported."); } @@ -353,18 +349,11 @@ export class VerifiableSignatureData implements SerializableEntity { if (extraHashData.length > 0) { hash.update(extraHashData); } - - const systemidiaddress = this.systemID.toIAddress(); - const identityidiaddress = this.identityID.toIAddress(); - console.log(`systemid address: ${systemidiaddress}`); - console.log(`identityid address: ${identityidiaddress}`); - const systemidbuf = fromBase58Check(systemidiaddress).hash; - const identityidbuf = fromBase58Check(identityidiaddress).hash; return hash - .update(systemidbuf) + .update(fromBase58Check(this.systemID.toIAddress()).hash) .update(heightBuffer) - .update(identityidbuf) + .update(fromBase58Check(this.identityID.toIAddress()).hash) .update(VERUS_DATA_SIGNATURE_PREFIX) .update(sigHash) .digest(); From 09f339fad4d2964fd01bc7bc7b12406ef7e4cecd Mon Sep 17 00:00:00 2001 From: monkins Date: Fri, 28 Nov 2025 09:55:44 +0000 Subject: [PATCH 083/123] Add fromSignatureData to VerifiableSignatureData function --- .../vdxf/classes/VerifiableSignatureData.d.ts | 3 +- dist/vdxf/classes/VerifiableSignatureData.js | 16 +++ .../vdxf/verifiablesignaturedata.test.ts | 116 +++++++++++++++++- src/vdxf/classes/VerifiableSignatureData.ts | 23 +++- 4 files changed, 150 insertions(+), 8 deletions(-) diff --git a/dist/vdxf/classes/VerifiableSignatureData.d.ts b/dist/vdxf/classes/VerifiableSignatureData.d.ts index fe6428a7..503e276c 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.d.ts +++ b/dist/vdxf/classes/VerifiableSignatureData.d.ts @@ -1,7 +1,7 @@ import { BigNumber } from '../../utils/types/BigNumber'; import { SerializableEntity } from '../../utils/types/SerializableEntity'; import { CompactIdAddressObject, CompactIdAddressObjectJson } from './CompactIdAddressObject'; -import { SignatureData } from '../../pbaas'; +import { SignatureData, SignatureJsonDataInterface } from '../../pbaas'; export interface VerifiableSignatureDataJson { version: number; flags: number; @@ -72,4 +72,5 @@ export declare class VerifiableSignatureData implements SerializableEntity { toSignatureData(sigHash: Buffer): SignatureData; toJson(): VerifiableSignatureDataJson; static fromJson(json: VerifiableSignatureDataJson): VerifiableSignatureData; + static fromSignatureDataJson(json: SignatureJsonDataInterface, rootSystemName?: string): VerifiableSignatureData; } diff --git a/dist/vdxf/classes/VerifiableSignatureData.js b/dist/vdxf/classes/VerifiableSignatureData.js index d7622d9f..69160c9c 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.js +++ b/dist/vdxf/classes/VerifiableSignatureData.js @@ -294,6 +294,22 @@ class VerifiableSignatureData { instance.signatureAsVch = Buffer.from(json.signature, 'hex'); return instance; } + static fromSignatureDataJson(json, rootSystemName = 'VRSC') { + var _a; + const instance = new VerifiableSignatureData(); + instance.version = new bn_js_1.BN(json.version); + instance.hashType = new bn_js_1.BN(json.hashtype); + instance.signatureVersion = new bn_js_1.BN(2); //default Signature Version + instance.systemID = CompactIdAddressObject_1.CompactIdAddressObject.fromJson({ address: json.systemid, version: 1, type: CompactIdAddressObject_1.CompactIdAddressObject.IS_IDENTITYID, rootSystemName }); + instance.identityID = CompactIdAddressObject_1.CompactIdAddressObject.fromJson({ address: json.identityid, version: 1, type: CompactIdAddressObject_1.CompactIdAddressObject.IS_IDENTITYID, rootSystemName }); + // Set optional fields + instance.vdxfKeys = json.vdxfkeys; + instance.vdxfKeyNames = json.vdxfkeynames; + instance.boundHashes = (_a = json.boundhashes) === null || _a === void 0 ? void 0 : _a.map(x => Buffer.from(x, 'hex')); + // Store the full signature (from daemon in base64 format) + instance.signatureAsVch = Buffer.from(json.signature, 'base64'); + return instance; + } } exports.VerifiableSignatureData = VerifiableSignatureData; VerifiableSignatureData.VERSION_INVALID = new bn_js_1.BN(0); diff --git a/src/__tests__/vdxf/verifiablesignaturedata.test.ts b/src/__tests__/vdxf/verifiablesignaturedata.test.ts index 677e09e7..68065c52 100644 --- a/src/__tests__/vdxf/verifiablesignaturedata.test.ts +++ b/src/__tests__/vdxf/verifiablesignaturedata.test.ts @@ -144,8 +144,7 @@ describe('Serializes and deserializes SignatureData', () => { // Hashes should be identical because keys are sorted before hashing expect(hash1.toString('hex')).toBe(hash2.toString('hex')) - console.log(`1 run verifyhash "${s2.identityID.toIAddress()}" "${s2.signatureAsVch.toString('base64')}" "${hash2.toString('hex')}"`); - console.log(`1 run verifyhash "${s2.identityID.toIAddress()}" "${s2.signatureAsVch.toString('base64')}" "${hash2.reverse().toString('hex')}"`); + }); test('getIdentityHash with extra data - vdxfKeys are sorted by buffer value', () => { @@ -160,15 +159,120 @@ describe('Serializes and deserializes SignatureData', () => { }) const sigHash = createHash("sha256").update("hello world1").digest(); - const hash1 = s.getIdentityHash(826997, sigHash); - console.log(`2 run verifyhash "${s.identityID.toIAddress()}" "${s.signatureAsVch.toString('base64')}" "${hash1.toString('hex')}"`); - console.log(`2 run verifyhash "${s.identityID.toIAddress()}" "${s.signatureAsVch.toString('base64')}" "${hash1.reverse().toString('hex')}"`); - + const hash1 = s.getIdentityHash(826997, sigHash); // Hashes should be identical because keys are sorted before hashing expect(hash1.toString('hex')).toBe(hash1.toString('hex')) }); + test('fromSignatureDataJson parses all fields correctly', () => { + const signatureDataJson = { + "version": 1, + "systemid": "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", + "hashtype": 5, + "signaturehash": "f8220bacb0bf5bd8ca33a890184b66b35fb64647274b4b9fb4ff90e68f77a5a7", + "identityid": "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", + "signaturetype": 1, + "signature": "AgVgngwAAUEg4QYvX2zJJUZLa4YdtwoxehCQ9T3U6xGw08SmonRSv1xofR1264j5/bdXmq6Qc2YgzlCt3DqVKM9c9DLuCU4bbQ==", + "vdxfkeys": [ + "iQRWB2Ay9rEbzStXDjMFpveh4oEmD6YWXa", + "i5cVmwQQZfWz1AYp9AwKakPQxTjQfK2Mrk", + "iKqjqcXE15KPNuCvm2evZUnwiYEZ2CLnV2", + "iRrCKQqLQrWczeNotMgqJkoUW5ZzF182Ax" + ], + "vdxfkeynames": [ + "examplename1", + "examplename2" + ], + "boundhashes": [ + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + ] + }; + + const verifiableSig = VerifiableSignatureData.fromSignatureDataJson(signatureDataJson); + + // Verify version fields + expect(verifiableSig.version.toNumber()).toBe(1); + expect(verifiableSig.signatureVersion.toNumber()).toBe(2); // Auto-detected as v2 due to extra data + + // Verify IDs + expect(verifiableSig.systemID.toIAddress()).toBe("iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"); + expect(verifiableSig.identityID.toIAddress()).toBe("i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s"); + + // Verify hash type + expect(verifiableSig.hashType.toNumber()).toBe(5); + + // Verify vdxfKeys (stored as strings) + expect(verifiableSig.vdxfKeys).toBeDefined(); + expect(verifiableSig.vdxfKeys?.length).toBe(4); + expect(verifiableSig.vdxfKeys?.[0]).toBe("iQRWB2Ay9rEbzStXDjMFpveh4oEmD6YWXa"); + expect(verifiableSig.vdxfKeys?.[1]).toBe("i5cVmwQQZfWz1AYp9AwKakPQxTjQfK2Mrk"); + expect(verifiableSig.vdxfKeys?.[2]).toBe("iKqjqcXE15KPNuCvm2evZUnwiYEZ2CLnV2"); + expect(verifiableSig.vdxfKeys?.[3]).toBe("iRrCKQqLQrWczeNotMgqJkoUW5ZzF182Ax"); + + // Verify vdxfKeyNames + expect(verifiableSig.vdxfKeyNames).toBeDefined(); + expect(verifiableSig.vdxfKeyNames?.length).toBe(2); + expect(verifiableSig.vdxfKeyNames?.[0]).toBe("examplename1"); + expect(verifiableSig.vdxfKeyNames?.[1]).toBe("examplename2"); + + // Verify boundHashes + expect(verifiableSig.boundHashes).toBeDefined(); + expect(verifiableSig.boundHashes?.length).toBe(2); + expect(verifiableSig.boundHashes?.[0].toString('hex')).toBe("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); + expect(verifiableSig.boundHashes?.[1].toString('hex')).toBe("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"); + + // Verify signature + expect(verifiableSig.signatureAsVch.toString('base64')).toBe("AgVgngwAAUEg4QYvX2zJJUZLa4YdtwoxehCQ9T3U6xGw08SmonRSv1xofR1264j5/bdXmq6Qc2YgzlCt3DqVKM9c9DLuCU4bbQ=="); + }); + + test('verify daemon signature with all extra data - from signdata', () => { + // Real signature data from daemon with vdxfkeys, vdxfkeynames, and boundhashes + const signatureDataJson = { + "version": 1, + "systemid": "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", + "hashtype": 5, + "signaturehash": "f8220bacb0bf5bd8ca33a890184b66b35fb64647274b4b9fb4ff90e68f77a5a7", + "identityid": "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", + "signaturetype": 1, + "signature": "AgVgngwAAUEg4QYvX2zJJUZLa4YdtwoxehCQ9T3U6xGw08SmonRSv1xofR1264j5/bdXmq6Qc2YgzlCt3DqVKM9c9DLuCU4bbQ==", + "vdxfkeys": [ + "iQRWB2Ay9rEbzStXDjMFpveh4oEmD6YWXa", + "i5cVmwQQZfWz1AYp9AwKakPQxTjQfK2Mrk", + "iKqjqcXE15KPNuCvm2evZUnwiYEZ2CLnV2", + "iRrCKQqLQrWczeNotMgqJkoUW5ZzF182Ax" + ], + "vdxfkeynames": [ + "examplename1", + "examplename2" + ], + "boundhashes": [ + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + ] + }; + + // Create VerifiableSignatureData directly from SignatureData JSON + const verifiableSig = VerifiableSignatureData.fromSignatureDataJson(signatureDataJson); + + // Verify the parsed data + expect(verifiableSig.version.toNumber()).toBe(1); + expect(verifiableSig.signatureVersion.toNumber()).toBe(2); + expect(verifiableSig.hashType.toNumber()).toBe(5); + expect(verifiableSig.systemID.toIAddress()).toBe("iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"); + expect(verifiableSig.identityID.toIAddress()).toBe("i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s"); + expect(verifiableSig.vdxfKeys?.length).toBe(4); + expect(verifiableSig.vdxfKeyNames?.length).toBe(2); + expect(verifiableSig.boundHashes?.length).toBe(2); + + // The message that was signed is the signaturehash from the daemon + const messageHash = Buffer.from(signatureDataJson.signaturehash, 'hex'); + + // Verify the signature hash matches + expect(messageHash.toString('hex')).toBe(signatureDataJson.signaturehash); + }); + }); diff --git a/src/vdxf/classes/VerifiableSignatureData.ts b/src/vdxf/classes/VerifiableSignatureData.ts index 969b5ffd..79d96b99 100644 --- a/src/vdxf/classes/VerifiableSignatureData.ts +++ b/src/vdxf/classes/VerifiableSignatureData.ts @@ -12,7 +12,7 @@ import { VERUS_DATA_SIGNATURE_PREFIX } from "../../constants/vdxf"; import { CompactIdAddressObject, CompactIdAddressObjectJson } from './CompactIdAddressObject'; import { DEFAULT_VERUS_CHAINNAME, HASH_TYPE_SHA256 } from '../../constants/pbaas'; import varint from '../../utils/varint'; -import { SignatureData } from '../../pbaas'; +import { SignatureData, SignatureJsonDataInterface } from '../../pbaas'; export interface VerifiableSignatureDataJson { version: number; @@ -410,4 +410,25 @@ export class VerifiableSignatureData implements SerializableEntity { instance.signatureAsVch = Buffer.from(json.signature, 'hex'); return instance; } + + static fromSignatureDataJson(json: SignatureJsonDataInterface, rootSystemName = 'VRSC'): VerifiableSignatureData { + const instance = new VerifiableSignatureData(); + instance.version = new BN(json.version); + instance.hashType = new BN(json.hashtype); + instance.signatureVersion = new BN(2); //default Signature Version + + instance.systemID = CompactIdAddressObject.fromJson({address: json.systemid, version: 1, type: CompactIdAddressObject.IS_IDENTITYID, rootSystemName}); + instance.identityID = CompactIdAddressObject.fromJson({address: json.identityid, version: 1, type: CompactIdAddressObject.IS_IDENTITYID, rootSystemName}); + + + // Set optional fields + instance.vdxfKeys = json.vdxfkeys; + instance.vdxfKeyNames = json.vdxfkeynames; + instance.boundHashes = json.boundhashes?.map(x => Buffer.from(x, 'hex')); + + // Store the full signature (from daemon in base64 format) + instance.signatureAsVch = Buffer.from(json.signature, 'base64'); + + return instance; + } } \ No newline at end of file From d0866468d44621b5f4e5c88f466fa3eb78ce9538 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 28 Nov 2025 16:14:46 +0100 Subject: [PATCH 084/123] Add tag to VerusPayInvoiceDetails in the form of x addr --- dist/constants/vdxf.d.ts | 1 + dist/constants/vdxf.js | 3 +- dist/utils/address.d.ts | 4 +- dist/utils/address.js | 28 ++- dist/vdxf/classes/CompactAddressObject.d.ts | 59 ++++++ dist/vdxf/classes/CompactAddressObject.js | 141 +++++++++++++ dist/vdxf/classes/CompactIdAddressObject.d.ts | 14 +- dist/vdxf/classes/CompactIdAddressObject.js | 67 +++--- .../vdxf/classes/VerifiableSignatureData.d.ts | 14 +- dist/vdxf/classes/VerifiableSignatureData.js | 12 +- dist/vdxf/classes/index.d.ts | 2 +- dist/vdxf/classes/index.js | 2 +- .../classes/login/LoginRequestDetails.d.ts | 6 +- .../vdxf/classes/login/LoginRequestDetails.js | 6 +- .../payment/VerusPayInvoiceDetails.d.ts | 7 + .../classes/payment/VerusPayInvoiceDetails.js | 31 ++- .../AppEncryptionRequestDetails.d.ts | 14 +- .../AppEncryptionRequestDetails.js | 10 +- .../ProvisionIdentityDetails.d.ts | 20 +- .../ProvisionIdentityDetails.js | 14 +- .../UserDataRequestDetails.d.ts | 8 +- .../requestobjects/UserDataRequestDetails.js | 6 +- dist/vdxf/keys.js | 2 + src/__tests__/utils/address.test.ts | 10 +- .../vdxf/appencryptionrequestdetails.test.ts | 40 ++-- .../vdxf/compactaddressidobject.test.ts | 57 ++++-- src/__tests__/vdxf/genericrequest.test.ts | 14 +- src/__tests__/vdxf/genericresponse.test.ts | 14 +- .../vdxf/loginrequestdetails.test.ts | 8 +- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 32 +-- .../vdxf/provisioningidentitydetails.test.ts | 8 +- src/__tests__/vdxf/userdatarequest.test.ts | 6 +- .../userspecificdatapacketdetails.test.ts | 6 +- src/__tests__/vdxf/veruspayinvoice.test.ts | 9 +- src/constants/vdxf.ts | 1 + src/utils/address.ts | 29 ++- src/vdxf/classes/CompactAddressObject.ts | 193 ++++++++++++++++++ src/vdxf/classes/CompactIdAddressObject.ts | 164 --------------- src/vdxf/classes/VerifiableSignatureData.ts | 24 +-- src/vdxf/classes/index.ts | 2 +- src/vdxf/classes/login/LoginRequestDetails.ts | 10 +- .../classes/payment/VerusPayInvoiceDetails.ts | 38 +++- .../AppEncryptionRequestDetails.ts | 22 +- .../ProvisionIdentityDetails.ts | 32 +-- .../requestobjects/UserDataRequestDetails.ts | 12 +- src/vdxf/keys.ts | 2 + 46 files changed, 787 insertions(+), 417 deletions(-) create mode 100644 dist/vdxf/classes/CompactAddressObject.d.ts create mode 100644 dist/vdxf/classes/CompactAddressObject.js create mode 100644 src/vdxf/classes/CompactAddressObject.ts delete mode 100644 src/vdxf/classes/CompactIdAddressObject.ts diff --git a/dist/constants/vdxf.d.ts b/dist/constants/vdxf.d.ts index eb378139..583e1c8b 100644 --- a/dist/constants/vdxf.d.ts +++ b/dist/constants/vdxf.d.ts @@ -3,5 +3,6 @@ export declare const HASH160_BYTE_LENGTH = 20; export declare const HASH256_BYTE_LENGTH = 32; export declare const I_ADDR_VERSION = 102; export declare const R_ADDR_VERSION = 60; +export declare const X_ADDR_VERSION = 137; export declare const NULL_ADDRESS = "i3UXS5QPRQGNRDDqVnyWTnmFCTHDbzmsYk"; export declare const VERUS_DATA_SIGNATURE_PREFIX: Buffer; diff --git a/dist/constants/vdxf.js b/dist/constants/vdxf.js index 35cf2402..841f4172 100644 --- a/dist/constants/vdxf.js +++ b/dist/constants/vdxf.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.VERUS_DATA_SIGNATURE_PREFIX = exports.NULL_ADDRESS = exports.R_ADDR_VERSION = exports.I_ADDR_VERSION = exports.HASH256_BYTE_LENGTH = exports.HASH160_BYTE_LENGTH = exports.VDXF_OBJECT_DEFAULT_VERSION = void 0; +exports.VERUS_DATA_SIGNATURE_PREFIX = exports.NULL_ADDRESS = exports.X_ADDR_VERSION = exports.R_ADDR_VERSION = exports.I_ADDR_VERSION = exports.HASH256_BYTE_LENGTH = exports.HASH160_BYTE_LENGTH = exports.VDXF_OBJECT_DEFAULT_VERSION = void 0; const bn_js_1 = require("bn.js"); const bufferutils_1 = require("../utils/bufferutils"); exports.VDXF_OBJECT_DEFAULT_VERSION = new bn_js_1.BN(1, 10); @@ -8,6 +8,7 @@ exports.HASH160_BYTE_LENGTH = 20; exports.HASH256_BYTE_LENGTH = 32; exports.I_ADDR_VERSION = 102; exports.R_ADDR_VERSION = 60; +exports.X_ADDR_VERSION = 137; exports.NULL_ADDRESS = "i3UXS5QPRQGNRDDqVnyWTnmFCTHDbzmsYk"; const VERUS_DATA_SIGNATURE_PREFIX_STRING = "Verus signed data:\n"; var bufferWriter = new bufferutils_1.default.BufferWriter(Buffer.alloc(VERUS_DATA_SIGNATURE_PREFIX_STRING.length + 1)); diff --git a/dist/utils/address.d.ts b/dist/utils/address.d.ts index c8982881..5b51face 100644 --- a/dist/utils/address.d.ts +++ b/dist/utils/address.d.ts @@ -3,9 +3,11 @@ export declare const fromBase58Check: (address: string) => { hash: Buffer; }; export declare const toBase58Check: (hash: Buffer, version: number) => string; +export declare const nameAndParentAddrToAddr: (name: string, parentIAddr?: string, version?: number) => string; export declare const nameAndParentAddrToIAddr: (name: string, parentIAddr?: string) => string; +export declare const fqnToAddress: (fullyqualifiedname: string, rootSystemName?: string, version?: number) => string; export declare const toIAddress: (fullyqualifiedname: string, rootSystemName?: string) => string; -export declare function getDataKey(keyName: string, nameSpaceID?: string, verusChainId?: string): { +export declare function getDataKey(keyName: string, nameSpaceID?: string, verusChainId?: string, version?: number): { id: string; namespace: string; }; diff --git a/dist/utils/address.js b/dist/utils/address.js index 5d0e70ee..8d43c64c 100644 --- a/dist/utils/address.js +++ b/dist/utils/address.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.decodeEthDestination = exports.decodeDestination = exports.toIAddress = exports.nameAndParentAddrToIAddr = exports.toBase58Check = exports.fromBase58Check = void 0; +exports.decodeEthDestination = exports.decodeDestination = exports.toIAddress = exports.fqnToAddress = exports.nameAndParentAddrToIAddr = exports.nameAndParentAddrToAddr = exports.toBase58Check = exports.fromBase58Check = void 0; exports.getDataKey = getDataKey; const pbaas_1 = require("../constants/pbaas"); const vdxf_1 = require("../constants/vdxf"); @@ -36,7 +36,7 @@ const toBase58Check = (hash, version) => { return bs58check.encode(payload); }; exports.toBase58Check = toBase58Check; -const nameAndParentAddrToIAddr = (name, parentIAddr) => { +const nameAndParentAddrToAddr = (name, parentIAddr, version = vdxf_1.I_ADDR_VERSION) => { let idHash; const nameBuffer = Buffer.from(name.toLowerCase(), "utf8"); if (parentIAddr == null) { @@ -46,10 +46,14 @@ const nameAndParentAddrToIAddr = (name, parentIAddr) => { idHash = (0, hash_1.hash)(nameBuffer); idHash = (0, hash_1.hash)((0, exports.fromBase58Check)(parentIAddr).hash, idHash); } - return (0, exports.toBase58Check)((0, hash_1.hash160)(idHash), 102); + return (0, exports.toBase58Check)((0, hash_1.hash160)(idHash), version); +}; +exports.nameAndParentAddrToAddr = nameAndParentAddrToAddr; +const nameAndParentAddrToIAddr = (name, parentIAddr) => { + return (0, exports.nameAndParentAddrToAddr)(name, parentIAddr, vdxf_1.I_ADDR_VERSION); }; exports.nameAndParentAddrToIAddr = nameAndParentAddrToIAddr; -const toIAddress = (fullyqualifiedname, rootSystemName = "") => { +const fqnToAddress = (fullyqualifiedname, rootSystemName = "", version = vdxf_1.I_ADDR_VERSION) => { const splitFqnAt = fullyqualifiedname.split("@").filter(x => x.length > 0); if (splitFqnAt.length !== 1) throw new Error("Invalid name"); @@ -84,7 +88,11 @@ const toIAddress = (fullyqualifiedname, rootSystemName = "") => { idHash = (0, hash_1.hash)(nameBuffer); idHash = (0, hash_1.hash)(Parent, idHash); } - return (0, exports.toBase58Check)((0, hash_1.hash160)(idHash), 102); + return (0, exports.toBase58Check)((0, hash_1.hash160)(idHash), version); +}; +exports.fqnToAddress = fqnToAddress; +const toIAddress = (fullyqualifiedname, rootSystemName = "") => { + return (0, exports.fqnToAddress)(fullyqualifiedname, rootSystemName, vdxf_1.I_ADDR_VERSION); }; exports.toIAddress = toIAddress; function trimSpaces(name, removeDuals) { @@ -216,13 +224,13 @@ function cleanName(name, parent, removeDuals = false, verusChainName = pbaas_1.D } return { name: subNames[0], parent: newParent ? (0, exports.toBase58Check)(newParent, vdxf_1.I_ADDR_VERSION) : null }; } -function getID(name, parent, verusChainName = pbaas_1.DEFAULT_VERUS_CHAINNAME) { +function getID(name, parent, verusChainName = pbaas_1.DEFAULT_VERUS_CHAINNAME, version = vdxf_1.I_ADDR_VERSION) { const _cleanName = name === "::" ? { name, parent } : cleanName(name, parent, false, verusChainName); if (_cleanName.name.length == 0) return pbaas_1.NULL_I_ADDR; - return (0, exports.nameAndParentAddrToIAddr)(_cleanName.name, _cleanName.parent); + return (0, exports.nameAndParentAddrToAddr)(_cleanName.name, _cleanName.parent, version); } -function getDataKey(keyName, nameSpaceID, verusChainId = pbaas_1.DEFAULT_VERUS_CHAINID) { +function getDataKey(keyName, nameSpaceID, verusChainId = pbaas_1.DEFAULT_VERUS_CHAINID, version = vdxf_1.I_ADDR_VERSION) { let keyCopy = keyName; const addressParts = keyName.split(":"); // If the first part of the address is a namespace, it is followed by a double colon @@ -237,8 +245,8 @@ function getDataKey(keyName, nameSpaceID, verusChainId = pbaas_1.DEFAULT_VERUS_C if (!nameSpaceID) { nameSpaceID = verusChainId; } - const parent = getID("::", nameSpaceID); - return { id: getID(keyCopy, parent), namespace: nameSpaceID }; + const parent = getID("::", nameSpaceID, undefined, version); + return { id: getID(keyCopy, parent, undefined, version), namespace: nameSpaceID }; } const decodeDestination = (destination) => { try { diff --git a/dist/vdxf/classes/CompactAddressObject.d.ts b/dist/vdxf/classes/CompactAddressObject.d.ts new file mode 100644 index 00000000..04065cab --- /dev/null +++ b/dist/vdxf/classes/CompactAddressObject.d.ts @@ -0,0 +1,59 @@ +/** + * CompactIdentityObject - Class representing an id in the smallest possible format + * + * This class is used to represent an identity or address in a compact format, allowing for efficient + * storage and transmission. The compact id can be represented either as a fully qualified name (FQN) + * or as an identity address (iaddress) or as an x address (tag/index). The class includes methods for serialization, deserialization, + * and validation of the compact id object. + */ +import { BigNumber } from '../../utils/types/BigNumber'; +import { SerializableEntity } from '../../utils/types/SerializableEntity'; +export interface CompactAddressObjectJson { + version: number; + type: number; + address: string; + rootsystemname: string; + namespace?: string; +} +export interface CompactAddressObjectInterface { + version?: BigNumber; + type: BigNumber; + address: string; + rootSystemName?: string; + nameSpace?: string; +} +export type CompactAddressIVariant = "COMPACT_ADDR_I_VARIANT"; +export type CompactAddressXVariant = "COMPACT_ADDR_X_VARIANT"; +export type CompactAddressVariantName = CompactAddressIVariant | CompactAddressXVariant; +export type CompactAddressVariantAllowedType = T extends CompactAddressIVariant ? `${1 | 2}` : T extends CompactAddressXVariant ? `${1 | 3}` : never; +export declare class CompactAddressObject implements SerializableEntity { + static VERSION_INVALID: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static DEFAULT_VERSION: import("bn.js"); + static TYPE_FQN: import("bn.js"); + static TYPE_I_ADDRESS: import("bn.js"); + static TYPE_X_ADDRESS: import("bn.js"); + version: BigNumber; + type: CompactAddressVariantAllowedType; + address: string; + rootSystemName: string; + nameSpace: string; + constructor(data?: CompactAddressObjectInterface); + get BNType(): import("bn.js"); + set setType(type: BigNumber); + isFQN(): boolean; + isIaddress(): boolean; + isXaddress(): boolean; + isValid(): boolean; + toIAddress(): string; + toXAddress(): string; + static fromIAddress(iaddr: string): CompactAddressObject; + static fromXAddress(xaddr: string, nameSpace?: string): CompactAddressObject; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): CompactAddressObjectJson; + static fromJson(json: any): CompactAddressObject; +} +export type CompactXAddressObject = CompactAddressObject; diff --git a/dist/vdxf/classes/CompactAddressObject.js b/dist/vdxf/classes/CompactAddressObject.js new file mode 100644 index 00000000..7bb6a739 --- /dev/null +++ b/dist/vdxf/classes/CompactAddressObject.js @@ -0,0 +1,141 @@ +"use strict"; +/** + * CompactIdentityObject - Class representing an id in the smallest possible format + * + * This class is used to represent an identity or address in a compact format, allowing for efficient + * storage and transmission. The compact id can be represented either as a fully qualified name (FQN) + * or as an identity address (iaddress) or as an x address (tag/index). The class includes methods for serialization, deserialization, + * and validation of the compact id object. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CompactAddressObject = void 0; +const bn_js_1 = require("bn.js"); +const bufferutils_1 = require("../../utils/bufferutils"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const varuint_1 = require("../../utils/varuint"); +const address_1 = require("../../utils/address"); +const vdxf_1 = require("../../constants/vdxf"); +const pbaas_1 = require("../../constants/pbaas"); +class CompactAddressObject { + constructor(data) { + this.version = (data === null || data === void 0 ? void 0 : data.version) || new bn_js_1.BN(CompactAddressObject.DEFAULT_VERSION); + this.type = (data === null || data === void 0 ? void 0 : data.type.toString()) || "1"; + this.address = (data === null || data === void 0 ? void 0 : data.address) || ''; + this.rootSystemName = (data === null || data === void 0 ? void 0 : data.rootSystemName) || 'VRSC'; + this.nameSpace = (data === null || data === void 0 ? void 0 : data.nameSpace) || (0, address_1.toIAddress)(this.rootSystemName); + } + get BNType() { + return new bn_js_1.BN(this.type); + } + set setType(type) { + this.type = type.toString(); + } + isFQN() { + return (this.BNType.eq(CompactAddressObject.TYPE_FQN)); + } + isIaddress() { + return (this.BNType.eq(CompactAddressObject.TYPE_I_ADDRESS)); + } + isXaddress() { + return (this.BNType.eq(CompactAddressObject.TYPE_X_ADDRESS)); + } + isValid() { + return this.address != null; + } + toIAddress() { + if (this.isXaddress()) + throw new Error("Cannot convert I to X address"); + else if (this.isIaddress()) + return this.address; + else if (this.isFQN()) { + return (0, address_1.toIAddress)(this.address, this.rootSystemName); + } + else + throw new Error("Unknown type"); + } + toXAddress() { + if (this.isIaddress()) + throw new Error("Cannot convert X to I address"); + else if (this.isXaddress()) + return this.address; + else if (this.isFQN()) { + return (0, address_1.getDataKey)(this.address, this.nameSpace, (0, address_1.toIAddress)(this.rootSystemName), vdxf_1.X_ADDR_VERSION).id; + } + else + throw new Error("Unknown type"); + } + static fromIAddress(iaddr) { + return new CompactAddressObject({ + address: iaddr, + type: CompactAddressObject.TYPE_I_ADDRESS + }); + } + static fromXAddress(xaddr, nameSpace = pbaas_1.DEFAULT_VERUS_CHAINID) { + return new CompactAddressObject({ + address: xaddr, + nameSpace: nameSpace, + type: CompactAddressObject.TYPE_X_ADDRESS + }); + } + getByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.version.toNumber()); + length += varuint_1.default.encodingLength(this.BNType.toNumber()); + if (this.isIaddress() || this.isXaddress()) { + length += vdxf_1.HASH160_BYTE_LENGTH; // identityuint160 + } + else { + const addrLen = Buffer.from(this.address, 'utf8').byteLength; + length += varuint_1.default.encodingLength(addrLen) + addrLen; + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeCompactSize(this.version.toNumber()); + writer.writeCompactSize(this.BNType.toNumber()); + if (this.isIaddress() || this.isXaddress()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.address).hash); + } + else { + writer.writeVarSlice(Buffer.from(this.address, 'utf8')); + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new BufferReader(buffer, offset); + this.version = new bn_js_1.BN(reader.readCompactSize()); + this.type = new bn_js_1.BN(reader.readCompactSize()).toString(); + if (this.isIaddress() || this.isXaddress()) { + this.address = (0, address_1.toBase58Check)(reader.readSlice(20), this.isIaddress() ? vdxf_1.I_ADDR_VERSION : vdxf_1.X_ADDR_VERSION); + } + else { + this.address = reader.readVarSlice().toString('utf8'); + } + return reader.offset; + } + toJson() { + return { + version: this.version.toNumber(), + type: this.BNType.toNumber(), + address: this.address, + rootsystemname: this.rootSystemName, + }; + } + static fromJson(json) { + const instance = new CompactAddressObject(); + instance.version = new bn_js_1.BN(json.version); + instance.type = new bn_js_1.BN(json.type).toString(); + instance.address = json.address; + instance.rootSystemName = json.rootsystemname; + return instance; + } +} +exports.CompactAddressObject = CompactAddressObject; +CompactAddressObject.VERSION_INVALID = new bn_js_1.BN(0); +CompactAddressObject.FIRST_VERSION = new bn_js_1.BN(1); +CompactAddressObject.LAST_VERSION = new bn_js_1.BN(1); +CompactAddressObject.DEFAULT_VERSION = new bn_js_1.BN(1); +CompactAddressObject.TYPE_FQN = new bn_js_1.BN(1); +CompactAddressObject.TYPE_I_ADDRESS = new bn_js_1.BN(2); +CompactAddressObject.TYPE_X_ADDRESS = new bn_js_1.BN(3); diff --git a/dist/vdxf/classes/CompactIdAddressObject.d.ts b/dist/vdxf/classes/CompactIdAddressObject.d.ts index aedd2c9e..9070dee2 100644 --- a/dist/vdxf/classes/CompactIdAddressObject.d.ts +++ b/dist/vdxf/classes/CompactIdAddressObject.d.ts @@ -3,7 +3,7 @@ * * This class is used to represent an identity or address in a compact format, allowing for efficient * storage and transmission. The compact id can be represented either as a fully qualified name (FQN) - * or as an identity address (iaddress). The class includes methods for serialization, deserialization, + * or as an identity address (iaddress) or as an x address (tag/index). The class includes methods for serialization, deserialization, * and validation of the compact id object. */ import { BigNumber } from '../../utils/types/BigNumber'; @@ -13,12 +13,14 @@ export interface CompactIdAddressObjectJson { type: number; address: string; rootsystemname: string; + namespace?: string; } export interface CompactIdAddressObjectInterface { version?: BigNumber; type: BigNumber; address: string; rootSystemName?: string; + nameSpace?: string; } export declare class CompactIdAddressObject implements SerializableEntity { static VERSION_INVALID: import("bn.js"); @@ -27,17 +29,23 @@ export declare class CompactIdAddressObject implements SerializableEntity { static DEFAULT_VERSION: import("bn.js"); static IS_FQN: import("bn.js"); static IS_IDENTITYID: import("bn.js"); + static IS_X_ADDRESS: import("bn.js"); version: BigNumber; type: BigNumber; address: string; rootSystemName: string; - constructor(data?: CompactIdAddressObjectInterface); + nameSpace: string; + allowedTypes: Array; + constructor(data?: CompactIdAddressObjectInterface, allowedTypes?: Array); isFQN(): boolean; isIaddress(): boolean; + isXaddress(): boolean; isValid(): boolean; + checkValidity(): void; toIAddress(): string; + toXAddress(): string; static fromIAddress(iaddr: string): CompactIdAddressObject; - setAddressTransferType(): void; + static fromXAddress(xaddr: string, nameSpace?: string): CompactIdAddressObject; getByteLength(): number; toBuffer(): Buffer; fromBuffer(buffer: Buffer, offset?: number): number; diff --git a/dist/vdxf/classes/CompactIdAddressObject.js b/dist/vdxf/classes/CompactIdAddressObject.js index e4b76eec..ad2d5195 100644 --- a/dist/vdxf/classes/CompactIdAddressObject.js +++ b/dist/vdxf/classes/CompactIdAddressObject.js @@ -4,7 +4,7 @@ * * This class is used to represent an identity or address in a compact format, allowing for efficient * storage and transmission. The compact id can be represented either as a fully qualified name (FQN) - * or as an identity address (iaddress). The class includes methods for serialization, deserialization, + * or as an identity address (iaddress) or as an x address (tag/index). The class includes methods for serialization, deserialization, * and validation of the compact id object. */ Object.defineProperty(exports, "__esModule", { value: true }); @@ -15,13 +15,16 @@ const { BufferReader, BufferWriter } = bufferutils_1.default; const varuint_1 = require("../../utils/varuint"); const address_1 = require("../../utils/address"); const vdxf_1 = require("../../constants/vdxf"); +const pbaas_1 = require("../../constants/pbaas"); class CompactIdAddressObject { - constructor(data) { + constructor(data, allowedTypes = [CompactIdAddressObject.IS_FQN.toString(), CompactIdAddressObject.IS_IDENTITYID.toString()]) { this.version = (data === null || data === void 0 ? void 0 : data.version) || new bn_js_1.BN(CompactIdAddressObject.DEFAULT_VERSION); - this.type = (data === null || data === void 0 ? void 0 : data.type) || new bn_js_1.BN(0); + this.type = (data === null || data === void 0 ? void 0 : data.type) || new bn_js_1.BN(1); this.address = (data === null || data === void 0 ? void 0 : data.address) || ''; this.rootSystemName = (data === null || data === void 0 ? void 0 : data.rootSystemName) || 'VRSC'; - this.setAddressTransferType(); + this.nameSpace = (data === null || data === void 0 ? void 0 : data.nameSpace) || (0, address_1.toIAddress)(this.rootSystemName, this.rootSystemName); + this.allowedTypes = allowedTypes; + this.checkValidity(); } isFQN() { return (this.type.eq(CompactIdAddressObject.IS_FQN)); @@ -29,11 +32,21 @@ class CompactIdAddressObject { isIaddress() { return (this.type.eq(CompactIdAddressObject.IS_IDENTITYID)); } + isXaddress() { + return (this.type.eq(CompactIdAddressObject.IS_X_ADDRESS)); + } isValid() { - return this.address != null && this.address.length > 0 && (this.isFQN() || this.isIaddress()); + return this.address != null && this.allowedTypes.includes(this.type.toString()); + } + checkValidity() { + if (!this.isValid()) + throw new Error("Invalid CompactIdAddressObject"); } toIAddress() { - if (this.isIaddress()) + this.checkValidity(); + if (this.isXaddress()) + throw new Error("Cannot convert I to X address"); + else if (this.isIaddress()) return this.address; else if (this.isFQN()) { return (0, address_1.toIAddress)(this.address, this.rootSystemName); @@ -41,31 +54,36 @@ class CompactIdAddressObject { else throw new Error("Unknown type"); } + toXAddress() { + this.checkValidity(); + if (this.isIaddress()) + throw new Error("Cannot convert X to I address"); + else if (this.isXaddress()) + return this.address; + else if (this.isFQN()) { + return (0, address_1.getDataKey)(this.address, this.nameSpace, (0, address_1.toIAddress)(this.rootSystemName, this.rootSystemName), vdxf_1.X_ADDR_VERSION).id; + } + else + throw new Error("Unknown type"); + } static fromIAddress(iaddr) { return new CompactIdAddressObject({ address: iaddr, type: CompactIdAddressObject.IS_IDENTITYID }); } - setAddressTransferType() { - if (this.isIaddress()) { - return; - } - if (this.isFQN()) { - if (this.address.length > 20) { - this.type = CompactIdAddressObject.IS_IDENTITYID; - this.address = (0, address_1.toIAddress)(this.address, this.rootSystemName); - } - else { - this.type = CompactIdAddressObject.IS_FQN; - } - } + static fromXAddress(xaddr, nameSpace = pbaas_1.DEFAULT_VERUS_CHAINID) { + return new CompactIdAddressObject({ + address: xaddr, + nameSpace: nameSpace, + type: CompactIdAddressObject.IS_X_ADDRESS + }); } getByteLength() { let length = 0; length += varuint_1.default.encodingLength(this.version.toNumber()); length += varuint_1.default.encodingLength(this.type.toNumber()); - if (this.isIaddress()) { + if (this.isIaddress() || this.isXaddress()) { length += vdxf_1.HASH160_BYTE_LENGTH; // identityuint160 } else { @@ -78,7 +96,7 @@ class CompactIdAddressObject { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); writer.writeCompactSize(this.version.toNumber()); writer.writeCompactSize(this.type.toNumber()); - if (this.isIaddress()) { + if (this.isIaddress() || this.isXaddress()) { writer.writeSlice((0, address_1.fromBase58Check)(this.address).hash); } else { @@ -90,12 +108,13 @@ class CompactIdAddressObject { const reader = new BufferReader(buffer, offset); this.version = new bn_js_1.BN(reader.readCompactSize()); this.type = new bn_js_1.BN(reader.readCompactSize()); - if (this.isIaddress()) { - this.address = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + if (this.isIaddress() || this.isXaddress()) { + this.address = (0, address_1.toBase58Check)(reader.readSlice(20), this.isIaddress() ? vdxf_1.I_ADDR_VERSION : vdxf_1.X_ADDR_VERSION); } else { this.address = reader.readVarSlice().toString('utf8'); } + this.checkValidity(); return reader.offset; } toJson() { @@ -112,6 +131,7 @@ class CompactIdAddressObject { instance.type = new bn_js_1.BN(json.type); instance.address = json.address; instance.rootSystemName = json.rootsystemname; + instance.checkValidity(); return instance; } } @@ -122,3 +142,4 @@ CompactIdAddressObject.LAST_VERSION = new bn_js_1.BN(1); CompactIdAddressObject.DEFAULT_VERSION = new bn_js_1.BN(1); CompactIdAddressObject.IS_FQN = new bn_js_1.BN(1); CompactIdAddressObject.IS_IDENTITYID = new bn_js_1.BN(2); +CompactIdAddressObject.IS_X_ADDRESS = new bn_js_1.BN(3); diff --git a/dist/vdxf/classes/VerifiableSignatureData.d.ts b/dist/vdxf/classes/VerifiableSignatureData.d.ts index 64a25a66..a965b858 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.d.ts +++ b/dist/vdxf/classes/VerifiableSignatureData.d.ts @@ -1,14 +1,14 @@ import { BigNumber } from '../../utils/types/BigNumber'; import { SerializableEntity } from '../../utils/types/SerializableEntity'; -import { CompactIdAddressObject, CompactIdAddressObjectJson } from './CompactIdAddressObject'; +import { CompactAddressObject, CompactAddressObjectJson } from './CompactAddressObject'; import { SignatureData } from '../../pbaas'; export interface VerifiableSignatureDataJson { version: number; flags: number; signatureversion: number; hashtype: number; - systemid: CompactIdAddressObjectJson; - identityid: CompactIdAddressObjectJson; + systemid: CompactAddressObjectJson; + identityid: CompactAddressObjectJson; vdxfkeys?: Array; vdxfkeynames?: Array; boundhashes?: Array; @@ -20,8 +20,8 @@ export interface VerifiableSignatureDataInterface { flags?: BigNumber; signatureVersion?: BigNumber; hashType?: BigNumber; - systemID?: CompactIdAddressObject; - identityID: CompactIdAddressObject; + systemID?: CompactAddressObject; + identityID: CompactAddressObject; vdxfKeys?: Array; vdxfKeyNames?: Array; boundHashes?: Array; @@ -33,8 +33,8 @@ export declare class VerifiableSignatureData implements SerializableEntity { flags: BigNumber; signatureVersion: BigNumber; hashType: BigNumber; - identityID: CompactIdAddressObject; - systemID: CompactIdAddressObject; + identityID: CompactAddressObject; + systemID: CompactAddressObject; vdxfKeys?: Array; vdxfKeyNames?: Array; boundHashes?: Array; diff --git a/dist/vdxf/classes/VerifiableSignatureData.js b/dist/vdxf/classes/VerifiableSignatureData.js index a2a28899..362cedbf 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.js +++ b/dist/vdxf/classes/VerifiableSignatureData.js @@ -10,7 +10,7 @@ const DataDescriptor_1 = require("../../pbaas/DataDescriptor"); const { BufferReader, BufferWriter } = bufferutils_1.default; const createHash = require("create-hash"); const vdxf_2 = require("../../constants/vdxf"); -const CompactIdAddressObject_1 = require("./CompactIdAddressObject"); +const CompactAddressObject_1 = require("./CompactAddressObject"); const pbaas_1 = require("../../constants/pbaas"); const varint_1 = require("../../utils/varint"); const pbaas_2 = require("../../pbaas"); @@ -19,7 +19,7 @@ class VerifiableSignatureData { this.version = data && data.version ? data.version : new bn_js_1.BN(0); this.flags = data && data.flags ? data.flags : new bn_js_1.BN(0); this.signatureVersion = data && data.signatureVersion ? data.signatureVersion : new bn_js_1.BN(2, 10); - this.systemID = data && data.systemID ? data.systemID : new CompactIdAddressObject_1.CompactIdAddressObject({ type: CompactIdAddressObject_1.CompactIdAddressObject.IS_FQN, address: pbaas_1.DEFAULT_VERUS_CHAINNAME }); + this.systemID = data && data.systemID ? data.systemID : new CompactAddressObject_1.CompactAddressObject({ type: CompactAddressObject_1.CompactAddressObject.TYPE_FQN, address: pbaas_1.DEFAULT_VERUS_CHAINNAME }); this.hashType = data && data.hashType ? data.hashType : pbaas_1.HASH_TYPE_SHA256; this.identityID = data ? data.identityID : undefined; this.vdxfKeys = data ? data.vdxfKeys : undefined; @@ -149,8 +149,8 @@ class VerifiableSignatureData { this.flags = new bn_js_1.BN(bufferReader.readCompactSize()); this.signatureVersion = new bn_js_1.BN(bufferReader.readCompactSize()); this.hashType = new bn_js_1.BN(bufferReader.readCompactSize()); - this.systemID = new CompactIdAddressObject_1.CompactIdAddressObject(); - this.identityID = new CompactIdAddressObject_1.CompactIdAddressObject(); + this.systemID = new CompactAddressObject_1.CompactAddressObject(); + this.identityID = new CompactAddressObject_1.CompactAddressObject(); bufferReader.offset = this.systemID.fromBuffer(bufferReader.buffer, bufferReader.offset); bufferReader.offset = this.identityID.fromBuffer(bufferReader.buffer, bufferReader.offset); if (this.hasVdxfKeys()) { @@ -241,8 +241,8 @@ class VerifiableSignatureData { instance.flags = new bn_js_1.BN(json.flags); instance.signatureVersion = new bn_js_1.BN(json.signatureversion); instance.hashType = new bn_js_1.BN(json.hashtype); - instance.systemID = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(json.systemid); - instance.identityID = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(json.identityid); + instance.systemID = CompactAddressObject_1.CompactAddressObject.fromJson(json.systemid); + instance.identityID = CompactAddressObject_1.CompactAddressObject.fromJson(json.identityid); instance.vdxfKeys = json === null || json === void 0 ? void 0 : json.vdxfkeys; instance.vdxfKeyNames = json === null || json === void 0 ? void 0 : json.vdxfkeynames; instance.boundHashes = (_a = json.boundhashes) === null || _a === void 0 ? void 0 : _a.map(x => Buffer.from(x, 'hex')); diff --git a/dist/vdxf/classes/index.d.ts b/dist/vdxf/classes/index.d.ts index 87e8e2a8..f1f1268b 100644 --- a/dist/vdxf/classes/index.d.ts +++ b/dist/vdxf/classes/index.d.ts @@ -38,5 +38,5 @@ export * from './login/LoginResponseDetails'; export * from './requestobjects/ProvisionIdentityDetails'; export * from './requestobjects/AppEncryptionRequestDetails'; export * from './requestobjects/UserSpecificDataPacketDetails'; -export * from './CompactIdAddressObject'; +export * from './CompactAddressObject'; export { VerifiableSignatureData, VerifiableSignatureDataJson } from './VerifiableSignatureData'; diff --git a/dist/vdxf/classes/index.js b/dist/vdxf/classes/index.js index 14187f38..6e7e444d 100644 --- a/dist/vdxf/classes/index.js +++ b/dist/vdxf/classes/index.js @@ -70,6 +70,6 @@ __exportStar(require("./login/LoginResponseDetails"), exports); __exportStar(require("./requestobjects/ProvisionIdentityDetails"), exports); __exportStar(require("./requestobjects/AppEncryptionRequestDetails"), exports); __exportStar(require("./requestobjects/UserSpecificDataPacketDetails"), exports); -__exportStar(require("./CompactIdAddressObject"), exports); +__exportStar(require("./CompactAddressObject"), exports); var VerifiableSignatureData_1 = require("./VerifiableSignatureData"); Object.defineProperty(exports, "VerifiableSignatureData", { enumerable: true, get: function () { return VerifiableSignatureData_1.VerifiableSignatureData; } }); diff --git a/dist/vdxf/classes/login/LoginRequestDetails.d.ts b/dist/vdxf/classes/login/LoginRequestDetails.d.ts index e8cd1ff1..a3949865 100644 --- a/dist/vdxf/classes/login/LoginRequestDetails.d.ts +++ b/dist/vdxf/classes/login/LoginRequestDetails.d.ts @@ -15,7 +15,7 @@ */ import { BigNumber } from "../../../utils/types/BigNumber"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; -import { CompactIdAddressObject, CompactIdAddressObjectJson } from "../CompactIdAddressObject"; +import { CompactAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; export interface LoginRequestDetailsInterface { version?: BigNumber; flags?: BigNumber; @@ -26,7 +26,7 @@ export interface LoginRequestDetailsInterface { } export interface RecipientConstraintJson { type: number; - identity: CompactIdAddressObjectJson; + identity: CompactAddressObjectJson; } export interface callbackURIsJson { type: number; @@ -34,7 +34,7 @@ export interface callbackURIsJson { } export interface RecipientConstraint { type: number; - identity: CompactIdAddressObject; + identity: CompactAddressObject; } export interface callbackURIs { type: number; diff --git a/dist/vdxf/classes/login/LoginRequestDetails.js b/dist/vdxf/classes/login/LoginRequestDetails.js index 9173a6e4..69c8534c 100644 --- a/dist/vdxf/classes/login/LoginRequestDetails.js +++ b/dist/vdxf/classes/login/LoginRequestDetails.js @@ -21,7 +21,7 @@ const bn_js_1 = require("bn.js"); const varuint_1 = require("../../../utils/varuint"); const vdxf_1 = require("../../../constants/vdxf"); const address_1 = require("../../../utils/address"); -const CompactIdAddressObject_1 = require("../CompactIdAddressObject"); +const CompactAddressObject_1 = require("../CompactAddressObject"); class LoginRequestDetails { constructor(request) { this.version = (request === null || request === void 0 ? void 0 : request.version) || LoginRequestDetails.DEFAULT_VERSION; @@ -108,7 +108,7 @@ class LoginRequestDetails { this.recipientConstraints = []; const recipientConstraintsLength = reader.readCompactSize(); for (let i = 0; i < recipientConstraintsLength; i++) { - const compactId = new CompactIdAddressObject_1.CompactIdAddressObject(); + const compactId = new CompactAddressObject_1.CompactAddressObject(); const type = reader.readCompactSize(); const identityOffset = reader.offset; reader.offset = compactId.fromBuffer(buffer, identityOffset); @@ -153,7 +153,7 @@ class LoginRequestDetails { loginDetails.requestID = data.requestid; if (loginDetails.hasRecipentConstraints() && data.recipientConstraints) { loginDetails.recipientConstraints = data.recipientConstraints.map(p => ({ type: p.type, - identity: CompactIdAddressObject_1.CompactIdAddressObject.fromJson(p.identity) })); + identity: CompactAddressObject_1.CompactAddressObject.fromJson(p.identity) })); } if (loginDetails.hascallbackURIs() && data.callbackURIs) { loginDetails.callbackURIs = data.callbackURIs.map(c => ({ type: c.type, diff --git a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.d.ts b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.d.ts index e817991d..8b857b65 100644 --- a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.d.ts +++ b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.d.ts @@ -2,6 +2,7 @@ import { BigNumber } from '../../../utils/types/BigNumber'; import { TransferDestination, TransferDestinationJson } from '../../../pbaas/TransferDestination'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { SaplingPaymentAddress } from '../../../pbaas'; +import { CompactAddressObjectJson, CompactXAddressObject } from '../CompactAddressObject'; export declare const VERUSPAY_INVALID: import("bn.js"); export declare const VERUSPAY_VALID: import("bn.js"); export declare const VERUSPAY_ACCEPTS_CONVERSION: import("bn.js"); @@ -13,6 +14,7 @@ export declare const VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN: import("bn.js"); export declare const VERUSPAY_IS_TESTNET: import("bn.js"); export declare const VERUSPAY_IS_PRECONVERT: import("bn.js"); export declare const VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS: import("bn.js"); +export declare const VERUSPAY_IS_TAGGED: import("bn.js"); export type VerusPayInvoiceDetailsJson = { flags?: string; amount?: string; @@ -21,6 +23,7 @@ export type VerusPayInvoiceDetailsJson = { expiryheight?: string; maxestimatedslippage?: string; acceptedsystems?: Array; + tag?: CompactAddressObjectJson; }; export declare class VerusPayInvoiceDetails implements SerializableEntity { verusPayVersion: BigNumber; @@ -31,6 +34,7 @@ export declare class VerusPayInvoiceDetails implements SerializableEntity { expiryheight: BigNumber; maxestimatedslippage: BigNumber; acceptedsystems: Array; + tag: CompactXAddressObject; constructor(data?: { flags?: BigNumber; amount?: BigNumber; @@ -39,6 +43,7 @@ export declare class VerusPayInvoiceDetails implements SerializableEntity { expiryheight?: BigNumber; maxestimatedslippage?: BigNumber; acceptedsystems?: Array; + tag?: CompactXAddressObject; }, verusPayVersion?: BigNumber); setFlags(flags: { acceptsConversion?: boolean; @@ -50,6 +55,7 @@ export declare class VerusPayInvoiceDetails implements SerializableEntity { isTestnet?: boolean; isPreconvert?: boolean; destinationIsSaplingPaymentAddress?: boolean; + isTagged?: boolean; }): void; getFlagsJson(): { [key: string]: boolean; @@ -64,6 +70,7 @@ export declare class VerusPayInvoiceDetails implements SerializableEntity { isTestnet(): boolean; isPreconvert(): boolean; destinationIsSaplingPaymentAddress(): boolean; + isTagged(): boolean; isValid(): boolean; isGTEV4(): boolean; private getVarUIntEncodingLength; diff --git a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js index cab21a49..97f9ee45 100644 --- a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js +++ b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.VerusPayInvoiceDetails = exports.VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS = exports.VERUSPAY_IS_PRECONVERT = exports.VERUSPAY_IS_TESTNET = exports.VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN = exports.VERUSPAY_ACCEPTS_ANY_AMOUNT = exports.VERUSPAY_ACCEPTS_ANY_DESTINATION = exports.VERUSPAY_EXPIRES = exports.VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS = exports.VERUSPAY_ACCEPTS_CONVERSION = exports.VERUSPAY_VALID = exports.VERUSPAY_INVALID = void 0; +exports.VerusPayInvoiceDetails = exports.VERUSPAY_IS_TAGGED = exports.VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS = exports.VERUSPAY_IS_PRECONVERT = exports.VERUSPAY_IS_TESTNET = exports.VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN = exports.VERUSPAY_ACCEPTS_ANY_AMOUNT = exports.VERUSPAY_ACCEPTS_ANY_DESTINATION = exports.VERUSPAY_EXPIRES = exports.VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS = exports.VERUSPAY_ACCEPTS_CONVERSION = exports.VERUSPAY_VALID = exports.VERUSPAY_INVALID = void 0; const varint_1 = require("../../../utils/varint"); const varuint_1 = require("../../../utils/varuint"); const bufferutils_1 = require("../../../utils/bufferutils"); @@ -11,6 +11,7 @@ const vdxf_1 = require("../../../constants/vdxf"); const createHash = require("create-hash"); const veruspay_1 = require("../../../constants/vdxf/veruspay"); const pbaas_1 = require("../../../pbaas"); +const CompactAddressObject_1 = require("../CompactAddressObject"); const { BufferReader, BufferWriter } = bufferutils_1.default; // Added in V3 exports.VERUSPAY_INVALID = new bn_js_1.BN(0, 10); @@ -25,6 +26,7 @@ exports.VERUSPAY_IS_TESTNET = new bn_js_1.BN(128, 10); // Added in V4 exports.VERUSPAY_IS_PRECONVERT = new bn_js_1.BN(256, 10); exports.VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS = new bn_js_1.BN(512, 10); +exports.VERUSPAY_IS_TAGGED = new bn_js_1.BN(1024, 10); class VerusPayInvoiceDetails { constructor(data, verusPayVersion = veruspay_1.VERUSPAY_VERSION_CURRENT) { this.flags = exports.VERUSPAY_VALID; @@ -35,6 +37,7 @@ class VerusPayInvoiceDetails { this.maxestimatedslippage = null; this.acceptedsystems = null; this.verusPayVersion = verusPayVersion; + this.tag = null; if (data != null) { if (data.flags != null) this.flags = data.flags; @@ -50,6 +53,8 @@ class VerusPayInvoiceDetails { this.maxestimatedslippage = data.maxestimatedslippage; if (data.acceptedsystems != null) this.acceptedsystems = data.acceptedsystems; + if (data.tag != null) + this.tag = data.tag; } } setFlags(flags) { @@ -72,6 +77,8 @@ class VerusPayInvoiceDetails { this.flags = this.flags.or(exports.VERUSPAY_IS_PRECONVERT); if (flags.destinationIsSaplingPaymentAddress) this.flags = this.flags.or(exports.VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS); + if (flags.isTagged) + this.flags = this.flags.or(exports.VERUSPAY_IS_TAGGED); } } getFlagsJson() { @@ -84,7 +91,8 @@ class VerusPayInvoiceDetails { excludesVerusBlockchain: this.excludesVerusBlockchain(), isTestnet: this.isTestnet(), isPreconvert: this.isPreconvert(), - destinationIsSaplingPaymentAddress: this.destinationIsSaplingPaymentAddress() + destinationIsSaplingPaymentAddress: this.destinationIsSaplingPaymentAddress(), + isTagged: this.isTagged() }; } toSha256() { @@ -117,6 +125,9 @@ class VerusPayInvoiceDetails { destinationIsSaplingPaymentAddress() { return this.isGTEV4() && !!(this.flags.and(exports.VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS).toNumber()); } + isTagged() { + return this.isGTEV4() && !!(this.flags.and(exports.VERUSPAY_IS_TAGGED).toNumber()); + } isValid() { return (!!(this.flags.and(exports.VERUSPAY_VALID).toNumber())); } @@ -165,6 +176,9 @@ class VerusPayInvoiceDetails { length += vdxf_1.HASH160_BYTE_LENGTH; }); } + if (this.isTagged()) { + length += this.tag.getByteLength(); + } return length; } toBuffer() { @@ -184,6 +198,9 @@ class VerusPayInvoiceDetails { if (this.acceptsNonVerusSystems()) { writer.writeArray(this.acceptedsystems.map(x => (0, address_1.fromBase58Check)(x).hash)); } + if (this.isTagged()) { + writer.writeSlice(this.tag.toBuffer()); + } return writer.buffer; } fromBuffer(buffer, offset = 0, verusPayVersion = veruspay_1.VERUSPAY_VERSION_CURRENT) { @@ -198,7 +215,7 @@ class VerusPayInvoiceDetails { } else this.destination = new TransferDestination_1.TransferDestination(); - reader.offset = this.destination.fromBuffer(buffer, reader.offset); + reader.offset = this.destination.fromBuffer(reader.buffer, reader.offset); } this.requestedcurrencyid = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); if (this.expires()) { @@ -211,6 +228,10 @@ class VerusPayInvoiceDetails { const acceptedSystemsBuffers = reader.readArray(20); this.acceptedsystems = acceptedSystemsBuffers.map(x => (0, address_1.toBase58Check)(x, vdxf_1.I_ADDR_VERSION)); } + if (this.isTagged()) { + this.tag = new CompactAddressObject_1.CompactAddressObject(); + reader.offset = this.tag.fromBuffer(reader.buffer, reader.offset); + } return reader.offset; } static fromJson(data, verusPayVersion = veruspay_1.VERUSPAY_VERSION_CURRENT) { @@ -221,7 +242,8 @@ class VerusPayInvoiceDetails { requestedcurrencyid: data.requestedcurrencyid, expiryheight: data.expiryheight != null ? new bn_js_1.BN(data.expiryheight) : undefined, maxestimatedslippage: data.maxestimatedslippage != null ? new bn_js_1.BN(data.maxestimatedslippage) : undefined, - acceptedsystems: data.acceptedsystems + acceptedsystems: data.acceptedsystems, + tag: data.tag ? CompactAddressObject_1.CompactAddressObject.fromJson(data.tag) : undefined }, verusPayVersion); } toJson() { @@ -233,6 +255,7 @@ class VerusPayInvoiceDetails { expiryheight: this.expires() ? this.expiryheight.toString() : undefined, maxestimatedslippage: this.acceptsConversion() ? this.maxestimatedslippage.toString() : undefined, acceptedsystems: this.acceptsNonVerusSystems() ? this.acceptedsystems : undefined, + tag: this.isTagged() ? this.tag.toJson() : undefined }; } } diff --git a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts index 1e91407d..20f0554a 100644 --- a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts +++ b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts @@ -17,23 +17,23 @@ */ import { BigNumber } from '../../../utils/types/BigNumber'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { CompactIdAddressObject, CompactIdAddressObjectJson } from '../CompactIdAddressObject'; +import { CompactAddressObject, CompactAddressObjectJson } from '../CompactAddressObject'; export interface AppEncryptionRequestInterface { version?: BigNumber; flags: BigNumber; - appOrDelegatedID: CompactIdAddressObject; + appOrDelegatedID: CompactAddressObject; encryptToZAddress: string; derivationNumber: BigNumber; - derivationID?: CompactIdAddressObject; + derivationID?: CompactAddressObject; requestID?: string; } export interface AppEncryptionRequestJson { version: number; flags: number; - appordelegatedid: CompactIdAddressObjectJson; + appordelegatedid: CompactAddressObjectJson; encrypttozaddress: string; derivationnumber: number; - derivationid?: CompactIdAddressObjectJson; + derivationid?: CompactAddressObjectJson; requestid?: string; } /** @@ -54,10 +54,10 @@ export declare class AppEncryptionRequestDetails implements SerializableEntity { static RETURN_ESK: import("bn.js"); version: BigNumber; flags: BigNumber; - appOrDelegatedID?: CompactIdAddressObject; + appOrDelegatedID?: CompactAddressObject; encryptToZAddress: string; derivationNumber: BigNumber; - derivationID?: CompactIdAddressObject; + derivationID?: CompactAddressObject; requestID?: string; constructor(data?: AppEncryptionRequestInterface); setFlags(): void; diff --git a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js index c3aa0ae8..fb417209 100644 --- a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js +++ b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js @@ -22,7 +22,7 @@ const bn_js_1 = require("bn.js"); const bufferutils_1 = require("../../../utils/bufferutils"); const { BufferReader, BufferWriter } = bufferutils_1.default; const sapling_1 = require("../../../utils/sapling"); -const CompactIdAddressObject_1 = require("../CompactIdAddressObject"); +const CompactAddressObject_1 = require("../CompactAddressObject"); const varuint_1 = require("../../../utils/varuint"); const address_1 = require("../../../utils/address"); const vdxf_1 = require("../../../constants/vdxf"); @@ -112,7 +112,7 @@ class AppEncryptionRequestDetails { // Read flags this.flags = new bn_js_1.BN(reader.readCompactSize()); // Read appOrDelegatedID - const appOrDelegatedIDObj = new CompactIdAddressObject_1.CompactIdAddressObject(); + const appOrDelegatedIDObj = new CompactAddressObject_1.CompactAddressObject(); reader.offset = appOrDelegatedIDObj.fromBuffer(reader.buffer, reader.offset); this.appOrDelegatedID = appOrDelegatedIDObj; // Read encryptToAddress as 43-byte sapling data and encode as sapling address @@ -121,7 +121,7 @@ class AppEncryptionRequestDetails { // Read mandatory derivation number this.derivationNumber = reader.readVarInt(); if (this.hasDerivationID()) { - const derivationIDObj = new CompactIdAddressObject_1.CompactIdAddressObject(); + const derivationIDObj = new CompactAddressObject_1.CompactAddressObject(); reader.offset = derivationIDObj.fromBuffer(reader.buffer, reader.offset); this.derivationID = derivationIDObj; } @@ -148,11 +148,11 @@ class AppEncryptionRequestDetails { const instance = new AppEncryptionRequestDetails(); instance.version = new bn_js_1.BN(json.version); instance.flags = new bn_js_1.BN(json.flags); - instance.appOrDelegatedID = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(json.appordelegatedid); + instance.appOrDelegatedID = CompactAddressObject_1.CompactAddressObject.fromJson(json.appordelegatedid); instance.encryptToZAddress = json.encrypttozaddress; instance.derivationNumber = new bn_js_1.BN(json.derivationnumber); if (instance.hasDerivationID()) { - instance.derivationID = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(json === null || json === void 0 ? void 0 : json.derivationid); + instance.derivationID = CompactAddressObject_1.CompactAddressObject.fromJson(json === null || json === void 0 ? void 0 : json.derivationid); } if (instance.hasRequestID()) { instance.requestID = json === null || json === void 0 ? void 0 : json.requestid; diff --git a/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts index b14bf33d..7d43c31f 100644 --- a/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts +++ b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts @@ -15,27 +15,27 @@ */ import { BigNumber } from "../../../utils/types/BigNumber"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; -import { CompactIdAddressObject, CompactIdAddressObjectJson } from "../CompactIdAddressObject"; +import { CompactAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; export interface ProvisionIdentityDetailsInterface { version?: BigNumber; flags: BigNumber; - systemID?: CompactIdAddressObject; - parentID?: CompactIdAddressObject; - identityID?: CompactIdAddressObject; + systemID?: CompactAddressObject; + parentID?: CompactAddressObject; + identityID?: CompactAddressObject; } export interface ProvisionIdentityDetailsJson { version?: number; flags: number; - systemid?: CompactIdAddressObjectJson; - parentid?: CompactIdAddressObjectJson; - identityid?: CompactIdAddressObjectJson; + systemid?: CompactAddressObjectJson; + parentid?: CompactAddressObjectJson; + identityid?: CompactAddressObjectJson; } export declare class ProvisionIdentityDetails implements SerializableEntity { version: BigNumber; flags: BigNumber; - systemID?: CompactIdAddressObject; - parentID?: CompactIdAddressObject; - identityID?: CompactIdAddressObject; + systemID?: CompactAddressObject; + parentID?: CompactAddressObject; + identityID?: CompactAddressObject; static DEFAULT_VERSION: import("bn.js"); static VERSION_FIRSTVALID: import("bn.js"); static VERSION_LASTVALID: import("bn.js"); diff --git a/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js index d0bd1431..fd3034ea 100644 --- a/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js +++ b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js @@ -18,7 +18,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.ProvisionIdentityDetails = void 0; const bufferutils_1 = require("../../../utils/bufferutils"); const bn_js_1 = require("bn.js"); -const CompactIdAddressObject_1 = require("../CompactIdAddressObject"); +const CompactAddressObject_1 = require("../CompactAddressObject"); const varuint_1 = require("../../../utils/varuint"); class ProvisionIdentityDetails { constructor(data) { @@ -72,17 +72,17 @@ class ProvisionIdentityDetails { throw new Error("Cannot create provision identity from empty buffer"); this.flags = new bn_js_1.BN(reader.readCompactSize()); if (this.hasSystemId()) { - const systemID = new CompactIdAddressObject_1.CompactIdAddressObject(); + const systemID = new CompactAddressObject_1.CompactAddressObject(); reader.offset = systemID.fromBuffer(reader.buffer, reader.offset); this.systemID = systemID; } if (this.hasParentId()) { - const parentID = new CompactIdAddressObject_1.CompactIdAddressObject(); + const parentID = new CompactAddressObject_1.CompactAddressObject(); reader.offset = parentID.fromBuffer(reader.buffer, reader.offset); this.parentID = parentID; } if (this.hasIdentityId()) { - const identityID = new CompactIdAddressObject_1.CompactIdAddressObject(); + const identityID = new CompactAddressObject_1.CompactAddressObject(); reader.offset = identityID.fromBuffer(reader.buffer, reader.offset); this.identityID = identityID; } @@ -103,13 +103,13 @@ class ProvisionIdentityDetails { provision.version = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.version) || 0); provision.flags = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.flags) || 0); if (provision.hasSystemId()) { - provision.systemID = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(data.systemid); + provision.systemID = CompactAddressObject_1.CompactAddressObject.fromJson(data.systemid); } if (provision.hasParentId()) { - provision.parentID = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(data.parentid); + provision.parentID = CompactAddressObject_1.CompactAddressObject.fromJson(data.parentid); } if (provision.hasIdentityId()) { - provision.identityID = CompactIdAddressObject_1.CompactIdAddressObject.fromJson(data.identityid); + provision.identityID = CompactAddressObject_1.CompactAddressObject.fromJson(data.identityid); } return provision; } diff --git a/dist/vdxf/classes/requestobjects/UserDataRequestDetails.d.ts b/dist/vdxf/classes/requestobjects/UserDataRequestDetails.d.ts index be6b1695..11839bf7 100644 --- a/dist/vdxf/classes/requestobjects/UserDataRequestDetails.d.ts +++ b/dist/vdxf/classes/requestobjects/UserDataRequestDetails.d.ts @@ -20,14 +20,14 @@ */ import { BigNumber } from '../../../utils/types/BigNumber'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { CompactIdAddressObject, CompactIdAddressObjectJson } from '../CompactIdAddressObject'; +import { CompactAddressObject, CompactAddressObjectJson } from '../CompactAddressObject'; export interface UserDataRequestInterface { version?: BigNumber; flags: BigNumber; searchDataKey: Array<{ [key: string]: string; }>; - signer?: CompactIdAddressObject; + signer?: CompactAddressObject; requestedKeys?: string[]; requestID?: string; } @@ -37,7 +37,7 @@ export interface UserDataRequestJson { searchdatakey: Array<{ [key: string]: string; }>; - signer?: CompactIdAddressObjectJson; + signer?: CompactAddressObjectJson; requestedkeys?: string[]; requestid?: string; } @@ -60,7 +60,7 @@ export declare class UserDataRequestDetails implements SerializableEntity { searchDataKey: Array<{ [key: string]: string; }>; - signer?: CompactIdAddressObject; + signer?: CompactAddressObject; requestedKeys?: string[]; requestID?: string; constructor(data?: UserDataRequestInterface); diff --git a/dist/vdxf/classes/requestobjects/UserDataRequestDetails.js b/dist/vdxf/classes/requestobjects/UserDataRequestDetails.js index 6fff923c..15764109 100644 --- a/dist/vdxf/classes/requestobjects/UserDataRequestDetails.js +++ b/dist/vdxf/classes/requestobjects/UserDataRequestDetails.js @@ -25,7 +25,7 @@ const bn_js_1 = require("bn.js"); const varuint_1 = require("../../../utils/varuint"); const bufferutils_1 = require("../../../utils/bufferutils"); const { BufferReader, BufferWriter } = bufferutils_1.default; -const CompactIdAddressObject_1 = require("../CompactIdAddressObject"); +const CompactAddressObject_1 = require("../CompactAddressObject"); const address_1 = require("../../../utils/address"); const vdxf_1 = require("../../../constants/vdxf"); class UserDataRequestDetails { @@ -157,7 +157,7 @@ class UserDataRequestDetails { this.searchDataKey.push({ [key]: value }); } if (this.hasSigner()) { - const signer = new CompactIdAddressObject_1.CompactIdAddressObject(); + const signer = new CompactAddressObject_1.CompactAddressObject(); reader.offset = signer.fromBuffer(reader.buffer, reader.offset); this.signer = signer; } @@ -192,7 +192,7 @@ class UserDataRequestDetails { requestData.version = new bn_js_1.BN(json.version); requestData.flags = new bn_js_1.BN(json.flags); requestData.searchDataKey = json.searchdatakey; - requestData.signer = json.signer ? CompactIdAddressObject_1.CompactIdAddressObject.fromJson(json.signer) : undefined; + requestData.signer = json.signer ? CompactAddressObject_1.CompactAddressObject.fromJson(json.signer) : undefined; requestData.requestedKeys = json.requestedkeys; requestData.requestID = json.requestid; return requestData; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index fd7c3a07..79a88ad6 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -4,6 +4,7 @@ exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION exports.APP_ENCRYPTION_RESPONSE_VDXF_KEY = exports.USER_SPECIFIC_DATA_PACKET_VDXF_KEY = exports.USER_DATA_REQUEST_VDXF_KEY = exports.DATA_RESPONSE_VDXF_KEY = exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.LOGIN_RESPONSE_DETAILS_VDXF_KEY = exports.LOGIN_REQUEST_DETAILS_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; exports.VERUSPAY_INVOICE_VDXF_KEY = { hash160result: "628efc28c2e2d40050e1a9de7a93e7ddf2aa0076", + indexid: "xK4aRumetZg2ecW4Z45qdDBH769xxnaiEH", qualifiedname: { name: "veruspay.vrsc::invoice", namespace: "iAisVse7piEiE2VsixZx4SARyHzSpxYxgq" @@ -119,6 +120,7 @@ exports.WALLET_VDXF_KEY = { namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", name: "vrsc::applications.wallet", }, + indexid: "xA91QPpBrHZto92NCU5KEjCqRveS4dAPrf" }; exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = { vdxfid: "iDXvHYhRpWcoARCEYeLv8GwkVdrbvSFuam", diff --git a/src/__tests__/utils/address.test.ts b/src/__tests__/utils/address.test.ts index 28b9f203..62e556ef 100644 --- a/src/__tests__/utils/address.test.ts +++ b/src/__tests__/utils/address.test.ts @@ -1,3 +1,4 @@ +import { I_ADDR_VERSION, X_ADDR_VERSION } from "../../constants/vdxf"; import { getDataKey, nameAndParentAddrToIAddr, toIAddress } from "../../utils/address"; import { DATA_TYPE_DEFINEDKEY, IDENTITY_UPDATE_REQUEST_VDXF_KEY, VERUSPAY_INVOICE_VDXF_KEY, WALLET_VDXF_KEY } from "../../vdxf"; @@ -30,10 +31,13 @@ describe('Address tests', () => { ] for (const key of keys) { - const dataKey = getDataKey(key.qualifiedname.name); + const dataKeyI = getDataKey(key.qualifiedname.name, undefined, undefined, I_ADDR_VERSION); + const dataKeyX = getDataKey(key.qualifiedname.name, undefined, undefined, X_ADDR_VERSION); - expect(dataKey.id).toBe(key.vdxfid); - expect(dataKey.namespace).toBe(key.qualifiedname.namespace); + expect(dataKeyI.id).toBe(key.vdxfid); + expect(dataKeyI.namespace).toBe(key.qualifiedname.namespace); + expect(dataKeyX.id).toBe(key.indexid!); + expect(dataKeyX.namespace).toBe(key.qualifiedname.namespace); } }); }); diff --git a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts index f9a00290..6396d0ad 100644 --- a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts +++ b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts @@ -1,12 +1,14 @@ import { BN } from "bn.js"; -import { AppEncryptionRequestDetails, CompactIdAddressObject } from "../../vdxf/classes"; +import { AppEncryptionRequestDetails, CompactAddressObject } from "../../vdxf/classes"; import { BigNumber } from "../../utils/types/BigNumber"; // Helper function to create TransferDestination from address string -function createCompactIdAddressObject(type: BigNumber, address: string): CompactIdAddressObject { - const obj = new CompactIdAddressObject(); - obj.type = type; - obj.address = address; +function createCompactIdAddressObject(type: BigNumber, address: string): CompactAddressObject { + const obj = new CompactAddressObject({ + address, + type + }); + return obj; } @@ -16,10 +18,10 @@ describe("AppEncryptionRequestDetails serialization tests", () => { version: AppEncryptionRequestDetails.DEFAULT_VERSION, flags: AppEncryptionRequestDetails.HAS_DERIVATION_ID .or(AppEncryptionRequestDetails.HAS_REQUEST_ID), - appOrDelegatedID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), + appOrDelegatedID: createCompactIdAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), - derivationID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + derivationID: createCompactIdAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); @@ -46,10 +48,10 @@ describe("AppEncryptionRequestDetails serialization tests", () => { version: AppEncryptionRequestDetails.DEFAULT_VERSION, flags: AppEncryptionRequestDetails.HAS_DERIVATION_ID .or(AppEncryptionRequestDetails.HAS_REQUEST_ID), - appOrDelegatedID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), + appOrDelegatedID: createCompactIdAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), - derivationID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + derivationID: createCompactIdAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); @@ -69,9 +71,9 @@ describe("AppEncryptionRequestDetails serialization tests", () => { expect(deserializedDetails.flags.toNumber()).toBe(originalDetails.flags.toNumber()); expect(deserializedDetails.encryptToZAddress).toBe(originalDetails.encryptToZAddress); expect(deserializedDetails.derivationNumber.toNumber()).toBe(originalDetails.derivationNumber.toNumber()); - expect(deserializedDetails.appOrDelegatedID?.type.toNumber()).toBe(originalDetails.appOrDelegatedID?.type.toNumber()); + expect(deserializedDetails.appOrDelegatedID?.BNType.toNumber()).toBe(originalDetails.appOrDelegatedID?.BNType.toNumber()); expect(deserializedDetails.appOrDelegatedID?.address).toBe(originalDetails.appOrDelegatedID?.address); - expect(deserializedDetails.derivationID?.type.toNumber()).toBe(originalDetails.derivationID?.type.toNumber()); + expect(deserializedDetails.derivationID?.BNType.toNumber()).toBe(originalDetails.derivationID?.BNType.toNumber()); expect(deserializedDetails.derivationID?.address).toBe(originalDetails.derivationID?.address); expect(deserializedDetails.requestID).toBe(originalDetails.requestID); @@ -81,15 +83,15 @@ describe("AppEncryptionRequestDetails serialization tests", () => { expect(originalBuffer.toString('hex')).toBe(deserializedBuffer.toString('hex')); }); - test("fromIAddress creates valid CompactIdAddressObject", () => { + test("fromIAddress creates valid CompactAddressObject", () => { const iaddr = "iDZvpsGCfX6vMJxi3F7m26qCX2Ns6QtQYk"; - const compactObj = CompactIdAddressObject.fromIAddress(iaddr); + const compactObj = CompactAddressObject.fromIAddress(iaddr); - expect(compactObj).toBeInstanceOf(CompactIdAddressObject); + expect(compactObj).toBeInstanceOf(CompactAddressObject); expect(compactObj.address).toBe(iaddr); - expect(compactObj.type).toBe(CompactIdAddressObject.IS_IDENTITYID); + expect(compactObj.BNType.toString()).toBe(CompactAddressObject.TYPE_I_ADDRESS.toString()); - const item = new CompactIdAddressObject(); + const item = new CompactAddressObject(); item.fromBuffer(compactObj.toBuffer()); expect(compactObj.toBuffer().toString('hex')).toBe(item.toBuffer().toString('hex')); @@ -98,15 +100,15 @@ describe("AppEncryptionRequestDetails serialization tests", () => { test("toIAddress converts FQN to IAddress correctly", () => { const fqn = "myidentity.VRSC@"; - const compactObj = new CompactIdAddressObject({ - type: CompactIdAddressObject.IS_FQN, + const compactObj = new CompactAddressObject({ + type: CompactAddressObject.TYPE_FQN, address: fqn, rootSystemName: "VRSC" }); const iaddr = compactObj.toIAddress(); expect(iaddr).toBe("iDZvpsGCfX6vMJxi3F7m26qCX2Ns6QtQYk"); - const item = new CompactIdAddressObject(); + const item = new CompactAddressObject(); item.fromBuffer(compactObj.toBuffer()); expect(compactObj.toBuffer().toString('hex')).toBe(item.toBuffer().toString('hex')); diff --git a/src/__tests__/vdxf/compactaddressidobject.test.ts b/src/__tests__/vdxf/compactaddressidobject.test.ts index 69e8e35b..27b6d095 100644 --- a/src/__tests__/vdxf/compactaddressidobject.test.ts +++ b/src/__tests__/vdxf/compactaddressidobject.test.ts @@ -1,64 +1,81 @@ -import { CompactIdAddressObject } from '../../vdxf/classes/CompactIdAddressObject'; +import { CompactAddressObject, CompactAddressXVariant } from '../../vdxf/classes/CompactAddressObject'; import { BN } from "bn.js"; -describe("CompactIdAddressObject", () => { +describe("CompactAddressObject", () => { describe("constructor and basic properties", () => { test("creates instance with iaddress", () => { - const item = new CompactIdAddressObject({ - version: new BN(CompactIdAddressObject.DEFAULT_VERSION), - type: CompactIdAddressObject.IS_IDENTITYID, + const item = new CompactAddressObject({ + version: new BN(CompactAddressObject.DEFAULT_VERSION), + type: CompactAddressObject.TYPE_I_ADDRESS, address: "iB5PRXMHLYcNtM8dfLB6KwfJrHU2mKDYuU", rootSystemName: "VRSC" }); const detailsBuffer = item.toBuffer(); - const newDetails = new CompactIdAddressObject(); + const newDetails = new CompactAddressObject(); newDetails.fromBuffer(detailsBuffer); expect(newDetails.version.toString()).toBe("1"); - expect(newDetails.type.toNumber()).toBe(CompactIdAddressObject.IS_IDENTITYID.toNumber()); + expect(newDetails.BNType.toNumber()).toBe(CompactAddressObject.TYPE_I_ADDRESS.toNumber()); expect(newDetails.address).toBe("iB5PRXMHLYcNtM8dfLB6KwfJrHU2mKDYuU"); expect(newDetails.rootSystemName).toBe("VRSC"); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); }); - test("creates instance with fqn", () => { - const item = new CompactIdAddressObject({ - version: new BN(CompactIdAddressObject.DEFAULT_VERSION), - type: CompactIdAddressObject.IS_FQN, + test("creates instance with xaddress", () => { + const item = new CompactAddressObject({ + version: new BN(CompactAddressObject.DEFAULT_VERSION), + type: CompactAddressObject.TYPE_X_ADDRESS, + address: "xA91QPpBrHZto92NCU5KEjCqRveS4dAPrf", + rootSystemName: "VRSC" + }); + + const detailsBuffer = item.toBuffer(); + + const newDetails = new CompactAddressObject(); + newDetails.fromBuffer(detailsBuffer); + expect(newDetails.version.toString()).toBe("1"); + expect(newDetails.BNType.toNumber()).toBe(CompactAddressObject.TYPE_X_ADDRESS.toNumber()); + expect(newDetails.address).toBe("xA91QPpBrHZto92NCU5KEjCqRveS4dAPrf"); + expect(newDetails.rootSystemName).toBe("VRSC"); + expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); + }); + + test("creates instance with fqn", () => { + const item = new CompactAddressObject({ + version: new BN(CompactAddressObject.DEFAULT_VERSION), + type: CompactAddressObject.TYPE_FQN, address: "bob.chips@", rootSystemName: "VRSC" }); const detailsBuffer = item.toBuffer(); - const newDetails = new CompactIdAddressObject(); + const newDetails = new CompactAddressObject(); newDetails.fromBuffer(detailsBuffer); expect(newDetails.version.toString()).toBe("1"); - expect(newDetails.type.toNumber()).toBe(CompactIdAddressObject.IS_FQN.toNumber()); + expect(newDetails.BNType.toNumber()).toBe(CompactAddressObject.TYPE_FQN.toNumber()); expect(newDetails.address).toBe("bob.chips@"); expect(newDetails.rootSystemName).toBe("VRSC"); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); }); - test("creates instance with fqn that reduces to iaddress for space saving", () => { - const item = new CompactIdAddressObject({ - version: new BN(CompactIdAddressObject.DEFAULT_VERSION), - type: CompactIdAddressObject.IS_FQN, + test("creates instance with fqn that reduces to iaddress for space saving", () => { + const item = new CompactAddressObject({ + version: new BN(CompactAddressObject.DEFAULT_VERSION), + type: CompactAddressObject.TYPE_FQN, address: "bob91283472394872349824728934789234.token823984279847293847239487239847324.chips@", rootSystemName: "VRSC" }); const detailsBuffer = item.toBuffer(); // this mutates the item to use iaddress internally - const newDetails = new CompactIdAddressObject(); + const newDetails = new CompactAddressObject(); newDetails.fromBuffer(detailsBuffer); expect(newDetails.version.toString()).toBe("1"); - expect(newDetails.type.toNumber()).toBe(CompactIdAddressObject.IS_IDENTITYID.toNumber()); - expect(newDetails.address).toBe("i67xSVGnGC3PVuGk5crPfkVJptiLB4zNjb"); expect(newDetails.rootSystemName).toBe("VRSC"); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); }); diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts index 132ecfc9..6dadf508 100644 --- a/src/__tests__/vdxf/genericrequest.test.ts +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -4,7 +4,7 @@ import { DATA_TYPE_MMRDATA, DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256 } from '../. import { ContentMultiMap, GenericRequest, IDENTITY_VERSION_PBAAS, IdentityID, IdentityUpdateRequestDetails, KeyID, PartialIdentity, PartialMMRData, PartialSignData, PartialSignDataInitData, SaplingPaymentAddress } from '../../'; import { createHash } from 'crypto'; import { VerifiableSignatureData, VerifiableSignatureDataInterface } from '../../vdxf/classes/VerifiableSignatureData'; -import { CompactIdAddressObject } from '../../vdxf/classes/CompactIdAddressObject'; +import { CompactAddressObject } from '../../vdxf/classes/CompactAddressObject'; import { GeneralTypeOrdinalVdxfObject, IdentityUpdateRequestOrdinalVdxfObject } from '../../vdxf/classes/ordinals'; import { DEEPLINK_PROTOCOL_URL_CURRENT_VERSION, DEEPLINK_PROTOCOL_URL_STRING } from '../../constants/deeplink'; @@ -68,9 +68,9 @@ describe('GenericRequest — buffer / URI / QR operations', () => { const sig = new VerifiableSignatureData({ flags: new BN(0), version: new BN(1), - systemID: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + systemID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), hashType: HASH_TYPE_SHA256, - identityID: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + identityID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), signatureAsVch: Buffer.from('AgX3RgAAAUEgHAVIHuui1Sc9oLxLbglKvmrv47JJLiM0/RBQwzYL1dlamI/2o9qBc93d79laLXWMhQomqZ4U3Mlr3ueuwl4JFA==', 'base64'), vdxfKeys: [DEFAULT_VERUS_CHAINID, DEFAULT_VERUS_CHAINID], vdxfKeyNames: ["VRSC", "VRSC"], @@ -109,8 +109,8 @@ describe('GenericRequest — buffer / URI / QR operations', () => { it('round trips with createdAt, and valid signature that can be hashed', () => { const sig = new VerifiableSignatureData({ - systemID: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), - identityID: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + systemID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + identityID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), signatureAsVch: Buffer.from('AgX3RgAAAUEgHAVIHuui1Sc9oLxLbglKvmrv47JJLiM0/RBQwzYL1dlamI/2o9qBc93d79laLXWMhQomqZ4U3Mlr3ueuwl4JFA==', 'base64'), }); @@ -232,8 +232,8 @@ describe('GenericRequest — buffer / URI / QR operations', () => { }); const unsignedSigData: VerifiableSignatureDataInterface = { - systemID: CompactIdAddressObject.fromIAddress(systemID.toAddress()!), - identityID: CompactIdAddressObject.fromIAddress(systemID.toAddress()!) + systemID: CompactAddressObject.fromIAddress(systemID.toAddress()!), + identityID: CompactAddressObject.fromIAddress(systemID.toAddress()!) } const req = new GenericRequest({ diff --git a/src/__tests__/vdxf/genericresponse.test.ts b/src/__tests__/vdxf/genericresponse.test.ts index 37ac735f..ae575872 100644 --- a/src/__tests__/vdxf/genericresponse.test.ts +++ b/src/__tests__/vdxf/genericresponse.test.ts @@ -4,7 +4,7 @@ import { DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256 } from '../../constants/pbaas'; import { GenericResponse, IdentityID, IdentityUpdateResponseDetails } from '../../'; import { createHash } from 'crypto'; import { VerifiableSignatureData, VerifiableSignatureDataInterface } from '../../vdxf/classes/VerifiableSignatureData'; -import { CompactIdAddressObject } from '../../vdxf/classes/CompactIdAddressObject'; +import { CompactAddressObject } from '../../vdxf/classes/CompactAddressObject'; import { GeneralTypeOrdinalVdxfObject, IdentityUpdateResponseOrdinalVdxfObject } from '../../vdxf/classes/ordinals'; import { TEST_TXID } from '../constants/fixtures'; @@ -68,9 +68,9 @@ describe('GenericResponse — buffer / URI / QR operations', () => { const sig = new VerifiableSignatureData({ flags: new BN(0), version: new BN(1), - systemID: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + systemID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), hashType: HASH_TYPE_SHA256, - identityID: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + identityID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), signatureAsVch: Buffer.from('abcd', 'hex'), vdxfKeys: [DEFAULT_VERUS_CHAINID, DEFAULT_VERUS_CHAINID], vdxfKeyNames: ["VRSC", "VRSC"], @@ -111,8 +111,8 @@ describe('GenericResponse — buffer / URI / QR operations', () => { it('round trips with createdAt, and valid signature that can be hashed', () => { const sig = new VerifiableSignatureData({ - systemID: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), - identityID: CompactIdAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + systemID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + identityID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), signatureAsVch: Buffer.from('AgX3RgAAAUEgHAVIHuui1Sc9oLxLbglKvmrv47JJLiM0/RBQwzYL1dlamI/2o9qBc93d79laLXWMhQomqZ4U3Mlr3ueuwl4JFA==', 'base64'), }); @@ -165,8 +165,8 @@ describe('GenericResponse — buffer / URI / QR operations', () => { }); const unsignedSigData: VerifiableSignatureDataInterface = { - systemID: CompactIdAddressObject.fromIAddress(systemID.toAddress()!), - identityID: CompactIdAddressObject.fromIAddress(systemID.toAddress()!) + systemID: CompactAddressObject.fromIAddress(systemID.toAddress()!), + identityID: CompactAddressObject.fromIAddress(systemID.toAddress()!) } const req = new GenericResponse({ diff --git a/src/__tests__/vdxf/loginrequestdetails.test.ts b/src/__tests__/vdxf/loginrequestdetails.test.ts index 8d97be0f..b4e03fb3 100644 --- a/src/__tests__/vdxf/loginrequestdetails.test.ts +++ b/src/__tests__/vdxf/loginrequestdetails.test.ts @@ -2,7 +2,7 @@ import { BN } from "bn.js"; import { LoginRequestDetails, LoginRequestDetailsInterface, -CompactIdAddressObject +CompactAddressObject } from "../../vdxf/classes"; import { SERIALIZED_LOGIN_REQUEST_DETAILS, TEST_CHALLENGE_ID, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3 } from "../constants/fixtures"; @@ -30,9 +30,9 @@ describe("LoginRequestDetails", () => { const details = new LoginRequestDetails({ requestID: TEST_CHALLENGE_ID, recipientConstraints: [ - { type: LoginRequestDetails.REQUIRED_ID, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }, - { type: LoginRequestDetails.REQUIRED_SYSTEM, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, - { type: LoginRequestDetails.REQUIRED_PARENT, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } + { type: LoginRequestDetails.REQUIRED_ID, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }, + { type: LoginRequestDetails.REQUIRED_SYSTEM, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, + { type: LoginRequestDetails.REQUIRED_PARENT, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } ], callbackURIs: [{ type: LoginRequestDetails.TYPE_WEBHOOK, diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index ea36afd5..ab184c80 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -18,7 +18,7 @@ import { import { DataDescriptor, DEST_PKH, SaplingPaymentAddress, TransferDestination } from '../../pbaas'; import { AppEncryptionRequestDetails, - CompactIdAddressObject, + CompactAddressObject, IdentityUpdateRequestDetails, IdentityUpdateResponseDetails, LoginRequestDetails, @@ -44,10 +44,12 @@ import { SaplingExtendedSpendingKey } from '../../pbaas/SaplingExtendedSpendingK import { SaplingExtendedViewingKey } from '../../pbaas/SaplingExtendedViewingKey'; // Helper function to create TransferDestination from address string -function createCompactIdAddressObject(type: BigNumber, address: string): CompactIdAddressObject { - const obj = new CompactIdAddressObject(); - obj.type = type; - obj.address = address; +function createCompactIdAddressObject(type: BigNumber, address: string): CompactAddressObject { + const obj = new CompactAddressObject({ + type, + address + }); + return obj; } @@ -271,9 +273,9 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const details = new LoginRequestDetails({ requestID: TEST_CHALLENGE_ID, recipientConstraints: [ - { type: LoginRequestDetails.REQUIRED_ID, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }, - { type: LoginRequestDetails.REQUIRED_SYSTEM, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, - { type: LoginRequestDetails.REQUIRED_PARENT, identity: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } + { type: LoginRequestDetails.REQUIRED_ID, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }, + { type: LoginRequestDetails.REQUIRED_SYSTEM, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, + { type: LoginRequestDetails.REQUIRED_PARENT, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } ], callbackURIs: [{ type: LoginRequestDetails.TYPE_WEBHOOK, @@ -327,8 +329,8 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const details = new ProvisionIdentityDetails({ version: new BN(1, 10), flags: ProvisionIdentityDetails.FLAG_HAS_SYSTEMID.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID), - systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }), - parentID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) + systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }), + parentID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }) const obj = new ProvisionIdentityDetailsOrdinalVdxfObject({ data: details }); @@ -355,10 +357,10 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { version: AppEncryptionRequestDetails.DEFAULT_VERSION, flags: AppEncryptionRequestDetails.HAS_DERIVATION_ID .or(AppEncryptionRequestDetails.HAS_REQUEST_ID), - appOrDelegatedID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), + appOrDelegatedID: createCompactIdAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), - derivationID: createCompactIdAddressObject(CompactIdAddressObject.IS_IDENTITYID, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + derivationID: createCompactIdAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); @@ -459,7 +461,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { version: new BN(1), flags: UserDataRequestDetails.FULL_DATA.or(UserDataRequestDetails.ATTESTATION).or(UserDataRequestDetails.HAS_SIGNER), searchDataKey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], - signer: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootSystemName: "VRSC" }), + signer: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootSystemName: "VRSC" }), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); @@ -495,8 +497,8 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), hashType: new BN(1), flags: new BN(0), - identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), - systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC" }), + identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), }), detailsID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); diff --git a/src/__tests__/vdxf/provisioningidentitydetails.test.ts b/src/__tests__/vdxf/provisioningidentitydetails.test.ts index 88150137..11511847 100644 --- a/src/__tests__/vdxf/provisioningidentitydetails.test.ts +++ b/src/__tests__/vdxf/provisioningidentitydetails.test.ts @@ -1,6 +1,6 @@ import { ProvisionIdentityDetails } from "../../vdxf/classes/requestobjects/ProvisionIdentityDetails"; -import { CompactIdAddressObject, ProvisionIdentityDetailsJson } from "../../vdxf/classes"; +import { CompactAddressObject } from "../../vdxf/classes"; import { BN } from "bn.js"; import { TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2 } from "../constants/fixtures"; @@ -9,8 +9,8 @@ describe('Serializes and deserializes ProvisionIdentityDetails', () => { const e = new ProvisionIdentityDetails({ version: new BN(1, 10), flags: ProvisionIdentityDetails.FLAG_HAS_SYSTEMID.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID), - systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }), - parentID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) + systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }), + parentID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }) const r = e.toBuffer(); @@ -24,7 +24,7 @@ describe('Serializes and deserializes ProvisionIdentityDetails', () => { const e = new ProvisionIdentityDetails({ version: new BN(1, 10), flags: ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION, - identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) + identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }) const r = e.toBuffer(); diff --git a/src/__tests__/vdxf/userdatarequest.test.ts b/src/__tests__/vdxf/userdatarequest.test.ts index 03fff014..39f8d359 100644 --- a/src/__tests__/vdxf/userdatarequest.test.ts +++ b/src/__tests__/vdxf/userdatarequest.test.ts @@ -1,5 +1,5 @@ -import { CompactIdAddressObject, UserDataRequestDetails, UserDataRequestJson } from "../../vdxf/classes"; +import { CompactAddressObject, UserDataRequestDetails, UserDataRequestJson } from "../../vdxf/classes"; describe('Serializes and deserializes UserDataRequestDetails', () => { test('(de)serialize UserDataRequestDetails', () => { @@ -8,7 +8,7 @@ describe('Serializes and deserializes UserDataRequestDetails', () => { version: 1, flags: UserDataRequestDetails.FULL_DATA.or(UserDataRequestDetails.ATTESTATION).or(UserDataRequestDetails.HAS_SIGNER).toNumber(), searchdatakey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], - signer: { version: 1, type: CompactIdAddressObject.IS_IDENTITYID.toNumber(), address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootsystemname: "VRSC" }, + signer: { version: 1, type: CompactAddressObject.TYPE_I_ADDRESS.toNumber(), address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootsystemname: "VRSC" }, requestid: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" } @@ -25,7 +25,7 @@ describe('Serializes and deserializes UserDataRequestDetails', () => { version: 1, flags: UserDataRequestDetails.PARTIAL_DATA.or(UserDataRequestDetails.ATTESTATION).or(UserDataRequestDetails.HAS_SIGNER).toNumber(), searchdatakey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], - signer: { version: 1, type: CompactIdAddressObject.IS_FQN.toNumber(), address: "bob@", rootsystemname: "VRSC" }, + signer: { version: 1, type: CompactAddressObject.TYPE_FQN.toNumber(), address: "bob@", rootsystemname: "VRSC" }, requestedkeys: ["iLB8SG7ErJtTYcG1f4w9RLuMJPpAsjFkiL"], requestid: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" } diff --git a/src/__tests__/vdxf/userspecificdatapacketdetails.test.ts b/src/__tests__/vdxf/userspecificdatapacketdetails.test.ts index f08f6bdb..dd979b9e 100644 --- a/src/__tests__/vdxf/userspecificdatapacketdetails.test.ts +++ b/src/__tests__/vdxf/userspecificdatapacketdetails.test.ts @@ -1,6 +1,6 @@ import { BN } from "bn.js"; import { - CompactIdAddressObject, + CompactAddressObject, UserSpecificDataPacketDetails, UserSpecificDataPacketDetailsJson } from "../../vdxf/classes"; import { DataDescriptor } from "../../pbaas"; @@ -20,8 +20,8 @@ describe("UserSpecificDataPacketDetails", () => { signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), hashType: new BN(1), flags: new BN(0), - identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), - systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC" }), + identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), }), detailsID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); diff --git a/src/__tests__/vdxf/veruspayinvoice.test.ts b/src/__tests__/vdxf/veruspayinvoice.test.ts index f3d1364c..fd80e697 100644 --- a/src/__tests__/vdxf/veruspayinvoice.test.ts +++ b/src/__tests__/vdxf/veruspayinvoice.test.ts @@ -1,5 +1,5 @@ import { BN } from "bn.js"; -import { VerusPayInvoice, VerusPayInvoiceDetails } from "../../vdxf/classes"; +import { CompactAddressObject, VerusPayInvoice, VerusPayInvoiceDetails } from "../../vdxf/classes"; import { DEST_PKH, TransferDestination } from "../../pbaas/TransferDestination"; import { fromBase58Check } from "../../utils/address"; import { VERUSPAY_VERSION_3, VERUSPAY_VERSION_4, VERUSPAY_VERSION_FIRSTVALID, VERUSPAY_VERSION_LASTVALID } from "../../constants/vdxf/veruspay"; @@ -304,7 +304,7 @@ describe('Serializes and deserializes VerusPay invoice', () => { expect(invFromJson.toBuffer().toString('hex')).toBe(inv.toBuffer().toString('hex')); } - const testSignedAcceptsConversionHasNonVerusSystemsExpiresWithSaplingAddressPreconvert = async (version: BigNumber) => { + const testSignedAcceptsConversionHasNonVerusSystemsExpiresWithSaplingAddressPreconvertTag = async (version: BigNumber) => { const addrString = "zs1wczplx4kegw32h8g0f7xwl57p5tvnprwdmnzmdnsw50chcl26f7tws92wk2ap03ykaq6jyyztfa"; const details = new VerusPayInvoiceDetails({ @@ -313,7 +313,8 @@ describe('Serializes and deserializes VerusPay invoice', () => { requestedcurrencyid: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", maxestimatedslippage: new BN(40000000, 10), expiryheight: new BN(2000000, 10), - acceptedsystems: ["iNC9NG5Jqk2tqVtqfjfiSpaqxrXaFU6RDu", "iBDkVJqik6BrtcDBQfFygffiYzTMy6EuhU"] + acceptedsystems: ["iNC9NG5Jqk2tqVtqfjfiSpaqxrXaFU6RDu", "iBDkVJqik6BrtcDBQfFygffiYzTMy6EuhU"], + tag: CompactAddressObject.fromXAddress("xA91QPpBrHZto92NCU5KEjCqRveS4dAPrf") }, version) details.setFlags({ @@ -419,7 +420,7 @@ describe('Serializes and deserializes VerusPay invoice', () => { }); test('verus pay invoice with signature that accepts conversion on 2 non-verus systems and expires with sapling address', async () => { - await testSignedAcceptsConversionHasNonVerusSystemsExpiresWithSaplingAddressPreconvert(VERUSPAY_VERSION_4); + await testSignedAcceptsConversionHasNonVerusSystemsExpiresWithSaplingAddressPreconvertTag(VERUSPAY_VERSION_4); }) test('verus pay invoice without signature that accepts any amount and destination for preconvert', async () => { diff --git a/src/constants/vdxf.ts b/src/constants/vdxf.ts index 6971a058..7c6614b0 100644 --- a/src/constants/vdxf.ts +++ b/src/constants/vdxf.ts @@ -6,6 +6,7 @@ export const HASH160_BYTE_LENGTH = 20 export const HASH256_BYTE_LENGTH = 32 export const I_ADDR_VERSION = 102 export const R_ADDR_VERSION = 60 +export const X_ADDR_VERSION = 137 export const NULL_ADDRESS = "i3UXS5QPRQGNRDDqVnyWTnmFCTHDbzmsYk" const VERUS_DATA_SIGNATURE_PREFIX_STRING = "Verus signed data:\n" diff --git a/src/utils/address.ts b/src/utils/address.ts index 6ebfa33d..7c0123e4 100644 --- a/src/utils/address.ts +++ b/src/utils/address.ts @@ -1,5 +1,5 @@ import { DEFAULT_VERUS_CHAINID, DEFAULT_VERUS_CHAINNAME, KOMODO_ASSETCHAIN_MAXLEN, NULL_I_ADDR } from "../constants/pbaas"; -import { I_ADDR_VERSION } from "../constants/vdxf"; +import { I_ADDR_VERSION, X_ADDR_VERSION } from "../constants/vdxf"; import { hash, hash160 } from "./hash"; const bs58check = require("bs58check") @@ -40,7 +40,7 @@ export const toBase58Check = (hash: Buffer, version: number): string => { return bs58check.encode(payload); }; -export const nameAndParentAddrToIAddr = (name: string, parentIAddr?: string): string => { +export const nameAndParentAddrToAddr = (name: string, parentIAddr?: string, version: number = I_ADDR_VERSION): string => { let idHash: Buffer; const nameBuffer = Buffer.from(name.toLowerCase(), "utf8"); @@ -51,10 +51,14 @@ export const nameAndParentAddrToIAddr = (name: string, parentIAddr?: string): st idHash = hash(fromBase58Check(parentIAddr).hash, idHash); } - return toBase58Check(hash160(idHash), 102); + return toBase58Check(hash160(idHash), version); } -export const toIAddress = (fullyqualifiedname: string, rootSystemName: string = ""): string => { +export const nameAndParentAddrToIAddr = (name: string, parentIAddr?: string): string => { + return nameAndParentAddrToAddr(name, parentIAddr, I_ADDR_VERSION) +} + +export const fqnToAddress = (fullyqualifiedname: string, rootSystemName: string = "", version = I_ADDR_VERSION): string => { const splitFqnAt = fullyqualifiedname.split("@").filter(x => x.length > 0); if (splitFqnAt.length !== 1) throw new Error("Invalid name") @@ -98,7 +102,11 @@ export const toIAddress = (fullyqualifiedname: string, rootSystemName: string = idHash = hash(Parent, idHash); } - return toBase58Check(hash160(idHash), 102); + return toBase58Check(hash160(idHash), version); +} + +export const toIAddress = (fullyqualifiedname: string, rootSystemName: string = ""): string => { + return fqnToAddress(fullyqualifiedname, rootSystemName, I_ADDR_VERSION) } function trimSpaces( @@ -281,18 +289,19 @@ function cleanName( return { name: subNames[0], parent: newParent ? toBase58Check(newParent, I_ADDR_VERSION) : null }; } -function getID(name: string, parent: string, verusChainName: string = DEFAULT_VERUS_CHAINNAME): string { +function getID(name: string, parent: string, verusChainName: string = DEFAULT_VERUS_CHAINNAME, version: number = I_ADDR_VERSION): string { const _cleanName = name === "::" ? { name, parent } : cleanName(name, parent, false, verusChainName); if (_cleanName.name.length == 0) return NULL_I_ADDR; - return nameAndParentAddrToIAddr(_cleanName.name, _cleanName.parent); + return nameAndParentAddrToAddr(_cleanName.name, _cleanName.parent, version); } export function getDataKey( keyName: string, nameSpaceID?: string, - verusChainId: string = DEFAULT_VERUS_CHAINID + verusChainId: string = DEFAULT_VERUS_CHAINID, + version: number = I_ADDR_VERSION ): { id: string; namespace: string } { let keyCopy = keyName; const addressParts = keyName.split(":"); @@ -313,8 +322,8 @@ export function getDataKey( nameSpaceID = verusChainId; } - const parent = getID("::", nameSpaceID); - return { id: getID(keyCopy, parent), namespace: nameSpaceID }; + const parent = getID("::", nameSpaceID, undefined, version); + return { id: getID(keyCopy, parent, undefined, version), namespace: nameSpaceID }; } export const decodeDestination = (destination: string): Buffer => { diff --git a/src/vdxf/classes/CompactAddressObject.ts b/src/vdxf/classes/CompactAddressObject.ts new file mode 100644 index 00000000..961b4a23 --- /dev/null +++ b/src/vdxf/classes/CompactAddressObject.ts @@ -0,0 +1,193 @@ +/** + * CompactIdentityObject - Class representing an id in the smallest possible format + * + * This class is used to represent an identity or address in a compact format, allowing for efficient + * storage and transmission. The compact id can be represented either as a fully qualified name (FQN) + * or as an identity address (iaddress) or as an x address (tag/index). The class includes methods for serialization, deserialization, + * and validation of the compact id object. + */ + +import { BN } from 'bn.js'; +import bufferutils from '../../utils/bufferutils'; +import { BigNumber } from '../../utils/types/BigNumber'; +const { BufferReader, BufferWriter } = bufferutils; +import { SerializableEntity } from '../../utils/types/SerializableEntity'; +import varuint from '../../utils/varuint'; +import { fromBase58Check, getDataKey, toBase58Check, toIAddress } from "../../utils/address"; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION, X_ADDR_VERSION } from '../../constants/vdxf'; +import { DEFAULT_VERUS_CHAINID } from '../../constants/pbaas'; + +export interface CompactAddressObjectJson { + version: number; + type: number; + address: string; + rootsystemname: string; + namespace?: string; +} + +export interface CompactAddressObjectInterface { + version?: BigNumber; + type: BigNumber; + address: string; + rootSystemName?: string; + nameSpace?: string; +} + +export type CompactAddressIVariant = "COMPACT_ADDR_I_VARIANT"; +export type CompactAddressXVariant = "COMPACT_ADDR_X_VARIANT"; +export type CompactAddressVariantName = CompactAddressIVariant | CompactAddressXVariant; + +// TODO: Find some way to not have to hardcode the version numbers into the types here and instead use the above constants +export type CompactAddressVariantAllowedType = + T extends CompactAddressIVariant ? `${1 | 2}` : + T extends CompactAddressXVariant ? `${1 | 3}` : + never; + +export class CompactAddressObject implements SerializableEntity { + static VERSION_INVALID = new BN(0); + static FIRST_VERSION = new BN(1); + static LAST_VERSION = new BN(1); + static DEFAULT_VERSION = new BN(1); + + static TYPE_FQN = new BN(1); + static TYPE_I_ADDRESS = new BN(2); + static TYPE_X_ADDRESS = new BN(3); + + version: BigNumber; + type: CompactAddressVariantAllowedType; + address: string; + rootSystemName: string; + nameSpace: string; + + constructor(data?: CompactAddressObjectInterface) { + this.version = data?.version || new BN(CompactAddressObject.DEFAULT_VERSION); + this.type = (data?.type.toString() as CompactAddressVariantAllowedType) || ("1" as CompactAddressVariantAllowedType); + this.address = data?.address || ''; + this.rootSystemName = data?.rootSystemName || 'VRSC'; + this.nameSpace = data?.nameSpace || toIAddress(this.rootSystemName); + } + + get BNType() { + return new BN(this.type); + } + + set setType(type: BigNumber) { + this.type = type.toString() as CompactAddressVariantAllowedType + } + + isFQN(): boolean { + return (this.BNType.eq(CompactAddressObject.TYPE_FQN)); + } + + isIaddress(): boolean { + return (this.BNType.eq(CompactAddressObject.TYPE_I_ADDRESS)); + } + + isXaddress(): boolean { + return (this.BNType.eq(CompactAddressObject.TYPE_X_ADDRESS)); + } + + isValid(): boolean { + return this.address != null; + } + + toIAddress(): string { + if (this.isXaddress()) throw new Error("Cannot convert I to X address") + else if (this.isIaddress()) return this.address; + else if (this.isFQN()) { + return toIAddress(this.address, this.rootSystemName); + } else throw new Error("Unknown type") + } + + toXAddress(): string { + if (this.isIaddress()) throw new Error("Cannot convert X to I address") + else if (this.isXaddress()) return this.address; + else if (this.isFQN()) { + return getDataKey(this.address, this.nameSpace, toIAddress(this.rootSystemName), X_ADDR_VERSION).id; + } else throw new Error("Unknown type") + } + + static fromIAddress(iaddr: string): CompactAddressObject { + return new CompactAddressObject({ + address: iaddr, + type: CompactAddressObject.TYPE_I_ADDRESS + }) + } + + static fromXAddress(xaddr: string, nameSpace: string = DEFAULT_VERUS_CHAINID): CompactAddressObject { + return new CompactAddressObject({ + address: xaddr, + nameSpace: nameSpace, + type: CompactAddressObject.TYPE_X_ADDRESS + }) + } + + getByteLength(): number { + let length = 0; + + length += varuint.encodingLength(this.version.toNumber()); + length += varuint.encodingLength(this.BNType.toNumber()); + + if (this.isIaddress() || this.isXaddress()) { + length += HASH160_BYTE_LENGTH; // identityuint160 + } else { + const addrLen = Buffer.from(this.address, 'utf8').byteLength; + + length += varuint.encodingLength(addrLen) + addrLen + } + + return length; + } + + toBuffer(): Buffer { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + + writer.writeCompactSize(this.version.toNumber()); + writer.writeCompactSize(this.BNType.toNumber()); + + if (this.isIaddress() || this.isXaddress()) { + writer.writeSlice(fromBase58Check(this.address).hash); + } else { + writer.writeVarSlice(Buffer.from(this.address, 'utf8')); + } + + return writer.buffer; + } + + fromBuffer(buffer: Buffer, offset?: number): number { + const reader = new BufferReader(buffer, offset); + + this.version = new BN(reader.readCompactSize()); + this.type = new BN(reader.readCompactSize()).toString() as CompactAddressVariantAllowedType; + + if (this.isIaddress() || this.isXaddress()) { + this.address = toBase58Check(reader.readSlice(20), this.isIaddress() ? I_ADDR_VERSION : X_ADDR_VERSION); + } else { + this.address = reader.readVarSlice().toString('utf8'); + } + + return reader.offset; + } + + toJson(): CompactAddressObjectJson { + return { + version: this.version.toNumber(), + type: this.BNType.toNumber(), + address: this.address, + rootsystemname: this.rootSystemName, + }; + } + + static fromJson(json: any): CompactAddressObject { + const instance = new CompactAddressObject(); + + instance.version = new BN(json.version); + instance.type = new BN(json.type).toString() as CompactAddressVariantAllowedType; + instance.address = json.address; + instance.rootSystemName = json.rootsystemname; + + return instance; + } +} + +export type CompactXAddressObject = CompactAddressObject; \ No newline at end of file diff --git a/src/vdxf/classes/CompactIdAddressObject.ts b/src/vdxf/classes/CompactIdAddressObject.ts deleted file mode 100644 index 9fc0471f..00000000 --- a/src/vdxf/classes/CompactIdAddressObject.ts +++ /dev/null @@ -1,164 +0,0 @@ -/** - * CompactIdentityObject - Class representing an id in the smallest possible format - * - * This class is used to represent an identity or address in a compact format, allowing for efficient - * storage and transmission. The compact id can be represented either as a fully qualified name (FQN) - * or as an identity address (iaddress). The class includes methods for serialization, deserialization, - * and validation of the compact id object. - */ - -import { BN } from 'bn.js'; -import bufferutils from '../../utils/bufferutils'; -import { BigNumber } from '../../utils/types/BigNumber'; -const { BufferReader, BufferWriter } = bufferutils; -import { SerializableEntity } from '../../utils/types/SerializableEntity'; -import varuint from '../../utils/varuint'; -import { fromBase58Check, toBase58Check, toIAddress } from "../../utils/address"; -import varint from '../../utils/varint'; -import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../../constants/vdxf'; - -export interface CompactIdAddressObjectJson { - version: number; - type: number; - address: string; - rootsystemname: string; -} - -export interface CompactIdAddressObjectInterface { - version?: BigNumber; - type: BigNumber; - address: string; - rootSystemName?: string; -} - -export class CompactIdAddressObject implements SerializableEntity { - static VERSION_INVALID = new BN(0); - static FIRST_VERSION = new BN(1); - static LAST_VERSION = new BN(1); - static DEFAULT_VERSION = new BN(1); - - static IS_FQN = new BN(1); - static IS_IDENTITYID = new BN(2); - - version: BigNumber; - type: BigNumber; - address: string; - rootSystemName: string; - - constructor(data?: CompactIdAddressObjectInterface) { - this.version = data?.version || new BN(CompactIdAddressObject.DEFAULT_VERSION); - this.type = data?.type || new BN(0); - this.address = data?.address || ''; - this.rootSystemName = data?.rootSystemName || 'VRSC'; - this.setAddressTransferType(); - } - - isFQN(): boolean { - return (this.type.eq(CompactIdAddressObject.IS_FQN)); - } - - isIaddress(): boolean { - return (this.type.eq(CompactIdAddressObject.IS_IDENTITYID)); - } - - isValid(): boolean { - return this.address != null && this.address.length > 0 && (this.isFQN() || this.isIaddress()); - } - - toIAddress(): string { - if (this.isIaddress()) return this.address; - else if (this.isFQN()) { - return toIAddress(this.address, this.rootSystemName); - } else throw new Error("Unknown type") - } - - static fromIAddress(iaddr: string): CompactIdAddressObject { - return new CompactIdAddressObject({ - address: iaddr, - type: CompactIdAddressObject.IS_IDENTITYID - }) - } - - setAddressTransferType(): void { - - if (this.isIaddress()) { - return; - } - - if (this.isFQN()) { - if (this.address.length > 20) { - this.type = CompactIdAddressObject.IS_IDENTITYID; - this.address = toIAddress(this.address, this.rootSystemName); - } else { - this.type = CompactIdAddressObject.IS_FQN; - } - } - } - - getByteLength(): number { - - let length = 0; - - length += varuint.encodingLength(this.version.toNumber()); - length += varuint.encodingLength(this.type.toNumber()); - - if (this.isIaddress()) { - length += HASH160_BYTE_LENGTH; // identityuint160 - } else { - const addrLen = Buffer.from(this.address, 'utf8').byteLength; - - length += varuint.encodingLength(addrLen) + addrLen - } - - return length; - } - - toBuffer(): Buffer { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - - writer.writeCompactSize(this.version.toNumber()); - writer.writeCompactSize(this.type.toNumber()); - - if (this.isIaddress()) { - writer.writeSlice(fromBase58Check(this.address).hash); - } else { - writer.writeVarSlice(Buffer.from(this.address, 'utf8')); - } - - return writer.buffer; - } - - fromBuffer(buffer: Buffer, offset?: number): number { - const reader = new BufferReader(buffer, offset); - - this.version = new BN(reader.readCompactSize()); - this.type = new BN(reader.readCompactSize()); - - if (this.isIaddress()) { - this.address = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); - } else { - this.address = reader.readVarSlice().toString('utf8'); - } - - return reader.offset; - } - - toJson(): CompactIdAddressObjectJson { - - return { - version: this.version.toNumber(), - type: this.type.toNumber(), - address: this.address, - rootsystemname: this.rootSystemName, - }; - } - - static fromJson(json: any): CompactIdAddressObject { - const instance = new CompactIdAddressObject(); - instance.version = new BN(json.version); - instance.type = new BN(json.type); - instance.address = json.address; - instance.rootSystemName = json.rootsystemname; - return instance; - } -} \ No newline at end of file diff --git a/src/vdxf/classes/VerifiableSignatureData.ts b/src/vdxf/classes/VerifiableSignatureData.ts index 1d82ef64..307b6334 100644 --- a/src/vdxf/classes/VerifiableSignatureData.ts +++ b/src/vdxf/classes/VerifiableSignatureData.ts @@ -9,7 +9,7 @@ import { EHashTypes } from '../../pbaas/DataDescriptor'; const { BufferReader, BufferWriter } = bufferutils const createHash = require("create-hash"); import { VERUS_DATA_SIGNATURE_PREFIX } from "../../constants/vdxf"; -import { CompactIdAddressObject, CompactIdAddressObjectJson } from './CompactIdAddressObject'; +import { CompactAddressObject, CompactAddressObjectJson } from './CompactAddressObject'; import { DEFAULT_VERUS_CHAINNAME, HASH_TYPE_SHA256 } from '../../constants/pbaas'; import varint from '../../utils/varint'; import { SignatureData } from '../../pbaas'; @@ -19,8 +19,8 @@ export interface VerifiableSignatureDataJson { flags: number; signatureversion: number; hashtype: number; - systemid: CompactIdAddressObjectJson; - identityid: CompactIdAddressObjectJson; + systemid: CompactAddressObjectJson; + identityid: CompactAddressObjectJson; vdxfkeys?: Array; vdxfkeynames?: Array; boundhashes?: Array; @@ -33,8 +33,8 @@ export interface VerifiableSignatureDataInterface { flags?: BigNumber; signatureVersion?: BigNumber; hashType?: BigNumber; - systemID?: CompactIdAddressObject; - identityID: CompactIdAddressObject; + systemID?: CompactAddressObject; + identityID: CompactAddressObject; vdxfKeys?: Array; vdxfKeyNames?: Array; boundHashes?: Array; @@ -47,8 +47,8 @@ export class VerifiableSignatureData implements SerializableEntity { flags: BigNumber; signatureVersion: BigNumber; hashType: BigNumber; - identityID: CompactIdAddressObject; - systemID: CompactIdAddressObject; + identityID: CompactAddressObject; + systemID: CompactAddressObject; vdxfKeys?: Array; vdxfKeyNames?: Array; boundHashes?: Array; @@ -70,7 +70,7 @@ export class VerifiableSignatureData implements SerializableEntity { this.version = data && data.version ? data.version : new BN(0); this.flags = data && data.flags ? data.flags : new BN(0); this.signatureVersion = data && data.signatureVersion ? data.signatureVersion : new BN(2, 10); - this.systemID = data && data.systemID ? data.systemID : new CompactIdAddressObject({ type: CompactIdAddressObject.IS_FQN, address: DEFAULT_VERUS_CHAINNAME }); + this.systemID = data && data.systemID ? data.systemID : new CompactAddressObject({ type: CompactAddressObject.TYPE_FQN, address: DEFAULT_VERUS_CHAINNAME }); this.hashType = data && data.hashType ? data.hashType : HASH_TYPE_SHA256; this.identityID = data ? data.identityID : undefined; this.vdxfKeys = data ? data.vdxfKeys : undefined; @@ -241,8 +241,8 @@ export class VerifiableSignatureData implements SerializableEntity { this.hashType = new BN(bufferReader.readCompactSize()); - this.systemID = new CompactIdAddressObject(); - this.identityID = new CompactIdAddressObject(); + this.systemID = new CompactAddressObject(); + this.identityID = new CompactAddressObject(); bufferReader.offset = this.systemID.fromBuffer(bufferReader.buffer, bufferReader.offset); bufferReader.offset = this.identityID.fromBuffer(bufferReader.buffer, bufferReader.offset); @@ -343,8 +343,8 @@ export class VerifiableSignatureData implements SerializableEntity { instance.flags = new BN(json.flags); instance.signatureVersion = new BN(json.signatureversion); instance.hashType = new BN(json.hashtype); - instance.systemID = CompactIdAddressObject.fromJson(json.systemid); - instance.identityID = CompactIdAddressObject.fromJson(json.identityid); + instance.systemID = CompactAddressObject.fromJson(json.systemid); + instance.identityID = CompactAddressObject.fromJson(json.identityid); instance.vdxfKeys = json?.vdxfkeys; instance.vdxfKeyNames = json?.vdxfkeynames; instance.boundHashes = json.boundhashes?.map(x => Buffer.from(x, 'hex')); diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index 9c2d2ef3..08a70bfa 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -54,7 +54,7 @@ export * from './login/LoginResponseDetails' export * from './requestobjects/ProvisionIdentityDetails' export * from './requestobjects/AppEncryptionRequestDetails' export * from './requestobjects/UserSpecificDataPacketDetails' -export * from './CompactIdAddressObject' +export * from './CompactAddressObject' export { VerifiableSignatureData, VerifiableSignatureDataJson diff --git a/src/vdxf/classes/login/LoginRequestDetails.ts b/src/vdxf/classes/login/LoginRequestDetails.ts index 74c67823..ee233732 100644 --- a/src/vdxf/classes/login/LoginRequestDetails.ts +++ b/src/vdxf/classes/login/LoginRequestDetails.ts @@ -22,7 +22,7 @@ import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import varuint from "../../../utils/varuint"; import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../../../constants/vdxf'; import { fromBase58Check, toBase58Check } from "../../../utils/address"; -import { CompactIdAddressObject, CompactIdAddressObjectJson } from "../CompactIdAddressObject"; +import { CompactAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; export interface LoginRequestDetailsInterface { version?: BigNumber; @@ -35,7 +35,7 @@ export interface LoginRequestDetailsInterface { export interface RecipientConstraintJson { type: number; - identity: CompactIdAddressObjectJson; + identity: CompactAddressObjectJson; } export interface callbackURIsJson { @@ -45,7 +45,7 @@ export interface callbackURIsJson { export interface RecipientConstraint { type: number; - identity: CompactIdAddressObject; + identity: CompactAddressObject; } export interface callbackURIs { @@ -200,7 +200,7 @@ export class LoginRequestDetails implements SerializableEntity { this.recipientConstraints = []; const recipientConstraintsLength = reader.readCompactSize(); for (let i = 0; i < recipientConstraintsLength; i++) { - const compactId = new CompactIdAddressObject(); + const compactId = new CompactAddressObject(); const type = reader.readCompactSize(); const identityOffset = reader.offset; reader.offset = compactId.fromBuffer(buffer, identityOffset); @@ -255,7 +255,7 @@ export class LoginRequestDetails implements SerializableEntity { if(loginDetails.hasRecipentConstraints() && data.recipientConstraints) { loginDetails.recipientConstraints = data.recipientConstraints.map(p => ({type: p.type, - identity: CompactIdAddressObject.fromJson(p.identity)})); + identity: CompactAddressObject.fromJson(p.identity)})); } if(loginDetails.hascallbackURIs() && data.callbackURIs) { diff --git a/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts b/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts index 462b90dc..ef767554 100644 --- a/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts +++ b/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts @@ -10,6 +10,7 @@ import createHash = require('create-hash'); import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { VERUSPAY_VERSION_4, VERUSPAY_VERSION_CURRENT } from '../../../constants/vdxf/veruspay'; import { SaplingPaymentAddress } from '../../../pbaas'; +import { CompactAddressObject, CompactAddressObjectJson, CompactAddressXVariant, CompactXAddressObject } from '../CompactAddressObject'; const { BufferReader, BufferWriter } = bufferutils; // Added in V3 @@ -26,6 +27,7 @@ export const VERUSPAY_IS_TESTNET = new BN(128, 10) // Added in V4 export const VERUSPAY_IS_PRECONVERT = new BN(256, 10) export const VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS = new BN(512, 10) +export const VERUSPAY_IS_TAGGED = new BN(1024, 10) export type VerusPayInvoiceDetailsJson = { flags?: string, @@ -35,6 +37,7 @@ export type VerusPayInvoiceDetailsJson = { expiryheight?: string, maxestimatedslippage?: string, acceptedsystems?: Array, + tag?: CompactAddressObjectJson } export class VerusPayInvoiceDetails implements SerializableEntity { @@ -47,6 +50,7 @@ export class VerusPayInvoiceDetails implements SerializableEntity { expiryheight: BigNumber; maxestimatedslippage: BigNumber; acceptedsystems: Array; + tag: CompactXAddressObject; constructor (data?: { flags?: BigNumber, @@ -56,6 +60,7 @@ export class VerusPayInvoiceDetails implements SerializableEntity { expiryheight?: BigNumber, maxestimatedslippage?: BigNumber, acceptedsystems?: Array, + tag?: CompactXAddressObject }, verusPayVersion: BigNumber = VERUSPAY_VERSION_CURRENT) { this.flags = VERUSPAY_VALID; this.amount = null; @@ -65,6 +70,7 @@ export class VerusPayInvoiceDetails implements SerializableEntity { this.maxestimatedslippage = null; this.acceptedsystems = null; this.verusPayVersion = verusPayVersion; + this.tag = null; if (data != null) { if (data.flags != null) this.flags = data.flags @@ -74,6 +80,7 @@ export class VerusPayInvoiceDetails implements SerializableEntity { if (data.expiryheight != null) this.expiryheight = data.expiryheight if (data.maxestimatedslippage != null) this.maxestimatedslippage = data.maxestimatedslippage if (data.acceptedsystems != null) this.acceptedsystems = data.acceptedsystems + if (data.tag != null) this.tag = data.tag } } @@ -86,7 +93,8 @@ export class VerusPayInvoiceDetails implements SerializableEntity { excludesVerusBlockchain?: boolean, isTestnet?: boolean, isPreconvert?: boolean, - destinationIsSaplingPaymentAddress?: boolean + destinationIsSaplingPaymentAddress?: boolean, + isTagged?: boolean }) { if (flags.acceptsConversion) this.flags = this.flags.or(VERUSPAY_ACCEPTS_CONVERSION); if (flags.acceptsNonVerusSystems) this.flags = this.flags.or(VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS); @@ -99,6 +107,7 @@ export class VerusPayInvoiceDetails implements SerializableEntity { if (this.isGTEV4()) { if (flags.isPreconvert) this.flags = this.flags.or(VERUSPAY_IS_PRECONVERT); if (flags.destinationIsSaplingPaymentAddress) this.flags = this.flags.or(VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS); + if (flags.isTagged) this.flags = this.flags.or(VERUSPAY_IS_TAGGED); } } @@ -112,7 +121,8 @@ export class VerusPayInvoiceDetails implements SerializableEntity { excludesVerusBlockchain: this.excludesVerusBlockchain(), isTestnet: this.isTestnet(), isPreconvert: this.isPreconvert(), - destinationIsSaplingPaymentAddress: this.destinationIsSaplingPaymentAddress() + destinationIsSaplingPaymentAddress: this.destinationIsSaplingPaymentAddress(), + isTagged: this.isTagged() } } @@ -156,6 +166,10 @@ export class VerusPayInvoiceDetails implements SerializableEntity { return this.isGTEV4() && !!(this.flags.and(VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS).toNumber()) } + isTagged() { + return this.isGTEV4() && !!(this.flags.and(VERUSPAY_IS_TAGGED).toNumber()) + } + isValid () { return ( !!(this.flags.and(VERUSPAY_VALID).toNumber()) @@ -218,6 +232,10 @@ export class VerusPayInvoiceDetails implements SerializableEntity { }) } + if (this.isTagged()) { + length += this.tag.getByteLength(); + } + return length; } @@ -243,6 +261,10 @@ export class VerusPayInvoiceDetails implements SerializableEntity { writer.writeArray(this.acceptedsystems.map(x => fromBase58Check(x).hash)); } + if (this.isTagged()) { + writer.writeSlice(this.tag.toBuffer()); + } + return writer.buffer; } @@ -260,7 +282,7 @@ export class VerusPayInvoiceDetails implements SerializableEntity { this.destination = new SaplingPaymentAddress(); } else this.destination = new TransferDestination(); - reader.offset = this.destination.fromBuffer(buffer, reader.offset); + reader.offset = this.destination.fromBuffer(reader.buffer, reader.offset); } this.requestedcurrencyid = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); @@ -279,6 +301,12 @@ export class VerusPayInvoiceDetails implements SerializableEntity { this.acceptedsystems = acceptedSystemsBuffers.map(x => toBase58Check(x, I_ADDR_VERSION)); } + if (this.isTagged()) { + this.tag = new CompactAddressObject(); + + reader.offset = this.tag.fromBuffer(reader.buffer, reader.offset); + } + return reader.offset; } @@ -290,7 +318,8 @@ export class VerusPayInvoiceDetails implements SerializableEntity { requestedcurrencyid: data.requestedcurrencyid, expiryheight: data.expiryheight != null ? new BN(data.expiryheight) : undefined, maxestimatedslippage: data.maxestimatedslippage != null ? new BN(data.maxestimatedslippage) : undefined, - acceptedsystems: data.acceptedsystems + acceptedsystems: data.acceptedsystems, + tag: data.tag ? CompactAddressObject.fromJson(data.tag) : undefined }, verusPayVersion) } @@ -303,6 +332,7 @@ export class VerusPayInvoiceDetails implements SerializableEntity { expiryheight: this.expires() ? this.expiryheight.toString() : undefined, maxestimatedslippage: this.acceptsConversion() ? this.maxestimatedslippage.toString() : undefined, acceptedsystems: this.acceptsNonVerusSystems() ? this.acceptedsystems : undefined, + tag: this.isTagged() ? this.tag.toJson() : undefined } } } \ No newline at end of file diff --git a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts index c0380a7c..66dbdb26 100644 --- a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts @@ -24,7 +24,7 @@ import bufferutils from '../../../utils/bufferutils'; const { BufferReader, BufferWriter } = bufferutils; import { decodeSaplingAddress, toBech32 } from '../../../utils/sapling'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { CompactIdAddressObject, CompactIdAddressObjectJson } from '../CompactIdAddressObject'; +import { CompactAddressObject, CompactAddressObjectJson } from '../CompactAddressObject'; import varuint from '../../../utils/varuint'; import { fromBase58Check, toBase58Check } from '../../../utils/address'; import { I_ADDR_VERSION, HASH160_BYTE_LENGTH } from '../../../constants/vdxf'; @@ -32,20 +32,20 @@ import { I_ADDR_VERSION, HASH160_BYTE_LENGTH } from '../../../constants/vdxf'; export interface AppEncryptionRequestInterface { version?: BigNumber; flags: BigNumber; - appOrDelegatedID: CompactIdAddressObject; + appOrDelegatedID: CompactAddressObject; encryptToZAddress: string; derivationNumber: BigNumber; - derivationID?: CompactIdAddressObject; + derivationID?: CompactAddressObject; requestID?: string; } export interface AppEncryptionRequestJson { version: number; flags: number; - appordelegatedid: CompactIdAddressObjectJson; + appordelegatedid: CompactAddressObjectJson; encrypttozaddress: string; derivationnumber: number; - derivationid?: CompactIdAddressObjectJson; + derivationid?: CompactAddressObjectJson; requestid?: string; } @@ -70,10 +70,10 @@ export class AppEncryptionRequestDetails implements SerializableEntity { version: BigNumber; flags: BigNumber; - appOrDelegatedID?: CompactIdAddressObject; // ID of the app or delegated entity making the request + appOrDelegatedID?: CompactAddressObject; // ID of the app or delegated entity making the request encryptToZAddress: string; // zaddress reply is encrypted to derivationNumber: BigNumber; - derivationID?: CompactIdAddressObject; // Defaults to choosing the Z-address from the ID signing if not present + derivationID?: CompactAddressObject; // Defaults to choosing the Z-address from the ID signing if not present requestID?: string; // Unique identifier for the request constructor(data?: AppEncryptionRequestInterface) { @@ -185,7 +185,7 @@ export class AppEncryptionRequestDetails implements SerializableEntity { this.flags = new BN(reader.readCompactSize()); // Read appOrDelegatedID - const appOrDelegatedIDObj = new CompactIdAddressObject(); + const appOrDelegatedIDObj = new CompactAddressObject(); reader.offset = appOrDelegatedIDObj.fromBuffer(reader.buffer, reader.offset); this.appOrDelegatedID = appOrDelegatedIDObj; @@ -197,7 +197,7 @@ export class AppEncryptionRequestDetails implements SerializableEntity { this.derivationNumber = reader.readVarInt(); if (this.hasDerivationID()) { - const derivationIDObj = new CompactIdAddressObject(); + const derivationIDObj = new CompactAddressObject(); reader.offset = derivationIDObj.fromBuffer(reader.buffer, reader.offset); this.derivationID = derivationIDObj; } @@ -228,12 +228,12 @@ export class AppEncryptionRequestDetails implements SerializableEntity { const instance = new AppEncryptionRequestDetails(); instance.version = new BN(json.version); instance.flags = new BN(json.flags); - instance.appOrDelegatedID = CompactIdAddressObject.fromJson(json.appordelegatedid); + instance.appOrDelegatedID = CompactAddressObject.fromJson(json.appordelegatedid); instance.encryptToZAddress = json.encrypttozaddress; instance.derivationNumber = new BN(json.derivationnumber); if(instance.hasDerivationID()) { - instance.derivationID = CompactIdAddressObject.fromJson(json?.derivationid); + instance.derivationID = CompactAddressObject.fromJson(json?.derivationid); } if(instance.hasRequestID()) { diff --git a/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts b/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts index 0940e379..a24a2aa3 100644 --- a/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts +++ b/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts @@ -18,31 +18,31 @@ import bufferutils from "../../../utils/bufferutils"; import { BigNumber } from "../../../utils/types/BigNumber"; import { BN } from "bn.js"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; -import { CompactIdAddressObject, CompactIdAddressObjectJson } from "../CompactIdAddressObject"; +import { CompactAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; import varuint from "../../../utils/varuint"; export interface ProvisionIdentityDetailsInterface { version?: BigNumber; flags: BigNumber; - systemID?: CompactIdAddressObject; // system e.g. VRSC@ - parentID?: CompactIdAddressObject; // parent e.g. Token@ - identityID?: CompactIdAddressObject; // Full identity e.g. john.VRSC@ + systemID?: CompactAddressObject; // system e.g. VRSC@ + parentID?: CompactAddressObject; // parent e.g. Token@ + identityID?: CompactAddressObject; // Full identity e.g. john.VRSC@ } export interface ProvisionIdentityDetailsJson { version?: number; flags: number; - systemid?: CompactIdAddressObjectJson; - parentid?: CompactIdAddressObjectJson; - identityid?: CompactIdAddressObjectJson; + systemid?: CompactAddressObjectJson; + parentid?: CompactAddressObjectJson; + identityid?: CompactAddressObjectJson; } export class ProvisionIdentityDetails implements SerializableEntity { version: BigNumber; flags: BigNumber; - systemID?: CompactIdAddressObject; // system e.g. VRSC@ - parentID?: CompactIdAddressObject; // parent e.g. Token@ - identityID?: CompactIdAddressObject; // Full identity e.g. john.VRSC@ + systemID?: CompactAddressObject; // system e.g. VRSC@ + parentID?: CompactAddressObject; // parent e.g. Token@ + identityID?: CompactAddressObject; // Full identity e.g. john.VRSC@ // Version static DEFAULT_VERSION = new BN(1, 10) @@ -122,19 +122,19 @@ export class ProvisionIdentityDetails implements SerializableEntity { this.flags = new BN(reader.readCompactSize()); if (this.hasSystemId()) { - const systemID = new CompactIdAddressObject(); + const systemID = new CompactAddressObject(); reader.offset = systemID.fromBuffer(reader.buffer, reader.offset); this.systemID = systemID; } if (this.hasParentId()) { - const parentID = new CompactIdAddressObject(); + const parentID = new CompactAddressObject(); reader.offset = parentID.fromBuffer(reader.buffer, reader.offset); this.parentID = parentID; } if (this.hasIdentityId()) { - const identityID = new CompactIdAddressObject(); + const identityID = new CompactAddressObject(); reader.offset = identityID.fromBuffer(reader.buffer, reader.offset); this.identityID = identityID; } @@ -160,15 +160,15 @@ export class ProvisionIdentityDetails implements SerializableEntity { provision.flags = new BN(data?.flags || 0); if (provision.hasSystemId()) { - provision.systemID = CompactIdAddressObject.fromJson(data.systemid); + provision.systemID = CompactAddressObject.fromJson(data.systemid); } if (provision.hasParentId()) { - provision.parentID = CompactIdAddressObject.fromJson(data.parentid); + provision.parentID = CompactAddressObject.fromJson(data.parentid); } if (provision.hasIdentityId()) { - provision.identityID = CompactIdAddressObject.fromJson(data.identityid); + provision.identityID = CompactAddressObject.fromJson(data.identityid); } return provision; diff --git a/src/vdxf/classes/requestobjects/UserDataRequestDetails.ts b/src/vdxf/classes/requestobjects/UserDataRequestDetails.ts index ab9b15df..830796f2 100644 --- a/src/vdxf/classes/requestobjects/UserDataRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/UserDataRequestDetails.ts @@ -26,7 +26,7 @@ import varuint from '../../../utils/varuint'; import bufferutils from '../../../utils/bufferutils'; const { BufferReader, BufferWriter } = bufferutils; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { CompactIdAddressObject, CompactIdAddressObjectJson } from '../CompactIdAddressObject'; +import { CompactAddressObject, CompactAddressObjectJson } from '../CompactAddressObject'; import { fromBase58Check, toBase58Check } from '../../../utils/address'; import { I_ADDR_VERSION, HASH160_BYTE_LENGTH } from '../../../constants/vdxf'; @@ -34,7 +34,7 @@ export interface UserDataRequestInterface { version?: BigNumber; flags: BigNumber; searchDataKey: Array<{[key: string]: string}>; - signer?: CompactIdAddressObject; + signer?: CompactAddressObject; requestedKeys?: string[]; requestID?: string; } @@ -43,7 +43,7 @@ export interface UserDataRequestJson { version: number; flags: number; searchdatakey: Array<{[key: string]: string}>; // ID object of the specific information requested - signer?: CompactIdAddressObjectJson; + signer?: CompactAddressObjectJson; requestedkeys?: string[]; // Specific keys within the data object being requested requestid?: string; } @@ -69,7 +69,7 @@ export class UserDataRequestDetails implements SerializableEntity { version: BigNumber; flags: BigNumber; searchDataKey: Array<{[key: string]: string}>; - signer?: CompactIdAddressObject; + signer?: CompactAddressObject; requestedKeys?: string[]; requestID?: string; @@ -235,7 +235,7 @@ export class UserDataRequestDetails implements SerializableEntity { } if (this.hasSigner()) { - const signer = new CompactIdAddressObject(); + const signer = new CompactAddressObject(); reader.offset = signer.fromBuffer(reader.buffer, reader.offset); this.signer = signer; @@ -276,7 +276,7 @@ export class UserDataRequestDetails implements SerializableEntity { requestData.version = new BN(json.version); requestData.flags = new BN(json.flags); requestData.searchDataKey = json.searchdatakey; - requestData.signer = json.signer ? CompactIdAddressObject.fromJson(json.signer) : undefined; + requestData.signer = json.signer ? CompactAddressObject.fromJson(json.signer) : undefined; requestData.requestedKeys = json.requestedkeys; requestData.requestID = json.requestid; diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index 254fe6f3..fbca3d2c 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -13,6 +13,7 @@ export interface VDXFKeyInterface { export const VERUSPAY_INVOICE_VDXF_KEY: VDXFKeyInterface = { hash160result: "628efc28c2e2d40050e1a9de7a93e7ddf2aa0076", + indexid: "xK4aRumetZg2ecW4Z45qdDBH769xxnaiEH", qualifiedname: { name: "veruspay.vrsc::invoice", namespace: "iAisVse7piEiE2VsixZx4SARyHzSpxYxgq" @@ -141,6 +142,7 @@ export const WALLET_VDXF_KEY: VDXFKeyInterface = { namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", name: "vrsc::applications.wallet", }, + indexid: "xA91QPpBrHZto92NCU5KEjCqRveS4dAPrf" }; export const LOGIN_CONSENT_REDIRECT_VDXF_KEY: VDXFKeyInterface = { From d4d260dd0379da4ea274c23653baf0d03905e363 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 28 Nov 2025 16:33:46 +0100 Subject: [PATCH 085/123] Add test for compact address object instance using data key --- .../vdxf/compactaddressidobject.test.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/__tests__/vdxf/compactaddressidobject.test.ts b/src/__tests__/vdxf/compactaddressidobject.test.ts index 27b6d095..c37db0c1 100644 --- a/src/__tests__/vdxf/compactaddressidobject.test.ts +++ b/src/__tests__/vdxf/compactaddressidobject.test.ts @@ -44,6 +44,25 @@ describe("CompactAddressObject", () => { expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); }); + test("creates instance with data key", () => { + const item = new CompactAddressObject({ + version: new BN(CompactAddressObject.DEFAULT_VERSION), + type: CompactAddressObject.TYPE_FQN, + address: "vrsc::applications.wallet" + }); + + const detailsBuffer = item.toBuffer(); + + const newDetails = new CompactAddressObject(); + newDetails.fromBuffer(detailsBuffer); + expect(newDetails.version.toString()).toBe("1"); + expect(newDetails.BNType.toNumber()).toBe(CompactAddressObject.TYPE_FQN.toNumber()); + expect(newDetails.address).toBe("vrsc::applications.wallet"); + expect(newDetails.rootSystemName).toBe("VRSC"); + expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); + expect(item.toXAddress()).toBe("xA91QPpBrHZto92NCU5KEjCqRveS4dAPrf"); + }); + test("creates instance with fqn", () => { const item = new CompactAddressObject({ version: new BN(CompactAddressObject.DEFAULT_VERSION), From 8a9dc5a634d55788ceb3827b52c7213d456d2381 Mon Sep 17 00:00:00 2001 From: monkins Date: Fri, 28 Nov 2025 17:18:11 +0000 Subject: [PATCH 086/123] updates for clijson from signdata --- dist/vdxf/classes/CompactIdAddressObject.d.ts | 16 +- dist/vdxf/classes/CompactIdAddressObject.js | 42 ++--- .../vdxf/classes/VerifiableSignatureData.d.ts | 18 +- dist/vdxf/classes/VerifiableSignatureData.js | 13 +- .../vdxf/appencryptionrequestdetails.test.ts | 10 +- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 6 +- .../vdxf/verifiablesignaturedata.test.ts | 157 ++++++++++++------ src/vdxf/classes/VerifiableSignatureData.ts | 32 +++- 8 files changed, 189 insertions(+), 105 deletions(-) diff --git a/dist/vdxf/classes/CompactIdAddressObject.d.ts b/dist/vdxf/classes/CompactIdAddressObject.d.ts index 9070dee2..7bf7fd43 100644 --- a/dist/vdxf/classes/CompactIdAddressObject.d.ts +++ b/dist/vdxf/classes/CompactIdAddressObject.d.ts @@ -8,21 +8,21 @@ */ import { BigNumber } from '../../utils/types/BigNumber'; import { SerializableEntity } from '../../utils/types/SerializableEntity'; -export interface CompactIdAddressObjectJson { +export interface CompactAddressObjectJson { version: number; type: number; address: string; rootsystemname: string; namespace?: string; } -export interface CompactIdAddressObjectInterface { +export interface CompactAddressObjectInterface { version?: BigNumber; type: BigNumber; address: string; rootSystemName?: string; nameSpace?: string; } -export declare class CompactIdAddressObject implements SerializableEntity { +export declare class CompactAddressObject implements SerializableEntity { static VERSION_INVALID: import("bn.js"); static FIRST_VERSION: import("bn.js"); static LAST_VERSION: import("bn.js"); @@ -36,7 +36,7 @@ export declare class CompactIdAddressObject implements SerializableEntity { rootSystemName: string; nameSpace: string; allowedTypes: Array; - constructor(data?: CompactIdAddressObjectInterface, allowedTypes?: Array); + constructor(data?: CompactAddressObjectInterface, allowedTypes?: Array); isFQN(): boolean; isIaddress(): boolean; isXaddress(): boolean; @@ -44,11 +44,11 @@ export declare class CompactIdAddressObject implements SerializableEntity { checkValidity(): void; toIAddress(): string; toXAddress(): string; - static fromIAddress(iaddr: string): CompactIdAddressObject; - static fromXAddress(xaddr: string, nameSpace?: string): CompactIdAddressObject; + static fromIAddress(iaddr: string): CompactAddressObject; + static fromXAddress(xaddr: string, nameSpace?: string): CompactAddressObject; getByteLength(): number; toBuffer(): Buffer; fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): CompactIdAddressObjectJson; - static fromJson(json: any): CompactIdAddressObject; + toJson(): CompactAddressObjectJson; + static fromJson(json: any): CompactAddressObject; } diff --git a/dist/vdxf/classes/CompactIdAddressObject.js b/dist/vdxf/classes/CompactIdAddressObject.js index ad2d5195..8d41c6a7 100644 --- a/dist/vdxf/classes/CompactIdAddressObject.js +++ b/dist/vdxf/classes/CompactIdAddressObject.js @@ -8,7 +8,7 @@ * and validation of the compact id object. */ Object.defineProperty(exports, "__esModule", { value: true }); -exports.CompactIdAddressObject = void 0; +exports.CompactAddressObject = void 0; const bn_js_1 = require("bn.js"); const bufferutils_1 = require("../../utils/bufferutils"); const { BufferReader, BufferWriter } = bufferutils_1.default; @@ -16,9 +16,9 @@ const varuint_1 = require("../../utils/varuint"); const address_1 = require("../../utils/address"); const vdxf_1 = require("../../constants/vdxf"); const pbaas_1 = require("../../constants/pbaas"); -class CompactIdAddressObject { - constructor(data, allowedTypes = [CompactIdAddressObject.IS_FQN.toString(), CompactIdAddressObject.IS_IDENTITYID.toString()]) { - this.version = (data === null || data === void 0 ? void 0 : data.version) || new bn_js_1.BN(CompactIdAddressObject.DEFAULT_VERSION); +class CompactAddressObject { + constructor(data, allowedTypes = [CompactAddressObject.TYPE_FQN.toString(), CompactAddressObject.TYPE_I_ADDRESS.toString()]) { + this.version = (data === null || data === void 0 ? void 0 : data.version) || new bn_js_1.BN(CompactAddressObject.DEFAULT_VERSION); this.type = (data === null || data === void 0 ? void 0 : data.type) || new bn_js_1.BN(1); this.address = (data === null || data === void 0 ? void 0 : data.address) || ''; this.rootSystemName = (data === null || data === void 0 ? void 0 : data.rootSystemName) || 'VRSC'; @@ -27,20 +27,20 @@ class CompactIdAddressObject { this.checkValidity(); } isFQN() { - return (this.type.eq(CompactIdAddressObject.IS_FQN)); + return (this.type.eq(CompactAddressObject.TYPE_FQN)); } isIaddress() { - return (this.type.eq(CompactIdAddressObject.IS_IDENTITYID)); + return (this.type.eq(CompactAddressObject.TYPE_I_ADDRESS)); } isXaddress() { - return (this.type.eq(CompactIdAddressObject.IS_X_ADDRESS)); + return (this.type.eq(CompactAddressObject.IS_X_ADDRESS)); } isValid() { return this.address != null && this.allowedTypes.includes(this.type.toString()); } checkValidity() { if (!this.isValid()) - throw new Error("Invalid CompactIdAddressObject"); + throw new Error("Invalid CompactAddressObject"); } toIAddress() { this.checkValidity(); @@ -67,16 +67,16 @@ class CompactIdAddressObject { throw new Error("Unknown type"); } static fromIAddress(iaddr) { - return new CompactIdAddressObject({ + return new CompactAddressObject({ address: iaddr, - type: CompactIdAddressObject.IS_IDENTITYID + type: CompactAddressObject.TYPE_I_ADDRESS }); } static fromXAddress(xaddr, nameSpace = pbaas_1.DEFAULT_VERUS_CHAINID) { - return new CompactIdAddressObject({ + return new CompactAddressObject({ address: xaddr, nameSpace: nameSpace, - type: CompactIdAddressObject.IS_X_ADDRESS + type: CompactAddressObject.IS_X_ADDRESS }); } getByteLength() { @@ -126,7 +126,7 @@ class CompactIdAddressObject { }; } static fromJson(json) { - const instance = new CompactIdAddressObject(); + const instance = new CompactAddressObject(); instance.version = new bn_js_1.BN(json.version); instance.type = new bn_js_1.BN(json.type); instance.address = json.address; @@ -135,11 +135,11 @@ class CompactIdAddressObject { return instance; } } -exports.CompactIdAddressObject = CompactIdAddressObject; -CompactIdAddressObject.VERSION_INVALID = new bn_js_1.BN(0); -CompactIdAddressObject.FIRST_VERSION = new bn_js_1.BN(1); -CompactIdAddressObject.LAST_VERSION = new bn_js_1.BN(1); -CompactIdAddressObject.DEFAULT_VERSION = new bn_js_1.BN(1); -CompactIdAddressObject.IS_FQN = new bn_js_1.BN(1); -CompactIdAddressObject.IS_IDENTITYID = new bn_js_1.BN(2); -CompactIdAddressObject.IS_X_ADDRESS = new bn_js_1.BN(3); +exports.CompactAddressObject = CompactAddressObject; +CompactAddressObject.VERSION_INVALID = new bn_js_1.BN(0); +CompactAddressObject.FIRST_VERSION = new bn_js_1.BN(1); +CompactAddressObject.LAST_VERSION = new bn_js_1.BN(1); +CompactAddressObject.DEFAULT_VERSION = new bn_js_1.BN(1); +CompactAddressObject.TYPE_FQN = new bn_js_1.BN(1); +CompactAddressObject.TYPE_I_ADDRESS = new bn_js_1.BN(2); +CompactAddressObject.IS_X_ADDRESS = new bn_js_1.BN(3); diff --git a/dist/vdxf/classes/VerifiableSignatureData.d.ts b/dist/vdxf/classes/VerifiableSignatureData.d.ts index 831bab24..591b24e2 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.d.ts +++ b/dist/vdxf/classes/VerifiableSignatureData.d.ts @@ -28,6 +28,22 @@ export interface VerifiableSignatureDataInterface { statements?: Array; signatureAsVch?: Buffer; } +export interface CliSignatureData { + signaturedata: SignatureJsonDataInterface; + system: string; + systemid: string; + hashtype: string; + hash: string; + identity: string; + canonicalname: string; + address: string; + signatureheight: number; + signature: string; + signatureversion: number; + vdxfkeys?: Array; + vdxfkeynames?: Array; + boundhashes?: Array; +} export declare class VerifiableSignatureData implements SerializableEntity { version: BigNumber; flags: BigNumber; @@ -72,5 +88,5 @@ export declare class VerifiableSignatureData implements SerializableEntity { toSignatureData(sigHash: Buffer): SignatureData; toJson(): VerifiableSignatureDataJson; static fromJson(json: VerifiableSignatureDataJson): VerifiableSignatureData; - static fromSignatureDataJson(json: SignatureJsonDataInterface, rootSystemName?: string): VerifiableSignatureData; + static fromCLIJson(json: CliSignatureData, rootSystemName?: string): VerifiableSignatureData; } diff --git a/dist/vdxf/classes/VerifiableSignatureData.js b/dist/vdxf/classes/VerifiableSignatureData.js index 2379bcbe..2c899946 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.js +++ b/dist/vdxf/classes/VerifiableSignatureData.js @@ -294,20 +294,21 @@ class VerifiableSignatureData { instance.signatureAsVch = Buffer.from(json.signature, 'hex'); return instance; } - static fromSignatureDataJson(json, rootSystemName = 'VRSC') { + static fromCLIJson(json, rootSystemName = 'VRSC') { var _a; const instance = new VerifiableSignatureData(); - instance.version = new bn_js_1.BN(json.version); - instance.hashType = new bn_js_1.BN(json.hashtype); - instance.signatureVersion = new bn_js_1.BN(2); //default Signature Version - instance.systemID = CompactIdAddressObject_1.CompactIdAddressObject.fromJson({ address: json.systemid, version: 1, type: CompactIdAddressObject_1.CompactIdAddressObject.IS_IDENTITYID, rootSystemName }); - instance.identityID = CompactIdAddressObject_1.CompactIdAddressObject.fromJson({ address: json.identityid, version: 1, type: CompactIdAddressObject_1.CompactIdAddressObject.IS_IDENTITYID, rootSystemName }); + instance.version = new bn_js_1.BN(VerifiableSignatureData.TYPE_VERUSID_DEFAULT); + instance.hashType = new bn_js_1.BN(json.signaturedata.hashtype); + instance.signatureVersion = new bn_js_1.BN(json.signatureversion); //default Signature Version + instance.systemID = CompactAddressObject_1.CompactAddressObject.fromJson({ address: json.systemid, version: 1, type: CompactAddressObject_1.CompactAddressObject.TYPE_I_ADDRESS, rootSystemName }); + instance.identityID = CompactAddressObject_1.CompactAddressObject.fromJson({ address: json.address, version: 1, type: CompactAddressObject_1.CompactAddressObject.TYPE_I_ADDRESS, rootSystemName }); // Set optional fields instance.vdxfKeys = json.vdxfkeys; instance.vdxfKeyNames = json.vdxfkeynames; instance.boundHashes = (_a = json.boundhashes) === null || _a === void 0 ? void 0 : _a.map(x => Buffer.from(x, 'hex')); // Store the full signature (from daemon in base64 format) instance.signatureAsVch = Buffer.from(json.signature, 'base64'); + instance.setFlags(); return instance; } } diff --git a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts index 6396d0ad..a235eaa7 100644 --- a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts +++ b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts @@ -3,7 +3,7 @@ import { AppEncryptionRequestDetails, CompactAddressObject } from "../../vdxf/cl import { BigNumber } from "../../utils/types/BigNumber"; // Helper function to create TransferDestination from address string -function createCompactIdAddressObject(type: BigNumber, address: string): CompactAddressObject { +function createCompactAddressObject(type: BigNumber, address: string): CompactAddressObject { const obj = new CompactAddressObject({ address, type @@ -18,10 +18,10 @@ describe("AppEncryptionRequestDetails serialization tests", () => { version: AppEncryptionRequestDetails.DEFAULT_VERSION, flags: AppEncryptionRequestDetails.HAS_DERIVATION_ID .or(AppEncryptionRequestDetails.HAS_REQUEST_ID), - appOrDelegatedID: createCompactIdAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), + appOrDelegatedID: createCompactAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), - derivationID: createCompactIdAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + derivationID: createCompactAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); @@ -48,10 +48,10 @@ describe("AppEncryptionRequestDetails serialization tests", () => { version: AppEncryptionRequestDetails.DEFAULT_VERSION, flags: AppEncryptionRequestDetails.HAS_DERIVATION_ID .or(AppEncryptionRequestDetails.HAS_REQUEST_ID), - appOrDelegatedID: createCompactIdAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), + appOrDelegatedID: createCompactAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), - derivationID: createCompactIdAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + derivationID: createCompactAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index ab184c80..111addee 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -44,7 +44,7 @@ import { SaplingExtendedSpendingKey } from '../../pbaas/SaplingExtendedSpendingK import { SaplingExtendedViewingKey } from '../../pbaas/SaplingExtendedViewingKey'; // Helper function to create TransferDestination from address string -function createCompactIdAddressObject(type: BigNumber, address: string): CompactAddressObject { +function createCompactAddressObject(type: BigNumber, address: string): CompactAddressObject { const obj = new CompactAddressObject({ type, address @@ -357,10 +357,10 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { version: AppEncryptionRequestDetails.DEFAULT_VERSION, flags: AppEncryptionRequestDetails.HAS_DERIVATION_ID .or(AppEncryptionRequestDetails.HAS_REQUEST_ID), - appOrDelegatedID: createCompactIdAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), + appOrDelegatedID: createCompactAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), - derivationID: createCompactIdAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), + derivationID: createCompactAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); diff --git a/src/__tests__/vdxf/verifiablesignaturedata.test.ts b/src/__tests__/vdxf/verifiablesignaturedata.test.ts index 68065c52..395ebb68 100644 --- a/src/__tests__/vdxf/verifiablesignaturedata.test.ts +++ b/src/__tests__/vdxf/verifiablesignaturedata.test.ts @@ -1,5 +1,5 @@ import { VerifiableSignatureData } from "../../vdxf/classes/VerifiableSignatureData"; -import { CompactIdAddressObject } from "../../vdxf/classes/CompactIdAddressObject"; +import { CompactAddressObject } from "../../vdxf/classes/CompactAddressObject"; import { HASH_TYPE_SHA256 } from '../../constants/pbaas'; import { BN } from "bn.js"; import { SignatureData } from "../../pbaas/SignatureData"; @@ -10,13 +10,13 @@ describe('Serializes and deserializes SignatureData', () => { test('(de)serialize SignatureData', () => { const s = new VerifiableSignatureData({ - version: new BN(1), - signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), - hashType: HASH_TYPE_SHA256, - flags: new BN(0), - identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), - systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC" }), - }) + version: new BN(1), + signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), + hashType: HASH_TYPE_SHA256, + flags: new BN(0), + identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), + }) const sFromBuf = new VerifiableSignatureData(); @@ -31,8 +31,8 @@ describe('Serializes and deserializes SignatureData', () => { signatureVersion: new BN(2), signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), hashType: HASH_TYPE_SHA256, - identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), - systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC" }), + identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), vdxfKeys: ["iRrCKQqLQrWczeNotMgqJkoUW5ZzF182Ax", "iCCSCFbq9n7ftEQCQT94t8CcVV5NdxnTvL"], }) @@ -50,8 +50,8 @@ describe('Serializes and deserializes SignatureData', () => { signatureVersion: new BN(2), signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), hashType: HASH_TYPE_SHA256, - identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), - systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC" }), + identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), vdxfKeyNames: ["key.name.one", "key.name.two", "another.key"], }) @@ -69,8 +69,8 @@ describe('Serializes and deserializes SignatureData', () => { signatureVersion: new BN(2), signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), hashType: HASH_TYPE_SHA256, - identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), - systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC" }), + identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), boundHashes: [ Buffer.from("a".repeat(64), 'hex'), Buffer.from("b".repeat(64), 'hex'), @@ -91,8 +91,8 @@ describe('Serializes and deserializes SignatureData', () => { signatureVersion: new BN(2), signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), hashType: HASH_TYPE_SHA256, - identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), - systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSC", rootSystemName: "VRSC" }), + identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), vdxfKeys: ["iRrCKQqLQrWczeNotMgqJkoUW5ZzF182Ax", "iCCSCFbq9n7ftEQCQT94t8CcVV5NdxnTvL"], vdxfKeyNames: ["key.name.one", "key.name.two"], boundHashes: [ @@ -120,8 +120,8 @@ describe('Serializes and deserializes SignatureData', () => { signatureVersion: new BN(2), signatureAsVch: Buffer.from("AgVfngwAAUEgywnMVejMz6iZj88qRawIivovU9L9uQtGcDbD635QbNt2G/QoZjxT6c7w099JjBd2cGa8ajI99KG0MTbHT99ZZw==", 'base64'), hashType: HASH_TYPE_SHA256, - identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", rootSystemName: "VRSCTEST" }), - systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSCTEST", rootSystemName: "VRSCTEST" }), + identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", rootSystemName: "VRSCTEST" }), + systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSCTEST", rootSystemName: "VRSCTEST" }), vdxfKeys: ["iQRWB2Ay9rEbzStXDjMFpveh4oEmD6YWXa"], }) @@ -135,8 +135,8 @@ describe('Serializes and deserializes SignatureData', () => { signatureVersion: new BN(2), signatureAsVch: Buffer.from("AgVfngwAAUEgywnMVejMz6iZj88qRawIivovU9L9uQtGcDbD635QbNt2G/QoZjxT6c7w099JjBd2cGa8ajI99KG0MTbHT99ZZw==", 'base64'), hashType: HASH_TYPE_SHA256, - identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", rootSystemName: "VRSCTEST" }), - systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSCTEST", rootSystemName: "VRSCTEST" }), + identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", rootSystemName: "VRSCTEST" }), + systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSCTEST", rootSystemName: "VRSCTEST" }), vdxfKeys: ["iQRWB2Ay9rEbzStXDjMFpveh4oEmD6YWXa"], }) @@ -147,19 +147,19 @@ describe('Serializes and deserializes SignatureData', () => { }); - test('getIdentityHash with extra data - vdxfKeys are sorted by buffer value', () => { + test('getIdentityHash with extra data - vdxfKeys are sorted by buffer value', () => { // Create with keys in non-sorted order const s = new VerifiableSignatureData({ version: new BN(1), signatureVersion: new BN(2), signatureAsVch: Buffer.from("AgV1ngwAAUEfYEg7UW5l0zS88ERfSBXZJ6+RWiUwXQ8BwMkkUesmemFBF29LEVw0C60csXMbMdLYxt3qGLLhgHnev9XIwWFIvw==", 'base64'), hashType: HASH_TYPE_SHA256, - identityID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_IDENTITYID, address: "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", rootSystemName: "VRSCTEST" }), - systemID: new CompactIdAddressObject({ version: CompactIdAddressObject.DEFAULT_VERSION, type: CompactIdAddressObject.IS_FQN, address: "VRSCTEST", rootSystemName: "VRSCTEST" }), + identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", rootSystemName: "VRSCTEST" }), + systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSCTEST", rootSystemName: "VRSCTEST" }), }) const sigHash = createHash("sha256").update("hello world1").digest(); - const hash1 = s.getIdentityHash(826997, sigHash); + const hash1 = s.getIdentityHash(826997, sigHash); // Hashes should be identical because keys are sorted before hashing expect(hash1.toString('hex')).toBe(hash1.toString('hex')) @@ -168,13 +168,37 @@ describe('Serializes and deserializes SignatureData', () => { test('fromSignatureDataJson parses all fields correctly', () => { const signatureDataJson = { - "version": 1, + "signaturedata": { + "version": 1, + "systemid": "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", // + "hashtype": 5, + "signaturehash": "f8220bacb0bf5bd8ca33a890184b66b35fb64647274b4b9fb4ff90e68f77a5a7", + "identityid": "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", + "signaturetype": 1, + "signature": "AgVgngwAAUEg4QYvX2zJJUZLa4YdtwoxehCQ9T3U6xGw08SmonRSv1xofR1264j5/bdXmq6Qc2YgzlCt3DqVKM9c9DLuCU4bbQ==",// + "vdxfkeys": [ + "iQRWB2Ay9rEbzStXDjMFpveh4oEmD6YWXa", + "i5cVmwQQZfWz1AYp9AwKakPQxTjQfK2Mrk", + "iKqjqcXE15KPNuCvm2evZUnwiYEZ2CLnV2", + "iRrCKQqLQrWczeNotMgqJkoUW5ZzF182Ax" + ], + "vdxfkeynames": [ + "examplename1", + "examplename2" + ], + "boundhashes": [ + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + ] + }, + "system": "VRSCTEST", "systemid": "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", - "hashtype": 5, - "signaturehash": "f8220bacb0bf5bd8ca33a890184b66b35fb64647274b4b9fb4ff90e68f77a5a7", - "identityid": "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", - "signaturetype": 1, - "signature": "AgVgngwAAUEg4QYvX2zJJUZLa4YdtwoxehCQ9T3U6xGw08SmonRSv1xofR1264j5/bdXmq6Qc2YgzlCt3DqVKM9c9DLuCU4bbQ==", + "hashtype": "sha256", + "hash": "f8220bacb0bf5bd8ca33a890184b66b35fb64647274b4b9fb4ff90e68f77a5a7", + "identity": "endorsetest.VRSCTEST@", + "canonicalname": "endorsetest.vrsctest@", + "address": "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", + "signatureheight": 826976, "vdxfkeys": [ "iQRWB2Ay9rEbzStXDjMFpveh4oEmD6YWXa", "i5cVmwQQZfWz1AYp9AwKakPQxTjQfK2Mrk", @@ -188,22 +212,24 @@ describe('Serializes and deserializes SignatureData', () => { "boundhashes": [ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" - ] + ], + "signatureversion": 2, + "signature": "AgVgngwAAUEg4QYvX2zJJUZLa4YdtwoxehCQ9T3U6xGw08SmonRSv1xofR1264j5/bdXmq6Qc2YgzlCt3DqVKM9c9DLuCU4bbQ==" }; - const verifiableSig = VerifiableSignatureData.fromSignatureDataJson(signatureDataJson); - + const verifiableSig = VerifiableSignatureData.fromCLIJson(signatureDataJson); + // Verify version fields expect(verifiableSig.version.toNumber()).toBe(1); expect(verifiableSig.signatureVersion.toNumber()).toBe(2); // Auto-detected as v2 due to extra data - + // Verify IDs expect(verifiableSig.systemID.toIAddress()).toBe("iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"); expect(verifiableSig.identityID.toIAddress()).toBe("i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s"); - + // Verify hash type expect(verifiableSig.hashType.toNumber()).toBe(5); - + // Verify vdxfKeys (stored as strings) expect(verifiableSig.vdxfKeys).toBeDefined(); expect(verifiableSig.vdxfKeys?.length).toBe(4); @@ -211,19 +237,19 @@ describe('Serializes and deserializes SignatureData', () => { expect(verifiableSig.vdxfKeys?.[1]).toBe("i5cVmwQQZfWz1AYp9AwKakPQxTjQfK2Mrk"); expect(verifiableSig.vdxfKeys?.[2]).toBe("iKqjqcXE15KPNuCvm2evZUnwiYEZ2CLnV2"); expect(verifiableSig.vdxfKeys?.[3]).toBe("iRrCKQqLQrWczeNotMgqJkoUW5ZzF182Ax"); - + // Verify vdxfKeyNames expect(verifiableSig.vdxfKeyNames).toBeDefined(); expect(verifiableSig.vdxfKeyNames?.length).toBe(2); expect(verifiableSig.vdxfKeyNames?.[0]).toBe("examplename1"); expect(verifiableSig.vdxfKeyNames?.[1]).toBe("examplename2"); - + // Verify boundHashes expect(verifiableSig.boundHashes).toBeDefined(); expect(verifiableSig.boundHashes?.length).toBe(2); expect(verifiableSig.boundHashes?.[0].toString('hex')).toBe("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); expect(verifiableSig.boundHashes?.[1].toString('hex')).toBe("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"); - + // Verify signature expect(verifiableSig.signatureAsVch.toString('base64')).toBe("AgVgngwAAUEg4QYvX2zJJUZLa4YdtwoxehCQ9T3U6xGw08SmonRSv1xofR1264j5/bdXmq6Qc2YgzlCt3DqVKM9c9DLuCU4bbQ=="); }); @@ -231,13 +257,37 @@ describe('Serializes and deserializes SignatureData', () => { test('verify daemon signature with all extra data - from signdata', () => { // Real signature data from daemon with vdxfkeys, vdxfkeynames, and boundhashes const signatureDataJson = { - "version": 1, + "signaturedata": { + "version": 1, + "systemid": "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", // + "hashtype": 5, + "signaturehash": "f8220bacb0bf5bd8ca33a890184b66b35fb64647274b4b9fb4ff90e68f77a5a7", + "identityid": "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", + "signaturetype": 1, + "signature": "AgVgngwAAUEg4QYvX2zJJUZLa4YdtwoxehCQ9T3U6xGw08SmonRSv1xofR1264j5/bdXmq6Qc2YgzlCt3DqVKM9c9DLuCU4bbQ==",// + "vdxfkeys": [ + "iQRWB2Ay9rEbzStXDjMFpveh4oEmD6YWXa", + "i5cVmwQQZfWz1AYp9AwKakPQxTjQfK2Mrk", + "iKqjqcXE15KPNuCvm2evZUnwiYEZ2CLnV2", + "iRrCKQqLQrWczeNotMgqJkoUW5ZzF182Ax" + ], + "vdxfkeynames": [ + "examplename1", + "examplename2" + ], + "boundhashes": [ + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + ] + }, + "system": "VRSCTEST", "systemid": "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", - "hashtype": 5, - "signaturehash": "f8220bacb0bf5bd8ca33a890184b66b35fb64647274b4b9fb4ff90e68f77a5a7", - "identityid": "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", - "signaturetype": 1, - "signature": "AgVgngwAAUEg4QYvX2zJJUZLa4YdtwoxehCQ9T3U6xGw08SmonRSv1xofR1264j5/bdXmq6Qc2YgzlCt3DqVKM9c9DLuCU4bbQ==", + "hashtype": "sha256", + "hash": "f8220bacb0bf5bd8ca33a890184b66b35fb64647274b4b9fb4ff90e68f77a5a7", + "identity": "endorsetest.VRSCTEST@", + "canonicalname": "endorsetest.vrsctest@", + "address": "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", + "signatureheight": 826976, "vdxfkeys": [ "iQRWB2Ay9rEbzStXDjMFpveh4oEmD6YWXa", "i5cVmwQQZfWz1AYp9AwKakPQxTjQfK2Mrk", @@ -251,12 +301,14 @@ describe('Serializes and deserializes SignatureData', () => { "boundhashes": [ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" - ] + ], + "signatureversion": 2, + "signature": "AgVgngwAAUEg4QYvX2zJJUZLa4YdtwoxehCQ9T3U6xGw08SmonRSv1xofR1264j5/bdXmq6Qc2YgzlCt3DqVKM9c9DLuCU4bbQ==" }; // Create VerifiableSignatureData directly from SignatureData JSON - const verifiableSig = VerifiableSignatureData.fromSignatureDataJson(signatureDataJson); - + const verifiableSig = VerifiableSignatureData.fromCLIJson(signatureDataJson); + // Verify the parsed data expect(verifiableSig.version.toNumber()).toBe(1); expect(verifiableSig.signatureVersion.toNumber()).toBe(2); @@ -267,12 +319,9 @@ describe('Serializes and deserializes SignatureData', () => { expect(verifiableSig.vdxfKeyNames?.length).toBe(2); expect(verifiableSig.boundHashes?.length).toBe(2); - // The message that was signed is the signaturehash from the daemon - const messageHash = Buffer.from(signatureDataJson.signaturehash, 'hex'); - - // Verify the signature hash matches - expect(messageHash.toString('hex')).toBe(signatureDataJson.signaturehash); + + }); - + }); diff --git a/src/vdxf/classes/VerifiableSignatureData.ts b/src/vdxf/classes/VerifiableSignatureData.ts index 7189e9e6..a284c7cd 100644 --- a/src/vdxf/classes/VerifiableSignatureData.ts +++ b/src/vdxf/classes/VerifiableSignatureData.ts @@ -42,6 +42,23 @@ export interface VerifiableSignatureDataInterface { signatureAsVch?: Buffer; } +export interface CliSignatureData { + signaturedata: SignatureJsonDataInterface; + system: string; + systemid: string; + hashtype: string; + hash: string; + identity: string; + canonicalname: string; + address: string; + signatureheight: number; + signature: string; + signatureversion: number; + vdxfkeys?: Array; + vdxfkeynames?: Array; + boundhashes?: Array; +} + export class VerifiableSignatureData implements SerializableEntity { version: BigNumber; flags: BigNumber; @@ -411,15 +428,14 @@ export class VerifiableSignatureData implements SerializableEntity { return instance; } - static fromSignatureDataJson(json: SignatureJsonDataInterface, rootSystemName = 'VRSC'): VerifiableSignatureData { + static fromCLIJson(json: CliSignatureData, rootSystemName = 'VRSC'): VerifiableSignatureData { const instance = new VerifiableSignatureData(); - instance.version = new BN(json.version); - instance.hashType = new BN(json.hashtype); - instance.signatureVersion = new BN(2); //default Signature Version + instance.version = new BN(VerifiableSignatureData.TYPE_VERUSID_DEFAULT); + instance.hashType = new BN(json.signaturedata.hashtype); + instance.signatureVersion = new BN(json.signatureversion); //default Signature Version - instance.systemID = CompactIdAddressObject.fromJson({address: json.systemid, version: 1, type: CompactIdAddressObject.IS_IDENTITYID, rootSystemName}); - instance.identityID = CompactIdAddressObject.fromJson({address: json.identityid, version: 1, type: CompactIdAddressObject.IS_IDENTITYID, rootSystemName}); - + instance.systemID = CompactAddressObject.fromJson({address: json.systemid, version: 1, type: CompactAddressObject.TYPE_I_ADDRESS, rootSystemName}); + instance.identityID = CompactAddressObject.fromJson({address: json.address, version: 1, type: CompactAddressObject.TYPE_I_ADDRESS, rootSystemName}); // Set optional fields instance.vdxfKeys = json.vdxfkeys; @@ -428,6 +444,8 @@ export class VerifiableSignatureData implements SerializableEntity { // Store the full signature (from daemon in base64 format) instance.signatureAsVch = Buffer.from(json.signature, 'base64'); + + instance.setFlags(); return instance; } From 6c1ce3942e22cd940b211ea975d82ecfe4902552 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Mon, 1 Dec 2025 11:42:19 +0100 Subject: [PATCH 087/123] Remove console log --- src/__tests__/vdxf/verifiablesignaturedata.test.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/__tests__/vdxf/verifiablesignaturedata.test.ts b/src/__tests__/vdxf/verifiablesignaturedata.test.ts index 395ebb68..ec59f7ea 100644 --- a/src/__tests__/vdxf/verifiablesignaturedata.test.ts +++ b/src/__tests__/vdxf/verifiablesignaturedata.test.ts @@ -127,7 +127,6 @@ describe('Serializes and deserializes SignatureData', () => { const sigHash = createHash("sha256").update("hello world1").digest(); const hash1 = s.getIdentityHash(826975, sigHash); - console.log(`run verifyhash "${s.identityID.toIAddress()}" "${s.signatureAsVch.toString('base64')}" "${hash1.toString('hex')}"`); // Create with same keys but different order const s2 = new VerifiableSignatureData({ @@ -144,7 +143,6 @@ describe('Serializes and deserializes SignatureData', () => { // Hashes should be identical because keys are sorted before hashing expect(hash1.toString('hex')).toBe(hash2.toString('hex')) - }); test('getIdentityHash with extra data - vdxfKeys are sorted by buffer value', () => { From f88e11ead4b346fa1061622ca1ae70d754dab666 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Mon, 1 Dec 2025 14:13:19 +0100 Subject: [PATCH 088/123] Replace callbackURI with responseURI in LoginRequestDetails --- dist/vdxf/classes/ResponseUri.d.ts | 10 +- dist/vdxf/classes/ResponseUri.js | 18 +-- .../IdentityUpdateRequestDetails.d.ts | 8 +- .../identity/IdentityUpdateRequestDetails.js | 8 +- dist/vdxf/classes/index.d.ts | 2 +- dist/vdxf/classes/index.js | 2 +- .../classes/login/LoginRequestDetails.d.ts | 23 ++-- .../vdxf/classes/login/LoginRequestDetails.js | 59 +++++----- src/__tests__/constants/fixtures.ts | 2 +- .../vdxf/identityupdateenvelope.test.ts | 16 +-- .../vdxf/loginrequestdetails.test.ts | 17 ++- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 11 +- src/vdxf/classes/ResponseUri.ts | 14 +-- .../identity/IdentityUpdateRequestDetails.ts | 16 +-- src/vdxf/classes/index.ts | 2 +- src/vdxf/classes/login/LoginRequestDetails.ts | 105 +++++++----------- 16 files changed, 136 insertions(+), 177 deletions(-) diff --git a/dist/vdxf/classes/ResponseUri.d.ts b/dist/vdxf/classes/ResponseUri.d.ts index 3997ddfe..0ba995f8 100644 --- a/dist/vdxf/classes/ResponseUri.d.ts +++ b/dist/vdxf/classes/ResponseUri.d.ts @@ -1,10 +1,10 @@ import { BigNumber } from "../../utils/types/BigNumber"; import { SerializableEntity } from "../../utils/types/SerializableEntity"; -export type ResponseUriJson = { +export type ResponseURIJson = { type: string; uri: string; }; -export declare class ResponseUri implements SerializableEntity { +export declare class ResponseURI implements SerializableEntity { uri: Buffer; type: BigNumber; static TYPE_INVALID: import("bn.js"); @@ -15,10 +15,10 @@ export declare class ResponseUri implements SerializableEntity { type?: BigNumber; }); getUriString(): string; - static fromUriString(str: string, type?: BigNumber): ResponseUri; + static fromUriString(str: string, type?: BigNumber): ResponseURI; getByteLength(): number; toBuffer(): Buffer; fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): ResponseUriJson; - static fromJson(json: ResponseUriJson): ResponseUri; + toJson(): ResponseURIJson; + static fromJson(json: ResponseURIJson): ResponseURI; } diff --git a/dist/vdxf/classes/ResponseUri.js b/dist/vdxf/classes/ResponseUri.js index 5c66ddd7..16810a0e 100644 --- a/dist/vdxf/classes/ResponseUri.js +++ b/dist/vdxf/classes/ResponseUri.js @@ -1,10 +1,10 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.ResponseUri = void 0; +exports.ResponseURI = void 0; const bn_js_1 = require("bn.js"); const varuint_1 = require("../../utils/varuint"); const bufferutils_1 = require("../../utils/bufferutils"); -class ResponseUri { +class ResponseURI { // TODO: Add TYPE_Z_ADDR_REF where response is encrypted and sent to encoded sapling address, // with optional amount specified constructor(data) { @@ -20,8 +20,8 @@ class ResponseUri { getUriString() { return this.uri.toString('utf-8'); } - static fromUriString(str, type = ResponseUri.TYPE_REDIRECT) { - return new ResponseUri({ uri: Buffer.from(str, 'utf-8'), type }); + static fromUriString(str, type = ResponseURI.TYPE_REDIRECT) { + return new ResponseURI({ uri: Buffer.from(str, 'utf-8'), type }); } getByteLength() { let length = 0; @@ -50,13 +50,13 @@ class ResponseUri { }; } static fromJson(json) { - return new ResponseUri({ + return new ResponseURI({ type: new bn_js_1.BN(json.type, 10), uri: Buffer.from(json.uri, 'utf-8') }); } } -exports.ResponseUri = ResponseUri; -ResponseUri.TYPE_INVALID = new bn_js_1.BN(0, 10); -ResponseUri.TYPE_REDIRECT = new bn_js_1.BN(1, 10); -ResponseUri.TYPE_POST = new bn_js_1.BN(2, 10); +exports.ResponseURI = ResponseURI; +ResponseURI.TYPE_INVALID = new bn_js_1.BN(0, 10); +ResponseURI.TYPE_REDIRECT = new bn_js_1.BN(1, 10); +ResponseURI.TYPE_POST = new bn_js_1.BN(2, 10); diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts index e968158a..a3eb212f 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts +++ b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts @@ -2,7 +2,7 @@ import { PartialIdentity } from '../../../pbaas/PartialIdentity'; import { PartialSignData, PartialSignDataCLIJson, PartialSignDataJson } from '../../../pbaas/PartialSignData'; import { BigNumber } from '../../../utils/types/BigNumber'; import { ContentMultiMapJsonValue, IdentityID, VerusCLIVerusIDJson, VerusCLIVerusIDJsonBase } from '../../../pbaas'; -import { ResponseUri, ResponseUriJson } from '../ResponseUri'; +import { ResponseURI, ResponseURIJson } from '../ResponseURI'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; export type SignDataMap = Map; export type VerusCLIVerusIDJsonWithData = VerusCLIVerusIDJsonBase<{ @@ -16,7 +16,7 @@ export type IdentityUpdateRequestDetailsJson = { identity?: VerusCLIVerusIDJson; expiryheight?: string; systemid?: string; - responseuris?: Array; + responseuris?: Array; signdatamap?: { [key: string]: PartialSignDataJson; }; @@ -28,7 +28,7 @@ export declare class IdentityUpdateRequestDetails implements SerializableEntity identity?: PartialIdentity; expiryHeight?: BigNumber; systemID?: IdentityID; - responseURIs?: Array; + responseURIs?: Array; signDataMap?: SignDataMap; txid?: Buffer; static IDENTITY_UPDATE_REQUEST_VALID: import("bn.js"); @@ -46,7 +46,7 @@ export declare class IdentityUpdateRequestDetails implements SerializableEntity expiryHeight?: BigNumber; systemID?: IdentityID; txid?: Buffer; - responseURIs?: Array; + responseURIs?: Array; signDataMap?: SignDataMap; }); expires(): boolean; diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js index 4ab9394d..45a4a647 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js +++ b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js @@ -10,7 +10,7 @@ const PartialIdentity_1 = require("../../../pbaas/PartialIdentity"); const PartialSignData_1 = require("../../../pbaas/PartialSignData"); const bn_js_1 = require("bn.js"); const pbaas_1 = require("../../../pbaas"); -const ResponseUri_1 = require("../ResponseUri"); +const ResponseURI_1 = require("../ResponseURI"); const pbaas_2 = require("../../../constants/pbaas"); const { BufferReader, BufferWriter } = bufferutils_1.default; class IdentityUpdateRequestDetails { @@ -186,7 +186,7 @@ class IdentityUpdateRequestDetails { this.responseURIs = []; const urisLength = reader.readCompactSize(); for (let i = 0; i < urisLength; i++) { - const uri = new ResponseUri_1.ResponseUri(); + const uri = new ResponseURI_1.ResponseURI(); reader.offset = uri.fromBuffer(reader.buffer, reader.offset); this.responseURIs.push(uri); } @@ -236,7 +236,7 @@ class IdentityUpdateRequestDetails { identity: json.identity ? PartialIdentity_1.PartialIdentity.fromJson(json.identity) : undefined, expiryHeight: json.expiryheight ? new bn_js_1.BN(json.expiryheight, 10) : undefined, systemID: json.systemid ? pbaas_1.IdentityID.fromAddress(json.systemid) : undefined, - responseURIs: json.responseuris ? json.responseuris.map(x => ResponseUri_1.ResponseUri.fromJson(x)) : undefined, + responseURIs: json.responseuris ? json.responseuris.map(x => ResponseURI_1.ResponseURI.fromJson(x)) : undefined, signDataMap, txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined, }); @@ -277,7 +277,7 @@ class IdentityUpdateRequestDetails { systemID: (details === null || details === void 0 ? void 0 : details.systemid) ? pbaas_1.IdentityID.fromAddress(details.systemid) : undefined, requestID: details === null || details === void 0 ? void 0 : details.requestid, expiryHeight: (details === null || details === void 0 ? void 0 : details.expiryheight) ? new bn_js_1.BN(details.expiryheight, 10) : undefined, - responseURIs: (details === null || details === void 0 ? void 0 : details.responseuris) ? details.responseuris.map(x => ResponseUri_1.ResponseUri.fromJson(x)) : undefined, + responseURIs: (details === null || details === void 0 ? void 0 : details.responseuris) ? details.responseuris.map(x => ResponseURI_1.ResponseURI.fromJson(x)) : undefined, txid: (details === null || details === void 0 ? void 0 : details.txid) ? Buffer.from(details.txid, 'hex').reverse() : undefined, }); } diff --git a/dist/vdxf/classes/index.d.ts b/dist/vdxf/classes/index.d.ts index f1f1268b..34197b54 100644 --- a/dist/vdxf/classes/index.d.ts +++ b/dist/vdxf/classes/index.d.ts @@ -22,7 +22,7 @@ export { ProvisioningDecisionInterface as LoginConsentProvisioningDecisionInterf export { ProvisioningResultInterface as LoginConsentProvisioningResultInterface } from "./provisioning/ProvisioningResult"; export * from "./identity/IdentityUpdateRequestDetails"; export * from "./identity/IdentityUpdateResponseDetails"; -export * from './ResponseUri'; +export * from './ResponseURI'; export * from './request/GenericRequest'; export * from './response/GenericResponse'; export * from './response/AppEncryptionResponseDetails'; diff --git a/dist/vdxf/classes/index.js b/dist/vdxf/classes/index.js index 6e7e444d..919a15d7 100644 --- a/dist/vdxf/classes/index.js +++ b/dist/vdxf/classes/index.js @@ -43,7 +43,7 @@ var ProvisioningResult_1 = require("./provisioning/ProvisioningResult"); Object.defineProperty(exports, "LoginConsentProvisioningResult", { enumerable: true, get: function () { return ProvisioningResult_1.ProvisioningResult; } }); __exportStar(require("./identity/IdentityUpdateRequestDetails"), exports); __exportStar(require("./identity/IdentityUpdateResponseDetails"), exports); -__exportStar(require("./ResponseUri"), exports); +__exportStar(require("./ResponseURI"), exports); __exportStar(require("./request/GenericRequest"), exports); __exportStar(require("./response/GenericResponse"), exports); __exportStar(require("./response/AppEncryptionResponseDetails"), exports); diff --git a/dist/vdxf/classes/login/LoginRequestDetails.d.ts b/dist/vdxf/classes/login/LoginRequestDetails.d.ts index a3949865..56536522 100644 --- a/dist/vdxf/classes/login/LoginRequestDetails.d.ts +++ b/dist/vdxf/classes/login/LoginRequestDetails.d.ts @@ -5,7 +5,7 @@ * including specific recipientConstraints and callback information. The request includes: * - Request ID for tracking the authentication session * - Permission sets defining what access the application is requesting - * - Callback URIs for post-authentication redirects + * - Response URIs for post-authentication redirects * - Optional expiry time for the authentication session * * The user's wallet can use these parameters to present a clear authentication request @@ -16,36 +16,29 @@ import { BigNumber } from "../../../utils/types/BigNumber"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import { CompactAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; +import { ResponseURI, ResponseURIJson } from "../ResponseURI"; export interface LoginRequestDetailsInterface { version?: BigNumber; flags?: BigNumber; requestID: string; recipientConstraints?: Array; - callbackURIs?: Array; + responseURIs?: Array; expiryTime?: BigNumber; } export interface RecipientConstraintJson { type: number; identity: CompactAddressObjectJson; } -export interface callbackURIsJson { - type: number; - uri: string; -} export interface RecipientConstraint { type: number; identity: CompactAddressObject; } -export interface callbackURIs { - type: number; - uri: string; -} export interface LoginRequestDetailsJson { version: number; requestid: string; flags: number; recipientConstraints?: Array; - callbackURIs?: Array; + responseURIs?: Array; expirytime?: number; } export declare class LoginRequestDetails implements SerializableEntity { @@ -53,22 +46,20 @@ export declare class LoginRequestDetails implements SerializableEntity { flags?: BigNumber; requestID: string; recipientConstraints?: Array; - callbackURIs?: Array; + responseURIs?: Array; expiryTime?: BigNumber; static DEFAULT_VERSION: import("bn.js"); static VERSION_FIRSTVALID: import("bn.js"); static VERSION_LASTVALID: import("bn.js"); static FLAG_HAS_RECIPIENT_CONSTRAINTS: import("bn.js"); - static FLAG_HAS_CALLBACK_URI: import("bn.js"); + static FLAG_HAS_RESPONSE_URIS: import("bn.js"); static FLAG_HAS_EXPIRY_TIME: import("bn.js"); static REQUIRED_ID: number; static REQUIRED_SYSTEM: number; static REQUIRED_PARENT: number; - static TYPE_WEBHOOK: number; - static TYPE_REDIRECT: number; constructor(request?: LoginRequestDetailsInterface); hasRecipentConstraints(): boolean; - hascallbackURIs(): boolean; + hasResponseURIs(): boolean; hasExpiryTime(): boolean; calcFlags(flags?: BigNumber): BigNumber; getByteLength(): number; diff --git a/dist/vdxf/classes/login/LoginRequestDetails.js b/dist/vdxf/classes/login/LoginRequestDetails.js index 69c8534c..de129951 100644 --- a/dist/vdxf/classes/login/LoginRequestDetails.js +++ b/dist/vdxf/classes/login/LoginRequestDetails.js @@ -6,7 +6,7 @@ * including specific recipientConstraints and callback information. The request includes: * - Request ID for tracking the authentication session * - Permission sets defining what access the application is requesting - * - Callback URIs for post-authentication redirects + * - Response URIs for post-authentication redirects * - Optional expiry time for the authentication session * * The user's wallet can use these parameters to present a clear authentication request @@ -22,21 +22,22 @@ const varuint_1 = require("../../../utils/varuint"); const vdxf_1 = require("../../../constants/vdxf"); const address_1 = require("../../../utils/address"); const CompactAddressObject_1 = require("../CompactAddressObject"); +const ResponseURI_1 = require("../ResponseURI"); class LoginRequestDetails { constructor(request) { this.version = (request === null || request === void 0 ? void 0 : request.version) || LoginRequestDetails.DEFAULT_VERSION; this.requestID = (request === null || request === void 0 ? void 0 : request.requestID) || ''; this.flags = (request === null || request === void 0 ? void 0 : request.flags) || new bn_js_1.BN(0, 10); this.recipientConstraints = (request === null || request === void 0 ? void 0 : request.recipientConstraints) || null; - this.callbackURIs = (request === null || request === void 0 ? void 0 : request.callbackURIs) || null; + this.responseURIs = (request === null || request === void 0 ? void 0 : request.responseURIs) || null; this.expiryTime = (request === null || request === void 0 ? void 0 : request.expiryTime) || null; this.setFlags(); } hasRecipentConstraints() { return this.flags.and(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS).eq(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); } - hascallbackURIs() { - return this.flags.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI).eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); + hasResponseURIs() { + return this.flags.and(LoginRequestDetails.FLAG_HAS_RESPONSE_URIS).eq(LoginRequestDetails.FLAG_HAS_RESPONSE_URIS); } hasExpiryTime() { return this.flags.and(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME).eq(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME); @@ -45,8 +46,8 @@ class LoginRequestDetails { if (this.recipientConstraints) { flags = flags.or(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); } - if (this.callbackURIs) { - flags = flags.or(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); + if (this.responseURIs) { + flags = flags.or(LoginRequestDetails.FLAG_HAS_RESPONSE_URIS); } if (this.expiryTime) { flags = flags.or(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME); @@ -64,12 +65,10 @@ class LoginRequestDetails { length += this.recipientConstraints[i].identity.getByteLength(); } } - if (this.hascallbackURIs()) { - length += varuint_1.default.encodingLength(this.callbackURIs.length); - for (let i = 0; i < this.callbackURIs.length; i++) { - length += varuint_1.default.encodingLength(this.callbackURIs[i].type); - length += varuint_1.default.encodingLength(Buffer.from(this.callbackURIs[i].uri, 'utf8').byteLength); - length += Buffer.from(this.callbackURIs[i].uri, 'utf8').byteLength; + if (this.hasResponseURIs()) { + length += varuint_1.default.encodingLength(this.responseURIs.length); + for (let i = 0; i < this.responseURIs.length; i++) { + length += this.responseURIs[i].getByteLength(); } } if (this.hasExpiryTime()) { @@ -88,11 +87,10 @@ class LoginRequestDetails { writer.writeSlice(this.recipientConstraints[i].identity.toBuffer()); } } - if (this.hascallbackURIs()) { - writer.writeCompactSize(this.callbackURIs.length); - for (let i = 0; i < this.callbackURIs.length; i++) { - writer.writeCompactSize(this.callbackURIs[i].type); - writer.writeVarSlice(Buffer.from(this.callbackURIs[i].uri, 'utf8')); + if (this.hasResponseURIs()) { + writer.writeCompactSize(this.responseURIs.length); + for (let i = 0; i < this.responseURIs.length; i++) { + writer.writeSlice(this.responseURIs[i].toBuffer()); } } if (this.hasExpiryTime()) { @@ -118,14 +116,13 @@ class LoginRequestDetails { }); } } - if (this.hascallbackURIs()) { - this.callbackURIs = []; + if (this.hasResponseURIs()) { + this.responseURIs = []; const callbackURIsLength = reader.readCompactSize(); for (let i = 0; i < callbackURIsLength; i++) { - this.callbackURIs.push({ - type: reader.readCompactSize(), - uri: reader.readVarSlice().toString('utf8') - }); + const newURI = new ResponseURI_1.ResponseURI(); + reader.offset = newURI.fromBuffer(reader.buffer, reader.offset); + this.responseURIs.push(newURI); } } if (this.hasExpiryTime()) { @@ -141,7 +138,7 @@ class LoginRequestDetails { requestid: this.requestID, recipientConstraints: this.recipientConstraints ? this.recipientConstraints.map(p => ({ type: p.type, identity: p.identity.toJson() })) : undefined, - callbackURIs: this.callbackURIs ? this.callbackURIs : undefined, + responseURIs: this.responseURIs ? this.responseURIs.map(x => x.toJson()) : undefined, expirytime: this.expiryTime ? this.expiryTime.toNumber() : undefined }; return retval; @@ -155,9 +152,8 @@ class LoginRequestDetails { loginDetails.recipientConstraints = data.recipientConstraints.map(p => ({ type: p.type, identity: CompactAddressObject_1.CompactAddressObject.fromJson(p.identity) })); } - if (loginDetails.hascallbackURIs() && data.callbackURIs) { - loginDetails.callbackURIs = data.callbackURIs.map(c => ({ type: c.type, - uri: c.uri })); + if (loginDetails.hasResponseURIs() && data.responseURIs) { + loginDetails.responseURIs = data.responseURIs.map(c => ResponseURI_1.ResponseURI.fromJson(c)); } if (loginDetails.hasExpiryTime() && data.expirytime) { loginDetails.expiryTime = new bn_js_1.BN(data.expirytime); @@ -182,8 +178,8 @@ class LoginRequestDetails { return false; } } - if (this.hascallbackURIs()) { - if (!this.callbackURIs || this.callbackURIs.length === 0) { + if (this.hasResponseURIs()) { + if (!this.responseURIs || this.responseURIs.length === 0) { return false; } } @@ -201,12 +197,9 @@ LoginRequestDetails.DEFAULT_VERSION = new bn_js_1.BN(1, 10); LoginRequestDetails.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); LoginRequestDetails.VERSION_LASTVALID = new bn_js_1.BN(1, 10); LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS = new bn_js_1.BN(1, 10); -LoginRequestDetails.FLAG_HAS_CALLBACK_URI = new bn_js_1.BN(2, 10); +LoginRequestDetails.FLAG_HAS_RESPONSE_URIS = new bn_js_1.BN(2, 10); LoginRequestDetails.FLAG_HAS_EXPIRY_TIME = new bn_js_1.BN(4, 10); // Recipient Constraint Types - What types of Identity can login, e.g. REQUIRED_SYSTEM and "VRSC" means only identities on the Verus chain can login LoginRequestDetails.REQUIRED_ID = 1; LoginRequestDetails.REQUIRED_SYSTEM = 2; LoginRequestDetails.REQUIRED_PARENT = 3; -// Callback URI Types -LoginRequestDetails.TYPE_WEBHOOK = 1; -LoginRequestDetails.TYPE_REDIRECT = 2; diff --git a/src/__tests__/constants/fixtures.ts b/src/__tests__/constants/fixtures.ts index 23dc2419..e636bfd0 100644 --- a/src/__tests__/constants/fixtures.ts +++ b/src/__tests__/constants/fixtures.ts @@ -454,4 +454,4 @@ export const TEST_IDENTITY_ID_1 = "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"; export const TEST_IDENTITY_ID_2 = "i84T3MWcb6zWcwgNZoU3TXtrUn9EqM84A4"; export const TEST_IDENTITY_ID_3 = "iJ5LnijKvp1wkL4hB3EsJ5kjcE4T8VL4hD"; -export const SERIALIZED_LOGIN_REQUEST_DETAILS = Buffer.from("07c72c5b342995a2186f96271e91686c5e942d13e1030101022a5fc0e9dedf4f1e8351fe652a140e9dd38fa5a9020102324afad29f51859c54050db854d2c9bb52acd9bd030102a0276f355ad37d8e5d2d10f16c1d051b6f6ead6201011c68747470733a2f2f6578616d706c652e636f6d2f63616c6c6261636bff9982d02aac020000", 'hex'); \ No newline at end of file +export const SERIALIZED_LOGIN_REQUEST_DETAILS = Buffer.from("07c72c5b342995a2186f96271e91686c5e942d13e1030101022a5fc0e9dedf4f1e8351fe652a140e9dd38fa5a9020102324afad29f51859c54050db854d2c9bb52acd9bd030102a0276f355ad37d8e5d2d10f16c1d051b6f6ead6201021c68747470733a2f2f6578616d706c652e636f6d2f63616c6c6261636bff9982d02aac020000", 'hex'); \ No newline at end of file diff --git a/src/__tests__/vdxf/identityupdateenvelope.test.ts b/src/__tests__/vdxf/identityupdateenvelope.test.ts index 6e7b371f..909e763e 100644 --- a/src/__tests__/vdxf/identityupdateenvelope.test.ts +++ b/src/__tests__/vdxf/identityupdateenvelope.test.ts @@ -1,7 +1,7 @@ import { IdentityUpdateRequestDetails } from "../../vdxf/classes/identity/IdentityUpdateRequestDetails"; import { IdentityUpdateResponseDetails } from "../../vdxf/classes/identity/IdentityUpdateResponseDetails"; import { ContentMultiMap } from "../../pbaas"; -import { ResponseUri } from "../../vdxf/classes/ResponseUri"; +import { ResponseURI } from "../../vdxf/classes/ResponseURI"; import { PartialSignData } from "../../pbaas/PartialSignData"; import { TEST_BASE_SIGN_DATA_WITH_MMR_DATA, @@ -64,7 +64,7 @@ describe("IdentityUpdate request/response details Serialization", () => { systemID: TEST_SYSTEMID, identity: TEST_PARTIAL_IDENTITY, expiryHeight: TEST_EXPIRYHEIGHT, - responseURIs: [ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_REDIRECT), ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_POST)], + responseURIs: [ResponseURI.fromUriString("http:/127.0.0.1:8000", ResponseURI.TYPE_REDIRECT), ResponseURI.fromUriString("http:/127.0.0.1:8000", ResponseURI.TYPE_POST)], signDataMap: TEST_SIGNDATA_MAP }; @@ -157,8 +157,8 @@ describe("IdentityUpdate request/response details Serialization", () => { testJsonSerialization(TEST_MMR_DATA); }); - test("Serialize/Deserialize ResponseUri to/from JSON", () => { - const responseUri = ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_REDIRECT); + test("Serialize/Deserialize ResponseURI to/from JSON", () => { + const responseUri = ResponseURI.fromUriString("http:/127.0.0.1:8000", ResponseURI.TYPE_REDIRECT); testJsonSerialization(responseUri); }); @@ -186,8 +186,8 @@ describe("IdentityUpdate request/response details Serialization", () => { requestid: TEST_REQUESTID.toString(), expiryheight: TEST_EXPIRYHEIGHT.toString(), responseuris: [ - ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_REDIRECT).toJson(), - ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_POST).toJson() + ResponseURI.fromUriString("http:/127.0.0.1:8000", ResponseURI.TYPE_REDIRECT).toJson(), + ResponseURI.fromUriString("http:/127.0.0.1:8000", ResponseURI.TYPE_POST).toJson() ], txid: TEST_TXID } @@ -203,8 +203,8 @@ describe("IdentityUpdate request/response details Serialization", () => { requestID: TEST_REQUESTID.toString(), expiryHeight: TEST_EXPIRYHEIGHT.toString(), responseuris: [ - ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_REDIRECT).toJson(), - ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_POST).toJson() + ResponseURI.fromUriString("http:/127.0.0.1:8000", ResponseURI.TYPE_REDIRECT).toJson(), + ResponseURI.fromUriString("http:/127.0.0.1:8000", ResponseURI.TYPE_POST).toJson() ], txid: TEST_TXID }; diff --git a/src/__tests__/vdxf/loginrequestdetails.test.ts b/src/__tests__/vdxf/loginrequestdetails.test.ts index b4e03fb3..49583b78 100644 --- a/src/__tests__/vdxf/loginrequestdetails.test.ts +++ b/src/__tests__/vdxf/loginrequestdetails.test.ts @@ -1,8 +1,8 @@ import { BN } from "bn.js"; import { - LoginRequestDetails, - LoginRequestDetailsInterface, -CompactAddressObject + LoginRequestDetails, + CompactAddressObject, + ResponseURI } from "../../vdxf/classes"; import { SERIALIZED_LOGIN_REQUEST_DETAILS, TEST_CHALLENGE_ID, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3 } from "../constants/fixtures"; @@ -22,7 +22,7 @@ describe("LoginRequestDetails", () => { expect(details.version.toString()).toBe("1"); expect(details.flags?.toString()).toBe("0"); expect(details.recipientConstraints).toBeNull(); - expect(details.callbackURIs).toBeNull(); + expect(details.responseURIs).toBeNull(); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); }); @@ -34,10 +34,7 @@ describe("LoginRequestDetails", () => { { type: LoginRequestDetails.REQUIRED_SYSTEM, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, { type: LoginRequestDetails.REQUIRED_PARENT, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } ], - callbackURIs: [{ - type: LoginRequestDetails.TYPE_WEBHOOK, - uri: "https://example.com/callback" - }], + responseURIs: [ResponseURI.fromUriString("https://example.com/callback", ResponseURI.TYPE_POST)], expiryTime: new BN(2938475938457) // 1 hour from now }); @@ -48,7 +45,7 @@ describe("LoginRequestDetails", () => { expect(newDetails.requestID).toBe(TEST_CHALLENGE_ID); expect(newDetails.recipientConstraints?.length).toBe(3); - expect(newDetails.callbackURIs?.length).toBe(1); + expect(newDetails.responseURIs?.length).toBe(1); expect(newDetails.expiryTime?.toString()).toBe("2938475938457"); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); @@ -64,7 +61,7 @@ describe("LoginRequestDetails", () => { expect(details.version.toString()).toBe("1"); expect(details.flags?.toString()).toBe("0"); expect(details.recipientConstraints).toBeNull(); - expect(details.callbackURIs).toBeNull(); + expect(details.responseURIs).toBeNull(); }); }); }); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 111addee..813dc56a 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -24,7 +24,7 @@ import { LoginRequestDetails, LoginResponseDetails, ProvisionIdentityDetails, - ResponseUri, + ResponseURI, VerusPayInvoiceDetails, UserDataRequestDetails, UserSpecificDataPacketDetails, @@ -214,8 +214,8 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { requestid: TEST_REQUESTID.toString(), expiryheight: TEST_EXPIRYHEIGHT.toString(), responseuris: [ - ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_REDIRECT).toJson(), - ResponseUri.fromUriString("http:/127.0.0.1:8000", ResponseUri.TYPE_POST).toJson() + ResponseURI.fromUriString("http:/127.0.0.1:8000", ResponseURI.TYPE_REDIRECT).toJson(), + ResponseURI.fromUriString("http:/127.0.0.1:8000", ResponseURI.TYPE_POST).toJson() ], txid: TEST_TXID } @@ -277,10 +277,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { { type: LoginRequestDetails.REQUIRED_SYSTEM, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, { type: LoginRequestDetails.REQUIRED_PARENT, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } ], - callbackURIs: [{ - type: LoginRequestDetails.TYPE_WEBHOOK, - uri: "https://example.com/callback" - }], + responseURIs: [ResponseURI.fromUriString("https://example.com/callback", ResponseURI.TYPE_POST)], expiryTime: new BN(2938475938457) }); diff --git a/src/vdxf/classes/ResponseUri.ts b/src/vdxf/classes/ResponseUri.ts index 891e0732..27a3bbdf 100644 --- a/src/vdxf/classes/ResponseUri.ts +++ b/src/vdxf/classes/ResponseUri.ts @@ -5,12 +5,12 @@ import varint from "../../utils/varint"; import varuint from "../../utils/varuint"; import bufferutils from "../../utils/bufferutils"; -export type ResponseUriJson = { +export type ResponseURIJson = { type: string; uri: string; } -export class ResponseUri implements SerializableEntity { +export class ResponseURI implements SerializableEntity { uri: Buffer; // utf8 uri string type: BigNumber; // type of place to send response @@ -39,8 +39,8 @@ export class ResponseUri implements SerializableEntity { return this.uri.toString('utf-8'); } - static fromUriString(str: string, type: BigNumber = ResponseUri.TYPE_REDIRECT): ResponseUri { - return new ResponseUri({ uri: Buffer.from(str, 'utf-8'), type }); + static fromUriString(str: string, type: BigNumber = ResponseURI.TYPE_REDIRECT): ResponseURI { + return new ResponseURI({ uri: Buffer.from(str, 'utf-8'), type }); } getByteLength(): number { @@ -76,15 +76,15 @@ export class ResponseUri implements SerializableEntity { return reader.offset; } - toJson(): ResponseUriJson { + toJson(): ResponseURIJson { return { type: this.type.toString(10), uri: this.getUriString() }; } - static fromJson(json: ResponseUriJson): ResponseUri { - return new ResponseUri({ + static fromJson(json: ResponseURIJson): ResponseURI { + return new ResponseURI({ type: new BN(json.type, 10), uri: Buffer.from(json.uri, 'utf-8') }); diff --git a/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts b/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts index 4c5be915..d5192f9e 100644 --- a/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts +++ b/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts @@ -8,7 +8,7 @@ import { PartialSignData, PartialSignDataCLIJson, PartialSignDataJson } from '.. import { BigNumber } from '../../../utils/types/BigNumber'; import { BN } from 'bn.js'; import { ContentMultiMapJsonValue, IdentityID, VerusCLIVerusIDJson, VerusCLIVerusIDJsonBase } from '../../../pbaas'; -import { ResponseUri, ResponseUriJson } from '../ResponseUri'; +import { ResponseURI, ResponseURIJson } from '../ResponseURI'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { UINT_256_LENGTH } from '../../../constants/pbaas'; @@ -24,7 +24,7 @@ export type IdentityUpdateRequestDetailsJson = { identity?: VerusCLIVerusIDJson; expiryheight?: string; systemid?: string; - responseuris?: Array; + responseuris?: Array; signdatamap?: { [key: string]: PartialSignDataJson }; txid?: string; } @@ -35,7 +35,7 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { identity?: PartialIdentity; // Parts of the identity to update expiryHeight?: BigNumber; // Time after which update request will no longer be accepted systemID?: IdentityID; // System that identity should be updated on (will default to VRSC/VRSCTEST if not present, depending on testnet flag) - responseURIs?: Array; // Array of uris + type to send response to (type can be post, redirect, etc. depending on how response is expected to be received) + responseURIs?: Array; // Array of uris + type to send response to (type can be post, redirect, etc. depending on how response is expected to be received) signDataMap?: SignDataMap; // Map of data to pass to signdata txid?: Buffer; // 32 byte transaction ID of transaction that must be spent to update identity, on same system asked for in request // stored in natural order, if displayed as text make sure to reverse! @@ -56,7 +56,7 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { expiryHeight?: BigNumber, systemID?: IdentityID, txid?: Buffer, - responseURIs?: Array, + responseURIs?: Array, signDataMap?: SignDataMap }) { this.flags = data && data.flags ? data.flags : new BN("0", 10); @@ -190,7 +190,7 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { if (this.containsResponseUris()) { length += varuint.encodingLength(this.responseURIs.length); length += this.responseURIs.reduce( - (sum: number, current: ResponseUri) => sum + current.getByteLength(), + (sum: number, current: ResponseURI) => sum + current.getByteLength(), 0 ); } @@ -272,7 +272,7 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { const urisLength = reader.readCompactSize(); for (let i = 0; i < urisLength; i++) { - const uri = new ResponseUri(); + const uri = new ResponseURI(); reader.offset = uri.fromBuffer( reader.buffer, reader.offset @@ -339,7 +339,7 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { identity: json.identity ? PartialIdentity.fromJson(json.identity) : undefined, expiryHeight: json.expiryheight ? new BN(json.expiryheight, 10) : undefined, systemID: json.systemid ? IdentityID.fromAddress(json.systemid) : undefined, - responseURIs: json.responseuris ? json.responseuris.map(x => ResponseUri.fromJson(x)) : undefined, + responseURIs: json.responseuris ? json.responseuris.map(x => ResponseURI.fromJson(x)) : undefined, signDataMap, txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined, }) @@ -393,7 +393,7 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { systemID: details?.systemid ? IdentityID.fromAddress(details.systemid) : undefined, requestID: details?.requestid, expiryHeight: details?.expiryheight ? new BN(details.expiryheight, 10) : undefined, - responseURIs: details?.responseuris ? details.responseuris.map(x => ResponseUri.fromJson(x)) : undefined, + responseURIs: details?.responseuris ? details.responseuris.map(x => ResponseURI.fromJson(x)) : undefined, txid: details?.txid ? Buffer.from(details.txid, 'hex').reverse() : undefined, }) } diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index 08a70bfa..0b846083 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -26,7 +26,7 @@ export { ProvisioningResultInterface as LoginConsentProvisioningResultInterface export * from "./identity/IdentityUpdateRequestDetails"; export * from "./identity/IdentityUpdateResponseDetails"; -export * from './ResponseUri'; +export * from './ResponseURI'; export * from './request/GenericRequest'; export * from './response/GenericResponse'; export * from './response/AppEncryptionResponseDetails' diff --git a/src/vdxf/classes/login/LoginRequestDetails.ts b/src/vdxf/classes/login/LoginRequestDetails.ts index ee233732..c7da5873 100644 --- a/src/vdxf/classes/login/LoginRequestDetails.ts +++ b/src/vdxf/classes/login/LoginRequestDetails.ts @@ -6,7 +6,7 @@ * including specific recipientConstraints and callback information. The request includes: * - Request ID for tracking the authentication session * - Permission sets defining what access the application is requesting - * - Callback URIs for post-authentication redirects + * - Response URIs for post-authentication redirects * - Optional expiry time for the authentication session * * The user's wallet can use these parameters to present a clear authentication request @@ -23,13 +23,14 @@ import varuint from "../../../utils/varuint"; import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../../../constants/vdxf'; import { fromBase58Check, toBase58Check } from "../../../utils/address"; import { CompactAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; +import { ResponseURI, ResponseURIJson } from "../ResponseURI"; export interface LoginRequestDetailsInterface { version?: BigNumber; flags?: BigNumber; requestID: string; recipientConstraints?: Array; - callbackURIs?: Array; + responseURIs?: Array; expiryTime?: BigNumber; // UNIX Timestamp } @@ -38,27 +39,17 @@ export interface RecipientConstraintJson { identity: CompactAddressObjectJson; } -export interface callbackURIsJson { - type: number; - uri: string; -} - export interface RecipientConstraint { type: number; identity: CompactAddressObject; } -export interface callbackURIs { - type: number; - uri: string; -} - export interface LoginRequestDetailsJson { version: number; requestid: string; flags: number; recipientConstraints?: Array; - callbackURIs?: Array; + responseURIs?: Array; expirytime?: number; } @@ -67,7 +58,7 @@ export class LoginRequestDetails implements SerializableEntity { flags?: BigNumber; requestID: string; recipientConstraints?: Array; - callbackURIs?: Array; + responseURIs?: Array; expiryTime?: BigNumber; // UNIX Timestamp // Version @@ -76,7 +67,7 @@ export class LoginRequestDetails implements SerializableEntity { static VERSION_LASTVALID = new BN(1, 10) static FLAG_HAS_RECIPIENT_CONSTRAINTS = new BN(1, 10); - static FLAG_HAS_CALLBACK_URI = new BN(2, 10); + static FLAG_HAS_RESPONSE_URIS = new BN(2, 10); static FLAG_HAS_EXPIRY_TIME = new BN(4, 10); // Recipient Constraint Types - What types of Identity can login, e.g. REQUIRED_SYSTEM and "VRSC" means only identities on the Verus chain can login @@ -84,10 +75,6 @@ export class LoginRequestDetails implements SerializableEntity { static REQUIRED_SYSTEM = 2; static REQUIRED_PARENT = 3; - // Callback URI Types - static TYPE_WEBHOOK = 1; - static TYPE_REDIRECT = 2; - constructor( request?: LoginRequestDetailsInterface ) { @@ -95,7 +82,7 @@ export class LoginRequestDetails implements SerializableEntity { this.requestID = request?.requestID || ''; this.flags = request?.flags || new BN(0, 10); this.recipientConstraints = request?.recipientConstraints || null; - this.callbackURIs = request?.callbackURIs || null; + this.responseURIs = request?.responseURIs || null; this.expiryTime = request?.expiryTime || null; this.setFlags(); @@ -105,8 +92,8 @@ export class LoginRequestDetails implements SerializableEntity { return this.flags.and(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS).eq(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); } - hascallbackURIs(): boolean { - return this.flags.and(LoginRequestDetails.FLAG_HAS_CALLBACK_URI).eq(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); + hasResponseURIs(): boolean { + return this.flags.and(LoginRequestDetails.FLAG_HAS_RESPONSE_URIS).eq(LoginRequestDetails.FLAG_HAS_RESPONSE_URIS); } hasExpiryTime(): boolean { @@ -114,12 +101,11 @@ export class LoginRequestDetails implements SerializableEntity { } calcFlags(flags: BigNumber = this.flags): BigNumber { - if (this.recipientConstraints) { flags = flags.or(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); } - if (this.callbackURIs) { - flags = flags.or(LoginRequestDetails.FLAG_HAS_CALLBACK_URI); + if (this.responseURIs) { + flags = flags.or(LoginRequestDetails.FLAG_HAS_RESPONSE_URIS); } if (this.expiryTime) { flags = flags.or(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME); @@ -128,28 +114,25 @@ export class LoginRequestDetails implements SerializableEntity { } getByteLength(): number { - let length = 0; length += varuint.encodingLength(this.flags.toNumber()); length += HASH160_BYTE_LENGTH; if (this.hasRecipentConstraints()) { - length += varuint.encodingLength(this.recipientConstraints.length); - for (let i = 0; i < this.recipientConstraints.length; i++) { - length += varuint.encodingLength(this.recipientConstraints[i].type); - length += this.recipientConstraints[i].identity.getByteLength(); - } + for (let i = 0; i < this.recipientConstraints.length; i++) { + length += varuint.encodingLength(this.recipientConstraints[i].type); + length += this.recipientConstraints[i].identity.getByteLength(); + } } - if (this.hascallbackURIs()) { - length += varuint.encodingLength(this.callbackURIs.length); - for (let i = 0; i < this.callbackURIs.length; i++) { - length += varuint.encodingLength(this.callbackURIs[i].type); - length += varuint.encodingLength(Buffer.from(this.callbackURIs[i].uri, 'utf8').byteLength); - length += Buffer.from(this.callbackURIs[i].uri, 'utf8').byteLength; - } + if (this.hasResponseURIs()) { + length += varuint.encodingLength(this.responseURIs.length); + + for (let i = 0; i < this.responseURIs.length; i++) { + length += this.responseURIs[i].getByteLength(); + } } if (this.hasExpiryTime()) { @@ -160,26 +143,24 @@ export class LoginRequestDetails implements SerializableEntity { } toBuffer(): Buffer { - const writer = new bufferutils.BufferWriter(Buffer.alloc(this.getByteLength())) writer.writeCompactSize(this.flags.toNumber()); writer.writeSlice(fromBase58Check(this.requestID).hash); if (this.hasRecipentConstraints()) { - - writer.writeCompactSize(this.recipientConstraints.length); - for (let i = 0; i < this.recipientConstraints.length; i++) { - writer.writeCompactSize(this.recipientConstraints[i].type); - writer.writeSlice(this.recipientConstraints[i].identity.toBuffer()); - } + writer.writeCompactSize(this.recipientConstraints.length); + for (let i = 0; i < this.recipientConstraints.length; i++) { + writer.writeCompactSize(this.recipientConstraints[i].type); + writer.writeSlice(this.recipientConstraints[i].identity.toBuffer()); + } } - if (this.hascallbackURIs()) { - writer.writeCompactSize(this.callbackURIs.length); - for (let i = 0; i < this.callbackURIs.length; i++) { - writer.writeCompactSize(this.callbackURIs[i].type); - writer.writeVarSlice(Buffer.from(this.callbackURIs[i].uri, 'utf8')); + if (this.hasResponseURIs()) { + writer.writeCompactSize(this.responseURIs.length); + + for (let i = 0; i < this.responseURIs.length; i++) { + writer.writeSlice(this.responseURIs[i].toBuffer()); } } @@ -199,6 +180,7 @@ export class LoginRequestDetails implements SerializableEntity { if (this.hasRecipentConstraints()) { this.recipientConstraints = []; const recipientConstraintsLength = reader.readCompactSize(); + for (let i = 0; i < recipientConstraintsLength; i++) { const compactId = new CompactAddressObject(); const type = reader.readCompactSize(); @@ -211,14 +193,14 @@ export class LoginRequestDetails implements SerializableEntity { } } - if (this.hascallbackURIs()) { - this.callbackURIs = []; + if (this.hasResponseURIs()) { + this.responseURIs = []; const callbackURIsLength = reader.readCompactSize(); + for (let i = 0; i < callbackURIsLength; i++) { - this.callbackURIs.push({ - type: reader.readCompactSize(), - uri: reader.readVarSlice().toString('utf8') - }); + const newURI = new ResponseURI(); + reader.offset = newURI.fromBuffer(reader.buffer, reader.offset); + this.responseURIs.push(newURI); } } @@ -238,7 +220,7 @@ export class LoginRequestDetails implements SerializableEntity { requestid: this.requestID, recipientConstraints: this.recipientConstraints ? this.recipientConstraints.map(p => ({type: p.type, identity: p.identity.toJson()})) : undefined, - callbackURIs: this.callbackURIs ? this.callbackURIs : undefined, + responseURIs: this.responseURIs ? this.responseURIs.map(x => x.toJson()) : undefined, expirytime: this.expiryTime ? this.expiryTime.toNumber() : undefined }; @@ -258,9 +240,8 @@ export class LoginRequestDetails implements SerializableEntity { identity: CompactAddressObject.fromJson(p.identity)})); } - if(loginDetails.hascallbackURIs() && data.callbackURIs) { - loginDetails.callbackURIs = data.callbackURIs.map(c => ({type: c.type, - uri: c.uri})); + if(loginDetails.hasResponseURIs() && data.responseURIs) { + loginDetails.responseURIs = data.responseURIs.map(c => ResponseURI.fromJson(c)); } if(loginDetails.hasExpiryTime() && data.expirytime) { @@ -291,8 +272,8 @@ export class LoginRequestDetails implements SerializableEntity { } } - if (this.hascallbackURIs()) { - if (!this.callbackURIs || this.callbackURIs.length === 0) { + if (this.hasResponseURIs()) { + if (!this.responseURIs || this.responseURIs.length === 0) { return false; } } From eb71c00f06e6de54b3526c681696cf87ebbbe245 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Mon, 1 Dec 2025 14:35:22 +0100 Subject: [PATCH 089/123] Rename LoginRequestDetails and LoginResponseDetails to AuthenticationRequestDetails and AuthenticationResponseDetails --- dist/constants/ordinals/ordinals.d.ts | 4 +- dist/constants/ordinals/ordinals.js | 6 +- dist/constants/ordinals/register.js | 8 +- dist/constants/ordinals/types.d.ts | 6 +- dist/vdxf/classes/index.d.ts | 4 +- dist/vdxf/classes/index.js | 4 +- .../login/AuthenticationRequestDetails.d.ts | 72 ++++++ .../login/AuthenticationRequestDetails.js | 205 ++++++++++++++++++ .../login/AuthenticationResponseDetails.d.ts | 20 ++ .../login/AuthenticationResponseDetails.js | 54 +++++ ...uthenticationRequestOrdinalVdxfObject.d.ts | 9 + .../AuthenticationRequestOrdinalVdxfObject.js | 22 ++ ...thenticationResponseOrdinalVdxfObject.d.ts | 9 + ...AuthenticationResponseOrdinalVdxfObject.js | 22 ++ dist/vdxf/classes/ordinals/index.d.ts | 4 +- dist/vdxf/classes/ordinals/index.js | 4 +- dist/vdxf/keys.d.ts | 4 +- dist/vdxf/keys.js | 22 +- src/__tests__/constants/fixtures.ts | 2 +- ...s => authenticationrequestdetails.test.ts} | 24 +- ... => authenticationresponsedetails.test.ts} | 8 +- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 56 ++--- src/constants/ordinals/ordinals.ts | 4 +- src/constants/ordinals/register.ts | 12 +- src/constants/ordinals/types.ts | 16 +- src/vdxf/classes/index.ts | 4 +- ...ils.ts => AuthenticationRequestDetails.ts} | 30 +-- ...ls.ts => AuthenticationResponseDetails.ts} | 10 +- .../AuthenticationRequestOrdinalVdxfObject.ts | 29 +++ ...AuthenticationResponseOrdinalVdxfObject.ts | 29 +++ .../LoginRequestDetailsOrdinalVdxfObject.ts | 29 --- .../LoginResponseDetailsOrdinalVdxfObject.ts | 29 --- src/vdxf/classes/ordinals/index.ts | 4 +- src/vdxf/keys.ts | 20 +- 34 files changed, 599 insertions(+), 186 deletions(-) create mode 100644 dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts create mode 100644 dist/vdxf/classes/login/AuthenticationRequestDetails.js create mode 100644 dist/vdxf/classes/login/AuthenticationResponseDetails.d.ts create mode 100644 dist/vdxf/classes/login/AuthenticationResponseDetails.js create mode 100644 dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.js create mode 100644 dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.js rename src/__tests__/vdxf/{loginrequestdetails.test.ts => authenticationrequestdetails.test.ts} (58%) rename src/__tests__/vdxf/{loginresponsedetails.test.ts => authenticationresponsedetails.test.ts} (73%) rename src/vdxf/classes/login/{LoginRequestDetails.ts => AuthenticationRequestDetails.ts} (86%) rename src/vdxf/classes/login/{LoginResponseDetails.ts => AuthenticationResponseDetails.ts} (85%) create mode 100644 src/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.ts create mode 100644 src/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.ts delete mode 100644 src/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.ts delete mode 100644 src/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.ts diff --git a/dist/constants/ordinals/ordinals.d.ts b/dist/constants/ordinals/ordinals.d.ts index 6c9c2369..5d930738 100644 --- a/dist/constants/ordinals/ordinals.d.ts +++ b/dist/constants/ordinals/ordinals.d.ts @@ -3,8 +3,8 @@ export declare const VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING: import("bn.js"); export declare const VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY: import("bn.js"); export declare const VDXF_ORDINAL_DATA_DESCRIPTOR: import("bn.js"); export declare const VDXF_ORDINAL_VERUSPAY_INVOICE: import("bn.js"); -export declare const VDXF_ORDINAL_LOGIN_REQUEST: import("bn.js"); -export declare const VDXF_ORDINAL_LOGIN_RESPONSE: import("bn.js"); +export declare const VDXF_ORDINAL_AUTHENTICATION_REQUEST: import("bn.js"); +export declare const VDXF_ORDINAL_AUTHENTICATION_RESPONSE: import("bn.js"); export declare const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST: import("bn.js"); export declare const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE: import("bn.js"); export declare const VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS: import("bn.js"); diff --git a/dist/constants/ordinals/ordinals.js b/dist/constants/ordinals/ordinals.js index c639aa92..377533af 100644 --- a/dist/constants/ordinals/ordinals.js +++ b/dist/constants/ordinals/ordinals.js @@ -1,14 +1,14 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.VDXF_ORDINAL_DATA_RESPONSE = exports.VDXF_ORDINAL_USER_DATA_REQUEST = exports.VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET = exports.VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE = exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = exports.VDXF_ORDINAL_LOGIN_RESPONSE = exports.VDXF_ORDINAL_LOGIN_REQUEST = exports.VDXF_ORDINAL_VERUSPAY_INVOICE = exports.VDXF_ORDINAL_DATA_DESCRIPTOR = exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = void 0; +exports.VDXF_ORDINAL_DATA_RESPONSE = exports.VDXF_ORDINAL_USER_DATA_REQUEST = exports.VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET = exports.VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE = exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = exports.VDXF_ORDINAL_AUTHENTICATION_RESPONSE = exports.VDXF_ORDINAL_AUTHENTICATION_REQUEST = exports.VDXF_ORDINAL_VERUSPAY_INVOICE = exports.VDXF_ORDINAL_DATA_DESCRIPTOR = exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = void 0; const bn_js_1 = require("bn.js"); exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = new bn_js_1.BN(102, 10); exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new bn_js_1.BN(103, 10); exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = new bn_js_1.BN(104, 10); exports.VDXF_ORDINAL_DATA_DESCRIPTOR = new bn_js_1.BN(0, 10); exports.VDXF_ORDINAL_VERUSPAY_INVOICE = new bn_js_1.BN(1, 10); -exports.VDXF_ORDINAL_LOGIN_REQUEST = new bn_js_1.BN(2, 10); -exports.VDXF_ORDINAL_LOGIN_RESPONSE = new bn_js_1.BN(3, 10); +exports.VDXF_ORDINAL_AUTHENTICATION_REQUEST = new bn_js_1.BN(2, 10); +exports.VDXF_ORDINAL_AUTHENTICATION_RESPONSE = new bn_js_1.BN(3, 10); exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new bn_js_1.BN(4, 10); exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new bn_js_1.BN(5, 10); exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new bn_js_1.BN(6, 10); diff --git a/dist/constants/ordinals/register.js b/dist/constants/ordinals/register.js index 13c11dc7..956d7bb6 100644 --- a/dist/constants/ordinals/register.js +++ b/dist/constants/ordinals/register.js @@ -9,8 +9,8 @@ const UserDataRequestOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/ const UserSpecificDataPacketDetailsOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject"); const IdentityUpdateRequestOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject"); const IdentityUpdateResponseOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject"); -const LoginRequestDetailsOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject"); -const LoginResponseDetailsOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject"); +const AuthenticationRequestOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject"); +const AuthenticationResponseOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject"); const OrdinalVdxfObjectOrdinalMap_1 = require("../../vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap"); const ProvisionIdentityDetailsOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject"); const VerusPayInvoiceOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject"); @@ -19,8 +19,8 @@ const AppEncryptionResponseOrdinalVdxfObject_1 = require("../../vdxf/classes/ord const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), vdxf_1.DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVdxfObject_1.DataDescriptorOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), vdxf_1.VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid, VerusPayInvoiceOrdinalVdxfObject_1.VerusPayInvoiceOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_LOGIN_REQUEST.toNumber(), vdxf_1.LOGIN_REQUEST_DETAILS_VDXF_KEY.vdxfid, LoginRequestDetailsOrdinalVdxfObject_1.LoginRequestOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_LOGIN_RESPONSE.toNumber(), vdxf_1.LOGIN_RESPONSE_DETAILS_VDXF_KEY.vdxfid, LoginResponseDetailsOrdinalVdxfObject_1.LoginResponseOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_AUTHENTICATION_REQUEST.toNumber(), vdxf_1.AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY.vdxfid, AuthenticationRequestOrdinalVdxfObject_1.AuthenticationRequestOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_AUTHENTICATION_RESPONSE.toNumber(), vdxf_1.AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY.vdxfid, AuthenticationResponseOrdinalVdxfObject_1.AuthenticationResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), vdxf_1.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVdxfObject_1.IdentityUpdateRequestOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), vdxf_1.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject_1.IdentityUpdateResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), vdxf_1.PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVdxfObject_1.ProvisionIdentityDetailsOrdinalVdxfObject, false); diff --git a/dist/constants/ordinals/types.d.ts b/dist/constants/ordinals/types.d.ts index 2ff5b1a5..0f33fef8 100644 --- a/dist/constants/ordinals/types.d.ts +++ b/dist/constants/ordinals/types.d.ts @@ -1,6 +1,6 @@ import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; -import { AppEncryptionRequestDetails, AppEncryptionRequestJson, IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, LoginRequestDetails, LoginRequestDetailsJson, LoginResponseDetails, LoginResponseDetailsJson, ProvisionIdentityDetails, ProvisionIdentityDetailsJson, UserDataRequestDetails, UserDataRequestJson, UserSpecificDataPacketDetails, UserSpecificDataPacketDetailsJson, VerusPayInvoiceDetails, AppEncryptionResponseDetails, AppEncryptionResponseDetailsJson } from "../../vdxf/classes"; +import { AppEncryptionRequestDetails, AppEncryptionRequestJson, IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, AuthenticationRequestDetails, AuthenticationRequestDetailsJson, AuthenticationResponseDetails, AuthenticationResponseDetailsJson, ProvisionIdentityDetails, ProvisionIdentityDetailsJson, UserDataRequestDetails, UserDataRequestJson, UserSpecificDataPacketDetails, UserSpecificDataPacketDetailsJson, VerusPayInvoiceDetails, AppEncryptionResponseDetails, AppEncryptionResponseDetailsJson } from "../../vdxf/classes"; import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; import { DataPacketResponse, DataResponseJson } from "../../vdxf/classes/datapacket/DataPacketResponse"; -export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails | LoginRequestDetails | LoginResponseDetails | ProvisionIdentityDetails | AppEncryptionRequestDetails | DataPacketResponse | UserDataRequestDetails | UserSpecificDataPacketDetails | AppEncryptionResponseDetails; -export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson | LoginRequestDetailsJson | LoginResponseDetailsJson | ProvisionIdentityDetailsJson | AppEncryptionRequestJson | DataResponseJson | UserDataRequestJson | UserSpecificDataPacketDetailsJson | AppEncryptionResponseDetailsJson; +export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails | AuthenticationRequestDetails | AuthenticationResponseDetails | ProvisionIdentityDetails | AppEncryptionRequestDetails | DataPacketResponse | UserDataRequestDetails | UserSpecificDataPacketDetails | AppEncryptionResponseDetails; +export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson | AuthenticationRequestDetailsJson | AuthenticationResponseDetailsJson | ProvisionIdentityDetailsJson | AppEncryptionRequestJson | DataResponseJson | UserDataRequestJson | UserSpecificDataPacketDetailsJson | AppEncryptionResponseDetailsJson; diff --git a/dist/vdxf/classes/index.d.ts b/dist/vdxf/classes/index.d.ts index 34197b54..6a9b4d46 100644 --- a/dist/vdxf/classes/index.d.ts +++ b/dist/vdxf/classes/index.d.ts @@ -33,8 +33,8 @@ export { ProvisioningTxid } from './provisioning/ProvisioningResult'; export { Context } from './Context'; export { DataCategory } from './PersonalProfile'; export * from './requestobjects/UserDataRequestDetails'; -export * from './login/LoginRequestDetails'; -export * from './login/LoginResponseDetails'; +export * from './login/AuthenticationRequestDetails'; +export * from './login/AuthenticationResponseDetails'; export * from './requestobjects/ProvisionIdentityDetails'; export * from './requestobjects/AppEncryptionRequestDetails'; export * from './requestobjects/UserSpecificDataPacketDetails'; diff --git a/dist/vdxf/classes/index.js b/dist/vdxf/classes/index.js index 919a15d7..2e604773 100644 --- a/dist/vdxf/classes/index.js +++ b/dist/vdxf/classes/index.js @@ -65,8 +65,8 @@ Object.defineProperty(exports, "Context", { enumerable: true, get: function () { var PersonalProfile_1 = require("./PersonalProfile"); Object.defineProperty(exports, "DataCategory", { enumerable: true, get: function () { return PersonalProfile_1.DataCategory; } }); __exportStar(require("./requestobjects/UserDataRequestDetails"), exports); -__exportStar(require("./login/LoginRequestDetails"), exports); -__exportStar(require("./login/LoginResponseDetails"), exports); +__exportStar(require("./login/AuthenticationRequestDetails"), exports); +__exportStar(require("./login/AuthenticationResponseDetails"), exports); __exportStar(require("./requestobjects/ProvisionIdentityDetails"), exports); __exportStar(require("./requestobjects/AppEncryptionRequestDetails"), exports); __exportStar(require("./requestobjects/UserSpecificDataPacketDetails"), exports); diff --git a/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts b/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts new file mode 100644 index 00000000..e8842275 --- /dev/null +++ b/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts @@ -0,0 +1,72 @@ +/** + * AuthenticationRequestDetails - Class for handling application login and authentication requests + * + * This class is used when an application is requesting authentication or login from the user, + * including specific recipientConstraints and callback information. The request includes: + * - Request ID for tracking the authentication session + * - Permission sets defining what access the application is requesting + * - Response URIs for post-authentication redirects + * - Optional expiry time for the authentication session + * + * The user's wallet can use these parameters to present a clear authentication request + * to the user, showing exactly what recipientConstraints are being requested and where they will + * be redirected after successful authentication. This enables secure, user-controlled + * authentication flows with granular permission management. + */ +import { BigNumber } from "../../../utils/types/BigNumber"; +import { SerializableEntity } from "../../../utils/types/SerializableEntity"; +import { CompactAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; +import { ResponseURI, ResponseURIJson } from "../ResponseURI"; +export interface AuthenticationRequestDetailsInterface { + version?: BigNumber; + flags?: BigNumber; + requestID: string; + recipientConstraints?: Array; + responseURIs?: Array; + expiryTime?: BigNumber; +} +export interface RecipientConstraintJson { + type: number; + identity: CompactAddressObjectJson; +} +export interface RecipientConstraint { + type: number; + identity: CompactAddressObject; +} +export interface AuthenticationRequestDetailsJson { + version: number; + requestid: string; + flags: number; + recipientConstraints?: Array; + responseURIs?: Array; + expirytime?: number; +} +export declare class AuthenticationRequestDetails implements SerializableEntity { + version: BigNumber; + flags?: BigNumber; + requestID: string; + recipientConstraints?: Array; + responseURIs?: Array; + expiryTime?: BigNumber; + static DEFAULT_VERSION: import("bn.js"); + static VERSION_FIRSTVALID: import("bn.js"); + static VERSION_LASTVALID: import("bn.js"); + static FLAG_HAS_RECIPIENT_CONSTRAINTS: import("bn.js"); + static FLAG_HAS_RESPONSE_URIS: import("bn.js"); + static FLAG_HAS_EXPIRY_TIME: import("bn.js"); + static REQUIRED_ID: number; + static REQUIRED_SYSTEM: number; + static REQUIRED_PARENT: number; + constructor(request?: AuthenticationRequestDetailsInterface); + hasRecipentConstraints(): boolean; + hasResponseURIs(): boolean; + hasExpiryTime(): boolean; + calcFlags(flags?: BigNumber): BigNumber; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): AuthenticationRequestDetailsJson; + static fromJson(data: AuthenticationRequestDetailsJson): AuthenticationRequestDetails; + setFlags(): void; + isValid(): boolean; +} diff --git a/dist/vdxf/classes/login/AuthenticationRequestDetails.js b/dist/vdxf/classes/login/AuthenticationRequestDetails.js new file mode 100644 index 00000000..294a6503 --- /dev/null +++ b/dist/vdxf/classes/login/AuthenticationRequestDetails.js @@ -0,0 +1,205 @@ +"use strict"; +/** + * AuthenticationRequestDetails - Class for handling application login and authentication requests + * + * This class is used when an application is requesting authentication or login from the user, + * including specific recipientConstraints and callback information. The request includes: + * - Request ID for tracking the authentication session + * - Permission sets defining what access the application is requesting + * - Response URIs for post-authentication redirects + * - Optional expiry time for the authentication session + * + * The user's wallet can use these parameters to present a clear authentication request + * to the user, showing exactly what recipientConstraints are being requested and where they will + * be redirected after successful authentication. This enables secure, user-controlled + * authentication flows with granular permission management. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AuthenticationRequestDetails = void 0; +const bufferutils_1 = require("../../../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const varuint_1 = require("../../../utils/varuint"); +const vdxf_1 = require("../../../constants/vdxf"); +const address_1 = require("../../../utils/address"); +const CompactAddressObject_1 = require("../CompactAddressObject"); +const ResponseURI_1 = require("../ResponseURI"); +class AuthenticationRequestDetails { + constructor(request) { + this.version = (request === null || request === void 0 ? void 0 : request.version) || AuthenticationRequestDetails.DEFAULT_VERSION; + this.requestID = (request === null || request === void 0 ? void 0 : request.requestID) || ''; + this.flags = (request === null || request === void 0 ? void 0 : request.flags) || new bn_js_1.BN(0, 10); + this.recipientConstraints = (request === null || request === void 0 ? void 0 : request.recipientConstraints) || null; + this.responseURIs = (request === null || request === void 0 ? void 0 : request.responseURIs) || null; + this.expiryTime = (request === null || request === void 0 ? void 0 : request.expiryTime) || null; + this.setFlags(); + } + hasRecipentConstraints() { + return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS).eq(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); + } + hasResponseURIs() { + return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS).eq(AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS); + } + hasExpiryTime() { + return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME).eq(AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME); + } + calcFlags(flags = this.flags) { + if (this.recipientConstraints) { + flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); + } + if (this.responseURIs) { + flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS); + } + if (this.expiryTime) { + flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME); + } + return flags; + } + getByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.flags.toNumber()); + length += vdxf_1.HASH160_BYTE_LENGTH; + if (this.hasRecipentConstraints()) { + length += varuint_1.default.encodingLength(this.recipientConstraints.length); + for (let i = 0; i < this.recipientConstraints.length; i++) { + length += varuint_1.default.encodingLength(this.recipientConstraints[i].type); + length += this.recipientConstraints[i].identity.getByteLength(); + } + } + if (this.hasResponseURIs()) { + length += varuint_1.default.encodingLength(this.responseURIs.length); + for (let i = 0; i < this.responseURIs.length; i++) { + length += this.responseURIs[i].getByteLength(); + } + } + if (this.hasExpiryTime()) { + length += varuint_1.default.encodingLength(this.expiryTime.toNumber()); + } + return length; + } + toBuffer() { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeCompactSize(this.flags.toNumber()); + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + if (this.hasRecipentConstraints()) { + writer.writeCompactSize(this.recipientConstraints.length); + for (let i = 0; i < this.recipientConstraints.length; i++) { + writer.writeCompactSize(this.recipientConstraints[i].type); + writer.writeSlice(this.recipientConstraints[i].identity.toBuffer()); + } + } + if (this.hasResponseURIs()) { + writer.writeCompactSize(this.responseURIs.length); + for (let i = 0; i < this.responseURIs.length; i++) { + writer.writeSlice(this.responseURIs[i].toBuffer()); + } + } + if (this.hasExpiryTime()) { + writer.writeCompactSize(this.expiryTime.toNumber()); + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + this.flags = new bn_js_1.BN(reader.readCompactSize()); + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + if (this.hasRecipentConstraints()) { + this.recipientConstraints = []; + const recipientConstraintsLength = reader.readCompactSize(); + for (let i = 0; i < recipientConstraintsLength; i++) { + const compactId = new CompactAddressObject_1.CompactAddressObject(); + const type = reader.readCompactSize(); + const identityOffset = reader.offset; + reader.offset = compactId.fromBuffer(buffer, identityOffset); + this.recipientConstraints.push({ + type: type, + identity: compactId + }); + } + } + if (this.hasResponseURIs()) { + this.responseURIs = []; + const callbackURIsLength = reader.readCompactSize(); + for (let i = 0; i < callbackURIsLength; i++) { + const newURI = new ResponseURI_1.ResponseURI(); + reader.offset = newURI.fromBuffer(reader.buffer, reader.offset); + this.responseURIs.push(newURI); + } + } + if (this.hasExpiryTime()) { + this.expiryTime = new bn_js_1.BN(reader.readCompactSize()); + } + return reader.offset; + } + toJson() { + const flags = this.calcFlags(); + const retval = { + version: this.version.toNumber(), + flags: flags.toNumber(), + requestid: this.requestID, + recipientConstraints: this.recipientConstraints ? this.recipientConstraints.map(p => ({ type: p.type, + identity: p.identity.toJson() })) : undefined, + responseURIs: this.responseURIs ? this.responseURIs.map(x => x.toJson()) : undefined, + expirytime: this.expiryTime ? this.expiryTime.toNumber() : undefined + }; + return retval; + } + static fromJson(data) { + const loginDetails = new AuthenticationRequestDetails(); + loginDetails.version = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.version) || 0); + loginDetails.flags = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.flags) || 0); + loginDetails.requestID = data.requestid; + if (loginDetails.hasRecipentConstraints() && data.recipientConstraints) { + loginDetails.recipientConstraints = data.recipientConstraints.map(p => ({ type: p.type, + identity: CompactAddressObject_1.CompactAddressObject.fromJson(p.identity) })); + } + if (loginDetails.hasResponseURIs() && data.responseURIs) { + loginDetails.responseURIs = data.responseURIs.map(c => ResponseURI_1.ResponseURI.fromJson(c)); + } + if (loginDetails.hasExpiryTime() && data.expirytime) { + loginDetails.expiryTime = new bn_js_1.BN(data.expirytime); + } + return loginDetails; + } + setFlags() { + this.flags = this.calcFlags(); + } + isValid() { + let valid = this.requestID != null && this.requestID.length > 0; + valid && (valid = this.flags != null && this.flags.gte(new bn_js_1.BN(0))); + // Validate requestID is a valid base58 address + try { + (0, address_1.fromBase58Check)(this.requestID); + } + catch (_a) { + valid = false; + } + if (this.hasRecipentConstraints()) { + if (!this.recipientConstraints || this.recipientConstraints.length === 0) { + return false; + } + } + if (this.hasResponseURIs()) { + if (!this.responseURIs || this.responseURIs.length === 0) { + return false; + } + } + if (this.hasExpiryTime()) { + if (!this.expiryTime || this.expiryTime.isZero()) { + return false; + } + } + return valid; + } +} +exports.AuthenticationRequestDetails = AuthenticationRequestDetails; +// Version +AuthenticationRequestDetails.DEFAULT_VERSION = new bn_js_1.BN(1, 10); +AuthenticationRequestDetails.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); +AuthenticationRequestDetails.VERSION_LASTVALID = new bn_js_1.BN(1, 10); +AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS = new bn_js_1.BN(1, 10); +AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS = new bn_js_1.BN(2, 10); +AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME = new bn_js_1.BN(4, 10); +// Recipient Constraint Types - What types of Identity can login, e.g. REQUIRED_SYSTEM and "VRSC" means only identities on the Verus chain can login +AuthenticationRequestDetails.REQUIRED_ID = 1; +AuthenticationRequestDetails.REQUIRED_SYSTEM = 2; +AuthenticationRequestDetails.REQUIRED_PARENT = 3; diff --git a/dist/vdxf/classes/login/AuthenticationResponseDetails.d.ts b/dist/vdxf/classes/login/AuthenticationResponseDetails.d.ts new file mode 100644 index 00000000..5deb1d10 --- /dev/null +++ b/dist/vdxf/classes/login/AuthenticationResponseDetails.d.ts @@ -0,0 +1,20 @@ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +export type AuthenticationResponseDetailsJson = { + flags: string; + requestid: string; +}; +export declare class AuthenticationResponseDetails implements SerializableEntity { + flags?: BigNumber; + requestID?: string; + constructor(data?: { + flags?: BigNumber; + requestID?: string; + }); + toSha256(): Buffer; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): AuthenticationResponseDetailsJson; + static fromJson(json: AuthenticationResponseDetailsJson): AuthenticationResponseDetails; +} diff --git a/dist/vdxf/classes/login/AuthenticationResponseDetails.js b/dist/vdxf/classes/login/AuthenticationResponseDetails.js new file mode 100644 index 00000000..e4450b0d --- /dev/null +++ b/dist/vdxf/classes/login/AuthenticationResponseDetails.js @@ -0,0 +1,54 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AuthenticationResponseDetails = void 0; +const varint_1 = require("../../../utils/varint"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const createHash = require("create-hash"); +const bn_js_1 = require("bn.js"); +const address_1 = require("../../../utils/address"); +const vdxf_1 = require("../../../constants/vdxf"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class AuthenticationResponseDetails { + constructor(data) { + this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0", 10); + if (data === null || data === void 0 ? void 0 : data.requestID) { + this.requestID = data.requestID; + } + else + this.requestID = ''; + } + toSha256() { + return createHash("sha256").update(this.toBuffer()).digest(); + } + getByteLength() { + let length = 0; + length += varint_1.default.encodingLength(this.flags); + length += vdxf_1.HASH160_BYTE_LENGTH; + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeVarInt(this.flags); + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.flags = reader.readVarInt(); + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + return reader.offset; + } + toJson() { + return { + flags: this.flags.toString(10), + requestid: this.requestID, + }; + } + static fromJson(json) { + return new AuthenticationResponseDetails({ + flags: new bn_js_1.BN(json.flags, 10), + requestID: json.requestid + }); + } +} +exports.AuthenticationResponseDetails = AuthenticationResponseDetails; diff --git a/dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.d.ts new file mode 100644 index 00000000..245f1ae8 --- /dev/null +++ b/dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { AuthenticationRequestDetails, AuthenticationRequestDetailsJson } from "../login/AuthenticationRequestDetails"; +export declare class AuthenticationRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: AuthenticationRequestDetails; + constructor(request?: OrdinalVdxfObjectInterfaceTemplate); + static fromJson(details: OrdinalVdxfObjectJsonTemplate): AuthenticationRequestOrdinalVdxfObject; +} diff --git a/dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.js new file mode 100644 index 00000000..9e8b4708 --- /dev/null +++ b/dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AuthenticationRequestOrdinalVdxfObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); +const AuthenticationRequestDetails_1 = require("../login/AuthenticationRequestDetails"); +class AuthenticationRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { + constructor(request = { + data: new AuthenticationRequestDetails_1.AuthenticationRequestDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_AUTHENTICATION_REQUEST, + data: request.data + }, AuthenticationRequestDetails_1.AuthenticationRequestDetails); + } + static fromJson(details) { + return new AuthenticationRequestOrdinalVdxfObject({ + data: AuthenticationRequestDetails_1.AuthenticationRequestDetails.fromJson(details.data) + }); + } +} +exports.AuthenticationRequestOrdinalVdxfObject = AuthenticationRequestOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.d.ts new file mode 100644 index 00000000..e653eb09 --- /dev/null +++ b/dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { AuthenticationResponseDetails, AuthenticationResponseDetailsJson } from "../login/AuthenticationResponseDetails"; +export declare class AuthenticationResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: AuthenticationResponseDetails; + constructor(response?: OrdinalVdxfObjectInterfaceTemplate); + static fromJson(details: OrdinalVdxfObjectJsonTemplate): AuthenticationResponseOrdinalVdxfObject; +} diff --git a/dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.js new file mode 100644 index 00000000..66047e3d --- /dev/null +++ b/dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AuthenticationResponseOrdinalVdxfObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); +const AuthenticationResponseDetails_1 = require("../login/AuthenticationResponseDetails"); +class AuthenticationResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { + constructor(response = { + data: new AuthenticationResponseDetails_1.AuthenticationResponseDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_AUTHENTICATION_RESPONSE, + data: response.data + }, AuthenticationResponseDetails_1.AuthenticationResponseDetails); + } + static fromJson(details) { + return new AuthenticationResponseOrdinalVdxfObject({ + data: AuthenticationResponseDetails_1.AuthenticationResponseDetails.fromJson(details.data) + }); + } +} +exports.AuthenticationResponseOrdinalVdxfObject = AuthenticationResponseOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/index.d.ts b/dist/vdxf/classes/ordinals/index.d.ts index 459265f9..30ae348f 100644 --- a/dist/vdxf/classes/ordinals/index.d.ts +++ b/dist/vdxf/classes/ordinals/index.d.ts @@ -5,8 +5,8 @@ export * from './OrdinalVdxfObject'; export * from './OrdinalVdxfObjectOrdinalMap'; export * from './SerializableEntityOrdinalVdxfObject'; export * from './VerusPayInvoiceOrdinalVdxfObject'; -export * from './LoginRequestDetailsOrdinalVdxfObject'; -export * from './LoginResponseDetailsOrdinalVdxfObject'; +export * from './AuthenticationRequestOrdinalVdxfObject'; +export * from './AuthenticationResponseOrdinalVdxfObject'; export * from './AppEncryptionRequestOrdinalVdxfObject'; export * from './AppEncryptionResponseOrdinalVdxfObject'; export * from './ProvisionIdentityDetailsOrdinalVdxfObject'; diff --git a/dist/vdxf/classes/ordinals/index.js b/dist/vdxf/classes/ordinals/index.js index 0652cb97..2b45ae22 100644 --- a/dist/vdxf/classes/ordinals/index.js +++ b/dist/vdxf/classes/ordinals/index.js @@ -22,8 +22,8 @@ __exportStar(require("./OrdinalVdxfObject"), exports); __exportStar(require("./OrdinalVdxfObjectOrdinalMap"), exports); __exportStar(require("./SerializableEntityOrdinalVdxfObject"), exports); __exportStar(require("./VerusPayInvoiceOrdinalVdxfObject"), exports); -__exportStar(require("./LoginRequestDetailsOrdinalVdxfObject"), exports); -__exportStar(require("./LoginResponseDetailsOrdinalVdxfObject"), exports); +__exportStar(require("./AuthenticationRequestOrdinalVdxfObject"), exports); +__exportStar(require("./AuthenticationResponseOrdinalVdxfObject"), exports); __exportStar(require("./AppEncryptionRequestOrdinalVdxfObject"), exports); __exportStar(require("./AppEncryptionResponseOrdinalVdxfObject"), exports); __exportStar(require("./ProvisionIdentityDetailsOrdinalVdxfObject"), exports); diff --git a/dist/vdxf/keys.d.ts b/dist/vdxf/keys.d.ts index c0a1faad..ff1b2283 100644 --- a/dist/vdxf/keys.d.ts +++ b/dist/vdxf/keys.d.ts @@ -76,8 +76,8 @@ export declare const IDENTITY_CREDENTIALS: VDXFKeyInterface; export declare const IDENTITY_CREDENTIAL_PLAINLOGIN: VDXFKeyInterface; export declare const IDENTITY_CREDENTIAL_USERNAME: VDXFKeyInterface; export declare const ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS: VDXFKeyInterface; -export declare const LOGIN_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface; -export declare const LOGIN_RESPONSE_DETAILS_VDXF_KEY: VDXFKeyInterface; +export declare const AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface; +export declare const AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const PROVISION_IDENTITY_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const APP_ENCRYPTION_REQUEST_VDXF_KEY: VDXFKeyInterface; export declare const DATA_RESPONSE_VDXF_KEY: VDXFKeyInterface; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index 79a88ad6..09b1bcb6 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; -exports.APP_ENCRYPTION_RESPONSE_VDXF_KEY = exports.USER_SPECIFIC_DATA_PACKET_VDXF_KEY = exports.USER_DATA_REQUEST_VDXF_KEY = exports.DATA_RESPONSE_VDXF_KEY = exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.LOGIN_RESPONSE_DETAILS_VDXF_KEY = exports.LOGIN_REQUEST_DETAILS_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; +exports.APP_ENCRYPTION_RESPONSE_VDXF_KEY = exports.USER_SPECIFIC_DATA_PACKET_VDXF_KEY = exports.USER_DATA_REQUEST_VDXF_KEY = exports.DATA_RESPONSE_VDXF_KEY = exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY = exports.AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; exports.VERUSPAY_INVOICE_VDXF_KEY = { hash160result: "628efc28c2e2d40050e1a9de7a93e7ddf2aa0076", indexid: "xK4aRumetZg2ecW4Z45qdDBH769xxnaiEH", @@ -552,23 +552,23 @@ exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = { "name": "vrsc::attestation.view.request.multipleattestations" } }; -exports.LOGIN_REQUEST_DETAILS_VDXF_KEY = { - "hash160result": "bf65d30f52d523170e8422ed7204342607d44229", - "indexid": "xC4of3pbeRqveks6kRNYdV9FQ1L5x5wXRE", +exports.AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY = { + "hash160result": "ba8f92aeb1d135d6a64366af727ce0435a03ef45", + "indexid": "xEgQr2xov3Sa5XCaWYF67mgqz2swZXpUk3", "qualifiedname": { - "name": "vrsc::identity.login.request.details", + "name": "vrsc::identity.authentication.request.details", "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, - "vdxfid": "i7EhCFPWo7dG2az4tjiPf6ciNMK5671Z5A" + "vdxfid": "i9rJPEXj4jDuTMKYeraw9PAJxNrvaRM5fu" }; -exports.LOGIN_RESPONSE_DETAILS_VDXF_KEY = { - "hash160result": "e65d6b3f3b49ec499762e4c9369f1f7f72b251bb", - "indexid": "xRP68AHAxF9zbxeFpMFA5y85H2RhLiUJ9U", +exports.AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY = { + "hash160result": "32bee6633cbf8bb8ceff189a5c51abb16615e033", + "indexid": "xD2voG9dsSKNJXcW6jDvJ7KwGbvWqT1jXL", "qualifiedname": { - "name": "vrsc::identity.login.response.details", + "name": "vrsc::identity.authentication.response.details", "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, - "vdxfid": "iLYyfMr66vwKynmDxfb17abYFNQgU71i6T" + "vdxfid": "i8CpLTiZ286hgMjUF3ZmKioQEwuVytVpYr" }; exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = { "hash160result": "1ed843dce0f4d9a2bbb839994e3927807eb1878c", diff --git a/src/__tests__/constants/fixtures.ts b/src/__tests__/constants/fixtures.ts index e636bfd0..5578f5b1 100644 --- a/src/__tests__/constants/fixtures.ts +++ b/src/__tests__/constants/fixtures.ts @@ -454,4 +454,4 @@ export const TEST_IDENTITY_ID_1 = "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"; export const TEST_IDENTITY_ID_2 = "i84T3MWcb6zWcwgNZoU3TXtrUn9EqM84A4"; export const TEST_IDENTITY_ID_3 = "iJ5LnijKvp1wkL4hB3EsJ5kjcE4T8VL4hD"; -export const SERIALIZED_LOGIN_REQUEST_DETAILS = Buffer.from("07c72c5b342995a2186f96271e91686c5e942d13e1030101022a5fc0e9dedf4f1e8351fe652a140e9dd38fa5a9020102324afad29f51859c54050db854d2c9bb52acd9bd030102a0276f355ad37d8e5d2d10f16c1d051b6f6ead6201021c68747470733a2f2f6578616d706c652e636f6d2f63616c6c6261636bff9982d02aac020000", 'hex'); \ No newline at end of file +export const SERIALIZED_AUTHENTICATION_REQUEST_DETAILS = Buffer.from("07c72c5b342995a2186f96271e91686c5e942d13e1030101022a5fc0e9dedf4f1e8351fe652a140e9dd38fa5a9020102324afad29f51859c54050db854d2c9bb52acd9bd030102a0276f355ad37d8e5d2d10f16c1d051b6f6ead6201021c68747470733a2f2f6578616d706c652e636f6d2f63616c6c6261636bff9982d02aac020000", 'hex'); \ No newline at end of file diff --git a/src/__tests__/vdxf/loginrequestdetails.test.ts b/src/__tests__/vdxf/authenticationrequestdetails.test.ts similarity index 58% rename from src/__tests__/vdxf/loginrequestdetails.test.ts rename to src/__tests__/vdxf/authenticationrequestdetails.test.ts index 49583b78..37861bb1 100644 --- a/src/__tests__/vdxf/loginrequestdetails.test.ts +++ b/src/__tests__/vdxf/authenticationrequestdetails.test.ts @@ -1,21 +1,21 @@ import { BN } from "bn.js"; import { - LoginRequestDetails, + AuthenticationRequestDetails, CompactAddressObject, ResponseURI } from "../../vdxf/classes"; -import { SERIALIZED_LOGIN_REQUEST_DETAILS, TEST_CHALLENGE_ID, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3 } from "../constants/fixtures"; +import { SERIALIZED_AUTHENTICATION_REQUEST_DETAILS, TEST_CHALLENGE_ID, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3 } from "../constants/fixtures"; -describe("LoginRequestDetails", () => { +describe("AuthenticationRequestDetails", () => { describe("constructor and basic properties", () => { test("creates instance with minimal required data", () => { - const details = new LoginRequestDetails({ + const details = new AuthenticationRequestDetails({ requestID: TEST_CHALLENGE_ID }); const detailsBuffer = details.toBuffer(); - const newDetails = new LoginRequestDetails(); + const newDetails = new AuthenticationRequestDetails(); newDetails.fromBuffer(detailsBuffer); expect(details.requestID).toBe(TEST_CHALLENGE_ID); @@ -27,12 +27,12 @@ describe("LoginRequestDetails", () => { }); test("creates instance with all optional data", () => { - const details = new LoginRequestDetails({ + const details = new AuthenticationRequestDetails({ requestID: TEST_CHALLENGE_ID, recipientConstraints: [ - { type: LoginRequestDetails.REQUIRED_ID, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }, - { type: LoginRequestDetails.REQUIRED_SYSTEM, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, - { type: LoginRequestDetails.REQUIRED_PARENT, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } + { type: AuthenticationRequestDetails.REQUIRED_ID, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }, + { type: AuthenticationRequestDetails.REQUIRED_SYSTEM, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, + { type: AuthenticationRequestDetails.REQUIRED_PARENT, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } ], responseURIs: [ResponseURI.fromUriString("https://example.com/callback", ResponseURI.TYPE_POST)], expiryTime: new BN(2938475938457) // 1 hour from now @@ -40,7 +40,7 @@ describe("LoginRequestDetails", () => { const detailsBuffer = details.toBuffer(); - const newDetails = new LoginRequestDetails(); + const newDetails = new AuthenticationRequestDetails(); newDetails.fromBuffer(detailsBuffer); expect(newDetails.requestID).toBe(TEST_CHALLENGE_ID); @@ -50,12 +50,12 @@ describe("LoginRequestDetails", () => { expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); - expect(details.toBuffer().toString('hex')).toBe(SERIALIZED_LOGIN_REQUEST_DETAILS.toString('hex')); + expect(details.toBuffer().toString('hex')).toBe(SERIALIZED_AUTHENTICATION_REQUEST_DETAILS.toString('hex')); }); test("creates instance with default constructor", () => { - const details = new LoginRequestDetails(); + const details = new AuthenticationRequestDetails(); expect(details.requestID).toBe(""); expect(details.version.toString()).toBe("1"); diff --git a/src/__tests__/vdxf/loginresponsedetails.test.ts b/src/__tests__/vdxf/authenticationresponsedetails.test.ts similarity index 73% rename from src/__tests__/vdxf/loginresponsedetails.test.ts rename to src/__tests__/vdxf/authenticationresponsedetails.test.ts index 25167282..82324585 100644 --- a/src/__tests__/vdxf/loginresponsedetails.test.ts +++ b/src/__tests__/vdxf/authenticationresponsedetails.test.ts @@ -1,19 +1,19 @@ import { BN } from "bn.js"; import { - LoginResponseDetails + AuthenticationResponseDetails } from "../../vdxf/classes"; import { TEST_CHALLENGE_ID } from "../constants/fixtures"; -describe("LoginRequestDetails", () => { +describe("AuthenticationRequestDetails", () => { describe("constructor and basic properties", () => { test("creates instance with all optional data", () => { - const details = new LoginResponseDetails({ + const details = new AuthenticationResponseDetails({ requestID: TEST_CHALLENGE_ID }); const detailsBuffer = details.toBuffer(); - const newDetails = new LoginResponseDetails(); + const newDetails = new AuthenticationResponseDetails(); newDetails.fromBuffer(detailsBuffer); expect(newDetails.requestID).toBe(TEST_CHALLENGE_ID); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 813dc56a..a72564ac 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -5,8 +5,8 @@ import { getOrdinalVdxfObjectClassForType, IdentityUpdateRequestOrdinalVdxfObject, IdentityUpdateResponseOrdinalVdxfObject, - LoginRequestOrdinalVdxfObject, - LoginResponseOrdinalVdxfObject, + AuthenticationRequestOrdinalVdxfObject, + AuthenticationResponseOrdinalVdxfObject, OrdinalVdxfObject, UserDataRequestOrdinalVdxfObject, UserSpecificDataPacketDetailsOrdinalVdxfObject, @@ -21,8 +21,8 @@ import { CompactAddressObject, IdentityUpdateRequestDetails, IdentityUpdateResponseDetails, - LoginRequestDetails, - LoginResponseDetails, + AuthenticationRequestDetails, + AuthenticationResponseDetails, ProvisionIdentityDetails, ResponseURI, VerusPayInvoiceDetails, @@ -33,7 +33,7 @@ import { } from '../../vdxf/classes'; import { DEFAULT_VERUS_CHAINID } from '../../constants/pbaas'; import { fromBase58Check } from '../../utils/address'; -import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from '../../constants/ordinals/ordinals'; +import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_AUTHENTICATION_REQUEST, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from '../../constants/ordinals/ordinals'; import { VerusPayInvoiceOrdinalVdxfObject } from '../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject'; import { TEST_CHALLENGE_ID, TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, TEST_EXPIRYHEIGHT, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3, TEST_REQUESTID, TEST_SALT, TEST_SYSTEMID, TEST_TXID } from '../constants/fixtures'; import { ProvisionIdentityDetailsOrdinalVdxfObject } from '../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject'; @@ -81,10 +81,10 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { newObj = IdentityUpdateRequestOrdinalVdxfObject.fromJson(json as any); } else if (obj instanceof IdentityUpdateResponseOrdinalVdxfObject) { newObj = IdentityUpdateResponseOrdinalVdxfObject.fromJson(json as any); - } else if (obj instanceof LoginRequestOrdinalVdxfObject) { - newObj = LoginRequestOrdinalVdxfObject.fromJson(json as any); - } else if (obj instanceof LoginResponseOrdinalVdxfObject) { - newObj = LoginResponseOrdinalVdxfObject.fromJson(json as any); + } else if (obj instanceof AuthenticationRequestOrdinalVdxfObject) { + newObj = AuthenticationRequestOrdinalVdxfObject.fromJson(json as any); + } else if (obj instanceof AuthenticationResponseOrdinalVdxfObject) { + newObj = AuthenticationResponseOrdinalVdxfObject.fromJson(json as any); } else if (obj instanceof ProvisionIdentityDetailsOrdinalVdxfObject) { newObj = ProvisionIdentityDetailsOrdinalVdxfObject.fromJson(json as any); } else if (obj instanceof AppEncryptionRequestOrdinalVdxfObject) { @@ -269,56 +269,56 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(d3.txid!.toString('hex')).toEqual(details.txid!.toString('hex')); }); - it('should serialize / deserialize a LoginRequestOrdinalVdxfObject via buffer', () => { - const details = new LoginRequestDetails({ + it('should serialize / deserialize a AuthenticationRequestOrdinalVdxfObject via buffer', () => { + const details = new AuthenticationRequestDetails({ requestID: TEST_CHALLENGE_ID, recipientConstraints: [ - { type: LoginRequestDetails.REQUIRED_ID, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }, - { type: LoginRequestDetails.REQUIRED_SYSTEM, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, - { type: LoginRequestDetails.REQUIRED_PARENT, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } + { type: AuthenticationRequestDetails.REQUIRED_ID, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }, + { type: AuthenticationRequestDetails.REQUIRED_SYSTEM, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, + { type: AuthenticationRequestDetails.REQUIRED_PARENT, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } ], responseURIs: [ResponseURI.fromUriString("https://example.com/callback", ResponseURI.TYPE_POST)], expiryTime: new BN(2938475938457) }); - const obj = new LoginRequestOrdinalVdxfObject({ data: details }); + const obj = new AuthenticationRequestOrdinalVdxfObject({ data: details }); const round = roundTripBuffer(obj); - expect(round).toBeInstanceOf(LoginRequestOrdinalVdxfObject); + expect(round).toBeInstanceOf(AuthenticationRequestOrdinalVdxfObject); - const d2 = (round as LoginRequestOrdinalVdxfObject).data; + const d2 = (round as AuthenticationRequestOrdinalVdxfObject).data; expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d2.expiryTime!.toNumber()).toEqual(details.expiryTime!.toNumber()); const json = obj.toJson(); expect(json.data).toBeDefined(); const roundJ = roundTripJson(obj); - expect(roundJ).toBeInstanceOf(LoginRequestOrdinalVdxfObject); + expect(roundJ).toBeInstanceOf(AuthenticationRequestOrdinalVdxfObject); - const d3 = (roundJ as LoginRequestOrdinalVdxfObject).data; + const d3 = (roundJ as AuthenticationRequestOrdinalVdxfObject).data; expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d3.expiryTime!.toNumber()).toEqual(details.expiryTime!.toNumber()); }); - it('should serialize / deserialize a LoginResponseOrdinalVdxfObject via buffer', () => { - const details = new LoginResponseDetails({ + it('should serialize / deserialize a AuthenticationResponseOrdinalVdxfObject via buffer', () => { + const details = new AuthenticationResponseDetails({ requestID: TEST_CHALLENGE_ID }); - const obj = new LoginResponseOrdinalVdxfObject({ data: details }); + const obj = new AuthenticationResponseOrdinalVdxfObject({ data: details }); const round = roundTripBuffer(obj); - expect(round).toBeInstanceOf(LoginResponseOrdinalVdxfObject); + expect(round).toBeInstanceOf(AuthenticationResponseOrdinalVdxfObject); - const d2 = (round as LoginResponseOrdinalVdxfObject).data; + const d2 = (round as AuthenticationResponseOrdinalVdxfObject).data; expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); const json = obj.toJson(); expect(json.data).toBeDefined(); const roundJ = roundTripJson(obj); - expect(roundJ).toBeInstanceOf(LoginResponseOrdinalVdxfObject); + expect(roundJ).toBeInstanceOf(AuthenticationResponseOrdinalVdxfObject); - const d3 = (roundJ as LoginResponseOrdinalVdxfObject).data; + const d3 = (roundJ as AuthenticationResponseOrdinalVdxfObject).data; expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); }); @@ -397,8 +397,8 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { .toBe(IdentityUpdateResponseOrdinalVdxfObject); expect(getOrdinalVdxfObjectClassForType(VDXF_OBJECT_RESERVED_BYTE_I_ADDR)) .toBe(GeneralTypeOrdinalVdxfObject); - expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_LOGIN_REQUEST)) - .toBe(LoginRequestOrdinalVdxfObject); + expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_AUTHENTICATION_REQUEST)) + .toBe(AuthenticationRequestOrdinalVdxfObject); expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS)) .toBe(ProvisionIdentityDetailsOrdinalVdxfObject); expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST)) diff --git a/src/constants/ordinals/ordinals.ts b/src/constants/ordinals/ordinals.ts index 8fa62226..37846a3b 100644 --- a/src/constants/ordinals/ordinals.ts +++ b/src/constants/ordinals/ordinals.ts @@ -6,8 +6,8 @@ export const VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = new BN(104, 10); export const VDXF_ORDINAL_DATA_DESCRIPTOR = new BN(0, 10); export const VDXF_ORDINAL_VERUSPAY_INVOICE = new BN(1, 10); -export const VDXF_ORDINAL_LOGIN_REQUEST = new BN(2, 10); -export const VDXF_ORDINAL_LOGIN_RESPONSE = new BN(3, 10); +export const VDXF_ORDINAL_AUTHENTICATION_REQUEST = new BN(2, 10); +export const VDXF_ORDINAL_AUTHENTICATION_RESPONSE = new BN(3, 10); export const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new BN(4, 10); export const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new BN(5, 10); export const VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new BN(6, 10); diff --git a/src/constants/ordinals/register.ts b/src/constants/ordinals/register.ts index aa7c92a4..a9ffb917 100644 --- a/src/constants/ordinals/register.ts +++ b/src/constants/ordinals/register.ts @@ -1,4 +1,4 @@ -import { APP_ENCRYPTION_REQUEST_VDXF_KEY, APP_ENCRYPTION_RESPONSE_VDXF_KEY, DATA_RESPONSE_VDXF_KEY, DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, LOGIN_REQUEST_DETAILS_VDXF_KEY, LOGIN_RESPONSE_DETAILS_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, USER_DATA_REQUEST_VDXF_KEY, USER_SPECIFIC_DATA_PACKET_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../../vdxf"; +import { APP_ENCRYPTION_REQUEST_VDXF_KEY, APP_ENCRYPTION_RESPONSE_VDXF_KEY, DATA_RESPONSE_VDXF_KEY, DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY, AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, USER_DATA_REQUEST_VDXF_KEY, USER_SPECIFIC_DATA_PACKET_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../../vdxf"; import { AppEncryptionRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject"; import { DataDescriptorOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject"; import { DataPacketResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject"; @@ -6,19 +6,19 @@ import { UserDataRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/Us import { UserSpecificDataPacketDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject"; import { IdentityUpdateRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject"; import { IdentityUpdateResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject"; -import { LoginRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject"; -import { LoginResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject"; +import { AuthenticationRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject"; +import { AuthenticationResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject"; import { OrdinalVdxfObjectOrdinalMap } from "../../vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap"; import { ProvisionIdentityDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject"; import { VerusPayInvoiceOrdinalVdxfObject } from "../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject"; -import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_DATA_RESPONSE, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_LOGIN_REQUEST, VDXF_ORDINAL_LOGIN_RESPONSE, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_USER_DATA_REQUEST, VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET, VDXF_ORDINAL_VERUSPAY_INVOICE } from "./ordinals"; +import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_DATA_RESPONSE, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_AUTHENTICATION_REQUEST, VDXF_ORDINAL_AUTHENTICATION_RESPONSE, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_USER_DATA_REQUEST, VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET, VDXF_ORDINAL_VERUSPAY_INVOICE } from "./ordinals"; import { AppEncryptionResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject"; export const registerOrdinals = () => { OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid, VerusPayInvoiceOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_LOGIN_REQUEST.toNumber(), LOGIN_REQUEST_DETAILS_VDXF_KEY.vdxfid, LoginRequestOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_LOGIN_RESPONSE.toNumber(), LOGIN_RESPONSE_DETAILS_VDXF_KEY.vdxfid, LoginResponseOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_AUTHENTICATION_REQUEST.toNumber(), AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY.vdxfid, AuthenticationRequestOrdinalVdxfObject, false); + OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_AUTHENTICATION_RESPONSE.toNumber(), AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY.vdxfid, AuthenticationResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject, false); OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVdxfObject, false); diff --git a/src/constants/ordinals/types.ts b/src/constants/ordinals/types.ts index 7414765a..56eee256 100644 --- a/src/constants/ordinals/types.ts +++ b/src/constants/ordinals/types.ts @@ -6,10 +6,10 @@ import { IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, - LoginRequestDetails, - LoginRequestDetailsJson, - LoginResponseDetails, - LoginResponseDetailsJson, + AuthenticationRequestDetails, + AuthenticationRequestDetailsJson, + AuthenticationResponseDetails, + AuthenticationResponseDetailsJson, ProvisionIdentityDetails, ProvisionIdentityDetailsJson, UserDataRequestDetails, @@ -28,8 +28,8 @@ export type OrdinalVdxfObjectReservedData = VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails | - LoginRequestDetails | - LoginResponseDetails | + AuthenticationRequestDetails | + AuthenticationResponseDetails | ProvisionIdentityDetails | AppEncryptionRequestDetails | DataPacketResponse | @@ -42,8 +42,8 @@ export type OrdinalVdxfObjectReservedDataJson = VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson | - LoginRequestDetailsJson | - LoginResponseDetailsJson | + AuthenticationRequestDetailsJson | + AuthenticationResponseDetailsJson | ProvisionIdentityDetailsJson | AppEncryptionRequestJson | DataResponseJson | diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index 0b846083..6635689a 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -49,8 +49,8 @@ export { export { Context } from './Context' export { DataCategory } from './PersonalProfile' export * from './requestobjects/UserDataRequestDetails' -export * from './login/LoginRequestDetails' -export * from './login/LoginResponseDetails' +export * from './login/AuthenticationRequestDetails' +export * from './login/AuthenticationResponseDetails' export * from './requestobjects/ProvisionIdentityDetails' export * from './requestobjects/AppEncryptionRequestDetails' export * from './requestobjects/UserSpecificDataPacketDetails' diff --git a/src/vdxf/classes/login/LoginRequestDetails.ts b/src/vdxf/classes/login/AuthenticationRequestDetails.ts similarity index 86% rename from src/vdxf/classes/login/LoginRequestDetails.ts rename to src/vdxf/classes/login/AuthenticationRequestDetails.ts index c7da5873..943747ee 100644 --- a/src/vdxf/classes/login/LoginRequestDetails.ts +++ b/src/vdxf/classes/login/AuthenticationRequestDetails.ts @@ -1,6 +1,6 @@ /** - * LoginRequestDetails - Class for handling application login and authentication requests + * AuthenticationRequestDetails - Class for handling application login and authentication requests * * This class is used when an application is requesting authentication or login from the user, * including specific recipientConstraints and callback information. The request includes: @@ -25,7 +25,7 @@ import { fromBase58Check, toBase58Check } from "../../../utils/address"; import { CompactAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; import { ResponseURI, ResponseURIJson } from "../ResponseURI"; -export interface LoginRequestDetailsInterface { +export interface AuthenticationRequestDetailsInterface { version?: BigNumber; flags?: BigNumber; requestID: string; @@ -44,7 +44,7 @@ export interface RecipientConstraint { identity: CompactAddressObject; } -export interface LoginRequestDetailsJson { +export interface AuthenticationRequestDetailsJson { version: number; requestid: string; flags: number; @@ -53,7 +53,7 @@ export interface LoginRequestDetailsJson { expirytime?: number; } -export class LoginRequestDetails implements SerializableEntity { +export class AuthenticationRequestDetails implements SerializableEntity { version: BigNumber; flags?: BigNumber; requestID: string; @@ -76,9 +76,9 @@ export class LoginRequestDetails implements SerializableEntity { static REQUIRED_PARENT = 3; constructor( - request?: LoginRequestDetailsInterface + request?: AuthenticationRequestDetailsInterface ) { - this.version = request?.version || LoginRequestDetails.DEFAULT_VERSION; + this.version = request?.version || AuthenticationRequestDetails.DEFAULT_VERSION; this.requestID = request?.requestID || ''; this.flags = request?.flags || new BN(0, 10); this.recipientConstraints = request?.recipientConstraints || null; @@ -89,26 +89,26 @@ export class LoginRequestDetails implements SerializableEntity { } hasRecipentConstraints(): boolean { - return this.flags.and(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS).eq(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); + return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS).eq(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); } hasResponseURIs(): boolean { - return this.flags.and(LoginRequestDetails.FLAG_HAS_RESPONSE_URIS).eq(LoginRequestDetails.FLAG_HAS_RESPONSE_URIS); + return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS).eq(AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS); } hasExpiryTime(): boolean { - return this.flags.and(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME).eq(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME); + return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME).eq(AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME); } calcFlags(flags: BigNumber = this.flags): BigNumber { if (this.recipientConstraints) { - flags = flags.or(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); + flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); } if (this.responseURIs) { - flags = flags.or(LoginRequestDetails.FLAG_HAS_RESPONSE_URIS); + flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS); } if (this.expiryTime) { - flags = flags.or(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME); + flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME); } return flags; } @@ -211,7 +211,7 @@ export class LoginRequestDetails implements SerializableEntity { return reader.offset; } - toJson(): LoginRequestDetailsJson { + toJson(): AuthenticationRequestDetailsJson { const flags = this.calcFlags(); const retval = { @@ -227,9 +227,9 @@ export class LoginRequestDetails implements SerializableEntity { return retval; } - static fromJson(data: LoginRequestDetailsJson): LoginRequestDetails { + static fromJson(data: AuthenticationRequestDetailsJson): AuthenticationRequestDetails { - const loginDetails = new LoginRequestDetails(); + const loginDetails = new AuthenticationRequestDetails(); loginDetails.version = new BN(data?.version || 0); loginDetails.flags = new BN(data?.flags || 0); diff --git a/src/vdxf/classes/login/LoginResponseDetails.ts b/src/vdxf/classes/login/AuthenticationResponseDetails.ts similarity index 85% rename from src/vdxf/classes/login/LoginResponseDetails.ts rename to src/vdxf/classes/login/AuthenticationResponseDetails.ts index 34a2eb98..31dba0ce 100644 --- a/src/vdxf/classes/login/LoginResponseDetails.ts +++ b/src/vdxf/classes/login/AuthenticationResponseDetails.ts @@ -9,12 +9,12 @@ import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../../../constants/vdxf'; import varuint from '../../../utils/varuint'; const { BufferReader, BufferWriter } = bufferutils; -export type LoginResponseDetailsJson = { +export type AuthenticationResponseDetailsJson = { flags: string, requestid: string } -export class LoginResponseDetails implements SerializableEntity { +export class AuthenticationResponseDetails implements SerializableEntity { flags?: BigNumber; requestID?: string; // ID of request, to be referenced in response @@ -63,15 +63,15 @@ export class LoginResponseDetails implements SerializableEntity { return reader.offset; } - toJson(): LoginResponseDetailsJson { + toJson(): AuthenticationResponseDetailsJson { return { flags: this.flags.toString(10), requestid: this.requestID, } } - static fromJson(json: LoginResponseDetailsJson): LoginResponseDetails { - return new LoginResponseDetails({ + static fromJson(json: AuthenticationResponseDetailsJson): AuthenticationResponseDetails { + return new AuthenticationResponseDetails({ flags: new BN(json.flags, 10), requestID: json.requestid }); diff --git a/src/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.ts new file mode 100644 index 00000000..2bae9283 --- /dev/null +++ b/src/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.ts @@ -0,0 +1,29 @@ +import { VDXF_ORDINAL_AUTHENTICATION_REQUEST } from "../../../constants/ordinals/ordinals"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { AuthenticationRequestDetails, AuthenticationRequestDetailsJson } from "../login/AuthenticationRequestDetails"; + +export class AuthenticationRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: AuthenticationRequestDetails; + + constructor( + request: OrdinalVdxfObjectInterfaceTemplate = { + data: new AuthenticationRequestDetails() + } + ) { + super( + { + type: VDXF_ORDINAL_AUTHENTICATION_REQUEST, + data: request.data + }, + AuthenticationRequestDetails + ); + } + + static fromJson(details: OrdinalVdxfObjectJsonTemplate): AuthenticationRequestOrdinalVdxfObject { + return new AuthenticationRequestOrdinalVdxfObject({ + data: AuthenticationRequestDetails.fromJson(details.data) + }) + } +} \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.ts new file mode 100644 index 00000000..388d971d --- /dev/null +++ b/src/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.ts @@ -0,0 +1,29 @@ +import { VDXF_ORDINAL_AUTHENTICATION_RESPONSE } from "../../../constants/ordinals/ordinals"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { AuthenticationResponseDetails, AuthenticationResponseDetailsJson } from "../login/AuthenticationResponseDetails"; + +export class AuthenticationResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { + data: AuthenticationResponseDetails; + + constructor( + response: OrdinalVdxfObjectInterfaceTemplate = { + data: new AuthenticationResponseDetails() + } + ) { + super( + { + type: VDXF_ORDINAL_AUTHENTICATION_RESPONSE, + data: response.data + }, + AuthenticationResponseDetails + ); + } + + static fromJson(details: OrdinalVdxfObjectJsonTemplate): AuthenticationResponseOrdinalVdxfObject { + return new AuthenticationResponseOrdinalVdxfObject({ + data: AuthenticationResponseDetails.fromJson(details.data) + }) + } +} \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.ts deleted file mode 100644 index 68529854..00000000 --- a/src/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { VDXF_ORDINAL_LOGIN_REQUEST } from "../../../constants/ordinals/ordinals"; -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { LoginRequestDetails, LoginRequestDetailsJson } from "../login/LoginRequestDetails"; - -export class LoginRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: LoginRequestDetails; - - constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { - data: new LoginRequestDetails() - } - ) { - super( - { - type: VDXF_ORDINAL_LOGIN_REQUEST, - data: request.data - }, - LoginRequestDetails - ); - } - - static fromJson(details: OrdinalVdxfObjectJsonTemplate): LoginRequestOrdinalVdxfObject { - return new LoginRequestOrdinalVdxfObject({ - data: LoginRequestDetails.fromJson(details.data) - }) - } -} \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.ts deleted file mode 100644 index 6565ab96..00000000 --- a/src/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { VDXF_ORDINAL_LOGIN_RESPONSE } from "../../../constants/ordinals/ordinals"; -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { LoginResponseDetails, LoginResponseDetailsJson } from "../login/LoginResponseDetails"; - -export class LoginResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: LoginResponseDetails; - - constructor( - response: OrdinalVdxfObjectInterfaceTemplate = { - data: new LoginResponseDetails() - } - ) { - super( - { - type: VDXF_ORDINAL_LOGIN_RESPONSE, - data: response.data - }, - LoginResponseDetails - ); - } - - static fromJson(details: OrdinalVdxfObjectJsonTemplate): LoginResponseOrdinalVdxfObject { - return new LoginResponseOrdinalVdxfObject({ - data: LoginResponseDetails.fromJson(details.data) - }) - } -} \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/index.ts b/src/vdxf/classes/ordinals/index.ts index a342b287..c591ea29 100644 --- a/src/vdxf/classes/ordinals/index.ts +++ b/src/vdxf/classes/ordinals/index.ts @@ -7,8 +7,8 @@ export * from './OrdinalVdxfObject' export * from './OrdinalVdxfObjectOrdinalMap' export * from './SerializableEntityOrdinalVdxfObject' export * from './VerusPayInvoiceOrdinalVdxfObject' -export * from './LoginRequestDetailsOrdinalVdxfObject' -export * from './LoginResponseDetailsOrdinalVdxfObject' +export * from './AuthenticationRequestOrdinalVdxfObject' +export * from './AuthenticationResponseOrdinalVdxfObject' export * from './AppEncryptionRequestOrdinalVdxfObject' export * from './AppEncryptionResponseOrdinalVdxfObject' export * from './ProvisionIdentityDetailsOrdinalVdxfObject' diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index fbca3d2c..bace6ef2 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -637,24 +637,24 @@ export const ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS: VDXFKeyInterface = { } } -export const LOGIN_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface = { - "hash160result": "bf65d30f52d523170e8422ed7204342607d44229", - "indexid": "xC4of3pbeRqveks6kRNYdV9FQ1L5x5wXRE", +export const AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface = { + "hash160result": "ba8f92aeb1d135d6a64366af727ce0435a03ef45", + "indexid": "xEgQr2xov3Sa5XCaWYF67mgqz2swZXpUk3", "qualifiedname": { - "name": "vrsc::identity.login.request.details", + "name": "vrsc::identity.authentication.request.details", "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, - "vdxfid": "i7EhCFPWo7dG2az4tjiPf6ciNMK5671Z5A" + "vdxfid": "i9rJPEXj4jDuTMKYeraw9PAJxNrvaRM5fu" } -export const LOGIN_RESPONSE_DETAILS_VDXF_KEY: VDXFKeyInterface = { - "hash160result": "e65d6b3f3b49ec499762e4c9369f1f7f72b251bb", - "indexid": "xRP68AHAxF9zbxeFpMFA5y85H2RhLiUJ9U", +export const AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY: VDXFKeyInterface = { + "hash160result": "32bee6633cbf8bb8ceff189a5c51abb16615e033", + "indexid": "xD2voG9dsSKNJXcW6jDvJ7KwGbvWqT1jXL", "qualifiedname": { - "name": "vrsc::identity.login.response.details", + "name": "vrsc::identity.authentication.response.details", "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, - "vdxfid": "iLYyfMr66vwKynmDxfb17abYFNQgU71i6T" + "vdxfid": "i8CpLTiZ286hgMjUF3ZmKioQEwuVytVpYr" } export const PROVISION_IDENTITY_DETAILS_VDXF_KEY: VDXFKeyInterface = { From 0b65ce54ea93c2f8737425604661ca684a4f9d6f Mon Sep 17 00:00:00 2001 From: michaeltout Date: Mon, 1 Dec 2025 15:44:40 +0100 Subject: [PATCH 090/123] Capitalize VDXF to match new acronym naming format in filenames --- ...inalVdxfObject.ts => AppEncryptionRequestOrdinalVDXFObject.ts} | 0 ...nalVdxfObject.ts => AppEncryptionResponseOrdinalVDXFObject.ts} | 0 ...nalVdxfObject.ts => AuthenticationRequestOrdinalVDXFObject.ts} | 0 ...alVdxfObject.ts => AuthenticationResponseOrdinalVDXFObject.ts} | 0 ...torOrdinalVdxfObject.ts => DataDescriptorOrdinalVDXFObject.ts} | 0 ...rdinalVdxfObject.ts => DataPacketResponseOrdinalVDXFObject.ts} | 0 ...nalVdxfObject.ts => IdentityUpdateRequestOrdinalVDXFObject.ts} | 0 ...alVdxfObject.ts => IdentityUpdateResponseOrdinalVDXFObject.ts} | 0 .../ordinals/{OrdinalVdxfObject.ts => OrdinalVDXFObject.ts} | 0 ...inalVdxfObjectOrdinalMap.ts => OrdinalVDXFObjectOrdinalMap.ts} | 0 ...VdxfObject.ts => ProvisionIdentityDetailsOrdinalVDXFObject.ts} | 0 ...rdinalVdxfObject.ts => SerializableEntityOrdinalVDXFObject.ts} | 0 ...stOrdinalVdxfObject.ts => UserDataRequestOrdinalVDXFObject.ts} | 0 ...bject.ts => UserSpecificDataPacketDetailsOrdinalVDXFObject.ts} | 0 ...ceOrdinalVdxfObject.ts => VerusPayInvoiceOrdinalVDXFObject.ts} | 0 15 files changed, 0 insertions(+), 0 deletions(-) rename src/vdxf/classes/ordinals/{AppEncryptionRequestOrdinalVdxfObject.ts => AppEncryptionRequestOrdinalVDXFObject.ts} (100%) rename src/vdxf/classes/ordinals/{AppEncryptionResponseOrdinalVdxfObject.ts => AppEncryptionResponseOrdinalVDXFObject.ts} (100%) rename src/vdxf/classes/ordinals/{AuthenticationRequestOrdinalVdxfObject.ts => AuthenticationRequestOrdinalVDXFObject.ts} (100%) rename src/vdxf/classes/ordinals/{AuthenticationResponseOrdinalVdxfObject.ts => AuthenticationResponseOrdinalVDXFObject.ts} (100%) rename src/vdxf/classes/ordinals/{DataDescriptorOrdinalVdxfObject.ts => DataDescriptorOrdinalVDXFObject.ts} (100%) rename src/vdxf/classes/ordinals/{DataPacketResponseOrdinalVdxfObject.ts => DataPacketResponseOrdinalVDXFObject.ts} (100%) rename src/vdxf/classes/ordinals/{IdentityUpdateRequestOrdinalVdxfObject.ts => IdentityUpdateRequestOrdinalVDXFObject.ts} (100%) rename src/vdxf/classes/ordinals/{IdentityUpdateResponseOrdinalVdxfObject.ts => IdentityUpdateResponseOrdinalVDXFObject.ts} (100%) rename src/vdxf/classes/ordinals/{OrdinalVdxfObject.ts => OrdinalVDXFObject.ts} (100%) rename src/vdxf/classes/ordinals/{OrdinalVdxfObjectOrdinalMap.ts => OrdinalVDXFObjectOrdinalMap.ts} (100%) rename src/vdxf/classes/ordinals/{ProvisionIdentityDetailsOrdinalVdxfObject.ts => ProvisionIdentityDetailsOrdinalVDXFObject.ts} (100%) rename src/vdxf/classes/ordinals/{SerializableEntityOrdinalVdxfObject.ts => SerializableEntityOrdinalVDXFObject.ts} (100%) rename src/vdxf/classes/ordinals/{UserDataRequestOrdinalVdxfObject.ts => UserDataRequestOrdinalVDXFObject.ts} (100%) rename src/vdxf/classes/ordinals/{UserSpecificDataPacketDetailsOrdinalVdxfObject.ts => UserSpecificDataPacketDetailsOrdinalVDXFObject.ts} (100%) rename src/vdxf/classes/ordinals/{VerusPayInvoiceOrdinalVdxfObject.ts => VerusPayInvoiceOrdinalVDXFObject.ts} (100%) diff --git a/src/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.ts similarity index 100% rename from src/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.ts rename to src/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.ts diff --git a/src/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.ts similarity index 100% rename from src/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.ts rename to src/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.ts diff --git a/src/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/AuthenticationRequestOrdinalVDXFObject.ts similarity index 100% rename from src/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.ts rename to src/vdxf/classes/ordinals/AuthenticationRequestOrdinalVDXFObject.ts diff --git a/src/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/AuthenticationResponseOrdinalVDXFObject.ts similarity index 100% rename from src/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.ts rename to src/vdxf/classes/ordinals/AuthenticationResponseOrdinalVDXFObject.ts diff --git a/src/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/DataDescriptorOrdinalVDXFObject.ts similarity index 100% rename from src/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.ts rename to src/vdxf/classes/ordinals/DataDescriptorOrdinalVDXFObject.ts diff --git a/src/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/DataPacketResponseOrdinalVDXFObject.ts similarity index 100% rename from src/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.ts rename to src/vdxf/classes/ordinals/DataPacketResponseOrdinalVDXFObject.ts diff --git a/src/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVDXFObject.ts similarity index 100% rename from src/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.ts rename to src/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVDXFObject.ts diff --git a/src/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVDXFObject.ts similarity index 100% rename from src/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.ts rename to src/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVDXFObject.ts diff --git a/src/vdxf/classes/ordinals/OrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/OrdinalVDXFObject.ts similarity index 100% rename from src/vdxf/classes/ordinals/OrdinalVdxfObject.ts rename to src/vdxf/classes/ordinals/OrdinalVDXFObject.ts diff --git a/src/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.ts b/src/vdxf/classes/ordinals/OrdinalVDXFObjectOrdinalMap.ts similarity index 100% rename from src/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.ts rename to src/vdxf/classes/ordinals/OrdinalVDXFObjectOrdinalMap.ts diff --git a/src/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVDXFObject.ts similarity index 100% rename from src/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.ts rename to src/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVDXFObject.ts diff --git a/src/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/SerializableEntityOrdinalVDXFObject.ts similarity index 100% rename from src/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.ts rename to src/vdxf/classes/ordinals/SerializableEntityOrdinalVDXFObject.ts diff --git a/src/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/UserDataRequestOrdinalVDXFObject.ts similarity index 100% rename from src/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.ts rename to src/vdxf/classes/ordinals/UserDataRequestOrdinalVDXFObject.ts diff --git a/src/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVDXFObject.ts similarity index 100% rename from src/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.ts rename to src/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVDXFObject.ts diff --git a/src/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.ts b/src/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVDXFObject.ts similarity index 100% rename from src/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.ts rename to src/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVDXFObject.ts From 4eec16024b261931c012f27b0a682476ef2990b7 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Mon, 1 Dec 2025 15:45:10 +0100 Subject: [PATCH 091/123] Capitalize VDXF to match new acronym naming format within files --- src/__tests__/vdxf/genericrequest.test.ts | 34 +- src/__tests__/vdxf/genericresponse.test.ts | 30 +- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 296 +++++++++--------- src/constants/ordinals/register.ts | 50 +-- src/constants/ordinals/types.ts | 4 +- src/vdxf/classes/envelope/GenericEnvelope.ts | 14 +- .../AppEncryptionRequestOrdinalVDXFObject.ts | 12 +- .../AppEncryptionResponseOrdinalVDXFObject.ts | 12 +- .../AuthenticationRequestOrdinalVDXFObject.ts | 12 +- ...AuthenticationResponseOrdinalVDXFObject.ts | 12 +- .../DataDescriptorOrdinalVDXFObject.ts | 12 +- .../DataPacketResponseOrdinalVDXFObject.ts | 12 +- .../IdentityUpdateRequestOrdinalVDXFObject.ts | 12 +- ...IdentityUpdateResponseOrdinalVDXFObject.ts | 12 +- .../classes/ordinals/OrdinalVDXFObject.ts | 60 ++-- .../ordinals/OrdinalVDXFObjectOrdinalMap.ts | 12 +- ...ovisionIdentityDetailsOrdinalVDXFObject.ts | 12 +- .../SerializableEntityOrdinalVDXFObject.ts | 14 +- .../UserDataRequestOrdinalVDXFObject.ts | 12 +- ...cificDataPacketDetailsOrdinalVDXFObject.ts | 12 +- .../VerusPayInvoiceOrdinalVDXFObject.ts | 12 +- src/vdxf/classes/ordinals/index.ts | 30 +- 22 files changed, 344 insertions(+), 344 deletions(-) diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts index 4837fef0..dccd5951 100644 --- a/src/__tests__/vdxf/genericrequest.test.ts +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -5,7 +5,7 @@ import { ContentMultiMap, GenericRequest, IDENTITY_VERSION_PBAAS, IdentityID, Id import { createHash } from 'crypto'; import { VerifiableSignatureData, VerifiableSignatureDataInterface } from '../../vdxf/classes/VerifiableSignatureData'; import { CompactAddressObject } from '../../vdxf/classes/CompactAddressObject'; -import { GeneralTypeOrdinalVdxfObject, IdentityUpdateRequestOrdinalVdxfObject } from '../../vdxf/classes/ordinals'; +import { GeneralTypeOrdinalVDXFObject, IdentityUpdateRequestOrdinalVDXFObject } from '../../vdxf/classes/ordinals'; import { DEEPLINK_PROTOCOL_URL_CURRENT_VERSION, DEEPLINK_PROTOCOL_URL_STRING } from '../../constants/deeplink'; describe('GenericRequest — buffer / URI / QR operations', () => { @@ -24,7 +24,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { } it('round trips with a single detail (no signature / createdAt)', () => { - const detail = new GeneralTypeOrdinalVdxfObject({ + const detail = new GeneralTypeOrdinalVDXFObject({ data: Buffer.from('cafebabe', 'hex'), key: DEFAULT_VERUS_CHAINID }); @@ -39,18 +39,18 @@ describe('GenericRequest — buffer / URI / QR operations', () => { expect(round.flags.toString()).toEqual(req.flags.toString()); expect(round.details.length).toBe(1); const d2 = round.getDetails(0); - expect(d2).toBeInstanceOf(GeneralTypeOrdinalVdxfObject); - expect((d2 as GeneralTypeOrdinalVdxfObject).data).toEqual(detail.data); - expect((d2 as GeneralTypeOrdinalVdxfObject).key).toEqual(detail.key); + expect(d2).toBeInstanceOf(GeneralTypeOrdinalVDXFObject); + expect((d2 as GeneralTypeOrdinalVDXFObject).data).toEqual(detail.data); + expect((d2 as GeneralTypeOrdinalVDXFObject).key).toEqual(detail.key); expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); }); it('round trips with multiple details', () => { - const d1 = new GeneralTypeOrdinalVdxfObject({ + const d1 = new GeneralTypeOrdinalVDXFObject({ data: Buffer.from('aa', 'hex'), key: DEFAULT_VERUS_CHAINID }); - const d2 = new GeneralTypeOrdinalVdxfObject({ + const d2 = new GeneralTypeOrdinalVDXFObject({ data: Buffer.from('bb', 'hex'), key: DEFAULT_VERUS_CHAINID }); @@ -59,8 +59,8 @@ describe('GenericRequest — buffer / URI / QR operations', () => { const round = roundTripBuffer(req); expect(round.details.length).toBe(2); - expect((round.getDetails(0) as GeneralTypeOrdinalVdxfObject).data).toEqual(d1.data); - expect((round.getDetails(1) as GeneralTypeOrdinalVdxfObject).data).toEqual(d2.data); + expect((round.getDetails(0) as GeneralTypeOrdinalVDXFObject).data).toEqual(d1.data); + expect((round.getDetails(1) as GeneralTypeOrdinalVDXFObject).data).toEqual(d2.data); expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); }); @@ -78,7 +78,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { statements: [Buffer.from('1234123412341234123412341234123412341234123412341234123412341234', 'hex')] }); - const detail = new GeneralTypeOrdinalVdxfObject({ + const detail = new GeneralTypeOrdinalVDXFObject({ data: Buffer.from('abcd', 'hex'), key: DEFAULT_VERUS_CHAINID }); @@ -103,7 +103,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { expect(round.hasEncryptResponseToAddress()).toBe(true) expect(round.encryptResponseToAddress?.toAddressString()).toBe(saplingAddr) const d2 = round.getDetails(0); - expect((d2 as GeneralTypeOrdinalVdxfObject).data).toEqual(detail.data); + expect((d2 as GeneralTypeOrdinalVDXFObject).data).toEqual(detail.data); expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); }); @@ -114,7 +114,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { signatureAsVch: Buffer.from('AgX3RgAAAUEgHAVIHuui1Sc9oLxLbglKvmrv47JJLiM0/RBQwzYL1dlamI/2o9qBc93d79laLXWMhQomqZ4U3Mlr3ueuwl4JFA==', 'base64'), }); - const detail = new GeneralTypeOrdinalVdxfObject({ + const detail = new GeneralTypeOrdinalVDXFObject({ data: Buffer.from('abcd', 'hex'), key: DEFAULT_VERUS_CHAINID }); @@ -141,7 +141,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { expect(round.hasEncryptResponseToAddress()).toBe(true) expect(round.encryptResponseToAddress?.toAddressString()).toBe(saplingAddr) const d2 = round.getDetails(0); - expect((d2 as GeneralTypeOrdinalVdxfObject).data).toEqual(detail.data); + expect((d2 as GeneralTypeOrdinalVDXFObject).data).toEqual(detail.data); expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); }); @@ -241,7 +241,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { salt, encryptResponseToAddress: SaplingPaymentAddress.fromAddressString("zs1wczplx4kegw32h8g0f7xwl57p5tvnprwdmnzmdnsw50chcl26f7tws92wk2ap03ykaq6jyyztfa"), details: [ - new IdentityUpdateRequestOrdinalVdxfObject({ data: requestDetails }) + new IdentityUpdateRequestOrdinalVDXFObject({ data: requestDetails }) ], signature: new VerifiableSignatureData(unsignedSigData) }); @@ -260,7 +260,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { }); it('toString / fromQrString consistency', () => { - const detail = new GeneralTypeOrdinalVdxfObject({ + const detail = new GeneralTypeOrdinalVDXFObject({ data: Buffer.from('feed', 'hex'), key: DEFAULT_VERUS_CHAINID }); @@ -274,7 +274,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { }); it('deeplink URI round trip', () => { - const detail = new GeneralTypeOrdinalVdxfObject({ + const detail = new GeneralTypeOrdinalVDXFObject({ data: Buffer.from('face', 'hex'), key: DEFAULT_VERUS_CHAINID }); @@ -290,7 +290,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { }); it('fromQrString should parse correctly', () => { - const detail = new GeneralTypeOrdinalVdxfObject({ + const detail = new GeneralTypeOrdinalVDXFObject({ data: Buffer.from('bead', 'hex'), key: DEFAULT_VERUS_CHAINID }); diff --git a/src/__tests__/vdxf/genericresponse.test.ts b/src/__tests__/vdxf/genericresponse.test.ts index 9ba6ac16..966556a9 100644 --- a/src/__tests__/vdxf/genericresponse.test.ts +++ b/src/__tests__/vdxf/genericresponse.test.ts @@ -5,7 +5,7 @@ import { GenericResponse, IdentityID, IdentityUpdateResponseDetails } from '../. import { createHash } from 'crypto'; import { VerifiableSignatureData, VerifiableSignatureDataInterface } from '../../vdxf/classes/VerifiableSignatureData'; import { CompactAddressObject } from '../../vdxf/classes/CompactAddressObject'; -import { GeneralTypeOrdinalVdxfObject, IdentityUpdateResponseOrdinalVdxfObject } from '../../vdxf/classes/ordinals'; +import { GeneralTypeOrdinalVDXFObject, IdentityUpdateResponseOrdinalVDXFObject } from '../../vdxf/classes/ordinals'; import { TEST_TXID } from '../constants/fixtures'; describe('GenericResponse — buffer / URI / QR operations', () => { @@ -24,7 +24,7 @@ describe('GenericResponse — buffer / URI / QR operations', () => { } it('round trips with a single detail (no signature / createdAt)', () => { - const detail = new GeneralTypeOrdinalVdxfObject({ + const detail = new GeneralTypeOrdinalVDXFObject({ data: Buffer.from('cafebabe', 'hex'), key: DEFAULT_VERUS_CHAINID }); @@ -39,18 +39,18 @@ describe('GenericResponse — buffer / URI / QR operations', () => { expect(round.flags.toString()).toEqual(req.flags.toString()); expect(round.details.length).toBe(1); const d2 = round.getDetails(0); - expect(d2).toBeInstanceOf(GeneralTypeOrdinalVdxfObject); - expect((d2 as GeneralTypeOrdinalVdxfObject).data).toEqual(detail.data); - expect((d2 as GeneralTypeOrdinalVdxfObject).key).toEqual(detail.key); + expect(d2).toBeInstanceOf(GeneralTypeOrdinalVDXFObject); + expect((d2 as GeneralTypeOrdinalVDXFObject).data).toEqual(detail.data); + expect((d2 as GeneralTypeOrdinalVDXFObject).key).toEqual(detail.key); expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); }); it('round trips with multiple details', () => { - const d1 = new GeneralTypeOrdinalVdxfObject({ + const d1 = new GeneralTypeOrdinalVDXFObject({ data: Buffer.from('aa', 'hex'), key: DEFAULT_VERUS_CHAINID }); - const d2 = new GeneralTypeOrdinalVdxfObject({ + const d2 = new GeneralTypeOrdinalVDXFObject({ data: Buffer.from('bb', 'hex'), key: DEFAULT_VERUS_CHAINID }); @@ -59,8 +59,8 @@ describe('GenericResponse — buffer / URI / QR operations', () => { const round = roundTripBuffer(req); expect(round.details.length).toBe(2); - expect((round.getDetails(0) as GeneralTypeOrdinalVdxfObject).data).toEqual(d1.data); - expect((round.getDetails(1) as GeneralTypeOrdinalVdxfObject).data).toEqual(d2.data); + expect((round.getDetails(0) as GeneralTypeOrdinalVDXFObject).data).toEqual(d1.data); + expect((round.getDetails(1) as GeneralTypeOrdinalVDXFObject).data).toEqual(d2.data); expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); }); @@ -78,7 +78,7 @@ describe('GenericResponse — buffer / URI / QR operations', () => { statements: [Buffer.from('1234123412341234123412341234123412341234123412341234123412341234', 'hex')] }); - const detail = new GeneralTypeOrdinalVdxfObject({ + const detail = new GeneralTypeOrdinalVDXFObject({ data: Buffer.from('abcd', 'hex'), key: DEFAULT_VERUS_CHAINID }); @@ -105,7 +105,7 @@ describe('GenericResponse — buffer / URI / QR operations', () => { expect(round.requestHash?.toString('hex')).toBe(requestHash.toString('hex')) expect(round.requestHashType?.toNumber()).toBe(requestHashType.toNumber()) const d2 = round.getDetails(0); - expect((d2 as GeneralTypeOrdinalVdxfObject).data).toEqual(detail.data); + expect((d2 as GeneralTypeOrdinalVDXFObject).data).toEqual(detail.data); expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); }); @@ -116,7 +116,7 @@ describe('GenericResponse — buffer / URI / QR operations', () => { signatureAsVch: Buffer.from('AgX3RgAAAUEgHAVIHuui1Sc9oLxLbglKvmrv47JJLiM0/RBQwzYL1dlamI/2o9qBc93d79laLXWMhQomqZ4U3Mlr3ueuwl4JFA==', 'base64'), }); - const detail = new GeneralTypeOrdinalVdxfObject({ + const detail = new GeneralTypeOrdinalVDXFObject({ data: Buffer.from('abcd', 'hex'), key: DEFAULT_VERUS_CHAINID }); @@ -145,7 +145,7 @@ describe('GenericResponse — buffer / URI / QR operations', () => { expect(round.requestHash?.toString('hex')).toBe(requestHash.toString('hex')) expect(round.requestHashType?.toNumber()).toBe(requestHashType.toNumber()) const d2 = round.getDetails(0); - expect((d2 as GeneralTypeOrdinalVdxfObject).data).toEqual(detail.data); + expect((d2 as GeneralTypeOrdinalVDXFObject).data).toEqual(detail.data); expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); }); @@ -173,7 +173,7 @@ describe('GenericResponse — buffer / URI / QR operations', () => { createdAt: createdAt, salt, details: [ - new IdentityUpdateResponseOrdinalVdxfObject({ data: responseDetails }) + new IdentityUpdateResponseOrdinalVDXFObject({ data: responseDetails }) ], signature: new VerifiableSignatureData(unsignedSigData) }); @@ -192,7 +192,7 @@ describe('GenericResponse — buffer / URI / QR operations', () => { }); it('toString / fromQrString consistency', () => { - const detail = new GeneralTypeOrdinalVdxfObject({ + const detail = new GeneralTypeOrdinalVDXFObject({ data: Buffer.from('feed', 'hex'), key: DEFAULT_VERUS_CHAINID }); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index a72564ac..16fc9b86 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -1,20 +1,20 @@ import { BN } from 'bn.js'; import { - AppEncryptionRequestOrdinalVdxfObject, - GeneralTypeOrdinalVdxfObject, - getOrdinalVdxfObjectClassForType, - IdentityUpdateRequestOrdinalVdxfObject, - IdentityUpdateResponseOrdinalVdxfObject, - AuthenticationRequestOrdinalVdxfObject, - AuthenticationResponseOrdinalVdxfObject, - OrdinalVdxfObject, - UserDataRequestOrdinalVdxfObject, - UserSpecificDataPacketDetailsOrdinalVdxfObject, - DataPacketResponseOrdinalVdxfObject + AppEncryptionRequestOrdinalVDXFObject, + GeneralTypeOrdinalVDXFObject, + getOrdinalVDXFObjectClassForType, + IdentityUpdateRequestOrdinalVDXFObject, + IdentityUpdateResponseOrdinalVDXFObject, + AuthenticationRequestOrdinalVDXFObject, + AuthenticationResponseOrdinalVDXFObject, + OrdinalVDXFObject, + UserDataRequestOrdinalVDXFObject, + UserSpecificDataPacketDetailsOrdinalVDXFObject, + DataPacketResponseOrdinalVDXFObject } from '../../vdxf/classes/ordinals'; import { - DataDescriptorOrdinalVdxfObject -} from '../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject'; + DataDescriptorOrdinalVDXFObject +} from '../../vdxf/classes/ordinals/DataDescriptorOrdinalVDXFObject'; import { DataDescriptor, DEST_PKH, SaplingPaymentAddress, TransferDestination } from '../../pbaas'; import { AppEncryptionRequestDetails, @@ -28,15 +28,15 @@ import { VerusPayInvoiceDetails, UserDataRequestDetails, UserSpecificDataPacketDetails, - AppEncryptionResponseOrdinalVdxfObject, + AppEncryptionResponseOrdinalVDXFObject, AppEncryptionResponseDetails } from '../../vdxf/classes'; import { DEFAULT_VERUS_CHAINID } from '../../constants/pbaas'; import { fromBase58Check } from '../../utils/address'; import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_AUTHENTICATION_REQUEST, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from '../../constants/ordinals/ordinals'; -import { VerusPayInvoiceOrdinalVdxfObject } from '../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject'; +import { VerusPayInvoiceOrdinalVDXFObject } from '../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVDXFObject'; import { TEST_CHALLENGE_ID, TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, TEST_EXPIRYHEIGHT, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3, TEST_REQUESTID, TEST_SALT, TEST_SYSTEMID, TEST_TXID } from '../constants/fixtures'; -import { ProvisionIdentityDetailsOrdinalVdxfObject } from '../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject'; +import { ProvisionIdentityDetailsOrdinalVDXFObject } from '../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVDXFObject'; import { BigNumber } from '../../utils/types/BigNumber'; import { DataPacketResponse } from '../../vdxf/classes/datapacket/DataPacketResponse'; import { VerifiableSignatureData } from '../../vdxf/classes/VerifiableSignatureData'; @@ -53,11 +53,11 @@ function createCompactAddressObject(type: BigNumber, address: string): CompactAd return obj; } -describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { - function roundTripBuffer(obj: T): T { +describe('OrdinalVDXFObject and subclasses round-trip serialization', () => { + function roundTripBuffer(obj: T): T { const buf = obj.toBuffer(); // Use the factory createFromBuffer so the correct subclass is used - const { obj: parsed } = OrdinalVdxfObject.createFromBuffer(buf); + const { obj: parsed } = OrdinalVDXFObject.createFromBuffer(buf); // Type assertion const parsedTyped = parsed as T; @@ -67,36 +67,36 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { return parsedTyped; } - function roundTripJson(obj: T): T { + function roundTripJson(obj: T): T { const json = obj.toJson(); // Depending on subclass, call static fromJson - let newObj: OrdinalVdxfObject; - if (obj instanceof DataDescriptorOrdinalVdxfObject) { - newObj = DataDescriptorOrdinalVdxfObject.fromJson(json as any); - } else if (obj instanceof VerusPayInvoiceOrdinalVdxfObject) { - newObj = VerusPayInvoiceOrdinalVdxfObject.fromJson(json as any); - } else if (obj instanceof GeneralTypeOrdinalVdxfObject) { - newObj = GeneralTypeOrdinalVdxfObject.fromJson(json); - } else if (obj instanceof IdentityUpdateRequestOrdinalVdxfObject) { - newObj = IdentityUpdateRequestOrdinalVdxfObject.fromJson(json as any); - } else if (obj instanceof IdentityUpdateResponseOrdinalVdxfObject) { - newObj = IdentityUpdateResponseOrdinalVdxfObject.fromJson(json as any); - } else if (obj instanceof AuthenticationRequestOrdinalVdxfObject) { - newObj = AuthenticationRequestOrdinalVdxfObject.fromJson(json as any); - } else if (obj instanceof AuthenticationResponseOrdinalVdxfObject) { - newObj = AuthenticationResponseOrdinalVdxfObject.fromJson(json as any); - } else if (obj instanceof ProvisionIdentityDetailsOrdinalVdxfObject) { - newObj = ProvisionIdentityDetailsOrdinalVdxfObject.fromJson(json as any); - } else if (obj instanceof AppEncryptionRequestOrdinalVdxfObject) { - newObj = AppEncryptionRequestOrdinalVdxfObject.fromJson(json as any); - } else if (obj instanceof DataPacketResponseOrdinalVdxfObject) { - newObj = DataPacketResponseOrdinalVdxfObject.fromJson(json as any); - } else if (obj instanceof UserDataRequestOrdinalVdxfObject) { - newObj = UserDataRequestOrdinalVdxfObject.fromJson(json as any); - } else if (obj instanceof UserSpecificDataPacketDetailsOrdinalVdxfObject) { - newObj = UserSpecificDataPacketDetailsOrdinalVdxfObject.fromJson(json as any); - } else if (obj instanceof AppEncryptionResponseOrdinalVdxfObject) { - newObj = AppEncryptionResponseOrdinalVdxfObject.fromJson(json as any); + let newObj: OrdinalVDXFObject; + if (obj instanceof DataDescriptorOrdinalVDXFObject) { + newObj = DataDescriptorOrdinalVDXFObject.fromJson(json as any); + } else if (obj instanceof VerusPayInvoiceOrdinalVDXFObject) { + newObj = VerusPayInvoiceOrdinalVDXFObject.fromJson(json as any); + } else if (obj instanceof GeneralTypeOrdinalVDXFObject) { + newObj = GeneralTypeOrdinalVDXFObject.fromJson(json); + } else if (obj instanceof IdentityUpdateRequestOrdinalVDXFObject) { + newObj = IdentityUpdateRequestOrdinalVDXFObject.fromJson(json as any); + } else if (obj instanceof IdentityUpdateResponseOrdinalVDXFObject) { + newObj = IdentityUpdateResponseOrdinalVDXFObject.fromJson(json as any); + } else if (obj instanceof AuthenticationRequestOrdinalVDXFObject) { + newObj = AuthenticationRequestOrdinalVDXFObject.fromJson(json as any); + } else if (obj instanceof AuthenticationResponseOrdinalVDXFObject) { + newObj = AuthenticationResponseOrdinalVDXFObject.fromJson(json as any); + } else if (obj instanceof ProvisionIdentityDetailsOrdinalVDXFObject) { + newObj = ProvisionIdentityDetailsOrdinalVDXFObject.fromJson(json as any); + } else if (obj instanceof AppEncryptionRequestOrdinalVDXFObject) { + newObj = AppEncryptionRequestOrdinalVDXFObject.fromJson(json as any); + } else if (obj instanceof DataPacketResponseOrdinalVDXFObject) { + newObj = DataPacketResponseOrdinalVDXFObject.fromJson(json as any); + } else if (obj instanceof UserDataRequestOrdinalVDXFObject) { + newObj = UserDataRequestOrdinalVDXFObject.fromJson(json as any); + } else if (obj instanceof UserSpecificDataPacketDetailsOrdinalVDXFObject) { + newObj = UserSpecificDataPacketDetailsOrdinalVDXFObject.fromJson(json as any); + } else if (obj instanceof AppEncryptionResponseOrdinalVDXFObject) { + newObj = AppEncryptionResponseOrdinalVDXFObject.fromJson(json as any); } else { throw new Error("Unrecognized type") } @@ -104,9 +104,9 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { return newObj as T; } - it('should serialize / deserialize a GeneralTypeOrdinalVdxfObject (opaque buffer) via buffer', () => { + it('should serialize / deserialize a GeneralTypeOrdinalVDXFObject (opaque buffer) via buffer', () => { const sample = Buffer.from('deadbeef', 'hex'); - const obj = new GeneralTypeOrdinalVdxfObject({ data: sample, key: DEFAULT_VERUS_CHAINID }); + const obj = new GeneralTypeOrdinalVDXFObject({ data: sample, key: DEFAULT_VERUS_CHAINID }); // check some properties expect(obj.isDefinedByVdxfKey()).toBe(true); @@ -114,20 +114,20 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(obj.key).toEqual(DEFAULT_VERUS_CHAINID); const round = roundTripBuffer(obj); - expect(round).toBeInstanceOf(GeneralTypeOrdinalVdxfObject); - expect((round as GeneralTypeOrdinalVdxfObject).data).toEqual(sample); - expect(((round as GeneralTypeOrdinalVdxfObject).key)).toEqual(DEFAULT_VERUS_CHAINID); + expect(round).toBeInstanceOf(GeneralTypeOrdinalVDXFObject); + expect((round as GeneralTypeOrdinalVDXFObject).data).toEqual(sample); + expect(((round as GeneralTypeOrdinalVDXFObject).key)).toEqual(DEFAULT_VERUS_CHAINID); // Their JSON should match hex const j = obj.toJson(); expect(j.data).toEqual(sample.toString('hex')); - const roundJ = roundTripJson(obj); - expect(roundJ).toBeInstanceOf(GeneralTypeOrdinalVdxfObject); - expect((roundJ as GeneralTypeOrdinalVdxfObject).data).toEqual(sample); - expect(((roundJ as GeneralTypeOrdinalVdxfObject).key)).toEqual(DEFAULT_VERUS_CHAINID); + const roundJ = roundTripJson(obj); + expect(roundJ).toBeInstanceOf(GeneralTypeOrdinalVDXFObject); + expect((roundJ as GeneralTypeOrdinalVDXFObject).data).toEqual(sample); + expect(((roundJ as GeneralTypeOrdinalVDXFObject).key)).toEqual(DEFAULT_VERUS_CHAINID); }); - it('should serialize / deserialize a DataDescriptorOrdinalVdxfObject via buffer', () => { + it('should serialize / deserialize a DataDescriptorOrdinalVDXFObject via buffer', () => { // Create a DataDescriptor with some fields const dd = DataDescriptor.fromJson({ version: 1, @@ -149,11 +149,11 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { // Force flags, etc. dd.SetFlags(); - const obj = new DataDescriptorOrdinalVdxfObject({ data: dd }); + const obj = new DataDescriptorOrdinalVDXFObject({ data: dd }); const round = roundTripBuffer(obj); - expect(round).toBeInstanceOf(DataDescriptorOrdinalVdxfObject); - const dd2 = (round as DataDescriptorOrdinalVdxfObject).data; + expect(round).toBeInstanceOf(DataDescriptorOrdinalVDXFObject); + const dd2 = (round as DataDescriptorOrdinalVDXFObject).data; expect(dd2.version.toString()).toEqual(dd.version.toString()); expect(dd2.flags.toString()).toEqual(dd.flags.toString()); expect(dd2.objectdata).toEqual(dd.objectdata); @@ -166,8 +166,8 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { // The JSON data field should be the DataDescriptor JSON expect(json.data).toBeDefined(); const roundJ = roundTripJson(obj); - expect(roundJ).toBeInstanceOf(DataDescriptorOrdinalVdxfObject); - const dd3 = (roundJ as DataDescriptorOrdinalVdxfObject).data; + expect(roundJ).toBeInstanceOf(DataDescriptorOrdinalVDXFObject); + const dd3 = (roundJ as DataDescriptorOrdinalVDXFObject).data; expect(dd3.version.toString()).toBe(dd.version.toString()); expect(dd3.flags.toString()).toBe(dd.flags.toString()); expect(dd3.objectdata).toEqual(dd.objectdata); @@ -175,7 +175,7 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(dd3.mimeType).toBe(dd.mimeType); }); - it('should serialize / deserialize a VerusPayInvoiceOrdinalVdxfObject via buffer', () => { + it('should serialize / deserialize a VerusPayInvoiceOrdinalVDXFObject via buffer', () => { // Create a VerusPayInvoiceDetails with some fields const details = new VerusPayInvoiceDetails({ amount: new BN(10000000000, 10), @@ -189,24 +189,24 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { details.amount = new BN(12345); details.requestedcurrencyid = DEFAULT_VERUS_CHAINID; - const obj = new VerusPayInvoiceOrdinalVdxfObject({ data: details }); + const obj = new VerusPayInvoiceOrdinalVDXFObject({ data: details }); const round = roundTripBuffer(obj); - expect(round).toBeInstanceOf(VerusPayInvoiceOrdinalVdxfObject); - const d2 = (round as VerusPayInvoiceOrdinalVdxfObject).data; + expect(round).toBeInstanceOf(VerusPayInvoiceOrdinalVDXFObject); + const d2 = (round as VerusPayInvoiceOrdinalVDXFObject).data; expect(d2.requestedcurrencyid).toEqual(details.requestedcurrencyid); expect(d2.amount.toString()).toEqual(details.amount.toString()); const json = obj.toJson(); expect(json.data).toBeDefined(); const roundJ = roundTripJson(obj); - expect(roundJ).toBeInstanceOf(VerusPayInvoiceOrdinalVdxfObject); - const d3 = (roundJ as VerusPayInvoiceOrdinalVdxfObject).data; + expect(roundJ).toBeInstanceOf(VerusPayInvoiceOrdinalVDXFObject); + const d3 = (roundJ as VerusPayInvoiceOrdinalVDXFObject).data; expect(d3.requestedcurrencyid).toEqual(details.requestedcurrencyid); expect(d3.amount.toString()).toEqual(details.amount.toString()); }); - it('should serialize / deserialize a IdentityUpdateRequestOrdinalVdxfObject via buffer', () => { + it('should serialize / deserialize a IdentityUpdateRequestOrdinalVDXFObject via buffer', () => { const details = IdentityUpdateRequestDetails.fromCLIJson( TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, { @@ -221,12 +221,12 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { } ); - const obj = new IdentityUpdateRequestOrdinalVdxfObject({ data: details }); + const obj = new IdentityUpdateRequestOrdinalVDXFObject({ data: details }); const round = roundTripBuffer(obj); - expect(round).toBeInstanceOf(IdentityUpdateRequestOrdinalVdxfObject); + expect(round).toBeInstanceOf(IdentityUpdateRequestOrdinalVDXFObject); - const d2 = (round as IdentityUpdateRequestOrdinalVdxfObject).data; + const d2 = (round as IdentityUpdateRequestOrdinalVDXFObject).data; expect(d2.systemID!.toAddress()).toEqual(details.systemID!.toAddress()); expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d2.expiryHeight!.toString()).toEqual(details.expiryHeight!.toString()); @@ -235,41 +235,41 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const json = obj.toJson(); expect(json.data).toBeDefined(); const roundJ = roundTripJson(obj); - expect(roundJ).toBeInstanceOf(IdentityUpdateRequestOrdinalVdxfObject); + expect(roundJ).toBeInstanceOf(IdentityUpdateRequestOrdinalVDXFObject); - const d3 = (roundJ as IdentityUpdateRequestOrdinalVdxfObject).data; + const d3 = (roundJ as IdentityUpdateRequestOrdinalVDXFObject).data; expect(d3.systemID!.toAddress()).toEqual(details.systemID!.toAddress()); expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d3.expiryHeight!.toString()).toEqual(details.expiryHeight!.toString()); expect(d3.txid!.toString('hex')).toEqual(details.txid!.toString('hex')); }); - it('should serialize / deserialize a IdentityUpdateResponseOrdinalVdxfObject via buffer', () => { + it('should serialize / deserialize a IdentityUpdateResponseOrdinalVDXFObject via buffer', () => { const details = new IdentityUpdateResponseDetails({ requestID: TEST_REQUESTID, txid: Buffer.from(TEST_TXID, 'hex').reverse() }); - const obj = new IdentityUpdateResponseOrdinalVdxfObject({ data: details }); + const obj = new IdentityUpdateResponseOrdinalVDXFObject({ data: details }); const round = roundTripBuffer(obj); - expect(round).toBeInstanceOf(IdentityUpdateResponseOrdinalVdxfObject); + expect(round).toBeInstanceOf(IdentityUpdateResponseOrdinalVDXFObject); - const d2 = (round as IdentityUpdateResponseOrdinalVdxfObject).data; + const d2 = (round as IdentityUpdateResponseOrdinalVDXFObject).data; expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d2.txid!.toString('hex')).toEqual(details.txid!.toString('hex')); const json = obj.toJson(); expect(json.data).toBeDefined(); const roundJ = roundTripJson(obj); - expect(roundJ).toBeInstanceOf(IdentityUpdateResponseOrdinalVdxfObject); + expect(roundJ).toBeInstanceOf(IdentityUpdateResponseOrdinalVDXFObject); - const d3 = (roundJ as IdentityUpdateResponseOrdinalVdxfObject).data; + const d3 = (roundJ as IdentityUpdateResponseOrdinalVDXFObject).data; expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d3.txid!.toString('hex')).toEqual(details.txid!.toString('hex')); }); - it('should serialize / deserialize a AuthenticationRequestOrdinalVdxfObject via buffer', () => { + it('should serialize / deserialize a AuthenticationRequestOrdinalVDXFObject via buffer', () => { const details = new AuthenticationRequestDetails({ requestID: TEST_CHALLENGE_ID, recipientConstraints: [ @@ -281,48 +281,48 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expiryTime: new BN(2938475938457) }); - const obj = new AuthenticationRequestOrdinalVdxfObject({ data: details }); + const obj = new AuthenticationRequestOrdinalVDXFObject({ data: details }); const round = roundTripBuffer(obj); - expect(round).toBeInstanceOf(AuthenticationRequestOrdinalVdxfObject); + expect(round).toBeInstanceOf(AuthenticationRequestOrdinalVDXFObject); - const d2 = (round as AuthenticationRequestOrdinalVdxfObject).data; + const d2 = (round as AuthenticationRequestOrdinalVDXFObject).data; expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d2.expiryTime!.toNumber()).toEqual(details.expiryTime!.toNumber()); const json = obj.toJson(); expect(json.data).toBeDefined(); const roundJ = roundTripJson(obj); - expect(roundJ).toBeInstanceOf(AuthenticationRequestOrdinalVdxfObject); + expect(roundJ).toBeInstanceOf(AuthenticationRequestOrdinalVDXFObject); - const d3 = (roundJ as AuthenticationRequestOrdinalVdxfObject).data; + const d3 = (roundJ as AuthenticationRequestOrdinalVDXFObject).data; expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d3.expiryTime!.toNumber()).toEqual(details.expiryTime!.toNumber()); }); - it('should serialize / deserialize a AuthenticationResponseOrdinalVdxfObject via buffer', () => { + it('should serialize / deserialize a AuthenticationResponseOrdinalVDXFObject via buffer', () => { const details = new AuthenticationResponseDetails({ requestID: TEST_CHALLENGE_ID }); - const obj = new AuthenticationResponseOrdinalVdxfObject({ data: details }); + const obj = new AuthenticationResponseOrdinalVDXFObject({ data: details }); const round = roundTripBuffer(obj); - expect(round).toBeInstanceOf(AuthenticationResponseOrdinalVdxfObject); + expect(round).toBeInstanceOf(AuthenticationResponseOrdinalVDXFObject); - const d2 = (round as AuthenticationResponseOrdinalVdxfObject).data; + const d2 = (round as AuthenticationResponseOrdinalVDXFObject).data; expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); const json = obj.toJson(); expect(json.data).toBeDefined(); const roundJ = roundTripJson(obj); - expect(roundJ).toBeInstanceOf(AuthenticationResponseOrdinalVdxfObject); + expect(roundJ).toBeInstanceOf(AuthenticationResponseOrdinalVDXFObject); - const d3 = (roundJ as AuthenticationResponseOrdinalVdxfObject).data; + const d3 = (roundJ as AuthenticationResponseOrdinalVDXFObject).data; expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); }); - it('should serialize / deserialize a ProvisionIdentityDetailsOrdinalVdxfObject', () => { + it('should serialize / deserialize a ProvisionIdentityDetailsOrdinalVDXFObject', () => { const details = new ProvisionIdentityDetails({ version: new BN(1, 10), flags: ProvisionIdentityDetails.FLAG_HAS_SYSTEMID.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID), @@ -330,26 +330,26 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { parentID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }) - const obj = new ProvisionIdentityDetailsOrdinalVdxfObject({ data: details }); + const obj = new ProvisionIdentityDetailsOrdinalVDXFObject({ data: details }); const round = roundTripBuffer(obj); - expect(round).toBeInstanceOf(ProvisionIdentityDetailsOrdinalVdxfObject); + expect(round).toBeInstanceOf(ProvisionIdentityDetailsOrdinalVDXFObject); - const d2 = (round as ProvisionIdentityDetailsOrdinalVdxfObject).data; + const d2 = (round as ProvisionIdentityDetailsOrdinalVDXFObject).data; expect(d2.systemID!.toIAddress()).toEqual(details.systemID!.toIAddress()); expect(d2.parentID!.toIAddress()).toEqual(details.parentID!.toIAddress()); const json = obj.toJson(); expect(json.data).toBeDefined(); const roundJ = roundTripJson(obj); - expect(roundJ).toBeInstanceOf(ProvisionIdentityDetailsOrdinalVdxfObject); + expect(roundJ).toBeInstanceOf(ProvisionIdentityDetailsOrdinalVDXFObject); - const d3 = (roundJ as ProvisionIdentityDetailsOrdinalVdxfObject).data; + const d3 = (roundJ as ProvisionIdentityDetailsOrdinalVDXFObject).data; expect(d3.systemID!.toIAddress()).toEqual(details.systemID!.toIAddress()); expect(d3.parentID!.toIAddress()).toEqual(details.parentID!.toIAddress()); }); - it('should serialize / deserialize an AppEncryptionRequestOrdinalVdxfObject', () => { + it('should serialize / deserialize an AppEncryptionRequestOrdinalVDXFObject', () => { const details = new AppEncryptionRequestDetails({ version: AppEncryptionRequestDetails.DEFAULT_VERSION, flags: AppEncryptionRequestDetails.HAS_DERIVATION_ID @@ -361,12 +361,12 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); - const obj = new AppEncryptionRequestOrdinalVdxfObject({ data: details }); + const obj = new AppEncryptionRequestOrdinalVDXFObject({ data: details }); const round = roundTripBuffer(obj); - expect(round).toBeInstanceOf(AppEncryptionRequestOrdinalVdxfObject); + expect(round).toBeInstanceOf(AppEncryptionRequestOrdinalVDXFObject); - const d2 = (round as AppEncryptionRequestOrdinalVdxfObject).data; + const d2 = (round as AppEncryptionRequestOrdinalVDXFObject).data; expect(d2.appOrDelegatedID!.toIAddress()).toEqual(details.appOrDelegatedID!.toIAddress()); expect(d2.encryptToZAddress!).toEqual(details.encryptToZAddress); expect(d2.derivationNumber!.toString()).toEqual(details.derivationNumber!.toString()); @@ -376,9 +376,9 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const json = obj.toJson(); expect(json.data).toBeDefined(); const roundJ = roundTripJson(obj); - expect(roundJ).toBeInstanceOf(AppEncryptionRequestOrdinalVdxfObject); + expect(roundJ).toBeInstanceOf(AppEncryptionRequestOrdinalVDXFObject); - const d3 = (roundJ as AppEncryptionRequestOrdinalVdxfObject).data; + const d3 = (roundJ as AppEncryptionRequestOrdinalVDXFObject).data; expect(d3.appOrDelegatedID!.toIAddress()).toEqual(details.appOrDelegatedID!.toIAddress()); expect(d3.encryptToZAddress!).toEqual(details.encryptToZAddress); expect(d3.derivationNumber!.toString()).toEqual(details.derivationNumber!.toString()); @@ -386,35 +386,35 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { expect(d3.requestID).toEqual(details.requestID); }); - it('getOrdinalVdxfObjectClassForType should map to correct classes', () => { - expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_DATA_DESCRIPTOR)) - .toBe(DataDescriptorOrdinalVdxfObject); - expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_VERUSPAY_INVOICE)) - .toBe(VerusPayInvoiceOrdinalVdxfObject); - expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST)) - .toBe(IdentityUpdateRequestOrdinalVdxfObject); - expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE)) - .toBe(IdentityUpdateResponseOrdinalVdxfObject); - expect(getOrdinalVdxfObjectClassForType(VDXF_OBJECT_RESERVED_BYTE_I_ADDR)) - .toBe(GeneralTypeOrdinalVdxfObject); - expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_AUTHENTICATION_REQUEST)) - .toBe(AuthenticationRequestOrdinalVdxfObject); - expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS)) - .toBe(ProvisionIdentityDetailsOrdinalVdxfObject); - expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST)) - .toBe(AppEncryptionRequestOrdinalVdxfObject); - expect(getOrdinalVdxfObjectClassForType(VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE)) - .toBe(AppEncryptionResponseOrdinalVdxfObject); + it('getOrdinalVDXFObjectClassForType should map to correct classes', () => { + expect(getOrdinalVDXFObjectClassForType(VDXF_ORDINAL_DATA_DESCRIPTOR)) + .toBe(DataDescriptorOrdinalVDXFObject); + expect(getOrdinalVDXFObjectClassForType(VDXF_ORDINAL_VERUSPAY_INVOICE)) + .toBe(VerusPayInvoiceOrdinalVDXFObject); + expect(getOrdinalVDXFObjectClassForType(VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST)) + .toBe(IdentityUpdateRequestOrdinalVDXFObject); + expect(getOrdinalVDXFObjectClassForType(VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE)) + .toBe(IdentityUpdateResponseOrdinalVDXFObject); + expect(getOrdinalVDXFObjectClassForType(VDXF_OBJECT_RESERVED_BYTE_I_ADDR)) + .toBe(GeneralTypeOrdinalVDXFObject); + expect(getOrdinalVDXFObjectClassForType(VDXF_ORDINAL_AUTHENTICATION_REQUEST)) + .toBe(AuthenticationRequestOrdinalVDXFObject); + expect(getOrdinalVDXFObjectClassForType(VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS)) + .toBe(ProvisionIdentityDetailsOrdinalVDXFObject); + expect(getOrdinalVDXFObjectClassForType(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST)) + .toBe(AppEncryptionRequestOrdinalVDXFObject); + expect(getOrdinalVDXFObjectClassForType(VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE)) + .toBe(AppEncryptionResponseOrdinalVDXFObject); // unrecognized - expect(() => getOrdinalVdxfObjectClassForType(new BN(999))).toThrow(); + expect(() => getOrdinalVDXFObjectClassForType(new BN(999))).toThrow(); }); - it('base OrdinalVdxfObject buffer round trip (no key path)', () => { + it('base OrdinalVDXFObject buffer round trip (no key path)', () => { // This tests the fallback when no key is provided - const base = new OrdinalVdxfObject({ type: VDXF_ORDINAL_DATA_DESCRIPTOR }); + const base = new OrdinalVDXFObject({ type: VDXF_ORDINAL_DATA_DESCRIPTOR }); const buf = base.toBuffer(); - const parsed = new OrdinalVdxfObject(); + const parsed = new OrdinalVDXFObject(); parsed.fromBuffer(buf); expect(parsed.type.toString()).toBe(base.type.toString()); @@ -436,24 +436,24 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { }) }); - const obj = new DataPacketResponseOrdinalVdxfObject({ data: details }); + const obj = new DataPacketResponseOrdinalVDXFObject({ data: details }); const round = roundTripBuffer(obj); - expect(round).toBeInstanceOf(DataPacketResponseOrdinalVdxfObject); + expect(round).toBeInstanceOf(DataPacketResponseOrdinalVDXFObject); - const d2 = (round as DataPacketResponseOrdinalVdxfObject).data; + const d2 = (round as DataPacketResponseOrdinalVDXFObject).data; expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); const json = obj.toJson(); expect(json.data).toBeDefined(); const roundJ = roundTripJson(obj); - expect(roundJ).toBeInstanceOf(DataPacketResponseOrdinalVdxfObject); + expect(roundJ).toBeInstanceOf(DataPacketResponseOrdinalVDXFObject); - const d3 = (roundJ as DataPacketResponseOrdinalVdxfObject).data; + const d3 = (roundJ as DataPacketResponseOrdinalVDXFObject).data; expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); }); - it('should serialize / deserialize a UserDataRequestOrdinalVdxfObject via buffer', () => { + it('should serialize / deserialize a UserDataRequestOrdinalVDXFObject via buffer', () => { const details = new UserDataRequestDetails({ version: new BN(1), flags: UserDataRequestDetails.FULL_DATA.or(UserDataRequestDetails.ATTESTATION).or(UserDataRequestDetails.HAS_SIGNER), @@ -462,12 +462,12 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); - const obj = new UserDataRequestOrdinalVdxfObject({ data: details }); + const obj = new UserDataRequestOrdinalVDXFObject({ data: details }); const round = roundTripBuffer(obj); - expect(round).toBeInstanceOf(UserDataRequestOrdinalVdxfObject); + expect(round).toBeInstanceOf(UserDataRequestOrdinalVDXFObject); - const d2 = (round as UserDataRequestOrdinalVdxfObject).data; + const d2 = (round as UserDataRequestOrdinalVDXFObject).data; expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d2.searchDataKey).toEqual(details.searchDataKey); expect(d2.signer!.toIAddress()).toEqual(details.signer!.toIAddress()); @@ -475,15 +475,15 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const json = obj.toJson(); expect(json.data).toBeDefined(); const roundJ = roundTripJson(obj); - expect(roundJ).toBeInstanceOf(UserDataRequestOrdinalVdxfObject); + expect(roundJ).toBeInstanceOf(UserDataRequestOrdinalVDXFObject); - const d3 = (roundJ as UserDataRequestOrdinalVdxfObject).data; + const d3 = (roundJ as UserDataRequestOrdinalVDXFObject).data; expect(d3.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d3.searchDataKey).toEqual(details.searchDataKey); expect(d3.signer!.toIAddress()).toEqual(details.signer!.toIAddress()); }); - it('should serialize / deserialize a UserSpecificDataPacketDetailsOrdinalVdxfObject via buffer', () => { + it('should serialize / deserialize a UserSpecificDataPacketDetailsOrdinalVDXFObject via buffer', () => { const details = new UserSpecificDataPacketDetails({ version: new BN(1), flags: UserSpecificDataPacketDetails.HAS_STATEMENTS.or(UserSpecificDataPacketDetails.HAS_SIGNATURE), @@ -500,12 +500,12 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { detailsID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); - const obj = new UserSpecificDataPacketDetailsOrdinalVdxfObject({ data: details }); + const obj = new UserSpecificDataPacketDetailsOrdinalVDXFObject({ data: details }); const round = roundTripBuffer(obj); - expect(round).toBeInstanceOf(UserSpecificDataPacketDetailsOrdinalVdxfObject); + expect(round).toBeInstanceOf(UserSpecificDataPacketDetailsOrdinalVDXFObject); - const d2 = (round as UserSpecificDataPacketDetailsOrdinalVdxfObject).data; + const d2 = (round as UserSpecificDataPacketDetailsOrdinalVDXFObject).data; expect(d2.detailsID!.toString()).toEqual(details.detailsID!.toString()); expect(d2.signableObjects.length).toBe(1); expect(d2.statements?.length).toBe(2); @@ -514,16 +514,16 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { const json = obj.toJson(); expect(json.data).toBeDefined(); const roundJ = roundTripJson(obj); - expect(roundJ).toBeInstanceOf(UserSpecificDataPacketDetailsOrdinalVdxfObject); + expect(roundJ).toBeInstanceOf(UserSpecificDataPacketDetailsOrdinalVDXFObject); - const d3 = (roundJ as UserSpecificDataPacketDetailsOrdinalVdxfObject).data; + const d3 = (roundJ as UserSpecificDataPacketDetailsOrdinalVDXFObject).data; expect(d3.detailsID!.toString()).toEqual(details.detailsID!.toString()); expect(d3.signableObjects.length).toBe(1); expect(d3.statements?.length).toBe(2); expect(d3.signature?.signatureAsVch.toString('hex')).toBe("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf"); }); - it('should serialize / deserialize an AppEncryptionResponseOrdinalVdxfObject', () => { + it('should serialize / deserialize an AppEncryptionResponseOrdinalVDXFObject', () => { const testViewingKey = 'zxviews1q0njl87fqqqqpq8vghkp6nz9wx48mwelukvhx3yfwg7msatglv4xy8rrh87k9z472edvlrt950qyy6r766dxnpqktxug7t2wy80s4ug325dwp9hf4vw9a6ethf2mwc9wan28p88dq8q2e8sdlw2mhffg6hy92tjyuquz7a8reqdz905x6xt6kqdx5wn7jvas0733hends8q6s8k87emn6m060xdnhgmvn4zmx0ssrwve84lzxkqu2dnfq5qsjwrtlject0an0k282rsnx0kq4'; const testSpendingKey = 'secret-extended-key-main1q0njl87fqqqqpq8vghkp6nz9wx48mwelukvhx3yfwg7msatglv4xy8rrh87k9z472el95h53ym2tku2dazny0j2vfukgmp6fu3k7edzcx9n8egesc32sdy3xr4s2ep4skgc7t5j5zds4ws7hf2nuszf7ltfn2nc5rk3k77gyeqdz905x6xt6kqdx5wn7jvas0733hends8q6s8k87emn6m060xdnhgmvn4zmx0ssrwve84lzxkqu2dnfq5qsjwrtlject0an0k282rs0gws78'; @@ -540,12 +540,12 @@ describe('OrdinalVdxfObject and subclasses round-trip serialization', () => { address: SaplingPaymentAddress.fromAddressString(testAddress) }); - const obj = new AppEncryptionResponseOrdinalVdxfObject({ data: details }); + const obj = new AppEncryptionResponseOrdinalVDXFObject({ data: details }); const round = roundTripBuffer(obj); - expect(round).toBeInstanceOf(AppEncryptionResponseOrdinalVdxfObject); + expect(round).toBeInstanceOf(AppEncryptionResponseOrdinalVDXFObject); - const d2 = (round as AppEncryptionResponseOrdinalVdxfObject).data; + const d2 = (round as AppEncryptionResponseOrdinalVDXFObject).data; expect(d2.IncomingViewingKey.toString('hex')).toEqual(testIncomingViewingKey.toString('hex')); expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d2.extendedViewingKey!.toKeyString()).toEqual(details.extendedViewingKey!.toKeyString()); diff --git a/src/constants/ordinals/register.ts b/src/constants/ordinals/register.ts index a9ffb917..ad4e381b 100644 --- a/src/constants/ordinals/register.ts +++ b/src/constants/ordinals/register.ts @@ -1,30 +1,30 @@ import { APP_ENCRYPTION_REQUEST_VDXF_KEY, APP_ENCRYPTION_RESPONSE_VDXF_KEY, DATA_RESPONSE_VDXF_KEY, DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY, AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, USER_DATA_REQUEST_VDXF_KEY, USER_SPECIFIC_DATA_PACKET_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../../vdxf"; -import { AppEncryptionRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject"; -import { DataDescriptorOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject"; -import { DataPacketResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject"; -import { UserDataRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject"; -import { UserSpecificDataPacketDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject"; -import { IdentityUpdateRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject"; -import { IdentityUpdateResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject"; -import { AuthenticationRequestOrdinalVdxfObject } from "../../vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject"; -import { AuthenticationResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject"; -import { OrdinalVdxfObjectOrdinalMap } from "../../vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap"; -import { ProvisionIdentityDetailsOrdinalVdxfObject } from "../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject"; -import { VerusPayInvoiceOrdinalVdxfObject } from "../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject"; +import { AppEncryptionRequestOrdinalVDXFObject } from "../../vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject"; +import { DataDescriptorOrdinalVDXFObject } from "../../vdxf/classes/ordinals/DataDescriptorOrdinalVDXFObject"; +import { DataPacketResponseOrdinalVDXFObject } from "../../vdxf/classes/ordinals/DataPacketResponseOrdinalVDXFObject"; +import { UserDataRequestOrdinalVDXFObject } from "../../vdxf/classes/ordinals/UserDataRequestOrdinalVDXFObject"; +import { UserSpecificDataPacketDetailsOrdinalVDXFObject } from "../../vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVDXFObject"; +import { IdentityUpdateRequestOrdinalVDXFObject } from "../../vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVDXFObject"; +import { IdentityUpdateResponseOrdinalVDXFObject } from "../../vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVDXFObject"; +import { AuthenticationRequestOrdinalVDXFObject } from "../../vdxf/classes/ordinals/AuthenticationRequestOrdinalVDXFObject"; +import { AuthenticationResponseOrdinalVDXFObject } from "../../vdxf/classes/ordinals/AuthenticationResponseOrdinalVDXFObject"; +import { OrdinalVDXFObjectOrdinalMap } from "../../vdxf/classes/ordinals/OrdinalVDXFObjectOrdinalMap"; +import { ProvisionIdentityDetailsOrdinalVDXFObject } from "../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVDXFObject"; +import { VerusPayInvoiceOrdinalVDXFObject } from "../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVDXFObject"; import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_DATA_RESPONSE, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_AUTHENTICATION_REQUEST, VDXF_ORDINAL_AUTHENTICATION_RESPONSE, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_USER_DATA_REQUEST, VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET, VDXF_ORDINAL_VERUSPAY_INVOICE } from "./ordinals"; -import { AppEncryptionResponseOrdinalVdxfObject } from "../../vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject"; +import { AppEncryptionResponseOrdinalVDXFObject } from "../../vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject"; export const registerOrdinals = () => { - OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid, VerusPayInvoiceOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_AUTHENTICATION_REQUEST.toNumber(), AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY.vdxfid, AuthenticationRequestOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_AUTHENTICATION_RESPONSE.toNumber(), AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY.vdxfid, AuthenticationResponseOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST.toNumber(), APP_ENCRYPTION_REQUEST_VDXF_KEY.vdxfid, AppEncryptionRequestOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_RESPONSE.toNumber(), DATA_RESPONSE_VDXF_KEY.vdxfid, DataPacketResponseOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_USER_DATA_REQUEST.toNumber(), USER_DATA_REQUEST_VDXF_KEY.vdxfid, UserDataRequestOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET.toNumber(), USER_SPECIFIC_DATA_PACKET_VDXF_KEY.vdxfid, UserSpecificDataPacketDetailsOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE.toNumber(), APP_ENCRYPTION_RESPONSE_VDXF_KEY.vdxfid, AppEncryptionResponseOrdinalVdxfObject, false); + OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid, VerusPayInvoiceOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_AUTHENTICATION_REQUEST.toNumber(), AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY.vdxfid, AuthenticationRequestOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_AUTHENTICATION_RESPONSE.toNumber(), AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY.vdxfid, AuthenticationResponseOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST.toNumber(), APP_ENCRYPTION_REQUEST_VDXF_KEY.vdxfid, AppEncryptionRequestOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_RESPONSE.toNumber(), DATA_RESPONSE_VDXF_KEY.vdxfid, DataPacketResponseOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_USER_DATA_REQUEST.toNumber(), USER_DATA_REQUEST_VDXF_KEY.vdxfid, UserDataRequestOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET.toNumber(), USER_SPECIFIC_DATA_PACKET_VDXF_KEY.vdxfid, UserSpecificDataPacketDetailsOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE.toNumber(), APP_ENCRYPTION_RESPONSE_VDXF_KEY.vdxfid, AppEncryptionResponseOrdinalVDXFObject, false); } \ No newline at end of file diff --git a/src/constants/ordinals/types.ts b/src/constants/ordinals/types.ts index 56eee256..13d6f471 100644 --- a/src/constants/ordinals/types.ts +++ b/src/constants/ordinals/types.ts @@ -23,7 +23,7 @@ import { import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; import { DataPacketResponse, DataResponseJson } from "../../vdxf/classes/datapacket/DataPacketResponse"; -export type OrdinalVdxfObjectReservedData = +export type OrdinalVDXFObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | @@ -37,7 +37,7 @@ export type OrdinalVdxfObjectReservedData = UserSpecificDataPacketDetails | AppEncryptionResponseDetails; -export type OrdinalVdxfObjectReservedDataJson = +export type OrdinalVDXFObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | diff --git a/src/vdxf/classes/envelope/GenericEnvelope.ts b/src/vdxf/classes/envelope/GenericEnvelope.ts index 4921b0c9..bb170f82 100644 --- a/src/vdxf/classes/envelope/GenericEnvelope.ts +++ b/src/vdxf/classes/envelope/GenericEnvelope.ts @@ -2,7 +2,7 @@ import bufferutils from "../../../utils/bufferutils"; import base64url from "base64url"; import { BN } from 'bn.js'; import { BigNumber } from "../../../utils/types/BigNumber"; -import { OrdinalVdxfObject, OrdinalVdxfObjectJson } from "../ordinals/OrdinalVdxfObject"; +import { OrdinalVDXFObject, OrdinalVDXFObjectJson } from "../ordinals/OrdinalVDXFObject"; import varuint from "../../../utils/varuint"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import { createHash } from "crypto"; @@ -14,7 +14,7 @@ export interface GenericEnvelopeInterface { signature?: VerifiableSignatureData; createdAt?: BigNumber; salt?: Buffer; - details: Array; + details: Array; } export type GenericEnvelopeJson = { @@ -23,7 +23,7 @@ export type GenericEnvelopeJson = { signature?: VerifiableSignatureDataJson; createdat?: string; salt?: string; - details: Array; + details: Array; } export class GenericEnvelope implements SerializableEntity { @@ -32,7 +32,7 @@ export class GenericEnvelope implements SerializableEntity { signature?: VerifiableSignatureData; createdAt?: BigNumber; salt?: Buffer; // var length buffer - details: Array; + details: Array; static VERSION_CURRENT = new BN(1, 10) static VERSION_FIRSTVALID = new BN(1, 10) @@ -126,7 +126,7 @@ export class GenericEnvelope implements SerializableEntity { } else throw new Error("Must contain verifiable signature with at least systemID and identityID to generate details identity signature hash") } - getDetails(index = 0): OrdinalVdxfObject { + getDetails(index = 0): OrdinalVDXFObject { return this.details[index]; } @@ -255,13 +255,13 @@ export class GenericEnvelope implements SerializableEntity { const numItems = reader.readCompactSize(); for (let i = 0; i < numItems; i++) { - const ord = OrdinalVdxfObject.createFromBuffer(reader.buffer, reader.offset); + const ord = OrdinalVDXFObject.createFromBuffer(reader.buffer, reader.offset); reader.offset = ord.offset; this.details.push(ord.obj); } } else { - const ord = OrdinalVdxfObject.createFromBuffer(reader.buffer, reader.offset); + const ord = OrdinalVDXFObject.createFromBuffer(reader.buffer, reader.offset); reader.offset = ord.offset; this.details = [ord.obj] diff --git a/src/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.ts b/src/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.ts index f864f371..cc82f0fa 100644 --- a/src/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.ts +++ b/src/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.ts @@ -1,14 +1,14 @@ import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST } from "../../../constants/ordinals/ordinals"; import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; import { AppEncryptionRequestDetails, AppEncryptionRequestJson } from "../requestobjects/AppEncryptionRequestDetails"; -export class AppEncryptionRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { +export class AppEncryptionRequestOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { data: AppEncryptionRequestDetails; constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { + request: OrdinalVDXFObjectInterfaceTemplate = { data: new AppEncryptionRequestDetails() } ) { @@ -21,8 +21,8 @@ export class AppEncryptionRequestOrdinalVdxfObject extends SerializableEntityOrd ); } - static fromJson(details: OrdinalVdxfObjectJsonTemplate): AppEncryptionRequestOrdinalVdxfObject { - return new AppEncryptionRequestOrdinalVdxfObject({ + static fromJson(details: OrdinalVDXFObjectJsonTemplate): AppEncryptionRequestOrdinalVDXFObject { + return new AppEncryptionRequestOrdinalVDXFObject({ data: AppEncryptionRequestDetails.fromJson(details.data) }) } diff --git a/src/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.ts b/src/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.ts index 887c6622..11675b96 100644 --- a/src/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.ts +++ b/src/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.ts @@ -1,14 +1,14 @@ import { VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE } from "../../../constants/ordinals/ordinals"; import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; import { AppEncryptionResponseDetails, AppEncryptionResponseDetailsJson } from "../response/AppEncryptionResponseDetails"; -export class AppEncryptionResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { +export class AppEncryptionResponseOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { data: AppEncryptionResponseDetails; constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { + request: OrdinalVDXFObjectInterfaceTemplate = { data: new AppEncryptionResponseDetails() } ) { @@ -21,8 +21,8 @@ export class AppEncryptionResponseOrdinalVdxfObject extends SerializableEntityOr ); } - static fromJson(details: OrdinalVdxfObjectJsonTemplate): AppEncryptionResponseOrdinalVdxfObject { - return new AppEncryptionResponseOrdinalVdxfObject({ + static fromJson(details: OrdinalVDXFObjectJsonTemplate): AppEncryptionResponseOrdinalVDXFObject { + return new AppEncryptionResponseOrdinalVDXFObject({ data: AppEncryptionResponseDetails.fromJson(details.data) }) } diff --git a/src/vdxf/classes/ordinals/AuthenticationRequestOrdinalVDXFObject.ts b/src/vdxf/classes/ordinals/AuthenticationRequestOrdinalVDXFObject.ts index 2bae9283..b659eb92 100644 --- a/src/vdxf/classes/ordinals/AuthenticationRequestOrdinalVDXFObject.ts +++ b/src/vdxf/classes/ordinals/AuthenticationRequestOrdinalVDXFObject.ts @@ -1,14 +1,14 @@ import { VDXF_ORDINAL_AUTHENTICATION_REQUEST } from "../../../constants/ordinals/ordinals"; import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; import { AuthenticationRequestDetails, AuthenticationRequestDetailsJson } from "../login/AuthenticationRequestDetails"; -export class AuthenticationRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { +export class AuthenticationRequestOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { data: AuthenticationRequestDetails; constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { + request: OrdinalVDXFObjectInterfaceTemplate = { data: new AuthenticationRequestDetails() } ) { @@ -21,8 +21,8 @@ export class AuthenticationRequestOrdinalVdxfObject extends SerializableEntityOr ); } - static fromJson(details: OrdinalVdxfObjectJsonTemplate): AuthenticationRequestOrdinalVdxfObject { - return new AuthenticationRequestOrdinalVdxfObject({ + static fromJson(details: OrdinalVDXFObjectJsonTemplate): AuthenticationRequestOrdinalVDXFObject { + return new AuthenticationRequestOrdinalVDXFObject({ data: AuthenticationRequestDetails.fromJson(details.data) }) } diff --git a/src/vdxf/classes/ordinals/AuthenticationResponseOrdinalVDXFObject.ts b/src/vdxf/classes/ordinals/AuthenticationResponseOrdinalVDXFObject.ts index 388d971d..63d9664a 100644 --- a/src/vdxf/classes/ordinals/AuthenticationResponseOrdinalVDXFObject.ts +++ b/src/vdxf/classes/ordinals/AuthenticationResponseOrdinalVDXFObject.ts @@ -1,14 +1,14 @@ import { VDXF_ORDINAL_AUTHENTICATION_RESPONSE } from "../../../constants/ordinals/ordinals"; import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; import { AuthenticationResponseDetails, AuthenticationResponseDetailsJson } from "../login/AuthenticationResponseDetails"; -export class AuthenticationResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { +export class AuthenticationResponseOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { data: AuthenticationResponseDetails; constructor( - response: OrdinalVdxfObjectInterfaceTemplate = { + response: OrdinalVDXFObjectInterfaceTemplate = { data: new AuthenticationResponseDetails() } ) { @@ -21,8 +21,8 @@ export class AuthenticationResponseOrdinalVdxfObject extends SerializableEntityO ); } - static fromJson(details: OrdinalVdxfObjectJsonTemplate): AuthenticationResponseOrdinalVdxfObject { - return new AuthenticationResponseOrdinalVdxfObject({ + static fromJson(details: OrdinalVDXFObjectJsonTemplate): AuthenticationResponseOrdinalVDXFObject { + return new AuthenticationResponseOrdinalVDXFObject({ data: AuthenticationResponseDetails.fromJson(details.data) }) } diff --git a/src/vdxf/classes/ordinals/DataDescriptorOrdinalVDXFObject.ts b/src/vdxf/classes/ordinals/DataDescriptorOrdinalVDXFObject.ts index a0d57eb2..0299a85a 100644 --- a/src/vdxf/classes/ordinals/DataDescriptorOrdinalVDXFObject.ts +++ b/src/vdxf/classes/ordinals/DataDescriptorOrdinalVDXFObject.ts @@ -1,14 +1,14 @@ import { VDXF_ORDINAL_DATA_DESCRIPTOR } from "../../../constants/ordinals/ordinals"; import { DataDescriptor, DataDescriptorJson } from "../../../pbaas"; import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; -export class DataDescriptorOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { +export class DataDescriptorOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { data: DataDescriptor; constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { + request: OrdinalVDXFObjectInterfaceTemplate = { data: new DataDescriptor() } ) { @@ -21,8 +21,8 @@ export class DataDescriptorOrdinalVdxfObject extends SerializableEntityOrdinalVd ); } - static fromJson(details: OrdinalVdxfObjectJsonTemplate): DataDescriptorOrdinalVdxfObject { - return new DataDescriptorOrdinalVdxfObject({ + static fromJson(details: OrdinalVDXFObjectJsonTemplate): DataDescriptorOrdinalVDXFObject { + return new DataDescriptorOrdinalVDXFObject({ data: DataDescriptor.fromJson(details.data) }) } diff --git a/src/vdxf/classes/ordinals/DataPacketResponseOrdinalVDXFObject.ts b/src/vdxf/classes/ordinals/DataPacketResponseOrdinalVDXFObject.ts index 1092e43f..d7413436 100644 --- a/src/vdxf/classes/ordinals/DataPacketResponseOrdinalVDXFObject.ts +++ b/src/vdxf/classes/ordinals/DataPacketResponseOrdinalVDXFObject.ts @@ -1,14 +1,14 @@ import { VDXF_ORDINAL_DATA_RESPONSE } from "../../../constants/ordinals/ordinals"; import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; import { DataPacketResponse, DataResponseJson } from "../datapacket/DataPacketResponse"; -export class DataPacketResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { +export class DataPacketResponseOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { data: DataPacketResponse; constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { + request: OrdinalVDXFObjectInterfaceTemplate = { data: new DataPacketResponse() } ) { @@ -21,8 +21,8 @@ export class DataPacketResponseOrdinalVdxfObject extends SerializableEntityOrdin ); } - static fromJson(details: OrdinalVdxfObjectJsonTemplate): DataPacketResponseOrdinalVdxfObject { - return new DataPacketResponseOrdinalVdxfObject({ + static fromJson(details: OrdinalVDXFObjectJsonTemplate): DataPacketResponseOrdinalVDXFObject { + return new DataPacketResponseOrdinalVDXFObject({ data: DataPacketResponse.fromJson(details.data) }) } diff --git a/src/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVDXFObject.ts b/src/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVDXFObject.ts index 35e070ce..cfed177f 100644 --- a/src/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVDXFObject.ts +++ b/src/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVDXFObject.ts @@ -1,14 +1,14 @@ import { VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST } from "../../../constants/ordinals/ordinals"; import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; import { IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson } from "../identity/IdentityUpdateRequestDetails"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; -export class IdentityUpdateRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { +export class IdentityUpdateRequestOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { data: IdentityUpdateRequestDetails; constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { + request: OrdinalVDXFObjectInterfaceTemplate = { data: new IdentityUpdateRequestDetails() } ) { @@ -21,8 +21,8 @@ export class IdentityUpdateRequestOrdinalVdxfObject extends SerializableEntityOr ); } - static fromJson(details: OrdinalVdxfObjectJsonTemplate): IdentityUpdateRequestOrdinalVdxfObject { - return new IdentityUpdateRequestOrdinalVdxfObject({ + static fromJson(details: OrdinalVDXFObjectJsonTemplate): IdentityUpdateRequestOrdinalVDXFObject { + return new IdentityUpdateRequestOrdinalVDXFObject({ data: IdentityUpdateRequestDetails.fromJson(details.data) }) } diff --git a/src/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVDXFObject.ts b/src/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVDXFObject.ts index cef03bc2..332e5f47 100644 --- a/src/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVDXFObject.ts +++ b/src/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVDXFObject.ts @@ -1,14 +1,14 @@ import { VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE } from "../../../constants/ordinals/ordinals"; import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; import { IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson } from "../identity/IdentityUpdateResponseDetails"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; -export class IdentityUpdateResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { +export class IdentityUpdateResponseOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { data: IdentityUpdateResponseDetails; constructor( - response: OrdinalVdxfObjectInterfaceTemplate = { + response: OrdinalVDXFObjectInterfaceTemplate = { data: new IdentityUpdateResponseDetails() } ) { @@ -21,8 +21,8 @@ export class IdentityUpdateResponseOrdinalVdxfObject extends SerializableEntityO ); } - static fromJson(details: OrdinalVdxfObjectJsonTemplate): IdentityUpdateResponseOrdinalVdxfObject { - return new IdentityUpdateResponseOrdinalVdxfObject({ + static fromJson(details: OrdinalVDXFObjectJsonTemplate): IdentityUpdateResponseOrdinalVDXFObject { + return new IdentityUpdateResponseOrdinalVDXFObject({ data: IdentityUpdateResponseDetails.fromJson(details.data) }) } diff --git a/src/vdxf/classes/ordinals/OrdinalVDXFObject.ts b/src/vdxf/classes/ordinals/OrdinalVDXFObject.ts index dd2a7bb9..0256453c 100644 --- a/src/vdxf/classes/ordinals/OrdinalVDXFObject.ts +++ b/src/vdxf/classes/ordinals/OrdinalVDXFObject.ts @@ -6,9 +6,9 @@ import varuint from "../../../utils/varuint"; import { fromBase58Check, getDataKey, toBase58Check, toIAddress } from "../../../utils/address"; import varint from "../../../utils/varint"; import { HASH160_BYTE_LENGTH, I_ADDR_VERSION, NULL_ADDRESS } from "../../../constants/vdxf"; -import { OrdinalVdxfObjectOrdinalMap } from "./OrdinalVdxfObjectOrdinalMap"; +import { OrdinalVDXFObjectOrdinalMap } from "./OrdinalVDXFObjectOrdinalMap"; import { DEFAULT_VERUS_CHAINNAME } from "../../../constants/pbaas"; -import { OrdinalVdxfObjectReservedData, OrdinalVdxfObjectReservedDataJson } from "../../../constants/ordinals/types"; +import { OrdinalVDXFObjectReservedData, OrdinalVDXFObjectReservedDataJson } from "../../../constants/ordinals/types"; import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY, @@ -16,35 +16,35 @@ import { VDXF_ORDINAL_DATA_DESCRIPTOR } from "../../../constants/ordinals/ordinals"; -export interface OrdinalVdxfObjectInterfaceTemplate { +export interface OrdinalVDXFObjectInterfaceTemplate { version?: BigNumber; type?: BigNumber; key?: string; data?: T; } -export type OrdinalVdxfObjectJsonTemplate = { +export type OrdinalVDXFObjectJsonTemplate = { version: string; type: string; vdxfkey?: string; data?: T; } -export type BufferOrOrdinalVdxfObjectReservedData = Buffer | OrdinalVdxfObjectReservedData; -export type StringOrOrdinalVdxfObjectReservedDataJson = string | OrdinalVdxfObjectReservedDataJson; +export type BufferOrOrdinalVDXFObjectReservedData = Buffer | OrdinalVDXFObjectReservedData; +export type StringOrOrdinalVDXFObjectReservedDataJson = string | OrdinalVDXFObjectReservedDataJson; -export type OrdinalVdxfObjectInterface = OrdinalVdxfObjectInterfaceTemplate; -export type OrdinalVdxfObjectJson = OrdinalVdxfObjectJsonTemplate; +export type OrdinalVDXFObjectInterface = OrdinalVDXFObjectInterfaceTemplate; +export type OrdinalVDXFObjectJson = OrdinalVDXFObjectJsonTemplate; -export type OrdinalVdxfObjectDataClass = new (...args: any[]) => OrdinalVdxfObjectReservedData; -export type OrdinalVdxfObjectClass = new (...args: any[]) => OrdinalVdxfObject; +export type OrdinalVDXFObjectDataClass = new (...args: any[]) => OrdinalVDXFObjectReservedData; +export type OrdinalVDXFObjectClass = new (...args: any[]) => OrdinalVDXFObject; -export const getOrdinalVdxfObjectClassForType = (type: BigNumber): OrdinalVdxfObjectClass => { - if (OrdinalVdxfObjectOrdinalMap.isRecognizedOrdinal(type.toNumber())) { - const key = OrdinalVdxfObjectOrdinalMap.getVdxfKeyForOrdinal(type.toNumber()); +export const getOrdinalVDXFObjectClassForType = (type: BigNumber): OrdinalVDXFObjectClass => { + if (OrdinalVDXFObjectOrdinalMap.isRecognizedOrdinal(type.toNumber())) { + const key = OrdinalVDXFObjectOrdinalMap.getVdxfKeyForOrdinal(type.toNumber()); - if (OrdinalVdxfObjectOrdinalMap.hasClassForVdxfKey(key)) { - return OrdinalVdxfObjectOrdinalMap.getClassForVdxfKey(OrdinalVdxfObjectOrdinalMap.getVdxfKeyForOrdinal(type.toNumber())); + if (OrdinalVDXFObjectOrdinalMap.hasClassForVdxfKey(key)) { + return OrdinalVDXFObjectOrdinalMap.getClassForVdxfKey(OrdinalVDXFObjectOrdinalMap.getVdxfKeyForOrdinal(type.toNumber())); } else { throw new Error("No class found for " + key) } @@ -52,15 +52,15 @@ export const getOrdinalVdxfObjectClassForType = (type: BigNumber): OrdinalVdxfOb type.eq(VDXF_OBJECT_RESERVED_BYTE_I_ADDR) || type.eq(VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING) || type.eq(VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY) - ) return GeneralTypeOrdinalVdxfObject; + ) return GeneralTypeOrdinalVDXFObject; else throw new Error("Unrecognized vdxf ordinal object type " + type.toNumber()); } -export class OrdinalVdxfObject implements SerializableEntity { +export class OrdinalVDXFObject implements SerializableEntity { version: BigNumber; type: BigNumber; key?: string; - data?: BufferOrOrdinalVdxfObjectReservedData; + data?: BufferOrOrdinalVDXFObjectReservedData; static VERSION_INVALID = new BN(0, 10) static VERSION_FIRST = new BN(1, 10) @@ -68,7 +68,7 @@ export class OrdinalVdxfObject implements SerializableEntity { static VERSION_CURRENT = new BN(1, 10) constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { + request: OrdinalVDXFObjectInterfaceTemplate = { type: VDXF_ORDINAL_DATA_DESCRIPTOR } ) { @@ -86,7 +86,7 @@ export class OrdinalVdxfObject implements SerializableEntity { } if (request.version) this.version = request.version; - else this.version = OrdinalVdxfObject.VERSION_CURRENT; + else this.version = OrdinalVDXFObject.VERSION_CURRENT; } isDefinedByVdxfKey() { @@ -190,12 +190,12 @@ export class OrdinalVdxfObject implements SerializableEntity { return this.fromBufferOptionalType(buffer, offset); } - toJson(): OrdinalVdxfObjectJson { + toJson(): OrdinalVDXFObjectJson { return { type: this.type ? this.type.toString() : undefined, version: this.version ? this.version.toString() : undefined, vdxfkey: this.key, - data: this.data ? this.isDefinedByCustomKey() ? this.data.toString('hex') : (this.data as OrdinalVdxfObjectReservedData).toJson() : undefined + data: this.data ? this.isDefinedByCustomKey() ? this.data.toString('hex') : (this.data as OrdinalVDXFObjectReservedData).toJson() : undefined }; } @@ -204,14 +204,14 @@ export class OrdinalVdxfObject implements SerializableEntity { offset?: number, optimizeWithOrdinal: boolean = false, rootSystemName: string = DEFAULT_VERUS_CHAINNAME - ): { offset: number, obj: OrdinalVdxfObject } { + ): { offset: number, obj: OrdinalVDXFObject } { if (buffer.length == 0) throw new Error("Cannot create request from empty buffer"); const reader = new bufferutils.BufferReader(buffer, offset); let type = new BN(reader.readCompactSize()); const rootSystemId = toIAddress(rootSystemName); - const Entity = getOrdinalVdxfObjectClassForType(type); + const Entity = getOrdinalVDXFObjectClassForType(type); const ord = new Entity({ type }); let key: string; @@ -232,8 +232,8 @@ export class OrdinalVdxfObject implements SerializableEntity { } } - if (OrdinalVdxfObjectOrdinalMap.vdxfKeyHasOrdinal(vdxfKey)) { - type = new BN(OrdinalVdxfObjectOrdinalMap.getOrdinalForVdxfKey(vdxfKey)); + if (OrdinalVDXFObjectOrdinalMap.vdxfKeyHasOrdinal(vdxfKey)) { + type = new BN(OrdinalVDXFObjectOrdinalMap.getOrdinalForVdxfKey(vdxfKey)); } } @@ -243,12 +243,12 @@ export class OrdinalVdxfObject implements SerializableEntity { } } -export class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { +export class GeneralTypeOrdinalVDXFObject extends OrdinalVDXFObject implements SerializableDataEntity { data: Buffer; key: string; constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { + request: OrdinalVDXFObjectInterfaceTemplate = { type: VDXF_OBJECT_RESERVED_BYTE_I_ADDR, data: Buffer.alloc(0), key: NULL_ADDRESS @@ -273,8 +273,8 @@ export class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements S this.data = Buffer.from(buffer) } - static fromJson(details: OrdinalVdxfObjectJson): GeneralTypeOrdinalVdxfObject { - return new GeneralTypeOrdinalVdxfObject({ + static fromJson(details: OrdinalVDXFObjectJson): GeneralTypeOrdinalVDXFObject { + return new GeneralTypeOrdinalVDXFObject({ key: details.vdxfkey, data: details.data ? Buffer.from(details.data as string, 'hex') : undefined }); diff --git a/src/vdxf/classes/ordinals/OrdinalVDXFObjectOrdinalMap.ts b/src/vdxf/classes/ordinals/OrdinalVDXFObjectOrdinalMap.ts index ff60e306..171104f9 100644 --- a/src/vdxf/classes/ordinals/OrdinalVDXFObjectOrdinalMap.ts +++ b/src/vdxf/classes/ordinals/OrdinalVDXFObjectOrdinalMap.ts @@ -1,10 +1,10 @@ -import { OrdinalVdxfObjectClass } from "./OrdinalVdxfObject"; +import { OrdinalVDXFObjectClass } from "./OrdinalVDXFObject"; // Singleton class that exists to create a bidirectional map of ordinals <-> vdxf keys -class _OrdinalVdxfObjectOrdinalMap { +class _OrdinalVDXFObjectOrdinalMap { private keyToOrdinalMap: Map; private ordinalToKeyMap: Map; - keyToOrdinalClass: Map; + keyToOrdinalClass: Map; constructor() { this.keyToOrdinalMap = new Map(); @@ -16,7 +16,7 @@ class _OrdinalVdxfObjectOrdinalMap { this.ordinalToKeyMap = new Map(Array.from(this.keyToOrdinalMap, a => a.reverse() as [number,string])); } - registerOrdinal(ordinal: number, vdxfKey: string, ordinalClass: OrdinalVdxfObjectClass, throwOnDuplicate: boolean = true): void { + registerOrdinal(ordinal: number, vdxfKey: string, ordinalClass: OrdinalVDXFObjectClass, throwOnDuplicate: boolean = true): void { if (this.isRecognizedOrdinal(ordinal) || this.vdxfKeyHasOrdinal(vdxfKey)) { if (throwOnDuplicate) throw new Error("Cannot overwrite existing ordinal"); else return; @@ -47,9 +47,9 @@ class _OrdinalVdxfObjectOrdinalMap { return this.ordinalToKeyMap.get(ordinal); } - getClassForVdxfKey(vdxfKey: string): OrdinalVdxfObjectClass { + getClassForVdxfKey(vdxfKey: string): OrdinalVDXFObjectClass { return this.keyToOrdinalClass.get(vdxfKey); } } -export const OrdinalVdxfObjectOrdinalMap = new _OrdinalVdxfObjectOrdinalMap(); \ No newline at end of file +export const OrdinalVDXFObjectOrdinalMap = new _OrdinalVDXFObjectOrdinalMap(); \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVDXFObject.ts b/src/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVDXFObject.ts index 89ce2257..ed4cff29 100644 --- a/src/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVDXFObject.ts +++ b/src/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVDXFObject.ts @@ -1,14 +1,14 @@ import { VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS } from "../../../constants/ordinals/ordinals"; import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; import { ProvisionIdentityDetails, ProvisionIdentityDetailsJson } from "../requestobjects/ProvisionIdentityDetails"; -export class ProvisionIdentityDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { +export class ProvisionIdentityDetailsOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { data: ProvisionIdentityDetails; constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { + request: OrdinalVDXFObjectInterfaceTemplate = { data: new ProvisionIdentityDetails() } ) { @@ -21,8 +21,8 @@ export class ProvisionIdentityDetailsOrdinalVdxfObject extends SerializableEntit ); } - static fromJson(details: OrdinalVdxfObjectJsonTemplate): ProvisionIdentityDetailsOrdinalVdxfObject { - return new ProvisionIdentityDetailsOrdinalVdxfObject({ + static fromJson(details: OrdinalVDXFObjectJsonTemplate): ProvisionIdentityDetailsOrdinalVDXFObject { + return new ProvisionIdentityDetailsOrdinalVDXFObject({ data: ProvisionIdentityDetails.fromJson(details.data) }) } diff --git a/src/vdxf/classes/ordinals/SerializableEntityOrdinalVDXFObject.ts b/src/vdxf/classes/ordinals/SerializableEntityOrdinalVDXFObject.ts index c89c1aef..e168bab0 100644 --- a/src/vdxf/classes/ordinals/SerializableEntityOrdinalVDXFObject.ts +++ b/src/vdxf/classes/ordinals/SerializableEntityOrdinalVDXFObject.ts @@ -1,14 +1,14 @@ -import { OrdinalVdxfObjectReservedData } from "../../../constants/ordinals/types"; +import { OrdinalVDXFObjectReservedData } from "../../../constants/ordinals/types"; import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObject, OrdinalVdxfObjectDataClass, OrdinalVdxfObjectInterfaceTemplate } from "./OrdinalVdxfObject"; +import { OrdinalVDXFObject, OrdinalVDXFObjectDataClass, OrdinalVDXFObjectInterfaceTemplate } from "./OrdinalVDXFObject"; -export class SerializableEntityOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { - data: OrdinalVdxfObjectReservedData; - entity: OrdinalVdxfObjectDataClass; +export class SerializableEntityOrdinalVDXFObject extends OrdinalVDXFObject implements SerializableDataEntity { + data: OrdinalVDXFObjectReservedData; + entity: OrdinalVDXFObjectDataClass; constructor( - request: OrdinalVdxfObjectInterfaceTemplate, - entity: OrdinalVdxfObjectDataClass + request: OrdinalVDXFObjectInterfaceTemplate, + entity: OrdinalVDXFObjectDataClass ) { if (!request || !request.type) throw new Error("Expected request with data and type") diff --git a/src/vdxf/classes/ordinals/UserDataRequestOrdinalVDXFObject.ts b/src/vdxf/classes/ordinals/UserDataRequestOrdinalVDXFObject.ts index ccf3d2de..e13db17f 100644 --- a/src/vdxf/classes/ordinals/UserDataRequestOrdinalVDXFObject.ts +++ b/src/vdxf/classes/ordinals/UserDataRequestOrdinalVDXFObject.ts @@ -1,14 +1,14 @@ import { VDXF_ORDINAL_USER_DATA_REQUEST } from "../../../constants/ordinals/ordinals"; import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; import { UserDataRequestDetails, UserDataRequestJson } from "../requestobjects/UserDataRequestDetails"; -export class UserDataRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { +export class UserDataRequestOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { data: UserDataRequestDetails; constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { + request: OrdinalVDXFObjectInterfaceTemplate = { data: new UserDataRequestDetails() } ) { @@ -21,8 +21,8 @@ export class UserDataRequestOrdinalVdxfObject extends SerializableEntityOrdinalV ); } - static fromJson(details: OrdinalVdxfObjectJsonTemplate): UserDataRequestOrdinalVdxfObject { - return new UserDataRequestOrdinalVdxfObject({ + static fromJson(details: OrdinalVDXFObjectJsonTemplate): UserDataRequestOrdinalVDXFObject { + return new UserDataRequestOrdinalVDXFObject({ data: UserDataRequestDetails.fromJson(details.data) }) } diff --git a/src/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVDXFObject.ts b/src/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVDXFObject.ts index f30fbfec..b80db96c 100644 --- a/src/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVDXFObject.ts +++ b/src/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVDXFObject.ts @@ -1,14 +1,14 @@ import { VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET } from "../../../constants/ordinals/ordinals"; import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; import { UserSpecificDataPacketDetails, UserSpecificDataPacketDetailsJson } from "../requestobjects/UserSpecificDataPacketDetails"; -export class UserSpecificDataPacketDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { +export class UserSpecificDataPacketDetailsOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { data: UserSpecificDataPacketDetails; constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { + request: OrdinalVDXFObjectInterfaceTemplate = { data: new UserSpecificDataPacketDetails() } ) { @@ -21,8 +21,8 @@ export class UserSpecificDataPacketDetailsOrdinalVdxfObject extends Serializable ); } - static fromJson(details: OrdinalVdxfObjectJsonTemplate): UserSpecificDataPacketDetailsOrdinalVdxfObject { - return new UserSpecificDataPacketDetailsOrdinalVdxfObject({ + static fromJson(details: OrdinalVDXFObjectJsonTemplate): UserSpecificDataPacketDetailsOrdinalVDXFObject { + return new UserSpecificDataPacketDetailsOrdinalVDXFObject({ data: UserSpecificDataPacketDetails.fromJson(details.data) }) } diff --git a/src/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVDXFObject.ts b/src/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVDXFObject.ts index 4841bfc9..3b050895 100644 --- a/src/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVDXFObject.ts +++ b/src/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVDXFObject.ts @@ -1,14 +1,14 @@ import { VDXF_ORDINAL_VERUSPAY_INVOICE } from "../../../constants/ordinals/ordinals"; import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "../payment/VerusPayInvoiceDetails"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; -export class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { +export class VerusPayInvoiceOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { data: VerusPayInvoiceDetails; constructor( - request: OrdinalVdxfObjectInterfaceTemplate = { + request: OrdinalVDXFObjectInterfaceTemplate = { data: new VerusPayInvoiceDetails() } ) { @@ -21,8 +21,8 @@ export class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalV ); } - static fromJson(details: OrdinalVdxfObjectJsonTemplate): VerusPayInvoiceOrdinalVdxfObject { - return new VerusPayInvoiceOrdinalVdxfObject({ + static fromJson(details: OrdinalVDXFObjectJsonTemplate): VerusPayInvoiceOrdinalVDXFObject { + return new VerusPayInvoiceOrdinalVDXFObject({ data: VerusPayInvoiceDetails.fromJson(details.data) }) } diff --git a/src/vdxf/classes/ordinals/index.ts b/src/vdxf/classes/ordinals/index.ts index c591ea29..d3f17d3a 100644 --- a/src/vdxf/classes/ordinals/index.ts +++ b/src/vdxf/classes/ordinals/index.ts @@ -1,19 +1,19 @@ import { registerOrdinals } from '../../../constants/ordinals/register' -export * from './DataDescriptorOrdinalVdxfObject' -export * from './IdentityUpdateRequestOrdinalVdxfObject' -export * from './IdentityUpdateResponseOrdinalVdxfObject' -export * from './OrdinalVdxfObject' -export * from './OrdinalVdxfObjectOrdinalMap' -export * from './SerializableEntityOrdinalVdxfObject' -export * from './VerusPayInvoiceOrdinalVdxfObject' -export * from './AuthenticationRequestOrdinalVdxfObject' -export * from './AuthenticationResponseOrdinalVdxfObject' -export * from './AppEncryptionRequestOrdinalVdxfObject' -export * from './AppEncryptionResponseOrdinalVdxfObject' -export * from './ProvisionIdentityDetailsOrdinalVdxfObject' -export * from './DataPacketResponseOrdinalVdxfObject' -export * from './UserDataRequestOrdinalVdxfObject' -export * from './UserSpecificDataPacketDetailsOrdinalVdxfObject' +export * from './DataDescriptorOrdinalVDXFObject' +export * from './IdentityUpdateRequestOrdinalVDXFObject' +export * from './IdentityUpdateResponseOrdinalVDXFObject' +export * from './OrdinalVDXFObject' +export * from './OrdinalVDXFObjectOrdinalMap' +export * from './SerializableEntityOrdinalVDXFObject' +export * from './VerusPayInvoiceOrdinalVDXFObject' +export * from './AuthenticationRequestOrdinalVDXFObject' +export * from './AuthenticationResponseOrdinalVDXFObject' +export * from './AppEncryptionRequestOrdinalVDXFObject' +export * from './AppEncryptionResponseOrdinalVDXFObject' +export * from './ProvisionIdentityDetailsOrdinalVDXFObject' +export * from './DataPacketResponseOrdinalVDXFObject' +export * from './UserDataRequestOrdinalVDXFObject' +export * from './UserSpecificDataPacketDetailsOrdinalVDXFObject' registerOrdinals(); \ No newline at end of file From 53eee2476b8892846ea0c0222cb71192ad57939d Mon Sep 17 00:00:00 2001 From: michaeltout Date: Mon, 1 Dec 2025 15:49:16 +0100 Subject: [PATCH 092/123] Remove build files --- dist/api/ApiCommunication.d.ts | 4 - dist/api/ApiCommunication.js | 2 - dist/api/ApiPrimitive.d.ts | 11 - dist/api/ApiPrimitive.js | 2 - dist/api/ApiRequest.d.ts | 10 - dist/api/ApiRequest.js | 13 - dist/api/ApiResponse.d.ts | 7 - dist/api/ApiResponse.js | 12 - .../EstimateConversionRequest.d.ts | 17 - .../EstimateConversionRequest.js | 27 - .../EstimateConversionResponse.d.ts | 39 - .../EstimateConversionResponse.js | 7 - .../FundRawTransactionRequest.d.ts | 17 - .../FundRawTransactionRequest.js | 36 - .../FundRawTransactionResponse.d.ts | 8 - .../FundRawTransactionResponse.js | 7 - .../GetAddressBalanceRequest.d.ts | 15 - .../GetAddressBalanceRequest.js | 24 - .../GetAddressBalanceResponse.d.ts | 16 - .../GetAddressBalanceResponse.js | 7 - .../GetAddressDeltasRequest.d.ts | 18 - .../GetAddressDeltasRequest.js | 26 - .../GetAddressDeltasResponse.d.ts | 25 - .../GetAddressDeltasResponse.js | 7 - .../GetAddressMempoolRequest.d.ts | 18 - .../GetAddressMempoolRequest.js | 26 - .../GetAddressMempoolResponse.d.ts | 25 - .../GetAddressMempoolResponse.js | 7 - .../GetAddressUtxosRequest.d.ts | 15 - .../GetAddressUtxos/GetAddressUtxosRequest.js | 26 - .../GetAddressUtxosResponse.d.ts | 19 - .../GetAddressUtxosResponse.js | 7 - .../api/classes/GetBlock/GetBlockRequest.d.ts | 10 - dist/api/classes/GetBlock/GetBlockRequest.js | 30 - .../classes/GetBlock/GetBlockResponse.d.ts | 5 - dist/api/classes/GetBlock/GetBlockResponse.js | 7 - .../GetBlockCount/GetBlockCountRequest.d.ts | 8 - .../GetBlockCount/GetBlockCountRequest.js | 23 - .../GetBlockCount/GetBlockCountResponse.d.ts | 4 - .../GetBlockCount/GetBlockCountResponse.js | 7 - .../GetCurrency/GetCurrencyRequest.d.ts | 9 - .../classes/GetCurrency/GetCurrencyRequest.js | 27 - .../GetCurrency/GetCurrencyResponse.d.ts | 5 - .../GetCurrency/GetCurrencyResponse.js | 7 - .../GetCurrencyConvertersRequest.d.ts | 9 - .../GetCurrencyConvertersRequest.js | 24 - .../GetCurrencyConvertersResponse.d.ts | 7 - .../GetCurrencyConvertersResponse.js | 7 - .../GetIdentity/GetIdentityRequest.d.ts | 12 - .../classes/GetIdentity/GetIdentityRequest.js | 36 - .../GetIdentity/GetIdentityResponse.d.ts | 14 - .../GetIdentity/GetIdentityResponse.js | 7 - .../GetIdentityContentRequest.d.ts | 14 - .../GetIdentityContentRequest.js | 42 - dist/api/classes/GetInfo/GetInfoRequest.d.ts | 8 - dist/api/classes/GetInfo/GetInfoRequest.js | 22 - dist/api/classes/GetInfo/GetInfoResponse.d.ts | 40 - dist/api/classes/GetInfo/GetInfoResponse.js | 7 - .../classes/GetOffers/GetOffersRequest.d.ts | 11 - .../api/classes/GetOffers/GetOffersRequest.js | 33 - .../classes/GetOffers/GetOffersResponse.d.ts | 5 - .../classes/GetOffers/GetOffersResponse.js | 7 - .../GetRawTransactionRequest.d.ts | 10 - .../GetRawTransactionRequest.js | 27 - .../GetRawTransactionResponse.d.ts | 5 - .../GetRawTransactionResponse.js | 7 - .../classes/GetVdxfId/GetVdxfIdRequest.d.ts | 16 - .../api/classes/GetVdxfId/GetVdxfIdRequest.js | 30 - .../classes/GetVdxfId/GetVdxfIdResponse.d.ts | 16 - .../classes/GetVdxfId/GetVdxfIdResponse.js | 7 - .../ListCurrencies/ListCurrenciesRequest.d.ts | 18 - .../ListCurrencies/ListCurrenciesRequest.js | 35 - .../ListCurrenciesResponse.d.ts | 40 - .../ListCurrencies/ListCurrenciesResponse.js | 7 - .../classes/MakeOffer/MakeOfferRequest.d.ts | 13 - .../api/classes/MakeOffer/MakeOfferRequest.js | 36 - .../classes/MakeOffer/MakeOfferResponse.d.ts | 7 - .../classes/MakeOffer/MakeOfferResponse.js | 7 - .../SendCurrency/SendCurrencyRequest.d.ts | 30 - .../SendCurrency/SendCurrencyRequest.js | 42 - .../SendCurrency/SendCurrencyResponse.d.ts | 10 - .../SendCurrency/SendCurrencyResponse.js | 7 - .../SendRawTransactionRequest.d.ts | 10 - .../SendRawTransactionRequest.js | 30 - .../SendRawTransactionResponse.d.ts | 4 - .../SendRawTransactionResponse.js | 7 - .../api/classes/SignData/SignDataRequest.d.ts | 31 - dist/api/classes/SignData/SignDataRequest.js | 25 - .../classes/SignData/SignDataResponse.d.ts | 23 - dist/api/classes/SignData/SignDataResponse.js | 7 - .../SignMessage/SignMessageRequest.d.ts | 11 - .../classes/SignMessage/SignMessageRequest.js | 29 - .../SignMessage/SignMessageResponse.d.ts | 7 - .../SignMessage/SignMessageResponse.js | 7 - .../SignRawTransactionRequest.d.ts | 21 - .../SignRawTransactionRequest.js | 36 - .../SignRawTransactionResponse.d.ts | 14 - .../SignRawTransactionResponse.js | 7 - .../UpdateIdentity/UpdateIdentityRequest.d.ts | 14 - .../UpdateIdentity/UpdateIdentityRequest.js | 42 - .../UpdateIdentityResponse.d.ts | 4 - .../UpdateIdentity/UpdateIdentityResponse.js | 7 - .../VerifyMessage/VerifyMessageRequest.d.ts | 12 - .../VerifyMessage/VerifyMessageRequest.js | 31 - .../VerifyMessage/VerifyMessageResponse.d.ts | 4 - .../VerifyMessage/VerifyMessageResponse.js | 7 - .../ZGetOperationStatusRequest.d.ts | 9 - .../ZGetOperationStatusRequest.js | 27 - .../ZGetOperationStatusResponse.d.ts | 21 - .../ZGetOperationStatusResponse.js | 7 - dist/api/classes/index.d.ts | 54 - dist/api/classes/index.js | 106 -- dist/block/BlockInfo.d.ts | 40 - dist/block/BlockInfo.js | 2 - dist/constants/cmds.d.ts | 26 - dist/constants/cmds.js | 29 - dist/constants/deeplink.d.ts | 2 - dist/constants/deeplink.js | 6 - dist/constants/ordinals/ordinals.d.ts | 15 - dist/constants/ordinals/ordinals.js | 19 - dist/constants/ordinals/register.d.ts | 1 - dist/constants/ordinals/register.js | 33 - dist/constants/ordinals/types.d.ts | 6 - dist/constants/ordinals/types.js | 2 - dist/constants/pbaas.d.ts | 29 - dist/constants/pbaas.js | 32 - dist/constants/vdxf.d.ts | 8 - dist/constants/vdxf.js | 16 - dist/constants/vdxf/veruspay.d.ts | 7 - dist/constants/vdxf/veruspay.js | 11 - dist/currency/CurrencyDefinition.d.ts | 93 - dist/currency/CurrencyDefinition.js | 2 - dist/identity/IdentityDefinition.d.ts | 21 - dist/identity/IdentityDefinition.js | 2 - dist/index.d.ts | 27 - dist/index.js | 45 - dist/offers/CurrencyOffering.d.ts | 4 - dist/offers/CurrencyOffering.js | 2 - dist/offers/CurrencyReceiving.d.ts | 5 - dist/offers/CurrencyReceiving.js | 2 - dist/offers/IdentityOffering.d.ts | 3 - dist/offers/IdentityOffering.js | 2 - dist/offers/OfferForMaking.d.ts | 10 - dist/offers/OfferForMaking.js | 2 - dist/offers/OfferList.d.ts | 24 - dist/offers/OfferList.js | 2 - dist/pbaas/ContentMultiMap.d.ts | 24 - dist/pbaas/ContentMultiMap.js | 161 -- dist/pbaas/ContentMultiMapRemove.d.ts | 36 - dist/pbaas/ContentMultiMapRemove.js | 89 - dist/pbaas/Credential.d.ts | 41 - dist/pbaas/Credential.js | 127 -- dist/pbaas/CrossChainDataRef.d.ts | 49 - dist/pbaas/CrossChainDataRef.js | 82 - dist/pbaas/CrossChainProof.d.ts | 42 - dist/pbaas/CrossChainProof.js | 116 -- dist/pbaas/CurrencyValueMap.d.ts | 21 - dist/pbaas/CurrencyValueMap.js | 107 -- dist/pbaas/DataDescriptor.d.ts | 92 - dist/pbaas/DataDescriptor.js | 335 ---- dist/pbaas/DefinedKey.d.ts | 38 - dist/pbaas/DefinedKey.js | 99 - dist/pbaas/EvidenceData.d.ts | 60 - dist/pbaas/EvidenceData.js | 126 -- dist/pbaas/Identity.d.ts | 101 - dist/pbaas/Identity.js | 410 ---- dist/pbaas/IdentityID.d.ts | 7 - dist/pbaas/IdentityID.js | 19 - dist/pbaas/IdentityMultimapRef.d.ts | 38 - dist/pbaas/IdentityMultimapRef.js | 129 -- dist/pbaas/KeyID.d.ts | 7 - dist/pbaas/KeyID.js | 19 - dist/pbaas/MMR.d.ts | 70 - dist/pbaas/MMR.js | 460 ----- dist/pbaas/MMRDescriptor.d.ts | 39 - dist/pbaas/MMRDescriptor.js | 120 -- dist/pbaas/NoDestination.d.ts | 6 - dist/pbaas/NoDestination.js | 13 - dist/pbaas/OptCCParams.d.ts | 29 - dist/pbaas/OptCCParams.js | 206 -- dist/pbaas/PBaaSEvidenceRef.d.ts | 38 - dist/pbaas/PBaaSEvidenceRef.js | 97 - dist/pbaas/PartialIdentity.d.ts | 54 - dist/pbaas/PartialIdentity.js | 172 -- dist/pbaas/PartialMMRData.d.ts | 62 - dist/pbaas/PartialMMRData.js | 333 ---- dist/pbaas/PartialSignData.d.ts | 120 -- dist/pbaas/PartialSignData.js | 518 ------ dist/pbaas/Principal.d.ts | 26 - dist/pbaas/Principal.js | 98 - dist/pbaas/PubKey.d.ts | 11 - dist/pbaas/PubKey.js | 29 - dist/pbaas/Rating.d.ts | 40 - dist/pbaas/Rating.js | 104 -- dist/pbaas/ReserveTransfer.d.ts | 59 - dist/pbaas/ReserveTransfer.js | 154 -- dist/pbaas/SaltedData.d.ts | 15 - dist/pbaas/SaltedData.js | 82 - dist/pbaas/SaplingExtendedSpendingKey.d.ts | 26 - dist/pbaas/SaplingExtendedSpendingKey.js | 65 - dist/pbaas/SaplingExtendedViewingKey.d.ts | 26 - dist/pbaas/SaplingExtendedViewingKey.js | 65 - dist/pbaas/SaplingPaymentAddress.d.ts | 14 - dist/pbaas/SaplingPaymentAddress.js | 42 - dist/pbaas/SignatureData.d.ts | 70 - dist/pbaas/SignatureData.js | 208 --- dist/pbaas/TokenOutput.d.ts | 23 - dist/pbaas/TokenOutput.js | 63 - dist/pbaas/TransferDestination.d.ts | 56 - dist/pbaas/TransferDestination.js | 239 --- dist/pbaas/TxDestination.d.ts | 32 - dist/pbaas/TxDestination.js | 110 -- dist/pbaas/URLRef.d.ts | 36 - dist/pbaas/URLRef.js | 93 - dist/pbaas/UTXORef.d.ts | 22 - dist/pbaas/UTXORef.js | 47 - dist/pbaas/UnknownID.d.ts | 8 - dist/pbaas/UnknownID.js | 24 - dist/pbaas/VdxfUniValue.d.ts | 42 - dist/pbaas/VdxfUniValue.js | 604 ------ dist/pbaas/index.d.ts | 33 - dist/pbaas/index.js | 49 - dist/pbaas/transaction/IdentityScript.d.ts | 9 - dist/pbaas/transaction/IdentityScript.js | 93 - .../transaction/SmartTransactionScript.d.ts | 18 - .../transaction/SmartTransactionScript.js | 53 - dist/pbaas/transaction/VerusScript.d.ts | 10 - dist/pbaas/transaction/VerusScript.js | 26 - dist/transaction/RawTransaction.d.ts | 21 - dist/transaction/RawTransaction.js | 2 - dist/utils/IdentityData.d.ts | 440 ----- dist/utils/IdentityData.js | 165 -- dist/utils/address.d.ts | 15 - dist/utils/address.js | 270 --- dist/utils/bufferutils.d.ts | 52 - dist/utils/bufferutils.js | 180 -- dist/utils/cccustom.d.ts | 20 - dist/utils/cccustom.js | 23 - dist/utils/evals.d.ts | 24 - dist/utils/evals.js | 27 - dist/utils/hash.d.ts | 2 - dist/utils/hash.js | 18 - dist/utils/mmr.d.ts | 2 - dist/utils/mmr.js | 87 - dist/utils/numberConversion.d.ts | 14 - dist/utils/numberConversion.js | 47 - dist/utils/ops.d.ts | 122 -- dist/utils/ops.js | 125 -- dist/utils/pushdata.d.ts | 7 - dist/utils/pushdata.js | 89 - dist/utils/reverseops.d.ts | 2 - dist/utils/reverseops.js | 9 - dist/utils/sapling.d.ts | 39 - dist/utils/sapling.js | 141 -- dist/utils/script.d.ts | 11 - dist/utils/script.js | 160 -- dist/utils/string.d.ts | 3 - dist/utils/string.js | 22 - dist/utils/types/BigNumber.d.ts | 3 - dist/utils/types/BigNumber.js | 5 - dist/utils/types/DataDescriptor.d.ts | 11 - dist/utils/types/DataDescriptor.js | 2 - dist/utils/types/MmrDescriptor.d.ts | 9 - dist/utils/types/MmrDescriptor.js | 2 - dist/utils/types/SerializableEntity.d.ts | 10 - dist/utils/types/SerializableEntity.js | 2 - dist/utils/types/SignData.d.ts | 8 - dist/utils/types/SignData.js | 2 - dist/utils/types/Signature.d.ts | 9 - dist/utils/types/Signature.js | 2 - dist/utils/varint.d.ts | 15 - dist/utils/varint.js | 60 - dist/utils/varuint.d.ts | 21 - dist/utils/varuint.js | 115 -- dist/vdxf/classes/Challenge.d.ts | 81 - dist/vdxf/classes/Challenge.js | 267 --- dist/vdxf/classes/CompactAddressObject.d.ts | 59 - dist/vdxf/classes/CompactAddressObject.js | 141 -- dist/vdxf/classes/CompactIdAddressObject.d.ts | 54 - dist/vdxf/classes/CompactIdAddressObject.js | 145 -- dist/vdxf/classes/Context.d.ts | 18 - dist/vdxf/classes/Context.js | 63 - dist/vdxf/classes/Decision.d.ts | 62 - dist/vdxf/classes/Decision.js | 113 -- dist/vdxf/classes/Hash160.d.ts | 26 - dist/vdxf/classes/Hash160.js | 84 - dist/vdxf/classes/PersonalProfile.d.ts | 7 - dist/vdxf/classes/PersonalProfile.js | 13 - dist/vdxf/classes/Request.d.ts | 51 - dist/vdxf/classes/Request.js | 143 -- dist/vdxf/classes/Response.d.ts | 61 - dist/vdxf/classes/Response.js | 104 -- dist/vdxf/classes/ResponseUri.d.ts | 24 - dist/vdxf/classes/ResponseUri.js | 62 - dist/vdxf/classes/SaltedData.d.ts | 15 - dist/vdxf/classes/SaltedData.js | 81 - .../vdxf/classes/VerifiableSignatureData.d.ts | 92 - dist/vdxf/classes/VerifiableSignatureData.js | 324 ---- .../vdxf/classes/Web/SignedSessionObject.d.ts | 43 - dist/vdxf/classes/Web/SignedSessionObject.js | 132 -- .../classes/Web/SignedSessionObjectData.d.ts | 19 - .../classes/Web/SignedSessionObjectData.js | 67 - .../datapacket/DataPacketResponse.d.ts | 68 - .../classes/datapacket/DataPacketResponse.js | 112 -- .../classes/envelope/GenericEnvelope.d.ts | 63 - dist/vdxf/classes/envelope/GenericEnvelope.js | 216 --- .../IdentityUpdateRequestDetails.d.ts | 75 - .../identity/IdentityUpdateRequestDetails.js | 294 --- .../IdentityUpdateResponseDetails.d.ts | 29 - .../identity/IdentityUpdateResponseDetails.js | 94 - dist/vdxf/classes/index.d.ts | 42 - dist/vdxf/classes/index.js | 75 - .../login/AuthenticationRequestDetails.d.ts | 72 - .../login/AuthenticationRequestDetails.js | 205 -- .../login/AuthenticationResponseDetails.d.ts | 20 - .../login/AuthenticationResponseDetails.js | 54 - .../classes/login/LoginRequestDetails.d.ts | 72 - .../vdxf/classes/login/LoginRequestDetails.js | 205 -- .../classes/login/LoginResponseDetails.d.ts | 20 - .../classes/login/LoginResponseDetails.js | 54 - ...AppEncryptionRequestOrdinalVdxfObject.d.ts | 9 - .../AppEncryptionRequestOrdinalVdxfObject.js | 22 - ...ppEncryptionResponseOrdinalVdxfObject.d.ts | 9 - .../AppEncryptionResponseOrdinalVdxfObject.js | 22 - ...uthenticationRequestOrdinalVdxfObject.d.ts | 9 - .../AuthenticationRequestOrdinalVdxfObject.js | 22 - ...thenticationResponseOrdinalVdxfObject.d.ts | 9 - ...AuthenticationResponseOrdinalVdxfObject.js | 22 - .../DataDescriptorOrdinalVdxfObject.d.ts | 9 - .../DataDescriptorOrdinalVdxfObject.js | 22 - .../DataPacketResponseOrdinalVdxfObject.d.ts | 9 - .../DataPacketResponseOrdinalVdxfObject.js | 22 - ...dentityUpdateRequestOrdinalVdxfObject.d.ts | 9 - .../IdentityUpdateRequestOrdinalVdxfObject.js | 22 - ...entityUpdateResponseOrdinalVdxfObject.d.ts | 9 - ...IdentityUpdateResponseOrdinalVdxfObject.js | 22 - .../LoginRequestDetailsOrdinalVdxfObject.d.ts | 9 - .../LoginRequestDetailsOrdinalVdxfObject.js | 22 - ...LoginResponseDetailsOrdinalVdxfObject.d.ts | 9 - .../LoginResponseDetailsOrdinalVdxfObject.js | 22 - .../classes/ordinals/OrdinalVdxfObject.d.ts | 58 - .../classes/ordinals/OrdinalVdxfObject.js | 205 -- .../ordinals/OrdinalVdxfObjectOrdinalMap.d.ts | 17 - .../ordinals/OrdinalVdxfObjectOrdinalMap.js | 44 - ...isionIdentityDetailsOrdinalVdxfObject.d.ts | 9 - ...ovisionIdentityDetailsOrdinalVdxfObject.js | 22 - .../SerializableEntityOrdinalVdxfObject.d.ts | 11 - .../SerializableEntityOrdinalVdxfObject.js | 26 - .../UserDataRequestOrdinalVdxfObject.d.ts | 9 - .../UserDataRequestOrdinalVdxfObject.js | 22 - ...ficDataPacketDetailsOrdinalVdxfObject.d.ts | 9 - ...cificDataPacketDetailsOrdinalVdxfObject.js | 22 - .../VerusPayInvoiceOrdinalVdxfObject.d.ts | 9 - .../VerusPayInvoiceOrdinalVdxfObject.js | 22 - dist/vdxf/classes/ordinals/index.d.ts | 15 - dist/vdxf/classes/ordinals/index.js | 33 - .../vdxf/classes/payment/VerusPayInvoice.d.ts | 42 - dist/vdxf/classes/payment/VerusPayInvoice.js | 167 -- .../payment/VerusPayInvoiceDetails.d.ts | 84 - .../classes/payment/VerusPayInvoiceDetails.js | 262 --- .../provisioning/ProvisioningChallenge.d.ts | 39 - .../provisioning/ProvisioningChallenge.js | 84 - .../provisioning/ProvisioningDecision.d.ts | 60 - .../provisioning/ProvisioningDecision.js | 69 - .../provisioning/ProvisioningRequest.d.ts | 45 - .../provisioning/ProvisioningRequest.js | 64 - .../provisioning/ProvisioningResponse.d.ts | 13 - .../provisioning/ProvisioningResponse.js | 28 - .../provisioning/ProvisioningResult.d.ts | 32 - .../provisioning/ProvisioningResult.js | 147 -- dist/vdxf/classes/request/GenericRequest.d.ts | 34 - dist/vdxf/classes/request/GenericRequest.js | 100 - .../AppEncryptionRequestDetails.d.ts | 73 - .../AppEncryptionRequestDetails.js | 170 -- .../ProvisionIdentityDetails.d.ts | 57 - .../ProvisionIdentityDetails.js | 146 -- .../UserDataRequestDetails.d.ts | 88 - .../requestobjects/UserDataRequestDetails.js | 214 --- .../UserSpecificDataPacketDetails.d.ts | 69 - .../UserSpecificDataPacketDetails.js | 195 -- .../AppEncryptionResponseDetails.d.ts | 45 - .../response/AppEncryptionResponseDetails.js | 119 -- .../classes/response/GenericResponse.d.ts | 33 - dist/vdxf/classes/response/GenericResponse.js | 83 - dist/vdxf/identitydatakeys.d.ts | 184 -- dist/vdxf/identitydatakeys.js | 1653 ----------------- dist/vdxf/index.d.ts | 103 - dist/vdxf/index.js | 240 --- dist/vdxf/keymap.d.ts | 12 - dist/vdxf/keymap.js | 10 - dist/vdxf/keys.d.ts | 86 - dist/vdxf/keys.js | 626 ------- dist/vdxf/parser.d.ts | 2 - dist/vdxf/parser.js | 44 - dist/vdxf/scopes.d.ts | 6 - dist/vdxf/scopes.js | 45 - dist/vdxf/vdxfdatakeys.d.ts | 73 - dist/vdxf/vdxfdatakeys.js | 367 ---- 398 files changed, 23389 deletions(-) delete mode 100644 dist/api/ApiCommunication.d.ts delete mode 100644 dist/api/ApiCommunication.js delete mode 100644 dist/api/ApiPrimitive.d.ts delete mode 100644 dist/api/ApiPrimitive.js delete mode 100644 dist/api/ApiRequest.d.ts delete mode 100644 dist/api/ApiRequest.js delete mode 100644 dist/api/ApiResponse.d.ts delete mode 100644 dist/api/ApiResponse.js delete mode 100644 dist/api/classes/EstimateConversion/EstimateConversionRequest.d.ts delete mode 100644 dist/api/classes/EstimateConversion/EstimateConversionRequest.js delete mode 100644 dist/api/classes/EstimateConversion/EstimateConversionResponse.d.ts delete mode 100644 dist/api/classes/EstimateConversion/EstimateConversionResponse.js delete mode 100644 dist/api/classes/FundRawTransaction/FundRawTransactionRequest.d.ts delete mode 100644 dist/api/classes/FundRawTransaction/FundRawTransactionRequest.js delete mode 100644 dist/api/classes/FundRawTransaction/FundRawTransactionResponse.d.ts delete mode 100644 dist/api/classes/FundRawTransaction/FundRawTransactionResponse.js delete mode 100644 dist/api/classes/GetAddressBalance/GetAddressBalanceRequest.d.ts delete mode 100644 dist/api/classes/GetAddressBalance/GetAddressBalanceRequest.js delete mode 100644 dist/api/classes/GetAddressBalance/GetAddressBalanceResponse.d.ts delete mode 100644 dist/api/classes/GetAddressBalance/GetAddressBalanceResponse.js delete mode 100644 dist/api/classes/GetAddressDeltas/GetAddressDeltasRequest.d.ts delete mode 100644 dist/api/classes/GetAddressDeltas/GetAddressDeltasRequest.js delete mode 100644 dist/api/classes/GetAddressDeltas/GetAddressDeltasResponse.d.ts delete mode 100644 dist/api/classes/GetAddressDeltas/GetAddressDeltasResponse.js delete mode 100644 dist/api/classes/GetAddressMempool/GetAddressMempoolRequest.d.ts delete mode 100644 dist/api/classes/GetAddressMempool/GetAddressMempoolRequest.js delete mode 100644 dist/api/classes/GetAddressMempool/GetAddressMempoolResponse.d.ts delete mode 100644 dist/api/classes/GetAddressMempool/GetAddressMempoolResponse.js delete mode 100644 dist/api/classes/GetAddressUtxos/GetAddressUtxosRequest.d.ts delete mode 100644 dist/api/classes/GetAddressUtxos/GetAddressUtxosRequest.js delete mode 100644 dist/api/classes/GetAddressUtxos/GetAddressUtxosResponse.d.ts delete mode 100644 dist/api/classes/GetAddressUtxos/GetAddressUtxosResponse.js delete mode 100644 dist/api/classes/GetBlock/GetBlockRequest.d.ts delete mode 100644 dist/api/classes/GetBlock/GetBlockRequest.js delete mode 100644 dist/api/classes/GetBlock/GetBlockResponse.d.ts delete mode 100644 dist/api/classes/GetBlock/GetBlockResponse.js delete mode 100644 dist/api/classes/GetBlockCount/GetBlockCountRequest.d.ts delete mode 100644 dist/api/classes/GetBlockCount/GetBlockCountRequest.js delete mode 100644 dist/api/classes/GetBlockCount/GetBlockCountResponse.d.ts delete mode 100644 dist/api/classes/GetBlockCount/GetBlockCountResponse.js delete mode 100644 dist/api/classes/GetCurrency/GetCurrencyRequest.d.ts delete mode 100644 dist/api/classes/GetCurrency/GetCurrencyRequest.js delete mode 100644 dist/api/classes/GetCurrency/GetCurrencyResponse.d.ts delete mode 100644 dist/api/classes/GetCurrency/GetCurrencyResponse.js delete mode 100644 dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersRequest.d.ts delete mode 100644 dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersRequest.js delete mode 100644 dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersResponse.d.ts delete mode 100644 dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersResponse.js delete mode 100644 dist/api/classes/GetIdentity/GetIdentityRequest.d.ts delete mode 100644 dist/api/classes/GetIdentity/GetIdentityRequest.js delete mode 100644 dist/api/classes/GetIdentity/GetIdentityResponse.d.ts delete mode 100644 dist/api/classes/GetIdentity/GetIdentityResponse.js delete mode 100644 dist/api/classes/GetIdentityContent/GetIdentityContentRequest.d.ts delete mode 100644 dist/api/classes/GetIdentityContent/GetIdentityContentRequest.js delete mode 100644 dist/api/classes/GetInfo/GetInfoRequest.d.ts delete mode 100644 dist/api/classes/GetInfo/GetInfoRequest.js delete mode 100644 dist/api/classes/GetInfo/GetInfoResponse.d.ts delete mode 100644 dist/api/classes/GetInfo/GetInfoResponse.js delete mode 100644 dist/api/classes/GetOffers/GetOffersRequest.d.ts delete mode 100644 dist/api/classes/GetOffers/GetOffersRequest.js delete mode 100644 dist/api/classes/GetOffers/GetOffersResponse.d.ts delete mode 100644 dist/api/classes/GetOffers/GetOffersResponse.js delete mode 100644 dist/api/classes/GetRawTransaction/GetRawTransactionRequest.d.ts delete mode 100644 dist/api/classes/GetRawTransaction/GetRawTransactionRequest.js delete mode 100644 dist/api/classes/GetRawTransaction/GetRawTransactionResponse.d.ts delete mode 100644 dist/api/classes/GetRawTransaction/GetRawTransactionResponse.js delete mode 100644 dist/api/classes/GetVdxfId/GetVdxfIdRequest.d.ts delete mode 100644 dist/api/classes/GetVdxfId/GetVdxfIdRequest.js delete mode 100644 dist/api/classes/GetVdxfId/GetVdxfIdResponse.d.ts delete mode 100644 dist/api/classes/GetVdxfId/GetVdxfIdResponse.js delete mode 100644 dist/api/classes/ListCurrencies/ListCurrenciesRequest.d.ts delete mode 100644 dist/api/classes/ListCurrencies/ListCurrenciesRequest.js delete mode 100644 dist/api/classes/ListCurrencies/ListCurrenciesResponse.d.ts delete mode 100644 dist/api/classes/ListCurrencies/ListCurrenciesResponse.js delete mode 100644 dist/api/classes/MakeOffer/MakeOfferRequest.d.ts delete mode 100644 dist/api/classes/MakeOffer/MakeOfferRequest.js delete mode 100644 dist/api/classes/MakeOffer/MakeOfferResponse.d.ts delete mode 100644 dist/api/classes/MakeOffer/MakeOfferResponse.js delete mode 100644 dist/api/classes/SendCurrency/SendCurrencyRequest.d.ts delete mode 100644 dist/api/classes/SendCurrency/SendCurrencyRequest.js delete mode 100644 dist/api/classes/SendCurrency/SendCurrencyResponse.d.ts delete mode 100644 dist/api/classes/SendCurrency/SendCurrencyResponse.js delete mode 100644 dist/api/classes/SendRawTransaction/SendRawTransactionRequest.d.ts delete mode 100644 dist/api/classes/SendRawTransaction/SendRawTransactionRequest.js delete mode 100644 dist/api/classes/SendRawTransaction/SendRawTransactionResponse.d.ts delete mode 100644 dist/api/classes/SendRawTransaction/SendRawTransactionResponse.js delete mode 100644 dist/api/classes/SignData/SignDataRequest.d.ts delete mode 100644 dist/api/classes/SignData/SignDataRequest.js delete mode 100644 dist/api/classes/SignData/SignDataResponse.d.ts delete mode 100644 dist/api/classes/SignData/SignDataResponse.js delete mode 100644 dist/api/classes/SignMessage/SignMessageRequest.d.ts delete mode 100644 dist/api/classes/SignMessage/SignMessageRequest.js delete mode 100644 dist/api/classes/SignMessage/SignMessageResponse.d.ts delete mode 100644 dist/api/classes/SignMessage/SignMessageResponse.js delete mode 100644 dist/api/classes/SignRawTransaction/SignRawTransactionRequest.d.ts delete mode 100644 dist/api/classes/SignRawTransaction/SignRawTransactionRequest.js delete mode 100644 dist/api/classes/SignRawTransaction/SignRawTransactionResponse.d.ts delete mode 100644 dist/api/classes/SignRawTransaction/SignRawTransactionResponse.js delete mode 100644 dist/api/classes/UpdateIdentity/UpdateIdentityRequest.d.ts delete mode 100644 dist/api/classes/UpdateIdentity/UpdateIdentityRequest.js delete mode 100644 dist/api/classes/UpdateIdentity/UpdateIdentityResponse.d.ts delete mode 100644 dist/api/classes/UpdateIdentity/UpdateIdentityResponse.js delete mode 100644 dist/api/classes/VerifyMessage/VerifyMessageRequest.d.ts delete mode 100644 dist/api/classes/VerifyMessage/VerifyMessageRequest.js delete mode 100644 dist/api/classes/VerifyMessage/VerifyMessageResponse.d.ts delete mode 100644 dist/api/classes/VerifyMessage/VerifyMessageResponse.js delete mode 100644 dist/api/classes/ZGetOperationStatus/ZGetOperationStatusRequest.d.ts delete mode 100644 dist/api/classes/ZGetOperationStatus/ZGetOperationStatusRequest.js delete mode 100644 dist/api/classes/ZGetOperationStatus/ZGetOperationStatusResponse.d.ts delete mode 100644 dist/api/classes/ZGetOperationStatus/ZGetOperationStatusResponse.js delete mode 100644 dist/api/classes/index.d.ts delete mode 100644 dist/api/classes/index.js delete mode 100644 dist/block/BlockInfo.d.ts delete mode 100644 dist/block/BlockInfo.js delete mode 100644 dist/constants/cmds.d.ts delete mode 100644 dist/constants/cmds.js delete mode 100644 dist/constants/deeplink.d.ts delete mode 100644 dist/constants/deeplink.js delete mode 100644 dist/constants/ordinals/ordinals.d.ts delete mode 100644 dist/constants/ordinals/ordinals.js delete mode 100644 dist/constants/ordinals/register.d.ts delete mode 100644 dist/constants/ordinals/register.js delete mode 100644 dist/constants/ordinals/types.d.ts delete mode 100644 dist/constants/ordinals/types.js delete mode 100644 dist/constants/pbaas.d.ts delete mode 100644 dist/constants/pbaas.js delete mode 100644 dist/constants/vdxf.d.ts delete mode 100644 dist/constants/vdxf.js delete mode 100644 dist/constants/vdxf/veruspay.d.ts delete mode 100644 dist/constants/vdxf/veruspay.js delete mode 100644 dist/currency/CurrencyDefinition.d.ts delete mode 100644 dist/currency/CurrencyDefinition.js delete mode 100644 dist/identity/IdentityDefinition.d.ts delete mode 100644 dist/identity/IdentityDefinition.js delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.js delete mode 100644 dist/offers/CurrencyOffering.d.ts delete mode 100644 dist/offers/CurrencyOffering.js delete mode 100644 dist/offers/CurrencyReceiving.d.ts delete mode 100644 dist/offers/CurrencyReceiving.js delete mode 100644 dist/offers/IdentityOffering.d.ts delete mode 100644 dist/offers/IdentityOffering.js delete mode 100644 dist/offers/OfferForMaking.d.ts delete mode 100644 dist/offers/OfferForMaking.js delete mode 100644 dist/offers/OfferList.d.ts delete mode 100644 dist/offers/OfferList.js delete mode 100644 dist/pbaas/ContentMultiMap.d.ts delete mode 100644 dist/pbaas/ContentMultiMap.js delete mode 100644 dist/pbaas/ContentMultiMapRemove.d.ts delete mode 100644 dist/pbaas/ContentMultiMapRemove.js delete mode 100644 dist/pbaas/Credential.d.ts delete mode 100644 dist/pbaas/Credential.js delete mode 100644 dist/pbaas/CrossChainDataRef.d.ts delete mode 100644 dist/pbaas/CrossChainDataRef.js delete mode 100644 dist/pbaas/CrossChainProof.d.ts delete mode 100644 dist/pbaas/CrossChainProof.js delete mode 100644 dist/pbaas/CurrencyValueMap.d.ts delete mode 100644 dist/pbaas/CurrencyValueMap.js delete mode 100644 dist/pbaas/DataDescriptor.d.ts delete mode 100644 dist/pbaas/DataDescriptor.js delete mode 100644 dist/pbaas/DefinedKey.d.ts delete mode 100644 dist/pbaas/DefinedKey.js delete mode 100644 dist/pbaas/EvidenceData.d.ts delete mode 100644 dist/pbaas/EvidenceData.js delete mode 100644 dist/pbaas/Identity.d.ts delete mode 100644 dist/pbaas/Identity.js delete mode 100644 dist/pbaas/IdentityID.d.ts delete mode 100644 dist/pbaas/IdentityID.js delete mode 100644 dist/pbaas/IdentityMultimapRef.d.ts delete mode 100644 dist/pbaas/IdentityMultimapRef.js delete mode 100644 dist/pbaas/KeyID.d.ts delete mode 100644 dist/pbaas/KeyID.js delete mode 100644 dist/pbaas/MMR.d.ts delete mode 100644 dist/pbaas/MMR.js delete mode 100644 dist/pbaas/MMRDescriptor.d.ts delete mode 100644 dist/pbaas/MMRDescriptor.js delete mode 100644 dist/pbaas/NoDestination.d.ts delete mode 100644 dist/pbaas/NoDestination.js delete mode 100644 dist/pbaas/OptCCParams.d.ts delete mode 100644 dist/pbaas/OptCCParams.js delete mode 100644 dist/pbaas/PBaaSEvidenceRef.d.ts delete mode 100644 dist/pbaas/PBaaSEvidenceRef.js delete mode 100644 dist/pbaas/PartialIdentity.d.ts delete mode 100644 dist/pbaas/PartialIdentity.js delete mode 100644 dist/pbaas/PartialMMRData.d.ts delete mode 100644 dist/pbaas/PartialMMRData.js delete mode 100644 dist/pbaas/PartialSignData.d.ts delete mode 100644 dist/pbaas/PartialSignData.js delete mode 100644 dist/pbaas/Principal.d.ts delete mode 100644 dist/pbaas/Principal.js delete mode 100644 dist/pbaas/PubKey.d.ts delete mode 100644 dist/pbaas/PubKey.js delete mode 100644 dist/pbaas/Rating.d.ts delete mode 100644 dist/pbaas/Rating.js delete mode 100644 dist/pbaas/ReserveTransfer.d.ts delete mode 100644 dist/pbaas/ReserveTransfer.js delete mode 100644 dist/pbaas/SaltedData.d.ts delete mode 100644 dist/pbaas/SaltedData.js delete mode 100644 dist/pbaas/SaplingExtendedSpendingKey.d.ts delete mode 100644 dist/pbaas/SaplingExtendedSpendingKey.js delete mode 100644 dist/pbaas/SaplingExtendedViewingKey.d.ts delete mode 100644 dist/pbaas/SaplingExtendedViewingKey.js delete mode 100644 dist/pbaas/SaplingPaymentAddress.d.ts delete mode 100644 dist/pbaas/SaplingPaymentAddress.js delete mode 100644 dist/pbaas/SignatureData.d.ts delete mode 100644 dist/pbaas/SignatureData.js delete mode 100644 dist/pbaas/TokenOutput.d.ts delete mode 100644 dist/pbaas/TokenOutput.js delete mode 100644 dist/pbaas/TransferDestination.d.ts delete mode 100644 dist/pbaas/TransferDestination.js delete mode 100644 dist/pbaas/TxDestination.d.ts delete mode 100644 dist/pbaas/TxDestination.js delete mode 100644 dist/pbaas/URLRef.d.ts delete mode 100644 dist/pbaas/URLRef.js delete mode 100644 dist/pbaas/UTXORef.d.ts delete mode 100644 dist/pbaas/UTXORef.js delete mode 100644 dist/pbaas/UnknownID.d.ts delete mode 100644 dist/pbaas/UnknownID.js delete mode 100644 dist/pbaas/VdxfUniValue.d.ts delete mode 100644 dist/pbaas/VdxfUniValue.js delete mode 100644 dist/pbaas/index.d.ts delete mode 100644 dist/pbaas/index.js delete mode 100644 dist/pbaas/transaction/IdentityScript.d.ts delete mode 100644 dist/pbaas/transaction/IdentityScript.js delete mode 100644 dist/pbaas/transaction/SmartTransactionScript.d.ts delete mode 100644 dist/pbaas/transaction/SmartTransactionScript.js delete mode 100644 dist/pbaas/transaction/VerusScript.d.ts delete mode 100644 dist/pbaas/transaction/VerusScript.js delete mode 100644 dist/transaction/RawTransaction.d.ts delete mode 100644 dist/transaction/RawTransaction.js delete mode 100644 dist/utils/IdentityData.d.ts delete mode 100644 dist/utils/IdentityData.js delete mode 100644 dist/utils/address.d.ts delete mode 100644 dist/utils/address.js delete mode 100644 dist/utils/bufferutils.d.ts delete mode 100644 dist/utils/bufferutils.js delete mode 100644 dist/utils/cccustom.d.ts delete mode 100644 dist/utils/cccustom.js delete mode 100644 dist/utils/evals.d.ts delete mode 100644 dist/utils/evals.js delete mode 100644 dist/utils/hash.d.ts delete mode 100644 dist/utils/hash.js delete mode 100644 dist/utils/mmr.d.ts delete mode 100644 dist/utils/mmr.js delete mode 100644 dist/utils/numberConversion.d.ts delete mode 100644 dist/utils/numberConversion.js delete mode 100644 dist/utils/ops.d.ts delete mode 100644 dist/utils/ops.js delete mode 100644 dist/utils/pushdata.d.ts delete mode 100644 dist/utils/pushdata.js delete mode 100644 dist/utils/reverseops.d.ts delete mode 100644 dist/utils/reverseops.js delete mode 100644 dist/utils/sapling.d.ts delete mode 100644 dist/utils/sapling.js delete mode 100644 dist/utils/script.d.ts delete mode 100644 dist/utils/script.js delete mode 100644 dist/utils/string.d.ts delete mode 100644 dist/utils/string.js delete mode 100644 dist/utils/types/BigNumber.d.ts delete mode 100644 dist/utils/types/BigNumber.js delete mode 100644 dist/utils/types/DataDescriptor.d.ts delete mode 100644 dist/utils/types/DataDescriptor.js delete mode 100644 dist/utils/types/MmrDescriptor.d.ts delete mode 100644 dist/utils/types/MmrDescriptor.js delete mode 100644 dist/utils/types/SerializableEntity.d.ts delete mode 100644 dist/utils/types/SerializableEntity.js delete mode 100644 dist/utils/types/SignData.d.ts delete mode 100644 dist/utils/types/SignData.js delete mode 100644 dist/utils/types/Signature.d.ts delete mode 100644 dist/utils/types/Signature.js delete mode 100644 dist/utils/varint.d.ts delete mode 100644 dist/utils/varint.js delete mode 100644 dist/utils/varuint.d.ts delete mode 100644 dist/utils/varuint.js delete mode 100644 dist/vdxf/classes/Challenge.d.ts delete mode 100644 dist/vdxf/classes/Challenge.js delete mode 100644 dist/vdxf/classes/CompactAddressObject.d.ts delete mode 100644 dist/vdxf/classes/CompactAddressObject.js delete mode 100644 dist/vdxf/classes/CompactIdAddressObject.d.ts delete mode 100644 dist/vdxf/classes/CompactIdAddressObject.js delete mode 100644 dist/vdxf/classes/Context.d.ts delete mode 100644 dist/vdxf/classes/Context.js delete mode 100644 dist/vdxf/classes/Decision.d.ts delete mode 100644 dist/vdxf/classes/Decision.js delete mode 100644 dist/vdxf/classes/Hash160.d.ts delete mode 100644 dist/vdxf/classes/Hash160.js delete mode 100644 dist/vdxf/classes/PersonalProfile.d.ts delete mode 100644 dist/vdxf/classes/PersonalProfile.js delete mode 100644 dist/vdxf/classes/Request.d.ts delete mode 100644 dist/vdxf/classes/Request.js delete mode 100644 dist/vdxf/classes/Response.d.ts delete mode 100644 dist/vdxf/classes/Response.js delete mode 100644 dist/vdxf/classes/ResponseUri.d.ts delete mode 100644 dist/vdxf/classes/ResponseUri.js delete mode 100644 dist/vdxf/classes/SaltedData.d.ts delete mode 100644 dist/vdxf/classes/SaltedData.js delete mode 100644 dist/vdxf/classes/VerifiableSignatureData.d.ts delete mode 100644 dist/vdxf/classes/VerifiableSignatureData.js delete mode 100644 dist/vdxf/classes/Web/SignedSessionObject.d.ts delete mode 100644 dist/vdxf/classes/Web/SignedSessionObject.js delete mode 100644 dist/vdxf/classes/Web/SignedSessionObjectData.d.ts delete mode 100644 dist/vdxf/classes/Web/SignedSessionObjectData.js delete mode 100644 dist/vdxf/classes/datapacket/DataPacketResponse.d.ts delete mode 100644 dist/vdxf/classes/datapacket/DataPacketResponse.js delete mode 100644 dist/vdxf/classes/envelope/GenericEnvelope.d.ts delete mode 100644 dist/vdxf/classes/envelope/GenericEnvelope.js delete mode 100644 dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts delete mode 100644 dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js delete mode 100644 dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts delete mode 100644 dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js delete mode 100644 dist/vdxf/classes/index.d.ts delete mode 100644 dist/vdxf/classes/index.js delete mode 100644 dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts delete mode 100644 dist/vdxf/classes/login/AuthenticationRequestDetails.js delete mode 100644 dist/vdxf/classes/login/AuthenticationResponseDetails.d.ts delete mode 100644 dist/vdxf/classes/login/AuthenticationResponseDetails.js delete mode 100644 dist/vdxf/classes/login/LoginRequestDetails.d.ts delete mode 100644 dist/vdxf/classes/login/LoginRequestDetails.js delete mode 100644 dist/vdxf/classes/login/LoginResponseDetails.d.ts delete mode 100644 dist/vdxf/classes/login/LoginResponseDetails.js delete mode 100644 dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.d.ts delete mode 100644 dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.js delete mode 100644 dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.d.ts delete mode 100644 dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.js delete mode 100644 dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.d.ts delete mode 100644 dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.js delete mode 100644 dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.d.ts delete mode 100644 dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.js delete mode 100644 dist/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.d.ts delete mode 100644 dist/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.js delete mode 100644 dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.d.ts delete mode 100644 dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.js delete mode 100644 dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.d.ts delete mode 100644 dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.js delete mode 100644 dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.d.ts delete mode 100644 dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.js delete mode 100644 dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.d.ts delete mode 100644 dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.js delete mode 100644 dist/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.d.ts delete mode 100644 dist/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.js delete mode 100644 dist/vdxf/classes/ordinals/OrdinalVdxfObject.d.ts delete mode 100644 dist/vdxf/classes/ordinals/OrdinalVdxfObject.js delete mode 100644 dist/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.d.ts delete mode 100644 dist/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.js delete mode 100644 dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.d.ts delete mode 100644 dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.js delete mode 100644 dist/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.d.ts delete mode 100644 dist/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.js delete mode 100644 dist/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.d.ts delete mode 100644 dist/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.js delete mode 100644 dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.d.ts delete mode 100644 dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.js delete mode 100644 dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.d.ts delete mode 100644 dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.js delete mode 100644 dist/vdxf/classes/ordinals/index.d.ts delete mode 100644 dist/vdxf/classes/ordinals/index.js delete mode 100644 dist/vdxf/classes/payment/VerusPayInvoice.d.ts delete mode 100644 dist/vdxf/classes/payment/VerusPayInvoice.js delete mode 100644 dist/vdxf/classes/payment/VerusPayInvoiceDetails.d.ts delete mode 100644 dist/vdxf/classes/payment/VerusPayInvoiceDetails.js delete mode 100644 dist/vdxf/classes/provisioning/ProvisioningChallenge.d.ts delete mode 100644 dist/vdxf/classes/provisioning/ProvisioningChallenge.js delete mode 100644 dist/vdxf/classes/provisioning/ProvisioningDecision.d.ts delete mode 100644 dist/vdxf/classes/provisioning/ProvisioningDecision.js delete mode 100644 dist/vdxf/classes/provisioning/ProvisioningRequest.d.ts delete mode 100644 dist/vdxf/classes/provisioning/ProvisioningRequest.js delete mode 100644 dist/vdxf/classes/provisioning/ProvisioningResponse.d.ts delete mode 100644 dist/vdxf/classes/provisioning/ProvisioningResponse.js delete mode 100644 dist/vdxf/classes/provisioning/ProvisioningResult.d.ts delete mode 100644 dist/vdxf/classes/provisioning/ProvisioningResult.js delete mode 100644 dist/vdxf/classes/request/GenericRequest.d.ts delete mode 100644 dist/vdxf/classes/request/GenericRequest.js delete mode 100644 dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts delete mode 100644 dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js delete mode 100644 dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts delete mode 100644 dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js delete mode 100644 dist/vdxf/classes/requestobjects/UserDataRequestDetails.d.ts delete mode 100644 dist/vdxf/classes/requestobjects/UserDataRequestDetails.js delete mode 100644 dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.d.ts delete mode 100644 dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.js delete mode 100644 dist/vdxf/classes/response/AppEncryptionResponseDetails.d.ts delete mode 100644 dist/vdxf/classes/response/AppEncryptionResponseDetails.js delete mode 100644 dist/vdxf/classes/response/GenericResponse.d.ts delete mode 100644 dist/vdxf/classes/response/GenericResponse.js delete mode 100644 dist/vdxf/identitydatakeys.d.ts delete mode 100644 dist/vdxf/identitydatakeys.js delete mode 100644 dist/vdxf/index.d.ts delete mode 100644 dist/vdxf/index.js delete mode 100644 dist/vdxf/keymap.d.ts delete mode 100644 dist/vdxf/keymap.js delete mode 100644 dist/vdxf/keys.d.ts delete mode 100644 dist/vdxf/keys.js delete mode 100644 dist/vdxf/parser.d.ts delete mode 100644 dist/vdxf/parser.js delete mode 100644 dist/vdxf/scopes.d.ts delete mode 100644 dist/vdxf/scopes.js delete mode 100644 dist/vdxf/vdxfdatakeys.d.ts delete mode 100644 dist/vdxf/vdxfdatakeys.js diff --git a/dist/api/ApiCommunication.d.ts b/dist/api/ApiCommunication.d.ts deleted file mode 100644 index d42f96e9..00000000 --- a/dist/api/ApiCommunication.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { ApiPrimitive } from "./ApiPrimitive"; -export interface ApiCommunication { - toJson: () => ApiPrimitive; -} diff --git a/dist/api/ApiCommunication.js b/dist/api/ApiCommunication.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/api/ApiCommunication.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/api/ApiPrimitive.d.ts b/dist/api/ApiPrimitive.d.ts deleted file mode 100644 index 6e87a8e5..00000000 --- a/dist/api/ApiPrimitive.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { BlockInfo } from "../block/BlockInfo"; -import { IdentityDefinition } from "../identity/IdentityDefinition"; -import { OfferForMaking } from "../offers/OfferForMaking"; -import { ListedOffer } from "../offers/OfferList"; -import { RawTransaction } from "../transaction/RawTransaction"; -import { SignDataArgs } from "./classes/SignData/SignDataRequest"; -export type ApiPrimitive = string | number | boolean | null | OfferForMaking | ApiPrimitiveJson | ListedOffer | Array | IdentityDefinition | BlockInfo | RawTransaction | SignDataArgs; -export type ApiPrimitiveJson = { - [key: string]: ApiPrimitive | undefined; -}; -export type RequestParams = Array; diff --git a/dist/api/ApiPrimitive.js b/dist/api/ApiPrimitive.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/api/ApiPrimitive.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/api/ApiRequest.d.ts b/dist/api/ApiRequest.d.ts deleted file mode 100644 index e7256bc6..00000000 --- a/dist/api/ApiRequest.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { ApiCommunication } from "./ApiCommunication"; -import { ApiPrimitiveJson, RequestParams } from "./ApiPrimitive"; -export declare abstract class ApiRequest implements ApiCommunication { - chain: string; - cmd: string; - abstract getParams(): RequestParams; - abstract toJson(): ApiPrimitiveJson; - constructor(chain: string, cmd: string); - prepare(): [string, string, RequestParams]; -} diff --git a/dist/api/ApiRequest.js b/dist/api/ApiRequest.js deleted file mode 100644 index 6f7e69e2..00000000 --- a/dist/api/ApiRequest.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiRequest = void 0; -class ApiRequest { - constructor(chain, cmd) { - this.chain = chain; - this.cmd = cmd; - } - prepare() { - return [this.chain, this.cmd, this.getParams()]; - } -} -exports.ApiRequest = ApiRequest; diff --git a/dist/api/ApiResponse.d.ts b/dist/api/ApiResponse.d.ts deleted file mode 100644 index 27688085..00000000 --- a/dist/api/ApiResponse.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { ApiCommunication } from "./ApiCommunication"; -import { ApiPrimitive } from "./ApiPrimitive"; -export declare class ApiResponse implements ApiCommunication { - result: ApiPrimitive; - constructor(result: any); - toJson(): ApiPrimitive; -} diff --git a/dist/api/ApiResponse.js b/dist/api/ApiResponse.js deleted file mode 100644 index bb1d6fbe..00000000 --- a/dist/api/ApiResponse.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ApiResponse = void 0; -class ApiResponse { - constructor(result) { - this.result = result; - } - toJson() { - return this.result; - } -} -exports.ApiResponse = ApiResponse; diff --git a/dist/api/classes/EstimateConversion/EstimateConversionRequest.d.ts b/dist/api/classes/EstimateConversion/EstimateConversionRequest.d.ts deleted file mode 100644 index b41e4d32..00000000 --- a/dist/api/classes/EstimateConversion/EstimateConversionRequest.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; -type Output = { - currency: string; - amount: number; - convertto: string; - preconvert?: boolean; - via?: string; -}; -export declare class EstimateConversionRequest extends ApiRequest { - output: Output; - constructor(chain: string, output: Output); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): EstimateConversionRequest; - toJson(): ApiPrimitiveJson; -} -export {}; diff --git a/dist/api/classes/EstimateConversion/EstimateConversionRequest.js b/dist/api/classes/EstimateConversion/EstimateConversionRequest.js deleted file mode 100644 index 80d050c7..00000000 --- a/dist/api/classes/EstimateConversion/EstimateConversionRequest.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.EstimateConversionRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class EstimateConversionRequest extends ApiRequest_1.ApiRequest { - constructor(chain, output) { - super(chain, cmds_1.ESTIMATE_CONVERSION); - this.output = output; - } - getParams() { - const params = [ - this.output - ]; - return params; - } - static fromJson(object) { - return new EstimateConversionRequest(object.chain, object.output); - } - toJson() { - return { - chain: this.chain, - output: this.output - }; - } -} -exports.EstimateConversionRequest = EstimateConversionRequest; diff --git a/dist/api/classes/EstimateConversion/EstimateConversionResponse.d.ts b/dist/api/classes/EstimateConversion/EstimateConversionResponse.d.ts deleted file mode 100644 index 3ed568e2..00000000 --- a/dist/api/classes/EstimateConversion/EstimateConversionResponse.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { ApiResponse } from "../../ApiResponse"; -export declare class EstimateConversionResponse extends ApiResponse { - result: { - estimatedcurrencyout: number; - inputcurrencyid: string; - netinputamount: number; - outputcurrencyid: string; - estimatedcurrencystate: { - currencies: { - [currencyid: string]: { - conversionfees: number; - fees: number; - lastconversionprice: number; - primarycurrencyin: number; - priorweights: number; - reservein: number; - reserveout: number; - viaconversionprice: number; - }; - }; - currencyid: string; - emitted: number; - flags: number; - initialsupply: number; - preconvertedout: number; - primarycurrencyconversionfees: number; - primarycurrencyfees: number; - primarycurrencyout: number; - reservecurrencies: Array<{ - currencyid: string; - priceinreserve: number; - reserves: number; - weight: number; - }>; - supply: number; - version: number; - }; - }; -} diff --git a/dist/api/classes/EstimateConversion/EstimateConversionResponse.js b/dist/api/classes/EstimateConversion/EstimateConversionResponse.js deleted file mode 100644 index 7bc1a522..00000000 --- a/dist/api/classes/EstimateConversion/EstimateConversionResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.EstimateConversionResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class EstimateConversionResponse extends ApiResponse_1.ApiResponse { -} -exports.EstimateConversionResponse = EstimateConversionResponse; diff --git a/dist/api/classes/FundRawTransaction/FundRawTransactionRequest.d.ts b/dist/api/classes/FundRawTransaction/FundRawTransactionRequest.d.ts deleted file mode 100644 index 60f2a793..00000000 --- a/dist/api/classes/FundRawTransaction/FundRawTransactionRequest.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; -type Utxo = { - voutnum: number; - txid: string; -}; -export declare class FundRawTransactionRequest extends ApiRequest { - txhex: string; - utxos?: Array; - changeaddr?: string; - explicitfee?: number; - constructor(chain: string, txhex: string, utxos?: Array, changeaddr?: string, explicitfee?: number); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): FundRawTransactionRequest; - toJson(): ApiPrimitiveJson; -} -export {}; diff --git a/dist/api/classes/FundRawTransaction/FundRawTransactionRequest.js b/dist/api/classes/FundRawTransaction/FundRawTransactionRequest.js deleted file mode 100644 index fb944f89..00000000 --- a/dist/api/classes/FundRawTransaction/FundRawTransactionRequest.js +++ /dev/null @@ -1,36 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.FundRawTransactionRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class FundRawTransactionRequest extends ApiRequest_1.ApiRequest { - constructor(chain, txhex, utxos, changeaddr, explicitfee) { - super(chain, cmds_1.FUND_RAW_TRANSACTION); - this.txhex = txhex; - this.utxos = utxos; - this.changeaddr = changeaddr; - this.explicitfee = explicitfee; - } - getParams() { - const params = [ - this.txhex, - this.utxos, - this.changeaddr, - this.explicitfee - ]; - return params.filter((x) => x != null); - } - static fromJson(object) { - return new FundRawTransactionRequest(object.chain, object.txhex, object.utxos != null ? object.utxos : undefined, object.changeaddr != null ? object.changeaddr : undefined, object.explicitfee != null ? object.explicitfee : undefined); - } - toJson() { - return { - chain: this.chain, - txhex: this.txhex, - utxos: this.utxos, - changeaddr: this.changeaddr, - explicitfee: this.explicitfee, - }; - } -} -exports.FundRawTransactionRequest = FundRawTransactionRequest; diff --git a/dist/api/classes/FundRawTransaction/FundRawTransactionResponse.d.ts b/dist/api/classes/FundRawTransaction/FundRawTransactionResponse.d.ts deleted file mode 100644 index 5c969774..00000000 --- a/dist/api/classes/FundRawTransaction/FundRawTransactionResponse.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ApiResponse } from "../../ApiResponse"; -export declare class FundRawTransactionResponse extends ApiResponse { - result: { - hex: string; - changepos: number; - fee: number; - }; -} diff --git a/dist/api/classes/FundRawTransaction/FundRawTransactionResponse.js b/dist/api/classes/FundRawTransaction/FundRawTransactionResponse.js deleted file mode 100644 index d2f316ca..00000000 --- a/dist/api/classes/FundRawTransaction/FundRawTransactionResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.FundRawTransactionResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class FundRawTransactionResponse extends ApiResponse_1.ApiResponse { -} -exports.FundRawTransactionResponse = FundRawTransactionResponse; diff --git a/dist/api/classes/GetAddressBalance/GetAddressBalanceRequest.d.ts b/dist/api/classes/GetAddressBalance/GetAddressBalanceRequest.d.ts deleted file mode 100644 index fe32824e..00000000 --- a/dist/api/classes/GetAddressBalance/GetAddressBalanceRequest.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; -export declare class GetAddressBalanceRequest extends ApiRequest { - addresses: { - addresses: Array; - friendlynames?: boolean; - }; - constructor(chain: string, addresses: { - addresses: Array; - friendlynames?: boolean; - }); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): GetAddressBalanceRequest; - toJson(): ApiPrimitiveJson; -} diff --git a/dist/api/classes/GetAddressBalance/GetAddressBalanceRequest.js b/dist/api/classes/GetAddressBalance/GetAddressBalanceRequest.js deleted file mode 100644 index a073dba7..00000000 --- a/dist/api/classes/GetAddressBalance/GetAddressBalanceRequest.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetAddressBalanceRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class GetAddressBalanceRequest extends ApiRequest_1.ApiRequest { - constructor(chain, addresses) { - super(chain, cmds_1.GET_ADDRESS_BALANCE); - this.addresses = addresses; - } - getParams() { - return [this.addresses]; - } - static fromJson(object) { - return new GetAddressBalanceRequest(object.chain, object.addresses); - } - toJson() { - return { - chain: this.chain, - addresses: this.addresses, - }; - } -} -exports.GetAddressBalanceRequest = GetAddressBalanceRequest; diff --git a/dist/api/classes/GetAddressBalance/GetAddressBalanceResponse.d.ts b/dist/api/classes/GetAddressBalance/GetAddressBalanceResponse.d.ts deleted file mode 100644 index 05e1daab..00000000 --- a/dist/api/classes/GetAddressBalance/GetAddressBalanceResponse.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ApiResponse } from "../../ApiResponse"; -export declare class GetAddressBalanceResponse extends ApiResponse { - result: { - balance: number; - received: number; - currencybalance: { - [key: string]: number; - }; - currencyreceived: { - [key: string]: number; - }; - currencynames?: { - [key: string]: string; - }; - }; -} diff --git a/dist/api/classes/GetAddressBalance/GetAddressBalanceResponse.js b/dist/api/classes/GetAddressBalance/GetAddressBalanceResponse.js deleted file mode 100644 index 10283ee5..00000000 --- a/dist/api/classes/GetAddressBalance/GetAddressBalanceResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetAddressBalanceResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class GetAddressBalanceResponse extends ApiResponse_1.ApiResponse { -} -exports.GetAddressBalanceResponse = GetAddressBalanceResponse; diff --git a/dist/api/classes/GetAddressDeltas/GetAddressDeltasRequest.d.ts b/dist/api/classes/GetAddressDeltas/GetAddressDeltasRequest.d.ts deleted file mode 100644 index 7737031b..00000000 --- a/dist/api/classes/GetAddressDeltas/GetAddressDeltasRequest.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; -interface Addresses { - addresses: Array; - start?: number; - end?: number; - chaininfo?: boolean; - verbosity?: number; - friendlynames?: boolean; -} -export declare class GetAddressDeltasRequest extends ApiRequest { - addresses: Addresses; - constructor(chain: string, addresses: Addresses); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): GetAddressDeltasRequest; - toJson(): ApiPrimitiveJson; -} -export {}; diff --git a/dist/api/classes/GetAddressDeltas/GetAddressDeltasRequest.js b/dist/api/classes/GetAddressDeltas/GetAddressDeltasRequest.js deleted file mode 100644 index a6a38392..00000000 --- a/dist/api/classes/GetAddressDeltas/GetAddressDeltasRequest.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetAddressDeltasRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class GetAddressDeltasRequest extends ApiRequest_1.ApiRequest { - constructor(chain, addresses) { - super(chain, cmds_1.GET_ADDRESS_DELTAS); - this.addresses = addresses; - } - getParams() { - return [ - this.addresses, - ]; - } - static fromJson(object) { - return new GetAddressDeltasRequest(object.chain, object.addresses); - } - toJson() { - return { - chain: this.chain, - addresses: this.addresses, - }; - } -} -exports.GetAddressDeltasRequest = GetAddressDeltasRequest; diff --git a/dist/api/classes/GetAddressDeltas/GetAddressDeltasResponse.d.ts b/dist/api/classes/GetAddressDeltas/GetAddressDeltasResponse.d.ts deleted file mode 100644 index 62a90eb9..00000000 --- a/dist/api/classes/GetAddressDeltas/GetAddressDeltasResponse.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ApiResponse } from "../../ApiResponse"; -export declare class GetAddressDeltasResponse extends ApiResponse { - result: Array<{ - satoshis: number; - txid: string; - index: number; - blockindex: number; - height: number; - address: string; - currencyvalues?: { - [key: string]: number; - }; - currencynames?: { - [key: string]: string; - }; - sent?: { - outputs: Array<{ - addresses: string | Array; - amounts: { - [key: string]: number; - }; - }>; - }; - }>; -} diff --git a/dist/api/classes/GetAddressDeltas/GetAddressDeltasResponse.js b/dist/api/classes/GetAddressDeltas/GetAddressDeltasResponse.js deleted file mode 100644 index c41c6d7b..00000000 --- a/dist/api/classes/GetAddressDeltas/GetAddressDeltasResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetAddressDeltasResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class GetAddressDeltasResponse extends ApiResponse_1.ApiResponse { -} -exports.GetAddressDeltasResponse = GetAddressDeltasResponse; diff --git a/dist/api/classes/GetAddressMempool/GetAddressMempoolRequest.d.ts b/dist/api/classes/GetAddressMempool/GetAddressMempoolRequest.d.ts deleted file mode 100644 index 40920c49..00000000 --- a/dist/api/classes/GetAddressMempool/GetAddressMempoolRequest.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; -interface Addresses { - addresses: Array; - start?: number; - end?: number; - chaininfo?: boolean; - verbosity?: number; - friendlynames?: boolean; -} -export declare class GetAddressMempoolRequest extends ApiRequest { - addresses: Addresses; - constructor(chain: string, addresses: Addresses); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): GetAddressMempoolRequest; - toJson(): ApiPrimitiveJson; -} -export {}; diff --git a/dist/api/classes/GetAddressMempool/GetAddressMempoolRequest.js b/dist/api/classes/GetAddressMempool/GetAddressMempoolRequest.js deleted file mode 100644 index 134d702a..00000000 --- a/dist/api/classes/GetAddressMempool/GetAddressMempoolRequest.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetAddressMempoolRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class GetAddressMempoolRequest extends ApiRequest_1.ApiRequest { - constructor(chain, addresses) { - super(chain, cmds_1.GET_ADDRESS_MEMPOOL); - this.addresses = addresses; - } - getParams() { - return [ - this.addresses, - ]; - } - static fromJson(object) { - return new GetAddressMempoolRequest(object.chain, object.addresses); - } - toJson() { - return { - chain: this.chain, - addresses: this.addresses, - }; - } -} -exports.GetAddressMempoolRequest = GetAddressMempoolRequest; diff --git a/dist/api/classes/GetAddressMempool/GetAddressMempoolResponse.d.ts b/dist/api/classes/GetAddressMempool/GetAddressMempoolResponse.d.ts deleted file mode 100644 index 4a95dab1..00000000 --- a/dist/api/classes/GetAddressMempool/GetAddressMempoolResponse.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { ApiResponse } from "../../ApiResponse"; -export declare class GetAddressMempoolResponse extends ApiResponse { - result: Array<{ - satoshis: number; - txid: string; - index: number; - blockindex: number; - height: number; - address: string; - currencyvalues?: { - [key: string]: number; - }; - currencynames?: { - [key: string]: string; - }; - sent?: { - outputs: Array<{ - addresses: string | Array; - amounts: { - [key: string]: number; - }; - }>; - }; - }>; -} diff --git a/dist/api/classes/GetAddressMempool/GetAddressMempoolResponse.js b/dist/api/classes/GetAddressMempool/GetAddressMempoolResponse.js deleted file mode 100644 index 9dc766df..00000000 --- a/dist/api/classes/GetAddressMempool/GetAddressMempoolResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetAddressMempoolResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class GetAddressMempoolResponse extends ApiResponse_1.ApiResponse { -} -exports.GetAddressMempoolResponse = GetAddressMempoolResponse; diff --git a/dist/api/classes/GetAddressUtxos/GetAddressUtxosRequest.d.ts b/dist/api/classes/GetAddressUtxos/GetAddressUtxosRequest.d.ts deleted file mode 100644 index 7c6b0a13..00000000 --- a/dist/api/classes/GetAddressUtxos/GetAddressUtxosRequest.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; -interface Addresses { - addresses: Array; - chaininfo?: boolean; - friendlynames?: boolean; -} -export declare class GetAddressUtxosRequest extends ApiRequest { - addresses: Addresses; - constructor(chain: string, addresses: Addresses); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): GetAddressUtxosRequest; - toJson(): ApiPrimitiveJson; -} -export {}; diff --git a/dist/api/classes/GetAddressUtxos/GetAddressUtxosRequest.js b/dist/api/classes/GetAddressUtxos/GetAddressUtxosRequest.js deleted file mode 100644 index 461ca6c4..00000000 --- a/dist/api/classes/GetAddressUtxos/GetAddressUtxosRequest.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetAddressUtxosRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class GetAddressUtxosRequest extends ApiRequest_1.ApiRequest { - constructor(chain, addresses) { - super(chain, cmds_1.GET_ADDRESS_UTXOS); - this.addresses = addresses; - } - getParams() { - return [ - this.addresses, - ]; - } - static fromJson(object) { - return new GetAddressUtxosRequest(object.chain, object.addresses); - } - toJson() { - return { - chain: this.chain, - addresses: this.addresses, - }; - } -} -exports.GetAddressUtxosRequest = GetAddressUtxosRequest; diff --git a/dist/api/classes/GetAddressUtxos/GetAddressUtxosResponse.d.ts b/dist/api/classes/GetAddressUtxos/GetAddressUtxosResponse.d.ts deleted file mode 100644 index da1a5ac1..00000000 --- a/dist/api/classes/GetAddressUtxos/GetAddressUtxosResponse.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { ApiResponse } from "../../ApiResponse"; -export declare class GetAddressUtxosResponse extends ApiResponse { - result: Array<{ - address: string; - txid: string; - outputIndex: number; - script: string; - currencyvalues?: { - [key: string]: number | undefined; - }; - currencynames?: { - [key: string]: string | undefined; - }; - satoshis: number; - height: number; - isspendable: number; - blocktime: number; - }>; -} diff --git a/dist/api/classes/GetAddressUtxos/GetAddressUtxosResponse.js b/dist/api/classes/GetAddressUtxos/GetAddressUtxosResponse.js deleted file mode 100644 index c3f44724..00000000 --- a/dist/api/classes/GetAddressUtxos/GetAddressUtxosResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetAddressUtxosResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class GetAddressUtxosResponse extends ApiResponse_1.ApiResponse { -} -exports.GetAddressUtxosResponse = GetAddressUtxosResponse; diff --git a/dist/api/classes/GetBlock/GetBlockRequest.d.ts b/dist/api/classes/GetBlock/GetBlockRequest.d.ts deleted file mode 100644 index e9d0171f..00000000 --- a/dist/api/classes/GetBlock/GetBlockRequest.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; -export declare class GetBlockRequest extends ApiRequest { - hashOrHeight: string; - verbosity?: number; - constructor(chain: string, hashOrHeight: string, verbosity?: number); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): GetBlockRequest; - toJson(): ApiPrimitiveJson; -} diff --git a/dist/api/classes/GetBlock/GetBlockRequest.js b/dist/api/classes/GetBlock/GetBlockRequest.js deleted file mode 100644 index 38a26995..00000000 --- a/dist/api/classes/GetBlock/GetBlockRequest.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetBlockRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class GetBlockRequest extends ApiRequest_1.ApiRequest { - constructor(chain, hashOrHeight, verbosity) { - super(chain, cmds_1.GET_BLOCK); - this.hashOrHeight = hashOrHeight; - this.verbosity = verbosity; - } - getParams() { - const params = [ - this.hashOrHeight, - this.verbosity, - ]; - return params.filter((x) => x != null); - } - static fromJson(object) { - return new GetBlockRequest(object.chain, object.hashOrHeight, object.verbosity != null ? object.verbosity : undefined); - } - toJson() { - return { - chain: this.chain, - hashOrHeight: this.hashOrHeight, - verbosity: this.verbosity - }; - } -} -exports.GetBlockRequest = GetBlockRequest; diff --git a/dist/api/classes/GetBlock/GetBlockResponse.d.ts b/dist/api/classes/GetBlock/GetBlockResponse.d.ts deleted file mode 100644 index 4b79761f..00000000 --- a/dist/api/classes/GetBlock/GetBlockResponse.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { BlockInfo } from "../../../block/BlockInfo"; -import { ApiResponse } from "../../ApiResponse"; -export declare class GetBlockResponse extends ApiResponse { - result: string | BlockInfo; -} diff --git a/dist/api/classes/GetBlock/GetBlockResponse.js b/dist/api/classes/GetBlock/GetBlockResponse.js deleted file mode 100644 index 5c10869a..00000000 --- a/dist/api/classes/GetBlock/GetBlockResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetBlockResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class GetBlockResponse extends ApiResponse_1.ApiResponse { -} -exports.GetBlockResponse = GetBlockResponse; diff --git a/dist/api/classes/GetBlockCount/GetBlockCountRequest.d.ts b/dist/api/classes/GetBlockCount/GetBlockCountRequest.d.ts deleted file mode 100644 index dea0b2c1..00000000 --- a/dist/api/classes/GetBlockCount/GetBlockCountRequest.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; -export declare class GetBlockCountRequest extends ApiRequest { - constructor(chain: string); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): GetBlockCountRequest; - toJson(): ApiPrimitiveJson; -} diff --git a/dist/api/classes/GetBlockCount/GetBlockCountRequest.js b/dist/api/classes/GetBlockCount/GetBlockCountRequest.js deleted file mode 100644 index 4361a068..00000000 --- a/dist/api/classes/GetBlockCount/GetBlockCountRequest.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetBlockCountRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class GetBlockCountRequest extends ApiRequest_1.ApiRequest { - constructor(chain) { - super(chain, cmds_1.GET_BLOCK_COUNT); - } - getParams() { - const params = []; - return params; - } - static fromJson(object) { - return new GetBlockCountRequest(object.chain); - } - toJson() { - return { - chain: this.chain, - }; - } -} -exports.GetBlockCountRequest = GetBlockCountRequest; diff --git a/dist/api/classes/GetBlockCount/GetBlockCountResponse.d.ts b/dist/api/classes/GetBlockCount/GetBlockCountResponse.d.ts deleted file mode 100644 index 40a28724..00000000 --- a/dist/api/classes/GetBlockCount/GetBlockCountResponse.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { ApiResponse } from "../../ApiResponse"; -export declare class GetBlockCountResponse extends ApiResponse { - result: number; -} diff --git a/dist/api/classes/GetBlockCount/GetBlockCountResponse.js b/dist/api/classes/GetBlockCount/GetBlockCountResponse.js deleted file mode 100644 index 272f262a..00000000 --- a/dist/api/classes/GetBlockCount/GetBlockCountResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetBlockCountResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class GetBlockCountResponse extends ApiResponse_1.ApiResponse { -} -exports.GetBlockCountResponse = GetBlockCountResponse; diff --git a/dist/api/classes/GetCurrency/GetCurrencyRequest.d.ts b/dist/api/classes/GetCurrency/GetCurrencyRequest.d.ts deleted file mode 100644 index 180c4c57..00000000 --- a/dist/api/classes/GetCurrency/GetCurrencyRequest.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; -export declare class GetCurrencyRequest extends ApiRequest { - currencyname?: string; - constructor(chain: string, currencyname?: string); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): GetCurrencyRequest; - toJson(): ApiPrimitiveJson; -} diff --git a/dist/api/classes/GetCurrency/GetCurrencyRequest.js b/dist/api/classes/GetCurrency/GetCurrencyRequest.js deleted file mode 100644 index 3f438b48..00000000 --- a/dist/api/classes/GetCurrency/GetCurrencyRequest.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetCurrencyRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class GetCurrencyRequest extends ApiRequest_1.ApiRequest { - constructor(chain, currencyname) { - super(chain, cmds_1.GET_CURRENCY); - this.currencyname = currencyname; - } - getParams() { - const params = [ - this.currencyname - ]; - return params.filter((x) => x != null); - } - static fromJson(object) { - return new GetCurrencyRequest(object.chain, object.currencyname); - } - toJson() { - return { - chain: this.chain, - currencyname: this.currencyname - }; - } -} -exports.GetCurrencyRequest = GetCurrencyRequest; diff --git a/dist/api/classes/GetCurrency/GetCurrencyResponse.d.ts b/dist/api/classes/GetCurrency/GetCurrencyResponse.d.ts deleted file mode 100644 index 79371516..00000000 --- a/dist/api/classes/GetCurrency/GetCurrencyResponse.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { CurrencyDefinition } from "../../../currency/CurrencyDefinition"; -import { ApiResponse } from "../../ApiResponse"; -export declare class GetCurrencyResponse extends ApiResponse { - result: CurrencyDefinition; -} diff --git a/dist/api/classes/GetCurrency/GetCurrencyResponse.js b/dist/api/classes/GetCurrency/GetCurrencyResponse.js deleted file mode 100644 index 5d581f2e..00000000 --- a/dist/api/classes/GetCurrency/GetCurrencyResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetCurrencyResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class GetCurrencyResponse extends ApiResponse_1.ApiResponse { -} -exports.GetCurrencyResponse = GetCurrencyResponse; diff --git a/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersRequest.d.ts b/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersRequest.d.ts deleted file mode 100644 index a99bf9b2..00000000 --- a/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersRequest.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; -export declare class GetCurrencyConvertersRequest extends ApiRequest { - currencies: Array; - constructor(chain: string, currencies: Array); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): GetCurrencyConvertersRequest; - toJson(): ApiPrimitiveJson; -} diff --git a/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersRequest.js b/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersRequest.js deleted file mode 100644 index f883cd10..00000000 --- a/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersRequest.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetCurrencyConvertersRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class GetCurrencyConvertersRequest extends ApiRequest_1.ApiRequest { - constructor(chain, currencies) { - super(chain, cmds_1.GET_CURRENCY_CONVERTERS); - this.currencies = currencies; - } - getParams() { - return this.currencies; - } - static fromJson(object) { - return new GetCurrencyConvertersRequest(object.chain, object.currencies); - } - toJson() { - return { - chain: this.chain, - currencies: this.currencies - }; - } -} -exports.GetCurrencyConvertersRequest = GetCurrencyConvertersRequest; diff --git a/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersResponse.d.ts b/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersResponse.d.ts deleted file mode 100644 index 5d9f6b56..00000000 --- a/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersResponse.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { CurrencyDefinition } from "../../../currency/CurrencyDefinition"; -import { ApiResponse } from "../../ApiResponse"; -export declare class GetCurrencyConvertersResponse extends ApiResponse { - result: Array<{ - [key: string]: CurrencyDefinition; - }>; -} diff --git a/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersResponse.js b/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersResponse.js deleted file mode 100644 index 8f263ad6..00000000 --- a/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetCurrencyConvertersResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class GetCurrencyConvertersResponse extends ApiResponse_1.ApiResponse { -} -exports.GetCurrencyConvertersResponse = GetCurrencyConvertersResponse; diff --git a/dist/api/classes/GetIdentity/GetIdentityRequest.d.ts b/dist/api/classes/GetIdentity/GetIdentityRequest.d.ts deleted file mode 100644 index 7f098abd..00000000 --- a/dist/api/classes/GetIdentity/GetIdentityRequest.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; -export declare class GetIdentityRequest extends ApiRequest { - nameOrAddress: string; - height?: number; - txproof?: boolean; - txproofheight?: number; - constructor(chain: string, nameOrAddress: string, height?: number, txproof?: boolean, txproofheight?: number); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): GetIdentityRequest; - toJson(): ApiPrimitiveJson; -} diff --git a/dist/api/classes/GetIdentity/GetIdentityRequest.js b/dist/api/classes/GetIdentity/GetIdentityRequest.js deleted file mode 100644 index 48b892a3..00000000 --- a/dist/api/classes/GetIdentity/GetIdentityRequest.js +++ /dev/null @@ -1,36 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetIdentityRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class GetIdentityRequest extends ApiRequest_1.ApiRequest { - constructor(chain, nameOrAddress, height, txproof, txproofheight) { - super(chain, cmds_1.GET_IDENTITY); - this.nameOrAddress = nameOrAddress; - this.height = height; - this.txproof = txproof; - this.txproofheight = txproofheight; - } - getParams() { - const params = [ - this.nameOrAddress, - this.height, - this.txproof, - this.txproofheight - ]; - return params.filter((x) => x != null); - } - static fromJson(object) { - return new GetIdentityRequest(object.chain, object.nameOrAddress, object.height != null ? object.height : undefined, object.txproof != null ? object.txproof : undefined, object.txproofheight != null ? object.txproofheight : undefined); - } - toJson() { - return { - chain: this.chain, - nameOrAddress: this.nameOrAddress, - height: this.height, - txproof: this.txproof, - txproofheight: this.txproofheight - }; - } -} -exports.GetIdentityRequest = GetIdentityRequest; diff --git a/dist/api/classes/GetIdentity/GetIdentityResponse.d.ts b/dist/api/classes/GetIdentity/GetIdentityResponse.d.ts deleted file mode 100644 index e10e1889..00000000 --- a/dist/api/classes/GetIdentity/GetIdentityResponse.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { IdentityDefinition } from "../../../identity/IdentityDefinition"; -import { ApiResponse } from "../../ApiResponse"; -export declare class GetIdentityResponse extends ApiResponse { - result: { - identity: IdentityDefinition; - status: string; - canspendfor: boolean; - cansignfor: boolean; - blockheight: number; - txid: string; - vout: number; - proof?: string; - }; -} diff --git a/dist/api/classes/GetIdentity/GetIdentityResponse.js b/dist/api/classes/GetIdentity/GetIdentityResponse.js deleted file mode 100644 index 73a456d6..00000000 --- a/dist/api/classes/GetIdentity/GetIdentityResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetIdentityResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class GetIdentityResponse extends ApiResponse_1.ApiResponse { -} -exports.GetIdentityResponse = GetIdentityResponse; diff --git a/dist/api/classes/GetIdentityContent/GetIdentityContentRequest.d.ts b/dist/api/classes/GetIdentityContent/GetIdentityContentRequest.d.ts deleted file mode 100644 index 5c704f25..00000000 --- a/dist/api/classes/GetIdentityContent/GetIdentityContentRequest.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; -export declare class GetIdentityContentRequest extends ApiRequest { - nameOrAddress: string; - heightstart?: number; - heightend?: number; - txproof?: boolean; - txproofheight?: number; - vdxfkey?: string; - constructor(chain: string, nameOrAddress: string, heightstart?: number, heightend?: number, txproof?: boolean, txproofheight?: number, vdxfkey?: string); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): GetIdentityContentRequest; - toJson(): ApiPrimitiveJson; -} diff --git a/dist/api/classes/GetIdentityContent/GetIdentityContentRequest.js b/dist/api/classes/GetIdentityContent/GetIdentityContentRequest.js deleted file mode 100644 index ff743fee..00000000 --- a/dist/api/classes/GetIdentityContent/GetIdentityContentRequest.js +++ /dev/null @@ -1,42 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetIdentityContentRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class GetIdentityContentRequest extends ApiRequest_1.ApiRequest { - constructor(chain, nameOrAddress, heightstart, heightend, txproof, txproofheight, vdxfkey) { - super(chain, cmds_1.GET_IDENTITY_CONTENT); - this.nameOrAddress = nameOrAddress; - this.heightstart = heightstart; - this.heightend = heightend; - this.txproof = txproof; - this.txproofheight = txproofheight; - this.vdxfkey = vdxfkey; - } - getParams() { - const params = [ - this.nameOrAddress, - this.heightstart, - this.heightend, - this.txproof, - this.txproofheight, - this.vdxfkey - ]; - return params.filter((x) => x != null); - } - static fromJson(object) { - return new GetIdentityContentRequest(object.chain, object.nameOrAddress, object.heightstart != null ? object.heightstart : undefined, object.heightend != null ? object.heightend : undefined, object.txproof != null ? object.txproof : undefined, object.txproofheight != null ? object.txproofheight : undefined, object.vdxfkey != null ? object.vdxfkey : undefined); - } - toJson() { - return { - chain: this.chain, - nameOrAddress: this.nameOrAddress, - heightstart: this.heightstart, - heightend: this.heightend, - txproof: this.txproof, - txproofheight: this.txproofheight, - vdxfkey: this.vdxfkey - }; - } -} -exports.GetIdentityContentRequest = GetIdentityContentRequest; diff --git a/dist/api/classes/GetInfo/GetInfoRequest.d.ts b/dist/api/classes/GetInfo/GetInfoRequest.d.ts deleted file mode 100644 index cebf4e6c..00000000 --- a/dist/api/classes/GetInfo/GetInfoRequest.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; -export declare class GetInfoRequest extends ApiRequest { - constructor(chain: string); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): GetInfoRequest; - toJson(): ApiPrimitiveJson; -} diff --git a/dist/api/classes/GetInfo/GetInfoRequest.js b/dist/api/classes/GetInfo/GetInfoRequest.js deleted file mode 100644 index f3975416..00000000 --- a/dist/api/classes/GetInfo/GetInfoRequest.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetInfoRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class GetInfoRequest extends ApiRequest_1.ApiRequest { - constructor(chain) { - super(chain, cmds_1.GET_INFO); - } - getParams() { - return []; - } - static fromJson(object) { - return new GetInfoRequest(object.chain); - } - toJson() { - return { - chain: this.chain, - }; - } -} -exports.GetInfoRequest = GetInfoRequest; diff --git a/dist/api/classes/GetInfo/GetInfoResponse.d.ts b/dist/api/classes/GetInfo/GetInfoResponse.d.ts deleted file mode 100644 index 506b7215..00000000 --- a/dist/api/classes/GetInfo/GetInfoResponse.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { ApiResponse } from "../../ApiResponse"; -export declare class GetInfoResponse extends ApiResponse { - result: { - version: number; - protocolversion: number; - VRSCversion: string; - notarized: number; - prevMoMheight: number; - notarizedhash: string; - notarizedtxid: string; - notarizedtxid_height: string; - KMDnotarized_height: number; - notarized_confirms: number; - blocks: number; - longestchain: number; - timeoffset: number; - tiptime: number; - connections: number; - proxy: string; - difficulty: number; - testnet: boolean; - paytxfee: number; - relayfee: number; - errors: string; - CCid: number; - name: string; - p2pport: number; - rpcport: number; - magic: number; - premine: number; - eras: number; - reward: string; - halving: string; - decay: string; - endsubsidy: string; - veruspos: number; - chainid?: string; - notarychainid?: string; - }; -} diff --git a/dist/api/classes/GetInfo/GetInfoResponse.js b/dist/api/classes/GetInfo/GetInfoResponse.js deleted file mode 100644 index 604c4826..00000000 --- a/dist/api/classes/GetInfo/GetInfoResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetInfoResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class GetInfoResponse extends ApiResponse_1.ApiResponse { -} -exports.GetInfoResponse = GetInfoResponse; diff --git a/dist/api/classes/GetOffers/GetOffersRequest.d.ts b/dist/api/classes/GetOffers/GetOffersRequest.d.ts deleted file mode 100644 index 88ecc739..00000000 --- a/dist/api/classes/GetOffers/GetOffersRequest.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; -export declare class GetOffersRequest extends ApiRequest { - currencyorid: string; - iscurrency?: boolean; - withtx?: boolean; - constructor(chain: string, currencyorid: string, iscurrency?: boolean, withtx?: boolean); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): GetOffersRequest; - toJson(): ApiPrimitiveJson; -} diff --git a/dist/api/classes/GetOffers/GetOffersRequest.js b/dist/api/classes/GetOffers/GetOffersRequest.js deleted file mode 100644 index fc07fab9..00000000 --- a/dist/api/classes/GetOffers/GetOffersRequest.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetOffersRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class GetOffersRequest extends ApiRequest_1.ApiRequest { - constructor(chain, currencyorid, iscurrency, withtx) { - super(chain, cmds_1.GET_OFFERS); - this.currencyorid = currencyorid; - this.iscurrency = iscurrency; - this.withtx = withtx; - } - getParams() { - const params = [ - this.currencyorid, - this.iscurrency == null ? false : this.iscurrency, - this.withtx, - ]; - return params.filter((x) => x != null); - } - static fromJson(object) { - return new GetOffersRequest(object.chain, object.currencyorid, object.iscurrency != null ? object.iscurrency : undefined, object.withtx != null ? object.withtx : undefined); - } - toJson() { - return { - chain: this.chain, - currencyorid: this.currencyorid, - iscurrency: this.iscurrency, - withtx: this.withtx - }; - } -} -exports.GetOffersRequest = GetOffersRequest; diff --git a/dist/api/classes/GetOffers/GetOffersResponse.d.ts b/dist/api/classes/GetOffers/GetOffersResponse.d.ts deleted file mode 100644 index 963e4237..00000000 --- a/dist/api/classes/GetOffers/GetOffersResponse.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { OfferList } from "../../../offers/OfferList"; -import { ApiResponse } from "../../ApiResponse"; -export declare class GetOffersResponse extends ApiResponse { - result: OfferList; -} diff --git a/dist/api/classes/GetOffers/GetOffersResponse.js b/dist/api/classes/GetOffers/GetOffersResponse.js deleted file mode 100644 index 398a380a..00000000 --- a/dist/api/classes/GetOffers/GetOffersResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetOffersResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class GetOffersResponse extends ApiResponse_1.ApiResponse { -} -exports.GetOffersResponse = GetOffersResponse; diff --git a/dist/api/classes/GetRawTransaction/GetRawTransactionRequest.d.ts b/dist/api/classes/GetRawTransaction/GetRawTransactionRequest.d.ts deleted file mode 100644 index 5e3219fd..00000000 --- a/dist/api/classes/GetRawTransaction/GetRawTransactionRequest.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; -export declare class GetRawTransactionRequest extends ApiRequest { - txid: string; - verbose?: number; - constructor(chain: string, txid: string, verbose?: number); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): GetRawTransactionRequest; - toJson(): ApiPrimitiveJson; -} diff --git a/dist/api/classes/GetRawTransaction/GetRawTransactionRequest.js b/dist/api/classes/GetRawTransaction/GetRawTransactionRequest.js deleted file mode 100644 index e40fd8ab..00000000 --- a/dist/api/classes/GetRawTransaction/GetRawTransactionRequest.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetRawTransactionRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class GetRawTransactionRequest extends ApiRequest_1.ApiRequest { - constructor(chain, txid, verbose) { - super(chain, cmds_1.GET_RAW_TRANSACTION); - this.txid = txid; - this.verbose = verbose; - } - getParams() { - const params = [this.txid, this.verbose]; - return params.filter((x) => x != null); - } - static fromJson(object) { - return new GetRawTransactionRequest(object.chain, object.txid, object.verbose != null ? object.verbose : undefined); - } - toJson() { - return { - chain: this.chain, - txid: this.txid, - verbosity: this.verbose, - }; - } -} -exports.GetRawTransactionRequest = GetRawTransactionRequest; diff --git a/dist/api/classes/GetRawTransaction/GetRawTransactionResponse.d.ts b/dist/api/classes/GetRawTransaction/GetRawTransactionResponse.d.ts deleted file mode 100644 index e3ec6767..00000000 --- a/dist/api/classes/GetRawTransaction/GetRawTransactionResponse.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { RawTransaction } from "../../../transaction/RawTransaction"; -import { ApiResponse } from "../../ApiResponse"; -export declare class GetRawTransactionResponse extends ApiResponse { - result: string | RawTransaction; -} diff --git a/dist/api/classes/GetRawTransaction/GetRawTransactionResponse.js b/dist/api/classes/GetRawTransaction/GetRawTransactionResponse.js deleted file mode 100644 index 9e0e8b34..00000000 --- a/dist/api/classes/GetRawTransaction/GetRawTransactionResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetRawTransactionResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class GetRawTransactionResponse extends ApiResponse_1.ApiResponse { -} -exports.GetRawTransactionResponse = GetRawTransactionResponse; diff --git a/dist/api/classes/GetVdxfId/GetVdxfIdRequest.d.ts b/dist/api/classes/GetVdxfId/GetVdxfIdRequest.d.ts deleted file mode 100644 index 21ada7c2..00000000 --- a/dist/api/classes/GetVdxfId/GetVdxfIdRequest.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; -type InitialVdxfData = { - vdxfkey: string; - uint256: string; - indexnum: string; -}; -export declare class GetVdxfIdRequest extends ApiRequest { - vdxfuri: string; - initialdata?: InitialVdxfData; - constructor(chain: string, vdxfuri: string, initialdata?: InitialVdxfData); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): GetVdxfIdRequest; - toJson(): ApiPrimitiveJson; -} -export {}; diff --git a/dist/api/classes/GetVdxfId/GetVdxfIdRequest.js b/dist/api/classes/GetVdxfId/GetVdxfIdRequest.js deleted file mode 100644 index b903a454..00000000 --- a/dist/api/classes/GetVdxfId/GetVdxfIdRequest.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetVdxfIdRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class GetVdxfIdRequest extends ApiRequest_1.ApiRequest { - constructor(chain, vdxfuri, initialdata) { - super(chain, cmds_1.GET_VDXF_ID); - this.vdxfuri = vdxfuri; - this.initialdata = initialdata; - } - getParams() { - const params = [ - this.vdxfuri, - this.initialdata, - ]; - return params.filter((x) => x != null); - } - static fromJson(object) { - return new GetVdxfIdRequest(object.chain, object.vdxfuri, object.initialdata != null ? object.initialdata : undefined); - } - toJson() { - return { - chain: this.chain, - vdxfuri: this.vdxfuri, - initialdata: this.initialdata - }; - } -} -exports.GetVdxfIdRequest = GetVdxfIdRequest; diff --git a/dist/api/classes/GetVdxfId/GetVdxfIdResponse.d.ts b/dist/api/classes/GetVdxfId/GetVdxfIdResponse.d.ts deleted file mode 100644 index 76842eef..00000000 --- a/dist/api/classes/GetVdxfId/GetVdxfIdResponse.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ApiResponse } from "../../ApiResponse"; -export declare class GetVdxfIdResponse extends ApiResponse { - result: { - vdxfid: string; - hash160result: string; - qualifiedname: { - name: string; - parentid: string; - }; - bounddata?: { - vdxfkey: string; - uint256: string; - indexnum: string; - }; - }; -} diff --git a/dist/api/classes/GetVdxfId/GetVdxfIdResponse.js b/dist/api/classes/GetVdxfId/GetVdxfIdResponse.js deleted file mode 100644 index 6bde44d0..00000000 --- a/dist/api/classes/GetVdxfId/GetVdxfIdResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetVdxfIdResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class GetVdxfIdResponse extends ApiResponse_1.ApiResponse { -} -exports.GetVdxfIdResponse = GetVdxfIdResponse; diff --git a/dist/api/classes/ListCurrencies/ListCurrenciesRequest.d.ts b/dist/api/classes/ListCurrencies/ListCurrenciesRequest.d.ts deleted file mode 100644 index d74946b1..00000000 --- a/dist/api/classes/ListCurrencies/ListCurrenciesRequest.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; -type QueryObject = { - launchstate?: "prelaunch" | "launched" | "refund" | "complete"; - systemtype?: "local" | "imported" | "gateway" | "pbaas"; - fromsystem?: string; - converter?: Array; -}; -export declare class ListCurrenciesRequest extends ApiRequest { - query?: QueryObject; - startblock?: number; - endblock?: number; - constructor(chain: string, query?: QueryObject, startblock?: number, endblock?: number); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): ListCurrenciesRequest; - toJson(): ApiPrimitiveJson; -} -export {}; diff --git a/dist/api/classes/ListCurrencies/ListCurrenciesRequest.js b/dist/api/classes/ListCurrencies/ListCurrenciesRequest.js deleted file mode 100644 index df3c975e..00000000 --- a/dist/api/classes/ListCurrencies/ListCurrenciesRequest.js +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ListCurrenciesRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class ListCurrenciesRequest extends ApiRequest_1.ApiRequest { - constructor(chain, query, startblock, endblock) { - super(chain, cmds_1.LIST_CURRENCIES); - this.query = query; - this.startblock = startblock; - this.endblock = endblock; - } - getParams() { - if (this.query == null && this.startblock == null && this.endblock == null) - return []; - const params = [ - this.query == null ? {} : this.query, - this.startblock == null ? 0 : this.startblock, - this.endblock - ]; - return params.filter((x) => x != null); - } - static fromJson(object) { - return new ListCurrenciesRequest(object.chain, object.query, object.startblock, object.endblock); - } - toJson() { - return { - chain: this.chain, - query: this.query, - startblock: this.startblock, - endblock: this.endblock - }; - } -} -exports.ListCurrenciesRequest = ListCurrenciesRequest; diff --git a/dist/api/classes/ListCurrencies/ListCurrenciesResponse.d.ts b/dist/api/classes/ListCurrencies/ListCurrenciesResponse.d.ts deleted file mode 100644 index d3444bce..00000000 --- a/dist/api/classes/ListCurrencies/ListCurrenciesResponse.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { CurrencyDefinition } from "../../../currency/CurrencyDefinition"; -import { ApiResponse } from "../../ApiResponse"; -export declare class ListCurrenciesResponse extends ApiResponse { - result: Array<{ - currencydefinition: CurrencyDefinition; - bestheight?: number; - besttxid?: string; - besttxout?: number; - bestcurrencystate?: { - flags: number; - version: number; - currencyid: string; - reservecurrencies: Array<{ - currencyid: string; - weight: number; - reserves: number; - priceinreserve: number; - }>; - initialsupply: number; - emitted: number; - supply: number; - currencies: { - [key: string]: { - reservein: number; - primarycurrencyin: number; - reserveout: number; - lastconversionprice: number; - viaconversionprice: number; - fees: number; - conversionfees: number; - priorweights: number; - }; - }; - primarycurrencyfees: number; - primarycurrencyconversionfees: number; - primarycurrencyout: number; - preconvertedout: number; - }; - }>; -} diff --git a/dist/api/classes/ListCurrencies/ListCurrenciesResponse.js b/dist/api/classes/ListCurrencies/ListCurrenciesResponse.js deleted file mode 100644 index 03343c13..00000000 --- a/dist/api/classes/ListCurrencies/ListCurrenciesResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ListCurrenciesResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class ListCurrenciesResponse extends ApiResponse_1.ApiResponse { -} -exports.ListCurrenciesResponse = ListCurrenciesResponse; diff --git a/dist/api/classes/MakeOffer/MakeOfferRequest.d.ts b/dist/api/classes/MakeOffer/MakeOfferRequest.d.ts deleted file mode 100644 index fc616812..00000000 --- a/dist/api/classes/MakeOffer/MakeOfferRequest.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; -import { OfferForMaking } from "../../../offers/OfferForMaking"; -export declare class MakeOfferRequest extends ApiRequest { - fromaddress: string; - offer: OfferForMaking; - returntx?: boolean; - feeamount?: number; - constructor(chain: string, fromaddress: string, offer: OfferForMaking, returntx?: boolean, feeamount?: number); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): MakeOfferRequest; - toJson(): ApiPrimitiveJson; -} diff --git a/dist/api/classes/MakeOffer/MakeOfferRequest.js b/dist/api/classes/MakeOffer/MakeOfferRequest.js deleted file mode 100644 index 4aae32c2..00000000 --- a/dist/api/classes/MakeOffer/MakeOfferRequest.js +++ /dev/null @@ -1,36 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MakeOfferRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class MakeOfferRequest extends ApiRequest_1.ApiRequest { - constructor(chain, fromaddress, offer, returntx, feeamount) { - super(chain, cmds_1.MAKE_OFFER); - this.fromaddress = fromaddress; - this.offer = offer; - this.returntx = returntx; - this.feeamount = feeamount; - } - getParams() { - const params = [ - this.fromaddress, - this.offer, - this.returntx == null ? false : this.returntx, - this.feeamount, - ]; - return params.filter((x) => x != null); - } - static fromJson(object) { - return new MakeOfferRequest(object.chain, object.fromaddress, object.offer, object.returntx != null ? object.returntx : undefined, object.feeamount != null ? object.feeamount : undefined); - } - toJson() { - return { - chain: this.chain, - fromaddress: this.fromaddress, - offer: this.offer, - returntx: this.returntx, - feeamount: this.feeamount, - }; - } -} -exports.MakeOfferRequest = MakeOfferRequest; diff --git a/dist/api/classes/MakeOffer/MakeOfferResponse.d.ts b/dist/api/classes/MakeOffer/MakeOfferResponse.d.ts deleted file mode 100644 index 065c9a48..00000000 --- a/dist/api/classes/MakeOffer/MakeOfferResponse.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { ApiResponse } from "../../ApiResponse"; -export declare class MakeOfferResponse extends ApiResponse { - result: { - txid?: string; - hex?: string; - }; -} diff --git a/dist/api/classes/MakeOffer/MakeOfferResponse.js b/dist/api/classes/MakeOffer/MakeOfferResponse.js deleted file mode 100644 index a5056946..00000000 --- a/dist/api/classes/MakeOffer/MakeOfferResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MakeOfferResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class MakeOfferResponse extends ApiResponse_1.ApiResponse { -} -exports.MakeOfferResponse = MakeOfferResponse; diff --git a/dist/api/classes/SendCurrency/SendCurrencyRequest.d.ts b/dist/api/classes/SendCurrency/SendCurrencyRequest.d.ts deleted file mode 100644 index c1c602e1..00000000 --- a/dist/api/classes/SendCurrency/SendCurrencyRequest.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; -type output = { - currency: string; - amount: number; - convertto?: string; - exportto?: string; - exportid?: boolean; - exportcurrency?: boolean; - feecurrency?: string; - via?: string; - address: string; - refundto?: string; - memo?: string; - preconvert?: boolean; - burn?: boolean; - mintnew?: boolean; -}; -export declare class SendCurrencyRequest extends ApiRequest { - fromaddress: string; - outputs: Array; - minconf?: number; - feeamount?: number; - returntxtemplate?: boolean; - constructor(chain: string, fromaddress: string, outputs: Array, minconf?: number, feeamount?: number, returntxtemplate?: boolean); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): SendCurrencyRequest; - toJson(): ApiPrimitiveJson; -} -export {}; diff --git a/dist/api/classes/SendCurrency/SendCurrencyRequest.js b/dist/api/classes/SendCurrency/SendCurrencyRequest.js deleted file mode 100644 index 232fe1b0..00000000 --- a/dist/api/classes/SendCurrency/SendCurrencyRequest.js +++ /dev/null @@ -1,42 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SendCurrencyRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class SendCurrencyRequest extends ApiRequest_1.ApiRequest { - constructor(chain, fromaddress, outputs, minconf, feeamount, returntxtemplate) { - super(chain, cmds_1.SEND_CURRENCY); - this.fromaddress = fromaddress; - this.outputs = outputs; - this.minconf = minconf; - this.feeamount = feeamount; - this.returntxtemplate = returntxtemplate; - } - getParams() { - const params = [ - this.fromaddress, - this.outputs, - this.minconf, - this.feeamount, - this.returntxtemplate - ]; - if (this.returntxtemplate) - return params; - else - return params.filter((x) => x != null); - } - static fromJson(object) { - return new SendCurrencyRequest(object.chain, object.fromaddress, object.outputs != null ? object.utxos : undefined, object.minconf != null ? object.minconf : undefined, object.feeamount != null ? object.feeamount : undefined, object.returntxtemplate != null ? object.returntxtemplate : undefined); - } - toJson() { - return { - chain: this.chain, - fromaddress: this.fromaddress, - outputs: this.outputs, - minconf: this.minconf, - feeamount: this.feeamount, - returntxtemplate: this.returntxtemplate, - }; - } -} -exports.SendCurrencyRequest = SendCurrencyRequest; diff --git a/dist/api/classes/SendCurrency/SendCurrencyResponse.d.ts b/dist/api/classes/SendCurrency/SendCurrencyResponse.d.ts deleted file mode 100644 index 51c24de5..00000000 --- a/dist/api/classes/SendCurrency/SendCurrencyResponse.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { ApiResponse } from "../../ApiResponse"; -export declare class SendCurrencyResponse extends ApiResponse { - result: string | { - outputtotals: { - [currencyid: string]: number; - }; - feeamount: number; - hextx: string; - }; -} diff --git a/dist/api/classes/SendCurrency/SendCurrencyResponse.js b/dist/api/classes/SendCurrency/SendCurrencyResponse.js deleted file mode 100644 index 867a4388..00000000 --- a/dist/api/classes/SendCurrency/SendCurrencyResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SendCurrencyResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class SendCurrencyResponse extends ApiResponse_1.ApiResponse { -} -exports.SendCurrencyResponse = SendCurrencyResponse; diff --git a/dist/api/classes/SendRawTransaction/SendRawTransactionRequest.d.ts b/dist/api/classes/SendRawTransaction/SendRawTransactionRequest.d.ts deleted file mode 100644 index 1b95aa6a..00000000 --- a/dist/api/classes/SendRawTransaction/SendRawTransactionRequest.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; -export declare class SendRawTransactionRequest extends ApiRequest { - hexstring: string; - allowhighfees?: boolean; - constructor(chain: string, hexstring: string, allowhighfees?: boolean); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): SendRawTransactionRequest; - toJson(): ApiPrimitiveJson; -} diff --git a/dist/api/classes/SendRawTransaction/SendRawTransactionRequest.js b/dist/api/classes/SendRawTransaction/SendRawTransactionRequest.js deleted file mode 100644 index 86127a02..00000000 --- a/dist/api/classes/SendRawTransaction/SendRawTransactionRequest.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SendRawTransactionRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class SendRawTransactionRequest extends ApiRequest_1.ApiRequest { - constructor(chain, hexstring, allowhighfees) { - super(chain, cmds_1.SEND_RAW_TRANSACTION); - this.hexstring = hexstring; - this.allowhighfees = allowhighfees; - } - getParams() { - const params = [ - this.hexstring, - this.allowhighfees - ]; - return params.filter((x) => x != null); - } - static fromJson(object) { - return new SendRawTransactionRequest(object.chain, object.hexstring, object.allowhighfees != null ? object.allowhighfees : undefined); - } - toJson() { - return { - chain: this.chain, - hexstring: this.hexstring, - allowhighfees: this.allowhighfees - }; - } -} -exports.SendRawTransactionRequest = SendRawTransactionRequest; diff --git a/dist/api/classes/SendRawTransaction/SendRawTransactionResponse.d.ts b/dist/api/classes/SendRawTransaction/SendRawTransactionResponse.d.ts deleted file mode 100644 index 0bc1e440..00000000 --- a/dist/api/classes/SendRawTransaction/SendRawTransactionResponse.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { ApiResponse } from "../../ApiResponse"; -export declare class SendRawTransactionResponse extends ApiResponse { - result: string; -} diff --git a/dist/api/classes/SendRawTransaction/SendRawTransactionResponse.js b/dist/api/classes/SendRawTransaction/SendRawTransactionResponse.js deleted file mode 100644 index 0dd48150..00000000 --- a/dist/api/classes/SendRawTransaction/SendRawTransactionResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SendRawTransactionResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class SendRawTransactionResponse extends ApiResponse_1.ApiResponse { -} -exports.SendRawTransactionResponse = SendRawTransactionResponse; diff --git a/dist/api/classes/SignData/SignDataRequest.d.ts b/dist/api/classes/SignData/SignDataRequest.d.ts deleted file mode 100644 index 8ebdb7d6..00000000 --- a/dist/api/classes/SignData/SignDataRequest.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; -import { DataDescriptorInfo } from "../../../utils/types/DataDescriptor"; -import { SignDataParameters } from "../../../utils/types/SignData"; -export type SignDataArgs = { - address?: string; - filename?: string; - message?: string; - messagehex?: string; - messagebase64?: string; - datahash?: string; - vdxfdata?: string; - mmrdata?: Array; - mmrsalt?: Array; - mmrhashtype?: string; - priormmr?: Array; - vdxfkeys?: Array; - vdxfkeynames?: Array; - boundhashes?: Array; - hashtype?: string; - signature?: string; - encrypttoaddress?: string; - createmmr?: boolean; -}; -export declare class SignDataRequest extends ApiRequest { - data: SignDataArgs; - constructor(chain: string, signableItems: SignDataArgs); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): SignDataRequest; - toJson(): ApiPrimitiveJson; -} diff --git a/dist/api/classes/SignData/SignDataRequest.js b/dist/api/classes/SignData/SignDataRequest.js deleted file mode 100644 index cee3cd82..00000000 --- a/dist/api/classes/SignData/SignDataRequest.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SignDataRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class SignDataRequest extends ApiRequest_1.ApiRequest { - constructor(chain, signableItems) { - super(chain, cmds_1.SIGN_DATA); - this.data = signableItems; - } - getParams() { - const params = [this.data]; - return params.filter((x) => x != null); - } - static fromJson(object) { - return new SignDataRequest(object.chain, object.data); - } - toJson() { - return { - chain: this.chain, - data: this.data, - }; - } -} -exports.SignDataRequest = SignDataRequest; diff --git a/dist/api/classes/SignData/SignDataResponse.d.ts b/dist/api/classes/SignData/SignDataResponse.d.ts deleted file mode 100644 index df9019cd..00000000 --- a/dist/api/classes/SignData/SignDataResponse.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ApiResponse } from "../../ApiResponse"; -import { SignatureDataInfo } from "../../../utils/types/Signature"; -import { MmrDescriptorParameters } from "../../../utils/types/MmrDescriptor"; -import { DataDescriptorInfo } from "../../../utils/types/DataDescriptor"; -export declare class SignDataResponse extends ApiResponse { - result: { - mmrdescriptor_encrypted?: MmrDescriptorParameters; - mmrdescriptor?: MmrDescriptorParameters; - signature?: string; - signaturedata_encrypted?: DataDescriptorInfo; - signaturedata_ssk?: string; - signaturedata?: SignatureDataInfo; - system?: string; - systemid?: string; - hashtype?: string; - mmrhashtype?: string; - hash?: string; - identity?: string; - canonicalname?: string; - address?: string; - signatureheight?: number; - }; -} diff --git a/dist/api/classes/SignData/SignDataResponse.js b/dist/api/classes/SignData/SignDataResponse.js deleted file mode 100644 index fe83e952..00000000 --- a/dist/api/classes/SignData/SignDataResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SignDataResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class SignDataResponse extends ApiResponse_1.ApiResponse { -} -exports.SignDataResponse = SignDataResponse; diff --git a/dist/api/classes/SignMessage/SignMessageRequest.d.ts b/dist/api/classes/SignMessage/SignMessageRequest.d.ts deleted file mode 100644 index 22af4aba..00000000 --- a/dist/api/classes/SignMessage/SignMessageRequest.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; -export declare class SignMessageRequest extends ApiRequest { - tAddrOrIdentity: string; - message: string; - cursig?: string; - constructor(chain: string, tAddrOrIdentity: string, message: string, cursig?: string); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): SignMessageRequest; - toJson(): ApiPrimitiveJson; -} diff --git a/dist/api/classes/SignMessage/SignMessageRequest.js b/dist/api/classes/SignMessage/SignMessageRequest.js deleted file mode 100644 index 02ad2921..00000000 --- a/dist/api/classes/SignMessage/SignMessageRequest.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SignMessageRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class SignMessageRequest extends ApiRequest_1.ApiRequest { - constructor(chain, tAddrOrIdentity, message, cursig) { - super(chain, cmds_1.SIGN_MESSAGE); - this.tAddrOrIdentity = tAddrOrIdentity; - this.message = message; - this.cursig = cursig; - } - getParams() { - const params = [this.tAddrOrIdentity, this.message, this.cursig]; - return params.filter((x) => x != null); - } - static fromJson(object) { - return new SignMessageRequest(object.chain, object.tAddrOrIdentity, object.message, object.cursig != null ? object.cursig : undefined); - } - toJson() { - return { - chain: this.chain, - tAddrOrIdentity: this.tAddrOrIdentity, - message: this.message, - cursig: this.cursig - }; - } -} -exports.SignMessageRequest = SignMessageRequest; diff --git a/dist/api/classes/SignMessage/SignMessageResponse.d.ts b/dist/api/classes/SignMessage/SignMessageResponse.d.ts deleted file mode 100644 index 80441e35..00000000 --- a/dist/api/classes/SignMessage/SignMessageResponse.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { ApiResponse } from "../../ApiResponse"; -export declare class SignMessageResponse extends ApiResponse { - result: { - hash: string; - signature: string; - }; -} diff --git a/dist/api/classes/SignMessage/SignMessageResponse.js b/dist/api/classes/SignMessage/SignMessageResponse.js deleted file mode 100644 index 328f1c87..00000000 --- a/dist/api/classes/SignMessage/SignMessageResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SignMessageResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class SignMessageResponse extends ApiResponse_1.ApiResponse { -} -exports.SignMessageResponse = SignMessageResponse; diff --git a/dist/api/classes/SignRawTransaction/SignRawTransactionRequest.d.ts b/dist/api/classes/SignRawTransaction/SignRawTransactionRequest.d.ts deleted file mode 100644 index 969d94db..00000000 --- a/dist/api/classes/SignRawTransaction/SignRawTransactionRequest.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; -type PrevTx = { - txid: string; - vout: number; - scriptPubKey: string; - redeemScript: string; - amount: number; -}; -type SigHashType = "ALL" | "NONE" | "SINGLE" | "ALL|ANYONECANPAY" | "NONE|ANYONECANPAY" | "SINGLE|ANYONECANPAY"; -export declare class SignRawTransactionRequest extends ApiRequest { - hexstring: string; - prevtxs?: Array; - sighashtype?: SigHashType; - branchid?: string; - constructor(chain: string, hexstring: string, prevtxs?: Array, sighashtype?: SigHashType, branchid?: string); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): SignRawTransactionRequest; - toJson(): ApiPrimitiveJson; -} -export {}; diff --git a/dist/api/classes/SignRawTransaction/SignRawTransactionRequest.js b/dist/api/classes/SignRawTransaction/SignRawTransactionRequest.js deleted file mode 100644 index 63e3ebab..00000000 --- a/dist/api/classes/SignRawTransaction/SignRawTransactionRequest.js +++ /dev/null @@ -1,36 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SignRawTransactionRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class SignRawTransactionRequest extends ApiRequest_1.ApiRequest { - constructor(chain, hexstring, prevtxs, sighashtype, branchid) { - super(chain, cmds_1.SIGN_RAW_TRANSACTION); - this.hexstring = hexstring; - this.prevtxs = prevtxs; - this.sighashtype = sighashtype; - this.branchid = branchid; - } - getParams() { - const params = [ - this.hexstring, - this.prevtxs, - this.sighashtype, - this.branchid - ]; - return params.filter((x) => x != null); - } - static fromJson(object) { - return new SignRawTransactionRequest(object.chain, object.hexstring, object.prevtxs != null ? object.prevtxs : undefined, object.sighashtype != null ? object.sighashtype : undefined, object.branchid != null ? object.branchid : undefined); - } - toJson() { - return { - chain: this.chain, - hexstring: this.hexstring, - prevtxs: this.prevtxs, - sighashtype: this.sighashtype, - branchid: this.branchid, - }; - } -} -exports.SignRawTransactionRequest = SignRawTransactionRequest; diff --git a/dist/api/classes/SignRawTransaction/SignRawTransactionResponse.d.ts b/dist/api/classes/SignRawTransaction/SignRawTransactionResponse.d.ts deleted file mode 100644 index dc608573..00000000 --- a/dist/api/classes/SignRawTransaction/SignRawTransactionResponse.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ApiResponse } from "../../ApiResponse"; -export declare class SignRawTransactionResponse extends ApiResponse { - result: { - hex: string; - complete: boolean; - errors?: Array<{ - txid: string; - vout: number; - scriptSig: string; - sequence: number; - error: string; - }>; - }; -} diff --git a/dist/api/classes/SignRawTransaction/SignRawTransactionResponse.js b/dist/api/classes/SignRawTransaction/SignRawTransactionResponse.js deleted file mode 100644 index ab6f2cfe..00000000 --- a/dist/api/classes/SignRawTransaction/SignRawTransactionResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SignRawTransactionResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class SignRawTransactionResponse extends ApiResponse_1.ApiResponse { -} -exports.SignRawTransactionResponse = SignRawTransactionResponse; diff --git a/dist/api/classes/UpdateIdentity/UpdateIdentityRequest.d.ts b/dist/api/classes/UpdateIdentity/UpdateIdentityRequest.d.ts deleted file mode 100644 index bd7914b3..00000000 --- a/dist/api/classes/UpdateIdentity/UpdateIdentityRequest.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; -import { VerusCLIVerusIDJsonWithData } from "../../../vdxf/classes"; -export declare class UpdateIdentityRequest extends ApiRequest { - jsonidentity: VerusCLIVerusIDJsonWithData; - returntx?: boolean; - tokenupdate?: boolean; - feeoffer?: number; - sourceoffunds?: string; - constructor(chain: string, jsonidentity: VerusCLIVerusIDJsonWithData, returntx?: boolean, tokenupdate?: boolean, feeoffer?: number, sourceoffunds?: string); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): UpdateIdentityRequest; - toJson(): ApiPrimitiveJson; -} diff --git a/dist/api/classes/UpdateIdentity/UpdateIdentityRequest.js b/dist/api/classes/UpdateIdentity/UpdateIdentityRequest.js deleted file mode 100644 index d750e73a..00000000 --- a/dist/api/classes/UpdateIdentity/UpdateIdentityRequest.js +++ /dev/null @@ -1,42 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UpdateIdentityRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class UpdateIdentityRequest extends ApiRequest_1.ApiRequest { - constructor(chain, jsonidentity, returntx, tokenupdate, feeoffer, sourceoffunds) { - super(chain, cmds_1.UPDATE_IDENTITY); - this.jsonidentity = jsonidentity; - this.returntx = returntx; - this.tokenupdate = tokenupdate; - this.feeoffer = feeoffer; - this.sourceoffunds = sourceoffunds; - } - getParams() { - const params = [ - this.jsonidentity, - this.returntx, - this.tokenupdate, - this.feeoffer, - this.sourceoffunds - ]; - if (this.sourceoffunds) - return params; - else - return params.filter((x) => x != null); - } - static fromJson(object) { - return new UpdateIdentityRequest(object.chain, object.jsonidentity, object.returntx != null ? object.returntx : undefined, object.tokenupdate != null ? object.tokenupdate : undefined, object.feeoffer != null ? object.feeoffer : undefined, object.sourceoffunds != null ? object.sourceoffunds : undefined); - } - toJson() { - return { - chain: this.chain, - jsonidentity: this.jsonidentity, - returntx: this.returntx, - tokenupdate: this.tokenupdate, - feeoffer: this.feeoffer, - sourceoffunds: this.sourceoffunds, - }; - } -} -exports.UpdateIdentityRequest = UpdateIdentityRequest; diff --git a/dist/api/classes/UpdateIdentity/UpdateIdentityResponse.d.ts b/dist/api/classes/UpdateIdentity/UpdateIdentityResponse.d.ts deleted file mode 100644 index 69131667..00000000 --- a/dist/api/classes/UpdateIdentity/UpdateIdentityResponse.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { ApiResponse } from "../../ApiResponse"; -export declare class UpdateIdentityResponse extends ApiResponse { - result: string; -} diff --git a/dist/api/classes/UpdateIdentity/UpdateIdentityResponse.js b/dist/api/classes/UpdateIdentity/UpdateIdentityResponse.js deleted file mode 100644 index a659c268..00000000 --- a/dist/api/classes/UpdateIdentity/UpdateIdentityResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UpdateIdentityResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class UpdateIdentityResponse extends ApiResponse_1.ApiResponse { -} -exports.UpdateIdentityResponse = UpdateIdentityResponse; diff --git a/dist/api/classes/VerifyMessage/VerifyMessageRequest.d.ts b/dist/api/classes/VerifyMessage/VerifyMessageRequest.d.ts deleted file mode 100644 index 5badcc5f..00000000 --- a/dist/api/classes/VerifyMessage/VerifyMessageRequest.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; -export declare class VerifyMessageRequest extends ApiRequest { - tAddrOrIdentity: string; - signature: string; - message: string; - checklatest?: boolean; - constructor(chain: string, tAddrOrIdentity: string, signature: string, message: string, checklatest?: boolean); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): VerifyMessageRequest; - toJson(): ApiPrimitiveJson; -} diff --git a/dist/api/classes/VerifyMessage/VerifyMessageRequest.js b/dist/api/classes/VerifyMessage/VerifyMessageRequest.js deleted file mode 100644 index 5dffa8e0..00000000 --- a/dist/api/classes/VerifyMessage/VerifyMessageRequest.js +++ /dev/null @@ -1,31 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VerifyMessageRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class VerifyMessageRequest extends ApiRequest_1.ApiRequest { - constructor(chain, tAddrOrIdentity, signature, message, checklatest) { - super(chain, cmds_1.VERIFY_MESSAGE); - this.tAddrOrIdentity = tAddrOrIdentity; - this.message = message; - this.signature = signature; - this.checklatest = checklatest; - } - getParams() { - const params = [this.tAddrOrIdentity, this.signature, this.message, this.checklatest]; - return params.filter((x) => x != null); - } - static fromJson(object) { - return new VerifyMessageRequest(object.chain, object.tAddrOrIdentity, object.signature, object.message, object.checklatest != null ? object.checklatest : undefined); - } - toJson() { - return { - chain: this.chain, - tAddrOrIdentity: this.tAddrOrIdentity, - signature: this.signature, - message: this.message, - checklatest: this.checklatest, - }; - } -} -exports.VerifyMessageRequest = VerifyMessageRequest; diff --git a/dist/api/classes/VerifyMessage/VerifyMessageResponse.d.ts b/dist/api/classes/VerifyMessage/VerifyMessageResponse.d.ts deleted file mode 100644 index e61c366e..00000000 --- a/dist/api/classes/VerifyMessage/VerifyMessageResponse.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { ApiResponse } from "../../ApiResponse"; -export declare class VerifyMessageResponse extends ApiResponse { - result: boolean; -} diff --git a/dist/api/classes/VerifyMessage/VerifyMessageResponse.js b/dist/api/classes/VerifyMessage/VerifyMessageResponse.js deleted file mode 100644 index 8e489036..00000000 --- a/dist/api/classes/VerifyMessage/VerifyMessageResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VerifyMessageResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class VerifyMessageResponse extends ApiResponse_1.ApiResponse { -} -exports.VerifyMessageResponse = VerifyMessageResponse; diff --git a/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusRequest.d.ts b/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusRequest.d.ts deleted file mode 100644 index 18b8d605..00000000 --- a/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusRequest.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ApiRequest } from "../../ApiRequest"; -import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; -export declare class ZGetOperationStatusRequest extends ApiRequest { - operations?: Array; - constructor(chain: string, operations?: Array); - getParams(): RequestParams; - static fromJson(object: ApiPrimitiveJson): ZGetOperationStatusRequest; - toJson(): ApiPrimitiveJson; -} diff --git a/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusRequest.js b/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusRequest.js deleted file mode 100644 index 1256f4c4..00000000 --- a/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusRequest.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ZGetOperationStatusRequest = void 0; -const ApiRequest_1 = require("../../ApiRequest"); -const cmds_1 = require("../../../constants/cmds"); -class ZGetOperationStatusRequest extends ApiRequest_1.ApiRequest { - constructor(chain, operations) { - super(chain, cmds_1.Z_GET_OPERATION_STATUS); - this.operations = operations; - } - getParams() { - const params = [ - this.operations - ]; - return params.filter((x) => x != null); - } - static fromJson(object) { - return new ZGetOperationStatusRequest(object.chain, object.operations); - } - toJson() { - return { - chain: this.chain, - operations: this.operations, - }; - } -} -exports.ZGetOperationStatusRequest = ZGetOperationStatusRequest; diff --git a/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusResponse.d.ts b/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusResponse.d.ts deleted file mode 100644 index 680f6ab4..00000000 --- a/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusResponse.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { ApiResponse } from "../../ApiResponse"; -export type z_operation = { - id: string; - status: string; - method: string; - creation_time: number; - result?: { - [key: string]: any; - }; - error?: { - code: number; - message: string; - }; - execution_secs?: number; - params: Array<{ - [key: string]: any; - }>; -}; -export declare class ZGetOperationStatusResponse extends ApiResponse { - result: Array; -} diff --git a/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusResponse.js b/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusResponse.js deleted file mode 100644 index 5c30c49d..00000000 --- a/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusResponse.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ZGetOperationStatusResponse = void 0; -const ApiResponse_1 = require("../../ApiResponse"); -class ZGetOperationStatusResponse extends ApiResponse_1.ApiResponse { -} -exports.ZGetOperationStatusResponse = ZGetOperationStatusResponse; diff --git a/dist/api/classes/index.d.ts b/dist/api/classes/index.d.ts deleted file mode 100644 index a708a453..00000000 --- a/dist/api/classes/index.d.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { GetAddressBalanceRequest } from './GetAddressBalance/GetAddressBalanceRequest'; -import { GetAddressBalanceResponse } from './GetAddressBalance/GetAddressBalanceResponse'; -import { GetAddressDeltasRequest } from './GetAddressDeltas/GetAddressDeltasRequest'; -import { GetAddressDeltasResponse } from './GetAddressDeltas/GetAddressDeltasResponse'; -import { GetAddressUtxosRequest } from './GetAddressUtxos/GetAddressUtxosRequest'; -import { GetAddressUtxosResponse } from './GetAddressUtxos/GetAddressUtxosResponse'; -import { GetBlockRequest } from './GetBlock/GetBlockRequest'; -import { GetBlockResponse } from './GetBlock/GetBlockResponse'; -import { GetBlockCountRequest } from './GetBlockCount/GetBlockCountRequest'; -import { GetBlockCountResponse } from './GetBlockCount/GetBlockCountResponse'; -import { GetVdxfIdRequest } from './GetVdxfId/GetVdxfIdRequest'; -import { GetVdxfIdResponse } from './GetVdxfId/GetVdxfIdResponse'; -import { GetIdentityRequest } from './GetIdentity/GetIdentityRequest'; -import { GetIdentityContentRequest } from './GetIdentityContent/GetIdentityContentRequest'; -import { GetIdentityResponse } from './GetIdentity/GetIdentityResponse'; -import { GetCurrencyRequest } from './GetCurrency/GetCurrencyRequest'; -import { GetCurrencyResponse } from './GetCurrency/GetCurrencyResponse'; -import { GetInfoRequest } from './GetInfo/GetInfoRequest'; -import { GetInfoResponse } from './GetInfo/GetInfoResponse'; -import { GetOffersRequest } from './GetOffers/GetOffersRequest'; -import { GetOffersResponse } from './GetOffers/GetOffersResponse'; -import { GetRawTransactionRequest } from './GetRawTransaction/GetRawTransactionRequest'; -import { GetRawTransactionResponse } from './GetRawTransaction/GetRawTransactionResponse'; -import { MakeOfferRequest } from './MakeOffer/MakeOfferRequest'; -import { MakeOfferResponse } from './MakeOffer/MakeOfferResponse'; -import { SendRawTransactionRequest } from './SendRawTransaction/SendRawTransactionRequest'; -import { SendRawTransactionResponse } from './SendRawTransaction/SendRawTransactionResponse'; -import { SignMessageRequest } from './SignMessage/SignMessageRequest'; -import { SignMessageResponse } from './SignMessage/SignMessageResponse'; -import { SignDataRequest } from './SignData/SignDataRequest'; -import { SignDataResponse } from './SignData/SignDataResponse'; -import { VerifyMessageRequest } from './VerifyMessage/VerifyMessageRequest'; -import { VerifyMessageResponse } from './VerifyMessage/VerifyMessageResponse'; -import { GetAddressMempoolResponse } from './GetAddressMempool/GetAddressMempoolResponse'; -import { GetAddressMempoolRequest } from './GetAddressMempool/GetAddressMempoolRequest'; -import { SendCurrencyRequest } from './SendCurrency/SendCurrencyRequest'; -import { SendCurrencyResponse } from './SendCurrency/SendCurrencyResponse'; -import { UpdateIdentityRequest } from './UpdateIdentity/UpdateIdentityRequest'; -import { UpdateIdentityResponse } from './UpdateIdentity/UpdateIdentityResponse'; -import { FundRawTransactionRequest } from './FundRawTransaction/FundRawTransactionRequest'; -import { FundRawTransactionResponse } from './FundRawTransaction/FundRawTransactionResponse'; -import { SignRawTransactionRequest } from './SignRawTransaction/SignRawTransactionRequest'; -import { SignRawTransactionResponse } from './SignRawTransaction/SignRawTransactionResponse'; -import { GetCurrencyConvertersRequest } from './GetCurrencyConverters/GetCurrencyConvertersRequest'; -import { GetCurrencyConvertersResponse } from './GetCurrencyConverters/GetCurrencyConvertersResponse'; -import { ListCurrenciesRequest } from './ListCurrencies/ListCurrenciesRequest'; -import { ListCurrenciesResponse } from './ListCurrencies/ListCurrenciesResponse'; -import { EstimateConversionRequest } from './EstimateConversion/EstimateConversionRequest'; -import { EstimateConversionResponse } from './EstimateConversion/EstimateConversionResponse'; -import { ZGetOperationStatusRequest } from './ZGetOperationStatus/ZGetOperationStatusRequest'; -import { ZGetOperationStatusResponse } from './ZGetOperationStatus/ZGetOperationStatusResponse'; -export { GetAddressBalanceRequest, GetAddressBalanceResponse, GetAddressDeltasRequest, GetAddressDeltasResponse, GetAddressMempoolRequest, GetAddressMempoolResponse, GetAddressUtxosRequest, GetAddressUtxosResponse, GetBlockRequest, GetBlockResponse, GetBlockCountRequest, GetBlockCountResponse, GetVdxfIdRequest, GetVdxfIdResponse, GetIdentityRequest, GetIdentityContentRequest, GetIdentityResponse, GetCurrencyRequest, GetCurrencyResponse, GetOffersRequest, GetOffersResponse, GetRawTransactionRequest, GetRawTransactionResponse, MakeOfferRequest, MakeOfferResponse, SendRawTransactionRequest, SendRawTransactionResponse, GetInfoRequest, GetInfoResponse, VerifyMessageRequest, VerifyMessageResponse, SignMessageRequest, SignMessageResponse, SignDataRequest, SignDataResponse, SendCurrencyRequest, SendCurrencyResponse, UpdateIdentityRequest, UpdateIdentityResponse, FundRawTransactionRequest, FundRawTransactionResponse, GetCurrencyConvertersRequest, GetCurrencyConvertersResponse, ListCurrenciesRequest, ListCurrenciesResponse, EstimateConversionRequest, EstimateConversionResponse, ZGetOperationStatusRequest, ZGetOperationStatusResponse, SignRawTransactionRequest, SignRawTransactionResponse }; -export type RpcRequest = typeof MakeOfferRequest | typeof GetOffersRequest | typeof GetAddressBalanceRequest | typeof GetAddressDeltasRequest | typeof GetAddressMempoolRequest | typeof GetAddressUtxosRequest | typeof GetBlockRequest | typeof GetBlockCountRequest | typeof GetVdxfIdRequest | typeof GetInfoRequest | typeof GetIdentityRequest | typeof GetIdentityContentRequest | typeof GetCurrencyRequest | typeof SendRawTransactionRequest | typeof GetRawTransactionRequest | typeof VerifyMessageRequest | typeof SignMessageRequest | typeof SignDataRequest | typeof SendCurrencyRequest | typeof UpdateIdentityRequest | typeof FundRawTransactionRequest | typeof GetCurrencyConvertersRequest | typeof ListCurrenciesRequest | typeof EstimateConversionRequest | typeof ZGetOperationStatusRequest | typeof SignRawTransactionRequest; -export type RpcResponse = typeof MakeOfferResponse | typeof GetOffersResponse | typeof GetAddressBalanceResponse | typeof GetAddressDeltasResponse | typeof GetAddressMempoolResponse | typeof GetAddressUtxosResponse | typeof GetBlockResponse | typeof GetBlockCountResponse | typeof GetVdxfIdResponse | typeof GetInfoResponse | typeof GetIdentityResponse | typeof GetCurrencyResponse | typeof SendRawTransactionResponse | typeof GetRawTransactionResponse | typeof VerifyMessageResponse | typeof SignMessageResponse | typeof SignDataResponse | typeof SendCurrencyResponse | typeof UpdateIdentityResponse | typeof FundRawTransactionResponse | typeof GetCurrencyConvertersResponse | typeof ListCurrenciesResponse | typeof EstimateConversionResponse | typeof ZGetOperationStatusResponse | typeof SignRawTransactionResponse; diff --git a/dist/api/classes/index.js b/dist/api/classes/index.js deleted file mode 100644 index 1e50e69e..00000000 --- a/dist/api/classes/index.js +++ /dev/null @@ -1,106 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SignRawTransactionRequest = exports.ZGetOperationStatusResponse = exports.ZGetOperationStatusRequest = exports.EstimateConversionResponse = exports.EstimateConversionRequest = exports.ListCurrenciesResponse = exports.ListCurrenciesRequest = exports.GetCurrencyConvertersResponse = exports.GetCurrencyConvertersRequest = exports.FundRawTransactionResponse = exports.FundRawTransactionRequest = exports.UpdateIdentityResponse = exports.UpdateIdentityRequest = exports.SendCurrencyResponse = exports.SendCurrencyRequest = exports.SignDataResponse = exports.SignDataRequest = exports.SignMessageResponse = exports.SignMessageRequest = exports.VerifyMessageResponse = exports.VerifyMessageRequest = exports.GetInfoResponse = exports.GetInfoRequest = exports.SendRawTransactionResponse = exports.SendRawTransactionRequest = exports.MakeOfferResponse = exports.MakeOfferRequest = exports.GetRawTransactionResponse = exports.GetRawTransactionRequest = exports.GetOffersResponse = exports.GetOffersRequest = exports.GetCurrencyResponse = exports.GetCurrencyRequest = exports.GetIdentityResponse = exports.GetIdentityContentRequest = exports.GetIdentityRequest = exports.GetVdxfIdResponse = exports.GetVdxfIdRequest = exports.GetBlockCountResponse = exports.GetBlockCountRequest = exports.GetBlockResponse = exports.GetBlockRequest = exports.GetAddressUtxosResponse = exports.GetAddressUtxosRequest = exports.GetAddressMempoolResponse = exports.GetAddressMempoolRequest = exports.GetAddressDeltasResponse = exports.GetAddressDeltasRequest = exports.GetAddressBalanceResponse = exports.GetAddressBalanceRequest = void 0; -exports.SignRawTransactionResponse = void 0; -const GetAddressBalanceRequest_1 = require("./GetAddressBalance/GetAddressBalanceRequest"); -Object.defineProperty(exports, "GetAddressBalanceRequest", { enumerable: true, get: function () { return GetAddressBalanceRequest_1.GetAddressBalanceRequest; } }); -const GetAddressBalanceResponse_1 = require("./GetAddressBalance/GetAddressBalanceResponse"); -Object.defineProperty(exports, "GetAddressBalanceResponse", { enumerable: true, get: function () { return GetAddressBalanceResponse_1.GetAddressBalanceResponse; } }); -const GetAddressDeltasRequest_1 = require("./GetAddressDeltas/GetAddressDeltasRequest"); -Object.defineProperty(exports, "GetAddressDeltasRequest", { enumerable: true, get: function () { return GetAddressDeltasRequest_1.GetAddressDeltasRequest; } }); -const GetAddressDeltasResponse_1 = require("./GetAddressDeltas/GetAddressDeltasResponse"); -Object.defineProperty(exports, "GetAddressDeltasResponse", { enumerable: true, get: function () { return GetAddressDeltasResponse_1.GetAddressDeltasResponse; } }); -const GetAddressUtxosRequest_1 = require("./GetAddressUtxos/GetAddressUtxosRequest"); -Object.defineProperty(exports, "GetAddressUtxosRequest", { enumerable: true, get: function () { return GetAddressUtxosRequest_1.GetAddressUtxosRequest; } }); -const GetAddressUtxosResponse_1 = require("./GetAddressUtxos/GetAddressUtxosResponse"); -Object.defineProperty(exports, "GetAddressUtxosResponse", { enumerable: true, get: function () { return GetAddressUtxosResponse_1.GetAddressUtxosResponse; } }); -const GetBlockRequest_1 = require("./GetBlock/GetBlockRequest"); -Object.defineProperty(exports, "GetBlockRequest", { enumerable: true, get: function () { return GetBlockRequest_1.GetBlockRequest; } }); -const GetBlockResponse_1 = require("./GetBlock/GetBlockResponse"); -Object.defineProperty(exports, "GetBlockResponse", { enumerable: true, get: function () { return GetBlockResponse_1.GetBlockResponse; } }); -const GetBlockCountRequest_1 = require("./GetBlockCount/GetBlockCountRequest"); -Object.defineProperty(exports, "GetBlockCountRequest", { enumerable: true, get: function () { return GetBlockCountRequest_1.GetBlockCountRequest; } }); -const GetBlockCountResponse_1 = require("./GetBlockCount/GetBlockCountResponse"); -Object.defineProperty(exports, "GetBlockCountResponse", { enumerable: true, get: function () { return GetBlockCountResponse_1.GetBlockCountResponse; } }); -const GetVdxfIdRequest_1 = require("./GetVdxfId/GetVdxfIdRequest"); -Object.defineProperty(exports, "GetVdxfIdRequest", { enumerable: true, get: function () { return GetVdxfIdRequest_1.GetVdxfIdRequest; } }); -const GetVdxfIdResponse_1 = require("./GetVdxfId/GetVdxfIdResponse"); -Object.defineProperty(exports, "GetVdxfIdResponse", { enumerable: true, get: function () { return GetVdxfIdResponse_1.GetVdxfIdResponse; } }); -const GetIdentityRequest_1 = require("./GetIdentity/GetIdentityRequest"); -Object.defineProperty(exports, "GetIdentityRequest", { enumerable: true, get: function () { return GetIdentityRequest_1.GetIdentityRequest; } }); -const GetIdentityContentRequest_1 = require("./GetIdentityContent/GetIdentityContentRequest"); -Object.defineProperty(exports, "GetIdentityContentRequest", { enumerable: true, get: function () { return GetIdentityContentRequest_1.GetIdentityContentRequest; } }); -const GetIdentityResponse_1 = require("./GetIdentity/GetIdentityResponse"); -Object.defineProperty(exports, "GetIdentityResponse", { enumerable: true, get: function () { return GetIdentityResponse_1.GetIdentityResponse; } }); -const GetCurrencyRequest_1 = require("./GetCurrency/GetCurrencyRequest"); -Object.defineProperty(exports, "GetCurrencyRequest", { enumerable: true, get: function () { return GetCurrencyRequest_1.GetCurrencyRequest; } }); -const GetCurrencyResponse_1 = require("./GetCurrency/GetCurrencyResponse"); -Object.defineProperty(exports, "GetCurrencyResponse", { enumerable: true, get: function () { return GetCurrencyResponse_1.GetCurrencyResponse; } }); -const GetInfoRequest_1 = require("./GetInfo/GetInfoRequest"); -Object.defineProperty(exports, "GetInfoRequest", { enumerable: true, get: function () { return GetInfoRequest_1.GetInfoRequest; } }); -const GetInfoResponse_1 = require("./GetInfo/GetInfoResponse"); -Object.defineProperty(exports, "GetInfoResponse", { enumerable: true, get: function () { return GetInfoResponse_1.GetInfoResponse; } }); -const GetOffersRequest_1 = require("./GetOffers/GetOffersRequest"); -Object.defineProperty(exports, "GetOffersRequest", { enumerable: true, get: function () { return GetOffersRequest_1.GetOffersRequest; } }); -const GetOffersResponse_1 = require("./GetOffers/GetOffersResponse"); -Object.defineProperty(exports, "GetOffersResponse", { enumerable: true, get: function () { return GetOffersResponse_1.GetOffersResponse; } }); -const GetRawTransactionRequest_1 = require("./GetRawTransaction/GetRawTransactionRequest"); -Object.defineProperty(exports, "GetRawTransactionRequest", { enumerable: true, get: function () { return GetRawTransactionRequest_1.GetRawTransactionRequest; } }); -const GetRawTransactionResponse_1 = require("./GetRawTransaction/GetRawTransactionResponse"); -Object.defineProperty(exports, "GetRawTransactionResponse", { enumerable: true, get: function () { return GetRawTransactionResponse_1.GetRawTransactionResponse; } }); -const MakeOfferRequest_1 = require("./MakeOffer/MakeOfferRequest"); -Object.defineProperty(exports, "MakeOfferRequest", { enumerable: true, get: function () { return MakeOfferRequest_1.MakeOfferRequest; } }); -const MakeOfferResponse_1 = require("./MakeOffer/MakeOfferResponse"); -Object.defineProperty(exports, "MakeOfferResponse", { enumerable: true, get: function () { return MakeOfferResponse_1.MakeOfferResponse; } }); -const SendRawTransactionRequest_1 = require("./SendRawTransaction/SendRawTransactionRequest"); -Object.defineProperty(exports, "SendRawTransactionRequest", { enumerable: true, get: function () { return SendRawTransactionRequest_1.SendRawTransactionRequest; } }); -const SendRawTransactionResponse_1 = require("./SendRawTransaction/SendRawTransactionResponse"); -Object.defineProperty(exports, "SendRawTransactionResponse", { enumerable: true, get: function () { return SendRawTransactionResponse_1.SendRawTransactionResponse; } }); -const SignMessageRequest_1 = require("./SignMessage/SignMessageRequest"); -Object.defineProperty(exports, "SignMessageRequest", { enumerable: true, get: function () { return SignMessageRequest_1.SignMessageRequest; } }); -const SignMessageResponse_1 = require("./SignMessage/SignMessageResponse"); -Object.defineProperty(exports, "SignMessageResponse", { enumerable: true, get: function () { return SignMessageResponse_1.SignMessageResponse; } }); -const SignDataRequest_1 = require("./SignData/SignDataRequest"); -Object.defineProperty(exports, "SignDataRequest", { enumerable: true, get: function () { return SignDataRequest_1.SignDataRequest; } }); -const SignDataResponse_1 = require("./SignData/SignDataResponse"); -Object.defineProperty(exports, "SignDataResponse", { enumerable: true, get: function () { return SignDataResponse_1.SignDataResponse; } }); -const VerifyMessageRequest_1 = require("./VerifyMessage/VerifyMessageRequest"); -Object.defineProperty(exports, "VerifyMessageRequest", { enumerable: true, get: function () { return VerifyMessageRequest_1.VerifyMessageRequest; } }); -const VerifyMessageResponse_1 = require("./VerifyMessage/VerifyMessageResponse"); -Object.defineProperty(exports, "VerifyMessageResponse", { enumerable: true, get: function () { return VerifyMessageResponse_1.VerifyMessageResponse; } }); -const GetAddressMempoolResponse_1 = require("./GetAddressMempool/GetAddressMempoolResponse"); -Object.defineProperty(exports, "GetAddressMempoolResponse", { enumerable: true, get: function () { return GetAddressMempoolResponse_1.GetAddressMempoolResponse; } }); -const GetAddressMempoolRequest_1 = require("./GetAddressMempool/GetAddressMempoolRequest"); -Object.defineProperty(exports, "GetAddressMempoolRequest", { enumerable: true, get: function () { return GetAddressMempoolRequest_1.GetAddressMempoolRequest; } }); -const SendCurrencyRequest_1 = require("./SendCurrency/SendCurrencyRequest"); -Object.defineProperty(exports, "SendCurrencyRequest", { enumerable: true, get: function () { return SendCurrencyRequest_1.SendCurrencyRequest; } }); -const SendCurrencyResponse_1 = require("./SendCurrency/SendCurrencyResponse"); -Object.defineProperty(exports, "SendCurrencyResponse", { enumerable: true, get: function () { return SendCurrencyResponse_1.SendCurrencyResponse; } }); -const UpdateIdentityRequest_1 = require("./UpdateIdentity/UpdateIdentityRequest"); -Object.defineProperty(exports, "UpdateIdentityRequest", { enumerable: true, get: function () { return UpdateIdentityRequest_1.UpdateIdentityRequest; } }); -const UpdateIdentityResponse_1 = require("./UpdateIdentity/UpdateIdentityResponse"); -Object.defineProperty(exports, "UpdateIdentityResponse", { enumerable: true, get: function () { return UpdateIdentityResponse_1.UpdateIdentityResponse; } }); -const FundRawTransactionRequest_1 = require("./FundRawTransaction/FundRawTransactionRequest"); -Object.defineProperty(exports, "FundRawTransactionRequest", { enumerable: true, get: function () { return FundRawTransactionRequest_1.FundRawTransactionRequest; } }); -const FundRawTransactionResponse_1 = require("./FundRawTransaction/FundRawTransactionResponse"); -Object.defineProperty(exports, "FundRawTransactionResponse", { enumerable: true, get: function () { return FundRawTransactionResponse_1.FundRawTransactionResponse; } }); -const SignRawTransactionRequest_1 = require("./SignRawTransaction/SignRawTransactionRequest"); -Object.defineProperty(exports, "SignRawTransactionRequest", { enumerable: true, get: function () { return SignRawTransactionRequest_1.SignRawTransactionRequest; } }); -const SignRawTransactionResponse_1 = require("./SignRawTransaction/SignRawTransactionResponse"); -Object.defineProperty(exports, "SignRawTransactionResponse", { enumerable: true, get: function () { return SignRawTransactionResponse_1.SignRawTransactionResponse; } }); -const GetCurrencyConvertersRequest_1 = require("./GetCurrencyConverters/GetCurrencyConvertersRequest"); -Object.defineProperty(exports, "GetCurrencyConvertersRequest", { enumerable: true, get: function () { return GetCurrencyConvertersRequest_1.GetCurrencyConvertersRequest; } }); -const GetCurrencyConvertersResponse_1 = require("./GetCurrencyConverters/GetCurrencyConvertersResponse"); -Object.defineProperty(exports, "GetCurrencyConvertersResponse", { enumerable: true, get: function () { return GetCurrencyConvertersResponse_1.GetCurrencyConvertersResponse; } }); -const ListCurrenciesRequest_1 = require("./ListCurrencies/ListCurrenciesRequest"); -Object.defineProperty(exports, "ListCurrenciesRequest", { enumerable: true, get: function () { return ListCurrenciesRequest_1.ListCurrenciesRequest; } }); -const ListCurrenciesResponse_1 = require("./ListCurrencies/ListCurrenciesResponse"); -Object.defineProperty(exports, "ListCurrenciesResponse", { enumerable: true, get: function () { return ListCurrenciesResponse_1.ListCurrenciesResponse; } }); -const EstimateConversionRequest_1 = require("./EstimateConversion/EstimateConversionRequest"); -Object.defineProperty(exports, "EstimateConversionRequest", { enumerable: true, get: function () { return EstimateConversionRequest_1.EstimateConversionRequest; } }); -const EstimateConversionResponse_1 = require("./EstimateConversion/EstimateConversionResponse"); -Object.defineProperty(exports, "EstimateConversionResponse", { enumerable: true, get: function () { return EstimateConversionResponse_1.EstimateConversionResponse; } }); -const ZGetOperationStatusRequest_1 = require("./ZGetOperationStatus/ZGetOperationStatusRequest"); -Object.defineProperty(exports, "ZGetOperationStatusRequest", { enumerable: true, get: function () { return ZGetOperationStatusRequest_1.ZGetOperationStatusRequest; } }); -const ZGetOperationStatusResponse_1 = require("./ZGetOperationStatus/ZGetOperationStatusResponse"); -Object.defineProperty(exports, "ZGetOperationStatusResponse", { enumerable: true, get: function () { return ZGetOperationStatusResponse_1.ZGetOperationStatusResponse; } }); diff --git a/dist/block/BlockInfo.d.ts b/dist/block/BlockInfo.d.ts deleted file mode 100644 index f46bf867..00000000 --- a/dist/block/BlockInfo.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -export interface BlockInfo { - hash: string; - validationtype: string; - confirmations: number; - size: number; - height: number; - version: number; - merkleroot: string; - segid: number; - finalsaplingroot: string; - tx: Array; - time: number; - nonce: string; - solution: string; - bits: string; - difficulty: number; - chainwork: string; - chainstake: string; - anchor: string; - blocktype: string; - valuePools: Array<{ - id: string; - monitored: boolean; - chainValue: number; - chainValueZat: number; - valueDelta: number; - valueDeltaZat: number; - }>; - previousblockhash: string; - nextblockhash: string; - proofroot: { - version: number; - type: number; - systemid: string; - height: number; - stateroot: string; - blockhash: string; - power: string; - }; -} diff --git a/dist/block/BlockInfo.js b/dist/block/BlockInfo.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/block/BlockInfo.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/constants/cmds.d.ts b/dist/constants/cmds.d.ts deleted file mode 100644 index 1da76544..00000000 --- a/dist/constants/cmds.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -export declare const MAKE_OFFER = "makeoffer"; -export declare const GET_OFFERS = "getoffers"; -export declare const GET_IDENTITY = "getidentity"; -export declare const GET_IDENTITY_CONTENT = "getidentitycontent"; -export declare const GET_CURRENCY = "getcurrency"; -export declare const GET_ADDRESS_BALANCE = "getaddressbalance"; -export declare const GET_INFO = "getinfo"; -export declare const GET_BLOCK = "getblock"; -export declare const GET_BLOCK_COUNT = "getblockcount"; -export declare const GET_VDXF_ID = "getvdxfid"; -export declare const GET_RAW_TRANSACTION = "getrawtransaction"; -export declare const GET_ADDRESS_DELTAS = "getaddressdeltas"; -export declare const GET_ADDRESS_MEMPOOL = "getaddressmempool"; -export declare const SEND_RAW_TRANSACTION = "sendrawtransaction"; -export declare const GET_ADDRESS_UTXOS = "getaddressutxos"; -export declare const SIGN_DATA = "signdata"; -export declare const SIGN_MESSAGE = "signmessage"; -export declare const VERIFY_MESSAGE = "verifymessage"; -export declare const FUND_RAW_TRANSACTION = "fundrawtransaction"; -export declare const SEND_CURRENCY = "sendcurrency"; -export declare const UPDATE_IDENTITY = "updateidentity"; -export declare const GET_CURRENCY_CONVERTERS = "getcurrencyconverters"; -export declare const LIST_CURRENCIES = "listcurrencies"; -export declare const ESTIMATE_CONVERSION = "estimateconversion"; -export declare const Z_GET_OPERATION_STATUS = "z_getoperationstatus"; -export declare const SIGN_RAW_TRANSACTION = "signrawtransaction"; diff --git a/dist/constants/cmds.js b/dist/constants/cmds.js deleted file mode 100644 index b3706b67..00000000 --- a/dist/constants/cmds.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SIGN_RAW_TRANSACTION = exports.Z_GET_OPERATION_STATUS = exports.ESTIMATE_CONVERSION = exports.LIST_CURRENCIES = exports.GET_CURRENCY_CONVERTERS = exports.UPDATE_IDENTITY = exports.SEND_CURRENCY = exports.FUND_RAW_TRANSACTION = exports.VERIFY_MESSAGE = exports.SIGN_MESSAGE = exports.SIGN_DATA = exports.GET_ADDRESS_UTXOS = exports.SEND_RAW_TRANSACTION = exports.GET_ADDRESS_MEMPOOL = exports.GET_ADDRESS_DELTAS = exports.GET_RAW_TRANSACTION = exports.GET_VDXF_ID = exports.GET_BLOCK_COUNT = exports.GET_BLOCK = exports.GET_INFO = exports.GET_ADDRESS_BALANCE = exports.GET_CURRENCY = exports.GET_IDENTITY_CONTENT = exports.GET_IDENTITY = exports.GET_OFFERS = exports.MAKE_OFFER = void 0; -exports.MAKE_OFFER = 'makeoffer'; -exports.GET_OFFERS = 'getoffers'; -exports.GET_IDENTITY = 'getidentity'; -exports.GET_IDENTITY_CONTENT = 'getidentitycontent'; -exports.GET_CURRENCY = 'getcurrency'; -exports.GET_ADDRESS_BALANCE = 'getaddressbalance'; -exports.GET_INFO = 'getinfo'; -exports.GET_BLOCK = 'getblock'; -exports.GET_BLOCK_COUNT = 'getblockcount'; -exports.GET_VDXF_ID = 'getvdxfid'; -exports.GET_RAW_TRANSACTION = 'getrawtransaction'; -exports.GET_ADDRESS_DELTAS = 'getaddressdeltas'; -exports.GET_ADDRESS_MEMPOOL = 'getaddressmempool'; -exports.SEND_RAW_TRANSACTION = 'sendrawtransaction'; -exports.GET_ADDRESS_UTXOS = 'getaddressutxos'; -exports.SIGN_DATA = 'signdata'; -exports.SIGN_MESSAGE = 'signmessage'; -exports.VERIFY_MESSAGE = 'verifymessage'; -exports.FUND_RAW_TRANSACTION = 'fundrawtransaction'; -exports.SEND_CURRENCY = 'sendcurrency'; -exports.UPDATE_IDENTITY = 'updateidentity'; -exports.GET_CURRENCY_CONVERTERS = 'getcurrencyconverters'; -exports.LIST_CURRENCIES = 'listcurrencies'; -exports.ESTIMATE_CONVERSION = 'estimateconversion'; -exports.Z_GET_OPERATION_STATUS = 'z_getoperationstatus'; -exports.SIGN_RAW_TRANSACTION = 'signrawtransaction'; diff --git a/dist/constants/deeplink.d.ts b/dist/constants/deeplink.d.ts deleted file mode 100644 index 9de6f765..00000000 --- a/dist/constants/deeplink.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare const DEEPLINK_PROTOCOL_URL_STRING = "verus"; -export declare const DEEPLINK_PROTOCOL_URL_CURRENT_VERSION: import("bn.js"); diff --git a/dist/constants/deeplink.js b/dist/constants/deeplink.js deleted file mode 100644 index 757276fc..00000000 --- a/dist/constants/deeplink.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DEEPLINK_PROTOCOL_URL_CURRENT_VERSION = exports.DEEPLINK_PROTOCOL_URL_STRING = void 0; -const bn_js_1 = require("bn.js"); -exports.DEEPLINK_PROTOCOL_URL_STRING = "verus"; -exports.DEEPLINK_PROTOCOL_URL_CURRENT_VERSION = new bn_js_1.BN(1, 10); diff --git a/dist/constants/ordinals/ordinals.d.ts b/dist/constants/ordinals/ordinals.d.ts deleted file mode 100644 index 5d930738..00000000 --- a/dist/constants/ordinals/ordinals.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -export declare const VDXF_OBJECT_RESERVED_BYTE_I_ADDR: import("bn.js"); -export declare const VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING: import("bn.js"); -export declare const VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY: import("bn.js"); -export declare const VDXF_ORDINAL_DATA_DESCRIPTOR: import("bn.js"); -export declare const VDXF_ORDINAL_VERUSPAY_INVOICE: import("bn.js"); -export declare const VDXF_ORDINAL_AUTHENTICATION_REQUEST: import("bn.js"); -export declare const VDXF_ORDINAL_AUTHENTICATION_RESPONSE: import("bn.js"); -export declare const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST: import("bn.js"); -export declare const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE: import("bn.js"); -export declare const VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS: import("bn.js"); -export declare const VDXF_ORDINAL_APP_ENCRYPTION_REQUEST: import("bn.js"); -export declare const VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE: import("bn.js"); -export declare const VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET: import("bn.js"); -export declare const VDXF_ORDINAL_USER_DATA_REQUEST: import("bn.js"); -export declare const VDXF_ORDINAL_DATA_RESPONSE: import("bn.js"); diff --git a/dist/constants/ordinals/ordinals.js b/dist/constants/ordinals/ordinals.js deleted file mode 100644 index 377533af..00000000 --- a/dist/constants/ordinals/ordinals.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VDXF_ORDINAL_DATA_RESPONSE = exports.VDXF_ORDINAL_USER_DATA_REQUEST = exports.VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET = exports.VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE = exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = exports.VDXF_ORDINAL_AUTHENTICATION_RESPONSE = exports.VDXF_ORDINAL_AUTHENTICATION_REQUEST = exports.VDXF_ORDINAL_VERUSPAY_INVOICE = exports.VDXF_ORDINAL_DATA_DESCRIPTOR = exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = void 0; -const bn_js_1 = require("bn.js"); -exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = new bn_js_1.BN(102, 10); -exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new bn_js_1.BN(103, 10); -exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = new bn_js_1.BN(104, 10); -exports.VDXF_ORDINAL_DATA_DESCRIPTOR = new bn_js_1.BN(0, 10); -exports.VDXF_ORDINAL_VERUSPAY_INVOICE = new bn_js_1.BN(1, 10); -exports.VDXF_ORDINAL_AUTHENTICATION_REQUEST = new bn_js_1.BN(2, 10); -exports.VDXF_ORDINAL_AUTHENTICATION_RESPONSE = new bn_js_1.BN(3, 10); -exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new bn_js_1.BN(4, 10); -exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new bn_js_1.BN(5, 10); -exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new bn_js_1.BN(6, 10); -exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = new bn_js_1.BN(8, 10); -exports.VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE = new bn_js_1.BN(9, 10); -exports.VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET = new bn_js_1.BN(10, 10); -exports.VDXF_ORDINAL_USER_DATA_REQUEST = new bn_js_1.BN(12, 10); -exports.VDXF_ORDINAL_DATA_RESPONSE = new bn_js_1.BN(13, 10); diff --git a/dist/constants/ordinals/register.d.ts b/dist/constants/ordinals/register.d.ts deleted file mode 100644 index d3677b75..00000000 --- a/dist/constants/ordinals/register.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare const registerOrdinals: () => void; diff --git a/dist/constants/ordinals/register.js b/dist/constants/ordinals/register.js deleted file mode 100644 index 956d7bb6..00000000 --- a/dist/constants/ordinals/register.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.registerOrdinals = void 0; -const vdxf_1 = require("../../vdxf"); -const AppEncryptionRequestOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject"); -const DataDescriptorOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject"); -const DataPacketResponseOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject"); -const UserDataRequestOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject"); -const UserSpecificDataPacketDetailsOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject"); -const IdentityUpdateRequestOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject"); -const IdentityUpdateResponseOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject"); -const AuthenticationRequestOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject"); -const AuthenticationResponseOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject"); -const OrdinalVdxfObjectOrdinalMap_1 = require("../../vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap"); -const ProvisionIdentityDetailsOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject"); -const VerusPayInvoiceOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject"); -const ordinals_1 = require("./ordinals"); -const AppEncryptionResponseOrdinalVdxfObject_1 = require("../../vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject"); -const registerOrdinals = () => { - OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), vdxf_1.DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVdxfObject_1.DataDescriptorOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), vdxf_1.VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid, VerusPayInvoiceOrdinalVdxfObject_1.VerusPayInvoiceOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_AUTHENTICATION_REQUEST.toNumber(), vdxf_1.AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY.vdxfid, AuthenticationRequestOrdinalVdxfObject_1.AuthenticationRequestOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_AUTHENTICATION_RESPONSE.toNumber(), vdxf_1.AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY.vdxfid, AuthenticationResponseOrdinalVdxfObject_1.AuthenticationResponseOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), vdxf_1.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVdxfObject_1.IdentityUpdateRequestOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), vdxf_1.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVdxfObject_1.IdentityUpdateResponseOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), vdxf_1.PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVdxfObject_1.ProvisionIdentityDetailsOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST.toNumber(), vdxf_1.APP_ENCRYPTION_REQUEST_VDXF_KEY.vdxfid, AppEncryptionRequestOrdinalVdxfObject_1.AppEncryptionRequestOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_DATA_RESPONSE.toNumber(), vdxf_1.DATA_RESPONSE_VDXF_KEY.vdxfid, DataPacketResponseOrdinalVdxfObject_1.DataPacketResponseOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_USER_DATA_REQUEST.toNumber(), vdxf_1.USER_DATA_REQUEST_VDXF_KEY.vdxfid, UserDataRequestOrdinalVdxfObject_1.UserDataRequestOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET.toNumber(), vdxf_1.USER_SPECIFIC_DATA_PACKET_VDXF_KEY.vdxfid, UserSpecificDataPacketDetailsOrdinalVdxfObject_1.UserSpecificDataPacketDetailsOrdinalVdxfObject, false); - OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE.toNumber(), vdxf_1.APP_ENCRYPTION_RESPONSE_VDXF_KEY.vdxfid, AppEncryptionResponseOrdinalVdxfObject_1.AppEncryptionResponseOrdinalVdxfObject, false); -}; -exports.registerOrdinals = registerOrdinals; diff --git a/dist/constants/ordinals/types.d.ts b/dist/constants/ordinals/types.d.ts deleted file mode 100644 index 0f33fef8..00000000 --- a/dist/constants/ordinals/types.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; -import { AppEncryptionRequestDetails, AppEncryptionRequestJson, IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, AuthenticationRequestDetails, AuthenticationRequestDetailsJson, AuthenticationResponseDetails, AuthenticationResponseDetailsJson, ProvisionIdentityDetails, ProvisionIdentityDetailsJson, UserDataRequestDetails, UserDataRequestJson, UserSpecificDataPacketDetails, UserSpecificDataPacketDetailsJson, VerusPayInvoiceDetails, AppEncryptionResponseDetails, AppEncryptionResponseDetailsJson } from "../../vdxf/classes"; -import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; -import { DataPacketResponse, DataResponseJson } from "../../vdxf/classes/datapacket/DataPacketResponse"; -export type OrdinalVdxfObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails | AuthenticationRequestDetails | AuthenticationResponseDetails | ProvisionIdentityDetails | AppEncryptionRequestDetails | DataPacketResponse | UserDataRequestDetails | UserSpecificDataPacketDetails | AppEncryptionResponseDetails; -export type OrdinalVdxfObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson | AuthenticationRequestDetailsJson | AuthenticationResponseDetailsJson | ProvisionIdentityDetailsJson | AppEncryptionRequestJson | DataResponseJson | UserDataRequestJson | UserSpecificDataPacketDetailsJson | AppEncryptionResponseDetailsJson; diff --git a/dist/constants/ordinals/types.js b/dist/constants/ordinals/types.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/constants/ordinals/types.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/constants/pbaas.d.ts b/dist/constants/pbaas.d.ts deleted file mode 100644 index 456ac926..00000000 --- a/dist/constants/pbaas.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -export declare const DATA_TYPE_UNKNOWN: import("bn.js"); -export declare const DATA_TYPE_MMRDATA: import("bn.js"); -export declare const DATA_TYPE_FILENAME: import("bn.js"); -export declare const DATA_TYPE_MESSAGE: import("bn.js"); -export declare const DATA_TYPE_VDXFDATA: import("bn.js"); -export declare const DATA_TYPE_HEX: import("bn.js"); -export declare const DATA_TYPE_BASE64: import("bn.js"); -export declare const DATA_TYPE_DATAHASH: import("bn.js"); -export declare const DATA_TYPE_RAWSTRINGDATA: import("bn.js"); -export declare const HASH_TYPE_INVALID: import("bn.js"); -export declare const HASH_TYPE_BLAKE2B: import("bn.js"); -export declare const HASH_TYPE_BLAKE2BMMR2: import("bn.js"); -export declare const HASH_TYPE_KECCAK256: import("bn.js"); -export declare const HASH_TYPE_SHA256D: import("bn.js"); -export declare const HASH_TYPE_SHA256: import("bn.js"); -export declare const HASH_TYPE_SHA256_NAME = "sha256"; -export declare const HASH_TYPE_SHA256D_NAME = "sha256D"; -export declare const HASH_TYPE_BLAKE2B_NAME = "blake2b"; -export declare const HASH_TYPE_KECCAK256_NAME = "keccak256"; -export declare const DEFAULT_HASH_TYPE: import("bn.js"); -export declare const DEFAULT_HASH_TYPE_MMR: import("bn.js"); -export declare const HASH_NAMES: string[]; -export type AllowedHashes = (typeof HASH_NAMES)[number]; -export declare const UINT_256_LENGTH = 32; -export declare const DEFAULT_VERUS_CHAINID = "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV"; -export declare const TESTNET_VERUS_CHAINID = "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"; -export declare const DEFAULT_VERUS_CHAINNAME = "VRSC"; -export declare const KOMODO_ASSETCHAIN_MAXLEN = 65; -export declare const NULL_I_ADDR = "i3UXS5QPRQGNRDDqVnyWTnmFCTHDbzmsYk"; diff --git a/dist/constants/pbaas.js b/dist/constants/pbaas.js deleted file mode 100644 index 89594331..00000000 --- a/dist/constants/pbaas.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.NULL_I_ADDR = exports.KOMODO_ASSETCHAIN_MAXLEN = exports.DEFAULT_VERUS_CHAINNAME = exports.TESTNET_VERUS_CHAINID = exports.DEFAULT_VERUS_CHAINID = exports.UINT_256_LENGTH = exports.HASH_NAMES = exports.DEFAULT_HASH_TYPE_MMR = exports.DEFAULT_HASH_TYPE = exports.HASH_TYPE_KECCAK256_NAME = exports.HASH_TYPE_BLAKE2B_NAME = exports.HASH_TYPE_SHA256D_NAME = exports.HASH_TYPE_SHA256_NAME = exports.HASH_TYPE_SHA256 = exports.HASH_TYPE_SHA256D = exports.HASH_TYPE_KECCAK256 = exports.HASH_TYPE_BLAKE2BMMR2 = exports.HASH_TYPE_BLAKE2B = exports.HASH_TYPE_INVALID = exports.DATA_TYPE_RAWSTRINGDATA = exports.DATA_TYPE_DATAHASH = exports.DATA_TYPE_BASE64 = exports.DATA_TYPE_HEX = exports.DATA_TYPE_VDXFDATA = exports.DATA_TYPE_MESSAGE = exports.DATA_TYPE_FILENAME = exports.DATA_TYPE_MMRDATA = exports.DATA_TYPE_UNKNOWN = void 0; -const bn_js_1 = require("bn.js"); -exports.DATA_TYPE_UNKNOWN = new bn_js_1.BN("0", 10); -exports.DATA_TYPE_MMRDATA = new bn_js_1.BN("1", 10); -exports.DATA_TYPE_FILENAME = new bn_js_1.BN("2", 10); -exports.DATA_TYPE_MESSAGE = new bn_js_1.BN("3", 10); -exports.DATA_TYPE_VDXFDATA = new bn_js_1.BN("4", 10); -exports.DATA_TYPE_HEX = new bn_js_1.BN("5", 10); -exports.DATA_TYPE_BASE64 = new bn_js_1.BN("6", 10); -exports.DATA_TYPE_DATAHASH = new bn_js_1.BN("7", 10); -exports.DATA_TYPE_RAWSTRINGDATA = new bn_js_1.BN("8", 10); -exports.HASH_TYPE_INVALID = new bn_js_1.BN(0, 10); -exports.HASH_TYPE_BLAKE2B = new bn_js_1.BN(1, 10); -exports.HASH_TYPE_BLAKE2BMMR2 = new bn_js_1.BN(2, 10); -exports.HASH_TYPE_KECCAK256 = new bn_js_1.BN(3, 10); -exports.HASH_TYPE_SHA256D = new bn_js_1.BN(4, 10); -exports.HASH_TYPE_SHA256 = new bn_js_1.BN(5, 10); -exports.HASH_TYPE_SHA256_NAME = "sha256"; -exports.HASH_TYPE_SHA256D_NAME = "sha256D"; -exports.HASH_TYPE_BLAKE2B_NAME = "blake2b"; -exports.HASH_TYPE_KECCAK256_NAME = "keccak256"; -exports.DEFAULT_HASH_TYPE = exports.HASH_TYPE_SHA256; -exports.DEFAULT_HASH_TYPE_MMR = exports.HASH_TYPE_BLAKE2B; -exports.HASH_NAMES = [exports.HASH_TYPE_SHA256_NAME, exports.HASH_TYPE_SHA256D_NAME, exports.HASH_TYPE_BLAKE2B_NAME, exports.HASH_TYPE_KECCAK256_NAME]; -exports.UINT_256_LENGTH = 32; -exports.DEFAULT_VERUS_CHAINID = "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV"; -exports.TESTNET_VERUS_CHAINID = "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"; -exports.DEFAULT_VERUS_CHAINNAME = "VRSC"; -exports.KOMODO_ASSETCHAIN_MAXLEN = 65; -exports.NULL_I_ADDR = "i3UXS5QPRQGNRDDqVnyWTnmFCTHDbzmsYk"; diff --git a/dist/constants/vdxf.d.ts b/dist/constants/vdxf.d.ts deleted file mode 100644 index 583e1c8b..00000000 --- a/dist/constants/vdxf.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export declare const VDXF_OBJECT_DEFAULT_VERSION: import("bn.js"); -export declare const HASH160_BYTE_LENGTH = 20; -export declare const HASH256_BYTE_LENGTH = 32; -export declare const I_ADDR_VERSION = 102; -export declare const R_ADDR_VERSION = 60; -export declare const X_ADDR_VERSION = 137; -export declare const NULL_ADDRESS = "i3UXS5QPRQGNRDDqVnyWTnmFCTHDbzmsYk"; -export declare const VERUS_DATA_SIGNATURE_PREFIX: Buffer; diff --git a/dist/constants/vdxf.js b/dist/constants/vdxf.js deleted file mode 100644 index 841f4172..00000000 --- a/dist/constants/vdxf.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VERUS_DATA_SIGNATURE_PREFIX = exports.NULL_ADDRESS = exports.X_ADDR_VERSION = exports.R_ADDR_VERSION = exports.I_ADDR_VERSION = exports.HASH256_BYTE_LENGTH = exports.HASH160_BYTE_LENGTH = exports.VDXF_OBJECT_DEFAULT_VERSION = void 0; -const bn_js_1 = require("bn.js"); -const bufferutils_1 = require("../utils/bufferutils"); -exports.VDXF_OBJECT_DEFAULT_VERSION = new bn_js_1.BN(1, 10); -exports.HASH160_BYTE_LENGTH = 20; -exports.HASH256_BYTE_LENGTH = 32; -exports.I_ADDR_VERSION = 102; -exports.R_ADDR_VERSION = 60; -exports.X_ADDR_VERSION = 137; -exports.NULL_ADDRESS = "i3UXS5QPRQGNRDDqVnyWTnmFCTHDbzmsYk"; -const VERUS_DATA_SIGNATURE_PREFIX_STRING = "Verus signed data:\n"; -var bufferWriter = new bufferutils_1.default.BufferWriter(Buffer.alloc(VERUS_DATA_SIGNATURE_PREFIX_STRING.length + 1)); -bufferWriter.writeVarSlice(Buffer.from(VERUS_DATA_SIGNATURE_PREFIX_STRING, "utf-8")); -exports.VERUS_DATA_SIGNATURE_PREFIX = bufferWriter.buffer; diff --git a/dist/constants/vdxf/veruspay.d.ts b/dist/constants/vdxf/veruspay.d.ts deleted file mode 100644 index 23206769..00000000 --- a/dist/constants/vdxf/veruspay.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export declare const VERUSPAY_VERSION_3: import("bn.js"); -export declare const VERUSPAY_VERSION_4: import("bn.js"); -export declare const VERUSPAY_VERSION_CURRENT: import("bn.js"); -export declare const VERUSPAY_VERSION_FIRSTVALID: import("bn.js"); -export declare const VERUSPAY_VERSION_LASTVALID: import("bn.js"); -export declare const VERUSPAY_VERSION_SIGNED: import("bn.js"); -export declare const VERUSPAY_VERSION_MASK: import("bn.js"); diff --git a/dist/constants/vdxf/veruspay.js b/dist/constants/vdxf/veruspay.js deleted file mode 100644 index 229947cd..00000000 --- a/dist/constants/vdxf/veruspay.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VERUSPAY_VERSION_MASK = exports.VERUSPAY_VERSION_SIGNED = exports.VERUSPAY_VERSION_LASTVALID = exports.VERUSPAY_VERSION_FIRSTVALID = exports.VERUSPAY_VERSION_CURRENT = exports.VERUSPAY_VERSION_4 = exports.VERUSPAY_VERSION_3 = void 0; -const bn_js_1 = require("bn.js"); -exports.VERUSPAY_VERSION_3 = new bn_js_1.BN(3, 10); -exports.VERUSPAY_VERSION_4 = new bn_js_1.BN(4, 10); -exports.VERUSPAY_VERSION_CURRENT = new bn_js_1.BN(4, 10); -exports.VERUSPAY_VERSION_FIRSTVALID = new bn_js_1.BN(3, 10); -exports.VERUSPAY_VERSION_LASTVALID = new bn_js_1.BN(4, 10); -exports.VERUSPAY_VERSION_SIGNED = new bn_js_1.BN('80000000', 16); -exports.VERUSPAY_VERSION_MASK = exports.VERUSPAY_VERSION_SIGNED; diff --git a/dist/currency/CurrencyDefinition.d.ts b/dist/currency/CurrencyDefinition.d.ts deleted file mode 100644 index 71322d2f..00000000 --- a/dist/currency/CurrencyDefinition.d.ts +++ /dev/null @@ -1,93 +0,0 @@ -export type CurrencyDefinition = { - version: number; - options: number; - name: string; - currencyid: string; - parent: string; - systemid: string; - maxpreconversion?: Array; - minpreconversion?: Array; - notarizationprotocol: number; - proofprotocol: number; - launchsystemid: string; - startblock: number; - endblock: number; - currencies: Array; - weights: Array; - conversions: Array; - initialsupply: number; - prelaunchcarveout: number; - initialcontributions: Array; - idregistrationfees: number; - idreferrallevels: number; - idimportfees: number; - currencyidhex: string; - fullyqualifiedname: string; - currencynames: { - [key: string]: string; - }; - definitiontxid: string; - definitiontxout: number; - bestheight: number; - lastconfirmedheight: number; - bestcurrencystate?: { - flags: number; - version: number; - currencyid: string; - reservecurrencies: Array<{ - currencyid: string; - weight: number; - reserves: number; - priceinreserve: number; - }>; - initialsupply: number; - emitted: number; - supply: number; - currencies: { - [key: string]: { - reservein: number; - primarycurrencyin: number; - reserveout: number; - lastconversionprice: number; - viaconversionprice: number; - fees: number; - conversionfees: number; - priorweights: number; - }; - }; - primarycurrencyfees: number; - primarycurrencyconversionfees: number; - primarycurrencyout: number; - preconvertedout: number; - }; - lastconfirmedcurrencystate?: { - flags: number; - version: number; - currencyid: string; - reservecurrencies: Array<{ - currencyid: string; - weight: number; - reserves: number; - priceinreserve: number; - }>; - initialsupply: number; - emitted: number; - supply: number; - currencies: { - [key: string]: { - reservein: number; - primarycurrencyin: number; - reserveout: number; - lastconversionprice: number; - viaconversionprice: number; - fees: number; - conversionfees: number; - priorweights: number; - }; - }; - primarycurrencyfees: number; - primarycurrencyconversionfees: number; - primarycurrencyout: number; - preconvertedout: number; - }; -}; diff --git a/dist/currency/CurrencyDefinition.js b/dist/currency/CurrencyDefinition.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/currency/CurrencyDefinition.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/identity/IdentityDefinition.d.ts b/dist/identity/IdentityDefinition.d.ts deleted file mode 100644 index 3b8d6845..00000000 --- a/dist/identity/IdentityDefinition.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -export type IdentityDefinitionContentMultiMapPrimitive = number | string; -export type IdentityDefinitionContentMultiMapValue = { - [key: string]: IdentityDefinitionContentMultiMapPrimitive | IdentityDefinitionContentMultiMapValue; -}; -export interface IdentityDefinition { - version?: number; - flags?: number; - primaryaddresses: Array; - minimumsignatures: number; - name: string; - identityaddress?: string; - parent: string; - systemid?: string; - contentmap?: { - [key: string]: string; - }; - contentmultimap?: IdentityDefinitionContentMultiMapValue | Array; - revocationauthority?: string; - recoveryauthority?: string; - timelock?: number; -} diff --git a/dist/identity/IdentityDefinition.js b/dist/identity/IdentityDefinition.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/identity/IdentityDefinition.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index beeabf1d..00000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -export * from './api/classes/index'; -export * from './api/ApiRequest'; -export * from './api/ApiResponse'; -export * from './api/ApiPrimitive'; -export * from './vdxf/classes/index'; -export * from './vdxf/index'; -export * from './vdxf/parser'; -export * from './utils/address'; -export * from './utils/bufferutils'; -export * from './utils/varuint'; -export * from './utils/ops'; -export * from './utils/evals'; -export * from './utils/script'; -export * from './utils/cccustom'; -export * from './pbaas/index'; -export * from './pbaas/PartialIdentity'; -export * from './pbaas/PartialMMRData'; -export * from './pbaas/PartialSignData'; -export * from './constants/pbaas'; -export * from './constants/ordinals/register'; -export * from './constants/ordinals/ordinals'; -export * from './constants/ordinals/types'; -export * from './constants/vdxf/veruspay'; -export * from './identity/IdentityDefinition'; -export * from './currency/CurrencyDefinition'; -export * from './vdxf/classes'; -export { BN as BigNumber } from 'bn.js'; diff --git a/dist/index.js b/dist/index.js deleted file mode 100644 index a5b55c80..00000000 --- a/dist/index.js +++ /dev/null @@ -1,45 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BigNumber = void 0; -__exportStar(require("./api/classes/index"), exports); -__exportStar(require("./api/ApiRequest"), exports); -__exportStar(require("./api/ApiResponse"), exports); -__exportStar(require("./api/ApiPrimitive"), exports); -__exportStar(require("./vdxf/classes/index"), exports); -__exportStar(require("./vdxf/index"), exports); -__exportStar(require("./vdxf/parser"), exports); -__exportStar(require("./utils/address"), exports); -__exportStar(require("./utils/bufferutils"), exports); -__exportStar(require("./utils/varuint"), exports); -__exportStar(require("./utils/ops"), exports); -__exportStar(require("./utils/evals"), exports); -__exportStar(require("./utils/script"), exports); -__exportStar(require("./utils/cccustom"), exports); -__exportStar(require("./pbaas/index"), exports); -__exportStar(require("./pbaas/PartialIdentity"), exports); -__exportStar(require("./pbaas/PartialMMRData"), exports); -__exportStar(require("./pbaas/PartialSignData"), exports); -__exportStar(require("./constants/pbaas"), exports); -__exportStar(require("./constants/ordinals/register"), exports); -__exportStar(require("./constants/ordinals/ordinals"), exports); -__exportStar(require("./constants/ordinals/types"), exports); -__exportStar(require("./constants/vdxf/veruspay"), exports); -__exportStar(require("./identity/IdentityDefinition"), exports); -__exportStar(require("./currency/CurrencyDefinition"), exports); -__exportStar(require("./vdxf/classes"), exports); -var bn_js_1 = require("bn.js"); -Object.defineProperty(exports, "BigNumber", { enumerable: true, get: function () { return bn_js_1.BN; } }); diff --git a/dist/offers/CurrencyOffering.d.ts b/dist/offers/CurrencyOffering.d.ts deleted file mode 100644 index fc920f97..00000000 --- a/dist/offers/CurrencyOffering.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface CurrencyOffering { - currency: string; - amount: number; -} diff --git a/dist/offers/CurrencyOffering.js b/dist/offers/CurrencyOffering.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/offers/CurrencyOffering.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/offers/CurrencyReceiving.d.ts b/dist/offers/CurrencyReceiving.d.ts deleted file mode 100644 index 65702ccf..00000000 --- a/dist/offers/CurrencyReceiving.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface CurrencyReceiving { - address: string; - currency: string; - amount: number; -} diff --git a/dist/offers/CurrencyReceiving.js b/dist/offers/CurrencyReceiving.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/offers/CurrencyReceiving.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/offers/IdentityOffering.d.ts b/dist/offers/IdentityOffering.d.ts deleted file mode 100644 index f18def09..00000000 --- a/dist/offers/IdentityOffering.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface IdentityOffering { - identity: string; -} diff --git a/dist/offers/IdentityOffering.js b/dist/offers/IdentityOffering.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/offers/IdentityOffering.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/offers/OfferForMaking.d.ts b/dist/offers/OfferForMaking.d.ts deleted file mode 100644 index 73dc8cf2..00000000 --- a/dist/offers/OfferForMaking.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { IdentityDefinition } from "../identity/IdentityDefinition"; -import { CurrencyOffering } from "./CurrencyOffering"; -import { CurrencyReceiving } from "./CurrencyReceiving"; -import { IdentityOffering } from "./IdentityOffering"; -export interface OfferForMaking { - changeaddress: string; - offer: IdentityOffering | CurrencyOffering; - for: IdentityDefinition | CurrencyReceiving; - expiryheight?: number; -} diff --git a/dist/offers/OfferForMaking.js b/dist/offers/OfferForMaking.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/offers/OfferForMaking.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/offers/OfferList.d.ts b/dist/offers/OfferList.d.ts deleted file mode 100644 index 9823f933..00000000 --- a/dist/offers/OfferList.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -export type ListedCurrencyOffering = { - [key: string]: number; -}; -export interface ListedIdentityOffering { - name: string; - identityid: string; - systemid: string; - original: number; -} -export type ListedValueOffering = ListedCurrencyOffering | ListedIdentityOffering; -export interface ListedOfferTerms { - offer: ListedValueOffering; - accept: ListedValueOffering; - blockexpiry: number; - txid: number; -} -export interface ListedOffer { - currencyid: string; - price: number; - offer: ListedOfferTerms; -} -export type OfferList = { - [key: string]: Array; -}; diff --git a/dist/offers/OfferList.js b/dist/offers/OfferList.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/offers/OfferList.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/pbaas/ContentMultiMap.d.ts b/dist/pbaas/ContentMultiMap.d.ts deleted file mode 100644 index 148aa564..00000000 --- a/dist/pbaas/ContentMultiMap.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { VdxfUniValue, VdxfUniValueJson } from './VdxfUniValue'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -export type ContentMultiMapPrimitive = VdxfUniValue | Buffer; -export type ContentMultiMapPrimitiveJson = VdxfUniValueJson | string; -export type ContentMultiMapJsonValue = ContentMultiMapPrimitiveJson | Array; -export type ContentMultiMapJson = { - [key: string]: ContentMultiMapJsonValue; -}; -export type KvValueArrayItem = Buffer | ContentMultiMapJson; -export declare function isKvValueArrayItemVdxfUniValueJson(x: ContentMultiMapJsonValue): x is VdxfUniValueJson; -export type KvContent = Map>; -export declare class ContentMultiMap implements SerializableEntity { - kv_content: KvContent; - constructor(data?: { - kv_content: KvContent; - }); - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number, parseVdxfObjects?: boolean): number; - static fromJson(obj: { - [key: string]: ContentMultiMapJsonValue; - }): ContentMultiMap; - toJson(): ContentMultiMapJson; -} diff --git a/dist/pbaas/ContentMultiMap.js b/dist/pbaas/ContentMultiMap.js deleted file mode 100644 index 4efc93fe..00000000 --- a/dist/pbaas/ContentMultiMap.js +++ /dev/null @@ -1,161 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ContentMultiMap = void 0; -exports.isKvValueArrayItemVdxfUniValueJson = isKvValueArrayItemVdxfUniValueJson; -const varuint_1 = require("../utils/varuint"); -const bufferutils_1 = require("../utils/bufferutils"); -const address_1 = require("../utils/address"); -const vdxf_1 = require("../constants/vdxf"); -const VdxfUniValue_1 = require("./VdxfUniValue"); -const string_1 = require("../utils/string"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -function isKvValueArrayItemVdxfUniValueJson(x) { - return x != null && typeof x === 'object' && !Array.isArray(x) && Object.keys(x).every((key) => { - const val = x[key]; - try { - const { version, hash } = (0, address_1.fromBase58Check)(key); - return version === vdxf_1.I_ADDR_VERSION && (Buffer.isBuffer(val) || typeof val === 'string'); - } - catch (e) { - return false; - } - }); -} -class ContentMultiMap { - constructor(data) { - if (data === null || data === void 0 ? void 0 : data.kv_content) - this.kv_content = data.kv_content; - } - getByteLength() { - let length = 0; - length += varuint_1.default.encodingLength(this.kv_content.size); - for (const [key, value] of this.kv_content.entries()) { - length += (0, address_1.fromBase58Check)(key).hash.length; - if (Array.isArray(value)) { - const valueArr = value; - length += varuint_1.default.encodingLength(valueArr.length); - for (const n of value) { - if (n instanceof VdxfUniValue_1.VdxfUniValue) { - const nCMMNOLength = n.getByteLength(); - length += varuint_1.default.encodingLength(nCMMNOLength); - length += nCMMNOLength; - } - else if (Buffer.isBuffer(n)) { - const nBuf = n; - length += varuint_1.default.encodingLength(nBuf.length); - length += nBuf.length; - } - else - throw new Error("Unknown ContentMultiMap data, can't calculate ByteLength"); - } - } - else - throw new Error("Unknown ContentMultiMap data, can't calculate ByteLength"); - } - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeCompactSize(this.kv_content.size); - for (const [key, value] of this.kv_content.entries()) { - writer.writeSlice((0, address_1.fromBase58Check)(key).hash); - if (Array.isArray(value)) { - writer.writeCompactSize(value.length); - for (const n of value) { - if (n instanceof VdxfUniValue_1.VdxfUniValue) { - const nCMMNOBuf = n.toBuffer(); - writer.writeVarSlice(nCMMNOBuf); - } - else if (Buffer.isBuffer(n)) { - const nBuf = n; - writer.writeVarSlice(nBuf); - } - else - throw new Error("Unknown ContentMultiMap data, can't toBuffer"); - } - } - else - throw new Error("Unknown ContentMultiMap data, can't toBuffer"); - } - return writer.buffer; - } - fromBuffer(buffer, offset = 0, parseVdxfObjects = false) { - const reader = new BufferReader(buffer, offset); - const contentMultiMapSize = reader.readCompactSize(); - this.kv_content = new Map(); - for (var i = 0; i < contentMultiMapSize; i++) { - const contentMapKey = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - const vector = []; - const count = reader.readCompactSize(); - for (let j = 0; j < count; j++) { - if (parseVdxfObjects) { - const unival = new VdxfUniValue_1.VdxfUniValue(); - unival.fromBuffer(reader.readVarSlice(), 0); - vector.push(unival); - } - else { - vector.push(reader.readVarSlice()); - } - } - this.kv_content.set(contentMapKey, vector); - } - return reader.offset; - } - static fromJson(obj) { - const content = new Map(); - for (const key in obj) { - const keybytes = (0, address_1.fromBase58Check)(key).hash; - const value = obj[key]; - if (keybytes && value != null) { - if (Array.isArray(value)) { - const items = []; - for (const x of value) { - if (typeof x === 'string') { - items.push(Buffer.from(x, 'hex')); - } - else if (typeof x === 'object' && x != null) { - const uniVal = VdxfUniValue_1.VdxfUniValue.fromJson(x); - if (uniVal.toBuffer().length > 0) { - items.push(uniVal); - } - } - } - content.set(key, items); - } - else if (typeof value === 'string' && (0, string_1.isHexString)(value)) { - content.set(key, [Buffer.from(value, 'hex')]); - } - else if (isKvValueArrayItemVdxfUniValueJson(value)) { - content.set(key, [VdxfUniValue_1.VdxfUniValue.fromJson(value)]); - } - else { - throw new Error("Invalid data in multimap"); - } - } - } - return new ContentMultiMap({ kv_content: content }); - } - toJson() { - const ret = {}; - for (const [key, value] of this.kv_content.entries()) { - if (Array.isArray(value)) { - const items = []; - for (const n of value) { - if (n instanceof VdxfUniValue_1.VdxfUniValue) { - items.push(n.toJson()); - } - else if (Buffer.isBuffer(n)) { - items.push(n.toString('hex')); - } - else - throw new Error("Unknown ContentMultiMap data, can't toBuffer"); - } - ret[key] = items; - } - else - throw new Error("Unknown ContentMultiMap data, can't toBuffer"); - } - return ret; - } -} -exports.ContentMultiMap = ContentMultiMap; diff --git a/dist/pbaas/ContentMultiMapRemove.d.ts b/dist/pbaas/ContentMultiMapRemove.d.ts deleted file mode 100644 index ff059f22..00000000 --- a/dist/pbaas/ContentMultiMapRemove.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -export interface ContentMultiMapRemoveJson { - version: number; - action: number; - entrykey: string; - valuehash: string; -} -export declare class ContentMultiMapRemove implements SerializableEntity { - version: BigNumber; - action: BigNumber; - entry_key: string; - value_hash: Buffer; - static VERSION_INVALID: import("bn.js"); - static VERSION_FIRST: import("bn.js"); - static VERSION_LAST: import("bn.js"); - static VERSION_CURRENT: import("bn.js"); - static ACTION_FIRST: import("bn.js"); - static ACTION_REMOVE_ONE_KEYVALUE: import("bn.js"); - static ACTION_REMOVE_ALL_KEYVALUE: import("bn.js"); - static ACTION_REMOVE_ALL_KEY: import("bn.js"); - static ACTION_CLEAR_MAP: import("bn.js"); - static ACTION_LAST: import("bn.js"); - constructor(data?: { - version?: BigNumber; - action?: BigNumber; - entry_key?: string; - value_hash?: Buffer; - }); - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - static fromJson(data: ContentMultiMapRemoveJson): ContentMultiMapRemove; - toJson(): ContentMultiMapRemoveJson; - isValid(): boolean; -} diff --git a/dist/pbaas/ContentMultiMapRemove.js b/dist/pbaas/ContentMultiMapRemove.js deleted file mode 100644 index e8b2e9dc..00000000 --- a/dist/pbaas/ContentMultiMapRemove.js +++ /dev/null @@ -1,89 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ContentMultiMapRemove = void 0; -const varint_1 = require("../utils/varint"); -const address_1 = require("../utils/address"); -const bufferutils_1 = require("../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const vdxf_1 = require("../constants/vdxf"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class ContentMultiMapRemove { - constructor(data) { - this.version = (data === null || data === void 0 ? void 0 : data.version) || new bn_js_1.BN(1, 10); - this.action = (data === null || data === void 0 ? void 0 : data.action) || new bn_js_1.BN(0, 10); - this.entry_key = (data === null || data === void 0 ? void 0 : data.entry_key) || ""; - this.value_hash = (data === null || data === void 0 ? void 0 : data.value_hash) || Buffer.alloc(0); - } - getByteLength() { - let byteLength = 0; - byteLength += varint_1.default.encodingLength(this.version); - byteLength += varint_1.default.encodingLength(this.action); - if (this.action != ContentMultiMapRemove.ACTION_CLEAR_MAP) { - byteLength += vdxf_1.HASH160_BYTE_LENGTH; - if (this.action != ContentMultiMapRemove.ACTION_REMOVE_ALL_KEY) { - byteLength += vdxf_1.HASH256_BYTE_LENGTH; - } - } - return byteLength; - } - toBuffer() { - const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); - bufferWriter.writeVarInt(this.version); - bufferWriter.writeVarInt(this.action); - if (this.action != ContentMultiMapRemove.ACTION_CLEAR_MAP) { - bufferWriter.writeSlice((0, address_1.fromBase58Check)(this.entry_key).hash); - if (this.action != ContentMultiMapRemove.ACTION_REMOVE_ALL_KEY) { - bufferWriter.writeSlice(this.value_hash); - } - } - return bufferWriter.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.version = new bn_js_1.BN(reader.readVarInt()); - this.action = new bn_js_1.BN(reader.readVarInt()); - if (!this.action.eq(ContentMultiMapRemove.ACTION_CLEAR_MAP)) { - this.entry_key = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - if (!this.action.eq(ContentMultiMapRemove.ACTION_REMOVE_ALL_KEY)) { - this.value_hash = reader.readSlice(32); - } - } - return reader.offset; - } - static fromJson(data) { - return new ContentMultiMapRemove({ - version: new bn_js_1.BN(data.version), - action: new bn_js_1.BN(data.action), - entry_key: data.entrykey, - value_hash: Buffer.from(data.valuehash, 'hex').reverse() // Unit256 Reverse to match the original hash order - }); - } - toJson() { - return { - version: this.version.toNumber(), - action: this.action.toNumber(), - entrykey: this.entry_key, - valuehash: Buffer.from(this.value_hash).reverse().toString('hex') - }; - } - isValid() { - if (this.version.gte(ContentMultiMapRemove.VERSION_FIRST) && - this.version.lte(ContentMultiMapRemove.VERSION_LAST)) { - return (this.action.eq(ContentMultiMapRemove.ACTION_CLEAR_MAP) || - (this.entry_key && (this.entry_key.length > 0) && - (this.action.eq(ContentMultiMapRemove.ACTION_REMOVE_ALL_KEY) || this.value_hash.length > 0))); - } - return false; - } -} -exports.ContentMultiMapRemove = ContentMultiMapRemove; -ContentMultiMapRemove.VERSION_INVALID = new bn_js_1.BN(0); -ContentMultiMapRemove.VERSION_FIRST = new bn_js_1.BN(1); -ContentMultiMapRemove.VERSION_LAST = new bn_js_1.BN(1); -ContentMultiMapRemove.VERSION_CURRENT = new bn_js_1.BN(1); -ContentMultiMapRemove.ACTION_FIRST = new bn_js_1.BN(1); -ContentMultiMapRemove.ACTION_REMOVE_ONE_KEYVALUE = new bn_js_1.BN(1); -ContentMultiMapRemove.ACTION_REMOVE_ALL_KEYVALUE = new bn_js_1.BN(2); -ContentMultiMapRemove.ACTION_REMOVE_ALL_KEY = new bn_js_1.BN(3); -ContentMultiMapRemove.ACTION_CLEAR_MAP = new bn_js_1.BN(4); -ContentMultiMapRemove.ACTION_LAST = new bn_js_1.BN(4); diff --git a/dist/pbaas/Credential.d.ts b/dist/pbaas/Credential.d.ts deleted file mode 100644 index 7510b512..00000000 --- a/dist/pbaas/Credential.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { BigNumber } from "../utils/types/BigNumber"; -import { SerializableEntity } from "../utils/types/SerializableEntity"; -export type CredentialJson = { - version?: number; - flags?: number; - credentialkey?: string; - credential?: Object; - scopes?: Object; - label?: string; -}; -export declare class Credential implements SerializableEntity { - static VERSION_INVALID: import("bn.js"); - static VERSION_FIRST: import("bn.js"); - static VERSION_LAST: import("bn.js"); - static VERSION_CURRENT: import("bn.js"); - static FLAG_LABEL_PRESENT: import("bn.js"); - static MAX_JSON_STRING_LENGTH: number; - version: BigNumber; - flags: BigNumber; - credentialKey: string; - credential: Object; - scopes: Object; - label: string; - constructor(data?: { - version?: BigNumber; - flags?: BigNumber; - credentialKey?: string; - credential?: Object; - scopes?: Object; - label?: string; - }); - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - hasLabel(): boolean; - calcFlags(): BigNumber; - setFlags(): void; - isValid(): boolean; - toJson(): CredentialJson; - static fromJson(json: CredentialJson): Credential; -} diff --git a/dist/pbaas/Credential.js b/dist/pbaas/Credential.js deleted file mode 100644 index f62cf0b5..00000000 --- a/dist/pbaas/Credential.js +++ /dev/null @@ -1,127 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Credential = void 0; -const bn_js_1 = require("bn.js"); -const bufferutils_1 = require("../utils/bufferutils"); -const varuint_1 = require("../utils/varuint"); -const vdxf_1 = require("../constants/vdxf"); -const varint_1 = require("../utils/varint"); -const string_1 = require("../utils/string"); -const address_1 = require("../utils/address"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class Credential { - constructor(data) { - this.version = Credential.VERSION_INVALID; - this.flags = new bn_js_1.BN(0, 10); - this.credentialKey = ""; - this.credential = {}; - this.scopes = {}; - this.label = ""; - if (data) { - if (data.flags) - this.flags = new bn_js_1.BN(data.flags); - if (data.version) - this.version = new bn_js_1.BN(data.version); - if (data.credentialKey) - this.credentialKey = data.credentialKey; - if (data.credential) - this.credential = data.credential; - if (data.scopes) - this.scopes = data.scopes; - if (data.label) - this.label = data.label; - if (JSON.stringify(this.credential).length > Credential.MAX_JSON_STRING_LENGTH || - JSON.stringify(this.scopes).length > Credential.MAX_JSON_STRING_LENGTH) { - this.version = Credential.VERSION_INVALID; - } - this.setFlags(); - } - } - getByteLength() { - let length = 0; - length += varint_1.default.encodingLength(this.version); - length += varint_1.default.encodingLength(this.flags); - length += vdxf_1.HASH160_BYTE_LENGTH; // Credential key - // Both the credential and scopes are serialized as JSON strings. - const credStr = JSON.stringify(this.credential); - const credentialLength = credStr.length; - length += varuint_1.default.encodingLength(credentialLength); - length += credentialLength; - const scopesStr = JSON.stringify(this.scopes); - const scopesLength = scopesStr.length; - length += varuint_1.default.encodingLength(scopesLength); - length += scopesLength; - if (this.hasLabel()) { - length += varuint_1.default.encodingLength(this.label.length); - length += Buffer.from(this.label).length; - } - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.version); - writer.writeVarInt(this.flags); - writer.writeSlice((0, address_1.fromBase58Check)(this.credentialKey).hash); - writer.writeVarSlice(Buffer.from(JSON.stringify(this.credential))); - writer.writeVarSlice(Buffer.from(JSON.stringify(this.scopes))); - if (this.hasLabel()) { - writer.writeVarSlice(Buffer.from(this.label)); - } - return writer.buffer; - } - fromBuffer(buffer, offset) { - const reader = new BufferReader(buffer, offset); - this.version = new bn_js_1.BN(reader.readVarInt(), 10); - this.flags = new bn_js_1.BN(reader.readVarInt(), 10); - this.credentialKey = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - this.credential = JSON.parse(Buffer.from((0, string_1.readLimitedString)(reader, Credential.MAX_JSON_STRING_LENGTH)).toString()); - this.scopes = JSON.parse(Buffer.from((0, string_1.readLimitedString)(reader, Credential.MAX_JSON_STRING_LENGTH)).toString()); - if (this.hasLabel()) { - this.label = Buffer.from((0, string_1.readLimitedString)(reader, Credential.MAX_JSON_STRING_LENGTH)).toString(); - } - return reader.offset; - } - hasLabel() { - return this.flags.and(Credential.FLAG_LABEL_PRESENT).gt(new bn_js_1.BN(0, 10)); - } - calcFlags() { - return this.label.length > 0 ? Credential.FLAG_LABEL_PRESENT : new bn_js_1.BN(0, 10); - } - setFlags() { - this.flags = this.calcFlags(); - } - // The credentials is invalid if the version is not within the valid range or the key is null. - isValid() { - return this.version.gte(Credential.VERSION_FIRST) && this.version.lte(Credential.VERSION_LAST) - && this.credentialKey !== vdxf_1.NULL_ADDRESS; - } - toJson() { - const ret = { - version: this.version.toNumber(), - flags: this.flags.toNumber(), - credentialkey: this.credentialKey, - credential: this.credential, - scopes: this.scopes, - label: this.hasLabel() ? this.label : null - }; - return ret; - } - static fromJson(json) { - return new Credential({ - version: json.version ? new bn_js_1.BN(json.version, 10) : undefined, - flags: json.flags ? new bn_js_1.BN(json.flags, 10) : undefined, - credentialKey: json.credentialkey, - credential: json.credential, - scopes: json.scopes, - label: json.label, - }); - } -} -exports.Credential = Credential; -// Credential enum types -Credential.VERSION_INVALID = new bn_js_1.BN(0, 10); -Credential.VERSION_FIRST = new bn_js_1.BN(1, 10); -Credential.VERSION_LAST = new bn_js_1.BN(1, 10); -Credential.VERSION_CURRENT = new bn_js_1.BN(1, 10); -Credential.FLAG_LABEL_PRESENT = new bn_js_1.BN(1, 10); -Credential.MAX_JSON_STRING_LENGTH = 512; diff --git a/dist/pbaas/CrossChainDataRef.d.ts b/dist/pbaas/CrossChainDataRef.d.ts deleted file mode 100644 index 6875fc69..00000000 --- a/dist/pbaas/CrossChainDataRef.d.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { SerializableEntity } from '../utils/types/SerializableEntity'; -import { PBaaSEvidenceRef, PBaaSEvidenceRefJson } from './PBaaSEvidenceRef'; -import { IdentityMultimapRef, IdentityMultimapRefJson } from './IdentityMultimapRef'; -import { URLRef, URLRefJson } from './URLRef'; -export type CrossChainDataRefJson = (PBaaSEvidenceRefJson & { - type: number; -}) | (IdentityMultimapRefJson & { - type: number; -}) | (URLRefJson & { - type: number; -}); -export declare class CrossChainDataRef implements SerializableEntity { - ref: PBaaSEvidenceRef | IdentityMultimapRef | URLRef; - static TYPE_CROSSCHAIN_DATAREF: number; - static TYPE_IDENTITY_DATAREF: number; - static TYPE_URL_REF: number; - constructor(data?: PBaaSEvidenceRef | IdentityMultimapRef | URLRef | any); - which(): number; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - isValid(): boolean; - toJson(): { - type: number; - version: number; - flags: number; - vdxfkey: string; - identityid?: string; - startheight: number; - endheight: number; - datahash?: string; - systemid?: string; - } | { - type: number; - version: number; - flags: number; - output: any; - objectnum: number; - subobject: number; - systemid: string; - } | { - type: number; - version: number; - flags: number; - datahash: string; - url: string; - }; - static fromJson(data: CrossChainDataRefJson): CrossChainDataRef; -} diff --git a/dist/pbaas/CrossChainDataRef.js b/dist/pbaas/CrossChainDataRef.js deleted file mode 100644 index 455b0966..00000000 --- a/dist/pbaas/CrossChainDataRef.js +++ /dev/null @@ -1,82 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CrossChainDataRef = void 0; -const bufferutils_1 = require("../utils/bufferutils"); -const PBaaSEvidenceRef_1 = require("./PBaaSEvidenceRef"); -const IdentityMultimapRef_1 = require("./IdentityMultimapRef"); -const URLRef_1 = require("./URLRef"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class CrossChainDataRef { - constructor(data) { - this.ref = data || null; - } - which() { - if (this.ref instanceof PBaaSEvidenceRef_1.PBaaSEvidenceRef) { - return CrossChainDataRef.TYPE_CROSSCHAIN_DATAREF; - } - else if (this.ref instanceof IdentityMultimapRef_1.IdentityMultimapRef) { - return CrossChainDataRef.TYPE_IDENTITY_DATAREF; - } - else if (this.ref instanceof URLRef_1.URLRef) { - return CrossChainDataRef.TYPE_URL_REF; - } - } - getByteLength() { - let byteLength = 1; //type uint8 - byteLength += this.ref.getByteLength(); - return byteLength; - } - toBuffer() { - const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); - bufferWriter.writeUInt8(this.which()); - bufferWriter.writeSlice(this.ref.toBuffer()); - return bufferWriter.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - const type = reader.readUInt8(); - if (type == CrossChainDataRef.TYPE_CROSSCHAIN_DATAREF) { - this.ref = new PBaaSEvidenceRef_1.PBaaSEvidenceRef(); - } - else if (type == CrossChainDataRef.TYPE_IDENTITY_DATAREF) { - this.ref = new IdentityMultimapRef_1.IdentityMultimapRef(); - } - else if (type == CrossChainDataRef.TYPE_URL_REF) { - this.ref = new URLRef_1.URLRef(); - } - offset = this.ref.fromBuffer(buffer, reader.offset); - return offset; - } - isValid() { - switch (this.which()) { - case CrossChainDataRef.TYPE_CROSSCHAIN_DATAREF: - return this.ref.isValid(); - case CrossChainDataRef.TYPE_IDENTITY_DATAREF: - return this.ref.isValid(); - case CrossChainDataRef.TYPE_URL_REF: - return this.ref.isValid(); - default: - return false; - } - } - toJson() { - return Object.assign(Object.assign({}, this.ref.toJson()), { type: this.which() }); - } - static fromJson(data) { - if (data.type == CrossChainDataRef.TYPE_CROSSCHAIN_DATAREF) { - return new CrossChainDataRef(PBaaSEvidenceRef_1.PBaaSEvidenceRef.fromJson(data)); - } - else if (data.type == CrossChainDataRef.TYPE_IDENTITY_DATAREF) { - return new CrossChainDataRef(IdentityMultimapRef_1.IdentityMultimapRef.fromJson(data)); - } - else if (data.type == CrossChainDataRef.TYPE_URL_REF) { - return new CrossChainDataRef(URLRef_1.URLRef.fromJson(data)); - } - else - throw new Error("Invalid CrossChainDataRef type"); - } -} -exports.CrossChainDataRef = CrossChainDataRef; -CrossChainDataRef.TYPE_CROSSCHAIN_DATAREF = 0; -CrossChainDataRef.TYPE_IDENTITY_DATAREF = 1; -CrossChainDataRef.TYPE_URL_REF = 2; diff --git a/dist/pbaas/CrossChainProof.d.ts b/dist/pbaas/CrossChainProof.d.ts deleted file mode 100644 index 941fcc45..00000000 --- a/dist/pbaas/CrossChainProof.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -import { EvidenceData, EvidenceDataInChainObjectJson } from './EvidenceData'; -export interface CrossChainProofJson { - version: number; - chainobjects: Array; -} -export declare enum CHAIN_OBJECT_TYPES { - CHAINOBJ_INVALID = 0, - CHAINOBJ_HEADER = 1,// serialized full block header w/proof - CHAINOBJ_HEADER_REF = 2,// equivalent to header, but only includes non-canonical data - CHAINOBJ_TRANSACTION_PROOF = 3,// serialized transaction or partial transaction with proof - CHAINOBJ_PROOF_ROOT = 4,// merkle proof of preceding block or transaction - CHAINOBJ_COMMITMENTDATA = 5,// prior block commitments to ensure recognition of overlapping notarizations - CHAINOBJ_RESERVETRANSFER = 6,// serialized transaction, sometimes without an opret, which will be reconstructed - CHAINOBJ_RESERVED = 7,// unused and reserved - CHAINOBJ_CROSSCHAINPROOF = 8,// specific composite object, which is a single or multi-proof - CHAINOBJ_NOTARYSIGNATURE = 9,// notary signature - CHAINOBJ_EVIDENCEDATA = 10 -} -export declare class CrossChainProof implements SerializableEntity { - version: BigNumber; - chain_objects: Array; - static VERSION_INVALID: import("bn.js"); - static VERSION_FIRST: import("bn.js"); - static VERSION_CURRENT: import("bn.js"); - static VERSION_LAST: import("bn.js"); - constructor(data?: { - version: any; - chain_objects: any; - }); - static KnownVDXFKeys(): Map; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - isValid(): boolean; - toJson(): { - version: string; - chainobjects: any[]; - }; - static fromJson(data: CrossChainProofJson): CrossChainProof; -} diff --git a/dist/pbaas/CrossChainProof.js b/dist/pbaas/CrossChainProof.js deleted file mode 100644 index a1dd387a..00000000 --- a/dist/pbaas/CrossChainProof.js +++ /dev/null @@ -1,116 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CrossChainProof = exports.CHAIN_OBJECT_TYPES = void 0; -const varint_1 = require("../utils/varint"); -const bufferutils_1 = require("../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const EvidenceData_1 = require("./EvidenceData"); -const VDXF_Data = require("../vdxf/vdxfdatakeys"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -var CHAIN_OBJECT_TYPES; -(function (CHAIN_OBJECT_TYPES) { - CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_INVALID"] = 0] = "CHAINOBJ_INVALID"; - CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_HEADER"] = 1] = "CHAINOBJ_HEADER"; - CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_HEADER_REF"] = 2] = "CHAINOBJ_HEADER_REF"; - CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_TRANSACTION_PROOF"] = 3] = "CHAINOBJ_TRANSACTION_PROOF"; - CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_PROOF_ROOT"] = 4] = "CHAINOBJ_PROOF_ROOT"; - CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_COMMITMENTDATA"] = 5] = "CHAINOBJ_COMMITMENTDATA"; - CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_RESERVETRANSFER"] = 6] = "CHAINOBJ_RESERVETRANSFER"; - CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_RESERVED"] = 7] = "CHAINOBJ_RESERVED"; - CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_CROSSCHAINPROOF"] = 8] = "CHAINOBJ_CROSSCHAINPROOF"; - CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_NOTARYSIGNATURE"] = 9] = "CHAINOBJ_NOTARYSIGNATURE"; - CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_EVIDENCEDATA"] = 10] = "CHAINOBJ_EVIDENCEDATA"; // flexible evidence data -})(CHAIN_OBJECT_TYPES || (exports.CHAIN_OBJECT_TYPES = CHAIN_OBJECT_TYPES = {})); -; -class CrossChainProof { - constructor(data) { - this.version = (data === null || data === void 0 ? void 0 : data.version) || new bn_js_1.BN(1, 10); - this.chain_objects = (data === null || data === void 0 ? void 0 : data.chain_objects) || []; - } - static KnownVDXFKeys() { - const keys = new Map(); - keys.set(VDXF_Data.EvidenceDataKey.vdxfid, CHAIN_OBJECT_TYPES.CHAINOBJ_EVIDENCEDATA); - return keys; - } - getByteLength() { - let byteLength = 0; - byteLength += 4; // version uint32 - byteLength += varint_1.default.encodingLength(new bn_js_1.BN(this.chain_objects.length)); - for (let i = 0; i < this.chain_objects.length; i++) { - byteLength += 2; // objtype uint16 - byteLength += this.chain_objects[i].getByteLength(); - } - return byteLength; - } - toBuffer() { - const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); - bufferWriter.writeUInt32(this.version.toNumber()); - bufferWriter.writeVarInt(new bn_js_1.BN(this.chain_objects.length)); - for (let i = 0; i < this.chain_objects.length; i++) { - bufferWriter.writeUInt16(this.chain_objects[i].type.toNumber()); - bufferWriter.writeSlice(this.chain_objects[i].toBuffer()); - } - return bufferWriter.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.version = new bn_js_1.BN(reader.readUInt32()); - this.chain_objects = []; - const chain_objectsLength = reader.readVarInt().toNumber(); - for (let i = 0; i < chain_objectsLength; i++) { - const objType = reader.readUInt16(); - //TODO: Implement all proof types - if (objType != CHAIN_OBJECT_TYPES.CHAINOBJ_EVIDENCEDATA) - throw new Error("Invalid chain object type"); - const obj = new EvidenceData_1.EvidenceData(); - reader.offset = obj.fromBuffer(reader.buffer, reader.offset); - this.chain_objects.push(obj); - } - return reader.offset; - } - isValid() { - for (let i = 0; i < this.chain_objects.length; i++) { - if (!this.chain_objects[i].isValid()) - return false; - } - return this.chain_objects.length > 0; - } - toJson() { - const outputChainObjects = []; - //TODO: Implement all proof types - for (let i = 0; i < this.chain_objects.length; i++) { - if (!(this.chain_objects[i] instanceof EvidenceData_1.EvidenceData)) - throw new Error("Invalid chain object type"); - outputChainObjects.push({ vdxftype: VDXF_Data.EvidenceDataKey.vdxfid, value: this.chain_objects[i].toJson() }); - } - return { - version: this.version.toString(10), - chainobjects: outputChainObjects - }; - } - //TODO: Implement all proof types - static fromJson(data) { - let chainObjects = []; - for (let i = 0; i < data.chainobjects.length; i++) { - if (!CrossChainProof.KnownVDXFKeys().get(data.chainobjects[i].vdxftype)) - throw new Error("Invalid chain object type"); - const vdxftype = CrossChainProof.KnownVDXFKeys().get(data.chainobjects[i].vdxftype); - switch (vdxftype) { - case CHAIN_OBJECT_TYPES.CHAINOBJ_EVIDENCEDATA: - chainObjects.push(EvidenceData_1.EvidenceData.fromJson({ hex: data.chainobjects[i].value.hex })); - break; - default: - throw new Error("Invalid chain object type"); - } - } - return new CrossChainProof({ - version: new bn_js_1.BN(data.version, 10), - chain_objects: chainObjects - }); - } -} -exports.CrossChainProof = CrossChainProof; -CrossChainProof.VERSION_INVALID = new bn_js_1.BN(0); -CrossChainProof.VERSION_FIRST = new bn_js_1.BN(1); -CrossChainProof.VERSION_CURRENT = new bn_js_1.BN(1); -CrossChainProof.VERSION_LAST = new bn_js_1.BN(1); diff --git a/dist/pbaas/CurrencyValueMap.d.ts b/dist/pbaas/CurrencyValueMap.d.ts deleted file mode 100644 index 1ef26808..00000000 --- a/dist/pbaas/CurrencyValueMap.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -export declare class CurrencyValueMap implements SerializableEntity { - value_map: Map; - multivalue: boolean; - constructor(data?: { - value_map?: Map; - multivalue?: boolean; - }); - getNumValues(): import("bn.js"); - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - isValid(): boolean; - toJson(): { - [key: string]: string; - }; - static fromJson(data: { - [key: string]: string; - }, multivalue?: boolean): CurrencyValueMap; -} diff --git a/dist/pbaas/CurrencyValueMap.js b/dist/pbaas/CurrencyValueMap.js deleted file mode 100644 index c1c62f6d..00000000 --- a/dist/pbaas/CurrencyValueMap.js +++ /dev/null @@ -1,107 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CurrencyValueMap = void 0; -const varint_1 = require("../utils/varint"); -const varuint_1 = require("../utils/varuint"); -const address_1 = require("../utils/address"); -const bufferutils_1 = require("../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const vdxf_1 = require("../constants/vdxf"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -const numberConversion_1 = require("../utils/numberConversion"); -class CurrencyValueMap { - constructor(data = {}) { - this.value_map = new Map(data.value_map || []); - this.multivalue = !!(data.multivalue); - } - getNumValues() { - return new bn_js_1.BN(this.value_map.size, 10); - } - getByteLength() { - let byteLength = 0; - if (this.multivalue) { - byteLength += varuint_1.default.encodingLength(this.value_map.size); - } - for (const [key, value] of this.value_map) { - byteLength += vdxf_1.HASH160_BYTE_LENGTH; - byteLength += this.multivalue ? 8 : varint_1.default.encodingLength(value); - } - return byteLength; - } - toBuffer() { - const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); - if (this.multivalue) { - const entries = []; - bufferWriter.writeCompactSize(this.value_map.size); - // Convert entries to array with [Buffer, BigNumber] - for (const [key, value] of this.value_map) { - const { hash } = (0, address_1.fromBase58Check)(key); - entries.push({ [hash.toString('hex')]: value }); - } - // Sort by Buffer (vkey) value, smallest first - entries.sort((a, b) => { - const aKey = Object.keys(a)[0]; - const bKey = Object.keys(b)[0]; - const aBuf = Buffer.from(aKey, 'hex'); - const bBuf = Buffer.from(bKey, 'hex'); - return aBuf.compare(bBuf); - }); - for (const value of entries) { - const key = Object.keys(value)[0]; - const innervalue = value[key]; - bufferWriter.writeSlice(Buffer.from(key, 'hex')); - bufferWriter.writeInt64(innervalue); - } - } - else { - for (const [key, value] of this.value_map) { - const { hash } = (0, address_1.fromBase58Check)(key); - bufferWriter.writeSlice(hash); - bufferWriter.writeVarInt(value); - } - } - return bufferWriter.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - let count; - if (this.multivalue) { - count = reader.readCompactSize(); - } - else { - count = 1; - } - for (let i = 0; i < count; i++) { - const hash = reader.readSlice(20); - const value = this.multivalue ? reader.readInt64() : reader.readVarInt(); - const base58Key = (0, address_1.toBase58Check)(hash, vdxf_1.I_ADDR_VERSION); - this.value_map.set(base58Key, value); - } - return reader.offset; - } - isValid() { - for (let [key, value] of this.value_map) { - if (!key || (typeof (key) == 'string' && key.length == 0)) { - return false; - } - } - return true; - } - toJson() { - const value_map = {}; - for (let [key, value] of this.value_map) { - value_map[key] = (0, numberConversion_1.bnToDecimal)(value); - } - return value_map; - } - static fromJson(data, multivalue = false) { - const value_map = new Map(); - // Object.entries preserves the insertion order of the object's keys - // If the input object is created with insertion order in mind, this will preserve it - for (const key of Object.keys(data)) { - value_map.set(key, (0, numberConversion_1.decimalToBn)(data[key])); - } - return new CurrencyValueMap({ value_map, multivalue }); - } -} -exports.CurrencyValueMap = CurrencyValueMap; diff --git a/dist/pbaas/DataDescriptor.d.ts b/dist/pbaas/DataDescriptor.d.ts deleted file mode 100644 index d682dfe4..00000000 --- a/dist/pbaas/DataDescriptor.d.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { BufferDataVdxfObject } from '../vdxf/index'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -export interface DataDescriptorJson { - version: number; - flags?: number; - objectdata?: string | { - ['message']: string; - } | object; - label?: string; - mimetype?: string; - salt?: string; - epk?: string; - ivk?: string; - ssk?: string; -} -export declare class DataDescriptor implements SerializableEntity { - static VERSION_INVALID: import("bn.js"); - static VERSION_FIRST: import("bn.js"); - static FIRST_VERSION: import("bn.js"); - static LAST_VERSION: import("bn.js"); - static DEFAULT_VERSION: import("bn.js"); - static FLAG_ENCRYPTED_DATA: import("bn.js"); - static FLAG_SALT_PRESENT: import("bn.js"); - static FLAG_ENCRYPTION_PUBLIC_KEY_PRESENT: import("bn.js"); - static FLAG_INCOMING_VIEWING_KEY_PRESENT: import("bn.js"); - static FLAG_SYMMETRIC_ENCRYPTION_KEY_PRESENT: import("bn.js"); - static FLAG_LABEL_PRESENT: import("bn.js"); - static FLAG_MIME_TYPE_PRESENT: import("bn.js"); - static FLAG_MASK: import("bn.js"); - version: BigNumber; - flags: BigNumber; - objectdata: Buffer; - label: string; - mimeType: string; - salt: Buffer; - epk: Buffer; - ivk: Buffer; - ssk: Buffer; - constructor(data?: { - version?: BigNumber; - flags?: BigNumber; - objectdata?: Buffer; - label?: string; - mimeType?: string; - salt?: Buffer; - epk?: Buffer; - ivk?: Buffer; - ssk?: Buffer; - }); - static fromJson(data: any): DataDescriptor; - DecodeHashVector(): Array; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - HasEncryptedData(): boolean; - HasSalt(): boolean; - HasEPK(): boolean; - HasMIME(): boolean; - HasIVK(): boolean; - HasSSK(): boolean; - HasLabel(): boolean; - CalcFlags(): BigNumber; - SetFlags(): void; - isValid(): boolean; - toJson(): DataDescriptorJson; -} -export declare class VDXFDataDescriptor extends BufferDataVdxfObject { - dataDescriptor: DataDescriptor; - constructor(dataDescriptor?: DataDescriptor, vdxfkey?: string, version?: BigNumber); - static fromDataVdxfObject(data: BufferDataVdxfObject): VDXFDataDescriptor; - dataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer, offset?: number): number; - HasEncryptedData(): boolean; - HasLabel(): boolean; - HasSalt(): boolean; - HasEPK(): boolean; - HasIVK(): boolean; - HasSSK(): boolean; - CalcFlags(): BigNumber; - SetFlags(): void; -} -export declare enum EHashTypes { - HASH_INVALID, - HASH_BLAKE2BMMR, - HASH_BLAKE2BMMR2, - HASH_KECCAK, - HASH_SHA256D, - HASH_SHA256, - HASH_LASTTYPE -} diff --git a/dist/pbaas/DataDescriptor.js b/dist/pbaas/DataDescriptor.js deleted file mode 100644 index 23c1a977..00000000 --- a/dist/pbaas/DataDescriptor.js +++ /dev/null @@ -1,335 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.EHashTypes = exports.VDXFDataDescriptor = exports.DataDescriptor = void 0; -const bn_js_1 = require("bn.js"); -const varint_1 = require("../utils/varint"); -const varuint_1 = require("../utils/varuint"); -const bufferutils_1 = require("../utils/bufferutils"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -const _1 = require("."); -const index_1 = require("../vdxf/index"); -const VDXF_Data = require("../vdxf/vdxfdatakeys"); -const pbaas_1 = require("../constants/pbaas"); -class DataDescriptor { - constructor(data) { - this.flags = new bn_js_1.BN(0); - this.version = DataDescriptor.DEFAULT_VERSION; - this.objectdata = Buffer.from([]); - if (data != null) { - if (data.flags != null) - this.flags = data.flags; - if (data.version != null) - this.version = data.version; - if (data.objectdata != null) - this.objectdata = data.objectdata; - if (data.label != null) - this.label = data.label; - if (data.mimeType != null) - this.mimeType = data.mimeType; - if (data.salt != null) - this.salt = data.salt; - if (data.epk != null) - this.epk = data.epk; - if (data.ivk != null) - this.ivk = data.ivk; - if (data.ssk != null) - this.ssk = data.ssk; - if (this.label && this.label.length > 64) { - this.label = this.label.slice(0, 64); - } - if (this.mimeType && this.mimeType.length > 128) { - this.mimeType = this.mimeType.slice(0, 128); - } - this.SetFlags(); - } - } - static fromJson(data) { - const newDataDescriptor = new DataDescriptor(); - if (data != null) { - if (data.flags != null) - newDataDescriptor.flags = new bn_js_1.BN(data.flags); - if (data.version != null) - newDataDescriptor.version = new bn_js_1.BN(data.version); - if (data.objectdata != null) - newDataDescriptor.objectdata = _1.VdxfUniValue.fromJson(data.objectdata).toBuffer(); - if (data.label != null) - newDataDescriptor.label = data.label; - if (data.mimetype != null) - newDataDescriptor.mimeType = data.mimetype; - if (data.salt != null) - newDataDescriptor.salt = Buffer.from(data.salt, 'hex'); - if (data.epk != null) - newDataDescriptor.epk = Buffer.from(data.epk, 'hex'); - if (data.ivk != null) - newDataDescriptor.ivk = Buffer.from(data.ivk, 'hex'); - if (data.ssk != null) - newDataDescriptor.ssk = Buffer.from(data.ssk, 'hex'); - if (newDataDescriptor.label && newDataDescriptor.label.length > 64) { - newDataDescriptor.label = newDataDescriptor.label.slice(0, 64); - } - if (newDataDescriptor.mimeType && newDataDescriptor.mimeType.length > 128) { - newDataDescriptor.mimeType = newDataDescriptor.mimeType.slice(0, 128); - } - } - ; - newDataDescriptor.SetFlags(); - return newDataDescriptor; - } - DecodeHashVector() { - const vdxfData = new index_1.BufferDataVdxfObject(); - vdxfData.fromBuffer(this.objectdata); - const hashes = []; - if (vdxfData.vdxfkey == VDXF_Data.VectorUint256Key.vdxfid) { - const reader = new BufferReader(Buffer.from(vdxfData.data, 'hex')); - const count = reader.readVarInt(); - for (let i = 0; i < count.toNumber(); i++) { - hashes.push(reader.readSlice(32)); - } - } - return hashes; - } - getByteLength() { - let length = 0; - length += varint_1.default.encodingLength(this.version); - length += varint_1.default.encodingLength(this.flags); - length += varuint_1.default.encodingLength(this.objectdata.length); - length += this.objectdata.length; - if (this.HasLabel()) { - if (this.label.length > 64) { - throw new Error("Label too long"); - } - length += varuint_1.default.encodingLength(this.label.length); - length += this.label.length; - } - if (this.HasMIME()) { - if (this.mimeType.length > 128) { - throw new Error("MIME type too long"); - } - length += varuint_1.default.encodingLength(this.mimeType.length); - length += this.mimeType.length; - } - if (this.HasSalt()) { - length += varuint_1.default.encodingLength(this.salt.length); - length += this.salt.length; - } - if (this.HasEPK()) { - length += varuint_1.default.encodingLength(this.epk.length); - length += this.epk.length; - } - if (this.HasIVK()) { - length += varuint_1.default.encodingLength(this.ivk.length); - length += this.ivk.length; - } - if (this.HasSSK()) { - length += varuint_1.default.encodingLength(this.ssk.length); - length += this.ssk.length; - } - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.version); - writer.writeVarInt(this.flags); - writer.writeVarSlice(this.objectdata); - if (this.HasLabel()) { - writer.writeVarSlice(Buffer.from(this.label)); - } - if (this.HasMIME()) { - writer.writeVarSlice(Buffer.from(this.mimeType)); - } - if (this.HasSalt()) { - writer.writeVarSlice(this.salt); - } - if (this.HasEPK()) { - writer.writeVarSlice(this.epk); - } - if (this.HasIVK()) { - writer.writeVarSlice(this.ivk); - } - if (this.HasSSK()) { - writer.writeVarSlice(this.ssk); - } - return writer.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.version = reader.readVarInt(); - this.flags = reader.readVarInt(); - this.objectdata = reader.readVarSlice(); - if (this.HasLabel()) { - this.label = reader.readVarSlice().toString(); - } - if (this.HasMIME()) { - this.mimeType = reader.readVarSlice().toString(); - } - if (this.HasSalt()) { - this.salt = reader.readVarSlice(); - } - if (this.HasEPK()) { - this.epk = reader.readVarSlice(); - } - if (this.HasIVK()) { - this.ivk = reader.readVarSlice(); - } - if (this.HasSSK()) { - this.ssk = reader.readVarSlice(); - } - return reader.offset; - } - HasEncryptedData() { - return this.flags.and(DataDescriptor.FLAG_ENCRYPTED_DATA).gt(new bn_js_1.BN(0)); - } - HasSalt() { - return this.flags.and(DataDescriptor.FLAG_SALT_PRESENT).gt(new bn_js_1.BN(0)); - } - HasEPK() { - return this.flags.and(DataDescriptor.FLAG_ENCRYPTION_PUBLIC_KEY_PRESENT).gt(new bn_js_1.BN(0)); - } - HasMIME() { - return this.flags.and(DataDescriptor.FLAG_MIME_TYPE_PRESENT).gt(new bn_js_1.BN(0)); - } - HasIVK() { - return this.flags.and(DataDescriptor.FLAG_INCOMING_VIEWING_KEY_PRESENT).gt(new bn_js_1.BN(0)); - } - HasSSK() { - return this.flags.and(DataDescriptor.FLAG_SYMMETRIC_ENCRYPTION_KEY_PRESENT).gt(new bn_js_1.BN(0)); - } - HasLabel() { - return this.flags.and(DataDescriptor.FLAG_LABEL_PRESENT).gt(new bn_js_1.BN(0)); - } - CalcFlags() { - return this.flags.and(DataDescriptor.FLAG_ENCRYPTED_DATA).add(this.label ? DataDescriptor.FLAG_LABEL_PRESENT : new bn_js_1.BN(0)).add(this.mimeType ? DataDescriptor.FLAG_MIME_TYPE_PRESENT : new bn_js_1.BN(0)).add(this.salt ? DataDescriptor.FLAG_SALT_PRESENT : new bn_js_1.BN(0)).add(this.epk ? DataDescriptor.FLAG_ENCRYPTION_PUBLIC_KEY_PRESENT : new bn_js_1.BN(0)).add(this.ivk ? DataDescriptor.FLAG_INCOMING_VIEWING_KEY_PRESENT : new bn_js_1.BN(0)).add(this.ssk ? DataDescriptor.FLAG_SYMMETRIC_ENCRYPTION_KEY_PRESENT : new bn_js_1.BN(0)); - } - SetFlags() { - this.flags = this.CalcFlags(); - } - isValid() { - return !!(this.version.gte(DataDescriptor.FIRST_VERSION) && this.version.lte(DataDescriptor.LAST_VERSION) && this.flags.and(DataDescriptor.FLAG_MASK.notn(DataDescriptor.FLAG_MASK.bitLength()))); - } - toJson() { - var _a; - const retval = { - version: this.version.toNumber(), - flags: this.flags.toNumber() - }; - let isText = false; - if (this.mimeType) { - retval['mimetype'] = this.mimeType; - if (this.mimeType.startsWith("text/")) - isText = true; - } - let processedObject = new _1.VdxfUniValue(); - processedObject.fromBuffer(this.objectdata); - if ((_a = processedObject.values[0]) === null || _a === void 0 ? void 0 : _a[""]) { - const keys = Object.keys(processedObject.values[0]); - const values = Object.values(processedObject.values[0]); - if (isText && Buffer.isBuffer(values[0]) && keys[0] === "") { - const objectDataUni = { message: '' }; - objectDataUni.message = values[0].toString('utf8'); - retval['objectdata'] = objectDataUni; - } - else if (Buffer.isBuffer(values[0])) { - retval['objectdata'] = values[0].toString('hex'); - } - } - else { - retval['objectdata'] = processedObject.toJson(); - } - if (this.label) - retval['label'] = this.label; - if (this.salt) - retval['salt'] = this.salt.toString('hex'); - if (this.epk) - retval['epk'] = this.epk.toString('hex'); - if (this.ivk) - retval['ivk'] = this.ivk.toString('hex'); - if (this.ssk) - retval['ssk'] = this.ssk.toString('hex'); - return retval; - } -} -exports.DataDescriptor = DataDescriptor; -DataDescriptor.VERSION_INVALID = new bn_js_1.BN(0); -DataDescriptor.VERSION_FIRST = new bn_js_1.BN(1); -DataDescriptor.FIRST_VERSION = new bn_js_1.BN(1); -DataDescriptor.LAST_VERSION = new bn_js_1.BN(1); -DataDescriptor.DEFAULT_VERSION = new bn_js_1.BN(1); -DataDescriptor.FLAG_ENCRYPTED_DATA = new bn_js_1.BN(1); -DataDescriptor.FLAG_SALT_PRESENT = new bn_js_1.BN(2); -DataDescriptor.FLAG_ENCRYPTION_PUBLIC_KEY_PRESENT = new bn_js_1.BN(4); -DataDescriptor.FLAG_INCOMING_VIEWING_KEY_PRESENT = new bn_js_1.BN(8); -DataDescriptor.FLAG_SYMMETRIC_ENCRYPTION_KEY_PRESENT = new bn_js_1.BN(0x10); -DataDescriptor.FLAG_LABEL_PRESENT = new bn_js_1.BN(0x20); -DataDescriptor.FLAG_MIME_TYPE_PRESENT = new bn_js_1.BN(0x40); -DataDescriptor.FLAG_MASK = (DataDescriptor.FLAG_ENCRYPTED_DATA.add(DataDescriptor.FLAG_SALT_PRESENT).add(DataDescriptor.FLAG_ENCRYPTION_PUBLIC_KEY_PRESENT).add(DataDescriptor.FLAG_INCOMING_VIEWING_KEY_PRESENT).add(DataDescriptor.FLAG_SYMMETRIC_ENCRYPTION_KEY_PRESENT).add(DataDescriptor.FLAG_LABEL_PRESENT).add(DataDescriptor.FLAG_MIME_TYPE_PRESENT)); -; -class VDXFDataDescriptor extends index_1.BufferDataVdxfObject { - constructor(dataDescriptor, vdxfkey = "", version = new bn_js_1.BN(1)) { - super("", vdxfkey); - this.version = version; - if (dataDescriptor) { - this.dataDescriptor = dataDescriptor; - } - } - static fromDataVdxfObject(data) { - const retval = new VDXFDataDescriptor(); - retval.version = data.version; - retval.data = data.data; - retval.fromBuffer(Buffer.from(retval.data, 'hex')); - delete retval.data; - return retval; - } - dataByteLength() { - let length = 0; - length += this.dataDescriptor.getByteLength(); - return length; - } - toDataBuffer() { - return this.dataDescriptor.toBuffer(); - } - fromDataBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - this.data = reader.readVarSlice().toString('hex'); - this.dataDescriptor = new DataDescriptor(); - this.dataDescriptor.fromBuffer(Buffer.from(this.data, 'hex'), reader.offset); - delete this.data; - return reader.offset; - } - HasEncryptedData() { - return this.dataDescriptor.HasEncryptedData(); - } - HasLabel() { - return this.dataDescriptor.HasLabel(); - } - HasSalt() { - return this.dataDescriptor.HasSalt(); - } - HasEPK() { - return this.dataDescriptor.HasEPK(); - } - HasIVK() { - return this.dataDescriptor.HasIVK(); - } - HasSSK() { - return this.dataDescriptor.HasSSK(); - } - CalcFlags() { - return this.dataDescriptor.CalcFlags(); - } - SetFlags() { - return this.dataDescriptor.SetFlags(); - } -} -exports.VDXFDataDescriptor = VDXFDataDescriptor; -; -var EHashTypes; -(function (EHashTypes) { - EHashTypes[EHashTypes["HASH_INVALID"] = pbaas_1.HASH_TYPE_INVALID.toNumber()] = "HASH_INVALID"; - EHashTypes[EHashTypes["HASH_BLAKE2BMMR"] = pbaas_1.HASH_TYPE_BLAKE2B.toNumber()] = "HASH_BLAKE2BMMR"; - EHashTypes[EHashTypes["HASH_BLAKE2BMMR2"] = pbaas_1.HASH_TYPE_BLAKE2BMMR2.toNumber()] = "HASH_BLAKE2BMMR2"; - EHashTypes[EHashTypes["HASH_KECCAK"] = pbaas_1.HASH_TYPE_KECCAK256.toNumber()] = "HASH_KECCAK"; - EHashTypes[EHashTypes["HASH_SHA256D"] = pbaas_1.HASH_TYPE_SHA256D.toNumber()] = "HASH_SHA256D"; - EHashTypes[EHashTypes["HASH_SHA256"] = pbaas_1.HASH_TYPE_SHA256.toNumber()] = "HASH_SHA256"; - EHashTypes[EHashTypes["HASH_LASTTYPE"] = pbaas_1.HASH_TYPE_SHA256.toNumber()] = "HASH_LASTTYPE"; -})(EHashTypes || (exports.EHashTypes = EHashTypes = {})); -; diff --git a/dist/pbaas/DefinedKey.d.ts b/dist/pbaas/DefinedKey.d.ts deleted file mode 100644 index c94676e2..00000000 --- a/dist/pbaas/DefinedKey.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -import { IdentityID } from './IdentityID'; -export declare class DefinedKey implements SerializableEntity { - version: BigNumber; - flags: BigNumber; - vdxfuri?: string; - combinedvdxfkey?: IdentityID; - combinedhash?: Buffer; - indexnum?: BigNumber; - static DEFINEDKEY_DEFAULT_FLAGS: import("bn.js"); - static DEFINEDKEY_COMBINES_KEY: import("bn.js"); - static DEFINEDKEY_COMBINES_HASH: import("bn.js"); - static DEFINEDKEY_COMBINES_INDEXNUM: import("bn.js"); - static DEFINEDKEY_CONTAINS_SCHEMA: import("bn.js"); - static DEFINEDKEY_VERSION_INVALID: import("bn.js"); - static DEFINEDKEY_VERSION_CURRENT: import("bn.js"); - constructor(data?: { - version?: BigNumber; - flags?: BigNumber; - vdxfuri?: string; - combinedvdxfkey?: IdentityID; - combinedhash?: Buffer; - indexnum?: BigNumber; - }); - protected containsSchema(): boolean; - combinesKey(): boolean; - combinesHash(): boolean; - combinesIndexNum(): boolean; - getFqnBuffer(): Buffer; - private getDataKey; - getIAddr(testnet?: boolean): string; - getNameSpaceID(testnet?: boolean): string; - private getSelfByteLength; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; -} diff --git a/dist/pbaas/DefinedKey.js b/dist/pbaas/DefinedKey.js deleted file mode 100644 index a9f4c767..00000000 --- a/dist/pbaas/DefinedKey.js +++ /dev/null @@ -1,99 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DefinedKey = void 0; -const bufferutils_1 = require("../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const varuint_1 = require("../utils/varuint"); -const varint_1 = require("../utils/varint"); -const address_1 = require("../utils/address"); -const pbaas_1 = require("../constants/pbaas"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class DefinedKey { - constructor(data) { - this.flags = DefinedKey.DEFINEDKEY_DEFAULT_FLAGS; - this.version = DefinedKey.DEFINEDKEY_VERSION_INVALID; - if (data != null) { - if (data.flags != null) - this.flags = data.flags; - if (data.version != null) - this.version = data.version; - if (data.vdxfuri) - this.vdxfuri = data.vdxfuri; - if (data.combinedvdxfkey || data.combinedhash || data.indexnum) { - throw new Error("Combining keys not supported yet."); - } - } - if (this.containsSchema()) - throw new Error("Schema not supported yet."); - if (this.combinesKey() || this.combinesHash() || this.combinesIndexNum()) { - throw new Error("Combining keys not supported yet."); - } - } - containsSchema() { - return !!(this.flags.and(DefinedKey.DEFINEDKEY_CONTAINS_SCHEMA).toNumber()); - } - combinesKey() { - return !!(this.flags.and(DefinedKey.DEFINEDKEY_COMBINES_KEY).toNumber()); - } - combinesHash() { - return !!(this.flags.and(DefinedKey.DEFINEDKEY_COMBINES_HASH).toNumber()); - } - combinesIndexNum() { - return !!(this.flags.and(DefinedKey.DEFINEDKEY_COMBINES_INDEXNUM).toNumber()); - } - getFqnBuffer() { - return Buffer.from(this.vdxfuri, 'utf8'); - } - getDataKey(testnet = false) { - if (this.combinedvdxfkey || this.combinedhash || this.indexnum) { - throw new Error("Combining keys not supported yet."); - } - if (this.vdxfuri == null) - throw new Error("No fully qualified name provided."); - else if (testnet) { - return (0, address_1.getDataKey)(this.vdxfuri, null, pbaas_1.TESTNET_VERUS_CHAINID); - } - else - return (0, address_1.getDataKey)(this.vdxfuri); - } - getIAddr(testnet = false) { - return this.getDataKey(testnet).id; - } - getNameSpaceID(testnet = false) { - return this.getDataKey(testnet).namespace; - } - getSelfByteLength() { - let byteLength = 0; - byteLength += varint_1.default.encodingLength(this.version); - byteLength += varint_1.default.encodingLength(this.flags); - const fqnLen = this.getFqnBuffer().length; - byteLength += varuint_1.default.encodingLength(fqnLen); - byteLength += fqnLen; - return byteLength; - } - getByteLength() { - return this.getSelfByteLength(); - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getSelfByteLength())); - writer.writeVarInt(this.version); - writer.writeVarInt(this.flags); - writer.writeVarSlice(this.getFqnBuffer()); - return writer.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.version = reader.readVarInt(); - this.flags = reader.readVarInt(); - this.vdxfuri = (reader.readVarSlice()).toString('utf8'); - return reader.offset; - } -} -exports.DefinedKey = DefinedKey; -DefinedKey.DEFINEDKEY_DEFAULT_FLAGS = new bn_js_1.BN(0, 10); -DefinedKey.DEFINEDKEY_COMBINES_KEY = new bn_js_1.BN(1, 10); -DefinedKey.DEFINEDKEY_COMBINES_HASH = new bn_js_1.BN(2, 10); -DefinedKey.DEFINEDKEY_COMBINES_INDEXNUM = new bn_js_1.BN(4, 10); -DefinedKey.DEFINEDKEY_CONTAINS_SCHEMA = new bn_js_1.BN(8, 10); -DefinedKey.DEFINEDKEY_VERSION_INVALID = new bn_js_1.BN(0, 10); -DefinedKey.DEFINEDKEY_VERSION_CURRENT = new bn_js_1.BN(1, 10); diff --git a/dist/pbaas/EvidenceData.d.ts b/dist/pbaas/EvidenceData.d.ts deleted file mode 100644 index fc075bbe..00000000 --- a/dist/pbaas/EvidenceData.d.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -export interface EvidenceDataInChainObjectJson { - vdxftype?: string; - value: { - hex: string; - version: number; - }; -} -export interface EvidenceDataJson { - vdxftype?: string; - hex: string; -} -export declare enum ETypes { - TYPE_INVALID = 0, - TYPE_FIRST_VALID = 1, - TYPE_DATA = 1,// holding a transaction proof of export with finalization referencing finalization of root notarization - TYPE_MULTIPART_DATA = 2,// this is used to combine multiple outputs that can be used to reconstruct one evidence set - TYPE_LAST_VALID = 2 -} -export declare class MultiPartDescriptor implements SerializableEntity { - index: BigNumber; - total_length: BigNumber; - start: BigNumber; - constructor(data?: { - index: any; - total_length: any; - start: any; - }); - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; -} -export declare class EvidenceData implements SerializableEntity { - version: BigNumber; - type: BigNumber; - md: MultiPartDescriptor; - vdxfd: string; - data_vec: Buffer; - static VERSION_INVALID: import("bn.js"); - static VERSION_FIRST: import("bn.js"); - static VERSION_CURRENT: import("bn.js"); - static VERSION_LAST: import("bn.js"); - constructor(data?: { - version: any; - type: any; - md: any; - vdxfd: any; - data_vec: any; - }); - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - isValid(): boolean; - toJson(): { - version: string; - hex: string; - }; - static fromJson(data: EvidenceDataJson): EvidenceData; -} diff --git a/dist/pbaas/EvidenceData.js b/dist/pbaas/EvidenceData.js deleted file mode 100644 index c1a404eb..00000000 --- a/dist/pbaas/EvidenceData.js +++ /dev/null @@ -1,126 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.EvidenceData = exports.MultiPartDescriptor = exports.ETypes = void 0; -const varint_1 = require("../utils/varint"); -const varuint_1 = require("../utils/varuint"); -const address_1 = require("../utils/address"); -const bufferutils_1 = require("../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const vdxf_1 = require("../constants/vdxf"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -var ETypes; -(function (ETypes) { - ETypes[ETypes["TYPE_INVALID"] = 0] = "TYPE_INVALID"; - ETypes[ETypes["TYPE_FIRST_VALID"] = 1] = "TYPE_FIRST_VALID"; - ETypes[ETypes["TYPE_DATA"] = 1] = "TYPE_DATA"; - ETypes[ETypes["TYPE_MULTIPART_DATA"] = 2] = "TYPE_MULTIPART_DATA"; - ETypes[ETypes["TYPE_LAST_VALID"] = 2] = "TYPE_LAST_VALID"; -})(ETypes || (exports.ETypes = ETypes = {})); -; -class MultiPartDescriptor { - constructor(data) { - this.index = (data === null || data === void 0 ? void 0 : data.index) || new bn_js_1.BN(0, 10); - this.total_length = (data === null || data === void 0 ? void 0 : data.total_length) || new bn_js_1.BN(0, 10); - this.start = (data === null || data === void 0 ? void 0 : data.start) || new bn_js_1.BN(0, 10); - } - getByteLength() { - let byteLength = 0; - byteLength += varint_1.default.encodingLength(this.index); - byteLength += varint_1.default.encodingLength(this.total_length); - byteLength += varint_1.default.encodingLength(this.start); - return byteLength; - } - toBuffer() { - const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); - bufferWriter.writeVarInt(this.index); - bufferWriter.writeVarInt(this.total_length); - bufferWriter.writeVarInt(this.start); - return bufferWriter.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.index = reader.readVarInt(); - this.total_length = reader.readVarInt(); - this.start = reader.readVarInt(); - return reader.offset; - } -} -exports.MultiPartDescriptor = MultiPartDescriptor; -class EvidenceData { - constructor(data) { - this.version = (data === null || data === void 0 ? void 0 : data.version) || new bn_js_1.BN(1, 10); - this.type = (data === null || data === void 0 ? void 0 : data.type) || new bn_js_1.BN(ETypes.TYPE_DATA); // holding a transaction proof of export with finalization referencing finalization of root notarization - this.md = data === null || data === void 0 ? void 0 : data.md; - this.vdxfd = data === null || data === void 0 ? void 0 : data.vdxfd; - this.data_vec = (data === null || data === void 0 ? void 0 : data.data_vec) || Buffer.alloc(0); - } - getByteLength() { - let byteLength = 0; - //yes read twice - byteLength += varint_1.default.encodingLength(new bn_js_1.BN(this.version)); - byteLength += varint_1.default.encodingLength(new bn_js_1.BN(this.version)); - byteLength += varint_1.default.encodingLength(new bn_js_1.BN(this.type)); - if (this.type.eq(new bn_js_1.BN(ETypes.TYPE_MULTIPART_DATA))) { - byteLength += this.md.getByteLength(); - } - else { - byteLength += vdxf_1.HASH160_BYTE_LENGTH; - } - byteLength += varuint_1.default.encodingLength(this.data_vec.length); - byteLength += this.data_vec.length; - return byteLength; - } - toBuffer() { - const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); - //yes read twice - bufferWriter.writeVarInt(this.version); - bufferWriter.writeVarInt(this.version); - bufferWriter.writeVarInt(this.type); - if (this.type.eq(new bn_js_1.BN(ETypes.TYPE_MULTIPART_DATA))) { - bufferWriter.writeSlice(this.md.toBuffer()); - } - else { - bufferWriter.writeSlice((0, address_1.fromBase58Check)(this.vdxfd).hash); - } - bufferWriter.writeVarSlice(this.data_vec); - return bufferWriter.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - //yes read twice - this.version = reader.readVarInt(); - this.version = reader.readVarInt(); - this.type = reader.readVarInt(); - if (this.type.eq(new bn_js_1.BN(ETypes.TYPE_MULTIPART_DATA))) { - this.md = new MultiPartDescriptor(); - reader.offset = this.md.fromBuffer(buffer, reader.offset); - } - else { - this.vdxfd = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - } - this.data_vec = reader.readVarSlice(); - return reader.offset; - } - isValid() { - return this.version.gte(EvidenceData.VERSION_FIRST) && - this.version.lte(EvidenceData.VERSION_LAST) && - this.type.gte(new bn_js_1.BN(ETypes.TYPE_FIRST_VALID)) && - this.type.lte(new bn_js_1.BN(ETypes.TYPE_LAST_VALID)); - } - toJson() { - return { - version: this.version.toString(10), - hex: this.toBuffer().toString('hex') - }; - } - static fromJson(data) { - const newEvidenceData = new EvidenceData(); - newEvidenceData.fromBuffer(Buffer.from(data.hex, 'hex')); - return newEvidenceData; - } -} -exports.EvidenceData = EvidenceData; -EvidenceData.VERSION_INVALID = new bn_js_1.BN(0); -EvidenceData.VERSION_FIRST = new bn_js_1.BN(1); -EvidenceData.VERSION_CURRENT = new bn_js_1.BN(1); -EvidenceData.VERSION_LAST = new bn_js_1.BN(1); diff --git a/dist/pbaas/Identity.d.ts b/dist/pbaas/Identity.d.ts deleted file mode 100644 index 8f2a7218..00000000 --- a/dist/pbaas/Identity.d.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { Principal } from './Principal'; -import { IdentityID } from './IdentityID'; -import { SaplingPaymentAddress } from './SaplingPaymentAddress'; -import { ContentMultiMap, ContentMultiMapJson } from './ContentMultiMap'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -import { KeyID } from './KeyID'; -export declare const IDENTITY_VERSION_VAULT: import("bn.js"); -export declare const IDENTITY_VERSION_PBAAS: import("bn.js"); -export declare const IDENITTY_VERSION_INVALID: import("bn.js"); -export declare const IDENTITY_FLAG_REVOKED: import("bn.js"); -export declare const IDENTITY_FLAG_ACTIVECURRENCY: import("bn.js"); -export declare const IDENTITY_FLAG_LOCKED: import("bn.js"); -export declare const IDENTITY_FLAG_TOKENIZED_CONTROL: import("bn.js"); -export declare const IDENTITY_MAX_UNLOCK_DELAY: import("bn.js"); -export declare const IDENTITY_MAX_NAME_LEN: import("bn.js"); -export type Hashes = Map; -export type VerusCLIVerusIDJsonBase = { - contentmap?: { - [key: string]: string; - }; - contentmultimap?: T; - flags?: number; - identityaddress?: string; - minimumsignatures?: number; - name?: string; - parent?: string; - primaryaddresses?: Array; - privateaddress?: string; - recoveryauthority?: string; - revocationauthority?: string; - systemid?: string; - timelock?: number; - version?: number; -}; -export type VerusCLIVerusIDJson = VerusCLIVerusIDJsonBase; -export type VerusIDInitData = { - version?: BigNumber; - flags?: BigNumber; - min_sigs?: BigNumber; - primary_addresses?: Array; - parent?: IdentityID; - system_id?: IdentityID; - name?: string; - content_map?: Hashes; - content_multimap?: ContentMultiMap; - revocation_authority?: IdentityID; - recovery_authority?: IdentityID; - private_addresses?: Array; - unlock_after?: BigNumber; -}; -export declare class Identity extends Principal implements SerializableEntity { - parent: IdentityID; - system_id: IdentityID; - name: string; - content_map: Hashes; - content_multimap: ContentMultiMap; - revocation_authority: IdentityID; - recovery_authority: IdentityID; - private_addresses: Array; - unlock_after: BigNumber; - static VERSION_INVALID: import("bn.js"); - static VERSION_VERUSID: import("bn.js"); - static VERSION_VAULT: import("bn.js"); - static VERSION_PBAAS: import("bn.js"); - static VERSION_CURRENT: import("bn.js"); - static VERSION_FIRSTVALID: import("bn.js"); - static VERSION_LASTVALID: import("bn.js"); - constructor(data?: VerusIDInitData); - protected containsParent(): boolean; - protected containsSystemId(): boolean; - protected containsName(): boolean; - protected containsContentMap(): boolean; - protected containsContentMultiMap(): boolean; - protected containsRevocation(): boolean; - protected containsRecovery(): boolean; - protected containsPrivateAddresses(): boolean; - protected containsUnlockAfter(): boolean; - private getIdentityByteLength; - getByteLength(): number; - clearContentMultiMap(): void; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number, parseVdxfObjects?: boolean): number; - toJson(): VerusCLIVerusIDJson; - getIdentityAddress(): string; - isRevoked(): boolean; - isLocked(): boolean; - hasActiveCurrency(): boolean; - hasTokenizedIdControl(): boolean; - lock(unlockTime: BigNumber): void; - unlock(height?: BigNumber, txExpiryHeight?: BigNumber): void; - revoke(): void; - unrevoke(): void; - setPrimaryAddresses(addresses: Array): void; - setRevocation(iAddr: string): void; - setRecovery(iAddr: string): void; - setPrivateAddress(zAddr: string): void; - upgradeVersion(version?: BigNumber): void; - protected static internalFromJson(json: VerusCLIVerusIDJson, ctor: new (...args: any[]) => T): T; - static fromJson(json: VerusCLIVerusIDJson): Identity; -} diff --git a/dist/pbaas/Identity.js b/dist/pbaas/Identity.js deleted file mode 100644 index a1348af7..00000000 --- a/dist/pbaas/Identity.js +++ /dev/null @@ -1,410 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Identity = exports.IDENTITY_MAX_NAME_LEN = exports.IDENTITY_MAX_UNLOCK_DELAY = exports.IDENTITY_FLAG_TOKENIZED_CONTROL = exports.IDENTITY_FLAG_LOCKED = exports.IDENTITY_FLAG_ACTIVECURRENCY = exports.IDENTITY_FLAG_REVOKED = exports.IDENITTY_VERSION_INVALID = exports.IDENTITY_VERSION_PBAAS = exports.IDENTITY_VERSION_VAULT = void 0; -const varuint_1 = require("../utils/varuint"); -const bufferutils_1 = require("../utils/bufferutils"); -const Principal_1 = require("./Principal"); -const address_1 = require("../utils/address"); -const vdxf_1 = require("../constants/vdxf"); -const bn_js_1 = require("bn.js"); -const IdentityID_1 = require("./IdentityID"); -const SaplingPaymentAddress_1 = require("./SaplingPaymentAddress"); -const ContentMultiMap_1 = require("./ContentMultiMap"); -const KeyID_1 = require("./KeyID"); -exports.IDENTITY_VERSION_VAULT = new bn_js_1.BN(2, 10); -exports.IDENTITY_VERSION_PBAAS = new bn_js_1.BN(3, 10); -exports.IDENITTY_VERSION_INVALID = new bn_js_1.BN(0, 10); -exports.IDENTITY_FLAG_REVOKED = new bn_js_1.BN("8000", 16); // set when this identity is revoked -exports.IDENTITY_FLAG_ACTIVECURRENCY = new bn_js_1.BN("1", 16); // flag that is set when this ID is being used as an active currency name -exports.IDENTITY_FLAG_LOCKED = new bn_js_1.BN("2", 16); // set when this identity is locked -exports.IDENTITY_FLAG_TOKENIZED_CONTROL = new bn_js_1.BN("4", 16); // set when revocation/recovery over this identity can be performed by anyone who controls its token -exports.IDENTITY_MAX_UNLOCK_DELAY = new bn_js_1.BN(60).mul(new bn_js_1.BN(24)).mul(new bn_js_1.BN(22)).mul(new bn_js_1.BN(365)); // 21+ year maximum unlock time for an ID w/1 minute blocks, not adjusted for avg blocktime in first PBaaS -exports.IDENTITY_MAX_NAME_LEN = new bn_js_1.BN(64); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class Identity extends Principal_1.Principal { - constructor(data) { - super(data); - if (data === null || data === void 0 ? void 0 : data.version) - this.version = data.version; - else - this.version = Identity.VERSION_CURRENT; - if (data === null || data === void 0 ? void 0 : data.parent) - this.parent = data.parent; - if (data === null || data === void 0 ? void 0 : data.system_id) - this.system_id = data.system_id; - if (data === null || data === void 0 ? void 0 : data.name) - this.name = data.name; - if (data === null || data === void 0 ? void 0 : data.content_map) - this.content_map = data.content_map; - else - this.content_map = new Map(); - if (data === null || data === void 0 ? void 0 : data.content_multimap) - this.content_multimap = data.content_multimap; - else - this.content_multimap = new ContentMultiMap_1.ContentMultiMap({ kv_content: new Map() }); - if (data === null || data === void 0 ? void 0 : data.revocation_authority) - this.revocation_authority = data.revocation_authority; - if (data === null || data === void 0 ? void 0 : data.recovery_authority) - this.recovery_authority = data.recovery_authority; - if (data === null || data === void 0 ? void 0 : data.private_addresses) - this.private_addresses = data.private_addresses; - if (data === null || data === void 0 ? void 0 : data.unlock_after) - this.unlock_after = data.unlock_after; - } - containsParent() { - return true; - } - containsSystemId() { - return true; - } - containsName() { - return true; - } - containsContentMap() { - return true; - } - containsContentMultiMap() { - return true; - } - containsRevocation() { - return true; - } - containsRecovery() { - return true; - } - containsPrivateAddresses() { - return true; - } - containsUnlockAfter() { - return true; - } - getIdentityByteLength() { - let length = 0; - length += super.getByteLength(); - if (this.containsParent()) - length += this.parent.getByteLength(); - if (this.containsName()) { - const nameLength = Buffer.from(this.name, "utf8").length; - length += varuint_1.default.encodingLength(nameLength); - length += nameLength; - } - if (this.containsContentMultiMap() && this.version.gte(exports.IDENTITY_VERSION_PBAAS)) { - length += this.content_multimap.getByteLength(); - } - if (this.containsContentMap()) { - if (this.version.lt(exports.IDENTITY_VERSION_PBAAS)) { - length += varuint_1.default.encodingLength(this.content_map.size); - for (const m of this.content_map.entries()) { - length += vdxf_1.HASH160_BYTE_LENGTH; //uint160 key - length += vdxf_1.HASH256_BYTE_LENGTH; - } - } - length += varuint_1.default.encodingLength(this.content_map.size); - for (const m of this.content_map.entries()) { - length += vdxf_1.HASH160_BYTE_LENGTH; //uint160 key - length += vdxf_1.HASH256_BYTE_LENGTH; //uint256 hash - } - } - if (this.containsRevocation()) - length += this.revocation_authority.getByteLength(); //uint160 revocation authority - if (this.containsRecovery()) - length += this.recovery_authority.getByteLength(); //uint160 recovery authority - if (this.containsPrivateAddresses()) { - length += varuint_1.default.encodingLength(this.private_addresses ? this.private_addresses.length : 0); - if (this.private_addresses) { - for (const n of this.private_addresses) { - length += n.getByteLength(); - } - } - } - // post PBAAS - if (this.version.gte(exports.IDENTITY_VERSION_VAULT)) { - if (this.containsSystemId()) - length += this.system_id.getByteLength(); //uint160 systemid - if (this.containsUnlockAfter()) - length += 4; //uint32 unlockafter - } - return length; - } - getByteLength() { - return this.getIdentityByteLength(); - } - clearContentMultiMap() { - this.content_multimap = new ContentMultiMap_1.ContentMultiMap({ kv_content: new Map() }); - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getIdentityByteLength())); - writer.writeSlice(super.toBuffer()); - if (this.containsParent()) - writer.writeSlice(this.parent.toBuffer()); - if (this.containsName()) - writer.writeVarSlice(Buffer.from(this.name, "utf8")); - //contentmultimap - if (this.containsContentMultiMap() && this.version.gte(exports.IDENTITY_VERSION_PBAAS)) { - writer.writeSlice(this.content_multimap.toBuffer()); - } - if (this.containsContentMap()) { - //contentmap - if (this.version.lt(exports.IDENTITY_VERSION_PBAAS)) { - writer.writeCompactSize(this.content_map.size); - for (const [key, value] of this.content_map.entries()) { - writer.writeSlice((0, address_1.fromBase58Check)(key).hash); - writer.writeSlice(value); - } - } - //contentmap2 - writer.writeCompactSize(this.content_map.size); - for (const [key, value] of this.content_map.entries()) { - writer.writeSlice((0, address_1.fromBase58Check)(key).hash); - writer.writeSlice(value); - } - } - if (this.containsRevocation()) - writer.writeSlice(this.revocation_authority.toBuffer()); - if (this.containsRecovery()) - writer.writeSlice(this.recovery_authority.toBuffer()); - if (this.containsPrivateAddresses()) { - // privateaddresses - writer.writeCompactSize(this.private_addresses ? this.private_addresses.length : 0); - if (this.private_addresses) { - for (const n of this.private_addresses) { - writer.writeSlice(n.toBuffer()); - } - } - } - // post PBAAS - if (this.version.gte(exports.IDENTITY_VERSION_VAULT)) { - if (this.containsSystemId()) - writer.writeSlice(this.system_id.toBuffer()); - if (this.containsUnlockAfter()) - writer.writeUInt32(this.unlock_after.toNumber()); - } - return writer.buffer; - } - fromBuffer(buffer, offset = 0, parseVdxfObjects = false) { - const reader = new BufferReader(buffer, offset); - reader.offset = super.fromBuffer(reader.buffer, reader.offset); - const _parent = new IdentityID_1.IdentityID(); - if (this.containsParent()) { - reader.offset = _parent.fromBuffer(reader.buffer, reader.offset); - this.parent = _parent; - } - if (this.containsName()) - this.name = Buffer.from(reader.readVarSlice()).toString('utf8'); - if (this.containsContentMultiMap()) { - //contentmultimap - if (this.version.gte(exports.IDENTITY_VERSION_PBAAS)) { - const multimap = new ContentMultiMap_1.ContentMultiMap(); - reader.offset = multimap.fromBuffer(reader.buffer, reader.offset, parseVdxfObjects); - this.content_multimap = multimap; - } - } - if (this.containsContentMap()) { - // contentmap - if (this.version.lt(exports.IDENTITY_VERSION_PBAAS)) { - const contentMapSize = reader.readVarInt(); - this.content_map = new Map(); - for (var i = 0; i < contentMapSize.toNumber(); i++) { - const contentMapKey = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - this.content_map.set(contentMapKey, reader.readSlice(32)); - } - } - const contentMapSize = reader.readVarInt(); - this.content_map = new Map(); - for (var i = 0; i < contentMapSize.toNumber(); i++) { - const contentMapKey = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - this.content_map.set(contentMapKey, reader.readSlice(32)); - } - } - if (this.containsRevocation()) { - const _revocation = new IdentityID_1.IdentityID(); - reader.offset = _revocation.fromBuffer(reader.buffer, reader.offset); - this.revocation_authority = _revocation; - } - if (this.containsRecovery()) { - const _recovery = new IdentityID_1.IdentityID(); - reader.offset = _recovery.fromBuffer(reader.buffer, reader.offset); - this.recovery_authority = _recovery; - } - if (this.containsPrivateAddresses()) { - const numPrivateAddresses = reader.readVarInt(); - if (numPrivateAddresses.gt(new bn_js_1.BN(0))) - this.private_addresses = []; - for (var i = 0; i < numPrivateAddresses.toNumber(); i++) { - const saplingAddr = new SaplingPaymentAddress_1.SaplingPaymentAddress(); - reader.offset = saplingAddr.fromBuffer(reader.buffer, reader.offset); - this.private_addresses.push(saplingAddr); - } - } - if (this.version.gte(exports.IDENTITY_VERSION_VAULT)) { - if (this.containsSystemId()) { - const _system = new IdentityID_1.IdentityID(); - reader.offset = _system.fromBuffer(reader.buffer, reader.offset); - this.system_id = _system; - } - if (this.containsUnlockAfter()) { - this.unlock_after = new bn_js_1.BN(reader.readUInt32(), 10); - } - } - else { - this.system_id = _parent; - this.unlock_after = new bn_js_1.BN(0); - } - return reader.offset; - } - toJson() { - const contentmap = {}; - if (this.containsContentMap()) { - for (const [key, value] of this.content_map.entries()) { - const valueCopy = Buffer.from(value); - contentmap[(0, address_1.fromBase58Check)(key).hash.reverse().toString('hex')] = valueCopy.reverse().toString('hex'); - } - } - const ret = { - contentmap: this.containsContentMap() ? contentmap : undefined, - contentmultimap: this.containsContentMultiMap() ? this.content_multimap.toJson() : undefined, - flags: this.containsFlags() ? this.flags.toNumber() : undefined, - minimumsignatures: this.containsMinSigs() ? this.min_sigs.toNumber() : undefined, - name: this.name, - parent: this.containsParent() ? this.parent.toAddress() : undefined, - primaryaddresses: this.containsPrimaryAddresses() ? this.primary_addresses.map(x => x.toAddress()) : undefined, - recoveryauthority: this.containsRecovery() ? this.recovery_authority.toAddress() : undefined, - revocationauthority: this.containsRevocation() ? this.revocation_authority.toAddress() : undefined, - systemid: this.containsSystemId() ? this.system_id.toAddress() : undefined, - timelock: this.containsUnlockAfter() ? this.unlock_after.toNumber() : undefined, - version: this.containsVersion() ? this.version.toNumber() : undefined, - identityaddress: this.containsParent() ? this.getIdentityAddress() : undefined - }; - if (this.private_addresses != null && this.private_addresses.length > 0) { - ret.privateaddress = this.private_addresses[0].toAddressString(); - } - for (const key in ret) { - if (ret[key] === undefined) - delete ret[key]; - } - return ret; - } - getIdentityAddress() { - return (0, address_1.nameAndParentAddrToIAddr)(this.name, this.parent.toAddress()); - } - isRevoked() { - return !!(this.flags.and(exports.IDENTITY_FLAG_REVOKED).toNumber()); - } - isLocked() { - return !!(this.flags.and(exports.IDENTITY_FLAG_LOCKED).toNumber()); - } - hasActiveCurrency() { - return !!(this.flags.and(exports.IDENTITY_FLAG_ACTIVECURRENCY).toNumber()); - } - hasTokenizedIdControl() { - return !!(this.flags.and(exports.IDENTITY_FLAG_TOKENIZED_CONTROL).toNumber()); - } - lock(unlockTime) { - let unlockAfter = unlockTime; - if (unlockTime.lte(new bn_js_1.BN(0))) { - unlockAfter = new bn_js_1.BN(1); - } - else if (unlockTime.gt(exports.IDENTITY_MAX_UNLOCK_DELAY)) { - unlockAfter = exports.IDENTITY_MAX_UNLOCK_DELAY; - } - this.flags = this.flags.or(exports.IDENTITY_FLAG_LOCKED); - this.unlock_after = unlockAfter; - } - unlock(height = new bn_js_1.BN(0), txExpiryHeight = new bn_js_1.BN(0)) { - if (this.isRevoked()) { - this.flags = this.flags.and(exports.IDENTITY_FLAG_LOCKED.notn(16)); - this.unlock_after = new bn_js_1.BN(0); - } - else if (this.isLocked()) { - this.flags = this.flags.and(exports.IDENTITY_FLAG_LOCKED.notn(16)); - this.unlock_after = this.unlock_after.add(txExpiryHeight); - } - else if (height.gt(this.unlock_after)) { - this.unlock_after = new bn_js_1.BN(0); - } - if (this.unlock_after.gt((txExpiryHeight.add(exports.IDENTITY_MAX_UNLOCK_DELAY)))) { - this.unlock_after = txExpiryHeight.add(exports.IDENTITY_MAX_UNLOCK_DELAY); - } - } - revoke() { - this.flags = this.flags.or(exports.IDENTITY_FLAG_REVOKED); - this.unlock(); - } - unrevoke() { - this.flags = this.flags.and(exports.IDENTITY_FLAG_REVOKED.notn(16)); - } - setPrimaryAddresses(addresses) { - const primaryAddresses = []; - for (const str of addresses) { - const addr = KeyID_1.KeyID.fromAddress(str); - if (addr.version !== vdxf_1.R_ADDR_VERSION) - throw new Error("Primary addresses must be r-addresses."); - else { - primaryAddresses.push(addr); - } - } - this.primary_addresses = primaryAddresses; - } - setRevocation(iAddr) { - this.revocation_authority = IdentityID_1.IdentityID.fromAddress(iAddr); - } - setRecovery(iAddr) { - this.recovery_authority = IdentityID_1.IdentityID.fromAddress(iAddr); - } - setPrivateAddress(zAddr) { - this.private_addresses = [SaplingPaymentAddress_1.SaplingPaymentAddress.fromAddressString(zAddr)]; - } - upgradeVersion(version = Identity.VERSION_CURRENT) { - if (version.eq(this.version)) - return; - if (version.lt(this.version)) - throw new Error("Cannot downgrade version"); - if (version.lt(Identity.VERSION_PBAAS)) - throw new Error("Cannot upgrade to a version less than PBAAS"); - if (version.gt(Identity.VERSION_CURRENT)) - throw new Error("Cannot upgrade to a version greater than the current known version"); - if (this.version.lt(Identity.VERSION_VAULT)) { - this.system_id = this.parent ? this.parent : IdentityID_1.IdentityID.fromAddress(this.getIdentityAddress()); - this.version = Identity.VERSION_VAULT; - } - if (this.version.lt(Identity.VERSION_PBAAS)) { - this.version = Identity.VERSION_PBAAS; - } - } - static internalFromJson(json, ctor) { - const contentmap = new Map(); - if (json.contentmap) { - for (const key in json.contentmap) { - const reverseKey = Buffer.from(key, 'hex').reverse(); - const iAddrKey = (0, address_1.toBase58Check)(reverseKey, vdxf_1.I_ADDR_VERSION); - contentmap.set(iAddrKey, Buffer.from(json.contentmap[key], 'hex').reverse()); - } - } - return new ctor({ - version: json.version != null ? new bn_js_1.BN(json.version, 10) : undefined, - flags: json.flags != null ? new bn_js_1.BN(json.flags, 10) : undefined, - min_sigs: json.minimumsignatures ? new bn_js_1.BN(json.minimumsignatures, 10) : undefined, - primary_addresses: json.primaryaddresses ? json.primaryaddresses.map(x => KeyID_1.KeyID.fromAddress(x)) : undefined, - parent: json.parent ? IdentityID_1.IdentityID.fromAddress(json.parent) : undefined, - system_id: json.systemid ? IdentityID_1.IdentityID.fromAddress(json.systemid) : undefined, - name: json.name, - content_map: json.contentmap ? contentmap : undefined, - content_multimap: json.contentmultimap ? ContentMultiMap_1.ContentMultiMap.fromJson(json.contentmultimap) : undefined, - revocation_authority: json.revocationauthority ? IdentityID_1.IdentityID.fromAddress(json.revocationauthority) : undefined, - recovery_authority: json.recoveryauthority ? IdentityID_1.IdentityID.fromAddress(json.recoveryauthority) : undefined, - private_addresses: json.privateaddress == null ? [] : [SaplingPaymentAddress_1.SaplingPaymentAddress.fromAddressString(json.privateaddress)], - unlock_after: json.timelock != null ? new bn_js_1.BN(json.timelock, 10) : undefined - }); - } - static fromJson(json) { - return Identity.internalFromJson(json, Identity); - } -} -exports.Identity = Identity; -Identity.VERSION_INVALID = new bn_js_1.BN(0); -Identity.VERSION_VERUSID = new bn_js_1.BN(1); -Identity.VERSION_VAULT = new bn_js_1.BN(2); -Identity.VERSION_PBAAS = new bn_js_1.BN(3); -Identity.VERSION_CURRENT = Identity.VERSION_PBAAS; -Identity.VERSION_FIRSTVALID = new bn_js_1.BN(1); -Identity.VERSION_LASTVALID = new bn_js_1.BN(3); diff --git a/dist/pbaas/IdentityID.d.ts b/dist/pbaas/IdentityID.d.ts deleted file mode 100644 index 4217f987..00000000 --- a/dist/pbaas/IdentityID.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { SerializableEntity } from '../utils/types/SerializableEntity'; -import { Hash160SerEnt } from '../vdxf/classes/Hash160'; -export declare class IdentityID extends Hash160SerEnt implements SerializableEntity { - constructor(hash?: Buffer); - fromBuffer(buffer: Buffer, offset?: number): number; - static fromAddress(address: string, varlength?: boolean): Hash160SerEnt; -} diff --git a/dist/pbaas/IdentityID.js b/dist/pbaas/IdentityID.js deleted file mode 100644 index c1df61e4..00000000 --- a/dist/pbaas/IdentityID.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.IdentityID = void 0; -const vdxf_1 = require("../constants/vdxf"); -const Hash160_1 = require("../vdxf/classes/Hash160"); -class IdentityID extends Hash160_1.Hash160SerEnt { - constructor(hash = Buffer.alloc(0)) { - super(hash, vdxf_1.I_ADDR_VERSION, false); - } - fromBuffer(buffer, offset = 0) { - const ret = super.fromBuffer(buffer, offset, false); - this.version = vdxf_1.I_ADDR_VERSION; - return ret; - } - static fromAddress(address, varlength) { - return new IdentityID(Hash160_1.Hash160SerEnt.fromAddress(address, false).hash); - } -} -exports.IdentityID = IdentityID; diff --git a/dist/pbaas/IdentityMultimapRef.d.ts b/dist/pbaas/IdentityMultimapRef.d.ts deleted file mode 100644 index 9b806895..00000000 --- a/dist/pbaas/IdentityMultimapRef.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -export interface IdentityMultimapRefJson { - version: number; - flags: number; - vdxfkey: string; - identityid?: string; - startheight: number; - endheight: number; - datahash?: string; - systemid?: string; -} -export declare class IdentityMultimapRef implements SerializableEntity { - version: BigNumber; - flags: BigNumber; - id_ID: string; - key: string; - height_start: BigNumber; - height_end: BigNumber; - data_hash: Buffer; - system_id: string; - static FLAG_NO_DELETION: import("bn.js"); - static FLAG_HAS_DATAHASH: import("bn.js"); - static FLAG_HAS_SYSTEM: import("bn.js"); - static FIRST_VERSION: import("bn.js"); - static LAST_VERSION: import("bn.js"); - static CURRENT_VERSION: import("bn.js"); - constructor(data?: any); - setFlags(): void; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - isValid(): boolean; - hasDataHash(): boolean; - hasSystemID(): boolean; - toJson(): IdentityMultimapRefJson; - static fromJson(data: IdentityMultimapRefJson): IdentityMultimapRef; -} diff --git a/dist/pbaas/IdentityMultimapRef.js b/dist/pbaas/IdentityMultimapRef.js deleted file mode 100644 index ac6dd1eb..00000000 --- a/dist/pbaas/IdentityMultimapRef.js +++ /dev/null @@ -1,129 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.IdentityMultimapRef = void 0; -const varint_1 = require("../utils/varint"); -const address_1 = require("../utils/address"); -const bufferutils_1 = require("../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const vdxf_1 = require("../constants/vdxf"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class IdentityMultimapRef { - constructor(data) { - if (data) { - this.version = data.version || IdentityMultimapRef.CURRENT_VERSION; - this.flags = data.flags || new bn_js_1.BN(0); - this.id_ID = data.id_ID || ""; - this.key = data.key || ""; - this.height_start = data.height_start || new bn_js_1.BN(0); - this.height_end = data.height_end || new bn_js_1.BN(0); - this.data_hash = data.data_hash || Buffer.alloc(0); - this.system_id = data.system_id || ""; - } - } - setFlags() { - this.flags = this.flags.and(IdentityMultimapRef.FLAG_NO_DELETION); - if (this.data_hash && this.data_hash.length > 0) { - this.flags = this.flags.or(IdentityMultimapRef.FLAG_HAS_DATAHASH); - } - if (this.system_id && this.system_id.length > 0) { - this.flags = this.flags.or(IdentityMultimapRef.FLAG_HAS_SYSTEM); - } - } - getByteLength() { - let byteLength = 0; - this.setFlags(); - byteLength += varint_1.default.encodingLength(this.version); - byteLength += varint_1.default.encodingLength(this.flags); - byteLength += vdxf_1.HASH160_BYTE_LENGTH; // id_ID - byteLength += vdxf_1.HASH160_BYTE_LENGTH; // vdxfkey - byteLength += varint_1.default.encodingLength(this.height_start); // height_start uint32 - byteLength += varint_1.default.encodingLength(this.height_end); // height_end uint32 - if (this.flags.and(IdentityMultimapRef.FLAG_HAS_DATAHASH).gt(new bn_js_1.BN(0))) { - byteLength += vdxf_1.HASH256_BYTE_LENGTH; - } - if (this.flags.and(IdentityMultimapRef.FLAG_HAS_SYSTEM).gt(new bn_js_1.BN(0))) { - byteLength += vdxf_1.HASH160_BYTE_LENGTH; - } - return byteLength; - } - toBuffer() { - const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); - bufferWriter.writeVarInt(this.version); - bufferWriter.writeVarInt(this.flags); - bufferWriter.writeSlice((0, address_1.fromBase58Check)(this.id_ID).hash); - bufferWriter.writeSlice((0, address_1.fromBase58Check)(this.key).hash); - bufferWriter.writeVarInt(this.height_start); - bufferWriter.writeVarInt(this.height_end); - if (this.flags.and(IdentityMultimapRef.FLAG_HAS_DATAHASH).gt(new bn_js_1.BN(0))) { - bufferWriter.writeSlice(this.data_hash); - } - if (this.flags.and(IdentityMultimapRef.FLAG_HAS_SYSTEM).gt(new bn_js_1.BN(0))) { - bufferWriter.writeSlice((0, address_1.fromBase58Check)(this.system_id).hash); - } - return bufferWriter.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.version = reader.readVarInt(); - this.flags = reader.readVarInt(); - this.id_ID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - this.key = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - this.height_start = reader.readVarInt(); - this.height_end = reader.readVarInt(); - if (this.flags.and(IdentityMultimapRef.FLAG_HAS_DATAHASH).gt(new bn_js_1.BN(0))) { - this.data_hash = reader.readSlice(32); - } - if (this.flags.and(IdentityMultimapRef.FLAG_HAS_SYSTEM).gt(new bn_js_1.BN(0))) { - this.system_id = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - } - return reader.offset; - } - isValid() { - return this.version.gte(IdentityMultimapRef.FIRST_VERSION) && - this.version.lte(IdentityMultimapRef.LAST_VERSION) && - this.flags.and(IdentityMultimapRef.FLAG_HAS_DATAHASH.add(IdentityMultimapRef.FLAG_HAS_SYSTEM)).eq(IdentityMultimapRef.FLAG_HAS_DATAHASH.add(IdentityMultimapRef.FLAG_HAS_SYSTEM)) && - !(!this.id_ID || this.id_ID.length === 0) && !(!this.key || this.key.length === 0); - } - hasDataHash() { - return this.flags.and(IdentityMultimapRef.FLAG_HAS_DATAHASH).gt(new bn_js_1.BN(0)); - } - hasSystemID() { - return this.flags.and(IdentityMultimapRef.FLAG_HAS_SYSTEM).gt(new bn_js_1.BN(0)); - } - toJson() { - let retval = { - version: this.version.toNumber(), - flags: this.flags.toNumber(), - vdxfkey: this.key, - startheight: this.height_start.toNumber(), - endheight: this.height_end.toNumber(), - identityid: this.id_ID - }; - if (this.hasDataHash()) { - retval.datahash = Buffer.from(this.data_hash).reverse().toString('hex'); - } - if (this.hasSystemID()) { - retval.systemid = this.system_id; - } - return retval; - } - static fromJson(data) { - return new IdentityMultimapRef({ - version: new bn_js_1.BN(data.version), - flags: new bn_js_1.BN(data.flags), - key: data.vdxfkey, - id_ID: data.identityid, - height_start: new bn_js_1.BN(data.startheight), - height_end: new bn_js_1.BN(data.endheight), - data_hash: Buffer.from(data.datahash, 'hex').reverse(), - system_id: data.systemid - }); - } -} -exports.IdentityMultimapRef = IdentityMultimapRef; -IdentityMultimapRef.FLAG_NO_DELETION = new bn_js_1.BN(1); -IdentityMultimapRef.FLAG_HAS_DATAHASH = new bn_js_1.BN(2); -IdentityMultimapRef.FLAG_HAS_SYSTEM = new bn_js_1.BN(4); -IdentityMultimapRef.FIRST_VERSION = new bn_js_1.BN(1); -IdentityMultimapRef.LAST_VERSION = new bn_js_1.BN(1); -IdentityMultimapRef.CURRENT_VERSION = new bn_js_1.BN(1); diff --git a/dist/pbaas/KeyID.d.ts b/dist/pbaas/KeyID.d.ts deleted file mode 100644 index 1ed14942..00000000 --- a/dist/pbaas/KeyID.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { SerializableEntity } from '../utils/types/SerializableEntity'; -import { Hash160SerEnt } from '../vdxf/classes/Hash160'; -export declare class KeyID extends Hash160SerEnt implements SerializableEntity { - constructor(hash?: Buffer); - fromBuffer(buffer: Buffer, offset?: number): number; - static fromAddress(address: string): Hash160SerEnt; -} diff --git a/dist/pbaas/KeyID.js b/dist/pbaas/KeyID.js deleted file mode 100644 index fdded3db..00000000 --- a/dist/pbaas/KeyID.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.KeyID = void 0; -const vdxf_1 = require("../constants/vdxf"); -const Hash160_1 = require("../vdxf/classes/Hash160"); -class KeyID extends Hash160_1.Hash160SerEnt { - constructor(hash = Buffer.alloc(0)) { - super(hash, vdxf_1.R_ADDR_VERSION, false); - } - fromBuffer(buffer, offset = 0) { - const ret = super.fromBuffer(buffer, offset, false); - this.version = vdxf_1.R_ADDR_VERSION; - return ret; - } - static fromAddress(address) { - return new KeyID(Hash160_1.Hash160SerEnt.fromAddress(address, false).hash); - } -} -exports.KeyID = KeyID; diff --git a/dist/pbaas/MMR.d.ts b/dist/pbaas/MMR.d.ts deleted file mode 100644 index a2be229b..00000000 --- a/dist/pbaas/MMR.d.ts +++ /dev/null @@ -1,70 +0,0 @@ -export declare class MMRLayer { - private vSize; - private nodes; - constructor(); - size(): number; - getIndex(idx: number): NODE_TYPE; - push_back(node: NODE_TYPE): void; - clear(): void; -} -export declare class MMRNode { - hash: Buffer; - constructor(Hash?: Buffer); - digest(input: any): any; - hashObj(obj: Buffer, onbjR?: Buffer): Buffer; - createParentNode(nRight: MMRNode): MMRNode; - getProofHash(opposite: MMRNode): Array; - getLeafHash(): Array; - getExtraHashCount(): number; -} -export declare class MerkleMountainRange { - layer0: MMRLayer; - vSize: number; - upperNodes: Array>; - _leafLength: number; - constructor(); - getbyteLength(): number; - toBuffer(): Buffer; - fromBuffer(bufferIn: Buffer): MerkleMountainRange; - add(leaf: MMRNode): number; - size(): number; - height(): number; - getNode(Height: any, Index: any): MMRNode; -} -export declare class MMRBranch { - branchType?: number; - nIndex?: number; - nSize?: number; - branch?: Array; - constructor(branchType?: number, nIndex?: number, nSize?: number, branch?: Array); - dataByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - digest(input: any): any; - safeCheck(hash: Buffer): Buffer; -} -export declare class MMRProof { - proofSequence: Array; - setProof(proof: MMRBranch): void; - dataByteLength(): number; - toBuffer(): Buffer; - fromDataBuffer(buffer: Buffer, offset?: number): number; -} -export declare class MerkleMountainView { - mmr: MerkleMountainRange; - sizes: Array; - peaks: Array; - peakMerkle: Array>; - constructor(mountainRange: MerkleMountainRange, viewSize?: number); - size(): number; - calcPeaks(force?: boolean): void; - resize(newSize: number): number; - maxsize(): number; - getPeaks(): Array; - getRoot(): Buffer; - getRootNode(): MMRNode; - getHash(index: number): Buffer; - getBranchType(): number; - getProof(retProof: MMRProof, pos: number): boolean; - getProofBits(pos: number, mmvSize: number): void; -} diff --git a/dist/pbaas/MMR.js b/dist/pbaas/MMR.js deleted file mode 100644 index b5d12cee..00000000 --- a/dist/pbaas/MMR.js +++ /dev/null @@ -1,460 +0,0 @@ -"use strict"; -// Licence MIT -// Adapted to Verus Blake2b MMR. -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MerkleMountainView = exports.MMRProof = exports.MMRBranch = exports.MerkleMountainRange = exports.MMRNode = exports.MMRLayer = void 0; -var blake2b = require('blake2b'); -const bn_js_1 = require("bn.js"); -const varuint_1 = require("../utils/varuint"); -const bufferutils_1 = require("../utils/bufferutils"); -const mmr_1 = require("../utils/mmr"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -const BRANCH_MMRBLAKE_NODE = 2; -class MMRLayer { - constructor() { this.vSize = 0; } - size() { - return this.vSize; - } - getIndex(idx) { - if (idx < this.vSize) { - return this.nodes[idx]; - } - else { - throw new Error("CChunkedLayer [] index out of range"); - } - } - push_back(node) { - this.vSize++; - if (!this.nodes) { - this.nodes = new Array(); - } - this.nodes.push(node); - } - clear() { - this.nodes = null; - this.vSize = 0; - } -} -exports.MMRLayer = MMRLayer; -; -class MMRNode { - constructor(Hash) { - if (Hash) { - this.hash = Hash; - } - } - digest(input) { - var out = Buffer.allocUnsafe(32); - return blake2b(out.length, null, null, Buffer.from("VerusDefaultHash")).update(input).digest(out); - } - hashObj(obj, onbjR) { - if (!onbjR) - return this.digest(obj); - else - return this.digest(Buffer.concat([obj, onbjR])); - } - // add a right to this left and create a parent node - createParentNode(nRight) { - return new MMRNode(this.digest(Buffer.concat([this.hash, nRight.hash]))); - } - getProofHash(opposite) { - return [this.hash]; - } - // leaf nodes that track additional data, such as block power, may need a hash added to the path - // at the very beginning - getLeafHash() { return []; } - getExtraHashCount() { - // how many extra proof hashes per layer are added with this node - return 0; - } -} -exports.MMRNode = MMRNode; -; -//template , typename LAYER0_TYPE=LAYER_TYPE> -class MerkleMountainRange { - constructor() { - this.layer0 = new MMRLayer(); - this.vSize = 0; - this.upperNodes = new Array(); - this._leafLength = 0; - } - getbyteLength() { - return 1; - } - toBuffer() { - return Buffer.from([]); - } - fromBuffer(bufferIn) { - return new MerkleMountainRange(); - } - add(leaf) { - this.layer0.push_back(leaf); - let height = 0; - let layerSize; - for (layerSize = this.layer0.size(); height <= this.upperNodes.length && layerSize > 1; height++) { - let newSizeAbove = layerSize >> 1; - // expand vector of vectors if we are adding a new layer - if (height == this.upperNodes.length) { - this.upperNodes.push(new MMRLayer()); - } - let curSizeAbove = this.upperNodes[height].size(); - // if we need to add an element to the vector above us, do it - if (!(layerSize & 1) && newSizeAbove > curSizeAbove) { - let idx = layerSize - 2; - if (height > 0) { - this.upperNodes[height].push_back(this.upperNodes[height - 1].getIndex(idx).createParentNode(this.upperNodes[height - 1].getIndex(idx + 1))); - } - else { - this.upperNodes[height].push_back(this.layer0.getIndex(idx).createParentNode(this.layer0.getIndex(idx + 1))); - } - } - layerSize = newSizeAbove; - } - // return new index - return this.layer0.size() - 1; - } - size() { - return this.layer0.size(); - } - height() { - return this.layer0.size() > 0 ? this.upperNodes.length + 1 : 0; - } - getNode(Height, Index) { - let layers = this.height(); - if (Height < layers) { - if (Height) { - if (Index < this.upperNodes[Height - 1].size()) { - return this.upperNodes[Height - 1].getIndex(Index); - } - } - else { - if (Index < this.layer0.size()) { - return this.layer0.getIndex(Index); - } - } - } - return null; - } -} -exports.MerkleMountainRange = MerkleMountainRange; -class MMRBranch { - constructor(branchType = BRANCH_MMRBLAKE_NODE, nIndex = 0, nSize = 0, branch = new Array()) { - this.branchType = branchType; - this.nIndex = nIndex; - this.nSize = nSize; - this.branch = branch; - } - dataByteLength() { - let length = 0; - length += varuint_1.default.encodingLength(this.branchType); - length += varuint_1.default.encodingLength(this.nIndex); - length += varuint_1.default.encodingLength(this.nSize); - length += varuint_1.default.encodingLength(this.branch.length); - for (let i = 0; i < this.branch.length; i++) { - length += this.branch[i].length; - } - return length; - } - toBuffer() { - const bufferWriter = new BufferWriter(Buffer.alloc(this.dataByteLength())); - bufferWriter.writeCompactSize(this.branchType); - bufferWriter.writeCompactSize(this.nIndex); - bufferWriter.writeCompactSize(this.nSize); - bufferWriter.writeCompactSize(this.branch.length); - for (let i = 0; i < this.branch.length; i++) { - bufferWriter.writeSlice(this.branch[i]); - } - return bufferWriter.buffer; - } - fromBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - this.branchType = reader.readCompactSize(); - this.nIndex = reader.readCompactSize(); - this.nSize = reader.readCompactSize(); - let branchLength = reader.readCompactSize(); - this.branch = new Array(); - for (let i = 0; i < branchLength; i++) { - this.branch.push(reader.readSlice(32)); - } - return reader.offset; - } - digest(input) { - var out = Buffer.allocUnsafe(32); - return blake2b(out.length, null, null, Buffer.from("VerusDefaultHash")).update(input).digest(out); - } - safeCheck(hash) { - let index = (0, mmr_1.GetMMRProofIndex)(this.nIndex, this.nSize, 0); - let joined = Buffer.allocUnsafe(64); - let hashInProgress = hash; - for (let i = 0; i < this.branch.length; i++) { - if (index.and(new bn_js_1.BN(1)).gt(new bn_js_1.BN(0))) { - if (this.branch[i] === hashInProgress) - throw new Error("Value can be equal to node but never on the right"); - joined = Buffer.concat([this.branch[i], hashInProgress]); - } - else { - joined = Buffer.concat([hashInProgress, this.branch[i]]); - } - hashInProgress = this.digest(joined); - index = index.shrn(1); - } - return hashInProgress; - } -} -exports.MMRBranch = MMRBranch; -class MMRProof { - setProof(proof) { - if (!this.proofSequence) { - this.proofSequence = new Array(); - } - this.proofSequence.push(proof); - } - dataByteLength() { - let length = 0; - length += varuint_1.default.encodingLength(this.proofSequence.length); - for (let i = 0; i < this.proofSequence.length; i++) { - length += this.proofSequence[i].dataByteLength(); - } - return length; - } - toBuffer() { - const bufferWriter = new BufferWriter(Buffer.alloc(this.dataByteLength())); - bufferWriter.writeCompactSize(this.proofSequence.length); - for (let i = 0; i < this.proofSequence.length; i++) { - bufferWriter.writeSlice(this.proofSequence[i].toBuffer()); - } - return bufferWriter.buffer; - } - fromDataBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - let proofSequenceLength = reader.readCompactSize(); - this.proofSequence = new Array(); - for (let i = 0; i < proofSequenceLength; i++) { - let proof = new MMRBranch(); - reader.offset = proof.fromBuffer(reader.buffer, reader.offset); - this.setProof(proof); - } - return reader.offset; - } -} -exports.MMRProof = MMRProof; -//template , typename LAYER0_TYPE=LAYER_TYPE, typename HASHALGOWRITER=CBLAKE2bWriter> -class MerkleMountainView { - constructor(mountainRange, viewSize = 0) { - this.mmr = mountainRange; - let maxSize = this.mmr.size(); - if (viewSize > maxSize || viewSize == 0) { - viewSize = maxSize; - } - this.sizes = new Array(); - this.sizes.push(viewSize); - for (viewSize >>= 1; viewSize; viewSize >>= 1) { - this.sizes.push(viewSize); - } - this.peakMerkle = new Array(); - this.peaks = new Array(); - } - // how many elements are stored in this view - size() { - // zero if empty or the size of the zeroeth layer - return this.sizes.length == 0 ? 0 : this.sizes[0]; - } - calcPeaks(force = false) { - // if we don't yet have calculated peaks, calculate them - if (force || (this.peaks.length == 0 && this.size() != 0)) { - // reset the peak merkle tree, in case this is forced - this.peaks = new Array; - this.peakMerkle = new Array; - for (let ht = 0; ht < this.sizes.length; ht++) { - // if we're at the top or the layer above us is smaller than 1/2 the size of this layer, rounded up, we are a peak - if (ht == (this.sizes.length - 1) || this.sizes[ht + 1] < ((this.sizes[ht] + 1) >> 1)) { - this.peaks.splice(0, 0, this.mmr.getNode(ht, this.sizes[ht] - 1)); - } - } - } - } - resize(newSize) { - if (newSize != this.size()) { - this.sizes = new Array; - this.peaks = new Array; - this.peakMerkle = new Array; - let maxSize = this.mmr.size(); - if (newSize > maxSize) { - newSize = maxSize; - } - this.sizes.push(newSize); - newSize >>= 1; - while (newSize) { - this.sizes.push(newSize); - newSize >>= 1; - } - } - return this.size(); - } - maxsize() { - return this.mmr.size() - 1; - } - getPeaks() { - this.calcPeaks(); - return this.peaks; - } - getRoot() { - let rootHash = Buffer.allocUnsafe(32); - if (this.size() > 0 && this.peakMerkle.length == 0) { - // get peaks and hash to a root - this.calcPeaks(); - let layerNum = 0, layerSize = this.peaks.length; - // with an odd number of elements below, the edge passes through - for (let passThrough = !!(layerSize & 1); layerNum == 0 || layerSize > 1; passThrough = !!(layerSize & 1), layerNum++) { - this.peakMerkle.push(Array()); - let i; - let layerIndex = layerNum ? layerNum - 1 : 0; // layerNum is base 1 - for (i = 0; i < (layerSize >> 1); i++) { - if (layerNum > 0) { - this.peakMerkle[this.peakMerkle.length - 1].push(this.peakMerkle[layerIndex][i << 1].createParentNode(this.peakMerkle[layerIndex][(i << 1) + 1])); - } - else { - this.peakMerkle[this.peakMerkle.length - 1].push(this.peaks[i << 1].createParentNode(this.peaks[(i << 1) + 1])); - } - } - if (passThrough) { - if (layerNum > 0) { - // pass the end of the prior layer through - this.peakMerkle[this.peakMerkle.length - 1].push(this.peakMerkle[layerIndex][this.peakMerkle[layerIndex].length - 1]); - } - else { - this.peakMerkle[this.peakMerkle.length - 1].push(this.peaks[this.peaks.length - 1]); - } - } - // each entry in the next layer should be either combined two of the prior layer, or a duplicate of the prior layer's end - layerSize = this.peakMerkle[this.peakMerkle.length - 1].length; - } - rootHash = this.peakMerkle[this.peakMerkle.length - 1][0].hash; - } - else if (this.peakMerkle.length > 0) { - rootHash = this.peakMerkle[this.peakMerkle.length - 1][0].hash; - } - return rootHash; - } - getRootNode() { - // ensure merkle tree is calculated - let root = this.getRoot(); - if (root.length > 0) { - return this.peakMerkle[this.peakMerkle.length - 1][0]; - } - else { - return null; - } - } - // return hash of the element at "index" - getHash(index) { - if (index < this.size()) { - return this.mmr.layer0[index].hash; - } - else { - return Buffer.allocUnsafe(32); - } - } - getBranchType() { - return BRANCH_MMRBLAKE_NODE; - } - // return a proof of the element at "pos" - getProof(retProof, pos) { - // find a path from the indicated position to the root in the current view - let retBranch = new MMRBranch(); - if (pos < this.size()) { - // just make sure the peakMerkle tree is calculated - this.getRoot(); - // if we have leaf information, add it - let toAdd = this.mmr.layer0.getIndex(pos).getLeafHash(); - if (toAdd.length > 0) { - retBranch.branch.splice(retBranch.branch.length, 0, toAdd[0]); - } - let p = pos; - for (let l = 0; l < this.sizes.length; l++) { - if ((p & 1) === 1) { - let proofHashes = this.mmr.getNode(l, p - 1).hash; - retBranch.branch = retBranch.branch.concat(proofHashes); - p >>= 1; - } - else { - // make sure there is one after us to hash with or we are a peak and should be hashed with the rest of the peaks - if (this.sizes[l] > (p + 1)) { - let proofHashes = this.mmr.getNode(l, p + 1).hash; - retBranch.branch = retBranch.branch.concat(proofHashes); - p >>= 1; - } - else { - /* for (auto &oneNode : peaks) - { - printf("peaknode: "); - for (auto oneHash : oneNode.getProofHash(oneNode)) - { - printf("%s:", oneHash.GetHex().c_str()); - } - printf("\n"); - } */ - // we are at a peak, the alternate peak to us, or the next thing we should be hashed with, if there is one, is next on our path - let peakHash = this.mmr.getNode(l, p).hash; - // linear search to find out which peak we are in the base of the peakMerkle - for (p = 0; p < this.peaks.length; p++) { - if (this.peaks[p].hash == peakHash) { - break; - } - } - // p is the position in the merkle tree of peaks - if (p > this.peaks.length) - throw new Error("peak not found"); - // move up to the top, which is always a peak of size 1 - let layerNum, layerSize; - for (layerNum = 0, layerSize = this.peaks.length; layerNum == 0 || layerSize > 1; layerSize = this.peakMerkle[layerNum++].length) { - let layerIndex = layerNum ? layerNum - 1 : 0; // layerNum is base 1 - // we are an odd member on the end (even index) and will not hash with the next layer above, we will propagate to its end - if ((p < layerSize - 1) || (p & 1)) { - if (p & 1) { - // hash with the one before us - if (layerNum > 0) { - let proofHashes = this.peakMerkle[layerIndex][p - 1].hash; - retBranch.branch = retBranch.branch.concat(proofHashes); - } - else { - let proofHashes = this.peaks[p - 1].hash; - retBranch.branch = retBranch.branch.concat(proofHashes); - } - } - else { - // hash with the one in front of us - if (layerNum > 0) { - let proofHashes = this.peakMerkle[layerIndex][p + 1].hash; - retBranch.branch = retBranch.branch.concat(proofHashes); - } - else { - let proofHashes = this.peaks[p + 1].hash; - retBranch.branch = retBranch.branch.concat(proofHashes); - } - } - } - p >>= 1; - } - // finished - break; - } - } - } - retBranch.branchType = this.getBranchType(); - retBranch.nSize = this.size(); - retBranch.nIndex = pos; - retProof.setProof(retBranch); - return true; - } - return false; - } - // return a vector of the bits, either 1 or 0 in each byte, to represent both the size - // of the proof by the size of the vector, and the expected bit in each position for the given - // position in a Merkle Mountain View of the specified size - getProofBits(pos, mmvSize) { - throw new Error("getProofBits not implemented for MMR"); - } - ; -} -exports.MerkleMountainView = MerkleMountainView; diff --git a/dist/pbaas/MMRDescriptor.d.ts b/dist/pbaas/MMRDescriptor.d.ts deleted file mode 100644 index 7f23b739..00000000 --- a/dist/pbaas/MMRDescriptor.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { DataDescriptor, DataDescriptorJson } from './DataDescriptor'; -import { EHashTypes } from './DataDescriptor'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -export interface MMRDescriptorJson { - version: number; - objecthashtype?: number; - mmrhashtype?: number; - mmrroot?: DataDescriptorJson; - mmrhashes?: DataDescriptorJson; - datadescriptors?: DataDescriptorJson[]; -} -export declare class MMRDescriptor implements SerializableEntity { - static VERSION_INVALID: import("bn.js"); - static FIRST_VERSION: import("bn.js"); - static LAST_VERSION: import("bn.js"); - static DEFAULT_VERSION: import("bn.js"); - version: BigNumber; - objectHashType: EHashTypes; - mmrHashType: EHashTypes; - mmrRoot: DataDescriptor; - mmrHashes: DataDescriptor; - dataDescriptors: DataDescriptor[]; - constructor(data?: { - version?: BigNumber; - objectHashType?: EHashTypes; - mmrHashType?: EHashTypes; - mmrRoot?: DataDescriptor; - mmrHashes?: DataDescriptor; - dataDescriptors?: DataDescriptor[]; - }); - static fromJson(data: MMRDescriptorJson): MMRDescriptor; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - hasData(): boolean; - isValid(): boolean; - toJson(): MMRDescriptorJson; -} diff --git a/dist/pbaas/MMRDescriptor.js b/dist/pbaas/MMRDescriptor.js deleted file mode 100644 index a0f01886..00000000 --- a/dist/pbaas/MMRDescriptor.js +++ /dev/null @@ -1,120 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MMRDescriptor = void 0; -const bn_js_1 = require("bn.js"); -const varint_1 = require("../utils/varint"); -const varuint_1 = require("../utils/varuint"); -const bufferutils_1 = require("../utils/bufferutils"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -const DataDescriptor_1 = require("./DataDescriptor"); -class MMRDescriptor { - constructor(data) { - if (data) { - if (data.version) - this.version = data.version; - if (data.objectHashType) - this.objectHashType = data.objectHashType; - if (data.mmrHashType) - this.mmrHashType = data.mmrHashType; - if (data.mmrRoot) - this.mmrRoot = data.mmrRoot; - if (data.mmrHashes) - this.mmrHashes = data.mmrHashes; - if (data.dataDescriptors) - this.dataDescriptors = data.dataDescriptors; - } - else { - this.version = MMRDescriptor.DEFAULT_VERSION; - } - } - static fromJson(data) { - const newMMRDescriptor = new MMRDescriptor(); - if (data) { - if (data.version) - newMMRDescriptor.version = new bn_js_1.BN(data.version); - if (data.objecthashtype) - newMMRDescriptor.objectHashType = data.objecthashtype; - if (data.mmrhashtype) - newMMRDescriptor.mmrHashType = data.mmrhashtype; - if (data.mmrroot) - newMMRDescriptor.mmrRoot = DataDescriptor_1.DataDescriptor.fromJson(data.mmrroot); - if (data.mmrhashes) - newMMRDescriptor.mmrHashes = DataDescriptor_1.DataDescriptor.fromJson(data.mmrhashes); - if (data.datadescriptors) { - newMMRDescriptor.dataDescriptors = []; - data.datadescriptors.forEach((data) => { - newMMRDescriptor.dataDescriptors.push(DataDescriptor_1.DataDescriptor.fromJson(data)); - }); - } - ; - } - return newMMRDescriptor; - } - getByteLength() { - let length = 0; - length += varint_1.default.encodingLength(this.version); - length += varint_1.default.encodingLength(new bn_js_1.BN(this.objectHashType)); - length += varint_1.default.encodingLength(new bn_js_1.BN(this.mmrHashType)); - length += this.mmrRoot.getByteLength(); - length += this.mmrHashes.getByteLength(); - length += varuint_1.default.encodingLength(this.dataDescriptors.length); - this.dataDescriptors.forEach((dataDescriptor) => { - length += dataDescriptor.getByteLength(); - }); - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.version); - writer.writeVarInt(new bn_js_1.BN(this.objectHashType)); - writer.writeVarInt(new bn_js_1.BN(this.mmrHashType)); - writer.writeSlice(this.mmrRoot.toBuffer()); - writer.writeSlice(this.mmrHashes.toBuffer()); - writer.writeCompactSize(this.dataDescriptors.length); - this.dataDescriptors.forEach((dataDescriptor) => { - writer.writeSlice(dataDescriptor.toBuffer()); - }); - return writer.buffer; - } - fromBuffer(buffer, offset) { - const reader = new BufferReader(buffer, offset); - this.version = reader.readVarInt(); - this.objectHashType = reader.readVarInt().toNumber(); - this.mmrHashType = reader.readVarInt().toNumber(); - this.mmrRoot = new DataDescriptor_1.DataDescriptor(); - reader.offset = this.mmrRoot.fromBuffer(reader.buffer, reader.offset); - this.mmrHashes = new DataDescriptor_1.DataDescriptor(); - reader.offset = this.mmrHashes.fromBuffer(reader.buffer, reader.offset); - const dataDescriptorsLength = reader.readCompactSize(); - this.dataDescriptors = []; - for (let i = 0; i < dataDescriptorsLength; i++) { - const dataDescriptor = new DataDescriptor_1.DataDescriptor(); - reader.offset = dataDescriptor.fromBuffer(reader.buffer, reader.offset); - this.dataDescriptors.push(dataDescriptor); - } - return reader.offset; - } - hasData() { - return !!(this.mmrHashes.objectdata && this.dataDescriptors); - } - isValid() { - return this.version >= MMRDescriptor.FIRST_VERSION && this.version <= MMRDescriptor.LAST_VERSION; - } - toJson() { - const retval = { - version: this.version.toNumber(), - objecthashtype: this.objectHashType.valueOf(), - mmrhashtype: this.mmrHashType, - mmrroot: this.mmrRoot.toJson(), - mmrhashes: this.mmrHashes.toJson(), - datadescriptors: this.dataDescriptors.map((dataDescriptor) => dataDescriptor.toJson()) - }; - return retval; - } -} -exports.MMRDescriptor = MMRDescriptor; -MMRDescriptor.VERSION_INVALID = new bn_js_1.BN(0); -MMRDescriptor.FIRST_VERSION = new bn_js_1.BN(1); -MMRDescriptor.LAST_VERSION = new bn_js_1.BN(1); -MMRDescriptor.DEFAULT_VERSION = new bn_js_1.BN(1); -; diff --git a/dist/pbaas/NoDestination.d.ts b/dist/pbaas/NoDestination.d.ts deleted file mode 100644 index b3b25265..00000000 --- a/dist/pbaas/NoDestination.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { SerializableEntity } from "../utils/types/SerializableEntity"; -import { Hash160SerEnt } from "../vdxf/classes/Hash160"; -export declare class NoDestination extends Hash160SerEnt implements SerializableEntity { - constructor(); - fromBuffer(buffer: Buffer, offset?: number): number; -} diff --git a/dist/pbaas/NoDestination.js b/dist/pbaas/NoDestination.js deleted file mode 100644 index bce82b96..00000000 --- a/dist/pbaas/NoDestination.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.NoDestination = void 0; -const Hash160_1 = require("../vdxf/classes/Hash160"); -class NoDestination extends Hash160_1.Hash160SerEnt { - constructor() { - super(Buffer.alloc(0), 0, false); - } - fromBuffer(buffer, offset) { - return offset; - } -} -exports.NoDestination = NoDestination; diff --git a/dist/pbaas/OptCCParams.d.ts b/dist/pbaas/OptCCParams.d.ts deleted file mode 100644 index 4389dbad..00000000 --- a/dist/pbaas/OptCCParams.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { TxDestination } from './TxDestination'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -import { BigNumber } from '../utils/types/BigNumber'; -export type VData = Array; -export declare class OptCCParams implements SerializableEntity { - version: BigNumber; - eval_code: BigNumber; - m: BigNumber; - n: BigNumber; - destinations: Array; - vdata: VData; - constructor(data?: { - version?: BigNumber; - eval_code?: BigNumber; - m?: BigNumber; - n?: BigNumber; - destinations?: Array; - vdata?: VData; - }); - getParamObject(): null | Buffer; - isValid(): boolean; - static fromChunk(chunk: Buffer): OptCCParams; - toChunk(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - internalGetByteLength(asChunk: boolean): number; - getByteLength(): number; - private internalToBuffer; - toBuffer(): Buffer; -} diff --git a/dist/pbaas/OptCCParams.js b/dist/pbaas/OptCCParams.js deleted file mode 100644 index 87ce6636..00000000 --- a/dist/pbaas/OptCCParams.js +++ /dev/null @@ -1,206 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OptCCParams = void 0; -const bscript = require("../utils/script"); -const evals_1 = require("../utils/evals"); -const varuint_1 = require("../utils/varuint"); -const TxDestination_1 = require("./TxDestination"); -const bn_js_1 = require("bn.js"); -const bufferutils_1 = require("../utils/bufferutils"); -class OptCCParams { - constructor(data) { - if (data === null || data === void 0 ? void 0 : data.version) - this.version = data.version; - if (data === null || data === void 0 ? void 0 : data.eval_code) - this.eval_code = data.eval_code; - if (data === null || data === void 0 ? void 0 : data.m) - this.m = data.m; - if (data === null || data === void 0 ? void 0 : data.n) - this.n = data.n; - if (data === null || data === void 0 ? void 0 : data.destinations) - this.destinations = data.destinations; - else - this.destinations = []; - if (data === null || data === void 0 ? void 0 : data.vdata) - this.vdata = data.vdata; - else - this.vdata = []; - } - getParamObject() { - switch (this.eval_code.toNumber()) { - case evals_1.EVALS.EVAL_NONE: - { - return null; - } - case evals_1.EVALS.EVAL_STAKEGUARD: - case evals_1.EVALS.EVAL_CURRENCY_DEFINITION: - case evals_1.EVALS.EVAL_NOTARY_EVIDENCE: - case evals_1.EVALS.EVAL_EARNEDNOTARIZATION: - case evals_1.EVALS.EVAL_ACCEPTEDNOTARIZATION: - case evals_1.EVALS.EVAL_FINALIZE_NOTARIZATION: - case evals_1.EVALS.EVAL_CURRENCYSTATE: - case evals_1.EVALS.EVAL_RESERVE_TRANSFER: - case evals_1.EVALS.EVAL_RESERVE_OUTPUT: - case evals_1.EVALS.EVAL_RESERVE_DEPOSIT: - case evals_1.EVALS.EVAL_CROSSCHAIN_EXPORT: - case evals_1.EVALS.EVAL_CROSSCHAIN_IMPORT: - case evals_1.EVALS.EVAL_IDENTITY_PRIMARY: - case evals_1.EVALS.EVAL_IDENTITY_COMMITMENT: - case evals_1.EVALS.EVAL_IDENTITY_RESERVATION: - case evals_1.EVALS.EVAL_FINALIZE_EXPORT: - case evals_1.EVALS.EVAL_FEE_POOL: - case evals_1.EVALS.EVAL_NOTARY_SIGNATURE: - { - if (this.vdata.length) { - return this.vdata[0]; - } - else { - return null; - } - } - default: - { - return null; - } - } - } - isValid() { - var validEval = false; - switch (this.eval_code.toNumber()) { - case evals_1.EVALS.EVAL_NONE: - { - validEval = true; - break; - } - case evals_1.EVALS.EVAL_STAKEGUARD: - case evals_1.EVALS.EVAL_CURRENCY_DEFINITION: - case evals_1.EVALS.EVAL_NOTARY_EVIDENCE: - case evals_1.EVALS.EVAL_EARNEDNOTARIZATION: - case evals_1.EVALS.EVAL_ACCEPTEDNOTARIZATION: - case evals_1.EVALS.EVAL_FINALIZE_NOTARIZATION: - case evals_1.EVALS.EVAL_CURRENCYSTATE: - case evals_1.EVALS.EVAL_RESERVE_TRANSFER: - case evals_1.EVALS.EVAL_RESERVE_OUTPUT: - case evals_1.EVALS.EVAL_RESERVE_DEPOSIT: - case evals_1.EVALS.EVAL_CROSSCHAIN_EXPORT: - case evals_1.EVALS.EVAL_CROSSCHAIN_IMPORT: - case evals_1.EVALS.EVAL_IDENTITY_PRIMARY: - case evals_1.EVALS.EVAL_IDENTITY_COMMITMENT: - case evals_1.EVALS.EVAL_IDENTITY_RESERVATION: - case evals_1.EVALS.EVAL_FINALIZE_EXPORT: - case evals_1.EVALS.EVAL_FEE_POOL: - case evals_1.EVALS.EVAL_NOTARY_SIGNATURE: - { - validEval = this.vdata && this.vdata.length > 0; - } - } - return (validEval && - this.version.gt(new bn_js_1.BN(0)) && - this.version.lt(new bn_js_1.BN(4)) && - ((this.version.lt(new bn_js_1.BN(3)) && this.eval_code.lt(new bn_js_1.BN(2))) || - (this.eval_code.lte(new bn_js_1.BN(26)) && this.m.lte(this.n)))); - } - static fromChunk(chunk) { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(varuint_1.default.encodingLength(chunk.length)), 0); - writer.writeCompactSize(chunk.length); - const params = new OptCCParams(); - params.fromBuffer(Buffer.concat([writer.buffer, chunk])); - return params; - } - toChunk() { - return this.internalToBuffer(true); - } - fromBuffer(buffer, offset = 0) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - const scriptInVector = reader.readVarSlice(); - const chunks = bscript.decompile(scriptInVector); - const firstChunk = chunks[0]; - if (!Buffer.isBuffer(firstChunk)) { - throw new Error('invalid first chunk date type'); - } - if (firstChunk.length !== 4) { - throw new Error('invalid optional parameters header'); - } - const chunkReader = new bufferutils_1.default.BufferReader(firstChunk, 0); - this.version = new bn_js_1.BN(chunkReader.readUInt8()); - this.eval_code = new bn_js_1.BN(chunkReader.readUInt8()); - this.m = new bn_js_1.BN(chunkReader.readUInt8()); - this.n = new bn_js_1.BN(chunkReader.readUInt8()); - // now, we should have n keys followed by data objects for later versions, otherwise all keys and one data object - if (this.version.lte(new bn_js_1.BN(0)) || - this.version.gt(new bn_js_1.BN(3)) || - this.eval_code.lt(new bn_js_1.BN(0)) || - this.eval_code.gt(new bn_js_1.BN(0x1a)) || // this is the last valid eval code as of version 3 - (this.version.lt(new bn_js_1.BN(3)) && this.n.lt(new bn_js_1.BN(1))) || - this.n.gt(new bn_js_1.BN(4)) || - (this.version.lt(new bn_js_1.BN(3)) && this.n.gte(new bn_js_1.BN(chunks.length))) || - this.n.gt(new bn_js_1.BN(chunks.length))) { - // invalid header values - throw new Error('invalid header values'); - } - // now, we have chunks left that are either destinations or data vectors - const limit = this.n.eq(new bn_js_1.BN(chunks.length)) ? this.n : this.n.add(new bn_js_1.BN(1)); - this.destinations = []; - let loop; - for (loop = 1; this.version && loop < limit.toNumber(); loop++) { - const currChunk = chunks[loop]; - if (Buffer.isBuffer(currChunk)) { - const oneDest = TxDestination_1.TxDestination.fromChunk(currChunk); - this.destinations.push(oneDest); - } - } - for (; this.version && loop < chunks.length; loop++) { - const currChunk = chunks[loop]; - if (Buffer.isBuffer(currChunk)) - this.vdata.push(currChunk); - } - return offset; - } - internalGetByteLength(asChunk) { - const chunks = [Buffer.alloc(4)]; - chunks[0][0] = this.version.toNumber(); - chunks[0][1] = this.eval_code.toNumber(); - chunks[0][2] = this.m.toNumber(); - chunks[0][3] = this.n.toNumber(); - this.destinations.forEach(x => { - chunks.push(x.toChunk()); - }); - this.vdata.forEach(x => { - chunks.push(x); - }); - const buf = bscript.compile(chunks); - return asChunk ? buf.length : (varuint_1.default.encodingLength(buf.length) + buf.length); - } - getByteLength() { - return this.internalGetByteLength(false); - } - internalToBuffer(asChunk) { - const chunks = [Buffer.alloc(4)]; - chunks[0][0] = this.version.toNumber(); - chunks[0][1] = this.eval_code.toNumber(); - chunks[0][2] = this.m.toNumber(); - chunks[0][3] = this.n.toNumber(); - this.destinations.forEach(x => { - chunks.push(x.toChunk()); - }); - this.vdata.forEach(x => { - chunks.push(x); - }); - const scriptStore = bscript.compile(chunks); - const buf = bscript.compile(chunks); - const len = asChunk ? buf.length : varuint_1.default.encodingLength(buf.length) + buf.length; - const buffer = Buffer.alloc(len); - const writer = new bufferutils_1.default.BufferWriter(buffer); - if (asChunk) { - writer.writeSlice(scriptStore); - } - else { - writer.writeVarSlice(scriptStore); - } - return writer.buffer; - } - toBuffer() { - return this.internalToBuffer(false); - } -} -exports.OptCCParams = OptCCParams; diff --git a/dist/pbaas/PBaaSEvidenceRef.d.ts b/dist/pbaas/PBaaSEvidenceRef.d.ts deleted file mode 100644 index 4ab2444d..00000000 --- a/dist/pbaas/PBaaSEvidenceRef.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -import { UTXORef } from './UTXORef'; -export interface PBaaSEvidenceRefJson { - version: number; - flags: number; - output: any; - objectnum: number; - subobject: number; - systemid: string; -} -export declare class PBaaSEvidenceRef implements SerializableEntity { - version: BigNumber; - flags: BigNumber; - output: UTXORef; - object_num: BigNumber; - sub_object: BigNumber; - system_id: string; - static FLAG_ISEVIDENCE: import("bn.js"); - static FLAG_HAS_SYSTEM: import("bn.js"); - static FIRST_VERSION: import("bn.js"); - static LAST_VERSION: import("bn.js"); - constructor(data?: { - version?: BigNumber; - flags?: BigNumber; - output?: UTXORef; - object_num?: BigNumber; - sub_object?: BigNumber; - system_id?: string; - }); - setFlags(): void; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - isValid(): boolean; - toJson(): PBaaSEvidenceRefJson; - static fromJson(json: PBaaSEvidenceRefJson): PBaaSEvidenceRef; -} diff --git a/dist/pbaas/PBaaSEvidenceRef.js b/dist/pbaas/PBaaSEvidenceRef.js deleted file mode 100644 index 08afd9e2..00000000 --- a/dist/pbaas/PBaaSEvidenceRef.js +++ /dev/null @@ -1,97 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PBaaSEvidenceRef = void 0; -const varint_1 = require("../utils/varint"); -const address_1 = require("../utils/address"); -const bufferutils_1 = require("../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const vdxf_1 = require("../constants/vdxf"); -const UTXORef_1 = require("./UTXORef"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class PBaaSEvidenceRef { - constructor(data) { - if (data) { - this.version = data.version || new bn_js_1.BN(1, 10); - this.flags = data.flags || new bn_js_1.BN(0); - this.output = data.output || new UTXORef_1.UTXORef(); - this.object_num = data.object_num || new bn_js_1.BN(0); - this.sub_object = data.sub_object || new bn_js_1.BN(0); - this.system_id = data.system_id || ""; - } - } - setFlags() { - this.flags = this.flags.and(PBaaSEvidenceRef.FLAG_ISEVIDENCE); - if (this.system_id && this.system_id.length > 0) { - this.flags = this.flags.or(PBaaSEvidenceRef.FLAG_HAS_SYSTEM); - } - } - getByteLength() { - let byteLength = 0; - this.setFlags(); - byteLength += varint_1.default.encodingLength(this.version); - byteLength += varint_1.default.encodingLength(this.flags); - byteLength += this.output.getByteLength(); - byteLength += varint_1.default.encodingLength(this.object_num); - byteLength += varint_1.default.encodingLength(this.sub_object); - if (this.flags.and(PBaaSEvidenceRef.FLAG_HAS_SYSTEM).gt(new bn_js_1.BN(0))) { - byteLength += vdxf_1.HASH160_BYTE_LENGTH; - } - return byteLength; - } - toBuffer() { - const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); - bufferWriter.writeVarInt(this.version); - bufferWriter.writeVarInt(this.flags); - bufferWriter.writeSlice(this.output.toBuffer()); - bufferWriter.writeVarInt(this.object_num); - bufferWriter.writeVarInt(this.sub_object); - if (this.flags.and(PBaaSEvidenceRef.FLAG_HAS_SYSTEM).gt(new bn_js_1.BN(0))) { - bufferWriter.writeSlice((0, address_1.fromBase58Check)(this.system_id).hash); - } - return bufferWriter.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.version = reader.readVarInt(); - this.flags = reader.readVarInt(); - this.output = new UTXORef_1.UTXORef(); - reader.offset = this.output.fromBuffer(reader.buffer, reader.offset); - this.object_num = reader.readVarInt(); - this.sub_object = reader.readVarInt(); - if (this.flags.and(PBaaSEvidenceRef.FLAG_HAS_SYSTEM).gt(new bn_js_1.BN(0))) { - this.system_id = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - } - return reader.offset; - } - isValid() { - return this.output.isValid() && this.version.gte(PBaaSEvidenceRef.FIRST_VERSION) && - this.version.lte(PBaaSEvidenceRef.LAST_VERSION) && - (this.flags.and(PBaaSEvidenceRef.FLAG_ISEVIDENCE).gt(new bn_js_1.BN(0))); - } - toJson() { - let retval = { - version: this.version.toNumber(), - flags: this.flags.toNumber(), - output: this.output.toJson(), - objectnum: this.object_num.toNumber(), - subobject: this.sub_object.toNumber(), - systemid: this.system_id || "" - }; - return retval; - } - static fromJson(json) { - return new PBaaSEvidenceRef({ - version: new bn_js_1.BN(json.version), - flags: new bn_js_1.BN(json.flags), - output: UTXORef_1.UTXORef.fromJson(json.output), - object_num: new bn_js_1.BN(json.objectnum), - sub_object: new bn_js_1.BN(json.subobject), - system_id: json.systemid - }); - } -} -exports.PBaaSEvidenceRef = PBaaSEvidenceRef; -PBaaSEvidenceRef.FLAG_ISEVIDENCE = new bn_js_1.BN(1); -PBaaSEvidenceRef.FLAG_HAS_SYSTEM = new bn_js_1.BN(2); -PBaaSEvidenceRef.FIRST_VERSION = new bn_js_1.BN(1); -PBaaSEvidenceRef.LAST_VERSION = new bn_js_1.BN(1); diff --git a/dist/pbaas/PartialIdentity.d.ts b/dist/pbaas/PartialIdentity.d.ts deleted file mode 100644 index ee73cdf9..00000000 --- a/dist/pbaas/PartialIdentity.d.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -import { Identity, VerusCLIVerusIDJson, VerusIDInitData } from './Identity'; -export declare class PartialIdentity extends Identity implements SerializableEntity { - contains: BigNumber; - static PARTIAL_ID_CONTAINS_PARENT: import("bn.js"); - static PARTIAL_ID_CONTAINS_CONTENT_MULTIMAP: import("bn.js"); - static PARTIAL_ID_CONTAINS_PRIMARY_ADDRS: import("bn.js"); - static PARTIAL_ID_CONTAINS_REVOCATION: import("bn.js"); - static PARTIAL_ID_CONTAINS_RECOVERY: import("bn.js"); - static PARTIAL_ID_CONTAINS_UNLOCK_AFTER: import("bn.js"); - static PARTIAL_ID_CONTAINS_SYSTEM_ID: import("bn.js"); - static PARTIAL_ID_CONTAINS_PRIV_ADDRS: import("bn.js"); - static PARTIAL_ID_CONTAINS_CONTENT_MAP: import("bn.js"); - static PARTIAL_ID_CONTAINS_MINSIGS: import("bn.js"); - static PARTIAL_ID_CONTAINS_FLAGS: import("bn.js"); - static PARTIAL_ID_CONTAINS_VERSION: import("bn.js"); - constructor(data?: VerusIDInitData); - protected containsFlags(): boolean; - protected containsVersion(): boolean; - protected containsPrimaryAddresses(): boolean; - protected containsMinSigs(): boolean; - protected containsParent(): boolean; - protected containsSystemId(): boolean; - protected containsContentMap(): boolean; - protected containsContentMultiMap(): boolean; - protected containsRevocation(): boolean; - protected containsRecovery(): boolean; - protected containsPrivateAddresses(): boolean; - protected containsUnlockAfter(): boolean; - private toggleContainsParent; - private toggleContainsSystemId; - private toggleContainsContentMap; - private toggleContainsContentMultiMap; - private toggleContainsRevocation; - private toggleContainsRecovery; - private toggleContainsPrivateAddresses; - private toggleContainsUnlockAfter; - private toggleContainsFlags; - private toggleContainsVersion; - private toggleContainsMinSigs; - private toggleContainsPrimaryAddresses; - private enableContainsFlags; - private enableContainsUnlockAfter; - private getPartialIdentityByteLength; - getByteLength(): number; - fromBuffer(buffer: Buffer, offset?: number, parseVdxfObjects?: boolean): number; - toBuffer(): Buffer; - static fromJson(json: VerusCLIVerusIDJson): PartialIdentity; - lock(unlockTime: BigNumber): void; - unlock(height?: BigNumber, txExpiryHeight?: BigNumber): void; - revoke(): void; - unrevoke(): void; -} diff --git a/dist/pbaas/PartialIdentity.js b/dist/pbaas/PartialIdentity.js deleted file mode 100644 index 28998bb9..00000000 --- a/dist/pbaas/PartialIdentity.js +++ /dev/null @@ -1,172 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PartialIdentity = void 0; -const Identity_1 = require("./Identity"); -const bn_js_1 = require("bn.js"); -const varint_1 = require("../utils/varint"); -const bufferutils_1 = require("../utils/bufferutils"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class PartialIdentity extends Identity_1.Identity { - constructor(data) { - super(data); - this.contains = new bn_js_1.BN("0"); - if (data === null || data === void 0 ? void 0 : data.parent) - this.toggleContainsParent(); - if (data === null || data === void 0 ? void 0 : data.system_id) - this.toggleContainsSystemId(); - if (data === null || data === void 0 ? void 0 : data.content_map) - this.toggleContainsContentMap(); - if (data === null || data === void 0 ? void 0 : data.content_multimap) - this.toggleContainsContentMultiMap(); - if (data === null || data === void 0 ? void 0 : data.revocation_authority) - this.toggleContainsRevocation(); - if (data === null || data === void 0 ? void 0 : data.recovery_authority) - this.toggleContainsRecovery(); - if ((data === null || data === void 0 ? void 0 : data.private_addresses) && data.private_addresses.length > 0) - this.toggleContainsPrivateAddresses(); - if (data === null || data === void 0 ? void 0 : data.unlock_after) - this.toggleContainsUnlockAfter(); - if (data === null || data === void 0 ? void 0 : data.flags) - this.toggleContainsFlags(); - if (data === null || data === void 0 ? void 0 : data.min_sigs) - this.toggleContainsMinSigs(); - if (data === null || data === void 0 ? void 0 : data.version) - this.toggleContainsVersion(); - if ((data === null || data === void 0 ? void 0 : data.primary_addresses) && data.primary_addresses.length > 0) - this.toggleContainsPrimaryAddresses(); - } - containsFlags() { - return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_FLAGS).toNumber()); - } - containsVersion() { - return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_VERSION).toNumber()); - } - containsPrimaryAddresses() { - return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_PRIMARY_ADDRS).toNumber()); - } - containsMinSigs() { - return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_MINSIGS).toNumber()); - } - containsParent() { - return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_PARENT).toNumber()); - } - containsSystemId() { - return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_SYSTEM_ID).toNumber()); - } - containsContentMap() { - return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_CONTENT_MAP).toNumber()); - } - containsContentMultiMap() { - return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_CONTENT_MULTIMAP).toNumber()); - } - containsRevocation() { - return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_REVOCATION).toNumber()); - } - containsRecovery() { - return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_RECOVERY).toNumber()); - } - containsPrivateAddresses() { - return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_PRIV_ADDRS).toNumber()); - } - containsUnlockAfter() { - return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_UNLOCK_AFTER).toNumber()); - } - toggleContainsParent() { - this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_PARENT); - } - toggleContainsSystemId() { - this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_SYSTEM_ID); - } - toggleContainsContentMap() { - this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_CONTENT_MAP); - } - toggleContainsContentMultiMap() { - this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_CONTENT_MULTIMAP); - } - toggleContainsRevocation() { - this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_REVOCATION); - } - toggleContainsRecovery() { - this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_RECOVERY); - } - toggleContainsPrivateAddresses() { - this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_PRIV_ADDRS); - } - toggleContainsUnlockAfter() { - this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_UNLOCK_AFTER); - } - toggleContainsFlags() { - this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_FLAGS); - } - toggleContainsVersion() { - this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_VERSION); - } - toggleContainsMinSigs() { - this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_MINSIGS); - } - toggleContainsPrimaryAddresses() { - this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_PRIMARY_ADDRS); - } - enableContainsFlags() { - this.contains = this.contains.or(PartialIdentity.PARTIAL_ID_CONTAINS_FLAGS); - } - enableContainsUnlockAfter() { - this.contains = this.contains.or(PartialIdentity.PARTIAL_ID_CONTAINS_UNLOCK_AFTER); - } - getPartialIdentityByteLength() { - let length = 0; - length += varint_1.default.encodingLength(this.contains); - length += super.getByteLength(); - return length; - } - getByteLength() { - return this.getPartialIdentityByteLength(); - } - fromBuffer(buffer, offset = 0, parseVdxfObjects = false) { - const reader = new BufferReader(buffer, offset); - this.contains = reader.readVarInt(); - reader.offset = super.fromBuffer(reader.buffer, reader.offset, parseVdxfObjects); - return reader.offset; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getPartialIdentityByteLength())); - writer.writeVarInt(this.contains); - writer.writeSlice(super.toBuffer()); - return writer.buffer; - } - static fromJson(json) { - return Identity_1.Identity.internalFromJson(json, PartialIdentity); - } - lock(unlockTime) { - this.enableContainsFlags(); - this.enableContainsUnlockAfter(); - return super.lock(unlockTime); - } - unlock(height = new bn_js_1.BN(0), txExpiryHeight = new bn_js_1.BN(0)) { - this.enableContainsFlags(); - this.enableContainsUnlockAfter(); - return super.unlock(height, txExpiryHeight); - } - revoke() { - this.enableContainsFlags(); - this.enableContainsUnlockAfter(); - return super.revoke(); - } - unrevoke() { - this.enableContainsFlags(); - return super.unrevoke(); - } -} -exports.PartialIdentity = PartialIdentity; -PartialIdentity.PARTIAL_ID_CONTAINS_PARENT = new bn_js_1.BN("1", 10); -PartialIdentity.PARTIAL_ID_CONTAINS_CONTENT_MULTIMAP = new bn_js_1.BN("2", 10); -PartialIdentity.PARTIAL_ID_CONTAINS_PRIMARY_ADDRS = new bn_js_1.BN("4", 10); -PartialIdentity.PARTIAL_ID_CONTAINS_REVOCATION = new bn_js_1.BN("8", 10); -PartialIdentity.PARTIAL_ID_CONTAINS_RECOVERY = new bn_js_1.BN("16", 10); -PartialIdentity.PARTIAL_ID_CONTAINS_UNLOCK_AFTER = new bn_js_1.BN("32", 10); -PartialIdentity.PARTIAL_ID_CONTAINS_SYSTEM_ID = new bn_js_1.BN("64", 10); -PartialIdentity.PARTIAL_ID_CONTAINS_PRIV_ADDRS = new bn_js_1.BN("128", 10); -PartialIdentity.PARTIAL_ID_CONTAINS_CONTENT_MAP = new bn_js_1.BN("256", 10); -PartialIdentity.PARTIAL_ID_CONTAINS_MINSIGS = new bn_js_1.BN("512", 10); -PartialIdentity.PARTIAL_ID_CONTAINS_FLAGS = new bn_js_1.BN("1024", 10); -PartialIdentity.PARTIAL_ID_CONTAINS_VERSION = new bn_js_1.BN("2048", 10); diff --git a/dist/pbaas/PartialMMRData.d.ts b/dist/pbaas/PartialMMRData.d.ts deleted file mode 100644 index bb734581..00000000 --- a/dist/pbaas/PartialMMRData.d.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -import { AllowedHashes } from '../constants/pbaas'; -import { VdxfUniValue, VdxfUniValueJson } from './VdxfUniValue'; -export type PartialMMRDataUnit = { - type: BigNumber; - data: Buffer | VdxfUniValue; -}; -export type PartialMMRDataInitData = { - flags?: BigNumber; - data?: Array; - salt?: Array; - mmrhashtype?: BigNumber; - priormmr?: Array; -}; -export type PartialMMRDataJson = { - flags?: string; - data?: Array<{ - type: string; - data: string | VdxfUniValueJson; - }>; - salt?: Array; - mmrhashtype?: string; - priormmr?: Array; -}; -export type CLIMMRDataStringKey = "filename" | "serializedhex" | "serializedbase64" | "message" | "datahash"; -export type CLIMMRDataKey = CLIMMRDataStringKey | "vdxfdata"; -export type SingleKeyMMRData = { - [K in CLIMMRDataStringKey]: { - [P in K]: string; - }; -}[CLIMMRDataStringKey]; -export type PartialMMRDataCLIJson = { - mmrdata: Array; - mmrsalt?: Array; - mmrhashtype?: AllowedHashes; - priormmr?: Array; -}; -export declare class PartialMMRData implements SerializableEntity { - flags: BigNumber; - data: Array; - mmrhashtype?: BigNumber; - salt?: Array; - priormmr?: Array; - static CONTAINS_SALT: import("bn.js"); - static CONTAINS_PRIORMMR: import("bn.js"); - constructor(data?: PartialMMRDataInitData); - protected containsSalt(): boolean; - protected containsPriorMMR(): boolean; - private toggleContainsSalt; - private toggleContainsPriorMMR; - private getPartialMMRDataByteLength; - getByteLength(): number; - fromBuffer(buffer: Buffer, offset?: number): number; - toBuffer(): Buffer; - toJson(): PartialMMRDataJson; - static fromJson(json: PartialMMRDataJson): PartialMMRData; - toCLIJson(): PartialMMRDataCLIJson; - static fromCLIJson(json: PartialMMRDataCLIJson): PartialMMRData; -} diff --git a/dist/pbaas/PartialMMRData.js b/dist/pbaas/PartialMMRData.js deleted file mode 100644 index afdd2681..00000000 --- a/dist/pbaas/PartialMMRData.js +++ /dev/null @@ -1,333 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PartialMMRData = void 0; -const bn_js_1 = require("bn.js"); -const varint_1 = require("../utils/varint"); -const bufferutils_1 = require("../utils/bufferutils"); -const varuint_1 = require("../utils/varuint"); -const pbaas_1 = require("../constants/pbaas"); -const VdxfUniValue_1 = require("./VdxfUniValue"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class PartialMMRData { - constructor(data) { - this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0"); - this.data = data && data.data ? data.data : []; - this.mmrhashtype = data && data.mmrhashtype ? data.mmrhashtype : pbaas_1.DEFAULT_HASH_TYPE_MMR; - if (data === null || data === void 0 ? void 0 : data.salt) { - if (!this.containsSalt()) - this.toggleContainsSalt(); - this.salt = data.salt; - } - if (data === null || data === void 0 ? void 0 : data.priormmr) { - if (!this.containsPriorMMR()) - this.toggleContainsPriorMMR(); - this.priormmr = data.priormmr; - } - } - containsSalt() { - return !!(this.flags.and(PartialMMRData.CONTAINS_SALT).toNumber()); - } - containsPriorMMR() { - return !!(this.flags.and(PartialMMRData.CONTAINS_PRIORMMR).toNumber()); - } - toggleContainsSalt() { - this.flags = this.flags.xor(PartialMMRData.CONTAINS_SALT); - } - toggleContainsPriorMMR() { - this.flags = this.flags.xor(PartialMMRData.CONTAINS_PRIORMMR); - } - getPartialMMRDataByteLength() { - let length = 0; - length += varint_1.default.encodingLength(this.flags); - length += varuint_1.default.encodingLength(this.data.length); - for (let i = 0; i < this.data.length; i++) { - const unit = this.data[i]; - length += varint_1.default.encodingLength(unit.type); - if (unit.type.eq(pbaas_1.DATA_TYPE_VDXFDATA)) { - const vdxfdatalen = unit.data.getByteLength(); - length += varuint_1.default.encodingLength(vdxfdatalen); - length += vdxfdatalen; - } - else { - const buf = unit.data; - length += varuint_1.default.encodingLength(buf.length); - length += buf.length; - } - } - length += varint_1.default.encodingLength(this.mmrhashtype); - if (this.containsSalt()) { - length += varuint_1.default.encodingLength(this.salt.length); - for (let i = 0; i < this.salt.length; i++) { - const salt = this.salt[i]; - length += varuint_1.default.encodingLength(salt.length); - length += salt.length; - } - } - if (this.containsPriorMMR()) { - length += varuint_1.default.encodingLength(this.priormmr.length); - for (let i = 0; i < this.priormmr.length; i++) { - const priormmr = this.priormmr[i]; - length += varuint_1.default.encodingLength(priormmr.length); - length += priormmr.length; - } - } - return length; - } - getByteLength() { - return this.getPartialMMRDataByteLength(); - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.flags = reader.readVarInt(); - const numData = reader.readCompactSize(); - for (let i = 0; i < numData; i++) { - const type = reader.readVarInt(); - let data; - if (type.eq(pbaas_1.DATA_TYPE_VDXFDATA)) { - const vdxfData = new VdxfUniValue_1.VdxfUniValue(); - const vdxfDataBuf = reader.readVarSlice(); - vdxfData.fromBuffer(vdxfDataBuf); - data = vdxfData; - } - else { - data = reader.readVarSlice(); - } - this.data.push({ - type, - data - }); - } - this.mmrhashtype = reader.readVarInt(); - if (this.containsSalt()) { - this.salt = reader.readVector(); - } - if (this.containsPriorMMR()) { - this.priormmr = reader.readVector(); - } - return reader.offset; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getPartialMMRDataByteLength())); - // Serialize flags - writer.writeVarInt(this.flags); - writer.writeCompactSize(this.data.length); - for (let i = 0; i < this.data.length; i++) { - writer.writeVarInt(this.data[i].type); - if (this.data[i].type.eq(pbaas_1.DATA_TYPE_VDXFDATA)) { - const vdxfData = this.data[i].data; - writer.writeVarSlice(vdxfData.toBuffer()); - } - else { - writer.writeVarSlice(this.data[i].data); - } - } - writer.writeVarInt(this.mmrhashtype); - if (this.containsSalt()) { - writer.writeVector(this.salt); - } - if (this.containsPriorMMR()) { - writer.writeVector(this.priormmr); - } - return writer.buffer; - } - toJson() { - return { - flags: this.flags ? this.flags.toString(10) : undefined, - data: this.data ? this.data.map(x => { - if (x.type.eq(pbaas_1.DATA_TYPE_VDXFDATA)) { - const uni = x.data.toJson(); - if (Array.isArray(uni)) { - throw new Error("VDXF univalue arrays not supported in partialmmrdata vdxfdata"); - } - else { - return { - type: x.type.toString(10), - data: uni - }; - } - } - else { - return { - type: x.type.toString(10), - data: x.data.toString('hex') - }; - } - }) : undefined, - salt: this.salt ? this.salt.map(x => x.toString('hex')) : undefined, - mmrhashtype: this.mmrhashtype ? this.mmrhashtype.toString(10) : undefined, - priormmr: this.priormmr ? this.priormmr.map(x => x.toString('hex')) : undefined - }; - } - static fromJson(json) { - return new PartialMMRData({ - flags: json.flags ? new bn_js_1.BN(json.flags, 10) : undefined, - data: json.data ? json.data.map(x => { - const type = new bn_js_1.BN(x.type, 10); - if (type.eq(pbaas_1.DATA_TYPE_VDXFDATA)) { - return { - type: new bn_js_1.BN(x.type, 10), - data: VdxfUniValue_1.VdxfUniValue.fromJson(x.data) - }; - } - else { - return { - type: new bn_js_1.BN(x.type, 10), - data: Buffer.from(x.data, 'hex') - }; - } - }) : undefined, - salt: json.salt ? json.salt.map(x => Buffer.from(x, 'hex')) : undefined, - mmrhashtype: json.mmrhashtype ? new bn_js_1.BN(json.mmrhashtype, 10) : undefined, - priormmr: json.priormmr ? json.priormmr.map(x => Buffer.from(x, 'hex')) : undefined, - }); - } - toCLIJson() { - const mmrdata = []; - let mmrsalt; - let priormmr; - let mmrhashtype; - for (const unit of this.data) { - if (unit.type.eq(pbaas_1.DATA_TYPE_RAWSTRINGDATA)) { - mmrdata.push(unit.data.toString('hex')); - } - else if (unit.type.eq(pbaas_1.DATA_TYPE_FILENAME)) { - mmrdata.push({ - "filename": unit.data.toString('utf-8') - }); - } - else if (unit.type.eq(pbaas_1.DATA_TYPE_MESSAGE)) { - mmrdata.push({ - "message": unit.data.toString('utf-8') - }); - } - else if (unit.type.eq(pbaas_1.DATA_TYPE_VDXFDATA)) { - const uni = unit.data.toJson(); - if (Array.isArray(uni)) { - throw new Error("VDXF univalue arrays not supported in partialmmrdata vdxfdata"); - } - else { - mmrdata.push({ - "vdxfdata": uni - }); - } - } - else if (unit.type.eq(pbaas_1.DATA_TYPE_HEX)) { - mmrdata.push({ - "serializedhex": unit.data.toString('hex') - }); - } - else if (unit.type.eq(pbaas_1.DATA_TYPE_BASE64)) { - mmrdata.push({ - "serializedbase64": unit.data.toString('base64') - }); - } - else if (unit.type.eq(pbaas_1.DATA_TYPE_DATAHASH)) { - mmrdata.push({ - "datahash": unit.data.toString('hex') - }); - } - } - if (this.containsSalt()) { - mmrsalt = this.salt.map(x => x.toString('hex')); - } - if (this.containsPriorMMR()) { - priormmr = this.priormmr.map(x => x.toString('hex')); - } - if (this.mmrhashtype.eq(pbaas_1.HASH_TYPE_SHA256)) { - mmrhashtype = pbaas_1.HASH_TYPE_SHA256_NAME; - } - else if (this.mmrhashtype.eq(pbaas_1.HASH_TYPE_SHA256D)) { - mmrhashtype = pbaas_1.HASH_TYPE_SHA256D_NAME; - } - else if (this.mmrhashtype.eq(pbaas_1.HASH_TYPE_BLAKE2B)) { - mmrhashtype = pbaas_1.HASH_TYPE_BLAKE2B_NAME; - } - else if (this.mmrhashtype.eq(pbaas_1.HASH_TYPE_KECCAK256)) { - mmrhashtype = pbaas_1.HASH_TYPE_KECCAK256_NAME; - } - else - throw new Error("Unrecognized hash type"); - const ret = { - mmrdata, - mmrsalt, - priormmr, - mmrhashtype - }; - for (const key in ret) { - if (ret[key] === undefined) - delete ret[key]; - } - return ret; - } - static fromCLIJson(json) { - const data = []; - let salt; - let priormmr; - let mmrhashtype; - for (const unit of json.mmrdata) { - if (typeof unit === 'string') { - data.push({ type: pbaas_1.DATA_TYPE_RAWSTRINGDATA, data: Buffer.from(unit, 'hex') }); - } - else { - const unitMmrData = unit["vdxfdata"] ? unit : unit; - const dataKey = Object.keys(unitMmrData)[0]; - const dataValue = unitMmrData[dataKey]; - switch (dataKey) { - case "filename": - data.push({ type: pbaas_1.DATA_TYPE_FILENAME, data: Buffer.from(dataValue, 'utf-8') }); - break; - case "message": - data.push({ type: pbaas_1.DATA_TYPE_MESSAGE, data: Buffer.from(dataValue, 'utf-8') }); - break; - case "vdxfdata": - data.push({ type: pbaas_1.DATA_TYPE_VDXFDATA, data: VdxfUniValue_1.VdxfUniValue.fromJson(dataValue) }); - break; - case "serializedhex": - data.push({ type: pbaas_1.DATA_TYPE_HEX, data: Buffer.from(dataValue, 'hex') }); - break; - case "serializedbase64": - data.push({ type: pbaas_1.DATA_TYPE_BASE64, data: Buffer.from(dataValue, 'base64') }); - break; - case "datahash": - data.push({ type: pbaas_1.DATA_TYPE_DATAHASH, data: Buffer.from(dataValue, 'hex') }); - break; - default: - throw new Error("Unrecognized data key type"); - } - } - } - if (json.mmrsalt) { - salt = json.mmrsalt.map(x => Buffer.from(x, 'hex')); - } - if (json.priormmr) { - priormmr = json.priormmr.map(x => Buffer.from(x, 'hex')); - } - if (json.mmrhashtype) { - switch (json.mmrhashtype) { - case pbaas_1.HASH_TYPE_SHA256_NAME: - mmrhashtype = pbaas_1.HASH_TYPE_SHA256; - break; - case pbaas_1.HASH_TYPE_SHA256D_NAME: - mmrhashtype = pbaas_1.HASH_TYPE_SHA256D; - break; - case pbaas_1.HASH_TYPE_BLAKE2B_NAME: - mmrhashtype = pbaas_1.HASH_TYPE_BLAKE2B; - break; - case pbaas_1.HASH_TYPE_KECCAK256_NAME: - mmrhashtype = pbaas_1.HASH_TYPE_KECCAK256; - break; - default: - throw new Error("Unrecognized hash type"); - } - } - return new PartialMMRData({ - data, - salt, - priormmr, - mmrhashtype - }); - } -} -exports.PartialMMRData = PartialMMRData; -PartialMMRData.CONTAINS_SALT = new bn_js_1.BN("1", 10); -PartialMMRData.CONTAINS_PRIORMMR = new bn_js_1.BN("2", 10); diff --git a/dist/pbaas/PartialSignData.d.ts b/dist/pbaas/PartialSignData.d.ts deleted file mode 100644 index 44a583dd..00000000 --- a/dist/pbaas/PartialSignData.d.ts +++ /dev/null @@ -1,120 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -import { IdentityID } from './IdentityID'; -import { KeyID } from './KeyID'; -import { SaplingPaymentAddress } from './SaplingPaymentAddress'; -import { PartialMMRData, PartialMMRDataJson, SingleKeyMMRData } from './PartialMMRData'; -import { AllowedHashes } from '../constants/pbaas'; -import { VdxfUniValue, VdxfUniValueJson } from './VdxfUniValue'; -export type PartialSignDataInitData = { - flags?: BigNumber; - address?: IdentityID | KeyID; - prefixString?: Buffer; - vdxfKeys?: Array; - vdxfKeyNames?: Array; - boundHashes?: Array; - hashType?: BigNumber; - encryptToAddress?: SaplingPaymentAddress; - createMMR?: boolean; - signature?: Buffer; - dataType?: BigNumber; - data?: Buffer | PartialMMRData | VdxfUniValue; -}; -export type PartialSignDataJson = { - flags?: string; - address?: string; - prefixstring?: string; - vdxfkeys?: Array; - vdxfkeynames?: Array; - boundhashes?: Array; - hashtype?: string; - encrypttoaddress?: string; - createmmr?: boolean; - signature?: string; - datatype?: string; - data?: string | PartialMMRDataJson | VdxfUniValueJson; -}; -export type CLISignDataKey = "filename" | "message" | "messagehex" | "messagebase64" | "datahash" | "mmrdata" | "vdxfdata"; -type AtLeastOne; -}> = Partial & U[keyof U]; -type SignDataKeys = { - filename?: string; - message?: string; - messagehex?: string; - messagebase64?: string; - datahash?: string; - vdxfdata?: VdxfUniValueJson; - mmrdata?: Array; -}; -type BaseFields = { - address?: string; - prefixString?: string; - vdxfKeys?: Array; - vdxfKeyNames?: Array; - boundHashes?: Array; - hashType?: string; - encryptToAddress?: string; - createMMR?: boolean; - signature?: string; - dataType?: string; - data?: string; -}; -type MMRFields = { - mmrsalt?: Array; - mmrhashtype?: AllowedHashes; - priormmr?: Array; -}; -export type PartialSignDataCLIJson = ((AtLeastOne> & BaseFields) | (AtLeastOne & MMRFields & BaseFields)); -export declare class PartialSignData implements SerializableEntity { - flags: BigNumber; - address?: IdentityID | KeyID; - prefixString?: Buffer; - vdxfKeys?: Array; - vdxfKeyNames?: Array; - boundHashes?: Array; - hashType?: BigNumber; - encryptToAddress?: SaplingPaymentAddress; - createMMR?: boolean; - signature?: Buffer; - dataType?: BigNumber; - data?: Buffer | PartialMMRData | VdxfUniValue; - static CONTAINS_DATA: import("bn.js"); - static CONTAINS_ADDRESS: import("bn.js"); - static CONTAINS_ENCRYPTTOADDRESS: import("bn.js"); - static CONTAINS_CURRENTSIG: import("bn.js"); - static CONTAINS_PREFIXSTRING: import("bn.js"); - static CONTAINS_VDXFKEYS: import("bn.js"); - static CONTAINS_VDXFKEYNAMES: import("bn.js"); - static CONTAINS_BOUNDHASHES: import("bn.js"); - constructor(data?: PartialSignDataInitData); - protected containsData(): boolean; - protected containsAddress(): boolean; - protected containsEncrypttoAddress(): boolean; - protected containsCurrentSig(): boolean; - protected containsPrefixString(): boolean; - protected containsVdxfKeys(): boolean; - protected containsVdxfKeyNames(): boolean; - protected containsBoundhashes(): boolean; - private toggleContainsData; - private toggleContainsAddress; - private toggleContainsEncryptToAddress; - private toggleContainsCurrentSig; - private toggleContainsPrefixString; - private toggleContainsVdxfKeys; - private toggleContainsVdxfKeyNames; - private toggleContainsBoundHashes; - isMMRData(): boolean; - isVdxfData(): boolean; - private getPartialSignDataByteLength; - getByteLength(): number; - fromBuffer(buffer: Buffer, offset?: number): number; - toBuffer(): Buffer; - toJson(): PartialSignDataJson; - static fromJson(json: PartialSignDataJson): PartialSignData; - toCLIJson(): PartialSignDataCLIJson; - static fromCLIJson(json: PartialSignDataCLIJson): PartialSignData; -} -export {}; diff --git a/dist/pbaas/PartialSignData.js b/dist/pbaas/PartialSignData.js deleted file mode 100644 index 795f49e4..00000000 --- a/dist/pbaas/PartialSignData.js +++ /dev/null @@ -1,518 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PartialSignData = void 0; -const bn_js_1 = require("bn.js"); -const bufferutils_1 = require("../utils/bufferutils"); -const IdentityID_1 = require("./IdentityID"); -const KeyID_1 = require("./KeyID"); -const SaplingPaymentAddress_1 = require("./SaplingPaymentAddress"); -const varuint_1 = require("../utils/varuint"); -const Hash160_1 = require("../vdxf/classes/Hash160"); -const vdxf_1 = require("../constants/vdxf"); -const PartialMMRData_1 = require("./PartialMMRData"); -const pbaas_1 = require("../constants/pbaas"); -const address_1 = require("../utils/address"); -const VdxfUniValue_1 = require("./VdxfUniValue"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class PartialSignData { - constructor(data) { - this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0"); - this.createMMR = data && data.createMMR ? data.createMMR : false; - if (data === null || data === void 0 ? void 0 : data.address) { - if (!this.containsAddress()) - this.toggleContainsAddress(); - this.address = data.address; - } - if (data === null || data === void 0 ? void 0 : data.prefixString) { - if (!this.containsPrefixString()) - this.toggleContainsPrefixString(); - this.prefixString = data.prefixString; - } - if (data === null || data === void 0 ? void 0 : data.vdxfKeys) { - if (!this.containsVdxfKeys()) - this.toggleContainsVdxfKeys(); - this.vdxfKeys = data.vdxfKeys; - } - if (data === null || data === void 0 ? void 0 : data.vdxfKeyNames) { - if (!this.containsVdxfKeyNames()) - this.toggleContainsVdxfKeyNames(); - this.vdxfKeyNames = data.vdxfKeyNames; - } - if (data === null || data === void 0 ? void 0 : data.hashType) { - this.hashType = data.hashType; - } - else - this.hashType = pbaas_1.DEFAULT_HASH_TYPE; - if (data === null || data === void 0 ? void 0 : data.boundHashes) { - if (!this.containsBoundhashes()) - this.toggleContainsBoundHashes(); - this.boundHashes = data.boundHashes; - } - if (data === null || data === void 0 ? void 0 : data.encryptToAddress) { - if (!this.containsEncrypttoAddress()) - this.toggleContainsEncryptToAddress(); - this.encryptToAddress = data.encryptToAddress; - } - if (data === null || data === void 0 ? void 0 : data.signature) { - if (!this.containsCurrentSig()) - this.toggleContainsCurrentSig(); - this.signature = data.signature; - } - if ((data === null || data === void 0 ? void 0 : data.dataType) && (data === null || data === void 0 ? void 0 : data.data)) { - if (!this.containsData()) - this.toggleContainsData(); - this.data = data.data; - this.dataType = data.dataType; - } - } - containsData() { - return !!(this.flags.and(PartialSignData.CONTAINS_DATA).toNumber()); - } - containsAddress() { - return !!(this.flags.and(PartialSignData.CONTAINS_ADDRESS).toNumber()); - } - containsEncrypttoAddress() { - return !!(this.flags.and(PartialSignData.CONTAINS_ENCRYPTTOADDRESS).toNumber()); - } - containsCurrentSig() { - return !!(this.flags.and(PartialSignData.CONTAINS_CURRENTSIG).toNumber()); - } - containsPrefixString() { - return !!(this.flags.and(PartialSignData.CONTAINS_PREFIXSTRING).toNumber()); - } - containsVdxfKeys() { - return !!(this.flags.and(PartialSignData.CONTAINS_VDXFKEYS).toNumber()); - } - containsVdxfKeyNames() { - return !!(this.flags.and(PartialSignData.CONTAINS_VDXFKEYNAMES).toNumber()); - } - containsBoundhashes() { - return !!(this.flags.and(PartialSignData.CONTAINS_BOUNDHASHES).toNumber()); - } - toggleContainsData() { - this.flags = this.flags.xor(PartialSignData.CONTAINS_DATA); - } - toggleContainsAddress() { - this.flags = this.flags.xor(PartialSignData.CONTAINS_ADDRESS); - } - toggleContainsEncryptToAddress() { - this.flags = this.flags.xor(PartialSignData.CONTAINS_ENCRYPTTOADDRESS); - } - toggleContainsCurrentSig() { - this.flags = this.flags.xor(PartialSignData.CONTAINS_CURRENTSIG); - } - toggleContainsPrefixString() { - this.flags = this.flags.xor(PartialSignData.CONTAINS_PREFIXSTRING); - } - toggleContainsVdxfKeys() { - this.flags = this.flags.xor(PartialSignData.CONTAINS_VDXFKEYS); - } - toggleContainsVdxfKeyNames() { - this.flags = this.flags.xor(PartialSignData.CONTAINS_VDXFKEYNAMES); - } - toggleContainsBoundHashes() { - this.flags = this.flags.xor(PartialSignData.CONTAINS_BOUNDHASHES); - } - isMMRData() { - return this.dataType && this.dataType.eq(pbaas_1.DATA_TYPE_MMRDATA); - } - isVdxfData() { - return this.dataType && this.dataType.eq(pbaas_1.DATA_TYPE_VDXFDATA); - } - getPartialSignDataByteLength() { - function calculateVectorLength(items, getItemLength, varlength = true) { - let totalLength = 0; - totalLength += varuint_1.default.encodingLength(items.length); - for (const item of items) { - const itemLength = getItemLength(item); - if (varlength) - totalLength += varuint_1.default.encodingLength(itemLength); - totalLength += itemLength; - } - return totalLength; - } - let length = 0; - length += varuint_1.default.encodingLength(this.flags.toNumber()); - if (this.containsAddress()) - length += this.address.getByteLength(); - if (this.containsPrefixString()) { - const prefixLen = this.prefixString.length; - length += varuint_1.default.encodingLength(prefixLen); - length += prefixLen; - } - if (this.containsVdxfKeys()) { - length += calculateVectorLength(this.vdxfKeys, (vdxfkey) => vdxfkey.getByteLength(), false); - } - if (this.containsVdxfKeyNames()) { - length += calculateVectorLength(this.vdxfKeyNames, (vdxfname) => vdxfname.length); - } - length += varuint_1.default.encodingLength(this.hashType.toNumber()); - if (this.containsBoundhashes()) { - length += calculateVectorLength(this.boundHashes, (hash) => hash.length); - } - if (this.containsEncrypttoAddress()) { - length += this.encryptToAddress.getByteLength(); - } - length += 1; // Createmmr boolean value - if (this.containsData()) { - length += varuint_1.default.encodingLength(this.dataType.toNumber()); - if (this.isMMRData()) { - length += this.data.getByteLength(); - } - else if (this.isVdxfData()) { - const vdxfDataLen = this.data.getByteLength(); - length += varuint_1.default.encodingLength(vdxfDataLen); - length += vdxfDataLen; - } - else { - const datalen = this.data.length; - length += varuint_1.default.encodingLength(datalen); - length += datalen; - } - } - return length; - } - getByteLength() { - return this.getPartialSignDataByteLength(); - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.flags = new bn_js_1.BN(reader.readCompactSize()); - if (this.containsAddress()) { - const hash160 = new Hash160_1.Hash160SerEnt(); - hash160.fromBuffer(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH)); - if (hash160.version === vdxf_1.I_ADDR_VERSION) { - this.address = hash160; - } - else if (hash160.version === vdxf_1.R_ADDR_VERSION) { - this.address = hash160; - } - else - throw new Error("Unrecognized address version"); - } - if (this.containsPrefixString()) { - this.prefixString = reader.readVarSlice(); - } - if (this.containsVdxfKeys()) { - const count = reader.readCompactSize(); - this.vdxfKeys = []; - for (let i = 0; i < count; i++) { - const varSlice = reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH); - const idId = new IdentityID_1.IdentityID(); - idId.fromBuffer(varSlice); - this.vdxfKeys.push(idId); - } - } - if (this.containsVdxfKeyNames()) { - this.vdxfKeyNames = reader.readVector(); - } - this.hashType = new bn_js_1.BN(reader.readCompactSize()); - if (this.containsBoundhashes()) { - this.boundHashes = reader.readVector(); - } - if (this.containsEncrypttoAddress()) { - const saplingAddr = new SaplingPaymentAddress_1.SaplingPaymentAddress(); - reader.offset = saplingAddr.fromBuffer(reader.buffer, reader.offset); - this.encryptToAddress = saplingAddr; - } - this.createMMR = !!reader.readUInt8(); - if (this.containsData()) { - this.dataType = new bn_js_1.BN(reader.readCompactSize()); - if (this.isMMRData()) { - const partialMMRData = new PartialMMRData_1.PartialMMRData(); - reader.offset = partialMMRData.fromBuffer(reader.buffer, reader.offset); - this.data = partialMMRData; - } - else if (this.isVdxfData()) { - const vdxfData = new VdxfUniValue_1.VdxfUniValue(); - const vdxfDataBuf = reader.readVarSlice(); - vdxfData.fromBuffer(vdxfDataBuf); - this.data = vdxfData; - } - else { - this.data = reader.readVarSlice(); - } - } - return reader.offset; - } - toBuffer() { - // Allocate the required size for partial sign data. - // Make sure getPartialSignDataByteLength() accounts for all fields in your updated model. - const writer = new BufferWriter(Buffer.alloc(this.getPartialSignDataByteLength())); - // Serialize flags - writer.writeCompactSize(this.flags.toNumber()); - // Address - if (this.containsAddress()) { - if (!this.address) { - throw new Error("Address is required but not provided"); - } - writer.writeSlice(this.address.toBuffer()); - } - // Prefix string - if (this.containsPrefixString()) { - if (!this.prefixString) { - throw new Error("Prefix string is required but not provided"); - } - writer.writeVarSlice(this.prefixString); - } - // VDXF keys - if (this.containsVdxfKeys()) { - if (!this.vdxfKeys) { - throw new Error("VDXF keys are required but not provided"); - } - writer.writeCompactSize(this.vdxfKeys.length); - for (const vdxfkey of this.vdxfKeys) { - writer.writeSlice(vdxfkey.toBuffer()); - } - } - // VDXF key names - if (this.containsVdxfKeyNames()) { - if (!this.vdxfKeyNames) { - throw new Error("VDXF key names are required but not provided"); - } - writer.writeVector(this.vdxfKeyNames); - } - writer.writeCompactSize(this.hashType.toNumber()); - // Bound hashes - if (this.containsBoundhashes()) { - if (!this.boundHashes) { - throw new Error("Bound hashes are required but not provided"); - } - writer.writeVector(this.boundHashes); - } - // Encrypt-to address (Sapling) - if (this.containsEncrypttoAddress()) { - if (!this.encryptToAddress || !(this.encryptToAddress instanceof SaplingPaymentAddress_1.SaplingPaymentAddress)) { - throw new Error("Sapling payment address is required but not provided"); - } - writer.writeSlice(this.encryptToAddress.toBuffer()); - } - // createMMR (boolean) - writer.writeUInt8(this.createMMR ? 1 : 0); - // Data - if (this.containsData()) { - if (!this.data || !this.dataType) { - throw new Error("Data is required but not provided"); - } - writer.writeCompactSize(this.dataType.toNumber()); - if (this.isMMRData()) { - const mmrData = this.data; - writer.writeSlice(mmrData.toBuffer()); - } - else if (this.isVdxfData()) { - const vdxfData = this.data; - writer.writeVarSlice(vdxfData.toBuffer()); - } - else { - writer.writeVarSlice(this.data); - } - } - return writer.buffer; - } - toJson() { - return { - flags: this.flags ? this.flags.toString(10) : undefined, - address: this.address ? this.address.toAddress() : undefined, - prefixstring: this.prefixString ? this.prefixString.toString('utf-8') : undefined, - vdxfkeys: this.vdxfKeys ? this.vdxfKeys.map(x => x.toAddress()) : undefined, - vdxfkeynames: this.vdxfKeyNames ? this.vdxfKeyNames.map(x => x.toString('utf-8')) : undefined, - boundhashes: this.boundHashes ? this.boundHashes.map(x => x.toString('hex')) : undefined, - hashtype: this.hashType ? this.hashType.toString(10) : undefined, - encrypttoaddress: this.encryptToAddress ? this.encryptToAddress.toAddressString() : undefined, - createmmr: this.createMMR, - signature: this.signature ? this.signature.toString('base64') : undefined, - datatype: this.dataType ? this.dataType.toString(10) : undefined, - data: this.data ? this.data instanceof PartialMMRData_1.PartialMMRData ? this.data.toJson() : this.data.toString('hex') : undefined - }; - } - static fromJson(json) { - let addr; - if (json.address) { - const { version, hash } = (0, address_1.fromBase58Check)(json.address); - if (version === vdxf_1.I_ADDR_VERSION) { - addr = new IdentityID_1.IdentityID(hash); - } - else if (version === vdxf_1.R_ADDR_VERSION) { - addr = new KeyID_1.KeyID(hash); - } - else - throw new Error("Unrecognized address version"); - } - const dataType = json.datatype ? new bn_js_1.BN(json.datatype, 10) : undefined; - return new PartialSignData({ - flags: json.flags ? new bn_js_1.BN(json.flags, 10) : undefined, - address: addr, - prefixString: json.prefixstring ? Buffer.from(json.prefixstring, 'utf-8') : undefined, - vdxfKeys: json.vdxfkeys ? json.vdxfkeys.map(x => IdentityID_1.IdentityID.fromAddress(x)) : undefined, - vdxfKeyNames: json.vdxfkeynames ? json.vdxfkeynames.map(x => Buffer.from(x, 'utf-8')) : undefined, - boundHashes: json.boundhashes ? json.boundhashes.map(x => Buffer.from(x, 'hex')) : undefined, - hashType: json.hashtype ? new bn_js_1.BN(json.hashtype, 10) : undefined, - encryptToAddress: json.encrypttoaddress ? SaplingPaymentAddress_1.SaplingPaymentAddress.fromAddressString(json.encrypttoaddress) : undefined, - createMMR: json.createmmr, - signature: json.signature ? Buffer.from(json.signature, 'base64') : undefined, - dataType: json.datatype ? new bn_js_1.BN(json.datatype, 10) : undefined, - data: json.data ? - typeof json.data === 'string' ? - Buffer.from(json.data, 'hex') - : - dataType && dataType.eq(pbaas_1.DATA_TYPE_MMRDATA) ? - PartialMMRData_1.PartialMMRData.fromJson(json.data) - : - VdxfUniValue_1.VdxfUniValue.fromJson(json.data) - : - undefined - }); - } - toCLIJson() { - const ret = { - address: this.address ? this.address.toAddress() : undefined, - prefixString: this.prefixString ? this.prefixString.toString('utf-8') : undefined, - vdxfKeys: this.vdxfKeys ? this.vdxfKeys.map(x => x.toAddress()) : undefined, - vdxfKeyNames: this.vdxfKeyNames ? this.vdxfKeyNames.map(x => x.toString('utf-8')) : undefined, - boundHashes: this.boundHashes ? this.boundHashes.map(x => x.toString('hex')) : undefined, - encryptToAddress: this.encryptToAddress ? this.encryptToAddress.toAddressString() : undefined, - createMMR: this.createMMR, - signature: this.signature ? this.signature.toString('base64') : undefined - }; - if (this.containsData() && this.data && this.dataType) { - if (this.dataType.eq(pbaas_1.DATA_TYPE_MMRDATA)) { - const mmrCLIJson = this.data.toCLIJson(); - ret['mmrdata'] = mmrCLIJson.mmrdata; - ret['mmrsalt'] = mmrCLIJson.mmrsalt; - ret['mmrhashtype'] = mmrCLIJson.mmrhashtype; - ret['priormmr'] = mmrCLIJson.priormmr; - } - else if (this.dataType.eq(pbaas_1.DATA_TYPE_VDXFDATA)) { - const uniJson = this.data.toJson(); - if (Array.isArray(uniJson)) - throw new Error("VDXF univalue arrays not supported as sign data param"); - ret['vdxfdata'] = this.data.toJson(); - } - else { - const dataBuf = this.data; - if (this.dataType.eq(pbaas_1.DATA_TYPE_FILENAME)) { - ret['filename'] = dataBuf.toString('utf-8'); - } - else if (this.dataType.eq(pbaas_1.DATA_TYPE_MESSAGE)) { - ret['message'] = dataBuf.toString('utf-8'); - } - else if (this.dataType.eq(pbaas_1.DATA_TYPE_HEX)) { - ret['messagehex'] = dataBuf.toString('hex'); - } - else if (this.dataType.eq(pbaas_1.DATA_TYPE_BASE64)) { - ret['messagebase64'] = dataBuf.toString('base64'); - } - else if (this.dataType.eq(pbaas_1.DATA_TYPE_DATAHASH)) { - ret['datahash'] = dataBuf.toString('hex'); - } - else - throw new Error("Unrecognized dataType"); - } - } - if (this.hashType.eq(pbaas_1.HASH_TYPE_SHA256)) { - ret['hashType'] = pbaas_1.HASH_TYPE_SHA256_NAME; - } - else if (this.hashType.eq(pbaas_1.HASH_TYPE_SHA256D)) { - ret['hashType'] = pbaas_1.HASH_TYPE_SHA256D_NAME; - } - else if (this.hashType.eq(pbaas_1.HASH_TYPE_BLAKE2B)) { - ret['hashType'] = pbaas_1.HASH_TYPE_BLAKE2B_NAME; - } - else if (this.hashType.eq(pbaas_1.HASH_TYPE_KECCAK256)) { - ret['hashType'] = pbaas_1.HASH_TYPE_KECCAK256_NAME; - } - else - throw new Error("Unrecognized hash type"); - for (const key in ret) { - if (ret[key] === undefined) - delete ret[key]; - } - return ret; - } - static fromCLIJson(json) { - let addr; - if (json.address) { - const { version, hash } = (0, address_1.fromBase58Check)(json.address); - if (version === vdxf_1.I_ADDR_VERSION) { - addr = new IdentityID_1.IdentityID(hash); - } - else if (version === vdxf_1.R_ADDR_VERSION) { - addr = new KeyID_1.KeyID(hash); - } - else - throw new Error("Unrecognized address version"); - } - const config = { - address: addr, - prefixString: json.prefixString ? Buffer.from(json.prefixString, 'utf-8') : undefined, - vdxfKeys: json.vdxfKeys ? json.vdxfKeys.map(x => IdentityID_1.IdentityID.fromAddress(x)) : undefined, - vdxfKeyNames: json.vdxfKeyNames ? json.vdxfKeyNames.map(x => Buffer.from(x, 'utf-8')) : undefined, - boundHashes: json.boundHashes ? json.boundHashes.map(x => Buffer.from(x, 'hex')) : undefined, - encryptToAddress: json.encryptToAddress ? SaplingPaymentAddress_1.SaplingPaymentAddress.fromAddressString(json.encryptToAddress) : undefined, - createMMR: json.createMMR, - signature: json.signature ? Buffer.from(json.signature, 'base64') : undefined - }; - if ('mmrdata' in json) { - const pmd = PartialMMRData_1.PartialMMRData.fromCLIJson({ - mmrdata: json.mmrdata, - mmrsalt: json.mmrsalt, - mmrhashtype: json.mmrhashtype, - priormmr: json.priormmr - }); - config.data = pmd; - config.dataType = pbaas_1.DATA_TYPE_MMRDATA; - } - else if (json.filename) { - config.data = Buffer.from(json.filename, 'utf-8'); - config.dataType = pbaas_1.DATA_TYPE_FILENAME; - } - else if (json.message) { - config.data = Buffer.from(json.message, 'utf-8'); - config.dataType = pbaas_1.DATA_TYPE_MESSAGE; - } - else if (json.vdxfdata) { - config.data = VdxfUniValue_1.VdxfUniValue.fromJson(json.vdxfdata); - config.dataType = pbaas_1.DATA_TYPE_VDXFDATA; - } - else if (json.messagehex) { - config.data = Buffer.from(json.messagehex, 'hex'); - config.dataType = pbaas_1.DATA_TYPE_HEX; - } - else if (json.messagebase64) { - config.data = Buffer.from(json.messagebase64, 'base64'); - config.dataType = pbaas_1.DATA_TYPE_BASE64; - } - else if (json.datahash) { - config.data = Buffer.from(json.datahash, 'hex'); - config.dataType = pbaas_1.DATA_TYPE_DATAHASH; - } - if (json.hashType) { - switch (json.hashType) { - case pbaas_1.HASH_TYPE_SHA256_NAME: - config.hashType = pbaas_1.HASH_TYPE_SHA256; - break; - case pbaas_1.HASH_TYPE_SHA256D_NAME: - config.hashType = pbaas_1.HASH_TYPE_SHA256D; - break; - case pbaas_1.HASH_TYPE_BLAKE2B_NAME: - config.hashType = pbaas_1.HASH_TYPE_BLAKE2B; - break; - case pbaas_1.HASH_TYPE_KECCAK256_NAME: - config.hashType = pbaas_1.HASH_TYPE_KECCAK256; - break; - default: - throw new Error("Unrecognized hash type"); - } - } - return new PartialSignData(config); - } -} -exports.PartialSignData = PartialSignData; -PartialSignData.CONTAINS_DATA = new bn_js_1.BN("1", 10); -PartialSignData.CONTAINS_ADDRESS = new bn_js_1.BN("2", 10); -PartialSignData.CONTAINS_ENCRYPTTOADDRESS = new bn_js_1.BN("4", 10); -PartialSignData.CONTAINS_CURRENTSIG = new bn_js_1.BN("8", 10); -PartialSignData.CONTAINS_PREFIXSTRING = new bn_js_1.BN("16", 10); -PartialSignData.CONTAINS_VDXFKEYS = new bn_js_1.BN("32", 10); -PartialSignData.CONTAINS_VDXFKEYNAMES = new bn_js_1.BN("64", 10); -PartialSignData.CONTAINS_BOUNDHASHES = new bn_js_1.BN("128", 10); diff --git a/dist/pbaas/Principal.d.ts b/dist/pbaas/Principal.d.ts deleted file mode 100644 index af1d6546..00000000 --- a/dist/pbaas/Principal.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { KeyID } from './KeyID'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -export declare const PRINCIPAL_DEFAULT_FLAGS: import("bn.js"); -export declare const PRINCIPAL_VERSION_INVALID: import("bn.js"); -export declare const PRINCIPAL_VERSION_CURRENT: import("bn.js"); -export declare class Principal implements SerializableEntity { - flags: BigNumber; - version: BigNumber; - min_sigs?: BigNumber; - primary_addresses?: Array; - constructor(data?: { - version?: BigNumber; - flags?: BigNumber; - min_sigs?: BigNumber; - primary_addresses?: Array; - }); - protected containsFlags(): boolean; - protected containsVersion(): boolean; - protected containsPrimaryAddresses(): boolean; - protected containsMinSigs(): boolean; - private getSelfByteLength; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; -} diff --git a/dist/pbaas/Principal.js b/dist/pbaas/Principal.js deleted file mode 100644 index efe2e1ac..00000000 --- a/dist/pbaas/Principal.js +++ /dev/null @@ -1,98 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Principal = exports.PRINCIPAL_VERSION_CURRENT = exports.PRINCIPAL_VERSION_INVALID = exports.PRINCIPAL_DEFAULT_FLAGS = void 0; -const bufferutils_1 = require("../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const varuint_1 = require("../utils/varuint"); -const KeyID_1 = require("./KeyID"); -const NoDestination_1 = require("./NoDestination"); -exports.PRINCIPAL_DEFAULT_FLAGS = new bn_js_1.BN(0, 10); -exports.PRINCIPAL_VERSION_INVALID = new bn_js_1.BN(0, 10); -exports.PRINCIPAL_VERSION_CURRENT = new bn_js_1.BN(1, 10); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class Principal { - constructor(data) { - this.flags = exports.PRINCIPAL_DEFAULT_FLAGS; - this.version = exports.PRINCIPAL_VERSION_INVALID; - if (data != null) { - if (data.flags != null) - this.flags = data.flags; - if (data.version != null) - this.version = data.version; - if (data.min_sigs != null) - this.min_sigs = data.min_sigs; - if (data.primary_addresses) - this.primary_addresses = data.primary_addresses; - } - } - containsFlags() { - return true; - } - containsVersion() { - return true; - } - containsPrimaryAddresses() { - return true; - } - containsMinSigs() { - return true; - } - getSelfByteLength() { - let byteLength = 0; - if (this.containsVersion()) - byteLength += 4; //uint32 version size - if (this.containsFlags()) - byteLength += 4; //uint32 flags size - if (this.containsPrimaryAddresses()) { - byteLength += varuint_1.default.encodingLength(this.primary_addresses.length); - for (const addr of this.primary_addresses) { - byteLength += varuint_1.default.encodingLength(addr.getByteLength()); - byteLength += addr.getByteLength(); - } - } - if (this.containsMinSigs()) { - byteLength += 4; //uint32 minimum signatures size - } - return byteLength; - } - getByteLength() { - return this.getSelfByteLength(); - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getSelfByteLength())); - if (this.containsVersion()) - writer.writeUInt32(this.version.toNumber()); - if (this.containsFlags()) - writer.writeUInt32(this.flags.toNumber()); - if (this.containsPrimaryAddresses()) - writer.writeVector(this.primary_addresses.map(x => x.toBuffer())); - if (this.containsMinSigs()) - writer.writeUInt32(this.min_sigs.toNumber()); - return writer.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - if (this.containsVersion()) - this.version = new bn_js_1.BN(reader.readUInt32(), 10); - if (this.containsFlags()) - this.flags = new bn_js_1.BN(reader.readUInt32(), 10); - if (this.containsPrimaryAddresses()) { - this.primary_addresses = reader.readVector().map(x => { - if (x.length === 20) { - return new KeyID_1.KeyID(x); - } - else if (x.length === 33) { - //TODO: Implement pubkey principal by adding PubKey class as possible TxDestination - throw new Error("Pubkey Principal not yet supported"); - } - else { - return new NoDestination_1.NoDestination(); - } - }); - } - if (this.containsMinSigs()) - this.min_sigs = new bn_js_1.BN(reader.readUInt32(), 10); - return reader.offset; - } -} -exports.Principal = Principal; diff --git a/dist/pbaas/PubKey.d.ts b/dist/pbaas/PubKey.d.ts deleted file mode 100644 index 6eed8fe4..00000000 --- a/dist/pbaas/PubKey.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { SerializableEntity } from "../utils/types/SerializableEntity"; -export declare class PubKey implements SerializableEntity { - static PUBLIC_KEY_SIZE: number; - static COMPRESSED_PUBLIC_KEY_SIZE: number; - bytes: Buffer; - compressed: boolean; - constructor(bytes?: Buffer, compressed?: boolean); - getByteLength(): number; - fromBuffer(buffer: Buffer, offset?: number): number; - toBuffer(): Buffer; -} diff --git a/dist/pbaas/PubKey.js b/dist/pbaas/PubKey.js deleted file mode 100644 index 2636491c..00000000 --- a/dist/pbaas/PubKey.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PubKey = void 0; -const bufferutils_1 = require("../utils/bufferutils"); -class PubKey { - constructor(bytes = Buffer.alloc(0), compressed = true) { - this.bytes = bytes; - this.compressed = compressed; - } - getByteLength() { - return this.compressed ? PubKey.COMPRESSED_PUBLIC_KEY_SIZE : PubKey.PUBLIC_KEY_SIZE; - } - fromBuffer(buffer, offset = 0) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - const header = buffer[offset]; - this.compressed = (header === 2 || header === 3); - this.bytes = reader.readSlice(this.compressed ? PubKey.COMPRESSED_PUBLIC_KEY_SIZE : PubKey.PUBLIC_KEY_SIZE); - return reader.offset; - } - toBuffer() { - const buffer = Buffer.alloc(this.getByteLength()); - const writer = new bufferutils_1.default.BufferWriter(buffer); - writer.writeSlice(this.bytes); - return writer.buffer; - } -} -exports.PubKey = PubKey; -PubKey.PUBLIC_KEY_SIZE = 65; -PubKey.COMPRESSED_PUBLIC_KEY_SIZE = 33; diff --git a/dist/pbaas/Rating.d.ts b/dist/pbaas/Rating.d.ts deleted file mode 100644 index b18f18e6..00000000 --- a/dist/pbaas/Rating.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -export interface RatingJson { - version: number; - trustlevel: number; - ratingsmap: { - [key: string]: string; - }; -} -export declare class Rating implements SerializableEntity { - static VERSION_INVALID: import("bn.js"); - static VERSION_FIRST: import("bn.js"); - static VERSION_LAST: import("bn.js"); - static VERSION_CURRENT: import("bn.js"); - static TRUST_UNKNOWN: import("bn.js"); - static TRUST_BLOCKED: import("bn.js"); - static TRUST_APPROVED: import("bn.js"); - static TRUST_FIRST: import("bn.js"); - static TRUST_LAST: import("bn.js"); - version: BigNumber; - trust_level: BigNumber; - ratings: Map; - constructor(data?: { - version?: BigNumber; - trust_level?: BigNumber; - ratings?: Map; - }); - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - isValid(): boolean; - toJson(): { - version: number; - trustlevel: number; - ratingsmap: { - [key: string]: string; - }; - }; - static fromJson(json: RatingJson): Rating; -} diff --git a/dist/pbaas/Rating.js b/dist/pbaas/Rating.js deleted file mode 100644 index b315273d..00000000 --- a/dist/pbaas/Rating.js +++ /dev/null @@ -1,104 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Rating = void 0; -const varuint_1 = require("../utils/varuint"); -const address_1 = require("../utils/address"); -const bufferutils_1 = require("../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const vdxf_1 = require("../constants/vdxf"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class Rating { - constructor(data = {}) { - this.version = data.version || new bn_js_1.BN(1, 10); - this.trust_level = data.trust_level || new bn_js_1.BN(0, 10); - this.ratings = new Map(data.ratings || []); - } - getByteLength() { - let byteLength = 0; - byteLength += 4; // version uint32 - byteLength += 1; // trust_level uint8 - byteLength += varuint_1.default.encodingLength(this.ratings.size); - for (const [key, value] of this.ratings) { - byteLength += vdxf_1.HASH160_BYTE_LENGTH; - byteLength += varuint_1.default.encodingLength(value.length); - byteLength += value.length; - } - return byteLength; - } - toBuffer() { - const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); - bufferWriter.writeUInt32(this.version.toNumber()); - bufferWriter.writeUInt8(this.trust_level.toNumber()); - bufferWriter.writeCompactSize(this.ratings.size); - const entries = []; - for (const [key, value] of this.ratings) { - const { hash } = (0, address_1.fromBase58Check)(key); - entries.push({ [hash.toString('hex')]: value }); - } - // Sort by Buffer (vkey) value, smallest first - entries.sort((a, b) => { - const aKey = Object.keys(a)[0]; - const bKey = Object.keys(b)[0]; - const aBuf = Buffer.from(aKey, 'hex'); - const bBuf = Buffer.from(bKey, 'hex'); - return aBuf.compare(bBuf); - }); - // Write sorted entries - for (const value of entries) { - const key = Object.keys(value)[0]; - const innervalue = value[key]; - bufferWriter.writeSlice(Buffer.from(key, 'hex')); - bufferWriter.writeVarSlice(innervalue); - } - return bufferWriter.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.version = new bn_js_1.BN(reader.readUInt32()); - this.trust_level = new bn_js_1.BN(reader.readUInt8()); - const count = reader.readCompactSize(); - for (let i = 0; i < count; i++) { - const hash = reader.readSlice(20); - const value = reader.readVarSlice(); - const base58Key = (0, address_1.toBase58Check)(hash, vdxf_1.I_ADDR_VERSION); - this.ratings.set(base58Key, value); - } - return reader.offset; - } - isValid() { - return this.version.gte(Rating.VERSION_FIRST) && this.version.lte(Rating.VERSION_LAST) && - this.trust_level.gte(Rating.TRUST_FIRST) && this.trust_level.lte(Rating.TRUST_LAST); - } - toJson() { - const ratings = {}; - this.ratings.forEach((value, key) => { - ratings[key] = value.toString('hex'); - }); - return { - version: this.version.toNumber(), - trustlevel: this.trust_level.toNumber(), - ratingsmap: ratings - }; - } - static fromJson(json) { - const ratings = new Map(); - for (const key in json.ratingsmap) { - ratings.set(key, Buffer.from(json.ratingsmap[key], 'hex')); - } - return new Rating({ - version: new bn_js_1.BN(json.version), - trust_level: new bn_js_1.BN(json.trustlevel), - ratings: ratings - }); - } -} -exports.Rating = Rating; -Rating.VERSION_INVALID = new bn_js_1.BN(0, 10); -Rating.VERSION_FIRST = new bn_js_1.BN(1, 10); -Rating.VERSION_LAST = new bn_js_1.BN(1, 10); -Rating.VERSION_CURRENT = new bn_js_1.BN(1, 10); -Rating.TRUST_UNKNOWN = new bn_js_1.BN(0, 10); // unknown and can be included in exploration -Rating.TRUST_BLOCKED = new bn_js_1.BN(1, 10); // suspected or known to be untrustworthy and should not be interacted with -Rating.TRUST_APPROVED = new bn_js_1.BN(2, 10); // explicitly believed to be trustworthy enough to interact with -Rating.TRUST_FIRST = new bn_js_1.BN(0, 10); -Rating.TRUST_LAST = new bn_js_1.BN(2, 10); diff --git a/dist/pbaas/ReserveTransfer.d.ts b/dist/pbaas/ReserveTransfer.d.ts deleted file mode 100644 index 3e4d1e40..00000000 --- a/dist/pbaas/ReserveTransfer.d.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { CurrencyValueMap } from './CurrencyValueMap'; -import { BigNumber } from '../utils/types/BigNumber'; -import { TokenOutput } from './TokenOutput'; -import { TransferDestination } from './TransferDestination'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -export declare const RESERVE_TRANSFER_INVALID: import("bn.js"); -export declare const RESERVE_TRANSFER_VALID: import("bn.js"); -export declare const RESERVE_TRANSFER_CONVERT: import("bn.js"); -export declare const RESERVE_TRANSFER_PRECONVERT: import("bn.js"); -export declare const RESERVE_TRANSFER_FEE_OUTPUT: import("bn.js"); -export declare const RESERVE_TRANSFER_DOUBLE_SEND: import("bn.js"); -export declare const RESERVE_TRANSFER_MINT_CURRENCY: import("bn.js"); -export declare const RESERVE_TRANSFER_CROSS_SYSTEM: import("bn.js"); -export declare const RESERVE_TRANSFER_BURN_CHANGE_PRICE: import("bn.js"); -export declare const RESERVE_TRANSFER_BURN_CHANGE_WEIGHT: import("bn.js"); -export declare const RESERVE_TRANSFER_IMPORT_TO_SOURCE: import("bn.js"); -export declare const RESERVE_TRANSFER_RESERVE_TO_RESERVE: import("bn.js"); -export declare const RESERVE_TRANSFER_REFUND: import("bn.js"); -export declare const RESERVE_TRANSFER_IDENTITY_EXPORT: import("bn.js"); -export declare const RESERVE_TRANSFER_CURRENCY_EXPORT: import("bn.js"); -export declare const RESERVE_TRANSFER_ARBITRAGE_ONLY: import("bn.js"); -export declare const RESERVE_TRANSFER_DESTINATION: TransferDestination; -export declare class ReserveTransfer extends TokenOutput implements SerializableEntity { - flags: BigNumber; - fee_currency_id: string; - fee_amount: BigNumber; - transfer_destination: TransferDestination; - dest_currency_id: string; - second_reserve_id: string; - dest_system_id: string; - constructor(data?: { - values?: CurrencyValueMap; - version?: BigNumber; - flags?: BigNumber; - fee_currency_id?: string; - fee_amount?: BigNumber; - transfer_destination?: TransferDestination; - dest_currency_id?: string; - second_reserve_id?: string; - dest_system_id?: string; - }); - isReserveToReserve(): boolean; - isCrossSystem(): boolean; - isConversion(): boolean; - isPreConversion(): boolean; - isFeeOutput(): boolean; - isDoubleSend(): boolean; - isMint(): boolean; - isBurnChangeWeight(): boolean; - isBurnChangePrice(): boolean; - isImportToSource(): boolean; - isRefund(): boolean; - isIdentityExport(): boolean; - isCurrencyExport(): boolean; - isArbitrageOnly(): boolean; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; -} diff --git a/dist/pbaas/ReserveTransfer.js b/dist/pbaas/ReserveTransfer.js deleted file mode 100644 index 7e9f7984..00000000 --- a/dist/pbaas/ReserveTransfer.js +++ /dev/null @@ -1,154 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ReserveTransfer = exports.RESERVE_TRANSFER_DESTINATION = exports.RESERVE_TRANSFER_ARBITRAGE_ONLY = exports.RESERVE_TRANSFER_CURRENCY_EXPORT = exports.RESERVE_TRANSFER_IDENTITY_EXPORT = exports.RESERVE_TRANSFER_REFUND = exports.RESERVE_TRANSFER_RESERVE_TO_RESERVE = exports.RESERVE_TRANSFER_IMPORT_TO_SOURCE = exports.RESERVE_TRANSFER_BURN_CHANGE_WEIGHT = exports.RESERVE_TRANSFER_BURN_CHANGE_PRICE = exports.RESERVE_TRANSFER_CROSS_SYSTEM = exports.RESERVE_TRANSFER_MINT_CURRENCY = exports.RESERVE_TRANSFER_DOUBLE_SEND = exports.RESERVE_TRANSFER_FEE_OUTPUT = exports.RESERVE_TRANSFER_PRECONVERT = exports.RESERVE_TRANSFER_CONVERT = exports.RESERVE_TRANSFER_VALID = exports.RESERVE_TRANSFER_INVALID = void 0; -const varint_1 = require("../utils/varint"); -const bufferutils_1 = require("../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const TokenOutput_1 = require("./TokenOutput"); -const TransferDestination_1 = require("./TransferDestination"); -const address_1 = require("../utils/address"); -const vdxf_1 = require("../constants/vdxf"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -exports.RESERVE_TRANSFER_INVALID = new bn_js_1.BN(0, 10); -exports.RESERVE_TRANSFER_VALID = new bn_js_1.BN(1, 10); -exports.RESERVE_TRANSFER_CONVERT = new bn_js_1.BN(2, 10); -exports.RESERVE_TRANSFER_PRECONVERT = new bn_js_1.BN(4, 10); -exports.RESERVE_TRANSFER_FEE_OUTPUT = new bn_js_1.BN(8, 10); // one per import, amount must match total percentage of fees for exporter, no pre-convert allowed -exports.RESERVE_TRANSFER_DOUBLE_SEND = new bn_js_1.BN("10", 16); // this is used along with increasing the fee to send one transaction on two hops -exports.RESERVE_TRANSFER_MINT_CURRENCY = new bn_js_1.BN("20", 16); // set when this output is being minted on import -exports.RESERVE_TRANSFER_CROSS_SYSTEM = new bn_js_1.BN("40", 16); // if this is set, there is a systemID serialized and deserialized as well for destination -exports.RESERVE_TRANSFER_BURN_CHANGE_PRICE = new bn_js_1.BN("80", 16); // this output is being burned on import and will change the price -exports.RESERVE_TRANSFER_BURN_CHANGE_WEIGHT = new bn_js_1.BN("100", 16); // this output is being burned on import and will change the reserve ratio -exports.RESERVE_TRANSFER_IMPORT_TO_SOURCE = new bn_js_1.BN("200", 16); // set when the source currency, not destination is the import currency -exports.RESERVE_TRANSFER_RESERVE_TO_RESERVE = new bn_js_1.BN("400", 16); // for arbitrage or transient conversion, 2 stage solving (2nd from new fractional to reserves) -exports.RESERVE_TRANSFER_REFUND = new bn_js_1.BN("800", 16); // this transfer should be refunded, individual property when conversions exceed limits -exports.RESERVE_TRANSFER_IDENTITY_EXPORT = new bn_js_1.BN("1000", 16); // this exports a full identity when the next cross-chain leg is processed -exports.RESERVE_TRANSFER_CURRENCY_EXPORT = new bn_js_1.BN("2000", 16); // this exports a currency definition -exports.RESERVE_TRANSFER_ARBITRAGE_ONLY = new bn_js_1.BN("4000", 16); // in PBaaS V1, one additional reserve transfer from the local system may be added by the importer -exports.RESERVE_TRANSFER_DESTINATION = new TransferDestination_1.TransferDestination({ - type: TransferDestination_1.DEST_PKH, - destination_bytes: (0, address_1.fromBase58Check)("RTqQe58LSj2yr5CrwYFwcsAQ1edQwmrkUU").hash -}); -class ReserveTransfer extends TokenOutput_1.TokenOutput { - constructor(data) { - super(data); - this.flags = exports.RESERVE_TRANSFER_INVALID; - this.fee_currency_id = null; - this.fee_amount = new bn_js_1.BN(0, 10); - this.transfer_destination = new TransferDestination_1.TransferDestination(); - this.dest_currency_id = null; - this.second_reserve_id = null; - this.dest_currency_id = null; - if (data != null) { - if (data.flags != null) - this.flags = data.flags; - if (data.fee_currency_id != null) - this.fee_currency_id = data.fee_currency_id; - if (data.fee_amount != null) - this.fee_amount = data.fee_amount; - if (data.transfer_destination != null) - this.transfer_destination = data.transfer_destination; - if (data.dest_currency_id != null) - this.dest_currency_id = data.dest_currency_id; - if (data.second_reserve_id != null) - this.second_reserve_id = data.second_reserve_id; - if (data.dest_system_id != null) - this.dest_system_id = data.dest_system_id; - } - } - isReserveToReserve() { - return !!(this.flags.and(exports.RESERVE_TRANSFER_RESERVE_TO_RESERVE).toNumber()); - } - isCrossSystem() { - return !!(this.flags.and(exports.RESERVE_TRANSFER_CROSS_SYSTEM).toNumber()); - } - isConversion() { - return !!(this.flags.and(exports.RESERVE_TRANSFER_CONVERT).toNumber()); - } - isPreConversion() { - return !!(this.flags.and(exports.RESERVE_TRANSFER_PRECONVERT).toNumber()); - } - isFeeOutput() { - return !!(this.flags.and(exports.RESERVE_TRANSFER_FEE_OUTPUT).toNumber()); - } - isDoubleSend() { - return !!(this.flags.and(exports.RESERVE_TRANSFER_DOUBLE_SEND).toNumber()); - } - isMint() { - return !!(this.flags.and(exports.RESERVE_TRANSFER_MINT_CURRENCY).toNumber()); - } - isBurnChangeWeight() { - return !!(this.flags.and(exports.RESERVE_TRANSFER_BURN_CHANGE_WEIGHT).toNumber()); - } - isBurnChangePrice() { - return !!(this.flags.and(exports.RESERVE_TRANSFER_BURN_CHANGE_PRICE).toNumber()); - } - isImportToSource() { - return !!(this.flags.and(exports.RESERVE_TRANSFER_IMPORT_TO_SOURCE).toNumber()); - } - isRefund() { - return !!(this.flags.and(exports.RESERVE_TRANSFER_REFUND).toNumber()); - } - isIdentityExport() { - return !!(this.flags.and(exports.RESERVE_TRANSFER_IDENTITY_EXPORT).toNumber()); - } - isCurrencyExport() { - return !!(this.flags.and(exports.RESERVE_TRANSFER_CURRENCY_EXPORT).toNumber()); - } - isArbitrageOnly() { - return !!(this.flags.and(exports.RESERVE_TRANSFER_ARBITRAGE_ONLY).toNumber()); - } - getByteLength() { - let length = super.getByteLength(); - length += varint_1.default.encodingLength(this.flags); - length += (0, address_1.fromBase58Check)(this.fee_currency_id).hash.length; - length += varint_1.default.encodingLength(this.fee_amount); - length += this.transfer_destination.getByteLength(); - length += (0, address_1.fromBase58Check)(this.dest_currency_id).hash.length; - if (this.isReserveToReserve()) { - length += (0, address_1.fromBase58Check)(this.second_reserve_id).hash.length; - } - if (this.isCrossSystem()) { - length += (0, address_1.fromBase58Check)(this.dest_system_id).hash.length; - } - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - const ownOutput = new TokenOutput_1.TokenOutput({ - values: this.reserve_values, - version: this.version - }); - writer.writeSlice(ownOutput.toBuffer()); - writer.writeVarInt(this.flags); - writer.writeSlice((0, address_1.fromBase58Check)(this.fee_currency_id).hash); - writer.writeVarInt(this.fee_amount); - writer.writeSlice(this.transfer_destination.toBuffer()); - writer.writeSlice((0, address_1.fromBase58Check)(this.dest_currency_id).hash); - if (this.isReserveToReserve()) { - writer.writeSlice((0, address_1.fromBase58Check)(this.second_reserve_id).hash); - } - if (this.isCrossSystem()) { - writer.writeSlice((0, address_1.fromBase58Check)(this.dest_system_id).hash); - } - return writer.buffer; - } - fromBuffer(buffer, offset = 0) { - const _offset = super.fromBuffer(buffer, offset); - const reader = new BufferReader(buffer, _offset); - this.flags = reader.readVarInt(); - this.fee_currency_id = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - this.fee_amount = reader.readVarInt(); - this.transfer_destination = new TransferDestination_1.TransferDestination(); - reader.offset = this.transfer_destination.fromBuffer(buffer, reader.offset); - this.dest_currency_id = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - if (this.isReserveToReserve()) { - this.second_reserve_id = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - } - if (this.isCrossSystem()) { - this.dest_system_id = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - } - return reader.offset; - } -} -exports.ReserveTransfer = ReserveTransfer; diff --git a/dist/pbaas/SaltedData.d.ts b/dist/pbaas/SaltedData.d.ts deleted file mode 100644 index 85a2c9e6..00000000 --- a/dist/pbaas/SaltedData.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { VDXFData } from '../vdxf/index'; -export declare class SaltedData extends VDXFData { - salt: Buffer; - static VERSION_INVALID: import("bn.js"); - static FIRST_VERSION: import("bn.js"); - static LAST_VERSION: import("bn.js"); - static DEFAULT_VERSION: import("bn.js"); - constructor(data?: Buffer, salt?: Buffer); - static fromJson(data: any): SaltedData; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): any; - getHash(hw: (data: Buffer) => Buffer): Buffer; -} diff --git a/dist/pbaas/SaltedData.js b/dist/pbaas/SaltedData.js deleted file mode 100644 index 0a73a8e7..00000000 --- a/dist/pbaas/SaltedData.js +++ /dev/null @@ -1,82 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SaltedData = void 0; -const varint_1 = require("../utils/varint"); -const varuint_1 = require("../utils/varuint"); -const address_1 = require("../utils/address"); -const bufferutils_1 = require("../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const vdxf_1 = require("../constants/vdxf"); -const index_1 = require("../vdxf/index"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -const createHash = require("create-hash"); -const vdxfdatakeys_1 = require("../vdxf/vdxfdatakeys"); -class SaltedData extends index_1.VDXFData { - constructor(data, salt = Buffer.alloc(0)) { - super(data); - if (salt.length != 0) { - this.salt = salt; - } - this.vdxfkey = vdxfdatakeys_1.SaltedDataKey.vdxfid; - this.version = SaltedData.DEFAULT_VERSION; - } - static fromJson(data) { - const saltedData = new SaltedData(); - if (data) { - if (data.version) { - saltedData.version = new bn_js_1.BN(data.version); - } - else { - saltedData.version = SaltedData.DEFAULT_VERSION; - } - if (data.salt) - saltedData.salt = Buffer.from(data.salt, 'hex'); - if (data.data) - saltedData.data = Buffer.from(data.data, 'hex'); - if (data.key) - saltedData.vdxfkey = data.key; - } - return saltedData; - } - getByteLength() { - let byteLength = 0; - byteLength += vdxf_1.HASH160_BYTE_LENGTH; // vdxfkey - byteLength += varint_1.default.encodingLength(this.version); - byteLength += varuint_1.default.encodingLength(this.data.length + this.salt.length); - byteLength += this.data.length + this.salt.length; - return byteLength; - } - toBuffer() { - const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); - bufferWriter.writeSlice((0, address_1.fromBase58Check)(this.vdxfkey).hash); - bufferWriter.writeVarInt(this.version); - bufferWriter.writeVarSlice(Buffer.concat([this.data, this.salt])); - return bufferWriter.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.vdxfkey = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - this.version = reader.readVarInt(); - this.data = reader.readVarSlice(); - this.salt = this.data.slice(this.data.length - 32); - this.data = this.data.slice(0, this.data.length - 32); - return reader.offset; - } - toJson() { - return { - version: this.version.toString(), - key: this.vdxfkey, - data: this.data.toString('hex'), - salt: this.salt.toString('hex') - }; - } - getHash(hw) { - const hash = hw(Buffer.concat([this.data, this.salt])); - return hash; - } -} -exports.SaltedData = SaltedData; -SaltedData.VERSION_INVALID = new bn_js_1.BN(0); -SaltedData.FIRST_VERSION = new bn_js_1.BN(1); -SaltedData.LAST_VERSION = new bn_js_1.BN(1); -SaltedData.DEFAULT_VERSION = new bn_js_1.BN(1); diff --git a/dist/pbaas/SaplingExtendedSpendingKey.d.ts b/dist/pbaas/SaplingExtendedSpendingKey.d.ts deleted file mode 100644 index 1e081f99..00000000 --- a/dist/pbaas/SaplingExtendedSpendingKey.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { SerializableEntity } from '../utils/types/SerializableEntity'; -export declare class SaplingExtendedSpendingKey implements SerializableEntity { - depth: number; - parentFVKTag: Buffer; - childIndex: Buffer; - chainCode: Buffer; - ask: Buffer; - nsk: Buffer; - ovk: Buffer; - dk: Buffer; - constructor(data?: { - depth?: number; - parentFVKTag?: Buffer; - childIndex?: Buffer; - chainCode?: Buffer; - ask?: Buffer; - nsk?: Buffer; - ovk?: Buffer; - dk?: Buffer; - }); - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - static fromKeyString(key: string): SaplingExtendedSpendingKey; - toKeyString(testnet?: boolean): string; -} diff --git a/dist/pbaas/SaplingExtendedSpendingKey.js b/dist/pbaas/SaplingExtendedSpendingKey.js deleted file mode 100644 index 3790a4cf..00000000 --- a/dist/pbaas/SaplingExtendedSpendingKey.js +++ /dev/null @@ -1,65 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SaplingExtendedSpendingKey = void 0; -const bufferutils_1 = require("../utils/bufferutils"); -const sapling_1 = require("../utils/sapling"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class SaplingExtendedSpendingKey { - constructor(data) { - var _a, _b, _c, _d, _e, _f, _g, _h; - if (data != null) { - this.depth = (_a = data.depth) !== null && _a !== void 0 ? _a : 0; - this.parentFVKTag = (_b = data.parentFVKTag) !== null && _b !== void 0 ? _b : Buffer.alloc(4); - this.childIndex = (_c = data.childIndex) !== null && _c !== void 0 ? _c : Buffer.alloc(4); - this.chainCode = (_d = data.chainCode) !== null && _d !== void 0 ? _d : Buffer.alloc(32); - this.ask = (_e = data.ask) !== null && _e !== void 0 ? _e : Buffer.alloc(32); - this.nsk = (_f = data.nsk) !== null && _f !== void 0 ? _f : Buffer.alloc(32); - this.ovk = (_g = data.ovk) !== null && _g !== void 0 ? _g : Buffer.alloc(32); - this.dk = (_h = data.dk) !== null && _h !== void 0 ? _h : Buffer.alloc(32); - } - } - getByteLength() { - return 1 + 4 + 4 + 32 + 32 + 32 + 32 + 32; // 169 bytes total - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeUInt8(this.depth); - writer.writeSlice(this.parentFVKTag); - writer.writeSlice(this.childIndex); - writer.writeSlice(this.chainCode); - writer.writeSlice(this.ask); - writer.writeSlice(this.nsk); - writer.writeSlice(this.ovk); - writer.writeSlice(this.dk); - return writer.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.depth = reader.readUInt8(); - this.parentFVKTag = reader.readSlice(4); - this.childIndex = reader.readSlice(4); - this.chainCode = reader.readSlice(32); - this.ask = reader.readSlice(32); - this.nsk = reader.readSlice(32); - this.ovk = reader.readSlice(32); - this.dk = reader.readSlice(32); - return reader.offset; - } - static fromKeyString(key) { - const decoded = (0, sapling_1.decodeSaplingExtendedSpendingKey)(key); - return new SaplingExtendedSpendingKey(decoded); - } - toKeyString(testnet = false) { - return (0, sapling_1.encodeSaplingExtendedSpendingKey)({ - depth: this.depth, - parentFVKTag: this.parentFVKTag, - childIndex: this.childIndex, - chainCode: this.chainCode, - ask: this.ask, - nsk: this.nsk, - ovk: this.ovk, - dk: this.dk - }, testnet); - } -} -exports.SaplingExtendedSpendingKey = SaplingExtendedSpendingKey; diff --git a/dist/pbaas/SaplingExtendedViewingKey.d.ts b/dist/pbaas/SaplingExtendedViewingKey.d.ts deleted file mode 100644 index c834b5d7..00000000 --- a/dist/pbaas/SaplingExtendedViewingKey.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { SerializableEntity } from '../utils/types/SerializableEntity'; -export declare class SaplingExtendedViewingKey implements SerializableEntity { - depth: number; - parentFVKTag: Buffer; - childIndex: Buffer; - chainCode: Buffer; - ak: Buffer; - nk: Buffer; - ovk: Buffer; - dk: Buffer; - constructor(data?: { - depth?: number; - parentFVKTag?: Buffer; - childIndex?: Buffer; - chainCode?: Buffer; - ak?: Buffer; - nk?: Buffer; - ovk?: Buffer; - dk?: Buffer; - }); - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - static fromKeyString(key: string): SaplingExtendedViewingKey; - toKeyString(testnet?: boolean): string; -} diff --git a/dist/pbaas/SaplingExtendedViewingKey.js b/dist/pbaas/SaplingExtendedViewingKey.js deleted file mode 100644 index 3e3efa77..00000000 --- a/dist/pbaas/SaplingExtendedViewingKey.js +++ /dev/null @@ -1,65 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SaplingExtendedViewingKey = void 0; -const bufferutils_1 = require("../utils/bufferutils"); -const sapling_1 = require("../utils/sapling"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class SaplingExtendedViewingKey { - constructor(data) { - var _a, _b, _c, _d, _e, _f, _g, _h; - if (data != null) { - this.depth = (_a = data.depth) !== null && _a !== void 0 ? _a : 0; - this.parentFVKTag = (_b = data.parentFVKTag) !== null && _b !== void 0 ? _b : Buffer.alloc(4); - this.childIndex = (_c = data.childIndex) !== null && _c !== void 0 ? _c : Buffer.alloc(4); - this.chainCode = (_d = data.chainCode) !== null && _d !== void 0 ? _d : Buffer.alloc(32); - this.ak = (_e = data.ak) !== null && _e !== void 0 ? _e : Buffer.alloc(32); - this.nk = (_f = data.nk) !== null && _f !== void 0 ? _f : Buffer.alloc(32); - this.ovk = (_g = data.ovk) !== null && _g !== void 0 ? _g : Buffer.alloc(32); - this.dk = (_h = data.dk) !== null && _h !== void 0 ? _h : Buffer.alloc(32); - } - } - getByteLength() { - return 1 + 4 + 4 + 32 + 32 + 32 + 32 + 32; // 169 bytes total - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeUInt8(this.depth); - writer.writeSlice(this.parentFVKTag); - writer.writeSlice(this.childIndex); - writer.writeSlice(this.chainCode); - writer.writeSlice(this.ak); - writer.writeSlice(this.nk); - writer.writeSlice(this.ovk); - writer.writeSlice(this.dk); - return writer.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.depth = reader.readUInt8(); - this.parentFVKTag = reader.readSlice(4); - this.childIndex = reader.readSlice(4); - this.chainCode = reader.readSlice(32); - this.ak = reader.readSlice(32); - this.nk = reader.readSlice(32); - this.ovk = reader.readSlice(32); - this.dk = reader.readSlice(32); - return reader.offset; - } - static fromKeyString(key) { - const decoded = (0, sapling_1.decodeSaplingExtendedViewingKey)(key); - return new SaplingExtendedViewingKey(decoded); - } - toKeyString(testnet = false) { - return (0, sapling_1.encodeSaplingExtendedViewingKey)({ - depth: this.depth, - parentFVKTag: this.parentFVKTag, - childIndex: this.childIndex, - chainCode: this.chainCode, - ak: this.ak, - nk: this.nk, - ovk: this.ovk, - dk: this.dk - }, testnet); - } -} -exports.SaplingExtendedViewingKey = SaplingExtendedViewingKey; diff --git a/dist/pbaas/SaplingPaymentAddress.d.ts b/dist/pbaas/SaplingPaymentAddress.d.ts deleted file mode 100644 index 0f36fb53..00000000 --- a/dist/pbaas/SaplingPaymentAddress.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { SerializableEntity } from '../utils/types/SerializableEntity'; -export declare class SaplingPaymentAddress implements SerializableEntity { - d: Buffer; - pk_d: Buffer; - constructor(data?: { - d: Buffer; - pk_d: Buffer; - }); - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - static fromAddressString(address: string): SaplingPaymentAddress; - toAddressString(): string; -} diff --git a/dist/pbaas/SaplingPaymentAddress.js b/dist/pbaas/SaplingPaymentAddress.js deleted file mode 100644 index e6e3f84d..00000000 --- a/dist/pbaas/SaplingPaymentAddress.js +++ /dev/null @@ -1,42 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SaplingPaymentAddress = void 0; -const bufferutils_1 = require("../utils/bufferutils"); -const sapling_1 = require("../utils/sapling"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class SaplingPaymentAddress { - constructor(data) { - if (data != null) { - if (data.d != null) - this.d = data.d; - if (data.pk_d != null) - this.pk_d = data.pk_d; - } - } - getByteLength() { - let length = 0; - length += this.d.length; - length += this.pk_d.length; - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeSlice(this.d); - writer.writeSlice(this.pk_d); - return writer.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.d = reader.readSlice(11); - this.pk_d = reader.readSlice(32); - return reader.offset; - } - static fromAddressString(address) { - const { d, pk_d } = (0, sapling_1.decodeSaplingAddress)(address); - return new SaplingPaymentAddress({ d, pk_d }); - } - toAddressString() { - return (0, sapling_1.encodeSaplingAddress)({ d: this.d, pk_d: this.pk_d }); - } -} -exports.SaplingPaymentAddress = SaplingPaymentAddress; diff --git a/dist/pbaas/SignatureData.d.ts b/dist/pbaas/SignatureData.d.ts deleted file mode 100644 index 3bbd7ece..00000000 --- a/dist/pbaas/SignatureData.d.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -import { EHashTypes } from './DataDescriptor'; -export interface SignatureJsonDataInterface { - version: number; - systemid: string; - hashtype: number; - signaturehash: string; - identityid: string; - signaturetype: number; - vdxfkeys?: Array; - vdxfkeynames?: Array; - boundhashes?: Array; - signature: string; -} -export declare class SignatureData implements SerializableEntity { - version: BigNumber; - system_ID: string; - hash_type: BigNumber; - signature_hash: Buffer; - identity_ID: string; - sig_type: BigNumber; - vdxf_keys: Array; - vdxf_key_names: Array; - bound_hashes: Array; - signature_as_vch: Buffer; - static VERSION_INVALID: import("bn.js"); - static FIRST_VERSION: import("bn.js"); - static LAST_VERSION: import("bn.js"); - static DEFAULT_VERSION: import("bn.js"); - static TYPE_VERUSID_DEFAULT: import("bn.js"); - constructor(data?: { - version?: BigNumber; - system_ID?: string; - hash_type?: BigNumber; - signature_hash?: Buffer; - identity_ID?: string; - sig_type?: BigNumber; - vdxf_keys?: Array; - vdxf_key_names?: Array; - bound_hashes?: Array; - signature_as_vch?: Buffer; - }); - static fromJson(data: SignatureJsonDataInterface | any): SignatureData; - /** - * Determines the signature hash type based on the input buffer. - * - * @param {Buffer} input - The input buffer containing signature data. - * @returns {number} - The hash type. If the version byte is `2`, the next byte - * in the buffer is returned as the hash type. Otherwise, - * it defaults to `EHashTypes.HASH_SHA256`. - * - * The method reads the first byte of the input buffer as the version. If the - * version is `2`, it reads the next byte as the hash type. This logic is used - * to support multiple versions of signature data formats, where version `2` - * introduces a new hash type. For all other versions, the default hash type - * is `EHashTypes.HASH_SHA256`. - */ - static getSignatureHashType(input: Buffer): number | EHashTypes.HASH_SHA256; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - isValid(): boolean; - toJson(): SignatureJsonDataInterface; - getIdentityHash(sigObject: { - version: number; - hash_type: number; - height: number; - }): Buffer; -} diff --git a/dist/pbaas/SignatureData.js b/dist/pbaas/SignatureData.js deleted file mode 100644 index 5574cf65..00000000 --- a/dist/pbaas/SignatureData.js +++ /dev/null @@ -1,208 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SignatureData = void 0; -const varint_1 = require("../utils/varint"); -const varuint_1 = require("../utils/varuint"); -const address_1 = require("../utils/address"); -const bufferutils_1 = require("../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const vdxf_1 = require("../constants/vdxf"); -const DataDescriptor_1 = require("./DataDescriptor"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -const createHash = require("create-hash"); -const vdxf_2 = require("../constants/vdxf"); -class SignatureData { - constructor(data) { - if (data) { - this.version = data.version || new bn_js_1.BN(1, 10); - this.system_ID = data.system_ID || ""; - this.hash_type = data.hash_type || new bn_js_1.BN(0); - this.signature_hash = data.signature_hash || Buffer.alloc(0); - this.identity_ID = data.identity_ID || ""; - this.sig_type = data.sig_type || new bn_js_1.BN(0); - this.vdxf_keys = data.vdxf_keys || []; - this.vdxf_key_names = data.vdxf_key_names || []; - this.bound_hashes = data.bound_hashes || []; - this.signature_as_vch = data.signature_as_vch || Buffer.alloc(0); - } - } - static fromJson(data) { - var _a; - const signatureData = new SignatureData(); - if (data) { - signatureData.version = new bn_js_1.BN(data.version); - signatureData.system_ID = data.systemid; - signatureData.hash_type = new bn_js_1.BN(data.hashtype); - signatureData.identity_ID = data.identityid; - signatureData.sig_type = new bn_js_1.BN(data.signaturetype); - if (signatureData.hash_type.eq(new bn_js_1.BN(Number(DataDescriptor_1.EHashTypes.HASH_SHA256)))) { - signatureData.signature_hash = Buffer.from(data.signaturehash, 'hex'); - } - else { - signatureData.signature_hash = Buffer.from(data.signaturehash, 'hex').reverse(); - } - signatureData.signature_as_vch = Buffer.from(data.signature, 'base64'); - signatureData.vdxf_keys = data.vdxfkeys || []; - signatureData.vdxf_key_names = data.vdxfkeynames || []; - signatureData.bound_hashes = ((_a = data.boundhashes) === null || _a === void 0 ? void 0 : _a.map((hash) => Buffer.from(hash, 'hex').reverse())) || []; - } - return signatureData; - } - /** - * Determines the signature hash type based on the input buffer. - * - * @param {Buffer} input - The input buffer containing signature data. - * @returns {number} - The hash type. If the version byte is `2`, the next byte - * in the buffer is returned as the hash type. Otherwise, - * it defaults to `EHashTypes.HASH_SHA256`. - * - * The method reads the first byte of the input buffer as the version. If the - * version is `2`, it reads the next byte as the hash type. This logic is used - * to support multiple versions of signature data formats, where version `2` - * introduces a new hash type. For all other versions, the default hash type - * is `EHashTypes.HASH_SHA256`. - */ - static getSignatureHashType(input) { - var bufferReader = new bufferutils_1.default.BufferReader(input, 0); - let version = bufferReader.readUInt8(); - if (version === 2) - return bufferReader.readUInt8(); - else - return DataDescriptor_1.EHashTypes.HASH_SHA256; - } - getByteLength() { - let byteLength = 0; - byteLength += varint_1.default.encodingLength(this.version); - byteLength += vdxf_1.HASH160_BYTE_LENGTH; // system_ID uint160 - byteLength += varint_1.default.encodingLength(this.hash_type); - byteLength += varuint_1.default.encodingLength(this.signature_hash.length); - byteLength += this.signature_hash.length; - byteLength += vdxf_1.HASH160_BYTE_LENGTH; // identity_ID uint160 - byteLength += varint_1.default.encodingLength(this.sig_type); - byteLength += varuint_1.default.encodingLength(this.vdxf_keys.length); - byteLength += this.vdxf_keys.length * 20; - byteLength += varuint_1.default.encodingLength(this.vdxf_key_names.length); - for (const keyName of this.vdxf_key_names) { - byteLength += varuint_1.default.encodingLength(Buffer.from(keyName, 'utf8').length); - byteLength += Buffer.from(keyName, 'utf8').length; - } - byteLength += varuint_1.default.encodingLength(this.bound_hashes.length); - byteLength += this.bound_hashes.length * 32; - byteLength += varuint_1.default.encodingLength(this.signature_as_vch.length); - byteLength += this.signature_as_vch.length; - return byteLength; - } - toBuffer() { - const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); - bufferWriter.writeVarInt(this.version); - bufferWriter.writeSlice((0, address_1.fromBase58Check)(this.system_ID).hash); - bufferWriter.writeVarInt(this.hash_type); - bufferWriter.writeVarSlice(this.signature_hash); - bufferWriter.writeSlice((0, address_1.fromBase58Check)(this.identity_ID).hash); - bufferWriter.writeVarInt(this.sig_type); - bufferWriter.writeCompactSize(this.vdxf_keys.length); - for (const key of this.vdxf_keys) { - bufferWriter.writeSlice((0, address_1.fromBase58Check)(key).hash); - } - bufferWriter.writeCompactSize(this.vdxf_key_names.length); - for (const keyName of this.vdxf_key_names) { - bufferWriter.writeVarSlice(Buffer.from(keyName, 'utf8')); - } - bufferWriter.writeCompactSize(this.bound_hashes.length); - for (const boundHash of this.bound_hashes) { - bufferWriter.writeSlice(boundHash); - } - bufferWriter.writeVarSlice(this.signature_as_vch); - return bufferWriter.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.version = reader.readVarInt(); - this.system_ID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - this.hash_type = reader.readVarInt(); - this.signature_hash = reader.readVarSlice(); - this.identity_ID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - this.sig_type = reader.readVarInt(); - const vdxfKeysLength = reader.readCompactSize(); - this.vdxf_keys = []; - for (let i = 0; i < vdxfKeysLength; i++) { - this.vdxf_keys.push((0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION)); - } - const vdxfKeyNamesLength = reader.readCompactSize(); - this.vdxf_key_names = []; - for (let i = 0; i < vdxfKeyNamesLength; i++) { - this.vdxf_key_names.push(reader.readVarSlice().toString('utf8')); - } - const boundHashesLength = reader.readCompactSize(); - this.bound_hashes = []; - for (let i = 0; i < boundHashesLength; i++) { - this.bound_hashes.push(reader.readSlice(32)); - } - this.signature_as_vch = reader.readVarSlice(); - return reader.offset; - } - isValid() { - return !!(this.version.gte(SignatureData.FIRST_VERSION) && - this.version.lte(SignatureData.LAST_VERSION) && - this.system_ID); - } - toJson() { - const returnObj = { - version: this.version.toNumber(), - systemid: this.system_ID, - hashtype: this.hash_type.toNumber(), - signaturehash: '', // Will be set below - identityid: this.identity_ID, - signaturetype: this.sig_type.toNumber(), - signature: this.signature_as_vch.toString('base64') - }; - if (this.hash_type.eq(new bn_js_1.BN(Number(DataDescriptor_1.EHashTypes.HASH_SHA256)))) { - returnObj.signaturehash = Buffer.from(this.signature_hash).toString('hex'); - } - else { - returnObj.signaturehash = Buffer.from(this.signature_hash).reverse().toString('hex'); - } - if (this.vdxf_keys && this.vdxf_keys.length > 0) { - returnObj.vdxfkeys = this.vdxf_keys; - } - if (this.vdxf_key_names && this.vdxf_key_names.length > 0) { - returnObj.vdxfkeynames = this.vdxf_key_names; - } - if (this.bound_hashes && this.bound_hashes.length > 0) { - returnObj.boundhashes = this.bound_hashes.map((hash) => Buffer.from(hash).reverse().toString('hex')); - } - return returnObj; - } - // To fully implement, refer to VerusCoin/src/pbaas/crosschainrpc.cpp line 337, IdentitySignatureHash - getIdentityHash(sigObject) { - var heightBuffer = Buffer.allocUnsafe(4); - heightBuffer.writeUInt32LE(sigObject.height); - if (sigObject.hash_type != Number(DataDescriptor_1.EHashTypes.HASH_SHA256)) { - throw new Error("Invalid signature type for identity hash"); - } - if (sigObject.version == 1) { - return createHash("sha256") - .update(vdxf_2.VERUS_DATA_SIGNATURE_PREFIX) - .update((0, address_1.fromBase58Check)(this.system_ID).hash) - .update(heightBuffer) - .update((0, address_1.fromBase58Check)(this.identity_ID).hash) - .update(this.signature_hash) - .digest(); - } - else { - return createHash("sha256") - .update((0, address_1.fromBase58Check)(this.system_ID).hash) - .update(heightBuffer) - .update((0, address_1.fromBase58Check)(this.identity_ID).hash) - .update(vdxf_2.VERUS_DATA_SIGNATURE_PREFIX) - .update(this.signature_hash) - .digest(); - } - } -} -exports.SignatureData = SignatureData; -SignatureData.VERSION_INVALID = new bn_js_1.BN(0); -SignatureData.FIRST_VERSION = new bn_js_1.BN(1); -SignatureData.LAST_VERSION = new bn_js_1.BN(1); -SignatureData.DEFAULT_VERSION = new bn_js_1.BN(1); -SignatureData.TYPE_VERUSID_DEFAULT = new bn_js_1.BN(1); diff --git a/dist/pbaas/TokenOutput.d.ts b/dist/pbaas/TokenOutput.d.ts deleted file mode 100644 index efcb5984..00000000 --- a/dist/pbaas/TokenOutput.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { CurrencyValueMap } from './CurrencyValueMap'; -import { BigNumber } from '../utils/types/BigNumber'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -export declare const TOKEN_OUTPUT_VERSION_INVALID: import("bn.js"); -export declare const TOKEN_OUTPUT_VERSION_CURRENT: import("bn.js"); -export declare const TOKEN_OUTPUT_VERSION_FIRSTVALID: import("bn.js"); -export declare const TOKEN_OUTPUT_VERSION_LASTVALID: import("bn.js"); -export declare const TOKEN_OUTPUT_VERSION_MULTIVALUE: import("bn.js"); -export declare class TokenOutput implements SerializableEntity { - version: BigNumber; - reserve_values: CurrencyValueMap; - constructor(data?: { - values?: CurrencyValueMap; - version?: BigNumber; - }); - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - firstCurrency(): any; - firstValue(): any; - getVersion(): import("bn.js"); - isValid(): boolean; -} diff --git a/dist/pbaas/TokenOutput.js b/dist/pbaas/TokenOutput.js deleted file mode 100644 index 91257527..00000000 --- a/dist/pbaas/TokenOutput.js +++ /dev/null @@ -1,63 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TokenOutput = exports.TOKEN_OUTPUT_VERSION_MULTIVALUE = exports.TOKEN_OUTPUT_VERSION_LASTVALID = exports.TOKEN_OUTPUT_VERSION_FIRSTVALID = exports.TOKEN_OUTPUT_VERSION_CURRENT = exports.TOKEN_OUTPUT_VERSION_INVALID = void 0; -const CurrencyValueMap_1 = require("./CurrencyValueMap"); -const varint_1 = require("../utils/varint"); -const bufferutils_1 = require("../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -exports.TOKEN_OUTPUT_VERSION_INVALID = new bn_js_1.BN(0, 10); -exports.TOKEN_OUTPUT_VERSION_CURRENT = new bn_js_1.BN(1, 10); -exports.TOKEN_OUTPUT_VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); -exports.TOKEN_OUTPUT_VERSION_LASTVALID = new bn_js_1.BN(1, 10); -exports.TOKEN_OUTPUT_VERSION_MULTIVALUE = new bn_js_1.BN('80000000', 16); -class TokenOutput { - constructor(data) { - this.version = exports.TOKEN_OUTPUT_VERSION_INVALID; - this.reserve_values = new CurrencyValueMap_1.CurrencyValueMap(); - if (data != null) { - if (data.values != null) - this.reserve_values = data.values; - if (data.version != null) - this.version = data.version; - } - } - getByteLength() { - return varint_1.default.encodingLength(this.version) + this.reserve_values.getByteLength(); - } - toBuffer() { - const multivalue = !!(this.version.and(exports.TOKEN_OUTPUT_VERSION_MULTIVALUE).toNumber()); - if (multivalue) { - this.reserve_values.multivalue = true; - } - const serializedSize = this.getByteLength(); - const writer = new BufferWriter(Buffer.alloc(serializedSize)); - writer.writeVarInt(this.version); - writer.writeSlice(this.reserve_values.toBuffer()); - return writer.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.version = reader.readVarInt(); - const multivalue = !!(this.version.and(exports.TOKEN_OUTPUT_VERSION_MULTIVALUE).toNumber()); - this.reserve_values = new CurrencyValueMap_1.CurrencyValueMap({ multivalue }); - reader.offset = this.reserve_values.fromBuffer(reader.buffer, reader.offset); - return reader.offset; - } - firstCurrency() { - const iterator = this.reserve_values.value_map.entries().next(); - return iterator.done ? null : iterator.value[0]; - } - firstValue() { - const iterator = this.reserve_values.value_map.entries().next(); - return iterator.done ? null : iterator.value[1]; - } - getVersion() { - return this.version; - } - isValid() { - return (this.version.gte(exports.TOKEN_OUTPUT_VERSION_FIRSTVALID) && - this.version.lte(exports.TOKEN_OUTPUT_VERSION_LASTVALID)); - } -} -exports.TokenOutput = TokenOutput; diff --git a/dist/pbaas/TransferDestination.d.ts b/dist/pbaas/TransferDestination.d.ts deleted file mode 100644 index ab3b5520..00000000 --- a/dist/pbaas/TransferDestination.d.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -export declare const DEST_INVALID: import("bn.js"); -export declare const DEST_PK: import("bn.js"); -export declare const DEST_PKH: import("bn.js"); -export declare const DEST_SH: import("bn.js"); -export declare const DEST_ID: import("bn.js"); -export declare const DEST_FULLID: import("bn.js"); -export declare const DEST_REGISTERCURRENCY: import("bn.js"); -export declare const DEST_QUANTUM: import("bn.js"); -export declare const DEST_NESTEDTRANSFER: import("bn.js"); -export declare const DEST_ETH: import("bn.js"); -export declare const DEST_ETHNFT: import("bn.js"); -export declare const DEST_RAW: import("bn.js"); -export declare const LAST_VALID_TYPE_NO_FLAGS: import("bn.js"); -export declare const FLAG_DEST_AUX: import("bn.js"); -export declare const FLAG_DEST_GATEWAY: import("bn.js"); -export declare const FLAG_MASK: import("bn.js"); -export type TransferDestinationJson = { - type: number; - address: string; - gateway?: string; - gatewaycode?: string; - fees?: string; - auxdests?: Array; -}; -export declare class TransferDestination implements SerializableEntity { - type: BigNumber; - destination_bytes: Buffer; - gateway_id: string; - gateway_code: string; - fees: BigNumber; - aux_dests: Array; - constructor(data?: { - type?: BigNumber; - destination_bytes?: Buffer; - gateway_id?: string; - gateway_code?: string; - fees?: BigNumber; - aux_dests?: Array; - }); - isGateway(): boolean; - hasAuxDests(): boolean; - isIAddr(): boolean; - isPKH(): boolean; - isETHAccount(): boolean; - typeNoFlags(): import("bn.js"); - getAddressString(): string; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - static fromJson(data: TransferDestinationJson): TransferDestination; - toJson(): TransferDestinationJson; - isValid(): boolean; - getAuxDest(destNum: any): TransferDestination; -} diff --git a/dist/pbaas/TransferDestination.js b/dist/pbaas/TransferDestination.js deleted file mode 100644 index b797c3b9..00000000 --- a/dist/pbaas/TransferDestination.js +++ /dev/null @@ -1,239 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TransferDestination = exports.FLAG_MASK = exports.FLAG_DEST_GATEWAY = exports.FLAG_DEST_AUX = exports.LAST_VALID_TYPE_NO_FLAGS = exports.DEST_RAW = exports.DEST_ETHNFT = exports.DEST_ETH = exports.DEST_NESTEDTRANSFER = exports.DEST_QUANTUM = exports.DEST_REGISTERCURRENCY = exports.DEST_FULLID = exports.DEST_ID = exports.DEST_SH = exports.DEST_PKH = exports.DEST_PK = exports.DEST_INVALID = void 0; -const bufferutils_1 = require("../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const varuint_1 = require("../utils/varuint"); -const address_1 = require("../utils/address"); -const vdxf_1 = require("../constants/vdxf"); -const numberConversion_1 = require("../utils/numberConversion"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -exports.DEST_INVALID = new bn_js_1.BN(0, 10); -exports.DEST_PK = new bn_js_1.BN(1, 10); -exports.DEST_PKH = new bn_js_1.BN(2, 10); -exports.DEST_SH = new bn_js_1.BN(3, 10); -exports.DEST_ID = new bn_js_1.BN(4, 10); -exports.DEST_FULLID = new bn_js_1.BN(5, 10); -exports.DEST_REGISTERCURRENCY = new bn_js_1.BN(6, 10); -exports.DEST_QUANTUM = new bn_js_1.BN(7, 10); -exports.DEST_NESTEDTRANSFER = new bn_js_1.BN(8, 10); // used to chain transfers, enabling them to be routed through multiple systems -exports.DEST_ETH = new bn_js_1.BN(9, 10); -exports.DEST_ETHNFT = new bn_js_1.BN(10, 10); // used when defining a mapped NFT to gateway that uses an ETH compatible model -exports.DEST_RAW = new bn_js_1.BN(11, 10); -exports.LAST_VALID_TYPE_NO_FLAGS = exports.DEST_RAW; -exports.FLAG_DEST_AUX = new bn_js_1.BN(64, 10); -exports.FLAG_DEST_GATEWAY = new bn_js_1.BN(128, 10); -exports.FLAG_MASK = exports.FLAG_DEST_AUX.add(exports.FLAG_DEST_GATEWAY); -class TransferDestination { - constructor(data) { - this.type = exports.DEST_INVALID; - this.destination_bytes = Buffer.alloc(0); - this.gateway_id = null; - this.gateway_code = null; - this.fees = new bn_js_1.BN(0, 10); - this.aux_dests = []; - if (data != null) { - if (data.type != null) - this.type = data.type; - if (data.destination_bytes != null) - this.destination_bytes = data.destination_bytes; - if (data.gateway_id != null) - this.gateway_id = data.gateway_id; - if (data.gateway_code != null) - this.gateway_code = data.gateway_code; - if (data.fees != null) - this.fees = data.fees; - if (data.aux_dests != null) - this.aux_dests = data.aux_dests; - } - } - isGateway() { - return !!(this.type.and(exports.FLAG_DEST_GATEWAY).toNumber()); - } - hasAuxDests() { - return !!(this.type.and(exports.FLAG_DEST_AUX).toNumber()); - } - isIAddr() { - return this.typeNoFlags().eq(exports.DEST_ID); - } - isPKH() { - return this.typeNoFlags().eq(exports.DEST_PKH); - } - isETHAccount() { - return this.typeNoFlags().eq(exports.DEST_ETH); - } - typeNoFlags() { - return this.type.and(exports.FLAG_MASK.notn(exports.FLAG_MASK.bitLength())); - } - getAddressString() { - if (this.isPKH()) { - return (0, address_1.toBase58Check)(this.destination_bytes, vdxf_1.R_ADDR_VERSION); - } - else if (this.isIAddr()) { - return (0, address_1.toBase58Check)(this.destination_bytes, vdxf_1.I_ADDR_VERSION); - } - else if (this.isETHAccount()) { - return "0x" + this.destination_bytes.toString('hex'); - } - else { - throw new Error("Cannot get address for unsupported transfer destination type."); - } - } - getByteLength() { - let length = 0; - length += 1; // type - length += varuint_1.default.encodingLength(this.destination_bytes.length); // destination_bytes compact size - length += this.destination_bytes.length; // destination_bytes - if (this.isGateway()) { - length += (0, address_1.fromBase58Check)(this.gateway_id).hash.length; // gateway_id - if (this.gateway_code) { - length += (0, address_1.fromBase58Check)(this.gateway_code).hash.length; // gateway_code - } - else { - length += vdxf_1.HASH160_BYTE_LENGTH; - } - length += 8; // fees int64 - } - if (this.hasAuxDests()) { - length += varuint_1.default.encodingLength(this.aux_dests.length); // aux dests compact size - for (const dest of this.aux_dests) { - const destLength = dest.getByteLength(); - length += varuint_1.default.encodingLength(destLength); // one aux dest compact size - length += destLength; // one aux dest compact size - } - } - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeUInt8(this.type.toNumber()); - writer.writeVarSlice(this.destination_bytes); - if (this.isGateway()) { - writer.writeSlice((0, address_1.fromBase58Check)(this.gateway_id).hash); - if (this.gateway_code) { - writer.writeSlice((0, address_1.fromBase58Check)(this.gateway_code).hash); - } - else { - writer.writeSlice(Buffer.alloc(vdxf_1.HASH160_BYTE_LENGTH)); - } - writer.writeInt64(this.fees); - } - if (this.hasAuxDests()) { - writer.writeCompactSize(this.aux_dests.length); - this.aux_dests.forEach((aux_dest) => writer.writeVarSlice(aux_dest.toBuffer())); - } - return writer.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.type = new bn_js_1.BN(reader.readUInt8(), 10); - this.destination_bytes = reader.readVarSlice(); - if (this.isGateway()) { - this.gateway_id = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - this.gateway_code = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - this.fees = reader.readInt64(); - } - if (this.hasAuxDests()) { - const numAuxDests = reader.readCompactSize(); - for (let i = 0; i < numAuxDests; i++) { - const newAuxDest = new TransferDestination(); - newAuxDest.fromBuffer(reader.readVarSlice()); - this.aux_dests.push(newAuxDest); - } - } - return reader.offset; - } - static fromJson(data) { - const type = new bn_js_1.BN(data.type); - let destination = null; - switch (type.and(exports.FLAG_MASK.notn(exports.FLAG_MASK.bitLength())).toString()) { - case exports.DEST_PKH.toString(): - case exports.DEST_SH.toString(): - case exports.DEST_ID.toString(): - case exports.DEST_QUANTUM.toString(): - destination = (0, address_1.decodeDestination)(data.address); - break; - case exports.DEST_ETH.toString(): - destination = (0, address_1.decodeEthDestination)(data.address); - break; - default: - throw new Error("Unknown destination type: " + type + "\nNote: Only DEST_PKH, DEST_SH, DEST_ID, DEST_QUANTUM and DEST_ETH are supported for now."); - } - let auxDests = []; - let fees = null; - if (type.and(exports.FLAG_DEST_AUX).gt(new bn_js_1.BN(0)) && data.auxdests.length > 0) { - auxDests = data.auxdests.map(x => TransferDestination.fromJson(x)); - } - if (type.and(exports.FLAG_DEST_GATEWAY).gt(new bn_js_1.BN(0)) && data.fees) { - fees = (0, numberConversion_1.decimalToBn)(data.fees); - } - return new TransferDestination({ - type: type, - destination_bytes: destination, - gateway_code: data.gatewaycode, - fees: fees, - aux_dests: auxDests - }); - } - toJson() { - let destVal = { - type: this.type.toNumber(), - address: '' - }; - switch (this.typeNoFlags().toString()) { - case exports.DEST_PKH.toString(): - case exports.DEST_SH.toString(): - case exports.DEST_ID.toString(): - case exports.DEST_QUANTUM.toString(): - case exports.DEST_ETH.toString(): - destVal.address = this.getAddressString(); - break; - default: - throw new Error("Unknown destination type: " + this.typeNoFlags() + "\nNote: Only DEST_PKH, DEST_SH, DEST_ID, DEST_QUANTUM and DEST_ETH are supported for now."); - } - if (this.hasAuxDests()) { - destVal.auxdests = this.aux_dests.map(auxDest => auxDest.toJson()); - } - if (this.isGateway()) { - destVal.gateway = this.gateway_id; - } - return destVal; - } - isValid() { - // verify aux dests - let valid = (((this.type.and(exports.FLAG_DEST_AUX).gt(new bn_js_1.BN(0))) && this.aux_dests.length > 0) || (!(this.type.and(exports.FLAG_DEST_AUX).gt(new bn_js_1.BN(0))) && !(this.aux_dests.length > 0))); - if (valid && this.aux_dests && this.aux_dests.length > 0) { - for (let i = 0; i < this.aux_dests.length; i++) { - if (!this.getAuxDest(i).isValid()) { - valid = false; - break; - } - } - } - return !!(valid && - !this.typeNoFlags().eq(exports.DEST_INVALID) && - this.typeNoFlags().lte(exports.LAST_VALID_TYPE_NO_FLAGS) && - (((this.type.and(exports.FLAG_DEST_GATEWAY).eq(new bn_js_1.BN(0))) && (this.gateway_id == null)) || this.gateway_id != null)); - } - getAuxDest(destNum) { - const retVal = this.aux_dests[destNum]; - if (destNum >= 0 && destNum < this.aux_dests.length) { - if (retVal.type.and(exports.FLAG_DEST_AUX).gt(new bn_js_1.BN(0)) || retVal.aux_dests.length > 0) { - retVal.type = exports.DEST_INVALID; - } - // no gateways or flags, only simple destinations work - switch (retVal.type.toString()) { - case exports.DEST_ID.toString(): - case exports.DEST_PK.toString(): - case exports.DEST_PKH.toString(): - case exports.DEST_ETH.toString(): - case exports.DEST_SH.toString(): - break; - default: - retVal.type = exports.DEST_INVALID; - } - } - return retVal; - } -} -exports.TransferDestination = TransferDestination; diff --git a/dist/pbaas/TxDestination.d.ts b/dist/pbaas/TxDestination.d.ts deleted file mode 100644 index 486febb1..00000000 --- a/dist/pbaas/TxDestination.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { IdentityID } from './IdentityID'; -import { KeyID } from './KeyID'; -import { NoDestination } from './NoDestination'; -import { PubKey } from './PubKey'; -import { UnknownID } from './UnknownID'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -export interface TxDestinationVariantInterface { - new (hash?: Buffer): TxDestinationVariant; -} -export type TxDestinationVariant = IdentityID | KeyID | NoDestination | PubKey | UnknownID; -export declare class TxDestination implements SerializableEntity { - type: BigNumber; - data: TxDestinationVariant; - static TYPE_INVALID: import("bn.js"); - static TYPE_PK: import("bn.js"); - static TYPE_PKH: import("bn.js"); - static TYPE_SH: import("bn.js"); - static TYPE_ID: import("bn.js"); - static TYPE_INDEX: import("bn.js"); - static TYPE_QUANTUM: import("bn.js"); - static TYPE_LAST: import("bn.js"); - constructor(data?: TxDestinationVariant, type?: BigNumber); - static getTxDestinationVariantType(variant: TxDestinationVariant): BigNumber; - static getTxDestinationVariant(type: BigNumber): TxDestinationVariantInterface; - toAddress(): string; - getByteLength(): number; - fromBuffer(buffer: Buffer, offset?: number): number; - toBuffer(): Buffer; - static fromChunk(chunk: Buffer): TxDestination; - toChunk(): Buffer; -} diff --git a/dist/pbaas/TxDestination.js b/dist/pbaas/TxDestination.js deleted file mode 100644 index 829ff435..00000000 --- a/dist/pbaas/TxDestination.js +++ /dev/null @@ -1,110 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TxDestination = void 0; -const bn_js_1 = require("bn.js"); -const IdentityID_1 = require("./IdentityID"); -const KeyID_1 = require("./KeyID"); -const NoDestination_1 = require("./NoDestination"); -const varuint_1 = require("../utils/varuint"); -const bufferutils_1 = require("../utils/bufferutils"); -const PubKey_1 = require("./PubKey"); -const UnknownID_1 = require("./UnknownID"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class TxDestination { - constructor(data = new NoDestination_1.NoDestination(), type) { - this.data = data; - if (!type) { - this.type = TxDestination.getTxDestinationVariantType(data); - } - else - this.type = type; - } - static getTxDestinationVariantType(variant) { - if (variant instanceof PubKey_1.PubKey) - return TxDestination.TYPE_PK; - else if (variant instanceof KeyID_1.KeyID) - return TxDestination.TYPE_PKH; - else if (variant instanceof IdentityID_1.IdentityID) - return TxDestination.TYPE_ID; - else - return TxDestination.TYPE_INVALID; - } - static getTxDestinationVariant(type) { - if (type.eq(this.TYPE_PK)) - return PubKey_1.PubKey; - else if (type.eq(this.TYPE_PKH)) - return KeyID_1.KeyID; - else if (type.eq(this.TYPE_ID)) - return IdentityID_1.IdentityID; - else - return UnknownID_1.UnknownID; - } - toAddress() { - if (this.data instanceof IdentityID_1.IdentityID || this.data instanceof KeyID_1.KeyID) - return this.data.toAddress(); - else - throw new Error("Can't get address for TxDestination type " + this.type.toNumber()); - } - getByteLength() { - if (this.type.eq(TxDestination.TYPE_PKH)) - return 21; - else if (this.type.eq(TxDestination.TYPE_PK)) - return 34; - else { - const datalen = this.data.getByteLength() + 1; - return varuint_1.default.encodingLength(datalen) + datalen; - } - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - const destBytes = reader.readVarSlice(); - if (destBytes.length === 20) { - this.type = TxDestination.TYPE_PKH; - this.data = new KeyID_1.KeyID(destBytes); - } - else if (destBytes.length === 33) { - this.type = TxDestination.TYPE_PK; - this.data = new KeyID_1.KeyID(destBytes); - } - else { - const subReader = new BufferReader(destBytes, 0); - this.type = new bn_js_1.BN(subReader.readUInt8(), 10); - const DestVariant = TxDestination.getTxDestinationVariant(this.type); - this.data = new DestVariant(subReader.readSlice(destBytes.length - subReader.offset)); - } - return reader.offset; - } - toBuffer() { - const buffer = Buffer.alloc(this.getByteLength()); - const writer = new BufferWriter(buffer); - if (this.type.eq(TxDestination.TYPE_PKH) || this.type.eq(TxDestination.TYPE_PK)) { - writer.writeVarSlice(this.data.toBuffer()); - } - else { - const subWriter = new BufferWriter(Buffer.alloc(1 + this.data.getByteLength())); - subWriter.writeUInt8(this.type.toNumber()); - subWriter.writeSlice(this.data.toBuffer()); - writer.writeVarSlice(subWriter.buffer); - } - return writer.buffer; - } - static fromChunk(chunk) { - const writer = new BufferWriter(Buffer.alloc(varuint_1.default.encodingLength(chunk.length))); - writer.writeCompactSize(chunk.length); - const dest = new TxDestination(); - dest.fromBuffer(Buffer.concat([writer.buffer, chunk])); - return dest; - } - toChunk() { - return Buffer.from(this.toBuffer().subarray(varuint_1.default.encodingLength(this.data.toBuffer().length))); - } -} -exports.TxDestination = TxDestination; -TxDestination.TYPE_INVALID = new bn_js_1.BN(0, 10); -TxDestination.TYPE_PK = new bn_js_1.BN(1, 10); -TxDestination.TYPE_PKH = new bn_js_1.BN(2, 10); -TxDestination.TYPE_SH = new bn_js_1.BN(3, 10); -TxDestination.TYPE_ID = new bn_js_1.BN(4, 10); -TxDestination.TYPE_INDEX = new bn_js_1.BN(5, 10); -TxDestination.TYPE_QUANTUM = new bn_js_1.BN(6, 10); -TxDestination.TYPE_LAST = new bn_js_1.BN(6, 10); diff --git a/dist/pbaas/URLRef.d.ts b/dist/pbaas/URLRef.d.ts deleted file mode 100644 index eeafa93a..00000000 --- a/dist/pbaas/URLRef.d.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -export interface URLRefJson { - version: string; - flags?: string; - datahash?: string; - url: string; -} -export declare class URLRef implements SerializableEntity { - static FIRST_VERSION: import("bn.js"); - static LAST_VERSION: import("bn.js"); - static HASHDATA_VERSION: import("bn.js"); - static DEFAULT_VERSION: import("bn.js"); - static FLAG_HAS_HASH: import("bn.js"); - version: BigNumber; - flags: BigNumber; - data_hash: Buffer; - url: string; - constructor(data?: { - version?: BigNumber; - url?: string; - flags?: BigNumber; - data_hash?: Buffer; - }); - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - isValid(): boolean; - toJson(): { - version: number; - flags: number; - datahash: string; - url: string; - }; - static fromJson(data: URLRefJson): URLRef; -} diff --git a/dist/pbaas/URLRef.js b/dist/pbaas/URLRef.js deleted file mode 100644 index 8b4d5723..00000000 --- a/dist/pbaas/URLRef.js +++ /dev/null @@ -1,93 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.URLRef = void 0; -const varint_1 = require("../utils/varint"); -const varuint_1 = require("../utils/varuint"); -const bufferutils_1 = require("../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const vdxf_1 = require("../constants/vdxf"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class URLRef { - constructor(data) { - if (data) { - this.version = data.version || new bn_js_1.BN(2, 10); - this.url = data.url || ""; - this.flags = data.flags || new bn_js_1.BN(0); - this.data_hash = data.data_hash || Buffer.alloc(0); - } - } - getByteLength() { - let byteLength = 0; - byteLength += varint_1.default.encodingLength(this.version); - if (this.version.gte(URLRef.HASHDATA_VERSION)) { - // If the version is at least HASHDATA_VERSION, we include the URL length - // as a varuint before the URL itself. - byteLength += varint_1.default.encodingLength(this.flags); - if (this.flags.and(URLRef.FLAG_HAS_HASH).eq(URLRef.FLAG_HAS_HASH)) { - // If the FLAG_HAS_HASH is set, we include the data hash - byteLength += vdxf_1.HASH256_BYTE_LENGTH; // 32 bytes for the hash - } - } - byteLength += varuint_1.default.encodingLength(Buffer.from(this.url, 'utf8').length); - byteLength += Buffer.from(this.url, 'utf8').length; - if (byteLength > 4096) - throw new Error("URLRef exceeds maximum length of 4096 bytes"); - return byteLength; - } - toBuffer() { - const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); - bufferWriter.writeVarInt(this.version); - if (this.version.gte(URLRef.HASHDATA_VERSION)) { - // If the version is at least HASHDATA_VERSION, we include the URL length - // as a varuint before the URL itself. - bufferWriter.writeVarInt(this.flags); - if (this.flags.and(URLRef.FLAG_HAS_HASH).eq(URLRef.FLAG_HAS_HASH)) { - // If the FLAG_HAS_HASH is set, we include the data hash - bufferWriter.writeSlice(this.data_hash); - } - } - bufferWriter.writeVarSlice(Buffer.from(this.url, 'utf8')); - return bufferWriter.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.version = reader.readVarInt(); - if (this.version.gte(URLRef.HASHDATA_VERSION)) { - // If the version is at least HASHDATA_VERSION, we read the flags - this.flags = reader.readVarInt(); - if (this.flags.and(URLRef.FLAG_HAS_HASH).eq(URLRef.FLAG_HAS_HASH)) { - // If the FLAG_HAS_HASH is set, we read the data hash - this.data_hash = reader.readSlice(32); - } - } - this.url = reader.readVarSlice().toString('utf8'); - return reader.offset; - } - isValid() { - return this.version.gte(URLRef.FIRST_VERSION) && - this.version.lte(URLRef.LAST_VERSION) && - this.url.length > 0; - } - toJson() { - return { - version: this.version.toNumber(), - flags: this.flags ? this.flags.toNumber() : 0, - datahash: this.data_hash ? this.data_hash.toString('hex') : "", - url: this.url - }; - } - static fromJson(data) { - return new URLRef({ - version: new bn_js_1.BN(data.version, 10), - flags: data.flags ? new bn_js_1.BN(data.flags, 10) : new bn_js_1.BN(0, 10), - data_hash: data.datahash ? Buffer.from(data.datahash, 'hex') : Buffer.alloc(0), - url: data.url - }); - } -} -exports.URLRef = URLRef; -URLRef.FIRST_VERSION = new bn_js_1.BN(1); -URLRef.LAST_VERSION = new bn_js_1.BN(2); -URLRef.HASHDATA_VERSION = new bn_js_1.BN(2); -URLRef.DEFAULT_VERSION = new bn_js_1.BN(2); -URLRef.FLAG_HAS_HASH = new bn_js_1.BN(1); diff --git a/dist/pbaas/UTXORef.d.ts b/dist/pbaas/UTXORef.d.ts deleted file mode 100644 index 2e38e53f..00000000 --- a/dist/pbaas/UTXORef.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -export declare class UTXORef implements SerializableEntity { - hash: Buffer; - n: BigNumber; - constructor(data?: { - hash?: Buffer; - n?: BigNumber; - }); - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - isValid(): boolean; - toJson(): { - txid: string; - voutnum: number; - }; - static fromJson(data: { - txid: string; - voutnum: string; - }): UTXORef; -} diff --git a/dist/pbaas/UTXORef.js b/dist/pbaas/UTXORef.js deleted file mode 100644 index 88e3b585..00000000 --- a/dist/pbaas/UTXORef.js +++ /dev/null @@ -1,47 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UTXORef = void 0; -const bufferutils_1 = require("../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const vdxf_1 = require("../constants/vdxf"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class UTXORef { - constructor(data) { - this.hash = (data === null || data === void 0 ? void 0 : data.hash) || Buffer.alloc(0); - this.n = (data === null || data === void 0 ? void 0 : data.n) || new bn_js_1.BN(0); - } - getByteLength() { - let byteLength = 0; - byteLength += vdxf_1.HASH256_BYTE_LENGTH; // hash uint256 - byteLength += 4; // n uint32 - return byteLength; - } - toBuffer() { - const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); - bufferWriter.writeSlice(this.hash); - bufferWriter.writeUInt32(this.n.toNumber()); - return bufferWriter.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.hash = reader.readSlice(32); - this.n = new bn_js_1.BN(reader.readUInt32()); - return reader.offset; - } - isValid() { - return this.n.lt(new bn_js_1.BN(0xffffffff)); - } - toJson() { - return { - txid: Buffer.from(this.hash).reverse().toString('hex'), - voutnum: this.n.toNumber() - }; - } - static fromJson(data) { - return new UTXORef({ - hash: Buffer.from(data.txid, 'hex').reverse(), - n: new bn_js_1.BN(data.voutnum, 10) - }); - } -} -exports.UTXORef = UTXORef; diff --git a/dist/pbaas/UnknownID.d.ts b/dist/pbaas/UnknownID.d.ts deleted file mode 100644 index f812d035..00000000 --- a/dist/pbaas/UnknownID.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { SerializableEntity } from "../utils/types/SerializableEntity"; -export declare class UnknownID implements SerializableEntity { - bytes: Buffer; - constructor(bytes?: Buffer); - getByteLength(): number; - fromBuffer(buffer: Buffer, offset?: number, length?: number): number; - toBuffer(): Buffer; -} diff --git a/dist/pbaas/UnknownID.js b/dist/pbaas/UnknownID.js deleted file mode 100644 index 5ead6298..00000000 --- a/dist/pbaas/UnknownID.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UnknownID = void 0; -const bufferutils_1 = require("../utils/bufferutils"); -class UnknownID { - constructor(bytes = Buffer.alloc(0)) { - this.bytes = bytes; - } - getByteLength() { - return this.bytes.length; - } - fromBuffer(buffer, offset, length = 0) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - this.bytes = reader.readSlice(length); - return reader.offset; - } - toBuffer() { - const buffer = Buffer.alloc(this.getByteLength()); - const writer = new bufferutils_1.default.BufferWriter(buffer); - writer.writeSlice(this.bytes); - return writer.buffer; - } -} -exports.UnknownID = UnknownID; diff --git a/dist/pbaas/VdxfUniValue.d.ts b/dist/pbaas/VdxfUniValue.d.ts deleted file mode 100644 index 4f20296a..00000000 --- a/dist/pbaas/VdxfUniValue.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -import { SerializableEntity } from '../utils/types/SerializableEntity'; -import { CurrencyValueMap } from './CurrencyValueMap'; -import { Rating, RatingJson } from './Rating'; -import { TransferDestination, TransferDestinationJson } from './TransferDestination'; -import { ContentMultiMapRemove, ContentMultiMapRemoveJson } from './ContentMultiMapRemove'; -import { CrossChainDataRef, CrossChainDataRefJson } from './CrossChainDataRef'; -import { SignatureData, SignatureJsonDataInterface } from './SignatureData'; -import { DataDescriptor, DataDescriptorJson } from './DataDescriptor'; -import { MMRDescriptor, MMRDescriptorJson } from './MMRDescriptor'; -import { Credential } from './Credential'; -import { URLRef } from './URLRef'; -import { IdentityMultimapRef } from './IdentityMultimapRef'; -export declare const VDXF_UNI_VALUE_VERSION_INVALID: import("bn.js"); -export declare const VDXF_UNI_VALUE_VERSION_CURRENT: import("bn.js"); -export type VdxfUniType = string | Buffer | BigNumber | CurrencyValueMap | Rating | TransferDestination | ContentMultiMapRemove | CrossChainDataRef | SignatureData | DataDescriptor | MMRDescriptor | URLRef | IdentityMultimapRef | Credential; -export interface VdxfUniValueInterface { - [key: string]: string | number | RatingJson | TransferDestinationJson | ContentMultiMapRemoveJson | CrossChainDataRefJson | SignatureJsonDataInterface | DataDescriptorJson | MMRDescriptorJson | VdxfUniValueInterface; - serializedhex?: string; - serializedbase64?: string; - message?: string; -} -export type VdxfUniValueJson = string | VdxfUniValueInterface; -export type VdxfUniValueJsonArray = Array; -export type JsonSerializableObject = CurrencyValueMap | Rating | TransferDestination | ContentMultiMapRemove | CrossChainDataRef | SignatureData | DataDescriptor | MMRDescriptor | Credential; -export declare class VdxfUniValue implements SerializableEntity { - values: Array<{ - [key: string]: VdxfUniType; - }>; - version: BigNumber; - constructor(data?: { - values: Array<{ - [key: string]: VdxfUniType; - }>; - version?: BigNumber; - }); - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - static fromJson(obj: any): VdxfUniValue; - toJson(): VdxfUniValueJsonArray | VdxfUniValueJson; -} diff --git a/dist/pbaas/VdxfUniValue.js b/dist/pbaas/VdxfUniValue.js deleted file mode 100644 index feb8f8a7..00000000 --- a/dist/pbaas/VdxfUniValue.js +++ /dev/null @@ -1,604 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VdxfUniValue = exports.VDXF_UNI_VALUE_VERSION_CURRENT = exports.VDXF_UNI_VALUE_VERSION_INVALID = void 0; -const varuint_1 = require("../utils/varuint"); -const bufferutils_1 = require("../utils/bufferutils"); -const address_1 = require("../utils/address"); -const vdxf_1 = require("../constants/vdxf"); -const bn_js_1 = require("bn.js"); -const varint_1 = require("../utils/varint"); -const string_1 = require("../utils/string"); -const CurrencyValueMap_1 = require("./CurrencyValueMap"); -const Rating_1 = require("./Rating"); -const TransferDestination_1 = require("./TransferDestination"); -const ContentMultiMapRemove_1 = require("./ContentMultiMapRemove"); -const CrossChainDataRef_1 = require("./CrossChainDataRef"); -const SignatureData_1 = require("./SignatureData"); -const DataDescriptor_1 = require("./DataDescriptor"); -const MMRDescriptor_1 = require("./MMRDescriptor"); -const Credential_1 = require("./Credential"); -const VDXF_Data = require("../vdxf/vdxfdatakeys"); -exports.VDXF_UNI_VALUE_VERSION_INVALID = new bn_js_1.BN(0, 10); -exports.VDXF_UNI_VALUE_VERSION_CURRENT = new bn_js_1.BN(1, 10); -const { BufferWriter, BufferReader } = bufferutils_1.default; -; -// This UniValue class was adapted from C++ code for encoding JSON objects into bytes. It is not serialization and -// therefore doesn't have a fromBuffer function, as you can't reliably decode it, only encode. -class VdxfUniValue { - constructor(data) { - if (data === null || data === void 0 ? void 0 : data.values) - this.values = data.values; - if (data === null || data === void 0 ? void 0 : data.version) - this.version = data.version; - else - this.version = exports.VDXF_UNI_VALUE_VERSION_CURRENT; - } - getByteLength() { - let length = 0; - for (const inner of this.values) { - const key = Object.keys(inner)[0]; - const value = inner[key]; - // if we just have serialized data - if (key === "") { - length += Buffer.from(value, "hex").length; - continue; - } - if (key == VDXF_Data.DataByteKey.vdxfid) { - length += 1; - continue; - } - else if ((key == VDXF_Data.DataUint16Key.vdxfid) || (key == VDXF_Data.DataInt16Key.vdxfid)) { - length += 2; - continue; - } - else if ((key == VDXF_Data.DataInt32Key.vdxfid) || (key == VDXF_Data.DataUint32Key.vdxfid)) { - length += 4; - continue; - } - else if (key == VDXF_Data.DataInt64Key.vdxfid) { - length += 8; - continue; - } - else if (key == VDXF_Data.DataUint160Key.vdxfid) { - length += vdxf_1.HASH160_BYTE_LENGTH; - continue; - } - else if (key == VDXF_Data.DataUint256Key.vdxfid) { - length += vdxf_1.HASH256_BYTE_LENGTH; - continue; - } - length += vdxf_1.HASH160_BYTE_LENGTH; - function totalStreamLength(bufLen) { - const encodeStreamLen = varuint_1.default.encodingLength(bufLen + varuint_1.default.encodingLength(bufLen)); - return bufLen + encodeStreamLen; - } - if (key == VDXF_Data.DataStringKey.vdxfid) { - const valBuf = Buffer.from(value, "utf-8"); - length += varint_1.default.encodingLength(new bn_js_1.BN(1)); - // NOTE: 3 is from ss type + ver + vdxfIdVersion - length += varuint_1.default.encodingLength(valBuf.length); - length += totalStreamLength(valBuf.length); - } - else if (key == VDXF_Data.DataByteVectorKey.vdxfid) { - const valBuf = Buffer.from(value, "hex"); - length += varint_1.default.encodingLength(new bn_js_1.BN(1)); - length += varuint_1.default.encodingLength(valBuf.length); - length += totalStreamLength(valBuf.length); - } - else if (key == VDXF_Data.DataCurrencyMapKey.vdxfid) { - const oneCurMap = new CurrencyValueMap_1.CurrencyValueMap(Object.assign(Object.assign({}, value), { multivalue: true })); - length += varint_1.default.encodingLength(new bn_js_1.BN(1)); - length += totalStreamLength(oneCurMap.getByteLength()); - } - else if (key == VDXF_Data.DataRatingsKey.vdxfid) { - const oneRatingMap = new Rating_1.Rating(value); - length += varint_1.default.encodingLength(oneRatingMap.version); - length += totalStreamLength(oneRatingMap.getByteLength()); - } - else if (key == VDXF_Data.CredentialKey.vdxfid) { - const oneCredential = new Credential_1.Credential(value); - length += varint_1.default.encodingLength(oneCredential.version); - length += totalStreamLength(oneCredential.getByteLength()); - } - else if (key == VDXF_Data.DataTransferDestinationKey.vdxfid) { - const transferDest = new TransferDestination_1.TransferDestination(value); - length += varint_1.default.encodingLength(transferDest.typeNoFlags()); - length += totalStreamLength(transferDest.getByteLength()); - } - else if (key == VDXF_Data.ContentMultiMapRemoveKey.vdxfid) { - const multiRemove = new ContentMultiMapRemove_1.ContentMultiMapRemove(value); - length += varint_1.default.encodingLength(multiRemove.version); - length += totalStreamLength(multiRemove.getByteLength()); - } - else if (key == VDXF_Data.CrossChainDataRefKey.vdxfid) { - const crossCh = value; - length += varint_1.default.encodingLength(vdxf_1.VDXF_OBJECT_DEFAULT_VERSION); - length += totalStreamLength(crossCh.getByteLength()); - } - else if (key == VDXF_Data.DataDescriptorKey.vdxfid) { - const descr = new DataDescriptor_1.DataDescriptor(value); - length += varint_1.default.encodingLength(descr.version); - length += totalStreamLength(descr.getByteLength()); - } - else if (key == VDXF_Data.MMRDescriptorKey.vdxfid) { - const descr = new MMRDescriptor_1.MMRDescriptor(value); - length += varint_1.default.encodingLength(descr.version); - length += totalStreamLength(descr.getByteLength()); - } - else if (key == VDXF_Data.SignatureDataKey.vdxfid) { - const sigData = new SignatureData_1.SignatureData(value); - length += varint_1.default.encodingLength(sigData.version); - length += totalStreamLength(sigData.getByteLength()); - } - else { - throw new Error("contentmap invalid or unrecognized vdxfkey for object type: " + key); - } - } - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - for (const inner of this.values) { - const key = Object.keys(inner)[0]; - const value = inner[key]; - if (key === "") { - writer.writeSlice(value); - continue; - } - if (key == VDXF_Data.DataByteKey.vdxfid) { - const oneByte = Buffer.from(value, "hex"); - if (oneByte.length != 1) { - throw new Error("contentmap: byte data must be exactly one byte"); - } - writer.writeSlice(oneByte); - } - else if (key == VDXF_Data.DataInt16Key.vdxfid) { - const oneShort = Buffer.alloc(2); - oneShort.writeInt16LE(value.toNumber()); - writer.writeSlice(oneShort); - } - else if (key == VDXF_Data.DataUint16Key.vdxfid) { - const oneUShort = Buffer.alloc(2); - oneUShort.writeUInt16LE(value.toNumber()); - writer.writeSlice(oneUShort); - } - else if (key == VDXF_Data.DataInt32Key.vdxfid) { - const oneInt = Buffer.alloc(4); - oneInt.writeInt32LE(value.toNumber()); - writer.writeSlice(oneInt); - } - else if (key == VDXF_Data.DataUint32Key.vdxfid) { - const oneUInt = Buffer.alloc(4); - oneUInt.writeUInt32LE(value.toNumber()); - writer.writeSlice(oneUInt); - } - else if (key == VDXF_Data.DataInt64Key.vdxfid) { - const oneInt64 = Buffer.alloc(8); - oneInt64.writeBigInt64LE(BigInt(value.toString())); - writer.writeSlice(oneInt64); - } - else if (key == VDXF_Data.DataUint160Key.vdxfid) { - const oneKey = (0, address_1.fromBase58Check)(value).hash; - writer.writeSlice(oneKey); - } - else if (key == VDXF_Data.DataUint256Key.vdxfid) { - const oneHash = Buffer.from(value, "hex"); - if (oneHash.length != vdxf_1.HASH256_BYTE_LENGTH) { - throw new Error("contentmap: hash data must be exactly 32 bytes"); - } - writer.writeVarSlice(oneHash.reverse()); - } - else if (key == VDXF_Data.DataStringKey.vdxfid) { - const valBuf = Buffer.from(value, "utf-8"); - writer.writeSlice((0, address_1.fromBase58Check)(key).hash); - writer.writeVarInt(new bn_js_1.BN(1)); - writer.writeCompactSize(valBuf.length + varuint_1.default.encodingLength(valBuf.length)); - writer.writeVarSlice(valBuf); - } - else if (key == VDXF_Data.DataByteVectorKey.vdxfid) { - const valBuf = Buffer.from(value, "hex"); - writer.writeSlice((0, address_1.fromBase58Check)(key).hash); - writer.writeVarInt(new bn_js_1.BN(1)); - writer.writeCompactSize(varuint_1.default.encodingLength(valBuf.length) + valBuf.length); - writer.writeVarSlice(valBuf); - } - else if (key == VDXF_Data.DataCurrencyMapKey.vdxfid) { - const oneCurMap = new CurrencyValueMap_1.CurrencyValueMap(Object.assign(Object.assign({}, value), { multivalue: true })); - writer.writeSlice((0, address_1.fromBase58Check)(key).hash); - writer.writeVarInt(new bn_js_1.BN(1)); - writer.writeCompactSize(oneCurMap.getByteLength()); - writer.writeSlice(oneCurMap.toBuffer()); - } - else if (key == VDXF_Data.DataRatingsKey.vdxfid) { - const oneRatingMap = new Rating_1.Rating(value); - writer.writeSlice((0, address_1.fromBase58Check)(key).hash); - writer.writeVarInt(oneRatingMap.version); - writer.writeCompactSize(oneRatingMap.getByteLength()); - writer.writeSlice(oneRatingMap.toBuffer()); - } - else if (key == VDXF_Data.CredentialKey.vdxfid) { - const oneCredential = value; - writer.writeSlice((0, address_1.fromBase58Check)(key).hash); - writer.writeVarInt(oneCredential.version); - writer.writeCompactSize(oneCredential.getByteLength()); - writer.writeSlice(oneCredential.toBuffer()); - } - else if (key == VDXF_Data.DataTransferDestinationKey.vdxfid) { - const transferDest = new TransferDestination_1.TransferDestination(value); - writer.writeSlice((0, address_1.fromBase58Check)(key).hash); - writer.writeVarInt(transferDest.typeNoFlags()); - writer.writeCompactSize(transferDest.getByteLength()); - writer.writeSlice(transferDest.toBuffer()); - } - else if (key == VDXF_Data.ContentMultiMapRemoveKey.vdxfid) { - const transferDest = new ContentMultiMapRemove_1.ContentMultiMapRemove(value); - writer.writeSlice((0, address_1.fromBase58Check)(key).hash); - writer.writeVarInt(transferDest.version); - writer.writeCompactSize(transferDest.getByteLength()); - writer.writeSlice(transferDest.toBuffer()); - } - else if (key == VDXF_Data.CrossChainDataRefKey.vdxfid) { - const transferDest = value; - writer.writeSlice((0, address_1.fromBase58Check)(key).hash); - writer.writeVarInt(vdxf_1.VDXF_OBJECT_DEFAULT_VERSION); - writer.writeCompactSize(transferDest.getByteLength()); - writer.writeSlice(transferDest.toBuffer()); - } - else if (key == VDXF_Data.DataDescriptorKey.vdxfid) { - const descr = new DataDescriptor_1.DataDescriptor(value); - writer.writeSlice((0, address_1.fromBase58Check)(key).hash); - writer.writeVarInt(descr.version); - writer.writeCompactSize(descr.getByteLength()); - writer.writeSlice(descr.toBuffer()); - } - else if (key == VDXF_Data.MMRDescriptorKey.vdxfid) { - const descr = new MMRDescriptor_1.MMRDescriptor(value); - writer.writeSlice((0, address_1.fromBase58Check)(key).hash); - writer.writeVarInt(descr.version); - writer.writeCompactSize(descr.getByteLength()); - writer.writeSlice(descr.toBuffer()); - } - else if (key == VDXF_Data.SignatureDataKey.vdxfid) { - const sigData = new SignatureData_1.SignatureData(value); - writer.writeSlice((0, address_1.fromBase58Check)(key).hash); - writer.writeVarInt(sigData.version); - writer.writeCompactSize(sigData.getByteLength()); - writer.writeSlice(sigData.toBuffer()); - } - else { - throw new Error("contentmap invalid or unrecognized vdxfkey for object type: " + key); - } - } - return writer.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.values = []; - let bytesLeft = reader.buffer.length - reader.offset; - while (bytesLeft > vdxf_1.HASH160_BYTE_LENGTH) // size of uint160 - { - let pSuccess = { value: false }; - let objectUni; - const initialOffset = reader.offset; - try { - let checkVal; - let version = new bn_js_1.BN(0); - let objSize = 0; - checkVal = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - if (checkVal == VDXF_Data.DataCurrencyMapKey.vdxfid) { - const oneCurrencyMap = new CurrencyValueMap_1.CurrencyValueMap({ multivalue: true }); - version = reader.readVarInt(); - objSize = reader.readCompactSize(); - reader.offset = oneCurrencyMap.fromBuffer(reader.buffer, reader.offset); - if (oneCurrencyMap.isValid()) { - objectUni = { key: checkVal, value: oneCurrencyMap }; - } - } - else if (checkVal == VDXF_Data.DataRatingsKey.vdxfid) { - const oneRatingObj = new Rating_1.Rating(); - version = reader.readVarInt(); - objSize = reader.readCompactSize(); - reader.offset = oneRatingObj.fromBuffer(reader.buffer, reader.offset); - if (oneRatingObj.isValid()) { - objectUni = { key: checkVal, value: oneRatingObj }; - } - } - else if (checkVal == VDXF_Data.CredentialKey.vdxfid) { - const credentialObj = new Credential_1.Credential(); - version = reader.readVarInt(); - objSize = reader.readCompactSize(); - reader.offset = credentialObj.fromBuffer(reader.buffer, reader.offset); - if (credentialObj.isValid()) { - objectUni = { key: checkVal, value: credentialObj }; - } - } - else if (checkVal == VDXF_Data.DataTransferDestinationKey.vdxfid) { - const oneTransferDest = new TransferDestination_1.TransferDestination(); - version = reader.readVarInt(); - objSize = reader.readCompactSize(); - reader.offset = oneTransferDest.fromBuffer(reader.buffer, reader.offset); - if (oneTransferDest.isValid()) { - objectUni = { key: checkVal, value: oneTransferDest }; - } - } - else if (checkVal == VDXF_Data.ContentMultiMapRemoveKey.vdxfid) { - const contentMap = new ContentMultiMapRemove_1.ContentMultiMapRemove(); - version = reader.readVarInt(); - objSize = reader.readCompactSize(); - reader.offset = contentMap.fromBuffer(reader.buffer, reader.offset); - if (contentMap.isValid()) { - objectUni = { key: checkVal, value: contentMap }; - } - } - else if (checkVal == VDXF_Data.DataStringKey.vdxfid) { - let stringVal; - version = reader.readVarInt(); - objSize = reader.readCompactSize(); - stringVal = reader.readVarSlice().toString('utf8'); - objectUni = { key: checkVal, value: stringVal }; - } - else if (checkVal == VDXF_Data.DataByteVectorKey.vdxfid) { - let vecVal; - version = reader.readVarInt(); - objSize = reader.readCompactSize(); - vecVal = reader.readVarSlice(); - objectUni = { key: checkVal, value: vecVal.toString('hex') }; - } - else if (checkVal == VDXF_Data.CrossChainDataRefKey.vdxfid) { - const dataRef = new CrossChainDataRef_1.CrossChainDataRef(); - version = reader.readVarInt(); - objSize = reader.readCompactSize(); - reader.offset = dataRef.fromBuffer(reader.buffer, reader.offset); - if (dataRef.isValid()) { - objectUni = { key: checkVal, value: dataRef }; - } - } - else if (checkVal == VDXF_Data.DataDescriptorKey.vdxfid) { - const dataDescriptor = new DataDescriptor_1.DataDescriptor(); - version = reader.readVarInt(); - objSize = reader.readCompactSize(); - reader.offset = dataDescriptor.fromBuffer(reader.buffer, reader.offset); - if (dataDescriptor.isValid()) { - objectUni = { key: checkVal, value: dataDescriptor }; - } - } - else if (checkVal == VDXF_Data.MMRDescriptorKey.vdxfid) { - const mmrDescriptor = new MMRDescriptor_1.MMRDescriptor(); - version = reader.readVarInt(); - objSize = reader.readCompactSize(); - reader.offset = mmrDescriptor.fromBuffer(reader.buffer, reader.offset); - if (mmrDescriptor.isValid()) { - objectUni = { key: checkVal, value: mmrDescriptor }; - } - } - else if (checkVal == VDXF_Data.SignatureDataKey.vdxfid) { - const sigData = new SignatureData_1.SignatureData(); - version = reader.readVarInt(); - objSize = reader.readCompactSize(); - reader.offset = sigData.fromBuffer(reader.buffer, reader.offset); - if (sigData.isValid()) { - objectUni = { key: checkVal, value: sigData }; - } - } - // if we have an object that we recognized, encode it - if (objectUni && objectUni.key && objectUni.value) { - if (pSuccess != null) { - pSuccess.value = true; - } - } - else { - if (pSuccess != null) { - pSuccess.value = false; - } - } - } - catch (e) { - if (pSuccess != null) { - pSuccess.value = false; - } - } - bytesLeft = reader.buffer.length - reader.offset; - if ((pSuccess === null || pSuccess === void 0 ? void 0 : pSuccess.value) && (pSuccess === null || pSuccess === void 0 ? void 0 : pSuccess.value)) { - this.values.push({ [objectUni.key]: objectUni.value }); - } - else { - // add the remaining data as a hex string - reader.offset = initialOffset; - this.values.push({ [""]: reader.readSlice(reader.buffer.length - reader.offset) }); - bytesLeft = 0; - break; - } - } - if (bytesLeft && bytesLeft <= vdxf_1.HASH160_BYTE_LENGTH) { - this.values.push({ [""]: reader.readSlice(bytesLeft) }); - } - return reader.offset; - } - static fromJson(obj) { - const arrayItem = new Array; - if (!Array.isArray(obj)) { - if (typeof (obj) != 'object') { - if (typeof (obj) != 'string') - throw new Error('Not JSON string as expected'); - if ((0, string_1.isHexString)(obj)) { - arrayItem.push({ [""]: Buffer.from(obj, "hex") }); - return new VdxfUniValue({ - values: arrayItem - }); - } - arrayItem.push({ [""]: Buffer.from(obj, "utf-8") }); - return new VdxfUniValue({ - values: arrayItem - }); - } - if (obj.serializedhex) { - if (!(0, string_1.isHexString)(obj.serializedhex)) { - throw new Error("contentmap: If the \"serializedhex\" key is present, it's data must be only valid hex and complete"); - } - arrayItem.push({ [""]: Buffer.from(obj.serializedhex, "hex") }); - return new VdxfUniValue({ - values: arrayItem - }); - } - if (obj.serializedbase64) { - try { - arrayItem.push({ [""]: Buffer.from(obj.serializedbase64, "base64") }); - return new VdxfUniValue({ - values: arrayItem - }); - } - catch (e) { - throw new Error("contentmap: If the \"serializedbase64\" key is present, it's data must be only valid base64 and complete"); - } - } - if (obj.message) { - arrayItem.push({ [""]: Buffer.from(obj.message, "utf-8") }); - return new VdxfUniValue({ - values: arrayItem - }); - } - } - if (!Array.isArray(obj)) { - obj = [obj]; - } - // this should be an object with "vdxfkey" as the key and {object} as the json object to serialize - for (let i = 0; i < obj.length; i++) { - if (typeof (obj[i]) != 'object') { - if (typeof (obj[i]) != 'string') - throw new Error('Not JSON string as expected'); - if ((0, string_1.isHexString)(obj[i])) { - arrayItem.push({ [""]: Buffer.from(obj[i], "hex") }); - continue; - } - arrayItem.push({ [""]: Buffer.from(obj[i], "utf-8") }); - continue; - } - const oneValKeys = Object.keys(obj[i]); - const oneValValues = Object.values(obj[i]); - for (let k = 0; k < oneValKeys.length; k++) { - const objTypeKey = oneValKeys[k]; - if (objTypeKey == VDXF_Data.DataByteKey.vdxfid) { - const oneByte = Buffer.from(oneValValues[k], "hex"); - if (oneByte.length != 1) { - throw new Error("contentmap: byte data must be exactly one byte"); - } - arrayItem.push({ [objTypeKey]: oneByte }); - } - else if (objTypeKey == VDXF_Data.DataInt16Key.vdxfid) { - const oneShort = Buffer.alloc(2); - oneShort.writeInt16LE(oneValValues[k]); - arrayItem.push({ [objTypeKey]: oneShort }); - } - else if (objTypeKey == VDXF_Data.DataUint16Key.vdxfid) { - const oneUShort = Buffer.alloc(2); - oneUShort.writeUInt16LE(oneValValues[k]); - arrayItem.push({ [objTypeKey]: oneUShort }); - } - else if (objTypeKey == VDXF_Data.DataInt32Key.vdxfid) { - const oneInt = Buffer.alloc(4); - oneInt.writeInt32LE(oneValValues[k]); - arrayItem.push({ [objTypeKey]: oneInt }); - } - else if (objTypeKey == VDXF_Data.DataUint32Key.vdxfid) { - const oneUInt = Buffer.alloc(4); - oneUInt.writeUInt32LE(oneValValues[k]); - arrayItem.push({ [objTypeKey]: oneUInt }); - } - else if (objTypeKey == VDXF_Data.DataInt64Key.vdxfid) { - const oneInt64 = Buffer.alloc(8); - oneInt64.writeIntLE(oneValValues[k], 0, 8); - arrayItem.push({ [objTypeKey]: oneInt64 }); - } - else if (objTypeKey == VDXF_Data.DataUint160Key.vdxfid) { - (0, address_1.fromBase58Check)(oneValValues[k]).hash; - arrayItem.push({ [objTypeKey]: oneValValues[k] }); - } - else if (objTypeKey == VDXF_Data.DataUint256Key.vdxfid) { - const oneHash = Buffer.from(oneValValues[k], "hex"); - if (oneHash.length != vdxf_1.HASH256_BYTE_LENGTH) { - throw new Error("contentmap: hash data must be exactly 32 bytes"); - } - arrayItem.push({ [objTypeKey]: oneHash }); - } - else if (objTypeKey == VDXF_Data.DataStringKey.vdxfid) { - arrayItem.push({ [objTypeKey]: oneValValues[k] }); - } - else if (objTypeKey == VDXF_Data.DataByteVectorKey.vdxfid) { - if (!(0, string_1.isHexString)(oneValValues[k])) { - throw new Error("contentmap: bytevector data must be valid hex"); - } - arrayItem.push({ [objTypeKey]: Buffer.from(oneValValues[k], "hex") }); - } - else if (objTypeKey == VDXF_Data.DataCurrencyMapKey.vdxfid) { - const oneCurMap = CurrencyValueMap_1.CurrencyValueMap.fromJson(oneValValues[k], true); - arrayItem.push({ [objTypeKey]: oneCurMap }); - } - else if (objTypeKey == VDXF_Data.DataRatingsKey.vdxfid) { - const oneRatingMap = Rating_1.Rating.fromJson(oneValValues[k]); - arrayItem.push({ [objTypeKey]: oneRatingMap }); - } - else if (objTypeKey == VDXF_Data.DataTransferDestinationKey.vdxfid) { - const transferDest = TransferDestination_1.TransferDestination.fromJson(oneValValues[k]); - arrayItem.push({ [objTypeKey]: transferDest }); - } - else if (objTypeKey == VDXF_Data.ContentMultiMapRemoveKey.vdxfid) { - const content = ContentMultiMapRemove_1.ContentMultiMapRemove.fromJson(oneValValues[k]); - arrayItem.push({ [objTypeKey]: content }); - } - else if (objTypeKey == VDXF_Data.CrossChainDataRefKey.vdxfid) { - const crossChainRefKey = CrossChainDataRef_1.CrossChainDataRef.fromJson(oneValValues[k]); - arrayItem.push({ [objTypeKey]: crossChainRefKey }); - } - else if (objTypeKey == VDXF_Data.DataDescriptorKey.vdxfid) { - const descriptor = DataDescriptor_1.DataDescriptor.fromJson(oneValValues[k]); - arrayItem.push({ [objTypeKey]: descriptor }); - } - else if (objTypeKey == VDXF_Data.MMRDescriptorKey.vdxfid) { - const mmrDescriptor = MMRDescriptor_1.MMRDescriptor.fromJson(oneValValues[k]); - arrayItem.push({ [objTypeKey]: mmrDescriptor }); - } - else if (objTypeKey == VDXF_Data.SignatureDataKey.vdxfid) { - const sigData = SignatureData_1.SignatureData.fromJson(oneValValues[k]); - arrayItem.push({ [objTypeKey]: sigData }); - } - else if (objTypeKey == VDXF_Data.CredentialKey.vdxfid) { - const oneCredential = Credential_1.Credential.fromJson(oneValValues[k]); - arrayItem.push({ [objTypeKey]: oneCredential }); - } - else { - throw new Error("Unknown vdxfkey: " + oneValValues[k]); - } - } - } - return new VdxfUniValue({ - values: arrayItem - }); - } - toJson() { - let ret = []; - for (const inner of this.values) { - const key = Object.keys(inner)[0]; - const value = inner[key]; - if (key === "" && Buffer.isBuffer(value)) { - ret.push(value.toString('hex')); - } - else if (Buffer.isBuffer(value)) { - ret.push({ [key]: value.toString('hex') }); - } - else if (typeof (value) === 'string') { - ret.push({ [key]: value }); - } - else if (value instanceof bn_js_1.BN) { - ret.push({ [key]: value.toString(10) }); - } - else { - ret.push({ [key]: value.toJson() }); - } - } - if (ret && ret.length == 1) { - return ret[0]; - } - return ret; - } -} -exports.VdxfUniValue = VdxfUniValue; diff --git a/dist/pbaas/index.d.ts b/dist/pbaas/index.d.ts deleted file mode 100644 index e3c1ae60..00000000 --- a/dist/pbaas/index.d.ts +++ /dev/null @@ -1,33 +0,0 @@ -export * from './Credential'; -export * from './CurrencyValueMap'; -export * from './Identity'; -export * from './ReserveTransfer'; -export * from './TokenOutput'; -export * from './TransferDestination'; -export * from './OptCCParams'; -export * from './ContentMultiMap'; -export * from './IdentityID'; -export * from './KeyID'; -export * from './NoDestination'; -export * from './Principal'; -export * from './PubKey'; -export * from './ReserveTransfer'; -export * from './SaplingPaymentAddress'; -export * from './TxDestination'; -export * from './UnknownID'; -export * from './VdxfUniValue'; -export * from './transaction/VerusScript'; -export * from './transaction/SmartTransactionScript'; -export * from './transaction/IdentityScript'; -export * from './ContentMultiMapRemove'; -export * from './CrossChainDataRef'; -export * from './DataDescriptor'; -export * from './IdentityMultimapRef'; -export * from './MMRDescriptor'; -export * from './Rating'; -export * from './SaltedData'; -export * from './SignatureData'; -export * from './URLRef'; -export * from './UTXORef'; -export * from './DefinedKey'; -export * from './MMR'; diff --git a/dist/pbaas/index.js b/dist/pbaas/index.js deleted file mode 100644 index a2abc1be..00000000 --- a/dist/pbaas/index.js +++ /dev/null @@ -1,49 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("./Credential"), exports); -__exportStar(require("./CurrencyValueMap"), exports); -__exportStar(require("./Identity"), exports); -__exportStar(require("./ReserveTransfer"), exports); -__exportStar(require("./TokenOutput"), exports); -__exportStar(require("./TransferDestination"), exports); -__exportStar(require("./OptCCParams"), exports); -__exportStar(require("./ContentMultiMap"), exports); -__exportStar(require("./IdentityID"), exports); -__exportStar(require("./KeyID"), exports); -__exportStar(require("./NoDestination"), exports); -__exportStar(require("./Principal"), exports); -__exportStar(require("./PubKey"), exports); -__exportStar(require("./ReserveTransfer"), exports); -__exportStar(require("./SaplingPaymentAddress"), exports); -__exportStar(require("./TxDestination"), exports); -__exportStar(require("./UnknownID"), exports); -__exportStar(require("./VdxfUniValue"), exports); -__exportStar(require("./transaction/VerusScript"), exports); -__exportStar(require("./transaction/SmartTransactionScript"), exports); -__exportStar(require("./transaction/IdentityScript"), exports); -__exportStar(require("./ContentMultiMapRemove"), exports); -__exportStar(require("./CrossChainDataRef"), exports); -__exportStar(require("./DataDescriptor"), exports); -__exportStar(require("./IdentityMultimapRef"), exports); -__exportStar(require("./MMRDescriptor"), exports); -__exportStar(require("./Rating"), exports); -__exportStar(require("./SaltedData"), exports); -__exportStar(require("./SignatureData"), exports); -__exportStar(require("./URLRef"), exports); -__exportStar(require("./UTXORef"), exports); -__exportStar(require("./DefinedKey"), exports); -__exportStar(require("./MMR"), exports); diff --git a/dist/pbaas/transaction/IdentityScript.d.ts b/dist/pbaas/transaction/IdentityScript.d.ts deleted file mode 100644 index b7ffb10d..00000000 --- a/dist/pbaas/transaction/IdentityScript.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SerializableEntity } from "../../utils/types/SerializableEntity"; -import { Identity } from "../Identity"; -import { OptCCParams } from "../OptCCParams"; -import { SmartTransactionScript } from "./SmartTransactionScript"; -export declare class IdentityScript extends SmartTransactionScript implements SerializableEntity { - constructor(master?: OptCCParams, params?: OptCCParams); - static fromIdentity(identity: Identity): IdentityScript; - getIdentity(parseVdxfObjects?: boolean): Identity; -} diff --git a/dist/pbaas/transaction/IdentityScript.js b/dist/pbaas/transaction/IdentityScript.js deleted file mode 100644 index 89288faf..00000000 --- a/dist/pbaas/transaction/IdentityScript.js +++ /dev/null @@ -1,93 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.IdentityScript = void 0; -const bn_js_1 = require("bn.js"); -const Identity_1 = require("../Identity"); -const OptCCParams_1 = require("../OptCCParams"); -const SmartTransactionScript_1 = require("./SmartTransactionScript"); -const evals_1 = require("../../utils/evals"); -const TxDestination_1 = require("../TxDestination"); -const IdentityID_1 = require("../IdentityID"); -const cccustom_1 = require("../../utils/cccustom"); -const KeyID_1 = require("../KeyID"); -class IdentityScript extends SmartTransactionScript_1.SmartTransactionScript { - constructor(master, params) { - super(master, params); - } - static fromIdentity(identity) { - if (identity.version.lt(Identity_1.Identity.VERSION_CURRENT)) { - throw new Error("Cannot generate script for outdated identity version"); - } - const identityAddress = identity.getIdentityAddress(); - const destinationsMaster = identity.isRevoked() ? [ - new TxDestination_1.TxDestination(IdentityID_1.IdentityID.fromAddress(identityAddress)), - new TxDestination_1.TxDestination(identity.recovery_authority) - ] : [ - new TxDestination_1.TxDestination(IdentityID_1.IdentityID.fromAddress(identityAddress)), - new TxDestination_1.TxDestination(identity.revocation_authority), - new TxDestination_1.TxDestination(identity.recovery_authority) - ]; - const destinationsRecovery = [ - new TxDestination_1.TxDestination(identity.recovery_authority) - ]; - if (identity.hasTokenizedIdControl()) { - const addrDestination = new TxDestination_1.TxDestination(KeyID_1.KeyID.fromAddress(cccustom_1.IDENTITY_RECOVER_ADDR)); - destinationsRecovery.push(addrDestination); - } - const master = new OptCCParams_1.OptCCParams({ - version: Identity_1.Identity.VERSION_CURRENT, - eval_code: new bn_js_1.BN(evals_1.EVALS.EVAL_NONE), - m: new bn_js_1.BN(1), - n: new bn_js_1.BN(destinationsMaster.length), - destinations: destinationsMaster, - vdata: [] - }); - const params = new OptCCParams_1.OptCCParams({ - version: Identity_1.Identity.VERSION_CURRENT, - eval_code: new bn_js_1.BN(evals_1.EVALS.EVAL_IDENTITY_PRIMARY), - m: new bn_js_1.BN(1), - n: new bn_js_1.BN(1), - destinations: [ - new TxDestination_1.TxDestination(IdentityID_1.IdentityID.fromAddress(identityAddress)) - ], - vdata: identity.isRevoked() ? [ - identity.toBuffer(), - new OptCCParams_1.OptCCParams({ - version: Identity_1.Identity.VERSION_CURRENT, - eval_code: new bn_js_1.BN(evals_1.EVALS.EVAL_IDENTITY_RECOVER), - m: new bn_js_1.BN(1), - n: new bn_js_1.BN(destinationsRecovery.length), - destinations: destinationsRecovery, - vdata: [] - }).toChunk() - ] : [ - identity.toBuffer(), - new OptCCParams_1.OptCCParams({ - version: Identity_1.Identity.VERSION_CURRENT, - eval_code: new bn_js_1.BN(evals_1.EVALS.EVAL_IDENTITY_REVOKE), - m: new bn_js_1.BN(1), - n: new bn_js_1.BN(1), - destinations: [ - new TxDestination_1.TxDestination(identity.revocation_authority) - ], - vdata: [] - }).toChunk(), - new OptCCParams_1.OptCCParams({ - version: Identity_1.Identity.VERSION_CURRENT, - eval_code: new bn_js_1.BN(evals_1.EVALS.EVAL_IDENTITY_RECOVER), - m: new bn_js_1.BN(1), - n: new bn_js_1.BN(destinationsRecovery.length), - destinations: destinationsRecovery, - vdata: [] - }).toChunk() - ] - }); - return new IdentityScript(master, params); - } - getIdentity(parseVdxfObjects = false) { - const identity = new Identity_1.Identity(); - identity.fromBuffer(this.params.getParamObject(), 0, parseVdxfObjects); - return identity; - } -} -exports.IdentityScript = IdentityScript; diff --git a/dist/pbaas/transaction/SmartTransactionScript.d.ts b/dist/pbaas/transaction/SmartTransactionScript.d.ts deleted file mode 100644 index 4fdb26bd..00000000 --- a/dist/pbaas/transaction/SmartTransactionScript.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { ScriptChunk } from "../../utils/script"; -import { SerializableEntity } from "../../utils/types/SerializableEntity"; -import { OptCCParams } from "../OptCCParams"; -import { VerusScript } from "./VerusScript"; -export declare class SmartTransactionScript extends VerusScript implements SerializableEntity { - protected master: OptCCParams; - protected params: OptCCParams; - constructor(master?: OptCCParams, params?: OptCCParams); - static getChunks(master: OptCCParams, params: OptCCParams): Array; - private updateChunks; - fromBuffer(buffer: Buffer, offset?: number, length?: number): number; - toBuffer(): Buffer; - getByteLength(): number; - set masterOptCC(master: OptCCParams); - set paramsOptCC(params: OptCCParams); - get masterOptCC(): OptCCParams; - get paramsOptCC(): OptCCParams; -} diff --git a/dist/pbaas/transaction/SmartTransactionScript.js b/dist/pbaas/transaction/SmartTransactionScript.js deleted file mode 100644 index eb9b05ac..00000000 --- a/dist/pbaas/transaction/SmartTransactionScript.js +++ /dev/null @@ -1,53 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SmartTransactionScript = void 0; -const ops_1 = require("../../utils/ops"); -const OptCCParams_1 = require("../OptCCParams"); -const VerusScript_1 = require("./VerusScript"); -class SmartTransactionScript extends VerusScript_1.VerusScript { - constructor(master, params) { - super(master == null || params == null ? [] : SmartTransactionScript.getChunks(master, params)); - this.master = master; - this.params = params; - } - static getChunks(master, params) { - return [ - master.toChunk(), - ops_1.OPS.OP_CHECKCRYPTOCONDITION, - params.toChunk(), - ops_1.OPS.OP_DROP - ]; - } - updateChunks() { - this.chunks = SmartTransactionScript.getChunks(this.master, this.params); - } - fromBuffer(buffer, offset, length) { - const _offset = super.fromBuffer(buffer, offset, length); - this.master = OptCCParams_1.OptCCParams.fromChunk(this.chunks[0]); - this.params = OptCCParams_1.OptCCParams.fromChunk(this.chunks[2]); - return _offset; - } - toBuffer() { - this.updateChunks(); - return super.toBuffer(); - } - getByteLength() { - this.updateChunks(); - return super.getByteLength(); - } - set masterOptCC(master) { - this.master = master; - this.updateChunks(); - } - set paramsOptCC(params) { - this.params = params; - this.updateChunks(); - } - get masterOptCC() { - return this.master; - } - get paramsOptCC() { - return this.params; - } -} -exports.SmartTransactionScript = SmartTransactionScript; diff --git a/dist/pbaas/transaction/VerusScript.d.ts b/dist/pbaas/transaction/VerusScript.d.ts deleted file mode 100644 index 7ed48b6a..00000000 --- a/dist/pbaas/transaction/VerusScript.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { ScriptChunk } from "../../utils/script"; -import { SerializableEntity } from "../../utils/types/SerializableEntity"; -export declare class VerusScript implements SerializableEntity { - chunks: Array; - constructor(chunks?: Array); - getByteLength(): number; - fromBuffer(buffer: Buffer, offset?: number, length?: number): number; - private internalToBuffer; - toBuffer(): Buffer; -} diff --git a/dist/pbaas/transaction/VerusScript.js b/dist/pbaas/transaction/VerusScript.js deleted file mode 100644 index 7e6ff197..00000000 --- a/dist/pbaas/transaction/VerusScript.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VerusScript = void 0; -const bufferutils_1 = require("../../utils/bufferutils"); -const script_1 = require("../../utils/script"); -class VerusScript { - constructor(chunks = []) { - this.chunks = chunks; - } - getByteLength() { - return this.internalToBuffer().length; - } - fromBuffer(buffer, offset, length) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - const _length = length != null ? length : offset != null ? reader.buffer.length - offset : reader.buffer.length; - this.chunks = (0, script_1.decompile)(reader.readSlice(_length)); - return reader.offset; - } - internalToBuffer() { - return (0, script_1.compile)(this.chunks); - } - toBuffer() { - return this.internalToBuffer(); - } -} -exports.VerusScript = VerusScript; diff --git a/dist/transaction/RawTransaction.d.ts b/dist/transaction/RawTransaction.d.ts deleted file mode 100644 index da5c311d..00000000 --- a/dist/transaction/RawTransaction.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { ApiPrimitive } from "../api/ApiPrimitive"; -export interface RawTransaction { - hex: string; - txid: string; - overwintered: boolean; - version: number; - versiongroupid: string; - locktime: number; - expiryheight: number; - vin: Array; - vout: Array; - vjoinsplit: Array; - valueBalance: number; - vShieldedSpend: Array; - vShieldedOutput: Array; - blockhash: string; - height: number; - confirmations: number; - time: number; - blocktime: number; -} diff --git a/dist/transaction/RawTransaction.js b/dist/transaction/RawTransaction.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/transaction/RawTransaction.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/utils/IdentityData.d.ts b/dist/utils/IdentityData.d.ts deleted file mode 100644 index 3bf8838d..00000000 --- a/dist/utils/IdentityData.d.ts +++ /dev/null @@ -1,440 +0,0 @@ -import * as identitykeys from '../vdxf/identitydatakeys'; -import * as keylist from '../vdxf/keys'; -export declare const getFriendlyNameForVdxfKey: (vdxfkey: string, locale?: string) => any; -export declare const IdentityVdxfidMap: { - [identitykeys.IDENTITY_FIRSTNAME.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_LASTNAME.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_MIDDLENAME.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_GENDER.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_NATIONALITY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_ATTESTOR.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_ATTESTATION_RECIPIENT.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_PHONENUMBER.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_DATEOFBIRTH.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_OVER18.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_OVER21.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_OVER25.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_EMAIL.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_HOMEADDRESS.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_HOMEADDRESS_STREET1.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_HOMEADDRESS_STREET2.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_HOMEADDRESS_CITY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_HOMEADDRESS_REGION.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_HOMEADDRESS_POSTCODE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_HOMEADDRESS_COUNTRY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_IDNUMBER_VALUE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_IDNUMBER_TYPE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VERIFICATION_STATUS.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VERIFICATION_APPROVALS_ACCEPTEDTOS.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VERIFICATION_APPROVALS_VERIFIEDSMS.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VERIFICATION_APPROVALS_KYCCHECKED.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VERIFICATION_APPROVALS_DOCUMENTSVERIFIED.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VERIFICATION_APPROVALS_SELFIECHECKED.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VERIFICATION_APPROVALS_WATCHLISTOK.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VERIFICATION_APPROVALS_RISKCHECKOK.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_DRIVINGLICENCE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_DRIVINGLICENCE_ORIGINALFRONT.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_DRIVINGLICENCE_ORIGINALBACK.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_DRIVINGLICENCE_CROPPEDFRONT.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_DRIVINGLICENCE_CROPPEDBACK.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_DRIVINGLICENCE_FACE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_DRIVINGLICENCE_IDNUMBER.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_DRIVINGLICENCE_CATEGORY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_DRIVINGLICENCE_EXPIRATIONDATE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_DRIVINGLICENCE_ISSUINGCOUNTRY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_DRIVINGLICENCE_ISSUINGREGION.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_DRIVINGLICENCE_DATEOFBIRTH.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_DRIVINGLICENCE_ADDRESS_STREET1.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_DRIVINGLICENCE_ADDRESS_CITY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_DRIVINGLICENCE_ADDRESS_REGION.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_DRIVINGLICENCE_ADDRESS_POSTCODE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_DRIVINGLICENCE_ADDRESS_COUNTRY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_SELFIECHECK_IMAGE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_SELFIECHECK_VIDEO.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VERIFICATION_APPROVALS_RISKCHECKOK.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_EMAIL_ISDELIVERABLE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_EMAIL_BREACHCOUNT.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_EMAIL_FIRSTBREACHEDAT.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_EMAIL_LASTBREACHEDAT.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_EMAIL_DOMAIN_REGISTEREDAT.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_EMAIL_DOMAIN_FREEPROVIDER.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_EMAIL_DOMAIN_CUSTOM.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_EMAIL_DOMAIN_DISPOSABLE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_EMAIL_DOMAIN_TOPLEVEL_SUSPICIOUS.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_IDCARD.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_IDCARD_ORIGINALFRONT.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_IDCARD_ORIGINALBACK.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_IDCARD_CROPPEDFRONT.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_IDCARD_CROPPEDBACK.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_IDCARD_FACE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_IDCARD_IDNUMBER.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_IDCARD_CATEGORY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_IDCARD_EXPIRATIONDATE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_IDCARD_ISSUINGREGION.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_IDCARD_DATEOFBIRTH.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_IDCARD_ADDRESS_STREET1.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_IDCARD_ADDRESS_CITY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_IDCARD_ADDRESS_REGION.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_IDCARD_ADDRESS_POSTCODE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_IDCARD_ADDRESS_COUNTRY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_PASSPORT.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_PASSPORT_ORIGINALFRONT.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_PASSPORT_ORIGINALBACK.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_PASSPORT_CROPPEDFRONT.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_PASSPORT_CROPPEDBACK.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_PASSPORT_FACE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_PASSPORT_IDNUMBER.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_PASSPORT_CATEGORY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_PASSPORT_EXPIRATIONDATE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_PASSPORT_DATEOFBIRTH.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_PASSPORT_ADDRESS_STREET1.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_PASSPORT_ADDRESS_CITY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_PASSPORT_ADDRESS_REGION.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_PASSPORT_ADDRESS_POSTCODE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_PASSPORT_ADDRESS_COUNTRY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENCEPERMIT.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENCEPERMIT_ORIGINALFRONT.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENCEPERMIT_ORIGINALBACK.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENCEPERMIT_CROPPEDFRONT.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENCEPERMIT_CROPPEDBACK.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENCEPERMIT_FACE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENCEPERMIT_IDNUMBER.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENCEPERMIT_CATEGORY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENCEPERMIT_EXPIRATIONDATE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENCEPERMIT_ISSUINGREGION.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENCEPERMIT_DATEOFBIRTH.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS_STREET1.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS_CITY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS_REGION.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS_POSTCODE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS_COUNTRY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENTCARD.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENTCARD_ORIGINALFRONT.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENTCARD_ORIGINALBACK.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENTCARD_CROPPEDFRONT.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENTCARD_CROPPEDBACK.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENTCARD_FACE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENTCARD_IDNUMBER.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENTCARD_CATEGORY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENTCARD_EXPIRATIONDATE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENTCARD_ISSUINGREGION.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENTCARD_DATEOFBIRTH.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENTCARD_ADDRESS_STREET1.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENTCARD_ADDRESS_CITY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENTCARD_ADDRESS_REGION.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENTCARD_ADDRESS_POSTCODE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_RESIDENTCARD_ADDRESS_COUNTRY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VISA.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VISA_ORIGINALFRONT.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VISA_ORIGINALBACK.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VISA_CROPPEDFRONT.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VISA_CROPPEDBACK.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VISA_FACE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VISA_IDNUMBER.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VISA_CATEGORY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VISA_EXPIRATIONDATE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VISA_ISSUINGREGION.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VISA_DATEOFBIRTH.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VISA_ADDRESS_STREET1.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VISA_ADDRESS_CITY.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VISA_ADDRESS_REGION.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VISA_ADDRESS_POSTCODE.vdxfid]: { - EN: string; - }; - [identitykeys.IDENTITY_VISA_ADDRESS_COUNTRY.vdxfid]: { - EN: string; - }; - [keylist.ATTESTATION_PROVISION_TYPE.vdxfid]: { - EN: string; - }; - [keylist.ATTESTATION_PROVISION_URL.vdxfid]: { - EN: string; - }; - [keylist.ATTESTATION_VIEW_RESPONSE.vdxfid]: { - EN: string; - }; - [keylist.ATTESTATION_VIEW_REQUEST.vdxfid]: { - EN: string; - }; - [keylist.PROFILE_DATA_VIEW_REQUEST.vdxfid]: { - EN: string; - }; - [keylist.IDENTITY_SIGNDATA_REQUEST.vdxfid]: { - EN: string; - }; -}; diff --git a/dist/utils/IdentityData.js b/dist/utils/IdentityData.js deleted file mode 100644 index 68cc9548..00000000 --- a/dist/utils/IdentityData.js +++ /dev/null @@ -1,165 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.IdentityVdxfidMap = exports.getFriendlyNameForVdxfKey = void 0; -const identitykeys = require("../vdxf/identitydatakeys"); -const keylist = require("../vdxf/keys"); -const IMPLEMENTED_LOCALES = ['EN']; -const getFriendlyNameForVdxfKey = (vdxfkey, locale = 'EN') => { - if (!IMPLEMENTED_LOCALES.includes(locale)) { - throw new Error(locale + " is not implemented"); - } - if (vdxfkey in exports.IdentityVdxfidMap[locale]) { - return exports.IdentityVdxfidMap[vdxfkey][locale]; - } - else { - throw new Error("Unknown VDXF key"); - } -}; -exports.getFriendlyNameForVdxfKey = getFriendlyNameForVdxfKey; -exports.IdentityVdxfidMap = { - [identitykeys.IDENTITY_FIRSTNAME.vdxfid]: { EN: "First Name" }, - [identitykeys.IDENTITY_LASTNAME.vdxfid]: { EN: "Last Name" }, - [identitykeys.IDENTITY_MIDDLENAME.vdxfid]: { EN: "Middle Name" }, - [identitykeys.IDENTITY_GENDER.vdxfid]: { EN: "Gender" }, - [identitykeys.IDENTITY_NATIONALITY.vdxfid]: { EN: "Nationality" }, - [identitykeys.IDENTITY_ATTESTOR.vdxfid]: { EN: "Attestor ID" }, - [identitykeys.IDENTITY_ATTESTATION_RECIPIENT.vdxfid]: { EN: "Attestation Recipient" }, - [identitykeys.IDENTITY_PHONENUMBER.vdxfid]: { EN: "Phone Number" }, - [identitykeys.IDENTITY_DATEOFBIRTH.vdxfid]: { EN: "Date of Birth" }, - [identitykeys.IDENTITY_OVER18.vdxfid]: { EN: "Over 18" }, - [identitykeys.IDENTITY_OVER21.vdxfid]: { EN: "Over 21" }, - [identitykeys.IDENTITY_OVER25.vdxfid]: { EN: "Over 25" }, - [identitykeys.IDENTITY_EMAIL.vdxfid]: { EN: "Email Address" }, - [identitykeys.IDENTITY_HOMEADDRESS.vdxfid]: { EN: "Home address" }, - [identitykeys.IDENTITY_HOMEADDRESS_STREET1.vdxfid]: { EN: "Street 1" }, - [identitykeys.IDENTITY_HOMEADDRESS_STREET2.vdxfid]: { EN: "Street 2" }, - [identitykeys.IDENTITY_HOMEADDRESS_CITY.vdxfid]: { EN: "City" }, - [identitykeys.IDENTITY_HOMEADDRESS_REGION.vdxfid]: { EN: "Region" }, - [identitykeys.IDENTITY_HOMEADDRESS_POSTCODE.vdxfid]: { EN: "Post Code" }, - [identitykeys.IDENTITY_HOMEADDRESS_COUNTRY.vdxfid]: { EN: "Country" }, - [identitykeys.IDENTITY_IDNUMBER_VALUE.vdxfid]: { EN: "ID Number" }, - [identitykeys.IDENTITY_IDNUMBER_TYPE.vdxfid]: { EN: "ID Type" }, - [identitykeys.IDENTITY_VERIFICATION_STATUS.vdxfid]: { EN: "Verification Status" }, - [identitykeys.IDENTITY_VERIFICATION_APPROVALS_ACCEPTEDTOS.vdxfid]: { EN: "Accepted Terms and Conditions" }, - [identitykeys.IDENTITY_VERIFICATION_APPROVALS_VERIFIEDSMS.vdxfid]: { EN: "SMS Verified" }, - [identitykeys.IDENTITY_VERIFICATION_APPROVALS_KYCCHECKED.vdxfid]: { EN: "KYC Checked ok" }, - [identitykeys.IDENTITY_VERIFICATION_APPROVALS_DOCUMENTSVERIFIED.vdxfid]: { EN: "Documents Verified" }, - [identitykeys.IDENTITY_VERIFICATION_APPROVALS_SELFIECHECKED.vdxfid]: { EN: "Selfie Checked" }, - [identitykeys.IDENTITY_VERIFICATION_APPROVALS_WATCHLISTOK.vdxfid]: { EN: "Watchlist ok" }, - [identitykeys.IDENTITY_VERIFICATION_APPROVALS_RISKCHECKOK.vdxfid]: { EN: "Riskcheck ok" }, - [identitykeys.IDENTITY_DRIVINGLICENCE.vdxfid]: { EN: "Driving Licence" }, - [identitykeys.IDENTITY_DRIVINGLICENCE_ORIGINALFRONT.vdxfid]: { EN: "Driving Licence Front" }, - [identitykeys.IDENTITY_DRIVINGLICENCE_ORIGINALBACK.vdxfid]: { EN: "Driving Licence Back" }, - [identitykeys.IDENTITY_DRIVINGLICENCE_CROPPEDFRONT.vdxfid]: { EN: "Driving Licence Front" }, - [identitykeys.IDENTITY_DRIVINGLICENCE_CROPPEDBACK.vdxfid]: { EN: "Driving Licence Back" }, - [identitykeys.IDENTITY_DRIVINGLICENCE_FACE.vdxfid]: { EN: "Driving Licence Face" }, - [identitykeys.IDENTITY_DRIVINGLICENCE_IDNUMBER.vdxfid]: { EN: "Driving Licence Number" }, - [identitykeys.IDENTITY_DRIVINGLICENCE_CATEGORY.vdxfid]: { EN: "Driving Licence Catagory" }, - [identitykeys.IDENTITY_DRIVINGLICENCE_EXPIRATIONDATE.vdxfid]: { EN: "Driving Licence expiry date" }, - [identitykeys.IDENTITY_DRIVINGLICENCE_ISSUINGCOUNTRY.vdxfid]: { EN: "Driving Licence issuing country" }, - [identitykeys.IDENTITY_DRIVINGLICENCE_ISSUINGREGION.vdxfid]: { EN: "Driving Licence issuing region" }, - [identitykeys.IDENTITY_DRIVINGLICENCE_DATEOFBIRTH.vdxfid]: { EN: "Driving Licence Date of Birth" }, - [identitykeys.IDENTITY_DRIVINGLICENCE_ADDRESS_STREET1.vdxfid]: { EN: "Driving Licence Street 1" }, - [identitykeys.IDENTITY_DRIVINGLICENCE_ADDRESS_CITY.vdxfid]: { EN: "Driving Licence City" }, - [identitykeys.IDENTITY_DRIVINGLICENCE_ADDRESS_REGION.vdxfid]: { EN: "Driving Licence Region" }, - [identitykeys.IDENTITY_DRIVINGLICENCE_ADDRESS_POSTCODE.vdxfid]: { EN: "Driving Licence ZIP/Post Code" }, - [identitykeys.IDENTITY_DRIVINGLICENCE_ADDRESS_COUNTRY.vdxfid]: { EN: "Driving Licence Country" }, - [identitykeys.IDENTITY_SELFIECHECK_IMAGE.vdxfid]: { EN: "Selfie Check image" }, - [identitykeys.IDENTITY_SELFIECHECK_VIDEO.vdxfid]: { EN: "Selfie Check video" }, - [identitykeys.IDENTITY_VERIFICATION_APPROVALS_RISKCHECKOK.vdxfid]: { EN: "Risk Check Ok" }, - [identitykeys.IDENTITY_EMAIL_ISDELIVERABLE.vdxfid]: { EN: "Email address is deliverable" }, - [identitykeys.IDENTITY_EMAIL_BREACHCOUNT.vdxfid]: { EN: "Email breach count" }, - [identitykeys.IDENTITY_EMAIL_FIRSTBREACHEDAT.vdxfid]: { EN: "Email first breach date" }, - [identitykeys.IDENTITY_EMAIL_LASTBREACHEDAT.vdxfid]: { EN: "Email last breach date" }, - [identitykeys.IDENTITY_EMAIL_DOMAIN_REGISTEREDAT.vdxfid]: { EN: "Email domain registered at" }, - [identitykeys.IDENTITY_EMAIL_DOMAIN_FREEPROVIDER.vdxfid]: { EN: "Email is free provider" }, - [identitykeys.IDENTITY_EMAIL_DOMAIN_CUSTOM.vdxfid]: { EN: "Email Domain is custom" }, - [identitykeys.IDENTITY_EMAIL_DOMAIN_DISPOSABLE.vdxfid]: { EN: "Email Domain Disposable" }, - [identitykeys.IDENTITY_EMAIL_DOMAIN_TOPLEVEL_SUSPICIOUS.vdxfid]: { EN: "Email top level Domain Suspicious" }, - [identitykeys.IDENTITY_IDCARD.vdxfid]: { EN: "ID Card" }, - [identitykeys.IDENTITY_IDCARD_ORIGINALFRONT.vdxfid]: { EN: "ID Card Front" }, - [identitykeys.IDENTITY_IDCARD_ORIGINALBACK.vdxfid]: { EN: "ID Card Back" }, - [identitykeys.IDENTITY_IDCARD_CROPPEDFRONT.vdxfid]: { EN: "ID Card Front" }, - [identitykeys.IDENTITY_IDCARD_CROPPEDBACK.vdxfid]: { EN: "ID Card Back" }, - [identitykeys.IDENTITY_IDCARD_FACE.vdxfid]: { EN: "ID Card Face" }, - [identitykeys.IDENTITY_IDCARD_IDNUMBER.vdxfid]: { EN: "ID Card ID Number" }, - [identitykeys.IDENTITY_IDCARD_CATEGORY.vdxfid]: { EN: "ID Card Category" }, - [identitykeys.IDENTITY_IDCARD_EXPIRATIONDATE.vdxfid]: { EN: "ID Card Expiry date" }, - [identitykeys.IDENTITY_IDCARD_ISSUINGREGION.vdxfid]: { EN: "ID Card Issuing Region" }, - [identitykeys.IDENTITY_IDCARD_DATEOFBIRTH.vdxfid]: { EN: "ID Card Date of Birth" }, - [identitykeys.IDENTITY_IDCARD_ADDRESS_STREET1.vdxfid]: { EN: "ID Card Street 1" }, - [identitykeys.IDENTITY_IDCARD_ADDRESS_CITY.vdxfid]: { EN: "ID Card City" }, - [identitykeys.IDENTITY_IDCARD_ADDRESS_REGION.vdxfid]: { EN: "ID Card Region" }, - [identitykeys.IDENTITY_IDCARD_ADDRESS_POSTCODE.vdxfid]: { EN: "ID Card Zip/Post Code" }, - [identitykeys.IDENTITY_IDCARD_ADDRESS_COUNTRY.vdxfid]: { EN: "ID Card Country" }, - [identitykeys.IDENTITY_PASSPORT.vdxfid]: { EN: "Passport" }, - [identitykeys.IDENTITY_PASSPORT_ORIGINALFRONT.vdxfid]: { EN: "Passport front" }, - [identitykeys.IDENTITY_PASSPORT_ORIGINALBACK.vdxfid]: { EN: "Passport back" }, - [identitykeys.IDENTITY_PASSPORT_CROPPEDFRONT.vdxfid]: { EN: "Passport front" }, - [identitykeys.IDENTITY_PASSPORT_CROPPEDBACK.vdxfid]: { EN: "Passport back" }, - [identitykeys.IDENTITY_PASSPORT_FACE.vdxfid]: { EN: "Passport face" }, - [identitykeys.IDENTITY_PASSPORT_IDNUMBER.vdxfid]: { EN: "Passport ID Number" }, - [identitykeys.IDENTITY_PASSPORT_CATEGORY.vdxfid]: { EN: "Passport Category" }, - [identitykeys.IDENTITY_PASSPORT_EXPIRATIONDATE.vdxfid]: { EN: "Passport expiry date" }, - [identitykeys.IDENTITY_PASSPORT_DATEOFBIRTH.vdxfid]: { EN: "Passport date of birth" }, - [identitykeys.IDENTITY_PASSPORT_ADDRESS_STREET1.vdxfid]: { EN: "Passport street 1" }, - [identitykeys.IDENTITY_PASSPORT_ADDRESS_CITY.vdxfid]: { EN: "Passport city" }, - [identitykeys.IDENTITY_PASSPORT_ADDRESS_REGION.vdxfid]: { EN: "Passport region" }, - [identitykeys.IDENTITY_PASSPORT_ADDRESS_POSTCODE.vdxfid]: { EN: "Passport zip/post code" }, - [identitykeys.IDENTITY_PASSPORT_ADDRESS_COUNTRY.vdxfid]: { EN: "Passport country" }, - [identitykeys.IDENTITY_RESIDENCEPERMIT.vdxfid]: { EN: "Residence Permit" }, - [identitykeys.IDENTITY_RESIDENCEPERMIT_ORIGINALFRONT.vdxfid]: { EN: "Residence Permit front" }, - [identitykeys.IDENTITY_RESIDENCEPERMIT_ORIGINALBACK.vdxfid]: { EN: "Residence Permit back" }, - [identitykeys.IDENTITY_RESIDENCEPERMIT_CROPPEDFRONT.vdxfid]: { EN: "Residence Permit front" }, - [identitykeys.IDENTITY_RESIDENCEPERMIT_CROPPEDBACK.vdxfid]: { EN: "Residence Permit back" }, - [identitykeys.IDENTITY_RESIDENCEPERMIT_FACE.vdxfid]: { EN: "Residence Permit face" }, - [identitykeys.IDENTITY_RESIDENCEPERMIT_IDNUMBER.vdxfid]: { EN: "Residence Permit ID Number" }, - [identitykeys.IDENTITY_RESIDENCEPERMIT_CATEGORY.vdxfid]: { EN: "Residence Permit category" }, - [identitykeys.IDENTITY_RESIDENCEPERMIT_EXPIRATIONDATE.vdxfid]: { EN: "Residence Permit expiry date" }, - [identitykeys.IDENTITY_RESIDENCEPERMIT_ISSUINGREGION.vdxfid]: { EN: "Residence Permit issuing region" }, - [identitykeys.IDENTITY_RESIDENCEPERMIT_DATEOFBIRTH.vdxfid]: { EN: "Residence Permit date of birth" }, - [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS.vdxfid]: { EN: "Residence Permit Address" }, - [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS_STREET1.vdxfid]: { EN: "Residence Permit Street 1" }, - [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS_CITY.vdxfid]: { EN: "Residence Permit City" }, - [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS_REGION.vdxfid]: { EN: "Residence Permit Region" }, - [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS_POSTCODE.vdxfid]: { EN: "Residence Permit Zip/Post code" }, - [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS_COUNTRY.vdxfid]: { EN: "Residence Permit Country" }, - [identitykeys.IDENTITY_RESIDENTCARD.vdxfid]: { EN: "Resident Card" }, - [identitykeys.IDENTITY_RESIDENTCARD_ORIGINALFRONT.vdxfid]: { EN: "Resident Card Front" }, - [identitykeys.IDENTITY_RESIDENTCARD_ORIGINALBACK.vdxfid]: { EN: "Resident Card Back" }, - [identitykeys.IDENTITY_RESIDENTCARD_CROPPEDFRONT.vdxfid]: { EN: "Resident Card Front" }, - [identitykeys.IDENTITY_RESIDENTCARD_CROPPEDBACK.vdxfid]: { EN: "Resident Card Back" }, - [identitykeys.IDENTITY_RESIDENTCARD_FACE.vdxfid]: { EN: "Resident Card Face" }, - [identitykeys.IDENTITY_RESIDENTCARD_IDNUMBER.vdxfid]: { EN: "Resident Card ID Number" }, - [identitykeys.IDENTITY_RESIDENTCARD_CATEGORY.vdxfid]: { EN: "Resident Card Category" }, - [identitykeys.IDENTITY_RESIDENTCARD_EXPIRATIONDATE.vdxfid]: { EN: "Resident Card Expiry Date" }, - [identitykeys.IDENTITY_RESIDENTCARD_ISSUINGREGION.vdxfid]: { EN: "Resident Card Issuing Region" }, - [identitykeys.IDENTITY_RESIDENTCARD_DATEOFBIRTH.vdxfid]: { EN: "Resident Card date of birth" }, - [identitykeys.IDENTITY_RESIDENTCARD_ADDRESS_STREET1.vdxfid]: { EN: "Resident Card Street 1" }, - [identitykeys.IDENTITY_RESIDENTCARD_ADDRESS_CITY.vdxfid]: { EN: "Resident Card City" }, - [identitykeys.IDENTITY_RESIDENTCARD_ADDRESS_REGION.vdxfid]: { EN: "Resident Card Region" }, - [identitykeys.IDENTITY_RESIDENTCARD_ADDRESS_POSTCODE.vdxfid]: { EN: "Resident Card Zip/Post Code" }, - [identitykeys.IDENTITY_RESIDENTCARD_ADDRESS_COUNTRY.vdxfid]: { EN: "Resident Card Country" }, - [identitykeys.IDENTITY_VISA.vdxfid]: { EN: "Visa" }, - [identitykeys.IDENTITY_VISA_ORIGINALFRONT.vdxfid]: { EN: "Visa front" }, - [identitykeys.IDENTITY_VISA_ORIGINALBACK.vdxfid]: { EN: "Visa back" }, - [identitykeys.IDENTITY_VISA_CROPPEDFRONT.vdxfid]: { EN: "Visa front" }, - [identitykeys.IDENTITY_VISA_CROPPEDBACK.vdxfid]: { EN: "Visa back" }, - [identitykeys.IDENTITY_VISA_FACE.vdxfid]: { EN: "Visa face" }, - [identitykeys.IDENTITY_VISA_IDNUMBER.vdxfid]: { EN: "Visa ID Number" }, - [identitykeys.IDENTITY_VISA_CATEGORY.vdxfid]: { EN: "Visa Category" }, - [identitykeys.IDENTITY_VISA_EXPIRATIONDATE.vdxfid]: { EN: "Visa expiry date" }, - [identitykeys.IDENTITY_VISA_ISSUINGREGION.vdxfid]: { EN: "Visa issuing region" }, - [identitykeys.IDENTITY_VISA_DATEOFBIRTH.vdxfid]: { EN: "Visa date of birth" }, - [identitykeys.IDENTITY_VISA_ADDRESS_STREET1.vdxfid]: { EN: "Visa Street 1" }, - [identitykeys.IDENTITY_VISA_ADDRESS_CITY.vdxfid]: { EN: "Visa City" }, - [identitykeys.IDENTITY_VISA_ADDRESS_REGION.vdxfid]: { EN: "Visa Region" }, - [identitykeys.IDENTITY_VISA_ADDRESS_POSTCODE.vdxfid]: { EN: "Visa Zip/Post Code" }, - [identitykeys.IDENTITY_VISA_ADDRESS_COUNTRY.vdxfid]: { EN: "Visa Country" }, - [keylist.ATTESTATION_PROVISION_TYPE.vdxfid]: { EN: "Attestation Type" }, - [keylist.ATTESTATION_PROVISION_URL.vdxfid]: { EN: "Attestation URL" }, - [keylist.ATTESTATION_VIEW_RESPONSE.vdxfid]: { EN: "Attestation View Response" }, - [keylist.ATTESTATION_VIEW_REQUEST.vdxfid]: { EN: "Attestation View Response" }, - [keylist.PROFILE_DATA_VIEW_REQUEST.vdxfid]: { EN: "Profile Data View Request" }, - [keylist.IDENTITY_SIGNDATA_REQUEST.vdxfid]: { EN: "Identity Sign Data Request" } -}; diff --git a/dist/utils/address.d.ts b/dist/utils/address.d.ts deleted file mode 100644 index 5b51face..00000000 --- a/dist/utils/address.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -export declare const fromBase58Check: (address: string) => { - version: number; - hash: Buffer; -}; -export declare const toBase58Check: (hash: Buffer, version: number) => string; -export declare const nameAndParentAddrToAddr: (name: string, parentIAddr?: string, version?: number) => string; -export declare const nameAndParentAddrToIAddr: (name: string, parentIAddr?: string) => string; -export declare const fqnToAddress: (fullyqualifiedname: string, rootSystemName?: string, version?: number) => string; -export declare const toIAddress: (fullyqualifiedname: string, rootSystemName?: string) => string; -export declare function getDataKey(keyName: string, nameSpaceID?: string, verusChainId?: string, version?: number): { - id: string; - namespace: string; -}; -export declare const decodeDestination: (destination: string) => Buffer; -export declare const decodeEthDestination: (destination: string) => Buffer; diff --git a/dist/utils/address.js b/dist/utils/address.js deleted file mode 100644 index 8d43c64c..00000000 --- a/dist/utils/address.js +++ /dev/null @@ -1,270 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.decodeEthDestination = exports.decodeDestination = exports.toIAddress = exports.fqnToAddress = exports.nameAndParentAddrToIAddr = exports.nameAndParentAddrToAddr = exports.toBase58Check = exports.fromBase58Check = void 0; -exports.getDataKey = getDataKey; -const pbaas_1 = require("../constants/pbaas"); -const vdxf_1 = require("../constants/vdxf"); -const hash_1 = require("./hash"); -const bs58check = require("bs58check"); -const fromBase58Check = (address) => { - var payload = bs58check.decode(address); - // TODO: 4.0.0, move to "toOutputScript" - if (payload.length < 21) - throw new TypeError(address + " is too short"); - if (payload.length > 22) - throw new TypeError(address + " is too long"); - var multibyte = payload.length === 22; - var offset = multibyte ? 2 : 1; - var version = multibyte ? payload.readUInt16BE(0) : payload[0]; - var hash = payload.slice(offset); - // Turn hash to buffer with Buffer.from due to strange bug where certain JS engines - // don't keep hash a buffer - return { version: version, hash: Buffer.from(hash) }; -}; -exports.fromBase58Check = fromBase58Check; -const toBase58Check = (hash, version) => { - // Zcash adds an extra prefix resulting in a bigger (22 bytes) payload. We identify them Zcash by checking if the - // version is multibyte (2 bytes instead of 1) - var multibyte = version > 0xff; - var size = multibyte ? 22 : 21; - var offset = multibyte ? 2 : 1; - var payload = Buffer.allocUnsafe(size); - multibyte - ? payload.writeUInt16BE(version, 0) - : payload.writeUInt8(version, 0); - hash.copy(payload, offset); - return bs58check.encode(payload); -}; -exports.toBase58Check = toBase58Check; -const nameAndParentAddrToAddr = (name, parentIAddr, version = vdxf_1.I_ADDR_VERSION) => { - let idHash; - const nameBuffer = Buffer.from(name.toLowerCase(), "utf8"); - if (parentIAddr == null) { - idHash = (0, hash_1.hash)(nameBuffer); - } - else { - idHash = (0, hash_1.hash)(nameBuffer); - idHash = (0, hash_1.hash)((0, exports.fromBase58Check)(parentIAddr).hash, idHash); - } - return (0, exports.toBase58Check)((0, hash_1.hash160)(idHash), version); -}; -exports.nameAndParentAddrToAddr = nameAndParentAddrToAddr; -const nameAndParentAddrToIAddr = (name, parentIAddr) => { - return (0, exports.nameAndParentAddrToAddr)(name, parentIAddr, vdxf_1.I_ADDR_VERSION); -}; -exports.nameAndParentAddrToIAddr = nameAndParentAddrToIAddr; -const fqnToAddress = (fullyqualifiedname, rootSystemName = "", version = vdxf_1.I_ADDR_VERSION) => { - const splitFqnAt = fullyqualifiedname.split("@").filter(x => x.length > 0); - if (splitFqnAt.length !== 1) - throw new Error("Invalid name"); - const cleanFqn = splitFqnAt[0]; - const splitFqnDot = cleanFqn.split('.'); - if (splitFqnDot[splitFqnDot.length - 1] !== rootSystemName && - splitFqnDot[splitFqnDot.length - 1] !== "") { - splitFqnDot.push(rootSystemName); - } - const name = splitFqnDot.shift(); - let Parent; - for (let i = splitFqnDot.length - 1; i >= 0; i--) { - let idHash; - const parentName = Buffer.from(splitFqnDot[i].toLowerCase(), "utf8"); - if (parentName.length > 0) { - if (Parent == null) { - idHash = (0, hash_1.hash)(parentName); - } - else { - idHash = (0, hash_1.hash)(parentName); - idHash = (0, hash_1.hash)(Parent, idHash); - } - Parent = (0, hash_1.hash160)(idHash); - } - } - let idHash; - const nameBuffer = Buffer.from(name.toLowerCase(), "utf8"); - if (Parent == null) { - idHash = (0, hash_1.hash)(nameBuffer); - } - else { - idHash = (0, hash_1.hash)(nameBuffer); - idHash = (0, hash_1.hash)(Parent, idHash); - } - return (0, exports.toBase58Check)((0, hash_1.hash160)(idHash), version); -}; -exports.fqnToAddress = fqnToAddress; -const toIAddress = (fullyqualifiedname, rootSystemName = "") => { - return (0, exports.fqnToAddress)(fullyqualifiedname, rootSystemName, vdxf_1.I_ADDR_VERSION); -}; -exports.toIAddress = toIAddress; -function trimSpaces(name, removeDuals) { - // Unicode "dual spaces" — visually space-like but potentially problematic - const dualSpaces = [ - "\u0020", "\u00A0", "\u1680", "\u2000", "\u2001", "\u2002", "\u2003", "\u2004", - "\u2005", "\u2006", "\u2007", "\u2008", "\u2009", "\u200A", "\u200C", "\u200D", - "\u202F", "\u205F", "\u3000" - ]; - const isDual = (char) => dualSpaces.includes(char); - const chars = [...name]; - const toRemove = []; - const allDuals = []; - for (let i = 0; i < chars.length; i++) { - const char = chars[i]; - if (isDual(char)) { - const wasLastDual = allDuals.length && allDuals[allDuals.length - 1] === i - 1; - const shouldRemove = removeDuals || - i === allDuals.length || - i === chars.length - 1 || - (removeDuals && wasLastDual); - if (shouldRemove) { - toRemove.push(i); - } - allDuals.push(i); - // Edge case: chain of duals at the end - if (i > 0 && - i === chars.length - 1 && - wasLastDual) { - let toRemoveIdx = toRemove.length - 1; - let nextDual = 0; - for (let j = allDuals.length - 1; j >= 0; j--) { - const idx = allDuals[j]; - if (nextDual && idx !== nextDual - 1) - break; - if (toRemoveIdx < 0 || toRemove[toRemoveIdx] !== idx) { - toRemove.splice(++toRemoveIdx, 0, idx); - } - toRemoveIdx--; - nextDual = idx; - } - } - } - } - // Remove characters from end to start - for (let i = toRemove.length - 1; i >= 0; i--) { - chars.splice(toRemove[i], 1); - } - return chars.join(""); -} -function parseSubNames(name, addVerus, removeDuals = false, verusChainName = pbaas_1.DEFAULT_VERUS_CHAINNAME) { - var _a; - const parts = name.split("@"); - if (parts.length === 0 || - parts.length > 2 || - (parts.length > 1 && trimSpaces(parts[1], removeDuals) !== parts[1])) { - return { names: [], chain: "" }; - } - let chain = ""; - let explicitChain = false; - if (parts.length === 2 && parts[1] !== "") { - chain = parts[1]; - explicitChain = true; - } - let retNames = parts[0].split("."); - // If the name ends with a dot, it's an indicator to not add Verus - if (retNames[retNames.length - 1] === "") { - addVerus = false; - retNames.pop(); - } - const verusChainNameLc = verusChainName.toLowerCase(); - if (addVerus) { - if (explicitChain) { - const chainParts = chain.split("."); - const lastChainPart = chainParts[chainParts.length - 1].toLowerCase(); - if (lastChainPart !== "" && lastChainPart !== verusChainNameLc) { - chainParts.push(verusChainNameLc); - chain = chainParts.join("."); - } - else if (lastChainPart === "") { - chainParts.pop(); - chain = chainParts.join("."); - } - } - const lastName = (_a = retNames[retNames.length - 1]) === null || _a === void 0 ? void 0 : _a.toLowerCase(); - if (lastName !== "" && lastName !== verusChainNameLc) { - retNames.push(verusChainNameLc); - } - else if (lastName === "") { - retNames.pop(); - } - } - for (let i = 0; i < retNames.length; i++) { - if (retNames[i].length > pbaas_1.KOMODO_ASSETCHAIN_MAXLEN - 1) { - retNames[i] = retNames[i].slice(0, pbaas_1.KOMODO_ASSETCHAIN_MAXLEN - 1); - } - if (retNames[i].length === 0 || - retNames[i] !== trimSpaces(retNames[i], removeDuals)) { - return { names: [], chain: "" }; - } - } - return { names: retNames, chain }; -} -function cleanName(name, parent, removeDuals = false, verusChainName = pbaas_1.DEFAULT_VERUS_CHAINNAME) { - const { names: subNames } = parseSubNames(name, false, removeDuals, verusChainName); - if (subNames.length === 0) { - throw new Error("No subnames found in name"); - } - let newParent = parent ? (0, exports.fromBase58Check)(parent).hash : null; - // Remove "verus" suffix if already handled and parent is not null - const last = subNames[subNames.length - 1]; - if (newParent && - subNames.length > 1 && - last.toLowerCase() === verusChainName.toLowerCase()) { - subNames.pop(); - } - // Build up the parent hash from right to left - for (let i = subNames.length - 1; i > 0; i--) { - const parentNameStr = Buffer.from(subNames[i].toLowerCase(), 'utf8'); - let idHash; - if (!newParent) { - idHash = (0, hash_1.hash)(parentNameStr); // Hash from a string - } - else { - const combined = (0, hash_1.hash)(parentNameStr); // First hash - idHash = (0, hash_1.hash)(newParent, combined); // Combine with parent - } - newParent = (0, hash_1.hash160)(idHash); // Get new parent as uint160 - } - return { name: subNames[0], parent: newParent ? (0, exports.toBase58Check)(newParent, vdxf_1.I_ADDR_VERSION) : null }; -} -function getID(name, parent, verusChainName = pbaas_1.DEFAULT_VERUS_CHAINNAME, version = vdxf_1.I_ADDR_VERSION) { - const _cleanName = name === "::" ? { name, parent } : cleanName(name, parent, false, verusChainName); - if (_cleanName.name.length == 0) - return pbaas_1.NULL_I_ADDR; - return (0, exports.nameAndParentAddrToAddr)(_cleanName.name, _cleanName.parent, version); -} -function getDataKey(keyName, nameSpaceID, verusChainId = pbaas_1.DEFAULT_VERUS_CHAINID, version = vdxf_1.I_ADDR_VERSION) { - let keyCopy = keyName; - const addressParts = keyName.split(":"); - // If the first part of the address is a namespace, it is followed by a double colon - // Namespace specifiers have no implicit root - if (addressParts.length > 2 && addressParts[1] === "") { - nameSpaceID = (0, exports.toIAddress)(addressParts[0]); - keyName = addressParts.join(":"); - for (let i = 2; i < addressParts.length; i++) { - keyCopy = i === 2 ? addressParts[i] : keyCopy + ":" + addressParts[i]; - } - } - if (!nameSpaceID) { - nameSpaceID = verusChainId; - } - const parent = getID("::", nameSpaceID, undefined, version); - return { id: getID(keyCopy, parent, undefined, version), namespace: nameSpaceID }; -} -const decodeDestination = (destination) => { - try { - const data = (0, exports.fromBase58Check)(destination); - return data.hash; - } - catch (e) { - throw new Error("Invalid destination address: " + destination); - } -}; -exports.decodeDestination = decodeDestination; -const decodeEthDestination = (destination) => { - if (destination.startsWith("0x")) { - destination = destination.slice(2); - } - if (destination.length !== 40) { - throw new Error("Invalid Ethereum address: " + destination); - } - return Buffer.from(destination, "hex"); -}; -exports.decodeEthDestination = decodeEthDestination; diff --git a/dist/utils/bufferutils.d.ts b/dist/utils/bufferutils.d.ts deleted file mode 100644 index ae4663ed..00000000 --- a/dist/utils/bufferutils.d.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { BigNumber } from "./types/BigNumber"; -export declare const readUInt64LE: (buffer: Buffer, offset: number) => number; -export declare const writeUInt64LE: (buffer: Buffer, value: number, offset: number) => number; -export declare const reverseBuffer: (buffer: Buffer) => Buffer; -/** - * Helper class for serialization of bitcoin data types into a pre-allocated buffer. - */ -declare class BufferWriter { - buffer: Buffer; - offset: number; - constructor(buffer: Buffer, offset?: number); - writeUInt8(i: number): void; - writeUInt16(i: number): void; - writeInt32(i: number): void; - writeUInt32(i: number): void; - writeUInt64(i: number): void; - writeInt64(i: BigNumber): void; - writeCompactSize(i: number): void; - writeVarInt(i: BigNumber): void; - writeSlice(slice: Buffer): void; - writeVarSlice(slice: Buffer): void; - writeVector(vector: Array): void; - writeArray(array: Array): void; -} -/** - * Helper class for reading of bitcoin data types from a buffer. - */ -declare class BufferReader { - buffer: Buffer; - offset: number; - constructor(buffer: Buffer, offset?: number); - readUInt8(): number; - readUInt16(): number; - readInt32(): number; - readUInt32(): number; - readUInt64(): number; - readInt64(): BigNumber; - readCompactSize(): number; - readVarInt(): import("bn.js"); - readSlice(n: number): Buffer; - readVarSlice(): Buffer; - readVector(): any[]; - readArray(sliceLength: number): any[]; -} -declare const _default: { - readUInt64LE: (buffer: Buffer, offset: number) => number; - writeUInt64LE: (buffer: Buffer, value: number, offset: number) => number; - reverseBuffer: (buffer: Buffer) => Buffer; - BufferWriter: typeof BufferWriter; - BufferReader: typeof BufferReader; -}; -export default _default; diff --git a/dist/utils/bufferutils.js b/dist/utils/bufferutils.js deleted file mode 100644 index a2a0d52b..00000000 --- a/dist/utils/bufferutils.js +++ /dev/null @@ -1,180 +0,0 @@ -"use strict"; -// The MIT License (MIT) -Object.defineProperty(exports, "__esModule", { value: true }); -exports.reverseBuffer = exports.writeUInt64LE = exports.readUInt64LE = void 0; -const varuint_1 = require("./varuint"); -const varint_1 = require("./varint"); -const bn_js_1 = require("bn.js"); -// https://github.com/feross/buffer/blob/master/index.js#L1127 -function verifuint(value, max) { - if (typeof value !== "number") - throw new Error("cannot write a non-number as a number"); - if (value < 0) - throw new Error("specified a negative value for writing an unsigned value"); - if (value > max) - throw new Error("RangeError: value out of range"); - if (Math.floor(value) !== value) - throw new Error("value has a fractional component"); -} -const readUInt64LE = (buffer, offset) => { - const a = buffer.readUInt32LE(offset); - let b = buffer.readUInt32LE(offset + 4); - b *= 0x100000000; - verifuint(b + a, 0x001fffffffffffff); - return b + a; -}; -exports.readUInt64LE = readUInt64LE; -const writeUInt64LE = (buffer, value, offset) => { - verifuint(value, 0x001fffffffffffff); - buffer.writeInt32LE(value & -1, offset); - buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4); - return offset + 8; -}; -exports.writeUInt64LE = writeUInt64LE; -const reverseBuffer = (buffer) => { - if (buffer.length < 1) - return buffer; - let j = buffer.length - 1; - let tmp = 0; - for (let i = 0; i < buffer.length / 2; i++) { - tmp = buffer[i]; - buffer[i] = buffer[j]; - buffer[j] = tmp; - j--; - } - return buffer; -}; -exports.reverseBuffer = reverseBuffer; -/** - * Helper class for serialization of bitcoin data types into a pre-allocated buffer. - */ -class BufferWriter { - constructor(buffer, offset = 0) { - this.buffer = buffer; - this.offset = offset; - } - writeUInt8(i) { - this.offset = this.buffer.writeUInt8(i, this.offset); - } - writeUInt16(i) { - this.offset = this.buffer.writeUInt16LE(i, this.offset); - } - writeInt32(i) { - this.offset = this.buffer.writeInt32LE(i, this.offset); - } - writeUInt32(i) { - this.offset = this.buffer.writeUInt32LE(i, this.offset); - } - writeUInt64(i) { - this.offset = (0, exports.writeUInt64LE)(this.buffer, i, this.offset); - } - writeInt64(i) { - const slice = i.toBuffer('le', 8); - this.writeSlice(slice); - } - writeCompactSize(i) { - const encoding = varuint_1.default.encode(i, this.buffer, this.offset); - this.offset += encoding.bytes; - } - writeVarInt(i) { - const encoding = varint_1.default.encode(i, this.buffer, this.offset); - this.offset += encoding.bytes; - } - writeSlice(slice) { - if (this.buffer.length < this.offset + slice.length) { - throw new Error("Cannot write slice out of bounds"); - } - this.offset += slice.copy(this.buffer, this.offset); - } - writeVarSlice(slice) { - this.writeCompactSize(slice.length); - this.writeSlice(slice); - } - writeVector(vector) { - this.writeCompactSize(vector.length); - vector.forEach((buf) => this.writeVarSlice(buf)); - } - writeArray(array) { - this.writeCompactSize(array.length); - array.forEach((buf) => this.writeSlice(buf)); - } -} -/** - * Helper class for reading of bitcoin data types from a buffer. - */ -class BufferReader { - constructor(buffer, offset = 0) { - this.buffer = buffer; - this.offset = offset; - } - readUInt8() { - const result = this.buffer.readUInt8(this.offset); - this.offset++; - return result; - } - readUInt16() { - const result = this.buffer.readUInt16LE(this.offset); - this.offset += 2; - return result; - } - readInt32() { - const result = this.buffer.readInt32LE(this.offset); - this.offset += 4; - return result; - } - readUInt32() { - const result = this.buffer.readUInt32LE(this.offset); - this.offset += 4; - return result; - } - readUInt64() { - const result = (0, exports.readUInt64LE)(this.buffer, this.offset); - this.offset += 8; - return result; - } - readInt64() { - return new bn_js_1.BN(this.readSlice(8), 16, 'le'); - } - readCompactSize() { - const vi = varuint_1.default.decode(this.buffer, this.offset); - this.offset += vi.bytes; - return vi.decoded; - } - readVarInt() { - const vi = varint_1.default.decode(this.buffer, this.offset); - this.offset += vi.bytes; - return vi.decoded; - } - readSlice(n) { - if (this.buffer.length < this.offset + n) { - throw new Error("Cannot read slice out of bounds"); - } - const result = this.buffer.slice(this.offset, this.offset + n); - this.offset += n; - return result; - } - readVarSlice() { - return this.readSlice(this.readCompactSize()); - } - readVector() { - const count = this.readCompactSize(); - const vector = []; - for (let i = 0; i < count; i++) - vector.push(this.readVarSlice()); - return vector; - } - readArray(sliceLength) { - const count = this.readCompactSize(); - const array = []; - for (let i = 0; i < count; i++) - array.push(this.readSlice(sliceLength)); - return array; - } -} -exports.default = { - readUInt64LE: exports.readUInt64LE, - writeUInt64LE: exports.writeUInt64LE, - reverseBuffer: exports.reverseBuffer, - BufferWriter, - BufferReader, -}; diff --git a/dist/utils/cccustom.d.ts b/dist/utils/cccustom.d.ts deleted file mode 100644 index e5bbe42c..00000000 --- a/dist/utils/cccustom.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -export declare const STAKE_GUARD_ADDR = "RCG8KwJNDVwpUBcdoa6AoHqHVJsA1uMYMR"; -export declare const PBAAS_DEFINITION_ADDR = "RP7id3CzCnwvzNUZesYJM6ekvsxpEzMqB1"; -export declare const NOTARY_EVIDENCE_ADDR = "RQWMeecjGFF3ZAVeSimRbyG9iMDUHPY5Ny"; -export declare const EARNED_NOTARIZATION_ADDR = "RMYbaxFsCT1xfMmwLCCYAVf2DsxcDTtBmx"; -export declare const ACCEPTED_NOTARIZATION_ADDR = "RDTq9qn1Lthv7fvsdbWz36mGp8HK9XaruZ"; -export declare const FINALIZE_NOTARIZATION_ADDR = "RRbKYitLH9EhQCvCo4bPZqJx3TWxASadxE"; -export declare const RESERVE_OUTPUT_ADDR = "RMXeZGxxRuABFkT4uLSCeuJHLegBNGZq8D"; -export declare const ADVANCED_NAME_RESERVATION_ADDR = "REuGNkgunnw1J4Zx6Y9UCp8YHVZqYATe9D"; -export declare const RESERVE_TRANSFER_ADDR = "RTqQe58LSj2yr5CrwYFwcsAQ1edQwmrkUU"; -export declare const RESERVE_DEPOSIT_ADDR = "RFw9AVfgNKcHe2Vp2eyzHrX65aFD9Ky8df"; -export declare const CROSS_CHAIN_EXPORT_ADDR = "RGkrs7SndcpsV61oKK2jYdMiU8PgkLU2qP"; -export declare const CROSS_CHAIN_IMPORT_ADDR = "RKLN7wFhbrJFkPG8XkKteErAe5CjqoddTm"; -export declare const CURRENCY_STATE_ADDR = "REU1HKkmdwdxKMpfD3QoxeERYd9tfMN6n9"; -export declare const IDENTITY_PRIMARY_ADDR = "RS545EBdK5AzPTaGHNUg78wFuuAzBb74FB"; -export declare const IDENTITY_REVOKE_ADDR = "RG6My2zwh9hBFSgUhZ5UmmUtxBap57aU4N"; -export declare const IDENTITY_RECOVER_ADDR = "RRw9rJMPwdNqC1wgXn5vryJwMDyBgpXjYT"; -export declare const IDENTITY_COMMITMENT_ADDR = "RCySaThHfVBcHZgjJGoBw3un4vcsRJNPYw"; -export declare const IDENTITY_RESERVATION_ADDR = "RDbzJU8rEv4CkMABNUnKQoKDTfnikSm9fM"; -export declare const FINALIZE_EXPORT_ADDR = "REL7oLNeaeoQB1XauiHfcvjKMZC52Uj5xF"; -export declare const FEE_POOL_ADDR = "RQ55dLQ7uGnLx8scXfkaFV6QS6qVBGyxAG"; diff --git a/dist/utils/cccustom.js b/dist/utils/cccustom.js deleted file mode 100644 index 1acb4d52..00000000 --- a/dist/utils/cccustom.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.FEE_POOL_ADDR = exports.FINALIZE_EXPORT_ADDR = exports.IDENTITY_RESERVATION_ADDR = exports.IDENTITY_COMMITMENT_ADDR = exports.IDENTITY_RECOVER_ADDR = exports.IDENTITY_REVOKE_ADDR = exports.IDENTITY_PRIMARY_ADDR = exports.CURRENCY_STATE_ADDR = exports.CROSS_CHAIN_IMPORT_ADDR = exports.CROSS_CHAIN_EXPORT_ADDR = exports.RESERVE_DEPOSIT_ADDR = exports.RESERVE_TRANSFER_ADDR = exports.ADVANCED_NAME_RESERVATION_ADDR = exports.RESERVE_OUTPUT_ADDR = exports.FINALIZE_NOTARIZATION_ADDR = exports.ACCEPTED_NOTARIZATION_ADDR = exports.EARNED_NOTARIZATION_ADDR = exports.NOTARY_EVIDENCE_ADDR = exports.PBAAS_DEFINITION_ADDR = exports.STAKE_GUARD_ADDR = void 0; -exports.STAKE_GUARD_ADDR = "RCG8KwJNDVwpUBcdoa6AoHqHVJsA1uMYMR"; -exports.PBAAS_DEFINITION_ADDR = "RP7id3CzCnwvzNUZesYJM6ekvsxpEzMqB1"; -exports.NOTARY_EVIDENCE_ADDR = "RQWMeecjGFF3ZAVeSimRbyG9iMDUHPY5Ny"; -exports.EARNED_NOTARIZATION_ADDR = "RMYbaxFsCT1xfMmwLCCYAVf2DsxcDTtBmx"; -exports.ACCEPTED_NOTARIZATION_ADDR = "RDTq9qn1Lthv7fvsdbWz36mGp8HK9XaruZ"; -exports.FINALIZE_NOTARIZATION_ADDR = "RRbKYitLH9EhQCvCo4bPZqJx3TWxASadxE"; -exports.RESERVE_OUTPUT_ADDR = "RMXeZGxxRuABFkT4uLSCeuJHLegBNGZq8D"; -exports.ADVANCED_NAME_RESERVATION_ADDR = "REuGNkgunnw1J4Zx6Y9UCp8YHVZqYATe9D"; -exports.RESERVE_TRANSFER_ADDR = "RTqQe58LSj2yr5CrwYFwcsAQ1edQwmrkUU"; -exports.RESERVE_DEPOSIT_ADDR = "RFw9AVfgNKcHe2Vp2eyzHrX65aFD9Ky8df"; -exports.CROSS_CHAIN_EXPORT_ADDR = "RGkrs7SndcpsV61oKK2jYdMiU8PgkLU2qP"; -exports.CROSS_CHAIN_IMPORT_ADDR = "RKLN7wFhbrJFkPG8XkKteErAe5CjqoddTm"; -exports.CURRENCY_STATE_ADDR = "REU1HKkmdwdxKMpfD3QoxeERYd9tfMN6n9"; -exports.IDENTITY_PRIMARY_ADDR = "RS545EBdK5AzPTaGHNUg78wFuuAzBb74FB"; -exports.IDENTITY_REVOKE_ADDR = "RG6My2zwh9hBFSgUhZ5UmmUtxBap57aU4N"; -exports.IDENTITY_RECOVER_ADDR = "RRw9rJMPwdNqC1wgXn5vryJwMDyBgpXjYT"; -exports.IDENTITY_COMMITMENT_ADDR = "RCySaThHfVBcHZgjJGoBw3un4vcsRJNPYw"; -exports.IDENTITY_RESERVATION_ADDR = "RDbzJU8rEv4CkMABNUnKQoKDTfnikSm9fM"; -exports.FINALIZE_EXPORT_ADDR = "REL7oLNeaeoQB1XauiHfcvjKMZC52Uj5xF"; -exports.FEE_POOL_ADDR = "RQ55dLQ7uGnLx8scXfkaFV6QS6qVBGyxAG"; diff --git a/dist/utils/evals.d.ts b/dist/utils/evals.d.ts deleted file mode 100644 index 3386858e..00000000 --- a/dist/utils/evals.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -export declare const EVALS: { - EVAL_NONE: number; - EVAL_STAKEGUARD: number; - EVAL_CURRENCY_DEFINITION: number; - EVAL_NOTARY_EVIDENCE: number; - EVAL_EARNEDNOTARIZATION: number; - EVAL_ACCEPTEDNOTARIZATION: number; - EVAL_FINALIZE_NOTARIZATION: number; - EVAL_CURRENCYSTATE: number; - EVAL_RESERVE_TRANSFER: number; - EVAL_RESERVE_OUTPUT: number; - EVAL_RESERVE_UNUSED: number; - EVAL_RESERVE_DEPOSIT: number; - EVAL_CROSSCHAIN_EXPORT: number; - EVAL_CROSSCHAIN_IMPORT: number; - EVAL_IDENTITY_PRIMARY: number; - EVAL_IDENTITY_REVOKE: number; - EVAL_IDENTITY_RECOVER: number; - EVAL_IDENTITY_COMMITMENT: number; - EVAL_IDENTITY_RESERVATION: number; - EVAL_FINALIZE_EXPORT: number; - EVAL_FEE_POOL: number; - EVAL_NOTARY_SIGNATURE: number; -}; diff --git a/dist/utils/evals.js b/dist/utils/evals.js deleted file mode 100644 index bbe51ad3..00000000 --- a/dist/utils/evals.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.EVALS = void 0; -exports.EVALS = { - "EVAL_NONE": 0, - "EVAL_STAKEGUARD": 1, - "EVAL_CURRENCY_DEFINITION": 2, - "EVAL_NOTARY_EVIDENCE": 3, - "EVAL_EARNEDNOTARIZATION": 4, - "EVAL_ACCEPTEDNOTARIZATION": 5, - "EVAL_FINALIZE_NOTARIZATION": 6, - "EVAL_CURRENCYSTATE": 7, - "EVAL_RESERVE_TRANSFER": 8, - "EVAL_RESERVE_OUTPUT": 9, - "EVAL_RESERVE_UNUSED": 10, - "EVAL_RESERVE_DEPOSIT": 11, - "EVAL_CROSSCHAIN_EXPORT": 12, - "EVAL_CROSSCHAIN_IMPORT": 13, - "EVAL_IDENTITY_PRIMARY": 14, - "EVAL_IDENTITY_REVOKE": 15, - "EVAL_IDENTITY_RECOVER": 16, - "EVAL_IDENTITY_COMMITMENT": 17, - "EVAL_IDENTITY_RESERVATION": 18, - "EVAL_FINALIZE_EXPORT": 19, - "EVAL_FEE_POOL": 20, - "EVAL_NOTARY_SIGNATURE": 21 -}; diff --git a/dist/utils/hash.d.ts b/dist/utils/hash.d.ts deleted file mode 100644 index 61301597..00000000 --- a/dist/utils/hash.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare const hash: (...params: Array) => Buffer; -export declare const hash160: (data: Buffer) => Buffer; diff --git a/dist/utils/hash.js b/dist/utils/hash.js deleted file mode 100644 index ec09f453..00000000 --- a/dist/utils/hash.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.hash160 = exports.hash = void 0; -const createHash = require("create-hash"); -const hash = (...params) => { - const _hash = createHash("sha256"); - params.forEach((value) => { - _hash.update(value); - }); - return createHash("sha256").update(_hash.digest()).digest(); -}; -exports.hash = hash; -const hash160 = (data) => { - const sha256 = createHash("sha256"); - const ripemd160 = createHash("ripemd160"); - return ripemd160.update(sha256.update(data).digest()).digest(); -}; -exports.hash160 = hash160; diff --git a/dist/utils/mmr.d.ts b/dist/utils/mmr.d.ts deleted file mode 100644 index 4bf5e509..00000000 --- a/dist/utils/mmr.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { BN } from 'bn.js'; -export declare const GetMMRProofIndex: (pos: number, mmvSize: number, extraHashes: number) => InstanceType; diff --git a/dist/utils/mmr.js b/dist/utils/mmr.js deleted file mode 100644 index 8cbc00ef..00000000 --- a/dist/utils/mmr.js +++ /dev/null @@ -1,87 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetMMRProofIndex = void 0; -const bn_js_1 = require("bn.js"); -const GetMMRProofIndex = (pos, mmvSize, extraHashes) => { - let index = new bn_js_1.BN(0); - let layerSizes = []; - let merkleSizes = []; - let peakIndexes = []; - let bitPos = 0; - //start at the beginning - //create a simulation of a mmr based on size - if (!(pos > 0 && pos < mmvSize)) - return new bn_js_1.BN(0); - //create an array of all the sizes - while (mmvSize) { - layerSizes.push(mmvSize); - mmvSize = mmvSize >> 1; - } - for (let height = 0; height < layerSizes.length; height++) { - if (height == layerSizes.length - 1 || layerSizes[height] & 1) { - peakIndexes.push(height); - } - } - //array flip peak indexes - peakIndexes.reverse(); - let layerNum = 0; - let layerSize = peakIndexes.length; - for (let passThrough = (layerSize & 1); layerNum == 0 || layerSize > 1; passThrough = (layerSize & 1), layerNum++) { - layerSize = (layerSize >> 1) + passThrough; - if (layerSize) { - merkleSizes.push(layerSize); - } - } - //flip the merklesizes - for (let i = 0; i < extraHashes; i++) { - bitPos++; - } - let p = pos; - for (let l = 0; l < layerSizes.length; l++) { - if (p & 1) { - index = index.or(new bn_js_1.BN(1).shln(bitPos++)); - p >>= 1; - for (let i = 0; i < extraHashes; i++) { - bitPos++; - } - } - else { - if (layerSizes[l] > (p + 1)) { - bitPos++; - p >>= 1; - for (let i = 0; i < extraHashes; i++) { - bitPos++; - } - } - else { - for (p = 0; p < peakIndexes.length; p++) { - if (peakIndexes[p] == l) { - break; - } - } - for (let layerNum = -1, layerSize = peakIndexes.length; layerNum == -1 || layerSize > 1; layerSize = merkleSizes[++layerNum]) { - if (p < (layerSize - 1) || (p & 1)) { - if (p & 1) { - // hash with the one before us - index = index.or(new bn_js_1.BN(1).shln(bitPos++)); - for (let i = 0; i < extraHashes; i++) { - bitPos++; - } - } - else { - // hash with the one in front of us - bitPos++; - for (let i = 0; i < extraHashes; i++) { - bitPos++; - } - } - } - p >>= 1; - } - break; - } - } - } - return index; -}; -exports.GetMMRProofIndex = GetMMRProofIndex; diff --git a/dist/utils/numberConversion.d.ts b/dist/utils/numberConversion.d.ts deleted file mode 100644 index 8701f426..00000000 --- a/dist/utils/numberConversion.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { BigNumber } from '../utils/types/BigNumber'; -/** - * Converts a BN instance to a number with 8 decimal places. - * @param value BN instance representing the integer value (multiplied by 1e8) - * @returns number with 8 decimal places - */ -export declare function bnToDecimal(value: BigNumber): string; -/** - * Converts a decimal number (string or number) to a BN instance representing the integer value (multiplied by 1e8) - * Uses string manipulation to avoid floating point errors. - * @param value number or string representing a number with up to 8 decimal places (e.g., "1000000000.11111111" or 1000000000.11111111) - * @returns BN instance - */ -export declare function decimalToBn(value: string | number): BigNumber; diff --git a/dist/utils/numberConversion.js b/dist/utils/numberConversion.js deleted file mode 100644 index e5105243..00000000 --- a/dist/utils/numberConversion.js +++ /dev/null @@ -1,47 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.bnToDecimal = bnToDecimal; -exports.decimalToBn = decimalToBn; -const bn_js_1 = require("bn.js"); -/** - * Converts a BN instance to a number with 8 decimal places. - * @param value BN instance representing the integer value (multiplied by 1e8) - * @returns number with 8 decimal places - */ -function bnToDecimal(value) { - var input = new bn_js_1.BN(value); - const divisor = new bn_js_1.BN('100000000'); - const isNegative = input.isNeg(); - const absInput = input.abs(); - const integerPart = absInput.div(divisor).toString(); - let decimalPart = absInput.mod(divisor).toString(); - // Remove trailing zeros from decimal part - while (decimalPart.length < 8) { - decimalPart = '0' + decimalPart; - } - if (decimalPart === '00000000') { - return (isNegative ? '-' : '') + integerPart; - } - else { - // Remove trailing zeros from the right of decimalPart - decimalPart = decimalPart.replace(/0+$/, ''); - } - const resultStr = (isNegative ? '-' : '') + integerPart + '.' + decimalPart; - return resultStr; -} -/** - * Converts a decimal number (string or number) to a BN instance representing the integer value (multiplied by 1e8) - * Uses string manipulation to avoid floating point errors. - * @param value number or string representing a number with up to 8 decimal places (e.g., "1000000000.11111111" or 1000000000.11111111) - * @returns BN instance - */ -function decimalToBn(value) { - const valueStr = typeof value === 'number' ? value.toString() : value; - const isNegative = valueStr.startsWith('-'); - const absValue = isNegative ? valueStr.slice(1) : valueStr; - const [integerPart, decimalPart = ''] = absValue.split('.'); - const paddedDecimal = (decimalPart + '00000000').slice(0, 8); - const bnStr = integerPart + paddedDecimal; - const bn = new bn_js_1.BN(bnStr); - return isNegative ? bn.neg() : bn; -} diff --git a/dist/utils/ops.d.ts b/dist/utils/ops.d.ts deleted file mode 100644 index e6ea807b..00000000 --- a/dist/utils/ops.d.ts +++ /dev/null @@ -1,122 +0,0 @@ -export declare const OPS: { - OP_FALSE: number; - OP_0: number; - OP_PUSHDATA1: number; - OP_PUSHDATA2: number; - OP_PUSHDATA4: number; - OP_1NEGATE: number; - OP_RESERVED: number; - OP_TRUE: number; - OP_1: number; - OP_2: number; - OP_3: number; - OP_4: number; - OP_5: number; - OP_6: number; - OP_7: number; - OP_8: number; - OP_9: number; - OP_10: number; - OP_11: number; - OP_12: number; - OP_13: number; - OP_14: number; - OP_15: number; - OP_16: number; - OP_NOP: number; - OP_VER: number; - OP_IF: number; - OP_NOTIF: number; - OP_VERIF: number; - OP_VERNOTIF: number; - OP_ELSE: number; - OP_ENDIF: number; - OP_VERIFY: number; - OP_RETURN: number; - OP_TOALTSTACK: number; - OP_FROMALTSTACK: number; - OP_2DROP: number; - OP_2DUP: number; - OP_3DUP: number; - OP_2OVER: number; - OP_2ROT: number; - OP_2SWAP: number; - OP_IFDUP: number; - OP_DEPTH: number; - OP_DROP: number; - OP_DUP: number; - OP_NIP: number; - OP_OVER: number; - OP_PICK: number; - OP_ROLL: number; - OP_ROT: number; - OP_SWAP: number; - OP_TUCK: number; - OP_CAT: number; - OP_SUBSTR: number; - OP_LEFT: number; - OP_RIGHT: number; - OP_SIZE: number; - OP_INVERT: number; - OP_AND: number; - OP_OR: number; - OP_XOR: number; - OP_EQUAL: number; - OP_EQUALVERIFY: number; - OP_RESERVED1: number; - OP_RESERVED2: number; - OP_1ADD: number; - OP_1SUB: number; - OP_2MUL: number; - OP_2DIV: number; - OP_NEGATE: number; - OP_ABS: number; - OP_NOT: number; - OP_0NOTEQUAL: number; - OP_ADD: number; - OP_SUB: number; - OP_MUL: number; - OP_DIV: number; - OP_MOD: number; - OP_LSHIFT: number; - OP_RSHIFT: number; - OP_BOOLAND: number; - OP_BOOLOR: number; - OP_NUMEQUAL: number; - OP_NUMEQUALVERIFY: number; - OP_NUMNOTEQUAL: number; - OP_LESSTHAN: number; - OP_GREATERTHAN: number; - OP_LESSTHANOREQUAL: number; - OP_GREATERTHANOREQUAL: number; - OP_MIN: number; - OP_MAX: number; - OP_WITHIN: number; - OP_RIPEMD160: number; - OP_SHA1: number; - OP_SHA256: number; - OP_HASH160: number; - OP_HASH256: number; - OP_CODESEPARATOR: number; - OP_CHECKSIG: number; - OP_CHECKSIGVERIFY: number; - OP_CHECKMULTISIG: number; - OP_CHECKMULTISIGVERIFY: number; - OP_CHECKCRYPTOCONDITION: number; - OP_CHECKCRYPTOCONDITIONVERIFY: number; - OP_NOP1: number; - OP_NOP2: number; - OP_CHECKLOCKTIMEVERIFY: number; - OP_NOP3: number; - OP_CHECKSEQUENCEVERIFY: number; - OP_NOP4: number; - OP_NOP5: number; - OP_NOP6: number; - OP_NOP7: number; - OP_NOP8: number; - OP_NOP9: number; - OP_NOP10: number; - OP_PUBKEYHASH: number; - OP_PUBKEY: number; - OP_INVALIDOPCODE: number; -}; diff --git a/dist/utils/ops.js b/dist/utils/ops.js deleted file mode 100644 index 3f056964..00000000 --- a/dist/utils/ops.js +++ /dev/null @@ -1,125 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OPS = void 0; -exports.OPS = { - "OP_FALSE": 0, - "OP_0": 0, - "OP_PUSHDATA1": 76, - "OP_PUSHDATA2": 77, - "OP_PUSHDATA4": 78, - "OP_1NEGATE": 79, - "OP_RESERVED": 80, - "OP_TRUE": 81, - "OP_1": 81, - "OP_2": 82, - "OP_3": 83, - "OP_4": 84, - "OP_5": 85, - "OP_6": 86, - "OP_7": 87, - "OP_8": 88, - "OP_9": 89, - "OP_10": 90, - "OP_11": 91, - "OP_12": 92, - "OP_13": 93, - "OP_14": 94, - "OP_15": 95, - "OP_16": 96, - "OP_NOP": 97, - "OP_VER": 98, - "OP_IF": 99, - "OP_NOTIF": 100, - "OP_VERIF": 101, - "OP_VERNOTIF": 102, - "OP_ELSE": 103, - "OP_ENDIF": 104, - "OP_VERIFY": 105, - "OP_RETURN": 106, - "OP_TOALTSTACK": 107, - "OP_FROMALTSTACK": 108, - "OP_2DROP": 109, - "OP_2DUP": 110, - "OP_3DUP": 111, - "OP_2OVER": 112, - "OP_2ROT": 113, - "OP_2SWAP": 114, - "OP_IFDUP": 115, - "OP_DEPTH": 116, - "OP_DROP": 117, - "OP_DUP": 118, - "OP_NIP": 119, - "OP_OVER": 120, - "OP_PICK": 121, - "OP_ROLL": 122, - "OP_ROT": 123, - "OP_SWAP": 124, - "OP_TUCK": 125, - "OP_CAT": 126, - "OP_SUBSTR": 127, - "OP_LEFT": 128, - "OP_RIGHT": 129, - "OP_SIZE": 130, - "OP_INVERT": 131, - "OP_AND": 132, - "OP_OR": 133, - "OP_XOR": 134, - "OP_EQUAL": 135, - "OP_EQUALVERIFY": 136, - "OP_RESERVED1": 137, - "OP_RESERVED2": 138, - "OP_1ADD": 139, - "OP_1SUB": 140, - "OP_2MUL": 141, - "OP_2DIV": 142, - "OP_NEGATE": 143, - "OP_ABS": 144, - "OP_NOT": 145, - "OP_0NOTEQUAL": 146, - "OP_ADD": 147, - "OP_SUB": 148, - "OP_MUL": 149, - "OP_DIV": 150, - "OP_MOD": 151, - "OP_LSHIFT": 152, - "OP_RSHIFT": 153, - "OP_BOOLAND": 154, - "OP_BOOLOR": 155, - "OP_NUMEQUAL": 156, - "OP_NUMEQUALVERIFY": 157, - "OP_NUMNOTEQUAL": 158, - "OP_LESSTHAN": 159, - "OP_GREATERTHAN": 160, - "OP_LESSTHANOREQUAL": 161, - "OP_GREATERTHANOREQUAL": 162, - "OP_MIN": 163, - "OP_MAX": 164, - "OP_WITHIN": 165, - "OP_RIPEMD160": 166, - "OP_SHA1": 167, - "OP_SHA256": 168, - "OP_HASH160": 169, - "OP_HASH256": 170, - "OP_CODESEPARATOR": 171, - "OP_CHECKSIG": 172, - "OP_CHECKSIGVERIFY": 173, - "OP_CHECKMULTISIG": 174, - "OP_CHECKMULTISIGVERIFY": 175, - "OP_CHECKCRYPTOCONDITION": 204, - "OP_CHECKCRYPTOCONDITIONVERIFY": 205, - "OP_NOP1": 176, - "OP_NOP2": 177, - "OP_CHECKLOCKTIMEVERIFY": 177, - "OP_NOP3": 178, - "OP_CHECKSEQUENCEVERIFY": 178, - "OP_NOP4": 179, - "OP_NOP5": 180, - "OP_NOP6": 181, - "OP_NOP7": 182, - "OP_NOP8": 183, - "OP_NOP9": 184, - "OP_NOP10": 185, - "OP_PUBKEYHASH": 253, - "OP_PUBKEY": 254, - "OP_INVALIDOPCODE": 255 -}; diff --git a/dist/utils/pushdata.d.ts b/dist/utils/pushdata.d.ts deleted file mode 100644 index 28911a3a..00000000 --- a/dist/utils/pushdata.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export declare function encodingLength(i: number): number; -export declare function encode(buffer: Buffer, number: number, offset: number): number; -export declare function decode(buffer: Buffer, offset: number): { - opcode: number; - number: number; - size: number; -}; diff --git a/dist/utils/pushdata.js b/dist/utils/pushdata.js deleted file mode 100644 index cb96b3a5..00000000 --- a/dist/utils/pushdata.js +++ /dev/null @@ -1,89 +0,0 @@ -"use strict"; -// The MIT License (MIT) -Object.defineProperty(exports, "__esModule", { value: true }); -exports.encodingLength = encodingLength; -exports.encode = encode; -exports.decode = decode; -// Copyright (c) 2016 Daniel Cousens -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -const ops_1 = require("./ops"); -function encodingLength(i) { - return i < ops_1.OPS.OP_PUSHDATA1 ? 1 - : i <= 0xff ? 2 - : i <= 0xffff ? 3 - : 5; -} -function encode(buffer, number, offset) { - var size = encodingLength(number); - // ~6 bit - if (size === 1) { - buffer.writeUInt8(number, offset); - // 8 bit - } - else if (size === 2) { - buffer.writeUInt8(ops_1.OPS.OP_PUSHDATA1, offset); - buffer.writeUInt8(number, offset + 1); - // 16 bit - } - else if (size === 3) { - buffer.writeUInt8(ops_1.OPS.OP_PUSHDATA2, offset); - buffer.writeUInt16LE(number, offset + 1); - // 32 bit - } - else { - buffer.writeUInt8(ops_1.OPS.OP_PUSHDATA4, offset); - buffer.writeUInt32LE(number, offset + 1); - } - return size; -} -function decode(buffer, offset) { - var opcode = buffer.readUInt8(offset); - var number, size; - // ~6 bit - if (opcode < ops_1.OPS.OP_PUSHDATA1) { - number = opcode; - size = 1; - // 8 bit - } - else if (opcode === ops_1.OPS.OP_PUSHDATA1) { - if (offset + 2 > buffer.length) - return null; - number = buffer.readUInt8(offset + 1); - size = 2; - // 16 bit - } - else if (opcode === ops_1.OPS.OP_PUSHDATA2) { - if (offset + 3 > buffer.length) - return null; - number = buffer.readUInt16LE(offset + 1); - size = 3; - // 32 bit - } - else { - if (offset + 5 > buffer.length) - return null; - if (opcode !== ops_1.OPS.OP_PUSHDATA4) - throw new Error('Unexpected opcode'); - number = buffer.readUInt32LE(offset + 1); - size = 5; - } - return { - opcode: opcode, - number: number, - size: size - }; -} diff --git a/dist/utils/reverseops.d.ts b/dist/utils/reverseops.d.ts deleted file mode 100644 index de2aed72..00000000 --- a/dist/utils/reverseops.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare const map: {}; -export default map; diff --git a/dist/utils/reverseops.js b/dist/utils/reverseops.js deleted file mode 100644 index 80c945dc..00000000 --- a/dist/utils/reverseops.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const ops_1 = require("./ops"); -const map = {}; -for (var op in ops_1.OPS) { - var code = ops_1.OPS[op]; - map[code] = op; -} -exports.default = map; diff --git a/dist/utils/sapling.d.ts b/dist/utils/sapling.d.ts deleted file mode 100644 index bb4fd722..00000000 --- a/dist/utils/sapling.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -export declare const fromBech32: (address: string) => { - version: number; - prefix: string; - data: Buffer; -}; -export declare const toBech32: (prefix: string, data: Buffer) => string; -export declare const convertBits: (data: Buffer, from: number, to: number, strictMode: boolean) => Buffer; -export declare const decodeSaplingAddress: (address: string) => { - d: Buffer; - pk_d: Buffer; -}; -export declare const encodeSaplingAddress: (data: { - d: Buffer; - pk_d: Buffer; -}) => string; -export interface SaplingExtendedSpendingKeyData { - depth: number; - parentFVKTag: Buffer; - childIndex: Buffer; - chainCode: Buffer; - ask: Buffer; - nsk: Buffer; - ovk: Buffer; - dk: Buffer; -} -export interface SaplingExtendedViewingKeyData { - depth: number; - parentFVKTag: Buffer; - childIndex: Buffer; - chainCode: Buffer; - ak: Buffer; - nk: Buffer; - ovk: Buffer; - dk: Buffer; -} -export declare function decodeSaplingExtendedSpendingKey(encoded: string): SaplingExtendedSpendingKeyData; -export declare function encodeSaplingExtendedSpendingKey(data: SaplingExtendedSpendingKeyData, testnet?: boolean): string; -export declare function decodeSaplingExtendedViewingKey(encoded: string): SaplingExtendedViewingKeyData; -export declare function encodeSaplingExtendedViewingKey(data: SaplingExtendedViewingKeyData, testnet?: boolean): string; diff --git a/dist/utils/sapling.js b/dist/utils/sapling.js deleted file mode 100644 index 2ef0e258..00000000 --- a/dist/utils/sapling.js +++ /dev/null @@ -1,141 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.encodeSaplingAddress = exports.decodeSaplingAddress = exports.convertBits = exports.toBech32 = exports.fromBech32 = void 0; -exports.decodeSaplingExtendedSpendingKey = decodeSaplingExtendedSpendingKey; -exports.encodeSaplingExtendedSpendingKey = encodeSaplingExtendedSpendingKey; -exports.decodeSaplingExtendedViewingKey = decodeSaplingExtendedViewingKey; -exports.encodeSaplingExtendedViewingKey = encodeSaplingExtendedViewingKey; -const bech32_1 = require("bech32"); -const fromBech32 = (address) => { - var result = bech32_1.bech32.decode(address, 1000); // Allow longer strings like extended keys - var data = bech32_1.bech32.fromWords(result.words); - return { - version: result.words[0], - prefix: result.prefix, - data: Buffer.from(data) - }; -}; -exports.fromBech32 = fromBech32; -const toBech32 = (prefix, data) => { - const words = bech32_1.bech32.toWords(data); - var result = bech32_1.bech32.encode(prefix, words, 1000); // Allow longer strings like extended keys - return result; -}; -exports.toBech32 = toBech32; -const convertBits = (data, from, to, strictMode) => { - const length = strictMode - ? Math.floor((data.length * from) / to) - : Math.ceil((data.length * from) / to); - const mask = (1 << to) - 1; - const result = Buffer.alloc(length); - let index = 0; - let accumulator = 0; - let bits = 0; - for (const value of data) { - accumulator = (accumulator << from) | value; - bits += from; - while (bits >= to) { - bits -= to; - result[index] = (accumulator >> bits) & mask; - ++index; - } - } - if (!strictMode) { - if (bits > 0) { - result[index] = (accumulator << (to - bits)) & mask; - ++index; - } - } - else { - throw new Error("Bits cannot be converted"); - } - return result; -}; -exports.convertBits = convertBits; -const decodeSaplingAddress = (address) => { - const result = (0, exports.fromBech32)(address); - //const data = convertBits(result.data, 5, 8, false); - if (result.data.length !== 43) { - throw new Error('Invalid sapling address'); - } - return { d: Buffer.from(result.data.subarray(0, 11)), pk_d: Buffer.from(result.data.subarray(11)) }; -}; -exports.decodeSaplingAddress = decodeSaplingAddress; -const encodeSaplingAddress = (data) => { - const buffer = Buffer.concat([data.d, data.pk_d]); - //const data = convertBits(buffer, 8, 5, false); - return (0, exports.toBech32)('zs', buffer); -}; -exports.encodeSaplingAddress = encodeSaplingAddress; -function decodeSaplingExtendedSpendingKey(encoded) { - const result = (0, exports.fromBech32)(encoded); - // Verify prefix is for extended spending key - if (!result.prefix.startsWith('secret-extended-key-')) { - throw new Error('Invalid Sapling extended spending key prefix'); - } - // Data should be 169 bytes: 1 (depth) + 4 (parent) + 4 (child) + 32*4 (keys) - if (result.data.length !== 169) { - throw new Error(`Invalid Sapling extended spending key length: expected 169, got ${result.data.length}`); - } - let offset = 0; - return { - depth: result.data.readUInt8(offset++), - parentFVKTag: Buffer.from(result.data.subarray(offset, offset += 4)), - childIndex: Buffer.from(result.data.subarray(offset, offset += 4)), - chainCode: Buffer.from(result.data.subarray(offset, offset += 32)), - ask: Buffer.from(result.data.subarray(offset, offset += 32)), - nsk: Buffer.from(result.data.subarray(offset, offset += 32)), - ovk: Buffer.from(result.data.subarray(offset, offset += 32)), - dk: Buffer.from(result.data.subarray(offset, offset += 32)) - }; -} -function encodeSaplingExtendedSpendingKey(data, testnet = false) { - const prefix = testnet ? 'secret-extended-key-test' : 'secret-extended-key-main'; - const buffer = Buffer.concat([ - Buffer.from([data.depth]), - data.parentFVKTag, - data.childIndex, - data.chainCode, - data.ask, - data.nsk, - data.ovk, - data.dk - ]); - return (0, exports.toBech32)(prefix, buffer); -} -function decodeSaplingExtendedViewingKey(encoded) { - const result = (0, exports.fromBech32)(encoded); - // Verify prefix is for extended viewing key - if (!result.prefix.startsWith('zxview')) { - throw new Error('Invalid Sapling extended viewing key prefix'); - } - // Data should be 169 bytes: 1 (depth) + 4 (parent) + 4 (child) + 32*5 (keys) - if (result.data.length !== 169) { - throw new Error('Invalid Sapling extended viewing key length'); - } - let offset = 0; - return { - depth: result.data.readUInt8(offset++), - parentFVKTag: Buffer.from(result.data.subarray(offset, offset += 4)), - childIndex: Buffer.from(result.data.subarray(offset, offset += 4)), - chainCode: Buffer.from(result.data.subarray(offset, offset += 32)), - ak: Buffer.from(result.data.subarray(offset, offset += 32)), - nk: Buffer.from(result.data.subarray(offset, offset += 32)), - ovk: Buffer.from(result.data.subarray(offset, offset += 32)), - dk: Buffer.from(result.data.subarray(offset, offset += 32)) - }; -} -function encodeSaplingExtendedViewingKey(data, testnet = false) { - const prefix = testnet ? 'zxviewtestsapling' : 'zxviews'; - const buffer = Buffer.concat([ - Buffer.from([data.depth]), - data.parentFVKTag, - data.childIndex, - data.chainCode, - data.ak, - data.nk, - data.ovk, - data.dk - ]); - return (0, exports.toBech32)(prefix, buffer); -} diff --git a/dist/utils/script.d.ts b/dist/utils/script.d.ts deleted file mode 100644 index fe68bb40..00000000 --- a/dist/utils/script.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type ScriptChunk = Buffer | number; -export declare function isOPInt(value: number): boolean; -export declare function isPushOnlyChunk(value: ScriptChunk): boolean; -export declare function isPushOnly(value: Array): boolean; -export declare function asMinimalOP(buffer: Buffer): number | undefined; -export declare function compile(chunks: Buffer | Array): Buffer; -export declare function decompile(buffer: Array | Buffer): Array; -export declare function toASM(chunks: Array | Buffer): string; -export declare function fromASM(asm: string): Buffer; -export declare function isCanonicalPubKey(buffer: Buffer): boolean; -export declare function isDefinedHashType(hashType: number): boolean; diff --git a/dist/utils/script.js b/dist/utils/script.js deleted file mode 100644 index 73ebcfcc..00000000 --- a/dist/utils/script.js +++ /dev/null @@ -1,160 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.isOPInt = isOPInt; -exports.isPushOnlyChunk = isPushOnlyChunk; -exports.isPushOnly = isPushOnly; -exports.asMinimalOP = asMinimalOP; -exports.compile = compile; -exports.decompile = decompile; -exports.toASM = toASM; -exports.fromASM = fromASM; -exports.isCanonicalPubKey = isCanonicalPubKey; -exports.isDefinedHashType = isDefinedHashType; -const pushdata = require("./pushdata"); -const ops_1 = require("./ops"); -const reverseops_1 = require("./reverseops"); -const string_1 = require("./string"); -const OP_INT_BASE = ops_1.OPS.OP_RESERVED; // OP_1 - 1 -function isOPInt(value) { - return ((value === ops_1.OPS.OP_0) || - (value >= ops_1.OPS.OP_1 && value <= ops_1.OPS.OP_16) || - (value === ops_1.OPS.OP_1NEGATE)); -} -function isPushOnlyChunk(value) { - return Buffer.isBuffer(value) || isOPInt(value); -} -function isPushOnly(value) { - return value.every(isPushOnlyChunk); -} -function asMinimalOP(buffer) { - if (buffer.length === 0) - return ops_1.OPS.OP_0; - if (buffer.length !== 1) - return; - if (buffer[0] >= 1 && buffer[0] <= 16) - return OP_INT_BASE + buffer[0]; - if (buffer[0] === 0x81) - return ops_1.OPS.OP_1NEGATE; -} -function compile(chunks) { - if (Buffer.isBuffer(chunks)) - return chunks; - const bufferSize = chunks.reduce(function (accum, chunk) { - if (Buffer.isBuffer(chunk)) { - // adhere to BIP62.3, minimal push policy - if (chunk.length === 1 && asMinimalOP(chunk) !== undefined) { - return accum + 1; - } - return accum + pushdata.encodingLength(chunk.length) + chunk.length; - } - else { - // opcode - return accum + 1; - } - }, 0.0); - var buffer = Buffer.alloc(bufferSize); - var offset = 0; - chunks.forEach(function (chunk) { - // data chunk - if (Buffer.isBuffer(chunk)) { - // adhere to BIP62.3, minimal push policy - var opcode = asMinimalOP(chunk); - if (opcode !== undefined) { - buffer.writeUInt8(opcode, offset); - offset += 1; - return; - } - offset += pushdata.encode(buffer, chunk.length, offset); - chunk.copy(buffer, offset); - offset += chunk.length; - // opcode - } - else { - buffer.writeUInt8(chunk, offset); - offset += 1; - } - }); - if (offset !== buffer.length) - throw new Error('Could not decode chunks'); - return buffer; -} -function decompile(buffer) { - if (Array.isArray(buffer)) - return buffer; - var chunks = []; - var i = 0; - while (i < buffer.length) { - var opcode = buffer[i]; - // data chunk - if ((opcode > ops_1.OPS.OP_0) && (opcode <= ops_1.OPS.OP_PUSHDATA4)) { - var d = pushdata.decode(buffer, i); - // did reading a pushDataInt fail? empty script - if (d === null) - return []; - i += d.size; - // attempt to read too much data? empty script - if (i + d.number > buffer.length) - return []; - var data = Buffer.from(buffer.subarray(i, i + d.number)); - i += d.number; - // decompile minimally - var op = asMinimalOP(data); - if (op !== undefined) { - chunks.push(op); - } - else { - chunks.push(data); - } - } - else { - chunks.push(opcode); - i += 1; - } - } - return chunks; -} -function toASM(chunks) { - if (Buffer.isBuffer(chunks)) { - chunks = decompile(chunks); - } - return chunks.map(function (chunk) { - // data? - if (Buffer.isBuffer(chunk)) { - var op = asMinimalOP(chunk); - if (op === undefined) - return chunk.toString('hex'); - chunk = op; - } - // opcode! - return reverseops_1.default[chunk]; - }).join(' '); -} -function fromASM(asm) { - return compile(asm.split(' ').map(function (chunkStr) { - // opcode? - if (ops_1.OPS[chunkStr] !== undefined) - return ops_1.OPS[chunkStr]; - if (!(0, string_1.isHexString)(chunkStr)) - throw new Error("Expected hex in fromASM"); - // data! - return Buffer.from(chunkStr, 'hex'); - })); -} -function isCanonicalPubKey(buffer) { - if (!Buffer.isBuffer(buffer)) - return false; - if (buffer.length < 33) - return false; - switch (buffer[0]) { - case 0x02: - case 0x03: - return buffer.length === 33; - case 0x04: - return buffer.length === 65; - } - return false; -} -function isDefinedHashType(hashType) { - var hashTypeMod = hashType & ~0xc0; - return hashTypeMod > 0x00 && hashTypeMod < 0x04; -} diff --git a/dist/utils/string.d.ts b/dist/utils/string.d.ts deleted file mode 100644 index c3db2564..00000000 --- a/dist/utils/string.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import bufferutils from "../utils/bufferutils"; -export declare const isHexString: (s: string) => boolean; -export declare const readLimitedString: (reader: InstanceType, limit: number) => Buffer; diff --git a/dist/utils/string.js b/dist/utils/string.js deleted file mode 100644 index 05f95332..00000000 --- a/dist/utils/string.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.readLimitedString = exports.isHexString = void 0; -const isHexString = (s) => { - try { - const striBuf = Buffer.from(s, 'hex'); - striBuf.toString('hex'); - return true; - } - catch (e) { - return false; - } -}; -exports.isHexString = isHexString; -const readLimitedString = (reader, limit) => { - const size = reader.readCompactSize(); - if (size > limit) { - throw new Error("String length limit exceeded"); - } - return reader.readSlice(size); -}; -exports.readLimitedString = readLimitedString; diff --git a/dist/utils/types/BigNumber.d.ts b/dist/utils/types/BigNumber.d.ts deleted file mode 100644 index 7ecd51e6..00000000 --- a/dist/utils/types/BigNumber.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -declare const BNClass: import("bn.js"); -export type BigNumber = typeof BNClass; -export {}; diff --git a/dist/utils/types/BigNumber.js b/dist/utils/types/BigNumber.js deleted file mode 100644 index 43141c7e..00000000 --- a/dist/utils/types/BigNumber.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const bn_js_1 = require("bn.js"); -// Hack to force BigNumber to get typeof class instead of BN namespace -const BNClass = new bn_js_1.BN(0); diff --git a/dist/utils/types/DataDescriptor.d.ts b/dist/utils/types/DataDescriptor.d.ts deleted file mode 100644 index 4c817d19..00000000 --- a/dist/utils/types/DataDescriptor.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type DataDescriptorInfo = { - version?: number; - flags?: number; - objectdata?: string; - label?: string; - mimeType?: string; - salt?: string; - epk?: string; - ivk?: string; - ssk?: string; -}; diff --git a/dist/utils/types/DataDescriptor.js b/dist/utils/types/DataDescriptor.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/utils/types/DataDescriptor.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/utils/types/MmrDescriptor.d.ts b/dist/utils/types/MmrDescriptor.d.ts deleted file mode 100644 index bddf7d97..00000000 --- a/dist/utils/types/MmrDescriptor.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { DataDescriptorInfo } from './DataDescriptor'; -export type MmrDescriptorParameters = { - version?: number; - objecthashtype?: number; - mmrhashtype?: number; - mmrroot?: DataDescriptorInfo; - mmrhashes?: DataDescriptorInfo; - datadescriptors?: DataDescriptorInfo[]; -}; diff --git a/dist/utils/types/MmrDescriptor.js b/dist/utils/types/MmrDescriptor.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/utils/types/MmrDescriptor.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/utils/types/SerializableEntity.d.ts b/dist/utils/types/SerializableEntity.d.ts deleted file mode 100644 index e68f8d9a..00000000 --- a/dist/utils/types/SerializableEntity.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export interface SerializableEntity { - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - getByteLength(): number; -} -export interface SerializableDataEntity { - getDataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer): void; -} diff --git a/dist/utils/types/SerializableEntity.js b/dist/utils/types/SerializableEntity.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/utils/types/SerializableEntity.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/utils/types/SignData.d.ts b/dist/utils/types/SignData.d.ts deleted file mode 100644 index d947a7e3..00000000 --- a/dist/utils/types/SignData.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export type SignDataParameters = { - filename?: string; - message?: string; - messagehex?: string; - messagebase64?: string; - datahash?: string; - vdxfdata?: string; -}; diff --git a/dist/utils/types/SignData.js b/dist/utils/types/SignData.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/utils/types/SignData.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/utils/types/Signature.d.ts b/dist/utils/types/Signature.d.ts deleted file mode 100644 index 13535eed..00000000 --- a/dist/utils/types/Signature.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -export type SignatureDataInfo = { - version: number; - systemid: string; - hashtype: number; - signaturehash: string; - identityid: string; - signaturetype: number; - signature: string; -}; diff --git a/dist/utils/types/Signature.js b/dist/utils/types/Signature.js deleted file mode 100644 index c8ad2e54..00000000 --- a/dist/utils/types/Signature.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/utils/varint.d.ts b/dist/utils/varint.d.ts deleted file mode 100644 index 860e3833..00000000 --- a/dist/utils/varint.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { BigNumber } from './types/BigNumber'; -declare function encode(number: BigNumber, buffer: Buffer, offset: number): { - buffer: Buffer; - bytes: number; -}; -declare function decode(buffer: Buffer, offset: number): { - decoded: BigNumber; - bytes: number; -}; -declare const _default: { - encode: typeof encode; - decode: typeof decode; - encodingLength: (number: BigNumber) => number; -}; -export default _default; diff --git a/dist/utils/varint.js b/dist/utils/varint.js deleted file mode 100644 index 60e45c47..00000000 --- a/dist/utils/varint.js +++ /dev/null @@ -1,60 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -// Signed varints -const bn_js_1 = require("bn.js"); -const writeVarInt = (number) => { - let tmp = []; - let len = 0; - while (true) { - tmp[len] = (number.and(new bn_js_1.BN('7f', 16))).or(new bn_js_1.BN(len ? '80' : '00', 'hex')).toBuffer()[0]; - if (number.lte(new bn_js_1.BN('7f', 16))) - break; - number = number.shrn(7).sub(new bn_js_1.BN(1, 10)); - len++; - } - tmp = tmp.reverse(); - return Buffer.from(tmp); -}; -const readVarInt = (data, offset) => { - let n = new bn_js_1.BN(0, 10); - let pos = offset; - while (true) { - let chData = data.readUInt8(pos); // single char - pos++; - n = n.shln(7).or(new bn_js_1.BN(chData & 0x7f)); - if (chData & 0x80) - n = n.add(new bn_js_1.BN(1, 10)); - else - return { value: n, length: pos - offset }; - } -}; -const encodingLength = (number) => { - return writeVarInt(number).length; -}; -function encode(number, buffer, offset) { - if (!buffer) - buffer = Buffer.alloc(encodingLength(number)); - if (!Buffer.isBuffer(buffer)) - throw new TypeError('buffer must be a Buffer instance'); - if (!offset) - offset = 0; - const varintBuf = writeVarInt(number); - if (buffer.length < offset + varintBuf.length) { - throw new Error('Cannot write slice out of bounds'); - } - const bytes = varintBuf.copy(buffer, offset); - return { buffer, bytes }; -} -function decode(buffer, offset) { - if (!Buffer.isBuffer(buffer)) - throw new TypeError('buffer must be a Buffer instance'); - if (!offset) - offset = 0; - const { value, length } = readVarInt(buffer, offset); - return { decoded: value, bytes: length }; -} -exports.default = { - encode, - decode, - encodingLength -}; diff --git a/dist/utils/varuint.d.ts b/dist/utils/varuint.d.ts deleted file mode 100644 index cb25c491..00000000 --- a/dist/utils/varuint.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -export declare const encode: (number: number, buffer: Buffer, offset: number) => { - buffer: Buffer; - bytes: number; -}; -export declare const decode: (buffer: Buffer, offset: number) => { - decoded: number; - bytes: number; -}; -export declare const encodingLength: (number: number) => number; -declare const _default: { - encodingLength: (number: number) => number; - encode: (number: number, buffer: Buffer, offset: number) => { - buffer: Buffer; - bytes: number; - }; - decode: (buffer: Buffer, offset: number) => { - decoded: number; - bytes: number; - }; -}; -export default _default; diff --git a/dist/utils/varuint.js b/dist/utils/varuint.js deleted file mode 100644 index 89a32dbc..00000000 --- a/dist/utils/varuint.js +++ /dev/null @@ -1,115 +0,0 @@ -"use strict"; -// The MIT License (MIT) -Object.defineProperty(exports, "__esModule", { value: true }); -exports.encodingLength = exports.decode = exports.encode = void 0; -// Copyright (c) 2016 Kirill Fomichev -// Parts of this software are based on https://github.com/mappum/bitcoin-protocol -// Copyright (c) 2016 Matt Bell -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// Number.MAX_SAFE_INTEGER -const MAX_SAFE_INTEGER = 9007199254740991; -const checkUInt53 = (n) => { - if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) - throw new RangeError("value out of range"); -}; -const encode = (number, buffer, offset) => { - checkUInt53(number); - if (!buffer) - buffer = Buffer.alloc((0, exports.encodingLength)(number)); - if (!Buffer.isBuffer(buffer)) - throw new TypeError("buffer must be a Buffer instance"); - if (!offset) - offset = 0; - let bytes; - // 8 bit - if (number < 0xfd) { - buffer.writeUInt8(number, offset); - bytes = 1; - // 16 bit - } - else if (number <= 0xffff) { - buffer.writeUInt8(0xfd, offset); - buffer.writeUInt16LE(number, offset + 1); - bytes = 3; - // 32 bit - } - else if (number <= 0xffffffff) { - buffer.writeUInt8(0xfe, offset); - buffer.writeUInt32LE(number, offset + 1); - bytes = 5; - // 64 bit - } - else { - buffer.writeUInt8(0xff, offset); - buffer.writeUInt32LE(number >>> 0, offset + 1); - buffer.writeUInt32LE((number / 0x100000000) | 0, offset + 5); - bytes = 9; - } - return { buffer, bytes }; -}; -exports.encode = encode; -const decode = (buffer, offset) => { - if (!Buffer.isBuffer(buffer)) - throw new TypeError("buffer must be a Buffer instance"); - if (!offset) - offset = 0; - var first = buffer.readUInt8(offset); - let bytes; - let decoded; - // 8 bit - if (first < 0xfd) { - bytes = 1; - decoded = first; - // 16 bit - } - else if (first === 0xfd) { - bytes = 3; - decoded = buffer.readUInt16LE(offset + 1); - // 32 bit - } - else if (first === 0xfe) { - bytes = 5; - decoded = buffer.readUInt32LE(offset + 1); - // 64 bit - } - else { - bytes = 9; - var lo = buffer.readUInt32LE(offset + 1); - var hi = buffer.readUInt32LE(offset + 5); - var number = hi * 0x0100000000 + lo; - checkUInt53(number); - decoded = number; - } - return { decoded, bytes }; -}; -exports.decode = decode; -const encodingLength = (number) => { - checkUInt53(number); - return number < 0xfd - ? 1 - : number <= 0xffff - ? 3 - : number <= 0xffffffff - ? 5 - : 9; -}; -exports.encodingLength = encodingLength; -exports.default = { - encodingLength: exports.encodingLength, - encode: exports.encode, - decode: exports.decode, -}; diff --git a/dist/vdxf/classes/Challenge.d.ts b/dist/vdxf/classes/Challenge.d.ts deleted file mode 100644 index ec8ec04a..00000000 --- a/dist/vdxf/classes/Challenge.d.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { Utf8DataVdxfObject, VDXFObject, Utf8OrBase58Object } from "../"; -import { Context } from "./Context"; -export declare class RedirectUri extends VDXFObject { - uri: string; - constructor(uri?: string, vdxfkey?: string); - dataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer, offset?: number): number; - toJson(): { - uri: string; - vdxfkey: string; - }; -} -export declare class Subject extends Utf8OrBase58Object { - constructor(data?: string, vdxfkey?: string); -} -export declare class ProvisioningInfo extends Utf8OrBase58Object { - constructor(data?: string, vdxfkey?: string); -} -export declare class RequestedPermission extends Utf8DataVdxfObject { - constructor(vdxfkey?: string); -} -export declare class Audience extends Utf8DataVdxfObject { -} -export declare class AltAuthFactor extends Utf8DataVdxfObject { -} -export declare class Attestation extends Utf8DataVdxfObject { -} -export interface ChallengeInterface { - challenge_id: string; - requested_access?: Array | null; - requested_access_audience?: Array | null; - subject?: Array; - provisioning_info?: Array; - alt_auth_factors?: Array | null; - session_id?: string; - attestations?: Array; - redirect_uris?: Array; - created_at: number; - skip?: boolean; - salt?: string; - context?: Context; -} -export declare class Challenge extends VDXFObject implements ChallengeInterface { - challenge_id: string; - requested_access?: Array | null; - requested_access_audience?: Array | null; - subject?: Array; - provisioning_info?: Array; - alt_auth_factors?: Array | null; - session_id?: string; - attestations?: Array; - redirect_uris?: Array; - created_at: number; - skip?: boolean; - salt?: string; - context?: Context; - constructor(challenge?: ChallengeInterface, vdxfkey?: string); - dataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer, offset?: number): number; - toJson(): { - vdxfkey: string; - challenge_id: string; - requested_access: RequestedPermission[]; - requested_access_audience: RequestedPermission[]; - subject: Subject[]; - provisioning_info: ProvisioningInfo[]; - alt_auth_factors: AltAuthFactor[]; - session_id: string; - attestations: Attestation[]; - redirect_uris: { - uri: string; - vdxfkey: string; - }[]; - created_at: number; - salt: string; - context: Context; - skip: boolean; - }; -} diff --git a/dist/vdxf/classes/Challenge.js b/dist/vdxf/classes/Challenge.js deleted file mode 100644 index 4b85b519..00000000 --- a/dist/vdxf/classes/Challenge.js +++ /dev/null @@ -1,267 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Challenge = exports.Attestation = exports.AltAuthFactor = exports.Audience = exports.RequestedPermission = exports.ProvisioningInfo = exports.Subject = exports.RedirectUri = void 0; -const __1 = require("../"); -const bufferutils_1 = require("../../utils/bufferutils"); -const varuint_1 = require("../../utils/varuint"); -const Context_1 = require("./Context"); -const Hash160_1 = require("./Hash160"); -class RedirectUri extends __1.VDXFObject { - constructor(uri = "", vdxfkey = "") { - super(vdxfkey); - this.uri = uri; - } - dataByteLength() { - return this.toDataBuffer().length; - } - toDataBuffer() { - return Buffer.from(this.uri, "utf-8"); - } - fromDataBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - this.uri = reader.readVarSlice().toString("utf-8"); - return reader.offset; - } - toJson() { - return { - uri: this.uri, - vdxfkey: this.vdxfkey, - }; - } -} -exports.RedirectUri = RedirectUri; -class Subject extends __1.Utf8OrBase58Object { - constructor(data = "", vdxfkey = "") { - super(data, vdxfkey, [ - __1.ID_ADDRESS_VDXF_KEY.vdxfid, - __1.ID_PARENT_VDXF_KEY.vdxfid, - __1.ID_SYSTEMID_VDXF_KEY.vdxfid, - ]); - } -} -exports.Subject = Subject; -class ProvisioningInfo extends __1.Utf8OrBase58Object { - constructor(data = "", vdxfkey = "") { - super(data, vdxfkey, [ - __1.ID_ADDRESS_VDXF_KEY.vdxfid, - __1.ID_PARENT_VDXF_KEY.vdxfid, - __1.ID_SYSTEMID_VDXF_KEY.vdxfid, - ]); - } -} -exports.ProvisioningInfo = ProvisioningInfo; -class RequestedPermission extends __1.Utf8DataVdxfObject { - constructor(vdxfkey = "") { - super("", vdxfkey); - } -} -exports.RequestedPermission = RequestedPermission; -class Audience extends __1.Utf8DataVdxfObject { -} -exports.Audience = Audience; -class AltAuthFactor extends __1.Utf8DataVdxfObject { -} -exports.AltAuthFactor = AltAuthFactor; -class Attestation extends __1.Utf8DataVdxfObject { -} -exports.Attestation = Attestation; -class Challenge extends __1.VDXFObject { - constructor(challenge = { challenge_id: "", created_at: 0 }, vdxfkey = __1.LOGIN_CONSENT_CHALLENGE_VDXF_KEY.vdxfid) { - super(vdxfkey); - this.challenge_id = challenge.challenge_id; - this.requested_access = challenge.requested_access - ? challenge.requested_access.map((x) => new RequestedPermission(x.vdxfkey)) - : challenge.requested_access; - this.requested_access_audience = challenge.requested_access_audience; - this.subject = challenge.subject - ? challenge.subject.map((x) => new Subject(x.data, x.vdxfkey)) - : challenge.subject; - this.provisioning_info = challenge.provisioning_info - ? challenge.provisioning_info.map((x) => new ProvisioningInfo(x.data, x.vdxfkey)) - : challenge.provisioning_info; - this.alt_auth_factors = challenge.alt_auth_factors; - this.session_id = challenge.session_id; - this.attestations = challenge.attestations; - this.redirect_uris = challenge.redirect_uris - ? challenge.redirect_uris.map((x) => new RedirectUri(x.uri, x.vdxfkey)) - : challenge.redirect_uris; - this.created_at = challenge.created_at; - this.salt = challenge.salt; - this.context = challenge.context - ? new Context_1.Context(challenge.context.kv) - : challenge.context; - this.skip = challenge.skip ? true : false; - } - dataByteLength() { - let length = 0; - const _challenge_id = Hash160_1.Hash160.fromAddress(this.challenge_id, true); - const _created_at = this.created_at; - const _salt = this.salt - ? Hash160_1.Hash160.fromAddress(this.salt, true) - : Hash160_1.Hash160.getEmpty(); - const _session_id = this.session_id - ? Hash160_1.Hash160.fromAddress(this.session_id, true) - : Hash160_1.Hash160.getEmpty(); - const _requested_access = this.requested_access - ? this.requested_access - : []; - const _requested_access_audience = []; - const _subject = this.subject ? this.subject : []; - const _provisioning_info = this.provisioning_info ? this.provisioning_info : []; - const _alt_auth_factors = []; - const _attestations = this.attestations ? this.attestations : []; - const _redirect_uris = this.redirect_uris ? this.redirect_uris : []; - const _context = this.context ? this.context : new Context_1.Context({}); - length += _challenge_id.byteLength(); - length += 8; // created_at - length += _salt.byteLength(); - if (this.vdxfkey === __1.LOGIN_CONSENT_CHALLENGE_VDXF_KEY.vdxfid) { - length += 1; // skip - length += _session_id.byteLength(); - length += varuint_1.default.encodingLength(_requested_access.length); - length += _requested_access.reduce((sum, current) => sum + current.byteLength(), 0); - length += varuint_1.default.encodingLength(_requested_access_audience.length); - length += varuint_1.default.encodingLength(_subject.length); - length += _subject.reduce((sum, current) => sum + current.byteLength(), 0); - length += varuint_1.default.encodingLength(_provisioning_info.length); - length += _provisioning_info.reduce((sum, current) => sum + current.byteLength(), 0); - length += varuint_1.default.encodingLength(_alt_auth_factors.length); - length += varuint_1.default.encodingLength(_attestations.length); - length += _attestations.reduce((sum, current) => sum + current.byteLength(), 0); - length += varuint_1.default.encodingLength(_redirect_uris.length); - length += _redirect_uris.reduce((sum, current) => sum + current.byteLength(), 0); - } - length += _context.byteLength(); - return length; - } - toDataBuffer() { - const buffer = Buffer.alloc(this.dataByteLength()); - const writer = new bufferutils_1.default.BufferWriter(buffer); - const _challenge_id = Hash160_1.Hash160.fromAddress(this.challenge_id, true); - const _created_at = this.created_at; - const _salt = this.salt - ? Hash160_1.Hash160.fromAddress(this.salt, true) - : Hash160_1.Hash160.getEmpty(); - const _session_id = this.session_id - ? Hash160_1.Hash160.fromAddress(this.session_id, true) - : Hash160_1.Hash160.getEmpty(); - const _requested_access = this.requested_access - ? this.requested_access - : []; - const _requested_access_audience = []; - const _subject = this.subject ? this.subject : []; - const _provisioning_info = this.provisioning_info ? this.provisioning_info : []; - const _alt_auth_factors = []; - const _attestations = this.attestations ? this.attestations : []; - const _redirect_uris = this.redirect_uris ? this.redirect_uris : []; - const _context = this.context ? this.context : new Context_1.Context({}); - writer.writeSlice(_challenge_id.toBuffer()); - writer.writeUInt64(_created_at); - writer.writeSlice(_salt.toBuffer()); - if (this.vdxfkey === __1.LOGIN_CONSENT_CHALLENGE_VDXF_KEY.vdxfid) { - writer.writeUInt8(this.skip ? 1 : 0); - writer.writeSlice(_session_id.toBuffer()); - writer.writeArray(_requested_access.map((x) => x.toBuffer())); - writer.writeArray(_requested_access_audience.map((x) => x.toBuffer())); - writer.writeArray(_subject.map((x) => x.toBuffer())); - writer.writeArray(_provisioning_info.map((x) => x.toBuffer())); - writer.writeArray(_alt_auth_factors.map((x) => x.toBuffer())); - writer.writeArray(_attestations.map((x) => x.toBuffer())); - writer.writeArray(_redirect_uris.map((x) => x.toBuffer())); - } - writer.writeSlice(_context.toBuffer()); - return writer.buffer; - } - fromDataBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - const challengeLength = reader.readCompactSize(); - if (challengeLength == 0) { - throw new Error("Cannot create challenge from empty buffer"); - } - else { - const _challenge_id = new Hash160_1.Hash160(); - reader.offset = _challenge_id.fromBuffer(reader.buffer, true, reader.offset); - this.challenge_id = _challenge_id.toAddress(); - this.created_at = reader.readUInt64(); - const _salt = new Hash160_1.Hash160(); - reader.offset = _salt.fromBuffer(reader.buffer, true, reader.offset); - this.salt = _salt.toAddress(); - if (this.vdxfkey === __1.LOGIN_CONSENT_CHALLENGE_VDXF_KEY.vdxfid) { - this.skip = reader.readUInt8() === 1 ? true : false; - const _session_id = new Hash160_1.Hash160(); - reader.offset = _session_id.fromBuffer(reader.buffer, true, reader.offset); - this.session_id = _session_id.toAddress(); - this.requested_access = []; - const requestedAccessLength = reader.readCompactSize(); - for (let i = 0; i < requestedAccessLength; i++) { - const _perm = new RequestedPermission(); - reader.offset = _perm.fromBuffer(reader.buffer, reader.offset); - this.requested_access.push(_perm); - } - this.requested_access_audience = []; - const audienceLength = reader.readCompactSize(); - if (audienceLength > 0) { - throw new Error("Requested access audience currently unsupported"); - } - this.subject = []; - const subjectLength = reader.readCompactSize(); - for (let i = 0; i < subjectLength; i++) { - const _subject = new Subject(); - reader.offset = _subject.fromBuffer(reader.buffer, reader.offset); - this.subject.push(_subject); - } - this.provisioning_info = []; - const provisioningInfoLength = reader.readCompactSize(); - for (let i = 0; i < provisioningInfoLength; i++) { - const _provisioning_info = new ProvisioningInfo(); - reader.offset = _provisioning_info.fromBuffer(reader.buffer, reader.offset); - this.provisioning_info.push(_provisioning_info); - } - this.alt_auth_factors = []; - const altAuthFactorLength = reader.readCompactSize(); - if (altAuthFactorLength > 0) { - throw new Error("Alt auth factors currently unsupported"); - } - this.attestations = []; - const attestationsLength = reader.readCompactSize(); - for (let i = 0; i < attestationsLength; i++) { - const _att = new Attestation(); - reader.offset = _att.fromBuffer(reader.buffer, reader.offset); - this.attestations.push(_att); - } - this.redirect_uris = []; - const urisLength = reader.readCompactSize(); - for (let i = 0; i < urisLength; i++) { - const _redirect_uri = new RedirectUri(); - reader.offset = _redirect_uri.fromBuffer(reader.buffer, reader.offset); - this.redirect_uris.push(_redirect_uri); - } - } - const _context = new Context_1.Context(); - reader.offset = _context.fromBuffer(reader.buffer, reader.offset); - this.context = _context; - } - return reader.offset; - } - toJson() { - return { - vdxfkey: this.vdxfkey, - challenge_id: this.challenge_id, - requested_access: this.requested_access, - requested_access_audience: this.requested_access_audience, - subject: this.subject, - provisioning_info: this.provisioning_info, - alt_auth_factors: this.alt_auth_factors, - session_id: this.session_id, - attestations: this.attestations, - redirect_uris: this.redirect_uris - ? this.redirect_uris.map((x) => x.toJson()) - : this.redirect_uris, - created_at: this.created_at, - salt: this.salt, - context: this.context, - skip: this.skip, - }; - } -} -exports.Challenge = Challenge; diff --git a/dist/vdxf/classes/CompactAddressObject.d.ts b/dist/vdxf/classes/CompactAddressObject.d.ts deleted file mode 100644 index 04065cab..00000000 --- a/dist/vdxf/classes/CompactAddressObject.d.ts +++ /dev/null @@ -1,59 +0,0 @@ -/** - * CompactIdentityObject - Class representing an id in the smallest possible format - * - * This class is used to represent an identity or address in a compact format, allowing for efficient - * storage and transmission. The compact id can be represented either as a fully qualified name (FQN) - * or as an identity address (iaddress) or as an x address (tag/index). The class includes methods for serialization, deserialization, - * and validation of the compact id object. - */ -import { BigNumber } from '../../utils/types/BigNumber'; -import { SerializableEntity } from '../../utils/types/SerializableEntity'; -export interface CompactAddressObjectJson { - version: number; - type: number; - address: string; - rootsystemname: string; - namespace?: string; -} -export interface CompactAddressObjectInterface { - version?: BigNumber; - type: BigNumber; - address: string; - rootSystemName?: string; - nameSpace?: string; -} -export type CompactAddressIVariant = "COMPACT_ADDR_I_VARIANT"; -export type CompactAddressXVariant = "COMPACT_ADDR_X_VARIANT"; -export type CompactAddressVariantName = CompactAddressIVariant | CompactAddressXVariant; -export type CompactAddressVariantAllowedType = T extends CompactAddressIVariant ? `${1 | 2}` : T extends CompactAddressXVariant ? `${1 | 3}` : never; -export declare class CompactAddressObject implements SerializableEntity { - static VERSION_INVALID: import("bn.js"); - static FIRST_VERSION: import("bn.js"); - static LAST_VERSION: import("bn.js"); - static DEFAULT_VERSION: import("bn.js"); - static TYPE_FQN: import("bn.js"); - static TYPE_I_ADDRESS: import("bn.js"); - static TYPE_X_ADDRESS: import("bn.js"); - version: BigNumber; - type: CompactAddressVariantAllowedType; - address: string; - rootSystemName: string; - nameSpace: string; - constructor(data?: CompactAddressObjectInterface); - get BNType(): import("bn.js"); - set setType(type: BigNumber); - isFQN(): boolean; - isIaddress(): boolean; - isXaddress(): boolean; - isValid(): boolean; - toIAddress(): string; - toXAddress(): string; - static fromIAddress(iaddr: string): CompactAddressObject; - static fromXAddress(xaddr: string, nameSpace?: string): CompactAddressObject; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): CompactAddressObjectJson; - static fromJson(json: any): CompactAddressObject; -} -export type CompactXAddressObject = CompactAddressObject; diff --git a/dist/vdxf/classes/CompactAddressObject.js b/dist/vdxf/classes/CompactAddressObject.js deleted file mode 100644 index 7bb6a739..00000000 --- a/dist/vdxf/classes/CompactAddressObject.js +++ /dev/null @@ -1,141 +0,0 @@ -"use strict"; -/** - * CompactIdentityObject - Class representing an id in the smallest possible format - * - * This class is used to represent an identity or address in a compact format, allowing for efficient - * storage and transmission. The compact id can be represented either as a fully qualified name (FQN) - * or as an identity address (iaddress) or as an x address (tag/index). The class includes methods for serialization, deserialization, - * and validation of the compact id object. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CompactAddressObject = void 0; -const bn_js_1 = require("bn.js"); -const bufferutils_1 = require("../../utils/bufferutils"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -const varuint_1 = require("../../utils/varuint"); -const address_1 = require("../../utils/address"); -const vdxf_1 = require("../../constants/vdxf"); -const pbaas_1 = require("../../constants/pbaas"); -class CompactAddressObject { - constructor(data) { - this.version = (data === null || data === void 0 ? void 0 : data.version) || new bn_js_1.BN(CompactAddressObject.DEFAULT_VERSION); - this.type = (data === null || data === void 0 ? void 0 : data.type.toString()) || "1"; - this.address = (data === null || data === void 0 ? void 0 : data.address) || ''; - this.rootSystemName = (data === null || data === void 0 ? void 0 : data.rootSystemName) || 'VRSC'; - this.nameSpace = (data === null || data === void 0 ? void 0 : data.nameSpace) || (0, address_1.toIAddress)(this.rootSystemName); - } - get BNType() { - return new bn_js_1.BN(this.type); - } - set setType(type) { - this.type = type.toString(); - } - isFQN() { - return (this.BNType.eq(CompactAddressObject.TYPE_FQN)); - } - isIaddress() { - return (this.BNType.eq(CompactAddressObject.TYPE_I_ADDRESS)); - } - isXaddress() { - return (this.BNType.eq(CompactAddressObject.TYPE_X_ADDRESS)); - } - isValid() { - return this.address != null; - } - toIAddress() { - if (this.isXaddress()) - throw new Error("Cannot convert I to X address"); - else if (this.isIaddress()) - return this.address; - else if (this.isFQN()) { - return (0, address_1.toIAddress)(this.address, this.rootSystemName); - } - else - throw new Error("Unknown type"); - } - toXAddress() { - if (this.isIaddress()) - throw new Error("Cannot convert X to I address"); - else if (this.isXaddress()) - return this.address; - else if (this.isFQN()) { - return (0, address_1.getDataKey)(this.address, this.nameSpace, (0, address_1.toIAddress)(this.rootSystemName), vdxf_1.X_ADDR_VERSION).id; - } - else - throw new Error("Unknown type"); - } - static fromIAddress(iaddr) { - return new CompactAddressObject({ - address: iaddr, - type: CompactAddressObject.TYPE_I_ADDRESS - }); - } - static fromXAddress(xaddr, nameSpace = pbaas_1.DEFAULT_VERUS_CHAINID) { - return new CompactAddressObject({ - address: xaddr, - nameSpace: nameSpace, - type: CompactAddressObject.TYPE_X_ADDRESS - }); - } - getByteLength() { - let length = 0; - length += varuint_1.default.encodingLength(this.version.toNumber()); - length += varuint_1.default.encodingLength(this.BNType.toNumber()); - if (this.isIaddress() || this.isXaddress()) { - length += vdxf_1.HASH160_BYTE_LENGTH; // identityuint160 - } - else { - const addrLen = Buffer.from(this.address, 'utf8').byteLength; - length += varuint_1.default.encodingLength(addrLen) + addrLen; - } - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeCompactSize(this.version.toNumber()); - writer.writeCompactSize(this.BNType.toNumber()); - if (this.isIaddress() || this.isXaddress()) { - writer.writeSlice((0, address_1.fromBase58Check)(this.address).hash); - } - else { - writer.writeVarSlice(Buffer.from(this.address, 'utf8')); - } - return writer.buffer; - } - fromBuffer(buffer, offset) { - const reader = new BufferReader(buffer, offset); - this.version = new bn_js_1.BN(reader.readCompactSize()); - this.type = new bn_js_1.BN(reader.readCompactSize()).toString(); - if (this.isIaddress() || this.isXaddress()) { - this.address = (0, address_1.toBase58Check)(reader.readSlice(20), this.isIaddress() ? vdxf_1.I_ADDR_VERSION : vdxf_1.X_ADDR_VERSION); - } - else { - this.address = reader.readVarSlice().toString('utf8'); - } - return reader.offset; - } - toJson() { - return { - version: this.version.toNumber(), - type: this.BNType.toNumber(), - address: this.address, - rootsystemname: this.rootSystemName, - }; - } - static fromJson(json) { - const instance = new CompactAddressObject(); - instance.version = new bn_js_1.BN(json.version); - instance.type = new bn_js_1.BN(json.type).toString(); - instance.address = json.address; - instance.rootSystemName = json.rootsystemname; - return instance; - } -} -exports.CompactAddressObject = CompactAddressObject; -CompactAddressObject.VERSION_INVALID = new bn_js_1.BN(0); -CompactAddressObject.FIRST_VERSION = new bn_js_1.BN(1); -CompactAddressObject.LAST_VERSION = new bn_js_1.BN(1); -CompactAddressObject.DEFAULT_VERSION = new bn_js_1.BN(1); -CompactAddressObject.TYPE_FQN = new bn_js_1.BN(1); -CompactAddressObject.TYPE_I_ADDRESS = new bn_js_1.BN(2); -CompactAddressObject.TYPE_X_ADDRESS = new bn_js_1.BN(3); diff --git a/dist/vdxf/classes/CompactIdAddressObject.d.ts b/dist/vdxf/classes/CompactIdAddressObject.d.ts deleted file mode 100644 index 7bf7fd43..00000000 --- a/dist/vdxf/classes/CompactIdAddressObject.d.ts +++ /dev/null @@ -1,54 +0,0 @@ -/** - * CompactIdentityObject - Class representing an id in the smallest possible format - * - * This class is used to represent an identity or address in a compact format, allowing for efficient - * storage and transmission. The compact id can be represented either as a fully qualified name (FQN) - * or as an identity address (iaddress) or as an x address (tag/index). The class includes methods for serialization, deserialization, - * and validation of the compact id object. - */ -import { BigNumber } from '../../utils/types/BigNumber'; -import { SerializableEntity } from '../../utils/types/SerializableEntity'; -export interface CompactAddressObjectJson { - version: number; - type: number; - address: string; - rootsystemname: string; - namespace?: string; -} -export interface CompactAddressObjectInterface { - version?: BigNumber; - type: BigNumber; - address: string; - rootSystemName?: string; - nameSpace?: string; -} -export declare class CompactAddressObject implements SerializableEntity { - static VERSION_INVALID: import("bn.js"); - static FIRST_VERSION: import("bn.js"); - static LAST_VERSION: import("bn.js"); - static DEFAULT_VERSION: import("bn.js"); - static IS_FQN: import("bn.js"); - static IS_IDENTITYID: import("bn.js"); - static IS_X_ADDRESS: import("bn.js"); - version: BigNumber; - type: BigNumber; - address: string; - rootSystemName: string; - nameSpace: string; - allowedTypes: Array; - constructor(data?: CompactAddressObjectInterface, allowedTypes?: Array); - isFQN(): boolean; - isIaddress(): boolean; - isXaddress(): boolean; - isValid(): boolean; - checkValidity(): void; - toIAddress(): string; - toXAddress(): string; - static fromIAddress(iaddr: string): CompactAddressObject; - static fromXAddress(xaddr: string, nameSpace?: string): CompactAddressObject; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): CompactAddressObjectJson; - static fromJson(json: any): CompactAddressObject; -} diff --git a/dist/vdxf/classes/CompactIdAddressObject.js b/dist/vdxf/classes/CompactIdAddressObject.js deleted file mode 100644 index 8d41c6a7..00000000 --- a/dist/vdxf/classes/CompactIdAddressObject.js +++ /dev/null @@ -1,145 +0,0 @@ -"use strict"; -/** - * CompactIdentityObject - Class representing an id in the smallest possible format - * - * This class is used to represent an identity or address in a compact format, allowing for efficient - * storage and transmission. The compact id can be represented either as a fully qualified name (FQN) - * or as an identity address (iaddress) or as an x address (tag/index). The class includes methods for serialization, deserialization, - * and validation of the compact id object. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CompactAddressObject = void 0; -const bn_js_1 = require("bn.js"); -const bufferutils_1 = require("../../utils/bufferutils"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -const varuint_1 = require("../../utils/varuint"); -const address_1 = require("../../utils/address"); -const vdxf_1 = require("../../constants/vdxf"); -const pbaas_1 = require("../../constants/pbaas"); -class CompactAddressObject { - constructor(data, allowedTypes = [CompactAddressObject.TYPE_FQN.toString(), CompactAddressObject.TYPE_I_ADDRESS.toString()]) { - this.version = (data === null || data === void 0 ? void 0 : data.version) || new bn_js_1.BN(CompactAddressObject.DEFAULT_VERSION); - this.type = (data === null || data === void 0 ? void 0 : data.type) || new bn_js_1.BN(1); - this.address = (data === null || data === void 0 ? void 0 : data.address) || ''; - this.rootSystemName = (data === null || data === void 0 ? void 0 : data.rootSystemName) || 'VRSC'; - this.nameSpace = (data === null || data === void 0 ? void 0 : data.nameSpace) || (0, address_1.toIAddress)(this.rootSystemName, this.rootSystemName); - this.allowedTypes = allowedTypes; - this.checkValidity(); - } - isFQN() { - return (this.type.eq(CompactAddressObject.TYPE_FQN)); - } - isIaddress() { - return (this.type.eq(CompactAddressObject.TYPE_I_ADDRESS)); - } - isXaddress() { - return (this.type.eq(CompactAddressObject.IS_X_ADDRESS)); - } - isValid() { - return this.address != null && this.allowedTypes.includes(this.type.toString()); - } - checkValidity() { - if (!this.isValid()) - throw new Error("Invalid CompactAddressObject"); - } - toIAddress() { - this.checkValidity(); - if (this.isXaddress()) - throw new Error("Cannot convert I to X address"); - else if (this.isIaddress()) - return this.address; - else if (this.isFQN()) { - return (0, address_1.toIAddress)(this.address, this.rootSystemName); - } - else - throw new Error("Unknown type"); - } - toXAddress() { - this.checkValidity(); - if (this.isIaddress()) - throw new Error("Cannot convert X to I address"); - else if (this.isXaddress()) - return this.address; - else if (this.isFQN()) { - return (0, address_1.getDataKey)(this.address, this.nameSpace, (0, address_1.toIAddress)(this.rootSystemName, this.rootSystemName), vdxf_1.X_ADDR_VERSION).id; - } - else - throw new Error("Unknown type"); - } - static fromIAddress(iaddr) { - return new CompactAddressObject({ - address: iaddr, - type: CompactAddressObject.TYPE_I_ADDRESS - }); - } - static fromXAddress(xaddr, nameSpace = pbaas_1.DEFAULT_VERUS_CHAINID) { - return new CompactAddressObject({ - address: xaddr, - nameSpace: nameSpace, - type: CompactAddressObject.IS_X_ADDRESS - }); - } - getByteLength() { - let length = 0; - length += varuint_1.default.encodingLength(this.version.toNumber()); - length += varuint_1.default.encodingLength(this.type.toNumber()); - if (this.isIaddress() || this.isXaddress()) { - length += vdxf_1.HASH160_BYTE_LENGTH; // identityuint160 - } - else { - const addrLen = Buffer.from(this.address, 'utf8').byteLength; - length += varuint_1.default.encodingLength(addrLen) + addrLen; - } - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeCompactSize(this.version.toNumber()); - writer.writeCompactSize(this.type.toNumber()); - if (this.isIaddress() || this.isXaddress()) { - writer.writeSlice((0, address_1.fromBase58Check)(this.address).hash); - } - else { - writer.writeVarSlice(Buffer.from(this.address, 'utf8')); - } - return writer.buffer; - } - fromBuffer(buffer, offset) { - const reader = new BufferReader(buffer, offset); - this.version = new bn_js_1.BN(reader.readCompactSize()); - this.type = new bn_js_1.BN(reader.readCompactSize()); - if (this.isIaddress() || this.isXaddress()) { - this.address = (0, address_1.toBase58Check)(reader.readSlice(20), this.isIaddress() ? vdxf_1.I_ADDR_VERSION : vdxf_1.X_ADDR_VERSION); - } - else { - this.address = reader.readVarSlice().toString('utf8'); - } - this.checkValidity(); - return reader.offset; - } - toJson() { - return { - version: this.version.toNumber(), - type: this.type.toNumber(), - address: this.address, - rootsystemname: this.rootSystemName, - }; - } - static fromJson(json) { - const instance = new CompactAddressObject(); - instance.version = new bn_js_1.BN(json.version); - instance.type = new bn_js_1.BN(json.type); - instance.address = json.address; - instance.rootSystemName = json.rootsystemname; - instance.checkValidity(); - return instance; - } -} -exports.CompactAddressObject = CompactAddressObject; -CompactAddressObject.VERSION_INVALID = new bn_js_1.BN(0); -CompactAddressObject.FIRST_VERSION = new bn_js_1.BN(1); -CompactAddressObject.LAST_VERSION = new bn_js_1.BN(1); -CompactAddressObject.DEFAULT_VERSION = new bn_js_1.BN(1); -CompactAddressObject.TYPE_FQN = new bn_js_1.BN(1); -CompactAddressObject.TYPE_I_ADDRESS = new bn_js_1.BN(2); -CompactAddressObject.IS_X_ADDRESS = new bn_js_1.BN(3); diff --git a/dist/vdxf/classes/Context.d.ts b/dist/vdxf/classes/Context.d.ts deleted file mode 100644 index 8b21eda1..00000000 --- a/dist/vdxf/classes/Context.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { VDXFObject } from ".."; -export declare class Context extends VDXFObject { - kv: { - [key: string]: string; - }; - constructor(kv?: { - [key: string]: string; - }, vdxfkey?: string); - dataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer, offset?: number): number; - toJson(): { - kv: { - [key: string]: string; - }; - vdxfkey: string; - }; -} diff --git a/dist/vdxf/classes/Context.js b/dist/vdxf/classes/Context.js deleted file mode 100644 index 1dd72529..00000000 --- a/dist/vdxf/classes/Context.js +++ /dev/null @@ -1,63 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Context = void 0; -const __1 = require(".."); -const vdxf_1 = require("../../constants/vdxf"); -const address_1 = require("../../utils/address"); -const bufferutils_1 = require("../../utils/bufferutils"); -const varuint_1 = require("../../utils/varuint"); -class Context extends __1.VDXFObject { - constructor(kv = {}, vdxfkey = __1.LOGIN_CONSENT_CONTEXT_VDXF_KEY.vdxfid) { - super(vdxfkey); - this.kv = kv; - } - dataByteLength() { - let length = 0; - const keys = Object.keys(this.kv); - length += varuint_1.default.encodingLength(keys.length); - for (const key of keys) { - const value = this.kv[key]; - if (value != null) { - const valueBuf = Buffer.from(value, "utf-8"); - length += (0, address_1.fromBase58Check)(key).hash.length; - length += valueBuf.length + varuint_1.default.encodingLength(valueBuf.length); - } - } - return length; - } - toDataBuffer() { - const buffer = Buffer.alloc(this.dataByteLength()); - const writer = new bufferutils_1.default.BufferWriter(buffer); - const keys = Object.keys(this.kv); - writer.writeCompactSize(keys.length); - for (const key of Object.keys(this.kv)) { - const value = this.kv[key]; - const valueBuf = Buffer.from(value, "utf-8"); - writer.writeSlice((0, address_1.fromBase58Check)(key).hash); - writer.writeVarSlice(valueBuf); - } - return writer.buffer; - } - fromDataBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - const contextLength = reader.readCompactSize(); - if (contextLength == 0) { - this.kv = {}; - return reader.offset; - } - else { - const numKeys = reader.readCompactSize(); - for (let i = 0; i < numKeys; i++) { - this.kv[(0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION)] = reader.readVarSlice().toString("utf-8"); - } - return reader.offset; - } - } - toJson() { - return { - kv: this.kv, - vdxfkey: this.vdxfkey, - }; - } -} -exports.Context = Context; diff --git a/dist/vdxf/classes/Decision.d.ts b/dist/vdxf/classes/Decision.d.ts deleted file mode 100644 index 628ce099..00000000 --- a/dist/vdxf/classes/Decision.d.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { VDXFObject } from ".."; -import { Attestation } from "./Challenge"; -import { Context } from "./Context"; -import { Request, RequestInterface } from "./Request"; -export interface DecisionInterface { - decision_id: string; - request: RequestInterface; - created_at: number; - salt?: string; - skipped?: boolean; - context?: Context; - attestations?: Array; -} -export declare class Decision extends VDXFObject { - decision_id: string; - context?: Context; - request: Request; - created_at: number; - skipped?: boolean; - attestations: Array; - salt?: string; - constructor(decision?: DecisionInterface, vdxfkey?: string); - dataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer, offset?: number, readRequest?: boolean): number; - toJson(): { - vdxfkey: string; - decision_id: string; - context: { - kv: { - [key: string]: string; - }; - vdxfkey: string; - }; - created_at: number; - request: { - vdxfkey: string; - system_id: string; - signing_id: string; - signature: import("..").VerusIDSignatureJson; - challenge: { - vdxfkey: string; - challenge_id: string; - requested_access: import("./Challenge").RequestedPermission[]; - requested_access_audience: import("./Challenge").RequestedPermission[]; - subject: import("./Challenge").Subject[]; - provisioning_info: import("./Challenge").ProvisioningInfo[]; - alt_auth_factors: import("./Challenge").AltAuthFactor[]; - session_id: string; - attestations: Attestation[]; - redirect_uris: { - uri: string; - vdxfkey: string; - }[]; - created_at: number; - salt: string; - context: Context; - skip: boolean; - }; - }; - }; -} diff --git a/dist/vdxf/classes/Decision.js b/dist/vdxf/classes/Decision.js deleted file mode 100644 index 9482a9a3..00000000 --- a/dist/vdxf/classes/Decision.js +++ /dev/null @@ -1,113 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Decision = void 0; -const __1 = require(".."); -const bufferutils_1 = require("../../utils/bufferutils"); -const varuint_1 = require("../../utils/varuint"); -const Challenge_1 = require("./Challenge"); -const Context_1 = require("./Context"); -const Hash160_1 = require("./Hash160"); -const Request_1 = require("./Request"); -class Decision extends __1.VDXFObject { - constructor(decision = { - decision_id: "", - request: new Request_1.Request(), - created_at: 0, - }, vdxfkey = __1.LOGIN_CONSENT_DECISION_VDXF_KEY.vdxfid) { - super(vdxfkey); - this.decision_id = decision.decision_id; - this.request = new Request_1.Request(decision.request); - this.context = decision.context ? new Context_1.Context(decision.context.kv) : new Context_1.Context(); - this.created_at = decision.created_at; - this.attestations = decision.attestations; - this.salt = decision.salt; - this.skipped = decision.skipped ? true : false; - } - dataByteLength() { - let length = 0; - const _challenge_id = Hash160_1.Hash160.fromAddress(this.decision_id, true); - const _salt = this.salt - ? Hash160_1.Hash160.fromAddress(this.salt, true) - : Hash160_1.Hash160.getEmpty(); - const _request = this.request ? this.request : new Request_1.Request(); - const _context = this.context ? this.context : new Context_1.Context(); - const _attestations = []; - length += _challenge_id.byteLength(); - length += 8; // created_at - length += _salt.byteLength(); - if (this.vdxfkey === __1.LOGIN_CONSENT_DECISION_VDXF_KEY.vdxfid) { - length += 1; // skipped - length += varuint_1.default.encodingLength(_attestations.length); - } - length += _request.byteLength(); - length += _context.byteLength(); - return length; - } - toDataBuffer() { - const buffer = Buffer.alloc(this.dataByteLength()); - const writer = new bufferutils_1.default.BufferWriter(buffer); - const _decision_id = Hash160_1.Hash160.fromAddress(this.decision_id, true); - const _created_at = this.created_at; - const _salt = this.salt - ? Hash160_1.Hash160.fromAddress(this.salt, true) - : Hash160_1.Hash160.getEmpty(); - const _request = this.request ? this.request : new Request_1.Request(); - const _context = this.context ? this.context : new Context_1.Context(); - const _attestations = []; - writer.writeSlice(_decision_id.toBuffer()); - writer.writeUInt64(_created_at); - writer.writeSlice(_salt.toBuffer()); - if (this.vdxfkey === __1.LOGIN_CONSENT_DECISION_VDXF_KEY.vdxfid) { - writer.writeUInt8(this.skipped ? 1 : 0); - writer.writeArray(_attestations.map((x) => x.toBuffer())); - } - writer.writeSlice(_context.toBuffer()); - writer.writeSlice(_request.toBuffer()); - return writer.buffer; - } - fromDataBuffer(buffer, offset, readRequest = true) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - const decisionLength = reader.readCompactSize(); - if (decisionLength == 0) { - throw new Error("Cannot create decision from empty buffer"); - } - else { - const _decision_id = new Hash160_1.Hash160(); - reader.offset = _decision_id.fromBuffer(reader.buffer, true, reader.offset); - this.decision_id = _decision_id.toAddress(); - this.created_at = reader.readUInt64(); - const _salt = new Hash160_1.Hash160(); - reader.offset = _salt.fromBuffer(reader.buffer, true, reader.offset); - this.salt = _salt.toAddress(); - if (this.vdxfkey === __1.LOGIN_CONSENT_DECISION_VDXF_KEY.vdxfid) { - this.skipped = reader.readUInt8() === 1 ? true : false; - this.attestations = []; - const attestationsLength = reader.readCompactSize(); - for (let i = 0; i < attestationsLength; i++) { - const _att = new Challenge_1.Attestation(); - reader.offset = _att.fromBuffer(reader.buffer, reader.offset); - this.attestations.push(_att); - } - } - const _context = new Context_1.Context(); - reader.offset = _context.fromBuffer(reader.buffer, reader.offset); - this.context = _context; - if (readRequest) { - const _request = new Request_1.Request(); - reader.offset = _request.fromBuffer(reader.buffer, reader.offset); - this.request = _request; - } - } - return reader.offset; - } - toJson() { - return { - vdxfkey: this.vdxfkey, - decision_id: this.decision_id, - context: this.context.toJson(), - created_at: this.created_at, - request: this.request.toJson(), - }; - } -} -exports.Decision = Decision; diff --git a/dist/vdxf/classes/Hash160.d.ts b/dist/vdxf/classes/Hash160.d.ts deleted file mode 100644 index 9409f1bf..00000000 --- a/dist/vdxf/classes/Hash160.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { SerializableEntity } from "../../utils/types/SerializableEntity"; -export declare class Hash160 { - hash: Buffer; - version: number; - varlength: boolean; - constructor(hash?: Buffer, version?: number, varlength?: boolean); - static getEmpty(): Hash160; - static fromAddress(address: string, varlength?: boolean): Hash160; - toAddress(): string | null; - /** - * @deprecated The method has been replaced by getByteLength and will be removed in the future - */ - byteLength(): number; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, varlength?: boolean, offset?: number): number; - toJson(): { - hash: Buffer; - version: number; - }; -} -export declare class Hash160SerEnt extends Hash160 implements SerializableEntity { - constructor(hash?: Buffer, version?: number, varlength?: boolean); - fromBuffer(buffer: Buffer): number; - fromBuffer(buffer: Buffer, offset?: number, varlength?: boolean): number; -} diff --git a/dist/vdxf/classes/Hash160.js b/dist/vdxf/classes/Hash160.js deleted file mode 100644 index 925971a1..00000000 --- a/dist/vdxf/classes/Hash160.js +++ /dev/null @@ -1,84 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Hash160SerEnt = exports.Hash160 = void 0; -const vdxf_1 = require("../../constants/vdxf"); -const address_1 = require("../../utils/address"); -const bufferutils_1 = require("../../utils/bufferutils"); -const varuint_1 = require("../../utils/varuint"); -class Hash160 { - constructor(hash = Buffer.alloc(20), version = vdxf_1.I_ADDR_VERSION, varlength = false) { - this.hash = hash; - this.version = version; - this.varlength = varlength; - } - static getEmpty() { - return new Hash160(Buffer.alloc(0), 0, true); - } - static fromAddress(address, varlength = false) { - const base58 = (0, address_1.fromBase58Check)(address); - return new Hash160(base58.hash, base58.version, varlength); - } - toAddress() { - if (this.hash.length == 0) { - return null; - } - else - return (0, address_1.toBase58Check)(this.hash, this.version); - } - /** - * @deprecated The method has been replaced by getByteLength and will be removed in the future - */ - byteLength() { - return this.getByteLength(); - } - getByteLength() { - let length = 0; - if (this.varlength) { - length += varuint_1.default.encodingLength(this.hash.length); - length += this.hash.length; - } - else { - length += this.hash.length; - } - return length; - } - toBuffer() { - const buffer = Buffer.alloc(this.getByteLength()); - const writer = new bufferutils_1.default.BufferWriter(buffer); - if (this.varlength) { - writer.writeVarSlice(this.hash); - } - else { - writer.writeSlice(this.hash); - } - return writer.buffer; - } - fromBuffer(buffer, varlength = false, offset = 0) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - if (varlength) { - this.hash = reader.readVarSlice(); - } - else { - this.hash = reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH); - } - this.version = vdxf_1.I_ADDR_VERSION; - this.varlength = varlength; - return reader.offset; - } - toJson() { - return { - hash: this.hash, - version: this.version, - }; - } -} -exports.Hash160 = Hash160; -class Hash160SerEnt extends Hash160 { - constructor(hash = Buffer.alloc(20), version = vdxf_1.I_ADDR_VERSION, varlength = false) { - super(hash, version, varlength); - } - fromBuffer(buffer, offset, varlength) { - return super.fromBuffer(buffer, varlength, offset); - } -} -exports.Hash160SerEnt = Hash160SerEnt; diff --git a/dist/vdxf/classes/PersonalProfile.d.ts b/dist/vdxf/classes/PersonalProfile.d.ts deleted file mode 100644 index 6b99a845..00000000 --- a/dist/vdxf/classes/PersonalProfile.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { VDXFObject } from ".."; -export declare class DataCategory extends VDXFObject { - data: Array; - category: string; - details: string; - constructor(vdxfid?: string, data?: Array, category?: string, details?: string); -} diff --git a/dist/vdxf/classes/PersonalProfile.js b/dist/vdxf/classes/PersonalProfile.js deleted file mode 100644 index 1deec6a2..00000000 --- a/dist/vdxf/classes/PersonalProfile.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DataCategory = void 0; -const __1 = require(".."); -class DataCategory extends __1.VDXFObject { - constructor(vdxfid = "", data, category, details) { - super(vdxfid); - this.data = data || []; - this.category = category || ""; - this.details = details || ""; - } -} -exports.DataCategory = DataCategory; diff --git a/dist/vdxf/classes/Request.d.ts b/dist/vdxf/classes/Request.d.ts deleted file mode 100644 index 41505f65..00000000 --- a/dist/vdxf/classes/Request.d.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { VDXFObject, VerusIDSignature, VerusIDSignatureInterface } from "../"; -import { Challenge, ChallengeInterface } from "./Challenge"; -export interface RequestInterface { - system_id: string; - signing_id: string; - signature?: VerusIDSignatureInterface; - challenge: ChallengeInterface; -} -export declare class Request extends VDXFObject { - system_id: string; - signing_id: string; - signature?: VerusIDSignature; - challenge: Challenge; - constructor(request?: RequestInterface, vdxfkey?: string); - getChallengeHash(signedBlockheight: number, signatureVersion?: number): Buffer; - toJson(): { - vdxfkey: string; - system_id: string; - signing_id: string; - signature: import("../").VerusIDSignatureJson; - challenge: { - vdxfkey: string; - challenge_id: string; - requested_access: import("./Challenge").RequestedPermission[]; - requested_access_audience: import("./Challenge").RequestedPermission[]; - subject: import("./Challenge").Subject[]; - provisioning_info: import("./Challenge").ProvisioningInfo[]; - alt_auth_factors: import("./Challenge").AltAuthFactor[]; - session_id: string; - attestations: import("./Challenge").Attestation[]; - redirect_uris: { - uri: string; - vdxfkey: string; - }[]; - created_at: number; - salt: string; - context: import("./Context").Context; - skip: boolean; - }; - }; - protected _dataByteLength(signer?: string): number; - protected _toDataBuffer(signer?: string): Buffer; - dataByteLength(): number; - toDataBuffer(): Buffer; - protected _fromDataBuffer(buffer: Buffer, offset?: number): number; - fromDataBuffer(buffer: Buffer, offset?: number): number; - toWalletDeeplinkUri(): string; - static fromWalletDeeplinkUri(uri: string): Request; - toQrString(): string; - static fromQrString(qrstring: string): Request; -} diff --git a/dist/vdxf/classes/Request.js b/dist/vdxf/classes/Request.js deleted file mode 100644 index 31549e44..00000000 --- a/dist/vdxf/classes/Request.js +++ /dev/null @@ -1,143 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Request = void 0; -const __1 = require("../"); -const keys_1 = require("../keys"); -const Challenge_1 = require("./Challenge"); -const Hash160_1 = require("./Hash160"); -const bufferutils_1 = require("../../utils/bufferutils"); -const vdxf_1 = require("../../constants/vdxf"); -const address_1 = require("../../utils/address"); -const createHash = require("create-hash"); -const base64url_1 = require("base64url"); -class Request extends __1.VDXFObject { - constructor(request = { - system_id: "", - signing_id: "", - challenge: new Challenge_1.Challenge(), - }, vdxfkey = __1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid) { - super(vdxfkey); - this.system_id = request.system_id; - this.signing_id = request.signing_id; - this.signature = request.signature - ? new __1.VerusIDSignature(request.signature, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY) - : undefined; - this.challenge = new Challenge_1.Challenge(request.challenge); - } - getChallengeHash(signedBlockheight, signatureVersion = 2) { - var heightBufferWriter = new bufferutils_1.default.BufferWriter(Buffer.allocUnsafe(4)); - heightBufferWriter.writeUInt32(signedBlockheight); - if (signatureVersion === 1) { - return createHash("sha256") - .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) - .update((0, address_1.fromBase58Check)(this.system_id).hash) - .update(heightBufferWriter.buffer) - .update((0, address_1.fromBase58Check)(this.signing_id).hash) - .update(this.challenge.toSha256()) - .digest(); - } - else { - return createHash("sha256") - .update((0, address_1.fromBase58Check)(this.system_id).hash) - .update(heightBufferWriter.buffer) - .update((0, address_1.fromBase58Check)(this.signing_id).hash) - .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) - .update(this.challenge.toSha256()) - .digest(); - } - } - toJson() { - return { - vdxfkey: this.vdxfkey, - system_id: this.system_id, - signing_id: this.signing_id, - signature: this.signature ? this.signature.toJson() : this.signature, - challenge: this.challenge.toJson(), - }; - } - _dataByteLength(signer = this.signing_id) { - let length = 0; - const _signing_id = Hash160_1.Hash160.fromAddress(signer); - const _signature = this.signature - ? this.signature - : new __1.VerusIDSignature({ signature: "" }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY); - if (this.vdxfkey === __1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid) { - const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); - length += _system_id.byteLength(); - } - length += _signing_id.byteLength(); - length += _signature.byteLength(); - length += this.challenge.byteLength(); - return length; - } - _toDataBuffer(signer = this.signing_id) { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.dataByteLength())); - const _signing_id = Hash160_1.Hash160.fromAddress(signer); - const _signature = this.signature - ? this.signature - : new __1.VerusIDSignature({ signature: "" }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY); - if (this.vdxfkey === __1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid) { - const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); - writer.writeSlice(_system_id.toBuffer()); - } - writer.writeSlice(_signing_id.toBuffer()); - writer.writeSlice(_signature.toBuffer()); - writer.writeSlice(this.challenge.toBuffer()); - return writer.buffer; - } - dataByteLength() { - return this._dataByteLength(); - } - toDataBuffer() { - return this._toDataBuffer(); - } - _fromDataBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - const reqLength = reader.readCompactSize(); - if (reqLength == 0) { - throw new Error("Cannot create request from empty buffer"); - } - else { - if (this.vdxfkey === __1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid) { - this.system_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - } - this.signing_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), this.vdxfkey === __1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid - ? vdxf_1.I_ADDR_VERSION - : vdxf_1.R_ADDR_VERSION); - const _sig = new __1.VerusIDSignature(); - reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); - this.signature = _sig; - if (this.vdxfkey === __1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid) { - const _challenge = new Challenge_1.Challenge(); - reader.offset = _challenge.fromBuffer(reader.buffer, reader.offset); - this.challenge = _challenge; - } - } - return reader.offset; - } - fromDataBuffer(buffer, offset) { - return this._fromDataBuffer(buffer, offset); - } - toWalletDeeplinkUri() { - if (this.signature == null) - throw new Error("Request must be signed before it can be used as a deep link"); - return `${__1.WALLET_VDXF_KEY.vdxfid.toLowerCase()}://x-callback-url/${__1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid}/?${__1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid}=${this.toString()}`; - } - static fromWalletDeeplinkUri(uri) { - const split = uri.split(`${__1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid}=`); - const req = new Request(); - req.fromBuffer(base64url_1.default.toBuffer(split[1])); - return req; - } - toQrString() { - if (this.signature == null) - throw new Error("Request must be signed before it can be used as a deep link"); - return this.toString(true); - } - static fromQrString(qrstring) { - const req = new Request(); - req.fromBuffer(base64url_1.default.toBuffer(qrstring)); - return req; - } -} -exports.Request = Request; diff --git a/dist/vdxf/classes/Response.d.ts b/dist/vdxf/classes/Response.d.ts deleted file mode 100644 index 6b0a1c5b..00000000 --- a/dist/vdxf/classes/Response.d.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Decision, DecisionInterface } from "./Decision"; -import { VDXFObject, VerusIDSignature, VerusIDSignatureInterface } from "../"; -export interface ResponseInterface { - system_id: string; - signing_id: string; - signature?: VerusIDSignatureInterface; - decision: DecisionInterface; -} -export declare class Response extends VDXFObject { - system_id: string; - signing_id: string; - signature?: VerusIDSignature; - decision: Decision; - constructor(response?: ResponseInterface, vdxfkey?: string); - getDecisionHash(signedBlockheight: number, signatureVersion?: number): Buffer; - dataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer, offset?: number): number; - toJson(): { - vdxfkey: string; - system_id: string; - signature: VerusIDSignature; - signing_id: string; - decision: { - vdxfkey: string; - decision_id: string; - context: { - kv: { - [key: string]: string; - }; - vdxfkey: string; - }; - created_at: number; - request: { - vdxfkey: string; - system_id: string; - signing_id: string; - signature: import("../").VerusIDSignatureJson; - challenge: { - vdxfkey: string; - challenge_id: string; - requested_access: import("./Challenge").RequestedPermission[]; - requested_access_audience: import("./Challenge").RequestedPermission[]; - subject: import("./Challenge").Subject[]; - provisioning_info: import("./Challenge").ProvisioningInfo[]; - alt_auth_factors: import("./Challenge").AltAuthFactor[]; - session_id: string; - attestations: import("./Challenge").Attestation[]; - redirect_uris: { - uri: string; - vdxfkey: string; - }[]; - created_at: number; - salt: string; - context: import("./Context").Context; - skip: boolean; - }; - }; - }; - }; -} diff --git a/dist/vdxf/classes/Response.js b/dist/vdxf/classes/Response.js deleted file mode 100644 index 5547c5a4..00000000 --- a/dist/vdxf/classes/Response.js +++ /dev/null @@ -1,104 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Response = void 0; -const Decision_1 = require("./Decision"); -const __1 = require("../"); -const keys_1 = require("../keys"); -const Hash160_1 = require("./Hash160"); -const bufferutils_1 = require("../../utils/bufferutils"); -const vdxf_1 = require("../../constants/vdxf"); -const address_1 = require("../../utils/address"); -const createHash = require("create-hash"); -class Response extends __1.VDXFObject { - constructor(response = { - system_id: "", - signing_id: "", - decision: new Decision_1.Decision(), - }, vdxfkey = __1.LOGIN_CONSENT_RESPONSE_VDXF_KEY.vdxfid) { - super(vdxfkey); - this.system_id = response.system_id; - this.signing_id = response.signing_id; - this.decision = new Decision_1.Decision(response.decision); - if (response.signature) { - this.signature = new __1.VerusIDSignature(response.signature, keys_1.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY); - } - } - getDecisionHash(signedBlockheight, signatureVersion = 2) { - var heightBufferWriter = new bufferutils_1.default.BufferWriter(Buffer.allocUnsafe(4)); - heightBufferWriter.writeUInt32(signedBlockheight); - if (signatureVersion === 1) { - return createHash("sha256") - .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) - .update((0, address_1.fromBase58Check)(this.system_id).hash) - .update(heightBufferWriter.buffer) - .update((0, address_1.fromBase58Check)(this.signing_id).hash) - .update(this.decision.toSha256()) - .digest(); - } - else { - return createHash("sha256") - .update((0, address_1.fromBase58Check)(this.system_id).hash) - .update(heightBufferWriter.buffer) - .update((0, address_1.fromBase58Check)(this.signing_id).hash) - .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) - .update(this.decision.toSha256()) - .digest(); - } - } - dataByteLength() { - let length = 0; - const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); - const _signing_id = Hash160_1.Hash160.fromAddress(this.signing_id); - const _signature = this.signature - ? this.signature - : new __1.VerusIDSignature({ signature: "" }, keys_1.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY); - length += _system_id.byteLength(); - length += _signing_id.byteLength(); - length += _signature.byteLength(); - length += this.decision.byteLength(); - return length; - } - toDataBuffer() { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.dataByteLength())); - const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); - const _signing_id = Hash160_1.Hash160.fromAddress(this.signing_id); - const _signature = this.signature - ? this.signature - : new __1.VerusIDSignature({ signature: "" }, keys_1.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY); - writer.writeSlice(_system_id.toBuffer()); - writer.writeSlice(_signing_id.toBuffer()); - writer.writeSlice(_signature.toBuffer()); - writer.writeSlice(this.decision.toBuffer()); - return writer.buffer; - } - fromDataBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - const reqLength = reader.readCompactSize(); - if (reqLength == 0) { - throw new Error("Cannot create request from empty buffer"); - } - else { - this.system_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - this.signing_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - const _sig = new __1.VerusIDSignature(); - reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); - this.signature = _sig; - if (this.vdxfkey === __1.LOGIN_CONSENT_RESPONSE_VDXF_KEY.vdxfid) { - const _decision = new Decision_1.Decision(); - reader.offset = _decision.fromBuffer(reader.buffer, reader.offset); - this.decision = _decision; - } - } - return reader.offset; - } - toJson() { - return { - vdxfkey: this.vdxfkey, - system_id: this.system_id, - signature: this.signature, - signing_id: this.signing_id, - decision: this.decision.toJson(), - }; - } -} -exports.Response = Response; diff --git a/dist/vdxf/classes/ResponseUri.d.ts b/dist/vdxf/classes/ResponseUri.d.ts deleted file mode 100644 index 0ba995f8..00000000 --- a/dist/vdxf/classes/ResponseUri.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { BigNumber } from "../../utils/types/BigNumber"; -import { SerializableEntity } from "../../utils/types/SerializableEntity"; -export type ResponseURIJson = { - type: string; - uri: string; -}; -export declare class ResponseURI implements SerializableEntity { - uri: Buffer; - type: BigNumber; - static TYPE_INVALID: import("bn.js"); - static TYPE_REDIRECT: import("bn.js"); - static TYPE_POST: import("bn.js"); - constructor(data?: { - uri?: Buffer; - type?: BigNumber; - }); - getUriString(): string; - static fromUriString(str: string, type?: BigNumber): ResponseURI; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): ResponseURIJson; - static fromJson(json: ResponseURIJson): ResponseURI; -} diff --git a/dist/vdxf/classes/ResponseUri.js b/dist/vdxf/classes/ResponseUri.js deleted file mode 100644 index 16810a0e..00000000 --- a/dist/vdxf/classes/ResponseUri.js +++ /dev/null @@ -1,62 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ResponseURI = void 0; -const bn_js_1 = require("bn.js"); -const varuint_1 = require("../../utils/varuint"); -const bufferutils_1 = require("../../utils/bufferutils"); -class ResponseURI { - // TODO: Add TYPE_Z_ADDR_REF where response is encrypted and sent to encoded sapling address, - // with optional amount specified - constructor(data) { - if (data) { - if (data.uri != null) { - this.uri = data.uri; - } - if (data.type != null) { - this.type = data.type; - } - } - } - getUriString() { - return this.uri.toString('utf-8'); - } - static fromUriString(str, type = ResponseURI.TYPE_REDIRECT) { - return new ResponseURI({ uri: Buffer.from(str, 'utf-8'), type }); - } - getByteLength() { - let length = 0; - length += varuint_1.default.encodingLength(this.type.toNumber()); - let uriBufLen = this.uri.length; - length += varuint_1.default.encodingLength(uriBufLen); - length += uriBufLen; - return length; - } - toBuffer() { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeCompactSize(this.type.toNumber()); - writer.writeVarSlice(this.uri); - return writer.buffer; - } - fromBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - this.type = new bn_js_1.BN(reader.readCompactSize()); - this.uri = reader.readVarSlice(); - return reader.offset; - } - toJson() { - return { - type: this.type.toString(10), - uri: this.getUriString() - }; - } - static fromJson(json) { - return new ResponseURI({ - type: new bn_js_1.BN(json.type, 10), - uri: Buffer.from(json.uri, 'utf-8') - }); - } -} -exports.ResponseURI = ResponseURI; -ResponseURI.TYPE_INVALID = new bn_js_1.BN(0, 10); -ResponseURI.TYPE_REDIRECT = new bn_js_1.BN(1, 10); -ResponseURI.TYPE_POST = new bn_js_1.BN(2, 10); diff --git a/dist/vdxf/classes/SaltedData.d.ts b/dist/vdxf/classes/SaltedData.d.ts deleted file mode 100644 index cdceda0d..00000000 --- a/dist/vdxf/classes/SaltedData.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { VDXFData } from '../../'; -export declare class SaltedData extends VDXFData { - salt: Buffer; - static VERSION_INVALID: import("bn.js"); - static FIRST_VERSION: import("bn.js"); - static LAST_VERSION: import("bn.js"); - static DEFAULT_VERSION: import("bn.js"); - constructor(data?: Buffer, salt?: Buffer); - static fromJson(data: any): SaltedData; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): any; - getHash(hw: (data: Buffer) => Buffer): Buffer; -} diff --git a/dist/vdxf/classes/SaltedData.js b/dist/vdxf/classes/SaltedData.js deleted file mode 100644 index 3c08d231..00000000 --- a/dist/vdxf/classes/SaltedData.js +++ /dev/null @@ -1,81 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SaltedData = void 0; -const varint_1 = require("../../utils/varint"); -const varuint_1 = require("../../utils/varuint"); -const address_1 = require("../../utils/address"); -const bufferutils_1 = require("../../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const vdxf_1 = require("../../constants/vdxf"); -const __1 = require("../../"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -const createHash = require("create-hash"); -const vdxfdatakeys_1 = require("../vdxfdatakeys"); -class SaltedData extends __1.VDXFData { - constructor(data, salt = Buffer.alloc(0)) { - super(data); - if (salt.length != 0) { - this.salt = salt; - } - this.vdxfkey = vdxfdatakeys_1.SaltedDataKey.vdxfid; - } - static fromJson(data) { - const saltedData = new SaltedData(); - if (data) { - if (data.version) { - saltedData.version = new bn_js_1.BN(data.version); - } - else { - saltedData.version = SaltedData.DEFAULT_VERSION; - } - if (data.salt) - saltedData.salt = Buffer.from(data.salt, 'hex'); - if (data.data) - saltedData.data = Buffer.from(data.data, 'hex'); - if (data.key) - saltedData.vdxfkey = data.key; - } - return saltedData; - } - getByteLength() { - let byteLength = 0; - byteLength += vdxf_1.HASH160_BYTE_LENGTH; - byteLength += varint_1.default.encodingLength(this.version); - byteLength += varuint_1.default.encodingLength(this.data.length + this.salt.length); - byteLength += this.data.length + this.salt.length; - return byteLength; - } - toBuffer() { - const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); - bufferWriter.writeSlice((0, address_1.fromBase58Check)(this.vdxfkey).hash); - bufferWriter.writeVarInt(this.version); - bufferWriter.writeVarSlice(Buffer.concat([this.data, this.salt])); - return bufferWriter.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.vdxfkey = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - this.version = reader.readVarInt(); - this.data = reader.readVarSlice(); - this.salt = this.data.slice(this.data.length - 32); - this.data = this.data.slice(0, this.data.length - 32); - return reader.offset; - } - toJson() { - return { - version: this.version.toString(), - key: this.vdxfkey, - data: this.data.toString('hex'), - salt: this.salt.toString('hex') - }; - } - getHash(hw) { - const hash = hw(Buffer.concat([this.data, this.salt])); - return hash; - } -} -exports.SaltedData = SaltedData; -SaltedData.VERSION_INVALID = new bn_js_1.BN(0); -SaltedData.FIRST_VERSION = new bn_js_1.BN(1); -SaltedData.LAST_VERSION = new bn_js_1.BN(1); -SaltedData.DEFAULT_VERSION = new bn_js_1.BN(1); diff --git a/dist/vdxf/classes/VerifiableSignatureData.d.ts b/dist/vdxf/classes/VerifiableSignatureData.d.ts deleted file mode 100644 index 591b24e2..00000000 --- a/dist/vdxf/classes/VerifiableSignatureData.d.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { BigNumber } from '../../utils/types/BigNumber'; -import { SerializableEntity } from '../../utils/types/SerializableEntity'; -import { CompactAddressObject, CompactAddressObjectJson } from './CompactAddressObject'; -import { SignatureData, SignatureJsonDataInterface } from '../../pbaas'; -export interface VerifiableSignatureDataJson { - version: number; - flags: number; - signatureversion: number; - hashtype: number; - systemid: CompactAddressObjectJson; - identityid: CompactAddressObjectJson; - vdxfkeys?: Array; - vdxfkeynames?: Array; - boundhashes?: Array; - statements?: Array; - signature: string; -} -export interface VerifiableSignatureDataInterface { - version?: BigNumber; - flags?: BigNumber; - signatureVersion?: BigNumber; - hashType?: BigNumber; - systemID?: CompactAddressObject; - identityID: CompactAddressObject; - vdxfKeys?: Array; - vdxfKeyNames?: Array; - boundHashes?: Array; - statements?: Array; - signatureAsVch?: Buffer; -} -export interface CliSignatureData { - signaturedata: SignatureJsonDataInterface; - system: string; - systemid: string; - hashtype: string; - hash: string; - identity: string; - canonicalname: string; - address: string; - signatureheight: number; - signature: string; - signatureversion: number; - vdxfkeys?: Array; - vdxfkeynames?: Array; - boundhashes?: Array; -} -export declare class VerifiableSignatureData implements SerializableEntity { - version: BigNumber; - flags: BigNumber; - signatureVersion: BigNumber; - hashType: BigNumber; - identityID: CompactAddressObject; - systemID: CompactAddressObject; - vdxfKeys?: Array; - vdxfKeyNames?: Array; - boundHashes?: Array; - statements?: Array; - signatureAsVch: Buffer; - static VERSION_INVALID: import("bn.js"); - static FIRST_VERSION: import("bn.js"); - static LAST_VERSION: import("bn.js"); - static DEFAULT_VERSION: import("bn.js"); - static TYPE_VERUSID_DEFAULT: import("bn.js"); - static FLAG_HAS_VDXF_KEYS: import("bn.js"); - static FLAG_HAS_VDXF_KEY_NAMES: import("bn.js"); - static FLAG_HAS_BOUND_HASHES: import("bn.js"); - static FLAG_HAS_STATEMENTS: import("bn.js"); - constructor(data?: VerifiableSignatureDataInterface); - private hasFlag; - private setFlag; - hasVdxfKeys(): boolean; - hasVdxfKeyNames(): boolean; - hasBoundHashes(): boolean; - hasStatements(): boolean; - setHasVdxfKeys(): void; - setHasVdxfKeyNames(): void; - setHasBoundHashes(): void; - setHasStatements(): void; - calcFlags(): BigNumber; - setFlags(): void; - private getBufferEncodingLength; - private getExtraHashDataByteLength; - private getExtraHashData; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - getIdentityHash(height: number, sigHash: Buffer): Buffer; - toSignatureData(sigHash: Buffer): SignatureData; - toJson(): VerifiableSignatureDataJson; - static fromJson(json: VerifiableSignatureDataJson): VerifiableSignatureData; - static fromCLIJson(json: CliSignatureData, rootSystemName?: string): VerifiableSignatureData; -} diff --git a/dist/vdxf/classes/VerifiableSignatureData.js b/dist/vdxf/classes/VerifiableSignatureData.js deleted file mode 100644 index 2c899946..00000000 --- a/dist/vdxf/classes/VerifiableSignatureData.js +++ /dev/null @@ -1,324 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VerifiableSignatureData = void 0; -const varuint_1 = require("../../utils/varuint"); -const address_1 = require("../../utils/address"); -const bufferutils_1 = require("../../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const vdxf_1 = require("../../constants/vdxf"); -const DataDescriptor_1 = require("../../pbaas/DataDescriptor"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -const createHash = require("create-hash"); -const vdxf_2 = require("../../constants/vdxf"); -const CompactAddressObject_1 = require("./CompactAddressObject"); -const pbaas_1 = require("../../constants/pbaas"); -const varint_1 = require("../../utils/varint"); -const pbaas_2 = require("../../pbaas"); -class VerifiableSignatureData { - constructor(data) { - this.version = data && data.version ? data.version : new bn_js_1.BN(0); - this.flags = data && data.flags ? data.flags : new bn_js_1.BN(0); - this.signatureVersion = data && data.signatureVersion ? data.signatureVersion : new bn_js_1.BN(2, 10); - this.systemID = data && data.systemID ? data.systemID : new CompactAddressObject_1.CompactAddressObject({ type: CompactAddressObject_1.CompactAddressObject.TYPE_FQN, address: pbaas_1.DEFAULT_VERUS_CHAINNAME }); - this.hashType = data && data.hashType ? data.hashType : pbaas_1.HASH_TYPE_SHA256; - this.identityID = data ? data.identityID : undefined; - this.vdxfKeys = data ? data.vdxfKeys : undefined; - this.vdxfKeyNames = data ? data.vdxfKeyNames : undefined; - this.boundHashes = data ? data.boundHashes : undefined; - this.statements = data ? data.statements : undefined; - this.signatureAsVch = data && data.signatureAsVch ? data.signatureAsVch : Buffer.alloc(0); - this.setFlags(); - } - hasFlag(flag) { - return !!(this.flags.and(flag).toNumber()); - } - setFlag(flag) { - this.flags = this.flags.or(flag); - } - hasVdxfKeys() { - return this.hasFlag(VerifiableSignatureData.FLAG_HAS_VDXF_KEYS); - } - hasVdxfKeyNames() { - return this.hasFlag(VerifiableSignatureData.FLAG_HAS_VDXF_KEY_NAMES); - } - hasBoundHashes() { - return this.hasFlag(VerifiableSignatureData.FLAG_HAS_BOUND_HASHES); - } - hasStatements() { - return this.hasFlag(VerifiableSignatureData.FLAG_HAS_STATEMENTS); - } - setHasVdxfKeys() { - this.setFlag(VerifiableSignatureData.FLAG_HAS_VDXF_KEYS); - } - setHasVdxfKeyNames() { - this.setFlag(VerifiableSignatureData.FLAG_HAS_VDXF_KEY_NAMES); - } - setHasBoundHashes() { - this.setFlag(VerifiableSignatureData.FLAG_HAS_BOUND_HASHES); - } - setHasStatements() { - this.setFlag(VerifiableSignatureData.FLAG_HAS_STATEMENTS); - } - calcFlags() { - let flags = new bn_js_1.BN(0); - if (this.hasVdxfKeys()) - flags = flags.or(VerifiableSignatureData.FLAG_HAS_VDXF_KEYS); - if (this.hasVdxfKeyNames()) - flags = flags.or(VerifiableSignatureData.FLAG_HAS_VDXF_KEY_NAMES); - if (this.hasBoundHashes()) - flags = flags.or(VerifiableSignatureData.FLAG_HAS_BOUND_HASHES); - if (this.hasStatements()) - flags = flags.or(VerifiableSignatureData.FLAG_HAS_STATEMENTS); - return flags; - } - setFlags() { - if (this.vdxfKeys) - this.setHasVdxfKeys(); - if (this.vdxfKeyNames) - this.setHasVdxfKeyNames(); - if (this.boundHashes) - this.setHasBoundHashes(); - if (this.statements) - this.setHasStatements(); - } - getBufferEncodingLength(buf) { - const bufLen = buf.byteLength; - return varuint_1.default.encodingLength(bufLen) + bufLen; - } - getExtraHashDataByteLength() { - let byteLength = 0; - if (this.vdxfKeys && this.vdxfKeys.length > 0) { - byteLength += varuint_1.default.encodingLength(this.vdxfKeys.length); - byteLength += this.vdxfKeys.length * vdxf_1.HASH160_BYTE_LENGTH; - } - if (this.vdxfKeyNames && this.vdxfKeyNames.length > 0) { - byteLength += varuint_1.default.encodingLength(this.vdxfKeyNames.length); - for (const name of this.vdxfKeyNames) { - byteLength += this.getBufferEncodingLength(Buffer.from(name, 'utf8')); - } - } - if (this.boundHashes && this.boundHashes.length > 0) { - byteLength += varuint_1.default.encodingLength(this.boundHashes.length); - byteLength += this.boundHashes.length * vdxf_1.HASH256_BYTE_LENGTH; - } - return byteLength; - } - getExtraHashData() { - const byteLength = this.getExtraHashDataByteLength(); - if (byteLength === 0) { - return Buffer.alloc(0); - } - const bufferWriter = new BufferWriter(Buffer.alloc(byteLength)); - if (this.vdxfKeys && this.vdxfKeys.length > 0) { - // Sort vdxfKeys by their 20-byte buffer values before writing - const keyBuffers = this.vdxfKeys.map(x => (0, address_1.fromBase58Check)(x).hash); - const sortedBuffers = keyBuffers.sort(Buffer.compare); - bufferWriter.writeArray(sortedBuffers); - } - if (this.vdxfKeyNames && this.vdxfKeyNames.length > 0) { - // Sort vdxfKeyNames before writing - const sortedNames = [...this.vdxfKeyNames].sort(); - bufferWriter.writeVector(sortedNames.map(x => Buffer.from(x, 'utf8'))); - } - if (this.boundHashes && this.boundHashes.length > 0) { - // Sort boundHashes before writing - const sortedHashes = [...this.boundHashes].sort(Buffer.compare); - bufferWriter.writeArray(sortedHashes); - } - return bufferWriter.buffer; - } - getByteLength() { - let byteLength = 0; - byteLength += varint_1.default.encodingLength(this.version); - byteLength += varuint_1.default.encodingLength(this.flags.toNumber()); - byteLength += varuint_1.default.encodingLength(this.signatureVersion.toNumber()); - byteLength += varuint_1.default.encodingLength(this.hashType.toNumber()); - byteLength += this.systemID.getByteLength(); - byteLength += this.identityID.getByteLength(); - if (this.hasVdxfKeys()) { - byteLength += varuint_1.default.encodingLength(this.vdxfKeys.length); - for (const key of this.vdxfKeys) { - byteLength += vdxf_1.HASH160_BYTE_LENGTH; - } - } - if (this.hasVdxfKeyNames()) { - byteLength += varuint_1.default.encodingLength(this.vdxfKeyNames.length); - for (const key of this.vdxfKeyNames) { - byteLength += this.getBufferEncodingLength(Buffer.from(key, 'utf8')); - } - } - if (this.hasBoundHashes()) { - byteLength += varuint_1.default.encodingLength(this.boundHashes.length); - for (const hash of this.boundHashes) { - byteLength += this.getBufferEncodingLength(hash); - } - } - if (this.hasStatements()) { - byteLength += varuint_1.default.encodingLength(this.statements.length); - for (const statement of this.statements) { - byteLength += this.getBufferEncodingLength(statement); - } - } - byteLength += this.getBufferEncodingLength(this.signatureAsVch); - return byteLength; - } - toBuffer() { - const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); - bufferWriter.writeVarInt(this.version); - bufferWriter.writeCompactSize(this.flags.toNumber()); - bufferWriter.writeCompactSize(this.signatureVersion.toNumber()); - bufferWriter.writeCompactSize(this.hashType.toNumber()); - bufferWriter.writeSlice(this.systemID.toBuffer()); - bufferWriter.writeSlice(this.identityID.toBuffer()); - if (this.hasVdxfKeys()) { - bufferWriter.writeArray(this.vdxfKeys.map(x => (0, address_1.fromBase58Check)(x).hash)); - } - if (this.hasVdxfKeyNames()) { - bufferWriter.writeVector(this.vdxfKeyNames.map(x => Buffer.from(x, 'utf8'))); - } - if (this.hasBoundHashes()) { - bufferWriter.writeVector(this.boundHashes); - } - if (this.hasStatements()) { - bufferWriter.writeVector(this.statements); - } - bufferWriter.writeVarSlice(this.signatureAsVch); - return bufferWriter.buffer; - } - fromBuffer(buffer, offset = 0) { - const bufferReader = new BufferReader(buffer, offset); - this.version = bufferReader.readVarInt(); - this.flags = new bn_js_1.BN(bufferReader.readCompactSize()); - this.signatureVersion = new bn_js_1.BN(bufferReader.readCompactSize()); - this.hashType = new bn_js_1.BN(bufferReader.readCompactSize()); - this.systemID = new CompactAddressObject_1.CompactAddressObject(); - this.identityID = new CompactAddressObject_1.CompactAddressObject(); - bufferReader.offset = this.systemID.fromBuffer(bufferReader.buffer, bufferReader.offset); - bufferReader.offset = this.identityID.fromBuffer(bufferReader.buffer, bufferReader.offset); - if (this.hasVdxfKeys()) { - this.vdxfKeys = bufferReader.readArray(vdxf_1.HASH160_BYTE_LENGTH).map(x => (0, address_1.toBase58Check)(x, vdxf_1.I_ADDR_VERSION)); - } - if (this.hasVdxfKeyNames()) { - this.vdxfKeyNames = bufferReader.readVector().map((x) => x.toString('utf8')); - } - if (this.hasBoundHashes()) { - this.boundHashes = bufferReader.readVector(); - } - if (this.hasStatements()) { - this.statements = bufferReader.readVector(); - } - this.signatureAsVch = bufferReader.readVarSlice(); - return bufferReader.offset; - } - // To fully implement, refer to VerusCoin/src/pbaas/crosschainrpc.cpp line 337, IdentitySignatureHash - getIdentityHash(height, sigHash) { - var heightBuffer = Buffer.allocUnsafe(4); - heightBuffer.writeUInt32LE(height); - if (!this.hashType.eq(new bn_js_1.BN(DataDescriptor_1.EHashTypes.HASH_SHA256))) { - throw new Error("Only SHA256 hash type is currently supported."); - } - if (this.signatureVersion.eq(new bn_js_1.BN(0))) { - throw new Error("Invalid sig data version"); - } - else if (this.signatureVersion.eq(new bn_js_1.BN(1))) { - return createHash("sha256") - .update(vdxf_2.VERUS_DATA_SIGNATURE_PREFIX) - .update((0, address_1.fromBase58Check)(this.systemID.toIAddress()).hash) - .update(heightBuffer) - .update((0, address_1.fromBase58Check)(this.identityID.toIAddress()).hash) - .update(sigHash) - .digest(); - } - else if (this.signatureVersion.eq(new bn_js_1.BN(2))) { - const extraHashData = this.getExtraHashData(); - const hash = createHash("sha256"); - if (extraHashData.length > 0) { - hash.update(extraHashData); - } - return hash - .update((0, address_1.fromBase58Check)(this.systemID.toIAddress()).hash) - .update(heightBuffer) - .update((0, address_1.fromBase58Check)(this.identityID.toIAddress()).hash) - .update(vdxf_2.VERUS_DATA_SIGNATURE_PREFIX) - .update(sigHash) - .digest(); - } - else { - throw new Error("Unrecognized sig data version"); - } - } - toSignatureData(sigHash) { - return new pbaas_2.SignatureData({ - version: this.version, - system_ID: this.systemID.toIAddress(), - hash_type: this.hashType, - signature_hash: sigHash, - identity_ID: this.identityID.toIAddress(), - sig_type: pbaas_2.SignatureData.TYPE_VERUSID_DEFAULT, - vdxf_keys: this.vdxfKeys, - vdxf_key_names: this.vdxfKeyNames, - bound_hashes: this.boundHashes, - signature_as_vch: this.signatureAsVch - }); - } - toJson() { - var _a, _b; - const flags = this.calcFlags(); - return { - version: this.version.toNumber(), - flags: flags.toNumber(), - signatureversion: this.signatureVersion.toNumber(), - hashtype: this.hashType.toNumber(), - systemid: this.systemID.toJson(), - identityid: this.identityID.toJson(), - vdxfkeys: this.vdxfKeys, - vdxfkeynames: this.vdxfKeyNames, - boundhashes: (_a = this.boundHashes) === null || _a === void 0 ? void 0 : _a.map(x => x.toString('hex')), - statements: (_b = this.statements) === null || _b === void 0 ? void 0 : _b.map(x => x.toString('hex')), - signature: this.signatureAsVch.toString('hex') - }; - } - static fromJson(json) { - var _a, _b; - const instance = new VerifiableSignatureData(); - instance.version = new bn_js_1.BN(json.version); - instance.flags = new bn_js_1.BN(json.flags); - instance.signatureVersion = new bn_js_1.BN(json.signatureversion); - instance.hashType = new bn_js_1.BN(json.hashtype); - instance.systemID = CompactAddressObject_1.CompactAddressObject.fromJson(json.systemid); - instance.identityID = CompactAddressObject_1.CompactAddressObject.fromJson(json.identityid); - instance.vdxfKeys = json === null || json === void 0 ? void 0 : json.vdxfkeys; - instance.vdxfKeyNames = json === null || json === void 0 ? void 0 : json.vdxfkeynames; - instance.boundHashes = (_a = json.boundhashes) === null || _a === void 0 ? void 0 : _a.map(x => Buffer.from(x, 'hex')); - instance.statements = (_b = json.statements) === null || _b === void 0 ? void 0 : _b.map(x => Buffer.from(x, 'hex')); - instance.signatureAsVch = Buffer.from(json.signature, 'hex'); - return instance; - } - static fromCLIJson(json, rootSystemName = 'VRSC') { - var _a; - const instance = new VerifiableSignatureData(); - instance.version = new bn_js_1.BN(VerifiableSignatureData.TYPE_VERUSID_DEFAULT); - instance.hashType = new bn_js_1.BN(json.signaturedata.hashtype); - instance.signatureVersion = new bn_js_1.BN(json.signatureversion); //default Signature Version - instance.systemID = CompactAddressObject_1.CompactAddressObject.fromJson({ address: json.systemid, version: 1, type: CompactAddressObject_1.CompactAddressObject.TYPE_I_ADDRESS, rootSystemName }); - instance.identityID = CompactAddressObject_1.CompactAddressObject.fromJson({ address: json.address, version: 1, type: CompactAddressObject_1.CompactAddressObject.TYPE_I_ADDRESS, rootSystemName }); - // Set optional fields - instance.vdxfKeys = json.vdxfkeys; - instance.vdxfKeyNames = json.vdxfkeynames; - instance.boundHashes = (_a = json.boundhashes) === null || _a === void 0 ? void 0 : _a.map(x => Buffer.from(x, 'hex')); - // Store the full signature (from daemon in base64 format) - instance.signatureAsVch = Buffer.from(json.signature, 'base64'); - instance.setFlags(); - return instance; - } -} -exports.VerifiableSignatureData = VerifiableSignatureData; -VerifiableSignatureData.VERSION_INVALID = new bn_js_1.BN(0); -VerifiableSignatureData.FIRST_VERSION = new bn_js_1.BN(1); -VerifiableSignatureData.LAST_VERSION = new bn_js_1.BN(1); -VerifiableSignatureData.DEFAULT_VERSION = new bn_js_1.BN(1); -VerifiableSignatureData.TYPE_VERUSID_DEFAULT = new bn_js_1.BN(1); -VerifiableSignatureData.FLAG_HAS_VDXF_KEYS = new bn_js_1.BN(1); -VerifiableSignatureData.FLAG_HAS_VDXF_KEY_NAMES = new bn_js_1.BN(2); -VerifiableSignatureData.FLAG_HAS_BOUND_HASHES = new bn_js_1.BN(4); -VerifiableSignatureData.FLAG_HAS_STATEMENTS = new bn_js_1.BN(8); diff --git a/dist/vdxf/classes/Web/SignedSessionObject.d.ts b/dist/vdxf/classes/Web/SignedSessionObject.d.ts deleted file mode 100644 index ee8ac77b..00000000 --- a/dist/vdxf/classes/Web/SignedSessionObject.d.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { VDXFObject, VerusIDSignature, VerusIDSignatureInterface } from "../../"; -import { SignedSessionObjectData } from "./SignedSessionObjectData"; -export interface AuthorizedWebRequestInterface { - system_id: string; - signing_id: string; - signature?: VerusIDSignatureInterface; - data: SignedSessionObjectData; -} -export declare class SignedSessionObject extends VDXFObject { - system_id: string; - signing_id: string; - signature?: VerusIDSignature; - data: SignedSessionObjectData; - constructor(request?: AuthorizedWebRequestInterface); - getDataHash(signedBlockheight: number, signatureVersion?: number): Buffer; - toJson(): { - vdxfkey: string; - system_id: string; - signing_id: string; - signature: import("../../").VerusIDSignatureJson; - challenge: { - session_id: string; - timestamp_micro: number; - body: string; - }; - }; - protected _dataByteLength(signer?: string): number; - protected _toDataBuffer(signer?: string): Buffer; - dataByteLength(): number; - toDataBuffer(): Buffer; - protected _fromDataBuffer(buffer: Buffer, offset?: number): number; - fromDataBuffer(buffer: Buffer, offset?: number): number; - getHeaders(): { - "VDXF-Key": string; - "VDXF-Version": string; - "VerusID-Session-ID": string; - "VerusID-Timestamp-Micro": string; - "VerusID-Signature": string; - }; - static fromHttpRequest(headers: { - [key: string]: string; - }, body: string, system_id: string, signing_id: string): SignedSessionObject; -} diff --git a/dist/vdxf/classes/Web/SignedSessionObject.js b/dist/vdxf/classes/Web/SignedSessionObject.js deleted file mode 100644 index 426812dd..00000000 --- a/dist/vdxf/classes/Web/SignedSessionObject.js +++ /dev/null @@ -1,132 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SignedSessionObject = void 0; -const __1 = require("../../"); -const keys_1 = require("../../keys"); -const Hash160_1 = require("../Hash160"); -const bufferutils_1 = require("../../../utils/bufferutils"); -const vdxf_1 = require("../../../constants/vdxf"); -const address_1 = require("../../../utils/address"); -const createHash = require("create-hash"); -const SignedSessionObjectData_1 = require("./SignedSessionObjectData"); -class SignedSessionObject extends __1.VDXFObject { - constructor(request = { - system_id: "", - signing_id: "", - data: new SignedSessionObjectData_1.SignedSessionObjectData(), - }) { - super(keys_1.SIGNED_SESSION_OBJECT.vdxfid); - this.system_id = request.system_id; - this.signing_id = request.signing_id; - this.signature = request.signature - ? new __1.VerusIDSignature(request.signature, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY) - : undefined; - this.data = new SignedSessionObjectData_1.SignedSessionObjectData(request.data); - } - getDataHash(signedBlockheight, signatureVersion = 2) { - var heightBufferWriter = new bufferutils_1.default.BufferWriter(Buffer.allocUnsafe(4)); - heightBufferWriter.writeUInt32(signedBlockheight); - if (signatureVersion === 1) { - return createHash("sha256") - .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) - .update((0, address_1.fromBase58Check)(this.system_id).hash) - .update(heightBufferWriter.buffer) - .update((0, address_1.fromBase58Check)(this.signing_id).hash) - .update(this.data.toSha256()) - .digest(); - } - else { - return createHash("sha256") - .update((0, address_1.fromBase58Check)(this.system_id).hash) - .update(heightBufferWriter.buffer) - .update((0, address_1.fromBase58Check)(this.signing_id).hash) - .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) - .update(this.data.toSha256()) - .digest(); - } - } - toJson() { - return { - vdxfkey: this.vdxfkey, - system_id: this.system_id, - signing_id: this.signing_id, - signature: this.signature ? this.signature.toJson() : this.signature, - challenge: this.data.toJson(), - }; - } - _dataByteLength(signer = this.signing_id) { - let length = 0; - const _signing_id = Hash160_1.Hash160.fromAddress(signer); - const _signature = this.signature - ? this.signature - : new __1.VerusIDSignature({ signature: "" }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY); - const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); - length += _system_id.byteLength(); - length += _signing_id.byteLength(); - length += _signature.byteLength(); - length += this.data.byteLength(); - return length; - } - _toDataBuffer(signer = this.signing_id) { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.dataByteLength())); - const _signing_id = Hash160_1.Hash160.fromAddress(signer); - const _signature = this.signature - ? this.signature - : new __1.VerusIDSignature({ signature: "" }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY); - const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); - writer.writeSlice(_system_id.toBuffer()); - writer.writeSlice(_signing_id.toBuffer()); - writer.writeSlice(_signature.toBuffer()); - writer.writeSlice(this.data.toBuffer()); - return writer.buffer; - } - dataByteLength() { - return this._dataByteLength(); - } - toDataBuffer() { - return this._toDataBuffer(); - } - _fromDataBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - const reqLength = reader.readCompactSize(); - if (reqLength == 0) { - throw new Error("Cannot create signed session object from empty buffer"); - } - else { - this.system_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - this.signing_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - const _sig = new __1.VerusIDSignature(); - reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); - this.signature = _sig; - const _data = new SignedSessionObjectData_1.SignedSessionObjectData(); - reader.offset = _data.fromBuffer(reader.buffer, reader.offset); - this.data = _data; - } - return reader.offset; - } - fromDataBuffer(buffer, offset) { - return this._fromDataBuffer(buffer, offset); - } - getHeaders() { - return { - ['VDXF-Key']: this.vdxfkey, // VDXF key of signed session object (SSO), denoting that this is a SSO - ['VDXF-Version']: this.version.toString(), // SSO version - ['VerusID-Session-ID']: this.data.session_id, // Session ID of original response made - ['VerusID-Timestamp-Micro']: this.data.timestamp_micro.toString(), // Microsecond timestamp - ['VerusID-Signature']: this.signature.signature // Signature of this SSO serialized - }; - } - static fromHttpRequest(headers, body, system_id, signing_id) { - return new SignedSessionObject({ - system_id, - signing_id, - signature: new __1.VerusIDSignature({ signature: headers['VerusID-Signature'] }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY), - data: new SignedSessionObjectData_1.SignedSessionObjectData({ - session_id: headers['VerusID-Session-ID'], - timestamp_micro: Number(headers['VerusID-Timestamp-Micro']), - body - }) - }); - } -} -exports.SignedSessionObject = SignedSessionObject; diff --git a/dist/vdxf/classes/Web/SignedSessionObjectData.d.ts b/dist/vdxf/classes/Web/SignedSessionObjectData.d.ts deleted file mode 100644 index 20482829..00000000 --- a/dist/vdxf/classes/Web/SignedSessionObjectData.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { VDXFObject } from "../../"; -export declare class SignedSessionObjectData extends VDXFObject { - session_id: string; - timestamp_micro: number; - body: string; - constructor(data?: { - session_id?: string; - timestamp_micro?: number; - body?: string; - }); - dataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer, offset?: number): number; - toJson(): { - session_id: string; - timestamp_micro: number; - body: string; - }; -} diff --git a/dist/vdxf/classes/Web/SignedSessionObjectData.js b/dist/vdxf/classes/Web/SignedSessionObjectData.js deleted file mode 100644 index e9135693..00000000 --- a/dist/vdxf/classes/Web/SignedSessionObjectData.js +++ /dev/null @@ -1,67 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SignedSessionObjectData = void 0; -const __1 = require("../../"); -const bufferutils_1 = require("../../../utils/bufferutils"); -const varuint_1 = require("../../../utils/varuint"); -const Hash160_1 = require("../Hash160"); -class SignedSessionObjectData extends __1.VDXFObject { - constructor(data = { - session_id: "", - timestamp_micro: 0, - body: "" - }) { - super(__1.SIGNED_SESSION_OBJECT_DATA.vdxfid); - this.session_id = data.session_id; - if (isNaN(data.timestamp_micro)) { - this.timestamp_micro = 0; - } - else { - this.timestamp_micro = data.timestamp_micro; - } - this.body = data.body; - } - dataByteLength() { - let length = 0; - const _session_id = Hash160_1.Hash160.fromAddress(this.session_id, false); - const _body = Buffer.from(this.body, 'utf8'); - length += _session_id.byteLength(); - length += 8; // timestamp_micro - length += varuint_1.default.encodingLength(_body.length); - length += _body.length; - return length; - } - toDataBuffer() { - const buffer = Buffer.alloc(this.dataByteLength()); - const writer = new bufferutils_1.default.BufferWriter(buffer); - const _session_id = Hash160_1.Hash160.fromAddress(this.session_id, false); - const _body = Buffer.from(this.body, 'utf8'); - writer.writeSlice(_session_id.toBuffer()); - writer.writeUInt64(this.timestamp_micro); - writer.writeVarSlice(_body); - return writer.buffer; - } - fromDataBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - const length = reader.readCompactSize(); - if (length == 0) { - throw new Error("Cannot create signed session object data from empty buffer"); - } - else { - const _session_id = new Hash160_1.Hash160(); - reader.offset = _session_id.fromBuffer(reader.buffer, false, reader.offset); - this.session_id = _session_id.toAddress(); - this.timestamp_micro = reader.readUInt64(); - this.body = reader.readVarSlice().toString('utf-8'); - } - return reader.offset; - } - toJson() { - return { - session_id: this.session_id, - timestamp_micro: this.timestamp_micro, - body: this.body - }; - } -} -exports.SignedSessionObjectData = SignedSessionObjectData; diff --git a/dist/vdxf/classes/datapacket/DataPacketResponse.d.ts b/dist/vdxf/classes/datapacket/DataPacketResponse.d.ts deleted file mode 100644 index ab3cb927..00000000 --- a/dist/vdxf/classes/datapacket/DataPacketResponse.d.ts +++ /dev/null @@ -1,68 +0,0 @@ -/** - * DataPacketResponse - Class for providing structured responses to various request types - * - * This class serves as a universal response mechanism that can be used to reply to multiple - * types of requests. It packages response data within a DataDescriptor along with metadata - * for request tracking and timestamping. - * - * USAGE AS RESPONSE TO DIFFERENT REQUEST TYPES: - * - * 1. AppEncryptionRequestDetails Response: - * - The DataDescriptor 'data' field contains the encrypted derived seed - * - The requestID references the original AppEncryptionRequestDetails.requestID - * - Enables secure delivery of application-specific encrypted keys - * - * 2. UserDataRequestDetails Response: - * - The DataDescriptor 'data' field contains requested user data/attestations - * - The requestID references the original UserDataRequestDetails.requestID - * - Allows selective disclosure of personal information - * - * 3. UserSpecificDataPacketDetails Response: - * - The DataDescriptor 'data' field contains the response data or signed content - * - The requestID references the original UserSpecificDataPacketDetails.requestID - * - Supports bidirectional data exchange with signatures and statements - * - * REQUEST-RESPONSE CORRELATION: - * Each of the above request types includes its own requestID field. This response object's - * requestID field can be used to match responses back to their originating requests, enabling - * proper request-response correlation in asynchronous communication flows. - * - * GENERAL DATA REPLIES: - * This response format can also be used for other general data replies where: - * - Structured data needs to be transmitted via DataDescriptor - * - Request tracking through requestID is desired - * - Timestamp metadata (createdAt) is needed for the response - * - Response validation and integrity checking via SHA-256 is required - */ -import { BigNumber } from '../../../utils/types/BigNumber'; -import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { DataDescriptor, DataDescriptorJson } from '../../../pbaas'; -export interface DataResponseInterface { - flags?: BigNumber; - requestID?: string; - data: DataDescriptor; -} -export interface DataResponseJson { - flags?: number; - requestid?: string; - data: DataDescriptorJson; -} -export declare class DataPacketResponse implements SerializableEntity { - flags?: BigNumber; - requestID?: string; - data: DataDescriptor; - static RESPONSE_CONTAINS_REQUEST_ID: import("bn.js"); - constructor(data?: { - flags?: BigNumber; - requestID?: string; - data: DataDescriptor; - }); - containsRequestID(): boolean; - toggleContainsRequestID(): void; - toSha256(): Buffer; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): DataResponseJson; - static fromJson(json: DataResponseJson): DataPacketResponse; -} diff --git a/dist/vdxf/classes/datapacket/DataPacketResponse.js b/dist/vdxf/classes/datapacket/DataPacketResponse.js deleted file mode 100644 index a6beb887..00000000 --- a/dist/vdxf/classes/datapacket/DataPacketResponse.js +++ /dev/null @@ -1,112 +0,0 @@ -"use strict"; -/** - * DataPacketResponse - Class for providing structured responses to various request types - * - * This class serves as a universal response mechanism that can be used to reply to multiple - * types of requests. It packages response data within a DataDescriptor along with metadata - * for request tracking and timestamping. - * - * USAGE AS RESPONSE TO DIFFERENT REQUEST TYPES: - * - * 1. AppEncryptionRequestDetails Response: - * - The DataDescriptor 'data' field contains the encrypted derived seed - * - The requestID references the original AppEncryptionRequestDetails.requestID - * - Enables secure delivery of application-specific encrypted keys - * - * 2. UserDataRequestDetails Response: - * - The DataDescriptor 'data' field contains requested user data/attestations - * - The requestID references the original UserDataRequestDetails.requestID - * - Allows selective disclosure of personal information - * - * 3. UserSpecificDataPacketDetails Response: - * - The DataDescriptor 'data' field contains the response data or signed content - * - The requestID references the original UserSpecificDataPacketDetails.requestID - * - Supports bidirectional data exchange with signatures and statements - * - * REQUEST-RESPONSE CORRELATION: - * Each of the above request types includes its own requestID field. This response object's - * requestID field can be used to match responses back to their originating requests, enabling - * proper request-response correlation in asynchronous communication flows. - * - * GENERAL DATA REPLIES: - * This response format can also be used for other general data replies where: - * - Structured data needs to be transmitted via DataDescriptor - * - Request tracking through requestID is desired - * - Timestamp metadata (createdAt) is needed for the response - * - Response validation and integrity checking via SHA-256 is required - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DataPacketResponse = void 0; -const bn_js_1 = require("bn.js"); -const varint_1 = require("../../../utils/varint"); -const bufferutils_1 = require("../../../utils/bufferutils"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -const address_1 = require("../../../utils/address"); -const vdxf_1 = require("../../../constants/vdxf"); -const pbaas_1 = require("../../../pbaas"); -const createHash = require("create-hash"); -class DataPacketResponse { - constructor(data) { - this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0", 10); - if (data === null || data === void 0 ? void 0 : data.requestID) { - if (!this.containsRequestID()) - this.toggleContainsRequestID(); - this.requestID = data.requestID; - } - this.data = data === null || data === void 0 ? void 0 : data.data; - } - containsRequestID() { - return !!(this.flags.and(DataPacketResponse.RESPONSE_CONTAINS_REQUEST_ID).toNumber()); - } - toggleContainsRequestID() { - this.flags = this.flags.xor(DataPacketResponse.RESPONSE_CONTAINS_REQUEST_ID); - } - toSha256() { - return createHash("sha256").update(this.toBuffer()).digest(); - } - getByteLength() { - let length = 0; - length += varint_1.default.encodingLength(this.flags); - if (this.containsRequestID()) { - length += vdxf_1.HASH160_BYTE_LENGTH; - } - length += this.data.getByteLength(); - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.flags); - if (this.containsRequestID()) { - writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); - } - writer.writeSlice(this.data.toBuffer()); - return writer.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.flags = reader.readVarInt(); - if (this.containsRequestID()) { - this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - } - this.data = new pbaas_1.DataDescriptor(); - this.data.fromBuffer(reader.buffer, reader.offset); - reader.offset += this.data.getByteLength(); - return reader.offset; - } - toJson() { - return { - flags: this.flags.toNumber(), - requestid: this.containsRequestID() ? this.requestID : undefined, - data: this.data.toJson() - }; - } - static fromJson(json) { - return new DataPacketResponse({ - flags: new bn_js_1.BN(json.flags, 10), - requestID: json.requestid, - data: pbaas_1.DataDescriptor.fromJson(json.data) - }); - } -} -exports.DataPacketResponse = DataPacketResponse; -DataPacketResponse.RESPONSE_CONTAINS_REQUEST_ID = new bn_js_1.BN(1, 10); diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts deleted file mode 100644 index 11e4911f..00000000 --- a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { BigNumber } from "../../../utils/types/BigNumber"; -import { OrdinalVdxfObject, OrdinalVdxfObjectJson } from "../ordinals/OrdinalVdxfObject"; -import { SerializableEntity } from "../../../utils/types/SerializableEntity"; -import { VerifiableSignatureData, VerifiableSignatureDataJson } from "../VerifiableSignatureData"; -export interface GenericEnvelopeInterface { - version?: BigNumber; - flags?: BigNumber; - signature?: VerifiableSignatureData; - createdAt?: BigNumber; - salt?: Buffer; - details: Array; -} -export type GenericEnvelopeJson = { - version: string; - flags?: string; - signature?: VerifiableSignatureDataJson; - createdat?: string; - salt?: string; - details: Array; -}; -export declare class GenericEnvelope implements SerializableEntity { - version: BigNumber; - flags: BigNumber; - signature?: VerifiableSignatureData; - createdAt?: BigNumber; - salt?: Buffer; - details: Array; - static VERSION_CURRENT: import("bn.js"); - static VERSION_FIRSTVALID: import("bn.js"); - static VERSION_LASTVALID: import("bn.js"); - static BASE_FLAGS: import("bn.js"); - static FLAG_SIGNED: import("bn.js"); - static FLAG_HAS_CREATED_AT: import("bn.js"); - static FLAG_MULTI_DETAILS: import("bn.js"); - static FLAG_IS_TESTNET: import("bn.js"); - static FLAG_HAS_SALT: import("bn.js"); - constructor(envelope?: GenericEnvelopeInterface); - isValidVersion(): boolean; - isSigned(): boolean; - hasMultiDetails(): boolean; - hasCreatedAt(): boolean; - hasSalt(): boolean; - isTestnet(): boolean; - setSigned(): void; - setHasMultiDetails(): void; - setHasCreatedAt(): void; - setHasSalt(): void; - setIsTestnet(): void; - setFlags(): void; - getRawDataSha256(includeSig?: boolean): Buffer; - getDetailsIdentitySignatureHash(signedBlockheight: number): Buffer; - getDetails(index?: number): OrdinalVdxfObject; - protected getDetailsBufferLength(): number; - protected getDetailsBuffer(): Buffer; - private internalGetByteLength; - protected getByteLengthOptionalSig(includeSig?: boolean): number; - getByteLength(): number; - protected toBufferOptionalSig(includeSig?: boolean): Buffer; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toString(): string; - toJson(): GenericEnvelopeJson; -} diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.js b/dist/vdxf/classes/envelope/GenericEnvelope.js deleted file mode 100644 index 36a3b631..00000000 --- a/dist/vdxf/classes/envelope/GenericEnvelope.js +++ /dev/null @@ -1,216 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GenericEnvelope = void 0; -const bufferutils_1 = require("../../../utils/bufferutils"); -const base64url_1 = require("base64url"); -const bn_js_1 = require("bn.js"); -const OrdinalVdxfObject_1 = require("../ordinals/OrdinalVdxfObject"); -const varuint_1 = require("../../../utils/varuint"); -const crypto_1 = require("crypto"); -const VerifiableSignatureData_1 = require("../VerifiableSignatureData"); -class GenericEnvelope { - constructor(envelope = { - details: [], - flags: GenericEnvelope.BASE_FLAGS - }) { - this.signature = envelope.signature; - this.details = envelope.details; - this.createdAt = envelope.createdAt; - this.salt = envelope.salt; - if (envelope.flags) - this.flags = envelope.flags; - else - this.flags = GenericEnvelope.BASE_FLAGS; - if (envelope.version) - this.version = envelope.version; - else - this.version = GenericEnvelope.VERSION_CURRENT; - this.setFlags(); - } - isValidVersion() { - return this.version.gte(GenericEnvelope.VERSION_FIRSTVALID) && this.version.lte(GenericEnvelope.VERSION_LASTVALID); - } - isSigned() { - return !!(this.flags.and(GenericEnvelope.FLAG_SIGNED).toNumber()); - } - hasMultiDetails() { - return !!(this.flags.and(GenericEnvelope.FLAG_MULTI_DETAILS).toNumber()); - } - hasCreatedAt() { - return !!(this.flags.and(GenericEnvelope.FLAG_HAS_CREATED_AT).toNumber()); - } - hasSalt() { - return !!(this.flags.and(GenericEnvelope.FLAG_HAS_SALT).toNumber()); - } - isTestnet() { - return !!(this.flags.and(GenericEnvelope.FLAG_IS_TESTNET).toNumber()); - } - setSigned() { - this.flags = this.flags.or(GenericEnvelope.FLAG_SIGNED); - } - setHasMultiDetails() { - this.flags = this.flags.or(GenericEnvelope.FLAG_MULTI_DETAILS); - } - setHasCreatedAt() { - this.flags = this.flags.or(GenericEnvelope.FLAG_HAS_CREATED_AT); - } - setHasSalt() { - this.flags = this.flags.or(GenericEnvelope.FLAG_HAS_SALT); - } - setIsTestnet() { - this.flags = this.flags.or(GenericEnvelope.FLAG_IS_TESTNET); - } - setFlags() { - if (this.createdAt) - this.setHasCreatedAt(); - if (this.details && this.details.length > 1) - this.setHasMultiDetails(); - if (this.signature) - this.setSigned(); - if (this.salt) - this.setHasSalt(); - } - getRawDataSha256(includeSig = false) { - return (0, crypto_1.createHash)("sha256").update(this.toBufferOptionalSig(includeSig)).digest(); - } - getDetailsIdentitySignatureHash(signedBlockheight) { - if (this.isSigned()) { - return this.signature.getIdentityHash(signedBlockheight, this.getRawDataSha256()); - } - else - throw new Error("Must contain verifiable signature with at least systemID and identityID to generate details identity signature hash"); - } - getDetails(index = 0) { - return this.details[index]; - } - getDetailsBufferLength() { - let length = 0; - if (this.hasCreatedAt()) { - length += varuint_1.default.encodingLength(this.createdAt.toNumber()); - } - if (this.hasSalt()) { - const saltLen = this.salt.length; - length += varuint_1.default.encodingLength(saltLen); - length += saltLen; - } - if (this.hasMultiDetails()) { - length += varuint_1.default.encodingLength(this.details.length); - for (const detail of this.details) { - length += detail.getByteLength(); - } - } - else { - length += this.getDetails().getByteLength(); - } - return length; - } - getDetailsBuffer() { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getDetailsBufferLength())); - if (this.hasCreatedAt()) { - writer.writeCompactSize(this.createdAt.toNumber()); - } - if (this.hasSalt()) { - writer.writeVarSlice(this.salt); - } - if (this.hasMultiDetails()) { - writer.writeCompactSize(this.details.length); - for (const detail of this.details) { - writer.writeSlice(detail.toBuffer()); - } - } - else { - writer.writeSlice(this.getDetails().toBuffer()); - } - return writer.buffer; - } - internalGetByteLength(includeSig = true) { - let length = 0; - length += varuint_1.default.encodingLength(this.version.toNumber()); - length += varuint_1.default.encodingLength(this.flags.toNumber()); - if (this.isSigned() && includeSig) { - length += this.signature.getByteLength(); - } - length += this.getDetailsBufferLength(); - return length; - } - getByteLengthOptionalSig(includeSig) { - return this.internalGetByteLength(includeSig); - } - getByteLength() { - return this.getByteLengthOptionalSig(true); - } - toBufferOptionalSig(includeSig = true) { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.internalGetByteLength(includeSig))); - writer.writeCompactSize(this.version.toNumber()); - writer.writeCompactSize(this.flags.toNumber()); - if (this.isSigned() && includeSig) { - writer.writeSlice(this.signature.toBuffer()); - } - writer.writeSlice(this.getDetailsBuffer()); - return writer.buffer; - } - toBuffer() { - return this.toBufferOptionalSig(true); - } - fromBuffer(buffer, offset) { - if (buffer.length == 0) - throw new Error("Cannot create envelope from empty buffer"); - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - this.version = new bn_js_1.BN(reader.readCompactSize()); - this.flags = new bn_js_1.BN(reader.readCompactSize()); - if (this.isSigned()) { - const _sig = new VerifiableSignatureData_1.VerifiableSignatureData(); - reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); - this.signature = _sig; - } - if (this.hasCreatedAt()) { - this.createdAt = new bn_js_1.BN(reader.readCompactSize()); - } - if (this.hasSalt()) { - this.salt = reader.readVarSlice(); - } - if (this.hasMultiDetails()) { - this.details = []; - const numItems = reader.readCompactSize(); - for (let i = 0; i < numItems; i++) { - const ord = OrdinalVdxfObject_1.OrdinalVdxfObject.createFromBuffer(reader.buffer, reader.offset); - reader.offset = ord.offset; - this.details.push(ord.obj); - } - } - else { - const ord = OrdinalVdxfObject_1.OrdinalVdxfObject.createFromBuffer(reader.buffer, reader.offset); - reader.offset = ord.offset; - this.details = [ord.obj]; - } - return reader.offset; - } - toString() { - return base64url_1.default.encode(this.toBuffer()); - } - toJson() { - const details = []; - if (this.details != null) { - for (const detail of this.details) { - details.push(detail.toJson()); - } - } - return { - signature: undefined, //TODO: Add signature toJson function this.isSigned() ? this.signature.toJson() : undefined, - details: details, - version: this.version.toString(), - flags: this.flags.toString(), - createdat: this.hasCreatedAt() ? this.createdAt.toString() : undefined - }; - } -} -exports.GenericEnvelope = GenericEnvelope; -GenericEnvelope.VERSION_CURRENT = new bn_js_1.BN(1, 10); -GenericEnvelope.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); -GenericEnvelope.VERSION_LASTVALID = new bn_js_1.BN(1, 10); -GenericEnvelope.BASE_FLAGS = new bn_js_1.BN(0, 10); -GenericEnvelope.FLAG_SIGNED = new bn_js_1.BN(1, 10); -GenericEnvelope.FLAG_HAS_CREATED_AT = new bn_js_1.BN(2, 10); -GenericEnvelope.FLAG_MULTI_DETAILS = new bn_js_1.BN(4, 10); -GenericEnvelope.FLAG_IS_TESTNET = new bn_js_1.BN(8, 10); -GenericEnvelope.FLAG_HAS_SALT = new bn_js_1.BN(16, 10); diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts deleted file mode 100644 index a3eb212f..00000000 --- a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { PartialIdentity } from '../../../pbaas/PartialIdentity'; -import { PartialSignData, PartialSignDataCLIJson, PartialSignDataJson } from '../../../pbaas/PartialSignData'; -import { BigNumber } from '../../../utils/types/BigNumber'; -import { ContentMultiMapJsonValue, IdentityID, VerusCLIVerusIDJson, VerusCLIVerusIDJsonBase } from '../../../pbaas'; -import { ResponseURI, ResponseURIJson } from '../ResponseURI'; -import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -export type SignDataMap = Map; -export type VerusCLIVerusIDJsonWithData = VerusCLIVerusIDJsonBase<{ - [key: string]: ContentMultiMapJsonValue | { - data: PartialSignDataCLIJson; - }; -}>; -export type IdentityUpdateRequestDetailsJson = { - flags?: string; - requestid?: string; - identity?: VerusCLIVerusIDJson; - expiryheight?: string; - systemid?: string; - responseuris?: Array; - signdatamap?: { - [key: string]: PartialSignDataJson; - }; - txid?: string; -}; -export declare class IdentityUpdateRequestDetails implements SerializableEntity { - flags?: BigNumber; - requestID?: string; - identity?: PartialIdentity; - expiryHeight?: BigNumber; - systemID?: IdentityID; - responseURIs?: Array; - signDataMap?: SignDataMap; - txid?: Buffer; - static IDENTITY_UPDATE_REQUEST_VALID: import("bn.js"); - static IDENTITY_UPDATE_REQUEST_CONTAINS_SIGNDATA: import("bn.js"); - static IDENTITY_UPDATE_REQUEST_EXPIRES: import("bn.js"); - static IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS: import("bn.js"); - static IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID: import("bn.js"); - static IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM: import("bn.js"); - static IDENTITY_UPDATE_REQUEST_CONTAINS_TXID: import("bn.js"); - static IDENTITY_UPDATE_REQUEST_IS_TESTNET: import("bn.js"); - constructor(data?: { - flags?: BigNumber; - requestID?: string; - identity?: PartialIdentity; - expiryHeight?: BigNumber; - systemID?: IdentityID; - txid?: Buffer; - responseURIs?: Array; - signDataMap?: SignDataMap; - }); - expires(): boolean; - containsSignData(): boolean; - containsSystem(): boolean; - containsRequestID(): boolean; - containsTxid(): boolean; - containsResponseUris(): boolean; - isTestnet(): boolean; - toggleExpires(): void; - toggleContainsSignData(): void; - toggleContainsSystem(): void; - toggleContainsRequestID(): void; - toggleContainsTxid(): void; - toggleContainsResponseUris(): void; - toggleIsTestnet(): void; - toSha256(): Buffer; - getIdentityAddress(): string; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number, parseVdxfObjects?: boolean): number; - toJson(): IdentityUpdateRequestDetailsJson; - static fromJson(json: IdentityUpdateRequestDetailsJson): IdentityUpdateRequestDetails; - toCLIJson(): VerusCLIVerusIDJsonWithData; - static fromCLIJson(json: VerusCLIVerusIDJsonWithData, details?: IdentityUpdateRequestDetailsJson): IdentityUpdateRequestDetails; -} diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js deleted file mode 100644 index 45a4a647..00000000 --- a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js +++ /dev/null @@ -1,294 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.IdentityUpdateRequestDetails = void 0; -const varuint_1 = require("../../../utils/varuint"); -const bufferutils_1 = require("../../../utils/bufferutils"); -const address_1 = require("../../../utils/address"); -const vdxf_1 = require("../../../constants/vdxf"); -const createHash = require("create-hash"); -const PartialIdentity_1 = require("../../../pbaas/PartialIdentity"); -const PartialSignData_1 = require("../../../pbaas/PartialSignData"); -const bn_js_1 = require("bn.js"); -const pbaas_1 = require("../../../pbaas"); -const ResponseURI_1 = require("../ResponseURI"); -const pbaas_2 = require("../../../constants/pbaas"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class IdentityUpdateRequestDetails { - constructor(data) { - this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0", 10); - if (data === null || data === void 0 ? void 0 : data.requestID) { - if (!this.containsRequestID()) - this.toggleContainsRequestID(); - this.requestID = data.requestID; - } - if (data === null || data === void 0 ? void 0 : data.identity) { - this.identity = data.identity; - } - if (data === null || data === void 0 ? void 0 : data.expiryHeight) { - if (!this.expires()) - this.toggleExpires(); - this.expiryHeight = data.expiryHeight; - } - if (data === null || data === void 0 ? void 0 : data.systemID) { - if (!this.containsSystem()) - this.toggleContainsSystem(); - this.systemID = data.systemID; - } - if (data === null || data === void 0 ? void 0 : data.txid) { - if (!this.containsTxid()) - this.toggleContainsTxid(); - this.txid = data.txid; - } - if (data === null || data === void 0 ? void 0 : data.responseURIs) { - if (!this.containsResponseUris()) - this.toggleContainsResponseUris(); - this.responseURIs = data.responseURIs; - } - if (data === null || data === void 0 ? void 0 : data.signDataMap) { - if (!this.containsSignData()) - this.toggleContainsSignData(); - this.signDataMap = data.signDataMap; - } - } - expires() { - return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_EXPIRES).toNumber()); - } - containsSignData() { - return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SIGNDATA).toNumber()); - } - containsSystem() { - return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM).toNumber()); - } - containsRequestID() { - return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID).toNumber()); - } - containsTxid() { - return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID).toNumber()); - } - containsResponseUris() { - return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS).toNumber()); - } - isTestnet() { - return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET).toNumber()); - } - toggleExpires() { - this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_EXPIRES); - } - toggleContainsSignData() { - this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SIGNDATA); - } - toggleContainsSystem() { - this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM); - } - toggleContainsRequestID() { - this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID); - } - toggleContainsTxid() { - this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID); - } - toggleContainsResponseUris() { - this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS); - } - toggleIsTestnet() { - this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET); - } - toSha256() { - return createHash("sha256").update(this.toBuffer()).digest(); - } - getIdentityAddress() { - if (this.identity.name === "VRSC" || this.identity.name === "VRSCTEST") { - return (0, address_1.nameAndParentAddrToIAddr)(this.identity.name); - } - else if (this.identity.parent) { - return this.identity.getIdentityAddress(); - } - else if (this.isTestnet()) { - return (0, address_1.nameAndParentAddrToIAddr)(this.identity.name, (0, address_1.nameAndParentAddrToIAddr)("VRSCTEST")); - } - else { - return (0, address_1.nameAndParentAddrToIAddr)(this.identity.name, (0, address_1.nameAndParentAddrToIAddr)("VRSC")); - } - } - getByteLength() { - let length = 0; - length += varuint_1.default.encodingLength(this.flags.toNumber()); - if (this.containsRequestID()) { - length += vdxf_1.HASH160_BYTE_LENGTH; - } - length += this.identity.getByteLength(); - if (this.expires()) - length += varuint_1.default.encodingLength(this.expiryHeight.toNumber()); - if (this.containsSystem()) - length += this.systemID.getByteLength(); - if (this.containsTxid()) { - length += pbaas_2.UINT_256_LENGTH; - } - if (this.containsResponseUris()) { - length += varuint_1.default.encodingLength(this.responseURIs.length); - length += this.responseURIs.reduce((sum, current) => sum + current.getByteLength(), 0); - } - if (this.containsSignData()) { - length += varuint_1.default.encodingLength(this.signDataMap.size); - for (const [key, value] of this.signDataMap.entries()) { - length += (0, address_1.fromBase58Check)(key).hash.length; - length += value.getByteLength(); - } - } - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeCompactSize(this.flags.toNumber()); - if (this.containsRequestID()) { - writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); - } - writer.writeSlice(this.identity.toBuffer()); - if (this.expires()) - writer.writeCompactSize(this.expiryHeight.toNumber()); - if (this.containsSystem()) - writer.writeSlice(this.systemID.toBuffer()); - if (this.containsTxid()) { - if (this.txid.length !== pbaas_2.UINT_256_LENGTH) - throw new Error("invalid txid length"); - writer.writeSlice(this.txid); - } - if (this.containsResponseUris()) { - writer.writeArray(this.responseURIs.map((x) => x.toBuffer())); - } - if (this.containsSignData()) { - writer.writeCompactSize(this.signDataMap.size); - for (const [key, value] of this.signDataMap.entries()) { - writer.writeSlice((0, address_1.fromBase58Check)(key).hash); - writer.writeSlice(value.toBuffer()); - } - } - return writer.buffer; - } - fromBuffer(buffer, offset = 0, parseVdxfObjects = true) { - const reader = new BufferReader(buffer, offset); - this.flags = new bn_js_1.BN(reader.readCompactSize()); - if (this.containsRequestID()) { - this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - } - this.identity = new PartialIdentity_1.PartialIdentity(); - reader.offset = this.identity.fromBuffer(reader.buffer, reader.offset, parseVdxfObjects); - if (this.expires()) { - this.expiryHeight = new bn_js_1.BN(reader.readCompactSize()); - } - if (this.containsSystem()) { - this.systemID = new pbaas_1.IdentityID(); - reader.offset = this.systemID.fromBuffer(reader.buffer, reader.offset); - } - if (this.containsTxid()) { - this.txid = reader.readSlice(pbaas_2.UINT_256_LENGTH); - } - if (this.containsResponseUris()) { - this.responseURIs = []; - const urisLength = reader.readCompactSize(); - for (let i = 0; i < urisLength; i++) { - const uri = new ResponseURI_1.ResponseURI(); - reader.offset = uri.fromBuffer(reader.buffer, reader.offset); - this.responseURIs.push(uri); - } - } - if (this.containsSignData()) { - this.signDataMap = new Map(); - const size = reader.readCompactSize(); - for (let i = 0; i < size; i++) { - const key = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - const value = new PartialSignData_1.PartialSignData(); - reader.offset = value.fromBuffer(reader.buffer, reader.offset); - this.signDataMap.set(key, value); - } - } - return reader.offset; - } - toJson() { - let signDataJson; - if (this.signDataMap) { - signDataJson = {}; - for (const [key, psd] of this.signDataMap.entries()) { - signDataJson[key] = psd.toJson(); - } - } - return { - flags: this.flags ? this.flags.toString(10) : undefined, - requestid: this.containsRequestID() ? this.requestID : undefined, - identity: this.identity ? this.identity.toJson() : undefined, - expiryheight: this.expiryHeight ? this.expiryHeight.toString(10) : undefined, - systemid: this.systemID ? this.systemID.toAddress() : undefined, - txid: this.txid ? (Buffer.from(this.txid.toString('hex'), 'hex').reverse()).toString('hex') : undefined, - responseuris: this.responseURIs ? this.responseURIs.map(x => x.toJson()) : undefined, - signdatamap: signDataJson - }; - } - static fromJson(json) { - let signDataMap; - if (json.signdatamap) { - signDataMap = new Map(); - for (const key in json.signdatamap) { - signDataMap.set(key, PartialSignData_1.PartialSignData.fromJson(json.signdatamap[key])); - } - } - return new IdentityUpdateRequestDetails({ - flags: json.flags ? new bn_js_1.BN(json.flags, 10) : undefined, - requestID: json.requestid, - identity: json.identity ? PartialIdentity_1.PartialIdentity.fromJson(json.identity) : undefined, - expiryHeight: json.expiryheight ? new bn_js_1.BN(json.expiryheight, 10) : undefined, - systemID: json.systemid ? pbaas_1.IdentityID.fromAddress(json.systemid) : undefined, - responseURIs: json.responseuris ? json.responseuris.map(x => ResponseURI_1.ResponseURI.fromJson(x)) : undefined, - signDataMap, - txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined, - }); - } - toCLIJson() { - if (!this.identity) - throw new Error("No identity details to update"); - const idJson = this.identity.toJson(); - if (this.containsSignData()) { - for (const [key, psd] of this.signDataMap.entries()) { - idJson.contentmultimap[key] = { - "data": psd.toCLIJson() - }; - } - } - return idJson; - } - static fromCLIJson(json, details) { - let identity; - let signDataMap; - if (json.contentmultimap) { - const cmm = Object.assign({}, json.contentmultimap); - for (const key in cmm) { - if (cmm[key]['data']) { - if (!signDataMap) - signDataMap = new Map(); - const psd = PartialSignData_1.PartialSignData.fromCLIJson(cmm[key]['data']); - signDataMap.set(key, psd); - delete cmm[key]; - } - } - json = Object.assign(Object.assign({}, json), { contentmultimap: cmm }); - } - identity = PartialIdentity_1.PartialIdentity.fromJson(json); - return new IdentityUpdateRequestDetails({ - identity, - signDataMap, - systemID: (details === null || details === void 0 ? void 0 : details.systemid) ? pbaas_1.IdentityID.fromAddress(details.systemid) : undefined, - requestID: details === null || details === void 0 ? void 0 : details.requestid, - expiryHeight: (details === null || details === void 0 ? void 0 : details.expiryheight) ? new bn_js_1.BN(details.expiryheight, 10) : undefined, - responseURIs: (details === null || details === void 0 ? void 0 : details.responseuris) ? details.responseuris.map(x => ResponseURI_1.ResponseURI.fromJson(x)) : undefined, - txid: (details === null || details === void 0 ? void 0 : details.txid) ? Buffer.from(details.txid, 'hex').reverse() : undefined, - }); - } -} -exports.IdentityUpdateRequestDetails = IdentityUpdateRequestDetails; -// stored in natural order, if displayed as text make sure to reverse! -IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_VALID = new bn_js_1.BN(0, 10); -IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SIGNDATA = new bn_js_1.BN(1, 10); -IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_EXPIRES = new bn_js_1.BN(2, 10); -IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS = new bn_js_1.BN(4, 10); -IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID = new bn_js_1.BN(8, 10); -IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM = new bn_js_1.BN(16, 10); -IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID = new bn_js_1.BN(32, 10); -IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET = new bn_js_1.BN(64, 10); diff --git a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts deleted file mode 100644 index eb319c96..00000000 --- a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { BigNumber } from '../../../utils/types/BigNumber'; -import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -export type IdentityUpdateResponseDetailsJson = { - flags: string; - requestid: string; - txid?: string; -}; -export declare class IdentityUpdateResponseDetails implements SerializableEntity { - flags?: BigNumber; - requestID?: string; - txid?: Buffer; - static IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID: import("bn.js"); - static IDENTITY_UPDATE_RESPONSE_CONTAINS_REQUEST_ID: import("bn.js"); - constructor(data?: { - flags?: BigNumber; - requestID?: string; - txid?: Buffer; - }); - containsTxid(): boolean; - containsRequestID(): boolean; - toggleContainsTxid(): void; - toggleContainsRequestID(): void; - toSha256(): Buffer; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): IdentityUpdateResponseDetailsJson; - static fromJson(json: IdentityUpdateResponseDetailsJson): IdentityUpdateResponseDetails; -} diff --git a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js deleted file mode 100644 index c677b35a..00000000 --- a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js +++ /dev/null @@ -1,94 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.IdentityUpdateResponseDetails = void 0; -const varint_1 = require("../../../utils/varint"); -const bufferutils_1 = require("../../../utils/bufferutils"); -const createHash = require("create-hash"); -const bn_js_1 = require("bn.js"); -const pbaas_1 = require("../../../constants/pbaas"); -const vdxf_1 = require("../../../constants/vdxf"); -const address_1 = require("../../../utils/address"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class IdentityUpdateResponseDetails { - constructor(data) { - this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0", 10); - if (data === null || data === void 0 ? void 0 : data.requestID) { - if (!this.containsRequestID()) - this.toggleContainsRequestID(); - this.requestID = data.requestID; - } - if (data === null || data === void 0 ? void 0 : data.txid) { - if (!this.containsTxid()) - this.toggleContainsTxid(); - this.txid = data.txid; - } - } - containsTxid() { - return !!(this.flags.and(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID).toNumber()); - } - containsRequestID() { - return !!(this.flags.and(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_REQUEST_ID).toNumber()); - } - toggleContainsTxid() { - this.flags = this.flags.xor(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID); - } - toggleContainsRequestID() { - this.flags = this.flags.xor(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_REQUEST_ID); - } - toSha256() { - return createHash("sha256").update(this.toBuffer()).digest(); - } - getByteLength() { - let length = 0; - length += varint_1.default.encodingLength(this.flags); - if (this.containsRequestID()) { - length += vdxf_1.HASH160_BYTE_LENGTH; - } - if (this.containsTxid()) { - length += pbaas_1.UINT_256_LENGTH; - } - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.flags); - if (this.containsRequestID()) { - writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); - } - if (this.containsTxid()) { - if (this.txid.length !== pbaas_1.UINT_256_LENGTH) - throw new Error("invalid txid length"); - writer.writeSlice(this.txid); - } - return writer.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.flags = reader.readVarInt(); - if (this.containsRequestID()) { - this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - } - if (this.containsTxid()) { - this.txid = reader.readSlice(pbaas_1.UINT_256_LENGTH); - } - return reader.offset; - } - toJson() { - return { - flags: this.flags.toString(10), - requestid: this.containsRequestID() ? this.requestID : undefined, - txid: this.containsTxid() ? (Buffer.from(this.txid.toString('hex'), 'hex').reverse()).toString('hex') : undefined - }; - } - static fromJson(json) { - return new IdentityUpdateResponseDetails({ - flags: new bn_js_1.BN(json.flags, 10), - requestID: json.requestid, - txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined - }); - } -} -exports.IdentityUpdateResponseDetails = IdentityUpdateResponseDetails; -// stored in natural order, if displayed as text make sure to reverse! -IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID = new bn_js_1.BN(1, 10); -IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_REQUEST_ID = new bn_js_1.BN(2, 10); diff --git a/dist/vdxf/classes/index.d.ts b/dist/vdxf/classes/index.d.ts deleted file mode 100644 index 6a9b4d46..00000000 --- a/dist/vdxf/classes/index.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -export { Challenge as LoginConsentChallenge } from "./Challenge"; -export { Decision as LoginConsentDecision } from "./Decision"; -export { Request as LoginConsentRequest } from "./Request"; -export { Response as LoginConsentResponse } from "./Response"; -export { ChallengeInterface as LoginConsentChallengeInterface } from "./Challenge"; -export { DecisionInterface as LoginConsentDecisionInterface } from "./Decision"; -export { RequestInterface as LoginConsentRequestInterface } from "./Request"; -export { ResponseInterface as LoginConsentResponseInterface } from "./Response"; -export { SignedSessionObject } from './Web/SignedSessionObject'; -export { SignedSessionObjectData } from './Web/SignedSessionObjectData'; -export { VerusPayInvoiceDetails } from './payment/VerusPayInvoiceDetails'; -export { VerusPayInvoice } from './payment/VerusPayInvoice'; -export { ProvisioningRequest as LoginConsentProvisioningRequest } from "./provisioning/ProvisioningRequest"; -export { ProvisioningChallenge as LoginConsentProvisioningChallenge } from "./provisioning/ProvisioningChallenge"; -export { ProvisioningResponse as LoginConsentProvisioningResponse } from "./provisioning/ProvisioningResponse"; -export { ProvisioningDecision as LoginConsentProvisioningDecision } from "./provisioning/ProvisioningDecision"; -export { ProvisioningResult as LoginConsentProvisioningResult } from "./provisioning/ProvisioningResult"; -export { ProvisioningRequestInterface as LoginConsentProvisioningRequestInterface } from "./provisioning/ProvisioningRequest"; -export { ProvisioningChallengeInterface as LoginConsentProvisioningChallengeInterface } from "./provisioning/ProvisioningChallenge"; -export { ProvisioningResponseInterface as LoginConsentProvisioningResponseInterface } from "./provisioning/ProvisioningResponse"; -export { ProvisioningDecisionInterface as LoginConsentProvisioningDecisionInterface } from "./provisioning/ProvisioningDecision"; -export { ProvisioningResultInterface as LoginConsentProvisioningResultInterface } from "./provisioning/ProvisioningResult"; -export * from "./identity/IdentityUpdateRequestDetails"; -export * from "./identity/IdentityUpdateResponseDetails"; -export * from './ResponseURI'; -export * from './request/GenericRequest'; -export * from './response/GenericResponse'; -export * from './response/AppEncryptionResponseDetails'; -export * from './ordinals'; -export { Hash160 } from './Hash160'; -export { RedirectUri, Subject, ProvisioningInfo, RequestedPermission, Audience, AltAuthFactor, Attestation, } from "./Challenge"; -export { ProvisioningTxid } from './provisioning/ProvisioningResult'; -export { Context } from './Context'; -export { DataCategory } from './PersonalProfile'; -export * from './requestobjects/UserDataRequestDetails'; -export * from './login/AuthenticationRequestDetails'; -export * from './login/AuthenticationResponseDetails'; -export * from './requestobjects/ProvisionIdentityDetails'; -export * from './requestobjects/AppEncryptionRequestDetails'; -export * from './requestobjects/UserSpecificDataPacketDetails'; -export * from './CompactAddressObject'; -export { VerifiableSignatureData, VerifiableSignatureDataJson } from './VerifiableSignatureData'; diff --git a/dist/vdxf/classes/index.js b/dist/vdxf/classes/index.js deleted file mode 100644 index 2e604773..00000000 --- a/dist/vdxf/classes/index.js +++ /dev/null @@ -1,75 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VerifiableSignatureData = exports.DataCategory = exports.Context = exports.ProvisioningTxid = exports.Attestation = exports.AltAuthFactor = exports.Audience = exports.RequestedPermission = exports.ProvisioningInfo = exports.Subject = exports.RedirectUri = exports.Hash160 = exports.LoginConsentProvisioningResult = exports.LoginConsentProvisioningDecision = exports.LoginConsentProvisioningResponse = exports.LoginConsentProvisioningChallenge = exports.LoginConsentProvisioningRequest = exports.VerusPayInvoice = exports.VerusPayInvoiceDetails = exports.SignedSessionObjectData = exports.SignedSessionObject = exports.LoginConsentResponse = exports.LoginConsentRequest = exports.LoginConsentDecision = exports.LoginConsentChallenge = void 0; -var Challenge_1 = require("./Challenge"); -Object.defineProperty(exports, "LoginConsentChallenge", { enumerable: true, get: function () { return Challenge_1.Challenge; } }); -var Decision_1 = require("./Decision"); -Object.defineProperty(exports, "LoginConsentDecision", { enumerable: true, get: function () { return Decision_1.Decision; } }); -var Request_1 = require("./Request"); -Object.defineProperty(exports, "LoginConsentRequest", { enumerable: true, get: function () { return Request_1.Request; } }); -var Response_1 = require("./Response"); -Object.defineProperty(exports, "LoginConsentResponse", { enumerable: true, get: function () { return Response_1.Response; } }); -var SignedSessionObject_1 = require("./Web/SignedSessionObject"); -Object.defineProperty(exports, "SignedSessionObject", { enumerable: true, get: function () { return SignedSessionObject_1.SignedSessionObject; } }); -var SignedSessionObjectData_1 = require("./Web/SignedSessionObjectData"); -Object.defineProperty(exports, "SignedSessionObjectData", { enumerable: true, get: function () { return SignedSessionObjectData_1.SignedSessionObjectData; } }); -var VerusPayInvoiceDetails_1 = require("./payment/VerusPayInvoiceDetails"); -Object.defineProperty(exports, "VerusPayInvoiceDetails", { enumerable: true, get: function () { return VerusPayInvoiceDetails_1.VerusPayInvoiceDetails; } }); -var VerusPayInvoice_1 = require("./payment/VerusPayInvoice"); -Object.defineProperty(exports, "VerusPayInvoice", { enumerable: true, get: function () { return VerusPayInvoice_1.VerusPayInvoice; } }); -var ProvisioningRequest_1 = require("./provisioning/ProvisioningRequest"); -Object.defineProperty(exports, "LoginConsentProvisioningRequest", { enumerable: true, get: function () { return ProvisioningRequest_1.ProvisioningRequest; } }); -var ProvisioningChallenge_1 = require("./provisioning/ProvisioningChallenge"); -Object.defineProperty(exports, "LoginConsentProvisioningChallenge", { enumerable: true, get: function () { return ProvisioningChallenge_1.ProvisioningChallenge; } }); -var ProvisioningResponse_1 = require("./provisioning/ProvisioningResponse"); -Object.defineProperty(exports, "LoginConsentProvisioningResponse", { enumerable: true, get: function () { return ProvisioningResponse_1.ProvisioningResponse; } }); -var ProvisioningDecision_1 = require("./provisioning/ProvisioningDecision"); -Object.defineProperty(exports, "LoginConsentProvisioningDecision", { enumerable: true, get: function () { return ProvisioningDecision_1.ProvisioningDecision; } }); -var ProvisioningResult_1 = require("./provisioning/ProvisioningResult"); -Object.defineProperty(exports, "LoginConsentProvisioningResult", { enumerable: true, get: function () { return ProvisioningResult_1.ProvisioningResult; } }); -__exportStar(require("./identity/IdentityUpdateRequestDetails"), exports); -__exportStar(require("./identity/IdentityUpdateResponseDetails"), exports); -__exportStar(require("./ResponseURI"), exports); -__exportStar(require("./request/GenericRequest"), exports); -__exportStar(require("./response/GenericResponse"), exports); -__exportStar(require("./response/AppEncryptionResponseDetails"), exports); -__exportStar(require("./ordinals"), exports); -var Hash160_1 = require("./Hash160"); -Object.defineProperty(exports, "Hash160", { enumerable: true, get: function () { return Hash160_1.Hash160; } }); -var Challenge_2 = require("./Challenge"); -Object.defineProperty(exports, "RedirectUri", { enumerable: true, get: function () { return Challenge_2.RedirectUri; } }); -Object.defineProperty(exports, "Subject", { enumerable: true, get: function () { return Challenge_2.Subject; } }); -Object.defineProperty(exports, "ProvisioningInfo", { enumerable: true, get: function () { return Challenge_2.ProvisioningInfo; } }); -Object.defineProperty(exports, "RequestedPermission", { enumerable: true, get: function () { return Challenge_2.RequestedPermission; } }); -Object.defineProperty(exports, "Audience", { enumerable: true, get: function () { return Challenge_2.Audience; } }); -Object.defineProperty(exports, "AltAuthFactor", { enumerable: true, get: function () { return Challenge_2.AltAuthFactor; } }); -Object.defineProperty(exports, "Attestation", { enumerable: true, get: function () { return Challenge_2.Attestation; } }); -var ProvisioningResult_2 = require("./provisioning/ProvisioningResult"); -Object.defineProperty(exports, "ProvisioningTxid", { enumerable: true, get: function () { return ProvisioningResult_2.ProvisioningTxid; } }); -var Context_1 = require("./Context"); -Object.defineProperty(exports, "Context", { enumerable: true, get: function () { return Context_1.Context; } }); -var PersonalProfile_1 = require("./PersonalProfile"); -Object.defineProperty(exports, "DataCategory", { enumerable: true, get: function () { return PersonalProfile_1.DataCategory; } }); -__exportStar(require("./requestobjects/UserDataRequestDetails"), exports); -__exportStar(require("./login/AuthenticationRequestDetails"), exports); -__exportStar(require("./login/AuthenticationResponseDetails"), exports); -__exportStar(require("./requestobjects/ProvisionIdentityDetails"), exports); -__exportStar(require("./requestobjects/AppEncryptionRequestDetails"), exports); -__exportStar(require("./requestobjects/UserSpecificDataPacketDetails"), exports); -__exportStar(require("./CompactAddressObject"), exports); -var VerifiableSignatureData_1 = require("./VerifiableSignatureData"); -Object.defineProperty(exports, "VerifiableSignatureData", { enumerable: true, get: function () { return VerifiableSignatureData_1.VerifiableSignatureData; } }); diff --git a/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts b/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts deleted file mode 100644 index e8842275..00000000 --- a/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - * AuthenticationRequestDetails - Class for handling application login and authentication requests - * - * This class is used when an application is requesting authentication or login from the user, - * including specific recipientConstraints and callback information. The request includes: - * - Request ID for tracking the authentication session - * - Permission sets defining what access the application is requesting - * - Response URIs for post-authentication redirects - * - Optional expiry time for the authentication session - * - * The user's wallet can use these parameters to present a clear authentication request - * to the user, showing exactly what recipientConstraints are being requested and where they will - * be redirected after successful authentication. This enables secure, user-controlled - * authentication flows with granular permission management. - */ -import { BigNumber } from "../../../utils/types/BigNumber"; -import { SerializableEntity } from "../../../utils/types/SerializableEntity"; -import { CompactAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; -import { ResponseURI, ResponseURIJson } from "../ResponseURI"; -export interface AuthenticationRequestDetailsInterface { - version?: BigNumber; - flags?: BigNumber; - requestID: string; - recipientConstraints?: Array; - responseURIs?: Array; - expiryTime?: BigNumber; -} -export interface RecipientConstraintJson { - type: number; - identity: CompactAddressObjectJson; -} -export interface RecipientConstraint { - type: number; - identity: CompactAddressObject; -} -export interface AuthenticationRequestDetailsJson { - version: number; - requestid: string; - flags: number; - recipientConstraints?: Array; - responseURIs?: Array; - expirytime?: number; -} -export declare class AuthenticationRequestDetails implements SerializableEntity { - version: BigNumber; - flags?: BigNumber; - requestID: string; - recipientConstraints?: Array; - responseURIs?: Array; - expiryTime?: BigNumber; - static DEFAULT_VERSION: import("bn.js"); - static VERSION_FIRSTVALID: import("bn.js"); - static VERSION_LASTVALID: import("bn.js"); - static FLAG_HAS_RECIPIENT_CONSTRAINTS: import("bn.js"); - static FLAG_HAS_RESPONSE_URIS: import("bn.js"); - static FLAG_HAS_EXPIRY_TIME: import("bn.js"); - static REQUIRED_ID: number; - static REQUIRED_SYSTEM: number; - static REQUIRED_PARENT: number; - constructor(request?: AuthenticationRequestDetailsInterface); - hasRecipentConstraints(): boolean; - hasResponseURIs(): boolean; - hasExpiryTime(): boolean; - calcFlags(flags?: BigNumber): BigNumber; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): AuthenticationRequestDetailsJson; - static fromJson(data: AuthenticationRequestDetailsJson): AuthenticationRequestDetails; - setFlags(): void; - isValid(): boolean; -} diff --git a/dist/vdxf/classes/login/AuthenticationRequestDetails.js b/dist/vdxf/classes/login/AuthenticationRequestDetails.js deleted file mode 100644 index 294a6503..00000000 --- a/dist/vdxf/classes/login/AuthenticationRequestDetails.js +++ /dev/null @@ -1,205 +0,0 @@ -"use strict"; -/** - * AuthenticationRequestDetails - Class for handling application login and authentication requests - * - * This class is used when an application is requesting authentication or login from the user, - * including specific recipientConstraints and callback information. The request includes: - * - Request ID for tracking the authentication session - * - Permission sets defining what access the application is requesting - * - Response URIs for post-authentication redirects - * - Optional expiry time for the authentication session - * - * The user's wallet can use these parameters to present a clear authentication request - * to the user, showing exactly what recipientConstraints are being requested and where they will - * be redirected after successful authentication. This enables secure, user-controlled - * authentication flows with granular permission management. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AuthenticationRequestDetails = void 0; -const bufferutils_1 = require("../../../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const varuint_1 = require("../../../utils/varuint"); -const vdxf_1 = require("../../../constants/vdxf"); -const address_1 = require("../../../utils/address"); -const CompactAddressObject_1 = require("../CompactAddressObject"); -const ResponseURI_1 = require("../ResponseURI"); -class AuthenticationRequestDetails { - constructor(request) { - this.version = (request === null || request === void 0 ? void 0 : request.version) || AuthenticationRequestDetails.DEFAULT_VERSION; - this.requestID = (request === null || request === void 0 ? void 0 : request.requestID) || ''; - this.flags = (request === null || request === void 0 ? void 0 : request.flags) || new bn_js_1.BN(0, 10); - this.recipientConstraints = (request === null || request === void 0 ? void 0 : request.recipientConstraints) || null; - this.responseURIs = (request === null || request === void 0 ? void 0 : request.responseURIs) || null; - this.expiryTime = (request === null || request === void 0 ? void 0 : request.expiryTime) || null; - this.setFlags(); - } - hasRecipentConstraints() { - return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS).eq(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); - } - hasResponseURIs() { - return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS).eq(AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS); - } - hasExpiryTime() { - return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME).eq(AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME); - } - calcFlags(flags = this.flags) { - if (this.recipientConstraints) { - flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); - } - if (this.responseURIs) { - flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS); - } - if (this.expiryTime) { - flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME); - } - return flags; - } - getByteLength() { - let length = 0; - length += varuint_1.default.encodingLength(this.flags.toNumber()); - length += vdxf_1.HASH160_BYTE_LENGTH; - if (this.hasRecipentConstraints()) { - length += varuint_1.default.encodingLength(this.recipientConstraints.length); - for (let i = 0; i < this.recipientConstraints.length; i++) { - length += varuint_1.default.encodingLength(this.recipientConstraints[i].type); - length += this.recipientConstraints[i].identity.getByteLength(); - } - } - if (this.hasResponseURIs()) { - length += varuint_1.default.encodingLength(this.responseURIs.length); - for (let i = 0; i < this.responseURIs.length; i++) { - length += this.responseURIs[i].getByteLength(); - } - } - if (this.hasExpiryTime()) { - length += varuint_1.default.encodingLength(this.expiryTime.toNumber()); - } - return length; - } - toBuffer() { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeCompactSize(this.flags.toNumber()); - writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); - if (this.hasRecipentConstraints()) { - writer.writeCompactSize(this.recipientConstraints.length); - for (let i = 0; i < this.recipientConstraints.length; i++) { - writer.writeCompactSize(this.recipientConstraints[i].type); - writer.writeSlice(this.recipientConstraints[i].identity.toBuffer()); - } - } - if (this.hasResponseURIs()) { - writer.writeCompactSize(this.responseURIs.length); - for (let i = 0; i < this.responseURIs.length; i++) { - writer.writeSlice(this.responseURIs[i].toBuffer()); - } - } - if (this.hasExpiryTime()) { - writer.writeCompactSize(this.expiryTime.toNumber()); - } - return writer.buffer; - } - fromBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - this.flags = new bn_js_1.BN(reader.readCompactSize()); - this.requestID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - if (this.hasRecipentConstraints()) { - this.recipientConstraints = []; - const recipientConstraintsLength = reader.readCompactSize(); - for (let i = 0; i < recipientConstraintsLength; i++) { - const compactId = new CompactAddressObject_1.CompactAddressObject(); - const type = reader.readCompactSize(); - const identityOffset = reader.offset; - reader.offset = compactId.fromBuffer(buffer, identityOffset); - this.recipientConstraints.push({ - type: type, - identity: compactId - }); - } - } - if (this.hasResponseURIs()) { - this.responseURIs = []; - const callbackURIsLength = reader.readCompactSize(); - for (let i = 0; i < callbackURIsLength; i++) { - const newURI = new ResponseURI_1.ResponseURI(); - reader.offset = newURI.fromBuffer(reader.buffer, reader.offset); - this.responseURIs.push(newURI); - } - } - if (this.hasExpiryTime()) { - this.expiryTime = new bn_js_1.BN(reader.readCompactSize()); - } - return reader.offset; - } - toJson() { - const flags = this.calcFlags(); - const retval = { - version: this.version.toNumber(), - flags: flags.toNumber(), - requestid: this.requestID, - recipientConstraints: this.recipientConstraints ? this.recipientConstraints.map(p => ({ type: p.type, - identity: p.identity.toJson() })) : undefined, - responseURIs: this.responseURIs ? this.responseURIs.map(x => x.toJson()) : undefined, - expirytime: this.expiryTime ? this.expiryTime.toNumber() : undefined - }; - return retval; - } - static fromJson(data) { - const loginDetails = new AuthenticationRequestDetails(); - loginDetails.version = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.version) || 0); - loginDetails.flags = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.flags) || 0); - loginDetails.requestID = data.requestid; - if (loginDetails.hasRecipentConstraints() && data.recipientConstraints) { - loginDetails.recipientConstraints = data.recipientConstraints.map(p => ({ type: p.type, - identity: CompactAddressObject_1.CompactAddressObject.fromJson(p.identity) })); - } - if (loginDetails.hasResponseURIs() && data.responseURIs) { - loginDetails.responseURIs = data.responseURIs.map(c => ResponseURI_1.ResponseURI.fromJson(c)); - } - if (loginDetails.hasExpiryTime() && data.expirytime) { - loginDetails.expiryTime = new bn_js_1.BN(data.expirytime); - } - return loginDetails; - } - setFlags() { - this.flags = this.calcFlags(); - } - isValid() { - let valid = this.requestID != null && this.requestID.length > 0; - valid && (valid = this.flags != null && this.flags.gte(new bn_js_1.BN(0))); - // Validate requestID is a valid base58 address - try { - (0, address_1.fromBase58Check)(this.requestID); - } - catch (_a) { - valid = false; - } - if (this.hasRecipentConstraints()) { - if (!this.recipientConstraints || this.recipientConstraints.length === 0) { - return false; - } - } - if (this.hasResponseURIs()) { - if (!this.responseURIs || this.responseURIs.length === 0) { - return false; - } - } - if (this.hasExpiryTime()) { - if (!this.expiryTime || this.expiryTime.isZero()) { - return false; - } - } - return valid; - } -} -exports.AuthenticationRequestDetails = AuthenticationRequestDetails; -// Version -AuthenticationRequestDetails.DEFAULT_VERSION = new bn_js_1.BN(1, 10); -AuthenticationRequestDetails.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); -AuthenticationRequestDetails.VERSION_LASTVALID = new bn_js_1.BN(1, 10); -AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS = new bn_js_1.BN(1, 10); -AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS = new bn_js_1.BN(2, 10); -AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME = new bn_js_1.BN(4, 10); -// Recipient Constraint Types - What types of Identity can login, e.g. REQUIRED_SYSTEM and "VRSC" means only identities on the Verus chain can login -AuthenticationRequestDetails.REQUIRED_ID = 1; -AuthenticationRequestDetails.REQUIRED_SYSTEM = 2; -AuthenticationRequestDetails.REQUIRED_PARENT = 3; diff --git a/dist/vdxf/classes/login/AuthenticationResponseDetails.d.ts b/dist/vdxf/classes/login/AuthenticationResponseDetails.d.ts deleted file mode 100644 index 5deb1d10..00000000 --- a/dist/vdxf/classes/login/AuthenticationResponseDetails.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { BigNumber } from '../../../utils/types/BigNumber'; -import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -export type AuthenticationResponseDetailsJson = { - flags: string; - requestid: string; -}; -export declare class AuthenticationResponseDetails implements SerializableEntity { - flags?: BigNumber; - requestID?: string; - constructor(data?: { - flags?: BigNumber; - requestID?: string; - }); - toSha256(): Buffer; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): AuthenticationResponseDetailsJson; - static fromJson(json: AuthenticationResponseDetailsJson): AuthenticationResponseDetails; -} diff --git a/dist/vdxf/classes/login/AuthenticationResponseDetails.js b/dist/vdxf/classes/login/AuthenticationResponseDetails.js deleted file mode 100644 index e4450b0d..00000000 --- a/dist/vdxf/classes/login/AuthenticationResponseDetails.js +++ /dev/null @@ -1,54 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AuthenticationResponseDetails = void 0; -const varint_1 = require("../../../utils/varint"); -const bufferutils_1 = require("../../../utils/bufferutils"); -const createHash = require("create-hash"); -const bn_js_1 = require("bn.js"); -const address_1 = require("../../../utils/address"); -const vdxf_1 = require("../../../constants/vdxf"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class AuthenticationResponseDetails { - constructor(data) { - this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0", 10); - if (data === null || data === void 0 ? void 0 : data.requestID) { - this.requestID = data.requestID; - } - else - this.requestID = ''; - } - toSha256() { - return createHash("sha256").update(this.toBuffer()).digest(); - } - getByteLength() { - let length = 0; - length += varint_1.default.encodingLength(this.flags); - length += vdxf_1.HASH160_BYTE_LENGTH; - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.flags); - writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); - return writer.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.flags = reader.readVarInt(); - this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - return reader.offset; - } - toJson() { - return { - flags: this.flags.toString(10), - requestid: this.requestID, - }; - } - static fromJson(json) { - return new AuthenticationResponseDetails({ - flags: new bn_js_1.BN(json.flags, 10), - requestID: json.requestid - }); - } -} -exports.AuthenticationResponseDetails = AuthenticationResponseDetails; diff --git a/dist/vdxf/classes/login/LoginRequestDetails.d.ts b/dist/vdxf/classes/login/LoginRequestDetails.d.ts deleted file mode 100644 index 56536522..00000000 --- a/dist/vdxf/classes/login/LoginRequestDetails.d.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - * LoginRequestDetails - Class for handling application login and authentication requests - * - * This class is used when an application is requesting authentication or login from the user, - * including specific recipientConstraints and callback information. The request includes: - * - Request ID for tracking the authentication session - * - Permission sets defining what access the application is requesting - * - Response URIs for post-authentication redirects - * - Optional expiry time for the authentication session - * - * The user's wallet can use these parameters to present a clear authentication request - * to the user, showing exactly what recipientConstraints are being requested and where they will - * be redirected after successful authentication. This enables secure, user-controlled - * authentication flows with granular permission management. - */ -import { BigNumber } from "../../../utils/types/BigNumber"; -import { SerializableEntity } from "../../../utils/types/SerializableEntity"; -import { CompactAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; -import { ResponseURI, ResponseURIJson } from "../ResponseURI"; -export interface LoginRequestDetailsInterface { - version?: BigNumber; - flags?: BigNumber; - requestID: string; - recipientConstraints?: Array; - responseURIs?: Array; - expiryTime?: BigNumber; -} -export interface RecipientConstraintJson { - type: number; - identity: CompactAddressObjectJson; -} -export interface RecipientConstraint { - type: number; - identity: CompactAddressObject; -} -export interface LoginRequestDetailsJson { - version: number; - requestid: string; - flags: number; - recipientConstraints?: Array; - responseURIs?: Array; - expirytime?: number; -} -export declare class LoginRequestDetails implements SerializableEntity { - version: BigNumber; - flags?: BigNumber; - requestID: string; - recipientConstraints?: Array; - responseURIs?: Array; - expiryTime?: BigNumber; - static DEFAULT_VERSION: import("bn.js"); - static VERSION_FIRSTVALID: import("bn.js"); - static VERSION_LASTVALID: import("bn.js"); - static FLAG_HAS_RECIPIENT_CONSTRAINTS: import("bn.js"); - static FLAG_HAS_RESPONSE_URIS: import("bn.js"); - static FLAG_HAS_EXPIRY_TIME: import("bn.js"); - static REQUIRED_ID: number; - static REQUIRED_SYSTEM: number; - static REQUIRED_PARENT: number; - constructor(request?: LoginRequestDetailsInterface); - hasRecipentConstraints(): boolean; - hasResponseURIs(): boolean; - hasExpiryTime(): boolean; - calcFlags(flags?: BigNumber): BigNumber; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): LoginRequestDetailsJson; - static fromJson(data: LoginRequestDetailsJson): LoginRequestDetails; - setFlags(): void; - isValid(): boolean; -} diff --git a/dist/vdxf/classes/login/LoginRequestDetails.js b/dist/vdxf/classes/login/LoginRequestDetails.js deleted file mode 100644 index de129951..00000000 --- a/dist/vdxf/classes/login/LoginRequestDetails.js +++ /dev/null @@ -1,205 +0,0 @@ -"use strict"; -/** - * LoginRequestDetails - Class for handling application login and authentication requests - * - * This class is used when an application is requesting authentication or login from the user, - * including specific recipientConstraints and callback information. The request includes: - * - Request ID for tracking the authentication session - * - Permission sets defining what access the application is requesting - * - Response URIs for post-authentication redirects - * - Optional expiry time for the authentication session - * - * The user's wallet can use these parameters to present a clear authentication request - * to the user, showing exactly what recipientConstraints are being requested and where they will - * be redirected after successful authentication. This enables secure, user-controlled - * authentication flows with granular permission management. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LoginRequestDetails = void 0; -const bufferutils_1 = require("../../../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const varuint_1 = require("../../../utils/varuint"); -const vdxf_1 = require("../../../constants/vdxf"); -const address_1 = require("../../../utils/address"); -const CompactAddressObject_1 = require("../CompactAddressObject"); -const ResponseURI_1 = require("../ResponseURI"); -class LoginRequestDetails { - constructor(request) { - this.version = (request === null || request === void 0 ? void 0 : request.version) || LoginRequestDetails.DEFAULT_VERSION; - this.requestID = (request === null || request === void 0 ? void 0 : request.requestID) || ''; - this.flags = (request === null || request === void 0 ? void 0 : request.flags) || new bn_js_1.BN(0, 10); - this.recipientConstraints = (request === null || request === void 0 ? void 0 : request.recipientConstraints) || null; - this.responseURIs = (request === null || request === void 0 ? void 0 : request.responseURIs) || null; - this.expiryTime = (request === null || request === void 0 ? void 0 : request.expiryTime) || null; - this.setFlags(); - } - hasRecipentConstraints() { - return this.flags.and(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS).eq(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); - } - hasResponseURIs() { - return this.flags.and(LoginRequestDetails.FLAG_HAS_RESPONSE_URIS).eq(LoginRequestDetails.FLAG_HAS_RESPONSE_URIS); - } - hasExpiryTime() { - return this.flags.and(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME).eq(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME); - } - calcFlags(flags = this.flags) { - if (this.recipientConstraints) { - flags = flags.or(LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); - } - if (this.responseURIs) { - flags = flags.or(LoginRequestDetails.FLAG_HAS_RESPONSE_URIS); - } - if (this.expiryTime) { - flags = flags.or(LoginRequestDetails.FLAG_HAS_EXPIRY_TIME); - } - return flags; - } - getByteLength() { - let length = 0; - length += varuint_1.default.encodingLength(this.flags.toNumber()); - length += vdxf_1.HASH160_BYTE_LENGTH; - if (this.hasRecipentConstraints()) { - length += varuint_1.default.encodingLength(this.recipientConstraints.length); - for (let i = 0; i < this.recipientConstraints.length; i++) { - length += varuint_1.default.encodingLength(this.recipientConstraints[i].type); - length += this.recipientConstraints[i].identity.getByteLength(); - } - } - if (this.hasResponseURIs()) { - length += varuint_1.default.encodingLength(this.responseURIs.length); - for (let i = 0; i < this.responseURIs.length; i++) { - length += this.responseURIs[i].getByteLength(); - } - } - if (this.hasExpiryTime()) { - length += varuint_1.default.encodingLength(this.expiryTime.toNumber()); - } - return length; - } - toBuffer() { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeCompactSize(this.flags.toNumber()); - writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); - if (this.hasRecipentConstraints()) { - writer.writeCompactSize(this.recipientConstraints.length); - for (let i = 0; i < this.recipientConstraints.length; i++) { - writer.writeCompactSize(this.recipientConstraints[i].type); - writer.writeSlice(this.recipientConstraints[i].identity.toBuffer()); - } - } - if (this.hasResponseURIs()) { - writer.writeCompactSize(this.responseURIs.length); - for (let i = 0; i < this.responseURIs.length; i++) { - writer.writeSlice(this.responseURIs[i].toBuffer()); - } - } - if (this.hasExpiryTime()) { - writer.writeCompactSize(this.expiryTime.toNumber()); - } - return writer.buffer; - } - fromBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - this.flags = new bn_js_1.BN(reader.readCompactSize()); - this.requestID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - if (this.hasRecipentConstraints()) { - this.recipientConstraints = []; - const recipientConstraintsLength = reader.readCompactSize(); - for (let i = 0; i < recipientConstraintsLength; i++) { - const compactId = new CompactAddressObject_1.CompactAddressObject(); - const type = reader.readCompactSize(); - const identityOffset = reader.offset; - reader.offset = compactId.fromBuffer(buffer, identityOffset); - this.recipientConstraints.push({ - type: type, - identity: compactId - }); - } - } - if (this.hasResponseURIs()) { - this.responseURIs = []; - const callbackURIsLength = reader.readCompactSize(); - for (let i = 0; i < callbackURIsLength; i++) { - const newURI = new ResponseURI_1.ResponseURI(); - reader.offset = newURI.fromBuffer(reader.buffer, reader.offset); - this.responseURIs.push(newURI); - } - } - if (this.hasExpiryTime()) { - this.expiryTime = new bn_js_1.BN(reader.readCompactSize()); - } - return reader.offset; - } - toJson() { - const flags = this.calcFlags(); - const retval = { - version: this.version.toNumber(), - flags: flags.toNumber(), - requestid: this.requestID, - recipientConstraints: this.recipientConstraints ? this.recipientConstraints.map(p => ({ type: p.type, - identity: p.identity.toJson() })) : undefined, - responseURIs: this.responseURIs ? this.responseURIs.map(x => x.toJson()) : undefined, - expirytime: this.expiryTime ? this.expiryTime.toNumber() : undefined - }; - return retval; - } - static fromJson(data) { - const loginDetails = new LoginRequestDetails(); - loginDetails.version = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.version) || 0); - loginDetails.flags = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.flags) || 0); - loginDetails.requestID = data.requestid; - if (loginDetails.hasRecipentConstraints() && data.recipientConstraints) { - loginDetails.recipientConstraints = data.recipientConstraints.map(p => ({ type: p.type, - identity: CompactAddressObject_1.CompactAddressObject.fromJson(p.identity) })); - } - if (loginDetails.hasResponseURIs() && data.responseURIs) { - loginDetails.responseURIs = data.responseURIs.map(c => ResponseURI_1.ResponseURI.fromJson(c)); - } - if (loginDetails.hasExpiryTime() && data.expirytime) { - loginDetails.expiryTime = new bn_js_1.BN(data.expirytime); - } - return loginDetails; - } - setFlags() { - this.flags = this.calcFlags(); - } - isValid() { - let valid = this.requestID != null && this.requestID.length > 0; - valid && (valid = this.flags != null && this.flags.gte(new bn_js_1.BN(0))); - // Validate requestID is a valid base58 address - try { - (0, address_1.fromBase58Check)(this.requestID); - } - catch (_a) { - valid = false; - } - if (this.hasRecipentConstraints()) { - if (!this.recipientConstraints || this.recipientConstraints.length === 0) { - return false; - } - } - if (this.hasResponseURIs()) { - if (!this.responseURIs || this.responseURIs.length === 0) { - return false; - } - } - if (this.hasExpiryTime()) { - if (!this.expiryTime || this.expiryTime.isZero()) { - return false; - } - } - return valid; - } -} -exports.LoginRequestDetails = LoginRequestDetails; -// Version -LoginRequestDetails.DEFAULT_VERSION = new bn_js_1.BN(1, 10); -LoginRequestDetails.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); -LoginRequestDetails.VERSION_LASTVALID = new bn_js_1.BN(1, 10); -LoginRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS = new bn_js_1.BN(1, 10); -LoginRequestDetails.FLAG_HAS_RESPONSE_URIS = new bn_js_1.BN(2, 10); -LoginRequestDetails.FLAG_HAS_EXPIRY_TIME = new bn_js_1.BN(4, 10); -// Recipient Constraint Types - What types of Identity can login, e.g. REQUIRED_SYSTEM and "VRSC" means only identities on the Verus chain can login -LoginRequestDetails.REQUIRED_ID = 1; -LoginRequestDetails.REQUIRED_SYSTEM = 2; -LoginRequestDetails.REQUIRED_PARENT = 3; diff --git a/dist/vdxf/classes/login/LoginResponseDetails.d.ts b/dist/vdxf/classes/login/LoginResponseDetails.d.ts deleted file mode 100644 index 1ad0816f..00000000 --- a/dist/vdxf/classes/login/LoginResponseDetails.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { BigNumber } from '../../../utils/types/BigNumber'; -import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -export type LoginResponseDetailsJson = { - flags: string; - requestid: string; -}; -export declare class LoginResponseDetails implements SerializableEntity { - flags?: BigNumber; - requestID?: string; - constructor(data?: { - flags?: BigNumber; - requestID?: string; - }); - toSha256(): Buffer; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): LoginResponseDetailsJson; - static fromJson(json: LoginResponseDetailsJson): LoginResponseDetails; -} diff --git a/dist/vdxf/classes/login/LoginResponseDetails.js b/dist/vdxf/classes/login/LoginResponseDetails.js deleted file mode 100644 index 4d7b94f1..00000000 --- a/dist/vdxf/classes/login/LoginResponseDetails.js +++ /dev/null @@ -1,54 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LoginResponseDetails = void 0; -const varint_1 = require("../../../utils/varint"); -const bufferutils_1 = require("../../../utils/bufferutils"); -const createHash = require("create-hash"); -const bn_js_1 = require("bn.js"); -const address_1 = require("../../../utils/address"); -const vdxf_1 = require("../../../constants/vdxf"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -class LoginResponseDetails { - constructor(data) { - this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0", 10); - if (data === null || data === void 0 ? void 0 : data.requestID) { - this.requestID = data.requestID; - } - else - this.requestID = ''; - } - toSha256() { - return createHash("sha256").update(this.toBuffer()).digest(); - } - getByteLength() { - let length = 0; - length += varint_1.default.encodingLength(this.flags); - length += vdxf_1.HASH160_BYTE_LENGTH; - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.flags); - writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); - return writer.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.flags = reader.readVarInt(); - this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - return reader.offset; - } - toJson() { - return { - flags: this.flags.toString(10), - requestid: this.requestID, - }; - } - static fromJson(json) { - return new LoginResponseDetails({ - flags: new bn_js_1.BN(json.flags, 10), - requestID: json.requestid - }); - } -} -exports.LoginResponseDetails = LoginResponseDetails; diff --git a/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.d.ts deleted file mode 100644 index 5fa4503b..00000000 --- a/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { AppEncryptionRequestDetails, AppEncryptionRequestJson } from "../requestobjects/AppEncryptionRequestDetails"; -export declare class AppEncryptionRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: AppEncryptionRequestDetails; - constructor(request?: OrdinalVdxfObjectInterfaceTemplate); - static fromJson(details: OrdinalVdxfObjectJsonTemplate): AppEncryptionRequestOrdinalVdxfObject; -} diff --git a/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.js deleted file mode 100644 index 7661c67e..00000000 --- a/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVdxfObject.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AppEncryptionRequestOrdinalVdxfObject = void 0; -const ordinals_1 = require("../../../constants/ordinals/ordinals"); -const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); -const AppEncryptionRequestDetails_1 = require("../requestobjects/AppEncryptionRequestDetails"); -class AppEncryptionRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { - constructor(request = { - data: new AppEncryptionRequestDetails_1.AppEncryptionRequestDetails() - }) { - super({ - type: ordinals_1.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, - data: request.data - }, AppEncryptionRequestDetails_1.AppEncryptionRequestDetails); - } - static fromJson(details) { - return new AppEncryptionRequestOrdinalVdxfObject({ - data: AppEncryptionRequestDetails_1.AppEncryptionRequestDetails.fromJson(details.data) - }); - } -} -exports.AppEncryptionRequestOrdinalVdxfObject = AppEncryptionRequestOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.d.ts deleted file mode 100644 index 00cbbcdb..00000000 --- a/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { AppEncryptionResponseDetails, AppEncryptionResponseDetailsJson } from "../response/AppEncryptionResponseDetails"; -export declare class AppEncryptionResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: AppEncryptionResponseDetails; - constructor(request?: OrdinalVdxfObjectInterfaceTemplate); - static fromJson(details: OrdinalVdxfObjectJsonTemplate): AppEncryptionResponseOrdinalVdxfObject; -} diff --git a/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.js deleted file mode 100644 index de620620..00000000 --- a/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVdxfObject.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AppEncryptionResponseOrdinalVdxfObject = void 0; -const ordinals_1 = require("../../../constants/ordinals/ordinals"); -const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); -const AppEncryptionResponseDetails_1 = require("../response/AppEncryptionResponseDetails"); -class AppEncryptionResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { - constructor(request = { - data: new AppEncryptionResponseDetails_1.AppEncryptionResponseDetails() - }) { - super({ - type: ordinals_1.VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE, - data: request.data - }, AppEncryptionResponseDetails_1.AppEncryptionResponseDetails); - } - static fromJson(details) { - return new AppEncryptionResponseOrdinalVdxfObject({ - data: AppEncryptionResponseDetails_1.AppEncryptionResponseDetails.fromJson(details.data) - }); - } -} -exports.AppEncryptionResponseOrdinalVdxfObject = AppEncryptionResponseOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.d.ts deleted file mode 100644 index 245f1ae8..00000000 --- a/dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { AuthenticationRequestDetails, AuthenticationRequestDetailsJson } from "../login/AuthenticationRequestDetails"; -export declare class AuthenticationRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: AuthenticationRequestDetails; - constructor(request?: OrdinalVdxfObjectInterfaceTemplate); - static fromJson(details: OrdinalVdxfObjectJsonTemplate): AuthenticationRequestOrdinalVdxfObject; -} diff --git a/dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.js deleted file mode 100644 index 9e8b4708..00000000 --- a/dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVdxfObject.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AuthenticationRequestOrdinalVdxfObject = void 0; -const ordinals_1 = require("../../../constants/ordinals/ordinals"); -const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); -const AuthenticationRequestDetails_1 = require("../login/AuthenticationRequestDetails"); -class AuthenticationRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { - constructor(request = { - data: new AuthenticationRequestDetails_1.AuthenticationRequestDetails() - }) { - super({ - type: ordinals_1.VDXF_ORDINAL_AUTHENTICATION_REQUEST, - data: request.data - }, AuthenticationRequestDetails_1.AuthenticationRequestDetails); - } - static fromJson(details) { - return new AuthenticationRequestOrdinalVdxfObject({ - data: AuthenticationRequestDetails_1.AuthenticationRequestDetails.fromJson(details.data) - }); - } -} -exports.AuthenticationRequestOrdinalVdxfObject = AuthenticationRequestOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.d.ts deleted file mode 100644 index e653eb09..00000000 --- a/dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { AuthenticationResponseDetails, AuthenticationResponseDetailsJson } from "../login/AuthenticationResponseDetails"; -export declare class AuthenticationResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: AuthenticationResponseDetails; - constructor(response?: OrdinalVdxfObjectInterfaceTemplate); - static fromJson(details: OrdinalVdxfObjectJsonTemplate): AuthenticationResponseOrdinalVdxfObject; -} diff --git a/dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.js deleted file mode 100644 index 66047e3d..00000000 --- a/dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVdxfObject.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AuthenticationResponseOrdinalVdxfObject = void 0; -const ordinals_1 = require("../../../constants/ordinals/ordinals"); -const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); -const AuthenticationResponseDetails_1 = require("../login/AuthenticationResponseDetails"); -class AuthenticationResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { - constructor(response = { - data: new AuthenticationResponseDetails_1.AuthenticationResponseDetails() - }) { - super({ - type: ordinals_1.VDXF_ORDINAL_AUTHENTICATION_RESPONSE, - data: response.data - }, AuthenticationResponseDetails_1.AuthenticationResponseDetails); - } - static fromJson(details) { - return new AuthenticationResponseOrdinalVdxfObject({ - data: AuthenticationResponseDetails_1.AuthenticationResponseDetails.fromJson(details.data) - }); - } -} -exports.AuthenticationResponseOrdinalVdxfObject = AuthenticationResponseOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.d.ts deleted file mode 100644 index ab0fe47b..00000000 --- a/dist/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { DataDescriptor, DataDescriptorJson } from "../../../pbaas"; -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -export declare class DataDescriptorOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: DataDescriptor; - constructor(request?: OrdinalVdxfObjectInterfaceTemplate); - static fromJson(details: OrdinalVdxfObjectJsonTemplate): DataDescriptorOrdinalVdxfObject; -} diff --git a/dist/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.js deleted file mode 100644 index 5ae82bef..00000000 --- a/dist/vdxf/classes/ordinals/DataDescriptorOrdinalVdxfObject.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DataDescriptorOrdinalVdxfObject = void 0; -const ordinals_1 = require("../../../constants/ordinals/ordinals"); -const pbaas_1 = require("../../../pbaas"); -const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); -class DataDescriptorOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { - constructor(request = { - data: new pbaas_1.DataDescriptor() - }) { - super({ - type: ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR, - data: request.data - }, pbaas_1.DataDescriptor); - } - static fromJson(details) { - return new DataDescriptorOrdinalVdxfObject({ - data: pbaas_1.DataDescriptor.fromJson(details.data) - }); - } -} -exports.DataDescriptorOrdinalVdxfObject = DataDescriptorOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.d.ts deleted file mode 100644 index c6af156c..00000000 --- a/dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { DataPacketResponse, DataResponseJson } from "../datapacket/DataPacketResponse"; -export declare class DataPacketResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: DataPacketResponse; - constructor(request?: OrdinalVdxfObjectInterfaceTemplate); - static fromJson(details: OrdinalVdxfObjectJsonTemplate): DataPacketResponseOrdinalVdxfObject; -} diff --git a/dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.js deleted file mode 100644 index 2c114197..00000000 --- a/dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVdxfObject.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DataPacketResponseOrdinalVdxfObject = void 0; -const ordinals_1 = require("../../../constants/ordinals/ordinals"); -const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); -const DataPacketResponse_1 = require("../datapacket/DataPacketResponse"); -class DataPacketResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { - constructor(request = { - data: new DataPacketResponse_1.DataPacketResponse() - }) { - super({ - type: ordinals_1.VDXF_ORDINAL_DATA_RESPONSE, - data: request.data - }, DataPacketResponse_1.DataPacketResponse); - } - static fromJson(details) { - return new DataPacketResponseOrdinalVdxfObject({ - data: DataPacketResponse_1.DataPacketResponse.fromJson(details.data) - }); - } -} -exports.DataPacketResponseOrdinalVdxfObject = DataPacketResponseOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.d.ts deleted file mode 100644 index 5bf1e005..00000000 --- a/dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson } from "../identity/IdentityUpdateRequestDetails"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -export declare class IdentityUpdateRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: IdentityUpdateRequestDetails; - constructor(request?: OrdinalVdxfObjectInterfaceTemplate); - static fromJson(details: OrdinalVdxfObjectJsonTemplate): IdentityUpdateRequestOrdinalVdxfObject; -} diff --git a/dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.js deleted file mode 100644 index 1c89e577..00000000 --- a/dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVdxfObject.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.IdentityUpdateRequestOrdinalVdxfObject = void 0; -const ordinals_1 = require("../../../constants/ordinals/ordinals"); -const IdentityUpdateRequestDetails_1 = require("../identity/IdentityUpdateRequestDetails"); -const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); -class IdentityUpdateRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { - constructor(request = { - data: new IdentityUpdateRequestDetails_1.IdentityUpdateRequestDetails() - }) { - super({ - type: ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, - data: request.data - }, IdentityUpdateRequestDetails_1.IdentityUpdateRequestDetails); - } - static fromJson(details) { - return new IdentityUpdateRequestOrdinalVdxfObject({ - data: IdentityUpdateRequestDetails_1.IdentityUpdateRequestDetails.fromJson(details.data) - }); - } -} -exports.IdentityUpdateRequestOrdinalVdxfObject = IdentityUpdateRequestOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.d.ts deleted file mode 100644 index c1250286..00000000 --- a/dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson } from "../identity/IdentityUpdateResponseDetails"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -export declare class IdentityUpdateResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: IdentityUpdateResponseDetails; - constructor(response?: OrdinalVdxfObjectInterfaceTemplate); - static fromJson(details: OrdinalVdxfObjectJsonTemplate): IdentityUpdateResponseOrdinalVdxfObject; -} diff --git a/dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.js deleted file mode 100644 index a029e3d9..00000000 --- a/dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVdxfObject.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.IdentityUpdateResponseOrdinalVdxfObject = void 0; -const ordinals_1 = require("../../../constants/ordinals/ordinals"); -const IdentityUpdateResponseDetails_1 = require("../identity/IdentityUpdateResponseDetails"); -const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); -class IdentityUpdateResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { - constructor(response = { - data: new IdentityUpdateResponseDetails_1.IdentityUpdateResponseDetails() - }) { - super({ - type: ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, - data: response.data - }, IdentityUpdateResponseDetails_1.IdentityUpdateResponseDetails); - } - static fromJson(details) { - return new IdentityUpdateResponseOrdinalVdxfObject({ - data: IdentityUpdateResponseDetails_1.IdentityUpdateResponseDetails.fromJson(details.data) - }); - } -} -exports.IdentityUpdateResponseOrdinalVdxfObject = IdentityUpdateResponseOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.d.ts deleted file mode 100644 index cc730c7e..00000000 --- a/dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { LoginRequestDetails, LoginRequestDetailsJson } from "../login/LoginRequestDetails"; -export declare class LoginRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: LoginRequestDetails; - constructor(request?: OrdinalVdxfObjectInterfaceTemplate); - static fromJson(details: OrdinalVdxfObjectJsonTemplate): LoginRequestOrdinalVdxfObject; -} diff --git a/dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.js deleted file mode 100644 index 054b9271..00000000 --- a/dist/vdxf/classes/ordinals/LoginRequestDetailsOrdinalVdxfObject.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LoginRequestOrdinalVdxfObject = void 0; -const ordinals_1 = require("../../../constants/ordinals/ordinals"); -const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); -const LoginRequestDetails_1 = require("../login/LoginRequestDetails"); -class LoginRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { - constructor(request = { - data: new LoginRequestDetails_1.LoginRequestDetails() - }) { - super({ - type: ordinals_1.VDXF_ORDINAL_LOGIN_REQUEST, - data: request.data - }, LoginRequestDetails_1.LoginRequestDetails); - } - static fromJson(details) { - return new LoginRequestOrdinalVdxfObject({ - data: LoginRequestDetails_1.LoginRequestDetails.fromJson(details.data) - }); - } -} -exports.LoginRequestOrdinalVdxfObject = LoginRequestOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.d.ts deleted file mode 100644 index f1d7475a..00000000 --- a/dist/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { LoginResponseDetails, LoginResponseDetailsJson } from "../login/LoginResponseDetails"; -export declare class LoginResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: LoginResponseDetails; - constructor(response?: OrdinalVdxfObjectInterfaceTemplate); - static fromJson(details: OrdinalVdxfObjectJsonTemplate): LoginResponseOrdinalVdxfObject; -} diff --git a/dist/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.js deleted file mode 100644 index 3dec1721..00000000 --- a/dist/vdxf/classes/ordinals/LoginResponseDetailsOrdinalVdxfObject.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LoginResponseOrdinalVdxfObject = void 0; -const ordinals_1 = require("../../../constants/ordinals/ordinals"); -const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); -const LoginResponseDetails_1 = require("../login/LoginResponseDetails"); -class LoginResponseOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { - constructor(response = { - data: new LoginResponseDetails_1.LoginResponseDetails() - }) { - super({ - type: ordinals_1.VDXF_ORDINAL_LOGIN_RESPONSE, - data: response.data - }, LoginResponseDetails_1.LoginResponseDetails); - } - static fromJson(details) { - return new LoginResponseOrdinalVdxfObject({ - data: LoginResponseDetails_1.LoginResponseDetails.fromJson(details.data) - }); - } -} -exports.LoginResponseOrdinalVdxfObject = LoginResponseOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/OrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/OrdinalVdxfObject.d.ts deleted file mode 100644 index 36f2fbe5..00000000 --- a/dist/vdxf/classes/ordinals/OrdinalVdxfObject.d.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { BigNumber } from "../../../utils/types/BigNumber"; -import { SerializableDataEntity, SerializableEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectReservedData, OrdinalVdxfObjectReservedDataJson } from "../../../constants/ordinals/types"; -export interface OrdinalVdxfObjectInterfaceTemplate { - version?: BigNumber; - type?: BigNumber; - key?: string; - data?: T; -} -export type OrdinalVdxfObjectJsonTemplate = { - version: string; - type: string; - vdxfkey?: string; - data?: T; -}; -export type BufferOrOrdinalVdxfObjectReservedData = Buffer | OrdinalVdxfObjectReservedData; -export type StringOrOrdinalVdxfObjectReservedDataJson = string | OrdinalVdxfObjectReservedDataJson; -export type OrdinalVdxfObjectInterface = OrdinalVdxfObjectInterfaceTemplate; -export type OrdinalVdxfObjectJson = OrdinalVdxfObjectJsonTemplate; -export type OrdinalVdxfObjectDataClass = new (...args: any[]) => OrdinalVdxfObjectReservedData; -export type OrdinalVdxfObjectClass = new (...args: any[]) => OrdinalVdxfObject; -export declare const getOrdinalVdxfObjectClassForType: (type: BigNumber) => OrdinalVdxfObjectClass; -export declare class OrdinalVdxfObject implements SerializableEntity { - version: BigNumber; - type: BigNumber; - key?: string; - data?: BufferOrOrdinalVdxfObjectReservedData; - static VERSION_INVALID: import("bn.js"); - static VERSION_FIRST: import("bn.js"); - static VERSION_LAST: import("bn.js"); - static VERSION_CURRENT: import("bn.js"); - constructor(request?: OrdinalVdxfObjectInterfaceTemplate); - isDefinedByVdxfKey(): boolean; - isDefinedByTextVdxfKey(): boolean; - isDefinedByCurrencyOrId(): boolean; - isDefinedByCustomKey(): boolean; - getDataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer): void; - getByteLength(): number; - toBuffer(): Buffer; - fromBufferOptionalType(buffer: Buffer, offset?: number, type?: BigNumber, key?: string): number; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): OrdinalVdxfObjectJson; - static createFromBuffer(buffer: Buffer, offset?: number, optimizeWithOrdinal?: boolean, rootSystemName?: string): { - offset: number; - obj: OrdinalVdxfObject; - }; -} -export declare class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { - data: Buffer; - key: string; - constructor(request?: OrdinalVdxfObjectInterfaceTemplate); - getDataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer): void; - static fromJson(details: OrdinalVdxfObjectJson): GeneralTypeOrdinalVdxfObject; -} diff --git a/dist/vdxf/classes/ordinals/OrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/OrdinalVdxfObject.js deleted file mode 100644 index f93ea485..00000000 --- a/dist/vdxf/classes/ordinals/OrdinalVdxfObject.js +++ /dev/null @@ -1,205 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GeneralTypeOrdinalVdxfObject = exports.OrdinalVdxfObject = exports.getOrdinalVdxfObjectClassForType = void 0; -const bufferutils_1 = require("../../../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const varuint_1 = require("../../../utils/varuint"); -const address_1 = require("../../../utils/address"); -const varint_1 = require("../../../utils/varint"); -const vdxf_1 = require("../../../constants/vdxf"); -const OrdinalVdxfObjectOrdinalMap_1 = require("./OrdinalVdxfObjectOrdinalMap"); -const pbaas_1 = require("../../../constants/pbaas"); -const ordinals_1 = require("../../../constants/ordinals/ordinals"); -const getOrdinalVdxfObjectClassForType = (type) => { - if (OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.isRecognizedOrdinal(type.toNumber())) { - const key = OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.getVdxfKeyForOrdinal(type.toNumber()); - if (OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.hasClassForVdxfKey(key)) { - return OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.getClassForVdxfKey(OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.getVdxfKeyForOrdinal(type.toNumber())); - } - else { - throw new Error("No class found for " + key); - } - } - else if (type.eq(ordinals_1.VDXF_OBJECT_RESERVED_BYTE_I_ADDR) || - type.eq(ordinals_1.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING) || - type.eq(ordinals_1.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY)) - return GeneralTypeOrdinalVdxfObject; - else - throw new Error("Unrecognized vdxf ordinal object type " + type.toNumber()); -}; -exports.getOrdinalVdxfObjectClassForType = getOrdinalVdxfObjectClassForType; -class OrdinalVdxfObject { - constructor(request = { - type: ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR - }) { - if (request.key) { - this.type = ordinals_1.VDXF_OBJECT_RESERVED_BYTE_I_ADDR; - this.key = request.key; - if (request.data) { - this.data = request.data; - } - else - this.data = Buffer.alloc(0); - } - else if (request.type == null) { - this.type = ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR; - } - else { - this.type = request.type; - } - if (request.version) - this.version = request.version; - else - this.version = OrdinalVdxfObject.VERSION_CURRENT; - } - isDefinedByVdxfKey() { - return this.type.eq(ordinals_1.VDXF_OBJECT_RESERVED_BYTE_I_ADDR); - } - isDefinedByTextVdxfKey() { - return this.type.eq(ordinals_1.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING); - } - isDefinedByCurrencyOrId() { - return this.type.eq(ordinals_1.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY); - } - isDefinedByCustomKey() { - return this.isDefinedByCurrencyOrId() || this.isDefinedByTextVdxfKey() || this.isDefinedByVdxfKey(); - } - getDataByteLength() { - return 0; - } - toDataBuffer() { - return Buffer.alloc(0); - } - fromDataBuffer(buffer) { } - getByteLength() { - let length = 0; - length += varuint_1.default.encodingLength(this.type.toNumber()); - if (this.isDefinedByVdxfKey()) { - length += (0, address_1.fromBase58Check)(this.key).hash.length; - } - else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { - const utf8Key = Buffer.from(this.key, 'utf8'); - length += varuint_1.default.encodingLength(utf8Key.length); - length += utf8Key.length; - } - length += varint_1.default.encodingLength(this.version); - const dataLength = this.getDataByteLength(); - length += varuint_1.default.encodingLength(dataLength); - length += dataLength; - return length; - } - toBuffer() { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeCompactSize(this.type.toNumber()); - if (this.isDefinedByVdxfKey()) { - writer.writeSlice((0, address_1.fromBase58Check)(this.key).hash); - } - else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { - writer.writeVarSlice(Buffer.from(this.key, 'utf8')); - } - writer.writeVarInt(this.version); - writer.writeVarSlice(this.toDataBuffer()); - return writer.buffer; - } - fromBufferOptionalType(buffer, offset, type, key) { - if (buffer.length == 0) - throw new Error("Cannot create request from empty buffer"); - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - if (!type) { - this.type = new bn_js_1.BN(reader.readCompactSize()); - } - else - this.type = type; - if (!key) { - if (this.isDefinedByVdxfKey()) { - this.key = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - } - else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { - this.key = reader.readVarSlice().toString('utf8'); - } - } - else { - this.key = key; - } - this.version = reader.readVarInt(); - const dataBuf = reader.readVarSlice(); - this.fromDataBuffer(dataBuf); - return reader.offset; - } - fromBuffer(buffer, offset) { - return this.fromBufferOptionalType(buffer, offset); - } - toJson() { - return { - type: this.type ? this.type.toString() : undefined, - version: this.version ? this.version.toString() : undefined, - vdxfkey: this.key, - data: this.data ? this.isDefinedByCustomKey() ? this.data.toString('hex') : this.data.toJson() : undefined - }; - } - static createFromBuffer(buffer, offset, optimizeWithOrdinal = false, rootSystemName = pbaas_1.DEFAULT_VERUS_CHAINNAME) { - if (buffer.length == 0) - throw new Error("Cannot create request from empty buffer"); - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - let type = new bn_js_1.BN(reader.readCompactSize()); - const rootSystemId = (0, address_1.toIAddress)(rootSystemName); - const Entity = (0, exports.getOrdinalVdxfObjectClassForType)(type); - const ord = new Entity({ type }); - let key; - if (optimizeWithOrdinal) { - let vdxfKey; - if (ord.isDefinedByVdxfKey()) { - key = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - vdxfKey = key; - } - else if (ord.isDefinedByTextVdxfKey() || ord.isDefinedByCurrencyOrId()) { - key = reader.readVarSlice().toString('utf8'); - if (ord.isDefinedByTextVdxfKey()) { - vdxfKey = (0, address_1.getDataKey)(key, undefined, rootSystemId).id; - } - else { - vdxfKey = (0, address_1.toIAddress)(key, rootSystemName); - } - } - if (OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.vdxfKeyHasOrdinal(vdxfKey)) { - type = new bn_js_1.BN(OrdinalVdxfObjectOrdinalMap_1.OrdinalVdxfObjectOrdinalMap.getOrdinalForVdxfKey(vdxfKey)); - } - } - reader.offset = ord.fromBufferOptionalType(buffer, reader.offset, type, key); - return { offset: reader.offset, obj: ord }; - } -} -exports.OrdinalVdxfObject = OrdinalVdxfObject; -OrdinalVdxfObject.VERSION_INVALID = new bn_js_1.BN(0, 10); -OrdinalVdxfObject.VERSION_FIRST = new bn_js_1.BN(1, 10); -OrdinalVdxfObject.VERSION_LAST = new bn_js_1.BN(1, 10); -OrdinalVdxfObject.VERSION_CURRENT = new bn_js_1.BN(1, 10); -class GeneralTypeOrdinalVdxfObject extends OrdinalVdxfObject { - constructor(request = { - type: ordinals_1.VDXF_OBJECT_RESERVED_BYTE_I_ADDR, - data: Buffer.alloc(0), - key: vdxf_1.NULL_ADDRESS - }) { - super({ - type: request.type, - data: request.data, - key: request.key - }); - } - getDataByteLength() { - return this.data.length; - } - toDataBuffer() { - return this.data; - } - fromDataBuffer(buffer) { - this.data = Buffer.from(buffer); - } - static fromJson(details) { - return new GeneralTypeOrdinalVdxfObject({ - key: details.vdxfkey, - data: details.data ? Buffer.from(details.data, 'hex') : undefined - }); - } -} -exports.GeneralTypeOrdinalVdxfObject = GeneralTypeOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.d.ts b/dist/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.d.ts deleted file mode 100644 index 2b2498ea..00000000 --- a/dist/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { OrdinalVdxfObjectClass } from "./OrdinalVdxfObject"; -declare class _OrdinalVdxfObjectOrdinalMap { - private keyToOrdinalMap; - private ordinalToKeyMap; - keyToOrdinalClass: Map; - constructor(); - private updateOrdinalToKeyMap; - registerOrdinal(ordinal: number, vdxfKey: string, ordinalClass: OrdinalVdxfObjectClass, throwOnDuplicate?: boolean): void; - isRecognizedOrdinal(ordinal: number): boolean; - vdxfKeyHasOrdinal(vdxfKey: string): boolean; - hasClassForVdxfKey(vdxfKey: string): boolean; - getOrdinalForVdxfKey(vdxfKey: string): number; - getVdxfKeyForOrdinal(ordinal: number): string; - getClassForVdxfKey(vdxfKey: string): OrdinalVdxfObjectClass; -} -export declare const OrdinalVdxfObjectOrdinalMap: _OrdinalVdxfObjectOrdinalMap; -export {}; diff --git a/dist/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.js b/dist/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.js deleted file mode 100644 index dad33880..00000000 --- a/dist/vdxf/classes/ordinals/OrdinalVdxfObjectOrdinalMap.js +++ /dev/null @@ -1,44 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OrdinalVdxfObjectOrdinalMap = void 0; -// Singleton class that exists to create a bidirectional map of ordinals <-> vdxf keys -class _OrdinalVdxfObjectOrdinalMap { - constructor() { - this.keyToOrdinalMap = new Map(); - this.ordinalToKeyMap = new Map(); - this.keyToOrdinalClass = new Map(); - } - updateOrdinalToKeyMap() { - this.ordinalToKeyMap = new Map(Array.from(this.keyToOrdinalMap, a => a.reverse())); - } - registerOrdinal(ordinal, vdxfKey, ordinalClass, throwOnDuplicate = true) { - if (this.isRecognizedOrdinal(ordinal) || this.vdxfKeyHasOrdinal(vdxfKey)) { - if (throwOnDuplicate) - throw new Error("Cannot overwrite existing ordinal"); - else - return; - } - this.keyToOrdinalMap.set(vdxfKey, ordinal); - this.keyToOrdinalClass.set(vdxfKey, ordinalClass); - this.updateOrdinalToKeyMap(); - } - isRecognizedOrdinal(ordinal) { - return this.ordinalToKeyMap.has(ordinal); - } - vdxfKeyHasOrdinal(vdxfKey) { - return this.keyToOrdinalMap.has(vdxfKey); - } - hasClassForVdxfKey(vdxfKey) { - return this.keyToOrdinalClass.has(vdxfKey); - } - getOrdinalForVdxfKey(vdxfKey) { - return this.keyToOrdinalMap.get(vdxfKey); - } - getVdxfKeyForOrdinal(ordinal) { - return this.ordinalToKeyMap.get(ordinal); - } - getClassForVdxfKey(vdxfKey) { - return this.keyToOrdinalClass.get(vdxfKey); - } -} -exports.OrdinalVdxfObjectOrdinalMap = new _OrdinalVdxfObjectOrdinalMap(); diff --git a/dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.d.ts deleted file mode 100644 index 21151870..00000000 --- a/dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { ProvisionIdentityDetails, ProvisionIdentityDetailsJson } from "../requestobjects/ProvisionIdentityDetails"; -export declare class ProvisionIdentityDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: ProvisionIdentityDetails; - constructor(request?: OrdinalVdxfObjectInterfaceTemplate); - static fromJson(details: OrdinalVdxfObjectJsonTemplate): ProvisionIdentityDetailsOrdinalVdxfObject; -} diff --git a/dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.js deleted file mode 100644 index 8059cc25..00000000 --- a/dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVdxfObject.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ProvisionIdentityDetailsOrdinalVdxfObject = void 0; -const ordinals_1 = require("../../../constants/ordinals/ordinals"); -const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); -const ProvisionIdentityDetails_1 = require("../requestobjects/ProvisionIdentityDetails"); -class ProvisionIdentityDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { - constructor(request = { - data: new ProvisionIdentityDetails_1.ProvisionIdentityDetails() - }) { - super({ - type: ordinals_1.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, - data: request.data - }, ProvisionIdentityDetails_1.ProvisionIdentityDetails); - } - static fromJson(details) { - return new ProvisionIdentityDetailsOrdinalVdxfObject({ - data: ProvisionIdentityDetails_1.ProvisionIdentityDetails.fromJson(details.data) - }); - } -} -exports.ProvisionIdentityDetailsOrdinalVdxfObject = ProvisionIdentityDetailsOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.d.ts deleted file mode 100644 index ac6ea3d2..00000000 --- a/dist/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { OrdinalVdxfObjectReservedData } from "../../../constants/ordinals/types"; -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObject, OrdinalVdxfObjectDataClass, OrdinalVdxfObjectInterfaceTemplate } from "./OrdinalVdxfObject"; -export declare class SerializableEntityOrdinalVdxfObject extends OrdinalVdxfObject implements SerializableDataEntity { - data: OrdinalVdxfObjectReservedData; - entity: OrdinalVdxfObjectDataClass; - constructor(request: OrdinalVdxfObjectInterfaceTemplate, entity: OrdinalVdxfObjectDataClass); - getDataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer): void; -} diff --git a/dist/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.js deleted file mode 100644 index 0d887698..00000000 --- a/dist/vdxf/classes/ordinals/SerializableEntityOrdinalVdxfObject.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SerializableEntityOrdinalVdxfObject = void 0; -const OrdinalVdxfObject_1 = require("./OrdinalVdxfObject"); -class SerializableEntityOrdinalVdxfObject extends OrdinalVdxfObject_1.OrdinalVdxfObject { - constructor(request, entity) { - if (!request || !request.type) - throw new Error("Expected request with data and type"); - super({ - type: request.type - }); - this.entity = entity; - this.data = request.data ? request.data : new entity(); - } - getDataByteLength() { - return this.data.getByteLength(); - } - toDataBuffer() { - return this.data.toBuffer(); - } - fromDataBuffer(buffer) { - this.data = new this.entity(); - this.data.fromBuffer(buffer); - } -} -exports.SerializableEntityOrdinalVdxfObject = SerializableEntityOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.d.ts deleted file mode 100644 index 59b12237..00000000 --- a/dist/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { UserDataRequestDetails, UserDataRequestJson } from "../requestobjects/UserDataRequestDetails"; -export declare class UserDataRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: UserDataRequestDetails; - constructor(request?: OrdinalVdxfObjectInterfaceTemplate); - static fromJson(details: OrdinalVdxfObjectJsonTemplate): UserDataRequestOrdinalVdxfObject; -} diff --git a/dist/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.js deleted file mode 100644 index 6f6223ee..00000000 --- a/dist/vdxf/classes/ordinals/UserDataRequestOrdinalVdxfObject.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserDataRequestOrdinalVdxfObject = void 0; -const ordinals_1 = require("../../../constants/ordinals/ordinals"); -const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); -const UserDataRequestDetails_1 = require("../requestobjects/UserDataRequestDetails"); -class UserDataRequestOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { - constructor(request = { - data: new UserDataRequestDetails_1.UserDataRequestDetails() - }) { - super({ - type: ordinals_1.VDXF_ORDINAL_USER_DATA_REQUEST, - data: request.data - }, UserDataRequestDetails_1.UserDataRequestDetails); - } - static fromJson(details) { - return new UserDataRequestOrdinalVdxfObject({ - data: UserDataRequestDetails_1.UserDataRequestDetails.fromJson(details.data) - }); - } -} -exports.UserDataRequestOrdinalVdxfObject = UserDataRequestOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.d.ts deleted file mode 100644 index 0bd37006..00000000 --- a/dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -import { UserSpecificDataPacketDetails, UserSpecificDataPacketDetailsJson } from "../requestobjects/UserSpecificDataPacketDetails"; -export declare class UserSpecificDataPacketDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: UserSpecificDataPacketDetails; - constructor(request?: OrdinalVdxfObjectInterfaceTemplate); - static fromJson(details: OrdinalVdxfObjectJsonTemplate): UserSpecificDataPacketDetailsOrdinalVdxfObject; -} diff --git a/dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.js deleted file mode 100644 index d1f52306..00000000 --- a/dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVdxfObject.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserSpecificDataPacketDetailsOrdinalVdxfObject = void 0; -const ordinals_1 = require("../../../constants/ordinals/ordinals"); -const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); -const UserSpecificDataPacketDetails_1 = require("../requestobjects/UserSpecificDataPacketDetails"); -class UserSpecificDataPacketDetailsOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { - constructor(request = { - data: new UserSpecificDataPacketDetails_1.UserSpecificDataPacketDetails() - }) { - super({ - type: ordinals_1.VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET, - data: request.data - }, UserSpecificDataPacketDetails_1.UserSpecificDataPacketDetails); - } - static fromJson(details) { - return new UserSpecificDataPacketDetailsOrdinalVdxfObject({ - data: UserSpecificDataPacketDetails_1.UserSpecificDataPacketDetails.fromJson(details.data) - }); - } -} -exports.UserSpecificDataPacketDetailsOrdinalVdxfObject = UserSpecificDataPacketDetailsOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.d.ts b/dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.d.ts deleted file mode 100644 index bf008690..00000000 --- a/dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; -import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "../payment/VerusPayInvoiceDetails"; -import { OrdinalVdxfObjectInterfaceTemplate, OrdinalVdxfObjectJsonTemplate } from "./OrdinalVdxfObject"; -import { SerializableEntityOrdinalVdxfObject } from "./SerializableEntityOrdinalVdxfObject"; -export declare class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject implements SerializableDataEntity { - data: VerusPayInvoiceDetails; - constructor(request?: OrdinalVdxfObjectInterfaceTemplate); - static fromJson(details: OrdinalVdxfObjectJsonTemplate): VerusPayInvoiceOrdinalVdxfObject; -} diff --git a/dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.js b/dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.js deleted file mode 100644 index 883c4684..00000000 --- a/dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVdxfObject.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VerusPayInvoiceOrdinalVdxfObject = void 0; -const ordinals_1 = require("../../../constants/ordinals/ordinals"); -const VerusPayInvoiceDetails_1 = require("../payment/VerusPayInvoiceDetails"); -const SerializableEntityOrdinalVdxfObject_1 = require("./SerializableEntityOrdinalVdxfObject"); -class VerusPayInvoiceOrdinalVdxfObject extends SerializableEntityOrdinalVdxfObject_1.SerializableEntityOrdinalVdxfObject { - constructor(request = { - data: new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails() - }) { - super({ - type: ordinals_1.VDXF_ORDINAL_VERUSPAY_INVOICE, - data: request.data - }, VerusPayInvoiceDetails_1.VerusPayInvoiceDetails); - } - static fromJson(details) { - return new VerusPayInvoiceOrdinalVdxfObject({ - data: VerusPayInvoiceDetails_1.VerusPayInvoiceDetails.fromJson(details.data) - }); - } -} -exports.VerusPayInvoiceOrdinalVdxfObject = VerusPayInvoiceOrdinalVdxfObject; diff --git a/dist/vdxf/classes/ordinals/index.d.ts b/dist/vdxf/classes/ordinals/index.d.ts deleted file mode 100644 index 30ae348f..00000000 --- a/dist/vdxf/classes/ordinals/index.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -export * from './DataDescriptorOrdinalVdxfObject'; -export * from './IdentityUpdateRequestOrdinalVdxfObject'; -export * from './IdentityUpdateResponseOrdinalVdxfObject'; -export * from './OrdinalVdxfObject'; -export * from './OrdinalVdxfObjectOrdinalMap'; -export * from './SerializableEntityOrdinalVdxfObject'; -export * from './VerusPayInvoiceOrdinalVdxfObject'; -export * from './AuthenticationRequestOrdinalVdxfObject'; -export * from './AuthenticationResponseOrdinalVdxfObject'; -export * from './AppEncryptionRequestOrdinalVdxfObject'; -export * from './AppEncryptionResponseOrdinalVdxfObject'; -export * from './ProvisionIdentityDetailsOrdinalVdxfObject'; -export * from './DataPacketResponseOrdinalVdxfObject'; -export * from './UserDataRequestOrdinalVdxfObject'; -export * from './UserSpecificDataPacketDetailsOrdinalVdxfObject'; diff --git a/dist/vdxf/classes/ordinals/index.js b/dist/vdxf/classes/ordinals/index.js deleted file mode 100644 index 2b45ae22..00000000 --- a/dist/vdxf/classes/ordinals/index.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const register_1 = require("../../../constants/ordinals/register"); -__exportStar(require("./DataDescriptorOrdinalVdxfObject"), exports); -__exportStar(require("./IdentityUpdateRequestOrdinalVdxfObject"), exports); -__exportStar(require("./IdentityUpdateResponseOrdinalVdxfObject"), exports); -__exportStar(require("./OrdinalVdxfObject"), exports); -__exportStar(require("./OrdinalVdxfObjectOrdinalMap"), exports); -__exportStar(require("./SerializableEntityOrdinalVdxfObject"), exports); -__exportStar(require("./VerusPayInvoiceOrdinalVdxfObject"), exports); -__exportStar(require("./AuthenticationRequestOrdinalVdxfObject"), exports); -__exportStar(require("./AuthenticationResponseOrdinalVdxfObject"), exports); -__exportStar(require("./AppEncryptionRequestOrdinalVdxfObject"), exports); -__exportStar(require("./AppEncryptionResponseOrdinalVdxfObject"), exports); -__exportStar(require("./ProvisionIdentityDetailsOrdinalVdxfObject"), exports); -__exportStar(require("./DataPacketResponseOrdinalVdxfObject"), exports); -__exportStar(require("./UserDataRequestOrdinalVdxfObject"), exports); -__exportStar(require("./UserSpecificDataPacketDetailsOrdinalVdxfObject"), exports); -(0, register_1.registerOrdinals)(); diff --git a/dist/vdxf/classes/payment/VerusPayInvoice.d.ts b/dist/vdxf/classes/payment/VerusPayInvoice.d.ts deleted file mode 100644 index 2d01279c..00000000 --- a/dist/vdxf/classes/payment/VerusPayInvoice.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { VDXFObject, VerusIDSignature, VerusIDSignatureInterface, VerusIDSignatureJson } from "../../"; -import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "./VerusPayInvoiceDetails"; -import { BigNumber } from "../../../utils/types/BigNumber"; -export interface VerusPayInvoiceInterface { - details: VerusPayInvoiceDetails; - system_id?: string; - signing_id?: string; - signature?: VerusIDSignatureInterface; - version?: BigNumber; -} -export type VerusPayInvoiceJson = { - vdxfkey: string; - details: VerusPayInvoiceDetailsJson; - system_id?: string; - signing_id?: string; - signature?: VerusIDSignatureJson; - version: string; -}; -export declare class VerusPayInvoice extends VDXFObject { - system_id: string; - signing_id: string; - signature?: VerusIDSignature; - details: VerusPayInvoiceDetails; - constructor(request?: VerusPayInvoiceInterface); - getVersionNoFlags(): BigNumber; - isValidVersion(): boolean; - isSigned(): boolean; - setSigned(): void; - getDetailsHash(signedBlockheight: number, signatureVersion?: number): Buffer; - protected _dataByteLength(signer?: string): number; - protected _toDataBuffer(signer?: string): Buffer; - dataByteLength(): number; - toDataBuffer(): Buffer; - protected _fromDataBuffer(buffer: Buffer, offset?: number): number; - fromDataBuffer(buffer: Buffer, offset?: number): number; - toWalletDeeplinkUri(): string; - static fromWalletDeeplinkUri(uri: string): VerusPayInvoice; - toQrString(): string; - static fromQrString(qrstring: string): VerusPayInvoice; - static fromJson(data: VerusPayInvoiceJson): VerusPayInvoice; - toJson(): VerusPayInvoiceJson; -} diff --git a/dist/vdxf/classes/payment/VerusPayInvoice.js b/dist/vdxf/classes/payment/VerusPayInvoice.js deleted file mode 100644 index 018b70d6..00000000 --- a/dist/vdxf/classes/payment/VerusPayInvoice.js +++ /dev/null @@ -1,167 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VerusPayInvoice = void 0; -const __1 = require("../../"); -const keys_1 = require("../../keys"); -const Hash160_1 = require("./../Hash160"); -const bufferutils_1 = require("../../../utils/bufferutils"); -const vdxf_1 = require("../../../constants/vdxf"); -const address_1 = require("../../../utils/address"); -const createHash = require("create-hash"); -const base64url_1 = require("base64url"); -const VerusPayInvoiceDetails_1 = require("./VerusPayInvoiceDetails"); -const bn_js_1 = require("bn.js"); -const veruspay_1 = require("../../../constants/vdxf/veruspay"); -class VerusPayInvoice extends __1.VDXFObject { - constructor(request = { - details: new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails(), - }) { - super(__1.VERUSPAY_INVOICE_VDXF_KEY.vdxfid); - this.system_id = request.system_id; - this.signing_id = request.signing_id; - this.signature = request.signature - ? new __1.VerusIDSignature(request.signature, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false) - : undefined; - if (request.version) - this.version = request.version; - else - this.version = veruspay_1.VERUSPAY_VERSION_CURRENT; - this.details = new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails(request.details, this.getVersionNoFlags()); - } - getVersionNoFlags() { - return this.version.and(veruspay_1.VERUSPAY_VERSION_MASK.notn(veruspay_1.VERUSPAY_VERSION_MASK.bitLength())); - } - isValidVersion() { - return this.getVersionNoFlags().gte(veruspay_1.VERUSPAY_VERSION_FIRSTVALID) && this.getVersionNoFlags().lte(veruspay_1.VERUSPAY_VERSION_LASTVALID); - } - isSigned() { - return !!(this.version.and(veruspay_1.VERUSPAY_VERSION_SIGNED).toNumber()); - } - setSigned() { - this.version = this.version.or(veruspay_1.VERUSPAY_VERSION_SIGNED); - } - getDetailsHash(signedBlockheight, signatureVersion = 2) { - if (this.isSigned()) { - var heightBufferWriter = new bufferutils_1.default.BufferWriter(Buffer.allocUnsafe(4)); - heightBufferWriter.writeUInt32(signedBlockheight); - if (signatureVersion === 1) { - return createHash("sha256") - .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) - .update((0, address_1.fromBase58Check)(this.system_id).hash) - .update(heightBufferWriter.buffer) - .update((0, address_1.fromBase58Check)(this.signing_id).hash) - .update(this.details.toSha256()) - .digest(); - } - else { - return createHash("sha256") - .update((0, address_1.fromBase58Check)(this.system_id).hash) - .update(heightBufferWriter.buffer) - .update((0, address_1.fromBase58Check)(this.signing_id).hash) - .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) - .update(this.details.toSha256()) - .digest(); - } - } - else - return this.details.toSha256(); - } - _dataByteLength(signer = this.signing_id) { - if (this.isSigned()) { - let length = 0; - const _signature = this.signature - ? this.signature - : new __1.VerusIDSignature({ signature: "" }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false); - const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); - length += _system_id.byteLength(); - const _signing_id = Hash160_1.Hash160.fromAddress(signer); - length += _signing_id.byteLength(); - length += _signature.byteLength(); - length += this.details.getByteLength(); - return length; - } - else - return this.details.getByteLength(); - } - _toDataBuffer(signer = this.signing_id) { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.dataByteLength())); - if (this.isSigned()) { - const _signing_id = Hash160_1.Hash160.fromAddress(signer); - const _signature = this.signature - ? this.signature - : new __1.VerusIDSignature({ signature: "" }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false); - const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); - writer.writeSlice(_system_id.toBuffer()); - writer.writeSlice(_signing_id.toBuffer()); - writer.writeSlice(_signature.toBuffer()); - } - writer.writeSlice(this.details.toBuffer()); - return writer.buffer; - } - dataByteLength() { - return this._dataByteLength(); - } - toDataBuffer() { - return this._toDataBuffer(); - } - _fromDataBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - const reqLength = reader.readCompactSize(); - if (reqLength == 0) { - throw new Error("Cannot create request from empty buffer"); - } - else { - if (this.isSigned()) { - this.system_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - this.signing_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - const _sig = new __1.VerusIDSignature(undefined, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false); - reader.offset = _sig.fromBuffer(reader.buffer, reader.offset, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY.vdxfid); - this.signature = _sig; - } - const _details = new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails(); - reader.offset = _details.fromBuffer(reader.buffer, reader.offset, this.getVersionNoFlags()); - this.details = _details; - } - return reader.offset; - } - fromDataBuffer(buffer, offset) { - return this._fromDataBuffer(buffer, offset); - } - toWalletDeeplinkUri() { - return `${__1.WALLET_VDXF_KEY.vdxfid.toLowerCase()}://x-callback-url/${__1.VERUSPAY_INVOICE_VDXF_KEY.vdxfid}/${this.toString(false)}`; - } - static fromWalletDeeplinkUri(uri) { - const split = uri.split(`${__1.VERUSPAY_INVOICE_VDXF_KEY.vdxfid}/`); - const inv = new VerusPayInvoice(); - inv.fromBuffer(base64url_1.default.toBuffer(split[1]), 0, __1.VERUSPAY_INVOICE_VDXF_KEY.vdxfid); - return inv; - } - toQrString() { - return this.toString(true); - } - static fromQrString(qrstring) { - const inv = new VerusPayInvoice(); - inv.fromBuffer(base64url_1.default.toBuffer(qrstring), 0); - return inv; - } - static fromJson(data) { - return new VerusPayInvoice({ - details: VerusPayInvoiceDetails_1.VerusPayInvoiceDetails.fromJson(data.details, data.version ? new bn_js_1.BN(data.version) : veruspay_1.VERUSPAY_VERSION_CURRENT), - signature: data.signature != null ? __1.VerusIDSignature.fromJson(data.signature) : undefined, - signing_id: data.signing_id, - system_id: data.system_id, - version: new bn_js_1.BN(data.version) - }); - } - toJson() { - return { - vdxfkey: this.vdxfkey, - system_id: this.system_id, - signing_id: this.signing_id, - signature: this.isSigned() ? this.signature.toJson() : this.signature, - details: this.details.toJson(), - version: this.version.toString() - }; - } -} -exports.VerusPayInvoice = VerusPayInvoice; diff --git a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.d.ts b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.d.ts deleted file mode 100644 index 8b857b65..00000000 --- a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.d.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { BigNumber } from '../../../utils/types/BigNumber'; -import { TransferDestination, TransferDestinationJson } from '../../../pbaas/TransferDestination'; -import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { SaplingPaymentAddress } from '../../../pbaas'; -import { CompactAddressObjectJson, CompactXAddressObject } from '../CompactAddressObject'; -export declare const VERUSPAY_INVALID: import("bn.js"); -export declare const VERUSPAY_VALID: import("bn.js"); -export declare const VERUSPAY_ACCEPTS_CONVERSION: import("bn.js"); -export declare const VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS: import("bn.js"); -export declare const VERUSPAY_EXPIRES: import("bn.js"); -export declare const VERUSPAY_ACCEPTS_ANY_DESTINATION: import("bn.js"); -export declare const VERUSPAY_ACCEPTS_ANY_AMOUNT: import("bn.js"); -export declare const VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN: import("bn.js"); -export declare const VERUSPAY_IS_TESTNET: import("bn.js"); -export declare const VERUSPAY_IS_PRECONVERT: import("bn.js"); -export declare const VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS: import("bn.js"); -export declare const VERUSPAY_IS_TAGGED: import("bn.js"); -export type VerusPayInvoiceDetailsJson = { - flags?: string; - amount?: string; - destination?: TransferDestinationJson | string; - requestedcurrencyid: string; - expiryheight?: string; - maxestimatedslippage?: string; - acceptedsystems?: Array; - tag?: CompactAddressObjectJson; -}; -export declare class VerusPayInvoiceDetails implements SerializableEntity { - verusPayVersion: BigNumber; - flags: BigNumber; - amount: BigNumber; - destination: TransferDestination | SaplingPaymentAddress; - requestedcurrencyid: string; - expiryheight: BigNumber; - maxestimatedslippage: BigNumber; - acceptedsystems: Array; - tag: CompactXAddressObject; - constructor(data?: { - flags?: BigNumber; - amount?: BigNumber; - destination?: TransferDestination | SaplingPaymentAddress; - requestedcurrencyid: string; - expiryheight?: BigNumber; - maxestimatedslippage?: BigNumber; - acceptedsystems?: Array; - tag?: CompactXAddressObject; - }, verusPayVersion?: BigNumber); - setFlags(flags: { - acceptsConversion?: boolean; - acceptsNonVerusSystems?: boolean; - expires?: boolean; - acceptsAnyAmount?: boolean; - acceptsAnyDestination?: boolean; - excludesVerusBlockchain?: boolean; - isTestnet?: boolean; - isPreconvert?: boolean; - destinationIsSaplingPaymentAddress?: boolean; - isTagged?: boolean; - }): void; - getFlagsJson(): { - [key: string]: boolean; - }; - toSha256(): Buffer; - acceptsConversion(): boolean; - acceptsNonVerusSystems(): boolean; - acceptsAnyAmount(): boolean; - acceptsAnyDestination(): boolean; - expires(): boolean; - excludesVerusBlockchain(): boolean; - isTestnet(): boolean; - isPreconvert(): boolean; - destinationIsSaplingPaymentAddress(): boolean; - isTagged(): boolean; - isValid(): boolean; - isGTEV4(): boolean; - private getVarUIntEncodingLength; - private writeVarUInt; - private readVarUInt; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number, verusPayVersion?: BigNumber): number; - static fromJson(data: VerusPayInvoiceDetailsJson, verusPayVersion?: BigNumber): VerusPayInvoiceDetails; - toJson(): VerusPayInvoiceDetailsJson; -} diff --git a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js deleted file mode 100644 index 97f9ee45..00000000 --- a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js +++ /dev/null @@ -1,262 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VerusPayInvoiceDetails = exports.VERUSPAY_IS_TAGGED = exports.VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS = exports.VERUSPAY_IS_PRECONVERT = exports.VERUSPAY_IS_TESTNET = exports.VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN = exports.VERUSPAY_ACCEPTS_ANY_AMOUNT = exports.VERUSPAY_ACCEPTS_ANY_DESTINATION = exports.VERUSPAY_EXPIRES = exports.VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS = exports.VERUSPAY_ACCEPTS_CONVERSION = exports.VERUSPAY_VALID = exports.VERUSPAY_INVALID = void 0; -const varint_1 = require("../../../utils/varint"); -const varuint_1 = require("../../../utils/varuint"); -const bufferutils_1 = require("../../../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const TransferDestination_1 = require("../../../pbaas/TransferDestination"); -const address_1 = require("../../../utils/address"); -const vdxf_1 = require("../../../constants/vdxf"); -const createHash = require("create-hash"); -const veruspay_1 = require("../../../constants/vdxf/veruspay"); -const pbaas_1 = require("../../../pbaas"); -const CompactAddressObject_1 = require("../CompactAddressObject"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -// Added in V3 -exports.VERUSPAY_INVALID = new bn_js_1.BN(0, 10); -exports.VERUSPAY_VALID = new bn_js_1.BN(1, 10); -exports.VERUSPAY_ACCEPTS_CONVERSION = new bn_js_1.BN(2, 10); -exports.VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS = new bn_js_1.BN(4, 10); -exports.VERUSPAY_EXPIRES = new bn_js_1.BN(8, 10); -exports.VERUSPAY_ACCEPTS_ANY_DESTINATION = new bn_js_1.BN(16, 10); -exports.VERUSPAY_ACCEPTS_ANY_AMOUNT = new bn_js_1.BN(32, 10); -exports.VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN = new bn_js_1.BN(64, 10); -exports.VERUSPAY_IS_TESTNET = new bn_js_1.BN(128, 10); -// Added in V4 -exports.VERUSPAY_IS_PRECONVERT = new bn_js_1.BN(256, 10); -exports.VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS = new bn_js_1.BN(512, 10); -exports.VERUSPAY_IS_TAGGED = new bn_js_1.BN(1024, 10); -class VerusPayInvoiceDetails { - constructor(data, verusPayVersion = veruspay_1.VERUSPAY_VERSION_CURRENT) { - this.flags = exports.VERUSPAY_VALID; - this.amount = null; - this.destination = null; - this.requestedcurrencyid = null; - this.expiryheight = null; - this.maxestimatedslippage = null; - this.acceptedsystems = null; - this.verusPayVersion = verusPayVersion; - this.tag = null; - if (data != null) { - if (data.flags != null) - this.flags = data.flags; - if (data.amount != null) - this.amount = data.amount; - if (data.destination != null) - this.destination = data.destination; - if (data.requestedcurrencyid != null) - this.requestedcurrencyid = data.requestedcurrencyid; - if (data.expiryheight != null) - this.expiryheight = data.expiryheight; - if (data.maxestimatedslippage != null) - this.maxestimatedslippage = data.maxestimatedslippage; - if (data.acceptedsystems != null) - this.acceptedsystems = data.acceptedsystems; - if (data.tag != null) - this.tag = data.tag; - } - } - setFlags(flags) { - if (flags.acceptsConversion) - this.flags = this.flags.or(exports.VERUSPAY_ACCEPTS_CONVERSION); - if (flags.acceptsNonVerusSystems) - this.flags = this.flags.or(exports.VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS); - if (flags.expires) - this.flags = this.flags.or(exports.VERUSPAY_EXPIRES); - if (flags.acceptsAnyAmount) - this.flags = this.flags.or(exports.VERUSPAY_ACCEPTS_ANY_AMOUNT); - if (flags.acceptsAnyDestination) - this.flags = this.flags.or(exports.VERUSPAY_ACCEPTS_ANY_DESTINATION); - if (flags.excludesVerusBlockchain) - this.flags = this.flags.or(exports.VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN); - if (flags.isTestnet) - this.flags = this.flags.or(exports.VERUSPAY_IS_TESTNET); - if (this.isGTEV4()) { - if (flags.isPreconvert) - this.flags = this.flags.or(exports.VERUSPAY_IS_PRECONVERT); - if (flags.destinationIsSaplingPaymentAddress) - this.flags = this.flags.or(exports.VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS); - if (flags.isTagged) - this.flags = this.flags.or(exports.VERUSPAY_IS_TAGGED); - } - } - getFlagsJson() { - return { - acceptsConversion: this.acceptsConversion(), - acceptsNonVerusSystems: this.acceptsNonVerusSystems(), - expires: this.expires(), - acceptsAnyAmount: this.acceptsAnyAmount(), - acceptsAnyDestination: this.acceptsAnyDestination(), - excludesVerusBlockchain: this.excludesVerusBlockchain(), - isTestnet: this.isTestnet(), - isPreconvert: this.isPreconvert(), - destinationIsSaplingPaymentAddress: this.destinationIsSaplingPaymentAddress(), - isTagged: this.isTagged() - }; - } - toSha256() { - return createHash("sha256").update(this.toBuffer()).digest(); - } - acceptsConversion() { - return !!(this.flags.and(exports.VERUSPAY_ACCEPTS_CONVERSION).toNumber()); - } - acceptsNonVerusSystems() { - return !!(this.flags.and(exports.VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS).toNumber()); - } - acceptsAnyAmount() { - return !!(this.flags.and(exports.VERUSPAY_ACCEPTS_ANY_AMOUNT).toNumber()); - } - acceptsAnyDestination() { - return !!(this.flags.and(exports.VERUSPAY_ACCEPTS_ANY_DESTINATION).toNumber()); - } - expires() { - return !!(this.flags.and(exports.VERUSPAY_EXPIRES).toNumber()); - } - excludesVerusBlockchain() { - return !!(this.flags.and(exports.VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN).toNumber()); - } - isTestnet() { - return !!(this.flags.and(exports.VERUSPAY_IS_TESTNET).toNumber()); - } - isPreconvert() { - return this.isGTEV4() && !!(this.flags.and(exports.VERUSPAY_IS_PRECONVERT).toNumber()); - } - destinationIsSaplingPaymentAddress() { - return this.isGTEV4() && !!(this.flags.and(exports.VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS).toNumber()); - } - isTagged() { - return this.isGTEV4() && !!(this.flags.and(exports.VERUSPAY_IS_TAGGED).toNumber()); - } - isValid() { - return (!!(this.flags.and(exports.VERUSPAY_VALID).toNumber())); - } - isGTEV4() { - return (this.verusPayVersion.gte(veruspay_1.VERUSPAY_VERSION_4)); - } - // Functions to deal with change in v4 - getVarUIntEncodingLength(uint) { - return this.isGTEV4() ? varuint_1.default.encodingLength(uint.toNumber()) : varint_1.default.encodingLength(uint); - } - writeVarUInt(writer = new BufferWriter(Buffer.alloc(0)), uint) { - if (this.isGTEV4()) { - return writer.writeCompactSize(uint.toNumber()); - } - else { - return writer.writeVarInt(uint); - } - } - readVarUInt(reader = new BufferReader(Buffer.alloc(0))) { - if (this.isGTEV4()) { - return new bn_js_1.BN(reader.readCompactSize()); - } - else { - return reader.readVarInt(); - } - } - getByteLength() { - let length = 0; - length += this.getVarUIntEncodingLength(this.flags); - if (!this.acceptsAnyAmount()) { - length += this.getVarUIntEncodingLength(this.amount); - } - if (!this.acceptsAnyDestination()) { - length += this.destination.getByteLength(); - } - length += (0, address_1.fromBase58Check)(this.requestedcurrencyid).hash.length; - if (this.expires()) { - length += this.getVarUIntEncodingLength(this.expiryheight); - } - if (this.acceptsConversion()) { - length += this.getVarUIntEncodingLength(this.maxestimatedslippage); - } - if (this.acceptsNonVerusSystems()) { - length += varuint_1.default.encodingLength(this.acceptedsystems.length); - this.acceptedsystems.forEach(() => { - length += vdxf_1.HASH160_BYTE_LENGTH; - }); - } - if (this.isTagged()) { - length += this.tag.getByteLength(); - } - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - this.writeVarUInt(writer, this.flags); - if (!this.acceptsAnyAmount()) - this.writeVarUInt(writer, this.amount); - if (!this.acceptsAnyDestination()) - writer.writeSlice(this.destination.toBuffer()); - writer.writeSlice((0, address_1.fromBase58Check)(this.requestedcurrencyid).hash); - if (this.expires()) { - this.writeVarUInt(writer, this.expiryheight); - } - if (this.acceptsConversion()) { - this.writeVarUInt(writer, this.maxestimatedslippage); - } - if (this.acceptsNonVerusSystems()) { - writer.writeArray(this.acceptedsystems.map(x => (0, address_1.fromBase58Check)(x).hash)); - } - if (this.isTagged()) { - writer.writeSlice(this.tag.toBuffer()); - } - return writer.buffer; - } - fromBuffer(buffer, offset = 0, verusPayVersion = veruspay_1.VERUSPAY_VERSION_CURRENT) { - const reader = new BufferReader(buffer, offset); - this.verusPayVersion = verusPayVersion; - this.flags = this.readVarUInt(reader); - if (!this.acceptsAnyAmount()) - this.amount = this.readVarUInt(reader); - if (!this.acceptsAnyDestination()) { - if (this.destinationIsSaplingPaymentAddress()) { - this.destination = new pbaas_1.SaplingPaymentAddress(); - } - else - this.destination = new TransferDestination_1.TransferDestination(); - reader.offset = this.destination.fromBuffer(reader.buffer, reader.offset); - } - this.requestedcurrencyid = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - if (this.expires()) { - this.expiryheight = this.readVarUInt(reader); - } - if (this.acceptsConversion()) { - this.maxestimatedslippage = this.readVarUInt(reader); - } - if (this.acceptsNonVerusSystems()) { - const acceptedSystemsBuffers = reader.readArray(20); - this.acceptedsystems = acceptedSystemsBuffers.map(x => (0, address_1.toBase58Check)(x, vdxf_1.I_ADDR_VERSION)); - } - if (this.isTagged()) { - this.tag = new CompactAddressObject_1.CompactAddressObject(); - reader.offset = this.tag.fromBuffer(reader.buffer, reader.offset); - } - return reader.offset; - } - static fromJson(data, verusPayVersion = veruspay_1.VERUSPAY_VERSION_CURRENT) { - return new VerusPayInvoiceDetails({ - flags: new bn_js_1.BN(data.flags), - amount: data.amount != null ? new bn_js_1.BN(data.amount) : undefined, - destination: data.destination != null ? typeof data.destination === 'string' ? pbaas_1.SaplingPaymentAddress.fromAddressString(data.destination) : TransferDestination_1.TransferDestination.fromJson(data.destination) : undefined, - requestedcurrencyid: data.requestedcurrencyid, - expiryheight: data.expiryheight != null ? new bn_js_1.BN(data.expiryheight) : undefined, - maxestimatedslippage: data.maxestimatedslippage != null ? new bn_js_1.BN(data.maxestimatedslippage) : undefined, - acceptedsystems: data.acceptedsystems, - tag: data.tag ? CompactAddressObject_1.CompactAddressObject.fromJson(data.tag) : undefined - }, verusPayVersion); - } - toJson() { - return { - flags: this.flags.toString(), - amount: this.acceptsAnyAmount() ? undefined : this.amount.toString(), - destination: this.acceptsAnyDestination() ? undefined : this.destinationIsSaplingPaymentAddress() ? this.destination.toAddressString() : this.destination.toJson(), - requestedcurrencyid: this.requestedcurrencyid, - expiryheight: this.expires() ? this.expiryheight.toString() : undefined, - maxestimatedslippage: this.acceptsConversion() ? this.maxestimatedslippage.toString() : undefined, - acceptedsystems: this.acceptsNonVerusSystems() ? this.acceptedsystems : undefined, - tag: this.isTagged() ? this.tag.toJson() : undefined - }; - } -} -exports.VerusPayInvoiceDetails = VerusPayInvoiceDetails; diff --git a/dist/vdxf/classes/provisioning/ProvisioningChallenge.d.ts b/dist/vdxf/classes/provisioning/ProvisioningChallenge.d.ts deleted file mode 100644 index 3362e3f0..00000000 --- a/dist/vdxf/classes/provisioning/ProvisioningChallenge.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Challenge } from "../Challenge"; -import { Context } from "../Context"; -export interface ProvisioningChallengeInterface { - challenge_id: string; - created_at: number; - salt?: string; - name?: string; - system_id?: string; - parent?: string; - context?: Context; -} -export declare class ProvisioningChallenge extends Challenge { - name?: string; - system_id?: string; - parent?: string; - constructor(challenge?: ProvisioningChallengeInterface); - dataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer, offset?: number): number; - toJson(): { - vdxfkey: string; - challenge_id: string; - created_at: number; - salt: string; - name: string; - system_id: string; - parent: string; - context: Context; - requested_access: any; - requested_access_audience: any; - subject: any; - provisioning_info: any; - alt_auth_factors: any; - session_id: any; - attestations: any; - skip: any; - redirect_uris: any; - }; -} diff --git a/dist/vdxf/classes/provisioning/ProvisioningChallenge.js b/dist/vdxf/classes/provisioning/ProvisioningChallenge.js deleted file mode 100644 index e49a00b3..00000000 --- a/dist/vdxf/classes/provisioning/ProvisioningChallenge.js +++ /dev/null @@ -1,84 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ProvisioningChallenge = void 0; -const bufferutils_1 = require("../../../utils/bufferutils"); -const varuint_1 = require("../../../utils/varuint"); -const keys_1 = require("../../keys"); -const Challenge_1 = require("../Challenge"); -const Hash160_1 = require("../Hash160"); -class ProvisioningChallenge extends Challenge_1.Challenge { - constructor(challenge = { challenge_id: "", created_at: 0 }) { - super({ - challenge_id: challenge.challenge_id, - created_at: challenge.created_at, - salt: challenge.salt, - context: challenge.context, - }, keys_1.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY.vdxfid); - this.name = challenge.name; - this.system_id = challenge.system_id; - this.parent = challenge.parent; - } - dataByteLength() { - const nameBuf = Buffer.from(this.name, 'utf-8'); - let length = 0; - length += nameBuf.length; - length += varuint_1.default.encodingLength(nameBuf.length); - length += this.system_id ? Hash160_1.Hash160.fromAddress(this.system_id, true).byteLength() - : Hash160_1.Hash160.getEmpty().byteLength(); - length += this.parent ? Hash160_1.Hash160.fromAddress(this.parent, true).byteLength() - : Hash160_1.Hash160.getEmpty().byteLength(); - return super.dataByteLength() + length; - } - toDataBuffer() { - const superBuf = super.toDataBuffer(); - const writer = new bufferutils_1.default.BufferWriter(superBuf, super.dataByteLength()); - writer.writeVarSlice(Buffer.from(this.name, 'utf-8')); - writer.writeSlice(this.system_id - ? Hash160_1.Hash160.fromAddress(this.system_id, true).toBuffer() - : Hash160_1.Hash160.getEmpty().toBuffer()); - writer.writeSlice(this.parent - ? Hash160_1.Hash160.fromAddress(this.parent, true).toBuffer() - : Hash160_1.Hash160.getEmpty().toBuffer()); - return writer.buffer; - } - fromDataBuffer(buffer, offset) { - const challenge = new Challenge_1.Challenge(undefined, keys_1.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY.vdxfid); - let _offset = challenge.fromDataBuffer(buffer, offset); - const reader = new bufferutils_1.default.BufferReader(buffer, _offset); - this.name = reader.readVarSlice().toString('utf-8'); - const _system_id = new Hash160_1.Hash160(); - reader.offset = _system_id.fromBuffer(reader.buffer, true, reader.offset); - this.system_id = _system_id.toAddress(); - const _parent = new Hash160_1.Hash160(); - reader.offset = _parent.fromBuffer(reader.buffer, true, reader.offset); - this.parent = _parent.toAddress(); - this.challenge_id = challenge.challenge_id; - this.created_at = challenge.created_at; - this.salt = challenge.salt; - this.context = challenge.context; - return reader.offset; - } - // toJson - toJson() { - return { - vdxfkey: this.vdxfkey, - challenge_id: this.challenge_id, - created_at: this.created_at, - salt: this.salt, - name: this.name, - system_id: this.system_id, - parent: this.parent, - context: this.context, - requested_access: undefined, - requested_access_audience: undefined, - subject: undefined, - provisioning_info: undefined, - alt_auth_factors: undefined, - session_id: undefined, - attestations: undefined, - skip: undefined, - redirect_uris: undefined - }; - } -} -exports.ProvisioningChallenge = ProvisioningChallenge; diff --git a/dist/vdxf/classes/provisioning/ProvisioningDecision.d.ts b/dist/vdxf/classes/provisioning/ProvisioningDecision.d.ts deleted file mode 100644 index 3d8ec70b..00000000 --- a/dist/vdxf/classes/provisioning/ProvisioningDecision.d.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { Decision } from "../Decision"; -import { Context } from "../Context"; -import { ProvisioningRequest } from "./ProvisioningRequest"; -import { ProvisioningResult } from "./ProvisioningResult"; -export interface ProvisioningDecisionInterface { - decision_id: string; - created_at: number; - salt?: string; - result?: ProvisioningResult; - request: ProvisioningRequest; - context?: Context; -} -export declare class ProvisioningDecision extends Decision implements ProvisioningDecisionInterface { - result?: ProvisioningResult; - salt?: string; - request: ProvisioningRequest; - constructor(decision?: ProvisioningDecisionInterface); - dataByteLength(): number; - toDataBuffer(): Buffer; - toJson(): { - vdxfkey: string; - decision_id: string; - created_at: number; - salt: string; - result: {}; - request: { - vdxfkey: string; - system_id: any; - signing_address: string; - signing_id: any; - signature: import("../../").VerusIDSignatureJson; - challenge: { - vdxfkey: string; - challenge_id: string; - created_at: number; - salt: string; - name: string; - system_id: string; - parent: string; - context: Context; - requested_access: any; - requested_access_audience: any; - subject: any; - provisioning_info: any; - alt_auth_factors: any; - session_id: any; - attestations: any; - skip: any; - redirect_uris: any; - }; - }; - context: { - kv: { - [key: string]: string; - }; - vdxfkey: string; - }; - }; - fromDataBuffer(buffer: Buffer, offset?: number): number; -} diff --git a/dist/vdxf/classes/provisioning/ProvisioningDecision.js b/dist/vdxf/classes/provisioning/ProvisioningDecision.js deleted file mode 100644 index 3deb2d05..00000000 --- a/dist/vdxf/classes/provisioning/ProvisioningDecision.js +++ /dev/null @@ -1,69 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ProvisioningDecision = void 0; -const bufferutils_1 = require("../../../utils/bufferutils"); -const Decision_1 = require("../Decision"); -const ProvisioningRequest_1 = require("./ProvisioningRequest"); -const __1 = require("../../"); -const ProvisioningResult_1 = require("./ProvisioningResult"); -class ProvisioningDecision extends Decision_1.Decision { - constructor(decision = { - decision_id: "", - created_at: 0, - request: new ProvisioningRequest_1.ProvisioningRequest(), - }) { - super({ - decision_id: decision.decision_id, - created_at: decision.created_at, - salt: decision.salt, - context: decision.context, - request: decision.request, - }, __1.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY.vdxfid); - this.result = - decision.result != null - ? new ProvisioningResult_1.ProvisioningResult(decision.result) - : decision.result; - this.request = new ProvisioningRequest_1.ProvisioningRequest(decision.request); - } - dataByteLength() { - return super.dataByteLength() + this.result.byteLength(); - } - toDataBuffer() { - const superBuf = super.toDataBuffer(); - const resultBuf = this.result - ? this.result.toBuffer() - : new ProvisioningResult_1.ProvisioningResult({ - state: __1.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED.vdxfid, - }).toBuffer(); - const writer = new bufferutils_1.default.BufferWriter(superBuf, super.dataByteLength()); - writer.writeSlice(resultBuf); - return writer.buffer; - } - toJson() { - return { - vdxfkey: this.vdxfkey, - decision_id: this.decision_id, - created_at: this.created_at, - salt: this.salt, - result: this.result ? this.result.toJson() : null, - request: this.request.toJson(), - context: this.context ? this.context.toJson() : null, - }; - } - fromDataBuffer(buffer, offset) { - const decision = new Decision_1.Decision(undefined, __1.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY.vdxfid); - let _offset = decision.fromDataBuffer(buffer, offset, false); - const reader = new bufferutils_1.default.BufferReader(buffer, _offset); - this.request = new ProvisioningRequest_1.ProvisioningRequest(); - reader.offset = this.request.fromBuffer(buffer, _offset); - const _result = new ProvisioningResult_1.ProvisioningResult(); - reader.offset = _result.fromBuffer(reader.buffer, reader.offset); - this.result = _result; - this.decision_id = decision.decision_id; - this.created_at = decision.created_at; - this.salt = decision.salt; - this.context = decision.context; - return reader.offset; - } -} -exports.ProvisioningDecision = ProvisioningDecision; diff --git a/dist/vdxf/classes/provisioning/ProvisioningRequest.d.ts b/dist/vdxf/classes/provisioning/ProvisioningRequest.d.ts deleted file mode 100644 index cacad663..00000000 --- a/dist/vdxf/classes/provisioning/ProvisioningRequest.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { VerusIDSignatureInterface } from "../../"; -import { Request } from "../Request"; -import { ProvisioningChallenge, ProvisioningChallengeInterface } from "./ProvisioningChallenge"; -export interface ProvisioningRequestInterface { - signing_address?: string; - signature?: VerusIDSignatureInterface; - challenge: ProvisioningChallengeInterface; -} -export declare class ProvisioningRequest extends Request { - signing_address?: string; - challenge: ProvisioningChallenge; - constructor(request?: ProvisioningRequestInterface); - toJson(): { - vdxfkey: string; - system_id: any; - signing_address: string; - signing_id: any; - signature: import("../../").VerusIDSignatureJson; - challenge: { - vdxfkey: string; - challenge_id: string; - created_at: number; - salt: string; - name: string; - system_id: string; - parent: string; - context: import("..").Context; - requested_access: any; - requested_access_audience: any; - subject: any; - provisioning_info: any; - alt_auth_factors: any; - session_id: any; - attestations: any; - skip: any; - redirect_uris: any; - }; - }; - getChallengeHash(): Buffer; - dataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer, offset?: number): number; - toWalletDeeplinkUri(): string; - static fromWalletDeeplinkUri(uri: string): Request; -} diff --git a/dist/vdxf/classes/provisioning/ProvisioningRequest.js b/dist/vdxf/classes/provisioning/ProvisioningRequest.js deleted file mode 100644 index 9a3222f3..00000000 --- a/dist/vdxf/classes/provisioning/ProvisioningRequest.js +++ /dev/null @@ -1,64 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ProvisioningRequest = void 0; -const createHash = require("create-hash"); -const __1 = require("../../"); -const vdxf_1 = require("../../../constants/vdxf"); -const Request_1 = require("../Request"); -const ProvisioningChallenge_1 = require("./ProvisioningChallenge"); -class ProvisioningRequest extends Request_1.Request { - constructor(request = { - signing_address: "", - challenge: new ProvisioningChallenge_1.ProvisioningChallenge(), - }) { - super({ - system_id: null, - signing_id: null, - challenge: request.challenge, - signature: request.signature, - }, __1.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY.vdxfid); - this.challenge = new ProvisioningChallenge_1.ProvisioningChallenge(request.challenge); - this.signing_address = request.signing_address; - } - toJson() { - return { - vdxfkey: this.vdxfkey, - system_id: null, - signing_address: this.signing_address, - signing_id: null, - signature: this.signature ? this.signature.toJson() : this.signature, - challenge: this.challenge.toJson(), - }; - } - getChallengeHash() { - return createHash("sha256") - .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) - .update(this.challenge.toSha256()) - .digest(); - } - dataByteLength() { - const length = this._dataByteLength(this.signing_address); - return length; - } - toDataBuffer() { - const buffer = this._toDataBuffer(this.signing_address); - return buffer; - } - fromDataBuffer(buffer, offset) { - let _offset = this._fromDataBuffer(buffer, offset); - this.challenge = new ProvisioningChallenge_1.ProvisioningChallenge(); - _offset = this.challenge.fromBuffer(buffer, _offset); - this.signing_address = this.signing_id; - this.signing_id = null; - return _offset; - } - toWalletDeeplinkUri() { - if (this.signature == null) - throw new Error("Request must be signed before it can be used as a deep link"); - throw new Error("Cannot create deeplink from provisioning request"); - } - static fromWalletDeeplinkUri(uri) { - throw new Error("Cannot create provisioning request from deeplink"); - } -} -exports.ProvisioningRequest = ProvisioningRequest; diff --git a/dist/vdxf/classes/provisioning/ProvisioningResponse.d.ts b/dist/vdxf/classes/provisioning/ProvisioningResponse.d.ts deleted file mode 100644 index f72e2d70..00000000 --- a/dist/vdxf/classes/provisioning/ProvisioningResponse.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { VerusIDSignatureInterface } from "../../"; -import { ProvisioningDecisionInterface } from "./ProvisioningDecision"; -import { Response } from "../Response"; -export interface ProvisioningResponseInterface { - system_id: string; - signing_id: string; - signature?: VerusIDSignatureInterface; - decision: ProvisioningDecisionInterface; -} -export declare class ProvisioningResponse extends Response { - constructor(response?: ProvisioningResponseInterface); - fromDataBuffer(buffer: Buffer, offset?: number): number; -} diff --git a/dist/vdxf/classes/provisioning/ProvisioningResponse.js b/dist/vdxf/classes/provisioning/ProvisioningResponse.js deleted file mode 100644 index f2d74b44..00000000 --- a/dist/vdxf/classes/provisioning/ProvisioningResponse.js +++ /dev/null @@ -1,28 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ProvisioningResponse = void 0; -const __1 = require("../../"); -const ProvisioningDecision_1 = require("./ProvisioningDecision"); -const Response_1 = require("../Response"); -class ProvisioningResponse extends Response_1.Response { - constructor(response = { - system_id: "", - signing_id: "", - decision: new ProvisioningDecision_1.ProvisioningDecision(), - }) { - super({ - system_id: response.system_id, - signing_id: response.signing_id, - signature: response.signature, - decision: response.decision, - }, __1.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY.vdxfid); - this.decision = new ProvisioningDecision_1.ProvisioningDecision(response.decision); - } - fromDataBuffer(buffer, offset) { - let _offset = super.fromDataBuffer(buffer, offset); - this.decision = new ProvisioningDecision_1.ProvisioningDecision(); - _offset = this.decision.fromBuffer(buffer, _offset); - return _offset; - } -} -exports.ProvisioningResponse = ProvisioningResponse; diff --git a/dist/vdxf/classes/provisioning/ProvisioningResult.d.ts b/dist/vdxf/classes/provisioning/ProvisioningResult.d.ts deleted file mode 100644 index 87dc49e8..00000000 --- a/dist/vdxf/classes/provisioning/ProvisioningResult.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { HexDataVdxfObject, VDXFObject } from "../.."; -export interface ProvisioningResultInterface { - state: string; - error_key?: string; - error_desc?: string; - identity_address?: string; - system_id?: string; - fully_qualified_name?: string; - parent?: string; - info_uri?: string; - provisioning_txids?: Array; -} -export declare class ProvisioningTxid extends HexDataVdxfObject { - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer, offset?: number): number; -} -export declare class ProvisioningResult extends VDXFObject { - state: string; - error_key?: string; - error_desc?: string; - identity_address?: string; - info_uri?: string; - provisioning_txids?: Array; - system_id?: string; - fully_qualified_name?: string; - parent?: string; - constructor(result?: ProvisioningResultInterface); - dataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer, offset?: number): number; - toJson(): {}; -} diff --git a/dist/vdxf/classes/provisioning/ProvisioningResult.js b/dist/vdxf/classes/provisioning/ProvisioningResult.js deleted file mode 100644 index 0188cdbb..00000000 --- a/dist/vdxf/classes/provisioning/ProvisioningResult.js +++ /dev/null @@ -1,147 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ProvisioningResult = exports.ProvisioningTxid = void 0; -const __1 = require("../.."); -const bufferutils_1 = require("../../../utils/bufferutils"); -const varuint_1 = require("../../../utils/varuint"); -const keys_1 = require("../../keys"); -const Hash160_1 = require("../Hash160"); -class ProvisioningTxid extends __1.HexDataVdxfObject { - toDataBuffer() { - return (0, bufferutils_1.reverseBuffer)(super.toDataBuffer()); - } - fromDataBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - const provisioningTxidSlice = reader.readVarSlice(); - const provisioningTxidBuf = Buffer.alloc(provisioningTxidSlice.length); - const provisioningTxidWriter = new bufferutils_1.default.BufferWriter(provisioningTxidBuf); - provisioningTxidWriter.writeSlice(provisioningTxidSlice); - this.data = (0, bufferutils_1.reverseBuffer)(provisioningTxidWriter.buffer).toString('hex'); - return reader.offset; - } -} -exports.ProvisioningTxid = ProvisioningTxid; -class ProvisioningResult extends __1.VDXFObject { - constructor(result = { state: "" }) { - super(keys_1.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY.vdxfid); - this.state = result.state; - this.error_desc = result.error_desc; - this.error_key = result.error_key; - this.identity_address = result.identity_address; - this.info_uri = result.info_uri; - this.provisioning_txids = result.provisioning_txids - ? result.provisioning_txids.map((x) => new ProvisioningTxid(x.data, x.vdxfkey)) - : result.provisioning_txids; - this.system_id = result.system_id; - this.fully_qualified_name = result.fully_qualified_name; - this.parent = result.parent; - } - dataByteLength() { - const stateLength = Hash160_1.Hash160.fromAddress(this.state).byteLength(); - const errorKeyLength = this.error_key - ? Hash160_1.Hash160.fromAddress(this.error_key, true).byteLength() - : Hash160_1.Hash160.getEmpty().byteLength(); - const errorDescBuf = this.error_desc == null - ? Buffer.alloc(0) - : Buffer.from(this.error_desc, "utf-8"); - const errorDescLength = errorDescBuf.length + varuint_1.default.encodingLength(errorDescBuf.length); - const idAddrLength = this.identity_address - ? Hash160_1.Hash160.fromAddress(this.identity_address, true).byteLength() - : Hash160_1.Hash160.getEmpty().byteLength(); - const systemIdLength = this.system_id - ? Hash160_1.Hash160.fromAddress(this.system_id, true).byteLength() - : Hash160_1.Hash160.getEmpty().byteLength(); - const nameBuf = this.fully_qualified_name == null - ? Buffer.alloc(0) - : Buffer.from(this.fully_qualified_name, "utf-8"); - const nameLength = nameBuf.length + varuint_1.default.encodingLength(nameBuf.length); - const parentLength = this.parent - ? Hash160_1.Hash160.fromAddress(this.parent, true).byteLength() - : Hash160_1.Hash160.getEmpty().byteLength(); - const infoUriBuf = this.info_uri == null ? Buffer.alloc(0) : Buffer.from(this.info_uri, "utf-8"); - const infoUriLength = infoUriBuf.length + varuint_1.default.encodingLength(infoUriBuf.length); - const _provisioning_txids = this.provisioning_txids ? this.provisioning_txids : []; - let length = (stateLength + - errorKeyLength + - errorDescLength + - idAddrLength + - systemIdLength + - nameLength + - parentLength + - infoUriLength); - length += varuint_1.default.encodingLength(_provisioning_txids.length); - length += _provisioning_txids.reduce((sum, current) => sum + current.byteLength(), 0); - return length; - } - toDataBuffer() { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.dataByteLength())); - writer.writeSlice(Hash160_1.Hash160.fromAddress(this.state).toBuffer()); - writer.writeSlice(this.error_key - ? Hash160_1.Hash160.fromAddress(this.error_key, true).toBuffer() - : Hash160_1.Hash160.getEmpty().toBuffer()); - writer.writeVarSlice(this.error_desc == null ? Buffer.alloc(0) : Buffer.from(this.error_desc, "utf-8")); - writer.writeSlice(this.identity_address - ? Hash160_1.Hash160.fromAddress(this.identity_address, true).toBuffer() - : Hash160_1.Hash160.getEmpty().toBuffer()); - writer.writeSlice(this.system_id - ? Hash160_1.Hash160.fromAddress(this.system_id, true).toBuffer() - : Hash160_1.Hash160.getEmpty().toBuffer()); - writer.writeVarSlice(this.fully_qualified_name == null ? Buffer.alloc(0) : Buffer.from(this.fully_qualified_name, "utf-8")); - writer.writeSlice(this.parent - ? Hash160_1.Hash160.fromAddress(this.parent, true).toBuffer() - : Hash160_1.Hash160.getEmpty().toBuffer()); - writer.writeVarSlice(this.info_uri == null ? Buffer.alloc(0) : Buffer.from(this.info_uri, "utf-8")); - const _provisioning_txids = this.provisioning_txids ? this.provisioning_txids : []; - writer.writeArray(_provisioning_txids.map((x) => x.toBuffer())); - return writer.buffer; - } - fromDataBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - const resultLength = reader.readCompactSize(); - if (resultLength == 0) { - throw new Error("Cannot create provisioning result from empty buffer"); - } - else { - const _state = new Hash160_1.Hash160(); - reader.offset = _state.fromBuffer(reader.buffer, false, reader.offset); - this.state = _state.toAddress(); - const _error_key = new Hash160_1.Hash160(); - reader.offset = _error_key.fromBuffer(reader.buffer, true, reader.offset); - this.error_key = _error_key.toAddress(); - this.error_desc = reader.readVarSlice().toString('utf8'); - const _identity_address = new Hash160_1.Hash160(); - reader.offset = _identity_address.fromBuffer(reader.buffer, true, reader.offset); - this.identity_address = _identity_address.toAddress(); - const _system_id = new Hash160_1.Hash160(); - reader.offset = _system_id.fromBuffer(reader.buffer, true, reader.offset); - this.system_id = _system_id.toAddress(); - this.fully_qualified_name = reader.readVarSlice().toString('utf8'); - const _parent = new Hash160_1.Hash160(); - reader.offset = _parent.fromBuffer(reader.buffer, true, reader.offset); - this.parent = _parent.toAddress(); - this.info_uri = reader.readVarSlice().toString('utf8'); - this.provisioning_txids = []; - const provisioningTxidLength = reader.readCompactSize(); - for (let i = 0; i < provisioningTxidLength; i++) { - const _provisioning_txid = new ProvisioningTxid(); - reader.offset = _provisioning_txid.fromBuffer(reader.buffer, reader.offset); - this.provisioning_txids.push(_provisioning_txid); - } - } - return reader.offset; - } - toJson() { - return { - vdxfkey: this.vdxfkey, - state: this.state, - error_key: this.error_key, - error_desc: this.error_desc, - identity_address: this.identity_address, - info_uri: this.info_uri, - provisioning_txids: this.provisioning_txids, - system_id: this.system_id, - fully_qualified_name: this.fully_qualified_name - }; - } -} -exports.ProvisioningResult = ProvisioningResult; diff --git a/dist/vdxf/classes/request/GenericRequest.d.ts b/dist/vdxf/classes/request/GenericRequest.d.ts deleted file mode 100644 index 82d07fa8..00000000 --- a/dist/vdxf/classes/request/GenericRequest.d.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { SerializableEntity } from "../../../utils/types/SerializableEntity"; -import { GenericEnvelope, GenericEnvelopeInterface, GenericEnvelopeJson } from "../envelope/GenericEnvelope"; -import { SaplingPaymentAddress } from '../../../pbaas/SaplingPaymentAddress'; -export type GenericRequestJson = GenericEnvelopeJson & { - encryptresponsetoaddress?: string; -}; -export type GenericRequestInterface = GenericEnvelopeInterface & { - encryptResponseToAddress?: SaplingPaymentAddress; -}; -export declare class GenericRequest extends GenericEnvelope implements SerializableEntity { - encryptResponseToAddress?: SaplingPaymentAddress; - static VERSION_CURRENT: import("bn.js"); - static VERSION_FIRSTVALID: import("bn.js"); - static VERSION_LASTVALID: import("bn.js"); - static BASE_FLAGS: import("bn.js"); - static FLAG_SIGNED: import("bn.js"); - static FLAG_HAS_CREATED_AT: import("bn.js"); - static FLAG_MULTI_DETAILS: import("bn.js"); - static FLAG_IS_TESTNET: import("bn.js"); - static FLAG_HAS_SALT: import("bn.js"); - static FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS: import("bn.js"); - constructor(envelope?: GenericRequestInterface); - hasEncryptResponseToAddress(): boolean; - setHasEncryptResponseToAddress(): void; - setFlags(): void; - getByteLengthOptionalSig(includeSig?: boolean): number; - toBufferOptionalSig(includeSig?: boolean): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): GenericRequestJson; - static fromWalletDeeplinkUri(uri: string): GenericRequest; - static fromQrString(qrstring: string): GenericRequest; - toWalletDeeplinkUri(): string; - toQrString(): string; -} diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js deleted file mode 100644 index 824f14bf..00000000 --- a/dist/vdxf/classes/request/GenericRequest.js +++ /dev/null @@ -1,100 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GenericRequest = void 0; -const bn_js_1 = require("bn.js"); -const GenericEnvelope_1 = require("../envelope/GenericEnvelope"); -const SaplingPaymentAddress_1 = require("../../../pbaas/SaplingPaymentAddress"); -const bufferutils_1 = require("../../../utils/bufferutils"); -const base64url_1 = require("base64url"); -const deeplink_1 = require("../../../constants/deeplink"); -class GenericRequest extends GenericEnvelope_1.GenericEnvelope { - constructor(envelope = { - details: [], - flags: GenericRequest.BASE_FLAGS - }) { - super(envelope); - this.encryptResponseToAddress = envelope.encryptResponseToAddress; - this.setFlags(); - } - hasEncryptResponseToAddress() { - return !!(this.flags.and(GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS).toNumber()); - } - setHasEncryptResponseToAddress() { - this.flags = this.flags.or(GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS); - } - setFlags() { - super.setFlags(); - if (this.encryptResponseToAddress) - this.setHasEncryptResponseToAddress(); - } - getByteLengthOptionalSig(includeSig = true) { - let length = super.getByteLengthOptionalSig(includeSig); - if (this.hasEncryptResponseToAddress()) { - length += this.encryptResponseToAddress.getByteLength(); - } - return length; - } - toBufferOptionalSig(includeSig = true) { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLengthOptionalSig(includeSig))); - const superBuf = super.toBufferOptionalSig(includeSig); - writer.writeSlice(superBuf); - if (this.hasEncryptResponseToAddress()) { - writer.writeSlice(this.encryptResponseToAddress.toBuffer()); - } - return writer.buffer; - } - fromBuffer(buffer, offset) { - if (buffer.length == 0) - throw new Error("Cannot create request from empty buffer"); - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - reader.offset = super.fromBuffer(reader.buffer, reader.offset); - if (this.hasEncryptResponseToAddress()) { - this.encryptResponseToAddress = new SaplingPaymentAddress_1.SaplingPaymentAddress(); - reader.offset = this.encryptResponseToAddress.fromBuffer(reader.buffer, reader.offset); - } - return reader.offset; - } - toJson() { - const parentJson = super.toJson(); - if (this.hasEncryptResponseToAddress()) { - parentJson["encryptresponsetoaddress"] = this.encryptResponseToAddress.toAddressString(); - } - return parentJson; - } - static fromWalletDeeplinkUri(uri) { - const urlProtocol = `${deeplink_1.DEEPLINK_PROTOCOL_URL_STRING}:`; - const split = uri.split(`/`); - if (split.length !== 4 || split.some(x => x == null)) - throw new Error("Unrecognized URL format"); - if (split[0] !== urlProtocol) - throw new Error("Unrecognized URL protocol"); - else if (isNaN(Number(split[2])) || !(new bn_js_1.BN(split[2], 10).eq(deeplink_1.DEEPLINK_PROTOCOL_URL_CURRENT_VERSION))) { - throw new Error("Unrecognized or incompatible generic request protocol version"); - } - const inv = new GenericRequest(); - inv.fromBuffer(base64url_1.default.toBuffer(split[3]), 0); - return inv; - } - static fromQrString(qrstring) { - const inv = new GenericRequest(); - inv.fromBuffer(base64url_1.default.toBuffer(qrstring), 0); - return inv; - } - toWalletDeeplinkUri() { - return `${deeplink_1.DEEPLINK_PROTOCOL_URL_STRING}://${deeplink_1.DEEPLINK_PROTOCOL_URL_CURRENT_VERSION.toString()}/${this.toString()}`; - } - toQrString() { - return this.toString(); - } -} -exports.GenericRequest = GenericRequest; -GenericRequest.VERSION_CURRENT = new bn_js_1.BN(1, 10); -GenericRequest.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); -GenericRequest.VERSION_LASTVALID = new bn_js_1.BN(1, 10); -GenericRequest.BASE_FLAGS = GenericEnvelope_1.GenericEnvelope.BASE_FLAGS; -GenericRequest.FLAG_SIGNED = GenericEnvelope_1.GenericEnvelope.FLAG_SIGNED; -GenericRequest.FLAG_HAS_CREATED_AT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_CREATED_AT; -GenericRequest.FLAG_MULTI_DETAILS = GenericEnvelope_1.GenericEnvelope.FLAG_MULTI_DETAILS; -GenericRequest.FLAG_IS_TESTNET = GenericEnvelope_1.GenericEnvelope.FLAG_IS_TESTNET; -GenericRequest.FLAG_HAS_SALT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_SALT; -GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS = new bn_js_1.BN(32, 10); diff --git a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts deleted file mode 100644 index 20f0554a..00000000 --- a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts +++ /dev/null @@ -1,73 +0,0 @@ -/** - * AppEncryptionRequestDetails - Class for handling application requests for encrypted derived seeds - * - * This class is used when an application is requesting an encrypted derived seed from the user's master seed, - * using specific parameters passed by the application. The request includes: - * - App or delegated ID making the request (mandatory) - * - A target encryption key (zaddress format) for encrypting the reply - * - Derivation number for seed generation - * - Optional derivation ID (defaults to Z-address from ID signing if not present) - * - Optional request ID for tracking - * - * The user's wallet can use these parameters to derive a specific seed from their master seed - * and encrypt it using the provided encryption key, ensuring the application receives only - * the specific derived seed it needs without exposing the master seed. - * - * The RETURN_ESK flag can be set to signal that the Extended Spending Key should be returned. - */ -import { BigNumber } from '../../../utils/types/BigNumber'; -import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { CompactAddressObject, CompactAddressObjectJson } from '../CompactAddressObject'; -export interface AppEncryptionRequestInterface { - version?: BigNumber; - flags: BigNumber; - appOrDelegatedID: CompactAddressObject; - encryptToZAddress: string; - derivationNumber: BigNumber; - derivationID?: CompactAddressObject; - requestID?: string; -} -export interface AppEncryptionRequestJson { - version: number; - flags: number; - appordelegatedid: CompactAddressObjectJson; - encrypttozaddress: string; - derivationnumber: number; - derivationid?: CompactAddressObjectJson; - requestid?: string; -} -/** - * Checks if a string is a valid hexadecimal address - * @param flags - Optional flags for the request - * @flag HAS_REQUEST_ID - Indicates if a request ID is included - * - * @param encryptToZAddress - The encryption key to use for encrypting to - * @param derivationNumber - The derivation number to validate - */ -export declare class AppEncryptionRequestDetails implements SerializableEntity { - static VERSION_INVALID: import("bn.js"); - static FIRST_VERSION: import("bn.js"); - static LAST_VERSION: import("bn.js"); - static DEFAULT_VERSION: import("bn.js"); - static HAS_DERIVATION_ID: import("bn.js"); - static HAS_REQUEST_ID: import("bn.js"); - static RETURN_ESK: import("bn.js"); - version: BigNumber; - flags: BigNumber; - appOrDelegatedID?: CompactAddressObject; - encryptToZAddress: string; - derivationNumber: BigNumber; - derivationID?: CompactAddressObject; - requestID?: string; - constructor(data?: AppEncryptionRequestInterface); - setFlags(): void; - calcFlags(): BigNumber; - isValid(): boolean; - hasDerivationID(flags?: BigNumber): boolean; - hasRequestID(flags?: BigNumber): boolean; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): AppEncryptionRequestJson; - static fromJson(json: AppEncryptionRequestJson): AppEncryptionRequestDetails; -} diff --git a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js deleted file mode 100644 index fb417209..00000000 --- a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js +++ /dev/null @@ -1,170 +0,0 @@ -"use strict"; -/** - * AppEncryptionRequestDetails - Class for handling application requests for encrypted derived seeds - * - * This class is used when an application is requesting an encrypted derived seed from the user's master seed, - * using specific parameters passed by the application. The request includes: - * - App or delegated ID making the request (mandatory) - * - A target encryption key (zaddress format) for encrypting the reply - * - Derivation number for seed generation - * - Optional derivation ID (defaults to Z-address from ID signing if not present) - * - Optional request ID for tracking - * - * The user's wallet can use these parameters to derive a specific seed from their master seed - * and encrypt it using the provided encryption key, ensuring the application receives only - * the specific derived seed it needs without exposing the master seed. - * - * The RETURN_ESK flag can be set to signal that the Extended Spending Key should be returned. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AppEncryptionRequestDetails = void 0; -const bn_js_1 = require("bn.js"); -const bufferutils_1 = require("../../../utils/bufferutils"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -const sapling_1 = require("../../../utils/sapling"); -const CompactAddressObject_1 = require("../CompactAddressObject"); -const varuint_1 = require("../../../utils/varuint"); -const address_1 = require("../../../utils/address"); -const vdxf_1 = require("../../../constants/vdxf"); -/** - * Checks if a string is a valid hexadecimal address - * @param flags - Optional flags for the request - * @flag HAS_REQUEST_ID - Indicates if a request ID is included - * - * @param encryptToZAddress - The encryption key to use for encrypting to - * @param derivationNumber - The derivation number to validate - */ -class AppEncryptionRequestDetails { - constructor(data) { - this.version = (data === null || data === void 0 ? void 0 : data.version) || AppEncryptionRequestDetails.DEFAULT_VERSION; - this.flags = (data === null || data === void 0 ? void 0 : data.flags) || new bn_js_1.BN(0); - this.appOrDelegatedID = data === null || data === void 0 ? void 0 : data.appOrDelegatedID; - this.encryptToZAddress = (data === null || data === void 0 ? void 0 : data.encryptToZAddress) || ''; - this.derivationNumber = (data === null || data === void 0 ? void 0 : data.derivationNumber) || new bn_js_1.BN(0); - this.derivationID = data === null || data === void 0 ? void 0 : data.derivationID; - this.requestID = data === null || data === void 0 ? void 0 : data.requestID; - this.setFlags(); - } - setFlags() { - this.flags = this.calcFlags(); - } - calcFlags() { - let flags = new bn_js_1.BN(0); - if (this.derivationID != null) { - flags = flags.or(AppEncryptionRequestDetails.HAS_DERIVATION_ID); - } - if (this.requestID != null) { - flags = flags.or(AppEncryptionRequestDetails.HAS_REQUEST_ID); - } - return flags; - } - isValid() { - let valid = this.appOrDelegatedID != null; - valid && (valid = this.encryptToZAddress != null && this.encryptToZAddress.length > 0); - valid && (valid = this.derivationNumber != null && this.derivationNumber.gte(new bn_js_1.BN(0))); - return valid; - } - hasDerivationID(flags = this.flags) { - return flags.and(AppEncryptionRequestDetails.HAS_DERIVATION_ID).gt(new bn_js_1.BN(0)); - } - hasRequestID(flags = this.flags) { - return flags.and(AppEncryptionRequestDetails.HAS_REQUEST_ID).gt(new bn_js_1.BN(0)); - } - getByteLength() { - const flags = this.calcFlags(); - let length = 0; - length += varuint_1.default.encodingLength(flags.toNumber()); - // appOrDelegatedID - length += this.appOrDelegatedID.getByteLength(); - // encryptToKey - zaddress encoding (43 bytes for sapling address data) - length += 43; // Sapling address decoded data (11 + 32 bytes) - length += varuint_1.default.encodingLength(this.derivationNumber.toNumber()); - if (this.hasDerivationID(flags)) { - length += this.derivationID.getByteLength(); - } - if (this.hasRequestID(flags)) { - length += vdxf_1.HASH160_BYTE_LENGTH; - } - return length; - } - toBuffer() { - const flags = this.calcFlags(); - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - // Write flags - writer.writeCompactSize(flags.toNumber()); - // Write appOrDelegatedID - writer.writeSlice(this.appOrDelegatedID.toBuffer()); - // Write encryptToAddress as decoded sapling address data - const saplingData = (0, sapling_1.decodeSaplingAddress)(this.encryptToZAddress); - writer.writeSlice(Buffer.concat([saplingData.d, saplingData.pk_d])); - // Write mandatory derivation number - writer.writeVarInt(this.derivationNumber); - if (this.hasDerivationID(flags)) { - writer.writeSlice(this.derivationID.toBuffer()); - } - if (this.hasRequestID(flags)) { - writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); - } - return writer.buffer; - } - fromBuffer(buffer, offset) { - const reader = new BufferReader(buffer, offset); - // Read flags - this.flags = new bn_js_1.BN(reader.readCompactSize()); - // Read appOrDelegatedID - const appOrDelegatedIDObj = new CompactAddressObject_1.CompactAddressObject(); - reader.offset = appOrDelegatedIDObj.fromBuffer(reader.buffer, reader.offset); - this.appOrDelegatedID = appOrDelegatedIDObj; - // Read encryptToAddress as 43-byte sapling data and encode as sapling address - const saplingData = reader.readSlice(43); - this.encryptToZAddress = (0, sapling_1.toBech32)('zs', saplingData); - // Read mandatory derivation number - this.derivationNumber = reader.readVarInt(); - if (this.hasDerivationID()) { - const derivationIDObj = new CompactAddressObject_1.CompactAddressObject(); - reader.offset = derivationIDObj.fromBuffer(reader.buffer, reader.offset); - this.derivationID = derivationIDObj; - } - if (this.hasRequestID()) { - this.requestID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - } - return reader.offset; - } - toJson() { - var _a; - // Set flags before serialization - const flags = this.calcFlags(); - return { - version: this.version.toNumber(), - flags: flags.toNumber(), - appordelegatedid: this.appOrDelegatedID.toJson(), - encrypttozaddress: this.encryptToZAddress, - derivationnumber: this.derivationNumber.toNumber(), - derivationid: (_a = this.derivationID) === null || _a === void 0 ? void 0 : _a.toJson(), - requestid: this.requestID - }; - } - static fromJson(json) { - const instance = new AppEncryptionRequestDetails(); - instance.version = new bn_js_1.BN(json.version); - instance.flags = new bn_js_1.BN(json.flags); - instance.appOrDelegatedID = CompactAddressObject_1.CompactAddressObject.fromJson(json.appordelegatedid); - instance.encryptToZAddress = json.encrypttozaddress; - instance.derivationNumber = new bn_js_1.BN(json.derivationnumber); - if (instance.hasDerivationID()) { - instance.derivationID = CompactAddressObject_1.CompactAddressObject.fromJson(json === null || json === void 0 ? void 0 : json.derivationid); - } - if (instance.hasRequestID()) { - instance.requestID = json === null || json === void 0 ? void 0 : json.requestid; - } - return instance; - } -} -exports.AppEncryptionRequestDetails = AppEncryptionRequestDetails; -AppEncryptionRequestDetails.VERSION_INVALID = new bn_js_1.BN(0); -AppEncryptionRequestDetails.FIRST_VERSION = new bn_js_1.BN(1); -AppEncryptionRequestDetails.LAST_VERSION = new bn_js_1.BN(1); -AppEncryptionRequestDetails.DEFAULT_VERSION = new bn_js_1.BN(1); -AppEncryptionRequestDetails.HAS_DERIVATION_ID = new bn_js_1.BN(1); -AppEncryptionRequestDetails.HAS_REQUEST_ID = new bn_js_1.BN(2); -AppEncryptionRequestDetails.RETURN_ESK = new bn_js_1.BN(4); //flag to signal to return the Extended Spending Key diff --git a/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts deleted file mode 100644 index 7d43c31f..00000000 --- a/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts +++ /dev/null @@ -1,57 +0,0 @@ -/** - * ProvisioningIdentity - Class for handling identity provisioning requests - * - * This class is used when an application is requesting the provisioning or creation of a new identity - * within the Verus blockchain ecosystem. The request includes: - * - System ID (e.g., VRSC@) defining the blockchain system - * - Parent ID (e.g., Token@) defining the parent namespace - * - Identity ID (e.g., john.VRSC@) defining the full identity to be provisioned - * - Flags indicating which components are present and required - * - * The user's wallet can use these parameters to understand the complete identity hierarchy - * and present a clear provisioning request to the user, showing the system context, - * parent namespace, and the specific identity being created. This enables secure, - * user-controlled identity provisioning with proper namespace management. - */ -import { BigNumber } from "../../../utils/types/BigNumber"; -import { SerializableEntity } from "../../../utils/types/SerializableEntity"; -import { CompactAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; -export interface ProvisionIdentityDetailsInterface { - version?: BigNumber; - flags: BigNumber; - systemID?: CompactAddressObject; - parentID?: CompactAddressObject; - identityID?: CompactAddressObject; -} -export interface ProvisionIdentityDetailsJson { - version?: number; - flags: number; - systemid?: CompactAddressObjectJson; - parentid?: CompactAddressObjectJson; - identityid?: CompactAddressObjectJson; -} -export declare class ProvisionIdentityDetails implements SerializableEntity { - version: BigNumber; - flags: BigNumber; - systemID?: CompactAddressObject; - parentID?: CompactAddressObject; - identityID?: CompactAddressObject; - static DEFAULT_VERSION: import("bn.js"); - static VERSION_FIRSTVALID: import("bn.js"); - static VERSION_LASTVALID: import("bn.js"); - static FLAG_HAS_SYSTEMID: import("bn.js"); - static FLAG_HAS_PARENTID: import("bn.js"); - static FLAG_IS_A_DEFINED_NAME_TO_PROVISION: import("bn.js"); - constructor(data?: ProvisionIdentityDetailsInterface); - hasSystemId(): boolean; - hasParentId(): boolean; - hasIdentityId(): boolean; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): ProvisionIdentityDetailsJson; - static fromJson(data: any): ProvisionIdentityDetails; - calcFlags(): BigNumber; - setFlags(): void; - isValid(): boolean; -} diff --git a/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js deleted file mode 100644 index fd3034ea..00000000 --- a/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js +++ /dev/null @@ -1,146 +0,0 @@ -"use strict"; -/** - * ProvisioningIdentity - Class for handling identity provisioning requests - * - * This class is used when an application is requesting the provisioning or creation of a new identity - * within the Verus blockchain ecosystem. The request includes: - * - System ID (e.g., VRSC@) defining the blockchain system - * - Parent ID (e.g., Token@) defining the parent namespace - * - Identity ID (e.g., john.VRSC@) defining the full identity to be provisioned - * - Flags indicating which components are present and required - * - * The user's wallet can use these parameters to understand the complete identity hierarchy - * and present a clear provisioning request to the user, showing the system context, - * parent namespace, and the specific identity being created. This enables secure, - * user-controlled identity provisioning with proper namespace management. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ProvisionIdentityDetails = void 0; -const bufferutils_1 = require("../../../utils/bufferutils"); -const bn_js_1 = require("bn.js"); -const CompactAddressObject_1 = require("../CompactAddressObject"); -const varuint_1 = require("../../../utils/varuint"); -class ProvisionIdentityDetails { - constructor(data) { - this.version = (data === null || data === void 0 ? void 0 : data.version) || ProvisionIdentityDetails.DEFAULT_VERSION; - this.flags = (data === null || data === void 0 ? void 0 : data.flags) || new bn_js_1.BN(0, 10); - this.systemID = data === null || data === void 0 ? void 0 : data.systemID; - this.parentID = data === null || data === void 0 ? void 0 : data.parentID; - this.identityID = data === null || data === void 0 ? void 0 : data.identityID; - this.setFlags(); - } - hasSystemId() { - return this.flags.and(ProvisionIdentityDetails.FLAG_HAS_SYSTEMID).eq(ProvisionIdentityDetails.FLAG_HAS_SYSTEMID); - } - hasParentId() { - return this.flags.and(ProvisionIdentityDetails.FLAG_HAS_PARENTID).eq(ProvisionIdentityDetails.FLAG_HAS_PARENTID); - } - hasIdentityId() { - return this.flags.and(ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION).eq(ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION); - } - getByteLength() { - let length = 0; - length += varuint_1.default.encodingLength(this.flags.toNumber()); - if (this.hasSystemId()) { - length += this.systemID.getByteLength(); - } - if (this.hasParentId()) { - length += this.parentID.getByteLength(); - } - if (this.hasIdentityId()) { - length += this.identityID.getByteLength(); - } - return length; - } - toBuffer() { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeCompactSize(this.flags.toNumber()); - if (this.hasSystemId()) { - writer.writeSlice(this.systemID.toBuffer()); - } - if (this.hasParentId()) { - writer.writeSlice(this.parentID.toBuffer()); - } - if (this.hasIdentityId()) { - writer.writeSlice(this.identityID.toBuffer()); - } - return writer.buffer; - } - fromBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - if (buffer.length == 0) - throw new Error("Cannot create provision identity from empty buffer"); - this.flags = new bn_js_1.BN(reader.readCompactSize()); - if (this.hasSystemId()) { - const systemID = new CompactAddressObject_1.CompactAddressObject(); - reader.offset = systemID.fromBuffer(reader.buffer, reader.offset); - this.systemID = systemID; - } - if (this.hasParentId()) { - const parentID = new CompactAddressObject_1.CompactAddressObject(); - reader.offset = parentID.fromBuffer(reader.buffer, reader.offset); - this.parentID = parentID; - } - if (this.hasIdentityId()) { - const identityID = new CompactAddressObject_1.CompactAddressObject(); - reader.offset = identityID.fromBuffer(reader.buffer, reader.offset); - this.identityID = identityID; - } - return reader.offset; - } - toJson() { - const flags = this.calcFlags(); - return { - version: this.version.toNumber(), - flags: flags.toNumber(), - systemid: this.systemID ? this.systemID.toJson() : null, - parentid: this.parentID ? this.parentID.toJson() : null, - identityid: this.identityID ? this.identityID.toJson() : null, - }; - } - static fromJson(data) { - const provision = new ProvisionIdentityDetails(); - provision.version = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.version) || 0); - provision.flags = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.flags) || 0); - if (provision.hasSystemId()) { - provision.systemID = CompactAddressObject_1.CompactAddressObject.fromJson(data.systemid); - } - if (provision.hasParentId()) { - provision.parentID = CompactAddressObject_1.CompactAddressObject.fromJson(data.parentid); - } - if (provision.hasIdentityId()) { - provision.identityID = CompactAddressObject_1.CompactAddressObject.fromJson(data.identityid); - } - return provision; - } - calcFlags() { - let flags = new bn_js_1.BN(0, 10); - if (this.systemID) { - flags = flags.or(ProvisionIdentityDetails.FLAG_HAS_SYSTEMID); - } - if (this.parentID) { - flags = flags.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID); - } - if (this.identityID) { - flags = flags.or(ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION); - } - return flags; - } - setFlags() { - this.flags = this.calcFlags(); - } - isValid() { - let valid = this.flags != null && this.flags.gte(new bn_js_1.BN(0)); - valid && (valid = this.version != null); - return valid; - } -} -exports.ProvisionIdentityDetails = ProvisionIdentityDetails; -// Version -ProvisionIdentityDetails.DEFAULT_VERSION = new bn_js_1.BN(1, 10); -ProvisionIdentityDetails.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); -ProvisionIdentityDetails.VERSION_LASTVALID = new bn_js_1.BN(1, 10); -// flags include params // parent same as signer -ProvisionIdentityDetails.FLAG_HAS_SYSTEMID = new bn_js_1.BN(1, 10); -ProvisionIdentityDetails.FLAG_HAS_PARENTID = new bn_js_1.BN(2, 10); -ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION = new bn_js_1.BN(4, 10); diff --git a/dist/vdxf/classes/requestobjects/UserDataRequestDetails.d.ts b/dist/vdxf/classes/requestobjects/UserDataRequestDetails.d.ts deleted file mode 100644 index 11839bf7..00000000 --- a/dist/vdxf/classes/requestobjects/UserDataRequestDetails.d.ts +++ /dev/null @@ -1,88 +0,0 @@ -/** - * InformationRequest - Class for handling application requests for specific user information/data - * - * This class is used when an application is requesting specific information or data from the user's - * identity or data stores. The request includes: - * - Search data keys (VDXF keys) to identify the specific data being requested - * - Optional specific keys within the data object for partial data requests - * - Signer information to identify wanted signer of the data - * - Optional statement for boundhashes in the signature - * - * The user's wallet can use these parameters to locate the signed object information and present - * it to the user for approval before sharing with the requesting application. This enables - * selective disclosure of personal information while maintaining user privacy and control. - * - * Flags determine the type and scope of the request: - * - FULL_DATA vs PARTIAL_DATA: Whether complete objects or specific fields are requested - * - COLLECTION: Whether multiple data objects are being requested - * - HAS_STATEMENT: Whether the request includes an attestation statement - * - ATTESTATION/CLAIM/CREDENTIAL: Type of verification being requested - */ -import { BigNumber } from '../../../utils/types/BigNumber'; -import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { CompactAddressObject, CompactAddressObjectJson } from '../CompactAddressObject'; -export interface UserDataRequestInterface { - version?: BigNumber; - flags: BigNumber; - searchDataKey: Array<{ - [key: string]: string; - }>; - signer?: CompactAddressObject; - requestedKeys?: string[]; - requestID?: string; -} -export interface UserDataRequestJson { - version: number; - flags: number; - searchdatakey: Array<{ - [key: string]: string; - }>; - signer?: CompactAddressObjectJson; - requestedkeys?: string[]; - requestid?: string; -} -export declare class UserDataRequestDetails implements SerializableEntity { - static VERSION_INVALID: import("bn.js"); - static FIRST_VERSION: import("bn.js"); - static LAST_VERSION: import("bn.js"); - static DEFAULT_VERSION: import("bn.js"); - static FULL_DATA: import("bn.js"); - static PARTIAL_DATA: import("bn.js"); - static COLLECTION: import("bn.js"); - static ATTESTATION: import("bn.js"); - static CLAIM: import("bn.js"); - static CREDENTIAL: import("bn.js"); - static HAS_SIGNER: import("bn.js"); - static HAS_REQUESTED_KEYS: import("bn.js"); - static HAS_REQUEST_ID: import("bn.js"); - version: BigNumber; - flags: BigNumber; - searchDataKey: Array<{ - [key: string]: string; - }>; - signer?: CompactAddressObject; - requestedKeys?: string[]; - requestID?: string; - constructor(data?: UserDataRequestInterface); - calcFlags(): BigNumber; - setFlags(): void; - hasSigner(): boolean; - hasRequestedKeys(): boolean; - hasRequestID(): boolean; - /** - * Checks if exactly one data type flag is set (FULL_DATA, PARTIAL_DATA, or COLLECTION) - * @returns True if exactly one data type flag is set - */ - hasDataTypeSet(): boolean; - /** - * Checks if exactly one request type flag is set (ATTESTATION, CLAIM, or CREDENTIAL) - * @returns True if exactly one request type flag is set - */ - hasRequestTypeSet(): boolean; - isValid(): boolean; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): UserDataRequestJson; - static fromJson(json: UserDataRequestJson): UserDataRequestDetails; -} diff --git a/dist/vdxf/classes/requestobjects/UserDataRequestDetails.js b/dist/vdxf/classes/requestobjects/UserDataRequestDetails.js deleted file mode 100644 index 15764109..00000000 --- a/dist/vdxf/classes/requestobjects/UserDataRequestDetails.js +++ /dev/null @@ -1,214 +0,0 @@ -"use strict"; -/** - * InformationRequest - Class for handling application requests for specific user information/data - * - * This class is used when an application is requesting specific information or data from the user's - * identity or data stores. The request includes: - * - Search data keys (VDXF keys) to identify the specific data being requested - * - Optional specific keys within the data object for partial data requests - * - Signer information to identify wanted signer of the data - * - Optional statement for boundhashes in the signature - * - * The user's wallet can use these parameters to locate the signed object information and present - * it to the user for approval before sharing with the requesting application. This enables - * selective disclosure of personal information while maintaining user privacy and control. - * - * Flags determine the type and scope of the request: - * - FULL_DATA vs PARTIAL_DATA: Whether complete objects or specific fields are requested - * - COLLECTION: Whether multiple data objects are being requested - * - HAS_STATEMENT: Whether the request includes an attestation statement - * - ATTESTATION/CLAIM/CREDENTIAL: Type of verification being requested - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserDataRequestDetails = void 0; -const bn_js_1 = require("bn.js"); -const varuint_1 = require("../../../utils/varuint"); -const bufferutils_1 = require("../../../utils/bufferutils"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -const CompactAddressObject_1 = require("../CompactAddressObject"); -const address_1 = require("../../../utils/address"); -const vdxf_1 = require("../../../constants/vdxf"); -class UserDataRequestDetails { - constructor(data) { - this.version = (data === null || data === void 0 ? void 0 : data.version) || UserDataRequestDetails.DEFAULT_VERSION; - this.flags = (data === null || data === void 0 ? void 0 : data.flags) || new bn_js_1.BN(0); - this.searchDataKey = (data === null || data === void 0 ? void 0 : data.searchDataKey) || []; - this.signer = data === null || data === void 0 ? void 0 : data.signer; - this.requestedKeys = data === null || data === void 0 ? void 0 : data.requestedKeys; - this.requestID = data === null || data === void 0 ? void 0 : data.requestID; - this.setFlags(); - } - calcFlags() { - let flags = new bn_js_1.BN(0); - if (this.requestedKeys && this.requestedKeys.length > 0) { - flags = flags.or(UserDataRequestDetails.HAS_REQUESTED_KEYS); - } - if (this.signer) { - flags = flags.or(UserDataRequestDetails.HAS_SIGNER); - } - if (this.requestID) { - flags = flags.or(UserDataRequestDetails.HAS_REQUEST_ID); - } - return flags; - } - setFlags() { - this.flags = this.calcFlags(); - } - hasSigner() { - return this.flags.and(UserDataRequestDetails.HAS_SIGNER).eq(UserDataRequestDetails.HAS_SIGNER); - } - hasRequestedKeys() { - return this.flags.and(UserDataRequestDetails.HAS_REQUESTED_KEYS).eq(UserDataRequestDetails.HAS_REQUESTED_KEYS); - } - hasRequestID() { - return this.flags.and(UserDataRequestDetails.HAS_REQUEST_ID).eq(UserDataRequestDetails.HAS_REQUEST_ID); - } - /** - * Checks if exactly one data type flag is set (FULL_DATA, PARTIAL_DATA, or COLLECTION) - * @returns True if exactly one data type flag is set - */ - hasDataTypeSet() { - const dataTypeFlags = UserDataRequestDetails.FULL_DATA.or(UserDataRequestDetails.PARTIAL_DATA).or(UserDataRequestDetails.COLLECTION); - const setDataFlags = this.flags.and(dataTypeFlags); - // Check if exactly one flag is set by verifying it's a power of 2 - return !setDataFlags.isZero() && setDataFlags.and(setDataFlags.sub(new bn_js_1.BN(1))).isZero(); - } - /** - * Checks if exactly one request type flag is set (ATTESTATION, CLAIM, or CREDENTIAL) - * @returns True if exactly one request type flag is set - */ - hasRequestTypeSet() { - const requestTypeFlags = UserDataRequestDetails.ATTESTATION.or(UserDataRequestDetails.CLAIM).or(UserDataRequestDetails.CREDENTIAL); - const setRequestFlags = this.flags.and(requestTypeFlags); - // Check if exactly one flag is set by verifying it's a power of 2 - return !setRequestFlags.isZero() && setRequestFlags.and(setRequestFlags.sub(new bn_js_1.BN(1))).isZero(); - } - isValid() { - let valid = this.version.gte(UserDataRequestDetails.FIRST_VERSION) && this.version.lte(UserDataRequestDetails.LAST_VERSION); - // Check that exactly one data type flag is set - valid && (valid = this.hasDataTypeSet()); - // Check that exactly one request type flag is set - valid && (valid = this.hasRequestTypeSet()); - // Check that searchDataKey is present - valid && (valid = Object.keys(this.searchDataKey).length > 0); - return valid; - } - getByteLength() { - let length = 0; - length += varuint_1.default.encodingLength(this.flags.toNumber()); - length += varuint_1.default.encodingLength(this.searchDataKey.length); - for (const item of this.searchDataKey) { - const key = Object.keys(item)[0]; - const value = item[key]; - length += vdxf_1.HASH160_BYTE_LENGTH; - length += varuint_1.default.encodingLength(Buffer.byteLength(value, 'utf8')); - length += Buffer.byteLength(value, 'utf8'); - } - if (this.hasSigner()) { - length += this.signer.getByteLength(); - } - if (this.hasRequestedKeys()) { - length += varuint_1.default.encodingLength(this.requestedKeys ? this.requestedKeys.length : 0); - if (this.requestedKeys) { - for (const key of this.requestedKeys) { - length += vdxf_1.HASH160_BYTE_LENGTH; - } - } - } - if (this.hasRequestID()) { - length += vdxf_1.HASH160_BYTE_LENGTH; - } - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeCompactSize(this.flags.toNumber()); - writer.writeCompactSize(this.searchDataKey.length); - for (const item of this.searchDataKey) { - const key = Object.keys(item)[0]; - const value = item[key]; - writer.writeSlice((0, address_1.fromBase58Check)(key).hash); // 20-byte VDXF key - writer.writeVarSlice(Buffer.from(value, 'utf8')); - } - if (this.hasSigner()) { - writer.writeSlice(this.signer.toBuffer()); - } - if (this.hasRequestedKeys()) { - writer.writeCompactSize(this.requestedKeys.length); - for (const key of this.requestedKeys) { - writer.writeSlice((0, address_1.fromBase58Check)(key).hash); // 20-byte VDXF key - } - } - if (this.hasRequestID()) { - writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); - } - return writer.buffer; - } - fromBuffer(buffer, offset) { - const reader = new BufferReader(buffer, offset); - this.flags = new bn_js_1.BN(reader.readCompactSize()); - const searchDataKeyLength = reader.readCompactSize(); - this.searchDataKey = []; - for (let i = 0; i < searchDataKeyLength; i++) { - const keyHash = reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH); // 20-byte VDXF key - const valueBuffer = reader.readVarSlice(); - const value = valueBuffer.toString('utf8'); - const key = (0, address_1.toBase58Check)(keyHash, vdxf_1.I_ADDR_VERSION); - this.searchDataKey.push({ [key]: value }); - } - if (this.hasSigner()) { - const signer = new CompactAddressObject_1.CompactAddressObject(); - reader.offset = signer.fromBuffer(reader.buffer, reader.offset); - this.signer = signer; - } - if (this.hasRequestedKeys()) { - const requestedKeysLength = reader.readCompactSize(); - this.requestedKeys = []; - for (let i = 0; i < requestedKeysLength; i++) { - const keyHash = reader.readSlice(20); // 20-byte VDXF key - const key = (0, address_1.toBase58Check)(keyHash, vdxf_1.I_ADDR_VERSION); - this.requestedKeys.push(key); - } - } - if (this.hasRequestID()) { - this.requestID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - } - return reader.offset; - } - toJson() { - var _a; - const flags = this.calcFlags(); - return { - version: this.version.toNumber(), - flags: flags.toNumber(), - searchdatakey: this.searchDataKey, - signer: (_a = this.signer) === null || _a === void 0 ? void 0 : _a.toJson(), - requestedkeys: this.requestedKeys, - requestid: this.requestID - }; - } - static fromJson(json) { - const requestData = new UserDataRequestDetails(); - requestData.version = new bn_js_1.BN(json.version); - requestData.flags = new bn_js_1.BN(json.flags); - requestData.searchDataKey = json.searchdatakey; - requestData.signer = json.signer ? CompactAddressObject_1.CompactAddressObject.fromJson(json.signer) : undefined; - requestData.requestedKeys = json.requestedkeys; - requestData.requestID = json.requestid; - return requestData; - } -} -exports.UserDataRequestDetails = UserDataRequestDetails; -UserDataRequestDetails.VERSION_INVALID = new bn_js_1.BN(0); -UserDataRequestDetails.FIRST_VERSION = new bn_js_1.BN(1); -UserDataRequestDetails.LAST_VERSION = new bn_js_1.BN(1); -UserDataRequestDetails.DEFAULT_VERSION = new bn_js_1.BN(1); -UserDataRequestDetails.FULL_DATA = new bn_js_1.BN(1); -UserDataRequestDetails.PARTIAL_DATA = new bn_js_1.BN(2); -UserDataRequestDetails.COLLECTION = new bn_js_1.BN(4); -UserDataRequestDetails.ATTESTATION = new bn_js_1.BN(8); -UserDataRequestDetails.CLAIM = new bn_js_1.BN(16); -UserDataRequestDetails.CREDENTIAL = new bn_js_1.BN(32); -UserDataRequestDetails.HAS_SIGNER = new bn_js_1.BN(64); -UserDataRequestDetails.HAS_REQUESTED_KEYS = new bn_js_1.BN(128); -UserDataRequestDetails.HAS_REQUEST_ID = new bn_js_1.BN(256); diff --git a/dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.d.ts b/dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.d.ts deleted file mode 100644 index 6d52a609..00000000 --- a/dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.d.ts +++ /dev/null @@ -1,69 +0,0 @@ -/** - * UserSpecificDataPacketDetails - Class for sending personal data to user or requesting the user - * signature on personal data - * - * This class is used when an application is requesting to transfer or receive personal - * user data. The request includes: - * - Data objects as DataDescriptor instances containing the user's personal data - * - Optional statements array for additional context or transfer conditions - * - Optional signature data for verification of the transfer - * - Flags indicating transfer direction and optional components - * - * The user's wallet can use these parameters to present the data transfer request - * to the user, showing what personal data is being transferred, any associated - * statements or conditions, and whether it's for the user's signature or being - * transmitted to/from the user. This enables secure, user-controlled personal - * data sharing with clear visibility into what data is being transferred. - * - - */ -import { BigNumber } from '../../../utils/types/BigNumber'; -import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { DataDescriptor, DataDescriptorJson } from '../../../pbaas'; -import { VerifiableSignatureData, VerifiableSignatureDataJson } from '../VerifiableSignatureData'; -export interface UserSpecificDataPacketDetailsInterface { - version?: BigNumber; - flags: BigNumber; - signableObjects: Array; - statements?: Array; - signature?: VerifiableSignatureData; - detailsID?: string; -} -export interface UserSpecificDataPacketDetailsJson { - version: number; - flags: number; - signableobjects: Array; - statements?: Array; - signature?: VerifiableSignatureDataJson; - detailsid?: string; -} -export declare class UserSpecificDataPacketDetails implements SerializableEntity { - static VERSION_INVALID: import("bn.js"); - static FIRST_VERSION: import("bn.js"); - static LAST_VERSION: import("bn.js"); - static DEFAULT_VERSION: import("bn.js"); - static HAS_STATEMENTS: import("bn.js"); - static HAS_SIGNATURE: import("bn.js"); - static FOR_USERS_SIGNATURE: import("bn.js"); - static FOR_TRANSMITTAL_TO_USER: import("bn.js"); - static HAS_URL_FOR_DOWNLOAD: import("bn.js"); - static HAS_DETAILS_ID: import("bn.js"); - version: BigNumber; - flags: BigNumber; - signableObjects: Array; - statements?: Array; - signature?: VerifiableSignatureData; - detailsID?: string; - constructor(data?: UserSpecificDataPacketDetailsInterface); - setFlags(): void; - calcFlags(): BigNumber; - hasStatements(): boolean; - hasSignature(): boolean; - hasDetailsID(): boolean; - isValid(): boolean; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): UserSpecificDataPacketDetailsJson; - static fromJson(json: UserSpecificDataPacketDetailsJson): UserSpecificDataPacketDetails; -} diff --git a/dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.js b/dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.js deleted file mode 100644 index a4d68238..00000000 --- a/dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.js +++ /dev/null @@ -1,195 +0,0 @@ -"use strict"; -/** - * UserSpecificDataPacketDetails - Class for sending personal data to user or requesting the user - * signature on personal data - * - * This class is used when an application is requesting to transfer or receive personal - * user data. The request includes: - * - Data objects as DataDescriptor instances containing the user's personal data - * - Optional statements array for additional context or transfer conditions - * - Optional signature data for verification of the transfer - * - Flags indicating transfer direction and optional components - * - * The user's wallet can use these parameters to present the data transfer request - * to the user, showing what personal data is being transferred, any associated - * statements or conditions, and whether it's for the user's signature or being - * transmitted to/from the user. This enables secure, user-controlled personal - * data sharing with clear visibility into what data is being transferred. - * - - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserSpecificDataPacketDetails = void 0; -const bn_js_1 = require("bn.js"); -const varuint_1 = require("../../../utils/varuint"); -const bufferutils_1 = require("../../../utils/bufferutils"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -const pbaas_1 = require("../../../pbaas"); -const VerifiableSignatureData_1 = require("../VerifiableSignatureData"); -const address_1 = require("../../../utils/address"); -const vdxf_1 = require("../../../constants/vdxf"); -// User_specific_data_packet -class UserSpecificDataPacketDetails { - constructor(data) { - this.version = (data === null || data === void 0 ? void 0 : data.version) || UserSpecificDataPacketDetails.DEFAULT_VERSION; - this.flags = (data === null || data === void 0 ? void 0 : data.flags) || new bn_js_1.BN(0); - this.signableObjects = (data === null || data === void 0 ? void 0 : data.signableObjects) || []; - this.statements = (data === null || data === void 0 ? void 0 : data.statements) || []; - this.signature = (data === null || data === void 0 ? void 0 : data.signature) || undefined; - this.detailsID = data === null || data === void 0 ? void 0 : data.detailsID; - this.setFlags(); - } - setFlags() { - this.flags = this.calcFlags(); - } - calcFlags() { - let flags = new bn_js_1.BN(0); - if (this.statements && this.statements.length > 0) { - flags = flags.or(UserSpecificDataPacketDetails.HAS_STATEMENTS); - } - if (this.signature) { - flags = flags.or(UserSpecificDataPacketDetails.HAS_SIGNATURE); - } - if (this.detailsID) { - flags = flags.or(UserSpecificDataPacketDetails.HAS_DETAILS_ID); - } - return flags; - } - hasStatements() { - return this.flags.and(UserSpecificDataPacketDetails.HAS_STATEMENTS).eq(UserSpecificDataPacketDetails.HAS_STATEMENTS); - } - hasSignature() { - return this.flags.and(UserSpecificDataPacketDetails.HAS_SIGNATURE).eq(UserSpecificDataPacketDetails.HAS_SIGNATURE); - } - hasDetailsID() { - return this.flags.and(UserSpecificDataPacketDetails.HAS_DETAILS_ID).eq(UserSpecificDataPacketDetails.HAS_DETAILS_ID); - } - isValid() { - let valid = this.version.gte(UserSpecificDataPacketDetails.FIRST_VERSION) && - this.version.lte(UserSpecificDataPacketDetails.LAST_VERSION); - // Check that we have signable objects - valid && (valid = this.signableObjects.length > 0); - if (this.hasStatements()) { - valid && (valid = this.statements !== undefined && this.statements.length > 0); - } - if (this.hasSignature()) { - valid && (valid = this.signature !== undefined); // TODO: && this.signature.isValid(); - } - return valid; - } - getByteLength() { - let length = 0; - length += varuint_1.default.encodingLength(this.flags.toNumber()); - // Add length for signableObjects array - length += varuint_1.default.encodingLength(this.signableObjects.length); - for (const obj of this.signableObjects) { - length += obj.getByteLength(); - } - // Add signer length if present - if (this.hasStatements()) { - length += varuint_1.default.encodingLength(this.statements.length); - for (const stmt of this.statements) { - length += varuint_1.default.encodingLength(Buffer.byteLength(stmt, 'utf8')); - length += Buffer.byteLength(stmt, 'utf8'); - } - } - if (this.hasSignature() && this.signature) { - length += this.signature.getByteLength(); - } - if (this.hasDetailsID()) { - length += vdxf_1.HASH160_BYTE_LENGTH; - } - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeCompactSize(this.flags.toNumber()); - // Write signableObjects array - writer.writeCompactSize(this.signableObjects.length); - for (const obj of this.signableObjects) { - writer.writeSlice(obj.toBuffer()); - } - // Write statements if present - if (this.hasStatements()) { - writer.writeCompactSize(this.statements.length); - for (const stmt of this.statements) { - writer.writeVarSlice(Buffer.from(stmt, 'utf8')); - } - } - if (this.hasSignature() && this.signature) { - writer.writeSlice(this.signature.toBuffer()); - } - if (this.hasDetailsID()) { - writer.writeSlice((0, address_1.fromBase58Check)(this.detailsID).hash); - } - return writer.buffer; - } - fromBuffer(buffer, offset) { - const reader = new BufferReader(buffer, offset); - this.flags = new bn_js_1.BN(reader.readCompactSize()); - // Read signableObjects array - const objectCount = reader.readCompactSize(); - this.signableObjects = []; - for (let i = 0; i < objectCount; i++) { - const obj = new pbaas_1.DataDescriptor(); - reader.offset = obj.fromBuffer(reader.buffer, reader.offset); - this.signableObjects.push(obj); - } - // Read statements if flag is set - if (this.hasStatements()) { - this.statements = []; - const statementCount = reader.readCompactSize(); - for (let i = 0; i < statementCount; i++) { - const stmt = reader.readVarSlice().toString('utf8'); - this.statements.push(stmt); - } - } - if (this.hasSignature()) { - const signature = new VerifiableSignatureData_1.VerifiableSignatureData(); - reader.offset = signature.fromBuffer(reader.buffer, reader.offset); - this.signature = signature; - } - if (this.hasDetailsID()) { - this.detailsID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); - } - return reader.offset; - } - toJson() { - const flags = this.calcFlags(); - return { - version: this.version.toNumber(), - flags: flags.toNumber(), - signableobjects: this.signableObjects.map(obj => obj.toJson()), - statements: this.statements, - signature: this.signature ? this.signature.toJson() : undefined, - detailsid: this.detailsID - }; - } - static fromJson(json) { - const instance = new UserSpecificDataPacketDetails(); - instance.version = new bn_js_1.BN(json.version); - instance.flags = new bn_js_1.BN(json.flags); - const dataDescriptorObjects = []; - for (const objJson of json.signableobjects) { - const dataDescriptor = pbaas_1.DataDescriptor.fromJson(objJson); - dataDescriptorObjects.push(dataDescriptor); - } - instance.signableObjects = dataDescriptorObjects; - instance.statements = json.statements || []; - instance.signature = json.signature ? VerifiableSignatureData_1.VerifiableSignatureData.fromJson(json.signature) : undefined; - instance.detailsID = json.detailsid; - return instance; - } -} -exports.UserSpecificDataPacketDetails = UserSpecificDataPacketDetails; -UserSpecificDataPacketDetails.VERSION_INVALID = new bn_js_1.BN(0); -UserSpecificDataPacketDetails.FIRST_VERSION = new bn_js_1.BN(1); -UserSpecificDataPacketDetails.LAST_VERSION = new bn_js_1.BN(1); -UserSpecificDataPacketDetails.DEFAULT_VERSION = new bn_js_1.BN(1); -// types of data to sign -UserSpecificDataPacketDetails.HAS_STATEMENTS = new bn_js_1.BN(1); -UserSpecificDataPacketDetails.HAS_SIGNATURE = new bn_js_1.BN(2); -UserSpecificDataPacketDetails.FOR_USERS_SIGNATURE = new bn_js_1.BN(4); -UserSpecificDataPacketDetails.FOR_TRANSMITTAL_TO_USER = new bn_js_1.BN(8); -UserSpecificDataPacketDetails.HAS_URL_FOR_DOWNLOAD = new bn_js_1.BN(16); -UserSpecificDataPacketDetails.HAS_DETAILS_ID = new bn_js_1.BN(32); diff --git a/dist/vdxf/classes/response/AppEncryptionResponseDetails.d.ts b/dist/vdxf/classes/response/AppEncryptionResponseDetails.d.ts deleted file mode 100644 index e204655b..00000000 --- a/dist/vdxf/classes/response/AppEncryptionResponseDetails.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { BigNumber } from '../../../utils/types/BigNumber'; -import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { SaplingPaymentAddress } from '../../../pbaas'; -import { SaplingExtendedSpendingKey } from '../../../pbaas/SaplingExtendedSpendingKey'; -import { SaplingExtendedViewingKey } from '../../../pbaas/SaplingExtendedViewingKey'; -export interface AppEncryptionResponseDetailsInterface { - version: BigNumber; - flags?: BigNumber; - requestID?: string; - IncomingViewingKey: Buffer; - extendedViewingKey: SaplingExtendedViewingKey; - address: SaplingPaymentAddress; - extendedSpendingKey?: SaplingExtendedSpendingKey; -} -export interface AppEncryptionResponseDetailsJson { - version: number; - flags?: number; - requestid?: string; - incomingviewingkey: string; - extendedviewingkey: string; - address: string; - extendedspendingkey?: string; -} -export declare class AppEncryptionResponseDetails implements SerializableEntity { - version: BigNumber; - flags: BigNumber; - requestID?: string; - IncomingViewingKey: Buffer; - extendedViewingKey: SaplingExtendedViewingKey; - address: SaplingPaymentAddress; - extendedSpendingKey?: SaplingExtendedSpendingKey; - static RESPONSE_CONTAINS_REQUEST_ID: import("bn.js"); - static RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY: import("bn.js"); - constructor(data?: AppEncryptionResponseDetailsInterface); - containsRequestID(): boolean; - toggleContainsRequestID(): void; - containsExtendedSpendingKey(): boolean; - toggleContainsExtendedSpendingKey(): void; - toSha256(): Buffer; - getByteLength(): number; - toBuffer(): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): AppEncryptionResponseDetailsJson; - static fromJson(json: AppEncryptionResponseDetailsJson): AppEncryptionResponseDetails; -} diff --git a/dist/vdxf/classes/response/AppEncryptionResponseDetails.js b/dist/vdxf/classes/response/AppEncryptionResponseDetails.js deleted file mode 100644 index c0899c15..00000000 --- a/dist/vdxf/classes/response/AppEncryptionResponseDetails.js +++ /dev/null @@ -1,119 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AppEncryptionResponseDetails = void 0; -const bn_js_1 = require("bn.js"); -const varint_1 = require("../../../utils/varint"); -const bufferutils_1 = require("../../../utils/bufferutils"); -const { BufferReader, BufferWriter } = bufferutils_1.default; -const address_1 = require("../../../utils/address"); -const vdxf_1 = require("../../../constants/vdxf"); -const pbaas_1 = require("../../../pbaas"); -const createHash = require("create-hash"); -const SaplingExtendedSpendingKey_1 = require("../../../pbaas/SaplingExtendedSpendingKey"); -const SaplingExtendedViewingKey_1 = require("../../../pbaas/SaplingExtendedViewingKey"); -class AppEncryptionResponseDetails { - constructor(data) { - var _a, _b, _c, _d, _e; - this.version = (_a = data === null || data === void 0 ? void 0 : data.version) !== null && _a !== void 0 ? _a : new bn_js_1.BN(1); - this.flags = (_b = data === null || data === void 0 ? void 0 : data.flags) !== null && _b !== void 0 ? _b : new bn_js_1.BN(0, 10); - this.IncomingViewingKey = (_c = data === null || data === void 0 ? void 0 : data.IncomingViewingKey) !== null && _c !== void 0 ? _c : Buffer.alloc(32); - this.extendedViewingKey = (_d = data === null || data === void 0 ? void 0 : data.extendedViewingKey) !== null && _d !== void 0 ? _d : new SaplingExtendedViewingKey_1.SaplingExtendedViewingKey(); - this.address = (_e = data === null || data === void 0 ? void 0 : data.address) !== null && _e !== void 0 ? _e : new pbaas_1.SaplingPaymentAddress(); - if (data === null || data === void 0 ? void 0 : data.requestID) { - if (!this.containsRequestID()) - this.toggleContainsRequestID(); - this.requestID = data.requestID; - } - if (data === null || data === void 0 ? void 0 : data.extendedSpendingKey) { - if (!this.containsExtendedSpendingKey()) - this.toggleContainsExtendedSpendingKey(); - this.extendedSpendingKey = data.extendedSpendingKey; - } - } - containsRequestID() { - return !!(this.flags.and(AppEncryptionResponseDetails.RESPONSE_CONTAINS_REQUEST_ID).toNumber()); - } - toggleContainsRequestID() { - this.flags = this.flags.xor(AppEncryptionResponseDetails.RESPONSE_CONTAINS_REQUEST_ID); - } - containsExtendedSpendingKey() { - return !!(this.flags.and(AppEncryptionResponseDetails.RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY).toNumber()); - } - toggleContainsExtendedSpendingKey() { - this.flags = this.flags.xor(AppEncryptionResponseDetails.RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY); - } - toSha256() { - return createHash("sha256").update(this.toBuffer()).digest(); - } - getByteLength() { - let length = 0; - length += varint_1.default.encodingLength(this.flags); - if (this.containsRequestID()) { - length += vdxf_1.HASH160_BYTE_LENGTH; - } - length += 32; // IncomingViewingKey - length += this.extendedViewingKey.getByteLength(); - length += this.address.getByteLength(); - if (this.containsExtendedSpendingKey()) { - length += this.extendedSpendingKey.getByteLength(); - } - return length; - } - toBuffer() { - const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); - writer.writeVarInt(this.flags); - if (this.containsRequestID()) { - writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); - } - writer.writeSlice(this.IncomingViewingKey); - writer.writeSlice(this.extendedViewingKey.toBuffer()); - writer.writeSlice(this.address.toBuffer()); - if (this.containsExtendedSpendingKey()) { - writer.writeSlice(this.extendedSpendingKey.toBuffer()); - } - return writer.buffer; - } - fromBuffer(buffer, offset = 0) { - const reader = new BufferReader(buffer, offset); - this.flags = reader.readVarInt(); - if (this.containsRequestID()) { - this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); - } - this.IncomingViewingKey = reader.readSlice(32); - this.extendedViewingKey = new SaplingExtendedViewingKey_1.SaplingExtendedViewingKey(); - reader.offset = this.extendedViewingKey.fromBuffer(reader.buffer, reader.offset); - this.address = new pbaas_1.SaplingPaymentAddress(); - reader.offset = this.address.fromBuffer(reader.buffer, reader.offset); - if (this.containsExtendedSpendingKey()) { - this.extendedSpendingKey = new SaplingExtendedSpendingKey_1.SaplingExtendedSpendingKey(); - reader.offset = this.extendedSpendingKey.fromBuffer(reader.buffer, reader.offset); - } - return reader.offset; - } - toJson() { - return { - version: this.version.toNumber(), - flags: this.flags.toNumber(), - requestid: this.containsRequestID() ? this.requestID : undefined, - incomingviewingkey: this.IncomingViewingKey.toString('hex'), - extendedviewingkey: this.extendedViewingKey.toKeyString(), - address: this.address.toAddressString(), - extendedspendingkey: this.containsExtendedSpendingKey() ? this.extendedSpendingKey.toKeyString() : undefined - }; - } - static fromJson(json) { - var _a; - return new AppEncryptionResponseDetails({ - version: new bn_js_1.BN(json.version, 10), - flags: new bn_js_1.BN((_a = json.flags) !== null && _a !== void 0 ? _a : 0, 10), - requestID: json.requestid, - IncomingViewingKey: Buffer.from(json.incomingviewingkey, 'hex'), - extendedViewingKey: SaplingExtendedViewingKey_1.SaplingExtendedViewingKey.fromKeyString(json.extendedviewingkey), - address: pbaas_1.SaplingPaymentAddress.fromAddressString(json.address), - extendedSpendingKey: json.extendedspendingkey ? SaplingExtendedSpendingKey_1.SaplingExtendedSpendingKey.fromKeyString(json.extendedspendingkey) : undefined - }); - } -} -exports.AppEncryptionResponseDetails = AppEncryptionResponseDetails; -AppEncryptionResponseDetails.RESPONSE_CONTAINS_REQUEST_ID = new bn_js_1.BN(1, 10); -AppEncryptionResponseDetails.RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY = new bn_js_1.BN(2, 10); diff --git a/dist/vdxf/classes/response/GenericResponse.d.ts b/dist/vdxf/classes/response/GenericResponse.d.ts deleted file mode 100644 index b234f8c0..00000000 --- a/dist/vdxf/classes/response/GenericResponse.d.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { SerializableEntity } from "../../../utils/types/SerializableEntity"; -import { GenericEnvelope, GenericEnvelopeInterface, GenericEnvelopeJson } from "../envelope/GenericEnvelope"; -import { BigNumber } from '../../../utils/types/BigNumber'; -export type GenericResponseJson = GenericEnvelopeJson & { - requesthash?: string; - requesthashtype?: number; -}; -export type GenericResponseInterface = GenericEnvelopeInterface & { - requestHash?: Buffer; - requestHashType?: BigNumber; -}; -export declare class GenericResponse extends GenericEnvelope implements SerializableEntity { - requestHash?: Buffer; - requestHashType?: BigNumber; - static VERSION_CURRENT: import("bn.js"); - static VERSION_FIRSTVALID: import("bn.js"); - static VERSION_LASTVALID: import("bn.js"); - static BASE_FLAGS: import("bn.js"); - static FLAG_SIGNED: import("bn.js"); - static FLAG_HAS_CREATED_AT: import("bn.js"); - static FLAG_MULTI_DETAILS: import("bn.js"); - static FLAG_IS_TESTNET: import("bn.js"); - static FLAG_HAS_SALT: import("bn.js"); - static FLAG_HAS_REQUEST_HASH: import("bn.js"); - constructor(envelope?: GenericResponseInterface); - hasRequestHash(): boolean; - setHasRequestHash(): void; - setFlags(): void; - getByteLengthOptionalSig(includeSig?: boolean): number; - protected toBufferOptionalSig(includeSig?: boolean): Buffer; - fromBuffer(buffer: Buffer, offset?: number): number; - toJson(): GenericResponseJson; -} diff --git a/dist/vdxf/classes/response/GenericResponse.js b/dist/vdxf/classes/response/GenericResponse.js deleted file mode 100644 index e935907c..00000000 --- a/dist/vdxf/classes/response/GenericResponse.js +++ /dev/null @@ -1,83 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GenericResponse = void 0; -const bn_js_1 = require("bn.js"); -const GenericEnvelope_1 = require("../envelope/GenericEnvelope"); -const bufferutils_1 = require("../../../utils/bufferutils"); -const DataDescriptor_1 = require("../../../pbaas/DataDescriptor"); -const varuint_1 = require("../../../utils/varuint"); -class GenericResponse extends GenericEnvelope_1.GenericEnvelope { - constructor(envelope = { - details: [], - flags: GenericResponse.BASE_FLAGS - }) { - super(envelope); - this.requestHash = envelope.requestHash; - this.setFlags(); - this.requestHashType = envelope.requestHashType; - if (this.requestHashType == null && this.hasRequestHash()) { - this.requestHashType = new bn_js_1.BN(DataDescriptor_1.EHashTypes.HASH_SHA256); - } - } - hasRequestHash() { - return !!(this.flags.and(GenericResponse.FLAG_HAS_REQUEST_HASH).toNumber()); - } - setHasRequestHash() { - this.flags = this.flags.or(GenericResponse.FLAG_HAS_REQUEST_HASH); - } - setFlags() { - super.setFlags(); - if (this.requestHash) - this.setHasRequestHash(); - } - getByteLengthOptionalSig(includeSig = true) { - let length = super.getByteLengthOptionalSig(includeSig); - if (this.hasRequestHash()) { - const hashLen = this.requestHash.length; - length += varuint_1.default.encodingLength(this.requestHashType.toNumber()); - length += varuint_1.default.encodingLength(this.requestHash.length); - length += hashLen; - } - return length; - } - toBufferOptionalSig(includeSig = true) { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLengthOptionalSig(includeSig))); - const superBuf = super.toBufferOptionalSig(includeSig); - writer.writeSlice(superBuf); - if (this.hasRequestHash()) { - writer.writeCompactSize(this.requestHashType.toNumber()); - writer.writeVarSlice(this.requestHash); - } - return writer.buffer; - } - fromBuffer(buffer, offset) { - if (buffer.length == 0) - throw new Error("Cannot create response from empty buffer"); - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - reader.offset = super.fromBuffer(reader.buffer, reader.offset); - if (this.hasRequestHash()) { - this.requestHashType = new bn_js_1.BN(reader.readCompactSize()); - this.requestHash = reader.readVarSlice(); - } - return reader.offset; - } - toJson() { - const parentJson = super.toJson(); - if (this.hasRequestHash()) { - parentJson["requesthash"] = this.requestHash.toString('hex'); - parentJson["requesthashtype"] = this.requestHashType.toNumber(); - } - return parentJson; - } -} -exports.GenericResponse = GenericResponse; -GenericResponse.VERSION_CURRENT = new bn_js_1.BN(1, 10); -GenericResponse.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); -GenericResponse.VERSION_LASTVALID = new bn_js_1.BN(1, 10); -GenericResponse.BASE_FLAGS = GenericEnvelope_1.GenericEnvelope.BASE_FLAGS; -GenericResponse.FLAG_SIGNED = GenericEnvelope_1.GenericEnvelope.FLAG_SIGNED; -GenericResponse.FLAG_HAS_CREATED_AT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_CREATED_AT; -GenericResponse.FLAG_MULTI_DETAILS = GenericEnvelope_1.GenericEnvelope.FLAG_MULTI_DETAILS; -GenericResponse.FLAG_IS_TESTNET = GenericEnvelope_1.GenericEnvelope.FLAG_IS_TESTNET; -GenericResponse.FLAG_HAS_SALT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_SALT; -GenericResponse.FLAG_HAS_REQUEST_HASH = new bn_js_1.BN(32, 10); diff --git a/dist/vdxf/identitydatakeys.d.ts b/dist/vdxf/identitydatakeys.d.ts deleted file mode 100644 index 7c9f4515..00000000 --- a/dist/vdxf/identitydatakeys.d.ts +++ /dev/null @@ -1,184 +0,0 @@ -import { VDXFKeyInterface } from "./keys"; -export declare const IDENTITY_ACCOUNT_ID: VDXFKeyInterface; -export declare const IDENTITY_ACCOUNT_USERID: VDXFKeyInterface; -export declare const IDENTITY_ACCOUNT_CREATEDAT: VDXFKeyInterface; -export declare const IDENTITY_ACCOUNT_COMPLETEDAT: VDXFKeyInterface; -export declare const IDENTITY_ACCOUNT_PREVIOUSATTEMPTID: VDXFKeyInterface; -export declare const IDENTITY_ACCOUNT_SHAREABLEURL: VDXFKeyInterface; -export declare const IDENTITY_ACCOUNT_TEMPLATEID: VDXFKeyInterface; -export declare const IDENTITY_ACCOUNT_TEMPLATEVERSION: VDXFKeyInterface; -export declare const IDENTITY_ACCOUNT_STATUS: VDXFKeyInterface; -export declare const IDENTITY_PHONENUMBER: VDXFKeyInterface; -export declare const IDENTITY_DATEOFBIRTH: VDXFKeyInterface; -export declare const IDENTITY_OVER18: VDXFKeyInterface; -export declare const IDENTITY_OVER21: VDXFKeyInterface; -export declare const IDENTITY_OVER25: VDXFKeyInterface; -export declare const IDENTITY_ACCOUNT_REQUESTING_IPADDRESS: VDXFKeyInterface; -export declare const IDENTITY_EMAIL: VDXFKeyInterface; -export declare const IDENTITY_NATIONALITY: VDXFKeyInterface; -export declare const IDENTITY_FIRSTNAME: VDXFKeyInterface; -export declare const IDENTITY_MIDDLENAME: VDXFKeyInterface; -export declare const IDENTITY_LASTNAME: VDXFKeyInterface; -export declare const IDENTITY_GENDER: VDXFKeyInterface; -export declare const IDENTITY_HEIGHT: VDXFKeyInterface; -export declare const IDENTITY_EYECOLOR: VDXFKeyInterface; -export declare const IDENTITY_ETHNICITY: VDXFKeyInterface; -export declare const IDENTITY_WEIGHT: VDXFKeyInterface; -export declare const IDENTITY_HOMEADDRESS: VDXFKeyInterface; -export declare const IDENTITY_HOMEADDRESS_STREET1: VDXFKeyInterface; -export declare const IDENTITY_HOMEADDRESS_STREET2: VDXFKeyInterface; -export declare const IDENTITY_HOMEADDRESS_CITY: VDXFKeyInterface; -export declare const IDENTITY_HOMEADDRESS_REGION: VDXFKeyInterface; -export declare const IDENTITY_HOMEADDRESS_POSTCODE: VDXFKeyInterface; -export declare const IDENTITY_HOMEADDRESS_COUNTRY: VDXFKeyInterface; -export declare const IDENTITY_IDNUMBER_VALUE: VDXFKeyInterface; -export declare const IDENTITY_IDNUMBER_TYPE: VDXFKeyInterface; -export declare const IDENTITY_VERIFICATION_STATUS: VDXFKeyInterface; -export declare const IDENTITY_VERIFICATION_APPROVALS: VDXFKeyInterface; -export declare const IDENTITY_VERIFICATION_APPROVALS_ACCEPTEDTOS: VDXFKeyInterface; -export declare const IDENTITY_VERIFICATION_APPROVALS_VERIFIEDSMS: VDXFKeyInterface; -export declare const IDENTITY_VERIFICATION_APPROVALS_KYCCHECKED: VDXFKeyInterface; -export declare const IDENTITY_VERIFICATION_APPROVALS_DOCUMENTSVERIFIED: VDXFKeyInterface; -export declare const IDENTITY_VERIFICATION_APPROVALS_SELFIECHECKED: VDXFKeyInterface; -export declare const IDENTITY_VERIFICATION_APPROVALS_WATCHLISTOK: VDXFKeyInterface; -export declare const IDENTITY_VERIFICATION_APPROVALS_RISKCHECKOK: VDXFKeyInterface; -export declare const IDENTITY_VERIFICATION_APPROVALS_STATUS: VDXFKeyInterface; -export declare const IDENTITY_DRIVINGLICENCE: VDXFKeyInterface; -export declare const IDENTITY_DRIVINGLICENCE_ORIGINALFRONT: VDXFKeyInterface; -export declare const IDENTITY_DRIVINGLICENCE_ORIGINALBACK: VDXFKeyInterface; -export declare const IDENTITY_DRIVINGLICENCE_CROPPEDFRONT: VDXFKeyInterface; -export declare const IDENTITY_DRIVINGLICENCE_CROPPEDBACK: VDXFKeyInterface; -export declare const IDENTITY_DRIVINGLICENCE_FACE: VDXFKeyInterface; -export declare const IDENTITY_DRIVINGLICENCE_IDNUMBER: VDXFKeyInterface; -export declare const IDENTITY_DRIVINGLICENCE_CATEGORY: VDXFKeyInterface; -export declare const IDENTITY_DRIVINGLICENCE_EXPIRATIONDATE: VDXFKeyInterface; -export declare const IDENTITY_DRIVINGLICENCE_ISSUINGCOUNTRY: VDXFKeyInterface; -export declare const IDENTITY_DRIVINGLICENCE_ISSUINGREGION: VDXFKeyInterface; -export declare const IDENTITY_DRIVINGLICENCE_DATEOFBIRTH: VDXFKeyInterface; -export declare const IDENTITY_DRIVINGLICENCE_ADDRESS_STREET1: VDXFKeyInterface; -export declare const IDENTITY_DRIVINGLICENCE_ADDRESS_CITY: VDXFKeyInterface; -export declare const IDENTITY_DRIVINGLICENCE_ADDRESS_REGION: VDXFKeyInterface; -export declare const IDENTITY_DRIVINGLICENCE_ADDRESS_POSTCODE: VDXFKeyInterface; -export declare const IDENTITY_DRIVINGLICENCE_ADDRESS_COUNTRY: VDXFKeyInterface; -export declare const IDENTITY_SELFIECHECK_IMAGE: VDXFKeyInterface; -export declare const IDENTITY_SELFIECHECK_VIDEO: VDXFKeyInterface; -export declare const IDENTITY_EMAIL_ISDELIVERABLE: VDXFKeyInterface; -export declare const IDENTITY_EMAIL_BREACHCOUNT: VDXFKeyInterface; -export declare const IDENTITY_EMAIL_FIRSTBREACHEDAT: VDXFKeyInterface; -export declare const IDENTITY_EMAIL_LASTBREACHEDAT: VDXFKeyInterface; -export declare const IDENTITY_EMAIL_DOMAIN_REGISTEREDAT: VDXFKeyInterface; -export declare const IDENTITY_EMAIL_DOMAIN_FREEPROVIDER: VDXFKeyInterface; -export declare const IDENTITY_EMAIL_DOMAIN_CUSTOM: VDXFKeyInterface; -export declare const IDENTITY_EMAIL_DOMAIN_DISPOSABLE: VDXFKeyInterface; -export declare const IDENTITY_EMAIL_DOMAIN_TOPLEVEL_SUSPICIOUS: VDXFKeyInterface; -export declare const IDENTITY_PASSPORT: VDXFKeyInterface; -export declare const IDENTITY_PASSPORT_ORIGINALFRONT: VDXFKeyInterface; -export declare const IDENTITY_PASSPORT_ORIGINALBACK: VDXFKeyInterface; -export declare const IDENTITY_PASSPORT_CROPPEDFRONT: VDXFKeyInterface; -export declare const IDENTITY_PASSPORT_CROPPEDBACK: VDXFKeyInterface; -export declare const IDENTITY_PASSPORT_FACE: VDXFKeyInterface; -export declare const IDENTITY_PASSPORT_IDNUMBER: VDXFKeyInterface; -export declare const IDENTITY_PASSPORT_CATEGORY: VDXFKeyInterface; -export declare const IDENTITY_PASSPORT_EXPIRATIONDATE: VDXFKeyInterface; -export declare const IDENTITY_PASSPORT_ISSUINGCOUNTRY: VDXFKeyInterface; -export declare const IDENTITY_PASSPORT_ISSUINGREGION: VDXFKeyInterface; -export declare const IDENTITY_PASSPORT_DATEOFBIRTH: VDXFKeyInterface; -export declare const IDENTITY_PASSPORT_ADDRESS_STREET1: VDXFKeyInterface; -export declare const IDENTITY_PASSPORT_ADDRESS_CITY: VDXFKeyInterface; -export declare const IDENTITY_PASSPORT_ADDRESS_REGION: VDXFKeyInterface; -export declare const IDENTITY_PASSPORT_ADDRESS_POSTCODE: VDXFKeyInterface; -export declare const IDENTITY_PASSPORT_ADDRESS_COUNTRY: VDXFKeyInterface; -export declare const IDENTITY_RESIDENCEPERMIT: VDXFKeyInterface; -export declare const IDENTITY_RESIDENCEPERMIT_ORIGINALFRONT: VDXFKeyInterface; -export declare const IDENTITY_RESIDENCEPERMIT_ORIGINALBACK: VDXFKeyInterface; -export declare const IDENTITY_RESIDENCEPERMIT_CROPPEDFRONT: VDXFKeyInterface; -export declare const IDENTITY_RESIDENCEPERMIT_CROPPEDBACK: VDXFKeyInterface; -export declare const IDENTITY_RESIDENCEPERMIT_FACE: VDXFKeyInterface; -export declare const IDENTITY_RESIDENCEPERMIT_IDNUMBER: VDXFKeyInterface; -export declare const IDENTITY_RESIDENCEPERMIT_CATEGORY: VDXFKeyInterface; -export declare const IDENTITY_RESIDENCEPERMIT_EXPIRATIONDATE: VDXFKeyInterface; -export declare const IDENTITY_RESIDENCEPERMIT_ISSUINGCOUNTRY: VDXFKeyInterface; -export declare const IDENTITY_RESIDENCEPERMIT_ISSUINGREGION: VDXFKeyInterface; -export declare const IDENTITY_RESIDENCEPERMIT_DATEOFBIRTH: VDXFKeyInterface; -export declare const IDENTITY_RESIDENCEPERMIT_ADDRESS: VDXFKeyInterface; -export declare const IDENTITY_RESIDENCEPERMIT_ADDRESS_STREET1: VDXFKeyInterface; -export declare const IDENTITY_RESIDENCEPERMIT_ADDRESS_CITY: VDXFKeyInterface; -export declare const IDENTITY_RESIDENCEPERMIT_ADDRESS_REGION: VDXFKeyInterface; -export declare const IDENTITY_RESIDENCEPERMIT_ADDRESS_POSTCODE: VDXFKeyInterface; -export declare const IDENTITY_RESIDENCEPERMIT_ADDRESS_COUNTRY: VDXFKeyInterface; -export declare const IDENTITY_RESIDENTCARD: VDXFKeyInterface; -export declare const IDENTITY_RESIDENTCARD_ORIGINALFRONT: VDXFKeyInterface; -export declare const IDENTITY_RESIDENTCARD_ORIGINALBACK: VDXFKeyInterface; -export declare const IDENTITY_RESIDENTCARD_CROPPEDFRONT: VDXFKeyInterface; -export declare const IDENTITY_RESIDENTCARD_CROPPEDBACK: VDXFKeyInterface; -export declare const IDENTITY_RESIDENTCARD_FACE: VDXFKeyInterface; -export declare const IDENTITY_RESIDENTCARD_IDNUMBER: VDXFKeyInterface; -export declare const IDENTITY_RESIDENTCARD_CATEGORY: VDXFKeyInterface; -export declare const IDENTITY_RESIDENTCARD_EXPIRATIONDATE: VDXFKeyInterface; -export declare const IDENTITY_RESIDENTCARD_ISSUINGCOUNTRY: VDXFKeyInterface; -export declare const IDENTITY_RESIDENTCARD_ISSUINGREGION: VDXFKeyInterface; -export declare const IDENTITY_RESIDENTCARD_DATEOFBIRTH: VDXFKeyInterface; -export declare const IDENTITY_RESIDENTCARD_ADDRESS_STREET1: VDXFKeyInterface; -export declare const IDENTITY_RESIDENTCARD_ADDRESS_CITY: VDXFKeyInterface; -export declare const IDENTITY_RESIDENTCARD_ADDRESS_REGION: VDXFKeyInterface; -export declare const IDENTITY_RESIDENTCARD_ADDRESS_POSTCODE: VDXFKeyInterface; -export declare const IDENTITY_RESIDENTCARD_ADDRESS_COUNTRY: VDXFKeyInterface; -export declare const IDENTITY_IDCARD: VDXFKeyInterface; -export declare const IDENTITY_IDCARD_ORIGINALFRONT: VDXFKeyInterface; -export declare const IDENTITY_IDCARD_ORIGINALBACK: VDXFKeyInterface; -export declare const IDENTITY_IDCARD_CROPPEDFRONT: VDXFKeyInterface; -export declare const IDENTITY_IDCARD_CROPPEDBACK: VDXFKeyInterface; -export declare const IDENTITY_IDCARD_FACE: VDXFKeyInterface; -export declare const IDENTITY_IDCARD_IDNUMBER: VDXFKeyInterface; -export declare const IDENTITY_IDCARD_CATEGORY: VDXFKeyInterface; -export declare const IDENTITY_IDCARD_EXPIRATIONDATE: VDXFKeyInterface; -export declare const IDENTITY_IDCARD_ISSUINGCOUNTRY: VDXFKeyInterface; -export declare const IDENTITY_IDCARD_ISSUINGREGION: VDXFKeyInterface; -export declare const IDENTITY_IDCARD_DATEOFBIRTH: VDXFKeyInterface; -export declare const IDENTITY_IDCARD_ADDRESS_STREET1: VDXFKeyInterface; -export declare const IDENTITY_IDCARD_ADDRESS_CITY: VDXFKeyInterface; -export declare const IDENTITY_IDCARD_ADDRESS_REGION: VDXFKeyInterface; -export declare const IDENTITY_IDCARD_ADDRESS_POSTCODE: VDXFKeyInterface; -export declare const IDENTITY_IDCARD_ADDRESS_COUNTRY: VDXFKeyInterface; -export declare const IDENTITY_VISA: VDXFKeyInterface; -export declare const IDENTITY_VISA_ORIGINALFRONT: VDXFKeyInterface; -export declare const IDENTITY_VISA_ORIGINALBACK: VDXFKeyInterface; -export declare const IDENTITY_VISA_CROPPEDFRONT: VDXFKeyInterface; -export declare const IDENTITY_VISA_CROPPEDBACK: VDXFKeyInterface; -export declare const IDENTITY_VISA_FACE: VDXFKeyInterface; -export declare const IDENTITY_VISA_IDNUMBER: VDXFKeyInterface; -export declare const IDENTITY_VISA_CATEGORY: VDXFKeyInterface; -export declare const IDENTITY_VISA_EXPIRATIONDATE: VDXFKeyInterface; -export declare const IDENTITY_VISA_ISSUINGCOUNTRY: VDXFKeyInterface; -export declare const IDENTITY_VISA_ISSUINGREGION: VDXFKeyInterface; -export declare const IDENTITY_VISA_DATEOFBIRTH: VDXFKeyInterface; -export declare const IDENTITY_VISA_ADDRESS_STREET1: VDXFKeyInterface; -export declare const IDENTITY_VISA_ADDRESS_CITY: VDXFKeyInterface; -export declare const IDENTITY_VISA_ADDRESS_REGION: VDXFKeyInterface; -export declare const IDENTITY_VISA_ADDRESS_POSTCODE: VDXFKeyInterface; -export declare const IDENTITY_VISA_ADDRESS_COUNTRY: VDXFKeyInterface; -export declare const IDENTITY_PERSONALDETAILS: VDXFKeyInterface; -export declare const IDENTITY_CONTACTDETAILS: VDXFKeyInterface; -export declare const IDENTITY_LOCATION: VDXFKeyInterface; -export declare const IDENTITY_BANKINGDETAILS: VDXFKeyInterface; -export declare const IDENTITY_DOCUMENTS: VDXFKeyInterface; -export declare const IDENTITY_BANKACCOUNT: VDXFKeyInterface; -export declare const IDENTITY_BANKINGDETAILS_CURRENCY: VDXFKeyInterface; -export declare const IDENTITY_BANKINGDETAILS_COUNTRY: VDXFKeyInterface; -export declare const IDENTITY_BANKINGDETAILS_STREET1: VDXFKeyInterface; -export declare const IDENTITY_BANKINGDETAILS_STREET2: VDXFKeyInterface; -export declare const IDENTITY_BANKINGDETAILS_CITY: VDXFKeyInterface; -export declare const IDENTITY_BANKINGDETAILS_REGION: VDXFKeyInterface; -export declare const IDENTITY_BANKINGDETAILS_POSTALCODE: VDXFKeyInterface; -export declare const IDENTITY_BANKINGDETAILS_TAXNUMBER: VDXFKeyInterface; -export declare const IDENTITY_BANKINGDETAILS_TAXCOUNTRY: VDXFKeyInterface; -export declare const IDENTITY_BANKINGDETAILS_FIRSTNAME: VDXFKeyInterface; -export declare const IDENTITY_BANKINGDETAILS_LASTNAME: VDXFKeyInterface; -export declare const IDENTITY_BANKINGDETAILS_PHONENUMBER: VDXFKeyInterface; -export declare const IDENTITY_BANKINGDETAILS_NUMBER: VDXFKeyInterface; -export declare const IDENTITY_BANKINGDETAILS_TYPE: VDXFKeyInterface; -export declare const IDENTITY_BANKINGDETAILS_SORTCODE: VDXFKeyInterface; -export declare const IDENTITY_DOCUMENTS_PASSPORT: VDXFKeyInterface; -export declare const IDENTITY_RESIDENCECARD: VDXFKeyInterface; -export declare const IDENTITY_ATTESTOR: VDXFKeyInterface; -export declare const IDENTITY_ATTESTATION_RECIPIENT: VDXFKeyInterface; diff --git a/dist/vdxf/identitydatakeys.js b/dist/vdxf/identitydatakeys.js deleted file mode 100644 index 5039ee43..00000000 --- a/dist/vdxf/identitydatakeys.js +++ /dev/null @@ -1,1653 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.IDENTITY_DRIVINGLICENCE_FACE = exports.IDENTITY_DRIVINGLICENCE_CROPPEDBACK = exports.IDENTITY_DRIVINGLICENCE_CROPPEDFRONT = exports.IDENTITY_DRIVINGLICENCE_ORIGINALBACK = exports.IDENTITY_DRIVINGLICENCE_ORIGINALFRONT = exports.IDENTITY_DRIVINGLICENCE = exports.IDENTITY_VERIFICATION_APPROVALS_STATUS = exports.IDENTITY_VERIFICATION_APPROVALS_RISKCHECKOK = exports.IDENTITY_VERIFICATION_APPROVALS_WATCHLISTOK = exports.IDENTITY_VERIFICATION_APPROVALS_SELFIECHECKED = exports.IDENTITY_VERIFICATION_APPROVALS_DOCUMENTSVERIFIED = exports.IDENTITY_VERIFICATION_APPROVALS_KYCCHECKED = exports.IDENTITY_VERIFICATION_APPROVALS_VERIFIEDSMS = exports.IDENTITY_VERIFICATION_APPROVALS_ACCEPTEDTOS = exports.IDENTITY_VERIFICATION_APPROVALS = exports.IDENTITY_VERIFICATION_STATUS = exports.IDENTITY_IDNUMBER_TYPE = exports.IDENTITY_IDNUMBER_VALUE = exports.IDENTITY_HOMEADDRESS_COUNTRY = exports.IDENTITY_HOMEADDRESS_POSTCODE = exports.IDENTITY_HOMEADDRESS_REGION = exports.IDENTITY_HOMEADDRESS_CITY = exports.IDENTITY_HOMEADDRESS_STREET2 = exports.IDENTITY_HOMEADDRESS_STREET1 = exports.IDENTITY_HOMEADDRESS = exports.IDENTITY_WEIGHT = exports.IDENTITY_ETHNICITY = exports.IDENTITY_EYECOLOR = exports.IDENTITY_HEIGHT = exports.IDENTITY_GENDER = exports.IDENTITY_LASTNAME = exports.IDENTITY_MIDDLENAME = exports.IDENTITY_FIRSTNAME = exports.IDENTITY_NATIONALITY = exports.IDENTITY_EMAIL = exports.IDENTITY_ACCOUNT_REQUESTING_IPADDRESS = exports.IDENTITY_OVER25 = exports.IDENTITY_OVER21 = exports.IDENTITY_OVER18 = exports.IDENTITY_DATEOFBIRTH = exports.IDENTITY_PHONENUMBER = exports.IDENTITY_ACCOUNT_STATUS = exports.IDENTITY_ACCOUNT_TEMPLATEVERSION = exports.IDENTITY_ACCOUNT_TEMPLATEID = exports.IDENTITY_ACCOUNT_SHAREABLEURL = exports.IDENTITY_ACCOUNT_PREVIOUSATTEMPTID = exports.IDENTITY_ACCOUNT_COMPLETEDAT = exports.IDENTITY_ACCOUNT_CREATEDAT = exports.IDENTITY_ACCOUNT_USERID = exports.IDENTITY_ACCOUNT_ID = void 0; -exports.IDENTITY_RESIDENCEPERMIT_ISSUINGREGION = exports.IDENTITY_RESIDENCEPERMIT_ISSUINGCOUNTRY = exports.IDENTITY_RESIDENCEPERMIT_EXPIRATIONDATE = exports.IDENTITY_RESIDENCEPERMIT_CATEGORY = exports.IDENTITY_RESIDENCEPERMIT_IDNUMBER = exports.IDENTITY_RESIDENCEPERMIT_FACE = exports.IDENTITY_RESIDENCEPERMIT_CROPPEDBACK = exports.IDENTITY_RESIDENCEPERMIT_CROPPEDFRONT = exports.IDENTITY_RESIDENCEPERMIT_ORIGINALBACK = exports.IDENTITY_RESIDENCEPERMIT_ORIGINALFRONT = exports.IDENTITY_RESIDENCEPERMIT = exports.IDENTITY_PASSPORT_ADDRESS_COUNTRY = exports.IDENTITY_PASSPORT_ADDRESS_POSTCODE = exports.IDENTITY_PASSPORT_ADDRESS_REGION = exports.IDENTITY_PASSPORT_ADDRESS_CITY = exports.IDENTITY_PASSPORT_ADDRESS_STREET1 = exports.IDENTITY_PASSPORT_DATEOFBIRTH = exports.IDENTITY_PASSPORT_ISSUINGREGION = exports.IDENTITY_PASSPORT_ISSUINGCOUNTRY = exports.IDENTITY_PASSPORT_EXPIRATIONDATE = exports.IDENTITY_PASSPORT_CATEGORY = exports.IDENTITY_PASSPORT_IDNUMBER = exports.IDENTITY_PASSPORT_FACE = exports.IDENTITY_PASSPORT_CROPPEDBACK = exports.IDENTITY_PASSPORT_CROPPEDFRONT = exports.IDENTITY_PASSPORT_ORIGINALBACK = exports.IDENTITY_PASSPORT_ORIGINALFRONT = exports.IDENTITY_PASSPORT = exports.IDENTITY_EMAIL_DOMAIN_TOPLEVEL_SUSPICIOUS = exports.IDENTITY_EMAIL_DOMAIN_DISPOSABLE = exports.IDENTITY_EMAIL_DOMAIN_CUSTOM = exports.IDENTITY_EMAIL_DOMAIN_FREEPROVIDER = exports.IDENTITY_EMAIL_DOMAIN_REGISTEREDAT = exports.IDENTITY_EMAIL_LASTBREACHEDAT = exports.IDENTITY_EMAIL_FIRSTBREACHEDAT = exports.IDENTITY_EMAIL_BREACHCOUNT = exports.IDENTITY_EMAIL_ISDELIVERABLE = exports.IDENTITY_SELFIECHECK_VIDEO = exports.IDENTITY_SELFIECHECK_IMAGE = exports.IDENTITY_DRIVINGLICENCE_ADDRESS_COUNTRY = exports.IDENTITY_DRIVINGLICENCE_ADDRESS_POSTCODE = exports.IDENTITY_DRIVINGLICENCE_ADDRESS_REGION = exports.IDENTITY_DRIVINGLICENCE_ADDRESS_CITY = exports.IDENTITY_DRIVINGLICENCE_ADDRESS_STREET1 = exports.IDENTITY_DRIVINGLICENCE_DATEOFBIRTH = exports.IDENTITY_DRIVINGLICENCE_ISSUINGREGION = exports.IDENTITY_DRIVINGLICENCE_ISSUINGCOUNTRY = exports.IDENTITY_DRIVINGLICENCE_EXPIRATIONDATE = exports.IDENTITY_DRIVINGLICENCE_CATEGORY = exports.IDENTITY_DRIVINGLICENCE_IDNUMBER = void 0; -exports.IDENTITY_VISA_EXPIRATIONDATE = exports.IDENTITY_VISA_CATEGORY = exports.IDENTITY_VISA_IDNUMBER = exports.IDENTITY_VISA_FACE = exports.IDENTITY_VISA_CROPPEDBACK = exports.IDENTITY_VISA_CROPPEDFRONT = exports.IDENTITY_VISA_ORIGINALBACK = exports.IDENTITY_VISA_ORIGINALFRONT = exports.IDENTITY_VISA = exports.IDENTITY_IDCARD_ADDRESS_COUNTRY = exports.IDENTITY_IDCARD_ADDRESS_POSTCODE = exports.IDENTITY_IDCARD_ADDRESS_REGION = exports.IDENTITY_IDCARD_ADDRESS_CITY = exports.IDENTITY_IDCARD_ADDRESS_STREET1 = exports.IDENTITY_IDCARD_DATEOFBIRTH = exports.IDENTITY_IDCARD_ISSUINGREGION = exports.IDENTITY_IDCARD_ISSUINGCOUNTRY = exports.IDENTITY_IDCARD_EXPIRATIONDATE = exports.IDENTITY_IDCARD_CATEGORY = exports.IDENTITY_IDCARD_IDNUMBER = exports.IDENTITY_IDCARD_FACE = exports.IDENTITY_IDCARD_CROPPEDBACK = exports.IDENTITY_IDCARD_CROPPEDFRONT = exports.IDENTITY_IDCARD_ORIGINALBACK = exports.IDENTITY_IDCARD_ORIGINALFRONT = exports.IDENTITY_IDCARD = exports.IDENTITY_RESIDENTCARD_ADDRESS_COUNTRY = exports.IDENTITY_RESIDENTCARD_ADDRESS_POSTCODE = exports.IDENTITY_RESIDENTCARD_ADDRESS_REGION = exports.IDENTITY_RESIDENTCARD_ADDRESS_CITY = exports.IDENTITY_RESIDENTCARD_ADDRESS_STREET1 = exports.IDENTITY_RESIDENTCARD_DATEOFBIRTH = exports.IDENTITY_RESIDENTCARD_ISSUINGREGION = exports.IDENTITY_RESIDENTCARD_ISSUINGCOUNTRY = exports.IDENTITY_RESIDENTCARD_EXPIRATIONDATE = exports.IDENTITY_RESIDENTCARD_CATEGORY = exports.IDENTITY_RESIDENTCARD_IDNUMBER = exports.IDENTITY_RESIDENTCARD_FACE = exports.IDENTITY_RESIDENTCARD_CROPPEDBACK = exports.IDENTITY_RESIDENTCARD_CROPPEDFRONT = exports.IDENTITY_RESIDENTCARD_ORIGINALBACK = exports.IDENTITY_RESIDENTCARD_ORIGINALFRONT = exports.IDENTITY_RESIDENTCARD = exports.IDENTITY_RESIDENCEPERMIT_ADDRESS_COUNTRY = exports.IDENTITY_RESIDENCEPERMIT_ADDRESS_POSTCODE = exports.IDENTITY_RESIDENCEPERMIT_ADDRESS_REGION = exports.IDENTITY_RESIDENCEPERMIT_ADDRESS_CITY = exports.IDENTITY_RESIDENCEPERMIT_ADDRESS_STREET1 = exports.IDENTITY_RESIDENCEPERMIT_ADDRESS = exports.IDENTITY_RESIDENCEPERMIT_DATEOFBIRTH = void 0; -exports.IDENTITY_ATTESTATION_RECIPIENT = exports.IDENTITY_ATTESTOR = exports.IDENTITY_RESIDENCECARD = exports.IDENTITY_DOCUMENTS_PASSPORT = exports.IDENTITY_BANKINGDETAILS_SORTCODE = exports.IDENTITY_BANKINGDETAILS_TYPE = exports.IDENTITY_BANKINGDETAILS_NUMBER = exports.IDENTITY_BANKINGDETAILS_PHONENUMBER = exports.IDENTITY_BANKINGDETAILS_LASTNAME = exports.IDENTITY_BANKINGDETAILS_FIRSTNAME = exports.IDENTITY_BANKINGDETAILS_TAXCOUNTRY = exports.IDENTITY_BANKINGDETAILS_TAXNUMBER = exports.IDENTITY_BANKINGDETAILS_POSTALCODE = exports.IDENTITY_BANKINGDETAILS_REGION = exports.IDENTITY_BANKINGDETAILS_CITY = exports.IDENTITY_BANKINGDETAILS_STREET2 = exports.IDENTITY_BANKINGDETAILS_STREET1 = exports.IDENTITY_BANKINGDETAILS_COUNTRY = exports.IDENTITY_BANKINGDETAILS_CURRENCY = exports.IDENTITY_BANKACCOUNT = exports.IDENTITY_DOCUMENTS = exports.IDENTITY_BANKINGDETAILS = exports.IDENTITY_LOCATION = exports.IDENTITY_CONTACTDETAILS = exports.IDENTITY_PERSONALDETAILS = exports.IDENTITY_VISA_ADDRESS_COUNTRY = exports.IDENTITY_VISA_ADDRESS_POSTCODE = exports.IDENTITY_VISA_ADDRESS_REGION = exports.IDENTITY_VISA_ADDRESS_CITY = exports.IDENTITY_VISA_ADDRESS_STREET1 = exports.IDENTITY_VISA_DATEOFBIRTH = exports.IDENTITY_VISA_ISSUINGREGION = exports.IDENTITY_VISA_ISSUINGCOUNTRY = void 0; -exports.IDENTITY_ACCOUNT_ID = { - "vdxfid": "i5Xgd7Aqds922eE8FDBUsKHSgiig39AnfS", - "indexid": "xAMo5ubvVBMgep7A6tqdqhoyiNjgq3j1ci", - "hash160result": "4c5e79bf46593fe959cb1918422eaa8fc82b8916", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.account.id" - } -}; -exports.IDENTITY_ACCOUNT_USERID = { - "vdxfid": "iNKVUvr5GzdCHgybMauK11DdZZUyWE3pe3", - "indexid": "xT9bwjHA8JqrurrdDGZTyPkAbDVzR53C2o", - "hash160result": "93b62bfd8c861ac7a5aa3d3d9f618ccd8c04b5ce", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.account.userid" - } -}; -exports.IDENTITY_ACCOUNT_CREATEDAT = { - "vdxfid": "i42uTbJmVBcPacY3Ak1g95LBg5rBBntQby", - "indexid": "x8s1vPjrLVq4CnR52Rfq7TrihjsBzxAEic", - "hash160result": "c40b12b14582c976e67a2e5992b0fdf67fb21f06", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.account.createdat" - } -}; -exports.IDENTITY_ACCOUNT_COMPLETEDAT = { - "vdxfid": "iRJTZj7osY5EYA7pd7K3UcJVAApkvodDjZ", - "indexid": "xW8a2XYtirHuAKzrUnyCSzq2BpqmpCnnHQ", - "hash160result": "c568b6e1f734f5dc9b754e5932ebdb63f2606bef", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.account.completedat" - } -}; -exports.IDENTITY_ACCOUNT_PREVIOUSATTEMPTID = { - "vdxfid": "iGU6RCWyjU1sscCPLN77XhTESJ21JCTNxF", - "indexid": "xMJCszx4anEYVn5RC3mGW5ymTx32EBfaqs", - "hash160result": "50c2b12bb483802d14beae3c6b7454c6ecc0848e", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.account.previousattemptid" - } -}; -exports.IDENTITY_ACCOUNT_SHAREABLEURL = { - "vdxfid": "i92YkV3FVGZfp5Ep3j1sfQUgqUS37M9v82", - "indexid": "xDrfDHULLanLSF7quQg2do1Ds8T3yGCRw3", - "hash160result": "52e9f990e5e89cc1088acd29a2fda0ef140ae73c", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.account.shareableurl" - } -}; -exports.IDENTITY_ACCOUNT_TEMPLATEID = { - "vdxfid": "iL5diuVsHAG5DLVeyc8XYdEXR6fFro5G7s", - "indexid": "xQukBhvx8UUjqWNgqHngX1m4SkgGhnybh1", - "hash160result": "37ef653fe6685fca132d77834384702f6cd225b6", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.account.templateid" - } -}; -exports.IDENTITY_ACCOUNT_TEMPLATEVERSION = { - "vdxfid": "i7eBZNzKrgFov6c2Sx2QecyEmPq2Mc4BGe", - "indexid": "xCUJ2BRQhzUUYGV4JdgZd1Vmo3r39BsUym", - "hash160result": "e6e490ce8bfde333ab0374880ea0efbb9c12b42d", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.account.templateversion" - } -}; -exports.IDENTITY_ACCOUNT_STATUS = { - "vdxfid": "iJf3EbihEtdEpJjbQ6PgUaL3GxDgZRzSWk", - "indexid": "xPV9hQ9n6CquSUcdFn3qSxraJcEhVfWa72", - "hash160result": "d6fc5578c2fbed3251f3aa250c73b58386ec86a6", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.account.status" - } -}; -exports.IDENTITY_PHONENUMBER = { - "vdxfid": "iAQY8o4HwupzcJAw9aBtFwgrvWZGQStkge", - "indexid": "xFEebbVNoE3fEU3y1Fr3ELDPxAaHE7V2kN", - "hash160result": "32bc2c7919f626c39679630ee4d6d6d07bcd074c", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.phonenumber" - } -}; -exports.IDENTITY_DATEOFBIRTH = { - "vdxfid": "iSZsa7C4esogN3W6fBngUHR6GvSmt7We4j", - "indexid": "xXPz2ud9WC2LzDP8WsSqSfwdJaTnqpHdND", - "hash160result": "ab74371e952a27f615b079d3c084b38b98c84dfd", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.dateofbirth" - } -}; -exports.IDENTITY_OVER18 = { - "vdxfid": "iHPD8vB7jhtbuqPkUqzheqcZdfAfHUFVzM", - "indexid": "xNDKbicCb27GY1GnLXerdE96fKBg9tLUDT", - "hash160result": "28139ce1eae370e76f749066f778466597689098", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.over18" - } -}; -exports.IDENTITY_OVER21 = { - "vdxfid": "iAXYYrZaipc4DAmAKXUFYZxavsf6uBJqaj", - "indexid": "xFMf1ezfa8piqLeCBD8QWxV7xXg7mxMc1Z", - "hash160result": "7a1fee70ace1c048c0a93c120a8a4c5f890f5b4d", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.over21" - } -}; -exports.IDENTITY_OVER25 = { - "vdxfid": "iDuForPTZFeFBAgDX1HyrP3d6of7wzrRaS", - "indexid": "xJjNGepYQZruoLZFNgx8pmaA8Tg8qSfnzM", - "hash160result": "2a1e6fa6913ea3659dcaf1c5bc20a96e399d5e72", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.over25" - } -}; -exports.IDENTITY_ACCOUNT_REQUESTING_IPADDRESS = { - "vdxfid": "i4uE1EvnDbq9WGhF5UbBr6fbxNLsgk1eZ3", - "indexid": "x9jLU3Ms4v3p8SaGwAFLpVC8z2MtYJTVwp", - "hash160result": "05a3aa58192812972a2c4e4184af7bb5fbf9a30f", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.account.requesting.ipaddress" - } -}; -exports.IDENTITY_EMAIL = { - "vdxfid": "iJ4pq4DCymfbu8SAuXyNhasLeSHFNKPr23", - "indexid": "xNtwHreHq5tGXJKCmDdXfyPsg6JGHUY6X1", - "hash160result": "15a8095b6298bbff5147060d9a6363a9df6c0ea0", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.email" - } -}; -exports.IDENTITY_NATIONALITY = { - "vdxfid": "iEUYNTkw6kFhZWto7vyTpQqtdRL7eoKZY2", - "indexid": "xKJeqGC1x4UNBgmpycdcnoNRf5M8btexbt", - "hash160result": "db935713b90281d6aefe5e7b33e5b660962aaa78", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.nationality" - } -}; -exports.IDENTITY_FIRSTNAME = { - "vdxfid": "iLB8SG7ErJtTYcG1f4w9RLuMJPpAsjFkiL", - "indexid": "xR1Eu4YKhd78An93WkbJPjRtL3qBprmMno", - "hash160result": "0bab76359b70b37c858399c2a3776939c5de2fb7", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.firstname" - } -}; -exports.IDENTITY_MIDDLENAME = { - "vdxfid": "iHG6ALRUPyRcgJMsPqBmvUCZxe4PrMfgej", - "indexid": "xN6Cd8rZFHeHJUEuFWqvtrj6zJ5QjX94j5", - "hash160result": "b98bd82034ec86ae5538313c9f5501c086ac3797", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.middlename" - } -}; -exports.IDENTITY_LASTNAME = { - "vdxfid": "iKRmfy4xgjWQyPdXYie6dJezRXF4aKdbHB", - "indexid": "xQFt8mW3Y3j5bZWZQQJFbhBXTBG5S4vdaZ", - "hash160result": "6b597e0c05d1430566b7b17a59da683fb4a6fcae", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.lastname" - } -}; -exports.IDENTITY_GENDER = { - "vdxfid": "iShgSBdiYDQnVwgNcDnSbNYHGU6CTwBDb1", - "indexid": "xXXntz4oPXdT87ZQTuSbZm4pJ87DGEgHpG", - "hash160result": "3baee594e927d47b641c7cf3927ab3229dd0c7fe", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.gender" - } -}; -exports.IDENTITY_HEIGHT = { - "vdxfid": "iLmLmsFMTUm4dd2iMuMe4xaMC8VSZN9soP", - "indexid": "xRbTEfgSJnyjFnukDb1o3M6tDnWTSUiii7", - "hash160result": "e80652253fa52b95cd9ea5ff43d51642ea4fa8bd", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.height" - } -}; -exports.IDENTITY_EYECOLOR = { - "vdxfid": "iRo2XT8tcMtLTpuPJ6V5WxbnVWa2CrcdsJ", - "indexid": "xWd8zFZyTg715znR9n9EVM8KXAb328xGbZ", - "hash160result": "c60fdfcc04173f273aa92a3b1844964b368ad2f4", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.eyecolor" - } -}; -exports.IDENTITY_ETHNICITY = { - "vdxfid": "i9jHPJokwnLoCQ83P6jqezCcEZUD1g34B9", - "indexid": "xEZPr7Eqo6ZTpa15EnPzdNj9GDVDsfToki", - "hash160result": "0476d568a9cf949bc8b6d84dc73e38cf85449b44", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.ethnicity" - } -}; -exports.IDENTITY_WEIGHT = { - "vdxfid": "iMzGK44r6SNkzi3N3AmcZBtuysPvgYiRiT", - "indexid": "xSpNmrVvwkbRcsvPtrRmXaRT1XQwXFe2Ut", - "hash160result": "8abe0e94cb1ff345f1351720acc8eefed91e12cb", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.weight" - } -}; -exports.IDENTITY_HOMEADDRESS = { - "vdxfid": "i9A1fD5sVwFFXzEmCJWSRDqN94PXp9oNaS", - "indexid": "xDz881WxMFTvAA7o3zAbPcMuAiQYiT4Vnc", - "hash160result": "072a3abed3a353e001288074d9426285e569503e", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.homeaddress" - } -}; -exports.IDENTITY_HOMEADDRESS_STREET1 = { - "vdxfid": "i5BJAwQbrP4Bht8gUpoqSrovuBwfRc6jiv", - "indexid": "xA1QdjqghhGrL41iLWTzRFLTvqxgNsVzXY", - "hash160result": "ff22b196e64c9388daab76a57bcaea50491cae12", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.homeaddress.street1" - } -}; -exports.IDENTITY_HOMEADDRESS_STREET2 = { - "vdxfid": "iMx71C14hrBoWD3yyhYChmhJEw4Kqw1zj4", - "indexid": "xSnDTzS9ZAQU8Nw1qPCMgADqGb5Lgqb4zw", - "hash160result": "efdda473a6a9e98cd91b02d36bfeb5dec784a9ca", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.homeaddress.street2" - } -}; -exports.IDENTITY_HOMEADDRESS_CITY = { - "vdxfid": "i75ZpW5T6wgQEMVxyvqHT9ZaV4fjsQ7kws", - "indexid": "xBugHJWXxFu4rXNzqcVSRY67WigkoCUEUQ", - "hash160result": "fcae40d5d327f13dc0e0c1e80f3db212a4ed8827", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.homeaddress.city" - } -}; -exports.IDENTITY_HOMEADDRESS_REGION = { - "vdxfid": "iRkYck3JowdFWmrM6VUAS8Wtpmxds2fLXS", - "indexid": "xWaf5YUPfFqv8wjNxB8KQX3RrRyenbioh5", - "hash160result": "fa06b90a547658a3efc3cd1797d6b3cd30695af4", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.homeaddress.region" - } -}; -exports.IDENTITY_HOMEADDRESS_POSTCODE = { - "vdxfid": "iAL2FRG8PVi18fN8MatjXhV1YkuZr7PM4T", - "indexid": "xFA8iDhDEovfkqFADGYtW61YaQvahtrhJA", - "hash160result": "b4f4c3a08fdcf32209482fa3d8c7b01201312d4b", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.homeaddress.postcode" - } -}; -exports.IDENTITY_HOMEADDRESS_COUNTRY = { - "vdxfid": "iABYGvas6uUDk9ejCkfCVLvE9PPJXgyCKX", - "indexid": "xF1ejj1wxDgtNKXm4SKMTjSmB3QKL8LhQG", - "hash160result": "bafb2cb6d5cc86478622feb8a00097d71d839249", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.homeaddress.country" - } -}; -exports.IDENTITY_IDNUMBER_VALUE = { - "vdxfid": "iQrnvbCNWMaG6PjTmeXzrcuAXKsMzmNJWA", - "indexid": "xVguPPdTMfnviZcVdLC9q1RhYytNuZ3ToS", - "hash160result": "72cf52b2f6b4f68173c933fb046e892870b990ea", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.idnumber.value" - } -}; -exports.IDENTITY_IDNUMBER_TYPE = { - "vdxfid": "iSSZX5yUdQh7zLf1gUewH5rVfbXtSq2c4s", - "indexid": "xXGfytQZUiuncWY3YAK6FUP2hFYuQ4yYwW", - "hash160result": "2807f356d687b4c6208ce0379b31043c7fcdebfb", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.idnumber.type" - } -}; -exports.IDENTITY_VERIFICATION_STATUS = { - "vdxfid": "i8MhqW3ejupmV1M5UyhyhG13dkS8A7g7zg", - "indexid": "xDBpJJUjbE3S7BE7LfN8feXafQT92YQZPm", - "hash160result": "47f2864de74ffe01ccb7eeabf0f2d848e3668e35", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.verification.status" - } -}; -exports.IDENTITY_VERIFICATION_APPROVALS = { - "vdxfid": "iBMkZtqC9yqVrFL4GfYtXckFpYAhRkE2mj", - "indexid": "xGBs2hGH1J4AURD68MD3W1GnrCBiJ3nRgG", - "hash160result": "a98801de1ba5ff5e571dbdde50519483140f7956", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.verification.approvals" - } -}; -exports.IDENTITY_VERIFICATION_APPROVALS_ACCEPTEDTOS = { - "vdxfid": "iH32QkXBKyWEJD6kh9HJ4KMfeiWfPWoHEh", - "indexid": "xMs8sYxGBHitvNynYpwT2htCgNXgHt6VAW", - "hash160result": "bbe4c09ae069561d3c14b04e3b7b96c98622bf94", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.verification.approvals.acceptedtos" - } -}; -exports.IDENTITY_VERIFICATION_APPROVALS_VERIFIEDSMS = { - "vdxfid": "iPgyMDFQ9QMNrqc3ckEBEubDNwLnvubUdW", - "indexid": "xUX5p1gUzia3V1V5URtLDJ7kQbMosPsVj8", - "hash160result": "72853b66aa158531e1f15b9ff075199a1224bddd", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.verification.approvals.verifiedsms" - } -}; -exports.IDENTITY_VERIFICATION_APPROVALS_KYCCHECKED = { - "vdxfid": "iRnbiA4dAPbeuB6KQN2donBHP9mKUHHFZf", - "indexid": "xWciAxVi1hpKXLyMG3gnnAhpQonLQapWPv", - "hash160result": "c6114ffec250b746bde117903b930d9a34d3bdf4", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.verification.approvals.kycchecked" - } -}; -exports.IDENTITY_VERIFICATION_APPROVALS_DOCUMENTSVERIFIED = { - "vdxfid": "iBjML9DHV67MBQyMEHVTSoJPhU8DNeWRTE", - "indexid": "xGZTnweNLQL1oarP5y9cRBpvj89EGt5VSm", - "hash160result": "0a93883010769ff783be5ced074ecfa50dd08e5a", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.verification.approvals.documentsverified" - } -}; -exports.IDENTITY_VERIFICATION_APPROVALS_SELFIECHECKED = { - "vdxfid": "iKgeFKoy6WMx9MoEjig5vHoXbyxVFBPWDN", - "indexid": "xQWki8F3wpacmXgGbQLEtgL4ddyWC8UZLv", - "hash160result": "6a044306ef77ce9896ffcd26ee40174651b1ccb1", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.verification.approvals.selfiechecked" - } -}; -exports.IDENTITY_VERIFICATION_APPROVALS_WATCHLISTOK = { - "vdxfid": "iFDB1qKYSrWMRaMCWX6hNGE8HVXB1cNtJu", - "indexid": "xL3HUdkdJAj23kEENCkrLekfK9YBymnLrX", - "hash160result": "e691a2d2af30df6ee21f0eb805a98e11d539ba80", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.verification.approvals.watchlistok" - } -}; -exports.IDENTITY_VERIFICATION_APPROVALS_RISKCHECKOK = { - "vdxfid": "i9dva492S7vQphjLiK2UaS7JikZKs5TQsB", - "indexid": "xEU32ra7HS95SscNZzgdYpdqkQaLjnzcyC", - "hash160result": "6ffdbee07124450d29698724573bd6ab07d09743", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.verification.approvals.riskcheckok" - } -}; -exports.IDENTITY_VERIFICATION_APPROVALS_STATUS = { - "vdxfid": "iKhGUcTH4ZQ7uiy933m8f1GbwSLcwJW8ev", - "indexid": "xQXNwQtMuscnXtrAtjRHdPo8y6MdomjAXM", - "hash160result": "00612f17d9cedc346fcd139c0c5b56e666efeab1", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.verification.approvals.status" - } -}; -exports.IDENTITY_DRIVINGLICENCE = { - "vdxfid": "iMYQw33ryywcNyQDjFjiVvFm2kAwG85poV", - "indexid": "xSNXPqUwqJAH19HFawPsUJnJ4QBxCATPNx", - "hash160result": "e2857ddcc4f3301c354a00d1376558a75e802ec6", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.drivinglicence" - } -}; -exports.IDENTITY_DRIVINGLICENCE_ORIGINALFRONT = { - "vdxfid": "i3fq6ET2dL8CxC3BJzdYTpUsjEsQaKP7bX", - "indexid": "x8VwZ2t7UeLsaMvDAgHhSD1QkttRPYndPW", - "hash160result": "26bab54e1f760b1abb888229a38a5179cc502302", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.drivinglicence.originalfront" - } -}; -exports.IDENTITY_DRIVINGLICENCE_ORIGINALBACK = { - "vdxfid": "i7LTNZvJmm5LjAwMWuryb52yKt7txaV5FW", - "indexid": "xCAZqNMPd5J1MLpPNbX8ZTZWMY8unxdAfs", - "hash160result": "c7b3e9a70908fafc8de3e81f6ac2e0c131c9592a", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.drivinglicence.originalback" - } -}; -exports.IDENTITY_DRIVINGLICENCE_CROPPEDFRONT = { - "vdxfid": "i8KsL3JJgbJyuqEyEbu5KZkDBFvHscLoM6", - "indexid": "xD9ynqjPXuXeY1816HZEHxGkCuwJoHBx54", - "hash160result": "7b28226a4f3eaae379cddbc84d037cfe587e3535", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.drivinglicence.croppedfront" - } -}; -exports.IDENTITY_DRIVINGLICENCE_CROPPEDBACK = { - "vdxfid": "iRwumhx12vtT8CkspBLmKQY8WZywurxVXo", - "indexid": "xWn2EWP5tF77kNdufrzvHo4fYDzxhjXyZz", - "hash160result": "0b6edf21bfe119173b3fffab6118d79a39a580f6", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.drivinglicence.croppedback" - } -}; -exports.IDENTITY_DRIVINGLICENCE_FACE = { - "vdxfid": "i5i7U4EAbgPzhCRebtbmoZt6pTyqGqP8jj", - "indexid": "xAYDvrfFSzcfKNJgTaFvmxQdr7zr6oGgFh", - "hash160result": "1f47647bf3e71f0c1c2638c99e6a42e6bf118218", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.drivinglicence.face" - } -}; -exports.IDENTITY_DRIVINGLICENCE_IDNUMBER = { - "vdxfid": "iBCA8b4zS5ygVgTFqxabke7BBFs92dhcXQ", - "indexid": "xG2GbPW5HQCM7rLHheEkj2diCut9vgFhM2", - "hash160result": "fcf0571278bd1afce6d93f0a99f41437bb91a854", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.drivinglicence.idnumber" - } -}; -exports.IDENTITY_DRIVINGLICENCE_CATEGORY = { - "vdxfid": "i5Cm95DZa6FPP66bA6aFfoYL2jaojetHMp", - "indexid": "xA2sbseeRQU41Fyd1nEQeC4s4Pbpf63xB4", - "hash160result": "3b91fccdf59d99b21e442441b89abb31bf09f512", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.drivinglicence.category" - } -}; -exports.IDENTITY_DRIVINGLICENCE_EXPIRATIONDATE = { - "vdxfid": "iJvGpPoP1uUkUqn9bAchLyfaGWyy8JGQoX", - "indexid": "xPkPHCETsDhR71fBSrGrKNC7JAzz17RsLk", - "hash160result": "96aee63b3c6094a4d9edbc04b63a8e45688068a9", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.drivinglicence.expirationdate" - } -}; -exports.IDENTITY_DRIVINGLICENCE_ISSUINGCOUNTRY = { - "vdxfid": "iBsNEqysX64cQAjiRHHL1msd7LxroGM6Mb", - "indexid": "xGhUheQxNQHH2LckGxwUzAQA8zysfnKDSU", - "hash160result": "f2f24dd2383538493d21ff0aca77c7cd1fe6125c", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.drivinglicence.issuingcountry" - } -}; -exports.IDENTITY_DRIVINGLICENCE_ISSUINGREGION = { - "vdxfid": "i6gZSDYpK9inexaeFQDSk9GuAmew1ymMFo", - "indexid": "xBWfu1yuATwTH8Tg75sbiXoSCRfwsxQzeR", - "hash160result": "67f4fd5c49250912aecf1eb8ab17f29d590a2f23", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.drivinglicence.issuingregion" - } -}; -exports.IDENTITY_DRIVINGLICENCE_DATEOFBIRTH = { - "vdxfid": "iChWUsL1NQwDqcwXbFGxHiCegfquGPyadv", - "indexid": "xHXcwfm6Dj9tTnpZSvw7G6jBiKrvBUhwaw", - "hash160result": "3c7bd13bcdb54368e7590a9f2da5b201b7be2d65", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.drivinglicence.dateofbirth" - } -}; -exports.IDENTITY_DRIVINGLICENCE_ADDRESS_STREET1 = { - "vdxfid": "i9xaEvSQ537wuYgcVPRgG3zop9bVzeDTBw", - "indexid": "xEnghisUvMLcXiZeM55qESXLqocWsv6zmJ", - "hash160result": "48dd1caf84c1a49209ca44064846dc4ad0be1e47", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.drivinglicence.address.street1" - } -}; -exports.IDENTITY_DRIVINGLICENCE_ADDRESS_CITY = { - "vdxfid": "i6XMEh3jrxzdyoVYoNWhRSncR9oWSnmikd", - "indexid": "xBMThVUpiHDJbyNaf4ArPqK9SopXGndEyv", - "hash160result": "c1f3612774870d1f12320bff317e7790211d7121", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.drivinglicence.address.city" - } -}; -exports.IDENTITY_DRIVINGLICENCE_ADDRESS_REGION = { - "vdxfid": "i7sPBSqerD23RAqfN167aYePjfC8LL34UA", - "indexid": "xChVeFGjhXEi3LihDgkGYwAvmKD9CsNunu", - "hash160result": "991d24c053cb59a816e161fe3af2f40a7f2e3330", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.drivinglicence.address.region" - } -}; -exports.IDENTITY_DRIVINGLICENCE_ADDRESS_POSTCODE = { - "vdxfid": "i9eHAmpeA3tmpsVeG5EkHuVfALFrmpzLqM", - "indexid": "xEUPdaFj1N7ST3Ng7ktuGJ2CBzGsZbja5V", - "hash160result": "f5905bbdf2eb60b24ccf6851716cc0efe801a943", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.drivinglicence.address.postcode" - } -}; -exports.IDENTITY_DRIVINGLICENCE_ADDRESS_COUNTRY = { - "vdxfid": "i3xAMYBKLVdK89kuheXhTjuJTAxozmypj3", - "indexid": "x8nGpLcQBoqykKdwZLBrS8RqUpypqVUEV5", - "hash160result": "459844e00df4387514f31f182a88f7e13b0d3a05", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.drivinglicence.address.country" - } -}; -exports.IDENTITY_SELFIECHECK_IMAGE = { - "vdxfid": "iC22PxGqY7Mx3YT9kNrW1d11JNyGL56N8e", - "indexid": "xGr8rkhvPRacfiLBc4Wez1XYL2zHDDbJgD", - "hash160result": "c52d0023cce8c847a5097b6898f867651914b65d", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.selfiecheck.image" - } -}; -exports.IDENTITY_SELFIECHECK_VIDEO = { - "vdxfid": "iLfnRYzcdQXR6am8rZk7xNtTUbLZo5NLG6", - "indexid": "xRVttMRhUik5ikeAiFQGvmQzWFMajwrVzX", - "hash160result": "ac0674f6d656d434e0b5b310daaaed554c3a9bbc", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.selfiecheck.video" - } -}; -exports.IDENTITY_EMAIL_ISDELIVERABLE = { - "vdxfid": "iN5Tdse8NSwuW6A4ZavHbHoDyD8aVjn1Ky", - "indexid": "xSua6g5DDmAa8G36RGaSZgKkzs9bSnFbCX", - "hash160result": "8194ee01a0bc66dca2af9ba7c3bba4a24da70dcc", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.email.isdeliverable" - } -}; -exports.IDENTITY_EMAIL_BREACHCOUNT = { - "vdxfid": "iDy1YKGhzVjAiMiuAvFDqxQbmLRhLEjwPo", - "indexid": "xJo817hnqowqLXbw2buNpLw8nzSiAygHhx", - "hash160result": "8144d2d8cafd733bb03847166be8493d275e1473", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.email.breachcount" - } -}; -exports.IDENTITY_EMAIL_FIRSTBREACHEDAT = { - "vdxfid": "i3eSGR4wrLk5djHsnT18dDHrJBFSBBxVST", - "indexid": "x8UYjDW2hexkFuAue8fHbbpPKqGT4mjAzH", - "hash160result": "df796054181f57d3b61d655d604d42d6c6d8df01", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.email.firstbreachedat" - } -}; -exports.IDENTITY_EMAIL_LASTBREACHEDAT = { - "vdxfid": "iCuZWBzmxCoFcRFjXYFgC6g4jT7kzxvhew", - "indexid": "xHjfxzRroX1vEb8mPDuqAVCbm78ms8Hkhd", - "hash160result": "d1b421db4c835cfa67b491342c31f89283427567", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.email.lastbreachedat" - } -}; -exports.IDENTITY_EMAIL_DOMAIN_REGISTEREDAT = { - "vdxfid": "iGxV4SBRZMk5qWrQEKgUS4RoqzpDmyBEpC", - "indexid": "xMnbXEcWQfxkTgjS61LdQSxLseqEcTADNA", - "hash160result": "e195ef220f8e71bfa7bef160291ecaa0164de393", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.email.domain.registeredat" - } -}; -exports.IDENTITY_EMAIL_DOMAIN_FREEPROVIDER = { - "vdxfid": "iLUfvKcg92CYo3BvCuRf5o844d44kGLhJL", - "indexid": "xRJnP83kzLRDRD4x4b5p4Beb6H55fetTy7", - "hash160result": "0b0f213c88a1b0df6cd01721955b1d0c103981ba", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.email.domain.freeprovider" - } -}; -exports.IDENTITY_EMAIL_DOMAIN_CUSTOM = { - "vdxfid": "i4FSBFpQ6Ccjiy2g61GrxhBppv1jDDh6on", - "indexid": "x95Ye4FUwWqQM8uhwgw1w5iMra2k7F1Lfz", - "hash160result": "bea1175185aeaf256aa7f04795b2c8d0c8547e08", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.email.domain.custom" - } -}; -exports.IDENTITY_EMAIL_DOMAIN_DISPOSABLE = { - "vdxfid": "i52PJxRyjKAEkmQFd2oGYgZV3pcsQUcD1T", - "indexid": "x9rVmks4adNuNwHHUiTRX5625UdtJPBQ1w", - "hash160result": "3adf98cb5cc90a074a52a651c50f67f5f0a7fe10", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.email.domain.disposable" - } -}; -exports.IDENTITY_EMAIL_DOMAIN_TOPLEVEL_SUSPICIOUS = { - "vdxfid": "iCtAZWinafiyf4tmvPxFkKNn5KxayXTPSV", - "indexid": "xHiH2K9sRyweHEmon5cQihuK6yybre797b", - "hash160result": "85477eb8148562614c396ca64fc7563637b13167", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.email.domain.toplevel.suspicious" - } -}; -exports.IDENTITY_PASSPORT = { - "vdxfid": "iKgbqmZ4Ks9SPNQGj5PZ5TgXomYG4CtaXv", - "indexid": "xQWiJZz9BBN71YHJam3i3rD4qRZH1sbLHD", - "hash160result": "775f52820102c994e30a29b1828b064421afcab1", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.passport" - } -}; -exports.IDENTITY_PASSPORT_ORIGINALFRONT = { - "vdxfid": "iCwT1mHdci9wooC6Q8mtx8QssXzwiL4hxp", - "indexid": "xHmZUZiiU2NcRy58FpS3vWwQuC1xdM48mW", - "hash160result": "25023e23a25ba4daa7ac0a9c96180f5e90acd067", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.passport.originalfront" - } -}; -exports.IDENTITY_PASSPORT_ORIGINALBACK = { - "vdxfid": "iDXKJaroNRKr9GZfLFvH7LttJQaXqGoSrc", - "indexid": "xJMRmPHtDjYWmSShBwaS5jRRL4bYmTdC9J", - "hash160result": "21734b0f37ec51dd77bdab8c10065cf67b61386e", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.passport.originalback" - } -}; -exports.IDENTITY_PASSPORT_CROPPEDFRONT = { - "vdxfid": "i4cr6CxCYDHUDjc6UoMsDVAZoNep6Meuyi", - "indexid": "x9SxZ1PHPXW8quV8LV22Bsh6q2fpxtJ6Zd", - "hash160result": "274c241806d31576a57a074cc2f6b4c624078b0c", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.passport.croppedfront" - } -}; -exports.IDENTITY_PASSPORT_CROPPEDBACK = { - "vdxfid": "i6wA2ttX7vcxBXmrdmGEa44NZEFBZWoRYa", - "indexid": "xBmGVhKbyEqcohetVSvPYSauatGCUYDMs2", - "hash160result": "f56f1db46ddebc99f3c8954fc8bf1d26a9bef125", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.passport.croppedback" - } -}; -exports.IDENTITY_PASSPORT_FACE = { - "vdxfid": "iLCbvnyU4V3XeMz18CXAG5MCtjb2FjpcZX", - "indexid": "xR2iPbQYuoGCGXs2ytBKETsjvPc35DNZDm", - "hash160result": "26f7dc9d524f84a21c8a9e3f2dc5149f3a3c77b7", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.passport.face" - } -}; -exports.IDENTITY_PASSPORT_IDNUMBER = { - "vdxfid": "iDYih1jmCA1oexyxZ1PQFL5ewyciqoQ2rw", - "indexid": "xJNq9pAr3UEUH8rzQh3ZDicByddjgKM4vN", - "hash160result": "c8a25af227fc07e260119b370da0eae2a9517c6e", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.passport.idnumber" - } -}; -exports.IDENTITY_PASSPORT_CATEGORY = { - "vdxfid": "iMtpUJYWZmnnSJyJcshHRdWJZMhZVZZifT", - "indexid": "xSivw6ybR61T4UrLUZMSQ22qb1iaQux7BU", - "hash160result": "84a9f125285d7e93a1e676ed48e3fbe459780aca", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.passport.category" - } -}; -exports.IDENTITY_PASSPORT_EXPIRATIONDATE = { - "vdxfid": "i98TaZ3wTh3qRw2ufeunVY2MD5eKwoamGE", - "indexid": "xDxa3MV2K1GW46uwXLZwTvYtEjfLspcYEK", - "hash160result": "07727b480c654d59cb611ed01715e254eb37053e", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.passport.expirationdate" - } -}; -exports.IDENTITY_PASSPORT_ISSUINGCOUNTRY = { - "vdxfid": "iRHGM2GEYeRUuHKSG1wENVA16bdyVRxchn", - "indexid": "xW7NophKPxe9XTCU7hbPLsgY8FezLKmJHi", - "hash160result": "4798dee337b16fc22d26748fb0803738f99831ef", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.passport.issuingcountry" - } -}; -exports.IDENTITY_PASSPORT_ISSUINGREGION = { - "vdxfid": "i6Ay9VdcZjGrJur5SNyhBDZWzxGmo7qUmW", - "indexid": "xB15cJ4hR3VWw5j7J4dr9c642cHnbq2nm9", - "hash160result": "f3d9b605096f4c816de7d72c597fee07e75a961d", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.passport.issuingregion" - } -}; -exports.IDENTITY_PASSPORT_DATEOFBIRTH = { - "vdxfid": "iAjG8DwYfKxt9affJy6CUBDDFK5jaeHRLJ", - "indexid": "xFZNb2NdWeBYmkYhAekMSZjkGy6kWqAqyd", - "hash160result": "73eb23619d178f495a24b41aaf6aac107357924f", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.passport.dateofbirth" - } -}; -exports.IDENTITY_PASSPORT_ADDRESS_STREET1 = { - "vdxfid": "i7HPJNB16V5pws8xSq4a8pHF29Mcg6sUyy", - "indexid": "xC7VmAc5woJVa31zJWij7Con3oNdXuBysY", - "hash160result": "c28625c4dfc12d3cdd85f8c7272e87a57523c529", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.passport.address.street1" - } -}; -exports.IDENTITY_PASSPORT_ADDRESS_CITY = { - "vdxfid": "iFSLsk21VvWSWLg9a4XFTB3kEN8bLnTB7c", - "indexid": "xLGTLYT6MEj78WZBRkBQRZaHG29cBfjnYu", - "hash160result": "c06884e75232e86de75c6ccbd5605a3352dd3783", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.passport.address.city" - } -}; -exports.IDENTITY_PASSPORT_ADDRESS_REGION = { - "vdxfid": "iFNoUQhExFEYTgrqgy7x22Q6URM7ek9L3J", - "indexid": "xLCuwD8KoZTD5rjsYen6zQvdW5N8Z4oGqf", - "hash160result": "7b7baa6d0d788f434536aa472c57d9de40678c82", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.passport.address.region" - } -}; -exports.IDENTITY_PASSPORT_ADDRESS_POSTCODE = { - "vdxfid": "iS4SakGdB4ek1Q1QAitXUwFEk1RVyi3rLY", - "indexid": "xWtZ3Yhi2NsQdZtS2QYgTKmmmfSWrxdFKY", - "hash160result": "4457551bc48db37393f5ec3ec3d0cf6766dcbcf7", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.passport.address.postcode" - } -}; -exports.IDENTITY_PASSPORT_ADDRESS_COUNTRY = { - "vdxfid": "iB9w9GgcJdGTt3ZuM2pm5qpDBA3UaJdcvj", - "indexid": "xFz3c57h9wV8WDSwCiUv4ELkCp4VNyPHLr", - "hash160result": "dd93bcbecc805e5b1606efafa1ecab6b33e53c54", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.passport.address.country" - } -}; -exports.IDENTITY_RESIDENCEPERMIT = { - "vdxfid": "i8WZetqKFn98rHRZGvAvPuzPyrJeyUMjfb", - "indexid": "xDLg7hGQ76MoUTJb8bq5NJWw1WKftQg9VL", - "hash160result": "712ef00d9937eb4ade0fd3e627c2df1d99503b37", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residencepermit" - } -}; -exports.IDENTITY_RESIDENCEPERMIT_ORIGINALFRONT = { - "vdxfid": "iC5NrmPgKckxBjKv7v9HjUMytm4jRtEBgZ", - "indexid": "xGuVKZpmAvycouCwyboShrtWvR5kNYzWoH", - "hash160result": "639ed2ef9da2f5e75fe63e1ccf83d1b54e68585e", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residencepermit.originalfront" - } -}; -exports.IDENTITY_RESIDENCEPERMIT_ORIGINALBACK = { - "vdxfid": "iLTPvrZi8HNALuVmYeAWnSnLdZ5GsAAUcx", - "indexid": "xRHWPeznybapy5NoQKpfkqJsfD6HmQW5eW", - "hash160result": "94d200a22dbdfa7ba47d1970c21eacb65f7543ba", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residencepermit.originalback" - } -}; -exports.IDENTITY_RESIDENCEPERMIT_CROPPEDFRONT = { - "vdxfid": "i6T3rairykWA5vVEtQqptjp5RBRhTCmsBS", - "indexid": "xBHAKP9wq4ipi6NGk6Vys8LcSqSiKAMKZU", - "hash160result": "14136815f288a4b6426c7f4ab6b28221dcf0a020", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residencepermit.croppedfront" - } -}; -exports.IDENTITY_RESIDENCEPERMIT_CROPPEDBACK = { - "vdxfid": "iHssgpjB2gsusjjLH36N3KqUQqz7JPXumA", - "indexid": "xNhz9dAFt16aVucN8ikX1iN1SW18D7SNDP", - "hash160result": "ce3cae77f2010009817f1e01de52ce8a493cfc9d", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residencepermit.croppedback" - } -}; -exports.IDENTITY_RESIDENCEPERMIT_FACE = { - "vdxfid": "iNVvVYKcKuredXKvctn5uQxp3kNXoJrwNb", - "indexid": "xTL2xLkhBE5KFhCxUaSEsoVM5QPYfELeHf", - "hash160result": "4dd17db50d569a63cc892d78850ac9de1d0eaed0", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residencepermit.face" - } -}; -exports.IDENTITY_RESIDENCEPERMIT_IDNUMBER = { - "vdxfid": "iMxygBvDFftAnmUCjVLh21etV5v4wt9zdk", - "indexid": "xSo68zMJ6z6qQwMEbAzqzQBRWjw5u6Tm63", - "hash160result": "ab544471e583d6a11245bb971e3ee1ef5ed1d3ca", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residencepermit.idnumber" - } -}; -exports.IDENTITY_RESIDENCEPERMIT_CATEGORY = { - "vdxfid": "iGbMb21an69VE6iTH2iRtRFKCEUZPJHTwU", - "indexid": "xMRU3pSfdQN9rGbV8iNaromrDtVaCufAXu", - "hash160result": "ae9031bab1ee600e10aa16ec1d4c13def953e48f", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residencepermit.category" - } -}; -exports.IDENTITY_RESIDENCEPERMIT_EXPIRATIONDATE = { - "vdxfid": "iJ48ALemxyMV6DYzeuRMe8Fn78iMZdjSXZ", - "indexid": "xNtEd95rpHa9iPS2Wb5WcWnK8njNXD9HEH", - "hash160result": "d3083b08621d6ff5dc3f7f9cace34f944d7aec9f", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residencepermit.expirationdate" - } -}; -exports.IDENTITY_RESIDENCEPERMIT_ISSUINGCOUNTRY = { - "vdxfid": "i7UhTp4gruQwtkC1bi4RxE4wUAsro6n9Ym", - "indexid": "xCJovcVmiDdcWv53TPiavcbUVptsgMKzdL", - "hash160result": "75e37dc8957c8c6765c60962804d446b2de0e82b", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residencepermit.issuingcountry" - } -}; -exports.IDENTITY_RESIDENCEPERMIT_ISSUINGREGION = { - "vdxfid": "iERBNWk2tyaGJ2w8P1kM88Mdj5WA9qFzbv", - "indexid": "xKFHqKB7kHnvvCpAEhQW6WtAkjXAymjqXM", - "hash160result": "788165581de37b5473c2f127d387f3d7a8630778", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residencepermit.issuingregion" - } -}; -exports.IDENTITY_RESIDENCEPERMIT_DATEOFBIRTH = { - "vdxfid": "iM62dN7LSHWDuetPi6qAewG6bzYwFrcqBN", - "indexid": "xRv96AYRHbitXpmRZnVKdKnddeZxAivvFE", - "hash160result": "e2533190e4822ab51c5b2029039fbb0d431131c1", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residencepermit.dateofbirth" - } -}; -exports.IDENTITY_RESIDENCEPERMIT_ADDRESS = { - "vdxfid": "iCA8P2rVs5DjtzQpXEnPJcG4KBs79C9EpL", - "indexid": "xGzEqqHaiPSQXAHrNvSYGznbLqt83gLGV5", - "hash160result": "2c7264a72e1d7937da951620039e48a0c8663e5f", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residencepermit.address" - } -}; -exports.IDENTITY_RESIDENCEPERMIT_ADDRESS_STREET1 = { - "vdxfid": "iMuY2CbmQpCFzodGBtqxogmTb5dYfNbCJa", - "indexid": "xSjeV12rG8QvcyWJ3aW7n5HzcjeZaxtGwr", - "hash160result": "444cbb0dc6f471ecb2261dc7d6731cd97e272dca", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residencepermit.address.street1" - } -}; -exports.IDENTITY_RESIDENCEPERMIT_ADDRESS_CITY = { - "vdxfid": "iRckJ1VkfYazfVHWJuA9iXTth83ZYp8znz", - "indexid": "xWSrkovqWrofHfAYAapJguzRin4aPEqHJK", - "hash160result": "73e22f5d24515103052ab165736a0198a7d4e0f2", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residencepermit.address.city" - } -}; -exports.IDENTITY_RESIDENCEPERMIT_ADDRESS_REGION = { - "vdxfid": "iBpH337NTJSLjSxbBWuu2wBLu12k4JVGk4", - "indexid": "xGePVqYTJcf1Mcqd3Ca41Khsvf3kyxtNXH", - "hash160result": "2f7b3040cf60259ee4bf6dfc93a4de42ab4e7d5b", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residencepermit.address.region" - } -}; -exports.IDENTITY_RESIDENCEPERMIT_ADDRESS_POSTCODE = { - "vdxfid": "iGKi47jtg6CumKYSUBj57drgLNGzhJY3Gj", - "indexid": "xM9pWvAyXQRaPVRUKsPE62PDN2J1Zp4d6b", - "hash160result": "db85ea63848a6ad2c3a0e82bb29e215c00c2ee8c", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residencepermit.address.postcode" - } -}; -exports.IDENTITY_RESIDENCEPERMIT_ADDRESS_COUNTRY = { - "vdxfid": "i8KD9CUn7Su4YT44WhbD8HYA1K425cFCqM", - "indexid": "xD9Kbzurxm7jAcw6NPFN6g4h2y531jRanx", - "hash160result": "75970ae74cd40419dc78ecef7be22c5ee09d1535", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residencepermit.address.country" - } -}; -exports.IDENTITY_RESIDENTCARD = { - "vdxfid": "iKkJFFtbxRMJutjoruW47Mc1sCfdGYQrC9", - "indexid": "xQaQi4KgojZyY4cqibAD5k8Ytrge9jwt3u", - "hash160result": "2b737a5733b91d305dcf07d9e75797740da97db2", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residentcard" - } -}; -exports.IDENTITY_RESIDENTCARD_ORIGINALFRONT = { - "vdxfid": "iNMJhZ3wie5U2SRF7WSFTpjJo6B6RSTR4t", - "indexid": "xTBRAMV2ZxJ8ecJGyC6QSDFqpkC7KTFMbW", - "hash160result": "e440d2d8bab46633691a12e7bed0ea785bd90ccf", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residentcard.originalfront" - } -}; -exports.IDENTITY_RESIDENTCARD_ORIGINALBACK = { - "vdxfid": "i4pAk8J5ec2wn55VattFRr7PyN4J2L13HJ", - "indexid": "x9eHCvjAVvFcQExXSaYQQEdw125Jz84d8u", - "hash160result": "9fa70ca8b49eab8c3e704f78f0e0ae1bc52caf0e", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residentcard.originalback" - } -}; -exports.IDENTITY_RESIDENTCARD_CROPPEDFRONT = { - "vdxfid": "iLnx7NDcAWtb9uWicdgSaiwco56TywMh5w", - "indexid": "xRd4aAeh1q7Fn5PkUKLbZ7U9pj7UvU8v2V", - "hash160result": "fa7347c3517552a028890dacaf889a6ead39f6bd", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residentcard.croppedfront" - } -}; -exports.IDENTITY_RESIDENTCARD_CROPPEDBACK = { - "vdxfid": "i8WjL22L4UeaCDKZuj8R4Uub6zurTPdaLv", - "indexid": "xDLqnpTQunsEpPCbmQna2sS88evsLJL51v", - "hash160result": "b5134fe72682aa4f0dc645ceb73421dc07644337", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residentcard.croppedback" - } -}; -exports.IDENTITY_RESIDENTCARD_FACE = { - "vdxfid": "i6dGShbLY2ppZnXSyfvdtdGFkCxBQd2r9Y", - "indexid": "xBTNuW2RPM3VBxQUqMans1nnmryCFH4rRD", - "hash160result": "25a41b37f64414a2477c5c0d1a139d64ce9b8f22", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residentcard.face" - } -}; -exports.IDENTITY_RESIDENTCARD_IDNUMBER = { - "vdxfid": "iKFkbwDcQRXjapZcZAXsaMXjgER9CZbwZx", - "indexid": "xQ5s4jehFjkQCzSeQrC2Yk4GhtSA2GbM4B", - "hash160result": "e30d9a01765325e02ca22f60335d4bdb499917ad", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residentcard.idnumber" - } -}; -exports.IDENTITY_RESIDENTCARD_CATEGORY = { - "vdxfid": "i46Fgc8ev9zAkjikjHWreqSXkMRpFr5Lsi", - "indexid": "x8vN9QZjmUCqNubnayB1dDy4n1SqAqg4vn", - "hash160result": "c0039a4929d081eec1d1f5ca3040e19bded3c106", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residentcard.category" - } -}; -exports.IDENTITY_RESIDENTCARD_EXPIRATIONDATE = { - "vdxfid": "iBA1oFvDABKqbu9i61AEGy1m5fFHdCWkpy", - "indexid": "xFz8G4MJ1VYWE52jwgpPFMYJ7KGJUd6Y4b", - "hash160result": "0866dd99514f509c9ad4584b3f570515f4c74054", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residentcard.expirationdate" - } -}; -exports.IDENTITY_RESIDENTCARD_ISSUINGCOUNTRY = { - "vdxfid": "iHBgD199BSEQWREtiW8dP259DX4qg6KjkM", - "indexid": "xN1nfoaE2kT58b7vaBnnMQbgFB5rWuKCtd", - "hash160result": "ef88ffb14a8b66dacc690351fa9c3d35a8036296", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residentcard.issuingcountry" - } -}; -exports.IDENTITY_RESIDENTCARD_ISSUINGREGION = { - "vdxfid": "i6jygVNjzZUFEXVgtzWxXpBYf5rwjXF92J", - "indexid": "xBa69HopqsgurhNikgB7WCi5gjsxbi12z3", - "hash160result": "dc31e031328cfe3697527e046a52cc372687d423", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residentcard.issuingregion" - } -}; -exports.IDENTITY_RESIDENTCARD_DATEOFBIRTH = { - "vdxfid": "iQfYTwmTxXzxxyFh6XbY2PQVLVwswRoJL1", - "indexid": "xVVevkCYorDdb98ixDFgzmw2N9xtnBn6M2", - "hash160result": "73e0e5f4af76255bc2a3583ad9a7b1d0241470e8", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residentcard.dateofbirth" - } -}; -exports.IDENTITY_RESIDENTCARD_ADDRESS_STREET1 = { - "vdxfid": "iJ67qMPN6tyrLXBhbJpKKBZYpkcBzZD8S4", - "indexid": "xNvEJ9pSxDCWxh4jSzUUHa65rQdCviMqur", - "hash160result": "8540d9cb71ca32f4c03caf26a4cffa4d51094da0", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residentcard.address.street1" - } -}; -exports.IDENTITY_RESIDENTCARD_ADDRESS_CITY = { - "vdxfid": "iLCQ2n5tKHzKcVBv8of1eYmdWEdEY5vTUN", - "indexid": "xR2WVaWyAcCzEf4wzVKAcwJAXteFUoFSux", - "hash160result": "7990100969a22f4b4ba35613b3994219e74d6db7", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residentcard.address.city" - } -}; -exports.IDENTITY_RESIDENTCARD_ADDRESS_REGION = { - "vdxfid": "iPWcAQ6zbC9rKaaWAgrpoHmKs5G5SQCprF", - "indexid": "xULidCY5SWNWwkTY2NWymgHrtjH6QfP6JL", - "hash160result": "ff3f1523bfb1fe501ef10f0036c9f059b64bc7db", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residentcard.address.region" - } -}; -exports.IDENTITY_RESIDENTCARD_ADDRESS_POSTCODE = { - "vdxfid": "iG1QGYyp4SkiP7b9ngPwkTGC3DxVG3hB16", - "indexid": "xLqWjMQtukyP1HUBeN46iqnj4syW4eat4U", - "hash160result": "f345aa72196b006e2200bd08ed0ea165806c7889", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residentcard.address.postcode" - } -}; -exports.IDENTITY_RESIDENTCARD_ADDRESS_COUNTRY = { - "vdxfid": "i4wzngZfZb2QBnjr2TjtoMoMF9roSqQkho", - "indexid": "x9n7FUzkQuF4oxcst9Q3mkKtGospNqDjEQ", - "hash160result": "dd2a94da0a94115ed04de616b7d0ea1b19312a10", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residentcard.address.country" - } -}; -exports.IDENTITY_IDCARD = { - "vdxfid": "iK7FrcxNvsej84qZjYR73iGgEV96sGKwTU", - "indexid": "xPwNKRPTnBsPkEibbE5G26oDG9A7j4JSm7", - "hash160result": "4f2b2c852e4cfa5a640988af78c4d02243467cab", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.idcard" - } -}; -exports.IDENTITY_IDCARD_ORIGINALFRONT = { - "vdxfid": "iCnLNq42DxhuK84Nes4UGjFFUuNsGGpuBZ", - "indexid": "xHcSqdV75GvZwHwQWYidF7mnWZPtATN7Ky", - "hash160result": "9f5f63641e6e935628d7602e92814311ea631766", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.idcard.originalfront" - } -}; -exports.IDENTITY_IDCARD_ORIGINALBACK = { - "vdxfid": "iJyfvwrUeTRiGxiYw6oJZ3uALsuBt7QTyy", - "indexid": "xPonPkHZVmeNu8bannTTXSRhNXvCpAD3MB", - "hash160result": "df3a44e11ad54673eff910c1320d9f50100b0daa", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.idcard.originalback" - } -}; -exports.IDENTITY_IDCARD_CROPPEDFRONT = { - "vdxfid": "iFDp8jWwybweGStGQnYxwhbi8eiucZ29sr", - "indexid": "xL3vbXx2pvAJtcmJGUD7v68FAJjvZmrsga", - "hash160result": "b10845ae9b29f3ed25f33f091398fd0a1536d980", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.idcard.croppedfront" - } -}; -exports.IDENTITY_IDCARD_CROPPEDBACK = { - "vdxfid": "i8GpXrygUPpQYVwcoZ7JVRB1xB46xZsMuG", - "indexid": "xD6vzfQmKi35AfpefEmTTohYyq57sdLVxr", - "hash160result": "84c05d2d84ab69db2834df22602f34445ae9a134", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.idcard.croppedback" - } -}; -exports.IDENTITY_IDCARD_FACE = { - "vdxfid": "i8sfiwALhk4FtSaWSnBWYwKnWN3G7m3jyU", - "indexid": "xDhnBjbRZ4GvWcTYJTqfXKrKY24GxBC5cg", - "hash160result": "4afc5fda25a15a4627b8426f40594ff2e11d393b", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.idcard.face" - } -}; -exports.IDENTITY_IDCARD_IDNUMBER = { - "vdxfid": "iBEJB1xD1mpR4kYQbYieW3hNFpe5QmQ6qA", - "indexid": "xG4QdpPHs635gvRSTENoUSDuHUf6JB2izs", - "hash160result": "0af18c033e6ad395bdfb5fbdbf5144d63c1d1055", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.idcard.idnumber" - } -}; -exports.IDENTITY_IDCARD_CATEGORY = { - "vdxfid": "i4HCpvV1NJd4Ka8atCtDkXs4XLAkrmtKib", - "indexid": "x97KHiv6Dcqiwk1cjtYNivPbYzBmg48ama", - "hash160result": "68b49fa5bf2ed00672c881c15167fee2c304d408", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.idcard.category" - } -}; -exports.IDENTITY_IDCARD_EXPIRATIONDATE = { - "vdxfid": "iNTbsfTmeAm7KUFehtCq3RH1JgbUdTJwCt", - "indexid": "xTHiLTtrVUymwe8gZZrz1ooYLLcVZC5A4n", - "hash160result": "f4b807e32848d5a40815e2aa19cb219c64ae3dd0", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.idcard.expirationdate" - } -}; -exports.IDENTITY_IDCARD_ISSUINGCOUNTRY = { - "vdxfid": "iJ5qVRWTHerkVreE9UrSfKyphD3XB9s8FA", - "indexid": "xNuwxDwY8y5R82XG1AWbdiWMis4Y3BXDg7", - "hash160result": "2cc5492966de5135e638de253b497cccb8643fa0", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.idcard.issuingcountry" - } -}; -exports.IDENTITY_IDCARD_ISSUINGREGION = { - "vdxfid": "i8dHTbZ62Bth8NwkxasnKFpvX4EZYuBun4", - "indexid": "xDTPvPzAsW7MkYpnpGXwHeMTYiFaMyp6FD", - "hash160result": "f42f7b71bb43c590b9063755754bf2d534b58038", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.idcard.issuingregion" - } -}; -exports.IDENTITY_IDCARD_DATEOFBIRTH = { - "vdxfid": "iGcwhC6znG63pb6jqsRnrtDjXV4aXXsub2", - "indexid": "xMT49zY5daJiSkymhZ5wqGkGZ95bMGYJ9r", - "hash160result": "4d0c72c3369a0ac64711e58ae1b10785f1363190", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.idcard.dateofbirth" - } -}; -exports.IDENTITY_IDCARD_ADDRESS_STREET1 = { - "vdxfid": "i6jMXjNE9qioZ2dFricFnEBEQEWK5Kg3PS", - "indexid": "xBZTzXoK19wUBCWHiQGQkchmRtXKugcKWw", - "hash160result": "2cee0d13a2fdeaac83d052ad27610da8bf59b623", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.idcard.address.street1" - } -}; -exports.IDENTITY_IDCARD_ADDRESS_CITY = { - "vdxfid": "i3viAeqayk3KDk5tQpYcz6gFs1ayW5vBma", - "indexid": "x8kpdTGfq4FyquxvGWCmxVCntfbzM8iAVb", - "hash160result": "a10bfcd1cfd12d466a276339072d2f2a7ec6f304", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.idcard.address.city" - } -}; -exports.IDENTITY_IDCARD_ADDRESS_REGION = { - "vdxfid": "iEHvf3XCFacMihTQPVXxNeo6hBCqggDFie", - "indexid": "xK837qxH6tq2LsLSFBC7M3KdiqDrYBNMK7", - "hash160result": "55af249b3ceb591709c693017e5b7b1cb131a876", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.idcard.address.region" - } -}; -exports.IDENTITY_IDCARD_ADDRESS_POSTCODE = { - "vdxfid": "i3yAnt6zdceYxbCBnLwxn2tNdM4BnPkzhT", - "indexid": "x8oHFgY5UvsDam5De2c7kRQuf15ChzdWFA", - "hash160result": "acd086baf0863cff86fc56ec0fbb16dd18d56a05", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.idcard.address.postcode" - } -}; -exports.IDENTITY_IDCARD_ADDRESS_COUNTRY = { - "vdxfid": "iA6KVD2C4QJAyKfCS3XfQV8AxmpR9R3XG5", - "indexid": "xEvRx1TGuiWqbVYEHjBpNsehzRqS2fp4qg", - "hash160result": "bab14b514d91d7daa39175c90e29a956dec19548", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.idcard.address.country" - } -}; -exports.IDENTITY_VISA = { - "vdxfid": "iDCwZf84AhbJkm4zKZP7Le8h8ukJS9FySA", - "indexid": "xJ342TZ921oyNvx2BF3GK2fEAZmKGeUQUd", - "hash160result": "57faa6b546ac92c71022178b8c5e9fbae9bebe6a", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.visa" - } -}; -exports.IDENTITY_VISA_ORIGINALFRONT = { - "vdxfid": "iGAgzyLDVs5vYFLRgXVnkQpDRKy9Zh1TiV", - "indexid": "xLzoTmmJMBJbARDTYD9wioLkSyzARsVQWr", - "hash160result": "755da3361216260b786ba78fbe68800557223a8b", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.visa.originalfront" - } -}; -exports.IDENTITY_VISA_ORIGINALBACK = { - "vdxfid": "i3becgcmf85RiY2PAxsp3fbuGKG8Qc73t1", - "indexid": "x8Rm5V3rWSJ6LhuR2eXy248SHyH9Jjue4S", - "hash160result": "e71909c77e2e0361764d22b81f4f53085fe85801", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.visa.originalback" - } -}; -exports.IDENTITY_VISA_CROPPEDFRONT = { - "vdxfid": "iAapfFQMAQy7USdjRwqzAZ2nWhRMSiQMmV", - "indexid": "xFQw83qS1jBn6cWmHdW98wZKYMSNHsb2wy", - "hash160result": "56ed30f8daf83e3b09eee57517be45b6b8c1f94d", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.visa.croppedfront" - } -}; -exports.IDENTITY_VISA_CROPPEDBACK = { - "vdxfid": "i3quMdmv3vAQDBA6nzM8fTiFtqJrw7tcnf", - "indexid": "x8g1pSCzuEP4qM38eg1HdrEnvVKsoXBZ7R", - "hash160result": "1d8106821498549cebc0af6f8d120b9933090b04", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.visa.croppedback" - } -}; -exports.IDENTITY_VISA_FACE = { - "vdxfid": "iAqxnB58655ZcRLAUm2Utib2rguRXT9wZM", - "indexid": "xFg5EyWCwPJEEbDCLSgds77ZtLvSRpw2k9", - "hash160result": "59564e826c8342a2b721708f6a83c9761dc6d650", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.visa.face" - } -}; -exports.IDENTITY_VISA_IDNUMBER = { - "vdxfid": "iQ5LfUtuggDyqbePUB9iWLgxYj7tvDm2VE", - "indexid": "xUuT8HKzXzSeTmXRKrosUjDVaP8upm7rqg", - "hash160result": "77ae761bf6bf7922ff8e47b53bd88107be15f8e1", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.visa.idnumber" - } -}; -exports.IDENTITY_VISA_CATEGORY = { - "vdxfid": "iH4nhrNsZKK6bEkgLDu17fBPR5dnVgitiQ", - "indexid": "xMtuAeoxQdXmDQdiBuZA63hvSjeoT3wsnv", - "hash160result": "8052162609b4da20bb5932ead5b6deedbb861495", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.visa.category" - } -}; -exports.IDENTITY_VISA_EXPIRATIONDATE = { - "vdxfid": "iNW2k7p7hVK2GCc7m1k4mihqh8jd94Dmnh", - "indexid": "xTL9CvFCYoXgtNV9chQDk7ENinkdzPUodD", - "hash160result": "5eaa0aef6ed6d27ee4909bc6ce8619c60346b3d0", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.visa.expirationdate" - } -}; -exports.IDENTITY_VISA_ISSUINGCOUNTRY = { - "vdxfid": "i5vDfPKMfCRPXVRhfumjWPEvBFhNMVjtGK", - "indexid": "xAkL8BkSWWe49fJjXbRtUmmTCuiPJGBZ2c", - "hash160result": "ebf49255193b4ffbb3a0487106a4df98833bcc1a", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.visa.issuingcountry" - } -}; -exports.IDENTITY_VISA_ISSUINGREGION = { - "vdxfid": "iPRc9Ns6LadQNYU7DqSNyx7LW8W9dPKDjC", - "indexid": "xUFicBJBBtr4ziM95X6XxLdsXnXAYQ1XFN", - "hash160result": "a1217c6e44b1f47faf9d59378206009d8433d5da", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.visa.issuingregion" - } -}; -exports.IDENTITY_VISA_DATEOFBIRTH = { - "vdxfid": "i55bTsxLkCTmE6VvppvG8doYnmxuHhec65", - "indexid": "x9uhvgPRbWgRrGNxgWaR72L5pRyvA4vVWm", - "hash160result": "ed824bbfd195e63d6d5151a07eda49eba60c9a11", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.visa.dateofbirth" - } -}; -exports.IDENTITY_VISA_ADDRESS_STREET1 = { - "vdxfid": "iMzWxFVzJHbQm5YWv9c1eujvrUrPHAGVAc", - "indexid": "xSpdR3w59bp5PFRYmqGAdJGTt8sQ8o4mpu", - "hash160result": "05992eb838a4f562b6b7e0ff84bb05cdac571ecb", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.visa.address.street1" - } -}; -exports.IDENTITY_VISA_ADDRESS_CITY = { - "vdxfid": "i8YXgZ7doRhidT5phX6qyRnttV6hZiyWTm", - "indexid": "xDNe9MYiejvPFcxrZCkzwpKRv97iS3TQjA", - "hash160result": "04959daab853c797bbbcb9c5ead7376e4a809a37", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.visa.address.city" - } -}; -exports.IDENTITY_VISA_ADDRESS_REGION = { - "vdxfid": "i6YkTDEi1M1mzuTyzww8hNoksJFpev17Fu", - "indexid": "xBNrv1fnrfESd5M1rdbHfmLHtxGqUoeALR", - "hash160result": "3a47a53e8717444b5d31e8618049daa8cde8b421", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.visa.address.region" - } -}; -exports.IDENTITY_VISA_ADDRESS_POSTCODE = { - "vdxfid": "iBJDLHSLB4cHvaeXazFp25Be3V9yRWmcoK", - "indexid": "xG8Ko5sR2NpxYkXZSfuxzTiB59AzMUATiw", - "hash160result": "dd0d87e3163157402aa16d2017a3ea06d6bccd55", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.visa.address.postcode" - } -}; -exports.IDENTITY_VISA_ADDRESS_COUNTRY = { - "vdxfid": "iQ9Z1PZMMp49rtDuGQSjfEZn3xACfxLAYa", - "indexid": "xUyfUBzSD8GpV46w866tdd6K5cBDbMPuNo", - "hash160result": "c45655a6924c0b377e9182869dc780df690dc4e2", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.visa.address.country" - } -}; -exports.IDENTITY_PERSONALDETAILS = { - "vdxfid": "i8SSgM1z7XVoCtoP9CCsMms3zCndaNjtCe", - "indexid": "xDGZ99T4xqiTq4gQzss2LAPb1roeUyLwkU", - "hash160result": "a8fbe89451c1d0a77b336ccf6b0fb7601dd47336", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.personaldetails" - } -}; -exports.IDENTITY_CONTACTDETAILS = { - "vdxfid": "iRLT8V9NN178CvZQusJSHuyuFC2fD2QmE3", - "indexid": "xWAZbHaTDKKnq6SSmYxbGJWSGr3g1GRDYH", - "hash160result": "b9185ad980909708754a484bf11edc9febd8cbef", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.contactdetails" - } -}; -exports.IDENTITY_LOCATION = { - "vdxfid": "iGmiLZ7J6GjxjZ4rkSMsDzyyvWtmMBjnbo", - "indexid": "xMbpoMYNwaxdMiwtc822CPWWxAunLDE1BS", - "hash160result": "15ea60d9ddde976095b0c79ceecef7b034cfd991", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.location" - } -}; -exports.IDENTITY_BANKINGDETAILS = { - "vdxfid": "i8DUrZJJRjNQMJNeJ3Ti6pbpKPJ55LECyJ", - "indexid": "xD3bKMjPH3b4yUFg9j7s5D8MM3K612HEir", - "hash160result": "a7e5de6ac208f110d0509cffeb916b8dd03c0034", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.bankingdetails" - } -}; -exports.IDENTITY_DOCUMENTS = { - "vdxfid": "iCm3ERZoUw2ze1P11QyRUtvhKYovCWFXbT", - "indexid": "xHb9hDztLFFfGBG2s6daTHTEMCpw3tcbVJ", - "hash160result": "ee9f8d5ba7366983cf9b9d3e5e8ac50898a9d865", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.documents" - } -}; -exports.IDENTITY_BANKACCOUNT = { - "vdxfid": "iN4AgB4KEN1C3TfZnYDFUhxn37PdcrZvxT", - "indexid": "xStH8yVQ5gDrfdYbeDsQT6VK4mQeYDjcFm", - "hash160result": "122bf0739d7d1def003656a63c443efb6c14cfcb", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.bankaccount" - } -}; -exports.IDENTITY_BANKINGDETAILS_CURRENCY = { - "vdxfid": "i5k8pb9FHf5VZJKki6him1WMBkpyhe56BY", - "indexid": "xAaFHPaL8yJABUCnZnMsjQ2tDQqzfUkZRm", - "hash160result": "cc655f9f104ad6c25cc65407121fa7ac1208e418", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.bankingdetails.currency" - } -}; -exports.IDENTITY_BANKINGDETAILS_COUNTRY = { - "vdxfid": "iHYqZF4Asa4erZR9kJ5G5nWRNGWdiS8vBh", - "indexid": "xNNx23VFitHKUjJBbyjR4B2xPvXebL5g4h", - "hash160result": "cf7870c11608bf6e58890fbfc18ffe0db98d629a", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.bankingdetails.country" - } -}; -exports.IDENTITY_BANKINGDETAILS_STREET1 = { - "vdxfid": "iRhANjQk2G3aFXiaGtG68kZjdYr2iVXQJJ", - "indexid": "xWXGqXqpsaGEshbc8ZvF796GfCs3bDhrgC", - "hash160result": "bd420c73e6bba2e48542cddf188c23b8c098b6f3", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.bankingdetails.street1" - } -}; -exports.IDENTITY_BANKINGDETAILS_STREET2 = { - "vdxfid": "iFWtcLUKAECLrREJr6mxtHM9xPUocxmTSY", - "indexid": "xLM158uQ1YR1Ub7LhnS7rfsgz3VpTpBcCu", - "hash160result": "7f1a53da2e265bab3230d9eec1ed0f36d7041484", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.bankingdetails.street2" - } -}; -exports.IDENTITY_BANKINGDETAILS_CITY = { - "vdxfid": "iQxBEB8sXNez25HJCzvnTWtWqXUkEVAuo8", - "indexid": "xVnHgyZxNgseeFAL4gawRuR3sBVm7nyQqt", - "hash160result": "5878bb5b9371344acb1b679316e0e087046c95eb", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.bankingdetails.city" - } -}; -exports.IDENTITY_BANKINGDETAILS_REGION = { - "vdxfid": "i4HJ5yrzBFEwjiYgzptMcrBsCeBjPYQJFX", - "indexid": "x97QYnJ52ZTcMtRirWYWbEiQEJCkKnxArM", - "hash160result": "7bf3a5ee05846c54bd19032e6ee9069cbc68d808", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.bankingdetails.region" - } -}; -exports.IDENTITY_BANKINGDETAILS_POSTALCODE = { - "vdxfid": "iFVaE922Bzrro6rb87d9En2t2AAGx7EivG", - "indexid": "xLKggwT73K5XRGjcyoHJDAZR3pBHqz4Utt", - "hash160result": "ebd93a0f4fb8db6fb0cb8d397c45b41a0142d483", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.bankingdetails.postalcode" - } -}; -exports.IDENTITY_BANKINGDETAILS_TAXNUMBER = { - "vdxfid": "i6Gbi3EkYrbREumkLmHUedbzrisXkRzwKY", - "indexid": "xB6iAqfqQAp5s5enCSwdd28XtNtYcHgrDb", - "hash160result": "bcc691f5d53f99e196b291ea2a00a9805ff4a61e", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.bankingdetails.taxnumber" - } -}; -exports.IDENTITY_BANKINGDETAILS_TAXCOUNTRY = { - "vdxfid": "iMJzAfPjqvWJdYyoWTX79cSjd51HbVc7wC", - "indexid": "xS96dTpphEiyFirqN9BG7zyGej2JTACDB1", - "hash160result": "e19f920e684c7d906dd8c85d72a5d5f0cd6ba4c3", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.bankingdetails.taxcountry" - } -}; -exports.IDENTITY_BANKINGDETAILS_FIRSTNAME = { - "vdxfid": "iGAomW7jtsy7zRaoMFU48KvrHahHwdjzi7", - "indexid": "xLzvEJYpkCBncbTqCw8D6iTPKEiJpW3beK", - "hash160result": "d33bd09ba3184bf0e3fa00ad62e92a7a99c83f8b", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.bankingdetails.firstname" - } -}; -exports.IDENTITY_BANKINGDETAILS_LASTNAME = { - "vdxfid": "iMrvbLJnZawGsdFshtrHM3QKa4pDPbRk3L", - "indexid": "xSh348jsQu9wVo8uZaWSKRvrbiqED1eny3", - "hash160result": "4a0d68f2cafc3cbe827a91fd5038c65878bfaec9", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.bankingdetails.lastname" - } -}; -exports.IDENTITY_BANKINGDETAILS_PHONENUMBER = { - "vdxfid": "i9jKPi8ubg5fx3BBmZdiyobJxNgzcmV9et", - "indexid": "xEZRrWZzSzJLaD4DdFHsxC7qz2i1YejHqk", - "hash160result": "b092c8f73031298d26b919f4b398fa9b66f19c44", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.bankingdetails.phonenumber" - } -}; -exports.IDENTITY_BANKINGDETAILS_NUMBER = { - "vdxfid": "iKGaF7fZ6yAvwJyxcmpuas2Hn9PZPF99yf", - "indexid": "xQ6ghv6dxHPbZUrzUTV4ZFYpooQaFZG1aa", - "hash160result": "fcceea7c24223218bc9313e8176daea6155e3fad", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.bankingdetails.number" - } -}; -exports.IDENTITY_BANKINGDETAILS_TYPE = { - "vdxfid": "iNkzXo7BBcUvCBH8somKyFtAFsR3mmmYuG", - "indexid": "xTb6zbYG2vhapMAAjVRUweQhHXS4csH9eB", - "hash160result": "26dcd354b4b2bd8b939af29fc5ea57a082aa87d3", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.bankingdetails.type" - } -}; -exports.IDENTITY_BANKINGDETAILS_SORTCODE = { - "vdxfid": "i8v2y1beTivG8Nyi6Td3VFTc2ExFQJT8pC", - "indexid": "xDk9Rp2jK38vkYrjx9HCTdz93tyGLCaa3E", - "hash160result": "27df54160c8a8a962dd455004c8afac060aeab3b", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.bankingdetails.sortcode" - } -}; -exports.IDENTITY_DOCUMENTS_PASSPORT = { - "vdxfid": "iJHkDyp8dPnNdrh7P9fzow4gTshpbznkSK", - "indexid": "xP7rgnFDUi13G2a9EqL9nKbDVXiqVHVtyg", - "hash160result": "456f1956c77f7ff59d98dd57030d7ed22afd7fa2", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.documents.passport" - } -}; -exports.IDENTITY_RESIDENCECARD = { - "vdxfid": "iQerHJHjqVT32hU1ZUyVYKQEkavs4xFtHo", - "indexid": "xVUxk6ipgofhesM3RAdeWhvmnEwsywApa2", - "hash160result": "0b2227f2bb574fe3cbcc683eecfc4d3bff884ee8", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.residencecard" - } -}; -exports.IDENTITY_ATTESTOR = { - "vdxfid": "iFNc5DG22Btm69wBDDXatvSPLxzJq53QBa", - "indexid": "xLCiY1h6sW7RiKpD4uBjsJxvNd1Kiej8tW", - "hash160result": "e5d18dab811f87643c1e7a63627172331be38282", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.attestor" - } -}; -exports.IDENTITY_ATTESTATION_RECIPIENT = { - "vdxfid": "iAkd3VBhYQ3MK6PUCtfhXrLVNbqSghxxpn", - "indexid": "xFajWHcnPiG1wGGW4aKrWEs2QFrTbwP7wd", - "hash160result": "71b7cbbfc8be868f6d9f6c481c420b002438d44f", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.attestation.recipient" - } -}; diff --git a/dist/vdxf/index.d.ts b/dist/vdxf/index.d.ts deleted file mode 100644 index 58b683bd..00000000 --- a/dist/vdxf/index.d.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { VDXFKeyInterface } from './keys'; -import { BigNumber } from "../utils/types/BigNumber"; -export * from './keys'; -export * from './scopes'; -export * from './keymap'; -export * from './identitydatakeys'; -export * from './vdxfdatakeys'; -export interface VDXFObjectInterface { - vdxfkey: string; - toString: () => string; - toJson: () => { - [key: string]: any; - }; - toBuffer: () => Buffer; - toDataBuffer: () => Buffer; - fromDataBuffer: (buffer: Buffer, offset: number) => number; - fromBuffer: (buffer: Buffer, offset: number) => number; - dataByteLength: () => number; - byteLength: () => number; - getVersionNoFlags: () => BigNumber; -} -export interface VerusIDSignatureInterface { - signature: string; -} -export type VerusIDSignatureJson = { - signature: string; - vdxfkey: string; - serializekey: boolean; -}; -export declare class VDXFObject implements VDXFObjectInterface { - vdxfkey: string; - version: BigNumber; - serializekey: boolean; - constructor(key?: string, serializekey?: boolean); - getVersionNoFlags(): import("bn.js"); - toJson(): {}; - toString(includeKey?: boolean): string; - dataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer, offset?: number): number; - isValidVersion(): boolean; - fromBuffer(buffer: Buffer, offset?: number, vdxfkey?: string): number; - byteLength(includeKey?: boolean): number; - toBuffer(includeKey?: boolean): Buffer; - toSha256(): Buffer; -} -export declare class BufferDataVdxfObject extends VDXFObject { - data: string; - encoding: BufferEncoding; - constructor(data?: string, vdxfkey?: string, encoding?: BufferEncoding); - dataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer, offset?: number): number; - toJson(): { - data: string; - vdxfkey: string; - }; - static fromJson(json: { - data: string; - vdxfkey: string; - }): BufferDataVdxfObject; -} -export declare class VDXFData extends VDXFObject { - data: Buffer; - constructor(data?: Buffer, vdxfkey?: string); - dataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer, offset?: number): number; - toJson(): { - data: string; - vdxfkey: string; - }; -} -export declare class Utf8DataVdxfObject extends BufferDataVdxfObject { - constructor(data?: string, vdxfkey?: string); -} -export declare class HexDataVdxfObject extends BufferDataVdxfObject { - constructor(data?: string, vdxfkey?: string); -} -export declare class Utf8OrBase58Object extends VDXFObject { - data: string; - base58Keys: { - [key: string]: boolean; - }; - constructor(data?: string, vdxfkey?: string, base58Keys?: Array); - isBase58(): boolean; - dataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer, offset?: number): number; - toJson(): { - data: string; - vdxfkey: string; - }; -} -export declare class VerusIDSignature extends VDXFObject { - signature: string; - constructor(sig?: VerusIDSignatureInterface, vdxfkey?: VDXFKeyInterface, serializekey?: boolean); - dataByteLength(): number; - toDataBuffer(): Buffer; - fromDataBuffer(buffer: Buffer, offset?: number): number; - static fromJson(data: VerusIDSignatureJson): VerusIDSignature; - toJson(): VerusIDSignatureJson; -} diff --git a/dist/vdxf/index.js b/dist/vdxf/index.js deleted file mode 100644 index 4a88a26a..00000000 --- a/dist/vdxf/index.js +++ /dev/null @@ -1,240 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VerusIDSignature = exports.Utf8OrBase58Object = exports.HexDataVdxfObject = exports.Utf8DataVdxfObject = exports.VDXFData = exports.BufferDataVdxfObject = exports.VDXFObject = void 0; -const base64url_1 = require("base64url"); -const createHash = require("create-hash"); -const vdxf_1 = require("../constants/vdxf"); -const address_1 = require("../utils/address"); -const bufferutils_1 = require("../utils/bufferutils"); -const varint_1 = require("../utils/varint"); -const varuint_1 = require("../utils/varuint"); -const Hash160_1 = require("./classes/Hash160"); -const keys_1 = require("./keys"); -const bn_js_1 = require("bn.js"); -__exportStar(require("./keys"), exports); -__exportStar(require("./scopes"), exports); -__exportStar(require("./keymap"), exports); -__exportStar(require("./identitydatakeys"), exports); -__exportStar(require("./vdxfdatakeys"), exports); -class VDXFObject { - constructor(key = "", serializekey = true) { - this.serializekey = true; - this.vdxfkey = key; - this.version = vdxf_1.VDXF_OBJECT_DEFAULT_VERSION; - this.serializekey = serializekey; - } - getVersionNoFlags() { - return this.version; - } - toJson() { - return {}; - } - toString(includeKey = this.serializekey) { - return base64url_1.default.encode(this.toBuffer(includeKey)); - } - dataByteLength() { - return 0; - } - toDataBuffer() { - return Buffer.alloc(0); - } - fromDataBuffer(buffer, offset = 0) { - return offset; - } - isValidVersion() { - return true; - } - fromBuffer(buffer, offset = 0, vdxfkey) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - if (vdxfkey == null) { - const keyHash = reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH); - this.vdxfkey = (0, address_1.toBase58Check)(keyHash, vdxf_1.I_ADDR_VERSION); - } - const version = reader.readVarInt(); - this.version = version; - if (!this.isValidVersion()) - throw new Error("Unsupported version for vdxf object."); - if (offset < buffer.length - 1) { - reader.offset = this.fromDataBuffer(reader.buffer, reader.offset); - } - return reader.offset; - } - byteLength(includeKey = this.serializekey) { - const dataLength = this.dataByteLength(); - const keyLength = includeKey ? (0, address_1.fromBase58Check)(this.vdxfkey).hash.length : 0; - const versionEncodingLength = varint_1.default.encodingLength(new bn_js_1.BN(this.version)); - const dataEncodingLength = varuint_1.default.encodingLength(dataLength); - return dataLength + keyLength + versionEncodingLength + dataEncodingLength; - } - toBuffer(includeKey = this.serializekey) { - const key = (0, address_1.fromBase58Check)(this.vdxfkey); - const dataLength = this.dataByteLength(); - const buffer = Buffer.alloc(this.byteLength(includeKey)); - const writer = new bufferutils_1.default.BufferWriter(buffer); - if (includeKey) { - writer.writeSlice(key.hash); - } - writer.writeVarInt(new bn_js_1.BN(this.version, 10)); - if (dataLength) { - writer.writeVarSlice(this.toDataBuffer()); - } - return writer.buffer; - } - toSha256() { - return createHash("sha256").update(this.toBuffer()).digest(); - } -} -exports.VDXFObject = VDXFObject; -class BufferDataVdxfObject extends VDXFObject { - constructor(data = "", vdxfkey = "", encoding = "hex") { - super(vdxfkey); - this.encoding = "hex"; - this.data = data; - this.encoding = encoding; - } - dataByteLength() { - return this.toDataBuffer().length; - } - toDataBuffer() { - return Buffer.from(this.data, this.encoding); - } - fromDataBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - this.data = reader.readVarSlice().toString(this.encoding); - return reader.offset; - } - toJson() { - return { - data: this.data, - vdxfkey: this.vdxfkey, - }; - } - static fromJson(json) { - return new BufferDataVdxfObject(json.data, json.vdxfkey); - } -} -exports.BufferDataVdxfObject = BufferDataVdxfObject; -class VDXFData extends VDXFObject { - constructor(data = Buffer.from(""), vdxfkey = "") { - super(vdxfkey); - this.data = data; - } - dataByteLength() { - return this.data.length; - } - toDataBuffer() { - return this.data; - } - fromDataBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - this.data = reader.readVarSlice(); - return reader.offset; - } - toJson() { - return { - data: this.data.toString("hex"), - vdxfkey: this.vdxfkey, - }; - } -} -exports.VDXFData = VDXFData; -class Utf8DataVdxfObject extends BufferDataVdxfObject { - constructor(data = "", vdxfkey = "") { - super(data, vdxfkey, "utf-8"); - } -} -exports.Utf8DataVdxfObject = Utf8DataVdxfObject; -class HexDataVdxfObject extends BufferDataVdxfObject { - constructor(data = "", vdxfkey = "") { - super(data, vdxfkey, "hex"); - } -} -exports.HexDataVdxfObject = HexDataVdxfObject; -class Utf8OrBase58Object extends VDXFObject { - constructor(data = "", vdxfkey = "", base58Keys = []) { - super(vdxfkey); - // VDXF keys that would cause this object to be base58 instead of utf8 - this.base58Keys = {}; - for (const key of base58Keys) { - this.base58Keys[key] = true; - } - this.data = data; - } - isBase58() { - return this.base58Keys[this.vdxfkey]; - } - dataByteLength() { - return this.toDataBuffer().length; - } - toDataBuffer() { - return this.isBase58() - ? (Hash160_1.Hash160.fromAddress(this.data, false)).toBuffer() - : Buffer.from(this.data, "utf-8"); - } - fromDataBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - if (this.isBase58()) { - const _data = new Hash160_1.Hash160(); - // varlength is set to true here because vdxf objects always have a - // variable length data field. This has160 object was not creted with - // varlength true, but this is a shortcut instead of writing readVarSlice - // and then fromBuffer. - reader.offset = _data.fromBuffer(reader.buffer, true, reader.offset); - _data.varlength = false; - this.data = _data.toAddress(); - } - else { - this.data = reader.readVarSlice().toString('utf-8'); - } - return reader.offset; - } - toJson() { - return { - data: this.data, - vdxfkey: this.vdxfkey, - }; - } -} -exports.Utf8OrBase58Object = Utf8OrBase58Object; -class VerusIDSignature extends VDXFObject { - constructor(sig = { signature: "" }, vdxfkey = keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, serializekey = true) { - super(vdxfkey.vdxfid, serializekey); - this.signature = sig.signature; - } - dataByteLength() { - return this.toDataBuffer().length; - } - toDataBuffer() { - return Buffer.from(this.signature, "base64"); - } - fromDataBuffer(buffer, offset) { - const reader = new bufferutils_1.default.BufferReader(buffer, offset); - this.signature = reader.readVarSlice().toString("base64"); - return reader.offset; - } - static fromJson(data) { - return new VerusIDSignature({ signature: data.signature }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, data.serializekey); - } - toJson() { - return { - vdxfkey: this.vdxfkey, - signature: this.signature, - serializekey: this.serializekey - }; - } -} -exports.VerusIDSignature = VerusIDSignature; diff --git a/dist/vdxf/keymap.d.ts b/dist/vdxf/keymap.d.ts deleted file mode 100644 index fcbcb5f1..00000000 --- a/dist/vdxf/keymap.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import * as keylist from './keys'; -export declare const keymap: { - [key: string]: keylist.VDXFKeyInterface; -}; -export declare const attestationDataKeys: { - [key: string]: keylist.VDXFKeyInterface; -}; -export declare const IdentityVdxfidMap: { - [x: string]: { - EN: string; - }; -}; diff --git a/dist/vdxf/keymap.js b/dist/vdxf/keymap.js deleted file mode 100644 index d9f9d9dd..00000000 --- a/dist/vdxf/keymap.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.IdentityVdxfidMap = exports.attestationDataKeys = exports.keymap = void 0; -const keylist = require("./keys"); -const attestationData = require("../utils/IdentityData"); -exports.keymap = Object.keys(keylist) - .reduce((obj, item) => { obj[keylist[item].vdxfid] = keylist[item]; return obj; }, {}); -exports.attestationDataKeys = Object.keys(attestationData) - .reduce((obj, item) => { obj[attestationData[item].vdxfid] = attestationData[item]; return obj; }, {}); -exports.IdentityVdxfidMap = attestationData.IdentityVdxfidMap; diff --git a/dist/vdxf/keys.d.ts b/dist/vdxf/keys.d.ts deleted file mode 100644 index ff1b2283..00000000 --- a/dist/vdxf/keys.d.ts +++ /dev/null @@ -1,86 +0,0 @@ -export interface VDXFKeyInterface { - vdxfid: string; - hash160result: string; - qualifiedname: { - name: string; - namespace: string; - }; - bounddata?: { - vdxfkey: string; - }; - indexid?: string; -} -export declare const VERUSPAY_INVOICE_VDXF_KEY: VDXFKeyInterface; -export declare const VERUSPAY_INVOICE_DETAILS_VDXF_KEY: VDXFKeyInterface; -export declare const GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY: VDXFKeyInterface; -export declare const IDENTITY_UPDATE_REQUEST_VDXF_KEY: VDXFKeyInterface; -export declare const IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface; -export declare const IDENTITY_UPDATE_RESPONSE_VDXF_KEY: VDXFKeyInterface; -export declare const IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY: VDXFKeyInterface; -export declare const IDENTITY_AUTH_SIG_VDXF_KEY: VDXFKeyInterface; -export declare const LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY: VDXFKeyInterface; -export declare const LOGIN_CONSENT_REQUEST_VDXF_KEY: VDXFKeyInterface; -export declare const LOGIN_CONSENT_RESPONSE_VDXF_KEY: VDXFKeyInterface; -export declare const LOGIN_CONSENT_CHALLENGE_VDXF_KEY: VDXFKeyInterface; -export declare const LOGIN_CONSENT_DECISION_VDXF_KEY: VDXFKeyInterface; -export declare const WALLET_VDXF_KEY: VDXFKeyInterface; -export declare const LOGIN_CONSENT_REDIRECT_VDXF_KEY: VDXFKeyInterface; -export declare const LOGIN_CONSENT_WEBHOOK_VDXF_KEY: VDXFKeyInterface; -export declare const LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY: VDXFKeyInterface; -export declare const LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY: VDXFKeyInterface; -export declare const LOGIN_CONSENT_CONTEXT_VDXF_KEY: VDXFKeyInterface; -export declare const LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY: VDXFKeyInterface; -export declare const ID_ADDRESS_VDXF_KEY: VDXFKeyInterface; -export declare const ID_SYSTEMID_VDXF_KEY: VDXFKeyInterface; -export declare const ID_FULLYQUALIFIEDNAME_VDXF_KEY: VDXFKeyInterface; -export declare const ID_PARENT_VDXF_KEY: VDXFKeyInterface; -export declare const LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY: VDXFKeyInterface; -export declare const LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY: VDXFKeyInterface; -export declare const LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY: VDXFKeyInterface; -export declare const LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY: VDXFKeyInterface; -export declare const LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY: VDXFKeyInterface; -export declare const IDENTITY_NAME_COMMITMENT_TXID: VDXFKeyInterface; -export declare const IDENTITY_REGISTRATION_TXID: VDXFKeyInterface; -export declare const IDENTITY_UPDATE_TXID: VDXFKeyInterface; -export declare const LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO: VDXFKeyInterface; -export declare const LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL: VDXFKeyInterface; -export declare const LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE: VDXFKeyInterface; -export declare const LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED: VDXFKeyInterface; -export declare const LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN: VDXFKeyInterface; -export declare const LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN: VDXFKeyInterface; -export declare const LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED: VDXFKeyInterface; -export declare const LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED: VDXFKeyInterface; -export declare const LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED: VDXFKeyInterface; -export declare const SIGNED_SESSION_OBJECT_DATA: VDXFKeyInterface; -export declare const SIGNED_SESSION_OBJECT: VDXFKeyInterface; -export declare const CURRENCY_ADDRESS: VDXFKeyInterface; -export declare const ATTESTATION_PROVISION_URL: VDXFKeyInterface; -export declare const ATTESTATION_PROVISION_TYPE: VDXFKeyInterface; -export declare const ATTESTATION_PROVISION_OBJECT: VDXFKeyInterface; -export declare const ATTESTATION_VIEW_REQUEST: VDXFKeyInterface; -export declare const ATTESTATION_VIEW_RESPONSE: VDXFKeyInterface; -export declare const ATTESTATION_ID: VDXFKeyInterface; -export declare const ATTESTATION_NAME: VDXFKeyInterface; -export declare const ATTESTATION_TYPE: VDXFKeyInterface; -export declare const ATTESTATION_VIEW_REQUEST_KEY: VDXFKeyInterface; -export declare const ATTESTATION_VIEW_REQUEST_NAME: VDXFKeyInterface; -export declare const ATTESTATION_VIEW_REQUEST_ATTESTOR: VDXFKeyInterface; -export declare const ATTESTATION_VIEW_REQUEST_ID: VDXFKeyInterface; -export declare const PROFILE_DATA_VIEW_REQUEST: VDXFKeyInterface; -export declare const IDENTITY_SIGNDATA_REQUEST: VDXFKeyInterface; -export declare const DATA_TYPE_STRING: VDXFKeyInterface; -export declare const DATA_TYPE_DEFINEDKEY: VDXFKeyInterface; -export declare const DATA_TYPE_OBJECT_DATADESCRIPTOR: VDXFKeyInterface; -export declare const DATA_TYPE_OBJECT_CREDENTIAL: VDXFKeyInterface; -export declare const IDENTITY_CREDENTIALS: VDXFKeyInterface; -export declare const IDENTITY_CREDENTIAL_PLAINLOGIN: VDXFKeyInterface; -export declare const IDENTITY_CREDENTIAL_USERNAME: VDXFKeyInterface; -export declare const ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS: VDXFKeyInterface; -export declare const AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface; -export declare const AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY: VDXFKeyInterface; -export declare const PROVISION_IDENTITY_DETAILS_VDXF_KEY: VDXFKeyInterface; -export declare const APP_ENCRYPTION_REQUEST_VDXF_KEY: VDXFKeyInterface; -export declare const DATA_RESPONSE_VDXF_KEY: VDXFKeyInterface; -export declare const USER_DATA_REQUEST_VDXF_KEY: VDXFKeyInterface; -export declare const USER_SPECIFIC_DATA_PACKET_VDXF_KEY: VDXFKeyInterface; -export declare const APP_ENCRYPTION_RESPONSE_VDXF_KEY: VDXFKeyInterface; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js deleted file mode 100644 index 09b1bcb6..00000000 --- a/dist/vdxf/keys.js +++ /dev/null @@ -1,626 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; -exports.APP_ENCRYPTION_RESPONSE_VDXF_KEY = exports.USER_SPECIFIC_DATA_PACKET_VDXF_KEY = exports.USER_DATA_REQUEST_VDXF_KEY = exports.DATA_RESPONSE_VDXF_KEY = exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY = exports.AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; -exports.VERUSPAY_INVOICE_VDXF_KEY = { - hash160result: "628efc28c2e2d40050e1a9de7a93e7ddf2aa0076", - indexid: "xK4aRumetZg2ecW4Z45qdDBH769xxnaiEH", - qualifiedname: { - name: "veruspay.vrsc::invoice", - namespace: "iAisVse7piEiE2VsixZx4SARyHzSpxYxgq" - }, - vdxfid: "iEETy7La3FTN2Sd2hNRgepek5S8x8eeUeQ" -}; -exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = { - "hash160result": "743a23f19531686d70b26a2e220b50a9c70d78a3", - "indexid": "xPCyrdbnb89NftNSuPaVFENwzGDmAukVbS", - "qualifiedname": { - "name": "veruspay.vrsc::invoice.details", - "namespace": "iAisVse7piEiE2VsixZx4SARyHzSpxYxgq" - }, - "vdxfid": "iJNsPqAhjovi3iVR3hvLGqrQxcCkHq9n9H" -}; -exports.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY = { - "hash160result": "bc05c4263031cc791296fa8bd15553ccef3de4ba", - "indexid": "xRLq15vpenCUGVpmZgqEtoygZW2b32oVgX", - "qualifiedname": { - "name": "vrsc::envelope.generic", - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" - }, - "vdxfid": "iLWiYHVjoTyoeKwji1B5vRT9Xr1aA9yyvX" -}; -exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = { - "hash160result": "0bcef8b06c211828d16dc038e4d34d097aeb64e4", - "indexid": "xV8GreW8nt1Py99r8KPsLxDyy6UYJQvXja", - "qualifiedname": { - "name": "vrsc::identity.update.request", - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" - }, - "vdxfid": "iQJAPr53wZnjLyGpGdjiNZhSwSTXSfyoYy" -}; -exports.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY = { - "hash160result": "4cedf62ce2a66dbb228ba8abe7a10bbffe35db93", - "indexid": "xMnRq7oBMqxzdJqzFniFTtfKyf6qh3BVPs", - "qualifiedname": { - "name": "vrsc::identity.update.request.details", - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" - }, - "vdxfid": "iGxKNKN6WXkL18xxQ746VW8nx15prPMP7L" -}; -exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = { - "hash160result": "667802c74fbf3dd3a9693bb9aec9bef1250b2b14", - "indexid": "xA9GyS1bt1WGERamNVqVrhuGvGJeYuWyNk", - "qualifiedname": { - "name": "vrsc::identity.update.response", - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" - }, - "vdxfid": "i5KAWdaX2hHbcFhjWpBLtKNjtcHdeQFjuX" -}; -exports.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY = { - "hash160result": "4f9a304beccceaa5692247c0d5789814a24f66be", - "indexid": "xRfNr2GNGNEnckSRSPZe4TgbZRKqZfLxqk", - "qualifiedname": { - "name": "vrsc::identity.update.response.details", - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" - }, - "vdxfid": "iLqGPDqHR427zaZPahuV65A4XmJpiqb9eF" -}; -exports.IDENTITY_AUTH_SIG_VDXF_KEY = { - vdxfid: "iPi1DPgDDu7hP1mAp5xJ8rHBWwXSzc6yA8", - hash160result: "06d4b963da3dcf17f00905b0720f7a4c241defdd", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.authentication.signature", - }, -}; -exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = { - vdxfid: "iPi1DPgDDu7hP1mAp5xJ8rHBWwXSzc6yA8", - hash160result: "06d4b963da3dcf17f00905b0720f7a4c241defdd", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.authentication.signature", - }, -}; -exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = { - vdxfid: "i3dQmgjq8L8XFGQUrs9Gpo8zvPWqs1KMtV", - hash160result: "c539b36efc768d1a7b728aa2052c2c28bd2eae01", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.authentication.loginconsent.request", - }, -}; -exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = { - vdxfid: "i5fvfsaTFKtrHCPYQHTXRaXcyxHmJMxTMe", - hash160result: "17dafae5a8417394df73fb718cff87b5a2391818", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.authentication.loginconsent.response", - }, -}; -exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = { - vdxfid: "i5maLnB62WmKKXFZniqDRU1JiC2Hd1xpVb", - hash160result: "9c35c457fb8a932676b58d1f9cd4a88f3ec02919", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.authentication.loginconsent.challenge", - }, -}; -exports.LOGIN_CONSENT_DECISION_VDXF_KEY = { - vdxfid: "iQP5eKQaYDV3FFXsq7276LyWxk4ttjuSdm", - hash160result: "89baa310edcc2a4ef9841cc09c7d0a88bc0853e5", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.authentication.loginconsent.decision", - }, -}; -exports.WALLET_VDXF_KEY = { - vdxfid: "i5JtwbP6zyMEAy9LLnRAGLgJQGdRFfsAu4", - hash160result: "cb8486edea3f09c06c687327bda71487f30b1e14", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::applications.wallet", - }, - indexid: "xA91QPpBrHZto92NCU5KEjCqRveS4dAPrf" -}; -exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = { - vdxfid: "iDXvHYhRpWcoARCEYeLv8GwkVdrbvSFuam", - hash160result: "a6d2c261dcbd96cc1ef27a47c9a67c031895556e", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.authentication.loginconsent.redirect", - }, -}; -exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = { - vdxfid: "iSaBWByu4zqhEZ6HQmFxvfR1HyiFuhnJfL", - hash160result: "19e760a7025856237a57866c92479821bac05cfd", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.authentication.loginconsent.webhook", - }, -}; -exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = { - vdxfid: "iEiQe3C68gKvAevZWAx6MLmoSR64hVqfMb", - hash160result: "6759ec3006891e89422e59fb613ab2653389497b", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.attestation.webhook", - }, -}; -exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = { - vdxfid: "i8RW9fcZHh1oaAqR2fWWLCB99mfNW6Q2mQ", - indexid: "xDFccU3e91EUCLiStMAfJahgBRgPHfYq74", - hash160result: "fe40712687cd6f9f288e535ced75b653624f4636", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.identitydata.webhook" - } -}; -exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = { - vdxfid: "iBMochrKPSQfua5yZYWyd6p4QnREakqU44", - hash160result: "3b605d4ace1e19dd0bddb2eef63171b1879a7b56", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.authentication.loginconsent.context", - }, -}; -exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = { - vdxfid: "iMiXw4BuL4iESPqz6fvJ4rHbDg1SvVKLnc", - hash160result: "7b051db57821563ec22544182eb0f4c5308118c8", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.provisioning.webhooks.provisionidentity", - }, -}; -exports.ID_ADDRESS_VDXF_KEY = { - vdxfid: "i3a3M9n7uVtRYv1vhjmyb4DxY825AVAwic", - hash160result: "63fc04d860fde7b60ddf5d9ef9985b573a0d0b01", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.address", - }, -}; -exports.ID_SYSTEMID_VDXF_KEY = { - vdxfid: "iMZTNkNBgBXNHkMLipQw9wQb56pxBSEp3k", - hash160result: "3e65e72cc0130c87184c91aa4d33cae3fcf460c6", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.systemid", - }, -}; -exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = { - vdxfid: "iCQ5gYekWs5DaXiBN7YfoDfNWT3VtpUwVq", - hash160result: "4d21dd52ee9d4b6a9f55a452f3ba247006f9e161", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.fullyqualifiedname", - }, -}; -exports.ID_PARENT_VDXF_KEY = { - vdxfid: "i6aJSTKfNiDZ4rPxj1pPh4Y8xDmh1GqYm9", - hash160result: "fe0be7479818a0a41fb4e6bc58a0f34dd6060022", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.parent", - }, -}; -exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = { - vdxfid: "iAN8hxt2pkU32jvBsXtJ7Nu9sfn9QDgr5q", - hash160result: "8598120ec657fc662355adc49348c518f869934b", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.provisioning.request", - }, -}; -exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = { - vdxfid: "iLvLAJ2YycueCYMDPJA8DwrenULPJkJgKE", - hash160result: "7467ddf0c155f0c8dd3f38a68103fe97398b5bbf", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.provisioning.challenge", - }, -}; -exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = { - vdxfid: "i6VH8kxLH3ERRf7dQCupRW8VKjs7kVAsxR", - hash160result: "0a7179eea76dea5ceb58ae65c9fbb10c82db0c21", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.provisioning.decision", - }, -}; -exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = { - vdxfid: "i85sHR4C9BqZkP7BMses4UaggJXwnc4nSx", - hash160result: "5d8c77fc5e97c49ed7c4babfc693268cdea18f32", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.provisioning.response", - }, -}; -exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = { - vdxfid: "iGV8yvy8YqLxrd5GcHbX9vRpbajpM1px3w", - hash160result: "3d379d42a495bd8946833ea2990d4600684fb78e", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.provisioning.result", - }, -}; -exports.IDENTITY_NAME_COMMITMENT_TXID = { - vdxfid: "iEJTmGeALUU3ABtVNi8dZwFJk4FqP9N1Et", - hash160result: "2007222f775f209fccd9d5f16bb2bf6b4529c276", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.txid.namecommitment", - }, -}; -exports.IDENTITY_REGISTRATION_TXID = { - vdxfid: "iA8weZfoUatpDo7kAMgLjByeNP6G9sbWqG", - hash160result: "11892abb92a82b94925113361653962a71c61449", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.txid.identityregistration", - }, -}; -exports.IDENTITY_UPDATE_TXID = { - vdxfid: "iHhzJVTGkzCgwCuLRsFMZ81t3XLxUNGs2D", - hash160result: "ca480a573642c36f18fb90e2bdabb87207991d9c", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.txid.updateidentity", - }, -}; -exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = { - vdxfid: "iKPocacGnQePtXEfcqBadmmrQA35pbLPhT", - hash160result: "4412732b594d0bda49917e57b9f886c9a5709dae", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.provisioning.states.pendingrequiredinfo", - }, -}; -exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = { - vdxfid: "i4MTVaYamSYTSEMRJaaHxKypmmCMack2LZ", - hash160result: "307c505245e3d2a8ace6f36558eafed5e8eca109", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.provisioning.states.pendingapproval", - }, -}; -exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = { - vdxfid: "iG89yjgnQEqSVv3dShPHpTUkCtJt96gzVU", - hash160result: "7d8da8429719fc554309f1b2340118522d68bf8a", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.provisioning.states.complete", - }, -}; -exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = { - vdxfid: "iCF1tj2zY83mgB8JbNg4dvfD2yefvMGZ4p", - hash160result: "10a31da845d563f37520e82a32474be3ba102b60", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.provisioning.states.failed", - }, -}; -exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = { - vdxfid: "iNjhjmfwQGwGXZaXhonZHk4n6Q36JS6fQS", - hash160result: "672f11be28b26ca7f440c5c2b8aa9e94473b49d3", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.provisioning.errors.nametaken", - }, -}; -exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = { - vdxfid: "i4dhDcmzNGj9SxCJ9DZZHEJKx4jXZdJkU5", - hash160result: "1560866b0137c0bb444033db2d8368efa609b40c", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.provisioning.errors.unknown", - }, -}; -exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = { - vdxfid: "iRZSxLxmuaW87SrUV5eqLc9gATQB42RXRP", - hash160result: "1b69aa9315d450656d8e023a510ad07fe01b41f2", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.provisioning.errors.commitment", - }, -}; -exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = { - vdxfid: "iHMSEbaZw7joHG8mdh4N2XX1ygWWwjLtwr", - hash160result: "11dd7d101bf5b2854429b0b8816a436d9e823a98", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.provisioning.errors.creation", - }, -}; -exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = { - vdxfid: "iMMzX8s3P9syh4Cx6BQLRCuu2aQEzjn7La", - hash160result: "f7d0e1fe2452f9d7bfc2072f76188379b2f635c4", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.provisioning.errors.transfer", - }, -}; -exports.SIGNED_SESSION_OBJECT_DATA = { - "vdxfid": "iGQiFxLgGDtpTT9CVBARTjhUMoWnnMetzy", - "hash160result": "db9e0983fc2da941c8fadee6d08cc6790c02e18d", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.signedsessionobject.data" - } -}; -exports.SIGNED_SESSION_OBJECT = { - "vdxfid": "iQFqjYQnaiCPENEShSb8Jy3qD6En43juVr", - "hash160result": "76733b2dbe76a03c6da94719733c0a06cf82f4e3", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.signedsessionobject" - } -}; -exports.CURRENCY_ADDRESS = { - "vdxfid": "iBy2s9cQL9RadMVPjog6bbSV5ityBxTuNR", - "hash160result": "4fb4c86b8ce18e596e28f62bc9a78f43d738255d", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::currency.address" - } -}; -exports.ATTESTATION_PROVISION_URL = { - "vdxfid": "iD9J9aQ6vsRYvqZbBs9QpKmCcgUynee7mT", - "indexid": "xHyQcNqBnBeDZ1Sd3YoZniHjeLVzgLK5ka", - "hash160result": "e1059d2a03500749f86ed9c49137b86de6430e6a", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::attestation.provision.url" - } -}; -exports.ATTESTATION_PROVISION_TYPE = { - "vdxfid": "i7VGPAp3q2h4U4njZ556b9eG3Jts2gmzHn", - "indexid": "xCKNqyF8gLuj6EfmQkjFZYAo4xuswrB6X9", - "hash160result": "5f922c9d09e0160b7c3bc5f31588dfc11b5b042c", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::attestation.provision.type" - } -}; -exports.ATTESTATION_PROVISION_OBJECT = { - "vdxfid": "iA4mSmR35HNwXogTtdGasrmxHzX9zFfDqM", - "indexid": "xEtsuZr7vbbc9yZVkJvjrFJVKeYArDTHtu", - "hash160result": "568af36801cfae2e1290ecef7a60c7ae0c984a48", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::attestation.provision.object" - } -}; -exports.ATTESTATION_VIEW_REQUEST = { - "vdxfid": "i5R9p3V1sxZ9p1NDV7nPkz1wvmQTUvuByY", - "hash160result": "872923256c56f6bda8256c5bb6a4c98d85f44c15", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::attestation.view.request" - } -}; -exports.ATTESTATION_VIEW_RESPONSE = { - "vdxfid": "i5R9p3V1sxZ9p1NDV7nPkz1wvmQTUvuByY", - "hash160result": "872923256c56f6bda8256c5bb6a4c98d85f44c15", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::attestation.view.response" - } -}; -exports.ATTESTATION_ID = { - "vdxfid": "i87ZC3B5EFiKtLW9fCUkw9yoMVmh2i2bZ3", - "hash160result": "f540229f88da9e3a9f40f99ce5a22afe765ce132", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::attestation.id" - } -}; -exports.ATTESTATION_NAME = { - "vdxfid": "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1", - "hash160result": "8a00bdd77505b345ed85d7292459b61457a10d76", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::attestation.name" - } -}; -exports.ATTESTATION_TYPE = { - "vdxfid": "iAJUD5mgT6MHz8ymF49XUtBDRS7uvYqNWZ", - "indexid": "xF8aftCmJQZxcJro6jogTGhkT68vqfCDCm", - "hash160result": "e56544849c038b7cfadb0a1074ac51df9207e24a", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::attestation.type" - } -}; -exports.ATTESTATION_VIEW_REQUEST_KEY = { - "vdxfid": "i8iRyLrnapw29BTaHYtu7C3wWPtbjKvEJp", - "indexid": "xDYYS9HsS99gmMLc9EZ45aaUY3ucaC7FDD", - "hash160result": "fa51ed48a3b250818d2fb1efcdf6275fd2e47939", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::attestation.view.request.key" - } -}; -exports.ATTESTATION_VIEW_REQUEST_NAME = { - "vdxfid": "i6psJBVkM3yivumyxuhmAwmMYixiFRD9LT", - "indexid": "xBeykyvqCNCPZ5f1pbMv9LHtaNyjDs5X2m", - "hash160result": "8bb63c962ccec2eced99eb15f958b2d03247c124", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::attestation.view.request.name" - } -}; -exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = { - "vdxfid": "iHuiKHNSLJd6xeUCN8etjnTcGgzhDp9Zug", - "indexid": "xNjpn5oXBcqmapMEDpK3iAz9JM1i7g8cDX", - "hash160result": "1bdced61a4c500114659b9f15759eea89c3e559e", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::attestation.view.request.attestor" - } -}; -exports.ATTESTATION_VIEW_REQUEST_ID = { - "vdxfid": "iSoJNm8wz9Jtv69YvReNyRSzBr8KJSXTym", - "indexid": "xXdQqZa2qTXZYG2an7JXwoyXDW9L9NjTYS", - "hash160result": "70cbf4f61e3d585bcaac692fa9443a9890e5d7ff", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::attestation.view.request.id" - } -}; -exports.PROFILE_DATA_VIEW_REQUEST = { - "vdxfid": "iEocxePWah2zp5Hn4ujeoQpc4UVYeJeQ2g", - "indexid": "xKdjRSpbS1FfSFAovbPomoM968WZVsmW1E", - "hash160result": "b1778ef367dbf00e7b9ad15eea2ef17490e6457c", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::profile.data.view.request" - } -}; -exports.IDENTITY_SIGNDATA_REQUEST = { - "vdxfid": "i8pWCPRLoGD9MgL7HM13xo5Bhr9TsXjGxs", - "indexid": "xDecfBrReaRoyrD992fCwBbijWAUi4yjUN", - "hash160result": "0785689a95a2a08dd2e0efd60b71237e97ea9f3a", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.signdata.request" - } -}; -// DATA TYPES -exports.DATA_TYPE_STRING = { - "vdxfid": "iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c", - "hash160result": "e5c061641228a399169211e666de18448b7b8bab", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.string" - }, -}; -exports.DATA_TYPE_DEFINEDKEY = { - "vdxfid": "iD3yzD6KnrSG75d8RzirMD6SyvrAS2HxjH", - "indexid": "xHt6T1XQeAevjFWAHgP1Kbcz1asBJp9Kbs", - "hash160result": "5dd4e0d5f7bd891d55ca8060a044390b64060d69", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.definedkey" - } -}; -exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = { - vdxfid: "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv", - hash160result: "4d4f12424ded2033a526a4e2a8835fc5b2eba208", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::data.type.object.datadescriptor" - }, -}; -exports.DATA_TYPE_OBJECT_CREDENTIAL = { - vdxfid: "iDTG49YLqmkHMYRyuQBYgEyTByQwAzqGd6", - hash160result: "09fbc202710c9f2dacb87e5623e97e2e4101746d", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::data.type.object.credential" - }, -}; -exports.IDENTITY_CREDENTIALS = { - vdxfid: "iM8ULboymw7rqdjX5YihsmxFG59dbyT2Cj", - hash160result: "089fcd4c0bb1edb78789a223cf76a3399e5ca7c1", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.credentials" - }, -}; -exports.IDENTITY_CREDENTIAL_PLAINLOGIN = { - vdxfid: "iHh1FFVvcNb2mcBudD11umfKJXHbBbH6Sj", - hash160result: "21edefb10b2ea96ffb0fbad986e268164df8ed9b", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.credential.plainlogin" - }, -}; -exports.IDENTITY_CREDENTIAL_USERNAME = { - vdxfid: "iN6LYCurcypx7orxkFB73mWRq6Jetf23ck", - hash160result: "9125e70938468eea614a4f538199fa4d052538cc", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.credential.username" - }, -}; -exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = { - "vdxfid": "i4BWC5Lr7gAT7KzyDx82Ye5DeFQD8ckcXe", - "indexid": "x91cesmvxzP7jVt15dnBX2bkfuRDya9TPq", - "hash160result": "3c520f0bde6be181461ebbff11bce396a604c007", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::attestation.view.request.multipleattestations" - } -}; -exports.AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY = { - "hash160result": "ba8f92aeb1d135d6a64366af727ce0435a03ef45", - "indexid": "xEgQr2xov3Sa5XCaWYF67mgqz2swZXpUk3", - "qualifiedname": { - "name": "vrsc::identity.authentication.request.details", - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" - }, - "vdxfid": "i9rJPEXj4jDuTMKYeraw9PAJxNrvaRM5fu" -}; -exports.AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY = { - "hash160result": "32bee6633cbf8bb8ceff189a5c51abb16615e033", - "indexid": "xD2voG9dsSKNJXcW6jDvJ7KwGbvWqT1jXL", - "qualifiedname": { - "name": "vrsc::identity.authentication.response.details", - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" - }, - "vdxfid": "i8CpLTiZ286hgMjUF3ZmKioQEwuVytVpYr" -}; -exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = { - "hash160result": "1ed843dce0f4d9a2bbb839994e3927807eb1878c", - "indexid": "xM7h3sXBovFXuwGQ3wvK2ibtUmMHn3mYkM", - "qualifiedname": { - "name": "vrsc::identity.provision.details", - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" - }, - "vdxfid": "iGHab566xc2sHmPNCGGA4L5MT7LGoJzmCa" -}; -exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = { - "vdxfid": "iL5nfPuV8Ekiz1EeW5KE3pXHuUTfQf6QC9", - "indexid": "xQuu8CLZyYyPcB7gMkyP2D3pw8UgHevmcM", - "hash160result": "5f398b165b8ea8c547b5f473f951178fc5482db6", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "application.encryption.request" - } -}; -exports.DATA_RESPONSE_VDXF_KEY = { - "vdxfid": "i5L8SNcCqY68X3KZEPgJEjGxY2zvMPzutN", - "indexid": "xAAEuB3HgrJo9DCb65LTD7oVZh1wAjCfTC", - "hash160result": "47ecd4c56c93486380a1ec0d06e186ae8cba5914", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::generic.data.packet.response" - } -}; -exports.USER_DATA_REQUEST_VDXF_KEY = { - "vdxfid": "iC7kqU8mfKtqe2gcE2qpuyN4CEcPFTxKGL", - "indexid": "xGwsJGZrWe7WGCZe5iVytMtbDtdQCPvmno", - "hash160result": "d1fba3d9bf18a5293ff912374fc64725db95cb5e", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "user.data.request" - } -}; -exports.USER_SPECIFIC_DATA_PACKET_VDXF_KEY = { - "vdxfid": "i6JYTdVNLz4Sb6515B73BSX6C1Xba63tNQ", - "indexid": "xB8evRvTCJH7DFx2vrmC9q3dDfYcXW1F15", - "hash160result": "34dfdf234ec37a8451790a19538dbd162913051f", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "user.data.packet.details" - } -}; -exports.APP_ENCRYPTION_RESPONSE_VDXF_KEY = { - "vdxfid": "iLgnRLninDtMa7f7EbH7zsDqHRknC4CUpB", - "indexid": "xRWtt9DodY72CHY96GwGyFkNK5mo1n7Jxe", - "hash160result": "0d3c42aec1d154f1678e0585e557e75202a4cbbc", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "application.encryption.response" - } -}; diff --git a/dist/vdxf/parser.d.ts b/dist/vdxf/parser.d.ts deleted file mode 100644 index bc4d1b24..00000000 --- a/dist/vdxf/parser.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { LoginConsentRequest, VerusPayInvoice } from "./classes"; -export declare function parseVdxfObjectString(str: string): LoginConsentRequest | VerusPayInvoice; diff --git a/dist/vdxf/parser.js b/dist/vdxf/parser.js deleted file mode 100644 index 29d4d306..00000000 --- a/dist/vdxf/parser.js +++ /dev/null @@ -1,44 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.parseVdxfObjectString = parseVdxfObjectString; -const base64url_1 = require("base64url"); -const classes_1 = require("./classes"); -const keys_1 = require("./keys"); -const bufferutils_1 = require("../utils/bufferutils"); -const vdxf_1 = require("../constants/vdxf"); -const address_1 = require("../utils/address"); -function parseVdxfObjectString(str) { - const isDeeplinkUri = str.includes("x-callback-url"); - if (isDeeplinkUri) { - const splitUri = str.split('x-callback-url/'); - const uriTail = splitUri[1]; - if (uriTail == null) - throw new Error("Failed to decode deeplink uri"); - const splitUriTail = uriTail.split('/'); - const deeplinkType = splitUriTail[0]; - if (deeplinkType == null) - throw new Error("Failed to parse deeplink type"); - if (deeplinkType === keys_1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid) { - return classes_1.LoginConsentRequest.fromWalletDeeplinkUri(str); - } - else if (deeplinkType === keys_1.VERUSPAY_INVOICE_VDXF_KEY.vdxfid) { - return classes_1.VerusPayInvoice.fromWalletDeeplinkUri(str); - } - else - throw new Error("Unrecognized vdxf object type " + deeplinkType); - } - else { - const objBuf = base64url_1.default.toBuffer(str); - const reader = new bufferutils_1.default.BufferReader(objBuf, 0); - const vdxfKeyBuf = reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH); - const vdxfKey = (0, address_1.toBase58Check)(vdxfKeyBuf, vdxf_1.I_ADDR_VERSION); - if (vdxfKey === keys_1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid) { - return classes_1.LoginConsentRequest.fromQrString(str); - } - else if (vdxfKey === keys_1.VERUSPAY_INVOICE_VDXF_KEY.vdxfid) { - return classes_1.VerusPayInvoice.fromQrString(str); - } - else - throw new Error("Unrecognized vdxf object type " + vdxfKey); - } -} diff --git a/dist/vdxf/scopes.d.ts b/dist/vdxf/scopes.d.ts deleted file mode 100644 index 0c3ccd41..00000000 --- a/dist/vdxf/scopes.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { VDXFKeyInterface } from "./keys"; -export declare const IDENTITY_VIEW: VDXFKeyInterface; -export declare const IDENTITY_AGREEMENT: VDXFKeyInterface; -export declare const ATTESTATION_READ_REQUEST: VDXFKeyInterface; -export declare const PROFILE_DATA_READ_REQUEST: VDXFKeyInterface; -export declare const ATTESTATION_RECEIVE_REQUEST: VDXFKeyInterface; diff --git a/dist/vdxf/scopes.js b/dist/vdxf/scopes.js deleted file mode 100644 index e2f1baa4..00000000 --- a/dist/vdxf/scopes.js +++ /dev/null @@ -1,45 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ATTESTATION_RECEIVE_REQUEST = exports.PROFILE_DATA_READ_REQUEST = exports.ATTESTATION_READ_REQUEST = exports.IDENTITY_AGREEMENT = exports.IDENTITY_VIEW = void 0; -exports.IDENTITY_VIEW = { - vdxfid: "iLUrA89mDKnwxZcMiPadfNB9TLp58A2TKU", - hash160result: "aeab47faa1b2bde2633a63b8284770a8e5c489ba", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.authentication.permission.read", - }, -}; -exports.IDENTITY_AGREEMENT = { - vdxfid: "i3fMEsmYzGbd8s7EM9uKZ28fUf9LZAMnEe", - hash160result: "894dae7e135484ccfad8924ad59dec9619110c02", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.authentication.permission.agree" - } -}; -exports.ATTESTATION_READ_REQUEST = { - vdxfid: "iNqLaiDJjcADGCvXcQZnPqwTqMXzQbDCFu", - hash160result: "fbd8fe825062b19a9bd26dc51b6f768828115ad4", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::identity.attestation.read" - } -}; -exports.PROFILE_DATA_READ_REQUEST = { - vdxfid: "iFYznrRxyHaoJZ91cFDSYGT4szETf4RLRV", - indexid: "xLP7Fes3pboTvj23TvsbWeybueFUatbQQh", - hash160result: "d3f2168aad438c6c6eab8f3384458cbebf027a84", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::profile.data.view" - } -}; -exports.ATTESTATION_RECEIVE_REQUEST = { - "vdxfid": "iQxHMa4cGQRMEVFchV7fah2JDqxjcgMAZK", - "indexid": "xVnPpNVh7ie1rf8eZAmpZ5YqFVykaYqC8E", - "hash160result": "b9af87a7313fff9976f29bc6abaffc1674899aeb", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.attestation.receive" - } -}; diff --git a/dist/vdxf/vdxfdatakeys.d.ts b/dist/vdxf/vdxfdatakeys.d.ts deleted file mode 100644 index c498c83d..00000000 --- a/dist/vdxf/vdxfdatakeys.d.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { VDXFKeyInterface } from "./keys"; -export declare const DataByteKeyName = "vrsc::data.type.byte"; -export declare const DataByteKey: VDXFKeyInterface; -export declare const DataInt16KeyName = "vrsc::data.type.int16"; -export declare const DataInt16Key: VDXFKeyInterface; -export declare const DataUint16KeyName = "vrsc::data.type.uint16"; -export declare const DataUint16Key: VDXFKeyInterface; -export declare const DataInt32KeyName = "vrsc::data.type.int32"; -export declare const DataInt32Key: VDXFKeyInterface; -export declare const DataUint32KeyName = "vrsc::data.type.uint32"; -export declare const DataUint32Key: VDXFKeyInterface; -export declare const DataInt64KeyName = "vrsc::data.type.int64"; -export declare const DataInt64Key: VDXFKeyInterface; -export declare const DataUint64KeyName = "vrsc::data.type.uint64"; -export declare const DataUint64Key: VDXFKeyInterface; -export declare const DataUint160KeyName = "vrsc::data.type.uint160"; -export declare const DataUint160Key: VDXFKeyInterface; -export declare const DataUint256KeyName = "vrsc::data.type.uint256"; -export declare const DataUint256Key: VDXFKeyInterface; -export declare const DataStringKeyName = "vrsc::data.type.string"; -export declare const DataStringKey: VDXFKeyInterface; -export declare const DataVectorKeyName = "vrsc::data.type.vector"; -export declare const DataVectorKey: VDXFKeyInterface; -export declare const DataByteVectorKeyName = "vrsc::data.type.bytevector"; -export declare const DataByteVectorKey: VDXFKeyInterface; -export declare const DataInt32VectorKeyName = "vrsc::data.type.int32vector"; -export declare const DataInt32VectorKey: VDXFKeyInterface; -export declare const DataInt64VectorKeyName = "vrsc::data.type.int64vector"; -export declare const DataInt64VectorKey: VDXFKeyInterface; -export declare const DataCurrencyMapKeyName = "vrsc::data.type.object.currencymap"; -export declare const DataCurrencyMapKey: VDXFKeyInterface; -export declare const DataRatingsKeyName = "vrsc::data.type.object.ratings"; -export declare const DataRatingsKey: VDXFKeyInterface; -export declare const DataURLKeyName = "vrsc::data.type.object.url"; -export declare const DataURLKey: VDXFKeyInterface; -export declare const DataTransferDestinationKeyName = "vrsc::data.type.object.transferdestination"; -export declare const DataTransferDestinationKey: VDXFKeyInterface; -export declare const UTXORefKeyName = "vrsc::data.type.object.utxoref"; -export declare const UTXORefKey: VDXFKeyInterface; -export declare const CrossChainDataRefKeyName = "vrsc::data.type.object.crosschaindataref"; -export declare const CrossChainDataRefKey: VDXFKeyInterface; -export declare const EncryptionDescriptorKeyName = "vrsc::data.type.encryptiondescriptor"; -export declare const EncryptionDescriptorKey: VDXFKeyInterface; -export declare const SaltedDataKeyName = "vrsc::data.type.salteddata"; -export declare const SaltedDataKey: VDXFKeyInterface; -export declare const DataDescriptorKeyName = "vrsc::data.type.object.datadescriptor"; -export declare const DataDescriptorKey: VDXFKeyInterface; -export declare const SignatureDataKeyName = "vrsc::data.signaturedata"; -export declare const SignatureDataKey: VDXFKeyInterface; -export declare const VectorUint256KeyName = "vrsc::data.mmrhashes"; -export declare const VectorUint256Key: VDXFKeyInterface; -export declare const MMRLinksKeyName = "vrsc::data.mmrlinks"; -export declare const MMRLinksKey: VDXFKeyInterface; -export declare const MMRDescriptorKeyName = "vrsc::data.mmrdescriptor"; -export declare const MMRDescriptorKey: VDXFKeyInterface; -export declare const TypeDefinitionKeyName = "vrsc::data.type.typedefinition"; -export declare const TypeDefinitionKey: VDXFKeyInterface; -export declare const MultiMapKeyName = "vrsc::identity.multimapkey"; -export declare const MultiMapKey: VDXFKeyInterface; -export declare const ContentMultiMapRemoveKeyName = "vrsc::identity.multimapremove"; -export declare const ContentMultiMapRemoveKey: VDXFKeyInterface; -export declare const ProfileMediaKeyName = "vrsc::identity.profile.media"; -export declare const ProfileMediaKey: VDXFKeyInterface; -export declare const ZMemoMessageKeyName = "vrsc::system.zmemo.message"; -export declare const ZMemoMessageKey: VDXFKeyInterface; -export declare const ZMemoSignatureKeyName = "vrsc::system.zmemo.signature"; -export declare const ZMemoSignatureKey: VDXFKeyInterface; -export declare const CurrencyStartNotarizationKeyName = "vrsc::system.currency.startnotarization"; -export declare const CurrencyStartNotarizationKey: VDXFKeyInterface; -export declare const EvidenceDataKeyName = "vrsc::system.crosschain.evidencedata"; -export declare const EvidenceDataKey: VDXFKeyInterface; -export declare const CredentialKeyName = "vrsc::data.type.object.credential"; -export declare const CredentialKey: VDXFKeyInterface; diff --git a/dist/vdxf/vdxfdatakeys.js b/dist/vdxf/vdxfdatakeys.js deleted file mode 100644 index 6ff5431c..00000000 --- a/dist/vdxf/vdxfdatakeys.js +++ /dev/null @@ -1,367 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VectorUint256Key = exports.VectorUint256KeyName = exports.SignatureDataKey = exports.SignatureDataKeyName = exports.DataDescriptorKey = exports.DataDescriptorKeyName = exports.SaltedDataKey = exports.SaltedDataKeyName = exports.EncryptionDescriptorKey = exports.EncryptionDescriptorKeyName = exports.CrossChainDataRefKey = exports.CrossChainDataRefKeyName = exports.UTXORefKey = exports.UTXORefKeyName = exports.DataTransferDestinationKey = exports.DataTransferDestinationKeyName = exports.DataURLKey = exports.DataURLKeyName = exports.DataRatingsKey = exports.DataRatingsKeyName = exports.DataCurrencyMapKey = exports.DataCurrencyMapKeyName = exports.DataInt64VectorKey = exports.DataInt64VectorKeyName = exports.DataInt32VectorKey = exports.DataInt32VectorKeyName = exports.DataByteVectorKey = exports.DataByteVectorKeyName = exports.DataVectorKey = exports.DataVectorKeyName = exports.DataStringKey = exports.DataStringKeyName = exports.DataUint256Key = exports.DataUint256KeyName = exports.DataUint160Key = exports.DataUint160KeyName = exports.DataUint64Key = exports.DataUint64KeyName = exports.DataInt64Key = exports.DataInt64KeyName = exports.DataUint32Key = exports.DataUint32KeyName = exports.DataInt32Key = exports.DataInt32KeyName = exports.DataUint16Key = exports.DataUint16KeyName = exports.DataInt16Key = exports.DataInt16KeyName = exports.DataByteKey = exports.DataByteKeyName = void 0; -exports.CredentialKey = exports.CredentialKeyName = exports.EvidenceDataKey = exports.EvidenceDataKeyName = exports.CurrencyStartNotarizationKey = exports.CurrencyStartNotarizationKeyName = exports.ZMemoSignatureKey = exports.ZMemoSignatureKeyName = exports.ZMemoMessageKey = exports.ZMemoMessageKeyName = exports.ProfileMediaKey = exports.ProfileMediaKeyName = exports.ContentMultiMapRemoveKey = exports.ContentMultiMapRemoveKeyName = exports.MultiMapKey = exports.MultiMapKeyName = exports.TypeDefinitionKey = exports.TypeDefinitionKeyName = exports.MMRDescriptorKey = exports.MMRDescriptorKeyName = exports.MMRLinksKey = exports.MMRLinksKeyName = void 0; -exports.DataByteKeyName = "vrsc::data.type.byte"; -exports.DataByteKey = { - "vdxfid": "iBXUHbh4iacbeZnzDRxishvBSrYk2S2k7t", - "indexid": "xGMakQ89ZtqGGjg257csr6SiUWZksGmjWp", - "hash160result": "2e97a8bba443773812341e1d761530d3bba04f58", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.byte" - } -}; -exports.DataInt16KeyName = "vrsc::data.type.int16"; -exports.DataInt16Key = { - "vdxfid": "iDtTv3wf1Vk3M2Y46RjLPKtttx5hydwtY1", - "indexid": "xJiaNrNjroxhyCR5x7PVMiRRvc6ipg6N9g", - "hash160result": "ee334ebd432db0b24cc2702eda61c28ff44d3872", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.int16" - } -}; -exports.DataUint16KeyName = "vrsc::data.type.uint16"; -exports.DataUint16Key = { - "vdxfid": "iHn7urT2yVfS7pQn6WGAmCVWh4HBLV24n3", - "indexid": "xNcENet7pot6jzHoxBvKjb23iiJCGpekDk", - "hash160result": "5cfc322d2a216145f7b82714115e7953269de59c", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.uint16" - } -}; -exports.DataInt32KeyName = "vrsc::data.type.int32"; -exports.DataInt32Key = { - "vdxfid": "iHpLPprRDv3H5H3ZMaJ9nyHFzkG9xJWZDb", - "indexid": "xNeSrdHW5EFwhSvbDFxJmMoo2QHAtoEaEM", - "hash160result": "3e9ba478b23b13232f28d21051d907ce8fdd509d", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.int32" - } -}; -exports.DataUint32KeyName = "vrsc::data.type.uint32"; -exports.DataUint32Key = { - "vdxfid": "iKSj5zhd6cSsLudaGhtfmisRNgEM7SPFWY", - "indexid": "xQGqYo8hwvfXy5Wc8PYpk7PxQLFMwfP7Fp", - "hash160result": "f279818aeb4fe768956b350d1fc7216ca0e82aaf", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.uint32" - } -}; -exports.DataInt64KeyName = "vrsc::data.type.int64"; -exports.DataInt64Key = { - "vdxfid": "iKB3TGi9Dg5HZ4nQAgLQAgp3tuXBaRKHpC", - "indexid": "xQ19v59E4zHxBEfS2MzZ95LavZYCTTeuyg", - "hash160result": "ab3705f8a7fae59786ef897b014df85fcd9533ac", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.int64" - } -}; -exports.DataUint64KeyName = "vrsc::data.type.uint64"; -exports.DataUint64Key = { - "vdxfid": "iPamkQf38AeGQ8z4zSsZL7t9kXMeUkYLJL", - "indexid": "xUQtDD67yUrw2Js6r8XiJWQgnBNfNeeoUq", - "hash160result": "bb2ae9ed3e9f400def0724937fbf65f23ef690dc", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.uint64" - } -}; -exports.DataUint160KeyName = "vrsc::data.type.uint160"; -exports.DataUint160Key = { - "vdxfid": "iAAwdbLyKYL39nJ1eQHaHtb75krg4mV1Lq", - "indexid": "xF146Pn4ArYhmxB3W5wjGH7e7Qsgx9bkpj", - "hash160result": "d97d2295d4c73f6f6f0697c8086bd822d6977549", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.uint160" - } -}; -exports.DataUint256KeyName = "vrsc::data.type.uint256"; -exports.DataUint256Key = { - "vdxfid": "i8k7g7z6grtGYrNZmZr5TQ872aHssXuuua", - "indexid": "xDaE8vRBYB6wB2FbdFWERnee4EJtjbCtMM", - "hash160result": "939b27bea698d180237c40b2194025acc673cb39", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.uint256" - } -}; -exports.DataStringKeyName = "vrsc::data.type.string"; -exports.DataStringKey = { - "vdxfid": "iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c", - "indexid": "xPwgY6oPdusaAgNK3u5yHCQG5NsHEcBpi5", - "hash160result": "e5c061641228a399169211e666de18448b7b8bab", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.string" - } -}; -// this is a key for a typed vector, which will have the object type key following the vector key -exports.DataVectorKeyName = "vrsc::data.type.vector"; -exports.DataVectorKey = { - "vdxfid": "iAEShwk1xjdGhaUSz3Maa2XR32o3vRuHq7", - "indexid": "xF4ZAkB6p3qwKkMUqj1jYR3x4gp4mGz657", - "hash160result": "503875b0dc301189a98927d3ece56c5f921c1f4a", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.vector" - } -}; -exports.DataByteVectorKeyName = "vrsc::data.type.bytevector"; -exports.DataByteVectorKey = { - "vdxfid": "iKMhRLX1JHQihVZx2t2pAWW2uzmK6AzwW3", - "indexid": "xQBot8x69bdPKfSytZgy8u2ZwenKzVjR4X", - "hash160result": "cc3ae6466006629f5105f71325bb2a19107037ae", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.bytevector" - } -}; -exports.DataInt32VectorKeyName = "vrsc::data.type.int32vector"; -exports.DataInt32VectorKey = { - "vdxfid": "iJZt2fcUv1iivbfC3tuPuefabcTppQEoVq", - "indexid": "xPPzVU3ZmKwPYmYDuaZYt3C7dGUqk939N7", - "hash160result": "c0847f3025c408059b5a8f6a9e414a8ed8288da5", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.int32vector" - } -}; -exports.DataInt64VectorKeyName = "vrsc::data.type.int64vector"; -exports.DataInt64VectorKey = { - "vdxfid": "i4qtYkFS9iNyu2AkqwoSn1xyCdfH9PUvak", - "indexid": "x9g11YgX12beXC3nhdTbkQVWEHgJ2jqfz1", - "hash160result": "c6219ea13884987453692cb14c72d5f6a47c020f", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.int64vector" - } -}; -exports.DataCurrencyMapKeyName = "vrsc::data.type.object.currencymap"; -exports.DataCurrencyMapKey = { - "vdxfid": "iMrGhzkZq5fpWWSa1RambRySFPb7CuvKuX", - "indexid": "xSgPAoBegPtV8gKbs7EvZpVyH3c858ZUvL", - "hash160result": "25db70c2fcae2571f89201181bec04587e1f8fc9", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.object.currencymap" - } -}; -exports.DataRatingsKeyName = "vrsc::data.type.object.ratings"; -exports.DataRatingsKey = { - "vdxfid": "iHJComZUXXGniLkDhjYprWYEN8qvQGDoam", - "indexid": "xN8KGZzZNqVTLWdFZRCypu4mPnrwHFKbCK", - "hash160result": "32cad57ff1dc5db4b5ba573ce01bc9c89b0d9e97", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.object.ratings" - } -}; -exports.DataURLKeyName = "vrsc::data.type.object.url"; -exports.DataURLKey = { - "vdxfid": "iJ7xdhJTJAvJubNnSJFXyA3jujzqGxjLuZ", - "indexid": "xNx56VjY9V8yXmFpHyugwYaGwQ1rCt6J9W", - "hash160result": "7748bfaf53dd2ff63ed5f73a41174c360f30a6a0", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.object.url" - } -}; -exports.DataTransferDestinationKeyName = "vrsc::data.type.object.transferdestination"; -exports.DataTransferDestinationKey = { - "vdxfid": "i91L6zwZQrkbNVMB1AZ1Z671qybexRmeVK", - "indexid": "xDqSZoNeGAyFzfECrrDAXUdYsdcfs3Zuku", - "hash160result": "92f38773849383146037b16a48ea350c1c11ac3c", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.object.transferdestination" - } -}; -exports.UTXORefKeyName = "vrsc::data.type.object.utxoref"; -exports.UTXORefKey = { - "vdxfid": "iNcKvh7mazaXptzHf85q6EtpFYFE7asKC1", - "indexid": "xTSSPVYrSJoCT4sKWojz4dRMHCGF3h9tM4", - "hash160result": "013e760f7451c289672993ea391ae643c21ce4d1", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.object.utxoref" - } -}; -exports.CrossChainDataRefKeyName = "vrsc::data.type.object.crosschaindataref"; -exports.CrossChainDataRefKey = { - "vdxfid": "iP3euVSzNcXUrLNHnQnR9G6q8jeYuGSxgw", - "indexid": "xTsmNHt5Dvk9UWFKe6Sa7edNAPfZmJVgLc", - "hash160result": "4d33e0aee0f648c7871b2661d1221b57c05aaed6", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.object.crosschaindataref" - } -}; -exports.EncryptionDescriptorKeyName = "vrsc::data.type.encryptiondescriptor"; -exports.EncryptionDescriptorKey = { - "vdxfid": "iHEEK8ipj58BeKZNWuaaR2tDR5RK2kmf9A", - "indexid": "xN4Lmw9uaPLrGVSQNbEjPRQkSjSKxsHUQu", - "hash160result": "8d021acc1b68335bd7d37b28ff773c138ea5dd96", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.encryptiondescriptor" - } -}; -exports.SaltedDataKeyName = "vrsc::data.type.salteddata"; -exports.SaltedDataKey = { - "vdxfid": "i92U1nLuLJkC44FZZ4Lq9zk4qW3HrWAWNo", - "indexid": "xDraUamzBcxrgE8bQjzz8PGbsA4JiFskTD", - "hash160result": "9e13510e01d0d03a7bc90d7a2ef32824f515e33c", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.salteddata" - } -}; -exports.DataDescriptorKeyName = "vrsc::data.type.object.datadescriptor"; -exports.DataDescriptorKey = { - "vdxfid": "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv", - "indexid": "x96JULhKLXEgCqPwUxTQGtAKhPK6Qh1iaW", - "hash160result": "4d4f12424ded2033a526a4e2a8835fc5b2eba208", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.object.datadescriptor" - } -}; -exports.SignatureDataKeyName = "vrsc::data.signaturedata"; -exports.SignatureDataKey = { - "vdxfid": "i7PcVF9wwPtQ6p6jDtCVpohX65pTZuP2ah", - "indexid": "xCDix3b2ni74iyym5ZreoCE47jqUTBFRAb", - "hash160result": "b48b359e9a00042cec64f7f66ac717d388a4f22a", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.signaturedata" - } -}; -exports.VectorUint256KeyName = "vrsc::data.mmrhashes"; -exports.VectorUint256Key = { - "vdxfid": "i9UgJ2WxGw95PKdoCXjpfnBShtP5gi9fxS", - "indexid": "xEJnkpx38FMk1VWq4DPyeAhyjYQ6X5Gsti", - "hash160result": "8c1afd59e904f6d2702699963abccbc6d326d841", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.mmrhashes" - } -}; -exports.MMRLinksKeyName = "vrsc::data.mmrlinks"; -exports.MMRLinksKey = { - "vdxfid": "iPQsnA1R8UjHNddZKZ3FxsuKQ5WzKqSC7w", - "indexid": "xUEzExSVynwwzoWbBEhQwGRrRjY1Bc2MYc", - "hash160result": "f535a4e9ac0f94eda01695d16489a4a102d6b1da", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.mmrlinks" - } -}; -exports.MMRDescriptorKeyName = "vrsc::data.mmrdescriptor"; -exports.MMRDescriptorKey = { - "vdxfid": "i9dVDb4LgfMYrZD1JBNP2uaso4bNAkT4Jr", - "indexid": "xETbgPVRXyaDUj639s2Y1J7QpicP4DvZMt", - "hash160result": "97273a4c02d6be002f8d69c3979616732ba68243", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.mmrdescriptor" - } -}; -exports.TypeDefinitionKeyName = "vrsc::data.type.typedefinition"; -exports.TypeDefinitionKey = { - "vdxfid": "iL5MPPHWXQEY3p2Q1UsmGDvXsgPiqd1W1S", - "indexid": "xQuTrBibNiTCfyuRsAXvEcT4uLQjhxrpyL", - "hash160result": "ae8d805d9650c0512a6b6ec33e963386542f18b6", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.typedefinition" - } -}; -exports.MultiMapKeyName = "vrsc::identity.multimapkey"; -exports.MultiMapKey = { - "vdxfid": "i3mbggp3NBR77C5JeFQJTpAxmgMidayLLE", - "indexid": "x8bi9VF8DVdmjMxLVw4TSChVoLNjUyapgs", - "hash160result": "6920bb81b420bc95e29a10ed677379b1e39e3a03", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.multimapkey" - } -}; -exports.ContentMultiMapRemoveKeyName = "vrsc::identity.multimapremove"; -exports.ContentMultiMapRemoveKey = { - "vdxfid": "i5Zkx5Z7tEfh42xtKfwbJ5LgEWE9rEgpFY", - "indexid": "xAPsQszCjYtMgCqvBMbkGTsDGAFAmrN33A", - "hash160result": "d393b986e4f82db7bec82d97b186882d739ded16", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.multimapremove" - } -}; -// for any ID, this key indexes content that applies to representing the profile of -// that ID. there may be many mime-type instances of a particular piece of profile media -exports.ProfileMediaKeyName = "vrsc::identity.profile.media"; -exports.ProfileMediaKey = { - "vdxfid": "iEYsp2njSt1M4EVYi9uuAPBU2wpKmThkkr", - "indexid": "xKNzGqDpJCE1gQNaZqa48mi14bqLaG669g", - "hash160result": "e95b2ee1abb130a93900ddaef2d8e528010f7c79", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::identity.profile.media" - } -}; -exports.ZMemoMessageKeyName = "vrsc::system.zmemo.message"; -exports.ZMemoMessageKey = { - "vdxfid": "iNHg1n828PUxktkYeNxC6sdVmuKTipn3L3", - "indexid": "xT7nUaZ6yhhdP4daW4cM5GA2oZLUaNVaBD", - "hash160result": "4a8f418203621f10d1a61701be8dbbbb38fa5cce", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::system.zmemo.message" - } -}; -exports.ZMemoSignatureKeyName = "vrsc::system.zmemo.signature"; -exports.ZMemoSignatureKey = { - "vdxfid": "i7mrLLjUfGYuHJwnsxFvd282hsdn4staJG", - "indexid": "xCbxo9AZWamZuUppjdv5bQeZjXeo1vbaCc", - "hash160result": "7b47c8cd90c4c3ddc542f37ca77473b7325a272f", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::system.zmemo.signature" - } -}; -exports.CurrencyStartNotarizationKeyName = "vrsc::system.currency.startnotarization"; -exports.CurrencyStartNotarizationKey = { - "vdxfid": "iRvxVcGLaCXcDiAfnQ5FfeBCo2AiBibAft", - "indexid": "xWm4xQhRRWkGqt3he5jQe2hjpgBj5C7Tj3", - "hash160result": "b537201ca6465976bea7bdb03119644a858052f6", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::system.currency.startnotarization" - } -}; -exports.EvidenceDataKeyName = "vrsc::system.crosschain.evidencedata"; -exports.EvidenceDataKey = { - "vdxfid": "i6ZGLNfqu4cQ3h98VHimETwnWtizMwCJw6", - "indexid": "xBPNoB6vkNq4fs2ALyNvCrUKYYk1FFK2fs", - "hash160result": "3dd00f6451974c99a3190f430cce5b788ddacd21", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::system.crosschain.evidencedata" - } -}; -exports.CredentialKeyName = "vrsc::data.type.object.credential"; -exports.CredentialKey = { - "vdxfid": "iDTG49YLqmkHMYRyuQBYgEyTByQwAzqGd6", - "indexid": "xJHNWwyRh5xwyiK1m5qhedVzDdRx3pe2c7", - "hash160result": "09fbc202710c9f2dacb87e5623e97e2e4101746d", - "qualifiedname": { - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - "name": "vrsc::data.type.object.credential" - } -}; From b30058fe1e1ee84f79defa5d390b85fb798efa14 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Mon, 1 Dec 2025 15:50:09 +0100 Subject: [PATCH 093/123] Re-add build files --- dist/api/ApiCommunication.d.ts | 4 + dist/api/ApiCommunication.js | 2 + dist/api/ApiPrimitive.d.ts | 11 + dist/api/ApiPrimitive.js | 2 + dist/api/ApiRequest.d.ts | 10 + dist/api/ApiRequest.js | 13 + dist/api/ApiResponse.d.ts | 7 + dist/api/ApiResponse.js | 12 + .../EstimateConversionRequest.d.ts | 17 + .../EstimateConversionRequest.js | 27 + .../EstimateConversionResponse.d.ts | 39 + .../EstimateConversionResponse.js | 7 + .../FundRawTransactionRequest.d.ts | 17 + .../FundRawTransactionRequest.js | 36 + .../FundRawTransactionResponse.d.ts | 8 + .../FundRawTransactionResponse.js | 7 + .../GetAddressBalanceRequest.d.ts | 15 + .../GetAddressBalanceRequest.js | 24 + .../GetAddressBalanceResponse.d.ts | 16 + .../GetAddressBalanceResponse.js | 7 + .../GetAddressDeltasRequest.d.ts | 18 + .../GetAddressDeltasRequest.js | 26 + .../GetAddressDeltasResponse.d.ts | 25 + .../GetAddressDeltasResponse.js | 7 + .../GetAddressMempoolRequest.d.ts | 18 + .../GetAddressMempoolRequest.js | 26 + .../GetAddressMempoolResponse.d.ts | 25 + .../GetAddressMempoolResponse.js | 7 + .../GetAddressUtxosRequest.d.ts | 15 + .../GetAddressUtxos/GetAddressUtxosRequest.js | 26 + .../GetAddressUtxosResponse.d.ts | 19 + .../GetAddressUtxosResponse.js | 7 + .../api/classes/GetBlock/GetBlockRequest.d.ts | 10 + dist/api/classes/GetBlock/GetBlockRequest.js | 30 + .../classes/GetBlock/GetBlockResponse.d.ts | 5 + dist/api/classes/GetBlock/GetBlockResponse.js | 7 + .../GetBlockCount/GetBlockCountRequest.d.ts | 8 + .../GetBlockCount/GetBlockCountRequest.js | 23 + .../GetBlockCount/GetBlockCountResponse.d.ts | 4 + .../GetBlockCount/GetBlockCountResponse.js | 7 + .../GetCurrency/GetCurrencyRequest.d.ts | 9 + .../classes/GetCurrency/GetCurrencyRequest.js | 27 + .../GetCurrency/GetCurrencyResponse.d.ts | 5 + .../GetCurrency/GetCurrencyResponse.js | 7 + .../GetCurrencyConvertersRequest.d.ts | 9 + .../GetCurrencyConvertersRequest.js | 24 + .../GetCurrencyConvertersResponse.d.ts | 7 + .../GetCurrencyConvertersResponse.js | 7 + .../GetIdentity/GetIdentityRequest.d.ts | 12 + .../classes/GetIdentity/GetIdentityRequest.js | 36 + .../GetIdentity/GetIdentityResponse.d.ts | 14 + .../GetIdentity/GetIdentityResponse.js | 7 + .../GetIdentityContentRequest.d.ts | 14 + .../GetIdentityContentRequest.js | 42 + dist/api/classes/GetInfo/GetInfoRequest.d.ts | 8 + dist/api/classes/GetInfo/GetInfoRequest.js | 22 + dist/api/classes/GetInfo/GetInfoResponse.d.ts | 40 + dist/api/classes/GetInfo/GetInfoResponse.js | 7 + .../classes/GetOffers/GetOffersRequest.d.ts | 11 + .../api/classes/GetOffers/GetOffersRequest.js | 33 + .../classes/GetOffers/GetOffersResponse.d.ts | 5 + .../classes/GetOffers/GetOffersResponse.js | 7 + .../GetRawTransactionRequest.d.ts | 10 + .../GetRawTransactionRequest.js | 27 + .../GetRawTransactionResponse.d.ts | 5 + .../GetRawTransactionResponse.js | 7 + .../classes/GetVdxfId/GetVdxfIdRequest.d.ts | 16 + .../api/classes/GetVdxfId/GetVdxfIdRequest.js | 30 + .../classes/GetVdxfId/GetVdxfIdResponse.d.ts | 16 + .../classes/GetVdxfId/GetVdxfIdResponse.js | 7 + .../ListCurrencies/ListCurrenciesRequest.d.ts | 18 + .../ListCurrencies/ListCurrenciesRequest.js | 35 + .../ListCurrenciesResponse.d.ts | 40 + .../ListCurrencies/ListCurrenciesResponse.js | 7 + .../classes/MakeOffer/MakeOfferRequest.d.ts | 13 + .../api/classes/MakeOffer/MakeOfferRequest.js | 36 + .../classes/MakeOffer/MakeOfferResponse.d.ts | 7 + .../classes/MakeOffer/MakeOfferResponse.js | 7 + .../SendCurrency/SendCurrencyRequest.d.ts | 30 + .../SendCurrency/SendCurrencyRequest.js | 42 + .../SendCurrency/SendCurrencyResponse.d.ts | 10 + .../SendCurrency/SendCurrencyResponse.js | 7 + .../SendRawTransactionRequest.d.ts | 10 + .../SendRawTransactionRequest.js | 30 + .../SendRawTransactionResponse.d.ts | 4 + .../SendRawTransactionResponse.js | 7 + .../api/classes/SignData/SignDataRequest.d.ts | 31 + dist/api/classes/SignData/SignDataRequest.js | 25 + .../classes/SignData/SignDataResponse.d.ts | 23 + dist/api/classes/SignData/SignDataResponse.js | 7 + .../SignMessage/SignMessageRequest.d.ts | 11 + .../classes/SignMessage/SignMessageRequest.js | 29 + .../SignMessage/SignMessageResponse.d.ts | 7 + .../SignMessage/SignMessageResponse.js | 7 + .../SignRawTransactionRequest.d.ts | 21 + .../SignRawTransactionRequest.js | 36 + .../SignRawTransactionResponse.d.ts | 14 + .../SignRawTransactionResponse.js | 7 + .../UpdateIdentity/UpdateIdentityRequest.d.ts | 14 + .../UpdateIdentity/UpdateIdentityRequest.js | 42 + .../UpdateIdentityResponse.d.ts | 4 + .../UpdateIdentity/UpdateIdentityResponse.js | 7 + .../VerifyMessage/VerifyMessageRequest.d.ts | 12 + .../VerifyMessage/VerifyMessageRequest.js | 31 + .../VerifyMessage/VerifyMessageResponse.d.ts | 4 + .../VerifyMessage/VerifyMessageResponse.js | 7 + .../ZGetOperationStatusRequest.d.ts | 9 + .../ZGetOperationStatusRequest.js | 27 + .../ZGetOperationStatusResponse.d.ts | 21 + .../ZGetOperationStatusResponse.js | 7 + dist/api/classes/index.d.ts | 54 + dist/api/classes/index.js | 106 ++ dist/block/BlockInfo.d.ts | 40 + dist/block/BlockInfo.js | 2 + dist/constants/cmds.d.ts | 26 + dist/constants/cmds.js | 29 + dist/constants/deeplink.d.ts | 2 + dist/constants/deeplink.js | 6 + dist/constants/ordinals/ordinals.d.ts | 15 + dist/constants/ordinals/ordinals.js | 19 + dist/constants/ordinals/register.d.ts | 1 + dist/constants/ordinals/register.js | 33 + dist/constants/ordinals/types.d.ts | 6 + dist/constants/ordinals/types.js | 2 + dist/constants/pbaas.d.ts | 29 + dist/constants/pbaas.js | 32 + dist/constants/vdxf.d.ts | 8 + dist/constants/vdxf.js | 16 + dist/constants/vdxf/veruspay.d.ts | 7 + dist/constants/vdxf/veruspay.js | 11 + dist/currency/CurrencyDefinition.d.ts | 93 + dist/currency/CurrencyDefinition.js | 2 + dist/identity/IdentityDefinition.d.ts | 21 + dist/identity/IdentityDefinition.js | 2 + dist/index.d.ts | 27 + dist/index.js | 45 + dist/offers/CurrencyOffering.d.ts | 4 + dist/offers/CurrencyOffering.js | 2 + dist/offers/CurrencyReceiving.d.ts | 5 + dist/offers/CurrencyReceiving.js | 2 + dist/offers/IdentityOffering.d.ts | 3 + dist/offers/IdentityOffering.js | 2 + dist/offers/OfferForMaking.d.ts | 10 + dist/offers/OfferForMaking.js | 2 + dist/offers/OfferList.d.ts | 24 + dist/offers/OfferList.js | 2 + dist/pbaas/ContentMultiMap.d.ts | 24 + dist/pbaas/ContentMultiMap.js | 161 ++ dist/pbaas/ContentMultiMapRemove.d.ts | 36 + dist/pbaas/ContentMultiMapRemove.js | 89 + dist/pbaas/Credential.d.ts | 41 + dist/pbaas/Credential.js | 127 ++ dist/pbaas/CrossChainDataRef.d.ts | 49 + dist/pbaas/CrossChainDataRef.js | 82 + dist/pbaas/CrossChainProof.d.ts | 42 + dist/pbaas/CrossChainProof.js | 116 ++ dist/pbaas/CurrencyValueMap.d.ts | 21 + dist/pbaas/CurrencyValueMap.js | 107 ++ dist/pbaas/DataDescriptor.d.ts | 92 + dist/pbaas/DataDescriptor.js | 335 ++++ dist/pbaas/DefinedKey.d.ts | 38 + dist/pbaas/DefinedKey.js | 99 + dist/pbaas/EvidenceData.d.ts | 60 + dist/pbaas/EvidenceData.js | 126 ++ dist/pbaas/Identity.d.ts | 101 + dist/pbaas/Identity.js | 410 ++++ dist/pbaas/IdentityID.d.ts | 7 + dist/pbaas/IdentityID.js | 19 + dist/pbaas/IdentityMultimapRef.d.ts | 38 + dist/pbaas/IdentityMultimapRef.js | 129 ++ dist/pbaas/KeyID.d.ts | 7 + dist/pbaas/KeyID.js | 19 + dist/pbaas/MMR.d.ts | 70 + dist/pbaas/MMR.js | 460 +++++ dist/pbaas/MMRDescriptor.d.ts | 39 + dist/pbaas/MMRDescriptor.js | 120 ++ dist/pbaas/NoDestination.d.ts | 6 + dist/pbaas/NoDestination.js | 13 + dist/pbaas/OptCCParams.d.ts | 29 + dist/pbaas/OptCCParams.js | 206 ++ dist/pbaas/PBaaSEvidenceRef.d.ts | 38 + dist/pbaas/PBaaSEvidenceRef.js | 97 + dist/pbaas/PartialIdentity.d.ts | 54 + dist/pbaas/PartialIdentity.js | 172 ++ dist/pbaas/PartialMMRData.d.ts | 62 + dist/pbaas/PartialMMRData.js | 333 ++++ dist/pbaas/PartialSignData.d.ts | 120 ++ dist/pbaas/PartialSignData.js | 518 ++++++ dist/pbaas/Principal.d.ts | 26 + dist/pbaas/Principal.js | 98 + dist/pbaas/PubKey.d.ts | 11 + dist/pbaas/PubKey.js | 29 + dist/pbaas/Rating.d.ts | 40 + dist/pbaas/Rating.js | 104 ++ dist/pbaas/ReserveTransfer.d.ts | 59 + dist/pbaas/ReserveTransfer.js | 154 ++ dist/pbaas/SaltedData.d.ts | 15 + dist/pbaas/SaltedData.js | 82 + dist/pbaas/SaplingExtendedSpendingKey.d.ts | 26 + dist/pbaas/SaplingExtendedSpendingKey.js | 65 + dist/pbaas/SaplingExtendedViewingKey.d.ts | 26 + dist/pbaas/SaplingExtendedViewingKey.js | 65 + dist/pbaas/SaplingPaymentAddress.d.ts | 14 + dist/pbaas/SaplingPaymentAddress.js | 42 + dist/pbaas/SignatureData.d.ts | 70 + dist/pbaas/SignatureData.js | 208 +++ dist/pbaas/TokenOutput.d.ts | 23 + dist/pbaas/TokenOutput.js | 63 + dist/pbaas/TransferDestination.d.ts | 56 + dist/pbaas/TransferDestination.js | 239 +++ dist/pbaas/TxDestination.d.ts | 32 + dist/pbaas/TxDestination.js | 110 ++ dist/pbaas/URLRef.d.ts | 36 + dist/pbaas/URLRef.js | 93 + dist/pbaas/UTXORef.d.ts | 22 + dist/pbaas/UTXORef.js | 47 + dist/pbaas/UnknownID.d.ts | 8 + dist/pbaas/UnknownID.js | 24 + dist/pbaas/VdxfUniValue.d.ts | 42 + dist/pbaas/VdxfUniValue.js | 604 ++++++ dist/pbaas/index.d.ts | 33 + dist/pbaas/index.js | 49 + dist/pbaas/transaction/IdentityScript.d.ts | 9 + dist/pbaas/transaction/IdentityScript.js | 93 + .../transaction/SmartTransactionScript.d.ts | 18 + .../transaction/SmartTransactionScript.js | 53 + dist/pbaas/transaction/VerusScript.d.ts | 10 + dist/pbaas/transaction/VerusScript.js | 26 + dist/transaction/RawTransaction.d.ts | 21 + dist/transaction/RawTransaction.js | 2 + dist/utils/IdentityData.d.ts | 440 +++++ dist/utils/IdentityData.js | 165 ++ dist/utils/address.d.ts | 15 + dist/utils/address.js | 270 +++ dist/utils/bufferutils.d.ts | 52 + dist/utils/bufferutils.js | 180 ++ dist/utils/cccustom.d.ts | 20 + dist/utils/cccustom.js | 23 + dist/utils/evals.d.ts | 24 + dist/utils/evals.js | 27 + dist/utils/hash.d.ts | 2 + dist/utils/hash.js | 18 + dist/utils/mmr.d.ts | 2 + dist/utils/mmr.js | 87 + dist/utils/numberConversion.d.ts | 14 + dist/utils/numberConversion.js | 47 + dist/utils/ops.d.ts | 122 ++ dist/utils/ops.js | 125 ++ dist/utils/pushdata.d.ts | 7 + dist/utils/pushdata.js | 89 + dist/utils/reverseops.d.ts | 2 + dist/utils/reverseops.js | 9 + dist/utils/sapling.d.ts | 39 + dist/utils/sapling.js | 141 ++ dist/utils/script.d.ts | 11 + dist/utils/script.js | 160 ++ dist/utils/string.d.ts | 3 + dist/utils/string.js | 22 + dist/utils/types/BigNumber.d.ts | 3 + dist/utils/types/BigNumber.js | 5 + dist/utils/types/DataDescriptor.d.ts | 11 + dist/utils/types/DataDescriptor.js | 2 + dist/utils/types/MmrDescriptor.d.ts | 9 + dist/utils/types/MmrDescriptor.js | 2 + dist/utils/types/SerializableEntity.d.ts | 10 + dist/utils/types/SerializableEntity.js | 2 + dist/utils/types/SignData.d.ts | 8 + dist/utils/types/SignData.js | 2 + dist/utils/types/Signature.d.ts | 9 + dist/utils/types/Signature.js | 2 + dist/utils/varint.d.ts | 15 + dist/utils/varint.js | 60 + dist/utils/varuint.d.ts | 21 + dist/utils/varuint.js | 115 ++ dist/vdxf/classes/Challenge.d.ts | 81 + dist/vdxf/classes/Challenge.js | 267 +++ dist/vdxf/classes/CompactAddressObject.d.ts | 59 + dist/vdxf/classes/CompactAddressObject.js | 141 ++ dist/vdxf/classes/Context.d.ts | 18 + dist/vdxf/classes/Context.js | 63 + dist/vdxf/classes/Decision.d.ts | 62 + dist/vdxf/classes/Decision.js | 113 ++ dist/vdxf/classes/Hash160.d.ts | 26 + dist/vdxf/classes/Hash160.js | 84 + dist/vdxf/classes/PersonalProfile.d.ts | 7 + dist/vdxf/classes/PersonalProfile.js | 13 + dist/vdxf/classes/Request.d.ts | 51 + dist/vdxf/classes/Request.js | 143 ++ dist/vdxf/classes/Response.d.ts | 61 + dist/vdxf/classes/Response.js | 104 ++ dist/vdxf/classes/ResponseURI.d.ts | 24 + dist/vdxf/classes/ResponseURI.js | 62 + dist/vdxf/classes/SaltedData.d.ts | 15 + dist/vdxf/classes/SaltedData.js | 81 + .../vdxf/classes/VerifiableSignatureData.d.ts | 92 + dist/vdxf/classes/VerifiableSignatureData.js | 324 ++++ .../vdxf/classes/Web/SignedSessionObject.d.ts | 43 + dist/vdxf/classes/Web/SignedSessionObject.js | 132 ++ .../classes/Web/SignedSessionObjectData.d.ts | 19 + .../classes/Web/SignedSessionObjectData.js | 67 + .../datapacket/DataPacketResponse.d.ts | 68 + .../classes/datapacket/DataPacketResponse.js | 112 ++ .../classes/envelope/GenericEnvelope.d.ts | 63 + dist/vdxf/classes/envelope/GenericEnvelope.js | 216 +++ .../IdentityUpdateRequestDetails.d.ts | 75 + .../identity/IdentityUpdateRequestDetails.js | 294 +++ .../IdentityUpdateResponseDetails.d.ts | 29 + .../identity/IdentityUpdateResponseDetails.js | 94 + dist/vdxf/classes/index.d.ts | 42 + dist/vdxf/classes/index.js | 75 + .../login/AuthenticationRequestDetails.d.ts | 72 + .../login/AuthenticationRequestDetails.js | 205 ++ .../login/AuthenticationResponseDetails.d.ts | 20 + .../login/AuthenticationResponseDetails.js | 54 + ...AppEncryptionRequestOrdinalVDXFObject.d.ts | 9 + .../AppEncryptionRequestOrdinalVDXFObject.js | 22 + ...ppEncryptionResponseOrdinalVDXFObject.d.ts | 9 + .../AppEncryptionResponseOrdinalVDXFObject.js | 22 + ...uthenticationRequestOrdinalVDXFObject.d.ts | 9 + .../AuthenticationRequestOrdinalVDXFObject.js | 22 + ...thenticationResponseOrdinalVDXFObject.d.ts | 9 + ...AuthenticationResponseOrdinalVDXFObject.js | 22 + .../DataDescriptorOrdinalVDXFObject.d.ts | 9 + .../DataDescriptorOrdinalVDXFObject.js | 22 + .../DataPacketResponseOrdinalVDXFObject.d.ts | 9 + .../DataPacketResponseOrdinalVDXFObject.js | 22 + ...dentityUpdateRequestOrdinalVDXFObject.d.ts | 9 + .../IdentityUpdateRequestOrdinalVDXFObject.js | 22 + ...entityUpdateResponseOrdinalVDXFObject.d.ts | 9 + ...IdentityUpdateResponseOrdinalVDXFObject.js | 22 + .../classes/ordinals/OrdinalVDXFObject.d.ts | 58 + .../classes/ordinals/OrdinalVDXFObject.js | 205 ++ .../ordinals/OrdinalVDXFObjectOrdinalMap.d.ts | 17 + .../ordinals/OrdinalVDXFObjectOrdinalMap.js | 44 + ...isionIdentityDetailsOrdinalVDXFObject.d.ts | 9 + ...ovisionIdentityDetailsOrdinalVDXFObject.js | 22 + .../SerializableEntityOrdinalVDXFObject.d.ts | 11 + .../SerializableEntityOrdinalVDXFObject.js | 26 + .../UserDataRequestOrdinalVDXFObject.d.ts | 9 + .../UserDataRequestOrdinalVDXFObject.js | 22 + ...ficDataPacketDetailsOrdinalVDXFObject.d.ts | 9 + ...cificDataPacketDetailsOrdinalVDXFObject.js | 22 + .../VerusPayInvoiceOrdinalVDXFObject.d.ts | 9 + .../VerusPayInvoiceOrdinalVDXFObject.js | 22 + dist/vdxf/classes/ordinals/index.d.ts | 15 + dist/vdxf/classes/ordinals/index.js | 33 + .../vdxf/classes/payment/VerusPayInvoice.d.ts | 42 + dist/vdxf/classes/payment/VerusPayInvoice.js | 167 ++ .../payment/VerusPayInvoiceDetails.d.ts | 84 + .../classes/payment/VerusPayInvoiceDetails.js | 262 +++ .../provisioning/ProvisioningChallenge.d.ts | 39 + .../provisioning/ProvisioningChallenge.js | 84 + .../provisioning/ProvisioningDecision.d.ts | 60 + .../provisioning/ProvisioningDecision.js | 69 + .../provisioning/ProvisioningRequest.d.ts | 45 + .../provisioning/ProvisioningRequest.js | 64 + .../provisioning/ProvisioningResponse.d.ts | 13 + .../provisioning/ProvisioningResponse.js | 28 + .../provisioning/ProvisioningResult.d.ts | 32 + .../provisioning/ProvisioningResult.js | 147 ++ dist/vdxf/classes/request/GenericRequest.d.ts | 34 + dist/vdxf/classes/request/GenericRequest.js | 100 + .../AppEncryptionRequestDetails.d.ts | 73 + .../AppEncryptionRequestDetails.js | 170 ++ .../ProvisionIdentityDetails.d.ts | 57 + .../ProvisionIdentityDetails.js | 146 ++ .../UserDataRequestDetails.d.ts | 88 + .../requestobjects/UserDataRequestDetails.js | 214 +++ .../UserSpecificDataPacketDetails.d.ts | 69 + .../UserSpecificDataPacketDetails.js | 195 ++ .../AppEncryptionResponseDetails.d.ts | 45 + .../response/AppEncryptionResponseDetails.js | 119 ++ .../classes/response/GenericResponse.d.ts | 33 + dist/vdxf/classes/response/GenericResponse.js | 83 + dist/vdxf/identitydatakeys.d.ts | 184 ++ dist/vdxf/identitydatakeys.js | 1653 +++++++++++++++++ dist/vdxf/index.d.ts | 103 + dist/vdxf/index.js | 240 +++ dist/vdxf/keymap.d.ts | 12 + dist/vdxf/keymap.js | 10 + dist/vdxf/keys.d.ts | 86 + dist/vdxf/keys.js | 626 +++++++ dist/vdxf/parser.d.ts | 2 + dist/vdxf/parser.js | 44 + dist/vdxf/scopes.d.ts | 6 + dist/vdxf/scopes.js | 45 + dist/vdxf/vdxfdatakeys.d.ts | 73 + dist/vdxf/vdxfdatakeys.js | 367 ++++ 388 files changed, 22777 insertions(+) create mode 100644 dist/api/ApiCommunication.d.ts create mode 100644 dist/api/ApiCommunication.js create mode 100644 dist/api/ApiPrimitive.d.ts create mode 100644 dist/api/ApiPrimitive.js create mode 100644 dist/api/ApiRequest.d.ts create mode 100644 dist/api/ApiRequest.js create mode 100644 dist/api/ApiResponse.d.ts create mode 100644 dist/api/ApiResponse.js create mode 100644 dist/api/classes/EstimateConversion/EstimateConversionRequest.d.ts create mode 100644 dist/api/classes/EstimateConversion/EstimateConversionRequest.js create mode 100644 dist/api/classes/EstimateConversion/EstimateConversionResponse.d.ts create mode 100644 dist/api/classes/EstimateConversion/EstimateConversionResponse.js create mode 100644 dist/api/classes/FundRawTransaction/FundRawTransactionRequest.d.ts create mode 100644 dist/api/classes/FundRawTransaction/FundRawTransactionRequest.js create mode 100644 dist/api/classes/FundRawTransaction/FundRawTransactionResponse.d.ts create mode 100644 dist/api/classes/FundRawTransaction/FundRawTransactionResponse.js create mode 100644 dist/api/classes/GetAddressBalance/GetAddressBalanceRequest.d.ts create mode 100644 dist/api/classes/GetAddressBalance/GetAddressBalanceRequest.js create mode 100644 dist/api/classes/GetAddressBalance/GetAddressBalanceResponse.d.ts create mode 100644 dist/api/classes/GetAddressBalance/GetAddressBalanceResponse.js create mode 100644 dist/api/classes/GetAddressDeltas/GetAddressDeltasRequest.d.ts create mode 100644 dist/api/classes/GetAddressDeltas/GetAddressDeltasRequest.js create mode 100644 dist/api/classes/GetAddressDeltas/GetAddressDeltasResponse.d.ts create mode 100644 dist/api/classes/GetAddressDeltas/GetAddressDeltasResponse.js create mode 100644 dist/api/classes/GetAddressMempool/GetAddressMempoolRequest.d.ts create mode 100644 dist/api/classes/GetAddressMempool/GetAddressMempoolRequest.js create mode 100644 dist/api/classes/GetAddressMempool/GetAddressMempoolResponse.d.ts create mode 100644 dist/api/classes/GetAddressMempool/GetAddressMempoolResponse.js create mode 100644 dist/api/classes/GetAddressUtxos/GetAddressUtxosRequest.d.ts create mode 100644 dist/api/classes/GetAddressUtxos/GetAddressUtxosRequest.js create mode 100644 dist/api/classes/GetAddressUtxos/GetAddressUtxosResponse.d.ts create mode 100644 dist/api/classes/GetAddressUtxos/GetAddressUtxosResponse.js create mode 100644 dist/api/classes/GetBlock/GetBlockRequest.d.ts create mode 100644 dist/api/classes/GetBlock/GetBlockRequest.js create mode 100644 dist/api/classes/GetBlock/GetBlockResponse.d.ts create mode 100644 dist/api/classes/GetBlock/GetBlockResponse.js create mode 100644 dist/api/classes/GetBlockCount/GetBlockCountRequest.d.ts create mode 100644 dist/api/classes/GetBlockCount/GetBlockCountRequest.js create mode 100644 dist/api/classes/GetBlockCount/GetBlockCountResponse.d.ts create mode 100644 dist/api/classes/GetBlockCount/GetBlockCountResponse.js create mode 100644 dist/api/classes/GetCurrency/GetCurrencyRequest.d.ts create mode 100644 dist/api/classes/GetCurrency/GetCurrencyRequest.js create mode 100644 dist/api/classes/GetCurrency/GetCurrencyResponse.d.ts create mode 100644 dist/api/classes/GetCurrency/GetCurrencyResponse.js create mode 100644 dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersRequest.d.ts create mode 100644 dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersRequest.js create mode 100644 dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersResponse.d.ts create mode 100644 dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersResponse.js create mode 100644 dist/api/classes/GetIdentity/GetIdentityRequest.d.ts create mode 100644 dist/api/classes/GetIdentity/GetIdentityRequest.js create mode 100644 dist/api/classes/GetIdentity/GetIdentityResponse.d.ts create mode 100644 dist/api/classes/GetIdentity/GetIdentityResponse.js create mode 100644 dist/api/classes/GetIdentityContent/GetIdentityContentRequest.d.ts create mode 100644 dist/api/classes/GetIdentityContent/GetIdentityContentRequest.js create mode 100644 dist/api/classes/GetInfo/GetInfoRequest.d.ts create mode 100644 dist/api/classes/GetInfo/GetInfoRequest.js create mode 100644 dist/api/classes/GetInfo/GetInfoResponse.d.ts create mode 100644 dist/api/classes/GetInfo/GetInfoResponse.js create mode 100644 dist/api/classes/GetOffers/GetOffersRequest.d.ts create mode 100644 dist/api/classes/GetOffers/GetOffersRequest.js create mode 100644 dist/api/classes/GetOffers/GetOffersResponse.d.ts create mode 100644 dist/api/classes/GetOffers/GetOffersResponse.js create mode 100644 dist/api/classes/GetRawTransaction/GetRawTransactionRequest.d.ts create mode 100644 dist/api/classes/GetRawTransaction/GetRawTransactionRequest.js create mode 100644 dist/api/classes/GetRawTransaction/GetRawTransactionResponse.d.ts create mode 100644 dist/api/classes/GetRawTransaction/GetRawTransactionResponse.js create mode 100644 dist/api/classes/GetVdxfId/GetVdxfIdRequest.d.ts create mode 100644 dist/api/classes/GetVdxfId/GetVdxfIdRequest.js create mode 100644 dist/api/classes/GetVdxfId/GetVdxfIdResponse.d.ts create mode 100644 dist/api/classes/GetVdxfId/GetVdxfIdResponse.js create mode 100644 dist/api/classes/ListCurrencies/ListCurrenciesRequest.d.ts create mode 100644 dist/api/classes/ListCurrencies/ListCurrenciesRequest.js create mode 100644 dist/api/classes/ListCurrencies/ListCurrenciesResponse.d.ts create mode 100644 dist/api/classes/ListCurrencies/ListCurrenciesResponse.js create mode 100644 dist/api/classes/MakeOffer/MakeOfferRequest.d.ts create mode 100644 dist/api/classes/MakeOffer/MakeOfferRequest.js create mode 100644 dist/api/classes/MakeOffer/MakeOfferResponse.d.ts create mode 100644 dist/api/classes/MakeOffer/MakeOfferResponse.js create mode 100644 dist/api/classes/SendCurrency/SendCurrencyRequest.d.ts create mode 100644 dist/api/classes/SendCurrency/SendCurrencyRequest.js create mode 100644 dist/api/classes/SendCurrency/SendCurrencyResponse.d.ts create mode 100644 dist/api/classes/SendCurrency/SendCurrencyResponse.js create mode 100644 dist/api/classes/SendRawTransaction/SendRawTransactionRequest.d.ts create mode 100644 dist/api/classes/SendRawTransaction/SendRawTransactionRequest.js create mode 100644 dist/api/classes/SendRawTransaction/SendRawTransactionResponse.d.ts create mode 100644 dist/api/classes/SendRawTransaction/SendRawTransactionResponse.js create mode 100644 dist/api/classes/SignData/SignDataRequest.d.ts create mode 100644 dist/api/classes/SignData/SignDataRequest.js create mode 100644 dist/api/classes/SignData/SignDataResponse.d.ts create mode 100644 dist/api/classes/SignData/SignDataResponse.js create mode 100644 dist/api/classes/SignMessage/SignMessageRequest.d.ts create mode 100644 dist/api/classes/SignMessage/SignMessageRequest.js create mode 100644 dist/api/classes/SignMessage/SignMessageResponse.d.ts create mode 100644 dist/api/classes/SignMessage/SignMessageResponse.js create mode 100644 dist/api/classes/SignRawTransaction/SignRawTransactionRequest.d.ts create mode 100644 dist/api/classes/SignRawTransaction/SignRawTransactionRequest.js create mode 100644 dist/api/classes/SignRawTransaction/SignRawTransactionResponse.d.ts create mode 100644 dist/api/classes/SignRawTransaction/SignRawTransactionResponse.js create mode 100644 dist/api/classes/UpdateIdentity/UpdateIdentityRequest.d.ts create mode 100644 dist/api/classes/UpdateIdentity/UpdateIdentityRequest.js create mode 100644 dist/api/classes/UpdateIdentity/UpdateIdentityResponse.d.ts create mode 100644 dist/api/classes/UpdateIdentity/UpdateIdentityResponse.js create mode 100644 dist/api/classes/VerifyMessage/VerifyMessageRequest.d.ts create mode 100644 dist/api/classes/VerifyMessage/VerifyMessageRequest.js create mode 100644 dist/api/classes/VerifyMessage/VerifyMessageResponse.d.ts create mode 100644 dist/api/classes/VerifyMessage/VerifyMessageResponse.js create mode 100644 dist/api/classes/ZGetOperationStatus/ZGetOperationStatusRequest.d.ts create mode 100644 dist/api/classes/ZGetOperationStatus/ZGetOperationStatusRequest.js create mode 100644 dist/api/classes/ZGetOperationStatus/ZGetOperationStatusResponse.d.ts create mode 100644 dist/api/classes/ZGetOperationStatus/ZGetOperationStatusResponse.js create mode 100644 dist/api/classes/index.d.ts create mode 100644 dist/api/classes/index.js create mode 100644 dist/block/BlockInfo.d.ts create mode 100644 dist/block/BlockInfo.js create mode 100644 dist/constants/cmds.d.ts create mode 100644 dist/constants/cmds.js create mode 100644 dist/constants/deeplink.d.ts create mode 100644 dist/constants/deeplink.js create mode 100644 dist/constants/ordinals/ordinals.d.ts create mode 100644 dist/constants/ordinals/ordinals.js create mode 100644 dist/constants/ordinals/register.d.ts create mode 100644 dist/constants/ordinals/register.js create mode 100644 dist/constants/ordinals/types.d.ts create mode 100644 dist/constants/ordinals/types.js create mode 100644 dist/constants/pbaas.d.ts create mode 100644 dist/constants/pbaas.js create mode 100644 dist/constants/vdxf.d.ts create mode 100644 dist/constants/vdxf.js create mode 100644 dist/constants/vdxf/veruspay.d.ts create mode 100644 dist/constants/vdxf/veruspay.js create mode 100644 dist/currency/CurrencyDefinition.d.ts create mode 100644 dist/currency/CurrencyDefinition.js create mode 100644 dist/identity/IdentityDefinition.d.ts create mode 100644 dist/identity/IdentityDefinition.js create mode 100644 dist/index.d.ts create mode 100644 dist/index.js create mode 100644 dist/offers/CurrencyOffering.d.ts create mode 100644 dist/offers/CurrencyOffering.js create mode 100644 dist/offers/CurrencyReceiving.d.ts create mode 100644 dist/offers/CurrencyReceiving.js create mode 100644 dist/offers/IdentityOffering.d.ts create mode 100644 dist/offers/IdentityOffering.js create mode 100644 dist/offers/OfferForMaking.d.ts create mode 100644 dist/offers/OfferForMaking.js create mode 100644 dist/offers/OfferList.d.ts create mode 100644 dist/offers/OfferList.js create mode 100644 dist/pbaas/ContentMultiMap.d.ts create mode 100644 dist/pbaas/ContentMultiMap.js create mode 100644 dist/pbaas/ContentMultiMapRemove.d.ts create mode 100644 dist/pbaas/ContentMultiMapRemove.js create mode 100644 dist/pbaas/Credential.d.ts create mode 100644 dist/pbaas/Credential.js create mode 100644 dist/pbaas/CrossChainDataRef.d.ts create mode 100644 dist/pbaas/CrossChainDataRef.js create mode 100644 dist/pbaas/CrossChainProof.d.ts create mode 100644 dist/pbaas/CrossChainProof.js create mode 100644 dist/pbaas/CurrencyValueMap.d.ts create mode 100644 dist/pbaas/CurrencyValueMap.js create mode 100644 dist/pbaas/DataDescriptor.d.ts create mode 100644 dist/pbaas/DataDescriptor.js create mode 100644 dist/pbaas/DefinedKey.d.ts create mode 100644 dist/pbaas/DefinedKey.js create mode 100644 dist/pbaas/EvidenceData.d.ts create mode 100644 dist/pbaas/EvidenceData.js create mode 100644 dist/pbaas/Identity.d.ts create mode 100644 dist/pbaas/Identity.js create mode 100644 dist/pbaas/IdentityID.d.ts create mode 100644 dist/pbaas/IdentityID.js create mode 100644 dist/pbaas/IdentityMultimapRef.d.ts create mode 100644 dist/pbaas/IdentityMultimapRef.js create mode 100644 dist/pbaas/KeyID.d.ts create mode 100644 dist/pbaas/KeyID.js create mode 100644 dist/pbaas/MMR.d.ts create mode 100644 dist/pbaas/MMR.js create mode 100644 dist/pbaas/MMRDescriptor.d.ts create mode 100644 dist/pbaas/MMRDescriptor.js create mode 100644 dist/pbaas/NoDestination.d.ts create mode 100644 dist/pbaas/NoDestination.js create mode 100644 dist/pbaas/OptCCParams.d.ts create mode 100644 dist/pbaas/OptCCParams.js create mode 100644 dist/pbaas/PBaaSEvidenceRef.d.ts create mode 100644 dist/pbaas/PBaaSEvidenceRef.js create mode 100644 dist/pbaas/PartialIdentity.d.ts create mode 100644 dist/pbaas/PartialIdentity.js create mode 100644 dist/pbaas/PartialMMRData.d.ts create mode 100644 dist/pbaas/PartialMMRData.js create mode 100644 dist/pbaas/PartialSignData.d.ts create mode 100644 dist/pbaas/PartialSignData.js create mode 100644 dist/pbaas/Principal.d.ts create mode 100644 dist/pbaas/Principal.js create mode 100644 dist/pbaas/PubKey.d.ts create mode 100644 dist/pbaas/PubKey.js create mode 100644 dist/pbaas/Rating.d.ts create mode 100644 dist/pbaas/Rating.js create mode 100644 dist/pbaas/ReserveTransfer.d.ts create mode 100644 dist/pbaas/ReserveTransfer.js create mode 100644 dist/pbaas/SaltedData.d.ts create mode 100644 dist/pbaas/SaltedData.js create mode 100644 dist/pbaas/SaplingExtendedSpendingKey.d.ts create mode 100644 dist/pbaas/SaplingExtendedSpendingKey.js create mode 100644 dist/pbaas/SaplingExtendedViewingKey.d.ts create mode 100644 dist/pbaas/SaplingExtendedViewingKey.js create mode 100644 dist/pbaas/SaplingPaymentAddress.d.ts create mode 100644 dist/pbaas/SaplingPaymentAddress.js create mode 100644 dist/pbaas/SignatureData.d.ts create mode 100644 dist/pbaas/SignatureData.js create mode 100644 dist/pbaas/TokenOutput.d.ts create mode 100644 dist/pbaas/TokenOutput.js create mode 100644 dist/pbaas/TransferDestination.d.ts create mode 100644 dist/pbaas/TransferDestination.js create mode 100644 dist/pbaas/TxDestination.d.ts create mode 100644 dist/pbaas/TxDestination.js create mode 100644 dist/pbaas/URLRef.d.ts create mode 100644 dist/pbaas/URLRef.js create mode 100644 dist/pbaas/UTXORef.d.ts create mode 100644 dist/pbaas/UTXORef.js create mode 100644 dist/pbaas/UnknownID.d.ts create mode 100644 dist/pbaas/UnknownID.js create mode 100644 dist/pbaas/VdxfUniValue.d.ts create mode 100644 dist/pbaas/VdxfUniValue.js create mode 100644 dist/pbaas/index.d.ts create mode 100644 dist/pbaas/index.js create mode 100644 dist/pbaas/transaction/IdentityScript.d.ts create mode 100644 dist/pbaas/transaction/IdentityScript.js create mode 100644 dist/pbaas/transaction/SmartTransactionScript.d.ts create mode 100644 dist/pbaas/transaction/SmartTransactionScript.js create mode 100644 dist/pbaas/transaction/VerusScript.d.ts create mode 100644 dist/pbaas/transaction/VerusScript.js create mode 100644 dist/transaction/RawTransaction.d.ts create mode 100644 dist/transaction/RawTransaction.js create mode 100644 dist/utils/IdentityData.d.ts create mode 100644 dist/utils/IdentityData.js create mode 100644 dist/utils/address.d.ts create mode 100644 dist/utils/address.js create mode 100644 dist/utils/bufferutils.d.ts create mode 100644 dist/utils/bufferutils.js create mode 100644 dist/utils/cccustom.d.ts create mode 100644 dist/utils/cccustom.js create mode 100644 dist/utils/evals.d.ts create mode 100644 dist/utils/evals.js create mode 100644 dist/utils/hash.d.ts create mode 100644 dist/utils/hash.js create mode 100644 dist/utils/mmr.d.ts create mode 100644 dist/utils/mmr.js create mode 100644 dist/utils/numberConversion.d.ts create mode 100644 dist/utils/numberConversion.js create mode 100644 dist/utils/ops.d.ts create mode 100644 dist/utils/ops.js create mode 100644 dist/utils/pushdata.d.ts create mode 100644 dist/utils/pushdata.js create mode 100644 dist/utils/reverseops.d.ts create mode 100644 dist/utils/reverseops.js create mode 100644 dist/utils/sapling.d.ts create mode 100644 dist/utils/sapling.js create mode 100644 dist/utils/script.d.ts create mode 100644 dist/utils/script.js create mode 100644 dist/utils/string.d.ts create mode 100644 dist/utils/string.js create mode 100644 dist/utils/types/BigNumber.d.ts create mode 100644 dist/utils/types/BigNumber.js create mode 100644 dist/utils/types/DataDescriptor.d.ts create mode 100644 dist/utils/types/DataDescriptor.js create mode 100644 dist/utils/types/MmrDescriptor.d.ts create mode 100644 dist/utils/types/MmrDescriptor.js create mode 100644 dist/utils/types/SerializableEntity.d.ts create mode 100644 dist/utils/types/SerializableEntity.js create mode 100644 dist/utils/types/SignData.d.ts create mode 100644 dist/utils/types/SignData.js create mode 100644 dist/utils/types/Signature.d.ts create mode 100644 dist/utils/types/Signature.js create mode 100644 dist/utils/varint.d.ts create mode 100644 dist/utils/varint.js create mode 100644 dist/utils/varuint.d.ts create mode 100644 dist/utils/varuint.js create mode 100644 dist/vdxf/classes/Challenge.d.ts create mode 100644 dist/vdxf/classes/Challenge.js create mode 100644 dist/vdxf/classes/CompactAddressObject.d.ts create mode 100644 dist/vdxf/classes/CompactAddressObject.js create mode 100644 dist/vdxf/classes/Context.d.ts create mode 100644 dist/vdxf/classes/Context.js create mode 100644 dist/vdxf/classes/Decision.d.ts create mode 100644 dist/vdxf/classes/Decision.js create mode 100644 dist/vdxf/classes/Hash160.d.ts create mode 100644 dist/vdxf/classes/Hash160.js create mode 100644 dist/vdxf/classes/PersonalProfile.d.ts create mode 100644 dist/vdxf/classes/PersonalProfile.js create mode 100644 dist/vdxf/classes/Request.d.ts create mode 100644 dist/vdxf/classes/Request.js create mode 100644 dist/vdxf/classes/Response.d.ts create mode 100644 dist/vdxf/classes/Response.js create mode 100644 dist/vdxf/classes/ResponseURI.d.ts create mode 100644 dist/vdxf/classes/ResponseURI.js create mode 100644 dist/vdxf/classes/SaltedData.d.ts create mode 100644 dist/vdxf/classes/SaltedData.js create mode 100644 dist/vdxf/classes/VerifiableSignatureData.d.ts create mode 100644 dist/vdxf/classes/VerifiableSignatureData.js create mode 100644 dist/vdxf/classes/Web/SignedSessionObject.d.ts create mode 100644 dist/vdxf/classes/Web/SignedSessionObject.js create mode 100644 dist/vdxf/classes/Web/SignedSessionObjectData.d.ts create mode 100644 dist/vdxf/classes/Web/SignedSessionObjectData.js create mode 100644 dist/vdxf/classes/datapacket/DataPacketResponse.d.ts create mode 100644 dist/vdxf/classes/datapacket/DataPacketResponse.js create mode 100644 dist/vdxf/classes/envelope/GenericEnvelope.d.ts create mode 100644 dist/vdxf/classes/envelope/GenericEnvelope.js create mode 100644 dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts create mode 100644 dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js create mode 100644 dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts create mode 100644 dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js create mode 100644 dist/vdxf/classes/index.d.ts create mode 100644 dist/vdxf/classes/index.js create mode 100644 dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts create mode 100644 dist/vdxf/classes/login/AuthenticationRequestDetails.js create mode 100644 dist/vdxf/classes/login/AuthenticationResponseDetails.d.ts create mode 100644 dist/vdxf/classes/login/AuthenticationResponseDetails.js create mode 100644 dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.js create mode 100644 dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.js create mode 100644 dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVDXFObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVDXFObject.js create mode 100644 dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVDXFObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVDXFObject.js create mode 100644 dist/vdxf/classes/ordinals/DataDescriptorOrdinalVDXFObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/DataDescriptorOrdinalVDXFObject.js create mode 100644 dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVDXFObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVDXFObject.js create mode 100644 dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVDXFObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVDXFObject.js create mode 100644 dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVDXFObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVDXFObject.js create mode 100644 dist/vdxf/classes/ordinals/OrdinalVDXFObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/OrdinalVDXFObject.js create mode 100644 dist/vdxf/classes/ordinals/OrdinalVDXFObjectOrdinalMap.d.ts create mode 100644 dist/vdxf/classes/ordinals/OrdinalVDXFObjectOrdinalMap.js create mode 100644 dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVDXFObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVDXFObject.js create mode 100644 dist/vdxf/classes/ordinals/SerializableEntityOrdinalVDXFObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/SerializableEntityOrdinalVDXFObject.js create mode 100644 dist/vdxf/classes/ordinals/UserDataRequestOrdinalVDXFObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/UserDataRequestOrdinalVDXFObject.js create mode 100644 dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVDXFObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVDXFObject.js create mode 100644 dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVDXFObject.d.ts create mode 100644 dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVDXFObject.js create mode 100644 dist/vdxf/classes/ordinals/index.d.ts create mode 100644 dist/vdxf/classes/ordinals/index.js create mode 100644 dist/vdxf/classes/payment/VerusPayInvoice.d.ts create mode 100644 dist/vdxf/classes/payment/VerusPayInvoice.js create mode 100644 dist/vdxf/classes/payment/VerusPayInvoiceDetails.d.ts create mode 100644 dist/vdxf/classes/payment/VerusPayInvoiceDetails.js create mode 100644 dist/vdxf/classes/provisioning/ProvisioningChallenge.d.ts create mode 100644 dist/vdxf/classes/provisioning/ProvisioningChallenge.js create mode 100644 dist/vdxf/classes/provisioning/ProvisioningDecision.d.ts create mode 100644 dist/vdxf/classes/provisioning/ProvisioningDecision.js create mode 100644 dist/vdxf/classes/provisioning/ProvisioningRequest.d.ts create mode 100644 dist/vdxf/classes/provisioning/ProvisioningRequest.js create mode 100644 dist/vdxf/classes/provisioning/ProvisioningResponse.d.ts create mode 100644 dist/vdxf/classes/provisioning/ProvisioningResponse.js create mode 100644 dist/vdxf/classes/provisioning/ProvisioningResult.d.ts create mode 100644 dist/vdxf/classes/provisioning/ProvisioningResult.js create mode 100644 dist/vdxf/classes/request/GenericRequest.d.ts create mode 100644 dist/vdxf/classes/request/GenericRequest.js create mode 100644 dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts create mode 100644 dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js create mode 100644 dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts create mode 100644 dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js create mode 100644 dist/vdxf/classes/requestobjects/UserDataRequestDetails.d.ts create mode 100644 dist/vdxf/classes/requestobjects/UserDataRequestDetails.js create mode 100644 dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.d.ts create mode 100644 dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.js create mode 100644 dist/vdxf/classes/response/AppEncryptionResponseDetails.d.ts create mode 100644 dist/vdxf/classes/response/AppEncryptionResponseDetails.js create mode 100644 dist/vdxf/classes/response/GenericResponse.d.ts create mode 100644 dist/vdxf/classes/response/GenericResponse.js create mode 100644 dist/vdxf/identitydatakeys.d.ts create mode 100644 dist/vdxf/identitydatakeys.js create mode 100644 dist/vdxf/index.d.ts create mode 100644 dist/vdxf/index.js create mode 100644 dist/vdxf/keymap.d.ts create mode 100644 dist/vdxf/keymap.js create mode 100644 dist/vdxf/keys.d.ts create mode 100644 dist/vdxf/keys.js create mode 100644 dist/vdxf/parser.d.ts create mode 100644 dist/vdxf/parser.js create mode 100644 dist/vdxf/scopes.d.ts create mode 100644 dist/vdxf/scopes.js create mode 100644 dist/vdxf/vdxfdatakeys.d.ts create mode 100644 dist/vdxf/vdxfdatakeys.js diff --git a/dist/api/ApiCommunication.d.ts b/dist/api/ApiCommunication.d.ts new file mode 100644 index 00000000..d42f96e9 --- /dev/null +++ b/dist/api/ApiCommunication.d.ts @@ -0,0 +1,4 @@ +import { ApiPrimitive } from "./ApiPrimitive"; +export interface ApiCommunication { + toJson: () => ApiPrimitive; +} diff --git a/dist/api/ApiCommunication.js b/dist/api/ApiCommunication.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/api/ApiCommunication.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/api/ApiPrimitive.d.ts b/dist/api/ApiPrimitive.d.ts new file mode 100644 index 00000000..6e87a8e5 --- /dev/null +++ b/dist/api/ApiPrimitive.d.ts @@ -0,0 +1,11 @@ +import { BlockInfo } from "../block/BlockInfo"; +import { IdentityDefinition } from "../identity/IdentityDefinition"; +import { OfferForMaking } from "../offers/OfferForMaking"; +import { ListedOffer } from "../offers/OfferList"; +import { RawTransaction } from "../transaction/RawTransaction"; +import { SignDataArgs } from "./classes/SignData/SignDataRequest"; +export type ApiPrimitive = string | number | boolean | null | OfferForMaking | ApiPrimitiveJson | ListedOffer | Array | IdentityDefinition | BlockInfo | RawTransaction | SignDataArgs; +export type ApiPrimitiveJson = { + [key: string]: ApiPrimitive | undefined; +}; +export type RequestParams = Array; diff --git a/dist/api/ApiPrimitive.js b/dist/api/ApiPrimitive.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/api/ApiPrimitive.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/api/ApiRequest.d.ts b/dist/api/ApiRequest.d.ts new file mode 100644 index 00000000..e7256bc6 --- /dev/null +++ b/dist/api/ApiRequest.d.ts @@ -0,0 +1,10 @@ +import { ApiCommunication } from "./ApiCommunication"; +import { ApiPrimitiveJson, RequestParams } from "./ApiPrimitive"; +export declare abstract class ApiRequest implements ApiCommunication { + chain: string; + cmd: string; + abstract getParams(): RequestParams; + abstract toJson(): ApiPrimitiveJson; + constructor(chain: string, cmd: string); + prepare(): [string, string, RequestParams]; +} diff --git a/dist/api/ApiRequest.js b/dist/api/ApiRequest.js new file mode 100644 index 00000000..6f7e69e2 --- /dev/null +++ b/dist/api/ApiRequest.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiRequest = void 0; +class ApiRequest { + constructor(chain, cmd) { + this.chain = chain; + this.cmd = cmd; + } + prepare() { + return [this.chain, this.cmd, this.getParams()]; + } +} +exports.ApiRequest = ApiRequest; diff --git a/dist/api/ApiResponse.d.ts b/dist/api/ApiResponse.d.ts new file mode 100644 index 00000000..27688085 --- /dev/null +++ b/dist/api/ApiResponse.d.ts @@ -0,0 +1,7 @@ +import { ApiCommunication } from "./ApiCommunication"; +import { ApiPrimitive } from "./ApiPrimitive"; +export declare class ApiResponse implements ApiCommunication { + result: ApiPrimitive; + constructor(result: any); + toJson(): ApiPrimitive; +} diff --git a/dist/api/ApiResponse.js b/dist/api/ApiResponse.js new file mode 100644 index 00000000..bb1d6fbe --- /dev/null +++ b/dist/api/ApiResponse.js @@ -0,0 +1,12 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApiResponse = void 0; +class ApiResponse { + constructor(result) { + this.result = result; + } + toJson() { + return this.result; + } +} +exports.ApiResponse = ApiResponse; diff --git a/dist/api/classes/EstimateConversion/EstimateConversionRequest.d.ts b/dist/api/classes/EstimateConversion/EstimateConversionRequest.d.ts new file mode 100644 index 00000000..b41e4d32 --- /dev/null +++ b/dist/api/classes/EstimateConversion/EstimateConversionRequest.d.ts @@ -0,0 +1,17 @@ +import { ApiRequest } from "../../ApiRequest"; +import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; +type Output = { + currency: string; + amount: number; + convertto: string; + preconvert?: boolean; + via?: string; +}; +export declare class EstimateConversionRequest extends ApiRequest { + output: Output; + constructor(chain: string, output: Output); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): EstimateConversionRequest; + toJson(): ApiPrimitiveJson; +} +export {}; diff --git a/dist/api/classes/EstimateConversion/EstimateConversionRequest.js b/dist/api/classes/EstimateConversion/EstimateConversionRequest.js new file mode 100644 index 00000000..80d050c7 --- /dev/null +++ b/dist/api/classes/EstimateConversion/EstimateConversionRequest.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.EstimateConversionRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class EstimateConversionRequest extends ApiRequest_1.ApiRequest { + constructor(chain, output) { + super(chain, cmds_1.ESTIMATE_CONVERSION); + this.output = output; + } + getParams() { + const params = [ + this.output + ]; + return params; + } + static fromJson(object) { + return new EstimateConversionRequest(object.chain, object.output); + } + toJson() { + return { + chain: this.chain, + output: this.output + }; + } +} +exports.EstimateConversionRequest = EstimateConversionRequest; diff --git a/dist/api/classes/EstimateConversion/EstimateConversionResponse.d.ts b/dist/api/classes/EstimateConversion/EstimateConversionResponse.d.ts new file mode 100644 index 00000000..3ed568e2 --- /dev/null +++ b/dist/api/classes/EstimateConversion/EstimateConversionResponse.d.ts @@ -0,0 +1,39 @@ +import { ApiResponse } from "../../ApiResponse"; +export declare class EstimateConversionResponse extends ApiResponse { + result: { + estimatedcurrencyout: number; + inputcurrencyid: string; + netinputamount: number; + outputcurrencyid: string; + estimatedcurrencystate: { + currencies: { + [currencyid: string]: { + conversionfees: number; + fees: number; + lastconversionprice: number; + primarycurrencyin: number; + priorweights: number; + reservein: number; + reserveout: number; + viaconversionprice: number; + }; + }; + currencyid: string; + emitted: number; + flags: number; + initialsupply: number; + preconvertedout: number; + primarycurrencyconversionfees: number; + primarycurrencyfees: number; + primarycurrencyout: number; + reservecurrencies: Array<{ + currencyid: string; + priceinreserve: number; + reserves: number; + weight: number; + }>; + supply: number; + version: number; + }; + }; +} diff --git a/dist/api/classes/EstimateConversion/EstimateConversionResponse.js b/dist/api/classes/EstimateConversion/EstimateConversionResponse.js new file mode 100644 index 00000000..7bc1a522 --- /dev/null +++ b/dist/api/classes/EstimateConversion/EstimateConversionResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.EstimateConversionResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class EstimateConversionResponse extends ApiResponse_1.ApiResponse { +} +exports.EstimateConversionResponse = EstimateConversionResponse; diff --git a/dist/api/classes/FundRawTransaction/FundRawTransactionRequest.d.ts b/dist/api/classes/FundRawTransaction/FundRawTransactionRequest.d.ts new file mode 100644 index 00000000..60f2a793 --- /dev/null +++ b/dist/api/classes/FundRawTransaction/FundRawTransactionRequest.d.ts @@ -0,0 +1,17 @@ +import { ApiRequest } from "../../ApiRequest"; +import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; +type Utxo = { + voutnum: number; + txid: string; +}; +export declare class FundRawTransactionRequest extends ApiRequest { + txhex: string; + utxos?: Array; + changeaddr?: string; + explicitfee?: number; + constructor(chain: string, txhex: string, utxos?: Array, changeaddr?: string, explicitfee?: number); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): FundRawTransactionRequest; + toJson(): ApiPrimitiveJson; +} +export {}; diff --git a/dist/api/classes/FundRawTransaction/FundRawTransactionRequest.js b/dist/api/classes/FundRawTransaction/FundRawTransactionRequest.js new file mode 100644 index 00000000..fb944f89 --- /dev/null +++ b/dist/api/classes/FundRawTransaction/FundRawTransactionRequest.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FundRawTransactionRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class FundRawTransactionRequest extends ApiRequest_1.ApiRequest { + constructor(chain, txhex, utxos, changeaddr, explicitfee) { + super(chain, cmds_1.FUND_RAW_TRANSACTION); + this.txhex = txhex; + this.utxos = utxos; + this.changeaddr = changeaddr; + this.explicitfee = explicitfee; + } + getParams() { + const params = [ + this.txhex, + this.utxos, + this.changeaddr, + this.explicitfee + ]; + return params.filter((x) => x != null); + } + static fromJson(object) { + return new FundRawTransactionRequest(object.chain, object.txhex, object.utxos != null ? object.utxos : undefined, object.changeaddr != null ? object.changeaddr : undefined, object.explicitfee != null ? object.explicitfee : undefined); + } + toJson() { + return { + chain: this.chain, + txhex: this.txhex, + utxos: this.utxos, + changeaddr: this.changeaddr, + explicitfee: this.explicitfee, + }; + } +} +exports.FundRawTransactionRequest = FundRawTransactionRequest; diff --git a/dist/api/classes/FundRawTransaction/FundRawTransactionResponse.d.ts b/dist/api/classes/FundRawTransaction/FundRawTransactionResponse.d.ts new file mode 100644 index 00000000..5c969774 --- /dev/null +++ b/dist/api/classes/FundRawTransaction/FundRawTransactionResponse.d.ts @@ -0,0 +1,8 @@ +import { ApiResponse } from "../../ApiResponse"; +export declare class FundRawTransactionResponse extends ApiResponse { + result: { + hex: string; + changepos: number; + fee: number; + }; +} diff --git a/dist/api/classes/FundRawTransaction/FundRawTransactionResponse.js b/dist/api/classes/FundRawTransaction/FundRawTransactionResponse.js new file mode 100644 index 00000000..d2f316ca --- /dev/null +++ b/dist/api/classes/FundRawTransaction/FundRawTransactionResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FundRawTransactionResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class FundRawTransactionResponse extends ApiResponse_1.ApiResponse { +} +exports.FundRawTransactionResponse = FundRawTransactionResponse; diff --git a/dist/api/classes/GetAddressBalance/GetAddressBalanceRequest.d.ts b/dist/api/classes/GetAddressBalance/GetAddressBalanceRequest.d.ts new file mode 100644 index 00000000..fe32824e --- /dev/null +++ b/dist/api/classes/GetAddressBalance/GetAddressBalanceRequest.d.ts @@ -0,0 +1,15 @@ +import { ApiRequest } from "../../ApiRequest"; +import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; +export declare class GetAddressBalanceRequest extends ApiRequest { + addresses: { + addresses: Array; + friendlynames?: boolean; + }; + constructor(chain: string, addresses: { + addresses: Array; + friendlynames?: boolean; + }); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): GetAddressBalanceRequest; + toJson(): ApiPrimitiveJson; +} diff --git a/dist/api/classes/GetAddressBalance/GetAddressBalanceRequest.js b/dist/api/classes/GetAddressBalance/GetAddressBalanceRequest.js new file mode 100644 index 00000000..a073dba7 --- /dev/null +++ b/dist/api/classes/GetAddressBalance/GetAddressBalanceRequest.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetAddressBalanceRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class GetAddressBalanceRequest extends ApiRequest_1.ApiRequest { + constructor(chain, addresses) { + super(chain, cmds_1.GET_ADDRESS_BALANCE); + this.addresses = addresses; + } + getParams() { + return [this.addresses]; + } + static fromJson(object) { + return new GetAddressBalanceRequest(object.chain, object.addresses); + } + toJson() { + return { + chain: this.chain, + addresses: this.addresses, + }; + } +} +exports.GetAddressBalanceRequest = GetAddressBalanceRequest; diff --git a/dist/api/classes/GetAddressBalance/GetAddressBalanceResponse.d.ts b/dist/api/classes/GetAddressBalance/GetAddressBalanceResponse.d.ts new file mode 100644 index 00000000..05e1daab --- /dev/null +++ b/dist/api/classes/GetAddressBalance/GetAddressBalanceResponse.d.ts @@ -0,0 +1,16 @@ +import { ApiResponse } from "../../ApiResponse"; +export declare class GetAddressBalanceResponse extends ApiResponse { + result: { + balance: number; + received: number; + currencybalance: { + [key: string]: number; + }; + currencyreceived: { + [key: string]: number; + }; + currencynames?: { + [key: string]: string; + }; + }; +} diff --git a/dist/api/classes/GetAddressBalance/GetAddressBalanceResponse.js b/dist/api/classes/GetAddressBalance/GetAddressBalanceResponse.js new file mode 100644 index 00000000..10283ee5 --- /dev/null +++ b/dist/api/classes/GetAddressBalance/GetAddressBalanceResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetAddressBalanceResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class GetAddressBalanceResponse extends ApiResponse_1.ApiResponse { +} +exports.GetAddressBalanceResponse = GetAddressBalanceResponse; diff --git a/dist/api/classes/GetAddressDeltas/GetAddressDeltasRequest.d.ts b/dist/api/classes/GetAddressDeltas/GetAddressDeltasRequest.d.ts new file mode 100644 index 00000000..7737031b --- /dev/null +++ b/dist/api/classes/GetAddressDeltas/GetAddressDeltasRequest.d.ts @@ -0,0 +1,18 @@ +import { ApiRequest } from "../../ApiRequest"; +import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; +interface Addresses { + addresses: Array; + start?: number; + end?: number; + chaininfo?: boolean; + verbosity?: number; + friendlynames?: boolean; +} +export declare class GetAddressDeltasRequest extends ApiRequest { + addresses: Addresses; + constructor(chain: string, addresses: Addresses); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): GetAddressDeltasRequest; + toJson(): ApiPrimitiveJson; +} +export {}; diff --git a/dist/api/classes/GetAddressDeltas/GetAddressDeltasRequest.js b/dist/api/classes/GetAddressDeltas/GetAddressDeltasRequest.js new file mode 100644 index 00000000..a6a38392 --- /dev/null +++ b/dist/api/classes/GetAddressDeltas/GetAddressDeltasRequest.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetAddressDeltasRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class GetAddressDeltasRequest extends ApiRequest_1.ApiRequest { + constructor(chain, addresses) { + super(chain, cmds_1.GET_ADDRESS_DELTAS); + this.addresses = addresses; + } + getParams() { + return [ + this.addresses, + ]; + } + static fromJson(object) { + return new GetAddressDeltasRequest(object.chain, object.addresses); + } + toJson() { + return { + chain: this.chain, + addresses: this.addresses, + }; + } +} +exports.GetAddressDeltasRequest = GetAddressDeltasRequest; diff --git a/dist/api/classes/GetAddressDeltas/GetAddressDeltasResponse.d.ts b/dist/api/classes/GetAddressDeltas/GetAddressDeltasResponse.d.ts new file mode 100644 index 00000000..62a90eb9 --- /dev/null +++ b/dist/api/classes/GetAddressDeltas/GetAddressDeltasResponse.d.ts @@ -0,0 +1,25 @@ +import { ApiResponse } from "../../ApiResponse"; +export declare class GetAddressDeltasResponse extends ApiResponse { + result: Array<{ + satoshis: number; + txid: string; + index: number; + blockindex: number; + height: number; + address: string; + currencyvalues?: { + [key: string]: number; + }; + currencynames?: { + [key: string]: string; + }; + sent?: { + outputs: Array<{ + addresses: string | Array; + amounts: { + [key: string]: number; + }; + }>; + }; + }>; +} diff --git a/dist/api/classes/GetAddressDeltas/GetAddressDeltasResponse.js b/dist/api/classes/GetAddressDeltas/GetAddressDeltasResponse.js new file mode 100644 index 00000000..c41c6d7b --- /dev/null +++ b/dist/api/classes/GetAddressDeltas/GetAddressDeltasResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetAddressDeltasResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class GetAddressDeltasResponse extends ApiResponse_1.ApiResponse { +} +exports.GetAddressDeltasResponse = GetAddressDeltasResponse; diff --git a/dist/api/classes/GetAddressMempool/GetAddressMempoolRequest.d.ts b/dist/api/classes/GetAddressMempool/GetAddressMempoolRequest.d.ts new file mode 100644 index 00000000..40920c49 --- /dev/null +++ b/dist/api/classes/GetAddressMempool/GetAddressMempoolRequest.d.ts @@ -0,0 +1,18 @@ +import { ApiRequest } from "../../ApiRequest"; +import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; +interface Addresses { + addresses: Array; + start?: number; + end?: number; + chaininfo?: boolean; + verbosity?: number; + friendlynames?: boolean; +} +export declare class GetAddressMempoolRequest extends ApiRequest { + addresses: Addresses; + constructor(chain: string, addresses: Addresses); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): GetAddressMempoolRequest; + toJson(): ApiPrimitiveJson; +} +export {}; diff --git a/dist/api/classes/GetAddressMempool/GetAddressMempoolRequest.js b/dist/api/classes/GetAddressMempool/GetAddressMempoolRequest.js new file mode 100644 index 00000000..134d702a --- /dev/null +++ b/dist/api/classes/GetAddressMempool/GetAddressMempoolRequest.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetAddressMempoolRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class GetAddressMempoolRequest extends ApiRequest_1.ApiRequest { + constructor(chain, addresses) { + super(chain, cmds_1.GET_ADDRESS_MEMPOOL); + this.addresses = addresses; + } + getParams() { + return [ + this.addresses, + ]; + } + static fromJson(object) { + return new GetAddressMempoolRequest(object.chain, object.addresses); + } + toJson() { + return { + chain: this.chain, + addresses: this.addresses, + }; + } +} +exports.GetAddressMempoolRequest = GetAddressMempoolRequest; diff --git a/dist/api/classes/GetAddressMempool/GetAddressMempoolResponse.d.ts b/dist/api/classes/GetAddressMempool/GetAddressMempoolResponse.d.ts new file mode 100644 index 00000000..4a95dab1 --- /dev/null +++ b/dist/api/classes/GetAddressMempool/GetAddressMempoolResponse.d.ts @@ -0,0 +1,25 @@ +import { ApiResponse } from "../../ApiResponse"; +export declare class GetAddressMempoolResponse extends ApiResponse { + result: Array<{ + satoshis: number; + txid: string; + index: number; + blockindex: number; + height: number; + address: string; + currencyvalues?: { + [key: string]: number; + }; + currencynames?: { + [key: string]: string; + }; + sent?: { + outputs: Array<{ + addresses: string | Array; + amounts: { + [key: string]: number; + }; + }>; + }; + }>; +} diff --git a/dist/api/classes/GetAddressMempool/GetAddressMempoolResponse.js b/dist/api/classes/GetAddressMempool/GetAddressMempoolResponse.js new file mode 100644 index 00000000..9dc766df --- /dev/null +++ b/dist/api/classes/GetAddressMempool/GetAddressMempoolResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetAddressMempoolResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class GetAddressMempoolResponse extends ApiResponse_1.ApiResponse { +} +exports.GetAddressMempoolResponse = GetAddressMempoolResponse; diff --git a/dist/api/classes/GetAddressUtxos/GetAddressUtxosRequest.d.ts b/dist/api/classes/GetAddressUtxos/GetAddressUtxosRequest.d.ts new file mode 100644 index 00000000..7c6b0a13 --- /dev/null +++ b/dist/api/classes/GetAddressUtxos/GetAddressUtxosRequest.d.ts @@ -0,0 +1,15 @@ +import { ApiRequest } from "../../ApiRequest"; +import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; +interface Addresses { + addresses: Array; + chaininfo?: boolean; + friendlynames?: boolean; +} +export declare class GetAddressUtxosRequest extends ApiRequest { + addresses: Addresses; + constructor(chain: string, addresses: Addresses); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): GetAddressUtxosRequest; + toJson(): ApiPrimitiveJson; +} +export {}; diff --git a/dist/api/classes/GetAddressUtxos/GetAddressUtxosRequest.js b/dist/api/classes/GetAddressUtxos/GetAddressUtxosRequest.js new file mode 100644 index 00000000..461ca6c4 --- /dev/null +++ b/dist/api/classes/GetAddressUtxos/GetAddressUtxosRequest.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetAddressUtxosRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class GetAddressUtxosRequest extends ApiRequest_1.ApiRequest { + constructor(chain, addresses) { + super(chain, cmds_1.GET_ADDRESS_UTXOS); + this.addresses = addresses; + } + getParams() { + return [ + this.addresses, + ]; + } + static fromJson(object) { + return new GetAddressUtxosRequest(object.chain, object.addresses); + } + toJson() { + return { + chain: this.chain, + addresses: this.addresses, + }; + } +} +exports.GetAddressUtxosRequest = GetAddressUtxosRequest; diff --git a/dist/api/classes/GetAddressUtxos/GetAddressUtxosResponse.d.ts b/dist/api/classes/GetAddressUtxos/GetAddressUtxosResponse.d.ts new file mode 100644 index 00000000..da1a5ac1 --- /dev/null +++ b/dist/api/classes/GetAddressUtxos/GetAddressUtxosResponse.d.ts @@ -0,0 +1,19 @@ +import { ApiResponse } from "../../ApiResponse"; +export declare class GetAddressUtxosResponse extends ApiResponse { + result: Array<{ + address: string; + txid: string; + outputIndex: number; + script: string; + currencyvalues?: { + [key: string]: number | undefined; + }; + currencynames?: { + [key: string]: string | undefined; + }; + satoshis: number; + height: number; + isspendable: number; + blocktime: number; + }>; +} diff --git a/dist/api/classes/GetAddressUtxos/GetAddressUtxosResponse.js b/dist/api/classes/GetAddressUtxos/GetAddressUtxosResponse.js new file mode 100644 index 00000000..c3f44724 --- /dev/null +++ b/dist/api/classes/GetAddressUtxos/GetAddressUtxosResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetAddressUtxosResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class GetAddressUtxosResponse extends ApiResponse_1.ApiResponse { +} +exports.GetAddressUtxosResponse = GetAddressUtxosResponse; diff --git a/dist/api/classes/GetBlock/GetBlockRequest.d.ts b/dist/api/classes/GetBlock/GetBlockRequest.d.ts new file mode 100644 index 00000000..e9d0171f --- /dev/null +++ b/dist/api/classes/GetBlock/GetBlockRequest.d.ts @@ -0,0 +1,10 @@ +import { ApiRequest } from "../../ApiRequest"; +import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; +export declare class GetBlockRequest extends ApiRequest { + hashOrHeight: string; + verbosity?: number; + constructor(chain: string, hashOrHeight: string, verbosity?: number); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): GetBlockRequest; + toJson(): ApiPrimitiveJson; +} diff --git a/dist/api/classes/GetBlock/GetBlockRequest.js b/dist/api/classes/GetBlock/GetBlockRequest.js new file mode 100644 index 00000000..38a26995 --- /dev/null +++ b/dist/api/classes/GetBlock/GetBlockRequest.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetBlockRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class GetBlockRequest extends ApiRequest_1.ApiRequest { + constructor(chain, hashOrHeight, verbosity) { + super(chain, cmds_1.GET_BLOCK); + this.hashOrHeight = hashOrHeight; + this.verbosity = verbosity; + } + getParams() { + const params = [ + this.hashOrHeight, + this.verbosity, + ]; + return params.filter((x) => x != null); + } + static fromJson(object) { + return new GetBlockRequest(object.chain, object.hashOrHeight, object.verbosity != null ? object.verbosity : undefined); + } + toJson() { + return { + chain: this.chain, + hashOrHeight: this.hashOrHeight, + verbosity: this.verbosity + }; + } +} +exports.GetBlockRequest = GetBlockRequest; diff --git a/dist/api/classes/GetBlock/GetBlockResponse.d.ts b/dist/api/classes/GetBlock/GetBlockResponse.d.ts new file mode 100644 index 00000000..4b79761f --- /dev/null +++ b/dist/api/classes/GetBlock/GetBlockResponse.d.ts @@ -0,0 +1,5 @@ +import { BlockInfo } from "../../../block/BlockInfo"; +import { ApiResponse } from "../../ApiResponse"; +export declare class GetBlockResponse extends ApiResponse { + result: string | BlockInfo; +} diff --git a/dist/api/classes/GetBlock/GetBlockResponse.js b/dist/api/classes/GetBlock/GetBlockResponse.js new file mode 100644 index 00000000..5c10869a --- /dev/null +++ b/dist/api/classes/GetBlock/GetBlockResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetBlockResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class GetBlockResponse extends ApiResponse_1.ApiResponse { +} +exports.GetBlockResponse = GetBlockResponse; diff --git a/dist/api/classes/GetBlockCount/GetBlockCountRequest.d.ts b/dist/api/classes/GetBlockCount/GetBlockCountRequest.d.ts new file mode 100644 index 00000000..dea0b2c1 --- /dev/null +++ b/dist/api/classes/GetBlockCount/GetBlockCountRequest.d.ts @@ -0,0 +1,8 @@ +import { ApiRequest } from "../../ApiRequest"; +import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; +export declare class GetBlockCountRequest extends ApiRequest { + constructor(chain: string); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): GetBlockCountRequest; + toJson(): ApiPrimitiveJson; +} diff --git a/dist/api/classes/GetBlockCount/GetBlockCountRequest.js b/dist/api/classes/GetBlockCount/GetBlockCountRequest.js new file mode 100644 index 00000000..4361a068 --- /dev/null +++ b/dist/api/classes/GetBlockCount/GetBlockCountRequest.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetBlockCountRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class GetBlockCountRequest extends ApiRequest_1.ApiRequest { + constructor(chain) { + super(chain, cmds_1.GET_BLOCK_COUNT); + } + getParams() { + const params = []; + return params; + } + static fromJson(object) { + return new GetBlockCountRequest(object.chain); + } + toJson() { + return { + chain: this.chain, + }; + } +} +exports.GetBlockCountRequest = GetBlockCountRequest; diff --git a/dist/api/classes/GetBlockCount/GetBlockCountResponse.d.ts b/dist/api/classes/GetBlockCount/GetBlockCountResponse.d.ts new file mode 100644 index 00000000..40a28724 --- /dev/null +++ b/dist/api/classes/GetBlockCount/GetBlockCountResponse.d.ts @@ -0,0 +1,4 @@ +import { ApiResponse } from "../../ApiResponse"; +export declare class GetBlockCountResponse extends ApiResponse { + result: number; +} diff --git a/dist/api/classes/GetBlockCount/GetBlockCountResponse.js b/dist/api/classes/GetBlockCount/GetBlockCountResponse.js new file mode 100644 index 00000000..272f262a --- /dev/null +++ b/dist/api/classes/GetBlockCount/GetBlockCountResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetBlockCountResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class GetBlockCountResponse extends ApiResponse_1.ApiResponse { +} +exports.GetBlockCountResponse = GetBlockCountResponse; diff --git a/dist/api/classes/GetCurrency/GetCurrencyRequest.d.ts b/dist/api/classes/GetCurrency/GetCurrencyRequest.d.ts new file mode 100644 index 00000000..180c4c57 --- /dev/null +++ b/dist/api/classes/GetCurrency/GetCurrencyRequest.d.ts @@ -0,0 +1,9 @@ +import { ApiRequest } from "../../ApiRequest"; +import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; +export declare class GetCurrencyRequest extends ApiRequest { + currencyname?: string; + constructor(chain: string, currencyname?: string); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): GetCurrencyRequest; + toJson(): ApiPrimitiveJson; +} diff --git a/dist/api/classes/GetCurrency/GetCurrencyRequest.js b/dist/api/classes/GetCurrency/GetCurrencyRequest.js new file mode 100644 index 00000000..3f438b48 --- /dev/null +++ b/dist/api/classes/GetCurrency/GetCurrencyRequest.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetCurrencyRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class GetCurrencyRequest extends ApiRequest_1.ApiRequest { + constructor(chain, currencyname) { + super(chain, cmds_1.GET_CURRENCY); + this.currencyname = currencyname; + } + getParams() { + const params = [ + this.currencyname + ]; + return params.filter((x) => x != null); + } + static fromJson(object) { + return new GetCurrencyRequest(object.chain, object.currencyname); + } + toJson() { + return { + chain: this.chain, + currencyname: this.currencyname + }; + } +} +exports.GetCurrencyRequest = GetCurrencyRequest; diff --git a/dist/api/classes/GetCurrency/GetCurrencyResponse.d.ts b/dist/api/classes/GetCurrency/GetCurrencyResponse.d.ts new file mode 100644 index 00000000..79371516 --- /dev/null +++ b/dist/api/classes/GetCurrency/GetCurrencyResponse.d.ts @@ -0,0 +1,5 @@ +import { CurrencyDefinition } from "../../../currency/CurrencyDefinition"; +import { ApiResponse } from "../../ApiResponse"; +export declare class GetCurrencyResponse extends ApiResponse { + result: CurrencyDefinition; +} diff --git a/dist/api/classes/GetCurrency/GetCurrencyResponse.js b/dist/api/classes/GetCurrency/GetCurrencyResponse.js new file mode 100644 index 00000000..5d581f2e --- /dev/null +++ b/dist/api/classes/GetCurrency/GetCurrencyResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetCurrencyResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class GetCurrencyResponse extends ApiResponse_1.ApiResponse { +} +exports.GetCurrencyResponse = GetCurrencyResponse; diff --git a/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersRequest.d.ts b/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersRequest.d.ts new file mode 100644 index 00000000..a99bf9b2 --- /dev/null +++ b/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersRequest.d.ts @@ -0,0 +1,9 @@ +import { ApiRequest } from "../../ApiRequest"; +import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; +export declare class GetCurrencyConvertersRequest extends ApiRequest { + currencies: Array; + constructor(chain: string, currencies: Array); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): GetCurrencyConvertersRequest; + toJson(): ApiPrimitiveJson; +} diff --git a/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersRequest.js b/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersRequest.js new file mode 100644 index 00000000..f883cd10 --- /dev/null +++ b/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersRequest.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetCurrencyConvertersRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class GetCurrencyConvertersRequest extends ApiRequest_1.ApiRequest { + constructor(chain, currencies) { + super(chain, cmds_1.GET_CURRENCY_CONVERTERS); + this.currencies = currencies; + } + getParams() { + return this.currencies; + } + static fromJson(object) { + return new GetCurrencyConvertersRequest(object.chain, object.currencies); + } + toJson() { + return { + chain: this.chain, + currencies: this.currencies + }; + } +} +exports.GetCurrencyConvertersRequest = GetCurrencyConvertersRequest; diff --git a/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersResponse.d.ts b/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersResponse.d.ts new file mode 100644 index 00000000..5d9f6b56 --- /dev/null +++ b/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersResponse.d.ts @@ -0,0 +1,7 @@ +import { CurrencyDefinition } from "../../../currency/CurrencyDefinition"; +import { ApiResponse } from "../../ApiResponse"; +export declare class GetCurrencyConvertersResponse extends ApiResponse { + result: Array<{ + [key: string]: CurrencyDefinition; + }>; +} diff --git a/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersResponse.js b/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersResponse.js new file mode 100644 index 00000000..8f263ad6 --- /dev/null +++ b/dist/api/classes/GetCurrencyConverters/GetCurrencyConvertersResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetCurrencyConvertersResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class GetCurrencyConvertersResponse extends ApiResponse_1.ApiResponse { +} +exports.GetCurrencyConvertersResponse = GetCurrencyConvertersResponse; diff --git a/dist/api/classes/GetIdentity/GetIdentityRequest.d.ts b/dist/api/classes/GetIdentity/GetIdentityRequest.d.ts new file mode 100644 index 00000000..7f098abd --- /dev/null +++ b/dist/api/classes/GetIdentity/GetIdentityRequest.d.ts @@ -0,0 +1,12 @@ +import { ApiRequest } from "../../ApiRequest"; +import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; +export declare class GetIdentityRequest extends ApiRequest { + nameOrAddress: string; + height?: number; + txproof?: boolean; + txproofheight?: number; + constructor(chain: string, nameOrAddress: string, height?: number, txproof?: boolean, txproofheight?: number); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): GetIdentityRequest; + toJson(): ApiPrimitiveJson; +} diff --git a/dist/api/classes/GetIdentity/GetIdentityRequest.js b/dist/api/classes/GetIdentity/GetIdentityRequest.js new file mode 100644 index 00000000..48b892a3 --- /dev/null +++ b/dist/api/classes/GetIdentity/GetIdentityRequest.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetIdentityRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class GetIdentityRequest extends ApiRequest_1.ApiRequest { + constructor(chain, nameOrAddress, height, txproof, txproofheight) { + super(chain, cmds_1.GET_IDENTITY); + this.nameOrAddress = nameOrAddress; + this.height = height; + this.txproof = txproof; + this.txproofheight = txproofheight; + } + getParams() { + const params = [ + this.nameOrAddress, + this.height, + this.txproof, + this.txproofheight + ]; + return params.filter((x) => x != null); + } + static fromJson(object) { + return new GetIdentityRequest(object.chain, object.nameOrAddress, object.height != null ? object.height : undefined, object.txproof != null ? object.txproof : undefined, object.txproofheight != null ? object.txproofheight : undefined); + } + toJson() { + return { + chain: this.chain, + nameOrAddress: this.nameOrAddress, + height: this.height, + txproof: this.txproof, + txproofheight: this.txproofheight + }; + } +} +exports.GetIdentityRequest = GetIdentityRequest; diff --git a/dist/api/classes/GetIdentity/GetIdentityResponse.d.ts b/dist/api/classes/GetIdentity/GetIdentityResponse.d.ts new file mode 100644 index 00000000..e10e1889 --- /dev/null +++ b/dist/api/classes/GetIdentity/GetIdentityResponse.d.ts @@ -0,0 +1,14 @@ +import { IdentityDefinition } from "../../../identity/IdentityDefinition"; +import { ApiResponse } from "../../ApiResponse"; +export declare class GetIdentityResponse extends ApiResponse { + result: { + identity: IdentityDefinition; + status: string; + canspendfor: boolean; + cansignfor: boolean; + blockheight: number; + txid: string; + vout: number; + proof?: string; + }; +} diff --git a/dist/api/classes/GetIdentity/GetIdentityResponse.js b/dist/api/classes/GetIdentity/GetIdentityResponse.js new file mode 100644 index 00000000..73a456d6 --- /dev/null +++ b/dist/api/classes/GetIdentity/GetIdentityResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetIdentityResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class GetIdentityResponse extends ApiResponse_1.ApiResponse { +} +exports.GetIdentityResponse = GetIdentityResponse; diff --git a/dist/api/classes/GetIdentityContent/GetIdentityContentRequest.d.ts b/dist/api/classes/GetIdentityContent/GetIdentityContentRequest.d.ts new file mode 100644 index 00000000..5c704f25 --- /dev/null +++ b/dist/api/classes/GetIdentityContent/GetIdentityContentRequest.d.ts @@ -0,0 +1,14 @@ +import { ApiRequest } from "../../ApiRequest"; +import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; +export declare class GetIdentityContentRequest extends ApiRequest { + nameOrAddress: string; + heightstart?: number; + heightend?: number; + txproof?: boolean; + txproofheight?: number; + vdxfkey?: string; + constructor(chain: string, nameOrAddress: string, heightstart?: number, heightend?: number, txproof?: boolean, txproofheight?: number, vdxfkey?: string); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): GetIdentityContentRequest; + toJson(): ApiPrimitiveJson; +} diff --git a/dist/api/classes/GetIdentityContent/GetIdentityContentRequest.js b/dist/api/classes/GetIdentityContent/GetIdentityContentRequest.js new file mode 100644 index 00000000..ff743fee --- /dev/null +++ b/dist/api/classes/GetIdentityContent/GetIdentityContentRequest.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetIdentityContentRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class GetIdentityContentRequest extends ApiRequest_1.ApiRequest { + constructor(chain, nameOrAddress, heightstart, heightend, txproof, txproofheight, vdxfkey) { + super(chain, cmds_1.GET_IDENTITY_CONTENT); + this.nameOrAddress = nameOrAddress; + this.heightstart = heightstart; + this.heightend = heightend; + this.txproof = txproof; + this.txproofheight = txproofheight; + this.vdxfkey = vdxfkey; + } + getParams() { + const params = [ + this.nameOrAddress, + this.heightstart, + this.heightend, + this.txproof, + this.txproofheight, + this.vdxfkey + ]; + return params.filter((x) => x != null); + } + static fromJson(object) { + return new GetIdentityContentRequest(object.chain, object.nameOrAddress, object.heightstart != null ? object.heightstart : undefined, object.heightend != null ? object.heightend : undefined, object.txproof != null ? object.txproof : undefined, object.txproofheight != null ? object.txproofheight : undefined, object.vdxfkey != null ? object.vdxfkey : undefined); + } + toJson() { + return { + chain: this.chain, + nameOrAddress: this.nameOrAddress, + heightstart: this.heightstart, + heightend: this.heightend, + txproof: this.txproof, + txproofheight: this.txproofheight, + vdxfkey: this.vdxfkey + }; + } +} +exports.GetIdentityContentRequest = GetIdentityContentRequest; diff --git a/dist/api/classes/GetInfo/GetInfoRequest.d.ts b/dist/api/classes/GetInfo/GetInfoRequest.d.ts new file mode 100644 index 00000000..cebf4e6c --- /dev/null +++ b/dist/api/classes/GetInfo/GetInfoRequest.d.ts @@ -0,0 +1,8 @@ +import { ApiRequest } from "../../ApiRequest"; +import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; +export declare class GetInfoRequest extends ApiRequest { + constructor(chain: string); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): GetInfoRequest; + toJson(): ApiPrimitiveJson; +} diff --git a/dist/api/classes/GetInfo/GetInfoRequest.js b/dist/api/classes/GetInfo/GetInfoRequest.js new file mode 100644 index 00000000..f3975416 --- /dev/null +++ b/dist/api/classes/GetInfo/GetInfoRequest.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetInfoRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class GetInfoRequest extends ApiRequest_1.ApiRequest { + constructor(chain) { + super(chain, cmds_1.GET_INFO); + } + getParams() { + return []; + } + static fromJson(object) { + return new GetInfoRequest(object.chain); + } + toJson() { + return { + chain: this.chain, + }; + } +} +exports.GetInfoRequest = GetInfoRequest; diff --git a/dist/api/classes/GetInfo/GetInfoResponse.d.ts b/dist/api/classes/GetInfo/GetInfoResponse.d.ts new file mode 100644 index 00000000..506b7215 --- /dev/null +++ b/dist/api/classes/GetInfo/GetInfoResponse.d.ts @@ -0,0 +1,40 @@ +import { ApiResponse } from "../../ApiResponse"; +export declare class GetInfoResponse extends ApiResponse { + result: { + version: number; + protocolversion: number; + VRSCversion: string; + notarized: number; + prevMoMheight: number; + notarizedhash: string; + notarizedtxid: string; + notarizedtxid_height: string; + KMDnotarized_height: number; + notarized_confirms: number; + blocks: number; + longestchain: number; + timeoffset: number; + tiptime: number; + connections: number; + proxy: string; + difficulty: number; + testnet: boolean; + paytxfee: number; + relayfee: number; + errors: string; + CCid: number; + name: string; + p2pport: number; + rpcport: number; + magic: number; + premine: number; + eras: number; + reward: string; + halving: string; + decay: string; + endsubsidy: string; + veruspos: number; + chainid?: string; + notarychainid?: string; + }; +} diff --git a/dist/api/classes/GetInfo/GetInfoResponse.js b/dist/api/classes/GetInfo/GetInfoResponse.js new file mode 100644 index 00000000..604c4826 --- /dev/null +++ b/dist/api/classes/GetInfo/GetInfoResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetInfoResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class GetInfoResponse extends ApiResponse_1.ApiResponse { +} +exports.GetInfoResponse = GetInfoResponse; diff --git a/dist/api/classes/GetOffers/GetOffersRequest.d.ts b/dist/api/classes/GetOffers/GetOffersRequest.d.ts new file mode 100644 index 00000000..88ecc739 --- /dev/null +++ b/dist/api/classes/GetOffers/GetOffersRequest.d.ts @@ -0,0 +1,11 @@ +import { ApiRequest } from "../../ApiRequest"; +import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; +export declare class GetOffersRequest extends ApiRequest { + currencyorid: string; + iscurrency?: boolean; + withtx?: boolean; + constructor(chain: string, currencyorid: string, iscurrency?: boolean, withtx?: boolean); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): GetOffersRequest; + toJson(): ApiPrimitiveJson; +} diff --git a/dist/api/classes/GetOffers/GetOffersRequest.js b/dist/api/classes/GetOffers/GetOffersRequest.js new file mode 100644 index 00000000..fc07fab9 --- /dev/null +++ b/dist/api/classes/GetOffers/GetOffersRequest.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetOffersRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class GetOffersRequest extends ApiRequest_1.ApiRequest { + constructor(chain, currencyorid, iscurrency, withtx) { + super(chain, cmds_1.GET_OFFERS); + this.currencyorid = currencyorid; + this.iscurrency = iscurrency; + this.withtx = withtx; + } + getParams() { + const params = [ + this.currencyorid, + this.iscurrency == null ? false : this.iscurrency, + this.withtx, + ]; + return params.filter((x) => x != null); + } + static fromJson(object) { + return new GetOffersRequest(object.chain, object.currencyorid, object.iscurrency != null ? object.iscurrency : undefined, object.withtx != null ? object.withtx : undefined); + } + toJson() { + return { + chain: this.chain, + currencyorid: this.currencyorid, + iscurrency: this.iscurrency, + withtx: this.withtx + }; + } +} +exports.GetOffersRequest = GetOffersRequest; diff --git a/dist/api/classes/GetOffers/GetOffersResponse.d.ts b/dist/api/classes/GetOffers/GetOffersResponse.d.ts new file mode 100644 index 00000000..963e4237 --- /dev/null +++ b/dist/api/classes/GetOffers/GetOffersResponse.d.ts @@ -0,0 +1,5 @@ +import { OfferList } from "../../../offers/OfferList"; +import { ApiResponse } from "../../ApiResponse"; +export declare class GetOffersResponse extends ApiResponse { + result: OfferList; +} diff --git a/dist/api/classes/GetOffers/GetOffersResponse.js b/dist/api/classes/GetOffers/GetOffersResponse.js new file mode 100644 index 00000000..398a380a --- /dev/null +++ b/dist/api/classes/GetOffers/GetOffersResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetOffersResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class GetOffersResponse extends ApiResponse_1.ApiResponse { +} +exports.GetOffersResponse = GetOffersResponse; diff --git a/dist/api/classes/GetRawTransaction/GetRawTransactionRequest.d.ts b/dist/api/classes/GetRawTransaction/GetRawTransactionRequest.d.ts new file mode 100644 index 00000000..5e3219fd --- /dev/null +++ b/dist/api/classes/GetRawTransaction/GetRawTransactionRequest.d.ts @@ -0,0 +1,10 @@ +import { ApiRequest } from "../../ApiRequest"; +import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; +export declare class GetRawTransactionRequest extends ApiRequest { + txid: string; + verbose?: number; + constructor(chain: string, txid: string, verbose?: number); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): GetRawTransactionRequest; + toJson(): ApiPrimitiveJson; +} diff --git a/dist/api/classes/GetRawTransaction/GetRawTransactionRequest.js b/dist/api/classes/GetRawTransaction/GetRawTransactionRequest.js new file mode 100644 index 00000000..e40fd8ab --- /dev/null +++ b/dist/api/classes/GetRawTransaction/GetRawTransactionRequest.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetRawTransactionRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class GetRawTransactionRequest extends ApiRequest_1.ApiRequest { + constructor(chain, txid, verbose) { + super(chain, cmds_1.GET_RAW_TRANSACTION); + this.txid = txid; + this.verbose = verbose; + } + getParams() { + const params = [this.txid, this.verbose]; + return params.filter((x) => x != null); + } + static fromJson(object) { + return new GetRawTransactionRequest(object.chain, object.txid, object.verbose != null ? object.verbose : undefined); + } + toJson() { + return { + chain: this.chain, + txid: this.txid, + verbosity: this.verbose, + }; + } +} +exports.GetRawTransactionRequest = GetRawTransactionRequest; diff --git a/dist/api/classes/GetRawTransaction/GetRawTransactionResponse.d.ts b/dist/api/classes/GetRawTransaction/GetRawTransactionResponse.d.ts new file mode 100644 index 00000000..e3ec6767 --- /dev/null +++ b/dist/api/classes/GetRawTransaction/GetRawTransactionResponse.d.ts @@ -0,0 +1,5 @@ +import { RawTransaction } from "../../../transaction/RawTransaction"; +import { ApiResponse } from "../../ApiResponse"; +export declare class GetRawTransactionResponse extends ApiResponse { + result: string | RawTransaction; +} diff --git a/dist/api/classes/GetRawTransaction/GetRawTransactionResponse.js b/dist/api/classes/GetRawTransaction/GetRawTransactionResponse.js new file mode 100644 index 00000000..9e0e8b34 --- /dev/null +++ b/dist/api/classes/GetRawTransaction/GetRawTransactionResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetRawTransactionResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class GetRawTransactionResponse extends ApiResponse_1.ApiResponse { +} +exports.GetRawTransactionResponse = GetRawTransactionResponse; diff --git a/dist/api/classes/GetVdxfId/GetVdxfIdRequest.d.ts b/dist/api/classes/GetVdxfId/GetVdxfIdRequest.d.ts new file mode 100644 index 00000000..21ada7c2 --- /dev/null +++ b/dist/api/classes/GetVdxfId/GetVdxfIdRequest.d.ts @@ -0,0 +1,16 @@ +import { ApiRequest } from "../../ApiRequest"; +import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; +type InitialVdxfData = { + vdxfkey: string; + uint256: string; + indexnum: string; +}; +export declare class GetVdxfIdRequest extends ApiRequest { + vdxfuri: string; + initialdata?: InitialVdxfData; + constructor(chain: string, vdxfuri: string, initialdata?: InitialVdxfData); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): GetVdxfIdRequest; + toJson(): ApiPrimitiveJson; +} +export {}; diff --git a/dist/api/classes/GetVdxfId/GetVdxfIdRequest.js b/dist/api/classes/GetVdxfId/GetVdxfIdRequest.js new file mode 100644 index 00000000..b903a454 --- /dev/null +++ b/dist/api/classes/GetVdxfId/GetVdxfIdRequest.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetVdxfIdRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class GetVdxfIdRequest extends ApiRequest_1.ApiRequest { + constructor(chain, vdxfuri, initialdata) { + super(chain, cmds_1.GET_VDXF_ID); + this.vdxfuri = vdxfuri; + this.initialdata = initialdata; + } + getParams() { + const params = [ + this.vdxfuri, + this.initialdata, + ]; + return params.filter((x) => x != null); + } + static fromJson(object) { + return new GetVdxfIdRequest(object.chain, object.vdxfuri, object.initialdata != null ? object.initialdata : undefined); + } + toJson() { + return { + chain: this.chain, + vdxfuri: this.vdxfuri, + initialdata: this.initialdata + }; + } +} +exports.GetVdxfIdRequest = GetVdxfIdRequest; diff --git a/dist/api/classes/GetVdxfId/GetVdxfIdResponse.d.ts b/dist/api/classes/GetVdxfId/GetVdxfIdResponse.d.ts new file mode 100644 index 00000000..76842eef --- /dev/null +++ b/dist/api/classes/GetVdxfId/GetVdxfIdResponse.d.ts @@ -0,0 +1,16 @@ +import { ApiResponse } from "../../ApiResponse"; +export declare class GetVdxfIdResponse extends ApiResponse { + result: { + vdxfid: string; + hash160result: string; + qualifiedname: { + name: string; + parentid: string; + }; + bounddata?: { + vdxfkey: string; + uint256: string; + indexnum: string; + }; + }; +} diff --git a/dist/api/classes/GetVdxfId/GetVdxfIdResponse.js b/dist/api/classes/GetVdxfId/GetVdxfIdResponse.js new file mode 100644 index 00000000..6bde44d0 --- /dev/null +++ b/dist/api/classes/GetVdxfId/GetVdxfIdResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetVdxfIdResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class GetVdxfIdResponse extends ApiResponse_1.ApiResponse { +} +exports.GetVdxfIdResponse = GetVdxfIdResponse; diff --git a/dist/api/classes/ListCurrencies/ListCurrenciesRequest.d.ts b/dist/api/classes/ListCurrencies/ListCurrenciesRequest.d.ts new file mode 100644 index 00000000..d74946b1 --- /dev/null +++ b/dist/api/classes/ListCurrencies/ListCurrenciesRequest.d.ts @@ -0,0 +1,18 @@ +import { ApiRequest } from "../../ApiRequest"; +import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; +type QueryObject = { + launchstate?: "prelaunch" | "launched" | "refund" | "complete"; + systemtype?: "local" | "imported" | "gateway" | "pbaas"; + fromsystem?: string; + converter?: Array; +}; +export declare class ListCurrenciesRequest extends ApiRequest { + query?: QueryObject; + startblock?: number; + endblock?: number; + constructor(chain: string, query?: QueryObject, startblock?: number, endblock?: number); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): ListCurrenciesRequest; + toJson(): ApiPrimitiveJson; +} +export {}; diff --git a/dist/api/classes/ListCurrencies/ListCurrenciesRequest.js b/dist/api/classes/ListCurrencies/ListCurrenciesRequest.js new file mode 100644 index 00000000..df3c975e --- /dev/null +++ b/dist/api/classes/ListCurrencies/ListCurrenciesRequest.js @@ -0,0 +1,35 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ListCurrenciesRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class ListCurrenciesRequest extends ApiRequest_1.ApiRequest { + constructor(chain, query, startblock, endblock) { + super(chain, cmds_1.LIST_CURRENCIES); + this.query = query; + this.startblock = startblock; + this.endblock = endblock; + } + getParams() { + if (this.query == null && this.startblock == null && this.endblock == null) + return []; + const params = [ + this.query == null ? {} : this.query, + this.startblock == null ? 0 : this.startblock, + this.endblock + ]; + return params.filter((x) => x != null); + } + static fromJson(object) { + return new ListCurrenciesRequest(object.chain, object.query, object.startblock, object.endblock); + } + toJson() { + return { + chain: this.chain, + query: this.query, + startblock: this.startblock, + endblock: this.endblock + }; + } +} +exports.ListCurrenciesRequest = ListCurrenciesRequest; diff --git a/dist/api/classes/ListCurrencies/ListCurrenciesResponse.d.ts b/dist/api/classes/ListCurrencies/ListCurrenciesResponse.d.ts new file mode 100644 index 00000000..d3444bce --- /dev/null +++ b/dist/api/classes/ListCurrencies/ListCurrenciesResponse.d.ts @@ -0,0 +1,40 @@ +import { CurrencyDefinition } from "../../../currency/CurrencyDefinition"; +import { ApiResponse } from "../../ApiResponse"; +export declare class ListCurrenciesResponse extends ApiResponse { + result: Array<{ + currencydefinition: CurrencyDefinition; + bestheight?: number; + besttxid?: string; + besttxout?: number; + bestcurrencystate?: { + flags: number; + version: number; + currencyid: string; + reservecurrencies: Array<{ + currencyid: string; + weight: number; + reserves: number; + priceinreserve: number; + }>; + initialsupply: number; + emitted: number; + supply: number; + currencies: { + [key: string]: { + reservein: number; + primarycurrencyin: number; + reserveout: number; + lastconversionprice: number; + viaconversionprice: number; + fees: number; + conversionfees: number; + priorweights: number; + }; + }; + primarycurrencyfees: number; + primarycurrencyconversionfees: number; + primarycurrencyout: number; + preconvertedout: number; + }; + }>; +} diff --git a/dist/api/classes/ListCurrencies/ListCurrenciesResponse.js b/dist/api/classes/ListCurrencies/ListCurrenciesResponse.js new file mode 100644 index 00000000..03343c13 --- /dev/null +++ b/dist/api/classes/ListCurrencies/ListCurrenciesResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ListCurrenciesResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class ListCurrenciesResponse extends ApiResponse_1.ApiResponse { +} +exports.ListCurrenciesResponse = ListCurrenciesResponse; diff --git a/dist/api/classes/MakeOffer/MakeOfferRequest.d.ts b/dist/api/classes/MakeOffer/MakeOfferRequest.d.ts new file mode 100644 index 00000000..fc616812 --- /dev/null +++ b/dist/api/classes/MakeOffer/MakeOfferRequest.d.ts @@ -0,0 +1,13 @@ +import { ApiRequest } from "../../ApiRequest"; +import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; +import { OfferForMaking } from "../../../offers/OfferForMaking"; +export declare class MakeOfferRequest extends ApiRequest { + fromaddress: string; + offer: OfferForMaking; + returntx?: boolean; + feeamount?: number; + constructor(chain: string, fromaddress: string, offer: OfferForMaking, returntx?: boolean, feeamount?: number); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): MakeOfferRequest; + toJson(): ApiPrimitiveJson; +} diff --git a/dist/api/classes/MakeOffer/MakeOfferRequest.js b/dist/api/classes/MakeOffer/MakeOfferRequest.js new file mode 100644 index 00000000..4aae32c2 --- /dev/null +++ b/dist/api/classes/MakeOffer/MakeOfferRequest.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MakeOfferRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class MakeOfferRequest extends ApiRequest_1.ApiRequest { + constructor(chain, fromaddress, offer, returntx, feeamount) { + super(chain, cmds_1.MAKE_OFFER); + this.fromaddress = fromaddress; + this.offer = offer; + this.returntx = returntx; + this.feeamount = feeamount; + } + getParams() { + const params = [ + this.fromaddress, + this.offer, + this.returntx == null ? false : this.returntx, + this.feeamount, + ]; + return params.filter((x) => x != null); + } + static fromJson(object) { + return new MakeOfferRequest(object.chain, object.fromaddress, object.offer, object.returntx != null ? object.returntx : undefined, object.feeamount != null ? object.feeamount : undefined); + } + toJson() { + return { + chain: this.chain, + fromaddress: this.fromaddress, + offer: this.offer, + returntx: this.returntx, + feeamount: this.feeamount, + }; + } +} +exports.MakeOfferRequest = MakeOfferRequest; diff --git a/dist/api/classes/MakeOffer/MakeOfferResponse.d.ts b/dist/api/classes/MakeOffer/MakeOfferResponse.d.ts new file mode 100644 index 00000000..065c9a48 --- /dev/null +++ b/dist/api/classes/MakeOffer/MakeOfferResponse.d.ts @@ -0,0 +1,7 @@ +import { ApiResponse } from "../../ApiResponse"; +export declare class MakeOfferResponse extends ApiResponse { + result: { + txid?: string; + hex?: string; + }; +} diff --git a/dist/api/classes/MakeOffer/MakeOfferResponse.js b/dist/api/classes/MakeOffer/MakeOfferResponse.js new file mode 100644 index 00000000..a5056946 --- /dev/null +++ b/dist/api/classes/MakeOffer/MakeOfferResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MakeOfferResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class MakeOfferResponse extends ApiResponse_1.ApiResponse { +} +exports.MakeOfferResponse = MakeOfferResponse; diff --git a/dist/api/classes/SendCurrency/SendCurrencyRequest.d.ts b/dist/api/classes/SendCurrency/SendCurrencyRequest.d.ts new file mode 100644 index 00000000..c1c602e1 --- /dev/null +++ b/dist/api/classes/SendCurrency/SendCurrencyRequest.d.ts @@ -0,0 +1,30 @@ +import { ApiRequest } from "../../ApiRequest"; +import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; +type output = { + currency: string; + amount: number; + convertto?: string; + exportto?: string; + exportid?: boolean; + exportcurrency?: boolean; + feecurrency?: string; + via?: string; + address: string; + refundto?: string; + memo?: string; + preconvert?: boolean; + burn?: boolean; + mintnew?: boolean; +}; +export declare class SendCurrencyRequest extends ApiRequest { + fromaddress: string; + outputs: Array; + minconf?: number; + feeamount?: number; + returntxtemplate?: boolean; + constructor(chain: string, fromaddress: string, outputs: Array, minconf?: number, feeamount?: number, returntxtemplate?: boolean); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): SendCurrencyRequest; + toJson(): ApiPrimitiveJson; +} +export {}; diff --git a/dist/api/classes/SendCurrency/SendCurrencyRequest.js b/dist/api/classes/SendCurrency/SendCurrencyRequest.js new file mode 100644 index 00000000..232fe1b0 --- /dev/null +++ b/dist/api/classes/SendCurrency/SendCurrencyRequest.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SendCurrencyRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class SendCurrencyRequest extends ApiRequest_1.ApiRequest { + constructor(chain, fromaddress, outputs, minconf, feeamount, returntxtemplate) { + super(chain, cmds_1.SEND_CURRENCY); + this.fromaddress = fromaddress; + this.outputs = outputs; + this.minconf = minconf; + this.feeamount = feeamount; + this.returntxtemplate = returntxtemplate; + } + getParams() { + const params = [ + this.fromaddress, + this.outputs, + this.minconf, + this.feeamount, + this.returntxtemplate + ]; + if (this.returntxtemplate) + return params; + else + return params.filter((x) => x != null); + } + static fromJson(object) { + return new SendCurrencyRequest(object.chain, object.fromaddress, object.outputs != null ? object.utxos : undefined, object.minconf != null ? object.minconf : undefined, object.feeamount != null ? object.feeamount : undefined, object.returntxtemplate != null ? object.returntxtemplate : undefined); + } + toJson() { + return { + chain: this.chain, + fromaddress: this.fromaddress, + outputs: this.outputs, + minconf: this.minconf, + feeamount: this.feeamount, + returntxtemplate: this.returntxtemplate, + }; + } +} +exports.SendCurrencyRequest = SendCurrencyRequest; diff --git a/dist/api/classes/SendCurrency/SendCurrencyResponse.d.ts b/dist/api/classes/SendCurrency/SendCurrencyResponse.d.ts new file mode 100644 index 00000000..51c24de5 --- /dev/null +++ b/dist/api/classes/SendCurrency/SendCurrencyResponse.d.ts @@ -0,0 +1,10 @@ +import { ApiResponse } from "../../ApiResponse"; +export declare class SendCurrencyResponse extends ApiResponse { + result: string | { + outputtotals: { + [currencyid: string]: number; + }; + feeamount: number; + hextx: string; + }; +} diff --git a/dist/api/classes/SendCurrency/SendCurrencyResponse.js b/dist/api/classes/SendCurrency/SendCurrencyResponse.js new file mode 100644 index 00000000..867a4388 --- /dev/null +++ b/dist/api/classes/SendCurrency/SendCurrencyResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SendCurrencyResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class SendCurrencyResponse extends ApiResponse_1.ApiResponse { +} +exports.SendCurrencyResponse = SendCurrencyResponse; diff --git a/dist/api/classes/SendRawTransaction/SendRawTransactionRequest.d.ts b/dist/api/classes/SendRawTransaction/SendRawTransactionRequest.d.ts new file mode 100644 index 00000000..1b95aa6a --- /dev/null +++ b/dist/api/classes/SendRawTransaction/SendRawTransactionRequest.d.ts @@ -0,0 +1,10 @@ +import { ApiRequest } from "../../ApiRequest"; +import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; +export declare class SendRawTransactionRequest extends ApiRequest { + hexstring: string; + allowhighfees?: boolean; + constructor(chain: string, hexstring: string, allowhighfees?: boolean); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): SendRawTransactionRequest; + toJson(): ApiPrimitiveJson; +} diff --git a/dist/api/classes/SendRawTransaction/SendRawTransactionRequest.js b/dist/api/classes/SendRawTransaction/SendRawTransactionRequest.js new file mode 100644 index 00000000..86127a02 --- /dev/null +++ b/dist/api/classes/SendRawTransaction/SendRawTransactionRequest.js @@ -0,0 +1,30 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SendRawTransactionRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class SendRawTransactionRequest extends ApiRequest_1.ApiRequest { + constructor(chain, hexstring, allowhighfees) { + super(chain, cmds_1.SEND_RAW_TRANSACTION); + this.hexstring = hexstring; + this.allowhighfees = allowhighfees; + } + getParams() { + const params = [ + this.hexstring, + this.allowhighfees + ]; + return params.filter((x) => x != null); + } + static fromJson(object) { + return new SendRawTransactionRequest(object.chain, object.hexstring, object.allowhighfees != null ? object.allowhighfees : undefined); + } + toJson() { + return { + chain: this.chain, + hexstring: this.hexstring, + allowhighfees: this.allowhighfees + }; + } +} +exports.SendRawTransactionRequest = SendRawTransactionRequest; diff --git a/dist/api/classes/SendRawTransaction/SendRawTransactionResponse.d.ts b/dist/api/classes/SendRawTransaction/SendRawTransactionResponse.d.ts new file mode 100644 index 00000000..0bc1e440 --- /dev/null +++ b/dist/api/classes/SendRawTransaction/SendRawTransactionResponse.d.ts @@ -0,0 +1,4 @@ +import { ApiResponse } from "../../ApiResponse"; +export declare class SendRawTransactionResponse extends ApiResponse { + result: string; +} diff --git a/dist/api/classes/SendRawTransaction/SendRawTransactionResponse.js b/dist/api/classes/SendRawTransaction/SendRawTransactionResponse.js new file mode 100644 index 00000000..0dd48150 --- /dev/null +++ b/dist/api/classes/SendRawTransaction/SendRawTransactionResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SendRawTransactionResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class SendRawTransactionResponse extends ApiResponse_1.ApiResponse { +} +exports.SendRawTransactionResponse = SendRawTransactionResponse; diff --git a/dist/api/classes/SignData/SignDataRequest.d.ts b/dist/api/classes/SignData/SignDataRequest.d.ts new file mode 100644 index 00000000..8ebdb7d6 --- /dev/null +++ b/dist/api/classes/SignData/SignDataRequest.d.ts @@ -0,0 +1,31 @@ +import { ApiRequest } from "../../ApiRequest"; +import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; +import { DataDescriptorInfo } from "../../../utils/types/DataDescriptor"; +import { SignDataParameters } from "../../../utils/types/SignData"; +export type SignDataArgs = { + address?: string; + filename?: string; + message?: string; + messagehex?: string; + messagebase64?: string; + datahash?: string; + vdxfdata?: string; + mmrdata?: Array; + mmrsalt?: Array; + mmrhashtype?: string; + priormmr?: Array; + vdxfkeys?: Array; + vdxfkeynames?: Array; + boundhashes?: Array; + hashtype?: string; + signature?: string; + encrypttoaddress?: string; + createmmr?: boolean; +}; +export declare class SignDataRequest extends ApiRequest { + data: SignDataArgs; + constructor(chain: string, signableItems: SignDataArgs); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): SignDataRequest; + toJson(): ApiPrimitiveJson; +} diff --git a/dist/api/classes/SignData/SignDataRequest.js b/dist/api/classes/SignData/SignDataRequest.js new file mode 100644 index 00000000..cee3cd82 --- /dev/null +++ b/dist/api/classes/SignData/SignDataRequest.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SignDataRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class SignDataRequest extends ApiRequest_1.ApiRequest { + constructor(chain, signableItems) { + super(chain, cmds_1.SIGN_DATA); + this.data = signableItems; + } + getParams() { + const params = [this.data]; + return params.filter((x) => x != null); + } + static fromJson(object) { + return new SignDataRequest(object.chain, object.data); + } + toJson() { + return { + chain: this.chain, + data: this.data, + }; + } +} +exports.SignDataRequest = SignDataRequest; diff --git a/dist/api/classes/SignData/SignDataResponse.d.ts b/dist/api/classes/SignData/SignDataResponse.d.ts new file mode 100644 index 00000000..df9019cd --- /dev/null +++ b/dist/api/classes/SignData/SignDataResponse.d.ts @@ -0,0 +1,23 @@ +import { ApiResponse } from "../../ApiResponse"; +import { SignatureDataInfo } from "../../../utils/types/Signature"; +import { MmrDescriptorParameters } from "../../../utils/types/MmrDescriptor"; +import { DataDescriptorInfo } from "../../../utils/types/DataDescriptor"; +export declare class SignDataResponse extends ApiResponse { + result: { + mmrdescriptor_encrypted?: MmrDescriptorParameters; + mmrdescriptor?: MmrDescriptorParameters; + signature?: string; + signaturedata_encrypted?: DataDescriptorInfo; + signaturedata_ssk?: string; + signaturedata?: SignatureDataInfo; + system?: string; + systemid?: string; + hashtype?: string; + mmrhashtype?: string; + hash?: string; + identity?: string; + canonicalname?: string; + address?: string; + signatureheight?: number; + }; +} diff --git a/dist/api/classes/SignData/SignDataResponse.js b/dist/api/classes/SignData/SignDataResponse.js new file mode 100644 index 00000000..fe83e952 --- /dev/null +++ b/dist/api/classes/SignData/SignDataResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SignDataResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class SignDataResponse extends ApiResponse_1.ApiResponse { +} +exports.SignDataResponse = SignDataResponse; diff --git a/dist/api/classes/SignMessage/SignMessageRequest.d.ts b/dist/api/classes/SignMessage/SignMessageRequest.d.ts new file mode 100644 index 00000000..22af4aba --- /dev/null +++ b/dist/api/classes/SignMessage/SignMessageRequest.d.ts @@ -0,0 +1,11 @@ +import { ApiRequest } from "../../ApiRequest"; +import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; +export declare class SignMessageRequest extends ApiRequest { + tAddrOrIdentity: string; + message: string; + cursig?: string; + constructor(chain: string, tAddrOrIdentity: string, message: string, cursig?: string); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): SignMessageRequest; + toJson(): ApiPrimitiveJson; +} diff --git a/dist/api/classes/SignMessage/SignMessageRequest.js b/dist/api/classes/SignMessage/SignMessageRequest.js new file mode 100644 index 00000000..02ad2921 --- /dev/null +++ b/dist/api/classes/SignMessage/SignMessageRequest.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SignMessageRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class SignMessageRequest extends ApiRequest_1.ApiRequest { + constructor(chain, tAddrOrIdentity, message, cursig) { + super(chain, cmds_1.SIGN_MESSAGE); + this.tAddrOrIdentity = tAddrOrIdentity; + this.message = message; + this.cursig = cursig; + } + getParams() { + const params = [this.tAddrOrIdentity, this.message, this.cursig]; + return params.filter((x) => x != null); + } + static fromJson(object) { + return new SignMessageRequest(object.chain, object.tAddrOrIdentity, object.message, object.cursig != null ? object.cursig : undefined); + } + toJson() { + return { + chain: this.chain, + tAddrOrIdentity: this.tAddrOrIdentity, + message: this.message, + cursig: this.cursig + }; + } +} +exports.SignMessageRequest = SignMessageRequest; diff --git a/dist/api/classes/SignMessage/SignMessageResponse.d.ts b/dist/api/classes/SignMessage/SignMessageResponse.d.ts new file mode 100644 index 00000000..80441e35 --- /dev/null +++ b/dist/api/classes/SignMessage/SignMessageResponse.d.ts @@ -0,0 +1,7 @@ +import { ApiResponse } from "../../ApiResponse"; +export declare class SignMessageResponse extends ApiResponse { + result: { + hash: string; + signature: string; + }; +} diff --git a/dist/api/classes/SignMessage/SignMessageResponse.js b/dist/api/classes/SignMessage/SignMessageResponse.js new file mode 100644 index 00000000..328f1c87 --- /dev/null +++ b/dist/api/classes/SignMessage/SignMessageResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SignMessageResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class SignMessageResponse extends ApiResponse_1.ApiResponse { +} +exports.SignMessageResponse = SignMessageResponse; diff --git a/dist/api/classes/SignRawTransaction/SignRawTransactionRequest.d.ts b/dist/api/classes/SignRawTransaction/SignRawTransactionRequest.d.ts new file mode 100644 index 00000000..969d94db --- /dev/null +++ b/dist/api/classes/SignRawTransaction/SignRawTransactionRequest.d.ts @@ -0,0 +1,21 @@ +import { ApiRequest } from "../../ApiRequest"; +import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; +type PrevTx = { + txid: string; + vout: number; + scriptPubKey: string; + redeemScript: string; + amount: number; +}; +type SigHashType = "ALL" | "NONE" | "SINGLE" | "ALL|ANYONECANPAY" | "NONE|ANYONECANPAY" | "SINGLE|ANYONECANPAY"; +export declare class SignRawTransactionRequest extends ApiRequest { + hexstring: string; + prevtxs?: Array; + sighashtype?: SigHashType; + branchid?: string; + constructor(chain: string, hexstring: string, prevtxs?: Array, sighashtype?: SigHashType, branchid?: string); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): SignRawTransactionRequest; + toJson(): ApiPrimitiveJson; +} +export {}; diff --git a/dist/api/classes/SignRawTransaction/SignRawTransactionRequest.js b/dist/api/classes/SignRawTransaction/SignRawTransactionRequest.js new file mode 100644 index 00000000..63e3ebab --- /dev/null +++ b/dist/api/classes/SignRawTransaction/SignRawTransactionRequest.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SignRawTransactionRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class SignRawTransactionRequest extends ApiRequest_1.ApiRequest { + constructor(chain, hexstring, prevtxs, sighashtype, branchid) { + super(chain, cmds_1.SIGN_RAW_TRANSACTION); + this.hexstring = hexstring; + this.prevtxs = prevtxs; + this.sighashtype = sighashtype; + this.branchid = branchid; + } + getParams() { + const params = [ + this.hexstring, + this.prevtxs, + this.sighashtype, + this.branchid + ]; + return params.filter((x) => x != null); + } + static fromJson(object) { + return new SignRawTransactionRequest(object.chain, object.hexstring, object.prevtxs != null ? object.prevtxs : undefined, object.sighashtype != null ? object.sighashtype : undefined, object.branchid != null ? object.branchid : undefined); + } + toJson() { + return { + chain: this.chain, + hexstring: this.hexstring, + prevtxs: this.prevtxs, + sighashtype: this.sighashtype, + branchid: this.branchid, + }; + } +} +exports.SignRawTransactionRequest = SignRawTransactionRequest; diff --git a/dist/api/classes/SignRawTransaction/SignRawTransactionResponse.d.ts b/dist/api/classes/SignRawTransaction/SignRawTransactionResponse.d.ts new file mode 100644 index 00000000..dc608573 --- /dev/null +++ b/dist/api/classes/SignRawTransaction/SignRawTransactionResponse.d.ts @@ -0,0 +1,14 @@ +import { ApiResponse } from "../../ApiResponse"; +export declare class SignRawTransactionResponse extends ApiResponse { + result: { + hex: string; + complete: boolean; + errors?: Array<{ + txid: string; + vout: number; + scriptSig: string; + sequence: number; + error: string; + }>; + }; +} diff --git a/dist/api/classes/SignRawTransaction/SignRawTransactionResponse.js b/dist/api/classes/SignRawTransaction/SignRawTransactionResponse.js new file mode 100644 index 00000000..ab6f2cfe --- /dev/null +++ b/dist/api/classes/SignRawTransaction/SignRawTransactionResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SignRawTransactionResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class SignRawTransactionResponse extends ApiResponse_1.ApiResponse { +} +exports.SignRawTransactionResponse = SignRawTransactionResponse; diff --git a/dist/api/classes/UpdateIdentity/UpdateIdentityRequest.d.ts b/dist/api/classes/UpdateIdentity/UpdateIdentityRequest.d.ts new file mode 100644 index 00000000..bd7914b3 --- /dev/null +++ b/dist/api/classes/UpdateIdentity/UpdateIdentityRequest.d.ts @@ -0,0 +1,14 @@ +import { ApiRequest } from "../../ApiRequest"; +import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; +import { VerusCLIVerusIDJsonWithData } from "../../../vdxf/classes"; +export declare class UpdateIdentityRequest extends ApiRequest { + jsonidentity: VerusCLIVerusIDJsonWithData; + returntx?: boolean; + tokenupdate?: boolean; + feeoffer?: number; + sourceoffunds?: string; + constructor(chain: string, jsonidentity: VerusCLIVerusIDJsonWithData, returntx?: boolean, tokenupdate?: boolean, feeoffer?: number, sourceoffunds?: string); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): UpdateIdentityRequest; + toJson(): ApiPrimitiveJson; +} diff --git a/dist/api/classes/UpdateIdentity/UpdateIdentityRequest.js b/dist/api/classes/UpdateIdentity/UpdateIdentityRequest.js new file mode 100644 index 00000000..d750e73a --- /dev/null +++ b/dist/api/classes/UpdateIdentity/UpdateIdentityRequest.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UpdateIdentityRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class UpdateIdentityRequest extends ApiRequest_1.ApiRequest { + constructor(chain, jsonidentity, returntx, tokenupdate, feeoffer, sourceoffunds) { + super(chain, cmds_1.UPDATE_IDENTITY); + this.jsonidentity = jsonidentity; + this.returntx = returntx; + this.tokenupdate = tokenupdate; + this.feeoffer = feeoffer; + this.sourceoffunds = sourceoffunds; + } + getParams() { + const params = [ + this.jsonidentity, + this.returntx, + this.tokenupdate, + this.feeoffer, + this.sourceoffunds + ]; + if (this.sourceoffunds) + return params; + else + return params.filter((x) => x != null); + } + static fromJson(object) { + return new UpdateIdentityRequest(object.chain, object.jsonidentity, object.returntx != null ? object.returntx : undefined, object.tokenupdate != null ? object.tokenupdate : undefined, object.feeoffer != null ? object.feeoffer : undefined, object.sourceoffunds != null ? object.sourceoffunds : undefined); + } + toJson() { + return { + chain: this.chain, + jsonidentity: this.jsonidentity, + returntx: this.returntx, + tokenupdate: this.tokenupdate, + feeoffer: this.feeoffer, + sourceoffunds: this.sourceoffunds, + }; + } +} +exports.UpdateIdentityRequest = UpdateIdentityRequest; diff --git a/dist/api/classes/UpdateIdentity/UpdateIdentityResponse.d.ts b/dist/api/classes/UpdateIdentity/UpdateIdentityResponse.d.ts new file mode 100644 index 00000000..69131667 --- /dev/null +++ b/dist/api/classes/UpdateIdentity/UpdateIdentityResponse.d.ts @@ -0,0 +1,4 @@ +import { ApiResponse } from "../../ApiResponse"; +export declare class UpdateIdentityResponse extends ApiResponse { + result: string; +} diff --git a/dist/api/classes/UpdateIdentity/UpdateIdentityResponse.js b/dist/api/classes/UpdateIdentity/UpdateIdentityResponse.js new file mode 100644 index 00000000..a659c268 --- /dev/null +++ b/dist/api/classes/UpdateIdentity/UpdateIdentityResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UpdateIdentityResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class UpdateIdentityResponse extends ApiResponse_1.ApiResponse { +} +exports.UpdateIdentityResponse = UpdateIdentityResponse; diff --git a/dist/api/classes/VerifyMessage/VerifyMessageRequest.d.ts b/dist/api/classes/VerifyMessage/VerifyMessageRequest.d.ts new file mode 100644 index 00000000..5badcc5f --- /dev/null +++ b/dist/api/classes/VerifyMessage/VerifyMessageRequest.d.ts @@ -0,0 +1,12 @@ +import { ApiRequest } from "../../ApiRequest"; +import { ApiPrimitiveJson, RequestParams } from "../../ApiPrimitive"; +export declare class VerifyMessageRequest extends ApiRequest { + tAddrOrIdentity: string; + signature: string; + message: string; + checklatest?: boolean; + constructor(chain: string, tAddrOrIdentity: string, signature: string, message: string, checklatest?: boolean); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): VerifyMessageRequest; + toJson(): ApiPrimitiveJson; +} diff --git a/dist/api/classes/VerifyMessage/VerifyMessageRequest.js b/dist/api/classes/VerifyMessage/VerifyMessageRequest.js new file mode 100644 index 00000000..5dffa8e0 --- /dev/null +++ b/dist/api/classes/VerifyMessage/VerifyMessageRequest.js @@ -0,0 +1,31 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VerifyMessageRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class VerifyMessageRequest extends ApiRequest_1.ApiRequest { + constructor(chain, tAddrOrIdentity, signature, message, checklatest) { + super(chain, cmds_1.VERIFY_MESSAGE); + this.tAddrOrIdentity = tAddrOrIdentity; + this.message = message; + this.signature = signature; + this.checklatest = checklatest; + } + getParams() { + const params = [this.tAddrOrIdentity, this.signature, this.message, this.checklatest]; + return params.filter((x) => x != null); + } + static fromJson(object) { + return new VerifyMessageRequest(object.chain, object.tAddrOrIdentity, object.signature, object.message, object.checklatest != null ? object.checklatest : undefined); + } + toJson() { + return { + chain: this.chain, + tAddrOrIdentity: this.tAddrOrIdentity, + signature: this.signature, + message: this.message, + checklatest: this.checklatest, + }; + } +} +exports.VerifyMessageRequest = VerifyMessageRequest; diff --git a/dist/api/classes/VerifyMessage/VerifyMessageResponse.d.ts b/dist/api/classes/VerifyMessage/VerifyMessageResponse.d.ts new file mode 100644 index 00000000..e61c366e --- /dev/null +++ b/dist/api/classes/VerifyMessage/VerifyMessageResponse.d.ts @@ -0,0 +1,4 @@ +import { ApiResponse } from "../../ApiResponse"; +export declare class VerifyMessageResponse extends ApiResponse { + result: boolean; +} diff --git a/dist/api/classes/VerifyMessage/VerifyMessageResponse.js b/dist/api/classes/VerifyMessage/VerifyMessageResponse.js new file mode 100644 index 00000000..8e489036 --- /dev/null +++ b/dist/api/classes/VerifyMessage/VerifyMessageResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VerifyMessageResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class VerifyMessageResponse extends ApiResponse_1.ApiResponse { +} +exports.VerifyMessageResponse = VerifyMessageResponse; diff --git a/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusRequest.d.ts b/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusRequest.d.ts new file mode 100644 index 00000000..18b8d605 --- /dev/null +++ b/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusRequest.d.ts @@ -0,0 +1,9 @@ +import { ApiRequest } from "../../ApiRequest"; +import { RequestParams, ApiPrimitiveJson } from "../../ApiPrimitive"; +export declare class ZGetOperationStatusRequest extends ApiRequest { + operations?: Array; + constructor(chain: string, operations?: Array); + getParams(): RequestParams; + static fromJson(object: ApiPrimitiveJson): ZGetOperationStatusRequest; + toJson(): ApiPrimitiveJson; +} diff --git a/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusRequest.js b/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusRequest.js new file mode 100644 index 00000000..1256f4c4 --- /dev/null +++ b/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusRequest.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ZGetOperationStatusRequest = void 0; +const ApiRequest_1 = require("../../ApiRequest"); +const cmds_1 = require("../../../constants/cmds"); +class ZGetOperationStatusRequest extends ApiRequest_1.ApiRequest { + constructor(chain, operations) { + super(chain, cmds_1.Z_GET_OPERATION_STATUS); + this.operations = operations; + } + getParams() { + const params = [ + this.operations + ]; + return params.filter((x) => x != null); + } + static fromJson(object) { + return new ZGetOperationStatusRequest(object.chain, object.operations); + } + toJson() { + return { + chain: this.chain, + operations: this.operations, + }; + } +} +exports.ZGetOperationStatusRequest = ZGetOperationStatusRequest; diff --git a/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusResponse.d.ts b/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusResponse.d.ts new file mode 100644 index 00000000..680f6ab4 --- /dev/null +++ b/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusResponse.d.ts @@ -0,0 +1,21 @@ +import { ApiResponse } from "../../ApiResponse"; +export type z_operation = { + id: string; + status: string; + method: string; + creation_time: number; + result?: { + [key: string]: any; + }; + error?: { + code: number; + message: string; + }; + execution_secs?: number; + params: Array<{ + [key: string]: any; + }>; +}; +export declare class ZGetOperationStatusResponse extends ApiResponse { + result: Array; +} diff --git a/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusResponse.js b/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusResponse.js new file mode 100644 index 00000000..5c30c49d --- /dev/null +++ b/dist/api/classes/ZGetOperationStatus/ZGetOperationStatusResponse.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ZGetOperationStatusResponse = void 0; +const ApiResponse_1 = require("../../ApiResponse"); +class ZGetOperationStatusResponse extends ApiResponse_1.ApiResponse { +} +exports.ZGetOperationStatusResponse = ZGetOperationStatusResponse; diff --git a/dist/api/classes/index.d.ts b/dist/api/classes/index.d.ts new file mode 100644 index 00000000..a708a453 --- /dev/null +++ b/dist/api/classes/index.d.ts @@ -0,0 +1,54 @@ +import { GetAddressBalanceRequest } from './GetAddressBalance/GetAddressBalanceRequest'; +import { GetAddressBalanceResponse } from './GetAddressBalance/GetAddressBalanceResponse'; +import { GetAddressDeltasRequest } from './GetAddressDeltas/GetAddressDeltasRequest'; +import { GetAddressDeltasResponse } from './GetAddressDeltas/GetAddressDeltasResponse'; +import { GetAddressUtxosRequest } from './GetAddressUtxos/GetAddressUtxosRequest'; +import { GetAddressUtxosResponse } from './GetAddressUtxos/GetAddressUtxosResponse'; +import { GetBlockRequest } from './GetBlock/GetBlockRequest'; +import { GetBlockResponse } from './GetBlock/GetBlockResponse'; +import { GetBlockCountRequest } from './GetBlockCount/GetBlockCountRequest'; +import { GetBlockCountResponse } from './GetBlockCount/GetBlockCountResponse'; +import { GetVdxfIdRequest } from './GetVdxfId/GetVdxfIdRequest'; +import { GetVdxfIdResponse } from './GetVdxfId/GetVdxfIdResponse'; +import { GetIdentityRequest } from './GetIdentity/GetIdentityRequest'; +import { GetIdentityContentRequest } from './GetIdentityContent/GetIdentityContentRequest'; +import { GetIdentityResponse } from './GetIdentity/GetIdentityResponse'; +import { GetCurrencyRequest } from './GetCurrency/GetCurrencyRequest'; +import { GetCurrencyResponse } from './GetCurrency/GetCurrencyResponse'; +import { GetInfoRequest } from './GetInfo/GetInfoRequest'; +import { GetInfoResponse } from './GetInfo/GetInfoResponse'; +import { GetOffersRequest } from './GetOffers/GetOffersRequest'; +import { GetOffersResponse } from './GetOffers/GetOffersResponse'; +import { GetRawTransactionRequest } from './GetRawTransaction/GetRawTransactionRequest'; +import { GetRawTransactionResponse } from './GetRawTransaction/GetRawTransactionResponse'; +import { MakeOfferRequest } from './MakeOffer/MakeOfferRequest'; +import { MakeOfferResponse } from './MakeOffer/MakeOfferResponse'; +import { SendRawTransactionRequest } from './SendRawTransaction/SendRawTransactionRequest'; +import { SendRawTransactionResponse } from './SendRawTransaction/SendRawTransactionResponse'; +import { SignMessageRequest } from './SignMessage/SignMessageRequest'; +import { SignMessageResponse } from './SignMessage/SignMessageResponse'; +import { SignDataRequest } from './SignData/SignDataRequest'; +import { SignDataResponse } from './SignData/SignDataResponse'; +import { VerifyMessageRequest } from './VerifyMessage/VerifyMessageRequest'; +import { VerifyMessageResponse } from './VerifyMessage/VerifyMessageResponse'; +import { GetAddressMempoolResponse } from './GetAddressMempool/GetAddressMempoolResponse'; +import { GetAddressMempoolRequest } from './GetAddressMempool/GetAddressMempoolRequest'; +import { SendCurrencyRequest } from './SendCurrency/SendCurrencyRequest'; +import { SendCurrencyResponse } from './SendCurrency/SendCurrencyResponse'; +import { UpdateIdentityRequest } from './UpdateIdentity/UpdateIdentityRequest'; +import { UpdateIdentityResponse } from './UpdateIdentity/UpdateIdentityResponse'; +import { FundRawTransactionRequest } from './FundRawTransaction/FundRawTransactionRequest'; +import { FundRawTransactionResponse } from './FundRawTransaction/FundRawTransactionResponse'; +import { SignRawTransactionRequest } from './SignRawTransaction/SignRawTransactionRequest'; +import { SignRawTransactionResponse } from './SignRawTransaction/SignRawTransactionResponse'; +import { GetCurrencyConvertersRequest } from './GetCurrencyConverters/GetCurrencyConvertersRequest'; +import { GetCurrencyConvertersResponse } from './GetCurrencyConverters/GetCurrencyConvertersResponse'; +import { ListCurrenciesRequest } from './ListCurrencies/ListCurrenciesRequest'; +import { ListCurrenciesResponse } from './ListCurrencies/ListCurrenciesResponse'; +import { EstimateConversionRequest } from './EstimateConversion/EstimateConversionRequest'; +import { EstimateConversionResponse } from './EstimateConversion/EstimateConversionResponse'; +import { ZGetOperationStatusRequest } from './ZGetOperationStatus/ZGetOperationStatusRequest'; +import { ZGetOperationStatusResponse } from './ZGetOperationStatus/ZGetOperationStatusResponse'; +export { GetAddressBalanceRequest, GetAddressBalanceResponse, GetAddressDeltasRequest, GetAddressDeltasResponse, GetAddressMempoolRequest, GetAddressMempoolResponse, GetAddressUtxosRequest, GetAddressUtxosResponse, GetBlockRequest, GetBlockResponse, GetBlockCountRequest, GetBlockCountResponse, GetVdxfIdRequest, GetVdxfIdResponse, GetIdentityRequest, GetIdentityContentRequest, GetIdentityResponse, GetCurrencyRequest, GetCurrencyResponse, GetOffersRequest, GetOffersResponse, GetRawTransactionRequest, GetRawTransactionResponse, MakeOfferRequest, MakeOfferResponse, SendRawTransactionRequest, SendRawTransactionResponse, GetInfoRequest, GetInfoResponse, VerifyMessageRequest, VerifyMessageResponse, SignMessageRequest, SignMessageResponse, SignDataRequest, SignDataResponse, SendCurrencyRequest, SendCurrencyResponse, UpdateIdentityRequest, UpdateIdentityResponse, FundRawTransactionRequest, FundRawTransactionResponse, GetCurrencyConvertersRequest, GetCurrencyConvertersResponse, ListCurrenciesRequest, ListCurrenciesResponse, EstimateConversionRequest, EstimateConversionResponse, ZGetOperationStatusRequest, ZGetOperationStatusResponse, SignRawTransactionRequest, SignRawTransactionResponse }; +export type RpcRequest = typeof MakeOfferRequest | typeof GetOffersRequest | typeof GetAddressBalanceRequest | typeof GetAddressDeltasRequest | typeof GetAddressMempoolRequest | typeof GetAddressUtxosRequest | typeof GetBlockRequest | typeof GetBlockCountRequest | typeof GetVdxfIdRequest | typeof GetInfoRequest | typeof GetIdentityRequest | typeof GetIdentityContentRequest | typeof GetCurrencyRequest | typeof SendRawTransactionRequest | typeof GetRawTransactionRequest | typeof VerifyMessageRequest | typeof SignMessageRequest | typeof SignDataRequest | typeof SendCurrencyRequest | typeof UpdateIdentityRequest | typeof FundRawTransactionRequest | typeof GetCurrencyConvertersRequest | typeof ListCurrenciesRequest | typeof EstimateConversionRequest | typeof ZGetOperationStatusRequest | typeof SignRawTransactionRequest; +export type RpcResponse = typeof MakeOfferResponse | typeof GetOffersResponse | typeof GetAddressBalanceResponse | typeof GetAddressDeltasResponse | typeof GetAddressMempoolResponse | typeof GetAddressUtxosResponse | typeof GetBlockResponse | typeof GetBlockCountResponse | typeof GetVdxfIdResponse | typeof GetInfoResponse | typeof GetIdentityResponse | typeof GetCurrencyResponse | typeof SendRawTransactionResponse | typeof GetRawTransactionResponse | typeof VerifyMessageResponse | typeof SignMessageResponse | typeof SignDataResponse | typeof SendCurrencyResponse | typeof UpdateIdentityResponse | typeof FundRawTransactionResponse | typeof GetCurrencyConvertersResponse | typeof ListCurrenciesResponse | typeof EstimateConversionResponse | typeof ZGetOperationStatusResponse | typeof SignRawTransactionResponse; diff --git a/dist/api/classes/index.js b/dist/api/classes/index.js new file mode 100644 index 00000000..1e50e69e --- /dev/null +++ b/dist/api/classes/index.js @@ -0,0 +1,106 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SignRawTransactionRequest = exports.ZGetOperationStatusResponse = exports.ZGetOperationStatusRequest = exports.EstimateConversionResponse = exports.EstimateConversionRequest = exports.ListCurrenciesResponse = exports.ListCurrenciesRequest = exports.GetCurrencyConvertersResponse = exports.GetCurrencyConvertersRequest = exports.FundRawTransactionResponse = exports.FundRawTransactionRequest = exports.UpdateIdentityResponse = exports.UpdateIdentityRequest = exports.SendCurrencyResponse = exports.SendCurrencyRequest = exports.SignDataResponse = exports.SignDataRequest = exports.SignMessageResponse = exports.SignMessageRequest = exports.VerifyMessageResponse = exports.VerifyMessageRequest = exports.GetInfoResponse = exports.GetInfoRequest = exports.SendRawTransactionResponse = exports.SendRawTransactionRequest = exports.MakeOfferResponse = exports.MakeOfferRequest = exports.GetRawTransactionResponse = exports.GetRawTransactionRequest = exports.GetOffersResponse = exports.GetOffersRequest = exports.GetCurrencyResponse = exports.GetCurrencyRequest = exports.GetIdentityResponse = exports.GetIdentityContentRequest = exports.GetIdentityRequest = exports.GetVdxfIdResponse = exports.GetVdxfIdRequest = exports.GetBlockCountResponse = exports.GetBlockCountRequest = exports.GetBlockResponse = exports.GetBlockRequest = exports.GetAddressUtxosResponse = exports.GetAddressUtxosRequest = exports.GetAddressMempoolResponse = exports.GetAddressMempoolRequest = exports.GetAddressDeltasResponse = exports.GetAddressDeltasRequest = exports.GetAddressBalanceResponse = exports.GetAddressBalanceRequest = void 0; +exports.SignRawTransactionResponse = void 0; +const GetAddressBalanceRequest_1 = require("./GetAddressBalance/GetAddressBalanceRequest"); +Object.defineProperty(exports, "GetAddressBalanceRequest", { enumerable: true, get: function () { return GetAddressBalanceRequest_1.GetAddressBalanceRequest; } }); +const GetAddressBalanceResponse_1 = require("./GetAddressBalance/GetAddressBalanceResponse"); +Object.defineProperty(exports, "GetAddressBalanceResponse", { enumerable: true, get: function () { return GetAddressBalanceResponse_1.GetAddressBalanceResponse; } }); +const GetAddressDeltasRequest_1 = require("./GetAddressDeltas/GetAddressDeltasRequest"); +Object.defineProperty(exports, "GetAddressDeltasRequest", { enumerable: true, get: function () { return GetAddressDeltasRequest_1.GetAddressDeltasRequest; } }); +const GetAddressDeltasResponse_1 = require("./GetAddressDeltas/GetAddressDeltasResponse"); +Object.defineProperty(exports, "GetAddressDeltasResponse", { enumerable: true, get: function () { return GetAddressDeltasResponse_1.GetAddressDeltasResponse; } }); +const GetAddressUtxosRequest_1 = require("./GetAddressUtxos/GetAddressUtxosRequest"); +Object.defineProperty(exports, "GetAddressUtxosRequest", { enumerable: true, get: function () { return GetAddressUtxosRequest_1.GetAddressUtxosRequest; } }); +const GetAddressUtxosResponse_1 = require("./GetAddressUtxos/GetAddressUtxosResponse"); +Object.defineProperty(exports, "GetAddressUtxosResponse", { enumerable: true, get: function () { return GetAddressUtxosResponse_1.GetAddressUtxosResponse; } }); +const GetBlockRequest_1 = require("./GetBlock/GetBlockRequest"); +Object.defineProperty(exports, "GetBlockRequest", { enumerable: true, get: function () { return GetBlockRequest_1.GetBlockRequest; } }); +const GetBlockResponse_1 = require("./GetBlock/GetBlockResponse"); +Object.defineProperty(exports, "GetBlockResponse", { enumerable: true, get: function () { return GetBlockResponse_1.GetBlockResponse; } }); +const GetBlockCountRequest_1 = require("./GetBlockCount/GetBlockCountRequest"); +Object.defineProperty(exports, "GetBlockCountRequest", { enumerable: true, get: function () { return GetBlockCountRequest_1.GetBlockCountRequest; } }); +const GetBlockCountResponse_1 = require("./GetBlockCount/GetBlockCountResponse"); +Object.defineProperty(exports, "GetBlockCountResponse", { enumerable: true, get: function () { return GetBlockCountResponse_1.GetBlockCountResponse; } }); +const GetVdxfIdRequest_1 = require("./GetVdxfId/GetVdxfIdRequest"); +Object.defineProperty(exports, "GetVdxfIdRequest", { enumerable: true, get: function () { return GetVdxfIdRequest_1.GetVdxfIdRequest; } }); +const GetVdxfIdResponse_1 = require("./GetVdxfId/GetVdxfIdResponse"); +Object.defineProperty(exports, "GetVdxfIdResponse", { enumerable: true, get: function () { return GetVdxfIdResponse_1.GetVdxfIdResponse; } }); +const GetIdentityRequest_1 = require("./GetIdentity/GetIdentityRequest"); +Object.defineProperty(exports, "GetIdentityRequest", { enumerable: true, get: function () { return GetIdentityRequest_1.GetIdentityRequest; } }); +const GetIdentityContentRequest_1 = require("./GetIdentityContent/GetIdentityContentRequest"); +Object.defineProperty(exports, "GetIdentityContentRequest", { enumerable: true, get: function () { return GetIdentityContentRequest_1.GetIdentityContentRequest; } }); +const GetIdentityResponse_1 = require("./GetIdentity/GetIdentityResponse"); +Object.defineProperty(exports, "GetIdentityResponse", { enumerable: true, get: function () { return GetIdentityResponse_1.GetIdentityResponse; } }); +const GetCurrencyRequest_1 = require("./GetCurrency/GetCurrencyRequest"); +Object.defineProperty(exports, "GetCurrencyRequest", { enumerable: true, get: function () { return GetCurrencyRequest_1.GetCurrencyRequest; } }); +const GetCurrencyResponse_1 = require("./GetCurrency/GetCurrencyResponse"); +Object.defineProperty(exports, "GetCurrencyResponse", { enumerable: true, get: function () { return GetCurrencyResponse_1.GetCurrencyResponse; } }); +const GetInfoRequest_1 = require("./GetInfo/GetInfoRequest"); +Object.defineProperty(exports, "GetInfoRequest", { enumerable: true, get: function () { return GetInfoRequest_1.GetInfoRequest; } }); +const GetInfoResponse_1 = require("./GetInfo/GetInfoResponse"); +Object.defineProperty(exports, "GetInfoResponse", { enumerable: true, get: function () { return GetInfoResponse_1.GetInfoResponse; } }); +const GetOffersRequest_1 = require("./GetOffers/GetOffersRequest"); +Object.defineProperty(exports, "GetOffersRequest", { enumerable: true, get: function () { return GetOffersRequest_1.GetOffersRequest; } }); +const GetOffersResponse_1 = require("./GetOffers/GetOffersResponse"); +Object.defineProperty(exports, "GetOffersResponse", { enumerable: true, get: function () { return GetOffersResponse_1.GetOffersResponse; } }); +const GetRawTransactionRequest_1 = require("./GetRawTransaction/GetRawTransactionRequest"); +Object.defineProperty(exports, "GetRawTransactionRequest", { enumerable: true, get: function () { return GetRawTransactionRequest_1.GetRawTransactionRequest; } }); +const GetRawTransactionResponse_1 = require("./GetRawTransaction/GetRawTransactionResponse"); +Object.defineProperty(exports, "GetRawTransactionResponse", { enumerable: true, get: function () { return GetRawTransactionResponse_1.GetRawTransactionResponse; } }); +const MakeOfferRequest_1 = require("./MakeOffer/MakeOfferRequest"); +Object.defineProperty(exports, "MakeOfferRequest", { enumerable: true, get: function () { return MakeOfferRequest_1.MakeOfferRequest; } }); +const MakeOfferResponse_1 = require("./MakeOffer/MakeOfferResponse"); +Object.defineProperty(exports, "MakeOfferResponse", { enumerable: true, get: function () { return MakeOfferResponse_1.MakeOfferResponse; } }); +const SendRawTransactionRequest_1 = require("./SendRawTransaction/SendRawTransactionRequest"); +Object.defineProperty(exports, "SendRawTransactionRequest", { enumerable: true, get: function () { return SendRawTransactionRequest_1.SendRawTransactionRequest; } }); +const SendRawTransactionResponse_1 = require("./SendRawTransaction/SendRawTransactionResponse"); +Object.defineProperty(exports, "SendRawTransactionResponse", { enumerable: true, get: function () { return SendRawTransactionResponse_1.SendRawTransactionResponse; } }); +const SignMessageRequest_1 = require("./SignMessage/SignMessageRequest"); +Object.defineProperty(exports, "SignMessageRequest", { enumerable: true, get: function () { return SignMessageRequest_1.SignMessageRequest; } }); +const SignMessageResponse_1 = require("./SignMessage/SignMessageResponse"); +Object.defineProperty(exports, "SignMessageResponse", { enumerable: true, get: function () { return SignMessageResponse_1.SignMessageResponse; } }); +const SignDataRequest_1 = require("./SignData/SignDataRequest"); +Object.defineProperty(exports, "SignDataRequest", { enumerable: true, get: function () { return SignDataRequest_1.SignDataRequest; } }); +const SignDataResponse_1 = require("./SignData/SignDataResponse"); +Object.defineProperty(exports, "SignDataResponse", { enumerable: true, get: function () { return SignDataResponse_1.SignDataResponse; } }); +const VerifyMessageRequest_1 = require("./VerifyMessage/VerifyMessageRequest"); +Object.defineProperty(exports, "VerifyMessageRequest", { enumerable: true, get: function () { return VerifyMessageRequest_1.VerifyMessageRequest; } }); +const VerifyMessageResponse_1 = require("./VerifyMessage/VerifyMessageResponse"); +Object.defineProperty(exports, "VerifyMessageResponse", { enumerable: true, get: function () { return VerifyMessageResponse_1.VerifyMessageResponse; } }); +const GetAddressMempoolResponse_1 = require("./GetAddressMempool/GetAddressMempoolResponse"); +Object.defineProperty(exports, "GetAddressMempoolResponse", { enumerable: true, get: function () { return GetAddressMempoolResponse_1.GetAddressMempoolResponse; } }); +const GetAddressMempoolRequest_1 = require("./GetAddressMempool/GetAddressMempoolRequest"); +Object.defineProperty(exports, "GetAddressMempoolRequest", { enumerable: true, get: function () { return GetAddressMempoolRequest_1.GetAddressMempoolRequest; } }); +const SendCurrencyRequest_1 = require("./SendCurrency/SendCurrencyRequest"); +Object.defineProperty(exports, "SendCurrencyRequest", { enumerable: true, get: function () { return SendCurrencyRequest_1.SendCurrencyRequest; } }); +const SendCurrencyResponse_1 = require("./SendCurrency/SendCurrencyResponse"); +Object.defineProperty(exports, "SendCurrencyResponse", { enumerable: true, get: function () { return SendCurrencyResponse_1.SendCurrencyResponse; } }); +const UpdateIdentityRequest_1 = require("./UpdateIdentity/UpdateIdentityRequest"); +Object.defineProperty(exports, "UpdateIdentityRequest", { enumerable: true, get: function () { return UpdateIdentityRequest_1.UpdateIdentityRequest; } }); +const UpdateIdentityResponse_1 = require("./UpdateIdentity/UpdateIdentityResponse"); +Object.defineProperty(exports, "UpdateIdentityResponse", { enumerable: true, get: function () { return UpdateIdentityResponse_1.UpdateIdentityResponse; } }); +const FundRawTransactionRequest_1 = require("./FundRawTransaction/FundRawTransactionRequest"); +Object.defineProperty(exports, "FundRawTransactionRequest", { enumerable: true, get: function () { return FundRawTransactionRequest_1.FundRawTransactionRequest; } }); +const FundRawTransactionResponse_1 = require("./FundRawTransaction/FundRawTransactionResponse"); +Object.defineProperty(exports, "FundRawTransactionResponse", { enumerable: true, get: function () { return FundRawTransactionResponse_1.FundRawTransactionResponse; } }); +const SignRawTransactionRequest_1 = require("./SignRawTransaction/SignRawTransactionRequest"); +Object.defineProperty(exports, "SignRawTransactionRequest", { enumerable: true, get: function () { return SignRawTransactionRequest_1.SignRawTransactionRequest; } }); +const SignRawTransactionResponse_1 = require("./SignRawTransaction/SignRawTransactionResponse"); +Object.defineProperty(exports, "SignRawTransactionResponse", { enumerable: true, get: function () { return SignRawTransactionResponse_1.SignRawTransactionResponse; } }); +const GetCurrencyConvertersRequest_1 = require("./GetCurrencyConverters/GetCurrencyConvertersRequest"); +Object.defineProperty(exports, "GetCurrencyConvertersRequest", { enumerable: true, get: function () { return GetCurrencyConvertersRequest_1.GetCurrencyConvertersRequest; } }); +const GetCurrencyConvertersResponse_1 = require("./GetCurrencyConverters/GetCurrencyConvertersResponse"); +Object.defineProperty(exports, "GetCurrencyConvertersResponse", { enumerable: true, get: function () { return GetCurrencyConvertersResponse_1.GetCurrencyConvertersResponse; } }); +const ListCurrenciesRequest_1 = require("./ListCurrencies/ListCurrenciesRequest"); +Object.defineProperty(exports, "ListCurrenciesRequest", { enumerable: true, get: function () { return ListCurrenciesRequest_1.ListCurrenciesRequest; } }); +const ListCurrenciesResponse_1 = require("./ListCurrencies/ListCurrenciesResponse"); +Object.defineProperty(exports, "ListCurrenciesResponse", { enumerable: true, get: function () { return ListCurrenciesResponse_1.ListCurrenciesResponse; } }); +const EstimateConversionRequest_1 = require("./EstimateConversion/EstimateConversionRequest"); +Object.defineProperty(exports, "EstimateConversionRequest", { enumerable: true, get: function () { return EstimateConversionRequest_1.EstimateConversionRequest; } }); +const EstimateConversionResponse_1 = require("./EstimateConversion/EstimateConversionResponse"); +Object.defineProperty(exports, "EstimateConversionResponse", { enumerable: true, get: function () { return EstimateConversionResponse_1.EstimateConversionResponse; } }); +const ZGetOperationStatusRequest_1 = require("./ZGetOperationStatus/ZGetOperationStatusRequest"); +Object.defineProperty(exports, "ZGetOperationStatusRequest", { enumerable: true, get: function () { return ZGetOperationStatusRequest_1.ZGetOperationStatusRequest; } }); +const ZGetOperationStatusResponse_1 = require("./ZGetOperationStatus/ZGetOperationStatusResponse"); +Object.defineProperty(exports, "ZGetOperationStatusResponse", { enumerable: true, get: function () { return ZGetOperationStatusResponse_1.ZGetOperationStatusResponse; } }); diff --git a/dist/block/BlockInfo.d.ts b/dist/block/BlockInfo.d.ts new file mode 100644 index 00000000..f46bf867 --- /dev/null +++ b/dist/block/BlockInfo.d.ts @@ -0,0 +1,40 @@ +export interface BlockInfo { + hash: string; + validationtype: string; + confirmations: number; + size: number; + height: number; + version: number; + merkleroot: string; + segid: number; + finalsaplingroot: string; + tx: Array; + time: number; + nonce: string; + solution: string; + bits: string; + difficulty: number; + chainwork: string; + chainstake: string; + anchor: string; + blocktype: string; + valuePools: Array<{ + id: string; + monitored: boolean; + chainValue: number; + chainValueZat: number; + valueDelta: number; + valueDeltaZat: number; + }>; + previousblockhash: string; + nextblockhash: string; + proofroot: { + version: number; + type: number; + systemid: string; + height: number; + stateroot: string; + blockhash: string; + power: string; + }; +} diff --git a/dist/block/BlockInfo.js b/dist/block/BlockInfo.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/block/BlockInfo.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/constants/cmds.d.ts b/dist/constants/cmds.d.ts new file mode 100644 index 00000000..1da76544 --- /dev/null +++ b/dist/constants/cmds.d.ts @@ -0,0 +1,26 @@ +export declare const MAKE_OFFER = "makeoffer"; +export declare const GET_OFFERS = "getoffers"; +export declare const GET_IDENTITY = "getidentity"; +export declare const GET_IDENTITY_CONTENT = "getidentitycontent"; +export declare const GET_CURRENCY = "getcurrency"; +export declare const GET_ADDRESS_BALANCE = "getaddressbalance"; +export declare const GET_INFO = "getinfo"; +export declare const GET_BLOCK = "getblock"; +export declare const GET_BLOCK_COUNT = "getblockcount"; +export declare const GET_VDXF_ID = "getvdxfid"; +export declare const GET_RAW_TRANSACTION = "getrawtransaction"; +export declare const GET_ADDRESS_DELTAS = "getaddressdeltas"; +export declare const GET_ADDRESS_MEMPOOL = "getaddressmempool"; +export declare const SEND_RAW_TRANSACTION = "sendrawtransaction"; +export declare const GET_ADDRESS_UTXOS = "getaddressutxos"; +export declare const SIGN_DATA = "signdata"; +export declare const SIGN_MESSAGE = "signmessage"; +export declare const VERIFY_MESSAGE = "verifymessage"; +export declare const FUND_RAW_TRANSACTION = "fundrawtransaction"; +export declare const SEND_CURRENCY = "sendcurrency"; +export declare const UPDATE_IDENTITY = "updateidentity"; +export declare const GET_CURRENCY_CONVERTERS = "getcurrencyconverters"; +export declare const LIST_CURRENCIES = "listcurrencies"; +export declare const ESTIMATE_CONVERSION = "estimateconversion"; +export declare const Z_GET_OPERATION_STATUS = "z_getoperationstatus"; +export declare const SIGN_RAW_TRANSACTION = "signrawtransaction"; diff --git a/dist/constants/cmds.js b/dist/constants/cmds.js new file mode 100644 index 00000000..b3706b67 --- /dev/null +++ b/dist/constants/cmds.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SIGN_RAW_TRANSACTION = exports.Z_GET_OPERATION_STATUS = exports.ESTIMATE_CONVERSION = exports.LIST_CURRENCIES = exports.GET_CURRENCY_CONVERTERS = exports.UPDATE_IDENTITY = exports.SEND_CURRENCY = exports.FUND_RAW_TRANSACTION = exports.VERIFY_MESSAGE = exports.SIGN_MESSAGE = exports.SIGN_DATA = exports.GET_ADDRESS_UTXOS = exports.SEND_RAW_TRANSACTION = exports.GET_ADDRESS_MEMPOOL = exports.GET_ADDRESS_DELTAS = exports.GET_RAW_TRANSACTION = exports.GET_VDXF_ID = exports.GET_BLOCK_COUNT = exports.GET_BLOCK = exports.GET_INFO = exports.GET_ADDRESS_BALANCE = exports.GET_CURRENCY = exports.GET_IDENTITY_CONTENT = exports.GET_IDENTITY = exports.GET_OFFERS = exports.MAKE_OFFER = void 0; +exports.MAKE_OFFER = 'makeoffer'; +exports.GET_OFFERS = 'getoffers'; +exports.GET_IDENTITY = 'getidentity'; +exports.GET_IDENTITY_CONTENT = 'getidentitycontent'; +exports.GET_CURRENCY = 'getcurrency'; +exports.GET_ADDRESS_BALANCE = 'getaddressbalance'; +exports.GET_INFO = 'getinfo'; +exports.GET_BLOCK = 'getblock'; +exports.GET_BLOCK_COUNT = 'getblockcount'; +exports.GET_VDXF_ID = 'getvdxfid'; +exports.GET_RAW_TRANSACTION = 'getrawtransaction'; +exports.GET_ADDRESS_DELTAS = 'getaddressdeltas'; +exports.GET_ADDRESS_MEMPOOL = 'getaddressmempool'; +exports.SEND_RAW_TRANSACTION = 'sendrawtransaction'; +exports.GET_ADDRESS_UTXOS = 'getaddressutxos'; +exports.SIGN_DATA = 'signdata'; +exports.SIGN_MESSAGE = 'signmessage'; +exports.VERIFY_MESSAGE = 'verifymessage'; +exports.FUND_RAW_TRANSACTION = 'fundrawtransaction'; +exports.SEND_CURRENCY = 'sendcurrency'; +exports.UPDATE_IDENTITY = 'updateidentity'; +exports.GET_CURRENCY_CONVERTERS = 'getcurrencyconverters'; +exports.LIST_CURRENCIES = 'listcurrencies'; +exports.ESTIMATE_CONVERSION = 'estimateconversion'; +exports.Z_GET_OPERATION_STATUS = 'z_getoperationstatus'; +exports.SIGN_RAW_TRANSACTION = 'signrawtransaction'; diff --git a/dist/constants/deeplink.d.ts b/dist/constants/deeplink.d.ts new file mode 100644 index 00000000..9de6f765 --- /dev/null +++ b/dist/constants/deeplink.d.ts @@ -0,0 +1,2 @@ +export declare const DEEPLINK_PROTOCOL_URL_STRING = "verus"; +export declare const DEEPLINK_PROTOCOL_URL_CURRENT_VERSION: import("bn.js"); diff --git a/dist/constants/deeplink.js b/dist/constants/deeplink.js new file mode 100644 index 00000000..757276fc --- /dev/null +++ b/dist/constants/deeplink.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DEEPLINK_PROTOCOL_URL_CURRENT_VERSION = exports.DEEPLINK_PROTOCOL_URL_STRING = void 0; +const bn_js_1 = require("bn.js"); +exports.DEEPLINK_PROTOCOL_URL_STRING = "verus"; +exports.DEEPLINK_PROTOCOL_URL_CURRENT_VERSION = new bn_js_1.BN(1, 10); diff --git a/dist/constants/ordinals/ordinals.d.ts b/dist/constants/ordinals/ordinals.d.ts new file mode 100644 index 00000000..5d930738 --- /dev/null +++ b/dist/constants/ordinals/ordinals.d.ts @@ -0,0 +1,15 @@ +export declare const VDXF_OBJECT_RESERVED_BYTE_I_ADDR: import("bn.js"); +export declare const VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING: import("bn.js"); +export declare const VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY: import("bn.js"); +export declare const VDXF_ORDINAL_DATA_DESCRIPTOR: import("bn.js"); +export declare const VDXF_ORDINAL_VERUSPAY_INVOICE: import("bn.js"); +export declare const VDXF_ORDINAL_AUTHENTICATION_REQUEST: import("bn.js"); +export declare const VDXF_ORDINAL_AUTHENTICATION_RESPONSE: import("bn.js"); +export declare const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST: import("bn.js"); +export declare const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE: import("bn.js"); +export declare const VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS: import("bn.js"); +export declare const VDXF_ORDINAL_APP_ENCRYPTION_REQUEST: import("bn.js"); +export declare const VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE: import("bn.js"); +export declare const VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET: import("bn.js"); +export declare const VDXF_ORDINAL_USER_DATA_REQUEST: import("bn.js"); +export declare const VDXF_ORDINAL_DATA_RESPONSE: import("bn.js"); diff --git a/dist/constants/ordinals/ordinals.js b/dist/constants/ordinals/ordinals.js new file mode 100644 index 00000000..377533af --- /dev/null +++ b/dist/constants/ordinals/ordinals.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VDXF_ORDINAL_DATA_RESPONSE = exports.VDXF_ORDINAL_USER_DATA_REQUEST = exports.VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET = exports.VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE = exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = exports.VDXF_ORDINAL_AUTHENTICATION_RESPONSE = exports.VDXF_ORDINAL_AUTHENTICATION_REQUEST = exports.VDXF_ORDINAL_VERUSPAY_INVOICE = exports.VDXF_ORDINAL_DATA_DESCRIPTOR = exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = void 0; +const bn_js_1 = require("bn.js"); +exports.VDXF_OBJECT_RESERVED_BYTE_I_ADDR = new bn_js_1.BN(102, 10); +exports.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING = new bn_js_1.BN(103, 10); +exports.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY = new bn_js_1.BN(104, 10); +exports.VDXF_ORDINAL_DATA_DESCRIPTOR = new bn_js_1.BN(0, 10); +exports.VDXF_ORDINAL_VERUSPAY_INVOICE = new bn_js_1.BN(1, 10); +exports.VDXF_ORDINAL_AUTHENTICATION_REQUEST = new bn_js_1.BN(2, 10); +exports.VDXF_ORDINAL_AUTHENTICATION_RESPONSE = new bn_js_1.BN(3, 10); +exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new bn_js_1.BN(4, 10); +exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new bn_js_1.BN(5, 10); +exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new bn_js_1.BN(6, 10); +exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = new bn_js_1.BN(8, 10); +exports.VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE = new bn_js_1.BN(9, 10); +exports.VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET = new bn_js_1.BN(10, 10); +exports.VDXF_ORDINAL_USER_DATA_REQUEST = new bn_js_1.BN(12, 10); +exports.VDXF_ORDINAL_DATA_RESPONSE = new bn_js_1.BN(13, 10); diff --git a/dist/constants/ordinals/register.d.ts b/dist/constants/ordinals/register.d.ts new file mode 100644 index 00000000..d3677b75 --- /dev/null +++ b/dist/constants/ordinals/register.d.ts @@ -0,0 +1 @@ +export declare const registerOrdinals: () => void; diff --git a/dist/constants/ordinals/register.js b/dist/constants/ordinals/register.js new file mode 100644 index 00000000..6707ce64 --- /dev/null +++ b/dist/constants/ordinals/register.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.registerOrdinals = void 0; +const vdxf_1 = require("../../vdxf"); +const AppEncryptionRequestOrdinalVDXFObject_1 = require("../../vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject"); +const DataDescriptorOrdinalVDXFObject_1 = require("../../vdxf/classes/ordinals/DataDescriptorOrdinalVDXFObject"); +const DataPacketResponseOrdinalVDXFObject_1 = require("../../vdxf/classes/ordinals/DataPacketResponseOrdinalVDXFObject"); +const UserDataRequestOrdinalVDXFObject_1 = require("../../vdxf/classes/ordinals/UserDataRequestOrdinalVDXFObject"); +const UserSpecificDataPacketDetailsOrdinalVDXFObject_1 = require("../../vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVDXFObject"); +const IdentityUpdateRequestOrdinalVDXFObject_1 = require("../../vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVDXFObject"); +const IdentityUpdateResponseOrdinalVDXFObject_1 = require("../../vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVDXFObject"); +const AuthenticationRequestOrdinalVDXFObject_1 = require("../../vdxf/classes/ordinals/AuthenticationRequestOrdinalVDXFObject"); +const AuthenticationResponseOrdinalVDXFObject_1 = require("../../vdxf/classes/ordinals/AuthenticationResponseOrdinalVDXFObject"); +const OrdinalVDXFObjectOrdinalMap_1 = require("../../vdxf/classes/ordinals/OrdinalVDXFObjectOrdinalMap"); +const ProvisionIdentityDetailsOrdinalVDXFObject_1 = require("../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVDXFObject"); +const VerusPayInvoiceOrdinalVDXFObject_1 = require("../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVDXFObject"); +const ordinals_1 = require("./ordinals"); +const AppEncryptionResponseOrdinalVDXFObject_1 = require("../../vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject"); +const registerOrdinals = () => { + OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), vdxf_1.DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVDXFObject_1.DataDescriptorOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), vdxf_1.VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid, VerusPayInvoiceOrdinalVDXFObject_1.VerusPayInvoiceOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_AUTHENTICATION_REQUEST.toNumber(), vdxf_1.AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY.vdxfid, AuthenticationRequestOrdinalVDXFObject_1.AuthenticationRequestOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_AUTHENTICATION_RESPONSE.toNumber(), vdxf_1.AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY.vdxfid, AuthenticationResponseOrdinalVDXFObject_1.AuthenticationResponseOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), vdxf_1.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVDXFObject_1.IdentityUpdateRequestOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), vdxf_1.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVDXFObject_1.IdentityUpdateResponseOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), vdxf_1.PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVDXFObject_1.ProvisionIdentityDetailsOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST.toNumber(), vdxf_1.APP_ENCRYPTION_REQUEST_VDXF_KEY.vdxfid, AppEncryptionRequestOrdinalVDXFObject_1.AppEncryptionRequestOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_DATA_RESPONSE.toNumber(), vdxf_1.DATA_RESPONSE_VDXF_KEY.vdxfid, DataPacketResponseOrdinalVDXFObject_1.DataPacketResponseOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_USER_DATA_REQUEST.toNumber(), vdxf_1.USER_DATA_REQUEST_VDXF_KEY.vdxfid, UserDataRequestOrdinalVDXFObject_1.UserDataRequestOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET.toNumber(), vdxf_1.USER_SPECIFIC_DATA_PACKET_VDXF_KEY.vdxfid, UserSpecificDataPacketDetailsOrdinalVDXFObject_1.UserSpecificDataPacketDetailsOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE.toNumber(), vdxf_1.APP_ENCRYPTION_RESPONSE_VDXF_KEY.vdxfid, AppEncryptionResponseOrdinalVDXFObject_1.AppEncryptionResponseOrdinalVDXFObject, false); +}; +exports.registerOrdinals = registerOrdinals; diff --git a/dist/constants/ordinals/types.d.ts b/dist/constants/ordinals/types.d.ts new file mode 100644 index 00000000..d51d39b2 --- /dev/null +++ b/dist/constants/ordinals/types.d.ts @@ -0,0 +1,6 @@ +import { DataDescriptor, DataDescriptorJson } from "../../pbaas"; +import { AppEncryptionRequestDetails, AppEncryptionRequestJson, IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson, IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson, AuthenticationRequestDetails, AuthenticationRequestDetailsJson, AuthenticationResponseDetails, AuthenticationResponseDetailsJson, ProvisionIdentityDetails, ProvisionIdentityDetailsJson, UserDataRequestDetails, UserDataRequestJson, UserSpecificDataPacketDetails, UserSpecificDataPacketDetailsJson, VerusPayInvoiceDetails, AppEncryptionResponseDetails, AppEncryptionResponseDetailsJson } from "../../vdxf/classes"; +import { VerusPayInvoiceDetailsJson } from "../../vdxf/classes/payment/VerusPayInvoiceDetails"; +import { DataPacketResponse, DataResponseJson } from "../../vdxf/classes/datapacket/DataPacketResponse"; +export type OrdinalVDXFObjectReservedData = DataDescriptor | VerusPayInvoiceDetails | IdentityUpdateRequestDetails | IdentityUpdateResponseDetails | AuthenticationRequestDetails | AuthenticationResponseDetails | ProvisionIdentityDetails | AppEncryptionRequestDetails | DataPacketResponse | UserDataRequestDetails | UserSpecificDataPacketDetails | AppEncryptionResponseDetails; +export type OrdinalVDXFObjectReservedDataJson = DataDescriptorJson | VerusPayInvoiceDetailsJson | IdentityUpdateRequestDetailsJson | IdentityUpdateResponseDetailsJson | AuthenticationRequestDetailsJson | AuthenticationResponseDetailsJson | ProvisionIdentityDetailsJson | AppEncryptionRequestJson | DataResponseJson | UserDataRequestJson | UserSpecificDataPacketDetailsJson | AppEncryptionResponseDetailsJson; diff --git a/dist/constants/ordinals/types.js b/dist/constants/ordinals/types.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/constants/ordinals/types.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/constants/pbaas.d.ts b/dist/constants/pbaas.d.ts new file mode 100644 index 00000000..456ac926 --- /dev/null +++ b/dist/constants/pbaas.d.ts @@ -0,0 +1,29 @@ +export declare const DATA_TYPE_UNKNOWN: import("bn.js"); +export declare const DATA_TYPE_MMRDATA: import("bn.js"); +export declare const DATA_TYPE_FILENAME: import("bn.js"); +export declare const DATA_TYPE_MESSAGE: import("bn.js"); +export declare const DATA_TYPE_VDXFDATA: import("bn.js"); +export declare const DATA_TYPE_HEX: import("bn.js"); +export declare const DATA_TYPE_BASE64: import("bn.js"); +export declare const DATA_TYPE_DATAHASH: import("bn.js"); +export declare const DATA_TYPE_RAWSTRINGDATA: import("bn.js"); +export declare const HASH_TYPE_INVALID: import("bn.js"); +export declare const HASH_TYPE_BLAKE2B: import("bn.js"); +export declare const HASH_TYPE_BLAKE2BMMR2: import("bn.js"); +export declare const HASH_TYPE_KECCAK256: import("bn.js"); +export declare const HASH_TYPE_SHA256D: import("bn.js"); +export declare const HASH_TYPE_SHA256: import("bn.js"); +export declare const HASH_TYPE_SHA256_NAME = "sha256"; +export declare const HASH_TYPE_SHA256D_NAME = "sha256D"; +export declare const HASH_TYPE_BLAKE2B_NAME = "blake2b"; +export declare const HASH_TYPE_KECCAK256_NAME = "keccak256"; +export declare const DEFAULT_HASH_TYPE: import("bn.js"); +export declare const DEFAULT_HASH_TYPE_MMR: import("bn.js"); +export declare const HASH_NAMES: string[]; +export type AllowedHashes = (typeof HASH_NAMES)[number]; +export declare const UINT_256_LENGTH = 32; +export declare const DEFAULT_VERUS_CHAINID = "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV"; +export declare const TESTNET_VERUS_CHAINID = "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"; +export declare const DEFAULT_VERUS_CHAINNAME = "VRSC"; +export declare const KOMODO_ASSETCHAIN_MAXLEN = 65; +export declare const NULL_I_ADDR = "i3UXS5QPRQGNRDDqVnyWTnmFCTHDbzmsYk"; diff --git a/dist/constants/pbaas.js b/dist/constants/pbaas.js new file mode 100644 index 00000000..89594331 --- /dev/null +++ b/dist/constants/pbaas.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.NULL_I_ADDR = exports.KOMODO_ASSETCHAIN_MAXLEN = exports.DEFAULT_VERUS_CHAINNAME = exports.TESTNET_VERUS_CHAINID = exports.DEFAULT_VERUS_CHAINID = exports.UINT_256_LENGTH = exports.HASH_NAMES = exports.DEFAULT_HASH_TYPE_MMR = exports.DEFAULT_HASH_TYPE = exports.HASH_TYPE_KECCAK256_NAME = exports.HASH_TYPE_BLAKE2B_NAME = exports.HASH_TYPE_SHA256D_NAME = exports.HASH_TYPE_SHA256_NAME = exports.HASH_TYPE_SHA256 = exports.HASH_TYPE_SHA256D = exports.HASH_TYPE_KECCAK256 = exports.HASH_TYPE_BLAKE2BMMR2 = exports.HASH_TYPE_BLAKE2B = exports.HASH_TYPE_INVALID = exports.DATA_TYPE_RAWSTRINGDATA = exports.DATA_TYPE_DATAHASH = exports.DATA_TYPE_BASE64 = exports.DATA_TYPE_HEX = exports.DATA_TYPE_VDXFDATA = exports.DATA_TYPE_MESSAGE = exports.DATA_TYPE_FILENAME = exports.DATA_TYPE_MMRDATA = exports.DATA_TYPE_UNKNOWN = void 0; +const bn_js_1 = require("bn.js"); +exports.DATA_TYPE_UNKNOWN = new bn_js_1.BN("0", 10); +exports.DATA_TYPE_MMRDATA = new bn_js_1.BN("1", 10); +exports.DATA_TYPE_FILENAME = new bn_js_1.BN("2", 10); +exports.DATA_TYPE_MESSAGE = new bn_js_1.BN("3", 10); +exports.DATA_TYPE_VDXFDATA = new bn_js_1.BN("4", 10); +exports.DATA_TYPE_HEX = new bn_js_1.BN("5", 10); +exports.DATA_TYPE_BASE64 = new bn_js_1.BN("6", 10); +exports.DATA_TYPE_DATAHASH = new bn_js_1.BN("7", 10); +exports.DATA_TYPE_RAWSTRINGDATA = new bn_js_1.BN("8", 10); +exports.HASH_TYPE_INVALID = new bn_js_1.BN(0, 10); +exports.HASH_TYPE_BLAKE2B = new bn_js_1.BN(1, 10); +exports.HASH_TYPE_BLAKE2BMMR2 = new bn_js_1.BN(2, 10); +exports.HASH_TYPE_KECCAK256 = new bn_js_1.BN(3, 10); +exports.HASH_TYPE_SHA256D = new bn_js_1.BN(4, 10); +exports.HASH_TYPE_SHA256 = new bn_js_1.BN(5, 10); +exports.HASH_TYPE_SHA256_NAME = "sha256"; +exports.HASH_TYPE_SHA256D_NAME = "sha256D"; +exports.HASH_TYPE_BLAKE2B_NAME = "blake2b"; +exports.HASH_TYPE_KECCAK256_NAME = "keccak256"; +exports.DEFAULT_HASH_TYPE = exports.HASH_TYPE_SHA256; +exports.DEFAULT_HASH_TYPE_MMR = exports.HASH_TYPE_BLAKE2B; +exports.HASH_NAMES = [exports.HASH_TYPE_SHA256_NAME, exports.HASH_TYPE_SHA256D_NAME, exports.HASH_TYPE_BLAKE2B_NAME, exports.HASH_TYPE_KECCAK256_NAME]; +exports.UINT_256_LENGTH = 32; +exports.DEFAULT_VERUS_CHAINID = "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV"; +exports.TESTNET_VERUS_CHAINID = "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq"; +exports.DEFAULT_VERUS_CHAINNAME = "VRSC"; +exports.KOMODO_ASSETCHAIN_MAXLEN = 65; +exports.NULL_I_ADDR = "i3UXS5QPRQGNRDDqVnyWTnmFCTHDbzmsYk"; diff --git a/dist/constants/vdxf.d.ts b/dist/constants/vdxf.d.ts new file mode 100644 index 00000000..583e1c8b --- /dev/null +++ b/dist/constants/vdxf.d.ts @@ -0,0 +1,8 @@ +export declare const VDXF_OBJECT_DEFAULT_VERSION: import("bn.js"); +export declare const HASH160_BYTE_LENGTH = 20; +export declare const HASH256_BYTE_LENGTH = 32; +export declare const I_ADDR_VERSION = 102; +export declare const R_ADDR_VERSION = 60; +export declare const X_ADDR_VERSION = 137; +export declare const NULL_ADDRESS = "i3UXS5QPRQGNRDDqVnyWTnmFCTHDbzmsYk"; +export declare const VERUS_DATA_SIGNATURE_PREFIX: Buffer; diff --git a/dist/constants/vdxf.js b/dist/constants/vdxf.js new file mode 100644 index 00000000..841f4172 --- /dev/null +++ b/dist/constants/vdxf.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VERUS_DATA_SIGNATURE_PREFIX = exports.NULL_ADDRESS = exports.X_ADDR_VERSION = exports.R_ADDR_VERSION = exports.I_ADDR_VERSION = exports.HASH256_BYTE_LENGTH = exports.HASH160_BYTE_LENGTH = exports.VDXF_OBJECT_DEFAULT_VERSION = void 0; +const bn_js_1 = require("bn.js"); +const bufferutils_1 = require("../utils/bufferutils"); +exports.VDXF_OBJECT_DEFAULT_VERSION = new bn_js_1.BN(1, 10); +exports.HASH160_BYTE_LENGTH = 20; +exports.HASH256_BYTE_LENGTH = 32; +exports.I_ADDR_VERSION = 102; +exports.R_ADDR_VERSION = 60; +exports.X_ADDR_VERSION = 137; +exports.NULL_ADDRESS = "i3UXS5QPRQGNRDDqVnyWTnmFCTHDbzmsYk"; +const VERUS_DATA_SIGNATURE_PREFIX_STRING = "Verus signed data:\n"; +var bufferWriter = new bufferutils_1.default.BufferWriter(Buffer.alloc(VERUS_DATA_SIGNATURE_PREFIX_STRING.length + 1)); +bufferWriter.writeVarSlice(Buffer.from(VERUS_DATA_SIGNATURE_PREFIX_STRING, "utf-8")); +exports.VERUS_DATA_SIGNATURE_PREFIX = bufferWriter.buffer; diff --git a/dist/constants/vdxf/veruspay.d.ts b/dist/constants/vdxf/veruspay.d.ts new file mode 100644 index 00000000..23206769 --- /dev/null +++ b/dist/constants/vdxf/veruspay.d.ts @@ -0,0 +1,7 @@ +export declare const VERUSPAY_VERSION_3: import("bn.js"); +export declare const VERUSPAY_VERSION_4: import("bn.js"); +export declare const VERUSPAY_VERSION_CURRENT: import("bn.js"); +export declare const VERUSPAY_VERSION_FIRSTVALID: import("bn.js"); +export declare const VERUSPAY_VERSION_LASTVALID: import("bn.js"); +export declare const VERUSPAY_VERSION_SIGNED: import("bn.js"); +export declare const VERUSPAY_VERSION_MASK: import("bn.js"); diff --git a/dist/constants/vdxf/veruspay.js b/dist/constants/vdxf/veruspay.js new file mode 100644 index 00000000..229947cd --- /dev/null +++ b/dist/constants/vdxf/veruspay.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VERUSPAY_VERSION_MASK = exports.VERUSPAY_VERSION_SIGNED = exports.VERUSPAY_VERSION_LASTVALID = exports.VERUSPAY_VERSION_FIRSTVALID = exports.VERUSPAY_VERSION_CURRENT = exports.VERUSPAY_VERSION_4 = exports.VERUSPAY_VERSION_3 = void 0; +const bn_js_1 = require("bn.js"); +exports.VERUSPAY_VERSION_3 = new bn_js_1.BN(3, 10); +exports.VERUSPAY_VERSION_4 = new bn_js_1.BN(4, 10); +exports.VERUSPAY_VERSION_CURRENT = new bn_js_1.BN(4, 10); +exports.VERUSPAY_VERSION_FIRSTVALID = new bn_js_1.BN(3, 10); +exports.VERUSPAY_VERSION_LASTVALID = new bn_js_1.BN(4, 10); +exports.VERUSPAY_VERSION_SIGNED = new bn_js_1.BN('80000000', 16); +exports.VERUSPAY_VERSION_MASK = exports.VERUSPAY_VERSION_SIGNED; diff --git a/dist/currency/CurrencyDefinition.d.ts b/dist/currency/CurrencyDefinition.d.ts new file mode 100644 index 00000000..71322d2f --- /dev/null +++ b/dist/currency/CurrencyDefinition.d.ts @@ -0,0 +1,93 @@ +export type CurrencyDefinition = { + version: number; + options: number; + name: string; + currencyid: string; + parent: string; + systemid: string; + maxpreconversion?: Array; + minpreconversion?: Array; + notarizationprotocol: number; + proofprotocol: number; + launchsystemid: string; + startblock: number; + endblock: number; + currencies: Array; + weights: Array; + conversions: Array; + initialsupply: number; + prelaunchcarveout: number; + initialcontributions: Array; + idregistrationfees: number; + idreferrallevels: number; + idimportfees: number; + currencyidhex: string; + fullyqualifiedname: string; + currencynames: { + [key: string]: string; + }; + definitiontxid: string; + definitiontxout: number; + bestheight: number; + lastconfirmedheight: number; + bestcurrencystate?: { + flags: number; + version: number; + currencyid: string; + reservecurrencies: Array<{ + currencyid: string; + weight: number; + reserves: number; + priceinreserve: number; + }>; + initialsupply: number; + emitted: number; + supply: number; + currencies: { + [key: string]: { + reservein: number; + primarycurrencyin: number; + reserveout: number; + lastconversionprice: number; + viaconversionprice: number; + fees: number; + conversionfees: number; + priorweights: number; + }; + }; + primarycurrencyfees: number; + primarycurrencyconversionfees: number; + primarycurrencyout: number; + preconvertedout: number; + }; + lastconfirmedcurrencystate?: { + flags: number; + version: number; + currencyid: string; + reservecurrencies: Array<{ + currencyid: string; + weight: number; + reserves: number; + priceinreserve: number; + }>; + initialsupply: number; + emitted: number; + supply: number; + currencies: { + [key: string]: { + reservein: number; + primarycurrencyin: number; + reserveout: number; + lastconversionprice: number; + viaconversionprice: number; + fees: number; + conversionfees: number; + priorweights: number; + }; + }; + primarycurrencyfees: number; + primarycurrencyconversionfees: number; + primarycurrencyout: number; + preconvertedout: number; + }; +}; diff --git a/dist/currency/CurrencyDefinition.js b/dist/currency/CurrencyDefinition.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/currency/CurrencyDefinition.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/identity/IdentityDefinition.d.ts b/dist/identity/IdentityDefinition.d.ts new file mode 100644 index 00000000..3b8d6845 --- /dev/null +++ b/dist/identity/IdentityDefinition.d.ts @@ -0,0 +1,21 @@ +export type IdentityDefinitionContentMultiMapPrimitive = number | string; +export type IdentityDefinitionContentMultiMapValue = { + [key: string]: IdentityDefinitionContentMultiMapPrimitive | IdentityDefinitionContentMultiMapValue; +}; +export interface IdentityDefinition { + version?: number; + flags?: number; + primaryaddresses: Array; + minimumsignatures: number; + name: string; + identityaddress?: string; + parent: string; + systemid?: string; + contentmap?: { + [key: string]: string; + }; + contentmultimap?: IdentityDefinitionContentMultiMapValue | Array; + revocationauthority?: string; + recoveryauthority?: string; + timelock?: number; +} diff --git a/dist/identity/IdentityDefinition.js b/dist/identity/IdentityDefinition.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/identity/IdentityDefinition.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/index.d.ts b/dist/index.d.ts new file mode 100644 index 00000000..beeabf1d --- /dev/null +++ b/dist/index.d.ts @@ -0,0 +1,27 @@ +export * from './api/classes/index'; +export * from './api/ApiRequest'; +export * from './api/ApiResponse'; +export * from './api/ApiPrimitive'; +export * from './vdxf/classes/index'; +export * from './vdxf/index'; +export * from './vdxf/parser'; +export * from './utils/address'; +export * from './utils/bufferutils'; +export * from './utils/varuint'; +export * from './utils/ops'; +export * from './utils/evals'; +export * from './utils/script'; +export * from './utils/cccustom'; +export * from './pbaas/index'; +export * from './pbaas/PartialIdentity'; +export * from './pbaas/PartialMMRData'; +export * from './pbaas/PartialSignData'; +export * from './constants/pbaas'; +export * from './constants/ordinals/register'; +export * from './constants/ordinals/ordinals'; +export * from './constants/ordinals/types'; +export * from './constants/vdxf/veruspay'; +export * from './identity/IdentityDefinition'; +export * from './currency/CurrencyDefinition'; +export * from './vdxf/classes'; +export { BN as BigNumber } from 'bn.js'; diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 00000000..a5b55c80 --- /dev/null +++ b/dist/index.js @@ -0,0 +1,45 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BigNumber = void 0; +__exportStar(require("./api/classes/index"), exports); +__exportStar(require("./api/ApiRequest"), exports); +__exportStar(require("./api/ApiResponse"), exports); +__exportStar(require("./api/ApiPrimitive"), exports); +__exportStar(require("./vdxf/classes/index"), exports); +__exportStar(require("./vdxf/index"), exports); +__exportStar(require("./vdxf/parser"), exports); +__exportStar(require("./utils/address"), exports); +__exportStar(require("./utils/bufferutils"), exports); +__exportStar(require("./utils/varuint"), exports); +__exportStar(require("./utils/ops"), exports); +__exportStar(require("./utils/evals"), exports); +__exportStar(require("./utils/script"), exports); +__exportStar(require("./utils/cccustom"), exports); +__exportStar(require("./pbaas/index"), exports); +__exportStar(require("./pbaas/PartialIdentity"), exports); +__exportStar(require("./pbaas/PartialMMRData"), exports); +__exportStar(require("./pbaas/PartialSignData"), exports); +__exportStar(require("./constants/pbaas"), exports); +__exportStar(require("./constants/ordinals/register"), exports); +__exportStar(require("./constants/ordinals/ordinals"), exports); +__exportStar(require("./constants/ordinals/types"), exports); +__exportStar(require("./constants/vdxf/veruspay"), exports); +__exportStar(require("./identity/IdentityDefinition"), exports); +__exportStar(require("./currency/CurrencyDefinition"), exports); +__exportStar(require("./vdxf/classes"), exports); +var bn_js_1 = require("bn.js"); +Object.defineProperty(exports, "BigNumber", { enumerable: true, get: function () { return bn_js_1.BN; } }); diff --git a/dist/offers/CurrencyOffering.d.ts b/dist/offers/CurrencyOffering.d.ts new file mode 100644 index 00000000..fc920f97 --- /dev/null +++ b/dist/offers/CurrencyOffering.d.ts @@ -0,0 +1,4 @@ +export interface CurrencyOffering { + currency: string; + amount: number; +} diff --git a/dist/offers/CurrencyOffering.js b/dist/offers/CurrencyOffering.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/offers/CurrencyOffering.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/offers/CurrencyReceiving.d.ts b/dist/offers/CurrencyReceiving.d.ts new file mode 100644 index 00000000..65702ccf --- /dev/null +++ b/dist/offers/CurrencyReceiving.d.ts @@ -0,0 +1,5 @@ +export interface CurrencyReceiving { + address: string; + currency: string; + amount: number; +} diff --git a/dist/offers/CurrencyReceiving.js b/dist/offers/CurrencyReceiving.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/offers/CurrencyReceiving.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/offers/IdentityOffering.d.ts b/dist/offers/IdentityOffering.d.ts new file mode 100644 index 00000000..f18def09 --- /dev/null +++ b/dist/offers/IdentityOffering.d.ts @@ -0,0 +1,3 @@ +export interface IdentityOffering { + identity: string; +} diff --git a/dist/offers/IdentityOffering.js b/dist/offers/IdentityOffering.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/offers/IdentityOffering.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/offers/OfferForMaking.d.ts b/dist/offers/OfferForMaking.d.ts new file mode 100644 index 00000000..73dc8cf2 --- /dev/null +++ b/dist/offers/OfferForMaking.d.ts @@ -0,0 +1,10 @@ +import { IdentityDefinition } from "../identity/IdentityDefinition"; +import { CurrencyOffering } from "./CurrencyOffering"; +import { CurrencyReceiving } from "./CurrencyReceiving"; +import { IdentityOffering } from "./IdentityOffering"; +export interface OfferForMaking { + changeaddress: string; + offer: IdentityOffering | CurrencyOffering; + for: IdentityDefinition | CurrencyReceiving; + expiryheight?: number; +} diff --git a/dist/offers/OfferForMaking.js b/dist/offers/OfferForMaking.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/offers/OfferForMaking.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/offers/OfferList.d.ts b/dist/offers/OfferList.d.ts new file mode 100644 index 00000000..9823f933 --- /dev/null +++ b/dist/offers/OfferList.d.ts @@ -0,0 +1,24 @@ +export type ListedCurrencyOffering = { + [key: string]: number; +}; +export interface ListedIdentityOffering { + name: string; + identityid: string; + systemid: string; + original: number; +} +export type ListedValueOffering = ListedCurrencyOffering | ListedIdentityOffering; +export interface ListedOfferTerms { + offer: ListedValueOffering; + accept: ListedValueOffering; + blockexpiry: number; + txid: number; +} +export interface ListedOffer { + currencyid: string; + price: number; + offer: ListedOfferTerms; +} +export type OfferList = { + [key: string]: Array; +}; diff --git a/dist/offers/OfferList.js b/dist/offers/OfferList.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/offers/OfferList.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/pbaas/ContentMultiMap.d.ts b/dist/pbaas/ContentMultiMap.d.ts new file mode 100644 index 00000000..148aa564 --- /dev/null +++ b/dist/pbaas/ContentMultiMap.d.ts @@ -0,0 +1,24 @@ +import { VdxfUniValue, VdxfUniValueJson } from './VdxfUniValue'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +export type ContentMultiMapPrimitive = VdxfUniValue | Buffer; +export type ContentMultiMapPrimitiveJson = VdxfUniValueJson | string; +export type ContentMultiMapJsonValue = ContentMultiMapPrimitiveJson | Array; +export type ContentMultiMapJson = { + [key: string]: ContentMultiMapJsonValue; +}; +export type KvValueArrayItem = Buffer | ContentMultiMapJson; +export declare function isKvValueArrayItemVdxfUniValueJson(x: ContentMultiMapJsonValue): x is VdxfUniValueJson; +export type KvContent = Map>; +export declare class ContentMultiMap implements SerializableEntity { + kv_content: KvContent; + constructor(data?: { + kv_content: KvContent; + }); + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number, parseVdxfObjects?: boolean): number; + static fromJson(obj: { + [key: string]: ContentMultiMapJsonValue; + }): ContentMultiMap; + toJson(): ContentMultiMapJson; +} diff --git a/dist/pbaas/ContentMultiMap.js b/dist/pbaas/ContentMultiMap.js new file mode 100644 index 00000000..4efc93fe --- /dev/null +++ b/dist/pbaas/ContentMultiMap.js @@ -0,0 +1,161 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ContentMultiMap = void 0; +exports.isKvValueArrayItemVdxfUniValueJson = isKvValueArrayItemVdxfUniValueJson; +const varuint_1 = require("../utils/varuint"); +const bufferutils_1 = require("../utils/bufferutils"); +const address_1 = require("../utils/address"); +const vdxf_1 = require("../constants/vdxf"); +const VdxfUniValue_1 = require("./VdxfUniValue"); +const string_1 = require("../utils/string"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +function isKvValueArrayItemVdxfUniValueJson(x) { + return x != null && typeof x === 'object' && !Array.isArray(x) && Object.keys(x).every((key) => { + const val = x[key]; + try { + const { version, hash } = (0, address_1.fromBase58Check)(key); + return version === vdxf_1.I_ADDR_VERSION && (Buffer.isBuffer(val) || typeof val === 'string'); + } + catch (e) { + return false; + } + }); +} +class ContentMultiMap { + constructor(data) { + if (data === null || data === void 0 ? void 0 : data.kv_content) + this.kv_content = data.kv_content; + } + getByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.kv_content.size); + for (const [key, value] of this.kv_content.entries()) { + length += (0, address_1.fromBase58Check)(key).hash.length; + if (Array.isArray(value)) { + const valueArr = value; + length += varuint_1.default.encodingLength(valueArr.length); + for (const n of value) { + if (n instanceof VdxfUniValue_1.VdxfUniValue) { + const nCMMNOLength = n.getByteLength(); + length += varuint_1.default.encodingLength(nCMMNOLength); + length += nCMMNOLength; + } + else if (Buffer.isBuffer(n)) { + const nBuf = n; + length += varuint_1.default.encodingLength(nBuf.length); + length += nBuf.length; + } + else + throw new Error("Unknown ContentMultiMap data, can't calculate ByteLength"); + } + } + else + throw new Error("Unknown ContentMultiMap data, can't calculate ByteLength"); + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeCompactSize(this.kv_content.size); + for (const [key, value] of this.kv_content.entries()) { + writer.writeSlice((0, address_1.fromBase58Check)(key).hash); + if (Array.isArray(value)) { + writer.writeCompactSize(value.length); + for (const n of value) { + if (n instanceof VdxfUniValue_1.VdxfUniValue) { + const nCMMNOBuf = n.toBuffer(); + writer.writeVarSlice(nCMMNOBuf); + } + else if (Buffer.isBuffer(n)) { + const nBuf = n; + writer.writeVarSlice(nBuf); + } + else + throw new Error("Unknown ContentMultiMap data, can't toBuffer"); + } + } + else + throw new Error("Unknown ContentMultiMap data, can't toBuffer"); + } + return writer.buffer; + } + fromBuffer(buffer, offset = 0, parseVdxfObjects = false) { + const reader = new BufferReader(buffer, offset); + const contentMultiMapSize = reader.readCompactSize(); + this.kv_content = new Map(); + for (var i = 0; i < contentMultiMapSize; i++) { + const contentMapKey = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + const vector = []; + const count = reader.readCompactSize(); + for (let j = 0; j < count; j++) { + if (parseVdxfObjects) { + const unival = new VdxfUniValue_1.VdxfUniValue(); + unival.fromBuffer(reader.readVarSlice(), 0); + vector.push(unival); + } + else { + vector.push(reader.readVarSlice()); + } + } + this.kv_content.set(contentMapKey, vector); + } + return reader.offset; + } + static fromJson(obj) { + const content = new Map(); + for (const key in obj) { + const keybytes = (0, address_1.fromBase58Check)(key).hash; + const value = obj[key]; + if (keybytes && value != null) { + if (Array.isArray(value)) { + const items = []; + for (const x of value) { + if (typeof x === 'string') { + items.push(Buffer.from(x, 'hex')); + } + else if (typeof x === 'object' && x != null) { + const uniVal = VdxfUniValue_1.VdxfUniValue.fromJson(x); + if (uniVal.toBuffer().length > 0) { + items.push(uniVal); + } + } + } + content.set(key, items); + } + else if (typeof value === 'string' && (0, string_1.isHexString)(value)) { + content.set(key, [Buffer.from(value, 'hex')]); + } + else if (isKvValueArrayItemVdxfUniValueJson(value)) { + content.set(key, [VdxfUniValue_1.VdxfUniValue.fromJson(value)]); + } + else { + throw new Error("Invalid data in multimap"); + } + } + } + return new ContentMultiMap({ kv_content: content }); + } + toJson() { + const ret = {}; + for (const [key, value] of this.kv_content.entries()) { + if (Array.isArray(value)) { + const items = []; + for (const n of value) { + if (n instanceof VdxfUniValue_1.VdxfUniValue) { + items.push(n.toJson()); + } + else if (Buffer.isBuffer(n)) { + items.push(n.toString('hex')); + } + else + throw new Error("Unknown ContentMultiMap data, can't toBuffer"); + } + ret[key] = items; + } + else + throw new Error("Unknown ContentMultiMap data, can't toBuffer"); + } + return ret; + } +} +exports.ContentMultiMap = ContentMultiMap; diff --git a/dist/pbaas/ContentMultiMapRemove.d.ts b/dist/pbaas/ContentMultiMapRemove.d.ts new file mode 100644 index 00000000..ff059f22 --- /dev/null +++ b/dist/pbaas/ContentMultiMapRemove.d.ts @@ -0,0 +1,36 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +export interface ContentMultiMapRemoveJson { + version: number; + action: number; + entrykey: string; + valuehash: string; +} +export declare class ContentMultiMapRemove implements SerializableEntity { + version: BigNumber; + action: BigNumber; + entry_key: string; + value_hash: Buffer; + static VERSION_INVALID: import("bn.js"); + static VERSION_FIRST: import("bn.js"); + static VERSION_LAST: import("bn.js"); + static VERSION_CURRENT: import("bn.js"); + static ACTION_FIRST: import("bn.js"); + static ACTION_REMOVE_ONE_KEYVALUE: import("bn.js"); + static ACTION_REMOVE_ALL_KEYVALUE: import("bn.js"); + static ACTION_REMOVE_ALL_KEY: import("bn.js"); + static ACTION_CLEAR_MAP: import("bn.js"); + static ACTION_LAST: import("bn.js"); + constructor(data?: { + version?: BigNumber; + action?: BigNumber; + entry_key?: string; + value_hash?: Buffer; + }); + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + static fromJson(data: ContentMultiMapRemoveJson): ContentMultiMapRemove; + toJson(): ContentMultiMapRemoveJson; + isValid(): boolean; +} diff --git a/dist/pbaas/ContentMultiMapRemove.js b/dist/pbaas/ContentMultiMapRemove.js new file mode 100644 index 00000000..e8b2e9dc --- /dev/null +++ b/dist/pbaas/ContentMultiMapRemove.js @@ -0,0 +1,89 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ContentMultiMapRemove = void 0; +const varint_1 = require("../utils/varint"); +const address_1 = require("../utils/address"); +const bufferutils_1 = require("../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const vdxf_1 = require("../constants/vdxf"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class ContentMultiMapRemove { + constructor(data) { + this.version = (data === null || data === void 0 ? void 0 : data.version) || new bn_js_1.BN(1, 10); + this.action = (data === null || data === void 0 ? void 0 : data.action) || new bn_js_1.BN(0, 10); + this.entry_key = (data === null || data === void 0 ? void 0 : data.entry_key) || ""; + this.value_hash = (data === null || data === void 0 ? void 0 : data.value_hash) || Buffer.alloc(0); + } + getByteLength() { + let byteLength = 0; + byteLength += varint_1.default.encodingLength(this.version); + byteLength += varint_1.default.encodingLength(this.action); + if (this.action != ContentMultiMapRemove.ACTION_CLEAR_MAP) { + byteLength += vdxf_1.HASH160_BYTE_LENGTH; + if (this.action != ContentMultiMapRemove.ACTION_REMOVE_ALL_KEY) { + byteLength += vdxf_1.HASH256_BYTE_LENGTH; + } + } + return byteLength; + } + toBuffer() { + const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); + bufferWriter.writeVarInt(this.version); + bufferWriter.writeVarInt(this.action); + if (this.action != ContentMultiMapRemove.ACTION_CLEAR_MAP) { + bufferWriter.writeSlice((0, address_1.fromBase58Check)(this.entry_key).hash); + if (this.action != ContentMultiMapRemove.ACTION_REMOVE_ALL_KEY) { + bufferWriter.writeSlice(this.value_hash); + } + } + return bufferWriter.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.version = new bn_js_1.BN(reader.readVarInt()); + this.action = new bn_js_1.BN(reader.readVarInt()); + if (!this.action.eq(ContentMultiMapRemove.ACTION_CLEAR_MAP)) { + this.entry_key = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + if (!this.action.eq(ContentMultiMapRemove.ACTION_REMOVE_ALL_KEY)) { + this.value_hash = reader.readSlice(32); + } + } + return reader.offset; + } + static fromJson(data) { + return new ContentMultiMapRemove({ + version: new bn_js_1.BN(data.version), + action: new bn_js_1.BN(data.action), + entry_key: data.entrykey, + value_hash: Buffer.from(data.valuehash, 'hex').reverse() // Unit256 Reverse to match the original hash order + }); + } + toJson() { + return { + version: this.version.toNumber(), + action: this.action.toNumber(), + entrykey: this.entry_key, + valuehash: Buffer.from(this.value_hash).reverse().toString('hex') + }; + } + isValid() { + if (this.version.gte(ContentMultiMapRemove.VERSION_FIRST) && + this.version.lte(ContentMultiMapRemove.VERSION_LAST)) { + return (this.action.eq(ContentMultiMapRemove.ACTION_CLEAR_MAP) || + (this.entry_key && (this.entry_key.length > 0) && + (this.action.eq(ContentMultiMapRemove.ACTION_REMOVE_ALL_KEY) || this.value_hash.length > 0))); + } + return false; + } +} +exports.ContentMultiMapRemove = ContentMultiMapRemove; +ContentMultiMapRemove.VERSION_INVALID = new bn_js_1.BN(0); +ContentMultiMapRemove.VERSION_FIRST = new bn_js_1.BN(1); +ContentMultiMapRemove.VERSION_LAST = new bn_js_1.BN(1); +ContentMultiMapRemove.VERSION_CURRENT = new bn_js_1.BN(1); +ContentMultiMapRemove.ACTION_FIRST = new bn_js_1.BN(1); +ContentMultiMapRemove.ACTION_REMOVE_ONE_KEYVALUE = new bn_js_1.BN(1); +ContentMultiMapRemove.ACTION_REMOVE_ALL_KEYVALUE = new bn_js_1.BN(2); +ContentMultiMapRemove.ACTION_REMOVE_ALL_KEY = new bn_js_1.BN(3); +ContentMultiMapRemove.ACTION_CLEAR_MAP = new bn_js_1.BN(4); +ContentMultiMapRemove.ACTION_LAST = new bn_js_1.BN(4); diff --git a/dist/pbaas/Credential.d.ts b/dist/pbaas/Credential.d.ts new file mode 100644 index 00000000..7510b512 --- /dev/null +++ b/dist/pbaas/Credential.d.ts @@ -0,0 +1,41 @@ +import { BigNumber } from "../utils/types/BigNumber"; +import { SerializableEntity } from "../utils/types/SerializableEntity"; +export type CredentialJson = { + version?: number; + flags?: number; + credentialkey?: string; + credential?: Object; + scopes?: Object; + label?: string; +}; +export declare class Credential implements SerializableEntity { + static VERSION_INVALID: import("bn.js"); + static VERSION_FIRST: import("bn.js"); + static VERSION_LAST: import("bn.js"); + static VERSION_CURRENT: import("bn.js"); + static FLAG_LABEL_PRESENT: import("bn.js"); + static MAX_JSON_STRING_LENGTH: number; + version: BigNumber; + flags: BigNumber; + credentialKey: string; + credential: Object; + scopes: Object; + label: string; + constructor(data?: { + version?: BigNumber; + flags?: BigNumber; + credentialKey?: string; + credential?: Object; + scopes?: Object; + label?: string; + }); + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + hasLabel(): boolean; + calcFlags(): BigNumber; + setFlags(): void; + isValid(): boolean; + toJson(): CredentialJson; + static fromJson(json: CredentialJson): Credential; +} diff --git a/dist/pbaas/Credential.js b/dist/pbaas/Credential.js new file mode 100644 index 00000000..f62cf0b5 --- /dev/null +++ b/dist/pbaas/Credential.js @@ -0,0 +1,127 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Credential = void 0; +const bn_js_1 = require("bn.js"); +const bufferutils_1 = require("../utils/bufferutils"); +const varuint_1 = require("../utils/varuint"); +const vdxf_1 = require("../constants/vdxf"); +const varint_1 = require("../utils/varint"); +const string_1 = require("../utils/string"); +const address_1 = require("../utils/address"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class Credential { + constructor(data) { + this.version = Credential.VERSION_INVALID; + this.flags = new bn_js_1.BN(0, 10); + this.credentialKey = ""; + this.credential = {}; + this.scopes = {}; + this.label = ""; + if (data) { + if (data.flags) + this.flags = new bn_js_1.BN(data.flags); + if (data.version) + this.version = new bn_js_1.BN(data.version); + if (data.credentialKey) + this.credentialKey = data.credentialKey; + if (data.credential) + this.credential = data.credential; + if (data.scopes) + this.scopes = data.scopes; + if (data.label) + this.label = data.label; + if (JSON.stringify(this.credential).length > Credential.MAX_JSON_STRING_LENGTH || + JSON.stringify(this.scopes).length > Credential.MAX_JSON_STRING_LENGTH) { + this.version = Credential.VERSION_INVALID; + } + this.setFlags(); + } + } + getByteLength() { + let length = 0; + length += varint_1.default.encodingLength(this.version); + length += varint_1.default.encodingLength(this.flags); + length += vdxf_1.HASH160_BYTE_LENGTH; // Credential key + // Both the credential and scopes are serialized as JSON strings. + const credStr = JSON.stringify(this.credential); + const credentialLength = credStr.length; + length += varuint_1.default.encodingLength(credentialLength); + length += credentialLength; + const scopesStr = JSON.stringify(this.scopes); + const scopesLength = scopesStr.length; + length += varuint_1.default.encodingLength(scopesLength); + length += scopesLength; + if (this.hasLabel()) { + length += varuint_1.default.encodingLength(this.label.length); + length += Buffer.from(this.label).length; + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeVarInt(this.version); + writer.writeVarInt(this.flags); + writer.writeSlice((0, address_1.fromBase58Check)(this.credentialKey).hash); + writer.writeVarSlice(Buffer.from(JSON.stringify(this.credential))); + writer.writeVarSlice(Buffer.from(JSON.stringify(this.scopes))); + if (this.hasLabel()) { + writer.writeVarSlice(Buffer.from(this.label)); + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new BufferReader(buffer, offset); + this.version = new bn_js_1.BN(reader.readVarInt(), 10); + this.flags = new bn_js_1.BN(reader.readVarInt(), 10); + this.credentialKey = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + this.credential = JSON.parse(Buffer.from((0, string_1.readLimitedString)(reader, Credential.MAX_JSON_STRING_LENGTH)).toString()); + this.scopes = JSON.parse(Buffer.from((0, string_1.readLimitedString)(reader, Credential.MAX_JSON_STRING_LENGTH)).toString()); + if (this.hasLabel()) { + this.label = Buffer.from((0, string_1.readLimitedString)(reader, Credential.MAX_JSON_STRING_LENGTH)).toString(); + } + return reader.offset; + } + hasLabel() { + return this.flags.and(Credential.FLAG_LABEL_PRESENT).gt(new bn_js_1.BN(0, 10)); + } + calcFlags() { + return this.label.length > 0 ? Credential.FLAG_LABEL_PRESENT : new bn_js_1.BN(0, 10); + } + setFlags() { + this.flags = this.calcFlags(); + } + // The credentials is invalid if the version is not within the valid range or the key is null. + isValid() { + return this.version.gte(Credential.VERSION_FIRST) && this.version.lte(Credential.VERSION_LAST) + && this.credentialKey !== vdxf_1.NULL_ADDRESS; + } + toJson() { + const ret = { + version: this.version.toNumber(), + flags: this.flags.toNumber(), + credentialkey: this.credentialKey, + credential: this.credential, + scopes: this.scopes, + label: this.hasLabel() ? this.label : null + }; + return ret; + } + static fromJson(json) { + return new Credential({ + version: json.version ? new bn_js_1.BN(json.version, 10) : undefined, + flags: json.flags ? new bn_js_1.BN(json.flags, 10) : undefined, + credentialKey: json.credentialkey, + credential: json.credential, + scopes: json.scopes, + label: json.label, + }); + } +} +exports.Credential = Credential; +// Credential enum types +Credential.VERSION_INVALID = new bn_js_1.BN(0, 10); +Credential.VERSION_FIRST = new bn_js_1.BN(1, 10); +Credential.VERSION_LAST = new bn_js_1.BN(1, 10); +Credential.VERSION_CURRENT = new bn_js_1.BN(1, 10); +Credential.FLAG_LABEL_PRESENT = new bn_js_1.BN(1, 10); +Credential.MAX_JSON_STRING_LENGTH = 512; diff --git a/dist/pbaas/CrossChainDataRef.d.ts b/dist/pbaas/CrossChainDataRef.d.ts new file mode 100644 index 00000000..6875fc69 --- /dev/null +++ b/dist/pbaas/CrossChainDataRef.d.ts @@ -0,0 +1,49 @@ +import { SerializableEntity } from '../utils/types/SerializableEntity'; +import { PBaaSEvidenceRef, PBaaSEvidenceRefJson } from './PBaaSEvidenceRef'; +import { IdentityMultimapRef, IdentityMultimapRefJson } from './IdentityMultimapRef'; +import { URLRef, URLRefJson } from './URLRef'; +export type CrossChainDataRefJson = (PBaaSEvidenceRefJson & { + type: number; +}) | (IdentityMultimapRefJson & { + type: number; +}) | (URLRefJson & { + type: number; +}); +export declare class CrossChainDataRef implements SerializableEntity { + ref: PBaaSEvidenceRef | IdentityMultimapRef | URLRef; + static TYPE_CROSSCHAIN_DATAREF: number; + static TYPE_IDENTITY_DATAREF: number; + static TYPE_URL_REF: number; + constructor(data?: PBaaSEvidenceRef | IdentityMultimapRef | URLRef | any); + which(): number; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + isValid(): boolean; + toJson(): { + type: number; + version: number; + flags: number; + vdxfkey: string; + identityid?: string; + startheight: number; + endheight: number; + datahash?: string; + systemid?: string; + } | { + type: number; + version: number; + flags: number; + output: any; + objectnum: number; + subobject: number; + systemid: string; + } | { + type: number; + version: number; + flags: number; + datahash: string; + url: string; + }; + static fromJson(data: CrossChainDataRefJson): CrossChainDataRef; +} diff --git a/dist/pbaas/CrossChainDataRef.js b/dist/pbaas/CrossChainDataRef.js new file mode 100644 index 00000000..455b0966 --- /dev/null +++ b/dist/pbaas/CrossChainDataRef.js @@ -0,0 +1,82 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CrossChainDataRef = void 0; +const bufferutils_1 = require("../utils/bufferutils"); +const PBaaSEvidenceRef_1 = require("./PBaaSEvidenceRef"); +const IdentityMultimapRef_1 = require("./IdentityMultimapRef"); +const URLRef_1 = require("./URLRef"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class CrossChainDataRef { + constructor(data) { + this.ref = data || null; + } + which() { + if (this.ref instanceof PBaaSEvidenceRef_1.PBaaSEvidenceRef) { + return CrossChainDataRef.TYPE_CROSSCHAIN_DATAREF; + } + else if (this.ref instanceof IdentityMultimapRef_1.IdentityMultimapRef) { + return CrossChainDataRef.TYPE_IDENTITY_DATAREF; + } + else if (this.ref instanceof URLRef_1.URLRef) { + return CrossChainDataRef.TYPE_URL_REF; + } + } + getByteLength() { + let byteLength = 1; //type uint8 + byteLength += this.ref.getByteLength(); + return byteLength; + } + toBuffer() { + const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); + bufferWriter.writeUInt8(this.which()); + bufferWriter.writeSlice(this.ref.toBuffer()); + return bufferWriter.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + const type = reader.readUInt8(); + if (type == CrossChainDataRef.TYPE_CROSSCHAIN_DATAREF) { + this.ref = new PBaaSEvidenceRef_1.PBaaSEvidenceRef(); + } + else if (type == CrossChainDataRef.TYPE_IDENTITY_DATAREF) { + this.ref = new IdentityMultimapRef_1.IdentityMultimapRef(); + } + else if (type == CrossChainDataRef.TYPE_URL_REF) { + this.ref = new URLRef_1.URLRef(); + } + offset = this.ref.fromBuffer(buffer, reader.offset); + return offset; + } + isValid() { + switch (this.which()) { + case CrossChainDataRef.TYPE_CROSSCHAIN_DATAREF: + return this.ref.isValid(); + case CrossChainDataRef.TYPE_IDENTITY_DATAREF: + return this.ref.isValid(); + case CrossChainDataRef.TYPE_URL_REF: + return this.ref.isValid(); + default: + return false; + } + } + toJson() { + return Object.assign(Object.assign({}, this.ref.toJson()), { type: this.which() }); + } + static fromJson(data) { + if (data.type == CrossChainDataRef.TYPE_CROSSCHAIN_DATAREF) { + return new CrossChainDataRef(PBaaSEvidenceRef_1.PBaaSEvidenceRef.fromJson(data)); + } + else if (data.type == CrossChainDataRef.TYPE_IDENTITY_DATAREF) { + return new CrossChainDataRef(IdentityMultimapRef_1.IdentityMultimapRef.fromJson(data)); + } + else if (data.type == CrossChainDataRef.TYPE_URL_REF) { + return new CrossChainDataRef(URLRef_1.URLRef.fromJson(data)); + } + else + throw new Error("Invalid CrossChainDataRef type"); + } +} +exports.CrossChainDataRef = CrossChainDataRef; +CrossChainDataRef.TYPE_CROSSCHAIN_DATAREF = 0; +CrossChainDataRef.TYPE_IDENTITY_DATAREF = 1; +CrossChainDataRef.TYPE_URL_REF = 2; diff --git a/dist/pbaas/CrossChainProof.d.ts b/dist/pbaas/CrossChainProof.d.ts new file mode 100644 index 00000000..941fcc45 --- /dev/null +++ b/dist/pbaas/CrossChainProof.d.ts @@ -0,0 +1,42 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +import { EvidenceData, EvidenceDataInChainObjectJson } from './EvidenceData'; +export interface CrossChainProofJson { + version: number; + chainobjects: Array; +} +export declare enum CHAIN_OBJECT_TYPES { + CHAINOBJ_INVALID = 0, + CHAINOBJ_HEADER = 1,// serialized full block header w/proof + CHAINOBJ_HEADER_REF = 2,// equivalent to header, but only includes non-canonical data + CHAINOBJ_TRANSACTION_PROOF = 3,// serialized transaction or partial transaction with proof + CHAINOBJ_PROOF_ROOT = 4,// merkle proof of preceding block or transaction + CHAINOBJ_COMMITMENTDATA = 5,// prior block commitments to ensure recognition of overlapping notarizations + CHAINOBJ_RESERVETRANSFER = 6,// serialized transaction, sometimes without an opret, which will be reconstructed + CHAINOBJ_RESERVED = 7,// unused and reserved + CHAINOBJ_CROSSCHAINPROOF = 8,// specific composite object, which is a single or multi-proof + CHAINOBJ_NOTARYSIGNATURE = 9,// notary signature + CHAINOBJ_EVIDENCEDATA = 10 +} +export declare class CrossChainProof implements SerializableEntity { + version: BigNumber; + chain_objects: Array; + static VERSION_INVALID: import("bn.js"); + static VERSION_FIRST: import("bn.js"); + static VERSION_CURRENT: import("bn.js"); + static VERSION_LAST: import("bn.js"); + constructor(data?: { + version: any; + chain_objects: any; + }); + static KnownVDXFKeys(): Map; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + isValid(): boolean; + toJson(): { + version: string; + chainobjects: any[]; + }; + static fromJson(data: CrossChainProofJson): CrossChainProof; +} diff --git a/dist/pbaas/CrossChainProof.js b/dist/pbaas/CrossChainProof.js new file mode 100644 index 00000000..a1dd387a --- /dev/null +++ b/dist/pbaas/CrossChainProof.js @@ -0,0 +1,116 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CrossChainProof = exports.CHAIN_OBJECT_TYPES = void 0; +const varint_1 = require("../utils/varint"); +const bufferutils_1 = require("../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const EvidenceData_1 = require("./EvidenceData"); +const VDXF_Data = require("../vdxf/vdxfdatakeys"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +var CHAIN_OBJECT_TYPES; +(function (CHAIN_OBJECT_TYPES) { + CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_INVALID"] = 0] = "CHAINOBJ_INVALID"; + CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_HEADER"] = 1] = "CHAINOBJ_HEADER"; + CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_HEADER_REF"] = 2] = "CHAINOBJ_HEADER_REF"; + CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_TRANSACTION_PROOF"] = 3] = "CHAINOBJ_TRANSACTION_PROOF"; + CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_PROOF_ROOT"] = 4] = "CHAINOBJ_PROOF_ROOT"; + CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_COMMITMENTDATA"] = 5] = "CHAINOBJ_COMMITMENTDATA"; + CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_RESERVETRANSFER"] = 6] = "CHAINOBJ_RESERVETRANSFER"; + CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_RESERVED"] = 7] = "CHAINOBJ_RESERVED"; + CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_CROSSCHAINPROOF"] = 8] = "CHAINOBJ_CROSSCHAINPROOF"; + CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_NOTARYSIGNATURE"] = 9] = "CHAINOBJ_NOTARYSIGNATURE"; + CHAIN_OBJECT_TYPES[CHAIN_OBJECT_TYPES["CHAINOBJ_EVIDENCEDATA"] = 10] = "CHAINOBJ_EVIDENCEDATA"; // flexible evidence data +})(CHAIN_OBJECT_TYPES || (exports.CHAIN_OBJECT_TYPES = CHAIN_OBJECT_TYPES = {})); +; +class CrossChainProof { + constructor(data) { + this.version = (data === null || data === void 0 ? void 0 : data.version) || new bn_js_1.BN(1, 10); + this.chain_objects = (data === null || data === void 0 ? void 0 : data.chain_objects) || []; + } + static KnownVDXFKeys() { + const keys = new Map(); + keys.set(VDXF_Data.EvidenceDataKey.vdxfid, CHAIN_OBJECT_TYPES.CHAINOBJ_EVIDENCEDATA); + return keys; + } + getByteLength() { + let byteLength = 0; + byteLength += 4; // version uint32 + byteLength += varint_1.default.encodingLength(new bn_js_1.BN(this.chain_objects.length)); + for (let i = 0; i < this.chain_objects.length; i++) { + byteLength += 2; // objtype uint16 + byteLength += this.chain_objects[i].getByteLength(); + } + return byteLength; + } + toBuffer() { + const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); + bufferWriter.writeUInt32(this.version.toNumber()); + bufferWriter.writeVarInt(new bn_js_1.BN(this.chain_objects.length)); + for (let i = 0; i < this.chain_objects.length; i++) { + bufferWriter.writeUInt16(this.chain_objects[i].type.toNumber()); + bufferWriter.writeSlice(this.chain_objects[i].toBuffer()); + } + return bufferWriter.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.version = new bn_js_1.BN(reader.readUInt32()); + this.chain_objects = []; + const chain_objectsLength = reader.readVarInt().toNumber(); + for (let i = 0; i < chain_objectsLength; i++) { + const objType = reader.readUInt16(); + //TODO: Implement all proof types + if (objType != CHAIN_OBJECT_TYPES.CHAINOBJ_EVIDENCEDATA) + throw new Error("Invalid chain object type"); + const obj = new EvidenceData_1.EvidenceData(); + reader.offset = obj.fromBuffer(reader.buffer, reader.offset); + this.chain_objects.push(obj); + } + return reader.offset; + } + isValid() { + for (let i = 0; i < this.chain_objects.length; i++) { + if (!this.chain_objects[i].isValid()) + return false; + } + return this.chain_objects.length > 0; + } + toJson() { + const outputChainObjects = []; + //TODO: Implement all proof types + for (let i = 0; i < this.chain_objects.length; i++) { + if (!(this.chain_objects[i] instanceof EvidenceData_1.EvidenceData)) + throw new Error("Invalid chain object type"); + outputChainObjects.push({ vdxftype: VDXF_Data.EvidenceDataKey.vdxfid, value: this.chain_objects[i].toJson() }); + } + return { + version: this.version.toString(10), + chainobjects: outputChainObjects + }; + } + //TODO: Implement all proof types + static fromJson(data) { + let chainObjects = []; + for (let i = 0; i < data.chainobjects.length; i++) { + if (!CrossChainProof.KnownVDXFKeys().get(data.chainobjects[i].vdxftype)) + throw new Error("Invalid chain object type"); + const vdxftype = CrossChainProof.KnownVDXFKeys().get(data.chainobjects[i].vdxftype); + switch (vdxftype) { + case CHAIN_OBJECT_TYPES.CHAINOBJ_EVIDENCEDATA: + chainObjects.push(EvidenceData_1.EvidenceData.fromJson({ hex: data.chainobjects[i].value.hex })); + break; + default: + throw new Error("Invalid chain object type"); + } + } + return new CrossChainProof({ + version: new bn_js_1.BN(data.version, 10), + chain_objects: chainObjects + }); + } +} +exports.CrossChainProof = CrossChainProof; +CrossChainProof.VERSION_INVALID = new bn_js_1.BN(0); +CrossChainProof.VERSION_FIRST = new bn_js_1.BN(1); +CrossChainProof.VERSION_CURRENT = new bn_js_1.BN(1); +CrossChainProof.VERSION_LAST = new bn_js_1.BN(1); diff --git a/dist/pbaas/CurrencyValueMap.d.ts b/dist/pbaas/CurrencyValueMap.d.ts new file mode 100644 index 00000000..1ef26808 --- /dev/null +++ b/dist/pbaas/CurrencyValueMap.d.ts @@ -0,0 +1,21 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +export declare class CurrencyValueMap implements SerializableEntity { + value_map: Map; + multivalue: boolean; + constructor(data?: { + value_map?: Map; + multivalue?: boolean; + }); + getNumValues(): import("bn.js"); + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + isValid(): boolean; + toJson(): { + [key: string]: string; + }; + static fromJson(data: { + [key: string]: string; + }, multivalue?: boolean): CurrencyValueMap; +} diff --git a/dist/pbaas/CurrencyValueMap.js b/dist/pbaas/CurrencyValueMap.js new file mode 100644 index 00000000..c1c62f6d --- /dev/null +++ b/dist/pbaas/CurrencyValueMap.js @@ -0,0 +1,107 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CurrencyValueMap = void 0; +const varint_1 = require("../utils/varint"); +const varuint_1 = require("../utils/varuint"); +const address_1 = require("../utils/address"); +const bufferutils_1 = require("../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const vdxf_1 = require("../constants/vdxf"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const numberConversion_1 = require("../utils/numberConversion"); +class CurrencyValueMap { + constructor(data = {}) { + this.value_map = new Map(data.value_map || []); + this.multivalue = !!(data.multivalue); + } + getNumValues() { + return new bn_js_1.BN(this.value_map.size, 10); + } + getByteLength() { + let byteLength = 0; + if (this.multivalue) { + byteLength += varuint_1.default.encodingLength(this.value_map.size); + } + for (const [key, value] of this.value_map) { + byteLength += vdxf_1.HASH160_BYTE_LENGTH; + byteLength += this.multivalue ? 8 : varint_1.default.encodingLength(value); + } + return byteLength; + } + toBuffer() { + const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); + if (this.multivalue) { + const entries = []; + bufferWriter.writeCompactSize(this.value_map.size); + // Convert entries to array with [Buffer, BigNumber] + for (const [key, value] of this.value_map) { + const { hash } = (0, address_1.fromBase58Check)(key); + entries.push({ [hash.toString('hex')]: value }); + } + // Sort by Buffer (vkey) value, smallest first + entries.sort((a, b) => { + const aKey = Object.keys(a)[0]; + const bKey = Object.keys(b)[0]; + const aBuf = Buffer.from(aKey, 'hex'); + const bBuf = Buffer.from(bKey, 'hex'); + return aBuf.compare(bBuf); + }); + for (const value of entries) { + const key = Object.keys(value)[0]; + const innervalue = value[key]; + bufferWriter.writeSlice(Buffer.from(key, 'hex')); + bufferWriter.writeInt64(innervalue); + } + } + else { + for (const [key, value] of this.value_map) { + const { hash } = (0, address_1.fromBase58Check)(key); + bufferWriter.writeSlice(hash); + bufferWriter.writeVarInt(value); + } + } + return bufferWriter.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + let count; + if (this.multivalue) { + count = reader.readCompactSize(); + } + else { + count = 1; + } + for (let i = 0; i < count; i++) { + const hash = reader.readSlice(20); + const value = this.multivalue ? reader.readInt64() : reader.readVarInt(); + const base58Key = (0, address_1.toBase58Check)(hash, vdxf_1.I_ADDR_VERSION); + this.value_map.set(base58Key, value); + } + return reader.offset; + } + isValid() { + for (let [key, value] of this.value_map) { + if (!key || (typeof (key) == 'string' && key.length == 0)) { + return false; + } + } + return true; + } + toJson() { + const value_map = {}; + for (let [key, value] of this.value_map) { + value_map[key] = (0, numberConversion_1.bnToDecimal)(value); + } + return value_map; + } + static fromJson(data, multivalue = false) { + const value_map = new Map(); + // Object.entries preserves the insertion order of the object's keys + // If the input object is created with insertion order in mind, this will preserve it + for (const key of Object.keys(data)) { + value_map.set(key, (0, numberConversion_1.decimalToBn)(data[key])); + } + return new CurrencyValueMap({ value_map, multivalue }); + } +} +exports.CurrencyValueMap = CurrencyValueMap; diff --git a/dist/pbaas/DataDescriptor.d.ts b/dist/pbaas/DataDescriptor.d.ts new file mode 100644 index 00000000..d682dfe4 --- /dev/null +++ b/dist/pbaas/DataDescriptor.d.ts @@ -0,0 +1,92 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { BufferDataVdxfObject } from '../vdxf/index'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +export interface DataDescriptorJson { + version: number; + flags?: number; + objectdata?: string | { + ['message']: string; + } | object; + label?: string; + mimetype?: string; + salt?: string; + epk?: string; + ivk?: string; + ssk?: string; +} +export declare class DataDescriptor implements SerializableEntity { + static VERSION_INVALID: import("bn.js"); + static VERSION_FIRST: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static DEFAULT_VERSION: import("bn.js"); + static FLAG_ENCRYPTED_DATA: import("bn.js"); + static FLAG_SALT_PRESENT: import("bn.js"); + static FLAG_ENCRYPTION_PUBLIC_KEY_PRESENT: import("bn.js"); + static FLAG_INCOMING_VIEWING_KEY_PRESENT: import("bn.js"); + static FLAG_SYMMETRIC_ENCRYPTION_KEY_PRESENT: import("bn.js"); + static FLAG_LABEL_PRESENT: import("bn.js"); + static FLAG_MIME_TYPE_PRESENT: import("bn.js"); + static FLAG_MASK: import("bn.js"); + version: BigNumber; + flags: BigNumber; + objectdata: Buffer; + label: string; + mimeType: string; + salt: Buffer; + epk: Buffer; + ivk: Buffer; + ssk: Buffer; + constructor(data?: { + version?: BigNumber; + flags?: BigNumber; + objectdata?: Buffer; + label?: string; + mimeType?: string; + salt?: Buffer; + epk?: Buffer; + ivk?: Buffer; + ssk?: Buffer; + }); + static fromJson(data: any): DataDescriptor; + DecodeHashVector(): Array; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + HasEncryptedData(): boolean; + HasSalt(): boolean; + HasEPK(): boolean; + HasMIME(): boolean; + HasIVK(): boolean; + HasSSK(): boolean; + HasLabel(): boolean; + CalcFlags(): BigNumber; + SetFlags(): void; + isValid(): boolean; + toJson(): DataDescriptorJson; +} +export declare class VDXFDataDescriptor extends BufferDataVdxfObject { + dataDescriptor: DataDescriptor; + constructor(dataDescriptor?: DataDescriptor, vdxfkey?: string, version?: BigNumber); + static fromDataVdxfObject(data: BufferDataVdxfObject): VDXFDataDescriptor; + dataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer, offset?: number): number; + HasEncryptedData(): boolean; + HasLabel(): boolean; + HasSalt(): boolean; + HasEPK(): boolean; + HasIVK(): boolean; + HasSSK(): boolean; + CalcFlags(): BigNumber; + SetFlags(): void; +} +export declare enum EHashTypes { + HASH_INVALID, + HASH_BLAKE2BMMR, + HASH_BLAKE2BMMR2, + HASH_KECCAK, + HASH_SHA256D, + HASH_SHA256, + HASH_LASTTYPE +} diff --git a/dist/pbaas/DataDescriptor.js b/dist/pbaas/DataDescriptor.js new file mode 100644 index 00000000..23c1a977 --- /dev/null +++ b/dist/pbaas/DataDescriptor.js @@ -0,0 +1,335 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.EHashTypes = exports.VDXFDataDescriptor = exports.DataDescriptor = void 0; +const bn_js_1 = require("bn.js"); +const varint_1 = require("../utils/varint"); +const varuint_1 = require("../utils/varuint"); +const bufferutils_1 = require("../utils/bufferutils"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const _1 = require("."); +const index_1 = require("../vdxf/index"); +const VDXF_Data = require("../vdxf/vdxfdatakeys"); +const pbaas_1 = require("../constants/pbaas"); +class DataDescriptor { + constructor(data) { + this.flags = new bn_js_1.BN(0); + this.version = DataDescriptor.DEFAULT_VERSION; + this.objectdata = Buffer.from([]); + if (data != null) { + if (data.flags != null) + this.flags = data.flags; + if (data.version != null) + this.version = data.version; + if (data.objectdata != null) + this.objectdata = data.objectdata; + if (data.label != null) + this.label = data.label; + if (data.mimeType != null) + this.mimeType = data.mimeType; + if (data.salt != null) + this.salt = data.salt; + if (data.epk != null) + this.epk = data.epk; + if (data.ivk != null) + this.ivk = data.ivk; + if (data.ssk != null) + this.ssk = data.ssk; + if (this.label && this.label.length > 64) { + this.label = this.label.slice(0, 64); + } + if (this.mimeType && this.mimeType.length > 128) { + this.mimeType = this.mimeType.slice(0, 128); + } + this.SetFlags(); + } + } + static fromJson(data) { + const newDataDescriptor = new DataDescriptor(); + if (data != null) { + if (data.flags != null) + newDataDescriptor.flags = new bn_js_1.BN(data.flags); + if (data.version != null) + newDataDescriptor.version = new bn_js_1.BN(data.version); + if (data.objectdata != null) + newDataDescriptor.objectdata = _1.VdxfUniValue.fromJson(data.objectdata).toBuffer(); + if (data.label != null) + newDataDescriptor.label = data.label; + if (data.mimetype != null) + newDataDescriptor.mimeType = data.mimetype; + if (data.salt != null) + newDataDescriptor.salt = Buffer.from(data.salt, 'hex'); + if (data.epk != null) + newDataDescriptor.epk = Buffer.from(data.epk, 'hex'); + if (data.ivk != null) + newDataDescriptor.ivk = Buffer.from(data.ivk, 'hex'); + if (data.ssk != null) + newDataDescriptor.ssk = Buffer.from(data.ssk, 'hex'); + if (newDataDescriptor.label && newDataDescriptor.label.length > 64) { + newDataDescriptor.label = newDataDescriptor.label.slice(0, 64); + } + if (newDataDescriptor.mimeType && newDataDescriptor.mimeType.length > 128) { + newDataDescriptor.mimeType = newDataDescriptor.mimeType.slice(0, 128); + } + } + ; + newDataDescriptor.SetFlags(); + return newDataDescriptor; + } + DecodeHashVector() { + const vdxfData = new index_1.BufferDataVdxfObject(); + vdxfData.fromBuffer(this.objectdata); + const hashes = []; + if (vdxfData.vdxfkey == VDXF_Data.VectorUint256Key.vdxfid) { + const reader = new BufferReader(Buffer.from(vdxfData.data, 'hex')); + const count = reader.readVarInt(); + for (let i = 0; i < count.toNumber(); i++) { + hashes.push(reader.readSlice(32)); + } + } + return hashes; + } + getByteLength() { + let length = 0; + length += varint_1.default.encodingLength(this.version); + length += varint_1.default.encodingLength(this.flags); + length += varuint_1.default.encodingLength(this.objectdata.length); + length += this.objectdata.length; + if (this.HasLabel()) { + if (this.label.length > 64) { + throw new Error("Label too long"); + } + length += varuint_1.default.encodingLength(this.label.length); + length += this.label.length; + } + if (this.HasMIME()) { + if (this.mimeType.length > 128) { + throw new Error("MIME type too long"); + } + length += varuint_1.default.encodingLength(this.mimeType.length); + length += this.mimeType.length; + } + if (this.HasSalt()) { + length += varuint_1.default.encodingLength(this.salt.length); + length += this.salt.length; + } + if (this.HasEPK()) { + length += varuint_1.default.encodingLength(this.epk.length); + length += this.epk.length; + } + if (this.HasIVK()) { + length += varuint_1.default.encodingLength(this.ivk.length); + length += this.ivk.length; + } + if (this.HasSSK()) { + length += varuint_1.default.encodingLength(this.ssk.length); + length += this.ssk.length; + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeVarInt(this.version); + writer.writeVarInt(this.flags); + writer.writeVarSlice(this.objectdata); + if (this.HasLabel()) { + writer.writeVarSlice(Buffer.from(this.label)); + } + if (this.HasMIME()) { + writer.writeVarSlice(Buffer.from(this.mimeType)); + } + if (this.HasSalt()) { + writer.writeVarSlice(this.salt); + } + if (this.HasEPK()) { + writer.writeVarSlice(this.epk); + } + if (this.HasIVK()) { + writer.writeVarSlice(this.ivk); + } + if (this.HasSSK()) { + writer.writeVarSlice(this.ssk); + } + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.version = reader.readVarInt(); + this.flags = reader.readVarInt(); + this.objectdata = reader.readVarSlice(); + if (this.HasLabel()) { + this.label = reader.readVarSlice().toString(); + } + if (this.HasMIME()) { + this.mimeType = reader.readVarSlice().toString(); + } + if (this.HasSalt()) { + this.salt = reader.readVarSlice(); + } + if (this.HasEPK()) { + this.epk = reader.readVarSlice(); + } + if (this.HasIVK()) { + this.ivk = reader.readVarSlice(); + } + if (this.HasSSK()) { + this.ssk = reader.readVarSlice(); + } + return reader.offset; + } + HasEncryptedData() { + return this.flags.and(DataDescriptor.FLAG_ENCRYPTED_DATA).gt(new bn_js_1.BN(0)); + } + HasSalt() { + return this.flags.and(DataDescriptor.FLAG_SALT_PRESENT).gt(new bn_js_1.BN(0)); + } + HasEPK() { + return this.flags.and(DataDescriptor.FLAG_ENCRYPTION_PUBLIC_KEY_PRESENT).gt(new bn_js_1.BN(0)); + } + HasMIME() { + return this.flags.and(DataDescriptor.FLAG_MIME_TYPE_PRESENT).gt(new bn_js_1.BN(0)); + } + HasIVK() { + return this.flags.and(DataDescriptor.FLAG_INCOMING_VIEWING_KEY_PRESENT).gt(new bn_js_1.BN(0)); + } + HasSSK() { + return this.flags.and(DataDescriptor.FLAG_SYMMETRIC_ENCRYPTION_KEY_PRESENT).gt(new bn_js_1.BN(0)); + } + HasLabel() { + return this.flags.and(DataDescriptor.FLAG_LABEL_PRESENT).gt(new bn_js_1.BN(0)); + } + CalcFlags() { + return this.flags.and(DataDescriptor.FLAG_ENCRYPTED_DATA).add(this.label ? DataDescriptor.FLAG_LABEL_PRESENT : new bn_js_1.BN(0)).add(this.mimeType ? DataDescriptor.FLAG_MIME_TYPE_PRESENT : new bn_js_1.BN(0)).add(this.salt ? DataDescriptor.FLAG_SALT_PRESENT : new bn_js_1.BN(0)).add(this.epk ? DataDescriptor.FLAG_ENCRYPTION_PUBLIC_KEY_PRESENT : new bn_js_1.BN(0)).add(this.ivk ? DataDescriptor.FLAG_INCOMING_VIEWING_KEY_PRESENT : new bn_js_1.BN(0)).add(this.ssk ? DataDescriptor.FLAG_SYMMETRIC_ENCRYPTION_KEY_PRESENT : new bn_js_1.BN(0)); + } + SetFlags() { + this.flags = this.CalcFlags(); + } + isValid() { + return !!(this.version.gte(DataDescriptor.FIRST_VERSION) && this.version.lte(DataDescriptor.LAST_VERSION) && this.flags.and(DataDescriptor.FLAG_MASK.notn(DataDescriptor.FLAG_MASK.bitLength()))); + } + toJson() { + var _a; + const retval = { + version: this.version.toNumber(), + flags: this.flags.toNumber() + }; + let isText = false; + if (this.mimeType) { + retval['mimetype'] = this.mimeType; + if (this.mimeType.startsWith("text/")) + isText = true; + } + let processedObject = new _1.VdxfUniValue(); + processedObject.fromBuffer(this.objectdata); + if ((_a = processedObject.values[0]) === null || _a === void 0 ? void 0 : _a[""]) { + const keys = Object.keys(processedObject.values[0]); + const values = Object.values(processedObject.values[0]); + if (isText && Buffer.isBuffer(values[0]) && keys[0] === "") { + const objectDataUni = { message: '' }; + objectDataUni.message = values[0].toString('utf8'); + retval['objectdata'] = objectDataUni; + } + else if (Buffer.isBuffer(values[0])) { + retval['objectdata'] = values[0].toString('hex'); + } + } + else { + retval['objectdata'] = processedObject.toJson(); + } + if (this.label) + retval['label'] = this.label; + if (this.salt) + retval['salt'] = this.salt.toString('hex'); + if (this.epk) + retval['epk'] = this.epk.toString('hex'); + if (this.ivk) + retval['ivk'] = this.ivk.toString('hex'); + if (this.ssk) + retval['ssk'] = this.ssk.toString('hex'); + return retval; + } +} +exports.DataDescriptor = DataDescriptor; +DataDescriptor.VERSION_INVALID = new bn_js_1.BN(0); +DataDescriptor.VERSION_FIRST = new bn_js_1.BN(1); +DataDescriptor.FIRST_VERSION = new bn_js_1.BN(1); +DataDescriptor.LAST_VERSION = new bn_js_1.BN(1); +DataDescriptor.DEFAULT_VERSION = new bn_js_1.BN(1); +DataDescriptor.FLAG_ENCRYPTED_DATA = new bn_js_1.BN(1); +DataDescriptor.FLAG_SALT_PRESENT = new bn_js_1.BN(2); +DataDescriptor.FLAG_ENCRYPTION_PUBLIC_KEY_PRESENT = new bn_js_1.BN(4); +DataDescriptor.FLAG_INCOMING_VIEWING_KEY_PRESENT = new bn_js_1.BN(8); +DataDescriptor.FLAG_SYMMETRIC_ENCRYPTION_KEY_PRESENT = new bn_js_1.BN(0x10); +DataDescriptor.FLAG_LABEL_PRESENT = new bn_js_1.BN(0x20); +DataDescriptor.FLAG_MIME_TYPE_PRESENT = new bn_js_1.BN(0x40); +DataDescriptor.FLAG_MASK = (DataDescriptor.FLAG_ENCRYPTED_DATA.add(DataDescriptor.FLAG_SALT_PRESENT).add(DataDescriptor.FLAG_ENCRYPTION_PUBLIC_KEY_PRESENT).add(DataDescriptor.FLAG_INCOMING_VIEWING_KEY_PRESENT).add(DataDescriptor.FLAG_SYMMETRIC_ENCRYPTION_KEY_PRESENT).add(DataDescriptor.FLAG_LABEL_PRESENT).add(DataDescriptor.FLAG_MIME_TYPE_PRESENT)); +; +class VDXFDataDescriptor extends index_1.BufferDataVdxfObject { + constructor(dataDescriptor, vdxfkey = "", version = new bn_js_1.BN(1)) { + super("", vdxfkey); + this.version = version; + if (dataDescriptor) { + this.dataDescriptor = dataDescriptor; + } + } + static fromDataVdxfObject(data) { + const retval = new VDXFDataDescriptor(); + retval.version = data.version; + retval.data = data.data; + retval.fromBuffer(Buffer.from(retval.data, 'hex')); + delete retval.data; + return retval; + } + dataByteLength() { + let length = 0; + length += this.dataDescriptor.getByteLength(); + return length; + } + toDataBuffer() { + return this.dataDescriptor.toBuffer(); + } + fromDataBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + this.data = reader.readVarSlice().toString('hex'); + this.dataDescriptor = new DataDescriptor(); + this.dataDescriptor.fromBuffer(Buffer.from(this.data, 'hex'), reader.offset); + delete this.data; + return reader.offset; + } + HasEncryptedData() { + return this.dataDescriptor.HasEncryptedData(); + } + HasLabel() { + return this.dataDescriptor.HasLabel(); + } + HasSalt() { + return this.dataDescriptor.HasSalt(); + } + HasEPK() { + return this.dataDescriptor.HasEPK(); + } + HasIVK() { + return this.dataDescriptor.HasIVK(); + } + HasSSK() { + return this.dataDescriptor.HasSSK(); + } + CalcFlags() { + return this.dataDescriptor.CalcFlags(); + } + SetFlags() { + return this.dataDescriptor.SetFlags(); + } +} +exports.VDXFDataDescriptor = VDXFDataDescriptor; +; +var EHashTypes; +(function (EHashTypes) { + EHashTypes[EHashTypes["HASH_INVALID"] = pbaas_1.HASH_TYPE_INVALID.toNumber()] = "HASH_INVALID"; + EHashTypes[EHashTypes["HASH_BLAKE2BMMR"] = pbaas_1.HASH_TYPE_BLAKE2B.toNumber()] = "HASH_BLAKE2BMMR"; + EHashTypes[EHashTypes["HASH_BLAKE2BMMR2"] = pbaas_1.HASH_TYPE_BLAKE2BMMR2.toNumber()] = "HASH_BLAKE2BMMR2"; + EHashTypes[EHashTypes["HASH_KECCAK"] = pbaas_1.HASH_TYPE_KECCAK256.toNumber()] = "HASH_KECCAK"; + EHashTypes[EHashTypes["HASH_SHA256D"] = pbaas_1.HASH_TYPE_SHA256D.toNumber()] = "HASH_SHA256D"; + EHashTypes[EHashTypes["HASH_SHA256"] = pbaas_1.HASH_TYPE_SHA256.toNumber()] = "HASH_SHA256"; + EHashTypes[EHashTypes["HASH_LASTTYPE"] = pbaas_1.HASH_TYPE_SHA256.toNumber()] = "HASH_LASTTYPE"; +})(EHashTypes || (exports.EHashTypes = EHashTypes = {})); +; diff --git a/dist/pbaas/DefinedKey.d.ts b/dist/pbaas/DefinedKey.d.ts new file mode 100644 index 00000000..c94676e2 --- /dev/null +++ b/dist/pbaas/DefinedKey.d.ts @@ -0,0 +1,38 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +import { IdentityID } from './IdentityID'; +export declare class DefinedKey implements SerializableEntity { + version: BigNumber; + flags: BigNumber; + vdxfuri?: string; + combinedvdxfkey?: IdentityID; + combinedhash?: Buffer; + indexnum?: BigNumber; + static DEFINEDKEY_DEFAULT_FLAGS: import("bn.js"); + static DEFINEDKEY_COMBINES_KEY: import("bn.js"); + static DEFINEDKEY_COMBINES_HASH: import("bn.js"); + static DEFINEDKEY_COMBINES_INDEXNUM: import("bn.js"); + static DEFINEDKEY_CONTAINS_SCHEMA: import("bn.js"); + static DEFINEDKEY_VERSION_INVALID: import("bn.js"); + static DEFINEDKEY_VERSION_CURRENT: import("bn.js"); + constructor(data?: { + version?: BigNumber; + flags?: BigNumber; + vdxfuri?: string; + combinedvdxfkey?: IdentityID; + combinedhash?: Buffer; + indexnum?: BigNumber; + }); + protected containsSchema(): boolean; + combinesKey(): boolean; + combinesHash(): boolean; + combinesIndexNum(): boolean; + getFqnBuffer(): Buffer; + private getDataKey; + getIAddr(testnet?: boolean): string; + getNameSpaceID(testnet?: boolean): string; + private getSelfByteLength; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; +} diff --git a/dist/pbaas/DefinedKey.js b/dist/pbaas/DefinedKey.js new file mode 100644 index 00000000..a9f4c767 --- /dev/null +++ b/dist/pbaas/DefinedKey.js @@ -0,0 +1,99 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DefinedKey = void 0; +const bufferutils_1 = require("../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const varuint_1 = require("../utils/varuint"); +const varint_1 = require("../utils/varint"); +const address_1 = require("../utils/address"); +const pbaas_1 = require("../constants/pbaas"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class DefinedKey { + constructor(data) { + this.flags = DefinedKey.DEFINEDKEY_DEFAULT_FLAGS; + this.version = DefinedKey.DEFINEDKEY_VERSION_INVALID; + if (data != null) { + if (data.flags != null) + this.flags = data.flags; + if (data.version != null) + this.version = data.version; + if (data.vdxfuri) + this.vdxfuri = data.vdxfuri; + if (data.combinedvdxfkey || data.combinedhash || data.indexnum) { + throw new Error("Combining keys not supported yet."); + } + } + if (this.containsSchema()) + throw new Error("Schema not supported yet."); + if (this.combinesKey() || this.combinesHash() || this.combinesIndexNum()) { + throw new Error("Combining keys not supported yet."); + } + } + containsSchema() { + return !!(this.flags.and(DefinedKey.DEFINEDKEY_CONTAINS_SCHEMA).toNumber()); + } + combinesKey() { + return !!(this.flags.and(DefinedKey.DEFINEDKEY_COMBINES_KEY).toNumber()); + } + combinesHash() { + return !!(this.flags.and(DefinedKey.DEFINEDKEY_COMBINES_HASH).toNumber()); + } + combinesIndexNum() { + return !!(this.flags.and(DefinedKey.DEFINEDKEY_COMBINES_INDEXNUM).toNumber()); + } + getFqnBuffer() { + return Buffer.from(this.vdxfuri, 'utf8'); + } + getDataKey(testnet = false) { + if (this.combinedvdxfkey || this.combinedhash || this.indexnum) { + throw new Error("Combining keys not supported yet."); + } + if (this.vdxfuri == null) + throw new Error("No fully qualified name provided."); + else if (testnet) { + return (0, address_1.getDataKey)(this.vdxfuri, null, pbaas_1.TESTNET_VERUS_CHAINID); + } + else + return (0, address_1.getDataKey)(this.vdxfuri); + } + getIAddr(testnet = false) { + return this.getDataKey(testnet).id; + } + getNameSpaceID(testnet = false) { + return this.getDataKey(testnet).namespace; + } + getSelfByteLength() { + let byteLength = 0; + byteLength += varint_1.default.encodingLength(this.version); + byteLength += varint_1.default.encodingLength(this.flags); + const fqnLen = this.getFqnBuffer().length; + byteLength += varuint_1.default.encodingLength(fqnLen); + byteLength += fqnLen; + return byteLength; + } + getByteLength() { + return this.getSelfByteLength(); + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getSelfByteLength())); + writer.writeVarInt(this.version); + writer.writeVarInt(this.flags); + writer.writeVarSlice(this.getFqnBuffer()); + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.version = reader.readVarInt(); + this.flags = reader.readVarInt(); + this.vdxfuri = (reader.readVarSlice()).toString('utf8'); + return reader.offset; + } +} +exports.DefinedKey = DefinedKey; +DefinedKey.DEFINEDKEY_DEFAULT_FLAGS = new bn_js_1.BN(0, 10); +DefinedKey.DEFINEDKEY_COMBINES_KEY = new bn_js_1.BN(1, 10); +DefinedKey.DEFINEDKEY_COMBINES_HASH = new bn_js_1.BN(2, 10); +DefinedKey.DEFINEDKEY_COMBINES_INDEXNUM = new bn_js_1.BN(4, 10); +DefinedKey.DEFINEDKEY_CONTAINS_SCHEMA = new bn_js_1.BN(8, 10); +DefinedKey.DEFINEDKEY_VERSION_INVALID = new bn_js_1.BN(0, 10); +DefinedKey.DEFINEDKEY_VERSION_CURRENT = new bn_js_1.BN(1, 10); diff --git a/dist/pbaas/EvidenceData.d.ts b/dist/pbaas/EvidenceData.d.ts new file mode 100644 index 00000000..fc075bbe --- /dev/null +++ b/dist/pbaas/EvidenceData.d.ts @@ -0,0 +1,60 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +export interface EvidenceDataInChainObjectJson { + vdxftype?: string; + value: { + hex: string; + version: number; + }; +} +export interface EvidenceDataJson { + vdxftype?: string; + hex: string; +} +export declare enum ETypes { + TYPE_INVALID = 0, + TYPE_FIRST_VALID = 1, + TYPE_DATA = 1,// holding a transaction proof of export with finalization referencing finalization of root notarization + TYPE_MULTIPART_DATA = 2,// this is used to combine multiple outputs that can be used to reconstruct one evidence set + TYPE_LAST_VALID = 2 +} +export declare class MultiPartDescriptor implements SerializableEntity { + index: BigNumber; + total_length: BigNumber; + start: BigNumber; + constructor(data?: { + index: any; + total_length: any; + start: any; + }); + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; +} +export declare class EvidenceData implements SerializableEntity { + version: BigNumber; + type: BigNumber; + md: MultiPartDescriptor; + vdxfd: string; + data_vec: Buffer; + static VERSION_INVALID: import("bn.js"); + static VERSION_FIRST: import("bn.js"); + static VERSION_CURRENT: import("bn.js"); + static VERSION_LAST: import("bn.js"); + constructor(data?: { + version: any; + type: any; + md: any; + vdxfd: any; + data_vec: any; + }); + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + isValid(): boolean; + toJson(): { + version: string; + hex: string; + }; + static fromJson(data: EvidenceDataJson): EvidenceData; +} diff --git a/dist/pbaas/EvidenceData.js b/dist/pbaas/EvidenceData.js new file mode 100644 index 00000000..c1a404eb --- /dev/null +++ b/dist/pbaas/EvidenceData.js @@ -0,0 +1,126 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.EvidenceData = exports.MultiPartDescriptor = exports.ETypes = void 0; +const varint_1 = require("../utils/varint"); +const varuint_1 = require("../utils/varuint"); +const address_1 = require("../utils/address"); +const bufferutils_1 = require("../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const vdxf_1 = require("../constants/vdxf"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +var ETypes; +(function (ETypes) { + ETypes[ETypes["TYPE_INVALID"] = 0] = "TYPE_INVALID"; + ETypes[ETypes["TYPE_FIRST_VALID"] = 1] = "TYPE_FIRST_VALID"; + ETypes[ETypes["TYPE_DATA"] = 1] = "TYPE_DATA"; + ETypes[ETypes["TYPE_MULTIPART_DATA"] = 2] = "TYPE_MULTIPART_DATA"; + ETypes[ETypes["TYPE_LAST_VALID"] = 2] = "TYPE_LAST_VALID"; +})(ETypes || (exports.ETypes = ETypes = {})); +; +class MultiPartDescriptor { + constructor(data) { + this.index = (data === null || data === void 0 ? void 0 : data.index) || new bn_js_1.BN(0, 10); + this.total_length = (data === null || data === void 0 ? void 0 : data.total_length) || new bn_js_1.BN(0, 10); + this.start = (data === null || data === void 0 ? void 0 : data.start) || new bn_js_1.BN(0, 10); + } + getByteLength() { + let byteLength = 0; + byteLength += varint_1.default.encodingLength(this.index); + byteLength += varint_1.default.encodingLength(this.total_length); + byteLength += varint_1.default.encodingLength(this.start); + return byteLength; + } + toBuffer() { + const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); + bufferWriter.writeVarInt(this.index); + bufferWriter.writeVarInt(this.total_length); + bufferWriter.writeVarInt(this.start); + return bufferWriter.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.index = reader.readVarInt(); + this.total_length = reader.readVarInt(); + this.start = reader.readVarInt(); + return reader.offset; + } +} +exports.MultiPartDescriptor = MultiPartDescriptor; +class EvidenceData { + constructor(data) { + this.version = (data === null || data === void 0 ? void 0 : data.version) || new bn_js_1.BN(1, 10); + this.type = (data === null || data === void 0 ? void 0 : data.type) || new bn_js_1.BN(ETypes.TYPE_DATA); // holding a transaction proof of export with finalization referencing finalization of root notarization + this.md = data === null || data === void 0 ? void 0 : data.md; + this.vdxfd = data === null || data === void 0 ? void 0 : data.vdxfd; + this.data_vec = (data === null || data === void 0 ? void 0 : data.data_vec) || Buffer.alloc(0); + } + getByteLength() { + let byteLength = 0; + //yes read twice + byteLength += varint_1.default.encodingLength(new bn_js_1.BN(this.version)); + byteLength += varint_1.default.encodingLength(new bn_js_1.BN(this.version)); + byteLength += varint_1.default.encodingLength(new bn_js_1.BN(this.type)); + if (this.type.eq(new bn_js_1.BN(ETypes.TYPE_MULTIPART_DATA))) { + byteLength += this.md.getByteLength(); + } + else { + byteLength += vdxf_1.HASH160_BYTE_LENGTH; + } + byteLength += varuint_1.default.encodingLength(this.data_vec.length); + byteLength += this.data_vec.length; + return byteLength; + } + toBuffer() { + const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); + //yes read twice + bufferWriter.writeVarInt(this.version); + bufferWriter.writeVarInt(this.version); + bufferWriter.writeVarInt(this.type); + if (this.type.eq(new bn_js_1.BN(ETypes.TYPE_MULTIPART_DATA))) { + bufferWriter.writeSlice(this.md.toBuffer()); + } + else { + bufferWriter.writeSlice((0, address_1.fromBase58Check)(this.vdxfd).hash); + } + bufferWriter.writeVarSlice(this.data_vec); + return bufferWriter.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + //yes read twice + this.version = reader.readVarInt(); + this.version = reader.readVarInt(); + this.type = reader.readVarInt(); + if (this.type.eq(new bn_js_1.BN(ETypes.TYPE_MULTIPART_DATA))) { + this.md = new MultiPartDescriptor(); + reader.offset = this.md.fromBuffer(buffer, reader.offset); + } + else { + this.vdxfd = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + } + this.data_vec = reader.readVarSlice(); + return reader.offset; + } + isValid() { + return this.version.gte(EvidenceData.VERSION_FIRST) && + this.version.lte(EvidenceData.VERSION_LAST) && + this.type.gte(new bn_js_1.BN(ETypes.TYPE_FIRST_VALID)) && + this.type.lte(new bn_js_1.BN(ETypes.TYPE_LAST_VALID)); + } + toJson() { + return { + version: this.version.toString(10), + hex: this.toBuffer().toString('hex') + }; + } + static fromJson(data) { + const newEvidenceData = new EvidenceData(); + newEvidenceData.fromBuffer(Buffer.from(data.hex, 'hex')); + return newEvidenceData; + } +} +exports.EvidenceData = EvidenceData; +EvidenceData.VERSION_INVALID = new bn_js_1.BN(0); +EvidenceData.VERSION_FIRST = new bn_js_1.BN(1); +EvidenceData.VERSION_CURRENT = new bn_js_1.BN(1); +EvidenceData.VERSION_LAST = new bn_js_1.BN(1); diff --git a/dist/pbaas/Identity.d.ts b/dist/pbaas/Identity.d.ts new file mode 100644 index 00000000..8f2a7218 --- /dev/null +++ b/dist/pbaas/Identity.d.ts @@ -0,0 +1,101 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { Principal } from './Principal'; +import { IdentityID } from './IdentityID'; +import { SaplingPaymentAddress } from './SaplingPaymentAddress'; +import { ContentMultiMap, ContentMultiMapJson } from './ContentMultiMap'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +import { KeyID } from './KeyID'; +export declare const IDENTITY_VERSION_VAULT: import("bn.js"); +export declare const IDENTITY_VERSION_PBAAS: import("bn.js"); +export declare const IDENITTY_VERSION_INVALID: import("bn.js"); +export declare const IDENTITY_FLAG_REVOKED: import("bn.js"); +export declare const IDENTITY_FLAG_ACTIVECURRENCY: import("bn.js"); +export declare const IDENTITY_FLAG_LOCKED: import("bn.js"); +export declare const IDENTITY_FLAG_TOKENIZED_CONTROL: import("bn.js"); +export declare const IDENTITY_MAX_UNLOCK_DELAY: import("bn.js"); +export declare const IDENTITY_MAX_NAME_LEN: import("bn.js"); +export type Hashes = Map; +export type VerusCLIVerusIDJsonBase = { + contentmap?: { + [key: string]: string; + }; + contentmultimap?: T; + flags?: number; + identityaddress?: string; + minimumsignatures?: number; + name?: string; + parent?: string; + primaryaddresses?: Array; + privateaddress?: string; + recoveryauthority?: string; + revocationauthority?: string; + systemid?: string; + timelock?: number; + version?: number; +}; +export type VerusCLIVerusIDJson = VerusCLIVerusIDJsonBase; +export type VerusIDInitData = { + version?: BigNumber; + flags?: BigNumber; + min_sigs?: BigNumber; + primary_addresses?: Array; + parent?: IdentityID; + system_id?: IdentityID; + name?: string; + content_map?: Hashes; + content_multimap?: ContentMultiMap; + revocation_authority?: IdentityID; + recovery_authority?: IdentityID; + private_addresses?: Array; + unlock_after?: BigNumber; +}; +export declare class Identity extends Principal implements SerializableEntity { + parent: IdentityID; + system_id: IdentityID; + name: string; + content_map: Hashes; + content_multimap: ContentMultiMap; + revocation_authority: IdentityID; + recovery_authority: IdentityID; + private_addresses: Array; + unlock_after: BigNumber; + static VERSION_INVALID: import("bn.js"); + static VERSION_VERUSID: import("bn.js"); + static VERSION_VAULT: import("bn.js"); + static VERSION_PBAAS: import("bn.js"); + static VERSION_CURRENT: import("bn.js"); + static VERSION_FIRSTVALID: import("bn.js"); + static VERSION_LASTVALID: import("bn.js"); + constructor(data?: VerusIDInitData); + protected containsParent(): boolean; + protected containsSystemId(): boolean; + protected containsName(): boolean; + protected containsContentMap(): boolean; + protected containsContentMultiMap(): boolean; + protected containsRevocation(): boolean; + protected containsRecovery(): boolean; + protected containsPrivateAddresses(): boolean; + protected containsUnlockAfter(): boolean; + private getIdentityByteLength; + getByteLength(): number; + clearContentMultiMap(): void; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number, parseVdxfObjects?: boolean): number; + toJson(): VerusCLIVerusIDJson; + getIdentityAddress(): string; + isRevoked(): boolean; + isLocked(): boolean; + hasActiveCurrency(): boolean; + hasTokenizedIdControl(): boolean; + lock(unlockTime: BigNumber): void; + unlock(height?: BigNumber, txExpiryHeight?: BigNumber): void; + revoke(): void; + unrevoke(): void; + setPrimaryAddresses(addresses: Array): void; + setRevocation(iAddr: string): void; + setRecovery(iAddr: string): void; + setPrivateAddress(zAddr: string): void; + upgradeVersion(version?: BigNumber): void; + protected static internalFromJson(json: VerusCLIVerusIDJson, ctor: new (...args: any[]) => T): T; + static fromJson(json: VerusCLIVerusIDJson): Identity; +} diff --git a/dist/pbaas/Identity.js b/dist/pbaas/Identity.js new file mode 100644 index 00000000..a1348af7 --- /dev/null +++ b/dist/pbaas/Identity.js @@ -0,0 +1,410 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Identity = exports.IDENTITY_MAX_NAME_LEN = exports.IDENTITY_MAX_UNLOCK_DELAY = exports.IDENTITY_FLAG_TOKENIZED_CONTROL = exports.IDENTITY_FLAG_LOCKED = exports.IDENTITY_FLAG_ACTIVECURRENCY = exports.IDENTITY_FLAG_REVOKED = exports.IDENITTY_VERSION_INVALID = exports.IDENTITY_VERSION_PBAAS = exports.IDENTITY_VERSION_VAULT = void 0; +const varuint_1 = require("../utils/varuint"); +const bufferutils_1 = require("../utils/bufferutils"); +const Principal_1 = require("./Principal"); +const address_1 = require("../utils/address"); +const vdxf_1 = require("../constants/vdxf"); +const bn_js_1 = require("bn.js"); +const IdentityID_1 = require("./IdentityID"); +const SaplingPaymentAddress_1 = require("./SaplingPaymentAddress"); +const ContentMultiMap_1 = require("./ContentMultiMap"); +const KeyID_1 = require("./KeyID"); +exports.IDENTITY_VERSION_VAULT = new bn_js_1.BN(2, 10); +exports.IDENTITY_VERSION_PBAAS = new bn_js_1.BN(3, 10); +exports.IDENITTY_VERSION_INVALID = new bn_js_1.BN(0, 10); +exports.IDENTITY_FLAG_REVOKED = new bn_js_1.BN("8000", 16); // set when this identity is revoked +exports.IDENTITY_FLAG_ACTIVECURRENCY = new bn_js_1.BN("1", 16); // flag that is set when this ID is being used as an active currency name +exports.IDENTITY_FLAG_LOCKED = new bn_js_1.BN("2", 16); // set when this identity is locked +exports.IDENTITY_FLAG_TOKENIZED_CONTROL = new bn_js_1.BN("4", 16); // set when revocation/recovery over this identity can be performed by anyone who controls its token +exports.IDENTITY_MAX_UNLOCK_DELAY = new bn_js_1.BN(60).mul(new bn_js_1.BN(24)).mul(new bn_js_1.BN(22)).mul(new bn_js_1.BN(365)); // 21+ year maximum unlock time for an ID w/1 minute blocks, not adjusted for avg blocktime in first PBaaS +exports.IDENTITY_MAX_NAME_LEN = new bn_js_1.BN(64); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class Identity extends Principal_1.Principal { + constructor(data) { + super(data); + if (data === null || data === void 0 ? void 0 : data.version) + this.version = data.version; + else + this.version = Identity.VERSION_CURRENT; + if (data === null || data === void 0 ? void 0 : data.parent) + this.parent = data.parent; + if (data === null || data === void 0 ? void 0 : data.system_id) + this.system_id = data.system_id; + if (data === null || data === void 0 ? void 0 : data.name) + this.name = data.name; + if (data === null || data === void 0 ? void 0 : data.content_map) + this.content_map = data.content_map; + else + this.content_map = new Map(); + if (data === null || data === void 0 ? void 0 : data.content_multimap) + this.content_multimap = data.content_multimap; + else + this.content_multimap = new ContentMultiMap_1.ContentMultiMap({ kv_content: new Map() }); + if (data === null || data === void 0 ? void 0 : data.revocation_authority) + this.revocation_authority = data.revocation_authority; + if (data === null || data === void 0 ? void 0 : data.recovery_authority) + this.recovery_authority = data.recovery_authority; + if (data === null || data === void 0 ? void 0 : data.private_addresses) + this.private_addresses = data.private_addresses; + if (data === null || data === void 0 ? void 0 : data.unlock_after) + this.unlock_after = data.unlock_after; + } + containsParent() { + return true; + } + containsSystemId() { + return true; + } + containsName() { + return true; + } + containsContentMap() { + return true; + } + containsContentMultiMap() { + return true; + } + containsRevocation() { + return true; + } + containsRecovery() { + return true; + } + containsPrivateAddresses() { + return true; + } + containsUnlockAfter() { + return true; + } + getIdentityByteLength() { + let length = 0; + length += super.getByteLength(); + if (this.containsParent()) + length += this.parent.getByteLength(); + if (this.containsName()) { + const nameLength = Buffer.from(this.name, "utf8").length; + length += varuint_1.default.encodingLength(nameLength); + length += nameLength; + } + if (this.containsContentMultiMap() && this.version.gte(exports.IDENTITY_VERSION_PBAAS)) { + length += this.content_multimap.getByteLength(); + } + if (this.containsContentMap()) { + if (this.version.lt(exports.IDENTITY_VERSION_PBAAS)) { + length += varuint_1.default.encodingLength(this.content_map.size); + for (const m of this.content_map.entries()) { + length += vdxf_1.HASH160_BYTE_LENGTH; //uint160 key + length += vdxf_1.HASH256_BYTE_LENGTH; + } + } + length += varuint_1.default.encodingLength(this.content_map.size); + for (const m of this.content_map.entries()) { + length += vdxf_1.HASH160_BYTE_LENGTH; //uint160 key + length += vdxf_1.HASH256_BYTE_LENGTH; //uint256 hash + } + } + if (this.containsRevocation()) + length += this.revocation_authority.getByteLength(); //uint160 revocation authority + if (this.containsRecovery()) + length += this.recovery_authority.getByteLength(); //uint160 recovery authority + if (this.containsPrivateAddresses()) { + length += varuint_1.default.encodingLength(this.private_addresses ? this.private_addresses.length : 0); + if (this.private_addresses) { + for (const n of this.private_addresses) { + length += n.getByteLength(); + } + } + } + // post PBAAS + if (this.version.gte(exports.IDENTITY_VERSION_VAULT)) { + if (this.containsSystemId()) + length += this.system_id.getByteLength(); //uint160 systemid + if (this.containsUnlockAfter()) + length += 4; //uint32 unlockafter + } + return length; + } + getByteLength() { + return this.getIdentityByteLength(); + } + clearContentMultiMap() { + this.content_multimap = new ContentMultiMap_1.ContentMultiMap({ kv_content: new Map() }); + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getIdentityByteLength())); + writer.writeSlice(super.toBuffer()); + if (this.containsParent()) + writer.writeSlice(this.parent.toBuffer()); + if (this.containsName()) + writer.writeVarSlice(Buffer.from(this.name, "utf8")); + //contentmultimap + if (this.containsContentMultiMap() && this.version.gte(exports.IDENTITY_VERSION_PBAAS)) { + writer.writeSlice(this.content_multimap.toBuffer()); + } + if (this.containsContentMap()) { + //contentmap + if (this.version.lt(exports.IDENTITY_VERSION_PBAAS)) { + writer.writeCompactSize(this.content_map.size); + for (const [key, value] of this.content_map.entries()) { + writer.writeSlice((0, address_1.fromBase58Check)(key).hash); + writer.writeSlice(value); + } + } + //contentmap2 + writer.writeCompactSize(this.content_map.size); + for (const [key, value] of this.content_map.entries()) { + writer.writeSlice((0, address_1.fromBase58Check)(key).hash); + writer.writeSlice(value); + } + } + if (this.containsRevocation()) + writer.writeSlice(this.revocation_authority.toBuffer()); + if (this.containsRecovery()) + writer.writeSlice(this.recovery_authority.toBuffer()); + if (this.containsPrivateAddresses()) { + // privateaddresses + writer.writeCompactSize(this.private_addresses ? this.private_addresses.length : 0); + if (this.private_addresses) { + for (const n of this.private_addresses) { + writer.writeSlice(n.toBuffer()); + } + } + } + // post PBAAS + if (this.version.gte(exports.IDENTITY_VERSION_VAULT)) { + if (this.containsSystemId()) + writer.writeSlice(this.system_id.toBuffer()); + if (this.containsUnlockAfter()) + writer.writeUInt32(this.unlock_after.toNumber()); + } + return writer.buffer; + } + fromBuffer(buffer, offset = 0, parseVdxfObjects = false) { + const reader = new BufferReader(buffer, offset); + reader.offset = super.fromBuffer(reader.buffer, reader.offset); + const _parent = new IdentityID_1.IdentityID(); + if (this.containsParent()) { + reader.offset = _parent.fromBuffer(reader.buffer, reader.offset); + this.parent = _parent; + } + if (this.containsName()) + this.name = Buffer.from(reader.readVarSlice()).toString('utf8'); + if (this.containsContentMultiMap()) { + //contentmultimap + if (this.version.gte(exports.IDENTITY_VERSION_PBAAS)) { + const multimap = new ContentMultiMap_1.ContentMultiMap(); + reader.offset = multimap.fromBuffer(reader.buffer, reader.offset, parseVdxfObjects); + this.content_multimap = multimap; + } + } + if (this.containsContentMap()) { + // contentmap + if (this.version.lt(exports.IDENTITY_VERSION_PBAAS)) { + const contentMapSize = reader.readVarInt(); + this.content_map = new Map(); + for (var i = 0; i < contentMapSize.toNumber(); i++) { + const contentMapKey = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + this.content_map.set(contentMapKey, reader.readSlice(32)); + } + } + const contentMapSize = reader.readVarInt(); + this.content_map = new Map(); + for (var i = 0; i < contentMapSize.toNumber(); i++) { + const contentMapKey = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + this.content_map.set(contentMapKey, reader.readSlice(32)); + } + } + if (this.containsRevocation()) { + const _revocation = new IdentityID_1.IdentityID(); + reader.offset = _revocation.fromBuffer(reader.buffer, reader.offset); + this.revocation_authority = _revocation; + } + if (this.containsRecovery()) { + const _recovery = new IdentityID_1.IdentityID(); + reader.offset = _recovery.fromBuffer(reader.buffer, reader.offset); + this.recovery_authority = _recovery; + } + if (this.containsPrivateAddresses()) { + const numPrivateAddresses = reader.readVarInt(); + if (numPrivateAddresses.gt(new bn_js_1.BN(0))) + this.private_addresses = []; + for (var i = 0; i < numPrivateAddresses.toNumber(); i++) { + const saplingAddr = new SaplingPaymentAddress_1.SaplingPaymentAddress(); + reader.offset = saplingAddr.fromBuffer(reader.buffer, reader.offset); + this.private_addresses.push(saplingAddr); + } + } + if (this.version.gte(exports.IDENTITY_VERSION_VAULT)) { + if (this.containsSystemId()) { + const _system = new IdentityID_1.IdentityID(); + reader.offset = _system.fromBuffer(reader.buffer, reader.offset); + this.system_id = _system; + } + if (this.containsUnlockAfter()) { + this.unlock_after = new bn_js_1.BN(reader.readUInt32(), 10); + } + } + else { + this.system_id = _parent; + this.unlock_after = new bn_js_1.BN(0); + } + return reader.offset; + } + toJson() { + const contentmap = {}; + if (this.containsContentMap()) { + for (const [key, value] of this.content_map.entries()) { + const valueCopy = Buffer.from(value); + contentmap[(0, address_1.fromBase58Check)(key).hash.reverse().toString('hex')] = valueCopy.reverse().toString('hex'); + } + } + const ret = { + contentmap: this.containsContentMap() ? contentmap : undefined, + contentmultimap: this.containsContentMultiMap() ? this.content_multimap.toJson() : undefined, + flags: this.containsFlags() ? this.flags.toNumber() : undefined, + minimumsignatures: this.containsMinSigs() ? this.min_sigs.toNumber() : undefined, + name: this.name, + parent: this.containsParent() ? this.parent.toAddress() : undefined, + primaryaddresses: this.containsPrimaryAddresses() ? this.primary_addresses.map(x => x.toAddress()) : undefined, + recoveryauthority: this.containsRecovery() ? this.recovery_authority.toAddress() : undefined, + revocationauthority: this.containsRevocation() ? this.revocation_authority.toAddress() : undefined, + systemid: this.containsSystemId() ? this.system_id.toAddress() : undefined, + timelock: this.containsUnlockAfter() ? this.unlock_after.toNumber() : undefined, + version: this.containsVersion() ? this.version.toNumber() : undefined, + identityaddress: this.containsParent() ? this.getIdentityAddress() : undefined + }; + if (this.private_addresses != null && this.private_addresses.length > 0) { + ret.privateaddress = this.private_addresses[0].toAddressString(); + } + for (const key in ret) { + if (ret[key] === undefined) + delete ret[key]; + } + return ret; + } + getIdentityAddress() { + return (0, address_1.nameAndParentAddrToIAddr)(this.name, this.parent.toAddress()); + } + isRevoked() { + return !!(this.flags.and(exports.IDENTITY_FLAG_REVOKED).toNumber()); + } + isLocked() { + return !!(this.flags.and(exports.IDENTITY_FLAG_LOCKED).toNumber()); + } + hasActiveCurrency() { + return !!(this.flags.and(exports.IDENTITY_FLAG_ACTIVECURRENCY).toNumber()); + } + hasTokenizedIdControl() { + return !!(this.flags.and(exports.IDENTITY_FLAG_TOKENIZED_CONTROL).toNumber()); + } + lock(unlockTime) { + let unlockAfter = unlockTime; + if (unlockTime.lte(new bn_js_1.BN(0))) { + unlockAfter = new bn_js_1.BN(1); + } + else if (unlockTime.gt(exports.IDENTITY_MAX_UNLOCK_DELAY)) { + unlockAfter = exports.IDENTITY_MAX_UNLOCK_DELAY; + } + this.flags = this.flags.or(exports.IDENTITY_FLAG_LOCKED); + this.unlock_after = unlockAfter; + } + unlock(height = new bn_js_1.BN(0), txExpiryHeight = new bn_js_1.BN(0)) { + if (this.isRevoked()) { + this.flags = this.flags.and(exports.IDENTITY_FLAG_LOCKED.notn(16)); + this.unlock_after = new bn_js_1.BN(0); + } + else if (this.isLocked()) { + this.flags = this.flags.and(exports.IDENTITY_FLAG_LOCKED.notn(16)); + this.unlock_after = this.unlock_after.add(txExpiryHeight); + } + else if (height.gt(this.unlock_after)) { + this.unlock_after = new bn_js_1.BN(0); + } + if (this.unlock_after.gt((txExpiryHeight.add(exports.IDENTITY_MAX_UNLOCK_DELAY)))) { + this.unlock_after = txExpiryHeight.add(exports.IDENTITY_MAX_UNLOCK_DELAY); + } + } + revoke() { + this.flags = this.flags.or(exports.IDENTITY_FLAG_REVOKED); + this.unlock(); + } + unrevoke() { + this.flags = this.flags.and(exports.IDENTITY_FLAG_REVOKED.notn(16)); + } + setPrimaryAddresses(addresses) { + const primaryAddresses = []; + for (const str of addresses) { + const addr = KeyID_1.KeyID.fromAddress(str); + if (addr.version !== vdxf_1.R_ADDR_VERSION) + throw new Error("Primary addresses must be r-addresses."); + else { + primaryAddresses.push(addr); + } + } + this.primary_addresses = primaryAddresses; + } + setRevocation(iAddr) { + this.revocation_authority = IdentityID_1.IdentityID.fromAddress(iAddr); + } + setRecovery(iAddr) { + this.recovery_authority = IdentityID_1.IdentityID.fromAddress(iAddr); + } + setPrivateAddress(zAddr) { + this.private_addresses = [SaplingPaymentAddress_1.SaplingPaymentAddress.fromAddressString(zAddr)]; + } + upgradeVersion(version = Identity.VERSION_CURRENT) { + if (version.eq(this.version)) + return; + if (version.lt(this.version)) + throw new Error("Cannot downgrade version"); + if (version.lt(Identity.VERSION_PBAAS)) + throw new Error("Cannot upgrade to a version less than PBAAS"); + if (version.gt(Identity.VERSION_CURRENT)) + throw new Error("Cannot upgrade to a version greater than the current known version"); + if (this.version.lt(Identity.VERSION_VAULT)) { + this.system_id = this.parent ? this.parent : IdentityID_1.IdentityID.fromAddress(this.getIdentityAddress()); + this.version = Identity.VERSION_VAULT; + } + if (this.version.lt(Identity.VERSION_PBAAS)) { + this.version = Identity.VERSION_PBAAS; + } + } + static internalFromJson(json, ctor) { + const contentmap = new Map(); + if (json.contentmap) { + for (const key in json.contentmap) { + const reverseKey = Buffer.from(key, 'hex').reverse(); + const iAddrKey = (0, address_1.toBase58Check)(reverseKey, vdxf_1.I_ADDR_VERSION); + contentmap.set(iAddrKey, Buffer.from(json.contentmap[key], 'hex').reverse()); + } + } + return new ctor({ + version: json.version != null ? new bn_js_1.BN(json.version, 10) : undefined, + flags: json.flags != null ? new bn_js_1.BN(json.flags, 10) : undefined, + min_sigs: json.minimumsignatures ? new bn_js_1.BN(json.minimumsignatures, 10) : undefined, + primary_addresses: json.primaryaddresses ? json.primaryaddresses.map(x => KeyID_1.KeyID.fromAddress(x)) : undefined, + parent: json.parent ? IdentityID_1.IdentityID.fromAddress(json.parent) : undefined, + system_id: json.systemid ? IdentityID_1.IdentityID.fromAddress(json.systemid) : undefined, + name: json.name, + content_map: json.contentmap ? contentmap : undefined, + content_multimap: json.contentmultimap ? ContentMultiMap_1.ContentMultiMap.fromJson(json.contentmultimap) : undefined, + revocation_authority: json.revocationauthority ? IdentityID_1.IdentityID.fromAddress(json.revocationauthority) : undefined, + recovery_authority: json.recoveryauthority ? IdentityID_1.IdentityID.fromAddress(json.recoveryauthority) : undefined, + private_addresses: json.privateaddress == null ? [] : [SaplingPaymentAddress_1.SaplingPaymentAddress.fromAddressString(json.privateaddress)], + unlock_after: json.timelock != null ? new bn_js_1.BN(json.timelock, 10) : undefined + }); + } + static fromJson(json) { + return Identity.internalFromJson(json, Identity); + } +} +exports.Identity = Identity; +Identity.VERSION_INVALID = new bn_js_1.BN(0); +Identity.VERSION_VERUSID = new bn_js_1.BN(1); +Identity.VERSION_VAULT = new bn_js_1.BN(2); +Identity.VERSION_PBAAS = new bn_js_1.BN(3); +Identity.VERSION_CURRENT = Identity.VERSION_PBAAS; +Identity.VERSION_FIRSTVALID = new bn_js_1.BN(1); +Identity.VERSION_LASTVALID = new bn_js_1.BN(3); diff --git a/dist/pbaas/IdentityID.d.ts b/dist/pbaas/IdentityID.d.ts new file mode 100644 index 00000000..4217f987 --- /dev/null +++ b/dist/pbaas/IdentityID.d.ts @@ -0,0 +1,7 @@ +import { SerializableEntity } from '../utils/types/SerializableEntity'; +import { Hash160SerEnt } from '../vdxf/classes/Hash160'; +export declare class IdentityID extends Hash160SerEnt implements SerializableEntity { + constructor(hash?: Buffer); + fromBuffer(buffer: Buffer, offset?: number): number; + static fromAddress(address: string, varlength?: boolean): Hash160SerEnt; +} diff --git a/dist/pbaas/IdentityID.js b/dist/pbaas/IdentityID.js new file mode 100644 index 00000000..c1df61e4 --- /dev/null +++ b/dist/pbaas/IdentityID.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IdentityID = void 0; +const vdxf_1 = require("../constants/vdxf"); +const Hash160_1 = require("../vdxf/classes/Hash160"); +class IdentityID extends Hash160_1.Hash160SerEnt { + constructor(hash = Buffer.alloc(0)) { + super(hash, vdxf_1.I_ADDR_VERSION, false); + } + fromBuffer(buffer, offset = 0) { + const ret = super.fromBuffer(buffer, offset, false); + this.version = vdxf_1.I_ADDR_VERSION; + return ret; + } + static fromAddress(address, varlength) { + return new IdentityID(Hash160_1.Hash160SerEnt.fromAddress(address, false).hash); + } +} +exports.IdentityID = IdentityID; diff --git a/dist/pbaas/IdentityMultimapRef.d.ts b/dist/pbaas/IdentityMultimapRef.d.ts new file mode 100644 index 00000000..9b806895 --- /dev/null +++ b/dist/pbaas/IdentityMultimapRef.d.ts @@ -0,0 +1,38 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +export interface IdentityMultimapRefJson { + version: number; + flags: number; + vdxfkey: string; + identityid?: string; + startheight: number; + endheight: number; + datahash?: string; + systemid?: string; +} +export declare class IdentityMultimapRef implements SerializableEntity { + version: BigNumber; + flags: BigNumber; + id_ID: string; + key: string; + height_start: BigNumber; + height_end: BigNumber; + data_hash: Buffer; + system_id: string; + static FLAG_NO_DELETION: import("bn.js"); + static FLAG_HAS_DATAHASH: import("bn.js"); + static FLAG_HAS_SYSTEM: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static CURRENT_VERSION: import("bn.js"); + constructor(data?: any); + setFlags(): void; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + isValid(): boolean; + hasDataHash(): boolean; + hasSystemID(): boolean; + toJson(): IdentityMultimapRefJson; + static fromJson(data: IdentityMultimapRefJson): IdentityMultimapRef; +} diff --git a/dist/pbaas/IdentityMultimapRef.js b/dist/pbaas/IdentityMultimapRef.js new file mode 100644 index 00000000..ac6dd1eb --- /dev/null +++ b/dist/pbaas/IdentityMultimapRef.js @@ -0,0 +1,129 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IdentityMultimapRef = void 0; +const varint_1 = require("../utils/varint"); +const address_1 = require("../utils/address"); +const bufferutils_1 = require("../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const vdxf_1 = require("../constants/vdxf"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class IdentityMultimapRef { + constructor(data) { + if (data) { + this.version = data.version || IdentityMultimapRef.CURRENT_VERSION; + this.flags = data.flags || new bn_js_1.BN(0); + this.id_ID = data.id_ID || ""; + this.key = data.key || ""; + this.height_start = data.height_start || new bn_js_1.BN(0); + this.height_end = data.height_end || new bn_js_1.BN(0); + this.data_hash = data.data_hash || Buffer.alloc(0); + this.system_id = data.system_id || ""; + } + } + setFlags() { + this.flags = this.flags.and(IdentityMultimapRef.FLAG_NO_DELETION); + if (this.data_hash && this.data_hash.length > 0) { + this.flags = this.flags.or(IdentityMultimapRef.FLAG_HAS_DATAHASH); + } + if (this.system_id && this.system_id.length > 0) { + this.flags = this.flags.or(IdentityMultimapRef.FLAG_HAS_SYSTEM); + } + } + getByteLength() { + let byteLength = 0; + this.setFlags(); + byteLength += varint_1.default.encodingLength(this.version); + byteLength += varint_1.default.encodingLength(this.flags); + byteLength += vdxf_1.HASH160_BYTE_LENGTH; // id_ID + byteLength += vdxf_1.HASH160_BYTE_LENGTH; // vdxfkey + byteLength += varint_1.default.encodingLength(this.height_start); // height_start uint32 + byteLength += varint_1.default.encodingLength(this.height_end); // height_end uint32 + if (this.flags.and(IdentityMultimapRef.FLAG_HAS_DATAHASH).gt(new bn_js_1.BN(0))) { + byteLength += vdxf_1.HASH256_BYTE_LENGTH; + } + if (this.flags.and(IdentityMultimapRef.FLAG_HAS_SYSTEM).gt(new bn_js_1.BN(0))) { + byteLength += vdxf_1.HASH160_BYTE_LENGTH; + } + return byteLength; + } + toBuffer() { + const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); + bufferWriter.writeVarInt(this.version); + bufferWriter.writeVarInt(this.flags); + bufferWriter.writeSlice((0, address_1.fromBase58Check)(this.id_ID).hash); + bufferWriter.writeSlice((0, address_1.fromBase58Check)(this.key).hash); + bufferWriter.writeVarInt(this.height_start); + bufferWriter.writeVarInt(this.height_end); + if (this.flags.and(IdentityMultimapRef.FLAG_HAS_DATAHASH).gt(new bn_js_1.BN(0))) { + bufferWriter.writeSlice(this.data_hash); + } + if (this.flags.and(IdentityMultimapRef.FLAG_HAS_SYSTEM).gt(new bn_js_1.BN(0))) { + bufferWriter.writeSlice((0, address_1.fromBase58Check)(this.system_id).hash); + } + return bufferWriter.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.version = reader.readVarInt(); + this.flags = reader.readVarInt(); + this.id_ID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + this.key = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + this.height_start = reader.readVarInt(); + this.height_end = reader.readVarInt(); + if (this.flags.and(IdentityMultimapRef.FLAG_HAS_DATAHASH).gt(new bn_js_1.BN(0))) { + this.data_hash = reader.readSlice(32); + } + if (this.flags.and(IdentityMultimapRef.FLAG_HAS_SYSTEM).gt(new bn_js_1.BN(0))) { + this.system_id = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + } + return reader.offset; + } + isValid() { + return this.version.gte(IdentityMultimapRef.FIRST_VERSION) && + this.version.lte(IdentityMultimapRef.LAST_VERSION) && + this.flags.and(IdentityMultimapRef.FLAG_HAS_DATAHASH.add(IdentityMultimapRef.FLAG_HAS_SYSTEM)).eq(IdentityMultimapRef.FLAG_HAS_DATAHASH.add(IdentityMultimapRef.FLAG_HAS_SYSTEM)) && + !(!this.id_ID || this.id_ID.length === 0) && !(!this.key || this.key.length === 0); + } + hasDataHash() { + return this.flags.and(IdentityMultimapRef.FLAG_HAS_DATAHASH).gt(new bn_js_1.BN(0)); + } + hasSystemID() { + return this.flags.and(IdentityMultimapRef.FLAG_HAS_SYSTEM).gt(new bn_js_1.BN(0)); + } + toJson() { + let retval = { + version: this.version.toNumber(), + flags: this.flags.toNumber(), + vdxfkey: this.key, + startheight: this.height_start.toNumber(), + endheight: this.height_end.toNumber(), + identityid: this.id_ID + }; + if (this.hasDataHash()) { + retval.datahash = Buffer.from(this.data_hash).reverse().toString('hex'); + } + if (this.hasSystemID()) { + retval.systemid = this.system_id; + } + return retval; + } + static fromJson(data) { + return new IdentityMultimapRef({ + version: new bn_js_1.BN(data.version), + flags: new bn_js_1.BN(data.flags), + key: data.vdxfkey, + id_ID: data.identityid, + height_start: new bn_js_1.BN(data.startheight), + height_end: new bn_js_1.BN(data.endheight), + data_hash: Buffer.from(data.datahash, 'hex').reverse(), + system_id: data.systemid + }); + } +} +exports.IdentityMultimapRef = IdentityMultimapRef; +IdentityMultimapRef.FLAG_NO_DELETION = new bn_js_1.BN(1); +IdentityMultimapRef.FLAG_HAS_DATAHASH = new bn_js_1.BN(2); +IdentityMultimapRef.FLAG_HAS_SYSTEM = new bn_js_1.BN(4); +IdentityMultimapRef.FIRST_VERSION = new bn_js_1.BN(1); +IdentityMultimapRef.LAST_VERSION = new bn_js_1.BN(1); +IdentityMultimapRef.CURRENT_VERSION = new bn_js_1.BN(1); diff --git a/dist/pbaas/KeyID.d.ts b/dist/pbaas/KeyID.d.ts new file mode 100644 index 00000000..1ed14942 --- /dev/null +++ b/dist/pbaas/KeyID.d.ts @@ -0,0 +1,7 @@ +import { SerializableEntity } from '../utils/types/SerializableEntity'; +import { Hash160SerEnt } from '../vdxf/classes/Hash160'; +export declare class KeyID extends Hash160SerEnt implements SerializableEntity { + constructor(hash?: Buffer); + fromBuffer(buffer: Buffer, offset?: number): number; + static fromAddress(address: string): Hash160SerEnt; +} diff --git a/dist/pbaas/KeyID.js b/dist/pbaas/KeyID.js new file mode 100644 index 00000000..fdded3db --- /dev/null +++ b/dist/pbaas/KeyID.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.KeyID = void 0; +const vdxf_1 = require("../constants/vdxf"); +const Hash160_1 = require("../vdxf/classes/Hash160"); +class KeyID extends Hash160_1.Hash160SerEnt { + constructor(hash = Buffer.alloc(0)) { + super(hash, vdxf_1.R_ADDR_VERSION, false); + } + fromBuffer(buffer, offset = 0) { + const ret = super.fromBuffer(buffer, offset, false); + this.version = vdxf_1.R_ADDR_VERSION; + return ret; + } + static fromAddress(address) { + return new KeyID(Hash160_1.Hash160SerEnt.fromAddress(address, false).hash); + } +} +exports.KeyID = KeyID; diff --git a/dist/pbaas/MMR.d.ts b/dist/pbaas/MMR.d.ts new file mode 100644 index 00000000..a2be229b --- /dev/null +++ b/dist/pbaas/MMR.d.ts @@ -0,0 +1,70 @@ +export declare class MMRLayer { + private vSize; + private nodes; + constructor(); + size(): number; + getIndex(idx: number): NODE_TYPE; + push_back(node: NODE_TYPE): void; + clear(): void; +} +export declare class MMRNode { + hash: Buffer; + constructor(Hash?: Buffer); + digest(input: any): any; + hashObj(obj: Buffer, onbjR?: Buffer): Buffer; + createParentNode(nRight: MMRNode): MMRNode; + getProofHash(opposite: MMRNode): Array; + getLeafHash(): Array; + getExtraHashCount(): number; +} +export declare class MerkleMountainRange { + layer0: MMRLayer; + vSize: number; + upperNodes: Array>; + _leafLength: number; + constructor(); + getbyteLength(): number; + toBuffer(): Buffer; + fromBuffer(bufferIn: Buffer): MerkleMountainRange; + add(leaf: MMRNode): number; + size(): number; + height(): number; + getNode(Height: any, Index: any): MMRNode; +} +export declare class MMRBranch { + branchType?: number; + nIndex?: number; + nSize?: number; + branch?: Array; + constructor(branchType?: number, nIndex?: number, nSize?: number, branch?: Array); + dataByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + digest(input: any): any; + safeCheck(hash: Buffer): Buffer; +} +export declare class MMRProof { + proofSequence: Array; + setProof(proof: MMRBranch): void; + dataByteLength(): number; + toBuffer(): Buffer; + fromDataBuffer(buffer: Buffer, offset?: number): number; +} +export declare class MerkleMountainView { + mmr: MerkleMountainRange; + sizes: Array; + peaks: Array; + peakMerkle: Array>; + constructor(mountainRange: MerkleMountainRange, viewSize?: number); + size(): number; + calcPeaks(force?: boolean): void; + resize(newSize: number): number; + maxsize(): number; + getPeaks(): Array; + getRoot(): Buffer; + getRootNode(): MMRNode; + getHash(index: number): Buffer; + getBranchType(): number; + getProof(retProof: MMRProof, pos: number): boolean; + getProofBits(pos: number, mmvSize: number): void; +} diff --git a/dist/pbaas/MMR.js b/dist/pbaas/MMR.js new file mode 100644 index 00000000..b5d12cee --- /dev/null +++ b/dist/pbaas/MMR.js @@ -0,0 +1,460 @@ +"use strict"; +// Licence MIT +// Adapted to Verus Blake2b MMR. +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MerkleMountainView = exports.MMRProof = exports.MMRBranch = exports.MerkleMountainRange = exports.MMRNode = exports.MMRLayer = void 0; +var blake2b = require('blake2b'); +const bn_js_1 = require("bn.js"); +const varuint_1 = require("../utils/varuint"); +const bufferutils_1 = require("../utils/bufferutils"); +const mmr_1 = require("../utils/mmr"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const BRANCH_MMRBLAKE_NODE = 2; +class MMRLayer { + constructor() { this.vSize = 0; } + size() { + return this.vSize; + } + getIndex(idx) { + if (idx < this.vSize) { + return this.nodes[idx]; + } + else { + throw new Error("CChunkedLayer [] index out of range"); + } + } + push_back(node) { + this.vSize++; + if (!this.nodes) { + this.nodes = new Array(); + } + this.nodes.push(node); + } + clear() { + this.nodes = null; + this.vSize = 0; + } +} +exports.MMRLayer = MMRLayer; +; +class MMRNode { + constructor(Hash) { + if (Hash) { + this.hash = Hash; + } + } + digest(input) { + var out = Buffer.allocUnsafe(32); + return blake2b(out.length, null, null, Buffer.from("VerusDefaultHash")).update(input).digest(out); + } + hashObj(obj, onbjR) { + if (!onbjR) + return this.digest(obj); + else + return this.digest(Buffer.concat([obj, onbjR])); + } + // add a right to this left and create a parent node + createParentNode(nRight) { + return new MMRNode(this.digest(Buffer.concat([this.hash, nRight.hash]))); + } + getProofHash(opposite) { + return [this.hash]; + } + // leaf nodes that track additional data, such as block power, may need a hash added to the path + // at the very beginning + getLeafHash() { return []; } + getExtraHashCount() { + // how many extra proof hashes per layer are added with this node + return 0; + } +} +exports.MMRNode = MMRNode; +; +//template , typename LAYER0_TYPE=LAYER_TYPE> +class MerkleMountainRange { + constructor() { + this.layer0 = new MMRLayer(); + this.vSize = 0; + this.upperNodes = new Array(); + this._leafLength = 0; + } + getbyteLength() { + return 1; + } + toBuffer() { + return Buffer.from([]); + } + fromBuffer(bufferIn) { + return new MerkleMountainRange(); + } + add(leaf) { + this.layer0.push_back(leaf); + let height = 0; + let layerSize; + for (layerSize = this.layer0.size(); height <= this.upperNodes.length && layerSize > 1; height++) { + let newSizeAbove = layerSize >> 1; + // expand vector of vectors if we are adding a new layer + if (height == this.upperNodes.length) { + this.upperNodes.push(new MMRLayer()); + } + let curSizeAbove = this.upperNodes[height].size(); + // if we need to add an element to the vector above us, do it + if (!(layerSize & 1) && newSizeAbove > curSizeAbove) { + let idx = layerSize - 2; + if (height > 0) { + this.upperNodes[height].push_back(this.upperNodes[height - 1].getIndex(idx).createParentNode(this.upperNodes[height - 1].getIndex(idx + 1))); + } + else { + this.upperNodes[height].push_back(this.layer0.getIndex(idx).createParentNode(this.layer0.getIndex(idx + 1))); + } + } + layerSize = newSizeAbove; + } + // return new index + return this.layer0.size() - 1; + } + size() { + return this.layer0.size(); + } + height() { + return this.layer0.size() > 0 ? this.upperNodes.length + 1 : 0; + } + getNode(Height, Index) { + let layers = this.height(); + if (Height < layers) { + if (Height) { + if (Index < this.upperNodes[Height - 1].size()) { + return this.upperNodes[Height - 1].getIndex(Index); + } + } + else { + if (Index < this.layer0.size()) { + return this.layer0.getIndex(Index); + } + } + } + return null; + } +} +exports.MerkleMountainRange = MerkleMountainRange; +class MMRBranch { + constructor(branchType = BRANCH_MMRBLAKE_NODE, nIndex = 0, nSize = 0, branch = new Array()) { + this.branchType = branchType; + this.nIndex = nIndex; + this.nSize = nSize; + this.branch = branch; + } + dataByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.branchType); + length += varuint_1.default.encodingLength(this.nIndex); + length += varuint_1.default.encodingLength(this.nSize); + length += varuint_1.default.encodingLength(this.branch.length); + for (let i = 0; i < this.branch.length; i++) { + length += this.branch[i].length; + } + return length; + } + toBuffer() { + const bufferWriter = new BufferWriter(Buffer.alloc(this.dataByteLength())); + bufferWriter.writeCompactSize(this.branchType); + bufferWriter.writeCompactSize(this.nIndex); + bufferWriter.writeCompactSize(this.nSize); + bufferWriter.writeCompactSize(this.branch.length); + for (let i = 0; i < this.branch.length; i++) { + bufferWriter.writeSlice(this.branch[i]); + } + return bufferWriter.buffer; + } + fromBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + this.branchType = reader.readCompactSize(); + this.nIndex = reader.readCompactSize(); + this.nSize = reader.readCompactSize(); + let branchLength = reader.readCompactSize(); + this.branch = new Array(); + for (let i = 0; i < branchLength; i++) { + this.branch.push(reader.readSlice(32)); + } + return reader.offset; + } + digest(input) { + var out = Buffer.allocUnsafe(32); + return blake2b(out.length, null, null, Buffer.from("VerusDefaultHash")).update(input).digest(out); + } + safeCheck(hash) { + let index = (0, mmr_1.GetMMRProofIndex)(this.nIndex, this.nSize, 0); + let joined = Buffer.allocUnsafe(64); + let hashInProgress = hash; + for (let i = 0; i < this.branch.length; i++) { + if (index.and(new bn_js_1.BN(1)).gt(new bn_js_1.BN(0))) { + if (this.branch[i] === hashInProgress) + throw new Error("Value can be equal to node but never on the right"); + joined = Buffer.concat([this.branch[i], hashInProgress]); + } + else { + joined = Buffer.concat([hashInProgress, this.branch[i]]); + } + hashInProgress = this.digest(joined); + index = index.shrn(1); + } + return hashInProgress; + } +} +exports.MMRBranch = MMRBranch; +class MMRProof { + setProof(proof) { + if (!this.proofSequence) { + this.proofSequence = new Array(); + } + this.proofSequence.push(proof); + } + dataByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.proofSequence.length); + for (let i = 0; i < this.proofSequence.length; i++) { + length += this.proofSequence[i].dataByteLength(); + } + return length; + } + toBuffer() { + const bufferWriter = new BufferWriter(Buffer.alloc(this.dataByteLength())); + bufferWriter.writeCompactSize(this.proofSequence.length); + for (let i = 0; i < this.proofSequence.length; i++) { + bufferWriter.writeSlice(this.proofSequence[i].toBuffer()); + } + return bufferWriter.buffer; + } + fromDataBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + let proofSequenceLength = reader.readCompactSize(); + this.proofSequence = new Array(); + for (let i = 0; i < proofSequenceLength; i++) { + let proof = new MMRBranch(); + reader.offset = proof.fromBuffer(reader.buffer, reader.offset); + this.setProof(proof); + } + return reader.offset; + } +} +exports.MMRProof = MMRProof; +//template , typename LAYER0_TYPE=LAYER_TYPE, typename HASHALGOWRITER=CBLAKE2bWriter> +class MerkleMountainView { + constructor(mountainRange, viewSize = 0) { + this.mmr = mountainRange; + let maxSize = this.mmr.size(); + if (viewSize > maxSize || viewSize == 0) { + viewSize = maxSize; + } + this.sizes = new Array(); + this.sizes.push(viewSize); + for (viewSize >>= 1; viewSize; viewSize >>= 1) { + this.sizes.push(viewSize); + } + this.peakMerkle = new Array(); + this.peaks = new Array(); + } + // how many elements are stored in this view + size() { + // zero if empty or the size of the zeroeth layer + return this.sizes.length == 0 ? 0 : this.sizes[0]; + } + calcPeaks(force = false) { + // if we don't yet have calculated peaks, calculate them + if (force || (this.peaks.length == 0 && this.size() != 0)) { + // reset the peak merkle tree, in case this is forced + this.peaks = new Array; + this.peakMerkle = new Array; + for (let ht = 0; ht < this.sizes.length; ht++) { + // if we're at the top or the layer above us is smaller than 1/2 the size of this layer, rounded up, we are a peak + if (ht == (this.sizes.length - 1) || this.sizes[ht + 1] < ((this.sizes[ht] + 1) >> 1)) { + this.peaks.splice(0, 0, this.mmr.getNode(ht, this.sizes[ht] - 1)); + } + } + } + } + resize(newSize) { + if (newSize != this.size()) { + this.sizes = new Array; + this.peaks = new Array; + this.peakMerkle = new Array; + let maxSize = this.mmr.size(); + if (newSize > maxSize) { + newSize = maxSize; + } + this.sizes.push(newSize); + newSize >>= 1; + while (newSize) { + this.sizes.push(newSize); + newSize >>= 1; + } + } + return this.size(); + } + maxsize() { + return this.mmr.size() - 1; + } + getPeaks() { + this.calcPeaks(); + return this.peaks; + } + getRoot() { + let rootHash = Buffer.allocUnsafe(32); + if (this.size() > 0 && this.peakMerkle.length == 0) { + // get peaks and hash to a root + this.calcPeaks(); + let layerNum = 0, layerSize = this.peaks.length; + // with an odd number of elements below, the edge passes through + for (let passThrough = !!(layerSize & 1); layerNum == 0 || layerSize > 1; passThrough = !!(layerSize & 1), layerNum++) { + this.peakMerkle.push(Array()); + let i; + let layerIndex = layerNum ? layerNum - 1 : 0; // layerNum is base 1 + for (i = 0; i < (layerSize >> 1); i++) { + if (layerNum > 0) { + this.peakMerkle[this.peakMerkle.length - 1].push(this.peakMerkle[layerIndex][i << 1].createParentNode(this.peakMerkle[layerIndex][(i << 1) + 1])); + } + else { + this.peakMerkle[this.peakMerkle.length - 1].push(this.peaks[i << 1].createParentNode(this.peaks[(i << 1) + 1])); + } + } + if (passThrough) { + if (layerNum > 0) { + // pass the end of the prior layer through + this.peakMerkle[this.peakMerkle.length - 1].push(this.peakMerkle[layerIndex][this.peakMerkle[layerIndex].length - 1]); + } + else { + this.peakMerkle[this.peakMerkle.length - 1].push(this.peaks[this.peaks.length - 1]); + } + } + // each entry in the next layer should be either combined two of the prior layer, or a duplicate of the prior layer's end + layerSize = this.peakMerkle[this.peakMerkle.length - 1].length; + } + rootHash = this.peakMerkle[this.peakMerkle.length - 1][0].hash; + } + else if (this.peakMerkle.length > 0) { + rootHash = this.peakMerkle[this.peakMerkle.length - 1][0].hash; + } + return rootHash; + } + getRootNode() { + // ensure merkle tree is calculated + let root = this.getRoot(); + if (root.length > 0) { + return this.peakMerkle[this.peakMerkle.length - 1][0]; + } + else { + return null; + } + } + // return hash of the element at "index" + getHash(index) { + if (index < this.size()) { + return this.mmr.layer0[index].hash; + } + else { + return Buffer.allocUnsafe(32); + } + } + getBranchType() { + return BRANCH_MMRBLAKE_NODE; + } + // return a proof of the element at "pos" + getProof(retProof, pos) { + // find a path from the indicated position to the root in the current view + let retBranch = new MMRBranch(); + if (pos < this.size()) { + // just make sure the peakMerkle tree is calculated + this.getRoot(); + // if we have leaf information, add it + let toAdd = this.mmr.layer0.getIndex(pos).getLeafHash(); + if (toAdd.length > 0) { + retBranch.branch.splice(retBranch.branch.length, 0, toAdd[0]); + } + let p = pos; + for (let l = 0; l < this.sizes.length; l++) { + if ((p & 1) === 1) { + let proofHashes = this.mmr.getNode(l, p - 1).hash; + retBranch.branch = retBranch.branch.concat(proofHashes); + p >>= 1; + } + else { + // make sure there is one after us to hash with or we are a peak and should be hashed with the rest of the peaks + if (this.sizes[l] > (p + 1)) { + let proofHashes = this.mmr.getNode(l, p + 1).hash; + retBranch.branch = retBranch.branch.concat(proofHashes); + p >>= 1; + } + else { + /* for (auto &oneNode : peaks) + { + printf("peaknode: "); + for (auto oneHash : oneNode.getProofHash(oneNode)) + { + printf("%s:", oneHash.GetHex().c_str()); + } + printf("\n"); + } */ + // we are at a peak, the alternate peak to us, or the next thing we should be hashed with, if there is one, is next on our path + let peakHash = this.mmr.getNode(l, p).hash; + // linear search to find out which peak we are in the base of the peakMerkle + for (p = 0; p < this.peaks.length; p++) { + if (this.peaks[p].hash == peakHash) { + break; + } + } + // p is the position in the merkle tree of peaks + if (p > this.peaks.length) + throw new Error("peak not found"); + // move up to the top, which is always a peak of size 1 + let layerNum, layerSize; + for (layerNum = 0, layerSize = this.peaks.length; layerNum == 0 || layerSize > 1; layerSize = this.peakMerkle[layerNum++].length) { + let layerIndex = layerNum ? layerNum - 1 : 0; // layerNum is base 1 + // we are an odd member on the end (even index) and will not hash with the next layer above, we will propagate to its end + if ((p < layerSize - 1) || (p & 1)) { + if (p & 1) { + // hash with the one before us + if (layerNum > 0) { + let proofHashes = this.peakMerkle[layerIndex][p - 1].hash; + retBranch.branch = retBranch.branch.concat(proofHashes); + } + else { + let proofHashes = this.peaks[p - 1].hash; + retBranch.branch = retBranch.branch.concat(proofHashes); + } + } + else { + // hash with the one in front of us + if (layerNum > 0) { + let proofHashes = this.peakMerkle[layerIndex][p + 1].hash; + retBranch.branch = retBranch.branch.concat(proofHashes); + } + else { + let proofHashes = this.peaks[p + 1].hash; + retBranch.branch = retBranch.branch.concat(proofHashes); + } + } + } + p >>= 1; + } + // finished + break; + } + } + } + retBranch.branchType = this.getBranchType(); + retBranch.nSize = this.size(); + retBranch.nIndex = pos; + retProof.setProof(retBranch); + return true; + } + return false; + } + // return a vector of the bits, either 1 or 0 in each byte, to represent both the size + // of the proof by the size of the vector, and the expected bit in each position for the given + // position in a Merkle Mountain View of the specified size + getProofBits(pos, mmvSize) { + throw new Error("getProofBits not implemented for MMR"); + } + ; +} +exports.MerkleMountainView = MerkleMountainView; diff --git a/dist/pbaas/MMRDescriptor.d.ts b/dist/pbaas/MMRDescriptor.d.ts new file mode 100644 index 00000000..7f23b739 --- /dev/null +++ b/dist/pbaas/MMRDescriptor.d.ts @@ -0,0 +1,39 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { DataDescriptor, DataDescriptorJson } from './DataDescriptor'; +import { EHashTypes } from './DataDescriptor'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +export interface MMRDescriptorJson { + version: number; + objecthashtype?: number; + mmrhashtype?: number; + mmrroot?: DataDescriptorJson; + mmrhashes?: DataDescriptorJson; + datadescriptors?: DataDescriptorJson[]; +} +export declare class MMRDescriptor implements SerializableEntity { + static VERSION_INVALID: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static DEFAULT_VERSION: import("bn.js"); + version: BigNumber; + objectHashType: EHashTypes; + mmrHashType: EHashTypes; + mmrRoot: DataDescriptor; + mmrHashes: DataDescriptor; + dataDescriptors: DataDescriptor[]; + constructor(data?: { + version?: BigNumber; + objectHashType?: EHashTypes; + mmrHashType?: EHashTypes; + mmrRoot?: DataDescriptor; + mmrHashes?: DataDescriptor; + dataDescriptors?: DataDescriptor[]; + }); + static fromJson(data: MMRDescriptorJson): MMRDescriptor; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + hasData(): boolean; + isValid(): boolean; + toJson(): MMRDescriptorJson; +} diff --git a/dist/pbaas/MMRDescriptor.js b/dist/pbaas/MMRDescriptor.js new file mode 100644 index 00000000..a0f01886 --- /dev/null +++ b/dist/pbaas/MMRDescriptor.js @@ -0,0 +1,120 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MMRDescriptor = void 0; +const bn_js_1 = require("bn.js"); +const varint_1 = require("../utils/varint"); +const varuint_1 = require("../utils/varuint"); +const bufferutils_1 = require("../utils/bufferutils"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const DataDescriptor_1 = require("./DataDescriptor"); +class MMRDescriptor { + constructor(data) { + if (data) { + if (data.version) + this.version = data.version; + if (data.objectHashType) + this.objectHashType = data.objectHashType; + if (data.mmrHashType) + this.mmrHashType = data.mmrHashType; + if (data.mmrRoot) + this.mmrRoot = data.mmrRoot; + if (data.mmrHashes) + this.mmrHashes = data.mmrHashes; + if (data.dataDescriptors) + this.dataDescriptors = data.dataDescriptors; + } + else { + this.version = MMRDescriptor.DEFAULT_VERSION; + } + } + static fromJson(data) { + const newMMRDescriptor = new MMRDescriptor(); + if (data) { + if (data.version) + newMMRDescriptor.version = new bn_js_1.BN(data.version); + if (data.objecthashtype) + newMMRDescriptor.objectHashType = data.objecthashtype; + if (data.mmrhashtype) + newMMRDescriptor.mmrHashType = data.mmrhashtype; + if (data.mmrroot) + newMMRDescriptor.mmrRoot = DataDescriptor_1.DataDescriptor.fromJson(data.mmrroot); + if (data.mmrhashes) + newMMRDescriptor.mmrHashes = DataDescriptor_1.DataDescriptor.fromJson(data.mmrhashes); + if (data.datadescriptors) { + newMMRDescriptor.dataDescriptors = []; + data.datadescriptors.forEach((data) => { + newMMRDescriptor.dataDescriptors.push(DataDescriptor_1.DataDescriptor.fromJson(data)); + }); + } + ; + } + return newMMRDescriptor; + } + getByteLength() { + let length = 0; + length += varint_1.default.encodingLength(this.version); + length += varint_1.default.encodingLength(new bn_js_1.BN(this.objectHashType)); + length += varint_1.default.encodingLength(new bn_js_1.BN(this.mmrHashType)); + length += this.mmrRoot.getByteLength(); + length += this.mmrHashes.getByteLength(); + length += varuint_1.default.encodingLength(this.dataDescriptors.length); + this.dataDescriptors.forEach((dataDescriptor) => { + length += dataDescriptor.getByteLength(); + }); + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeVarInt(this.version); + writer.writeVarInt(new bn_js_1.BN(this.objectHashType)); + writer.writeVarInt(new bn_js_1.BN(this.mmrHashType)); + writer.writeSlice(this.mmrRoot.toBuffer()); + writer.writeSlice(this.mmrHashes.toBuffer()); + writer.writeCompactSize(this.dataDescriptors.length); + this.dataDescriptors.forEach((dataDescriptor) => { + writer.writeSlice(dataDescriptor.toBuffer()); + }); + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new BufferReader(buffer, offset); + this.version = reader.readVarInt(); + this.objectHashType = reader.readVarInt().toNumber(); + this.mmrHashType = reader.readVarInt().toNumber(); + this.mmrRoot = new DataDescriptor_1.DataDescriptor(); + reader.offset = this.mmrRoot.fromBuffer(reader.buffer, reader.offset); + this.mmrHashes = new DataDescriptor_1.DataDescriptor(); + reader.offset = this.mmrHashes.fromBuffer(reader.buffer, reader.offset); + const dataDescriptorsLength = reader.readCompactSize(); + this.dataDescriptors = []; + for (let i = 0; i < dataDescriptorsLength; i++) { + const dataDescriptor = new DataDescriptor_1.DataDescriptor(); + reader.offset = dataDescriptor.fromBuffer(reader.buffer, reader.offset); + this.dataDescriptors.push(dataDescriptor); + } + return reader.offset; + } + hasData() { + return !!(this.mmrHashes.objectdata && this.dataDescriptors); + } + isValid() { + return this.version >= MMRDescriptor.FIRST_VERSION && this.version <= MMRDescriptor.LAST_VERSION; + } + toJson() { + const retval = { + version: this.version.toNumber(), + objecthashtype: this.objectHashType.valueOf(), + mmrhashtype: this.mmrHashType, + mmrroot: this.mmrRoot.toJson(), + mmrhashes: this.mmrHashes.toJson(), + datadescriptors: this.dataDescriptors.map((dataDescriptor) => dataDescriptor.toJson()) + }; + return retval; + } +} +exports.MMRDescriptor = MMRDescriptor; +MMRDescriptor.VERSION_INVALID = new bn_js_1.BN(0); +MMRDescriptor.FIRST_VERSION = new bn_js_1.BN(1); +MMRDescriptor.LAST_VERSION = new bn_js_1.BN(1); +MMRDescriptor.DEFAULT_VERSION = new bn_js_1.BN(1); +; diff --git a/dist/pbaas/NoDestination.d.ts b/dist/pbaas/NoDestination.d.ts new file mode 100644 index 00000000..b3b25265 --- /dev/null +++ b/dist/pbaas/NoDestination.d.ts @@ -0,0 +1,6 @@ +import { SerializableEntity } from "../utils/types/SerializableEntity"; +import { Hash160SerEnt } from "../vdxf/classes/Hash160"; +export declare class NoDestination extends Hash160SerEnt implements SerializableEntity { + constructor(); + fromBuffer(buffer: Buffer, offset?: number): number; +} diff --git a/dist/pbaas/NoDestination.js b/dist/pbaas/NoDestination.js new file mode 100644 index 00000000..bce82b96 --- /dev/null +++ b/dist/pbaas/NoDestination.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.NoDestination = void 0; +const Hash160_1 = require("../vdxf/classes/Hash160"); +class NoDestination extends Hash160_1.Hash160SerEnt { + constructor() { + super(Buffer.alloc(0), 0, false); + } + fromBuffer(buffer, offset) { + return offset; + } +} +exports.NoDestination = NoDestination; diff --git a/dist/pbaas/OptCCParams.d.ts b/dist/pbaas/OptCCParams.d.ts new file mode 100644 index 00000000..4389dbad --- /dev/null +++ b/dist/pbaas/OptCCParams.d.ts @@ -0,0 +1,29 @@ +import { TxDestination } from './TxDestination'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +import { BigNumber } from '../utils/types/BigNumber'; +export type VData = Array; +export declare class OptCCParams implements SerializableEntity { + version: BigNumber; + eval_code: BigNumber; + m: BigNumber; + n: BigNumber; + destinations: Array; + vdata: VData; + constructor(data?: { + version?: BigNumber; + eval_code?: BigNumber; + m?: BigNumber; + n?: BigNumber; + destinations?: Array; + vdata?: VData; + }); + getParamObject(): null | Buffer; + isValid(): boolean; + static fromChunk(chunk: Buffer): OptCCParams; + toChunk(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + internalGetByteLength(asChunk: boolean): number; + getByteLength(): number; + private internalToBuffer; + toBuffer(): Buffer; +} diff --git a/dist/pbaas/OptCCParams.js b/dist/pbaas/OptCCParams.js new file mode 100644 index 00000000..87ce6636 --- /dev/null +++ b/dist/pbaas/OptCCParams.js @@ -0,0 +1,206 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OptCCParams = void 0; +const bscript = require("../utils/script"); +const evals_1 = require("../utils/evals"); +const varuint_1 = require("../utils/varuint"); +const TxDestination_1 = require("./TxDestination"); +const bn_js_1 = require("bn.js"); +const bufferutils_1 = require("../utils/bufferutils"); +class OptCCParams { + constructor(data) { + if (data === null || data === void 0 ? void 0 : data.version) + this.version = data.version; + if (data === null || data === void 0 ? void 0 : data.eval_code) + this.eval_code = data.eval_code; + if (data === null || data === void 0 ? void 0 : data.m) + this.m = data.m; + if (data === null || data === void 0 ? void 0 : data.n) + this.n = data.n; + if (data === null || data === void 0 ? void 0 : data.destinations) + this.destinations = data.destinations; + else + this.destinations = []; + if (data === null || data === void 0 ? void 0 : data.vdata) + this.vdata = data.vdata; + else + this.vdata = []; + } + getParamObject() { + switch (this.eval_code.toNumber()) { + case evals_1.EVALS.EVAL_NONE: + { + return null; + } + case evals_1.EVALS.EVAL_STAKEGUARD: + case evals_1.EVALS.EVAL_CURRENCY_DEFINITION: + case evals_1.EVALS.EVAL_NOTARY_EVIDENCE: + case evals_1.EVALS.EVAL_EARNEDNOTARIZATION: + case evals_1.EVALS.EVAL_ACCEPTEDNOTARIZATION: + case evals_1.EVALS.EVAL_FINALIZE_NOTARIZATION: + case evals_1.EVALS.EVAL_CURRENCYSTATE: + case evals_1.EVALS.EVAL_RESERVE_TRANSFER: + case evals_1.EVALS.EVAL_RESERVE_OUTPUT: + case evals_1.EVALS.EVAL_RESERVE_DEPOSIT: + case evals_1.EVALS.EVAL_CROSSCHAIN_EXPORT: + case evals_1.EVALS.EVAL_CROSSCHAIN_IMPORT: + case evals_1.EVALS.EVAL_IDENTITY_PRIMARY: + case evals_1.EVALS.EVAL_IDENTITY_COMMITMENT: + case evals_1.EVALS.EVAL_IDENTITY_RESERVATION: + case evals_1.EVALS.EVAL_FINALIZE_EXPORT: + case evals_1.EVALS.EVAL_FEE_POOL: + case evals_1.EVALS.EVAL_NOTARY_SIGNATURE: + { + if (this.vdata.length) { + return this.vdata[0]; + } + else { + return null; + } + } + default: + { + return null; + } + } + } + isValid() { + var validEval = false; + switch (this.eval_code.toNumber()) { + case evals_1.EVALS.EVAL_NONE: + { + validEval = true; + break; + } + case evals_1.EVALS.EVAL_STAKEGUARD: + case evals_1.EVALS.EVAL_CURRENCY_DEFINITION: + case evals_1.EVALS.EVAL_NOTARY_EVIDENCE: + case evals_1.EVALS.EVAL_EARNEDNOTARIZATION: + case evals_1.EVALS.EVAL_ACCEPTEDNOTARIZATION: + case evals_1.EVALS.EVAL_FINALIZE_NOTARIZATION: + case evals_1.EVALS.EVAL_CURRENCYSTATE: + case evals_1.EVALS.EVAL_RESERVE_TRANSFER: + case evals_1.EVALS.EVAL_RESERVE_OUTPUT: + case evals_1.EVALS.EVAL_RESERVE_DEPOSIT: + case evals_1.EVALS.EVAL_CROSSCHAIN_EXPORT: + case evals_1.EVALS.EVAL_CROSSCHAIN_IMPORT: + case evals_1.EVALS.EVAL_IDENTITY_PRIMARY: + case evals_1.EVALS.EVAL_IDENTITY_COMMITMENT: + case evals_1.EVALS.EVAL_IDENTITY_RESERVATION: + case evals_1.EVALS.EVAL_FINALIZE_EXPORT: + case evals_1.EVALS.EVAL_FEE_POOL: + case evals_1.EVALS.EVAL_NOTARY_SIGNATURE: + { + validEval = this.vdata && this.vdata.length > 0; + } + } + return (validEval && + this.version.gt(new bn_js_1.BN(0)) && + this.version.lt(new bn_js_1.BN(4)) && + ((this.version.lt(new bn_js_1.BN(3)) && this.eval_code.lt(new bn_js_1.BN(2))) || + (this.eval_code.lte(new bn_js_1.BN(26)) && this.m.lte(this.n)))); + } + static fromChunk(chunk) { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(varuint_1.default.encodingLength(chunk.length)), 0); + writer.writeCompactSize(chunk.length); + const params = new OptCCParams(); + params.fromBuffer(Buffer.concat([writer.buffer, chunk])); + return params; + } + toChunk() { + return this.internalToBuffer(true); + } + fromBuffer(buffer, offset = 0) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + const scriptInVector = reader.readVarSlice(); + const chunks = bscript.decompile(scriptInVector); + const firstChunk = chunks[0]; + if (!Buffer.isBuffer(firstChunk)) { + throw new Error('invalid first chunk date type'); + } + if (firstChunk.length !== 4) { + throw new Error('invalid optional parameters header'); + } + const chunkReader = new bufferutils_1.default.BufferReader(firstChunk, 0); + this.version = new bn_js_1.BN(chunkReader.readUInt8()); + this.eval_code = new bn_js_1.BN(chunkReader.readUInt8()); + this.m = new bn_js_1.BN(chunkReader.readUInt8()); + this.n = new bn_js_1.BN(chunkReader.readUInt8()); + // now, we should have n keys followed by data objects for later versions, otherwise all keys and one data object + if (this.version.lte(new bn_js_1.BN(0)) || + this.version.gt(new bn_js_1.BN(3)) || + this.eval_code.lt(new bn_js_1.BN(0)) || + this.eval_code.gt(new bn_js_1.BN(0x1a)) || // this is the last valid eval code as of version 3 + (this.version.lt(new bn_js_1.BN(3)) && this.n.lt(new bn_js_1.BN(1))) || + this.n.gt(new bn_js_1.BN(4)) || + (this.version.lt(new bn_js_1.BN(3)) && this.n.gte(new bn_js_1.BN(chunks.length))) || + this.n.gt(new bn_js_1.BN(chunks.length))) { + // invalid header values + throw new Error('invalid header values'); + } + // now, we have chunks left that are either destinations or data vectors + const limit = this.n.eq(new bn_js_1.BN(chunks.length)) ? this.n : this.n.add(new bn_js_1.BN(1)); + this.destinations = []; + let loop; + for (loop = 1; this.version && loop < limit.toNumber(); loop++) { + const currChunk = chunks[loop]; + if (Buffer.isBuffer(currChunk)) { + const oneDest = TxDestination_1.TxDestination.fromChunk(currChunk); + this.destinations.push(oneDest); + } + } + for (; this.version && loop < chunks.length; loop++) { + const currChunk = chunks[loop]; + if (Buffer.isBuffer(currChunk)) + this.vdata.push(currChunk); + } + return offset; + } + internalGetByteLength(asChunk) { + const chunks = [Buffer.alloc(4)]; + chunks[0][0] = this.version.toNumber(); + chunks[0][1] = this.eval_code.toNumber(); + chunks[0][2] = this.m.toNumber(); + chunks[0][3] = this.n.toNumber(); + this.destinations.forEach(x => { + chunks.push(x.toChunk()); + }); + this.vdata.forEach(x => { + chunks.push(x); + }); + const buf = bscript.compile(chunks); + return asChunk ? buf.length : (varuint_1.default.encodingLength(buf.length) + buf.length); + } + getByteLength() { + return this.internalGetByteLength(false); + } + internalToBuffer(asChunk) { + const chunks = [Buffer.alloc(4)]; + chunks[0][0] = this.version.toNumber(); + chunks[0][1] = this.eval_code.toNumber(); + chunks[0][2] = this.m.toNumber(); + chunks[0][3] = this.n.toNumber(); + this.destinations.forEach(x => { + chunks.push(x.toChunk()); + }); + this.vdata.forEach(x => { + chunks.push(x); + }); + const scriptStore = bscript.compile(chunks); + const buf = bscript.compile(chunks); + const len = asChunk ? buf.length : varuint_1.default.encodingLength(buf.length) + buf.length; + const buffer = Buffer.alloc(len); + const writer = new bufferutils_1.default.BufferWriter(buffer); + if (asChunk) { + writer.writeSlice(scriptStore); + } + else { + writer.writeVarSlice(scriptStore); + } + return writer.buffer; + } + toBuffer() { + return this.internalToBuffer(false); + } +} +exports.OptCCParams = OptCCParams; diff --git a/dist/pbaas/PBaaSEvidenceRef.d.ts b/dist/pbaas/PBaaSEvidenceRef.d.ts new file mode 100644 index 00000000..4ab2444d --- /dev/null +++ b/dist/pbaas/PBaaSEvidenceRef.d.ts @@ -0,0 +1,38 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +import { UTXORef } from './UTXORef'; +export interface PBaaSEvidenceRefJson { + version: number; + flags: number; + output: any; + objectnum: number; + subobject: number; + systemid: string; +} +export declare class PBaaSEvidenceRef implements SerializableEntity { + version: BigNumber; + flags: BigNumber; + output: UTXORef; + object_num: BigNumber; + sub_object: BigNumber; + system_id: string; + static FLAG_ISEVIDENCE: import("bn.js"); + static FLAG_HAS_SYSTEM: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + constructor(data?: { + version?: BigNumber; + flags?: BigNumber; + output?: UTXORef; + object_num?: BigNumber; + sub_object?: BigNumber; + system_id?: string; + }); + setFlags(): void; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + isValid(): boolean; + toJson(): PBaaSEvidenceRefJson; + static fromJson(json: PBaaSEvidenceRefJson): PBaaSEvidenceRef; +} diff --git a/dist/pbaas/PBaaSEvidenceRef.js b/dist/pbaas/PBaaSEvidenceRef.js new file mode 100644 index 00000000..08afd9e2 --- /dev/null +++ b/dist/pbaas/PBaaSEvidenceRef.js @@ -0,0 +1,97 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PBaaSEvidenceRef = void 0; +const varint_1 = require("../utils/varint"); +const address_1 = require("../utils/address"); +const bufferutils_1 = require("../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const vdxf_1 = require("../constants/vdxf"); +const UTXORef_1 = require("./UTXORef"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class PBaaSEvidenceRef { + constructor(data) { + if (data) { + this.version = data.version || new bn_js_1.BN(1, 10); + this.flags = data.flags || new bn_js_1.BN(0); + this.output = data.output || new UTXORef_1.UTXORef(); + this.object_num = data.object_num || new bn_js_1.BN(0); + this.sub_object = data.sub_object || new bn_js_1.BN(0); + this.system_id = data.system_id || ""; + } + } + setFlags() { + this.flags = this.flags.and(PBaaSEvidenceRef.FLAG_ISEVIDENCE); + if (this.system_id && this.system_id.length > 0) { + this.flags = this.flags.or(PBaaSEvidenceRef.FLAG_HAS_SYSTEM); + } + } + getByteLength() { + let byteLength = 0; + this.setFlags(); + byteLength += varint_1.default.encodingLength(this.version); + byteLength += varint_1.default.encodingLength(this.flags); + byteLength += this.output.getByteLength(); + byteLength += varint_1.default.encodingLength(this.object_num); + byteLength += varint_1.default.encodingLength(this.sub_object); + if (this.flags.and(PBaaSEvidenceRef.FLAG_HAS_SYSTEM).gt(new bn_js_1.BN(0))) { + byteLength += vdxf_1.HASH160_BYTE_LENGTH; + } + return byteLength; + } + toBuffer() { + const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); + bufferWriter.writeVarInt(this.version); + bufferWriter.writeVarInt(this.flags); + bufferWriter.writeSlice(this.output.toBuffer()); + bufferWriter.writeVarInt(this.object_num); + bufferWriter.writeVarInt(this.sub_object); + if (this.flags.and(PBaaSEvidenceRef.FLAG_HAS_SYSTEM).gt(new bn_js_1.BN(0))) { + bufferWriter.writeSlice((0, address_1.fromBase58Check)(this.system_id).hash); + } + return bufferWriter.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.version = reader.readVarInt(); + this.flags = reader.readVarInt(); + this.output = new UTXORef_1.UTXORef(); + reader.offset = this.output.fromBuffer(reader.buffer, reader.offset); + this.object_num = reader.readVarInt(); + this.sub_object = reader.readVarInt(); + if (this.flags.and(PBaaSEvidenceRef.FLAG_HAS_SYSTEM).gt(new bn_js_1.BN(0))) { + this.system_id = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + } + return reader.offset; + } + isValid() { + return this.output.isValid() && this.version.gte(PBaaSEvidenceRef.FIRST_VERSION) && + this.version.lte(PBaaSEvidenceRef.LAST_VERSION) && + (this.flags.and(PBaaSEvidenceRef.FLAG_ISEVIDENCE).gt(new bn_js_1.BN(0))); + } + toJson() { + let retval = { + version: this.version.toNumber(), + flags: this.flags.toNumber(), + output: this.output.toJson(), + objectnum: this.object_num.toNumber(), + subobject: this.sub_object.toNumber(), + systemid: this.system_id || "" + }; + return retval; + } + static fromJson(json) { + return new PBaaSEvidenceRef({ + version: new bn_js_1.BN(json.version), + flags: new bn_js_1.BN(json.flags), + output: UTXORef_1.UTXORef.fromJson(json.output), + object_num: new bn_js_1.BN(json.objectnum), + sub_object: new bn_js_1.BN(json.subobject), + system_id: json.systemid + }); + } +} +exports.PBaaSEvidenceRef = PBaaSEvidenceRef; +PBaaSEvidenceRef.FLAG_ISEVIDENCE = new bn_js_1.BN(1); +PBaaSEvidenceRef.FLAG_HAS_SYSTEM = new bn_js_1.BN(2); +PBaaSEvidenceRef.FIRST_VERSION = new bn_js_1.BN(1); +PBaaSEvidenceRef.LAST_VERSION = new bn_js_1.BN(1); diff --git a/dist/pbaas/PartialIdentity.d.ts b/dist/pbaas/PartialIdentity.d.ts new file mode 100644 index 00000000..ee73cdf9 --- /dev/null +++ b/dist/pbaas/PartialIdentity.d.ts @@ -0,0 +1,54 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +import { Identity, VerusCLIVerusIDJson, VerusIDInitData } from './Identity'; +export declare class PartialIdentity extends Identity implements SerializableEntity { + contains: BigNumber; + static PARTIAL_ID_CONTAINS_PARENT: import("bn.js"); + static PARTIAL_ID_CONTAINS_CONTENT_MULTIMAP: import("bn.js"); + static PARTIAL_ID_CONTAINS_PRIMARY_ADDRS: import("bn.js"); + static PARTIAL_ID_CONTAINS_REVOCATION: import("bn.js"); + static PARTIAL_ID_CONTAINS_RECOVERY: import("bn.js"); + static PARTIAL_ID_CONTAINS_UNLOCK_AFTER: import("bn.js"); + static PARTIAL_ID_CONTAINS_SYSTEM_ID: import("bn.js"); + static PARTIAL_ID_CONTAINS_PRIV_ADDRS: import("bn.js"); + static PARTIAL_ID_CONTAINS_CONTENT_MAP: import("bn.js"); + static PARTIAL_ID_CONTAINS_MINSIGS: import("bn.js"); + static PARTIAL_ID_CONTAINS_FLAGS: import("bn.js"); + static PARTIAL_ID_CONTAINS_VERSION: import("bn.js"); + constructor(data?: VerusIDInitData); + protected containsFlags(): boolean; + protected containsVersion(): boolean; + protected containsPrimaryAddresses(): boolean; + protected containsMinSigs(): boolean; + protected containsParent(): boolean; + protected containsSystemId(): boolean; + protected containsContentMap(): boolean; + protected containsContentMultiMap(): boolean; + protected containsRevocation(): boolean; + protected containsRecovery(): boolean; + protected containsPrivateAddresses(): boolean; + protected containsUnlockAfter(): boolean; + private toggleContainsParent; + private toggleContainsSystemId; + private toggleContainsContentMap; + private toggleContainsContentMultiMap; + private toggleContainsRevocation; + private toggleContainsRecovery; + private toggleContainsPrivateAddresses; + private toggleContainsUnlockAfter; + private toggleContainsFlags; + private toggleContainsVersion; + private toggleContainsMinSigs; + private toggleContainsPrimaryAddresses; + private enableContainsFlags; + private enableContainsUnlockAfter; + private getPartialIdentityByteLength; + getByteLength(): number; + fromBuffer(buffer: Buffer, offset?: number, parseVdxfObjects?: boolean): number; + toBuffer(): Buffer; + static fromJson(json: VerusCLIVerusIDJson): PartialIdentity; + lock(unlockTime: BigNumber): void; + unlock(height?: BigNumber, txExpiryHeight?: BigNumber): void; + revoke(): void; + unrevoke(): void; +} diff --git a/dist/pbaas/PartialIdentity.js b/dist/pbaas/PartialIdentity.js new file mode 100644 index 00000000..28998bb9 --- /dev/null +++ b/dist/pbaas/PartialIdentity.js @@ -0,0 +1,172 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PartialIdentity = void 0; +const Identity_1 = require("./Identity"); +const bn_js_1 = require("bn.js"); +const varint_1 = require("../utils/varint"); +const bufferutils_1 = require("../utils/bufferutils"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class PartialIdentity extends Identity_1.Identity { + constructor(data) { + super(data); + this.contains = new bn_js_1.BN("0"); + if (data === null || data === void 0 ? void 0 : data.parent) + this.toggleContainsParent(); + if (data === null || data === void 0 ? void 0 : data.system_id) + this.toggleContainsSystemId(); + if (data === null || data === void 0 ? void 0 : data.content_map) + this.toggleContainsContentMap(); + if (data === null || data === void 0 ? void 0 : data.content_multimap) + this.toggleContainsContentMultiMap(); + if (data === null || data === void 0 ? void 0 : data.revocation_authority) + this.toggleContainsRevocation(); + if (data === null || data === void 0 ? void 0 : data.recovery_authority) + this.toggleContainsRecovery(); + if ((data === null || data === void 0 ? void 0 : data.private_addresses) && data.private_addresses.length > 0) + this.toggleContainsPrivateAddresses(); + if (data === null || data === void 0 ? void 0 : data.unlock_after) + this.toggleContainsUnlockAfter(); + if (data === null || data === void 0 ? void 0 : data.flags) + this.toggleContainsFlags(); + if (data === null || data === void 0 ? void 0 : data.min_sigs) + this.toggleContainsMinSigs(); + if (data === null || data === void 0 ? void 0 : data.version) + this.toggleContainsVersion(); + if ((data === null || data === void 0 ? void 0 : data.primary_addresses) && data.primary_addresses.length > 0) + this.toggleContainsPrimaryAddresses(); + } + containsFlags() { + return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_FLAGS).toNumber()); + } + containsVersion() { + return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_VERSION).toNumber()); + } + containsPrimaryAddresses() { + return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_PRIMARY_ADDRS).toNumber()); + } + containsMinSigs() { + return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_MINSIGS).toNumber()); + } + containsParent() { + return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_PARENT).toNumber()); + } + containsSystemId() { + return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_SYSTEM_ID).toNumber()); + } + containsContentMap() { + return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_CONTENT_MAP).toNumber()); + } + containsContentMultiMap() { + return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_CONTENT_MULTIMAP).toNumber()); + } + containsRevocation() { + return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_REVOCATION).toNumber()); + } + containsRecovery() { + return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_RECOVERY).toNumber()); + } + containsPrivateAddresses() { + return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_PRIV_ADDRS).toNumber()); + } + containsUnlockAfter() { + return !!(this.contains.and(PartialIdentity.PARTIAL_ID_CONTAINS_UNLOCK_AFTER).toNumber()); + } + toggleContainsParent() { + this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_PARENT); + } + toggleContainsSystemId() { + this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_SYSTEM_ID); + } + toggleContainsContentMap() { + this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_CONTENT_MAP); + } + toggleContainsContentMultiMap() { + this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_CONTENT_MULTIMAP); + } + toggleContainsRevocation() { + this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_REVOCATION); + } + toggleContainsRecovery() { + this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_RECOVERY); + } + toggleContainsPrivateAddresses() { + this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_PRIV_ADDRS); + } + toggleContainsUnlockAfter() { + this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_UNLOCK_AFTER); + } + toggleContainsFlags() { + this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_FLAGS); + } + toggleContainsVersion() { + this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_VERSION); + } + toggleContainsMinSigs() { + this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_MINSIGS); + } + toggleContainsPrimaryAddresses() { + this.contains = this.contains.xor(PartialIdentity.PARTIAL_ID_CONTAINS_PRIMARY_ADDRS); + } + enableContainsFlags() { + this.contains = this.contains.or(PartialIdentity.PARTIAL_ID_CONTAINS_FLAGS); + } + enableContainsUnlockAfter() { + this.contains = this.contains.or(PartialIdentity.PARTIAL_ID_CONTAINS_UNLOCK_AFTER); + } + getPartialIdentityByteLength() { + let length = 0; + length += varint_1.default.encodingLength(this.contains); + length += super.getByteLength(); + return length; + } + getByteLength() { + return this.getPartialIdentityByteLength(); + } + fromBuffer(buffer, offset = 0, parseVdxfObjects = false) { + const reader = new BufferReader(buffer, offset); + this.contains = reader.readVarInt(); + reader.offset = super.fromBuffer(reader.buffer, reader.offset, parseVdxfObjects); + return reader.offset; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getPartialIdentityByteLength())); + writer.writeVarInt(this.contains); + writer.writeSlice(super.toBuffer()); + return writer.buffer; + } + static fromJson(json) { + return Identity_1.Identity.internalFromJson(json, PartialIdentity); + } + lock(unlockTime) { + this.enableContainsFlags(); + this.enableContainsUnlockAfter(); + return super.lock(unlockTime); + } + unlock(height = new bn_js_1.BN(0), txExpiryHeight = new bn_js_1.BN(0)) { + this.enableContainsFlags(); + this.enableContainsUnlockAfter(); + return super.unlock(height, txExpiryHeight); + } + revoke() { + this.enableContainsFlags(); + this.enableContainsUnlockAfter(); + return super.revoke(); + } + unrevoke() { + this.enableContainsFlags(); + return super.unrevoke(); + } +} +exports.PartialIdentity = PartialIdentity; +PartialIdentity.PARTIAL_ID_CONTAINS_PARENT = new bn_js_1.BN("1", 10); +PartialIdentity.PARTIAL_ID_CONTAINS_CONTENT_MULTIMAP = new bn_js_1.BN("2", 10); +PartialIdentity.PARTIAL_ID_CONTAINS_PRIMARY_ADDRS = new bn_js_1.BN("4", 10); +PartialIdentity.PARTIAL_ID_CONTAINS_REVOCATION = new bn_js_1.BN("8", 10); +PartialIdentity.PARTIAL_ID_CONTAINS_RECOVERY = new bn_js_1.BN("16", 10); +PartialIdentity.PARTIAL_ID_CONTAINS_UNLOCK_AFTER = new bn_js_1.BN("32", 10); +PartialIdentity.PARTIAL_ID_CONTAINS_SYSTEM_ID = new bn_js_1.BN("64", 10); +PartialIdentity.PARTIAL_ID_CONTAINS_PRIV_ADDRS = new bn_js_1.BN("128", 10); +PartialIdentity.PARTIAL_ID_CONTAINS_CONTENT_MAP = new bn_js_1.BN("256", 10); +PartialIdentity.PARTIAL_ID_CONTAINS_MINSIGS = new bn_js_1.BN("512", 10); +PartialIdentity.PARTIAL_ID_CONTAINS_FLAGS = new bn_js_1.BN("1024", 10); +PartialIdentity.PARTIAL_ID_CONTAINS_VERSION = new bn_js_1.BN("2048", 10); diff --git a/dist/pbaas/PartialMMRData.d.ts b/dist/pbaas/PartialMMRData.d.ts new file mode 100644 index 00000000..bb734581 --- /dev/null +++ b/dist/pbaas/PartialMMRData.d.ts @@ -0,0 +1,62 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +import { AllowedHashes } from '../constants/pbaas'; +import { VdxfUniValue, VdxfUniValueJson } from './VdxfUniValue'; +export type PartialMMRDataUnit = { + type: BigNumber; + data: Buffer | VdxfUniValue; +}; +export type PartialMMRDataInitData = { + flags?: BigNumber; + data?: Array; + salt?: Array; + mmrhashtype?: BigNumber; + priormmr?: Array; +}; +export type PartialMMRDataJson = { + flags?: string; + data?: Array<{ + type: string; + data: string | VdxfUniValueJson; + }>; + salt?: Array; + mmrhashtype?: string; + priormmr?: Array; +}; +export type CLIMMRDataStringKey = "filename" | "serializedhex" | "serializedbase64" | "message" | "datahash"; +export type CLIMMRDataKey = CLIMMRDataStringKey | "vdxfdata"; +export type SingleKeyMMRData = { + [K in CLIMMRDataStringKey]: { + [P in K]: string; + }; +}[CLIMMRDataStringKey]; +export type PartialMMRDataCLIJson = { + mmrdata: Array; + mmrsalt?: Array; + mmrhashtype?: AllowedHashes; + priormmr?: Array; +}; +export declare class PartialMMRData implements SerializableEntity { + flags: BigNumber; + data: Array; + mmrhashtype?: BigNumber; + salt?: Array; + priormmr?: Array; + static CONTAINS_SALT: import("bn.js"); + static CONTAINS_PRIORMMR: import("bn.js"); + constructor(data?: PartialMMRDataInitData); + protected containsSalt(): boolean; + protected containsPriorMMR(): boolean; + private toggleContainsSalt; + private toggleContainsPriorMMR; + private getPartialMMRDataByteLength; + getByteLength(): number; + fromBuffer(buffer: Buffer, offset?: number): number; + toBuffer(): Buffer; + toJson(): PartialMMRDataJson; + static fromJson(json: PartialMMRDataJson): PartialMMRData; + toCLIJson(): PartialMMRDataCLIJson; + static fromCLIJson(json: PartialMMRDataCLIJson): PartialMMRData; +} diff --git a/dist/pbaas/PartialMMRData.js b/dist/pbaas/PartialMMRData.js new file mode 100644 index 00000000..afdd2681 --- /dev/null +++ b/dist/pbaas/PartialMMRData.js @@ -0,0 +1,333 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PartialMMRData = void 0; +const bn_js_1 = require("bn.js"); +const varint_1 = require("../utils/varint"); +const bufferutils_1 = require("../utils/bufferutils"); +const varuint_1 = require("../utils/varuint"); +const pbaas_1 = require("../constants/pbaas"); +const VdxfUniValue_1 = require("./VdxfUniValue"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class PartialMMRData { + constructor(data) { + this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0"); + this.data = data && data.data ? data.data : []; + this.mmrhashtype = data && data.mmrhashtype ? data.mmrhashtype : pbaas_1.DEFAULT_HASH_TYPE_MMR; + if (data === null || data === void 0 ? void 0 : data.salt) { + if (!this.containsSalt()) + this.toggleContainsSalt(); + this.salt = data.salt; + } + if (data === null || data === void 0 ? void 0 : data.priormmr) { + if (!this.containsPriorMMR()) + this.toggleContainsPriorMMR(); + this.priormmr = data.priormmr; + } + } + containsSalt() { + return !!(this.flags.and(PartialMMRData.CONTAINS_SALT).toNumber()); + } + containsPriorMMR() { + return !!(this.flags.and(PartialMMRData.CONTAINS_PRIORMMR).toNumber()); + } + toggleContainsSalt() { + this.flags = this.flags.xor(PartialMMRData.CONTAINS_SALT); + } + toggleContainsPriorMMR() { + this.flags = this.flags.xor(PartialMMRData.CONTAINS_PRIORMMR); + } + getPartialMMRDataByteLength() { + let length = 0; + length += varint_1.default.encodingLength(this.flags); + length += varuint_1.default.encodingLength(this.data.length); + for (let i = 0; i < this.data.length; i++) { + const unit = this.data[i]; + length += varint_1.default.encodingLength(unit.type); + if (unit.type.eq(pbaas_1.DATA_TYPE_VDXFDATA)) { + const vdxfdatalen = unit.data.getByteLength(); + length += varuint_1.default.encodingLength(vdxfdatalen); + length += vdxfdatalen; + } + else { + const buf = unit.data; + length += varuint_1.default.encodingLength(buf.length); + length += buf.length; + } + } + length += varint_1.default.encodingLength(this.mmrhashtype); + if (this.containsSalt()) { + length += varuint_1.default.encodingLength(this.salt.length); + for (let i = 0; i < this.salt.length; i++) { + const salt = this.salt[i]; + length += varuint_1.default.encodingLength(salt.length); + length += salt.length; + } + } + if (this.containsPriorMMR()) { + length += varuint_1.default.encodingLength(this.priormmr.length); + for (let i = 0; i < this.priormmr.length; i++) { + const priormmr = this.priormmr[i]; + length += varuint_1.default.encodingLength(priormmr.length); + length += priormmr.length; + } + } + return length; + } + getByteLength() { + return this.getPartialMMRDataByteLength(); + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.flags = reader.readVarInt(); + const numData = reader.readCompactSize(); + for (let i = 0; i < numData; i++) { + const type = reader.readVarInt(); + let data; + if (type.eq(pbaas_1.DATA_TYPE_VDXFDATA)) { + const vdxfData = new VdxfUniValue_1.VdxfUniValue(); + const vdxfDataBuf = reader.readVarSlice(); + vdxfData.fromBuffer(vdxfDataBuf); + data = vdxfData; + } + else { + data = reader.readVarSlice(); + } + this.data.push({ + type, + data + }); + } + this.mmrhashtype = reader.readVarInt(); + if (this.containsSalt()) { + this.salt = reader.readVector(); + } + if (this.containsPriorMMR()) { + this.priormmr = reader.readVector(); + } + return reader.offset; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getPartialMMRDataByteLength())); + // Serialize flags + writer.writeVarInt(this.flags); + writer.writeCompactSize(this.data.length); + for (let i = 0; i < this.data.length; i++) { + writer.writeVarInt(this.data[i].type); + if (this.data[i].type.eq(pbaas_1.DATA_TYPE_VDXFDATA)) { + const vdxfData = this.data[i].data; + writer.writeVarSlice(vdxfData.toBuffer()); + } + else { + writer.writeVarSlice(this.data[i].data); + } + } + writer.writeVarInt(this.mmrhashtype); + if (this.containsSalt()) { + writer.writeVector(this.salt); + } + if (this.containsPriorMMR()) { + writer.writeVector(this.priormmr); + } + return writer.buffer; + } + toJson() { + return { + flags: this.flags ? this.flags.toString(10) : undefined, + data: this.data ? this.data.map(x => { + if (x.type.eq(pbaas_1.DATA_TYPE_VDXFDATA)) { + const uni = x.data.toJson(); + if (Array.isArray(uni)) { + throw new Error("VDXF univalue arrays not supported in partialmmrdata vdxfdata"); + } + else { + return { + type: x.type.toString(10), + data: uni + }; + } + } + else { + return { + type: x.type.toString(10), + data: x.data.toString('hex') + }; + } + }) : undefined, + salt: this.salt ? this.salt.map(x => x.toString('hex')) : undefined, + mmrhashtype: this.mmrhashtype ? this.mmrhashtype.toString(10) : undefined, + priormmr: this.priormmr ? this.priormmr.map(x => x.toString('hex')) : undefined + }; + } + static fromJson(json) { + return new PartialMMRData({ + flags: json.flags ? new bn_js_1.BN(json.flags, 10) : undefined, + data: json.data ? json.data.map(x => { + const type = new bn_js_1.BN(x.type, 10); + if (type.eq(pbaas_1.DATA_TYPE_VDXFDATA)) { + return { + type: new bn_js_1.BN(x.type, 10), + data: VdxfUniValue_1.VdxfUniValue.fromJson(x.data) + }; + } + else { + return { + type: new bn_js_1.BN(x.type, 10), + data: Buffer.from(x.data, 'hex') + }; + } + }) : undefined, + salt: json.salt ? json.salt.map(x => Buffer.from(x, 'hex')) : undefined, + mmrhashtype: json.mmrhashtype ? new bn_js_1.BN(json.mmrhashtype, 10) : undefined, + priormmr: json.priormmr ? json.priormmr.map(x => Buffer.from(x, 'hex')) : undefined, + }); + } + toCLIJson() { + const mmrdata = []; + let mmrsalt; + let priormmr; + let mmrhashtype; + for (const unit of this.data) { + if (unit.type.eq(pbaas_1.DATA_TYPE_RAWSTRINGDATA)) { + mmrdata.push(unit.data.toString('hex')); + } + else if (unit.type.eq(pbaas_1.DATA_TYPE_FILENAME)) { + mmrdata.push({ + "filename": unit.data.toString('utf-8') + }); + } + else if (unit.type.eq(pbaas_1.DATA_TYPE_MESSAGE)) { + mmrdata.push({ + "message": unit.data.toString('utf-8') + }); + } + else if (unit.type.eq(pbaas_1.DATA_TYPE_VDXFDATA)) { + const uni = unit.data.toJson(); + if (Array.isArray(uni)) { + throw new Error("VDXF univalue arrays not supported in partialmmrdata vdxfdata"); + } + else { + mmrdata.push({ + "vdxfdata": uni + }); + } + } + else if (unit.type.eq(pbaas_1.DATA_TYPE_HEX)) { + mmrdata.push({ + "serializedhex": unit.data.toString('hex') + }); + } + else if (unit.type.eq(pbaas_1.DATA_TYPE_BASE64)) { + mmrdata.push({ + "serializedbase64": unit.data.toString('base64') + }); + } + else if (unit.type.eq(pbaas_1.DATA_TYPE_DATAHASH)) { + mmrdata.push({ + "datahash": unit.data.toString('hex') + }); + } + } + if (this.containsSalt()) { + mmrsalt = this.salt.map(x => x.toString('hex')); + } + if (this.containsPriorMMR()) { + priormmr = this.priormmr.map(x => x.toString('hex')); + } + if (this.mmrhashtype.eq(pbaas_1.HASH_TYPE_SHA256)) { + mmrhashtype = pbaas_1.HASH_TYPE_SHA256_NAME; + } + else if (this.mmrhashtype.eq(pbaas_1.HASH_TYPE_SHA256D)) { + mmrhashtype = pbaas_1.HASH_TYPE_SHA256D_NAME; + } + else if (this.mmrhashtype.eq(pbaas_1.HASH_TYPE_BLAKE2B)) { + mmrhashtype = pbaas_1.HASH_TYPE_BLAKE2B_NAME; + } + else if (this.mmrhashtype.eq(pbaas_1.HASH_TYPE_KECCAK256)) { + mmrhashtype = pbaas_1.HASH_TYPE_KECCAK256_NAME; + } + else + throw new Error("Unrecognized hash type"); + const ret = { + mmrdata, + mmrsalt, + priormmr, + mmrhashtype + }; + for (const key in ret) { + if (ret[key] === undefined) + delete ret[key]; + } + return ret; + } + static fromCLIJson(json) { + const data = []; + let salt; + let priormmr; + let mmrhashtype; + for (const unit of json.mmrdata) { + if (typeof unit === 'string') { + data.push({ type: pbaas_1.DATA_TYPE_RAWSTRINGDATA, data: Buffer.from(unit, 'hex') }); + } + else { + const unitMmrData = unit["vdxfdata"] ? unit : unit; + const dataKey = Object.keys(unitMmrData)[0]; + const dataValue = unitMmrData[dataKey]; + switch (dataKey) { + case "filename": + data.push({ type: pbaas_1.DATA_TYPE_FILENAME, data: Buffer.from(dataValue, 'utf-8') }); + break; + case "message": + data.push({ type: pbaas_1.DATA_TYPE_MESSAGE, data: Buffer.from(dataValue, 'utf-8') }); + break; + case "vdxfdata": + data.push({ type: pbaas_1.DATA_TYPE_VDXFDATA, data: VdxfUniValue_1.VdxfUniValue.fromJson(dataValue) }); + break; + case "serializedhex": + data.push({ type: pbaas_1.DATA_TYPE_HEX, data: Buffer.from(dataValue, 'hex') }); + break; + case "serializedbase64": + data.push({ type: pbaas_1.DATA_TYPE_BASE64, data: Buffer.from(dataValue, 'base64') }); + break; + case "datahash": + data.push({ type: pbaas_1.DATA_TYPE_DATAHASH, data: Buffer.from(dataValue, 'hex') }); + break; + default: + throw new Error("Unrecognized data key type"); + } + } + } + if (json.mmrsalt) { + salt = json.mmrsalt.map(x => Buffer.from(x, 'hex')); + } + if (json.priormmr) { + priormmr = json.priormmr.map(x => Buffer.from(x, 'hex')); + } + if (json.mmrhashtype) { + switch (json.mmrhashtype) { + case pbaas_1.HASH_TYPE_SHA256_NAME: + mmrhashtype = pbaas_1.HASH_TYPE_SHA256; + break; + case pbaas_1.HASH_TYPE_SHA256D_NAME: + mmrhashtype = pbaas_1.HASH_TYPE_SHA256D; + break; + case pbaas_1.HASH_TYPE_BLAKE2B_NAME: + mmrhashtype = pbaas_1.HASH_TYPE_BLAKE2B; + break; + case pbaas_1.HASH_TYPE_KECCAK256_NAME: + mmrhashtype = pbaas_1.HASH_TYPE_KECCAK256; + break; + default: + throw new Error("Unrecognized hash type"); + } + } + return new PartialMMRData({ + data, + salt, + priormmr, + mmrhashtype + }); + } +} +exports.PartialMMRData = PartialMMRData; +PartialMMRData.CONTAINS_SALT = new bn_js_1.BN("1", 10); +PartialMMRData.CONTAINS_PRIORMMR = new bn_js_1.BN("2", 10); diff --git a/dist/pbaas/PartialSignData.d.ts b/dist/pbaas/PartialSignData.d.ts new file mode 100644 index 00000000..44a583dd --- /dev/null +++ b/dist/pbaas/PartialSignData.d.ts @@ -0,0 +1,120 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +import { IdentityID } from './IdentityID'; +import { KeyID } from './KeyID'; +import { SaplingPaymentAddress } from './SaplingPaymentAddress'; +import { PartialMMRData, PartialMMRDataJson, SingleKeyMMRData } from './PartialMMRData'; +import { AllowedHashes } from '../constants/pbaas'; +import { VdxfUniValue, VdxfUniValueJson } from './VdxfUniValue'; +export type PartialSignDataInitData = { + flags?: BigNumber; + address?: IdentityID | KeyID; + prefixString?: Buffer; + vdxfKeys?: Array; + vdxfKeyNames?: Array; + boundHashes?: Array; + hashType?: BigNumber; + encryptToAddress?: SaplingPaymentAddress; + createMMR?: boolean; + signature?: Buffer; + dataType?: BigNumber; + data?: Buffer | PartialMMRData | VdxfUniValue; +}; +export type PartialSignDataJson = { + flags?: string; + address?: string; + prefixstring?: string; + vdxfkeys?: Array; + vdxfkeynames?: Array; + boundhashes?: Array; + hashtype?: string; + encrypttoaddress?: string; + createmmr?: boolean; + signature?: string; + datatype?: string; + data?: string | PartialMMRDataJson | VdxfUniValueJson; +}; +export type CLISignDataKey = "filename" | "message" | "messagehex" | "messagebase64" | "datahash" | "mmrdata" | "vdxfdata"; +type AtLeastOne; +}> = Partial & U[keyof U]; +type SignDataKeys = { + filename?: string; + message?: string; + messagehex?: string; + messagebase64?: string; + datahash?: string; + vdxfdata?: VdxfUniValueJson; + mmrdata?: Array; +}; +type BaseFields = { + address?: string; + prefixString?: string; + vdxfKeys?: Array; + vdxfKeyNames?: Array; + boundHashes?: Array; + hashType?: string; + encryptToAddress?: string; + createMMR?: boolean; + signature?: string; + dataType?: string; + data?: string; +}; +type MMRFields = { + mmrsalt?: Array; + mmrhashtype?: AllowedHashes; + priormmr?: Array; +}; +export type PartialSignDataCLIJson = ((AtLeastOne> & BaseFields) | (AtLeastOne & MMRFields & BaseFields)); +export declare class PartialSignData implements SerializableEntity { + flags: BigNumber; + address?: IdentityID | KeyID; + prefixString?: Buffer; + vdxfKeys?: Array; + vdxfKeyNames?: Array; + boundHashes?: Array; + hashType?: BigNumber; + encryptToAddress?: SaplingPaymentAddress; + createMMR?: boolean; + signature?: Buffer; + dataType?: BigNumber; + data?: Buffer | PartialMMRData | VdxfUniValue; + static CONTAINS_DATA: import("bn.js"); + static CONTAINS_ADDRESS: import("bn.js"); + static CONTAINS_ENCRYPTTOADDRESS: import("bn.js"); + static CONTAINS_CURRENTSIG: import("bn.js"); + static CONTAINS_PREFIXSTRING: import("bn.js"); + static CONTAINS_VDXFKEYS: import("bn.js"); + static CONTAINS_VDXFKEYNAMES: import("bn.js"); + static CONTAINS_BOUNDHASHES: import("bn.js"); + constructor(data?: PartialSignDataInitData); + protected containsData(): boolean; + protected containsAddress(): boolean; + protected containsEncrypttoAddress(): boolean; + protected containsCurrentSig(): boolean; + protected containsPrefixString(): boolean; + protected containsVdxfKeys(): boolean; + protected containsVdxfKeyNames(): boolean; + protected containsBoundhashes(): boolean; + private toggleContainsData; + private toggleContainsAddress; + private toggleContainsEncryptToAddress; + private toggleContainsCurrentSig; + private toggleContainsPrefixString; + private toggleContainsVdxfKeys; + private toggleContainsVdxfKeyNames; + private toggleContainsBoundHashes; + isMMRData(): boolean; + isVdxfData(): boolean; + private getPartialSignDataByteLength; + getByteLength(): number; + fromBuffer(buffer: Buffer, offset?: number): number; + toBuffer(): Buffer; + toJson(): PartialSignDataJson; + static fromJson(json: PartialSignDataJson): PartialSignData; + toCLIJson(): PartialSignDataCLIJson; + static fromCLIJson(json: PartialSignDataCLIJson): PartialSignData; +} +export {}; diff --git a/dist/pbaas/PartialSignData.js b/dist/pbaas/PartialSignData.js new file mode 100644 index 00000000..795f49e4 --- /dev/null +++ b/dist/pbaas/PartialSignData.js @@ -0,0 +1,518 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PartialSignData = void 0; +const bn_js_1 = require("bn.js"); +const bufferutils_1 = require("../utils/bufferutils"); +const IdentityID_1 = require("./IdentityID"); +const KeyID_1 = require("./KeyID"); +const SaplingPaymentAddress_1 = require("./SaplingPaymentAddress"); +const varuint_1 = require("../utils/varuint"); +const Hash160_1 = require("../vdxf/classes/Hash160"); +const vdxf_1 = require("../constants/vdxf"); +const PartialMMRData_1 = require("./PartialMMRData"); +const pbaas_1 = require("../constants/pbaas"); +const address_1 = require("../utils/address"); +const VdxfUniValue_1 = require("./VdxfUniValue"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class PartialSignData { + constructor(data) { + this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0"); + this.createMMR = data && data.createMMR ? data.createMMR : false; + if (data === null || data === void 0 ? void 0 : data.address) { + if (!this.containsAddress()) + this.toggleContainsAddress(); + this.address = data.address; + } + if (data === null || data === void 0 ? void 0 : data.prefixString) { + if (!this.containsPrefixString()) + this.toggleContainsPrefixString(); + this.prefixString = data.prefixString; + } + if (data === null || data === void 0 ? void 0 : data.vdxfKeys) { + if (!this.containsVdxfKeys()) + this.toggleContainsVdxfKeys(); + this.vdxfKeys = data.vdxfKeys; + } + if (data === null || data === void 0 ? void 0 : data.vdxfKeyNames) { + if (!this.containsVdxfKeyNames()) + this.toggleContainsVdxfKeyNames(); + this.vdxfKeyNames = data.vdxfKeyNames; + } + if (data === null || data === void 0 ? void 0 : data.hashType) { + this.hashType = data.hashType; + } + else + this.hashType = pbaas_1.DEFAULT_HASH_TYPE; + if (data === null || data === void 0 ? void 0 : data.boundHashes) { + if (!this.containsBoundhashes()) + this.toggleContainsBoundHashes(); + this.boundHashes = data.boundHashes; + } + if (data === null || data === void 0 ? void 0 : data.encryptToAddress) { + if (!this.containsEncrypttoAddress()) + this.toggleContainsEncryptToAddress(); + this.encryptToAddress = data.encryptToAddress; + } + if (data === null || data === void 0 ? void 0 : data.signature) { + if (!this.containsCurrentSig()) + this.toggleContainsCurrentSig(); + this.signature = data.signature; + } + if ((data === null || data === void 0 ? void 0 : data.dataType) && (data === null || data === void 0 ? void 0 : data.data)) { + if (!this.containsData()) + this.toggleContainsData(); + this.data = data.data; + this.dataType = data.dataType; + } + } + containsData() { + return !!(this.flags.and(PartialSignData.CONTAINS_DATA).toNumber()); + } + containsAddress() { + return !!(this.flags.and(PartialSignData.CONTAINS_ADDRESS).toNumber()); + } + containsEncrypttoAddress() { + return !!(this.flags.and(PartialSignData.CONTAINS_ENCRYPTTOADDRESS).toNumber()); + } + containsCurrentSig() { + return !!(this.flags.and(PartialSignData.CONTAINS_CURRENTSIG).toNumber()); + } + containsPrefixString() { + return !!(this.flags.and(PartialSignData.CONTAINS_PREFIXSTRING).toNumber()); + } + containsVdxfKeys() { + return !!(this.flags.and(PartialSignData.CONTAINS_VDXFKEYS).toNumber()); + } + containsVdxfKeyNames() { + return !!(this.flags.and(PartialSignData.CONTAINS_VDXFKEYNAMES).toNumber()); + } + containsBoundhashes() { + return !!(this.flags.and(PartialSignData.CONTAINS_BOUNDHASHES).toNumber()); + } + toggleContainsData() { + this.flags = this.flags.xor(PartialSignData.CONTAINS_DATA); + } + toggleContainsAddress() { + this.flags = this.flags.xor(PartialSignData.CONTAINS_ADDRESS); + } + toggleContainsEncryptToAddress() { + this.flags = this.flags.xor(PartialSignData.CONTAINS_ENCRYPTTOADDRESS); + } + toggleContainsCurrentSig() { + this.flags = this.flags.xor(PartialSignData.CONTAINS_CURRENTSIG); + } + toggleContainsPrefixString() { + this.flags = this.flags.xor(PartialSignData.CONTAINS_PREFIXSTRING); + } + toggleContainsVdxfKeys() { + this.flags = this.flags.xor(PartialSignData.CONTAINS_VDXFKEYS); + } + toggleContainsVdxfKeyNames() { + this.flags = this.flags.xor(PartialSignData.CONTAINS_VDXFKEYNAMES); + } + toggleContainsBoundHashes() { + this.flags = this.flags.xor(PartialSignData.CONTAINS_BOUNDHASHES); + } + isMMRData() { + return this.dataType && this.dataType.eq(pbaas_1.DATA_TYPE_MMRDATA); + } + isVdxfData() { + return this.dataType && this.dataType.eq(pbaas_1.DATA_TYPE_VDXFDATA); + } + getPartialSignDataByteLength() { + function calculateVectorLength(items, getItemLength, varlength = true) { + let totalLength = 0; + totalLength += varuint_1.default.encodingLength(items.length); + for (const item of items) { + const itemLength = getItemLength(item); + if (varlength) + totalLength += varuint_1.default.encodingLength(itemLength); + totalLength += itemLength; + } + return totalLength; + } + let length = 0; + length += varuint_1.default.encodingLength(this.flags.toNumber()); + if (this.containsAddress()) + length += this.address.getByteLength(); + if (this.containsPrefixString()) { + const prefixLen = this.prefixString.length; + length += varuint_1.default.encodingLength(prefixLen); + length += prefixLen; + } + if (this.containsVdxfKeys()) { + length += calculateVectorLength(this.vdxfKeys, (vdxfkey) => vdxfkey.getByteLength(), false); + } + if (this.containsVdxfKeyNames()) { + length += calculateVectorLength(this.vdxfKeyNames, (vdxfname) => vdxfname.length); + } + length += varuint_1.default.encodingLength(this.hashType.toNumber()); + if (this.containsBoundhashes()) { + length += calculateVectorLength(this.boundHashes, (hash) => hash.length); + } + if (this.containsEncrypttoAddress()) { + length += this.encryptToAddress.getByteLength(); + } + length += 1; // Createmmr boolean value + if (this.containsData()) { + length += varuint_1.default.encodingLength(this.dataType.toNumber()); + if (this.isMMRData()) { + length += this.data.getByteLength(); + } + else if (this.isVdxfData()) { + const vdxfDataLen = this.data.getByteLength(); + length += varuint_1.default.encodingLength(vdxfDataLen); + length += vdxfDataLen; + } + else { + const datalen = this.data.length; + length += varuint_1.default.encodingLength(datalen); + length += datalen; + } + } + return length; + } + getByteLength() { + return this.getPartialSignDataByteLength(); + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.flags = new bn_js_1.BN(reader.readCompactSize()); + if (this.containsAddress()) { + const hash160 = new Hash160_1.Hash160SerEnt(); + hash160.fromBuffer(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH)); + if (hash160.version === vdxf_1.I_ADDR_VERSION) { + this.address = hash160; + } + else if (hash160.version === vdxf_1.R_ADDR_VERSION) { + this.address = hash160; + } + else + throw new Error("Unrecognized address version"); + } + if (this.containsPrefixString()) { + this.prefixString = reader.readVarSlice(); + } + if (this.containsVdxfKeys()) { + const count = reader.readCompactSize(); + this.vdxfKeys = []; + for (let i = 0; i < count; i++) { + const varSlice = reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH); + const idId = new IdentityID_1.IdentityID(); + idId.fromBuffer(varSlice); + this.vdxfKeys.push(idId); + } + } + if (this.containsVdxfKeyNames()) { + this.vdxfKeyNames = reader.readVector(); + } + this.hashType = new bn_js_1.BN(reader.readCompactSize()); + if (this.containsBoundhashes()) { + this.boundHashes = reader.readVector(); + } + if (this.containsEncrypttoAddress()) { + const saplingAddr = new SaplingPaymentAddress_1.SaplingPaymentAddress(); + reader.offset = saplingAddr.fromBuffer(reader.buffer, reader.offset); + this.encryptToAddress = saplingAddr; + } + this.createMMR = !!reader.readUInt8(); + if (this.containsData()) { + this.dataType = new bn_js_1.BN(reader.readCompactSize()); + if (this.isMMRData()) { + const partialMMRData = new PartialMMRData_1.PartialMMRData(); + reader.offset = partialMMRData.fromBuffer(reader.buffer, reader.offset); + this.data = partialMMRData; + } + else if (this.isVdxfData()) { + const vdxfData = new VdxfUniValue_1.VdxfUniValue(); + const vdxfDataBuf = reader.readVarSlice(); + vdxfData.fromBuffer(vdxfDataBuf); + this.data = vdxfData; + } + else { + this.data = reader.readVarSlice(); + } + } + return reader.offset; + } + toBuffer() { + // Allocate the required size for partial sign data. + // Make sure getPartialSignDataByteLength() accounts for all fields in your updated model. + const writer = new BufferWriter(Buffer.alloc(this.getPartialSignDataByteLength())); + // Serialize flags + writer.writeCompactSize(this.flags.toNumber()); + // Address + if (this.containsAddress()) { + if (!this.address) { + throw new Error("Address is required but not provided"); + } + writer.writeSlice(this.address.toBuffer()); + } + // Prefix string + if (this.containsPrefixString()) { + if (!this.prefixString) { + throw new Error("Prefix string is required but not provided"); + } + writer.writeVarSlice(this.prefixString); + } + // VDXF keys + if (this.containsVdxfKeys()) { + if (!this.vdxfKeys) { + throw new Error("VDXF keys are required but not provided"); + } + writer.writeCompactSize(this.vdxfKeys.length); + for (const vdxfkey of this.vdxfKeys) { + writer.writeSlice(vdxfkey.toBuffer()); + } + } + // VDXF key names + if (this.containsVdxfKeyNames()) { + if (!this.vdxfKeyNames) { + throw new Error("VDXF key names are required but not provided"); + } + writer.writeVector(this.vdxfKeyNames); + } + writer.writeCompactSize(this.hashType.toNumber()); + // Bound hashes + if (this.containsBoundhashes()) { + if (!this.boundHashes) { + throw new Error("Bound hashes are required but not provided"); + } + writer.writeVector(this.boundHashes); + } + // Encrypt-to address (Sapling) + if (this.containsEncrypttoAddress()) { + if (!this.encryptToAddress || !(this.encryptToAddress instanceof SaplingPaymentAddress_1.SaplingPaymentAddress)) { + throw new Error("Sapling payment address is required but not provided"); + } + writer.writeSlice(this.encryptToAddress.toBuffer()); + } + // createMMR (boolean) + writer.writeUInt8(this.createMMR ? 1 : 0); + // Data + if (this.containsData()) { + if (!this.data || !this.dataType) { + throw new Error("Data is required but not provided"); + } + writer.writeCompactSize(this.dataType.toNumber()); + if (this.isMMRData()) { + const mmrData = this.data; + writer.writeSlice(mmrData.toBuffer()); + } + else if (this.isVdxfData()) { + const vdxfData = this.data; + writer.writeVarSlice(vdxfData.toBuffer()); + } + else { + writer.writeVarSlice(this.data); + } + } + return writer.buffer; + } + toJson() { + return { + flags: this.flags ? this.flags.toString(10) : undefined, + address: this.address ? this.address.toAddress() : undefined, + prefixstring: this.prefixString ? this.prefixString.toString('utf-8') : undefined, + vdxfkeys: this.vdxfKeys ? this.vdxfKeys.map(x => x.toAddress()) : undefined, + vdxfkeynames: this.vdxfKeyNames ? this.vdxfKeyNames.map(x => x.toString('utf-8')) : undefined, + boundhashes: this.boundHashes ? this.boundHashes.map(x => x.toString('hex')) : undefined, + hashtype: this.hashType ? this.hashType.toString(10) : undefined, + encrypttoaddress: this.encryptToAddress ? this.encryptToAddress.toAddressString() : undefined, + createmmr: this.createMMR, + signature: this.signature ? this.signature.toString('base64') : undefined, + datatype: this.dataType ? this.dataType.toString(10) : undefined, + data: this.data ? this.data instanceof PartialMMRData_1.PartialMMRData ? this.data.toJson() : this.data.toString('hex') : undefined + }; + } + static fromJson(json) { + let addr; + if (json.address) { + const { version, hash } = (0, address_1.fromBase58Check)(json.address); + if (version === vdxf_1.I_ADDR_VERSION) { + addr = new IdentityID_1.IdentityID(hash); + } + else if (version === vdxf_1.R_ADDR_VERSION) { + addr = new KeyID_1.KeyID(hash); + } + else + throw new Error("Unrecognized address version"); + } + const dataType = json.datatype ? new bn_js_1.BN(json.datatype, 10) : undefined; + return new PartialSignData({ + flags: json.flags ? new bn_js_1.BN(json.flags, 10) : undefined, + address: addr, + prefixString: json.prefixstring ? Buffer.from(json.prefixstring, 'utf-8') : undefined, + vdxfKeys: json.vdxfkeys ? json.vdxfkeys.map(x => IdentityID_1.IdentityID.fromAddress(x)) : undefined, + vdxfKeyNames: json.vdxfkeynames ? json.vdxfkeynames.map(x => Buffer.from(x, 'utf-8')) : undefined, + boundHashes: json.boundhashes ? json.boundhashes.map(x => Buffer.from(x, 'hex')) : undefined, + hashType: json.hashtype ? new bn_js_1.BN(json.hashtype, 10) : undefined, + encryptToAddress: json.encrypttoaddress ? SaplingPaymentAddress_1.SaplingPaymentAddress.fromAddressString(json.encrypttoaddress) : undefined, + createMMR: json.createmmr, + signature: json.signature ? Buffer.from(json.signature, 'base64') : undefined, + dataType: json.datatype ? new bn_js_1.BN(json.datatype, 10) : undefined, + data: json.data ? + typeof json.data === 'string' ? + Buffer.from(json.data, 'hex') + : + dataType && dataType.eq(pbaas_1.DATA_TYPE_MMRDATA) ? + PartialMMRData_1.PartialMMRData.fromJson(json.data) + : + VdxfUniValue_1.VdxfUniValue.fromJson(json.data) + : + undefined + }); + } + toCLIJson() { + const ret = { + address: this.address ? this.address.toAddress() : undefined, + prefixString: this.prefixString ? this.prefixString.toString('utf-8') : undefined, + vdxfKeys: this.vdxfKeys ? this.vdxfKeys.map(x => x.toAddress()) : undefined, + vdxfKeyNames: this.vdxfKeyNames ? this.vdxfKeyNames.map(x => x.toString('utf-8')) : undefined, + boundHashes: this.boundHashes ? this.boundHashes.map(x => x.toString('hex')) : undefined, + encryptToAddress: this.encryptToAddress ? this.encryptToAddress.toAddressString() : undefined, + createMMR: this.createMMR, + signature: this.signature ? this.signature.toString('base64') : undefined + }; + if (this.containsData() && this.data && this.dataType) { + if (this.dataType.eq(pbaas_1.DATA_TYPE_MMRDATA)) { + const mmrCLIJson = this.data.toCLIJson(); + ret['mmrdata'] = mmrCLIJson.mmrdata; + ret['mmrsalt'] = mmrCLIJson.mmrsalt; + ret['mmrhashtype'] = mmrCLIJson.mmrhashtype; + ret['priormmr'] = mmrCLIJson.priormmr; + } + else if (this.dataType.eq(pbaas_1.DATA_TYPE_VDXFDATA)) { + const uniJson = this.data.toJson(); + if (Array.isArray(uniJson)) + throw new Error("VDXF univalue arrays not supported as sign data param"); + ret['vdxfdata'] = this.data.toJson(); + } + else { + const dataBuf = this.data; + if (this.dataType.eq(pbaas_1.DATA_TYPE_FILENAME)) { + ret['filename'] = dataBuf.toString('utf-8'); + } + else if (this.dataType.eq(pbaas_1.DATA_TYPE_MESSAGE)) { + ret['message'] = dataBuf.toString('utf-8'); + } + else if (this.dataType.eq(pbaas_1.DATA_TYPE_HEX)) { + ret['messagehex'] = dataBuf.toString('hex'); + } + else if (this.dataType.eq(pbaas_1.DATA_TYPE_BASE64)) { + ret['messagebase64'] = dataBuf.toString('base64'); + } + else if (this.dataType.eq(pbaas_1.DATA_TYPE_DATAHASH)) { + ret['datahash'] = dataBuf.toString('hex'); + } + else + throw new Error("Unrecognized dataType"); + } + } + if (this.hashType.eq(pbaas_1.HASH_TYPE_SHA256)) { + ret['hashType'] = pbaas_1.HASH_TYPE_SHA256_NAME; + } + else if (this.hashType.eq(pbaas_1.HASH_TYPE_SHA256D)) { + ret['hashType'] = pbaas_1.HASH_TYPE_SHA256D_NAME; + } + else if (this.hashType.eq(pbaas_1.HASH_TYPE_BLAKE2B)) { + ret['hashType'] = pbaas_1.HASH_TYPE_BLAKE2B_NAME; + } + else if (this.hashType.eq(pbaas_1.HASH_TYPE_KECCAK256)) { + ret['hashType'] = pbaas_1.HASH_TYPE_KECCAK256_NAME; + } + else + throw new Error("Unrecognized hash type"); + for (const key in ret) { + if (ret[key] === undefined) + delete ret[key]; + } + return ret; + } + static fromCLIJson(json) { + let addr; + if (json.address) { + const { version, hash } = (0, address_1.fromBase58Check)(json.address); + if (version === vdxf_1.I_ADDR_VERSION) { + addr = new IdentityID_1.IdentityID(hash); + } + else if (version === vdxf_1.R_ADDR_VERSION) { + addr = new KeyID_1.KeyID(hash); + } + else + throw new Error("Unrecognized address version"); + } + const config = { + address: addr, + prefixString: json.prefixString ? Buffer.from(json.prefixString, 'utf-8') : undefined, + vdxfKeys: json.vdxfKeys ? json.vdxfKeys.map(x => IdentityID_1.IdentityID.fromAddress(x)) : undefined, + vdxfKeyNames: json.vdxfKeyNames ? json.vdxfKeyNames.map(x => Buffer.from(x, 'utf-8')) : undefined, + boundHashes: json.boundHashes ? json.boundHashes.map(x => Buffer.from(x, 'hex')) : undefined, + encryptToAddress: json.encryptToAddress ? SaplingPaymentAddress_1.SaplingPaymentAddress.fromAddressString(json.encryptToAddress) : undefined, + createMMR: json.createMMR, + signature: json.signature ? Buffer.from(json.signature, 'base64') : undefined + }; + if ('mmrdata' in json) { + const pmd = PartialMMRData_1.PartialMMRData.fromCLIJson({ + mmrdata: json.mmrdata, + mmrsalt: json.mmrsalt, + mmrhashtype: json.mmrhashtype, + priormmr: json.priormmr + }); + config.data = pmd; + config.dataType = pbaas_1.DATA_TYPE_MMRDATA; + } + else if (json.filename) { + config.data = Buffer.from(json.filename, 'utf-8'); + config.dataType = pbaas_1.DATA_TYPE_FILENAME; + } + else if (json.message) { + config.data = Buffer.from(json.message, 'utf-8'); + config.dataType = pbaas_1.DATA_TYPE_MESSAGE; + } + else if (json.vdxfdata) { + config.data = VdxfUniValue_1.VdxfUniValue.fromJson(json.vdxfdata); + config.dataType = pbaas_1.DATA_TYPE_VDXFDATA; + } + else if (json.messagehex) { + config.data = Buffer.from(json.messagehex, 'hex'); + config.dataType = pbaas_1.DATA_TYPE_HEX; + } + else if (json.messagebase64) { + config.data = Buffer.from(json.messagebase64, 'base64'); + config.dataType = pbaas_1.DATA_TYPE_BASE64; + } + else if (json.datahash) { + config.data = Buffer.from(json.datahash, 'hex'); + config.dataType = pbaas_1.DATA_TYPE_DATAHASH; + } + if (json.hashType) { + switch (json.hashType) { + case pbaas_1.HASH_TYPE_SHA256_NAME: + config.hashType = pbaas_1.HASH_TYPE_SHA256; + break; + case pbaas_1.HASH_TYPE_SHA256D_NAME: + config.hashType = pbaas_1.HASH_TYPE_SHA256D; + break; + case pbaas_1.HASH_TYPE_BLAKE2B_NAME: + config.hashType = pbaas_1.HASH_TYPE_BLAKE2B; + break; + case pbaas_1.HASH_TYPE_KECCAK256_NAME: + config.hashType = pbaas_1.HASH_TYPE_KECCAK256; + break; + default: + throw new Error("Unrecognized hash type"); + } + } + return new PartialSignData(config); + } +} +exports.PartialSignData = PartialSignData; +PartialSignData.CONTAINS_DATA = new bn_js_1.BN("1", 10); +PartialSignData.CONTAINS_ADDRESS = new bn_js_1.BN("2", 10); +PartialSignData.CONTAINS_ENCRYPTTOADDRESS = new bn_js_1.BN("4", 10); +PartialSignData.CONTAINS_CURRENTSIG = new bn_js_1.BN("8", 10); +PartialSignData.CONTAINS_PREFIXSTRING = new bn_js_1.BN("16", 10); +PartialSignData.CONTAINS_VDXFKEYS = new bn_js_1.BN("32", 10); +PartialSignData.CONTAINS_VDXFKEYNAMES = new bn_js_1.BN("64", 10); +PartialSignData.CONTAINS_BOUNDHASHES = new bn_js_1.BN("128", 10); diff --git a/dist/pbaas/Principal.d.ts b/dist/pbaas/Principal.d.ts new file mode 100644 index 00000000..af1d6546 --- /dev/null +++ b/dist/pbaas/Principal.d.ts @@ -0,0 +1,26 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { KeyID } from './KeyID'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +export declare const PRINCIPAL_DEFAULT_FLAGS: import("bn.js"); +export declare const PRINCIPAL_VERSION_INVALID: import("bn.js"); +export declare const PRINCIPAL_VERSION_CURRENT: import("bn.js"); +export declare class Principal implements SerializableEntity { + flags: BigNumber; + version: BigNumber; + min_sigs?: BigNumber; + primary_addresses?: Array; + constructor(data?: { + version?: BigNumber; + flags?: BigNumber; + min_sigs?: BigNumber; + primary_addresses?: Array; + }); + protected containsFlags(): boolean; + protected containsVersion(): boolean; + protected containsPrimaryAddresses(): boolean; + protected containsMinSigs(): boolean; + private getSelfByteLength; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; +} diff --git a/dist/pbaas/Principal.js b/dist/pbaas/Principal.js new file mode 100644 index 00000000..efe2e1ac --- /dev/null +++ b/dist/pbaas/Principal.js @@ -0,0 +1,98 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Principal = exports.PRINCIPAL_VERSION_CURRENT = exports.PRINCIPAL_VERSION_INVALID = exports.PRINCIPAL_DEFAULT_FLAGS = void 0; +const bufferutils_1 = require("../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const varuint_1 = require("../utils/varuint"); +const KeyID_1 = require("./KeyID"); +const NoDestination_1 = require("./NoDestination"); +exports.PRINCIPAL_DEFAULT_FLAGS = new bn_js_1.BN(0, 10); +exports.PRINCIPAL_VERSION_INVALID = new bn_js_1.BN(0, 10); +exports.PRINCIPAL_VERSION_CURRENT = new bn_js_1.BN(1, 10); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class Principal { + constructor(data) { + this.flags = exports.PRINCIPAL_DEFAULT_FLAGS; + this.version = exports.PRINCIPAL_VERSION_INVALID; + if (data != null) { + if (data.flags != null) + this.flags = data.flags; + if (data.version != null) + this.version = data.version; + if (data.min_sigs != null) + this.min_sigs = data.min_sigs; + if (data.primary_addresses) + this.primary_addresses = data.primary_addresses; + } + } + containsFlags() { + return true; + } + containsVersion() { + return true; + } + containsPrimaryAddresses() { + return true; + } + containsMinSigs() { + return true; + } + getSelfByteLength() { + let byteLength = 0; + if (this.containsVersion()) + byteLength += 4; //uint32 version size + if (this.containsFlags()) + byteLength += 4; //uint32 flags size + if (this.containsPrimaryAddresses()) { + byteLength += varuint_1.default.encodingLength(this.primary_addresses.length); + for (const addr of this.primary_addresses) { + byteLength += varuint_1.default.encodingLength(addr.getByteLength()); + byteLength += addr.getByteLength(); + } + } + if (this.containsMinSigs()) { + byteLength += 4; //uint32 minimum signatures size + } + return byteLength; + } + getByteLength() { + return this.getSelfByteLength(); + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getSelfByteLength())); + if (this.containsVersion()) + writer.writeUInt32(this.version.toNumber()); + if (this.containsFlags()) + writer.writeUInt32(this.flags.toNumber()); + if (this.containsPrimaryAddresses()) + writer.writeVector(this.primary_addresses.map(x => x.toBuffer())); + if (this.containsMinSigs()) + writer.writeUInt32(this.min_sigs.toNumber()); + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + if (this.containsVersion()) + this.version = new bn_js_1.BN(reader.readUInt32(), 10); + if (this.containsFlags()) + this.flags = new bn_js_1.BN(reader.readUInt32(), 10); + if (this.containsPrimaryAddresses()) { + this.primary_addresses = reader.readVector().map(x => { + if (x.length === 20) { + return new KeyID_1.KeyID(x); + } + else if (x.length === 33) { + //TODO: Implement pubkey principal by adding PubKey class as possible TxDestination + throw new Error("Pubkey Principal not yet supported"); + } + else { + return new NoDestination_1.NoDestination(); + } + }); + } + if (this.containsMinSigs()) + this.min_sigs = new bn_js_1.BN(reader.readUInt32(), 10); + return reader.offset; + } +} +exports.Principal = Principal; diff --git a/dist/pbaas/PubKey.d.ts b/dist/pbaas/PubKey.d.ts new file mode 100644 index 00000000..6eed8fe4 --- /dev/null +++ b/dist/pbaas/PubKey.d.ts @@ -0,0 +1,11 @@ +import { SerializableEntity } from "../utils/types/SerializableEntity"; +export declare class PubKey implements SerializableEntity { + static PUBLIC_KEY_SIZE: number; + static COMPRESSED_PUBLIC_KEY_SIZE: number; + bytes: Buffer; + compressed: boolean; + constructor(bytes?: Buffer, compressed?: boolean); + getByteLength(): number; + fromBuffer(buffer: Buffer, offset?: number): number; + toBuffer(): Buffer; +} diff --git a/dist/pbaas/PubKey.js b/dist/pbaas/PubKey.js new file mode 100644 index 00000000..2636491c --- /dev/null +++ b/dist/pbaas/PubKey.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PubKey = void 0; +const bufferutils_1 = require("../utils/bufferutils"); +class PubKey { + constructor(bytes = Buffer.alloc(0), compressed = true) { + this.bytes = bytes; + this.compressed = compressed; + } + getByteLength() { + return this.compressed ? PubKey.COMPRESSED_PUBLIC_KEY_SIZE : PubKey.PUBLIC_KEY_SIZE; + } + fromBuffer(buffer, offset = 0) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + const header = buffer[offset]; + this.compressed = (header === 2 || header === 3); + this.bytes = reader.readSlice(this.compressed ? PubKey.COMPRESSED_PUBLIC_KEY_SIZE : PubKey.PUBLIC_KEY_SIZE); + return reader.offset; + } + toBuffer() { + const buffer = Buffer.alloc(this.getByteLength()); + const writer = new bufferutils_1.default.BufferWriter(buffer); + writer.writeSlice(this.bytes); + return writer.buffer; + } +} +exports.PubKey = PubKey; +PubKey.PUBLIC_KEY_SIZE = 65; +PubKey.COMPRESSED_PUBLIC_KEY_SIZE = 33; diff --git a/dist/pbaas/Rating.d.ts b/dist/pbaas/Rating.d.ts new file mode 100644 index 00000000..b18f18e6 --- /dev/null +++ b/dist/pbaas/Rating.d.ts @@ -0,0 +1,40 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +export interface RatingJson { + version: number; + trustlevel: number; + ratingsmap: { + [key: string]: string; + }; +} +export declare class Rating implements SerializableEntity { + static VERSION_INVALID: import("bn.js"); + static VERSION_FIRST: import("bn.js"); + static VERSION_LAST: import("bn.js"); + static VERSION_CURRENT: import("bn.js"); + static TRUST_UNKNOWN: import("bn.js"); + static TRUST_BLOCKED: import("bn.js"); + static TRUST_APPROVED: import("bn.js"); + static TRUST_FIRST: import("bn.js"); + static TRUST_LAST: import("bn.js"); + version: BigNumber; + trust_level: BigNumber; + ratings: Map; + constructor(data?: { + version?: BigNumber; + trust_level?: BigNumber; + ratings?: Map; + }); + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + isValid(): boolean; + toJson(): { + version: number; + trustlevel: number; + ratingsmap: { + [key: string]: string; + }; + }; + static fromJson(json: RatingJson): Rating; +} diff --git a/dist/pbaas/Rating.js b/dist/pbaas/Rating.js new file mode 100644 index 00000000..b315273d --- /dev/null +++ b/dist/pbaas/Rating.js @@ -0,0 +1,104 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Rating = void 0; +const varuint_1 = require("../utils/varuint"); +const address_1 = require("../utils/address"); +const bufferutils_1 = require("../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const vdxf_1 = require("../constants/vdxf"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class Rating { + constructor(data = {}) { + this.version = data.version || new bn_js_1.BN(1, 10); + this.trust_level = data.trust_level || new bn_js_1.BN(0, 10); + this.ratings = new Map(data.ratings || []); + } + getByteLength() { + let byteLength = 0; + byteLength += 4; // version uint32 + byteLength += 1; // trust_level uint8 + byteLength += varuint_1.default.encodingLength(this.ratings.size); + for (const [key, value] of this.ratings) { + byteLength += vdxf_1.HASH160_BYTE_LENGTH; + byteLength += varuint_1.default.encodingLength(value.length); + byteLength += value.length; + } + return byteLength; + } + toBuffer() { + const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); + bufferWriter.writeUInt32(this.version.toNumber()); + bufferWriter.writeUInt8(this.trust_level.toNumber()); + bufferWriter.writeCompactSize(this.ratings.size); + const entries = []; + for (const [key, value] of this.ratings) { + const { hash } = (0, address_1.fromBase58Check)(key); + entries.push({ [hash.toString('hex')]: value }); + } + // Sort by Buffer (vkey) value, smallest first + entries.sort((a, b) => { + const aKey = Object.keys(a)[0]; + const bKey = Object.keys(b)[0]; + const aBuf = Buffer.from(aKey, 'hex'); + const bBuf = Buffer.from(bKey, 'hex'); + return aBuf.compare(bBuf); + }); + // Write sorted entries + for (const value of entries) { + const key = Object.keys(value)[0]; + const innervalue = value[key]; + bufferWriter.writeSlice(Buffer.from(key, 'hex')); + bufferWriter.writeVarSlice(innervalue); + } + return bufferWriter.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.version = new bn_js_1.BN(reader.readUInt32()); + this.trust_level = new bn_js_1.BN(reader.readUInt8()); + const count = reader.readCompactSize(); + for (let i = 0; i < count; i++) { + const hash = reader.readSlice(20); + const value = reader.readVarSlice(); + const base58Key = (0, address_1.toBase58Check)(hash, vdxf_1.I_ADDR_VERSION); + this.ratings.set(base58Key, value); + } + return reader.offset; + } + isValid() { + return this.version.gte(Rating.VERSION_FIRST) && this.version.lte(Rating.VERSION_LAST) && + this.trust_level.gte(Rating.TRUST_FIRST) && this.trust_level.lte(Rating.TRUST_LAST); + } + toJson() { + const ratings = {}; + this.ratings.forEach((value, key) => { + ratings[key] = value.toString('hex'); + }); + return { + version: this.version.toNumber(), + trustlevel: this.trust_level.toNumber(), + ratingsmap: ratings + }; + } + static fromJson(json) { + const ratings = new Map(); + for (const key in json.ratingsmap) { + ratings.set(key, Buffer.from(json.ratingsmap[key], 'hex')); + } + return new Rating({ + version: new bn_js_1.BN(json.version), + trust_level: new bn_js_1.BN(json.trustlevel), + ratings: ratings + }); + } +} +exports.Rating = Rating; +Rating.VERSION_INVALID = new bn_js_1.BN(0, 10); +Rating.VERSION_FIRST = new bn_js_1.BN(1, 10); +Rating.VERSION_LAST = new bn_js_1.BN(1, 10); +Rating.VERSION_CURRENT = new bn_js_1.BN(1, 10); +Rating.TRUST_UNKNOWN = new bn_js_1.BN(0, 10); // unknown and can be included in exploration +Rating.TRUST_BLOCKED = new bn_js_1.BN(1, 10); // suspected or known to be untrustworthy and should not be interacted with +Rating.TRUST_APPROVED = new bn_js_1.BN(2, 10); // explicitly believed to be trustworthy enough to interact with +Rating.TRUST_FIRST = new bn_js_1.BN(0, 10); +Rating.TRUST_LAST = new bn_js_1.BN(2, 10); diff --git a/dist/pbaas/ReserveTransfer.d.ts b/dist/pbaas/ReserveTransfer.d.ts new file mode 100644 index 00000000..3e4d1e40 --- /dev/null +++ b/dist/pbaas/ReserveTransfer.d.ts @@ -0,0 +1,59 @@ +import { CurrencyValueMap } from './CurrencyValueMap'; +import { BigNumber } from '../utils/types/BigNumber'; +import { TokenOutput } from './TokenOutput'; +import { TransferDestination } from './TransferDestination'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +export declare const RESERVE_TRANSFER_INVALID: import("bn.js"); +export declare const RESERVE_TRANSFER_VALID: import("bn.js"); +export declare const RESERVE_TRANSFER_CONVERT: import("bn.js"); +export declare const RESERVE_TRANSFER_PRECONVERT: import("bn.js"); +export declare const RESERVE_TRANSFER_FEE_OUTPUT: import("bn.js"); +export declare const RESERVE_TRANSFER_DOUBLE_SEND: import("bn.js"); +export declare const RESERVE_TRANSFER_MINT_CURRENCY: import("bn.js"); +export declare const RESERVE_TRANSFER_CROSS_SYSTEM: import("bn.js"); +export declare const RESERVE_TRANSFER_BURN_CHANGE_PRICE: import("bn.js"); +export declare const RESERVE_TRANSFER_BURN_CHANGE_WEIGHT: import("bn.js"); +export declare const RESERVE_TRANSFER_IMPORT_TO_SOURCE: import("bn.js"); +export declare const RESERVE_TRANSFER_RESERVE_TO_RESERVE: import("bn.js"); +export declare const RESERVE_TRANSFER_REFUND: import("bn.js"); +export declare const RESERVE_TRANSFER_IDENTITY_EXPORT: import("bn.js"); +export declare const RESERVE_TRANSFER_CURRENCY_EXPORT: import("bn.js"); +export declare const RESERVE_TRANSFER_ARBITRAGE_ONLY: import("bn.js"); +export declare const RESERVE_TRANSFER_DESTINATION: TransferDestination; +export declare class ReserveTransfer extends TokenOutput implements SerializableEntity { + flags: BigNumber; + fee_currency_id: string; + fee_amount: BigNumber; + transfer_destination: TransferDestination; + dest_currency_id: string; + second_reserve_id: string; + dest_system_id: string; + constructor(data?: { + values?: CurrencyValueMap; + version?: BigNumber; + flags?: BigNumber; + fee_currency_id?: string; + fee_amount?: BigNumber; + transfer_destination?: TransferDestination; + dest_currency_id?: string; + second_reserve_id?: string; + dest_system_id?: string; + }); + isReserveToReserve(): boolean; + isCrossSystem(): boolean; + isConversion(): boolean; + isPreConversion(): boolean; + isFeeOutput(): boolean; + isDoubleSend(): boolean; + isMint(): boolean; + isBurnChangeWeight(): boolean; + isBurnChangePrice(): boolean; + isImportToSource(): boolean; + isRefund(): boolean; + isIdentityExport(): boolean; + isCurrencyExport(): boolean; + isArbitrageOnly(): boolean; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; +} diff --git a/dist/pbaas/ReserveTransfer.js b/dist/pbaas/ReserveTransfer.js new file mode 100644 index 00000000..7e9f7984 --- /dev/null +++ b/dist/pbaas/ReserveTransfer.js @@ -0,0 +1,154 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ReserveTransfer = exports.RESERVE_TRANSFER_DESTINATION = exports.RESERVE_TRANSFER_ARBITRAGE_ONLY = exports.RESERVE_TRANSFER_CURRENCY_EXPORT = exports.RESERVE_TRANSFER_IDENTITY_EXPORT = exports.RESERVE_TRANSFER_REFUND = exports.RESERVE_TRANSFER_RESERVE_TO_RESERVE = exports.RESERVE_TRANSFER_IMPORT_TO_SOURCE = exports.RESERVE_TRANSFER_BURN_CHANGE_WEIGHT = exports.RESERVE_TRANSFER_BURN_CHANGE_PRICE = exports.RESERVE_TRANSFER_CROSS_SYSTEM = exports.RESERVE_TRANSFER_MINT_CURRENCY = exports.RESERVE_TRANSFER_DOUBLE_SEND = exports.RESERVE_TRANSFER_FEE_OUTPUT = exports.RESERVE_TRANSFER_PRECONVERT = exports.RESERVE_TRANSFER_CONVERT = exports.RESERVE_TRANSFER_VALID = exports.RESERVE_TRANSFER_INVALID = void 0; +const varint_1 = require("../utils/varint"); +const bufferutils_1 = require("../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const TokenOutput_1 = require("./TokenOutput"); +const TransferDestination_1 = require("./TransferDestination"); +const address_1 = require("../utils/address"); +const vdxf_1 = require("../constants/vdxf"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +exports.RESERVE_TRANSFER_INVALID = new bn_js_1.BN(0, 10); +exports.RESERVE_TRANSFER_VALID = new bn_js_1.BN(1, 10); +exports.RESERVE_TRANSFER_CONVERT = new bn_js_1.BN(2, 10); +exports.RESERVE_TRANSFER_PRECONVERT = new bn_js_1.BN(4, 10); +exports.RESERVE_TRANSFER_FEE_OUTPUT = new bn_js_1.BN(8, 10); // one per import, amount must match total percentage of fees for exporter, no pre-convert allowed +exports.RESERVE_TRANSFER_DOUBLE_SEND = new bn_js_1.BN("10", 16); // this is used along with increasing the fee to send one transaction on two hops +exports.RESERVE_TRANSFER_MINT_CURRENCY = new bn_js_1.BN("20", 16); // set when this output is being minted on import +exports.RESERVE_TRANSFER_CROSS_SYSTEM = new bn_js_1.BN("40", 16); // if this is set, there is a systemID serialized and deserialized as well for destination +exports.RESERVE_TRANSFER_BURN_CHANGE_PRICE = new bn_js_1.BN("80", 16); // this output is being burned on import and will change the price +exports.RESERVE_TRANSFER_BURN_CHANGE_WEIGHT = new bn_js_1.BN("100", 16); // this output is being burned on import and will change the reserve ratio +exports.RESERVE_TRANSFER_IMPORT_TO_SOURCE = new bn_js_1.BN("200", 16); // set when the source currency, not destination is the import currency +exports.RESERVE_TRANSFER_RESERVE_TO_RESERVE = new bn_js_1.BN("400", 16); // for arbitrage or transient conversion, 2 stage solving (2nd from new fractional to reserves) +exports.RESERVE_TRANSFER_REFUND = new bn_js_1.BN("800", 16); // this transfer should be refunded, individual property when conversions exceed limits +exports.RESERVE_TRANSFER_IDENTITY_EXPORT = new bn_js_1.BN("1000", 16); // this exports a full identity when the next cross-chain leg is processed +exports.RESERVE_TRANSFER_CURRENCY_EXPORT = new bn_js_1.BN("2000", 16); // this exports a currency definition +exports.RESERVE_TRANSFER_ARBITRAGE_ONLY = new bn_js_1.BN("4000", 16); // in PBaaS V1, one additional reserve transfer from the local system may be added by the importer +exports.RESERVE_TRANSFER_DESTINATION = new TransferDestination_1.TransferDestination({ + type: TransferDestination_1.DEST_PKH, + destination_bytes: (0, address_1.fromBase58Check)("RTqQe58LSj2yr5CrwYFwcsAQ1edQwmrkUU").hash +}); +class ReserveTransfer extends TokenOutput_1.TokenOutput { + constructor(data) { + super(data); + this.flags = exports.RESERVE_TRANSFER_INVALID; + this.fee_currency_id = null; + this.fee_amount = new bn_js_1.BN(0, 10); + this.transfer_destination = new TransferDestination_1.TransferDestination(); + this.dest_currency_id = null; + this.second_reserve_id = null; + this.dest_currency_id = null; + if (data != null) { + if (data.flags != null) + this.flags = data.flags; + if (data.fee_currency_id != null) + this.fee_currency_id = data.fee_currency_id; + if (data.fee_amount != null) + this.fee_amount = data.fee_amount; + if (data.transfer_destination != null) + this.transfer_destination = data.transfer_destination; + if (data.dest_currency_id != null) + this.dest_currency_id = data.dest_currency_id; + if (data.second_reserve_id != null) + this.second_reserve_id = data.second_reserve_id; + if (data.dest_system_id != null) + this.dest_system_id = data.dest_system_id; + } + } + isReserveToReserve() { + return !!(this.flags.and(exports.RESERVE_TRANSFER_RESERVE_TO_RESERVE).toNumber()); + } + isCrossSystem() { + return !!(this.flags.and(exports.RESERVE_TRANSFER_CROSS_SYSTEM).toNumber()); + } + isConversion() { + return !!(this.flags.and(exports.RESERVE_TRANSFER_CONVERT).toNumber()); + } + isPreConversion() { + return !!(this.flags.and(exports.RESERVE_TRANSFER_PRECONVERT).toNumber()); + } + isFeeOutput() { + return !!(this.flags.and(exports.RESERVE_TRANSFER_FEE_OUTPUT).toNumber()); + } + isDoubleSend() { + return !!(this.flags.and(exports.RESERVE_TRANSFER_DOUBLE_SEND).toNumber()); + } + isMint() { + return !!(this.flags.and(exports.RESERVE_TRANSFER_MINT_CURRENCY).toNumber()); + } + isBurnChangeWeight() { + return !!(this.flags.and(exports.RESERVE_TRANSFER_BURN_CHANGE_WEIGHT).toNumber()); + } + isBurnChangePrice() { + return !!(this.flags.and(exports.RESERVE_TRANSFER_BURN_CHANGE_PRICE).toNumber()); + } + isImportToSource() { + return !!(this.flags.and(exports.RESERVE_TRANSFER_IMPORT_TO_SOURCE).toNumber()); + } + isRefund() { + return !!(this.flags.and(exports.RESERVE_TRANSFER_REFUND).toNumber()); + } + isIdentityExport() { + return !!(this.flags.and(exports.RESERVE_TRANSFER_IDENTITY_EXPORT).toNumber()); + } + isCurrencyExport() { + return !!(this.flags.and(exports.RESERVE_TRANSFER_CURRENCY_EXPORT).toNumber()); + } + isArbitrageOnly() { + return !!(this.flags.and(exports.RESERVE_TRANSFER_ARBITRAGE_ONLY).toNumber()); + } + getByteLength() { + let length = super.getByteLength(); + length += varint_1.default.encodingLength(this.flags); + length += (0, address_1.fromBase58Check)(this.fee_currency_id).hash.length; + length += varint_1.default.encodingLength(this.fee_amount); + length += this.transfer_destination.getByteLength(); + length += (0, address_1.fromBase58Check)(this.dest_currency_id).hash.length; + if (this.isReserveToReserve()) { + length += (0, address_1.fromBase58Check)(this.second_reserve_id).hash.length; + } + if (this.isCrossSystem()) { + length += (0, address_1.fromBase58Check)(this.dest_system_id).hash.length; + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + const ownOutput = new TokenOutput_1.TokenOutput({ + values: this.reserve_values, + version: this.version + }); + writer.writeSlice(ownOutput.toBuffer()); + writer.writeVarInt(this.flags); + writer.writeSlice((0, address_1.fromBase58Check)(this.fee_currency_id).hash); + writer.writeVarInt(this.fee_amount); + writer.writeSlice(this.transfer_destination.toBuffer()); + writer.writeSlice((0, address_1.fromBase58Check)(this.dest_currency_id).hash); + if (this.isReserveToReserve()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.second_reserve_id).hash); + } + if (this.isCrossSystem()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.dest_system_id).hash); + } + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const _offset = super.fromBuffer(buffer, offset); + const reader = new BufferReader(buffer, _offset); + this.flags = reader.readVarInt(); + this.fee_currency_id = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + this.fee_amount = reader.readVarInt(); + this.transfer_destination = new TransferDestination_1.TransferDestination(); + reader.offset = this.transfer_destination.fromBuffer(buffer, reader.offset); + this.dest_currency_id = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + if (this.isReserveToReserve()) { + this.second_reserve_id = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + } + if (this.isCrossSystem()) { + this.dest_system_id = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + } + return reader.offset; + } +} +exports.ReserveTransfer = ReserveTransfer; diff --git a/dist/pbaas/SaltedData.d.ts b/dist/pbaas/SaltedData.d.ts new file mode 100644 index 00000000..85a2c9e6 --- /dev/null +++ b/dist/pbaas/SaltedData.d.ts @@ -0,0 +1,15 @@ +import { VDXFData } from '../vdxf/index'; +export declare class SaltedData extends VDXFData { + salt: Buffer; + static VERSION_INVALID: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static DEFAULT_VERSION: import("bn.js"); + constructor(data?: Buffer, salt?: Buffer); + static fromJson(data: any): SaltedData; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): any; + getHash(hw: (data: Buffer) => Buffer): Buffer; +} diff --git a/dist/pbaas/SaltedData.js b/dist/pbaas/SaltedData.js new file mode 100644 index 00000000..0a73a8e7 --- /dev/null +++ b/dist/pbaas/SaltedData.js @@ -0,0 +1,82 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SaltedData = void 0; +const varint_1 = require("../utils/varint"); +const varuint_1 = require("../utils/varuint"); +const address_1 = require("../utils/address"); +const bufferutils_1 = require("../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const vdxf_1 = require("../constants/vdxf"); +const index_1 = require("../vdxf/index"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const createHash = require("create-hash"); +const vdxfdatakeys_1 = require("../vdxf/vdxfdatakeys"); +class SaltedData extends index_1.VDXFData { + constructor(data, salt = Buffer.alloc(0)) { + super(data); + if (salt.length != 0) { + this.salt = salt; + } + this.vdxfkey = vdxfdatakeys_1.SaltedDataKey.vdxfid; + this.version = SaltedData.DEFAULT_VERSION; + } + static fromJson(data) { + const saltedData = new SaltedData(); + if (data) { + if (data.version) { + saltedData.version = new bn_js_1.BN(data.version); + } + else { + saltedData.version = SaltedData.DEFAULT_VERSION; + } + if (data.salt) + saltedData.salt = Buffer.from(data.salt, 'hex'); + if (data.data) + saltedData.data = Buffer.from(data.data, 'hex'); + if (data.key) + saltedData.vdxfkey = data.key; + } + return saltedData; + } + getByteLength() { + let byteLength = 0; + byteLength += vdxf_1.HASH160_BYTE_LENGTH; // vdxfkey + byteLength += varint_1.default.encodingLength(this.version); + byteLength += varuint_1.default.encodingLength(this.data.length + this.salt.length); + byteLength += this.data.length + this.salt.length; + return byteLength; + } + toBuffer() { + const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); + bufferWriter.writeSlice((0, address_1.fromBase58Check)(this.vdxfkey).hash); + bufferWriter.writeVarInt(this.version); + bufferWriter.writeVarSlice(Buffer.concat([this.data, this.salt])); + return bufferWriter.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.vdxfkey = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + this.version = reader.readVarInt(); + this.data = reader.readVarSlice(); + this.salt = this.data.slice(this.data.length - 32); + this.data = this.data.slice(0, this.data.length - 32); + return reader.offset; + } + toJson() { + return { + version: this.version.toString(), + key: this.vdxfkey, + data: this.data.toString('hex'), + salt: this.salt.toString('hex') + }; + } + getHash(hw) { + const hash = hw(Buffer.concat([this.data, this.salt])); + return hash; + } +} +exports.SaltedData = SaltedData; +SaltedData.VERSION_INVALID = new bn_js_1.BN(0); +SaltedData.FIRST_VERSION = new bn_js_1.BN(1); +SaltedData.LAST_VERSION = new bn_js_1.BN(1); +SaltedData.DEFAULT_VERSION = new bn_js_1.BN(1); diff --git a/dist/pbaas/SaplingExtendedSpendingKey.d.ts b/dist/pbaas/SaplingExtendedSpendingKey.d.ts new file mode 100644 index 00000000..1e081f99 --- /dev/null +++ b/dist/pbaas/SaplingExtendedSpendingKey.d.ts @@ -0,0 +1,26 @@ +import { SerializableEntity } from '../utils/types/SerializableEntity'; +export declare class SaplingExtendedSpendingKey implements SerializableEntity { + depth: number; + parentFVKTag: Buffer; + childIndex: Buffer; + chainCode: Buffer; + ask: Buffer; + nsk: Buffer; + ovk: Buffer; + dk: Buffer; + constructor(data?: { + depth?: number; + parentFVKTag?: Buffer; + childIndex?: Buffer; + chainCode?: Buffer; + ask?: Buffer; + nsk?: Buffer; + ovk?: Buffer; + dk?: Buffer; + }); + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + static fromKeyString(key: string): SaplingExtendedSpendingKey; + toKeyString(testnet?: boolean): string; +} diff --git a/dist/pbaas/SaplingExtendedSpendingKey.js b/dist/pbaas/SaplingExtendedSpendingKey.js new file mode 100644 index 00000000..3790a4cf --- /dev/null +++ b/dist/pbaas/SaplingExtendedSpendingKey.js @@ -0,0 +1,65 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SaplingExtendedSpendingKey = void 0; +const bufferutils_1 = require("../utils/bufferutils"); +const sapling_1 = require("../utils/sapling"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class SaplingExtendedSpendingKey { + constructor(data) { + var _a, _b, _c, _d, _e, _f, _g, _h; + if (data != null) { + this.depth = (_a = data.depth) !== null && _a !== void 0 ? _a : 0; + this.parentFVKTag = (_b = data.parentFVKTag) !== null && _b !== void 0 ? _b : Buffer.alloc(4); + this.childIndex = (_c = data.childIndex) !== null && _c !== void 0 ? _c : Buffer.alloc(4); + this.chainCode = (_d = data.chainCode) !== null && _d !== void 0 ? _d : Buffer.alloc(32); + this.ask = (_e = data.ask) !== null && _e !== void 0 ? _e : Buffer.alloc(32); + this.nsk = (_f = data.nsk) !== null && _f !== void 0 ? _f : Buffer.alloc(32); + this.ovk = (_g = data.ovk) !== null && _g !== void 0 ? _g : Buffer.alloc(32); + this.dk = (_h = data.dk) !== null && _h !== void 0 ? _h : Buffer.alloc(32); + } + } + getByteLength() { + return 1 + 4 + 4 + 32 + 32 + 32 + 32 + 32; // 169 bytes total + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeUInt8(this.depth); + writer.writeSlice(this.parentFVKTag); + writer.writeSlice(this.childIndex); + writer.writeSlice(this.chainCode); + writer.writeSlice(this.ask); + writer.writeSlice(this.nsk); + writer.writeSlice(this.ovk); + writer.writeSlice(this.dk); + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.depth = reader.readUInt8(); + this.parentFVKTag = reader.readSlice(4); + this.childIndex = reader.readSlice(4); + this.chainCode = reader.readSlice(32); + this.ask = reader.readSlice(32); + this.nsk = reader.readSlice(32); + this.ovk = reader.readSlice(32); + this.dk = reader.readSlice(32); + return reader.offset; + } + static fromKeyString(key) { + const decoded = (0, sapling_1.decodeSaplingExtendedSpendingKey)(key); + return new SaplingExtendedSpendingKey(decoded); + } + toKeyString(testnet = false) { + return (0, sapling_1.encodeSaplingExtendedSpendingKey)({ + depth: this.depth, + parentFVKTag: this.parentFVKTag, + childIndex: this.childIndex, + chainCode: this.chainCode, + ask: this.ask, + nsk: this.nsk, + ovk: this.ovk, + dk: this.dk + }, testnet); + } +} +exports.SaplingExtendedSpendingKey = SaplingExtendedSpendingKey; diff --git a/dist/pbaas/SaplingExtendedViewingKey.d.ts b/dist/pbaas/SaplingExtendedViewingKey.d.ts new file mode 100644 index 00000000..c834b5d7 --- /dev/null +++ b/dist/pbaas/SaplingExtendedViewingKey.d.ts @@ -0,0 +1,26 @@ +import { SerializableEntity } from '../utils/types/SerializableEntity'; +export declare class SaplingExtendedViewingKey implements SerializableEntity { + depth: number; + parentFVKTag: Buffer; + childIndex: Buffer; + chainCode: Buffer; + ak: Buffer; + nk: Buffer; + ovk: Buffer; + dk: Buffer; + constructor(data?: { + depth?: number; + parentFVKTag?: Buffer; + childIndex?: Buffer; + chainCode?: Buffer; + ak?: Buffer; + nk?: Buffer; + ovk?: Buffer; + dk?: Buffer; + }); + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + static fromKeyString(key: string): SaplingExtendedViewingKey; + toKeyString(testnet?: boolean): string; +} diff --git a/dist/pbaas/SaplingExtendedViewingKey.js b/dist/pbaas/SaplingExtendedViewingKey.js new file mode 100644 index 00000000..3e3efa77 --- /dev/null +++ b/dist/pbaas/SaplingExtendedViewingKey.js @@ -0,0 +1,65 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SaplingExtendedViewingKey = void 0; +const bufferutils_1 = require("../utils/bufferutils"); +const sapling_1 = require("../utils/sapling"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class SaplingExtendedViewingKey { + constructor(data) { + var _a, _b, _c, _d, _e, _f, _g, _h; + if (data != null) { + this.depth = (_a = data.depth) !== null && _a !== void 0 ? _a : 0; + this.parentFVKTag = (_b = data.parentFVKTag) !== null && _b !== void 0 ? _b : Buffer.alloc(4); + this.childIndex = (_c = data.childIndex) !== null && _c !== void 0 ? _c : Buffer.alloc(4); + this.chainCode = (_d = data.chainCode) !== null && _d !== void 0 ? _d : Buffer.alloc(32); + this.ak = (_e = data.ak) !== null && _e !== void 0 ? _e : Buffer.alloc(32); + this.nk = (_f = data.nk) !== null && _f !== void 0 ? _f : Buffer.alloc(32); + this.ovk = (_g = data.ovk) !== null && _g !== void 0 ? _g : Buffer.alloc(32); + this.dk = (_h = data.dk) !== null && _h !== void 0 ? _h : Buffer.alloc(32); + } + } + getByteLength() { + return 1 + 4 + 4 + 32 + 32 + 32 + 32 + 32; // 169 bytes total + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeUInt8(this.depth); + writer.writeSlice(this.parentFVKTag); + writer.writeSlice(this.childIndex); + writer.writeSlice(this.chainCode); + writer.writeSlice(this.ak); + writer.writeSlice(this.nk); + writer.writeSlice(this.ovk); + writer.writeSlice(this.dk); + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.depth = reader.readUInt8(); + this.parentFVKTag = reader.readSlice(4); + this.childIndex = reader.readSlice(4); + this.chainCode = reader.readSlice(32); + this.ak = reader.readSlice(32); + this.nk = reader.readSlice(32); + this.ovk = reader.readSlice(32); + this.dk = reader.readSlice(32); + return reader.offset; + } + static fromKeyString(key) { + const decoded = (0, sapling_1.decodeSaplingExtendedViewingKey)(key); + return new SaplingExtendedViewingKey(decoded); + } + toKeyString(testnet = false) { + return (0, sapling_1.encodeSaplingExtendedViewingKey)({ + depth: this.depth, + parentFVKTag: this.parentFVKTag, + childIndex: this.childIndex, + chainCode: this.chainCode, + ak: this.ak, + nk: this.nk, + ovk: this.ovk, + dk: this.dk + }, testnet); + } +} +exports.SaplingExtendedViewingKey = SaplingExtendedViewingKey; diff --git a/dist/pbaas/SaplingPaymentAddress.d.ts b/dist/pbaas/SaplingPaymentAddress.d.ts new file mode 100644 index 00000000..0f36fb53 --- /dev/null +++ b/dist/pbaas/SaplingPaymentAddress.d.ts @@ -0,0 +1,14 @@ +import { SerializableEntity } from '../utils/types/SerializableEntity'; +export declare class SaplingPaymentAddress implements SerializableEntity { + d: Buffer; + pk_d: Buffer; + constructor(data?: { + d: Buffer; + pk_d: Buffer; + }); + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + static fromAddressString(address: string): SaplingPaymentAddress; + toAddressString(): string; +} diff --git a/dist/pbaas/SaplingPaymentAddress.js b/dist/pbaas/SaplingPaymentAddress.js new file mode 100644 index 00000000..e6e3f84d --- /dev/null +++ b/dist/pbaas/SaplingPaymentAddress.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SaplingPaymentAddress = void 0; +const bufferutils_1 = require("../utils/bufferutils"); +const sapling_1 = require("../utils/sapling"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class SaplingPaymentAddress { + constructor(data) { + if (data != null) { + if (data.d != null) + this.d = data.d; + if (data.pk_d != null) + this.pk_d = data.pk_d; + } + } + getByteLength() { + let length = 0; + length += this.d.length; + length += this.pk_d.length; + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeSlice(this.d); + writer.writeSlice(this.pk_d); + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.d = reader.readSlice(11); + this.pk_d = reader.readSlice(32); + return reader.offset; + } + static fromAddressString(address) { + const { d, pk_d } = (0, sapling_1.decodeSaplingAddress)(address); + return new SaplingPaymentAddress({ d, pk_d }); + } + toAddressString() { + return (0, sapling_1.encodeSaplingAddress)({ d: this.d, pk_d: this.pk_d }); + } +} +exports.SaplingPaymentAddress = SaplingPaymentAddress; diff --git a/dist/pbaas/SignatureData.d.ts b/dist/pbaas/SignatureData.d.ts new file mode 100644 index 00000000..3bbd7ece --- /dev/null +++ b/dist/pbaas/SignatureData.d.ts @@ -0,0 +1,70 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +import { EHashTypes } from './DataDescriptor'; +export interface SignatureJsonDataInterface { + version: number; + systemid: string; + hashtype: number; + signaturehash: string; + identityid: string; + signaturetype: number; + vdxfkeys?: Array; + vdxfkeynames?: Array; + boundhashes?: Array; + signature: string; +} +export declare class SignatureData implements SerializableEntity { + version: BigNumber; + system_ID: string; + hash_type: BigNumber; + signature_hash: Buffer; + identity_ID: string; + sig_type: BigNumber; + vdxf_keys: Array; + vdxf_key_names: Array; + bound_hashes: Array; + signature_as_vch: Buffer; + static VERSION_INVALID: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static DEFAULT_VERSION: import("bn.js"); + static TYPE_VERUSID_DEFAULT: import("bn.js"); + constructor(data?: { + version?: BigNumber; + system_ID?: string; + hash_type?: BigNumber; + signature_hash?: Buffer; + identity_ID?: string; + sig_type?: BigNumber; + vdxf_keys?: Array; + vdxf_key_names?: Array; + bound_hashes?: Array; + signature_as_vch?: Buffer; + }); + static fromJson(data: SignatureJsonDataInterface | any): SignatureData; + /** + * Determines the signature hash type based on the input buffer. + * + * @param {Buffer} input - The input buffer containing signature data. + * @returns {number} - The hash type. If the version byte is `2`, the next byte + * in the buffer is returned as the hash type. Otherwise, + * it defaults to `EHashTypes.HASH_SHA256`. + * + * The method reads the first byte of the input buffer as the version. If the + * version is `2`, it reads the next byte as the hash type. This logic is used + * to support multiple versions of signature data formats, where version `2` + * introduces a new hash type. For all other versions, the default hash type + * is `EHashTypes.HASH_SHA256`. + */ + static getSignatureHashType(input: Buffer): number | EHashTypes.HASH_SHA256; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + isValid(): boolean; + toJson(): SignatureJsonDataInterface; + getIdentityHash(sigObject: { + version: number; + hash_type: number; + height: number; + }): Buffer; +} diff --git a/dist/pbaas/SignatureData.js b/dist/pbaas/SignatureData.js new file mode 100644 index 00000000..5574cf65 --- /dev/null +++ b/dist/pbaas/SignatureData.js @@ -0,0 +1,208 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SignatureData = void 0; +const varint_1 = require("../utils/varint"); +const varuint_1 = require("../utils/varuint"); +const address_1 = require("../utils/address"); +const bufferutils_1 = require("../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const vdxf_1 = require("../constants/vdxf"); +const DataDescriptor_1 = require("./DataDescriptor"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const createHash = require("create-hash"); +const vdxf_2 = require("../constants/vdxf"); +class SignatureData { + constructor(data) { + if (data) { + this.version = data.version || new bn_js_1.BN(1, 10); + this.system_ID = data.system_ID || ""; + this.hash_type = data.hash_type || new bn_js_1.BN(0); + this.signature_hash = data.signature_hash || Buffer.alloc(0); + this.identity_ID = data.identity_ID || ""; + this.sig_type = data.sig_type || new bn_js_1.BN(0); + this.vdxf_keys = data.vdxf_keys || []; + this.vdxf_key_names = data.vdxf_key_names || []; + this.bound_hashes = data.bound_hashes || []; + this.signature_as_vch = data.signature_as_vch || Buffer.alloc(0); + } + } + static fromJson(data) { + var _a; + const signatureData = new SignatureData(); + if (data) { + signatureData.version = new bn_js_1.BN(data.version); + signatureData.system_ID = data.systemid; + signatureData.hash_type = new bn_js_1.BN(data.hashtype); + signatureData.identity_ID = data.identityid; + signatureData.sig_type = new bn_js_1.BN(data.signaturetype); + if (signatureData.hash_type.eq(new bn_js_1.BN(Number(DataDescriptor_1.EHashTypes.HASH_SHA256)))) { + signatureData.signature_hash = Buffer.from(data.signaturehash, 'hex'); + } + else { + signatureData.signature_hash = Buffer.from(data.signaturehash, 'hex').reverse(); + } + signatureData.signature_as_vch = Buffer.from(data.signature, 'base64'); + signatureData.vdxf_keys = data.vdxfkeys || []; + signatureData.vdxf_key_names = data.vdxfkeynames || []; + signatureData.bound_hashes = ((_a = data.boundhashes) === null || _a === void 0 ? void 0 : _a.map((hash) => Buffer.from(hash, 'hex').reverse())) || []; + } + return signatureData; + } + /** + * Determines the signature hash type based on the input buffer. + * + * @param {Buffer} input - The input buffer containing signature data. + * @returns {number} - The hash type. If the version byte is `2`, the next byte + * in the buffer is returned as the hash type. Otherwise, + * it defaults to `EHashTypes.HASH_SHA256`. + * + * The method reads the first byte of the input buffer as the version. If the + * version is `2`, it reads the next byte as the hash type. This logic is used + * to support multiple versions of signature data formats, where version `2` + * introduces a new hash type. For all other versions, the default hash type + * is `EHashTypes.HASH_SHA256`. + */ + static getSignatureHashType(input) { + var bufferReader = new bufferutils_1.default.BufferReader(input, 0); + let version = bufferReader.readUInt8(); + if (version === 2) + return bufferReader.readUInt8(); + else + return DataDescriptor_1.EHashTypes.HASH_SHA256; + } + getByteLength() { + let byteLength = 0; + byteLength += varint_1.default.encodingLength(this.version); + byteLength += vdxf_1.HASH160_BYTE_LENGTH; // system_ID uint160 + byteLength += varint_1.default.encodingLength(this.hash_type); + byteLength += varuint_1.default.encodingLength(this.signature_hash.length); + byteLength += this.signature_hash.length; + byteLength += vdxf_1.HASH160_BYTE_LENGTH; // identity_ID uint160 + byteLength += varint_1.default.encodingLength(this.sig_type); + byteLength += varuint_1.default.encodingLength(this.vdxf_keys.length); + byteLength += this.vdxf_keys.length * 20; + byteLength += varuint_1.default.encodingLength(this.vdxf_key_names.length); + for (const keyName of this.vdxf_key_names) { + byteLength += varuint_1.default.encodingLength(Buffer.from(keyName, 'utf8').length); + byteLength += Buffer.from(keyName, 'utf8').length; + } + byteLength += varuint_1.default.encodingLength(this.bound_hashes.length); + byteLength += this.bound_hashes.length * 32; + byteLength += varuint_1.default.encodingLength(this.signature_as_vch.length); + byteLength += this.signature_as_vch.length; + return byteLength; + } + toBuffer() { + const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); + bufferWriter.writeVarInt(this.version); + bufferWriter.writeSlice((0, address_1.fromBase58Check)(this.system_ID).hash); + bufferWriter.writeVarInt(this.hash_type); + bufferWriter.writeVarSlice(this.signature_hash); + bufferWriter.writeSlice((0, address_1.fromBase58Check)(this.identity_ID).hash); + bufferWriter.writeVarInt(this.sig_type); + bufferWriter.writeCompactSize(this.vdxf_keys.length); + for (const key of this.vdxf_keys) { + bufferWriter.writeSlice((0, address_1.fromBase58Check)(key).hash); + } + bufferWriter.writeCompactSize(this.vdxf_key_names.length); + for (const keyName of this.vdxf_key_names) { + bufferWriter.writeVarSlice(Buffer.from(keyName, 'utf8')); + } + bufferWriter.writeCompactSize(this.bound_hashes.length); + for (const boundHash of this.bound_hashes) { + bufferWriter.writeSlice(boundHash); + } + bufferWriter.writeVarSlice(this.signature_as_vch); + return bufferWriter.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.version = reader.readVarInt(); + this.system_ID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + this.hash_type = reader.readVarInt(); + this.signature_hash = reader.readVarSlice(); + this.identity_ID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + this.sig_type = reader.readVarInt(); + const vdxfKeysLength = reader.readCompactSize(); + this.vdxf_keys = []; + for (let i = 0; i < vdxfKeysLength; i++) { + this.vdxf_keys.push((0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION)); + } + const vdxfKeyNamesLength = reader.readCompactSize(); + this.vdxf_key_names = []; + for (let i = 0; i < vdxfKeyNamesLength; i++) { + this.vdxf_key_names.push(reader.readVarSlice().toString('utf8')); + } + const boundHashesLength = reader.readCompactSize(); + this.bound_hashes = []; + for (let i = 0; i < boundHashesLength; i++) { + this.bound_hashes.push(reader.readSlice(32)); + } + this.signature_as_vch = reader.readVarSlice(); + return reader.offset; + } + isValid() { + return !!(this.version.gte(SignatureData.FIRST_VERSION) && + this.version.lte(SignatureData.LAST_VERSION) && + this.system_ID); + } + toJson() { + const returnObj = { + version: this.version.toNumber(), + systemid: this.system_ID, + hashtype: this.hash_type.toNumber(), + signaturehash: '', // Will be set below + identityid: this.identity_ID, + signaturetype: this.sig_type.toNumber(), + signature: this.signature_as_vch.toString('base64') + }; + if (this.hash_type.eq(new bn_js_1.BN(Number(DataDescriptor_1.EHashTypes.HASH_SHA256)))) { + returnObj.signaturehash = Buffer.from(this.signature_hash).toString('hex'); + } + else { + returnObj.signaturehash = Buffer.from(this.signature_hash).reverse().toString('hex'); + } + if (this.vdxf_keys && this.vdxf_keys.length > 0) { + returnObj.vdxfkeys = this.vdxf_keys; + } + if (this.vdxf_key_names && this.vdxf_key_names.length > 0) { + returnObj.vdxfkeynames = this.vdxf_key_names; + } + if (this.bound_hashes && this.bound_hashes.length > 0) { + returnObj.boundhashes = this.bound_hashes.map((hash) => Buffer.from(hash).reverse().toString('hex')); + } + return returnObj; + } + // To fully implement, refer to VerusCoin/src/pbaas/crosschainrpc.cpp line 337, IdentitySignatureHash + getIdentityHash(sigObject) { + var heightBuffer = Buffer.allocUnsafe(4); + heightBuffer.writeUInt32LE(sigObject.height); + if (sigObject.hash_type != Number(DataDescriptor_1.EHashTypes.HASH_SHA256)) { + throw new Error("Invalid signature type for identity hash"); + } + if (sigObject.version == 1) { + return createHash("sha256") + .update(vdxf_2.VERUS_DATA_SIGNATURE_PREFIX) + .update((0, address_1.fromBase58Check)(this.system_ID).hash) + .update(heightBuffer) + .update((0, address_1.fromBase58Check)(this.identity_ID).hash) + .update(this.signature_hash) + .digest(); + } + else { + return createHash("sha256") + .update((0, address_1.fromBase58Check)(this.system_ID).hash) + .update(heightBuffer) + .update((0, address_1.fromBase58Check)(this.identity_ID).hash) + .update(vdxf_2.VERUS_DATA_SIGNATURE_PREFIX) + .update(this.signature_hash) + .digest(); + } + } +} +exports.SignatureData = SignatureData; +SignatureData.VERSION_INVALID = new bn_js_1.BN(0); +SignatureData.FIRST_VERSION = new bn_js_1.BN(1); +SignatureData.LAST_VERSION = new bn_js_1.BN(1); +SignatureData.DEFAULT_VERSION = new bn_js_1.BN(1); +SignatureData.TYPE_VERUSID_DEFAULT = new bn_js_1.BN(1); diff --git a/dist/pbaas/TokenOutput.d.ts b/dist/pbaas/TokenOutput.d.ts new file mode 100644 index 00000000..efcb5984 --- /dev/null +++ b/dist/pbaas/TokenOutput.d.ts @@ -0,0 +1,23 @@ +import { CurrencyValueMap } from './CurrencyValueMap'; +import { BigNumber } from '../utils/types/BigNumber'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +export declare const TOKEN_OUTPUT_VERSION_INVALID: import("bn.js"); +export declare const TOKEN_OUTPUT_VERSION_CURRENT: import("bn.js"); +export declare const TOKEN_OUTPUT_VERSION_FIRSTVALID: import("bn.js"); +export declare const TOKEN_OUTPUT_VERSION_LASTVALID: import("bn.js"); +export declare const TOKEN_OUTPUT_VERSION_MULTIVALUE: import("bn.js"); +export declare class TokenOutput implements SerializableEntity { + version: BigNumber; + reserve_values: CurrencyValueMap; + constructor(data?: { + values?: CurrencyValueMap; + version?: BigNumber; + }); + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + firstCurrency(): any; + firstValue(): any; + getVersion(): import("bn.js"); + isValid(): boolean; +} diff --git a/dist/pbaas/TokenOutput.js b/dist/pbaas/TokenOutput.js new file mode 100644 index 00000000..91257527 --- /dev/null +++ b/dist/pbaas/TokenOutput.js @@ -0,0 +1,63 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TokenOutput = exports.TOKEN_OUTPUT_VERSION_MULTIVALUE = exports.TOKEN_OUTPUT_VERSION_LASTVALID = exports.TOKEN_OUTPUT_VERSION_FIRSTVALID = exports.TOKEN_OUTPUT_VERSION_CURRENT = exports.TOKEN_OUTPUT_VERSION_INVALID = void 0; +const CurrencyValueMap_1 = require("./CurrencyValueMap"); +const varint_1 = require("../utils/varint"); +const bufferutils_1 = require("../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +exports.TOKEN_OUTPUT_VERSION_INVALID = new bn_js_1.BN(0, 10); +exports.TOKEN_OUTPUT_VERSION_CURRENT = new bn_js_1.BN(1, 10); +exports.TOKEN_OUTPUT_VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); +exports.TOKEN_OUTPUT_VERSION_LASTVALID = new bn_js_1.BN(1, 10); +exports.TOKEN_OUTPUT_VERSION_MULTIVALUE = new bn_js_1.BN('80000000', 16); +class TokenOutput { + constructor(data) { + this.version = exports.TOKEN_OUTPUT_VERSION_INVALID; + this.reserve_values = new CurrencyValueMap_1.CurrencyValueMap(); + if (data != null) { + if (data.values != null) + this.reserve_values = data.values; + if (data.version != null) + this.version = data.version; + } + } + getByteLength() { + return varint_1.default.encodingLength(this.version) + this.reserve_values.getByteLength(); + } + toBuffer() { + const multivalue = !!(this.version.and(exports.TOKEN_OUTPUT_VERSION_MULTIVALUE).toNumber()); + if (multivalue) { + this.reserve_values.multivalue = true; + } + const serializedSize = this.getByteLength(); + const writer = new BufferWriter(Buffer.alloc(serializedSize)); + writer.writeVarInt(this.version); + writer.writeSlice(this.reserve_values.toBuffer()); + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.version = reader.readVarInt(); + const multivalue = !!(this.version.and(exports.TOKEN_OUTPUT_VERSION_MULTIVALUE).toNumber()); + this.reserve_values = new CurrencyValueMap_1.CurrencyValueMap({ multivalue }); + reader.offset = this.reserve_values.fromBuffer(reader.buffer, reader.offset); + return reader.offset; + } + firstCurrency() { + const iterator = this.reserve_values.value_map.entries().next(); + return iterator.done ? null : iterator.value[0]; + } + firstValue() { + const iterator = this.reserve_values.value_map.entries().next(); + return iterator.done ? null : iterator.value[1]; + } + getVersion() { + return this.version; + } + isValid() { + return (this.version.gte(exports.TOKEN_OUTPUT_VERSION_FIRSTVALID) && + this.version.lte(exports.TOKEN_OUTPUT_VERSION_LASTVALID)); + } +} +exports.TokenOutput = TokenOutput; diff --git a/dist/pbaas/TransferDestination.d.ts b/dist/pbaas/TransferDestination.d.ts new file mode 100644 index 00000000..ab3b5520 --- /dev/null +++ b/dist/pbaas/TransferDestination.d.ts @@ -0,0 +1,56 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +export declare const DEST_INVALID: import("bn.js"); +export declare const DEST_PK: import("bn.js"); +export declare const DEST_PKH: import("bn.js"); +export declare const DEST_SH: import("bn.js"); +export declare const DEST_ID: import("bn.js"); +export declare const DEST_FULLID: import("bn.js"); +export declare const DEST_REGISTERCURRENCY: import("bn.js"); +export declare const DEST_QUANTUM: import("bn.js"); +export declare const DEST_NESTEDTRANSFER: import("bn.js"); +export declare const DEST_ETH: import("bn.js"); +export declare const DEST_ETHNFT: import("bn.js"); +export declare const DEST_RAW: import("bn.js"); +export declare const LAST_VALID_TYPE_NO_FLAGS: import("bn.js"); +export declare const FLAG_DEST_AUX: import("bn.js"); +export declare const FLAG_DEST_GATEWAY: import("bn.js"); +export declare const FLAG_MASK: import("bn.js"); +export type TransferDestinationJson = { + type: number; + address: string; + gateway?: string; + gatewaycode?: string; + fees?: string; + auxdests?: Array; +}; +export declare class TransferDestination implements SerializableEntity { + type: BigNumber; + destination_bytes: Buffer; + gateway_id: string; + gateway_code: string; + fees: BigNumber; + aux_dests: Array; + constructor(data?: { + type?: BigNumber; + destination_bytes?: Buffer; + gateway_id?: string; + gateway_code?: string; + fees?: BigNumber; + aux_dests?: Array; + }); + isGateway(): boolean; + hasAuxDests(): boolean; + isIAddr(): boolean; + isPKH(): boolean; + isETHAccount(): boolean; + typeNoFlags(): import("bn.js"); + getAddressString(): string; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + static fromJson(data: TransferDestinationJson): TransferDestination; + toJson(): TransferDestinationJson; + isValid(): boolean; + getAuxDest(destNum: any): TransferDestination; +} diff --git a/dist/pbaas/TransferDestination.js b/dist/pbaas/TransferDestination.js new file mode 100644 index 00000000..b797c3b9 --- /dev/null +++ b/dist/pbaas/TransferDestination.js @@ -0,0 +1,239 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TransferDestination = exports.FLAG_MASK = exports.FLAG_DEST_GATEWAY = exports.FLAG_DEST_AUX = exports.LAST_VALID_TYPE_NO_FLAGS = exports.DEST_RAW = exports.DEST_ETHNFT = exports.DEST_ETH = exports.DEST_NESTEDTRANSFER = exports.DEST_QUANTUM = exports.DEST_REGISTERCURRENCY = exports.DEST_FULLID = exports.DEST_ID = exports.DEST_SH = exports.DEST_PKH = exports.DEST_PK = exports.DEST_INVALID = void 0; +const bufferutils_1 = require("../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const varuint_1 = require("../utils/varuint"); +const address_1 = require("../utils/address"); +const vdxf_1 = require("../constants/vdxf"); +const numberConversion_1 = require("../utils/numberConversion"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +exports.DEST_INVALID = new bn_js_1.BN(0, 10); +exports.DEST_PK = new bn_js_1.BN(1, 10); +exports.DEST_PKH = new bn_js_1.BN(2, 10); +exports.DEST_SH = new bn_js_1.BN(3, 10); +exports.DEST_ID = new bn_js_1.BN(4, 10); +exports.DEST_FULLID = new bn_js_1.BN(5, 10); +exports.DEST_REGISTERCURRENCY = new bn_js_1.BN(6, 10); +exports.DEST_QUANTUM = new bn_js_1.BN(7, 10); +exports.DEST_NESTEDTRANSFER = new bn_js_1.BN(8, 10); // used to chain transfers, enabling them to be routed through multiple systems +exports.DEST_ETH = new bn_js_1.BN(9, 10); +exports.DEST_ETHNFT = new bn_js_1.BN(10, 10); // used when defining a mapped NFT to gateway that uses an ETH compatible model +exports.DEST_RAW = new bn_js_1.BN(11, 10); +exports.LAST_VALID_TYPE_NO_FLAGS = exports.DEST_RAW; +exports.FLAG_DEST_AUX = new bn_js_1.BN(64, 10); +exports.FLAG_DEST_GATEWAY = new bn_js_1.BN(128, 10); +exports.FLAG_MASK = exports.FLAG_DEST_AUX.add(exports.FLAG_DEST_GATEWAY); +class TransferDestination { + constructor(data) { + this.type = exports.DEST_INVALID; + this.destination_bytes = Buffer.alloc(0); + this.gateway_id = null; + this.gateway_code = null; + this.fees = new bn_js_1.BN(0, 10); + this.aux_dests = []; + if (data != null) { + if (data.type != null) + this.type = data.type; + if (data.destination_bytes != null) + this.destination_bytes = data.destination_bytes; + if (data.gateway_id != null) + this.gateway_id = data.gateway_id; + if (data.gateway_code != null) + this.gateway_code = data.gateway_code; + if (data.fees != null) + this.fees = data.fees; + if (data.aux_dests != null) + this.aux_dests = data.aux_dests; + } + } + isGateway() { + return !!(this.type.and(exports.FLAG_DEST_GATEWAY).toNumber()); + } + hasAuxDests() { + return !!(this.type.and(exports.FLAG_DEST_AUX).toNumber()); + } + isIAddr() { + return this.typeNoFlags().eq(exports.DEST_ID); + } + isPKH() { + return this.typeNoFlags().eq(exports.DEST_PKH); + } + isETHAccount() { + return this.typeNoFlags().eq(exports.DEST_ETH); + } + typeNoFlags() { + return this.type.and(exports.FLAG_MASK.notn(exports.FLAG_MASK.bitLength())); + } + getAddressString() { + if (this.isPKH()) { + return (0, address_1.toBase58Check)(this.destination_bytes, vdxf_1.R_ADDR_VERSION); + } + else if (this.isIAddr()) { + return (0, address_1.toBase58Check)(this.destination_bytes, vdxf_1.I_ADDR_VERSION); + } + else if (this.isETHAccount()) { + return "0x" + this.destination_bytes.toString('hex'); + } + else { + throw new Error("Cannot get address for unsupported transfer destination type."); + } + } + getByteLength() { + let length = 0; + length += 1; // type + length += varuint_1.default.encodingLength(this.destination_bytes.length); // destination_bytes compact size + length += this.destination_bytes.length; // destination_bytes + if (this.isGateway()) { + length += (0, address_1.fromBase58Check)(this.gateway_id).hash.length; // gateway_id + if (this.gateway_code) { + length += (0, address_1.fromBase58Check)(this.gateway_code).hash.length; // gateway_code + } + else { + length += vdxf_1.HASH160_BYTE_LENGTH; + } + length += 8; // fees int64 + } + if (this.hasAuxDests()) { + length += varuint_1.default.encodingLength(this.aux_dests.length); // aux dests compact size + for (const dest of this.aux_dests) { + const destLength = dest.getByteLength(); + length += varuint_1.default.encodingLength(destLength); // one aux dest compact size + length += destLength; // one aux dest compact size + } + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeUInt8(this.type.toNumber()); + writer.writeVarSlice(this.destination_bytes); + if (this.isGateway()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.gateway_id).hash); + if (this.gateway_code) { + writer.writeSlice((0, address_1.fromBase58Check)(this.gateway_code).hash); + } + else { + writer.writeSlice(Buffer.alloc(vdxf_1.HASH160_BYTE_LENGTH)); + } + writer.writeInt64(this.fees); + } + if (this.hasAuxDests()) { + writer.writeCompactSize(this.aux_dests.length); + this.aux_dests.forEach((aux_dest) => writer.writeVarSlice(aux_dest.toBuffer())); + } + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.type = new bn_js_1.BN(reader.readUInt8(), 10); + this.destination_bytes = reader.readVarSlice(); + if (this.isGateway()) { + this.gateway_id = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + this.gateway_code = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + this.fees = reader.readInt64(); + } + if (this.hasAuxDests()) { + const numAuxDests = reader.readCompactSize(); + for (let i = 0; i < numAuxDests; i++) { + const newAuxDest = new TransferDestination(); + newAuxDest.fromBuffer(reader.readVarSlice()); + this.aux_dests.push(newAuxDest); + } + } + return reader.offset; + } + static fromJson(data) { + const type = new bn_js_1.BN(data.type); + let destination = null; + switch (type.and(exports.FLAG_MASK.notn(exports.FLAG_MASK.bitLength())).toString()) { + case exports.DEST_PKH.toString(): + case exports.DEST_SH.toString(): + case exports.DEST_ID.toString(): + case exports.DEST_QUANTUM.toString(): + destination = (0, address_1.decodeDestination)(data.address); + break; + case exports.DEST_ETH.toString(): + destination = (0, address_1.decodeEthDestination)(data.address); + break; + default: + throw new Error("Unknown destination type: " + type + "\nNote: Only DEST_PKH, DEST_SH, DEST_ID, DEST_QUANTUM and DEST_ETH are supported for now."); + } + let auxDests = []; + let fees = null; + if (type.and(exports.FLAG_DEST_AUX).gt(new bn_js_1.BN(0)) && data.auxdests.length > 0) { + auxDests = data.auxdests.map(x => TransferDestination.fromJson(x)); + } + if (type.and(exports.FLAG_DEST_GATEWAY).gt(new bn_js_1.BN(0)) && data.fees) { + fees = (0, numberConversion_1.decimalToBn)(data.fees); + } + return new TransferDestination({ + type: type, + destination_bytes: destination, + gateway_code: data.gatewaycode, + fees: fees, + aux_dests: auxDests + }); + } + toJson() { + let destVal = { + type: this.type.toNumber(), + address: '' + }; + switch (this.typeNoFlags().toString()) { + case exports.DEST_PKH.toString(): + case exports.DEST_SH.toString(): + case exports.DEST_ID.toString(): + case exports.DEST_QUANTUM.toString(): + case exports.DEST_ETH.toString(): + destVal.address = this.getAddressString(); + break; + default: + throw new Error("Unknown destination type: " + this.typeNoFlags() + "\nNote: Only DEST_PKH, DEST_SH, DEST_ID, DEST_QUANTUM and DEST_ETH are supported for now."); + } + if (this.hasAuxDests()) { + destVal.auxdests = this.aux_dests.map(auxDest => auxDest.toJson()); + } + if (this.isGateway()) { + destVal.gateway = this.gateway_id; + } + return destVal; + } + isValid() { + // verify aux dests + let valid = (((this.type.and(exports.FLAG_DEST_AUX).gt(new bn_js_1.BN(0))) && this.aux_dests.length > 0) || (!(this.type.and(exports.FLAG_DEST_AUX).gt(new bn_js_1.BN(0))) && !(this.aux_dests.length > 0))); + if (valid && this.aux_dests && this.aux_dests.length > 0) { + for (let i = 0; i < this.aux_dests.length; i++) { + if (!this.getAuxDest(i).isValid()) { + valid = false; + break; + } + } + } + return !!(valid && + !this.typeNoFlags().eq(exports.DEST_INVALID) && + this.typeNoFlags().lte(exports.LAST_VALID_TYPE_NO_FLAGS) && + (((this.type.and(exports.FLAG_DEST_GATEWAY).eq(new bn_js_1.BN(0))) && (this.gateway_id == null)) || this.gateway_id != null)); + } + getAuxDest(destNum) { + const retVal = this.aux_dests[destNum]; + if (destNum >= 0 && destNum < this.aux_dests.length) { + if (retVal.type.and(exports.FLAG_DEST_AUX).gt(new bn_js_1.BN(0)) || retVal.aux_dests.length > 0) { + retVal.type = exports.DEST_INVALID; + } + // no gateways or flags, only simple destinations work + switch (retVal.type.toString()) { + case exports.DEST_ID.toString(): + case exports.DEST_PK.toString(): + case exports.DEST_PKH.toString(): + case exports.DEST_ETH.toString(): + case exports.DEST_SH.toString(): + break; + default: + retVal.type = exports.DEST_INVALID; + } + } + return retVal; + } +} +exports.TransferDestination = TransferDestination; diff --git a/dist/pbaas/TxDestination.d.ts b/dist/pbaas/TxDestination.d.ts new file mode 100644 index 00000000..486febb1 --- /dev/null +++ b/dist/pbaas/TxDestination.d.ts @@ -0,0 +1,32 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { IdentityID } from './IdentityID'; +import { KeyID } from './KeyID'; +import { NoDestination } from './NoDestination'; +import { PubKey } from './PubKey'; +import { UnknownID } from './UnknownID'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +export interface TxDestinationVariantInterface { + new (hash?: Buffer): TxDestinationVariant; +} +export type TxDestinationVariant = IdentityID | KeyID | NoDestination | PubKey | UnknownID; +export declare class TxDestination implements SerializableEntity { + type: BigNumber; + data: TxDestinationVariant; + static TYPE_INVALID: import("bn.js"); + static TYPE_PK: import("bn.js"); + static TYPE_PKH: import("bn.js"); + static TYPE_SH: import("bn.js"); + static TYPE_ID: import("bn.js"); + static TYPE_INDEX: import("bn.js"); + static TYPE_QUANTUM: import("bn.js"); + static TYPE_LAST: import("bn.js"); + constructor(data?: TxDestinationVariant, type?: BigNumber); + static getTxDestinationVariantType(variant: TxDestinationVariant): BigNumber; + static getTxDestinationVariant(type: BigNumber): TxDestinationVariantInterface; + toAddress(): string; + getByteLength(): number; + fromBuffer(buffer: Buffer, offset?: number): number; + toBuffer(): Buffer; + static fromChunk(chunk: Buffer): TxDestination; + toChunk(): Buffer; +} diff --git a/dist/pbaas/TxDestination.js b/dist/pbaas/TxDestination.js new file mode 100644 index 00000000..829ff435 --- /dev/null +++ b/dist/pbaas/TxDestination.js @@ -0,0 +1,110 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TxDestination = void 0; +const bn_js_1 = require("bn.js"); +const IdentityID_1 = require("./IdentityID"); +const KeyID_1 = require("./KeyID"); +const NoDestination_1 = require("./NoDestination"); +const varuint_1 = require("../utils/varuint"); +const bufferutils_1 = require("../utils/bufferutils"); +const PubKey_1 = require("./PubKey"); +const UnknownID_1 = require("./UnknownID"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class TxDestination { + constructor(data = new NoDestination_1.NoDestination(), type) { + this.data = data; + if (!type) { + this.type = TxDestination.getTxDestinationVariantType(data); + } + else + this.type = type; + } + static getTxDestinationVariantType(variant) { + if (variant instanceof PubKey_1.PubKey) + return TxDestination.TYPE_PK; + else if (variant instanceof KeyID_1.KeyID) + return TxDestination.TYPE_PKH; + else if (variant instanceof IdentityID_1.IdentityID) + return TxDestination.TYPE_ID; + else + return TxDestination.TYPE_INVALID; + } + static getTxDestinationVariant(type) { + if (type.eq(this.TYPE_PK)) + return PubKey_1.PubKey; + else if (type.eq(this.TYPE_PKH)) + return KeyID_1.KeyID; + else if (type.eq(this.TYPE_ID)) + return IdentityID_1.IdentityID; + else + return UnknownID_1.UnknownID; + } + toAddress() { + if (this.data instanceof IdentityID_1.IdentityID || this.data instanceof KeyID_1.KeyID) + return this.data.toAddress(); + else + throw new Error("Can't get address for TxDestination type " + this.type.toNumber()); + } + getByteLength() { + if (this.type.eq(TxDestination.TYPE_PKH)) + return 21; + else if (this.type.eq(TxDestination.TYPE_PK)) + return 34; + else { + const datalen = this.data.getByteLength() + 1; + return varuint_1.default.encodingLength(datalen) + datalen; + } + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + const destBytes = reader.readVarSlice(); + if (destBytes.length === 20) { + this.type = TxDestination.TYPE_PKH; + this.data = new KeyID_1.KeyID(destBytes); + } + else if (destBytes.length === 33) { + this.type = TxDestination.TYPE_PK; + this.data = new KeyID_1.KeyID(destBytes); + } + else { + const subReader = new BufferReader(destBytes, 0); + this.type = new bn_js_1.BN(subReader.readUInt8(), 10); + const DestVariant = TxDestination.getTxDestinationVariant(this.type); + this.data = new DestVariant(subReader.readSlice(destBytes.length - subReader.offset)); + } + return reader.offset; + } + toBuffer() { + const buffer = Buffer.alloc(this.getByteLength()); + const writer = new BufferWriter(buffer); + if (this.type.eq(TxDestination.TYPE_PKH) || this.type.eq(TxDestination.TYPE_PK)) { + writer.writeVarSlice(this.data.toBuffer()); + } + else { + const subWriter = new BufferWriter(Buffer.alloc(1 + this.data.getByteLength())); + subWriter.writeUInt8(this.type.toNumber()); + subWriter.writeSlice(this.data.toBuffer()); + writer.writeVarSlice(subWriter.buffer); + } + return writer.buffer; + } + static fromChunk(chunk) { + const writer = new BufferWriter(Buffer.alloc(varuint_1.default.encodingLength(chunk.length))); + writer.writeCompactSize(chunk.length); + const dest = new TxDestination(); + dest.fromBuffer(Buffer.concat([writer.buffer, chunk])); + return dest; + } + toChunk() { + return Buffer.from(this.toBuffer().subarray(varuint_1.default.encodingLength(this.data.toBuffer().length))); + } +} +exports.TxDestination = TxDestination; +TxDestination.TYPE_INVALID = new bn_js_1.BN(0, 10); +TxDestination.TYPE_PK = new bn_js_1.BN(1, 10); +TxDestination.TYPE_PKH = new bn_js_1.BN(2, 10); +TxDestination.TYPE_SH = new bn_js_1.BN(3, 10); +TxDestination.TYPE_ID = new bn_js_1.BN(4, 10); +TxDestination.TYPE_INDEX = new bn_js_1.BN(5, 10); +TxDestination.TYPE_QUANTUM = new bn_js_1.BN(6, 10); +TxDestination.TYPE_LAST = new bn_js_1.BN(6, 10); diff --git a/dist/pbaas/URLRef.d.ts b/dist/pbaas/URLRef.d.ts new file mode 100644 index 00000000..eeafa93a --- /dev/null +++ b/dist/pbaas/URLRef.d.ts @@ -0,0 +1,36 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +export interface URLRefJson { + version: string; + flags?: string; + datahash?: string; + url: string; +} +export declare class URLRef implements SerializableEntity { + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static HASHDATA_VERSION: import("bn.js"); + static DEFAULT_VERSION: import("bn.js"); + static FLAG_HAS_HASH: import("bn.js"); + version: BigNumber; + flags: BigNumber; + data_hash: Buffer; + url: string; + constructor(data?: { + version?: BigNumber; + url?: string; + flags?: BigNumber; + data_hash?: Buffer; + }); + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + isValid(): boolean; + toJson(): { + version: number; + flags: number; + datahash: string; + url: string; + }; + static fromJson(data: URLRefJson): URLRef; +} diff --git a/dist/pbaas/URLRef.js b/dist/pbaas/URLRef.js new file mode 100644 index 00000000..8b4d5723 --- /dev/null +++ b/dist/pbaas/URLRef.js @@ -0,0 +1,93 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.URLRef = void 0; +const varint_1 = require("../utils/varint"); +const varuint_1 = require("../utils/varuint"); +const bufferutils_1 = require("../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const vdxf_1 = require("../constants/vdxf"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class URLRef { + constructor(data) { + if (data) { + this.version = data.version || new bn_js_1.BN(2, 10); + this.url = data.url || ""; + this.flags = data.flags || new bn_js_1.BN(0); + this.data_hash = data.data_hash || Buffer.alloc(0); + } + } + getByteLength() { + let byteLength = 0; + byteLength += varint_1.default.encodingLength(this.version); + if (this.version.gte(URLRef.HASHDATA_VERSION)) { + // If the version is at least HASHDATA_VERSION, we include the URL length + // as a varuint before the URL itself. + byteLength += varint_1.default.encodingLength(this.flags); + if (this.flags.and(URLRef.FLAG_HAS_HASH).eq(URLRef.FLAG_HAS_HASH)) { + // If the FLAG_HAS_HASH is set, we include the data hash + byteLength += vdxf_1.HASH256_BYTE_LENGTH; // 32 bytes for the hash + } + } + byteLength += varuint_1.default.encodingLength(Buffer.from(this.url, 'utf8').length); + byteLength += Buffer.from(this.url, 'utf8').length; + if (byteLength > 4096) + throw new Error("URLRef exceeds maximum length of 4096 bytes"); + return byteLength; + } + toBuffer() { + const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); + bufferWriter.writeVarInt(this.version); + if (this.version.gte(URLRef.HASHDATA_VERSION)) { + // If the version is at least HASHDATA_VERSION, we include the URL length + // as a varuint before the URL itself. + bufferWriter.writeVarInt(this.flags); + if (this.flags.and(URLRef.FLAG_HAS_HASH).eq(URLRef.FLAG_HAS_HASH)) { + // If the FLAG_HAS_HASH is set, we include the data hash + bufferWriter.writeSlice(this.data_hash); + } + } + bufferWriter.writeVarSlice(Buffer.from(this.url, 'utf8')); + return bufferWriter.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.version = reader.readVarInt(); + if (this.version.gte(URLRef.HASHDATA_VERSION)) { + // If the version is at least HASHDATA_VERSION, we read the flags + this.flags = reader.readVarInt(); + if (this.flags.and(URLRef.FLAG_HAS_HASH).eq(URLRef.FLAG_HAS_HASH)) { + // If the FLAG_HAS_HASH is set, we read the data hash + this.data_hash = reader.readSlice(32); + } + } + this.url = reader.readVarSlice().toString('utf8'); + return reader.offset; + } + isValid() { + return this.version.gte(URLRef.FIRST_VERSION) && + this.version.lte(URLRef.LAST_VERSION) && + this.url.length > 0; + } + toJson() { + return { + version: this.version.toNumber(), + flags: this.flags ? this.flags.toNumber() : 0, + datahash: this.data_hash ? this.data_hash.toString('hex') : "", + url: this.url + }; + } + static fromJson(data) { + return new URLRef({ + version: new bn_js_1.BN(data.version, 10), + flags: data.flags ? new bn_js_1.BN(data.flags, 10) : new bn_js_1.BN(0, 10), + data_hash: data.datahash ? Buffer.from(data.datahash, 'hex') : Buffer.alloc(0), + url: data.url + }); + } +} +exports.URLRef = URLRef; +URLRef.FIRST_VERSION = new bn_js_1.BN(1); +URLRef.LAST_VERSION = new bn_js_1.BN(2); +URLRef.HASHDATA_VERSION = new bn_js_1.BN(2); +URLRef.DEFAULT_VERSION = new bn_js_1.BN(2); +URLRef.FLAG_HAS_HASH = new bn_js_1.BN(1); diff --git a/dist/pbaas/UTXORef.d.ts b/dist/pbaas/UTXORef.d.ts new file mode 100644 index 00000000..2e38e53f --- /dev/null +++ b/dist/pbaas/UTXORef.d.ts @@ -0,0 +1,22 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +export declare class UTXORef implements SerializableEntity { + hash: Buffer; + n: BigNumber; + constructor(data?: { + hash?: Buffer; + n?: BigNumber; + }); + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + isValid(): boolean; + toJson(): { + txid: string; + voutnum: number; + }; + static fromJson(data: { + txid: string; + voutnum: string; + }): UTXORef; +} diff --git a/dist/pbaas/UTXORef.js b/dist/pbaas/UTXORef.js new file mode 100644 index 00000000..88e3b585 --- /dev/null +++ b/dist/pbaas/UTXORef.js @@ -0,0 +1,47 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UTXORef = void 0; +const bufferutils_1 = require("../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const vdxf_1 = require("../constants/vdxf"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class UTXORef { + constructor(data) { + this.hash = (data === null || data === void 0 ? void 0 : data.hash) || Buffer.alloc(0); + this.n = (data === null || data === void 0 ? void 0 : data.n) || new bn_js_1.BN(0); + } + getByteLength() { + let byteLength = 0; + byteLength += vdxf_1.HASH256_BYTE_LENGTH; // hash uint256 + byteLength += 4; // n uint32 + return byteLength; + } + toBuffer() { + const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); + bufferWriter.writeSlice(this.hash); + bufferWriter.writeUInt32(this.n.toNumber()); + return bufferWriter.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.hash = reader.readSlice(32); + this.n = new bn_js_1.BN(reader.readUInt32()); + return reader.offset; + } + isValid() { + return this.n.lt(new bn_js_1.BN(0xffffffff)); + } + toJson() { + return { + txid: Buffer.from(this.hash).reverse().toString('hex'), + voutnum: this.n.toNumber() + }; + } + static fromJson(data) { + return new UTXORef({ + hash: Buffer.from(data.txid, 'hex').reverse(), + n: new bn_js_1.BN(data.voutnum, 10) + }); + } +} +exports.UTXORef = UTXORef; diff --git a/dist/pbaas/UnknownID.d.ts b/dist/pbaas/UnknownID.d.ts new file mode 100644 index 00000000..f812d035 --- /dev/null +++ b/dist/pbaas/UnknownID.d.ts @@ -0,0 +1,8 @@ +import { SerializableEntity } from "../utils/types/SerializableEntity"; +export declare class UnknownID implements SerializableEntity { + bytes: Buffer; + constructor(bytes?: Buffer); + getByteLength(): number; + fromBuffer(buffer: Buffer, offset?: number, length?: number): number; + toBuffer(): Buffer; +} diff --git a/dist/pbaas/UnknownID.js b/dist/pbaas/UnknownID.js new file mode 100644 index 00000000..5ead6298 --- /dev/null +++ b/dist/pbaas/UnknownID.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UnknownID = void 0; +const bufferutils_1 = require("../utils/bufferutils"); +class UnknownID { + constructor(bytes = Buffer.alloc(0)) { + this.bytes = bytes; + } + getByteLength() { + return this.bytes.length; + } + fromBuffer(buffer, offset, length = 0) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + this.bytes = reader.readSlice(length); + return reader.offset; + } + toBuffer() { + const buffer = Buffer.alloc(this.getByteLength()); + const writer = new bufferutils_1.default.BufferWriter(buffer); + writer.writeSlice(this.bytes); + return writer.buffer; + } +} +exports.UnknownID = UnknownID; diff --git a/dist/pbaas/VdxfUniValue.d.ts b/dist/pbaas/VdxfUniValue.d.ts new file mode 100644 index 00000000..4f20296a --- /dev/null +++ b/dist/pbaas/VdxfUniValue.d.ts @@ -0,0 +1,42 @@ +import { BigNumber } from '../utils/types/BigNumber'; +import { SerializableEntity } from '../utils/types/SerializableEntity'; +import { CurrencyValueMap } from './CurrencyValueMap'; +import { Rating, RatingJson } from './Rating'; +import { TransferDestination, TransferDestinationJson } from './TransferDestination'; +import { ContentMultiMapRemove, ContentMultiMapRemoveJson } from './ContentMultiMapRemove'; +import { CrossChainDataRef, CrossChainDataRefJson } from './CrossChainDataRef'; +import { SignatureData, SignatureJsonDataInterface } from './SignatureData'; +import { DataDescriptor, DataDescriptorJson } from './DataDescriptor'; +import { MMRDescriptor, MMRDescriptorJson } from './MMRDescriptor'; +import { Credential } from './Credential'; +import { URLRef } from './URLRef'; +import { IdentityMultimapRef } from './IdentityMultimapRef'; +export declare const VDXF_UNI_VALUE_VERSION_INVALID: import("bn.js"); +export declare const VDXF_UNI_VALUE_VERSION_CURRENT: import("bn.js"); +export type VdxfUniType = string | Buffer | BigNumber | CurrencyValueMap | Rating | TransferDestination | ContentMultiMapRemove | CrossChainDataRef | SignatureData | DataDescriptor | MMRDescriptor | URLRef | IdentityMultimapRef | Credential; +export interface VdxfUniValueInterface { + [key: string]: string | number | RatingJson | TransferDestinationJson | ContentMultiMapRemoveJson | CrossChainDataRefJson | SignatureJsonDataInterface | DataDescriptorJson | MMRDescriptorJson | VdxfUniValueInterface; + serializedhex?: string; + serializedbase64?: string; + message?: string; +} +export type VdxfUniValueJson = string | VdxfUniValueInterface; +export type VdxfUniValueJsonArray = Array; +export type JsonSerializableObject = CurrencyValueMap | Rating | TransferDestination | ContentMultiMapRemove | CrossChainDataRef | SignatureData | DataDescriptor | MMRDescriptor | Credential; +export declare class VdxfUniValue implements SerializableEntity { + values: Array<{ + [key: string]: VdxfUniType; + }>; + version: BigNumber; + constructor(data?: { + values: Array<{ + [key: string]: VdxfUniType; + }>; + version?: BigNumber; + }); + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + static fromJson(obj: any): VdxfUniValue; + toJson(): VdxfUniValueJsonArray | VdxfUniValueJson; +} diff --git a/dist/pbaas/VdxfUniValue.js b/dist/pbaas/VdxfUniValue.js new file mode 100644 index 00000000..feb8f8a7 --- /dev/null +++ b/dist/pbaas/VdxfUniValue.js @@ -0,0 +1,604 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VdxfUniValue = exports.VDXF_UNI_VALUE_VERSION_CURRENT = exports.VDXF_UNI_VALUE_VERSION_INVALID = void 0; +const varuint_1 = require("../utils/varuint"); +const bufferutils_1 = require("../utils/bufferutils"); +const address_1 = require("../utils/address"); +const vdxf_1 = require("../constants/vdxf"); +const bn_js_1 = require("bn.js"); +const varint_1 = require("../utils/varint"); +const string_1 = require("../utils/string"); +const CurrencyValueMap_1 = require("./CurrencyValueMap"); +const Rating_1 = require("./Rating"); +const TransferDestination_1 = require("./TransferDestination"); +const ContentMultiMapRemove_1 = require("./ContentMultiMapRemove"); +const CrossChainDataRef_1 = require("./CrossChainDataRef"); +const SignatureData_1 = require("./SignatureData"); +const DataDescriptor_1 = require("./DataDescriptor"); +const MMRDescriptor_1 = require("./MMRDescriptor"); +const Credential_1 = require("./Credential"); +const VDXF_Data = require("../vdxf/vdxfdatakeys"); +exports.VDXF_UNI_VALUE_VERSION_INVALID = new bn_js_1.BN(0, 10); +exports.VDXF_UNI_VALUE_VERSION_CURRENT = new bn_js_1.BN(1, 10); +const { BufferWriter, BufferReader } = bufferutils_1.default; +; +// This UniValue class was adapted from C++ code for encoding JSON objects into bytes. It is not serialization and +// therefore doesn't have a fromBuffer function, as you can't reliably decode it, only encode. +class VdxfUniValue { + constructor(data) { + if (data === null || data === void 0 ? void 0 : data.values) + this.values = data.values; + if (data === null || data === void 0 ? void 0 : data.version) + this.version = data.version; + else + this.version = exports.VDXF_UNI_VALUE_VERSION_CURRENT; + } + getByteLength() { + let length = 0; + for (const inner of this.values) { + const key = Object.keys(inner)[0]; + const value = inner[key]; + // if we just have serialized data + if (key === "") { + length += Buffer.from(value, "hex").length; + continue; + } + if (key == VDXF_Data.DataByteKey.vdxfid) { + length += 1; + continue; + } + else if ((key == VDXF_Data.DataUint16Key.vdxfid) || (key == VDXF_Data.DataInt16Key.vdxfid)) { + length += 2; + continue; + } + else if ((key == VDXF_Data.DataInt32Key.vdxfid) || (key == VDXF_Data.DataUint32Key.vdxfid)) { + length += 4; + continue; + } + else if (key == VDXF_Data.DataInt64Key.vdxfid) { + length += 8; + continue; + } + else if (key == VDXF_Data.DataUint160Key.vdxfid) { + length += vdxf_1.HASH160_BYTE_LENGTH; + continue; + } + else if (key == VDXF_Data.DataUint256Key.vdxfid) { + length += vdxf_1.HASH256_BYTE_LENGTH; + continue; + } + length += vdxf_1.HASH160_BYTE_LENGTH; + function totalStreamLength(bufLen) { + const encodeStreamLen = varuint_1.default.encodingLength(bufLen + varuint_1.default.encodingLength(bufLen)); + return bufLen + encodeStreamLen; + } + if (key == VDXF_Data.DataStringKey.vdxfid) { + const valBuf = Buffer.from(value, "utf-8"); + length += varint_1.default.encodingLength(new bn_js_1.BN(1)); + // NOTE: 3 is from ss type + ver + vdxfIdVersion + length += varuint_1.default.encodingLength(valBuf.length); + length += totalStreamLength(valBuf.length); + } + else if (key == VDXF_Data.DataByteVectorKey.vdxfid) { + const valBuf = Buffer.from(value, "hex"); + length += varint_1.default.encodingLength(new bn_js_1.BN(1)); + length += varuint_1.default.encodingLength(valBuf.length); + length += totalStreamLength(valBuf.length); + } + else if (key == VDXF_Data.DataCurrencyMapKey.vdxfid) { + const oneCurMap = new CurrencyValueMap_1.CurrencyValueMap(Object.assign(Object.assign({}, value), { multivalue: true })); + length += varint_1.default.encodingLength(new bn_js_1.BN(1)); + length += totalStreamLength(oneCurMap.getByteLength()); + } + else if (key == VDXF_Data.DataRatingsKey.vdxfid) { + const oneRatingMap = new Rating_1.Rating(value); + length += varint_1.default.encodingLength(oneRatingMap.version); + length += totalStreamLength(oneRatingMap.getByteLength()); + } + else if (key == VDXF_Data.CredentialKey.vdxfid) { + const oneCredential = new Credential_1.Credential(value); + length += varint_1.default.encodingLength(oneCredential.version); + length += totalStreamLength(oneCredential.getByteLength()); + } + else if (key == VDXF_Data.DataTransferDestinationKey.vdxfid) { + const transferDest = new TransferDestination_1.TransferDestination(value); + length += varint_1.default.encodingLength(transferDest.typeNoFlags()); + length += totalStreamLength(transferDest.getByteLength()); + } + else if (key == VDXF_Data.ContentMultiMapRemoveKey.vdxfid) { + const multiRemove = new ContentMultiMapRemove_1.ContentMultiMapRemove(value); + length += varint_1.default.encodingLength(multiRemove.version); + length += totalStreamLength(multiRemove.getByteLength()); + } + else if (key == VDXF_Data.CrossChainDataRefKey.vdxfid) { + const crossCh = value; + length += varint_1.default.encodingLength(vdxf_1.VDXF_OBJECT_DEFAULT_VERSION); + length += totalStreamLength(crossCh.getByteLength()); + } + else if (key == VDXF_Data.DataDescriptorKey.vdxfid) { + const descr = new DataDescriptor_1.DataDescriptor(value); + length += varint_1.default.encodingLength(descr.version); + length += totalStreamLength(descr.getByteLength()); + } + else if (key == VDXF_Data.MMRDescriptorKey.vdxfid) { + const descr = new MMRDescriptor_1.MMRDescriptor(value); + length += varint_1.default.encodingLength(descr.version); + length += totalStreamLength(descr.getByteLength()); + } + else if (key == VDXF_Data.SignatureDataKey.vdxfid) { + const sigData = new SignatureData_1.SignatureData(value); + length += varint_1.default.encodingLength(sigData.version); + length += totalStreamLength(sigData.getByteLength()); + } + else { + throw new Error("contentmap invalid or unrecognized vdxfkey for object type: " + key); + } + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + for (const inner of this.values) { + const key = Object.keys(inner)[0]; + const value = inner[key]; + if (key === "") { + writer.writeSlice(value); + continue; + } + if (key == VDXF_Data.DataByteKey.vdxfid) { + const oneByte = Buffer.from(value, "hex"); + if (oneByte.length != 1) { + throw new Error("contentmap: byte data must be exactly one byte"); + } + writer.writeSlice(oneByte); + } + else if (key == VDXF_Data.DataInt16Key.vdxfid) { + const oneShort = Buffer.alloc(2); + oneShort.writeInt16LE(value.toNumber()); + writer.writeSlice(oneShort); + } + else if (key == VDXF_Data.DataUint16Key.vdxfid) { + const oneUShort = Buffer.alloc(2); + oneUShort.writeUInt16LE(value.toNumber()); + writer.writeSlice(oneUShort); + } + else if (key == VDXF_Data.DataInt32Key.vdxfid) { + const oneInt = Buffer.alloc(4); + oneInt.writeInt32LE(value.toNumber()); + writer.writeSlice(oneInt); + } + else if (key == VDXF_Data.DataUint32Key.vdxfid) { + const oneUInt = Buffer.alloc(4); + oneUInt.writeUInt32LE(value.toNumber()); + writer.writeSlice(oneUInt); + } + else if (key == VDXF_Data.DataInt64Key.vdxfid) { + const oneInt64 = Buffer.alloc(8); + oneInt64.writeBigInt64LE(BigInt(value.toString())); + writer.writeSlice(oneInt64); + } + else if (key == VDXF_Data.DataUint160Key.vdxfid) { + const oneKey = (0, address_1.fromBase58Check)(value).hash; + writer.writeSlice(oneKey); + } + else if (key == VDXF_Data.DataUint256Key.vdxfid) { + const oneHash = Buffer.from(value, "hex"); + if (oneHash.length != vdxf_1.HASH256_BYTE_LENGTH) { + throw new Error("contentmap: hash data must be exactly 32 bytes"); + } + writer.writeVarSlice(oneHash.reverse()); + } + else if (key == VDXF_Data.DataStringKey.vdxfid) { + const valBuf = Buffer.from(value, "utf-8"); + writer.writeSlice((0, address_1.fromBase58Check)(key).hash); + writer.writeVarInt(new bn_js_1.BN(1)); + writer.writeCompactSize(valBuf.length + varuint_1.default.encodingLength(valBuf.length)); + writer.writeVarSlice(valBuf); + } + else if (key == VDXF_Data.DataByteVectorKey.vdxfid) { + const valBuf = Buffer.from(value, "hex"); + writer.writeSlice((0, address_1.fromBase58Check)(key).hash); + writer.writeVarInt(new bn_js_1.BN(1)); + writer.writeCompactSize(varuint_1.default.encodingLength(valBuf.length) + valBuf.length); + writer.writeVarSlice(valBuf); + } + else if (key == VDXF_Data.DataCurrencyMapKey.vdxfid) { + const oneCurMap = new CurrencyValueMap_1.CurrencyValueMap(Object.assign(Object.assign({}, value), { multivalue: true })); + writer.writeSlice((0, address_1.fromBase58Check)(key).hash); + writer.writeVarInt(new bn_js_1.BN(1)); + writer.writeCompactSize(oneCurMap.getByteLength()); + writer.writeSlice(oneCurMap.toBuffer()); + } + else if (key == VDXF_Data.DataRatingsKey.vdxfid) { + const oneRatingMap = new Rating_1.Rating(value); + writer.writeSlice((0, address_1.fromBase58Check)(key).hash); + writer.writeVarInt(oneRatingMap.version); + writer.writeCompactSize(oneRatingMap.getByteLength()); + writer.writeSlice(oneRatingMap.toBuffer()); + } + else if (key == VDXF_Data.CredentialKey.vdxfid) { + const oneCredential = value; + writer.writeSlice((0, address_1.fromBase58Check)(key).hash); + writer.writeVarInt(oneCredential.version); + writer.writeCompactSize(oneCredential.getByteLength()); + writer.writeSlice(oneCredential.toBuffer()); + } + else if (key == VDXF_Data.DataTransferDestinationKey.vdxfid) { + const transferDest = new TransferDestination_1.TransferDestination(value); + writer.writeSlice((0, address_1.fromBase58Check)(key).hash); + writer.writeVarInt(transferDest.typeNoFlags()); + writer.writeCompactSize(transferDest.getByteLength()); + writer.writeSlice(transferDest.toBuffer()); + } + else if (key == VDXF_Data.ContentMultiMapRemoveKey.vdxfid) { + const transferDest = new ContentMultiMapRemove_1.ContentMultiMapRemove(value); + writer.writeSlice((0, address_1.fromBase58Check)(key).hash); + writer.writeVarInt(transferDest.version); + writer.writeCompactSize(transferDest.getByteLength()); + writer.writeSlice(transferDest.toBuffer()); + } + else if (key == VDXF_Data.CrossChainDataRefKey.vdxfid) { + const transferDest = value; + writer.writeSlice((0, address_1.fromBase58Check)(key).hash); + writer.writeVarInt(vdxf_1.VDXF_OBJECT_DEFAULT_VERSION); + writer.writeCompactSize(transferDest.getByteLength()); + writer.writeSlice(transferDest.toBuffer()); + } + else if (key == VDXF_Data.DataDescriptorKey.vdxfid) { + const descr = new DataDescriptor_1.DataDescriptor(value); + writer.writeSlice((0, address_1.fromBase58Check)(key).hash); + writer.writeVarInt(descr.version); + writer.writeCompactSize(descr.getByteLength()); + writer.writeSlice(descr.toBuffer()); + } + else if (key == VDXF_Data.MMRDescriptorKey.vdxfid) { + const descr = new MMRDescriptor_1.MMRDescriptor(value); + writer.writeSlice((0, address_1.fromBase58Check)(key).hash); + writer.writeVarInt(descr.version); + writer.writeCompactSize(descr.getByteLength()); + writer.writeSlice(descr.toBuffer()); + } + else if (key == VDXF_Data.SignatureDataKey.vdxfid) { + const sigData = new SignatureData_1.SignatureData(value); + writer.writeSlice((0, address_1.fromBase58Check)(key).hash); + writer.writeVarInt(sigData.version); + writer.writeCompactSize(sigData.getByteLength()); + writer.writeSlice(sigData.toBuffer()); + } + else { + throw new Error("contentmap invalid or unrecognized vdxfkey for object type: " + key); + } + } + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.values = []; + let bytesLeft = reader.buffer.length - reader.offset; + while (bytesLeft > vdxf_1.HASH160_BYTE_LENGTH) // size of uint160 + { + let pSuccess = { value: false }; + let objectUni; + const initialOffset = reader.offset; + try { + let checkVal; + let version = new bn_js_1.BN(0); + let objSize = 0; + checkVal = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + if (checkVal == VDXF_Data.DataCurrencyMapKey.vdxfid) { + const oneCurrencyMap = new CurrencyValueMap_1.CurrencyValueMap({ multivalue: true }); + version = reader.readVarInt(); + objSize = reader.readCompactSize(); + reader.offset = oneCurrencyMap.fromBuffer(reader.buffer, reader.offset); + if (oneCurrencyMap.isValid()) { + objectUni = { key: checkVal, value: oneCurrencyMap }; + } + } + else if (checkVal == VDXF_Data.DataRatingsKey.vdxfid) { + const oneRatingObj = new Rating_1.Rating(); + version = reader.readVarInt(); + objSize = reader.readCompactSize(); + reader.offset = oneRatingObj.fromBuffer(reader.buffer, reader.offset); + if (oneRatingObj.isValid()) { + objectUni = { key: checkVal, value: oneRatingObj }; + } + } + else if (checkVal == VDXF_Data.CredentialKey.vdxfid) { + const credentialObj = new Credential_1.Credential(); + version = reader.readVarInt(); + objSize = reader.readCompactSize(); + reader.offset = credentialObj.fromBuffer(reader.buffer, reader.offset); + if (credentialObj.isValid()) { + objectUni = { key: checkVal, value: credentialObj }; + } + } + else if (checkVal == VDXF_Data.DataTransferDestinationKey.vdxfid) { + const oneTransferDest = new TransferDestination_1.TransferDestination(); + version = reader.readVarInt(); + objSize = reader.readCompactSize(); + reader.offset = oneTransferDest.fromBuffer(reader.buffer, reader.offset); + if (oneTransferDest.isValid()) { + objectUni = { key: checkVal, value: oneTransferDest }; + } + } + else if (checkVal == VDXF_Data.ContentMultiMapRemoveKey.vdxfid) { + const contentMap = new ContentMultiMapRemove_1.ContentMultiMapRemove(); + version = reader.readVarInt(); + objSize = reader.readCompactSize(); + reader.offset = contentMap.fromBuffer(reader.buffer, reader.offset); + if (contentMap.isValid()) { + objectUni = { key: checkVal, value: contentMap }; + } + } + else if (checkVal == VDXF_Data.DataStringKey.vdxfid) { + let stringVal; + version = reader.readVarInt(); + objSize = reader.readCompactSize(); + stringVal = reader.readVarSlice().toString('utf8'); + objectUni = { key: checkVal, value: stringVal }; + } + else if (checkVal == VDXF_Data.DataByteVectorKey.vdxfid) { + let vecVal; + version = reader.readVarInt(); + objSize = reader.readCompactSize(); + vecVal = reader.readVarSlice(); + objectUni = { key: checkVal, value: vecVal.toString('hex') }; + } + else if (checkVal == VDXF_Data.CrossChainDataRefKey.vdxfid) { + const dataRef = new CrossChainDataRef_1.CrossChainDataRef(); + version = reader.readVarInt(); + objSize = reader.readCompactSize(); + reader.offset = dataRef.fromBuffer(reader.buffer, reader.offset); + if (dataRef.isValid()) { + objectUni = { key: checkVal, value: dataRef }; + } + } + else if (checkVal == VDXF_Data.DataDescriptorKey.vdxfid) { + const dataDescriptor = new DataDescriptor_1.DataDescriptor(); + version = reader.readVarInt(); + objSize = reader.readCompactSize(); + reader.offset = dataDescriptor.fromBuffer(reader.buffer, reader.offset); + if (dataDescriptor.isValid()) { + objectUni = { key: checkVal, value: dataDescriptor }; + } + } + else if (checkVal == VDXF_Data.MMRDescriptorKey.vdxfid) { + const mmrDescriptor = new MMRDescriptor_1.MMRDescriptor(); + version = reader.readVarInt(); + objSize = reader.readCompactSize(); + reader.offset = mmrDescriptor.fromBuffer(reader.buffer, reader.offset); + if (mmrDescriptor.isValid()) { + objectUni = { key: checkVal, value: mmrDescriptor }; + } + } + else if (checkVal == VDXF_Data.SignatureDataKey.vdxfid) { + const sigData = new SignatureData_1.SignatureData(); + version = reader.readVarInt(); + objSize = reader.readCompactSize(); + reader.offset = sigData.fromBuffer(reader.buffer, reader.offset); + if (sigData.isValid()) { + objectUni = { key: checkVal, value: sigData }; + } + } + // if we have an object that we recognized, encode it + if (objectUni && objectUni.key && objectUni.value) { + if (pSuccess != null) { + pSuccess.value = true; + } + } + else { + if (pSuccess != null) { + pSuccess.value = false; + } + } + } + catch (e) { + if (pSuccess != null) { + pSuccess.value = false; + } + } + bytesLeft = reader.buffer.length - reader.offset; + if ((pSuccess === null || pSuccess === void 0 ? void 0 : pSuccess.value) && (pSuccess === null || pSuccess === void 0 ? void 0 : pSuccess.value)) { + this.values.push({ [objectUni.key]: objectUni.value }); + } + else { + // add the remaining data as a hex string + reader.offset = initialOffset; + this.values.push({ [""]: reader.readSlice(reader.buffer.length - reader.offset) }); + bytesLeft = 0; + break; + } + } + if (bytesLeft && bytesLeft <= vdxf_1.HASH160_BYTE_LENGTH) { + this.values.push({ [""]: reader.readSlice(bytesLeft) }); + } + return reader.offset; + } + static fromJson(obj) { + const arrayItem = new Array; + if (!Array.isArray(obj)) { + if (typeof (obj) != 'object') { + if (typeof (obj) != 'string') + throw new Error('Not JSON string as expected'); + if ((0, string_1.isHexString)(obj)) { + arrayItem.push({ [""]: Buffer.from(obj, "hex") }); + return new VdxfUniValue({ + values: arrayItem + }); + } + arrayItem.push({ [""]: Buffer.from(obj, "utf-8") }); + return new VdxfUniValue({ + values: arrayItem + }); + } + if (obj.serializedhex) { + if (!(0, string_1.isHexString)(obj.serializedhex)) { + throw new Error("contentmap: If the \"serializedhex\" key is present, it's data must be only valid hex and complete"); + } + arrayItem.push({ [""]: Buffer.from(obj.serializedhex, "hex") }); + return new VdxfUniValue({ + values: arrayItem + }); + } + if (obj.serializedbase64) { + try { + arrayItem.push({ [""]: Buffer.from(obj.serializedbase64, "base64") }); + return new VdxfUniValue({ + values: arrayItem + }); + } + catch (e) { + throw new Error("contentmap: If the \"serializedbase64\" key is present, it's data must be only valid base64 and complete"); + } + } + if (obj.message) { + arrayItem.push({ [""]: Buffer.from(obj.message, "utf-8") }); + return new VdxfUniValue({ + values: arrayItem + }); + } + } + if (!Array.isArray(obj)) { + obj = [obj]; + } + // this should be an object with "vdxfkey" as the key and {object} as the json object to serialize + for (let i = 0; i < obj.length; i++) { + if (typeof (obj[i]) != 'object') { + if (typeof (obj[i]) != 'string') + throw new Error('Not JSON string as expected'); + if ((0, string_1.isHexString)(obj[i])) { + arrayItem.push({ [""]: Buffer.from(obj[i], "hex") }); + continue; + } + arrayItem.push({ [""]: Buffer.from(obj[i], "utf-8") }); + continue; + } + const oneValKeys = Object.keys(obj[i]); + const oneValValues = Object.values(obj[i]); + for (let k = 0; k < oneValKeys.length; k++) { + const objTypeKey = oneValKeys[k]; + if (objTypeKey == VDXF_Data.DataByteKey.vdxfid) { + const oneByte = Buffer.from(oneValValues[k], "hex"); + if (oneByte.length != 1) { + throw new Error("contentmap: byte data must be exactly one byte"); + } + arrayItem.push({ [objTypeKey]: oneByte }); + } + else if (objTypeKey == VDXF_Data.DataInt16Key.vdxfid) { + const oneShort = Buffer.alloc(2); + oneShort.writeInt16LE(oneValValues[k]); + arrayItem.push({ [objTypeKey]: oneShort }); + } + else if (objTypeKey == VDXF_Data.DataUint16Key.vdxfid) { + const oneUShort = Buffer.alloc(2); + oneUShort.writeUInt16LE(oneValValues[k]); + arrayItem.push({ [objTypeKey]: oneUShort }); + } + else if (objTypeKey == VDXF_Data.DataInt32Key.vdxfid) { + const oneInt = Buffer.alloc(4); + oneInt.writeInt32LE(oneValValues[k]); + arrayItem.push({ [objTypeKey]: oneInt }); + } + else if (objTypeKey == VDXF_Data.DataUint32Key.vdxfid) { + const oneUInt = Buffer.alloc(4); + oneUInt.writeUInt32LE(oneValValues[k]); + arrayItem.push({ [objTypeKey]: oneUInt }); + } + else if (objTypeKey == VDXF_Data.DataInt64Key.vdxfid) { + const oneInt64 = Buffer.alloc(8); + oneInt64.writeIntLE(oneValValues[k], 0, 8); + arrayItem.push({ [objTypeKey]: oneInt64 }); + } + else if (objTypeKey == VDXF_Data.DataUint160Key.vdxfid) { + (0, address_1.fromBase58Check)(oneValValues[k]).hash; + arrayItem.push({ [objTypeKey]: oneValValues[k] }); + } + else if (objTypeKey == VDXF_Data.DataUint256Key.vdxfid) { + const oneHash = Buffer.from(oneValValues[k], "hex"); + if (oneHash.length != vdxf_1.HASH256_BYTE_LENGTH) { + throw new Error("contentmap: hash data must be exactly 32 bytes"); + } + arrayItem.push({ [objTypeKey]: oneHash }); + } + else if (objTypeKey == VDXF_Data.DataStringKey.vdxfid) { + arrayItem.push({ [objTypeKey]: oneValValues[k] }); + } + else if (objTypeKey == VDXF_Data.DataByteVectorKey.vdxfid) { + if (!(0, string_1.isHexString)(oneValValues[k])) { + throw new Error("contentmap: bytevector data must be valid hex"); + } + arrayItem.push({ [objTypeKey]: Buffer.from(oneValValues[k], "hex") }); + } + else if (objTypeKey == VDXF_Data.DataCurrencyMapKey.vdxfid) { + const oneCurMap = CurrencyValueMap_1.CurrencyValueMap.fromJson(oneValValues[k], true); + arrayItem.push({ [objTypeKey]: oneCurMap }); + } + else if (objTypeKey == VDXF_Data.DataRatingsKey.vdxfid) { + const oneRatingMap = Rating_1.Rating.fromJson(oneValValues[k]); + arrayItem.push({ [objTypeKey]: oneRatingMap }); + } + else if (objTypeKey == VDXF_Data.DataTransferDestinationKey.vdxfid) { + const transferDest = TransferDestination_1.TransferDestination.fromJson(oneValValues[k]); + arrayItem.push({ [objTypeKey]: transferDest }); + } + else if (objTypeKey == VDXF_Data.ContentMultiMapRemoveKey.vdxfid) { + const content = ContentMultiMapRemove_1.ContentMultiMapRemove.fromJson(oneValValues[k]); + arrayItem.push({ [objTypeKey]: content }); + } + else if (objTypeKey == VDXF_Data.CrossChainDataRefKey.vdxfid) { + const crossChainRefKey = CrossChainDataRef_1.CrossChainDataRef.fromJson(oneValValues[k]); + arrayItem.push({ [objTypeKey]: crossChainRefKey }); + } + else if (objTypeKey == VDXF_Data.DataDescriptorKey.vdxfid) { + const descriptor = DataDescriptor_1.DataDescriptor.fromJson(oneValValues[k]); + arrayItem.push({ [objTypeKey]: descriptor }); + } + else if (objTypeKey == VDXF_Data.MMRDescriptorKey.vdxfid) { + const mmrDescriptor = MMRDescriptor_1.MMRDescriptor.fromJson(oneValValues[k]); + arrayItem.push({ [objTypeKey]: mmrDescriptor }); + } + else if (objTypeKey == VDXF_Data.SignatureDataKey.vdxfid) { + const sigData = SignatureData_1.SignatureData.fromJson(oneValValues[k]); + arrayItem.push({ [objTypeKey]: sigData }); + } + else if (objTypeKey == VDXF_Data.CredentialKey.vdxfid) { + const oneCredential = Credential_1.Credential.fromJson(oneValValues[k]); + arrayItem.push({ [objTypeKey]: oneCredential }); + } + else { + throw new Error("Unknown vdxfkey: " + oneValValues[k]); + } + } + } + return new VdxfUniValue({ + values: arrayItem + }); + } + toJson() { + let ret = []; + for (const inner of this.values) { + const key = Object.keys(inner)[0]; + const value = inner[key]; + if (key === "" && Buffer.isBuffer(value)) { + ret.push(value.toString('hex')); + } + else if (Buffer.isBuffer(value)) { + ret.push({ [key]: value.toString('hex') }); + } + else if (typeof (value) === 'string') { + ret.push({ [key]: value }); + } + else if (value instanceof bn_js_1.BN) { + ret.push({ [key]: value.toString(10) }); + } + else { + ret.push({ [key]: value.toJson() }); + } + } + if (ret && ret.length == 1) { + return ret[0]; + } + return ret; + } +} +exports.VdxfUniValue = VdxfUniValue; diff --git a/dist/pbaas/index.d.ts b/dist/pbaas/index.d.ts new file mode 100644 index 00000000..e3c1ae60 --- /dev/null +++ b/dist/pbaas/index.d.ts @@ -0,0 +1,33 @@ +export * from './Credential'; +export * from './CurrencyValueMap'; +export * from './Identity'; +export * from './ReserveTransfer'; +export * from './TokenOutput'; +export * from './TransferDestination'; +export * from './OptCCParams'; +export * from './ContentMultiMap'; +export * from './IdentityID'; +export * from './KeyID'; +export * from './NoDestination'; +export * from './Principal'; +export * from './PubKey'; +export * from './ReserveTransfer'; +export * from './SaplingPaymentAddress'; +export * from './TxDestination'; +export * from './UnknownID'; +export * from './VdxfUniValue'; +export * from './transaction/VerusScript'; +export * from './transaction/SmartTransactionScript'; +export * from './transaction/IdentityScript'; +export * from './ContentMultiMapRemove'; +export * from './CrossChainDataRef'; +export * from './DataDescriptor'; +export * from './IdentityMultimapRef'; +export * from './MMRDescriptor'; +export * from './Rating'; +export * from './SaltedData'; +export * from './SignatureData'; +export * from './URLRef'; +export * from './UTXORef'; +export * from './DefinedKey'; +export * from './MMR'; diff --git a/dist/pbaas/index.js b/dist/pbaas/index.js new file mode 100644 index 00000000..a2abc1be --- /dev/null +++ b/dist/pbaas/index.js @@ -0,0 +1,49 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +__exportStar(require("./Credential"), exports); +__exportStar(require("./CurrencyValueMap"), exports); +__exportStar(require("./Identity"), exports); +__exportStar(require("./ReserveTransfer"), exports); +__exportStar(require("./TokenOutput"), exports); +__exportStar(require("./TransferDestination"), exports); +__exportStar(require("./OptCCParams"), exports); +__exportStar(require("./ContentMultiMap"), exports); +__exportStar(require("./IdentityID"), exports); +__exportStar(require("./KeyID"), exports); +__exportStar(require("./NoDestination"), exports); +__exportStar(require("./Principal"), exports); +__exportStar(require("./PubKey"), exports); +__exportStar(require("./ReserveTransfer"), exports); +__exportStar(require("./SaplingPaymentAddress"), exports); +__exportStar(require("./TxDestination"), exports); +__exportStar(require("./UnknownID"), exports); +__exportStar(require("./VdxfUniValue"), exports); +__exportStar(require("./transaction/VerusScript"), exports); +__exportStar(require("./transaction/SmartTransactionScript"), exports); +__exportStar(require("./transaction/IdentityScript"), exports); +__exportStar(require("./ContentMultiMapRemove"), exports); +__exportStar(require("./CrossChainDataRef"), exports); +__exportStar(require("./DataDescriptor"), exports); +__exportStar(require("./IdentityMultimapRef"), exports); +__exportStar(require("./MMRDescriptor"), exports); +__exportStar(require("./Rating"), exports); +__exportStar(require("./SaltedData"), exports); +__exportStar(require("./SignatureData"), exports); +__exportStar(require("./URLRef"), exports); +__exportStar(require("./UTXORef"), exports); +__exportStar(require("./DefinedKey"), exports); +__exportStar(require("./MMR"), exports); diff --git a/dist/pbaas/transaction/IdentityScript.d.ts b/dist/pbaas/transaction/IdentityScript.d.ts new file mode 100644 index 00000000..b7ffb10d --- /dev/null +++ b/dist/pbaas/transaction/IdentityScript.d.ts @@ -0,0 +1,9 @@ +import { SerializableEntity } from "../../utils/types/SerializableEntity"; +import { Identity } from "../Identity"; +import { OptCCParams } from "../OptCCParams"; +import { SmartTransactionScript } from "./SmartTransactionScript"; +export declare class IdentityScript extends SmartTransactionScript implements SerializableEntity { + constructor(master?: OptCCParams, params?: OptCCParams); + static fromIdentity(identity: Identity): IdentityScript; + getIdentity(parseVdxfObjects?: boolean): Identity; +} diff --git a/dist/pbaas/transaction/IdentityScript.js b/dist/pbaas/transaction/IdentityScript.js new file mode 100644 index 00000000..89288faf --- /dev/null +++ b/dist/pbaas/transaction/IdentityScript.js @@ -0,0 +1,93 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IdentityScript = void 0; +const bn_js_1 = require("bn.js"); +const Identity_1 = require("../Identity"); +const OptCCParams_1 = require("../OptCCParams"); +const SmartTransactionScript_1 = require("./SmartTransactionScript"); +const evals_1 = require("../../utils/evals"); +const TxDestination_1 = require("../TxDestination"); +const IdentityID_1 = require("../IdentityID"); +const cccustom_1 = require("../../utils/cccustom"); +const KeyID_1 = require("../KeyID"); +class IdentityScript extends SmartTransactionScript_1.SmartTransactionScript { + constructor(master, params) { + super(master, params); + } + static fromIdentity(identity) { + if (identity.version.lt(Identity_1.Identity.VERSION_CURRENT)) { + throw new Error("Cannot generate script for outdated identity version"); + } + const identityAddress = identity.getIdentityAddress(); + const destinationsMaster = identity.isRevoked() ? [ + new TxDestination_1.TxDestination(IdentityID_1.IdentityID.fromAddress(identityAddress)), + new TxDestination_1.TxDestination(identity.recovery_authority) + ] : [ + new TxDestination_1.TxDestination(IdentityID_1.IdentityID.fromAddress(identityAddress)), + new TxDestination_1.TxDestination(identity.revocation_authority), + new TxDestination_1.TxDestination(identity.recovery_authority) + ]; + const destinationsRecovery = [ + new TxDestination_1.TxDestination(identity.recovery_authority) + ]; + if (identity.hasTokenizedIdControl()) { + const addrDestination = new TxDestination_1.TxDestination(KeyID_1.KeyID.fromAddress(cccustom_1.IDENTITY_RECOVER_ADDR)); + destinationsRecovery.push(addrDestination); + } + const master = new OptCCParams_1.OptCCParams({ + version: Identity_1.Identity.VERSION_CURRENT, + eval_code: new bn_js_1.BN(evals_1.EVALS.EVAL_NONE), + m: new bn_js_1.BN(1), + n: new bn_js_1.BN(destinationsMaster.length), + destinations: destinationsMaster, + vdata: [] + }); + const params = new OptCCParams_1.OptCCParams({ + version: Identity_1.Identity.VERSION_CURRENT, + eval_code: new bn_js_1.BN(evals_1.EVALS.EVAL_IDENTITY_PRIMARY), + m: new bn_js_1.BN(1), + n: new bn_js_1.BN(1), + destinations: [ + new TxDestination_1.TxDestination(IdentityID_1.IdentityID.fromAddress(identityAddress)) + ], + vdata: identity.isRevoked() ? [ + identity.toBuffer(), + new OptCCParams_1.OptCCParams({ + version: Identity_1.Identity.VERSION_CURRENT, + eval_code: new bn_js_1.BN(evals_1.EVALS.EVAL_IDENTITY_RECOVER), + m: new bn_js_1.BN(1), + n: new bn_js_1.BN(destinationsRecovery.length), + destinations: destinationsRecovery, + vdata: [] + }).toChunk() + ] : [ + identity.toBuffer(), + new OptCCParams_1.OptCCParams({ + version: Identity_1.Identity.VERSION_CURRENT, + eval_code: new bn_js_1.BN(evals_1.EVALS.EVAL_IDENTITY_REVOKE), + m: new bn_js_1.BN(1), + n: new bn_js_1.BN(1), + destinations: [ + new TxDestination_1.TxDestination(identity.revocation_authority) + ], + vdata: [] + }).toChunk(), + new OptCCParams_1.OptCCParams({ + version: Identity_1.Identity.VERSION_CURRENT, + eval_code: new bn_js_1.BN(evals_1.EVALS.EVAL_IDENTITY_RECOVER), + m: new bn_js_1.BN(1), + n: new bn_js_1.BN(destinationsRecovery.length), + destinations: destinationsRecovery, + vdata: [] + }).toChunk() + ] + }); + return new IdentityScript(master, params); + } + getIdentity(parseVdxfObjects = false) { + const identity = new Identity_1.Identity(); + identity.fromBuffer(this.params.getParamObject(), 0, parseVdxfObjects); + return identity; + } +} +exports.IdentityScript = IdentityScript; diff --git a/dist/pbaas/transaction/SmartTransactionScript.d.ts b/dist/pbaas/transaction/SmartTransactionScript.d.ts new file mode 100644 index 00000000..4fdb26bd --- /dev/null +++ b/dist/pbaas/transaction/SmartTransactionScript.d.ts @@ -0,0 +1,18 @@ +import { ScriptChunk } from "../../utils/script"; +import { SerializableEntity } from "../../utils/types/SerializableEntity"; +import { OptCCParams } from "../OptCCParams"; +import { VerusScript } from "./VerusScript"; +export declare class SmartTransactionScript extends VerusScript implements SerializableEntity { + protected master: OptCCParams; + protected params: OptCCParams; + constructor(master?: OptCCParams, params?: OptCCParams); + static getChunks(master: OptCCParams, params: OptCCParams): Array; + private updateChunks; + fromBuffer(buffer: Buffer, offset?: number, length?: number): number; + toBuffer(): Buffer; + getByteLength(): number; + set masterOptCC(master: OptCCParams); + set paramsOptCC(params: OptCCParams); + get masterOptCC(): OptCCParams; + get paramsOptCC(): OptCCParams; +} diff --git a/dist/pbaas/transaction/SmartTransactionScript.js b/dist/pbaas/transaction/SmartTransactionScript.js new file mode 100644 index 00000000..eb9b05ac --- /dev/null +++ b/dist/pbaas/transaction/SmartTransactionScript.js @@ -0,0 +1,53 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SmartTransactionScript = void 0; +const ops_1 = require("../../utils/ops"); +const OptCCParams_1 = require("../OptCCParams"); +const VerusScript_1 = require("./VerusScript"); +class SmartTransactionScript extends VerusScript_1.VerusScript { + constructor(master, params) { + super(master == null || params == null ? [] : SmartTransactionScript.getChunks(master, params)); + this.master = master; + this.params = params; + } + static getChunks(master, params) { + return [ + master.toChunk(), + ops_1.OPS.OP_CHECKCRYPTOCONDITION, + params.toChunk(), + ops_1.OPS.OP_DROP + ]; + } + updateChunks() { + this.chunks = SmartTransactionScript.getChunks(this.master, this.params); + } + fromBuffer(buffer, offset, length) { + const _offset = super.fromBuffer(buffer, offset, length); + this.master = OptCCParams_1.OptCCParams.fromChunk(this.chunks[0]); + this.params = OptCCParams_1.OptCCParams.fromChunk(this.chunks[2]); + return _offset; + } + toBuffer() { + this.updateChunks(); + return super.toBuffer(); + } + getByteLength() { + this.updateChunks(); + return super.getByteLength(); + } + set masterOptCC(master) { + this.master = master; + this.updateChunks(); + } + set paramsOptCC(params) { + this.params = params; + this.updateChunks(); + } + get masterOptCC() { + return this.master; + } + get paramsOptCC() { + return this.params; + } +} +exports.SmartTransactionScript = SmartTransactionScript; diff --git a/dist/pbaas/transaction/VerusScript.d.ts b/dist/pbaas/transaction/VerusScript.d.ts new file mode 100644 index 00000000..7ed48b6a --- /dev/null +++ b/dist/pbaas/transaction/VerusScript.d.ts @@ -0,0 +1,10 @@ +import { ScriptChunk } from "../../utils/script"; +import { SerializableEntity } from "../../utils/types/SerializableEntity"; +export declare class VerusScript implements SerializableEntity { + chunks: Array; + constructor(chunks?: Array); + getByteLength(): number; + fromBuffer(buffer: Buffer, offset?: number, length?: number): number; + private internalToBuffer; + toBuffer(): Buffer; +} diff --git a/dist/pbaas/transaction/VerusScript.js b/dist/pbaas/transaction/VerusScript.js new file mode 100644 index 00000000..7e6ff197 --- /dev/null +++ b/dist/pbaas/transaction/VerusScript.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VerusScript = void 0; +const bufferutils_1 = require("../../utils/bufferutils"); +const script_1 = require("../../utils/script"); +class VerusScript { + constructor(chunks = []) { + this.chunks = chunks; + } + getByteLength() { + return this.internalToBuffer().length; + } + fromBuffer(buffer, offset, length) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + const _length = length != null ? length : offset != null ? reader.buffer.length - offset : reader.buffer.length; + this.chunks = (0, script_1.decompile)(reader.readSlice(_length)); + return reader.offset; + } + internalToBuffer() { + return (0, script_1.compile)(this.chunks); + } + toBuffer() { + return this.internalToBuffer(); + } +} +exports.VerusScript = VerusScript; diff --git a/dist/transaction/RawTransaction.d.ts b/dist/transaction/RawTransaction.d.ts new file mode 100644 index 00000000..da5c311d --- /dev/null +++ b/dist/transaction/RawTransaction.d.ts @@ -0,0 +1,21 @@ +import { ApiPrimitive } from "../api/ApiPrimitive"; +export interface RawTransaction { + hex: string; + txid: string; + overwintered: boolean; + version: number; + versiongroupid: string; + locktime: number; + expiryheight: number; + vin: Array; + vout: Array; + vjoinsplit: Array; + valueBalance: number; + vShieldedSpend: Array; + vShieldedOutput: Array; + blockhash: string; + height: number; + confirmations: number; + time: number; + blocktime: number; +} diff --git a/dist/transaction/RawTransaction.js b/dist/transaction/RawTransaction.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/transaction/RawTransaction.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/utils/IdentityData.d.ts b/dist/utils/IdentityData.d.ts new file mode 100644 index 00000000..3bf8838d --- /dev/null +++ b/dist/utils/IdentityData.d.ts @@ -0,0 +1,440 @@ +import * as identitykeys from '../vdxf/identitydatakeys'; +import * as keylist from '../vdxf/keys'; +export declare const getFriendlyNameForVdxfKey: (vdxfkey: string, locale?: string) => any; +export declare const IdentityVdxfidMap: { + [identitykeys.IDENTITY_FIRSTNAME.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_LASTNAME.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_MIDDLENAME.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_GENDER.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_NATIONALITY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_ATTESTOR.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_ATTESTATION_RECIPIENT.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_PHONENUMBER.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_DATEOFBIRTH.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_OVER18.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_OVER21.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_OVER25.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_EMAIL.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_HOMEADDRESS.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_HOMEADDRESS_STREET1.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_HOMEADDRESS_STREET2.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_HOMEADDRESS_CITY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_HOMEADDRESS_REGION.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_HOMEADDRESS_POSTCODE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_HOMEADDRESS_COUNTRY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_IDNUMBER_VALUE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_IDNUMBER_TYPE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VERIFICATION_STATUS.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VERIFICATION_APPROVALS_ACCEPTEDTOS.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VERIFICATION_APPROVALS_VERIFIEDSMS.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VERIFICATION_APPROVALS_KYCCHECKED.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VERIFICATION_APPROVALS_DOCUMENTSVERIFIED.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VERIFICATION_APPROVALS_SELFIECHECKED.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VERIFICATION_APPROVALS_WATCHLISTOK.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VERIFICATION_APPROVALS_RISKCHECKOK.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_DRIVINGLICENCE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_DRIVINGLICENCE_ORIGINALFRONT.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_DRIVINGLICENCE_ORIGINALBACK.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_DRIVINGLICENCE_CROPPEDFRONT.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_DRIVINGLICENCE_CROPPEDBACK.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_DRIVINGLICENCE_FACE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_DRIVINGLICENCE_IDNUMBER.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_DRIVINGLICENCE_CATEGORY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_DRIVINGLICENCE_EXPIRATIONDATE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_DRIVINGLICENCE_ISSUINGCOUNTRY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_DRIVINGLICENCE_ISSUINGREGION.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_DRIVINGLICENCE_DATEOFBIRTH.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_DRIVINGLICENCE_ADDRESS_STREET1.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_DRIVINGLICENCE_ADDRESS_CITY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_DRIVINGLICENCE_ADDRESS_REGION.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_DRIVINGLICENCE_ADDRESS_POSTCODE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_DRIVINGLICENCE_ADDRESS_COUNTRY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_SELFIECHECK_IMAGE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_SELFIECHECK_VIDEO.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VERIFICATION_APPROVALS_RISKCHECKOK.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_EMAIL_ISDELIVERABLE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_EMAIL_BREACHCOUNT.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_EMAIL_FIRSTBREACHEDAT.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_EMAIL_LASTBREACHEDAT.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_EMAIL_DOMAIN_REGISTEREDAT.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_EMAIL_DOMAIN_FREEPROVIDER.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_EMAIL_DOMAIN_CUSTOM.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_EMAIL_DOMAIN_DISPOSABLE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_EMAIL_DOMAIN_TOPLEVEL_SUSPICIOUS.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_IDCARD.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_IDCARD_ORIGINALFRONT.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_IDCARD_ORIGINALBACK.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_IDCARD_CROPPEDFRONT.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_IDCARD_CROPPEDBACK.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_IDCARD_FACE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_IDCARD_IDNUMBER.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_IDCARD_CATEGORY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_IDCARD_EXPIRATIONDATE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_IDCARD_ISSUINGREGION.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_IDCARD_DATEOFBIRTH.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_IDCARD_ADDRESS_STREET1.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_IDCARD_ADDRESS_CITY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_IDCARD_ADDRESS_REGION.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_IDCARD_ADDRESS_POSTCODE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_IDCARD_ADDRESS_COUNTRY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_PASSPORT.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_PASSPORT_ORIGINALFRONT.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_PASSPORT_ORIGINALBACK.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_PASSPORT_CROPPEDFRONT.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_PASSPORT_CROPPEDBACK.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_PASSPORT_FACE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_PASSPORT_IDNUMBER.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_PASSPORT_CATEGORY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_PASSPORT_EXPIRATIONDATE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_PASSPORT_DATEOFBIRTH.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_PASSPORT_ADDRESS_STREET1.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_PASSPORT_ADDRESS_CITY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_PASSPORT_ADDRESS_REGION.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_PASSPORT_ADDRESS_POSTCODE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_PASSPORT_ADDRESS_COUNTRY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENCEPERMIT.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENCEPERMIT_ORIGINALFRONT.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENCEPERMIT_ORIGINALBACK.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENCEPERMIT_CROPPEDFRONT.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENCEPERMIT_CROPPEDBACK.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENCEPERMIT_FACE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENCEPERMIT_IDNUMBER.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENCEPERMIT_CATEGORY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENCEPERMIT_EXPIRATIONDATE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENCEPERMIT_ISSUINGREGION.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENCEPERMIT_DATEOFBIRTH.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS_STREET1.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS_CITY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS_REGION.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS_POSTCODE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS_COUNTRY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENTCARD.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENTCARD_ORIGINALFRONT.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENTCARD_ORIGINALBACK.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENTCARD_CROPPEDFRONT.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENTCARD_CROPPEDBACK.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENTCARD_FACE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENTCARD_IDNUMBER.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENTCARD_CATEGORY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENTCARD_EXPIRATIONDATE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENTCARD_ISSUINGREGION.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENTCARD_DATEOFBIRTH.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENTCARD_ADDRESS_STREET1.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENTCARD_ADDRESS_CITY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENTCARD_ADDRESS_REGION.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENTCARD_ADDRESS_POSTCODE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_RESIDENTCARD_ADDRESS_COUNTRY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VISA.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VISA_ORIGINALFRONT.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VISA_ORIGINALBACK.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VISA_CROPPEDFRONT.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VISA_CROPPEDBACK.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VISA_FACE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VISA_IDNUMBER.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VISA_CATEGORY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VISA_EXPIRATIONDATE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VISA_ISSUINGREGION.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VISA_DATEOFBIRTH.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VISA_ADDRESS_STREET1.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VISA_ADDRESS_CITY.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VISA_ADDRESS_REGION.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VISA_ADDRESS_POSTCODE.vdxfid]: { + EN: string; + }; + [identitykeys.IDENTITY_VISA_ADDRESS_COUNTRY.vdxfid]: { + EN: string; + }; + [keylist.ATTESTATION_PROVISION_TYPE.vdxfid]: { + EN: string; + }; + [keylist.ATTESTATION_PROVISION_URL.vdxfid]: { + EN: string; + }; + [keylist.ATTESTATION_VIEW_RESPONSE.vdxfid]: { + EN: string; + }; + [keylist.ATTESTATION_VIEW_REQUEST.vdxfid]: { + EN: string; + }; + [keylist.PROFILE_DATA_VIEW_REQUEST.vdxfid]: { + EN: string; + }; + [keylist.IDENTITY_SIGNDATA_REQUEST.vdxfid]: { + EN: string; + }; +}; diff --git a/dist/utils/IdentityData.js b/dist/utils/IdentityData.js new file mode 100644 index 00000000..68cc9548 --- /dev/null +++ b/dist/utils/IdentityData.js @@ -0,0 +1,165 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IdentityVdxfidMap = exports.getFriendlyNameForVdxfKey = void 0; +const identitykeys = require("../vdxf/identitydatakeys"); +const keylist = require("../vdxf/keys"); +const IMPLEMENTED_LOCALES = ['EN']; +const getFriendlyNameForVdxfKey = (vdxfkey, locale = 'EN') => { + if (!IMPLEMENTED_LOCALES.includes(locale)) { + throw new Error(locale + " is not implemented"); + } + if (vdxfkey in exports.IdentityVdxfidMap[locale]) { + return exports.IdentityVdxfidMap[vdxfkey][locale]; + } + else { + throw new Error("Unknown VDXF key"); + } +}; +exports.getFriendlyNameForVdxfKey = getFriendlyNameForVdxfKey; +exports.IdentityVdxfidMap = { + [identitykeys.IDENTITY_FIRSTNAME.vdxfid]: { EN: "First Name" }, + [identitykeys.IDENTITY_LASTNAME.vdxfid]: { EN: "Last Name" }, + [identitykeys.IDENTITY_MIDDLENAME.vdxfid]: { EN: "Middle Name" }, + [identitykeys.IDENTITY_GENDER.vdxfid]: { EN: "Gender" }, + [identitykeys.IDENTITY_NATIONALITY.vdxfid]: { EN: "Nationality" }, + [identitykeys.IDENTITY_ATTESTOR.vdxfid]: { EN: "Attestor ID" }, + [identitykeys.IDENTITY_ATTESTATION_RECIPIENT.vdxfid]: { EN: "Attestation Recipient" }, + [identitykeys.IDENTITY_PHONENUMBER.vdxfid]: { EN: "Phone Number" }, + [identitykeys.IDENTITY_DATEOFBIRTH.vdxfid]: { EN: "Date of Birth" }, + [identitykeys.IDENTITY_OVER18.vdxfid]: { EN: "Over 18" }, + [identitykeys.IDENTITY_OVER21.vdxfid]: { EN: "Over 21" }, + [identitykeys.IDENTITY_OVER25.vdxfid]: { EN: "Over 25" }, + [identitykeys.IDENTITY_EMAIL.vdxfid]: { EN: "Email Address" }, + [identitykeys.IDENTITY_HOMEADDRESS.vdxfid]: { EN: "Home address" }, + [identitykeys.IDENTITY_HOMEADDRESS_STREET1.vdxfid]: { EN: "Street 1" }, + [identitykeys.IDENTITY_HOMEADDRESS_STREET2.vdxfid]: { EN: "Street 2" }, + [identitykeys.IDENTITY_HOMEADDRESS_CITY.vdxfid]: { EN: "City" }, + [identitykeys.IDENTITY_HOMEADDRESS_REGION.vdxfid]: { EN: "Region" }, + [identitykeys.IDENTITY_HOMEADDRESS_POSTCODE.vdxfid]: { EN: "Post Code" }, + [identitykeys.IDENTITY_HOMEADDRESS_COUNTRY.vdxfid]: { EN: "Country" }, + [identitykeys.IDENTITY_IDNUMBER_VALUE.vdxfid]: { EN: "ID Number" }, + [identitykeys.IDENTITY_IDNUMBER_TYPE.vdxfid]: { EN: "ID Type" }, + [identitykeys.IDENTITY_VERIFICATION_STATUS.vdxfid]: { EN: "Verification Status" }, + [identitykeys.IDENTITY_VERIFICATION_APPROVALS_ACCEPTEDTOS.vdxfid]: { EN: "Accepted Terms and Conditions" }, + [identitykeys.IDENTITY_VERIFICATION_APPROVALS_VERIFIEDSMS.vdxfid]: { EN: "SMS Verified" }, + [identitykeys.IDENTITY_VERIFICATION_APPROVALS_KYCCHECKED.vdxfid]: { EN: "KYC Checked ok" }, + [identitykeys.IDENTITY_VERIFICATION_APPROVALS_DOCUMENTSVERIFIED.vdxfid]: { EN: "Documents Verified" }, + [identitykeys.IDENTITY_VERIFICATION_APPROVALS_SELFIECHECKED.vdxfid]: { EN: "Selfie Checked" }, + [identitykeys.IDENTITY_VERIFICATION_APPROVALS_WATCHLISTOK.vdxfid]: { EN: "Watchlist ok" }, + [identitykeys.IDENTITY_VERIFICATION_APPROVALS_RISKCHECKOK.vdxfid]: { EN: "Riskcheck ok" }, + [identitykeys.IDENTITY_DRIVINGLICENCE.vdxfid]: { EN: "Driving Licence" }, + [identitykeys.IDENTITY_DRIVINGLICENCE_ORIGINALFRONT.vdxfid]: { EN: "Driving Licence Front" }, + [identitykeys.IDENTITY_DRIVINGLICENCE_ORIGINALBACK.vdxfid]: { EN: "Driving Licence Back" }, + [identitykeys.IDENTITY_DRIVINGLICENCE_CROPPEDFRONT.vdxfid]: { EN: "Driving Licence Front" }, + [identitykeys.IDENTITY_DRIVINGLICENCE_CROPPEDBACK.vdxfid]: { EN: "Driving Licence Back" }, + [identitykeys.IDENTITY_DRIVINGLICENCE_FACE.vdxfid]: { EN: "Driving Licence Face" }, + [identitykeys.IDENTITY_DRIVINGLICENCE_IDNUMBER.vdxfid]: { EN: "Driving Licence Number" }, + [identitykeys.IDENTITY_DRIVINGLICENCE_CATEGORY.vdxfid]: { EN: "Driving Licence Catagory" }, + [identitykeys.IDENTITY_DRIVINGLICENCE_EXPIRATIONDATE.vdxfid]: { EN: "Driving Licence expiry date" }, + [identitykeys.IDENTITY_DRIVINGLICENCE_ISSUINGCOUNTRY.vdxfid]: { EN: "Driving Licence issuing country" }, + [identitykeys.IDENTITY_DRIVINGLICENCE_ISSUINGREGION.vdxfid]: { EN: "Driving Licence issuing region" }, + [identitykeys.IDENTITY_DRIVINGLICENCE_DATEOFBIRTH.vdxfid]: { EN: "Driving Licence Date of Birth" }, + [identitykeys.IDENTITY_DRIVINGLICENCE_ADDRESS_STREET1.vdxfid]: { EN: "Driving Licence Street 1" }, + [identitykeys.IDENTITY_DRIVINGLICENCE_ADDRESS_CITY.vdxfid]: { EN: "Driving Licence City" }, + [identitykeys.IDENTITY_DRIVINGLICENCE_ADDRESS_REGION.vdxfid]: { EN: "Driving Licence Region" }, + [identitykeys.IDENTITY_DRIVINGLICENCE_ADDRESS_POSTCODE.vdxfid]: { EN: "Driving Licence ZIP/Post Code" }, + [identitykeys.IDENTITY_DRIVINGLICENCE_ADDRESS_COUNTRY.vdxfid]: { EN: "Driving Licence Country" }, + [identitykeys.IDENTITY_SELFIECHECK_IMAGE.vdxfid]: { EN: "Selfie Check image" }, + [identitykeys.IDENTITY_SELFIECHECK_VIDEO.vdxfid]: { EN: "Selfie Check video" }, + [identitykeys.IDENTITY_VERIFICATION_APPROVALS_RISKCHECKOK.vdxfid]: { EN: "Risk Check Ok" }, + [identitykeys.IDENTITY_EMAIL_ISDELIVERABLE.vdxfid]: { EN: "Email address is deliverable" }, + [identitykeys.IDENTITY_EMAIL_BREACHCOUNT.vdxfid]: { EN: "Email breach count" }, + [identitykeys.IDENTITY_EMAIL_FIRSTBREACHEDAT.vdxfid]: { EN: "Email first breach date" }, + [identitykeys.IDENTITY_EMAIL_LASTBREACHEDAT.vdxfid]: { EN: "Email last breach date" }, + [identitykeys.IDENTITY_EMAIL_DOMAIN_REGISTEREDAT.vdxfid]: { EN: "Email domain registered at" }, + [identitykeys.IDENTITY_EMAIL_DOMAIN_FREEPROVIDER.vdxfid]: { EN: "Email is free provider" }, + [identitykeys.IDENTITY_EMAIL_DOMAIN_CUSTOM.vdxfid]: { EN: "Email Domain is custom" }, + [identitykeys.IDENTITY_EMAIL_DOMAIN_DISPOSABLE.vdxfid]: { EN: "Email Domain Disposable" }, + [identitykeys.IDENTITY_EMAIL_DOMAIN_TOPLEVEL_SUSPICIOUS.vdxfid]: { EN: "Email top level Domain Suspicious" }, + [identitykeys.IDENTITY_IDCARD.vdxfid]: { EN: "ID Card" }, + [identitykeys.IDENTITY_IDCARD_ORIGINALFRONT.vdxfid]: { EN: "ID Card Front" }, + [identitykeys.IDENTITY_IDCARD_ORIGINALBACK.vdxfid]: { EN: "ID Card Back" }, + [identitykeys.IDENTITY_IDCARD_CROPPEDFRONT.vdxfid]: { EN: "ID Card Front" }, + [identitykeys.IDENTITY_IDCARD_CROPPEDBACK.vdxfid]: { EN: "ID Card Back" }, + [identitykeys.IDENTITY_IDCARD_FACE.vdxfid]: { EN: "ID Card Face" }, + [identitykeys.IDENTITY_IDCARD_IDNUMBER.vdxfid]: { EN: "ID Card ID Number" }, + [identitykeys.IDENTITY_IDCARD_CATEGORY.vdxfid]: { EN: "ID Card Category" }, + [identitykeys.IDENTITY_IDCARD_EXPIRATIONDATE.vdxfid]: { EN: "ID Card Expiry date" }, + [identitykeys.IDENTITY_IDCARD_ISSUINGREGION.vdxfid]: { EN: "ID Card Issuing Region" }, + [identitykeys.IDENTITY_IDCARD_DATEOFBIRTH.vdxfid]: { EN: "ID Card Date of Birth" }, + [identitykeys.IDENTITY_IDCARD_ADDRESS_STREET1.vdxfid]: { EN: "ID Card Street 1" }, + [identitykeys.IDENTITY_IDCARD_ADDRESS_CITY.vdxfid]: { EN: "ID Card City" }, + [identitykeys.IDENTITY_IDCARD_ADDRESS_REGION.vdxfid]: { EN: "ID Card Region" }, + [identitykeys.IDENTITY_IDCARD_ADDRESS_POSTCODE.vdxfid]: { EN: "ID Card Zip/Post Code" }, + [identitykeys.IDENTITY_IDCARD_ADDRESS_COUNTRY.vdxfid]: { EN: "ID Card Country" }, + [identitykeys.IDENTITY_PASSPORT.vdxfid]: { EN: "Passport" }, + [identitykeys.IDENTITY_PASSPORT_ORIGINALFRONT.vdxfid]: { EN: "Passport front" }, + [identitykeys.IDENTITY_PASSPORT_ORIGINALBACK.vdxfid]: { EN: "Passport back" }, + [identitykeys.IDENTITY_PASSPORT_CROPPEDFRONT.vdxfid]: { EN: "Passport front" }, + [identitykeys.IDENTITY_PASSPORT_CROPPEDBACK.vdxfid]: { EN: "Passport back" }, + [identitykeys.IDENTITY_PASSPORT_FACE.vdxfid]: { EN: "Passport face" }, + [identitykeys.IDENTITY_PASSPORT_IDNUMBER.vdxfid]: { EN: "Passport ID Number" }, + [identitykeys.IDENTITY_PASSPORT_CATEGORY.vdxfid]: { EN: "Passport Category" }, + [identitykeys.IDENTITY_PASSPORT_EXPIRATIONDATE.vdxfid]: { EN: "Passport expiry date" }, + [identitykeys.IDENTITY_PASSPORT_DATEOFBIRTH.vdxfid]: { EN: "Passport date of birth" }, + [identitykeys.IDENTITY_PASSPORT_ADDRESS_STREET1.vdxfid]: { EN: "Passport street 1" }, + [identitykeys.IDENTITY_PASSPORT_ADDRESS_CITY.vdxfid]: { EN: "Passport city" }, + [identitykeys.IDENTITY_PASSPORT_ADDRESS_REGION.vdxfid]: { EN: "Passport region" }, + [identitykeys.IDENTITY_PASSPORT_ADDRESS_POSTCODE.vdxfid]: { EN: "Passport zip/post code" }, + [identitykeys.IDENTITY_PASSPORT_ADDRESS_COUNTRY.vdxfid]: { EN: "Passport country" }, + [identitykeys.IDENTITY_RESIDENCEPERMIT.vdxfid]: { EN: "Residence Permit" }, + [identitykeys.IDENTITY_RESIDENCEPERMIT_ORIGINALFRONT.vdxfid]: { EN: "Residence Permit front" }, + [identitykeys.IDENTITY_RESIDENCEPERMIT_ORIGINALBACK.vdxfid]: { EN: "Residence Permit back" }, + [identitykeys.IDENTITY_RESIDENCEPERMIT_CROPPEDFRONT.vdxfid]: { EN: "Residence Permit front" }, + [identitykeys.IDENTITY_RESIDENCEPERMIT_CROPPEDBACK.vdxfid]: { EN: "Residence Permit back" }, + [identitykeys.IDENTITY_RESIDENCEPERMIT_FACE.vdxfid]: { EN: "Residence Permit face" }, + [identitykeys.IDENTITY_RESIDENCEPERMIT_IDNUMBER.vdxfid]: { EN: "Residence Permit ID Number" }, + [identitykeys.IDENTITY_RESIDENCEPERMIT_CATEGORY.vdxfid]: { EN: "Residence Permit category" }, + [identitykeys.IDENTITY_RESIDENCEPERMIT_EXPIRATIONDATE.vdxfid]: { EN: "Residence Permit expiry date" }, + [identitykeys.IDENTITY_RESIDENCEPERMIT_ISSUINGREGION.vdxfid]: { EN: "Residence Permit issuing region" }, + [identitykeys.IDENTITY_RESIDENCEPERMIT_DATEOFBIRTH.vdxfid]: { EN: "Residence Permit date of birth" }, + [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS.vdxfid]: { EN: "Residence Permit Address" }, + [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS_STREET1.vdxfid]: { EN: "Residence Permit Street 1" }, + [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS_CITY.vdxfid]: { EN: "Residence Permit City" }, + [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS_REGION.vdxfid]: { EN: "Residence Permit Region" }, + [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS_POSTCODE.vdxfid]: { EN: "Residence Permit Zip/Post code" }, + [identitykeys.IDENTITY_RESIDENCEPERMIT_ADDRESS_COUNTRY.vdxfid]: { EN: "Residence Permit Country" }, + [identitykeys.IDENTITY_RESIDENTCARD.vdxfid]: { EN: "Resident Card" }, + [identitykeys.IDENTITY_RESIDENTCARD_ORIGINALFRONT.vdxfid]: { EN: "Resident Card Front" }, + [identitykeys.IDENTITY_RESIDENTCARD_ORIGINALBACK.vdxfid]: { EN: "Resident Card Back" }, + [identitykeys.IDENTITY_RESIDENTCARD_CROPPEDFRONT.vdxfid]: { EN: "Resident Card Front" }, + [identitykeys.IDENTITY_RESIDENTCARD_CROPPEDBACK.vdxfid]: { EN: "Resident Card Back" }, + [identitykeys.IDENTITY_RESIDENTCARD_FACE.vdxfid]: { EN: "Resident Card Face" }, + [identitykeys.IDENTITY_RESIDENTCARD_IDNUMBER.vdxfid]: { EN: "Resident Card ID Number" }, + [identitykeys.IDENTITY_RESIDENTCARD_CATEGORY.vdxfid]: { EN: "Resident Card Category" }, + [identitykeys.IDENTITY_RESIDENTCARD_EXPIRATIONDATE.vdxfid]: { EN: "Resident Card Expiry Date" }, + [identitykeys.IDENTITY_RESIDENTCARD_ISSUINGREGION.vdxfid]: { EN: "Resident Card Issuing Region" }, + [identitykeys.IDENTITY_RESIDENTCARD_DATEOFBIRTH.vdxfid]: { EN: "Resident Card date of birth" }, + [identitykeys.IDENTITY_RESIDENTCARD_ADDRESS_STREET1.vdxfid]: { EN: "Resident Card Street 1" }, + [identitykeys.IDENTITY_RESIDENTCARD_ADDRESS_CITY.vdxfid]: { EN: "Resident Card City" }, + [identitykeys.IDENTITY_RESIDENTCARD_ADDRESS_REGION.vdxfid]: { EN: "Resident Card Region" }, + [identitykeys.IDENTITY_RESIDENTCARD_ADDRESS_POSTCODE.vdxfid]: { EN: "Resident Card Zip/Post Code" }, + [identitykeys.IDENTITY_RESIDENTCARD_ADDRESS_COUNTRY.vdxfid]: { EN: "Resident Card Country" }, + [identitykeys.IDENTITY_VISA.vdxfid]: { EN: "Visa" }, + [identitykeys.IDENTITY_VISA_ORIGINALFRONT.vdxfid]: { EN: "Visa front" }, + [identitykeys.IDENTITY_VISA_ORIGINALBACK.vdxfid]: { EN: "Visa back" }, + [identitykeys.IDENTITY_VISA_CROPPEDFRONT.vdxfid]: { EN: "Visa front" }, + [identitykeys.IDENTITY_VISA_CROPPEDBACK.vdxfid]: { EN: "Visa back" }, + [identitykeys.IDENTITY_VISA_FACE.vdxfid]: { EN: "Visa face" }, + [identitykeys.IDENTITY_VISA_IDNUMBER.vdxfid]: { EN: "Visa ID Number" }, + [identitykeys.IDENTITY_VISA_CATEGORY.vdxfid]: { EN: "Visa Category" }, + [identitykeys.IDENTITY_VISA_EXPIRATIONDATE.vdxfid]: { EN: "Visa expiry date" }, + [identitykeys.IDENTITY_VISA_ISSUINGREGION.vdxfid]: { EN: "Visa issuing region" }, + [identitykeys.IDENTITY_VISA_DATEOFBIRTH.vdxfid]: { EN: "Visa date of birth" }, + [identitykeys.IDENTITY_VISA_ADDRESS_STREET1.vdxfid]: { EN: "Visa Street 1" }, + [identitykeys.IDENTITY_VISA_ADDRESS_CITY.vdxfid]: { EN: "Visa City" }, + [identitykeys.IDENTITY_VISA_ADDRESS_REGION.vdxfid]: { EN: "Visa Region" }, + [identitykeys.IDENTITY_VISA_ADDRESS_POSTCODE.vdxfid]: { EN: "Visa Zip/Post Code" }, + [identitykeys.IDENTITY_VISA_ADDRESS_COUNTRY.vdxfid]: { EN: "Visa Country" }, + [keylist.ATTESTATION_PROVISION_TYPE.vdxfid]: { EN: "Attestation Type" }, + [keylist.ATTESTATION_PROVISION_URL.vdxfid]: { EN: "Attestation URL" }, + [keylist.ATTESTATION_VIEW_RESPONSE.vdxfid]: { EN: "Attestation View Response" }, + [keylist.ATTESTATION_VIEW_REQUEST.vdxfid]: { EN: "Attestation View Response" }, + [keylist.PROFILE_DATA_VIEW_REQUEST.vdxfid]: { EN: "Profile Data View Request" }, + [keylist.IDENTITY_SIGNDATA_REQUEST.vdxfid]: { EN: "Identity Sign Data Request" } +}; diff --git a/dist/utils/address.d.ts b/dist/utils/address.d.ts new file mode 100644 index 00000000..5b51face --- /dev/null +++ b/dist/utils/address.d.ts @@ -0,0 +1,15 @@ +export declare const fromBase58Check: (address: string) => { + version: number; + hash: Buffer; +}; +export declare const toBase58Check: (hash: Buffer, version: number) => string; +export declare const nameAndParentAddrToAddr: (name: string, parentIAddr?: string, version?: number) => string; +export declare const nameAndParentAddrToIAddr: (name: string, parentIAddr?: string) => string; +export declare const fqnToAddress: (fullyqualifiedname: string, rootSystemName?: string, version?: number) => string; +export declare const toIAddress: (fullyqualifiedname: string, rootSystemName?: string) => string; +export declare function getDataKey(keyName: string, nameSpaceID?: string, verusChainId?: string, version?: number): { + id: string; + namespace: string; +}; +export declare const decodeDestination: (destination: string) => Buffer; +export declare const decodeEthDestination: (destination: string) => Buffer; diff --git a/dist/utils/address.js b/dist/utils/address.js new file mode 100644 index 00000000..8d43c64c --- /dev/null +++ b/dist/utils/address.js @@ -0,0 +1,270 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.decodeEthDestination = exports.decodeDestination = exports.toIAddress = exports.fqnToAddress = exports.nameAndParentAddrToIAddr = exports.nameAndParentAddrToAddr = exports.toBase58Check = exports.fromBase58Check = void 0; +exports.getDataKey = getDataKey; +const pbaas_1 = require("../constants/pbaas"); +const vdxf_1 = require("../constants/vdxf"); +const hash_1 = require("./hash"); +const bs58check = require("bs58check"); +const fromBase58Check = (address) => { + var payload = bs58check.decode(address); + // TODO: 4.0.0, move to "toOutputScript" + if (payload.length < 21) + throw new TypeError(address + " is too short"); + if (payload.length > 22) + throw new TypeError(address + " is too long"); + var multibyte = payload.length === 22; + var offset = multibyte ? 2 : 1; + var version = multibyte ? payload.readUInt16BE(0) : payload[0]; + var hash = payload.slice(offset); + // Turn hash to buffer with Buffer.from due to strange bug where certain JS engines + // don't keep hash a buffer + return { version: version, hash: Buffer.from(hash) }; +}; +exports.fromBase58Check = fromBase58Check; +const toBase58Check = (hash, version) => { + // Zcash adds an extra prefix resulting in a bigger (22 bytes) payload. We identify them Zcash by checking if the + // version is multibyte (2 bytes instead of 1) + var multibyte = version > 0xff; + var size = multibyte ? 22 : 21; + var offset = multibyte ? 2 : 1; + var payload = Buffer.allocUnsafe(size); + multibyte + ? payload.writeUInt16BE(version, 0) + : payload.writeUInt8(version, 0); + hash.copy(payload, offset); + return bs58check.encode(payload); +}; +exports.toBase58Check = toBase58Check; +const nameAndParentAddrToAddr = (name, parentIAddr, version = vdxf_1.I_ADDR_VERSION) => { + let idHash; + const nameBuffer = Buffer.from(name.toLowerCase(), "utf8"); + if (parentIAddr == null) { + idHash = (0, hash_1.hash)(nameBuffer); + } + else { + idHash = (0, hash_1.hash)(nameBuffer); + idHash = (0, hash_1.hash)((0, exports.fromBase58Check)(parentIAddr).hash, idHash); + } + return (0, exports.toBase58Check)((0, hash_1.hash160)(idHash), version); +}; +exports.nameAndParentAddrToAddr = nameAndParentAddrToAddr; +const nameAndParentAddrToIAddr = (name, parentIAddr) => { + return (0, exports.nameAndParentAddrToAddr)(name, parentIAddr, vdxf_1.I_ADDR_VERSION); +}; +exports.nameAndParentAddrToIAddr = nameAndParentAddrToIAddr; +const fqnToAddress = (fullyqualifiedname, rootSystemName = "", version = vdxf_1.I_ADDR_VERSION) => { + const splitFqnAt = fullyqualifiedname.split("@").filter(x => x.length > 0); + if (splitFqnAt.length !== 1) + throw new Error("Invalid name"); + const cleanFqn = splitFqnAt[0]; + const splitFqnDot = cleanFqn.split('.'); + if (splitFqnDot[splitFqnDot.length - 1] !== rootSystemName && + splitFqnDot[splitFqnDot.length - 1] !== "") { + splitFqnDot.push(rootSystemName); + } + const name = splitFqnDot.shift(); + let Parent; + for (let i = splitFqnDot.length - 1; i >= 0; i--) { + let idHash; + const parentName = Buffer.from(splitFqnDot[i].toLowerCase(), "utf8"); + if (parentName.length > 0) { + if (Parent == null) { + idHash = (0, hash_1.hash)(parentName); + } + else { + idHash = (0, hash_1.hash)(parentName); + idHash = (0, hash_1.hash)(Parent, idHash); + } + Parent = (0, hash_1.hash160)(idHash); + } + } + let idHash; + const nameBuffer = Buffer.from(name.toLowerCase(), "utf8"); + if (Parent == null) { + idHash = (0, hash_1.hash)(nameBuffer); + } + else { + idHash = (0, hash_1.hash)(nameBuffer); + idHash = (0, hash_1.hash)(Parent, idHash); + } + return (0, exports.toBase58Check)((0, hash_1.hash160)(idHash), version); +}; +exports.fqnToAddress = fqnToAddress; +const toIAddress = (fullyqualifiedname, rootSystemName = "") => { + return (0, exports.fqnToAddress)(fullyqualifiedname, rootSystemName, vdxf_1.I_ADDR_VERSION); +}; +exports.toIAddress = toIAddress; +function trimSpaces(name, removeDuals) { + // Unicode "dual spaces" — visually space-like but potentially problematic + const dualSpaces = [ + "\u0020", "\u00A0", "\u1680", "\u2000", "\u2001", "\u2002", "\u2003", "\u2004", + "\u2005", "\u2006", "\u2007", "\u2008", "\u2009", "\u200A", "\u200C", "\u200D", + "\u202F", "\u205F", "\u3000" + ]; + const isDual = (char) => dualSpaces.includes(char); + const chars = [...name]; + const toRemove = []; + const allDuals = []; + for (let i = 0; i < chars.length; i++) { + const char = chars[i]; + if (isDual(char)) { + const wasLastDual = allDuals.length && allDuals[allDuals.length - 1] === i - 1; + const shouldRemove = removeDuals || + i === allDuals.length || + i === chars.length - 1 || + (removeDuals && wasLastDual); + if (shouldRemove) { + toRemove.push(i); + } + allDuals.push(i); + // Edge case: chain of duals at the end + if (i > 0 && + i === chars.length - 1 && + wasLastDual) { + let toRemoveIdx = toRemove.length - 1; + let nextDual = 0; + for (let j = allDuals.length - 1; j >= 0; j--) { + const idx = allDuals[j]; + if (nextDual && idx !== nextDual - 1) + break; + if (toRemoveIdx < 0 || toRemove[toRemoveIdx] !== idx) { + toRemove.splice(++toRemoveIdx, 0, idx); + } + toRemoveIdx--; + nextDual = idx; + } + } + } + } + // Remove characters from end to start + for (let i = toRemove.length - 1; i >= 0; i--) { + chars.splice(toRemove[i], 1); + } + return chars.join(""); +} +function parseSubNames(name, addVerus, removeDuals = false, verusChainName = pbaas_1.DEFAULT_VERUS_CHAINNAME) { + var _a; + const parts = name.split("@"); + if (parts.length === 0 || + parts.length > 2 || + (parts.length > 1 && trimSpaces(parts[1], removeDuals) !== parts[1])) { + return { names: [], chain: "" }; + } + let chain = ""; + let explicitChain = false; + if (parts.length === 2 && parts[1] !== "") { + chain = parts[1]; + explicitChain = true; + } + let retNames = parts[0].split("."); + // If the name ends with a dot, it's an indicator to not add Verus + if (retNames[retNames.length - 1] === "") { + addVerus = false; + retNames.pop(); + } + const verusChainNameLc = verusChainName.toLowerCase(); + if (addVerus) { + if (explicitChain) { + const chainParts = chain.split("."); + const lastChainPart = chainParts[chainParts.length - 1].toLowerCase(); + if (lastChainPart !== "" && lastChainPart !== verusChainNameLc) { + chainParts.push(verusChainNameLc); + chain = chainParts.join("."); + } + else if (lastChainPart === "") { + chainParts.pop(); + chain = chainParts.join("."); + } + } + const lastName = (_a = retNames[retNames.length - 1]) === null || _a === void 0 ? void 0 : _a.toLowerCase(); + if (lastName !== "" && lastName !== verusChainNameLc) { + retNames.push(verusChainNameLc); + } + else if (lastName === "") { + retNames.pop(); + } + } + for (let i = 0; i < retNames.length; i++) { + if (retNames[i].length > pbaas_1.KOMODO_ASSETCHAIN_MAXLEN - 1) { + retNames[i] = retNames[i].slice(0, pbaas_1.KOMODO_ASSETCHAIN_MAXLEN - 1); + } + if (retNames[i].length === 0 || + retNames[i] !== trimSpaces(retNames[i], removeDuals)) { + return { names: [], chain: "" }; + } + } + return { names: retNames, chain }; +} +function cleanName(name, parent, removeDuals = false, verusChainName = pbaas_1.DEFAULT_VERUS_CHAINNAME) { + const { names: subNames } = parseSubNames(name, false, removeDuals, verusChainName); + if (subNames.length === 0) { + throw new Error("No subnames found in name"); + } + let newParent = parent ? (0, exports.fromBase58Check)(parent).hash : null; + // Remove "verus" suffix if already handled and parent is not null + const last = subNames[subNames.length - 1]; + if (newParent && + subNames.length > 1 && + last.toLowerCase() === verusChainName.toLowerCase()) { + subNames.pop(); + } + // Build up the parent hash from right to left + for (let i = subNames.length - 1; i > 0; i--) { + const parentNameStr = Buffer.from(subNames[i].toLowerCase(), 'utf8'); + let idHash; + if (!newParent) { + idHash = (0, hash_1.hash)(parentNameStr); // Hash from a string + } + else { + const combined = (0, hash_1.hash)(parentNameStr); // First hash + idHash = (0, hash_1.hash)(newParent, combined); // Combine with parent + } + newParent = (0, hash_1.hash160)(idHash); // Get new parent as uint160 + } + return { name: subNames[0], parent: newParent ? (0, exports.toBase58Check)(newParent, vdxf_1.I_ADDR_VERSION) : null }; +} +function getID(name, parent, verusChainName = pbaas_1.DEFAULT_VERUS_CHAINNAME, version = vdxf_1.I_ADDR_VERSION) { + const _cleanName = name === "::" ? { name, parent } : cleanName(name, parent, false, verusChainName); + if (_cleanName.name.length == 0) + return pbaas_1.NULL_I_ADDR; + return (0, exports.nameAndParentAddrToAddr)(_cleanName.name, _cleanName.parent, version); +} +function getDataKey(keyName, nameSpaceID, verusChainId = pbaas_1.DEFAULT_VERUS_CHAINID, version = vdxf_1.I_ADDR_VERSION) { + let keyCopy = keyName; + const addressParts = keyName.split(":"); + // If the first part of the address is a namespace, it is followed by a double colon + // Namespace specifiers have no implicit root + if (addressParts.length > 2 && addressParts[1] === "") { + nameSpaceID = (0, exports.toIAddress)(addressParts[0]); + keyName = addressParts.join(":"); + for (let i = 2; i < addressParts.length; i++) { + keyCopy = i === 2 ? addressParts[i] : keyCopy + ":" + addressParts[i]; + } + } + if (!nameSpaceID) { + nameSpaceID = verusChainId; + } + const parent = getID("::", nameSpaceID, undefined, version); + return { id: getID(keyCopy, parent, undefined, version), namespace: nameSpaceID }; +} +const decodeDestination = (destination) => { + try { + const data = (0, exports.fromBase58Check)(destination); + return data.hash; + } + catch (e) { + throw new Error("Invalid destination address: " + destination); + } +}; +exports.decodeDestination = decodeDestination; +const decodeEthDestination = (destination) => { + if (destination.startsWith("0x")) { + destination = destination.slice(2); + } + if (destination.length !== 40) { + throw new Error("Invalid Ethereum address: " + destination); + } + return Buffer.from(destination, "hex"); +}; +exports.decodeEthDestination = decodeEthDestination; diff --git a/dist/utils/bufferutils.d.ts b/dist/utils/bufferutils.d.ts new file mode 100644 index 00000000..ae4663ed --- /dev/null +++ b/dist/utils/bufferutils.d.ts @@ -0,0 +1,52 @@ +import { BigNumber } from "./types/BigNumber"; +export declare const readUInt64LE: (buffer: Buffer, offset: number) => number; +export declare const writeUInt64LE: (buffer: Buffer, value: number, offset: number) => number; +export declare const reverseBuffer: (buffer: Buffer) => Buffer; +/** + * Helper class for serialization of bitcoin data types into a pre-allocated buffer. + */ +declare class BufferWriter { + buffer: Buffer; + offset: number; + constructor(buffer: Buffer, offset?: number); + writeUInt8(i: number): void; + writeUInt16(i: number): void; + writeInt32(i: number): void; + writeUInt32(i: number): void; + writeUInt64(i: number): void; + writeInt64(i: BigNumber): void; + writeCompactSize(i: number): void; + writeVarInt(i: BigNumber): void; + writeSlice(slice: Buffer): void; + writeVarSlice(slice: Buffer): void; + writeVector(vector: Array): void; + writeArray(array: Array): void; +} +/** + * Helper class for reading of bitcoin data types from a buffer. + */ +declare class BufferReader { + buffer: Buffer; + offset: number; + constructor(buffer: Buffer, offset?: number); + readUInt8(): number; + readUInt16(): number; + readInt32(): number; + readUInt32(): number; + readUInt64(): number; + readInt64(): BigNumber; + readCompactSize(): number; + readVarInt(): import("bn.js"); + readSlice(n: number): Buffer; + readVarSlice(): Buffer; + readVector(): any[]; + readArray(sliceLength: number): any[]; +} +declare const _default: { + readUInt64LE: (buffer: Buffer, offset: number) => number; + writeUInt64LE: (buffer: Buffer, value: number, offset: number) => number; + reverseBuffer: (buffer: Buffer) => Buffer; + BufferWriter: typeof BufferWriter; + BufferReader: typeof BufferReader; +}; +export default _default; diff --git a/dist/utils/bufferutils.js b/dist/utils/bufferutils.js new file mode 100644 index 00000000..a2a0d52b --- /dev/null +++ b/dist/utils/bufferutils.js @@ -0,0 +1,180 @@ +"use strict"; +// The MIT License (MIT) +Object.defineProperty(exports, "__esModule", { value: true }); +exports.reverseBuffer = exports.writeUInt64LE = exports.readUInt64LE = void 0; +const varuint_1 = require("./varuint"); +const varint_1 = require("./varint"); +const bn_js_1 = require("bn.js"); +// https://github.com/feross/buffer/blob/master/index.js#L1127 +function verifuint(value, max) { + if (typeof value !== "number") + throw new Error("cannot write a non-number as a number"); + if (value < 0) + throw new Error("specified a negative value for writing an unsigned value"); + if (value > max) + throw new Error("RangeError: value out of range"); + if (Math.floor(value) !== value) + throw new Error("value has a fractional component"); +} +const readUInt64LE = (buffer, offset) => { + const a = buffer.readUInt32LE(offset); + let b = buffer.readUInt32LE(offset + 4); + b *= 0x100000000; + verifuint(b + a, 0x001fffffffffffff); + return b + a; +}; +exports.readUInt64LE = readUInt64LE; +const writeUInt64LE = (buffer, value, offset) => { + verifuint(value, 0x001fffffffffffff); + buffer.writeInt32LE(value & -1, offset); + buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4); + return offset + 8; +}; +exports.writeUInt64LE = writeUInt64LE; +const reverseBuffer = (buffer) => { + if (buffer.length < 1) + return buffer; + let j = buffer.length - 1; + let tmp = 0; + for (let i = 0; i < buffer.length / 2; i++) { + tmp = buffer[i]; + buffer[i] = buffer[j]; + buffer[j] = tmp; + j--; + } + return buffer; +}; +exports.reverseBuffer = reverseBuffer; +/** + * Helper class for serialization of bitcoin data types into a pre-allocated buffer. + */ +class BufferWriter { + constructor(buffer, offset = 0) { + this.buffer = buffer; + this.offset = offset; + } + writeUInt8(i) { + this.offset = this.buffer.writeUInt8(i, this.offset); + } + writeUInt16(i) { + this.offset = this.buffer.writeUInt16LE(i, this.offset); + } + writeInt32(i) { + this.offset = this.buffer.writeInt32LE(i, this.offset); + } + writeUInt32(i) { + this.offset = this.buffer.writeUInt32LE(i, this.offset); + } + writeUInt64(i) { + this.offset = (0, exports.writeUInt64LE)(this.buffer, i, this.offset); + } + writeInt64(i) { + const slice = i.toBuffer('le', 8); + this.writeSlice(slice); + } + writeCompactSize(i) { + const encoding = varuint_1.default.encode(i, this.buffer, this.offset); + this.offset += encoding.bytes; + } + writeVarInt(i) { + const encoding = varint_1.default.encode(i, this.buffer, this.offset); + this.offset += encoding.bytes; + } + writeSlice(slice) { + if (this.buffer.length < this.offset + slice.length) { + throw new Error("Cannot write slice out of bounds"); + } + this.offset += slice.copy(this.buffer, this.offset); + } + writeVarSlice(slice) { + this.writeCompactSize(slice.length); + this.writeSlice(slice); + } + writeVector(vector) { + this.writeCompactSize(vector.length); + vector.forEach((buf) => this.writeVarSlice(buf)); + } + writeArray(array) { + this.writeCompactSize(array.length); + array.forEach((buf) => this.writeSlice(buf)); + } +} +/** + * Helper class for reading of bitcoin data types from a buffer. + */ +class BufferReader { + constructor(buffer, offset = 0) { + this.buffer = buffer; + this.offset = offset; + } + readUInt8() { + const result = this.buffer.readUInt8(this.offset); + this.offset++; + return result; + } + readUInt16() { + const result = this.buffer.readUInt16LE(this.offset); + this.offset += 2; + return result; + } + readInt32() { + const result = this.buffer.readInt32LE(this.offset); + this.offset += 4; + return result; + } + readUInt32() { + const result = this.buffer.readUInt32LE(this.offset); + this.offset += 4; + return result; + } + readUInt64() { + const result = (0, exports.readUInt64LE)(this.buffer, this.offset); + this.offset += 8; + return result; + } + readInt64() { + return new bn_js_1.BN(this.readSlice(8), 16, 'le'); + } + readCompactSize() { + const vi = varuint_1.default.decode(this.buffer, this.offset); + this.offset += vi.bytes; + return vi.decoded; + } + readVarInt() { + const vi = varint_1.default.decode(this.buffer, this.offset); + this.offset += vi.bytes; + return vi.decoded; + } + readSlice(n) { + if (this.buffer.length < this.offset + n) { + throw new Error("Cannot read slice out of bounds"); + } + const result = this.buffer.slice(this.offset, this.offset + n); + this.offset += n; + return result; + } + readVarSlice() { + return this.readSlice(this.readCompactSize()); + } + readVector() { + const count = this.readCompactSize(); + const vector = []; + for (let i = 0; i < count; i++) + vector.push(this.readVarSlice()); + return vector; + } + readArray(sliceLength) { + const count = this.readCompactSize(); + const array = []; + for (let i = 0; i < count; i++) + array.push(this.readSlice(sliceLength)); + return array; + } +} +exports.default = { + readUInt64LE: exports.readUInt64LE, + writeUInt64LE: exports.writeUInt64LE, + reverseBuffer: exports.reverseBuffer, + BufferWriter, + BufferReader, +}; diff --git a/dist/utils/cccustom.d.ts b/dist/utils/cccustom.d.ts new file mode 100644 index 00000000..e5bbe42c --- /dev/null +++ b/dist/utils/cccustom.d.ts @@ -0,0 +1,20 @@ +export declare const STAKE_GUARD_ADDR = "RCG8KwJNDVwpUBcdoa6AoHqHVJsA1uMYMR"; +export declare const PBAAS_DEFINITION_ADDR = "RP7id3CzCnwvzNUZesYJM6ekvsxpEzMqB1"; +export declare const NOTARY_EVIDENCE_ADDR = "RQWMeecjGFF3ZAVeSimRbyG9iMDUHPY5Ny"; +export declare const EARNED_NOTARIZATION_ADDR = "RMYbaxFsCT1xfMmwLCCYAVf2DsxcDTtBmx"; +export declare const ACCEPTED_NOTARIZATION_ADDR = "RDTq9qn1Lthv7fvsdbWz36mGp8HK9XaruZ"; +export declare const FINALIZE_NOTARIZATION_ADDR = "RRbKYitLH9EhQCvCo4bPZqJx3TWxASadxE"; +export declare const RESERVE_OUTPUT_ADDR = "RMXeZGxxRuABFkT4uLSCeuJHLegBNGZq8D"; +export declare const ADVANCED_NAME_RESERVATION_ADDR = "REuGNkgunnw1J4Zx6Y9UCp8YHVZqYATe9D"; +export declare const RESERVE_TRANSFER_ADDR = "RTqQe58LSj2yr5CrwYFwcsAQ1edQwmrkUU"; +export declare const RESERVE_DEPOSIT_ADDR = "RFw9AVfgNKcHe2Vp2eyzHrX65aFD9Ky8df"; +export declare const CROSS_CHAIN_EXPORT_ADDR = "RGkrs7SndcpsV61oKK2jYdMiU8PgkLU2qP"; +export declare const CROSS_CHAIN_IMPORT_ADDR = "RKLN7wFhbrJFkPG8XkKteErAe5CjqoddTm"; +export declare const CURRENCY_STATE_ADDR = "REU1HKkmdwdxKMpfD3QoxeERYd9tfMN6n9"; +export declare const IDENTITY_PRIMARY_ADDR = "RS545EBdK5AzPTaGHNUg78wFuuAzBb74FB"; +export declare const IDENTITY_REVOKE_ADDR = "RG6My2zwh9hBFSgUhZ5UmmUtxBap57aU4N"; +export declare const IDENTITY_RECOVER_ADDR = "RRw9rJMPwdNqC1wgXn5vryJwMDyBgpXjYT"; +export declare const IDENTITY_COMMITMENT_ADDR = "RCySaThHfVBcHZgjJGoBw3un4vcsRJNPYw"; +export declare const IDENTITY_RESERVATION_ADDR = "RDbzJU8rEv4CkMABNUnKQoKDTfnikSm9fM"; +export declare const FINALIZE_EXPORT_ADDR = "REL7oLNeaeoQB1XauiHfcvjKMZC52Uj5xF"; +export declare const FEE_POOL_ADDR = "RQ55dLQ7uGnLx8scXfkaFV6QS6qVBGyxAG"; diff --git a/dist/utils/cccustom.js b/dist/utils/cccustom.js new file mode 100644 index 00000000..1acb4d52 --- /dev/null +++ b/dist/utils/cccustom.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FEE_POOL_ADDR = exports.FINALIZE_EXPORT_ADDR = exports.IDENTITY_RESERVATION_ADDR = exports.IDENTITY_COMMITMENT_ADDR = exports.IDENTITY_RECOVER_ADDR = exports.IDENTITY_REVOKE_ADDR = exports.IDENTITY_PRIMARY_ADDR = exports.CURRENCY_STATE_ADDR = exports.CROSS_CHAIN_IMPORT_ADDR = exports.CROSS_CHAIN_EXPORT_ADDR = exports.RESERVE_DEPOSIT_ADDR = exports.RESERVE_TRANSFER_ADDR = exports.ADVANCED_NAME_RESERVATION_ADDR = exports.RESERVE_OUTPUT_ADDR = exports.FINALIZE_NOTARIZATION_ADDR = exports.ACCEPTED_NOTARIZATION_ADDR = exports.EARNED_NOTARIZATION_ADDR = exports.NOTARY_EVIDENCE_ADDR = exports.PBAAS_DEFINITION_ADDR = exports.STAKE_GUARD_ADDR = void 0; +exports.STAKE_GUARD_ADDR = "RCG8KwJNDVwpUBcdoa6AoHqHVJsA1uMYMR"; +exports.PBAAS_DEFINITION_ADDR = "RP7id3CzCnwvzNUZesYJM6ekvsxpEzMqB1"; +exports.NOTARY_EVIDENCE_ADDR = "RQWMeecjGFF3ZAVeSimRbyG9iMDUHPY5Ny"; +exports.EARNED_NOTARIZATION_ADDR = "RMYbaxFsCT1xfMmwLCCYAVf2DsxcDTtBmx"; +exports.ACCEPTED_NOTARIZATION_ADDR = "RDTq9qn1Lthv7fvsdbWz36mGp8HK9XaruZ"; +exports.FINALIZE_NOTARIZATION_ADDR = "RRbKYitLH9EhQCvCo4bPZqJx3TWxASadxE"; +exports.RESERVE_OUTPUT_ADDR = "RMXeZGxxRuABFkT4uLSCeuJHLegBNGZq8D"; +exports.ADVANCED_NAME_RESERVATION_ADDR = "REuGNkgunnw1J4Zx6Y9UCp8YHVZqYATe9D"; +exports.RESERVE_TRANSFER_ADDR = "RTqQe58LSj2yr5CrwYFwcsAQ1edQwmrkUU"; +exports.RESERVE_DEPOSIT_ADDR = "RFw9AVfgNKcHe2Vp2eyzHrX65aFD9Ky8df"; +exports.CROSS_CHAIN_EXPORT_ADDR = "RGkrs7SndcpsV61oKK2jYdMiU8PgkLU2qP"; +exports.CROSS_CHAIN_IMPORT_ADDR = "RKLN7wFhbrJFkPG8XkKteErAe5CjqoddTm"; +exports.CURRENCY_STATE_ADDR = "REU1HKkmdwdxKMpfD3QoxeERYd9tfMN6n9"; +exports.IDENTITY_PRIMARY_ADDR = "RS545EBdK5AzPTaGHNUg78wFuuAzBb74FB"; +exports.IDENTITY_REVOKE_ADDR = "RG6My2zwh9hBFSgUhZ5UmmUtxBap57aU4N"; +exports.IDENTITY_RECOVER_ADDR = "RRw9rJMPwdNqC1wgXn5vryJwMDyBgpXjYT"; +exports.IDENTITY_COMMITMENT_ADDR = "RCySaThHfVBcHZgjJGoBw3un4vcsRJNPYw"; +exports.IDENTITY_RESERVATION_ADDR = "RDbzJU8rEv4CkMABNUnKQoKDTfnikSm9fM"; +exports.FINALIZE_EXPORT_ADDR = "REL7oLNeaeoQB1XauiHfcvjKMZC52Uj5xF"; +exports.FEE_POOL_ADDR = "RQ55dLQ7uGnLx8scXfkaFV6QS6qVBGyxAG"; diff --git a/dist/utils/evals.d.ts b/dist/utils/evals.d.ts new file mode 100644 index 00000000..3386858e --- /dev/null +++ b/dist/utils/evals.d.ts @@ -0,0 +1,24 @@ +export declare const EVALS: { + EVAL_NONE: number; + EVAL_STAKEGUARD: number; + EVAL_CURRENCY_DEFINITION: number; + EVAL_NOTARY_EVIDENCE: number; + EVAL_EARNEDNOTARIZATION: number; + EVAL_ACCEPTEDNOTARIZATION: number; + EVAL_FINALIZE_NOTARIZATION: number; + EVAL_CURRENCYSTATE: number; + EVAL_RESERVE_TRANSFER: number; + EVAL_RESERVE_OUTPUT: number; + EVAL_RESERVE_UNUSED: number; + EVAL_RESERVE_DEPOSIT: number; + EVAL_CROSSCHAIN_EXPORT: number; + EVAL_CROSSCHAIN_IMPORT: number; + EVAL_IDENTITY_PRIMARY: number; + EVAL_IDENTITY_REVOKE: number; + EVAL_IDENTITY_RECOVER: number; + EVAL_IDENTITY_COMMITMENT: number; + EVAL_IDENTITY_RESERVATION: number; + EVAL_FINALIZE_EXPORT: number; + EVAL_FEE_POOL: number; + EVAL_NOTARY_SIGNATURE: number; +}; diff --git a/dist/utils/evals.js b/dist/utils/evals.js new file mode 100644 index 00000000..bbe51ad3 --- /dev/null +++ b/dist/utils/evals.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.EVALS = void 0; +exports.EVALS = { + "EVAL_NONE": 0, + "EVAL_STAKEGUARD": 1, + "EVAL_CURRENCY_DEFINITION": 2, + "EVAL_NOTARY_EVIDENCE": 3, + "EVAL_EARNEDNOTARIZATION": 4, + "EVAL_ACCEPTEDNOTARIZATION": 5, + "EVAL_FINALIZE_NOTARIZATION": 6, + "EVAL_CURRENCYSTATE": 7, + "EVAL_RESERVE_TRANSFER": 8, + "EVAL_RESERVE_OUTPUT": 9, + "EVAL_RESERVE_UNUSED": 10, + "EVAL_RESERVE_DEPOSIT": 11, + "EVAL_CROSSCHAIN_EXPORT": 12, + "EVAL_CROSSCHAIN_IMPORT": 13, + "EVAL_IDENTITY_PRIMARY": 14, + "EVAL_IDENTITY_REVOKE": 15, + "EVAL_IDENTITY_RECOVER": 16, + "EVAL_IDENTITY_COMMITMENT": 17, + "EVAL_IDENTITY_RESERVATION": 18, + "EVAL_FINALIZE_EXPORT": 19, + "EVAL_FEE_POOL": 20, + "EVAL_NOTARY_SIGNATURE": 21 +}; diff --git a/dist/utils/hash.d.ts b/dist/utils/hash.d.ts new file mode 100644 index 00000000..61301597 --- /dev/null +++ b/dist/utils/hash.d.ts @@ -0,0 +1,2 @@ +export declare const hash: (...params: Array) => Buffer; +export declare const hash160: (data: Buffer) => Buffer; diff --git a/dist/utils/hash.js b/dist/utils/hash.js new file mode 100644 index 00000000..ec09f453 --- /dev/null +++ b/dist/utils/hash.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.hash160 = exports.hash = void 0; +const createHash = require("create-hash"); +const hash = (...params) => { + const _hash = createHash("sha256"); + params.forEach((value) => { + _hash.update(value); + }); + return createHash("sha256").update(_hash.digest()).digest(); +}; +exports.hash = hash; +const hash160 = (data) => { + const sha256 = createHash("sha256"); + const ripemd160 = createHash("ripemd160"); + return ripemd160.update(sha256.update(data).digest()).digest(); +}; +exports.hash160 = hash160; diff --git a/dist/utils/mmr.d.ts b/dist/utils/mmr.d.ts new file mode 100644 index 00000000..4bf5e509 --- /dev/null +++ b/dist/utils/mmr.d.ts @@ -0,0 +1,2 @@ +import { BN } from 'bn.js'; +export declare const GetMMRProofIndex: (pos: number, mmvSize: number, extraHashes: number) => InstanceType; diff --git a/dist/utils/mmr.js b/dist/utils/mmr.js new file mode 100644 index 00000000..8cbc00ef --- /dev/null +++ b/dist/utils/mmr.js @@ -0,0 +1,87 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GetMMRProofIndex = void 0; +const bn_js_1 = require("bn.js"); +const GetMMRProofIndex = (pos, mmvSize, extraHashes) => { + let index = new bn_js_1.BN(0); + let layerSizes = []; + let merkleSizes = []; + let peakIndexes = []; + let bitPos = 0; + //start at the beginning + //create a simulation of a mmr based on size + if (!(pos > 0 && pos < mmvSize)) + return new bn_js_1.BN(0); + //create an array of all the sizes + while (mmvSize) { + layerSizes.push(mmvSize); + mmvSize = mmvSize >> 1; + } + for (let height = 0; height < layerSizes.length; height++) { + if (height == layerSizes.length - 1 || layerSizes[height] & 1) { + peakIndexes.push(height); + } + } + //array flip peak indexes + peakIndexes.reverse(); + let layerNum = 0; + let layerSize = peakIndexes.length; + for (let passThrough = (layerSize & 1); layerNum == 0 || layerSize > 1; passThrough = (layerSize & 1), layerNum++) { + layerSize = (layerSize >> 1) + passThrough; + if (layerSize) { + merkleSizes.push(layerSize); + } + } + //flip the merklesizes + for (let i = 0; i < extraHashes; i++) { + bitPos++; + } + let p = pos; + for (let l = 0; l < layerSizes.length; l++) { + if (p & 1) { + index = index.or(new bn_js_1.BN(1).shln(bitPos++)); + p >>= 1; + for (let i = 0; i < extraHashes; i++) { + bitPos++; + } + } + else { + if (layerSizes[l] > (p + 1)) { + bitPos++; + p >>= 1; + for (let i = 0; i < extraHashes; i++) { + bitPos++; + } + } + else { + for (p = 0; p < peakIndexes.length; p++) { + if (peakIndexes[p] == l) { + break; + } + } + for (let layerNum = -1, layerSize = peakIndexes.length; layerNum == -1 || layerSize > 1; layerSize = merkleSizes[++layerNum]) { + if (p < (layerSize - 1) || (p & 1)) { + if (p & 1) { + // hash with the one before us + index = index.or(new bn_js_1.BN(1).shln(bitPos++)); + for (let i = 0; i < extraHashes; i++) { + bitPos++; + } + } + else { + // hash with the one in front of us + bitPos++; + for (let i = 0; i < extraHashes; i++) { + bitPos++; + } + } + } + p >>= 1; + } + break; + } + } + } + return index; +}; +exports.GetMMRProofIndex = GetMMRProofIndex; diff --git a/dist/utils/numberConversion.d.ts b/dist/utils/numberConversion.d.ts new file mode 100644 index 00000000..8701f426 --- /dev/null +++ b/dist/utils/numberConversion.d.ts @@ -0,0 +1,14 @@ +import { BigNumber } from '../utils/types/BigNumber'; +/** + * Converts a BN instance to a number with 8 decimal places. + * @param value BN instance representing the integer value (multiplied by 1e8) + * @returns number with 8 decimal places + */ +export declare function bnToDecimal(value: BigNumber): string; +/** + * Converts a decimal number (string or number) to a BN instance representing the integer value (multiplied by 1e8) + * Uses string manipulation to avoid floating point errors. + * @param value number or string representing a number with up to 8 decimal places (e.g., "1000000000.11111111" or 1000000000.11111111) + * @returns BN instance + */ +export declare function decimalToBn(value: string | number): BigNumber; diff --git a/dist/utils/numberConversion.js b/dist/utils/numberConversion.js new file mode 100644 index 00000000..e5105243 --- /dev/null +++ b/dist/utils/numberConversion.js @@ -0,0 +1,47 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.bnToDecimal = bnToDecimal; +exports.decimalToBn = decimalToBn; +const bn_js_1 = require("bn.js"); +/** + * Converts a BN instance to a number with 8 decimal places. + * @param value BN instance representing the integer value (multiplied by 1e8) + * @returns number with 8 decimal places + */ +function bnToDecimal(value) { + var input = new bn_js_1.BN(value); + const divisor = new bn_js_1.BN('100000000'); + const isNegative = input.isNeg(); + const absInput = input.abs(); + const integerPart = absInput.div(divisor).toString(); + let decimalPart = absInput.mod(divisor).toString(); + // Remove trailing zeros from decimal part + while (decimalPart.length < 8) { + decimalPart = '0' + decimalPart; + } + if (decimalPart === '00000000') { + return (isNegative ? '-' : '') + integerPart; + } + else { + // Remove trailing zeros from the right of decimalPart + decimalPart = decimalPart.replace(/0+$/, ''); + } + const resultStr = (isNegative ? '-' : '') + integerPart + '.' + decimalPart; + return resultStr; +} +/** + * Converts a decimal number (string or number) to a BN instance representing the integer value (multiplied by 1e8) + * Uses string manipulation to avoid floating point errors. + * @param value number or string representing a number with up to 8 decimal places (e.g., "1000000000.11111111" or 1000000000.11111111) + * @returns BN instance + */ +function decimalToBn(value) { + const valueStr = typeof value === 'number' ? value.toString() : value; + const isNegative = valueStr.startsWith('-'); + const absValue = isNegative ? valueStr.slice(1) : valueStr; + const [integerPart, decimalPart = ''] = absValue.split('.'); + const paddedDecimal = (decimalPart + '00000000').slice(0, 8); + const bnStr = integerPart + paddedDecimal; + const bn = new bn_js_1.BN(bnStr); + return isNegative ? bn.neg() : bn; +} diff --git a/dist/utils/ops.d.ts b/dist/utils/ops.d.ts new file mode 100644 index 00000000..e6ea807b --- /dev/null +++ b/dist/utils/ops.d.ts @@ -0,0 +1,122 @@ +export declare const OPS: { + OP_FALSE: number; + OP_0: number; + OP_PUSHDATA1: number; + OP_PUSHDATA2: number; + OP_PUSHDATA4: number; + OP_1NEGATE: number; + OP_RESERVED: number; + OP_TRUE: number; + OP_1: number; + OP_2: number; + OP_3: number; + OP_4: number; + OP_5: number; + OP_6: number; + OP_7: number; + OP_8: number; + OP_9: number; + OP_10: number; + OP_11: number; + OP_12: number; + OP_13: number; + OP_14: number; + OP_15: number; + OP_16: number; + OP_NOP: number; + OP_VER: number; + OP_IF: number; + OP_NOTIF: number; + OP_VERIF: number; + OP_VERNOTIF: number; + OP_ELSE: number; + OP_ENDIF: number; + OP_VERIFY: number; + OP_RETURN: number; + OP_TOALTSTACK: number; + OP_FROMALTSTACK: number; + OP_2DROP: number; + OP_2DUP: number; + OP_3DUP: number; + OP_2OVER: number; + OP_2ROT: number; + OP_2SWAP: number; + OP_IFDUP: number; + OP_DEPTH: number; + OP_DROP: number; + OP_DUP: number; + OP_NIP: number; + OP_OVER: number; + OP_PICK: number; + OP_ROLL: number; + OP_ROT: number; + OP_SWAP: number; + OP_TUCK: number; + OP_CAT: number; + OP_SUBSTR: number; + OP_LEFT: number; + OP_RIGHT: number; + OP_SIZE: number; + OP_INVERT: number; + OP_AND: number; + OP_OR: number; + OP_XOR: number; + OP_EQUAL: number; + OP_EQUALVERIFY: number; + OP_RESERVED1: number; + OP_RESERVED2: number; + OP_1ADD: number; + OP_1SUB: number; + OP_2MUL: number; + OP_2DIV: number; + OP_NEGATE: number; + OP_ABS: number; + OP_NOT: number; + OP_0NOTEQUAL: number; + OP_ADD: number; + OP_SUB: number; + OP_MUL: number; + OP_DIV: number; + OP_MOD: number; + OP_LSHIFT: number; + OP_RSHIFT: number; + OP_BOOLAND: number; + OP_BOOLOR: number; + OP_NUMEQUAL: number; + OP_NUMEQUALVERIFY: number; + OP_NUMNOTEQUAL: number; + OP_LESSTHAN: number; + OP_GREATERTHAN: number; + OP_LESSTHANOREQUAL: number; + OP_GREATERTHANOREQUAL: number; + OP_MIN: number; + OP_MAX: number; + OP_WITHIN: number; + OP_RIPEMD160: number; + OP_SHA1: number; + OP_SHA256: number; + OP_HASH160: number; + OP_HASH256: number; + OP_CODESEPARATOR: number; + OP_CHECKSIG: number; + OP_CHECKSIGVERIFY: number; + OP_CHECKMULTISIG: number; + OP_CHECKMULTISIGVERIFY: number; + OP_CHECKCRYPTOCONDITION: number; + OP_CHECKCRYPTOCONDITIONVERIFY: number; + OP_NOP1: number; + OP_NOP2: number; + OP_CHECKLOCKTIMEVERIFY: number; + OP_NOP3: number; + OP_CHECKSEQUENCEVERIFY: number; + OP_NOP4: number; + OP_NOP5: number; + OP_NOP6: number; + OP_NOP7: number; + OP_NOP8: number; + OP_NOP9: number; + OP_NOP10: number; + OP_PUBKEYHASH: number; + OP_PUBKEY: number; + OP_INVALIDOPCODE: number; +}; diff --git a/dist/utils/ops.js b/dist/utils/ops.js new file mode 100644 index 00000000..3f056964 --- /dev/null +++ b/dist/utils/ops.js @@ -0,0 +1,125 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OPS = void 0; +exports.OPS = { + "OP_FALSE": 0, + "OP_0": 0, + "OP_PUSHDATA1": 76, + "OP_PUSHDATA2": 77, + "OP_PUSHDATA4": 78, + "OP_1NEGATE": 79, + "OP_RESERVED": 80, + "OP_TRUE": 81, + "OP_1": 81, + "OP_2": 82, + "OP_3": 83, + "OP_4": 84, + "OP_5": 85, + "OP_6": 86, + "OP_7": 87, + "OP_8": 88, + "OP_9": 89, + "OP_10": 90, + "OP_11": 91, + "OP_12": 92, + "OP_13": 93, + "OP_14": 94, + "OP_15": 95, + "OP_16": 96, + "OP_NOP": 97, + "OP_VER": 98, + "OP_IF": 99, + "OP_NOTIF": 100, + "OP_VERIF": 101, + "OP_VERNOTIF": 102, + "OP_ELSE": 103, + "OP_ENDIF": 104, + "OP_VERIFY": 105, + "OP_RETURN": 106, + "OP_TOALTSTACK": 107, + "OP_FROMALTSTACK": 108, + "OP_2DROP": 109, + "OP_2DUP": 110, + "OP_3DUP": 111, + "OP_2OVER": 112, + "OP_2ROT": 113, + "OP_2SWAP": 114, + "OP_IFDUP": 115, + "OP_DEPTH": 116, + "OP_DROP": 117, + "OP_DUP": 118, + "OP_NIP": 119, + "OP_OVER": 120, + "OP_PICK": 121, + "OP_ROLL": 122, + "OP_ROT": 123, + "OP_SWAP": 124, + "OP_TUCK": 125, + "OP_CAT": 126, + "OP_SUBSTR": 127, + "OP_LEFT": 128, + "OP_RIGHT": 129, + "OP_SIZE": 130, + "OP_INVERT": 131, + "OP_AND": 132, + "OP_OR": 133, + "OP_XOR": 134, + "OP_EQUAL": 135, + "OP_EQUALVERIFY": 136, + "OP_RESERVED1": 137, + "OP_RESERVED2": 138, + "OP_1ADD": 139, + "OP_1SUB": 140, + "OP_2MUL": 141, + "OP_2DIV": 142, + "OP_NEGATE": 143, + "OP_ABS": 144, + "OP_NOT": 145, + "OP_0NOTEQUAL": 146, + "OP_ADD": 147, + "OP_SUB": 148, + "OP_MUL": 149, + "OP_DIV": 150, + "OP_MOD": 151, + "OP_LSHIFT": 152, + "OP_RSHIFT": 153, + "OP_BOOLAND": 154, + "OP_BOOLOR": 155, + "OP_NUMEQUAL": 156, + "OP_NUMEQUALVERIFY": 157, + "OP_NUMNOTEQUAL": 158, + "OP_LESSTHAN": 159, + "OP_GREATERTHAN": 160, + "OP_LESSTHANOREQUAL": 161, + "OP_GREATERTHANOREQUAL": 162, + "OP_MIN": 163, + "OP_MAX": 164, + "OP_WITHIN": 165, + "OP_RIPEMD160": 166, + "OP_SHA1": 167, + "OP_SHA256": 168, + "OP_HASH160": 169, + "OP_HASH256": 170, + "OP_CODESEPARATOR": 171, + "OP_CHECKSIG": 172, + "OP_CHECKSIGVERIFY": 173, + "OP_CHECKMULTISIG": 174, + "OP_CHECKMULTISIGVERIFY": 175, + "OP_CHECKCRYPTOCONDITION": 204, + "OP_CHECKCRYPTOCONDITIONVERIFY": 205, + "OP_NOP1": 176, + "OP_NOP2": 177, + "OP_CHECKLOCKTIMEVERIFY": 177, + "OP_NOP3": 178, + "OP_CHECKSEQUENCEVERIFY": 178, + "OP_NOP4": 179, + "OP_NOP5": 180, + "OP_NOP6": 181, + "OP_NOP7": 182, + "OP_NOP8": 183, + "OP_NOP9": 184, + "OP_NOP10": 185, + "OP_PUBKEYHASH": 253, + "OP_PUBKEY": 254, + "OP_INVALIDOPCODE": 255 +}; diff --git a/dist/utils/pushdata.d.ts b/dist/utils/pushdata.d.ts new file mode 100644 index 00000000..28911a3a --- /dev/null +++ b/dist/utils/pushdata.d.ts @@ -0,0 +1,7 @@ +export declare function encodingLength(i: number): number; +export declare function encode(buffer: Buffer, number: number, offset: number): number; +export declare function decode(buffer: Buffer, offset: number): { + opcode: number; + number: number; + size: number; +}; diff --git a/dist/utils/pushdata.js b/dist/utils/pushdata.js new file mode 100644 index 00000000..cb96b3a5 --- /dev/null +++ b/dist/utils/pushdata.js @@ -0,0 +1,89 @@ +"use strict"; +// The MIT License (MIT) +Object.defineProperty(exports, "__esModule", { value: true }); +exports.encodingLength = encodingLength; +exports.encode = encode; +exports.decode = decode; +// Copyright (c) 2016 Daniel Cousens +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +const ops_1 = require("./ops"); +function encodingLength(i) { + return i < ops_1.OPS.OP_PUSHDATA1 ? 1 + : i <= 0xff ? 2 + : i <= 0xffff ? 3 + : 5; +} +function encode(buffer, number, offset) { + var size = encodingLength(number); + // ~6 bit + if (size === 1) { + buffer.writeUInt8(number, offset); + // 8 bit + } + else if (size === 2) { + buffer.writeUInt8(ops_1.OPS.OP_PUSHDATA1, offset); + buffer.writeUInt8(number, offset + 1); + // 16 bit + } + else if (size === 3) { + buffer.writeUInt8(ops_1.OPS.OP_PUSHDATA2, offset); + buffer.writeUInt16LE(number, offset + 1); + // 32 bit + } + else { + buffer.writeUInt8(ops_1.OPS.OP_PUSHDATA4, offset); + buffer.writeUInt32LE(number, offset + 1); + } + return size; +} +function decode(buffer, offset) { + var opcode = buffer.readUInt8(offset); + var number, size; + // ~6 bit + if (opcode < ops_1.OPS.OP_PUSHDATA1) { + number = opcode; + size = 1; + // 8 bit + } + else if (opcode === ops_1.OPS.OP_PUSHDATA1) { + if (offset + 2 > buffer.length) + return null; + number = buffer.readUInt8(offset + 1); + size = 2; + // 16 bit + } + else if (opcode === ops_1.OPS.OP_PUSHDATA2) { + if (offset + 3 > buffer.length) + return null; + number = buffer.readUInt16LE(offset + 1); + size = 3; + // 32 bit + } + else { + if (offset + 5 > buffer.length) + return null; + if (opcode !== ops_1.OPS.OP_PUSHDATA4) + throw new Error('Unexpected opcode'); + number = buffer.readUInt32LE(offset + 1); + size = 5; + } + return { + opcode: opcode, + number: number, + size: size + }; +} diff --git a/dist/utils/reverseops.d.ts b/dist/utils/reverseops.d.ts new file mode 100644 index 00000000..de2aed72 --- /dev/null +++ b/dist/utils/reverseops.d.ts @@ -0,0 +1,2 @@ +declare const map: {}; +export default map; diff --git a/dist/utils/reverseops.js b/dist/utils/reverseops.js new file mode 100644 index 00000000..80c945dc --- /dev/null +++ b/dist/utils/reverseops.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ops_1 = require("./ops"); +const map = {}; +for (var op in ops_1.OPS) { + var code = ops_1.OPS[op]; + map[code] = op; +} +exports.default = map; diff --git a/dist/utils/sapling.d.ts b/dist/utils/sapling.d.ts new file mode 100644 index 00000000..bb4fd722 --- /dev/null +++ b/dist/utils/sapling.d.ts @@ -0,0 +1,39 @@ +export declare const fromBech32: (address: string) => { + version: number; + prefix: string; + data: Buffer; +}; +export declare const toBech32: (prefix: string, data: Buffer) => string; +export declare const convertBits: (data: Buffer, from: number, to: number, strictMode: boolean) => Buffer; +export declare const decodeSaplingAddress: (address: string) => { + d: Buffer; + pk_d: Buffer; +}; +export declare const encodeSaplingAddress: (data: { + d: Buffer; + pk_d: Buffer; +}) => string; +export interface SaplingExtendedSpendingKeyData { + depth: number; + parentFVKTag: Buffer; + childIndex: Buffer; + chainCode: Buffer; + ask: Buffer; + nsk: Buffer; + ovk: Buffer; + dk: Buffer; +} +export interface SaplingExtendedViewingKeyData { + depth: number; + parentFVKTag: Buffer; + childIndex: Buffer; + chainCode: Buffer; + ak: Buffer; + nk: Buffer; + ovk: Buffer; + dk: Buffer; +} +export declare function decodeSaplingExtendedSpendingKey(encoded: string): SaplingExtendedSpendingKeyData; +export declare function encodeSaplingExtendedSpendingKey(data: SaplingExtendedSpendingKeyData, testnet?: boolean): string; +export declare function decodeSaplingExtendedViewingKey(encoded: string): SaplingExtendedViewingKeyData; +export declare function encodeSaplingExtendedViewingKey(data: SaplingExtendedViewingKeyData, testnet?: boolean): string; diff --git a/dist/utils/sapling.js b/dist/utils/sapling.js new file mode 100644 index 00000000..2ef0e258 --- /dev/null +++ b/dist/utils/sapling.js @@ -0,0 +1,141 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.encodeSaplingAddress = exports.decodeSaplingAddress = exports.convertBits = exports.toBech32 = exports.fromBech32 = void 0; +exports.decodeSaplingExtendedSpendingKey = decodeSaplingExtendedSpendingKey; +exports.encodeSaplingExtendedSpendingKey = encodeSaplingExtendedSpendingKey; +exports.decodeSaplingExtendedViewingKey = decodeSaplingExtendedViewingKey; +exports.encodeSaplingExtendedViewingKey = encodeSaplingExtendedViewingKey; +const bech32_1 = require("bech32"); +const fromBech32 = (address) => { + var result = bech32_1.bech32.decode(address, 1000); // Allow longer strings like extended keys + var data = bech32_1.bech32.fromWords(result.words); + return { + version: result.words[0], + prefix: result.prefix, + data: Buffer.from(data) + }; +}; +exports.fromBech32 = fromBech32; +const toBech32 = (prefix, data) => { + const words = bech32_1.bech32.toWords(data); + var result = bech32_1.bech32.encode(prefix, words, 1000); // Allow longer strings like extended keys + return result; +}; +exports.toBech32 = toBech32; +const convertBits = (data, from, to, strictMode) => { + const length = strictMode + ? Math.floor((data.length * from) / to) + : Math.ceil((data.length * from) / to); + const mask = (1 << to) - 1; + const result = Buffer.alloc(length); + let index = 0; + let accumulator = 0; + let bits = 0; + for (const value of data) { + accumulator = (accumulator << from) | value; + bits += from; + while (bits >= to) { + bits -= to; + result[index] = (accumulator >> bits) & mask; + ++index; + } + } + if (!strictMode) { + if (bits > 0) { + result[index] = (accumulator << (to - bits)) & mask; + ++index; + } + } + else { + throw new Error("Bits cannot be converted"); + } + return result; +}; +exports.convertBits = convertBits; +const decodeSaplingAddress = (address) => { + const result = (0, exports.fromBech32)(address); + //const data = convertBits(result.data, 5, 8, false); + if (result.data.length !== 43) { + throw new Error('Invalid sapling address'); + } + return { d: Buffer.from(result.data.subarray(0, 11)), pk_d: Buffer.from(result.data.subarray(11)) }; +}; +exports.decodeSaplingAddress = decodeSaplingAddress; +const encodeSaplingAddress = (data) => { + const buffer = Buffer.concat([data.d, data.pk_d]); + //const data = convertBits(buffer, 8, 5, false); + return (0, exports.toBech32)('zs', buffer); +}; +exports.encodeSaplingAddress = encodeSaplingAddress; +function decodeSaplingExtendedSpendingKey(encoded) { + const result = (0, exports.fromBech32)(encoded); + // Verify prefix is for extended spending key + if (!result.prefix.startsWith('secret-extended-key-')) { + throw new Error('Invalid Sapling extended spending key prefix'); + } + // Data should be 169 bytes: 1 (depth) + 4 (parent) + 4 (child) + 32*4 (keys) + if (result.data.length !== 169) { + throw new Error(`Invalid Sapling extended spending key length: expected 169, got ${result.data.length}`); + } + let offset = 0; + return { + depth: result.data.readUInt8(offset++), + parentFVKTag: Buffer.from(result.data.subarray(offset, offset += 4)), + childIndex: Buffer.from(result.data.subarray(offset, offset += 4)), + chainCode: Buffer.from(result.data.subarray(offset, offset += 32)), + ask: Buffer.from(result.data.subarray(offset, offset += 32)), + nsk: Buffer.from(result.data.subarray(offset, offset += 32)), + ovk: Buffer.from(result.data.subarray(offset, offset += 32)), + dk: Buffer.from(result.data.subarray(offset, offset += 32)) + }; +} +function encodeSaplingExtendedSpendingKey(data, testnet = false) { + const prefix = testnet ? 'secret-extended-key-test' : 'secret-extended-key-main'; + const buffer = Buffer.concat([ + Buffer.from([data.depth]), + data.parentFVKTag, + data.childIndex, + data.chainCode, + data.ask, + data.nsk, + data.ovk, + data.dk + ]); + return (0, exports.toBech32)(prefix, buffer); +} +function decodeSaplingExtendedViewingKey(encoded) { + const result = (0, exports.fromBech32)(encoded); + // Verify prefix is for extended viewing key + if (!result.prefix.startsWith('zxview')) { + throw new Error('Invalid Sapling extended viewing key prefix'); + } + // Data should be 169 bytes: 1 (depth) + 4 (parent) + 4 (child) + 32*5 (keys) + if (result.data.length !== 169) { + throw new Error('Invalid Sapling extended viewing key length'); + } + let offset = 0; + return { + depth: result.data.readUInt8(offset++), + parentFVKTag: Buffer.from(result.data.subarray(offset, offset += 4)), + childIndex: Buffer.from(result.data.subarray(offset, offset += 4)), + chainCode: Buffer.from(result.data.subarray(offset, offset += 32)), + ak: Buffer.from(result.data.subarray(offset, offset += 32)), + nk: Buffer.from(result.data.subarray(offset, offset += 32)), + ovk: Buffer.from(result.data.subarray(offset, offset += 32)), + dk: Buffer.from(result.data.subarray(offset, offset += 32)) + }; +} +function encodeSaplingExtendedViewingKey(data, testnet = false) { + const prefix = testnet ? 'zxviewtestsapling' : 'zxviews'; + const buffer = Buffer.concat([ + Buffer.from([data.depth]), + data.parentFVKTag, + data.childIndex, + data.chainCode, + data.ak, + data.nk, + data.ovk, + data.dk + ]); + return (0, exports.toBech32)(prefix, buffer); +} diff --git a/dist/utils/script.d.ts b/dist/utils/script.d.ts new file mode 100644 index 00000000..fe68bb40 --- /dev/null +++ b/dist/utils/script.d.ts @@ -0,0 +1,11 @@ +export type ScriptChunk = Buffer | number; +export declare function isOPInt(value: number): boolean; +export declare function isPushOnlyChunk(value: ScriptChunk): boolean; +export declare function isPushOnly(value: Array): boolean; +export declare function asMinimalOP(buffer: Buffer): number | undefined; +export declare function compile(chunks: Buffer | Array): Buffer; +export declare function decompile(buffer: Array | Buffer): Array; +export declare function toASM(chunks: Array | Buffer): string; +export declare function fromASM(asm: string): Buffer; +export declare function isCanonicalPubKey(buffer: Buffer): boolean; +export declare function isDefinedHashType(hashType: number): boolean; diff --git a/dist/utils/script.js b/dist/utils/script.js new file mode 100644 index 00000000..73ebcfcc --- /dev/null +++ b/dist/utils/script.js @@ -0,0 +1,160 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isOPInt = isOPInt; +exports.isPushOnlyChunk = isPushOnlyChunk; +exports.isPushOnly = isPushOnly; +exports.asMinimalOP = asMinimalOP; +exports.compile = compile; +exports.decompile = decompile; +exports.toASM = toASM; +exports.fromASM = fromASM; +exports.isCanonicalPubKey = isCanonicalPubKey; +exports.isDefinedHashType = isDefinedHashType; +const pushdata = require("./pushdata"); +const ops_1 = require("./ops"); +const reverseops_1 = require("./reverseops"); +const string_1 = require("./string"); +const OP_INT_BASE = ops_1.OPS.OP_RESERVED; // OP_1 - 1 +function isOPInt(value) { + return ((value === ops_1.OPS.OP_0) || + (value >= ops_1.OPS.OP_1 && value <= ops_1.OPS.OP_16) || + (value === ops_1.OPS.OP_1NEGATE)); +} +function isPushOnlyChunk(value) { + return Buffer.isBuffer(value) || isOPInt(value); +} +function isPushOnly(value) { + return value.every(isPushOnlyChunk); +} +function asMinimalOP(buffer) { + if (buffer.length === 0) + return ops_1.OPS.OP_0; + if (buffer.length !== 1) + return; + if (buffer[0] >= 1 && buffer[0] <= 16) + return OP_INT_BASE + buffer[0]; + if (buffer[0] === 0x81) + return ops_1.OPS.OP_1NEGATE; +} +function compile(chunks) { + if (Buffer.isBuffer(chunks)) + return chunks; + const bufferSize = chunks.reduce(function (accum, chunk) { + if (Buffer.isBuffer(chunk)) { + // adhere to BIP62.3, minimal push policy + if (chunk.length === 1 && asMinimalOP(chunk) !== undefined) { + return accum + 1; + } + return accum + pushdata.encodingLength(chunk.length) + chunk.length; + } + else { + // opcode + return accum + 1; + } + }, 0.0); + var buffer = Buffer.alloc(bufferSize); + var offset = 0; + chunks.forEach(function (chunk) { + // data chunk + if (Buffer.isBuffer(chunk)) { + // adhere to BIP62.3, minimal push policy + var opcode = asMinimalOP(chunk); + if (opcode !== undefined) { + buffer.writeUInt8(opcode, offset); + offset += 1; + return; + } + offset += pushdata.encode(buffer, chunk.length, offset); + chunk.copy(buffer, offset); + offset += chunk.length; + // opcode + } + else { + buffer.writeUInt8(chunk, offset); + offset += 1; + } + }); + if (offset !== buffer.length) + throw new Error('Could not decode chunks'); + return buffer; +} +function decompile(buffer) { + if (Array.isArray(buffer)) + return buffer; + var chunks = []; + var i = 0; + while (i < buffer.length) { + var opcode = buffer[i]; + // data chunk + if ((opcode > ops_1.OPS.OP_0) && (opcode <= ops_1.OPS.OP_PUSHDATA4)) { + var d = pushdata.decode(buffer, i); + // did reading a pushDataInt fail? empty script + if (d === null) + return []; + i += d.size; + // attempt to read too much data? empty script + if (i + d.number > buffer.length) + return []; + var data = Buffer.from(buffer.subarray(i, i + d.number)); + i += d.number; + // decompile minimally + var op = asMinimalOP(data); + if (op !== undefined) { + chunks.push(op); + } + else { + chunks.push(data); + } + } + else { + chunks.push(opcode); + i += 1; + } + } + return chunks; +} +function toASM(chunks) { + if (Buffer.isBuffer(chunks)) { + chunks = decompile(chunks); + } + return chunks.map(function (chunk) { + // data? + if (Buffer.isBuffer(chunk)) { + var op = asMinimalOP(chunk); + if (op === undefined) + return chunk.toString('hex'); + chunk = op; + } + // opcode! + return reverseops_1.default[chunk]; + }).join(' '); +} +function fromASM(asm) { + return compile(asm.split(' ').map(function (chunkStr) { + // opcode? + if (ops_1.OPS[chunkStr] !== undefined) + return ops_1.OPS[chunkStr]; + if (!(0, string_1.isHexString)(chunkStr)) + throw new Error("Expected hex in fromASM"); + // data! + return Buffer.from(chunkStr, 'hex'); + })); +} +function isCanonicalPubKey(buffer) { + if (!Buffer.isBuffer(buffer)) + return false; + if (buffer.length < 33) + return false; + switch (buffer[0]) { + case 0x02: + case 0x03: + return buffer.length === 33; + case 0x04: + return buffer.length === 65; + } + return false; +} +function isDefinedHashType(hashType) { + var hashTypeMod = hashType & ~0xc0; + return hashTypeMod > 0x00 && hashTypeMod < 0x04; +} diff --git a/dist/utils/string.d.ts b/dist/utils/string.d.ts new file mode 100644 index 00000000..c3db2564 --- /dev/null +++ b/dist/utils/string.d.ts @@ -0,0 +1,3 @@ +import bufferutils from "../utils/bufferutils"; +export declare const isHexString: (s: string) => boolean; +export declare const readLimitedString: (reader: InstanceType, limit: number) => Buffer; diff --git a/dist/utils/string.js b/dist/utils/string.js new file mode 100644 index 00000000..05f95332 --- /dev/null +++ b/dist/utils/string.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.readLimitedString = exports.isHexString = void 0; +const isHexString = (s) => { + try { + const striBuf = Buffer.from(s, 'hex'); + striBuf.toString('hex'); + return true; + } + catch (e) { + return false; + } +}; +exports.isHexString = isHexString; +const readLimitedString = (reader, limit) => { + const size = reader.readCompactSize(); + if (size > limit) { + throw new Error("String length limit exceeded"); + } + return reader.readSlice(size); +}; +exports.readLimitedString = readLimitedString; diff --git a/dist/utils/types/BigNumber.d.ts b/dist/utils/types/BigNumber.d.ts new file mode 100644 index 00000000..7ecd51e6 --- /dev/null +++ b/dist/utils/types/BigNumber.d.ts @@ -0,0 +1,3 @@ +declare const BNClass: import("bn.js"); +export type BigNumber = typeof BNClass; +export {}; diff --git a/dist/utils/types/BigNumber.js b/dist/utils/types/BigNumber.js new file mode 100644 index 00000000..43141c7e --- /dev/null +++ b/dist/utils/types/BigNumber.js @@ -0,0 +1,5 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const bn_js_1 = require("bn.js"); +// Hack to force BigNumber to get typeof class instead of BN namespace +const BNClass = new bn_js_1.BN(0); diff --git a/dist/utils/types/DataDescriptor.d.ts b/dist/utils/types/DataDescriptor.d.ts new file mode 100644 index 00000000..4c817d19 --- /dev/null +++ b/dist/utils/types/DataDescriptor.d.ts @@ -0,0 +1,11 @@ +export type DataDescriptorInfo = { + version?: number; + flags?: number; + objectdata?: string; + label?: string; + mimeType?: string; + salt?: string; + epk?: string; + ivk?: string; + ssk?: string; +}; diff --git a/dist/utils/types/DataDescriptor.js b/dist/utils/types/DataDescriptor.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/utils/types/DataDescriptor.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/utils/types/MmrDescriptor.d.ts b/dist/utils/types/MmrDescriptor.d.ts new file mode 100644 index 00000000..bddf7d97 --- /dev/null +++ b/dist/utils/types/MmrDescriptor.d.ts @@ -0,0 +1,9 @@ +import { DataDescriptorInfo } from './DataDescriptor'; +export type MmrDescriptorParameters = { + version?: number; + objecthashtype?: number; + mmrhashtype?: number; + mmrroot?: DataDescriptorInfo; + mmrhashes?: DataDescriptorInfo; + datadescriptors?: DataDescriptorInfo[]; +}; diff --git a/dist/utils/types/MmrDescriptor.js b/dist/utils/types/MmrDescriptor.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/utils/types/MmrDescriptor.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/utils/types/SerializableEntity.d.ts b/dist/utils/types/SerializableEntity.d.ts new file mode 100644 index 00000000..e68f8d9a --- /dev/null +++ b/dist/utils/types/SerializableEntity.d.ts @@ -0,0 +1,10 @@ +export interface SerializableEntity { + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + getByteLength(): number; +} +export interface SerializableDataEntity { + getDataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer): void; +} diff --git a/dist/utils/types/SerializableEntity.js b/dist/utils/types/SerializableEntity.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/utils/types/SerializableEntity.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/utils/types/SignData.d.ts b/dist/utils/types/SignData.d.ts new file mode 100644 index 00000000..d947a7e3 --- /dev/null +++ b/dist/utils/types/SignData.d.ts @@ -0,0 +1,8 @@ +export type SignDataParameters = { + filename?: string; + message?: string; + messagehex?: string; + messagebase64?: string; + datahash?: string; + vdxfdata?: string; +}; diff --git a/dist/utils/types/SignData.js b/dist/utils/types/SignData.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/utils/types/SignData.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/utils/types/Signature.d.ts b/dist/utils/types/Signature.d.ts new file mode 100644 index 00000000..13535eed --- /dev/null +++ b/dist/utils/types/Signature.d.ts @@ -0,0 +1,9 @@ +export type SignatureDataInfo = { + version: number; + systemid: string; + hashtype: number; + signaturehash: string; + identityid: string; + signaturetype: number; + signature: string; +}; diff --git a/dist/utils/types/Signature.js b/dist/utils/types/Signature.js new file mode 100644 index 00000000..c8ad2e54 --- /dev/null +++ b/dist/utils/types/Signature.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/utils/varint.d.ts b/dist/utils/varint.d.ts new file mode 100644 index 00000000..860e3833 --- /dev/null +++ b/dist/utils/varint.d.ts @@ -0,0 +1,15 @@ +import { BigNumber } from './types/BigNumber'; +declare function encode(number: BigNumber, buffer: Buffer, offset: number): { + buffer: Buffer; + bytes: number; +}; +declare function decode(buffer: Buffer, offset: number): { + decoded: BigNumber; + bytes: number; +}; +declare const _default: { + encode: typeof encode; + decode: typeof decode; + encodingLength: (number: BigNumber) => number; +}; +export default _default; diff --git a/dist/utils/varint.js b/dist/utils/varint.js new file mode 100644 index 00000000..60e45c47 --- /dev/null +++ b/dist/utils/varint.js @@ -0,0 +1,60 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +// Signed varints +const bn_js_1 = require("bn.js"); +const writeVarInt = (number) => { + let tmp = []; + let len = 0; + while (true) { + tmp[len] = (number.and(new bn_js_1.BN('7f', 16))).or(new bn_js_1.BN(len ? '80' : '00', 'hex')).toBuffer()[0]; + if (number.lte(new bn_js_1.BN('7f', 16))) + break; + number = number.shrn(7).sub(new bn_js_1.BN(1, 10)); + len++; + } + tmp = tmp.reverse(); + return Buffer.from(tmp); +}; +const readVarInt = (data, offset) => { + let n = new bn_js_1.BN(0, 10); + let pos = offset; + while (true) { + let chData = data.readUInt8(pos); // single char + pos++; + n = n.shln(7).or(new bn_js_1.BN(chData & 0x7f)); + if (chData & 0x80) + n = n.add(new bn_js_1.BN(1, 10)); + else + return { value: n, length: pos - offset }; + } +}; +const encodingLength = (number) => { + return writeVarInt(number).length; +}; +function encode(number, buffer, offset) { + if (!buffer) + buffer = Buffer.alloc(encodingLength(number)); + if (!Buffer.isBuffer(buffer)) + throw new TypeError('buffer must be a Buffer instance'); + if (!offset) + offset = 0; + const varintBuf = writeVarInt(number); + if (buffer.length < offset + varintBuf.length) { + throw new Error('Cannot write slice out of bounds'); + } + const bytes = varintBuf.copy(buffer, offset); + return { buffer, bytes }; +} +function decode(buffer, offset) { + if (!Buffer.isBuffer(buffer)) + throw new TypeError('buffer must be a Buffer instance'); + if (!offset) + offset = 0; + const { value, length } = readVarInt(buffer, offset); + return { decoded: value, bytes: length }; +} +exports.default = { + encode, + decode, + encodingLength +}; diff --git a/dist/utils/varuint.d.ts b/dist/utils/varuint.d.ts new file mode 100644 index 00000000..cb25c491 --- /dev/null +++ b/dist/utils/varuint.d.ts @@ -0,0 +1,21 @@ +export declare const encode: (number: number, buffer: Buffer, offset: number) => { + buffer: Buffer; + bytes: number; +}; +export declare const decode: (buffer: Buffer, offset: number) => { + decoded: number; + bytes: number; +}; +export declare const encodingLength: (number: number) => number; +declare const _default: { + encodingLength: (number: number) => number; + encode: (number: number, buffer: Buffer, offset: number) => { + buffer: Buffer; + bytes: number; + }; + decode: (buffer: Buffer, offset: number) => { + decoded: number; + bytes: number; + }; +}; +export default _default; diff --git a/dist/utils/varuint.js b/dist/utils/varuint.js new file mode 100644 index 00000000..89a32dbc --- /dev/null +++ b/dist/utils/varuint.js @@ -0,0 +1,115 @@ +"use strict"; +// The MIT License (MIT) +Object.defineProperty(exports, "__esModule", { value: true }); +exports.encodingLength = exports.decode = exports.encode = void 0; +// Copyright (c) 2016 Kirill Fomichev +// Parts of this software are based on https://github.com/mappum/bitcoin-protocol +// Copyright (c) 2016 Matt Bell +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// Number.MAX_SAFE_INTEGER +const MAX_SAFE_INTEGER = 9007199254740991; +const checkUInt53 = (n) => { + if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) + throw new RangeError("value out of range"); +}; +const encode = (number, buffer, offset) => { + checkUInt53(number); + if (!buffer) + buffer = Buffer.alloc((0, exports.encodingLength)(number)); + if (!Buffer.isBuffer(buffer)) + throw new TypeError("buffer must be a Buffer instance"); + if (!offset) + offset = 0; + let bytes; + // 8 bit + if (number < 0xfd) { + buffer.writeUInt8(number, offset); + bytes = 1; + // 16 bit + } + else if (number <= 0xffff) { + buffer.writeUInt8(0xfd, offset); + buffer.writeUInt16LE(number, offset + 1); + bytes = 3; + // 32 bit + } + else if (number <= 0xffffffff) { + buffer.writeUInt8(0xfe, offset); + buffer.writeUInt32LE(number, offset + 1); + bytes = 5; + // 64 bit + } + else { + buffer.writeUInt8(0xff, offset); + buffer.writeUInt32LE(number >>> 0, offset + 1); + buffer.writeUInt32LE((number / 0x100000000) | 0, offset + 5); + bytes = 9; + } + return { buffer, bytes }; +}; +exports.encode = encode; +const decode = (buffer, offset) => { + if (!Buffer.isBuffer(buffer)) + throw new TypeError("buffer must be a Buffer instance"); + if (!offset) + offset = 0; + var first = buffer.readUInt8(offset); + let bytes; + let decoded; + // 8 bit + if (first < 0xfd) { + bytes = 1; + decoded = first; + // 16 bit + } + else if (first === 0xfd) { + bytes = 3; + decoded = buffer.readUInt16LE(offset + 1); + // 32 bit + } + else if (first === 0xfe) { + bytes = 5; + decoded = buffer.readUInt32LE(offset + 1); + // 64 bit + } + else { + bytes = 9; + var lo = buffer.readUInt32LE(offset + 1); + var hi = buffer.readUInt32LE(offset + 5); + var number = hi * 0x0100000000 + lo; + checkUInt53(number); + decoded = number; + } + return { decoded, bytes }; +}; +exports.decode = decode; +const encodingLength = (number) => { + checkUInt53(number); + return number < 0xfd + ? 1 + : number <= 0xffff + ? 3 + : number <= 0xffffffff + ? 5 + : 9; +}; +exports.encodingLength = encodingLength; +exports.default = { + encodingLength: exports.encodingLength, + encode: exports.encode, + decode: exports.decode, +}; diff --git a/dist/vdxf/classes/Challenge.d.ts b/dist/vdxf/classes/Challenge.d.ts new file mode 100644 index 00000000..ec8ec04a --- /dev/null +++ b/dist/vdxf/classes/Challenge.d.ts @@ -0,0 +1,81 @@ +import { Utf8DataVdxfObject, VDXFObject, Utf8OrBase58Object } from "../"; +import { Context } from "./Context"; +export declare class RedirectUri extends VDXFObject { + uri: string; + constructor(uri?: string, vdxfkey?: string); + dataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer, offset?: number): number; + toJson(): { + uri: string; + vdxfkey: string; + }; +} +export declare class Subject extends Utf8OrBase58Object { + constructor(data?: string, vdxfkey?: string); +} +export declare class ProvisioningInfo extends Utf8OrBase58Object { + constructor(data?: string, vdxfkey?: string); +} +export declare class RequestedPermission extends Utf8DataVdxfObject { + constructor(vdxfkey?: string); +} +export declare class Audience extends Utf8DataVdxfObject { +} +export declare class AltAuthFactor extends Utf8DataVdxfObject { +} +export declare class Attestation extends Utf8DataVdxfObject { +} +export interface ChallengeInterface { + challenge_id: string; + requested_access?: Array | null; + requested_access_audience?: Array | null; + subject?: Array; + provisioning_info?: Array; + alt_auth_factors?: Array | null; + session_id?: string; + attestations?: Array; + redirect_uris?: Array; + created_at: number; + skip?: boolean; + salt?: string; + context?: Context; +} +export declare class Challenge extends VDXFObject implements ChallengeInterface { + challenge_id: string; + requested_access?: Array | null; + requested_access_audience?: Array | null; + subject?: Array; + provisioning_info?: Array; + alt_auth_factors?: Array | null; + session_id?: string; + attestations?: Array; + redirect_uris?: Array; + created_at: number; + skip?: boolean; + salt?: string; + context?: Context; + constructor(challenge?: ChallengeInterface, vdxfkey?: string); + dataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer, offset?: number): number; + toJson(): { + vdxfkey: string; + challenge_id: string; + requested_access: RequestedPermission[]; + requested_access_audience: RequestedPermission[]; + subject: Subject[]; + provisioning_info: ProvisioningInfo[]; + alt_auth_factors: AltAuthFactor[]; + session_id: string; + attestations: Attestation[]; + redirect_uris: { + uri: string; + vdxfkey: string; + }[]; + created_at: number; + salt: string; + context: Context; + skip: boolean; + }; +} diff --git a/dist/vdxf/classes/Challenge.js b/dist/vdxf/classes/Challenge.js new file mode 100644 index 00000000..4b85b519 --- /dev/null +++ b/dist/vdxf/classes/Challenge.js @@ -0,0 +1,267 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Challenge = exports.Attestation = exports.AltAuthFactor = exports.Audience = exports.RequestedPermission = exports.ProvisioningInfo = exports.Subject = exports.RedirectUri = void 0; +const __1 = require("../"); +const bufferutils_1 = require("../../utils/bufferutils"); +const varuint_1 = require("../../utils/varuint"); +const Context_1 = require("./Context"); +const Hash160_1 = require("./Hash160"); +class RedirectUri extends __1.VDXFObject { + constructor(uri = "", vdxfkey = "") { + super(vdxfkey); + this.uri = uri; + } + dataByteLength() { + return this.toDataBuffer().length; + } + toDataBuffer() { + return Buffer.from(this.uri, "utf-8"); + } + fromDataBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + this.uri = reader.readVarSlice().toString("utf-8"); + return reader.offset; + } + toJson() { + return { + uri: this.uri, + vdxfkey: this.vdxfkey, + }; + } +} +exports.RedirectUri = RedirectUri; +class Subject extends __1.Utf8OrBase58Object { + constructor(data = "", vdxfkey = "") { + super(data, vdxfkey, [ + __1.ID_ADDRESS_VDXF_KEY.vdxfid, + __1.ID_PARENT_VDXF_KEY.vdxfid, + __1.ID_SYSTEMID_VDXF_KEY.vdxfid, + ]); + } +} +exports.Subject = Subject; +class ProvisioningInfo extends __1.Utf8OrBase58Object { + constructor(data = "", vdxfkey = "") { + super(data, vdxfkey, [ + __1.ID_ADDRESS_VDXF_KEY.vdxfid, + __1.ID_PARENT_VDXF_KEY.vdxfid, + __1.ID_SYSTEMID_VDXF_KEY.vdxfid, + ]); + } +} +exports.ProvisioningInfo = ProvisioningInfo; +class RequestedPermission extends __1.Utf8DataVdxfObject { + constructor(vdxfkey = "") { + super("", vdxfkey); + } +} +exports.RequestedPermission = RequestedPermission; +class Audience extends __1.Utf8DataVdxfObject { +} +exports.Audience = Audience; +class AltAuthFactor extends __1.Utf8DataVdxfObject { +} +exports.AltAuthFactor = AltAuthFactor; +class Attestation extends __1.Utf8DataVdxfObject { +} +exports.Attestation = Attestation; +class Challenge extends __1.VDXFObject { + constructor(challenge = { challenge_id: "", created_at: 0 }, vdxfkey = __1.LOGIN_CONSENT_CHALLENGE_VDXF_KEY.vdxfid) { + super(vdxfkey); + this.challenge_id = challenge.challenge_id; + this.requested_access = challenge.requested_access + ? challenge.requested_access.map((x) => new RequestedPermission(x.vdxfkey)) + : challenge.requested_access; + this.requested_access_audience = challenge.requested_access_audience; + this.subject = challenge.subject + ? challenge.subject.map((x) => new Subject(x.data, x.vdxfkey)) + : challenge.subject; + this.provisioning_info = challenge.provisioning_info + ? challenge.provisioning_info.map((x) => new ProvisioningInfo(x.data, x.vdxfkey)) + : challenge.provisioning_info; + this.alt_auth_factors = challenge.alt_auth_factors; + this.session_id = challenge.session_id; + this.attestations = challenge.attestations; + this.redirect_uris = challenge.redirect_uris + ? challenge.redirect_uris.map((x) => new RedirectUri(x.uri, x.vdxfkey)) + : challenge.redirect_uris; + this.created_at = challenge.created_at; + this.salt = challenge.salt; + this.context = challenge.context + ? new Context_1.Context(challenge.context.kv) + : challenge.context; + this.skip = challenge.skip ? true : false; + } + dataByteLength() { + let length = 0; + const _challenge_id = Hash160_1.Hash160.fromAddress(this.challenge_id, true); + const _created_at = this.created_at; + const _salt = this.salt + ? Hash160_1.Hash160.fromAddress(this.salt, true) + : Hash160_1.Hash160.getEmpty(); + const _session_id = this.session_id + ? Hash160_1.Hash160.fromAddress(this.session_id, true) + : Hash160_1.Hash160.getEmpty(); + const _requested_access = this.requested_access + ? this.requested_access + : []; + const _requested_access_audience = []; + const _subject = this.subject ? this.subject : []; + const _provisioning_info = this.provisioning_info ? this.provisioning_info : []; + const _alt_auth_factors = []; + const _attestations = this.attestations ? this.attestations : []; + const _redirect_uris = this.redirect_uris ? this.redirect_uris : []; + const _context = this.context ? this.context : new Context_1.Context({}); + length += _challenge_id.byteLength(); + length += 8; // created_at + length += _salt.byteLength(); + if (this.vdxfkey === __1.LOGIN_CONSENT_CHALLENGE_VDXF_KEY.vdxfid) { + length += 1; // skip + length += _session_id.byteLength(); + length += varuint_1.default.encodingLength(_requested_access.length); + length += _requested_access.reduce((sum, current) => sum + current.byteLength(), 0); + length += varuint_1.default.encodingLength(_requested_access_audience.length); + length += varuint_1.default.encodingLength(_subject.length); + length += _subject.reduce((sum, current) => sum + current.byteLength(), 0); + length += varuint_1.default.encodingLength(_provisioning_info.length); + length += _provisioning_info.reduce((sum, current) => sum + current.byteLength(), 0); + length += varuint_1.default.encodingLength(_alt_auth_factors.length); + length += varuint_1.default.encodingLength(_attestations.length); + length += _attestations.reduce((sum, current) => sum + current.byteLength(), 0); + length += varuint_1.default.encodingLength(_redirect_uris.length); + length += _redirect_uris.reduce((sum, current) => sum + current.byteLength(), 0); + } + length += _context.byteLength(); + return length; + } + toDataBuffer() { + const buffer = Buffer.alloc(this.dataByteLength()); + const writer = new bufferutils_1.default.BufferWriter(buffer); + const _challenge_id = Hash160_1.Hash160.fromAddress(this.challenge_id, true); + const _created_at = this.created_at; + const _salt = this.salt + ? Hash160_1.Hash160.fromAddress(this.salt, true) + : Hash160_1.Hash160.getEmpty(); + const _session_id = this.session_id + ? Hash160_1.Hash160.fromAddress(this.session_id, true) + : Hash160_1.Hash160.getEmpty(); + const _requested_access = this.requested_access + ? this.requested_access + : []; + const _requested_access_audience = []; + const _subject = this.subject ? this.subject : []; + const _provisioning_info = this.provisioning_info ? this.provisioning_info : []; + const _alt_auth_factors = []; + const _attestations = this.attestations ? this.attestations : []; + const _redirect_uris = this.redirect_uris ? this.redirect_uris : []; + const _context = this.context ? this.context : new Context_1.Context({}); + writer.writeSlice(_challenge_id.toBuffer()); + writer.writeUInt64(_created_at); + writer.writeSlice(_salt.toBuffer()); + if (this.vdxfkey === __1.LOGIN_CONSENT_CHALLENGE_VDXF_KEY.vdxfid) { + writer.writeUInt8(this.skip ? 1 : 0); + writer.writeSlice(_session_id.toBuffer()); + writer.writeArray(_requested_access.map((x) => x.toBuffer())); + writer.writeArray(_requested_access_audience.map((x) => x.toBuffer())); + writer.writeArray(_subject.map((x) => x.toBuffer())); + writer.writeArray(_provisioning_info.map((x) => x.toBuffer())); + writer.writeArray(_alt_auth_factors.map((x) => x.toBuffer())); + writer.writeArray(_attestations.map((x) => x.toBuffer())); + writer.writeArray(_redirect_uris.map((x) => x.toBuffer())); + } + writer.writeSlice(_context.toBuffer()); + return writer.buffer; + } + fromDataBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + const challengeLength = reader.readCompactSize(); + if (challengeLength == 0) { + throw new Error("Cannot create challenge from empty buffer"); + } + else { + const _challenge_id = new Hash160_1.Hash160(); + reader.offset = _challenge_id.fromBuffer(reader.buffer, true, reader.offset); + this.challenge_id = _challenge_id.toAddress(); + this.created_at = reader.readUInt64(); + const _salt = new Hash160_1.Hash160(); + reader.offset = _salt.fromBuffer(reader.buffer, true, reader.offset); + this.salt = _salt.toAddress(); + if (this.vdxfkey === __1.LOGIN_CONSENT_CHALLENGE_VDXF_KEY.vdxfid) { + this.skip = reader.readUInt8() === 1 ? true : false; + const _session_id = new Hash160_1.Hash160(); + reader.offset = _session_id.fromBuffer(reader.buffer, true, reader.offset); + this.session_id = _session_id.toAddress(); + this.requested_access = []; + const requestedAccessLength = reader.readCompactSize(); + for (let i = 0; i < requestedAccessLength; i++) { + const _perm = new RequestedPermission(); + reader.offset = _perm.fromBuffer(reader.buffer, reader.offset); + this.requested_access.push(_perm); + } + this.requested_access_audience = []; + const audienceLength = reader.readCompactSize(); + if (audienceLength > 0) { + throw new Error("Requested access audience currently unsupported"); + } + this.subject = []; + const subjectLength = reader.readCompactSize(); + for (let i = 0; i < subjectLength; i++) { + const _subject = new Subject(); + reader.offset = _subject.fromBuffer(reader.buffer, reader.offset); + this.subject.push(_subject); + } + this.provisioning_info = []; + const provisioningInfoLength = reader.readCompactSize(); + for (let i = 0; i < provisioningInfoLength; i++) { + const _provisioning_info = new ProvisioningInfo(); + reader.offset = _provisioning_info.fromBuffer(reader.buffer, reader.offset); + this.provisioning_info.push(_provisioning_info); + } + this.alt_auth_factors = []; + const altAuthFactorLength = reader.readCompactSize(); + if (altAuthFactorLength > 0) { + throw new Error("Alt auth factors currently unsupported"); + } + this.attestations = []; + const attestationsLength = reader.readCompactSize(); + for (let i = 0; i < attestationsLength; i++) { + const _att = new Attestation(); + reader.offset = _att.fromBuffer(reader.buffer, reader.offset); + this.attestations.push(_att); + } + this.redirect_uris = []; + const urisLength = reader.readCompactSize(); + for (let i = 0; i < urisLength; i++) { + const _redirect_uri = new RedirectUri(); + reader.offset = _redirect_uri.fromBuffer(reader.buffer, reader.offset); + this.redirect_uris.push(_redirect_uri); + } + } + const _context = new Context_1.Context(); + reader.offset = _context.fromBuffer(reader.buffer, reader.offset); + this.context = _context; + } + return reader.offset; + } + toJson() { + return { + vdxfkey: this.vdxfkey, + challenge_id: this.challenge_id, + requested_access: this.requested_access, + requested_access_audience: this.requested_access_audience, + subject: this.subject, + provisioning_info: this.provisioning_info, + alt_auth_factors: this.alt_auth_factors, + session_id: this.session_id, + attestations: this.attestations, + redirect_uris: this.redirect_uris + ? this.redirect_uris.map((x) => x.toJson()) + : this.redirect_uris, + created_at: this.created_at, + salt: this.salt, + context: this.context, + skip: this.skip, + }; + } +} +exports.Challenge = Challenge; diff --git a/dist/vdxf/classes/CompactAddressObject.d.ts b/dist/vdxf/classes/CompactAddressObject.d.ts new file mode 100644 index 00000000..04065cab --- /dev/null +++ b/dist/vdxf/classes/CompactAddressObject.d.ts @@ -0,0 +1,59 @@ +/** + * CompactIdentityObject - Class representing an id in the smallest possible format + * + * This class is used to represent an identity or address in a compact format, allowing for efficient + * storage and transmission. The compact id can be represented either as a fully qualified name (FQN) + * or as an identity address (iaddress) or as an x address (tag/index). The class includes methods for serialization, deserialization, + * and validation of the compact id object. + */ +import { BigNumber } from '../../utils/types/BigNumber'; +import { SerializableEntity } from '../../utils/types/SerializableEntity'; +export interface CompactAddressObjectJson { + version: number; + type: number; + address: string; + rootsystemname: string; + namespace?: string; +} +export interface CompactAddressObjectInterface { + version?: BigNumber; + type: BigNumber; + address: string; + rootSystemName?: string; + nameSpace?: string; +} +export type CompactAddressIVariant = "COMPACT_ADDR_I_VARIANT"; +export type CompactAddressXVariant = "COMPACT_ADDR_X_VARIANT"; +export type CompactAddressVariantName = CompactAddressIVariant | CompactAddressXVariant; +export type CompactAddressVariantAllowedType = T extends CompactAddressIVariant ? `${1 | 2}` : T extends CompactAddressXVariant ? `${1 | 3}` : never; +export declare class CompactAddressObject implements SerializableEntity { + static VERSION_INVALID: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static DEFAULT_VERSION: import("bn.js"); + static TYPE_FQN: import("bn.js"); + static TYPE_I_ADDRESS: import("bn.js"); + static TYPE_X_ADDRESS: import("bn.js"); + version: BigNumber; + type: CompactAddressVariantAllowedType; + address: string; + rootSystemName: string; + nameSpace: string; + constructor(data?: CompactAddressObjectInterface); + get BNType(): import("bn.js"); + set setType(type: BigNumber); + isFQN(): boolean; + isIaddress(): boolean; + isXaddress(): boolean; + isValid(): boolean; + toIAddress(): string; + toXAddress(): string; + static fromIAddress(iaddr: string): CompactAddressObject; + static fromXAddress(xaddr: string, nameSpace?: string): CompactAddressObject; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): CompactAddressObjectJson; + static fromJson(json: any): CompactAddressObject; +} +export type CompactXAddressObject = CompactAddressObject; diff --git a/dist/vdxf/classes/CompactAddressObject.js b/dist/vdxf/classes/CompactAddressObject.js new file mode 100644 index 00000000..7bb6a739 --- /dev/null +++ b/dist/vdxf/classes/CompactAddressObject.js @@ -0,0 +1,141 @@ +"use strict"; +/** + * CompactIdentityObject - Class representing an id in the smallest possible format + * + * This class is used to represent an identity or address in a compact format, allowing for efficient + * storage and transmission. The compact id can be represented either as a fully qualified name (FQN) + * or as an identity address (iaddress) or as an x address (tag/index). The class includes methods for serialization, deserialization, + * and validation of the compact id object. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CompactAddressObject = void 0; +const bn_js_1 = require("bn.js"); +const bufferutils_1 = require("../../utils/bufferutils"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const varuint_1 = require("../../utils/varuint"); +const address_1 = require("../../utils/address"); +const vdxf_1 = require("../../constants/vdxf"); +const pbaas_1 = require("../../constants/pbaas"); +class CompactAddressObject { + constructor(data) { + this.version = (data === null || data === void 0 ? void 0 : data.version) || new bn_js_1.BN(CompactAddressObject.DEFAULT_VERSION); + this.type = (data === null || data === void 0 ? void 0 : data.type.toString()) || "1"; + this.address = (data === null || data === void 0 ? void 0 : data.address) || ''; + this.rootSystemName = (data === null || data === void 0 ? void 0 : data.rootSystemName) || 'VRSC'; + this.nameSpace = (data === null || data === void 0 ? void 0 : data.nameSpace) || (0, address_1.toIAddress)(this.rootSystemName); + } + get BNType() { + return new bn_js_1.BN(this.type); + } + set setType(type) { + this.type = type.toString(); + } + isFQN() { + return (this.BNType.eq(CompactAddressObject.TYPE_FQN)); + } + isIaddress() { + return (this.BNType.eq(CompactAddressObject.TYPE_I_ADDRESS)); + } + isXaddress() { + return (this.BNType.eq(CompactAddressObject.TYPE_X_ADDRESS)); + } + isValid() { + return this.address != null; + } + toIAddress() { + if (this.isXaddress()) + throw new Error("Cannot convert I to X address"); + else if (this.isIaddress()) + return this.address; + else if (this.isFQN()) { + return (0, address_1.toIAddress)(this.address, this.rootSystemName); + } + else + throw new Error("Unknown type"); + } + toXAddress() { + if (this.isIaddress()) + throw new Error("Cannot convert X to I address"); + else if (this.isXaddress()) + return this.address; + else if (this.isFQN()) { + return (0, address_1.getDataKey)(this.address, this.nameSpace, (0, address_1.toIAddress)(this.rootSystemName), vdxf_1.X_ADDR_VERSION).id; + } + else + throw new Error("Unknown type"); + } + static fromIAddress(iaddr) { + return new CompactAddressObject({ + address: iaddr, + type: CompactAddressObject.TYPE_I_ADDRESS + }); + } + static fromXAddress(xaddr, nameSpace = pbaas_1.DEFAULT_VERUS_CHAINID) { + return new CompactAddressObject({ + address: xaddr, + nameSpace: nameSpace, + type: CompactAddressObject.TYPE_X_ADDRESS + }); + } + getByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.version.toNumber()); + length += varuint_1.default.encodingLength(this.BNType.toNumber()); + if (this.isIaddress() || this.isXaddress()) { + length += vdxf_1.HASH160_BYTE_LENGTH; // identityuint160 + } + else { + const addrLen = Buffer.from(this.address, 'utf8').byteLength; + length += varuint_1.default.encodingLength(addrLen) + addrLen; + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeCompactSize(this.version.toNumber()); + writer.writeCompactSize(this.BNType.toNumber()); + if (this.isIaddress() || this.isXaddress()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.address).hash); + } + else { + writer.writeVarSlice(Buffer.from(this.address, 'utf8')); + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new BufferReader(buffer, offset); + this.version = new bn_js_1.BN(reader.readCompactSize()); + this.type = new bn_js_1.BN(reader.readCompactSize()).toString(); + if (this.isIaddress() || this.isXaddress()) { + this.address = (0, address_1.toBase58Check)(reader.readSlice(20), this.isIaddress() ? vdxf_1.I_ADDR_VERSION : vdxf_1.X_ADDR_VERSION); + } + else { + this.address = reader.readVarSlice().toString('utf8'); + } + return reader.offset; + } + toJson() { + return { + version: this.version.toNumber(), + type: this.BNType.toNumber(), + address: this.address, + rootsystemname: this.rootSystemName, + }; + } + static fromJson(json) { + const instance = new CompactAddressObject(); + instance.version = new bn_js_1.BN(json.version); + instance.type = new bn_js_1.BN(json.type).toString(); + instance.address = json.address; + instance.rootSystemName = json.rootsystemname; + return instance; + } +} +exports.CompactAddressObject = CompactAddressObject; +CompactAddressObject.VERSION_INVALID = new bn_js_1.BN(0); +CompactAddressObject.FIRST_VERSION = new bn_js_1.BN(1); +CompactAddressObject.LAST_VERSION = new bn_js_1.BN(1); +CompactAddressObject.DEFAULT_VERSION = new bn_js_1.BN(1); +CompactAddressObject.TYPE_FQN = new bn_js_1.BN(1); +CompactAddressObject.TYPE_I_ADDRESS = new bn_js_1.BN(2); +CompactAddressObject.TYPE_X_ADDRESS = new bn_js_1.BN(3); diff --git a/dist/vdxf/classes/Context.d.ts b/dist/vdxf/classes/Context.d.ts new file mode 100644 index 00000000..8b21eda1 --- /dev/null +++ b/dist/vdxf/classes/Context.d.ts @@ -0,0 +1,18 @@ +import { VDXFObject } from ".."; +export declare class Context extends VDXFObject { + kv: { + [key: string]: string; + }; + constructor(kv?: { + [key: string]: string; + }, vdxfkey?: string); + dataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer, offset?: number): number; + toJson(): { + kv: { + [key: string]: string; + }; + vdxfkey: string; + }; +} diff --git a/dist/vdxf/classes/Context.js b/dist/vdxf/classes/Context.js new file mode 100644 index 00000000..1dd72529 --- /dev/null +++ b/dist/vdxf/classes/Context.js @@ -0,0 +1,63 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Context = void 0; +const __1 = require(".."); +const vdxf_1 = require("../../constants/vdxf"); +const address_1 = require("../../utils/address"); +const bufferutils_1 = require("../../utils/bufferutils"); +const varuint_1 = require("../../utils/varuint"); +class Context extends __1.VDXFObject { + constructor(kv = {}, vdxfkey = __1.LOGIN_CONSENT_CONTEXT_VDXF_KEY.vdxfid) { + super(vdxfkey); + this.kv = kv; + } + dataByteLength() { + let length = 0; + const keys = Object.keys(this.kv); + length += varuint_1.default.encodingLength(keys.length); + for (const key of keys) { + const value = this.kv[key]; + if (value != null) { + const valueBuf = Buffer.from(value, "utf-8"); + length += (0, address_1.fromBase58Check)(key).hash.length; + length += valueBuf.length + varuint_1.default.encodingLength(valueBuf.length); + } + } + return length; + } + toDataBuffer() { + const buffer = Buffer.alloc(this.dataByteLength()); + const writer = new bufferutils_1.default.BufferWriter(buffer); + const keys = Object.keys(this.kv); + writer.writeCompactSize(keys.length); + for (const key of Object.keys(this.kv)) { + const value = this.kv[key]; + const valueBuf = Buffer.from(value, "utf-8"); + writer.writeSlice((0, address_1.fromBase58Check)(key).hash); + writer.writeVarSlice(valueBuf); + } + return writer.buffer; + } + fromDataBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + const contextLength = reader.readCompactSize(); + if (contextLength == 0) { + this.kv = {}; + return reader.offset; + } + else { + const numKeys = reader.readCompactSize(); + for (let i = 0; i < numKeys; i++) { + this.kv[(0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION)] = reader.readVarSlice().toString("utf-8"); + } + return reader.offset; + } + } + toJson() { + return { + kv: this.kv, + vdxfkey: this.vdxfkey, + }; + } +} +exports.Context = Context; diff --git a/dist/vdxf/classes/Decision.d.ts b/dist/vdxf/classes/Decision.d.ts new file mode 100644 index 00000000..628ce099 --- /dev/null +++ b/dist/vdxf/classes/Decision.d.ts @@ -0,0 +1,62 @@ +import { VDXFObject } from ".."; +import { Attestation } from "./Challenge"; +import { Context } from "./Context"; +import { Request, RequestInterface } from "./Request"; +export interface DecisionInterface { + decision_id: string; + request: RequestInterface; + created_at: number; + salt?: string; + skipped?: boolean; + context?: Context; + attestations?: Array; +} +export declare class Decision extends VDXFObject { + decision_id: string; + context?: Context; + request: Request; + created_at: number; + skipped?: boolean; + attestations: Array; + salt?: string; + constructor(decision?: DecisionInterface, vdxfkey?: string); + dataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer, offset?: number, readRequest?: boolean): number; + toJson(): { + vdxfkey: string; + decision_id: string; + context: { + kv: { + [key: string]: string; + }; + vdxfkey: string; + }; + created_at: number; + request: { + vdxfkey: string; + system_id: string; + signing_id: string; + signature: import("..").VerusIDSignatureJson; + challenge: { + vdxfkey: string; + challenge_id: string; + requested_access: import("./Challenge").RequestedPermission[]; + requested_access_audience: import("./Challenge").RequestedPermission[]; + subject: import("./Challenge").Subject[]; + provisioning_info: import("./Challenge").ProvisioningInfo[]; + alt_auth_factors: import("./Challenge").AltAuthFactor[]; + session_id: string; + attestations: Attestation[]; + redirect_uris: { + uri: string; + vdxfkey: string; + }[]; + created_at: number; + salt: string; + context: Context; + skip: boolean; + }; + }; + }; +} diff --git a/dist/vdxf/classes/Decision.js b/dist/vdxf/classes/Decision.js new file mode 100644 index 00000000..9482a9a3 --- /dev/null +++ b/dist/vdxf/classes/Decision.js @@ -0,0 +1,113 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Decision = void 0; +const __1 = require(".."); +const bufferutils_1 = require("../../utils/bufferutils"); +const varuint_1 = require("../../utils/varuint"); +const Challenge_1 = require("./Challenge"); +const Context_1 = require("./Context"); +const Hash160_1 = require("./Hash160"); +const Request_1 = require("./Request"); +class Decision extends __1.VDXFObject { + constructor(decision = { + decision_id: "", + request: new Request_1.Request(), + created_at: 0, + }, vdxfkey = __1.LOGIN_CONSENT_DECISION_VDXF_KEY.vdxfid) { + super(vdxfkey); + this.decision_id = decision.decision_id; + this.request = new Request_1.Request(decision.request); + this.context = decision.context ? new Context_1.Context(decision.context.kv) : new Context_1.Context(); + this.created_at = decision.created_at; + this.attestations = decision.attestations; + this.salt = decision.salt; + this.skipped = decision.skipped ? true : false; + } + dataByteLength() { + let length = 0; + const _challenge_id = Hash160_1.Hash160.fromAddress(this.decision_id, true); + const _salt = this.salt + ? Hash160_1.Hash160.fromAddress(this.salt, true) + : Hash160_1.Hash160.getEmpty(); + const _request = this.request ? this.request : new Request_1.Request(); + const _context = this.context ? this.context : new Context_1.Context(); + const _attestations = []; + length += _challenge_id.byteLength(); + length += 8; // created_at + length += _salt.byteLength(); + if (this.vdxfkey === __1.LOGIN_CONSENT_DECISION_VDXF_KEY.vdxfid) { + length += 1; // skipped + length += varuint_1.default.encodingLength(_attestations.length); + } + length += _request.byteLength(); + length += _context.byteLength(); + return length; + } + toDataBuffer() { + const buffer = Buffer.alloc(this.dataByteLength()); + const writer = new bufferutils_1.default.BufferWriter(buffer); + const _decision_id = Hash160_1.Hash160.fromAddress(this.decision_id, true); + const _created_at = this.created_at; + const _salt = this.salt + ? Hash160_1.Hash160.fromAddress(this.salt, true) + : Hash160_1.Hash160.getEmpty(); + const _request = this.request ? this.request : new Request_1.Request(); + const _context = this.context ? this.context : new Context_1.Context(); + const _attestations = []; + writer.writeSlice(_decision_id.toBuffer()); + writer.writeUInt64(_created_at); + writer.writeSlice(_salt.toBuffer()); + if (this.vdxfkey === __1.LOGIN_CONSENT_DECISION_VDXF_KEY.vdxfid) { + writer.writeUInt8(this.skipped ? 1 : 0); + writer.writeArray(_attestations.map((x) => x.toBuffer())); + } + writer.writeSlice(_context.toBuffer()); + writer.writeSlice(_request.toBuffer()); + return writer.buffer; + } + fromDataBuffer(buffer, offset, readRequest = true) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + const decisionLength = reader.readCompactSize(); + if (decisionLength == 0) { + throw new Error("Cannot create decision from empty buffer"); + } + else { + const _decision_id = new Hash160_1.Hash160(); + reader.offset = _decision_id.fromBuffer(reader.buffer, true, reader.offset); + this.decision_id = _decision_id.toAddress(); + this.created_at = reader.readUInt64(); + const _salt = new Hash160_1.Hash160(); + reader.offset = _salt.fromBuffer(reader.buffer, true, reader.offset); + this.salt = _salt.toAddress(); + if (this.vdxfkey === __1.LOGIN_CONSENT_DECISION_VDXF_KEY.vdxfid) { + this.skipped = reader.readUInt8() === 1 ? true : false; + this.attestations = []; + const attestationsLength = reader.readCompactSize(); + for (let i = 0; i < attestationsLength; i++) { + const _att = new Challenge_1.Attestation(); + reader.offset = _att.fromBuffer(reader.buffer, reader.offset); + this.attestations.push(_att); + } + } + const _context = new Context_1.Context(); + reader.offset = _context.fromBuffer(reader.buffer, reader.offset); + this.context = _context; + if (readRequest) { + const _request = new Request_1.Request(); + reader.offset = _request.fromBuffer(reader.buffer, reader.offset); + this.request = _request; + } + } + return reader.offset; + } + toJson() { + return { + vdxfkey: this.vdxfkey, + decision_id: this.decision_id, + context: this.context.toJson(), + created_at: this.created_at, + request: this.request.toJson(), + }; + } +} +exports.Decision = Decision; diff --git a/dist/vdxf/classes/Hash160.d.ts b/dist/vdxf/classes/Hash160.d.ts new file mode 100644 index 00000000..9409f1bf --- /dev/null +++ b/dist/vdxf/classes/Hash160.d.ts @@ -0,0 +1,26 @@ +import { SerializableEntity } from "../../utils/types/SerializableEntity"; +export declare class Hash160 { + hash: Buffer; + version: number; + varlength: boolean; + constructor(hash?: Buffer, version?: number, varlength?: boolean); + static getEmpty(): Hash160; + static fromAddress(address: string, varlength?: boolean): Hash160; + toAddress(): string | null; + /** + * @deprecated The method has been replaced by getByteLength and will be removed in the future + */ + byteLength(): number; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, varlength?: boolean, offset?: number): number; + toJson(): { + hash: Buffer; + version: number; + }; +} +export declare class Hash160SerEnt extends Hash160 implements SerializableEntity { + constructor(hash?: Buffer, version?: number, varlength?: boolean); + fromBuffer(buffer: Buffer): number; + fromBuffer(buffer: Buffer, offset?: number, varlength?: boolean): number; +} diff --git a/dist/vdxf/classes/Hash160.js b/dist/vdxf/classes/Hash160.js new file mode 100644 index 00000000..925971a1 --- /dev/null +++ b/dist/vdxf/classes/Hash160.js @@ -0,0 +1,84 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Hash160SerEnt = exports.Hash160 = void 0; +const vdxf_1 = require("../../constants/vdxf"); +const address_1 = require("../../utils/address"); +const bufferutils_1 = require("../../utils/bufferutils"); +const varuint_1 = require("../../utils/varuint"); +class Hash160 { + constructor(hash = Buffer.alloc(20), version = vdxf_1.I_ADDR_VERSION, varlength = false) { + this.hash = hash; + this.version = version; + this.varlength = varlength; + } + static getEmpty() { + return new Hash160(Buffer.alloc(0), 0, true); + } + static fromAddress(address, varlength = false) { + const base58 = (0, address_1.fromBase58Check)(address); + return new Hash160(base58.hash, base58.version, varlength); + } + toAddress() { + if (this.hash.length == 0) { + return null; + } + else + return (0, address_1.toBase58Check)(this.hash, this.version); + } + /** + * @deprecated The method has been replaced by getByteLength and will be removed in the future + */ + byteLength() { + return this.getByteLength(); + } + getByteLength() { + let length = 0; + if (this.varlength) { + length += varuint_1.default.encodingLength(this.hash.length); + length += this.hash.length; + } + else { + length += this.hash.length; + } + return length; + } + toBuffer() { + const buffer = Buffer.alloc(this.getByteLength()); + const writer = new bufferutils_1.default.BufferWriter(buffer); + if (this.varlength) { + writer.writeVarSlice(this.hash); + } + else { + writer.writeSlice(this.hash); + } + return writer.buffer; + } + fromBuffer(buffer, varlength = false, offset = 0) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + if (varlength) { + this.hash = reader.readVarSlice(); + } + else { + this.hash = reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH); + } + this.version = vdxf_1.I_ADDR_VERSION; + this.varlength = varlength; + return reader.offset; + } + toJson() { + return { + hash: this.hash, + version: this.version, + }; + } +} +exports.Hash160 = Hash160; +class Hash160SerEnt extends Hash160 { + constructor(hash = Buffer.alloc(20), version = vdxf_1.I_ADDR_VERSION, varlength = false) { + super(hash, version, varlength); + } + fromBuffer(buffer, offset, varlength) { + return super.fromBuffer(buffer, varlength, offset); + } +} +exports.Hash160SerEnt = Hash160SerEnt; diff --git a/dist/vdxf/classes/PersonalProfile.d.ts b/dist/vdxf/classes/PersonalProfile.d.ts new file mode 100644 index 00000000..6b99a845 --- /dev/null +++ b/dist/vdxf/classes/PersonalProfile.d.ts @@ -0,0 +1,7 @@ +import { VDXFObject } from ".."; +export declare class DataCategory extends VDXFObject { + data: Array; + category: string; + details: string; + constructor(vdxfid?: string, data?: Array, category?: string, details?: string); +} diff --git a/dist/vdxf/classes/PersonalProfile.js b/dist/vdxf/classes/PersonalProfile.js new file mode 100644 index 00000000..1deec6a2 --- /dev/null +++ b/dist/vdxf/classes/PersonalProfile.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DataCategory = void 0; +const __1 = require(".."); +class DataCategory extends __1.VDXFObject { + constructor(vdxfid = "", data, category, details) { + super(vdxfid); + this.data = data || []; + this.category = category || ""; + this.details = details || ""; + } +} +exports.DataCategory = DataCategory; diff --git a/dist/vdxf/classes/Request.d.ts b/dist/vdxf/classes/Request.d.ts new file mode 100644 index 00000000..41505f65 --- /dev/null +++ b/dist/vdxf/classes/Request.d.ts @@ -0,0 +1,51 @@ +import { VDXFObject, VerusIDSignature, VerusIDSignatureInterface } from "../"; +import { Challenge, ChallengeInterface } from "./Challenge"; +export interface RequestInterface { + system_id: string; + signing_id: string; + signature?: VerusIDSignatureInterface; + challenge: ChallengeInterface; +} +export declare class Request extends VDXFObject { + system_id: string; + signing_id: string; + signature?: VerusIDSignature; + challenge: Challenge; + constructor(request?: RequestInterface, vdxfkey?: string); + getChallengeHash(signedBlockheight: number, signatureVersion?: number): Buffer; + toJson(): { + vdxfkey: string; + system_id: string; + signing_id: string; + signature: import("../").VerusIDSignatureJson; + challenge: { + vdxfkey: string; + challenge_id: string; + requested_access: import("./Challenge").RequestedPermission[]; + requested_access_audience: import("./Challenge").RequestedPermission[]; + subject: import("./Challenge").Subject[]; + provisioning_info: import("./Challenge").ProvisioningInfo[]; + alt_auth_factors: import("./Challenge").AltAuthFactor[]; + session_id: string; + attestations: import("./Challenge").Attestation[]; + redirect_uris: { + uri: string; + vdxfkey: string; + }[]; + created_at: number; + salt: string; + context: import("./Context").Context; + skip: boolean; + }; + }; + protected _dataByteLength(signer?: string): number; + protected _toDataBuffer(signer?: string): Buffer; + dataByteLength(): number; + toDataBuffer(): Buffer; + protected _fromDataBuffer(buffer: Buffer, offset?: number): number; + fromDataBuffer(buffer: Buffer, offset?: number): number; + toWalletDeeplinkUri(): string; + static fromWalletDeeplinkUri(uri: string): Request; + toQrString(): string; + static fromQrString(qrstring: string): Request; +} diff --git a/dist/vdxf/classes/Request.js b/dist/vdxf/classes/Request.js new file mode 100644 index 00000000..31549e44 --- /dev/null +++ b/dist/vdxf/classes/Request.js @@ -0,0 +1,143 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Request = void 0; +const __1 = require("../"); +const keys_1 = require("../keys"); +const Challenge_1 = require("./Challenge"); +const Hash160_1 = require("./Hash160"); +const bufferutils_1 = require("../../utils/bufferutils"); +const vdxf_1 = require("../../constants/vdxf"); +const address_1 = require("../../utils/address"); +const createHash = require("create-hash"); +const base64url_1 = require("base64url"); +class Request extends __1.VDXFObject { + constructor(request = { + system_id: "", + signing_id: "", + challenge: new Challenge_1.Challenge(), + }, vdxfkey = __1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid) { + super(vdxfkey); + this.system_id = request.system_id; + this.signing_id = request.signing_id; + this.signature = request.signature + ? new __1.VerusIDSignature(request.signature, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY) + : undefined; + this.challenge = new Challenge_1.Challenge(request.challenge); + } + getChallengeHash(signedBlockheight, signatureVersion = 2) { + var heightBufferWriter = new bufferutils_1.default.BufferWriter(Buffer.allocUnsafe(4)); + heightBufferWriter.writeUInt32(signedBlockheight); + if (signatureVersion === 1) { + return createHash("sha256") + .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) + .update((0, address_1.fromBase58Check)(this.system_id).hash) + .update(heightBufferWriter.buffer) + .update((0, address_1.fromBase58Check)(this.signing_id).hash) + .update(this.challenge.toSha256()) + .digest(); + } + else { + return createHash("sha256") + .update((0, address_1.fromBase58Check)(this.system_id).hash) + .update(heightBufferWriter.buffer) + .update((0, address_1.fromBase58Check)(this.signing_id).hash) + .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) + .update(this.challenge.toSha256()) + .digest(); + } + } + toJson() { + return { + vdxfkey: this.vdxfkey, + system_id: this.system_id, + signing_id: this.signing_id, + signature: this.signature ? this.signature.toJson() : this.signature, + challenge: this.challenge.toJson(), + }; + } + _dataByteLength(signer = this.signing_id) { + let length = 0; + const _signing_id = Hash160_1.Hash160.fromAddress(signer); + const _signature = this.signature + ? this.signature + : new __1.VerusIDSignature({ signature: "" }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY); + if (this.vdxfkey === __1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid) { + const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); + length += _system_id.byteLength(); + } + length += _signing_id.byteLength(); + length += _signature.byteLength(); + length += this.challenge.byteLength(); + return length; + } + _toDataBuffer(signer = this.signing_id) { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.dataByteLength())); + const _signing_id = Hash160_1.Hash160.fromAddress(signer); + const _signature = this.signature + ? this.signature + : new __1.VerusIDSignature({ signature: "" }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY); + if (this.vdxfkey === __1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid) { + const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); + writer.writeSlice(_system_id.toBuffer()); + } + writer.writeSlice(_signing_id.toBuffer()); + writer.writeSlice(_signature.toBuffer()); + writer.writeSlice(this.challenge.toBuffer()); + return writer.buffer; + } + dataByteLength() { + return this._dataByteLength(); + } + toDataBuffer() { + return this._toDataBuffer(); + } + _fromDataBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + const reqLength = reader.readCompactSize(); + if (reqLength == 0) { + throw new Error("Cannot create request from empty buffer"); + } + else { + if (this.vdxfkey === __1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid) { + this.system_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + } + this.signing_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), this.vdxfkey === __1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid + ? vdxf_1.I_ADDR_VERSION + : vdxf_1.R_ADDR_VERSION); + const _sig = new __1.VerusIDSignature(); + reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); + this.signature = _sig; + if (this.vdxfkey === __1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid) { + const _challenge = new Challenge_1.Challenge(); + reader.offset = _challenge.fromBuffer(reader.buffer, reader.offset); + this.challenge = _challenge; + } + } + return reader.offset; + } + fromDataBuffer(buffer, offset) { + return this._fromDataBuffer(buffer, offset); + } + toWalletDeeplinkUri() { + if (this.signature == null) + throw new Error("Request must be signed before it can be used as a deep link"); + return `${__1.WALLET_VDXF_KEY.vdxfid.toLowerCase()}://x-callback-url/${__1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid}/?${__1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid}=${this.toString()}`; + } + static fromWalletDeeplinkUri(uri) { + const split = uri.split(`${__1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid}=`); + const req = new Request(); + req.fromBuffer(base64url_1.default.toBuffer(split[1])); + return req; + } + toQrString() { + if (this.signature == null) + throw new Error("Request must be signed before it can be used as a deep link"); + return this.toString(true); + } + static fromQrString(qrstring) { + const req = new Request(); + req.fromBuffer(base64url_1.default.toBuffer(qrstring)); + return req; + } +} +exports.Request = Request; diff --git a/dist/vdxf/classes/Response.d.ts b/dist/vdxf/classes/Response.d.ts new file mode 100644 index 00000000..6b0a1c5b --- /dev/null +++ b/dist/vdxf/classes/Response.d.ts @@ -0,0 +1,61 @@ +import { Decision, DecisionInterface } from "./Decision"; +import { VDXFObject, VerusIDSignature, VerusIDSignatureInterface } from "../"; +export interface ResponseInterface { + system_id: string; + signing_id: string; + signature?: VerusIDSignatureInterface; + decision: DecisionInterface; +} +export declare class Response extends VDXFObject { + system_id: string; + signing_id: string; + signature?: VerusIDSignature; + decision: Decision; + constructor(response?: ResponseInterface, vdxfkey?: string); + getDecisionHash(signedBlockheight: number, signatureVersion?: number): Buffer; + dataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer, offset?: number): number; + toJson(): { + vdxfkey: string; + system_id: string; + signature: VerusIDSignature; + signing_id: string; + decision: { + vdxfkey: string; + decision_id: string; + context: { + kv: { + [key: string]: string; + }; + vdxfkey: string; + }; + created_at: number; + request: { + vdxfkey: string; + system_id: string; + signing_id: string; + signature: import("../").VerusIDSignatureJson; + challenge: { + vdxfkey: string; + challenge_id: string; + requested_access: import("./Challenge").RequestedPermission[]; + requested_access_audience: import("./Challenge").RequestedPermission[]; + subject: import("./Challenge").Subject[]; + provisioning_info: import("./Challenge").ProvisioningInfo[]; + alt_auth_factors: import("./Challenge").AltAuthFactor[]; + session_id: string; + attestations: import("./Challenge").Attestation[]; + redirect_uris: { + uri: string; + vdxfkey: string; + }[]; + created_at: number; + salt: string; + context: import("./Context").Context; + skip: boolean; + }; + }; + }; + }; +} diff --git a/dist/vdxf/classes/Response.js b/dist/vdxf/classes/Response.js new file mode 100644 index 00000000..5547c5a4 --- /dev/null +++ b/dist/vdxf/classes/Response.js @@ -0,0 +1,104 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Response = void 0; +const Decision_1 = require("./Decision"); +const __1 = require("../"); +const keys_1 = require("../keys"); +const Hash160_1 = require("./Hash160"); +const bufferutils_1 = require("../../utils/bufferutils"); +const vdxf_1 = require("../../constants/vdxf"); +const address_1 = require("../../utils/address"); +const createHash = require("create-hash"); +class Response extends __1.VDXFObject { + constructor(response = { + system_id: "", + signing_id: "", + decision: new Decision_1.Decision(), + }, vdxfkey = __1.LOGIN_CONSENT_RESPONSE_VDXF_KEY.vdxfid) { + super(vdxfkey); + this.system_id = response.system_id; + this.signing_id = response.signing_id; + this.decision = new Decision_1.Decision(response.decision); + if (response.signature) { + this.signature = new __1.VerusIDSignature(response.signature, keys_1.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY); + } + } + getDecisionHash(signedBlockheight, signatureVersion = 2) { + var heightBufferWriter = new bufferutils_1.default.BufferWriter(Buffer.allocUnsafe(4)); + heightBufferWriter.writeUInt32(signedBlockheight); + if (signatureVersion === 1) { + return createHash("sha256") + .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) + .update((0, address_1.fromBase58Check)(this.system_id).hash) + .update(heightBufferWriter.buffer) + .update((0, address_1.fromBase58Check)(this.signing_id).hash) + .update(this.decision.toSha256()) + .digest(); + } + else { + return createHash("sha256") + .update((0, address_1.fromBase58Check)(this.system_id).hash) + .update(heightBufferWriter.buffer) + .update((0, address_1.fromBase58Check)(this.signing_id).hash) + .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) + .update(this.decision.toSha256()) + .digest(); + } + } + dataByteLength() { + let length = 0; + const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); + const _signing_id = Hash160_1.Hash160.fromAddress(this.signing_id); + const _signature = this.signature + ? this.signature + : new __1.VerusIDSignature({ signature: "" }, keys_1.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY); + length += _system_id.byteLength(); + length += _signing_id.byteLength(); + length += _signature.byteLength(); + length += this.decision.byteLength(); + return length; + } + toDataBuffer() { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.dataByteLength())); + const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); + const _signing_id = Hash160_1.Hash160.fromAddress(this.signing_id); + const _signature = this.signature + ? this.signature + : new __1.VerusIDSignature({ signature: "" }, keys_1.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY); + writer.writeSlice(_system_id.toBuffer()); + writer.writeSlice(_signing_id.toBuffer()); + writer.writeSlice(_signature.toBuffer()); + writer.writeSlice(this.decision.toBuffer()); + return writer.buffer; + } + fromDataBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + const reqLength = reader.readCompactSize(); + if (reqLength == 0) { + throw new Error("Cannot create request from empty buffer"); + } + else { + this.system_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + this.signing_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + const _sig = new __1.VerusIDSignature(); + reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); + this.signature = _sig; + if (this.vdxfkey === __1.LOGIN_CONSENT_RESPONSE_VDXF_KEY.vdxfid) { + const _decision = new Decision_1.Decision(); + reader.offset = _decision.fromBuffer(reader.buffer, reader.offset); + this.decision = _decision; + } + } + return reader.offset; + } + toJson() { + return { + vdxfkey: this.vdxfkey, + system_id: this.system_id, + signature: this.signature, + signing_id: this.signing_id, + decision: this.decision.toJson(), + }; + } +} +exports.Response = Response; diff --git a/dist/vdxf/classes/ResponseURI.d.ts b/dist/vdxf/classes/ResponseURI.d.ts new file mode 100644 index 00000000..0ba995f8 --- /dev/null +++ b/dist/vdxf/classes/ResponseURI.d.ts @@ -0,0 +1,24 @@ +import { BigNumber } from "../../utils/types/BigNumber"; +import { SerializableEntity } from "../../utils/types/SerializableEntity"; +export type ResponseURIJson = { + type: string; + uri: string; +}; +export declare class ResponseURI implements SerializableEntity { + uri: Buffer; + type: BigNumber; + static TYPE_INVALID: import("bn.js"); + static TYPE_REDIRECT: import("bn.js"); + static TYPE_POST: import("bn.js"); + constructor(data?: { + uri?: Buffer; + type?: BigNumber; + }); + getUriString(): string; + static fromUriString(str: string, type?: BigNumber): ResponseURI; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): ResponseURIJson; + static fromJson(json: ResponseURIJson): ResponseURI; +} diff --git a/dist/vdxf/classes/ResponseURI.js b/dist/vdxf/classes/ResponseURI.js new file mode 100644 index 00000000..16810a0e --- /dev/null +++ b/dist/vdxf/classes/ResponseURI.js @@ -0,0 +1,62 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ResponseURI = void 0; +const bn_js_1 = require("bn.js"); +const varuint_1 = require("../../utils/varuint"); +const bufferutils_1 = require("../../utils/bufferutils"); +class ResponseURI { + // TODO: Add TYPE_Z_ADDR_REF where response is encrypted and sent to encoded sapling address, + // with optional amount specified + constructor(data) { + if (data) { + if (data.uri != null) { + this.uri = data.uri; + } + if (data.type != null) { + this.type = data.type; + } + } + } + getUriString() { + return this.uri.toString('utf-8'); + } + static fromUriString(str, type = ResponseURI.TYPE_REDIRECT) { + return new ResponseURI({ uri: Buffer.from(str, 'utf-8'), type }); + } + getByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.type.toNumber()); + let uriBufLen = this.uri.length; + length += varuint_1.default.encodingLength(uriBufLen); + length += uriBufLen; + return length; + } + toBuffer() { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeCompactSize(this.type.toNumber()); + writer.writeVarSlice(this.uri); + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + this.type = new bn_js_1.BN(reader.readCompactSize()); + this.uri = reader.readVarSlice(); + return reader.offset; + } + toJson() { + return { + type: this.type.toString(10), + uri: this.getUriString() + }; + } + static fromJson(json) { + return new ResponseURI({ + type: new bn_js_1.BN(json.type, 10), + uri: Buffer.from(json.uri, 'utf-8') + }); + } +} +exports.ResponseURI = ResponseURI; +ResponseURI.TYPE_INVALID = new bn_js_1.BN(0, 10); +ResponseURI.TYPE_REDIRECT = new bn_js_1.BN(1, 10); +ResponseURI.TYPE_POST = new bn_js_1.BN(2, 10); diff --git a/dist/vdxf/classes/SaltedData.d.ts b/dist/vdxf/classes/SaltedData.d.ts new file mode 100644 index 00000000..cdceda0d --- /dev/null +++ b/dist/vdxf/classes/SaltedData.d.ts @@ -0,0 +1,15 @@ +import { VDXFData } from '../../'; +export declare class SaltedData extends VDXFData { + salt: Buffer; + static VERSION_INVALID: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static DEFAULT_VERSION: import("bn.js"); + constructor(data?: Buffer, salt?: Buffer); + static fromJson(data: any): SaltedData; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): any; + getHash(hw: (data: Buffer) => Buffer): Buffer; +} diff --git a/dist/vdxf/classes/SaltedData.js b/dist/vdxf/classes/SaltedData.js new file mode 100644 index 00000000..3c08d231 --- /dev/null +++ b/dist/vdxf/classes/SaltedData.js @@ -0,0 +1,81 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SaltedData = void 0; +const varint_1 = require("../../utils/varint"); +const varuint_1 = require("../../utils/varuint"); +const address_1 = require("../../utils/address"); +const bufferutils_1 = require("../../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const vdxf_1 = require("../../constants/vdxf"); +const __1 = require("../../"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const createHash = require("create-hash"); +const vdxfdatakeys_1 = require("../vdxfdatakeys"); +class SaltedData extends __1.VDXFData { + constructor(data, salt = Buffer.alloc(0)) { + super(data); + if (salt.length != 0) { + this.salt = salt; + } + this.vdxfkey = vdxfdatakeys_1.SaltedDataKey.vdxfid; + } + static fromJson(data) { + const saltedData = new SaltedData(); + if (data) { + if (data.version) { + saltedData.version = new bn_js_1.BN(data.version); + } + else { + saltedData.version = SaltedData.DEFAULT_VERSION; + } + if (data.salt) + saltedData.salt = Buffer.from(data.salt, 'hex'); + if (data.data) + saltedData.data = Buffer.from(data.data, 'hex'); + if (data.key) + saltedData.vdxfkey = data.key; + } + return saltedData; + } + getByteLength() { + let byteLength = 0; + byteLength += vdxf_1.HASH160_BYTE_LENGTH; + byteLength += varint_1.default.encodingLength(this.version); + byteLength += varuint_1.default.encodingLength(this.data.length + this.salt.length); + byteLength += this.data.length + this.salt.length; + return byteLength; + } + toBuffer() { + const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); + bufferWriter.writeSlice((0, address_1.fromBase58Check)(this.vdxfkey).hash); + bufferWriter.writeVarInt(this.version); + bufferWriter.writeVarSlice(Buffer.concat([this.data, this.salt])); + return bufferWriter.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.vdxfkey = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + this.version = reader.readVarInt(); + this.data = reader.readVarSlice(); + this.salt = this.data.slice(this.data.length - 32); + this.data = this.data.slice(0, this.data.length - 32); + return reader.offset; + } + toJson() { + return { + version: this.version.toString(), + key: this.vdxfkey, + data: this.data.toString('hex'), + salt: this.salt.toString('hex') + }; + } + getHash(hw) { + const hash = hw(Buffer.concat([this.data, this.salt])); + return hash; + } +} +exports.SaltedData = SaltedData; +SaltedData.VERSION_INVALID = new bn_js_1.BN(0); +SaltedData.FIRST_VERSION = new bn_js_1.BN(1); +SaltedData.LAST_VERSION = new bn_js_1.BN(1); +SaltedData.DEFAULT_VERSION = new bn_js_1.BN(1); diff --git a/dist/vdxf/classes/VerifiableSignatureData.d.ts b/dist/vdxf/classes/VerifiableSignatureData.d.ts new file mode 100644 index 00000000..591b24e2 --- /dev/null +++ b/dist/vdxf/classes/VerifiableSignatureData.d.ts @@ -0,0 +1,92 @@ +import { BigNumber } from '../../utils/types/BigNumber'; +import { SerializableEntity } from '../../utils/types/SerializableEntity'; +import { CompactAddressObject, CompactAddressObjectJson } from './CompactAddressObject'; +import { SignatureData, SignatureJsonDataInterface } from '../../pbaas'; +export interface VerifiableSignatureDataJson { + version: number; + flags: number; + signatureversion: number; + hashtype: number; + systemid: CompactAddressObjectJson; + identityid: CompactAddressObjectJson; + vdxfkeys?: Array; + vdxfkeynames?: Array; + boundhashes?: Array; + statements?: Array; + signature: string; +} +export interface VerifiableSignatureDataInterface { + version?: BigNumber; + flags?: BigNumber; + signatureVersion?: BigNumber; + hashType?: BigNumber; + systemID?: CompactAddressObject; + identityID: CompactAddressObject; + vdxfKeys?: Array; + vdxfKeyNames?: Array; + boundHashes?: Array; + statements?: Array; + signatureAsVch?: Buffer; +} +export interface CliSignatureData { + signaturedata: SignatureJsonDataInterface; + system: string; + systemid: string; + hashtype: string; + hash: string; + identity: string; + canonicalname: string; + address: string; + signatureheight: number; + signature: string; + signatureversion: number; + vdxfkeys?: Array; + vdxfkeynames?: Array; + boundhashes?: Array; +} +export declare class VerifiableSignatureData implements SerializableEntity { + version: BigNumber; + flags: BigNumber; + signatureVersion: BigNumber; + hashType: BigNumber; + identityID: CompactAddressObject; + systemID: CompactAddressObject; + vdxfKeys?: Array; + vdxfKeyNames?: Array; + boundHashes?: Array; + statements?: Array; + signatureAsVch: Buffer; + static VERSION_INVALID: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static DEFAULT_VERSION: import("bn.js"); + static TYPE_VERUSID_DEFAULT: import("bn.js"); + static FLAG_HAS_VDXF_KEYS: import("bn.js"); + static FLAG_HAS_VDXF_KEY_NAMES: import("bn.js"); + static FLAG_HAS_BOUND_HASHES: import("bn.js"); + static FLAG_HAS_STATEMENTS: import("bn.js"); + constructor(data?: VerifiableSignatureDataInterface); + private hasFlag; + private setFlag; + hasVdxfKeys(): boolean; + hasVdxfKeyNames(): boolean; + hasBoundHashes(): boolean; + hasStatements(): boolean; + setHasVdxfKeys(): void; + setHasVdxfKeyNames(): void; + setHasBoundHashes(): void; + setHasStatements(): void; + calcFlags(): BigNumber; + setFlags(): void; + private getBufferEncodingLength; + private getExtraHashDataByteLength; + private getExtraHashData; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + getIdentityHash(height: number, sigHash: Buffer): Buffer; + toSignatureData(sigHash: Buffer): SignatureData; + toJson(): VerifiableSignatureDataJson; + static fromJson(json: VerifiableSignatureDataJson): VerifiableSignatureData; + static fromCLIJson(json: CliSignatureData, rootSystemName?: string): VerifiableSignatureData; +} diff --git a/dist/vdxf/classes/VerifiableSignatureData.js b/dist/vdxf/classes/VerifiableSignatureData.js new file mode 100644 index 00000000..2c899946 --- /dev/null +++ b/dist/vdxf/classes/VerifiableSignatureData.js @@ -0,0 +1,324 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VerifiableSignatureData = void 0; +const varuint_1 = require("../../utils/varuint"); +const address_1 = require("../../utils/address"); +const bufferutils_1 = require("../../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const vdxf_1 = require("../../constants/vdxf"); +const DataDescriptor_1 = require("../../pbaas/DataDescriptor"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const createHash = require("create-hash"); +const vdxf_2 = require("../../constants/vdxf"); +const CompactAddressObject_1 = require("./CompactAddressObject"); +const pbaas_1 = require("../../constants/pbaas"); +const varint_1 = require("../../utils/varint"); +const pbaas_2 = require("../../pbaas"); +class VerifiableSignatureData { + constructor(data) { + this.version = data && data.version ? data.version : new bn_js_1.BN(0); + this.flags = data && data.flags ? data.flags : new bn_js_1.BN(0); + this.signatureVersion = data && data.signatureVersion ? data.signatureVersion : new bn_js_1.BN(2, 10); + this.systemID = data && data.systemID ? data.systemID : new CompactAddressObject_1.CompactAddressObject({ type: CompactAddressObject_1.CompactAddressObject.TYPE_FQN, address: pbaas_1.DEFAULT_VERUS_CHAINNAME }); + this.hashType = data && data.hashType ? data.hashType : pbaas_1.HASH_TYPE_SHA256; + this.identityID = data ? data.identityID : undefined; + this.vdxfKeys = data ? data.vdxfKeys : undefined; + this.vdxfKeyNames = data ? data.vdxfKeyNames : undefined; + this.boundHashes = data ? data.boundHashes : undefined; + this.statements = data ? data.statements : undefined; + this.signatureAsVch = data && data.signatureAsVch ? data.signatureAsVch : Buffer.alloc(0); + this.setFlags(); + } + hasFlag(flag) { + return !!(this.flags.and(flag).toNumber()); + } + setFlag(flag) { + this.flags = this.flags.or(flag); + } + hasVdxfKeys() { + return this.hasFlag(VerifiableSignatureData.FLAG_HAS_VDXF_KEYS); + } + hasVdxfKeyNames() { + return this.hasFlag(VerifiableSignatureData.FLAG_HAS_VDXF_KEY_NAMES); + } + hasBoundHashes() { + return this.hasFlag(VerifiableSignatureData.FLAG_HAS_BOUND_HASHES); + } + hasStatements() { + return this.hasFlag(VerifiableSignatureData.FLAG_HAS_STATEMENTS); + } + setHasVdxfKeys() { + this.setFlag(VerifiableSignatureData.FLAG_HAS_VDXF_KEYS); + } + setHasVdxfKeyNames() { + this.setFlag(VerifiableSignatureData.FLAG_HAS_VDXF_KEY_NAMES); + } + setHasBoundHashes() { + this.setFlag(VerifiableSignatureData.FLAG_HAS_BOUND_HASHES); + } + setHasStatements() { + this.setFlag(VerifiableSignatureData.FLAG_HAS_STATEMENTS); + } + calcFlags() { + let flags = new bn_js_1.BN(0); + if (this.hasVdxfKeys()) + flags = flags.or(VerifiableSignatureData.FLAG_HAS_VDXF_KEYS); + if (this.hasVdxfKeyNames()) + flags = flags.or(VerifiableSignatureData.FLAG_HAS_VDXF_KEY_NAMES); + if (this.hasBoundHashes()) + flags = flags.or(VerifiableSignatureData.FLAG_HAS_BOUND_HASHES); + if (this.hasStatements()) + flags = flags.or(VerifiableSignatureData.FLAG_HAS_STATEMENTS); + return flags; + } + setFlags() { + if (this.vdxfKeys) + this.setHasVdxfKeys(); + if (this.vdxfKeyNames) + this.setHasVdxfKeyNames(); + if (this.boundHashes) + this.setHasBoundHashes(); + if (this.statements) + this.setHasStatements(); + } + getBufferEncodingLength(buf) { + const bufLen = buf.byteLength; + return varuint_1.default.encodingLength(bufLen) + bufLen; + } + getExtraHashDataByteLength() { + let byteLength = 0; + if (this.vdxfKeys && this.vdxfKeys.length > 0) { + byteLength += varuint_1.default.encodingLength(this.vdxfKeys.length); + byteLength += this.vdxfKeys.length * vdxf_1.HASH160_BYTE_LENGTH; + } + if (this.vdxfKeyNames && this.vdxfKeyNames.length > 0) { + byteLength += varuint_1.default.encodingLength(this.vdxfKeyNames.length); + for (const name of this.vdxfKeyNames) { + byteLength += this.getBufferEncodingLength(Buffer.from(name, 'utf8')); + } + } + if (this.boundHashes && this.boundHashes.length > 0) { + byteLength += varuint_1.default.encodingLength(this.boundHashes.length); + byteLength += this.boundHashes.length * vdxf_1.HASH256_BYTE_LENGTH; + } + return byteLength; + } + getExtraHashData() { + const byteLength = this.getExtraHashDataByteLength(); + if (byteLength === 0) { + return Buffer.alloc(0); + } + const bufferWriter = new BufferWriter(Buffer.alloc(byteLength)); + if (this.vdxfKeys && this.vdxfKeys.length > 0) { + // Sort vdxfKeys by their 20-byte buffer values before writing + const keyBuffers = this.vdxfKeys.map(x => (0, address_1.fromBase58Check)(x).hash); + const sortedBuffers = keyBuffers.sort(Buffer.compare); + bufferWriter.writeArray(sortedBuffers); + } + if (this.vdxfKeyNames && this.vdxfKeyNames.length > 0) { + // Sort vdxfKeyNames before writing + const sortedNames = [...this.vdxfKeyNames].sort(); + bufferWriter.writeVector(sortedNames.map(x => Buffer.from(x, 'utf8'))); + } + if (this.boundHashes && this.boundHashes.length > 0) { + // Sort boundHashes before writing + const sortedHashes = [...this.boundHashes].sort(Buffer.compare); + bufferWriter.writeArray(sortedHashes); + } + return bufferWriter.buffer; + } + getByteLength() { + let byteLength = 0; + byteLength += varint_1.default.encodingLength(this.version); + byteLength += varuint_1.default.encodingLength(this.flags.toNumber()); + byteLength += varuint_1.default.encodingLength(this.signatureVersion.toNumber()); + byteLength += varuint_1.default.encodingLength(this.hashType.toNumber()); + byteLength += this.systemID.getByteLength(); + byteLength += this.identityID.getByteLength(); + if (this.hasVdxfKeys()) { + byteLength += varuint_1.default.encodingLength(this.vdxfKeys.length); + for (const key of this.vdxfKeys) { + byteLength += vdxf_1.HASH160_BYTE_LENGTH; + } + } + if (this.hasVdxfKeyNames()) { + byteLength += varuint_1.default.encodingLength(this.vdxfKeyNames.length); + for (const key of this.vdxfKeyNames) { + byteLength += this.getBufferEncodingLength(Buffer.from(key, 'utf8')); + } + } + if (this.hasBoundHashes()) { + byteLength += varuint_1.default.encodingLength(this.boundHashes.length); + for (const hash of this.boundHashes) { + byteLength += this.getBufferEncodingLength(hash); + } + } + if (this.hasStatements()) { + byteLength += varuint_1.default.encodingLength(this.statements.length); + for (const statement of this.statements) { + byteLength += this.getBufferEncodingLength(statement); + } + } + byteLength += this.getBufferEncodingLength(this.signatureAsVch); + return byteLength; + } + toBuffer() { + const bufferWriter = new BufferWriter(Buffer.alloc(this.getByteLength())); + bufferWriter.writeVarInt(this.version); + bufferWriter.writeCompactSize(this.flags.toNumber()); + bufferWriter.writeCompactSize(this.signatureVersion.toNumber()); + bufferWriter.writeCompactSize(this.hashType.toNumber()); + bufferWriter.writeSlice(this.systemID.toBuffer()); + bufferWriter.writeSlice(this.identityID.toBuffer()); + if (this.hasVdxfKeys()) { + bufferWriter.writeArray(this.vdxfKeys.map(x => (0, address_1.fromBase58Check)(x).hash)); + } + if (this.hasVdxfKeyNames()) { + bufferWriter.writeVector(this.vdxfKeyNames.map(x => Buffer.from(x, 'utf8'))); + } + if (this.hasBoundHashes()) { + bufferWriter.writeVector(this.boundHashes); + } + if (this.hasStatements()) { + bufferWriter.writeVector(this.statements); + } + bufferWriter.writeVarSlice(this.signatureAsVch); + return bufferWriter.buffer; + } + fromBuffer(buffer, offset = 0) { + const bufferReader = new BufferReader(buffer, offset); + this.version = bufferReader.readVarInt(); + this.flags = new bn_js_1.BN(bufferReader.readCompactSize()); + this.signatureVersion = new bn_js_1.BN(bufferReader.readCompactSize()); + this.hashType = new bn_js_1.BN(bufferReader.readCompactSize()); + this.systemID = new CompactAddressObject_1.CompactAddressObject(); + this.identityID = new CompactAddressObject_1.CompactAddressObject(); + bufferReader.offset = this.systemID.fromBuffer(bufferReader.buffer, bufferReader.offset); + bufferReader.offset = this.identityID.fromBuffer(bufferReader.buffer, bufferReader.offset); + if (this.hasVdxfKeys()) { + this.vdxfKeys = bufferReader.readArray(vdxf_1.HASH160_BYTE_LENGTH).map(x => (0, address_1.toBase58Check)(x, vdxf_1.I_ADDR_VERSION)); + } + if (this.hasVdxfKeyNames()) { + this.vdxfKeyNames = bufferReader.readVector().map((x) => x.toString('utf8')); + } + if (this.hasBoundHashes()) { + this.boundHashes = bufferReader.readVector(); + } + if (this.hasStatements()) { + this.statements = bufferReader.readVector(); + } + this.signatureAsVch = bufferReader.readVarSlice(); + return bufferReader.offset; + } + // To fully implement, refer to VerusCoin/src/pbaas/crosschainrpc.cpp line 337, IdentitySignatureHash + getIdentityHash(height, sigHash) { + var heightBuffer = Buffer.allocUnsafe(4); + heightBuffer.writeUInt32LE(height); + if (!this.hashType.eq(new bn_js_1.BN(DataDescriptor_1.EHashTypes.HASH_SHA256))) { + throw new Error("Only SHA256 hash type is currently supported."); + } + if (this.signatureVersion.eq(new bn_js_1.BN(0))) { + throw new Error("Invalid sig data version"); + } + else if (this.signatureVersion.eq(new bn_js_1.BN(1))) { + return createHash("sha256") + .update(vdxf_2.VERUS_DATA_SIGNATURE_PREFIX) + .update((0, address_1.fromBase58Check)(this.systemID.toIAddress()).hash) + .update(heightBuffer) + .update((0, address_1.fromBase58Check)(this.identityID.toIAddress()).hash) + .update(sigHash) + .digest(); + } + else if (this.signatureVersion.eq(new bn_js_1.BN(2))) { + const extraHashData = this.getExtraHashData(); + const hash = createHash("sha256"); + if (extraHashData.length > 0) { + hash.update(extraHashData); + } + return hash + .update((0, address_1.fromBase58Check)(this.systemID.toIAddress()).hash) + .update(heightBuffer) + .update((0, address_1.fromBase58Check)(this.identityID.toIAddress()).hash) + .update(vdxf_2.VERUS_DATA_SIGNATURE_PREFIX) + .update(sigHash) + .digest(); + } + else { + throw new Error("Unrecognized sig data version"); + } + } + toSignatureData(sigHash) { + return new pbaas_2.SignatureData({ + version: this.version, + system_ID: this.systemID.toIAddress(), + hash_type: this.hashType, + signature_hash: sigHash, + identity_ID: this.identityID.toIAddress(), + sig_type: pbaas_2.SignatureData.TYPE_VERUSID_DEFAULT, + vdxf_keys: this.vdxfKeys, + vdxf_key_names: this.vdxfKeyNames, + bound_hashes: this.boundHashes, + signature_as_vch: this.signatureAsVch + }); + } + toJson() { + var _a, _b; + const flags = this.calcFlags(); + return { + version: this.version.toNumber(), + flags: flags.toNumber(), + signatureversion: this.signatureVersion.toNumber(), + hashtype: this.hashType.toNumber(), + systemid: this.systemID.toJson(), + identityid: this.identityID.toJson(), + vdxfkeys: this.vdxfKeys, + vdxfkeynames: this.vdxfKeyNames, + boundhashes: (_a = this.boundHashes) === null || _a === void 0 ? void 0 : _a.map(x => x.toString('hex')), + statements: (_b = this.statements) === null || _b === void 0 ? void 0 : _b.map(x => x.toString('hex')), + signature: this.signatureAsVch.toString('hex') + }; + } + static fromJson(json) { + var _a, _b; + const instance = new VerifiableSignatureData(); + instance.version = new bn_js_1.BN(json.version); + instance.flags = new bn_js_1.BN(json.flags); + instance.signatureVersion = new bn_js_1.BN(json.signatureversion); + instance.hashType = new bn_js_1.BN(json.hashtype); + instance.systemID = CompactAddressObject_1.CompactAddressObject.fromJson(json.systemid); + instance.identityID = CompactAddressObject_1.CompactAddressObject.fromJson(json.identityid); + instance.vdxfKeys = json === null || json === void 0 ? void 0 : json.vdxfkeys; + instance.vdxfKeyNames = json === null || json === void 0 ? void 0 : json.vdxfkeynames; + instance.boundHashes = (_a = json.boundhashes) === null || _a === void 0 ? void 0 : _a.map(x => Buffer.from(x, 'hex')); + instance.statements = (_b = json.statements) === null || _b === void 0 ? void 0 : _b.map(x => Buffer.from(x, 'hex')); + instance.signatureAsVch = Buffer.from(json.signature, 'hex'); + return instance; + } + static fromCLIJson(json, rootSystemName = 'VRSC') { + var _a; + const instance = new VerifiableSignatureData(); + instance.version = new bn_js_1.BN(VerifiableSignatureData.TYPE_VERUSID_DEFAULT); + instance.hashType = new bn_js_1.BN(json.signaturedata.hashtype); + instance.signatureVersion = new bn_js_1.BN(json.signatureversion); //default Signature Version + instance.systemID = CompactAddressObject_1.CompactAddressObject.fromJson({ address: json.systemid, version: 1, type: CompactAddressObject_1.CompactAddressObject.TYPE_I_ADDRESS, rootSystemName }); + instance.identityID = CompactAddressObject_1.CompactAddressObject.fromJson({ address: json.address, version: 1, type: CompactAddressObject_1.CompactAddressObject.TYPE_I_ADDRESS, rootSystemName }); + // Set optional fields + instance.vdxfKeys = json.vdxfkeys; + instance.vdxfKeyNames = json.vdxfkeynames; + instance.boundHashes = (_a = json.boundhashes) === null || _a === void 0 ? void 0 : _a.map(x => Buffer.from(x, 'hex')); + // Store the full signature (from daemon in base64 format) + instance.signatureAsVch = Buffer.from(json.signature, 'base64'); + instance.setFlags(); + return instance; + } +} +exports.VerifiableSignatureData = VerifiableSignatureData; +VerifiableSignatureData.VERSION_INVALID = new bn_js_1.BN(0); +VerifiableSignatureData.FIRST_VERSION = new bn_js_1.BN(1); +VerifiableSignatureData.LAST_VERSION = new bn_js_1.BN(1); +VerifiableSignatureData.DEFAULT_VERSION = new bn_js_1.BN(1); +VerifiableSignatureData.TYPE_VERUSID_DEFAULT = new bn_js_1.BN(1); +VerifiableSignatureData.FLAG_HAS_VDXF_KEYS = new bn_js_1.BN(1); +VerifiableSignatureData.FLAG_HAS_VDXF_KEY_NAMES = new bn_js_1.BN(2); +VerifiableSignatureData.FLAG_HAS_BOUND_HASHES = new bn_js_1.BN(4); +VerifiableSignatureData.FLAG_HAS_STATEMENTS = new bn_js_1.BN(8); diff --git a/dist/vdxf/classes/Web/SignedSessionObject.d.ts b/dist/vdxf/classes/Web/SignedSessionObject.d.ts new file mode 100644 index 00000000..ee8ac77b --- /dev/null +++ b/dist/vdxf/classes/Web/SignedSessionObject.d.ts @@ -0,0 +1,43 @@ +import { VDXFObject, VerusIDSignature, VerusIDSignatureInterface } from "../../"; +import { SignedSessionObjectData } from "./SignedSessionObjectData"; +export interface AuthorizedWebRequestInterface { + system_id: string; + signing_id: string; + signature?: VerusIDSignatureInterface; + data: SignedSessionObjectData; +} +export declare class SignedSessionObject extends VDXFObject { + system_id: string; + signing_id: string; + signature?: VerusIDSignature; + data: SignedSessionObjectData; + constructor(request?: AuthorizedWebRequestInterface); + getDataHash(signedBlockheight: number, signatureVersion?: number): Buffer; + toJson(): { + vdxfkey: string; + system_id: string; + signing_id: string; + signature: import("../../").VerusIDSignatureJson; + challenge: { + session_id: string; + timestamp_micro: number; + body: string; + }; + }; + protected _dataByteLength(signer?: string): number; + protected _toDataBuffer(signer?: string): Buffer; + dataByteLength(): number; + toDataBuffer(): Buffer; + protected _fromDataBuffer(buffer: Buffer, offset?: number): number; + fromDataBuffer(buffer: Buffer, offset?: number): number; + getHeaders(): { + "VDXF-Key": string; + "VDXF-Version": string; + "VerusID-Session-ID": string; + "VerusID-Timestamp-Micro": string; + "VerusID-Signature": string; + }; + static fromHttpRequest(headers: { + [key: string]: string; + }, body: string, system_id: string, signing_id: string): SignedSessionObject; +} diff --git a/dist/vdxf/classes/Web/SignedSessionObject.js b/dist/vdxf/classes/Web/SignedSessionObject.js new file mode 100644 index 00000000..426812dd --- /dev/null +++ b/dist/vdxf/classes/Web/SignedSessionObject.js @@ -0,0 +1,132 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SignedSessionObject = void 0; +const __1 = require("../../"); +const keys_1 = require("../../keys"); +const Hash160_1 = require("../Hash160"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const vdxf_1 = require("../../../constants/vdxf"); +const address_1 = require("../../../utils/address"); +const createHash = require("create-hash"); +const SignedSessionObjectData_1 = require("./SignedSessionObjectData"); +class SignedSessionObject extends __1.VDXFObject { + constructor(request = { + system_id: "", + signing_id: "", + data: new SignedSessionObjectData_1.SignedSessionObjectData(), + }) { + super(keys_1.SIGNED_SESSION_OBJECT.vdxfid); + this.system_id = request.system_id; + this.signing_id = request.signing_id; + this.signature = request.signature + ? new __1.VerusIDSignature(request.signature, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY) + : undefined; + this.data = new SignedSessionObjectData_1.SignedSessionObjectData(request.data); + } + getDataHash(signedBlockheight, signatureVersion = 2) { + var heightBufferWriter = new bufferutils_1.default.BufferWriter(Buffer.allocUnsafe(4)); + heightBufferWriter.writeUInt32(signedBlockheight); + if (signatureVersion === 1) { + return createHash("sha256") + .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) + .update((0, address_1.fromBase58Check)(this.system_id).hash) + .update(heightBufferWriter.buffer) + .update((0, address_1.fromBase58Check)(this.signing_id).hash) + .update(this.data.toSha256()) + .digest(); + } + else { + return createHash("sha256") + .update((0, address_1.fromBase58Check)(this.system_id).hash) + .update(heightBufferWriter.buffer) + .update((0, address_1.fromBase58Check)(this.signing_id).hash) + .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) + .update(this.data.toSha256()) + .digest(); + } + } + toJson() { + return { + vdxfkey: this.vdxfkey, + system_id: this.system_id, + signing_id: this.signing_id, + signature: this.signature ? this.signature.toJson() : this.signature, + challenge: this.data.toJson(), + }; + } + _dataByteLength(signer = this.signing_id) { + let length = 0; + const _signing_id = Hash160_1.Hash160.fromAddress(signer); + const _signature = this.signature + ? this.signature + : new __1.VerusIDSignature({ signature: "" }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY); + const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); + length += _system_id.byteLength(); + length += _signing_id.byteLength(); + length += _signature.byteLength(); + length += this.data.byteLength(); + return length; + } + _toDataBuffer(signer = this.signing_id) { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.dataByteLength())); + const _signing_id = Hash160_1.Hash160.fromAddress(signer); + const _signature = this.signature + ? this.signature + : new __1.VerusIDSignature({ signature: "" }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY); + const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); + writer.writeSlice(_system_id.toBuffer()); + writer.writeSlice(_signing_id.toBuffer()); + writer.writeSlice(_signature.toBuffer()); + writer.writeSlice(this.data.toBuffer()); + return writer.buffer; + } + dataByteLength() { + return this._dataByteLength(); + } + toDataBuffer() { + return this._toDataBuffer(); + } + _fromDataBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + const reqLength = reader.readCompactSize(); + if (reqLength == 0) { + throw new Error("Cannot create signed session object from empty buffer"); + } + else { + this.system_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + this.signing_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + const _sig = new __1.VerusIDSignature(); + reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); + this.signature = _sig; + const _data = new SignedSessionObjectData_1.SignedSessionObjectData(); + reader.offset = _data.fromBuffer(reader.buffer, reader.offset); + this.data = _data; + } + return reader.offset; + } + fromDataBuffer(buffer, offset) { + return this._fromDataBuffer(buffer, offset); + } + getHeaders() { + return { + ['VDXF-Key']: this.vdxfkey, // VDXF key of signed session object (SSO), denoting that this is a SSO + ['VDXF-Version']: this.version.toString(), // SSO version + ['VerusID-Session-ID']: this.data.session_id, // Session ID of original response made + ['VerusID-Timestamp-Micro']: this.data.timestamp_micro.toString(), // Microsecond timestamp + ['VerusID-Signature']: this.signature.signature // Signature of this SSO serialized + }; + } + static fromHttpRequest(headers, body, system_id, signing_id) { + return new SignedSessionObject({ + system_id, + signing_id, + signature: new __1.VerusIDSignature({ signature: headers['VerusID-Signature'] }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY), + data: new SignedSessionObjectData_1.SignedSessionObjectData({ + session_id: headers['VerusID-Session-ID'], + timestamp_micro: Number(headers['VerusID-Timestamp-Micro']), + body + }) + }); + } +} +exports.SignedSessionObject = SignedSessionObject; diff --git a/dist/vdxf/classes/Web/SignedSessionObjectData.d.ts b/dist/vdxf/classes/Web/SignedSessionObjectData.d.ts new file mode 100644 index 00000000..20482829 --- /dev/null +++ b/dist/vdxf/classes/Web/SignedSessionObjectData.d.ts @@ -0,0 +1,19 @@ +import { VDXFObject } from "../../"; +export declare class SignedSessionObjectData extends VDXFObject { + session_id: string; + timestamp_micro: number; + body: string; + constructor(data?: { + session_id?: string; + timestamp_micro?: number; + body?: string; + }); + dataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer, offset?: number): number; + toJson(): { + session_id: string; + timestamp_micro: number; + body: string; + }; +} diff --git a/dist/vdxf/classes/Web/SignedSessionObjectData.js b/dist/vdxf/classes/Web/SignedSessionObjectData.js new file mode 100644 index 00000000..e9135693 --- /dev/null +++ b/dist/vdxf/classes/Web/SignedSessionObjectData.js @@ -0,0 +1,67 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SignedSessionObjectData = void 0; +const __1 = require("../../"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const varuint_1 = require("../../../utils/varuint"); +const Hash160_1 = require("../Hash160"); +class SignedSessionObjectData extends __1.VDXFObject { + constructor(data = { + session_id: "", + timestamp_micro: 0, + body: "" + }) { + super(__1.SIGNED_SESSION_OBJECT_DATA.vdxfid); + this.session_id = data.session_id; + if (isNaN(data.timestamp_micro)) { + this.timestamp_micro = 0; + } + else { + this.timestamp_micro = data.timestamp_micro; + } + this.body = data.body; + } + dataByteLength() { + let length = 0; + const _session_id = Hash160_1.Hash160.fromAddress(this.session_id, false); + const _body = Buffer.from(this.body, 'utf8'); + length += _session_id.byteLength(); + length += 8; // timestamp_micro + length += varuint_1.default.encodingLength(_body.length); + length += _body.length; + return length; + } + toDataBuffer() { + const buffer = Buffer.alloc(this.dataByteLength()); + const writer = new bufferutils_1.default.BufferWriter(buffer); + const _session_id = Hash160_1.Hash160.fromAddress(this.session_id, false); + const _body = Buffer.from(this.body, 'utf8'); + writer.writeSlice(_session_id.toBuffer()); + writer.writeUInt64(this.timestamp_micro); + writer.writeVarSlice(_body); + return writer.buffer; + } + fromDataBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + const length = reader.readCompactSize(); + if (length == 0) { + throw new Error("Cannot create signed session object data from empty buffer"); + } + else { + const _session_id = new Hash160_1.Hash160(); + reader.offset = _session_id.fromBuffer(reader.buffer, false, reader.offset); + this.session_id = _session_id.toAddress(); + this.timestamp_micro = reader.readUInt64(); + this.body = reader.readVarSlice().toString('utf-8'); + } + return reader.offset; + } + toJson() { + return { + session_id: this.session_id, + timestamp_micro: this.timestamp_micro, + body: this.body + }; + } +} +exports.SignedSessionObjectData = SignedSessionObjectData; diff --git a/dist/vdxf/classes/datapacket/DataPacketResponse.d.ts b/dist/vdxf/classes/datapacket/DataPacketResponse.d.ts new file mode 100644 index 00000000..ab3cb927 --- /dev/null +++ b/dist/vdxf/classes/datapacket/DataPacketResponse.d.ts @@ -0,0 +1,68 @@ +/** + * DataPacketResponse - Class for providing structured responses to various request types + * + * This class serves as a universal response mechanism that can be used to reply to multiple + * types of requests. It packages response data within a DataDescriptor along with metadata + * for request tracking and timestamping. + * + * USAGE AS RESPONSE TO DIFFERENT REQUEST TYPES: + * + * 1. AppEncryptionRequestDetails Response: + * - The DataDescriptor 'data' field contains the encrypted derived seed + * - The requestID references the original AppEncryptionRequestDetails.requestID + * - Enables secure delivery of application-specific encrypted keys + * + * 2. UserDataRequestDetails Response: + * - The DataDescriptor 'data' field contains requested user data/attestations + * - The requestID references the original UserDataRequestDetails.requestID + * - Allows selective disclosure of personal information + * + * 3. UserSpecificDataPacketDetails Response: + * - The DataDescriptor 'data' field contains the response data or signed content + * - The requestID references the original UserSpecificDataPacketDetails.requestID + * - Supports bidirectional data exchange with signatures and statements + * + * REQUEST-RESPONSE CORRELATION: + * Each of the above request types includes its own requestID field. This response object's + * requestID field can be used to match responses back to their originating requests, enabling + * proper request-response correlation in asynchronous communication flows. + * + * GENERAL DATA REPLIES: + * This response format can also be used for other general data replies where: + * - Structured data needs to be transmitted via DataDescriptor + * - Request tracking through requestID is desired + * - Timestamp metadata (createdAt) is needed for the response + * - Response validation and integrity checking via SHA-256 is required + */ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { DataDescriptor, DataDescriptorJson } from '../../../pbaas'; +export interface DataResponseInterface { + flags?: BigNumber; + requestID?: string; + data: DataDescriptor; +} +export interface DataResponseJson { + flags?: number; + requestid?: string; + data: DataDescriptorJson; +} +export declare class DataPacketResponse implements SerializableEntity { + flags?: BigNumber; + requestID?: string; + data: DataDescriptor; + static RESPONSE_CONTAINS_REQUEST_ID: import("bn.js"); + constructor(data?: { + flags?: BigNumber; + requestID?: string; + data: DataDescriptor; + }); + containsRequestID(): boolean; + toggleContainsRequestID(): void; + toSha256(): Buffer; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): DataResponseJson; + static fromJson(json: DataResponseJson): DataPacketResponse; +} diff --git a/dist/vdxf/classes/datapacket/DataPacketResponse.js b/dist/vdxf/classes/datapacket/DataPacketResponse.js new file mode 100644 index 00000000..a6beb887 --- /dev/null +++ b/dist/vdxf/classes/datapacket/DataPacketResponse.js @@ -0,0 +1,112 @@ +"use strict"; +/** + * DataPacketResponse - Class for providing structured responses to various request types + * + * This class serves as a universal response mechanism that can be used to reply to multiple + * types of requests. It packages response data within a DataDescriptor along with metadata + * for request tracking and timestamping. + * + * USAGE AS RESPONSE TO DIFFERENT REQUEST TYPES: + * + * 1. AppEncryptionRequestDetails Response: + * - The DataDescriptor 'data' field contains the encrypted derived seed + * - The requestID references the original AppEncryptionRequestDetails.requestID + * - Enables secure delivery of application-specific encrypted keys + * + * 2. UserDataRequestDetails Response: + * - The DataDescriptor 'data' field contains requested user data/attestations + * - The requestID references the original UserDataRequestDetails.requestID + * - Allows selective disclosure of personal information + * + * 3. UserSpecificDataPacketDetails Response: + * - The DataDescriptor 'data' field contains the response data or signed content + * - The requestID references the original UserSpecificDataPacketDetails.requestID + * - Supports bidirectional data exchange with signatures and statements + * + * REQUEST-RESPONSE CORRELATION: + * Each of the above request types includes its own requestID field. This response object's + * requestID field can be used to match responses back to their originating requests, enabling + * proper request-response correlation in asynchronous communication flows. + * + * GENERAL DATA REPLIES: + * This response format can also be used for other general data replies where: + * - Structured data needs to be transmitted via DataDescriptor + * - Request tracking through requestID is desired + * - Timestamp metadata (createdAt) is needed for the response + * - Response validation and integrity checking via SHA-256 is required + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DataPacketResponse = void 0; +const bn_js_1 = require("bn.js"); +const varint_1 = require("../../../utils/varint"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const address_1 = require("../../../utils/address"); +const vdxf_1 = require("../../../constants/vdxf"); +const pbaas_1 = require("../../../pbaas"); +const createHash = require("create-hash"); +class DataPacketResponse { + constructor(data) { + this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0", 10); + if (data === null || data === void 0 ? void 0 : data.requestID) { + if (!this.containsRequestID()) + this.toggleContainsRequestID(); + this.requestID = data.requestID; + } + this.data = data === null || data === void 0 ? void 0 : data.data; + } + containsRequestID() { + return !!(this.flags.and(DataPacketResponse.RESPONSE_CONTAINS_REQUEST_ID).toNumber()); + } + toggleContainsRequestID() { + this.flags = this.flags.xor(DataPacketResponse.RESPONSE_CONTAINS_REQUEST_ID); + } + toSha256() { + return createHash("sha256").update(this.toBuffer()).digest(); + } + getByteLength() { + let length = 0; + length += varint_1.default.encodingLength(this.flags); + if (this.containsRequestID()) { + length += vdxf_1.HASH160_BYTE_LENGTH; + } + length += this.data.getByteLength(); + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeVarInt(this.flags); + if (this.containsRequestID()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + } + writer.writeSlice(this.data.toBuffer()); + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.flags = reader.readVarInt(); + if (this.containsRequestID()) { + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + } + this.data = new pbaas_1.DataDescriptor(); + this.data.fromBuffer(reader.buffer, reader.offset); + reader.offset += this.data.getByteLength(); + return reader.offset; + } + toJson() { + return { + flags: this.flags.toNumber(), + requestid: this.containsRequestID() ? this.requestID : undefined, + data: this.data.toJson() + }; + } + static fromJson(json) { + return new DataPacketResponse({ + flags: new bn_js_1.BN(json.flags, 10), + requestID: json.requestid, + data: pbaas_1.DataDescriptor.fromJson(json.data) + }); + } +} +exports.DataPacketResponse = DataPacketResponse; +DataPacketResponse.RESPONSE_CONTAINS_REQUEST_ID = new bn_js_1.BN(1, 10); diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts new file mode 100644 index 00000000..404fceef --- /dev/null +++ b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts @@ -0,0 +1,63 @@ +import { BigNumber } from "../../../utils/types/BigNumber"; +import { OrdinalVDXFObject, OrdinalVDXFObjectJson } from "../ordinals/OrdinalVDXFObject"; +import { SerializableEntity } from "../../../utils/types/SerializableEntity"; +import { VerifiableSignatureData, VerifiableSignatureDataJson } from "../VerifiableSignatureData"; +export interface GenericEnvelopeInterface { + version?: BigNumber; + flags?: BigNumber; + signature?: VerifiableSignatureData; + createdAt?: BigNumber; + salt?: Buffer; + details: Array; +} +export type GenericEnvelopeJson = { + version: string; + flags?: string; + signature?: VerifiableSignatureDataJson; + createdat?: string; + salt?: string; + details: Array; +}; +export declare class GenericEnvelope implements SerializableEntity { + version: BigNumber; + flags: BigNumber; + signature?: VerifiableSignatureData; + createdAt?: BigNumber; + salt?: Buffer; + details: Array; + static VERSION_CURRENT: import("bn.js"); + static VERSION_FIRSTVALID: import("bn.js"); + static VERSION_LASTVALID: import("bn.js"); + static BASE_FLAGS: import("bn.js"); + static FLAG_SIGNED: import("bn.js"); + static FLAG_HAS_CREATED_AT: import("bn.js"); + static FLAG_MULTI_DETAILS: import("bn.js"); + static FLAG_IS_TESTNET: import("bn.js"); + static FLAG_HAS_SALT: import("bn.js"); + constructor(envelope?: GenericEnvelopeInterface); + isValidVersion(): boolean; + isSigned(): boolean; + hasMultiDetails(): boolean; + hasCreatedAt(): boolean; + hasSalt(): boolean; + isTestnet(): boolean; + setSigned(): void; + setHasMultiDetails(): void; + setHasCreatedAt(): void; + setHasSalt(): void; + setIsTestnet(): void; + setFlags(): void; + getRawDataSha256(includeSig?: boolean): Buffer; + getDetailsIdentitySignatureHash(signedBlockheight: number): Buffer; + getDetails(index?: number): OrdinalVDXFObject; + protected getDetailsBufferLength(): number; + protected getDetailsBuffer(): Buffer; + private internalGetByteLength; + protected getByteLengthOptionalSig(includeSig?: boolean): number; + getByteLength(): number; + protected toBufferOptionalSig(includeSig?: boolean): Buffer; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toString(): string; + toJson(): GenericEnvelopeJson; +} diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.js b/dist/vdxf/classes/envelope/GenericEnvelope.js new file mode 100644 index 00000000..eb5f835b --- /dev/null +++ b/dist/vdxf/classes/envelope/GenericEnvelope.js @@ -0,0 +1,216 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GenericEnvelope = void 0; +const bufferutils_1 = require("../../../utils/bufferutils"); +const base64url_1 = require("base64url"); +const bn_js_1 = require("bn.js"); +const OrdinalVDXFObject_1 = require("../ordinals/OrdinalVDXFObject"); +const varuint_1 = require("../../../utils/varuint"); +const crypto_1 = require("crypto"); +const VerifiableSignatureData_1 = require("../VerifiableSignatureData"); +class GenericEnvelope { + constructor(envelope = { + details: [], + flags: GenericEnvelope.BASE_FLAGS + }) { + this.signature = envelope.signature; + this.details = envelope.details; + this.createdAt = envelope.createdAt; + this.salt = envelope.salt; + if (envelope.flags) + this.flags = envelope.flags; + else + this.flags = GenericEnvelope.BASE_FLAGS; + if (envelope.version) + this.version = envelope.version; + else + this.version = GenericEnvelope.VERSION_CURRENT; + this.setFlags(); + } + isValidVersion() { + return this.version.gte(GenericEnvelope.VERSION_FIRSTVALID) && this.version.lte(GenericEnvelope.VERSION_LASTVALID); + } + isSigned() { + return !!(this.flags.and(GenericEnvelope.FLAG_SIGNED).toNumber()); + } + hasMultiDetails() { + return !!(this.flags.and(GenericEnvelope.FLAG_MULTI_DETAILS).toNumber()); + } + hasCreatedAt() { + return !!(this.flags.and(GenericEnvelope.FLAG_HAS_CREATED_AT).toNumber()); + } + hasSalt() { + return !!(this.flags.and(GenericEnvelope.FLAG_HAS_SALT).toNumber()); + } + isTestnet() { + return !!(this.flags.and(GenericEnvelope.FLAG_IS_TESTNET).toNumber()); + } + setSigned() { + this.flags = this.flags.or(GenericEnvelope.FLAG_SIGNED); + } + setHasMultiDetails() { + this.flags = this.flags.or(GenericEnvelope.FLAG_MULTI_DETAILS); + } + setHasCreatedAt() { + this.flags = this.flags.or(GenericEnvelope.FLAG_HAS_CREATED_AT); + } + setHasSalt() { + this.flags = this.flags.or(GenericEnvelope.FLAG_HAS_SALT); + } + setIsTestnet() { + this.flags = this.flags.or(GenericEnvelope.FLAG_IS_TESTNET); + } + setFlags() { + if (this.createdAt) + this.setHasCreatedAt(); + if (this.details && this.details.length > 1) + this.setHasMultiDetails(); + if (this.signature) + this.setSigned(); + if (this.salt) + this.setHasSalt(); + } + getRawDataSha256(includeSig = false) { + return (0, crypto_1.createHash)("sha256").update(this.toBufferOptionalSig(includeSig)).digest(); + } + getDetailsIdentitySignatureHash(signedBlockheight) { + if (this.isSigned()) { + return this.signature.getIdentityHash(signedBlockheight, this.getRawDataSha256()); + } + else + throw new Error("Must contain verifiable signature with at least systemID and identityID to generate details identity signature hash"); + } + getDetails(index = 0) { + return this.details[index]; + } + getDetailsBufferLength() { + let length = 0; + if (this.hasCreatedAt()) { + length += varuint_1.default.encodingLength(this.createdAt.toNumber()); + } + if (this.hasSalt()) { + const saltLen = this.salt.length; + length += varuint_1.default.encodingLength(saltLen); + length += saltLen; + } + if (this.hasMultiDetails()) { + length += varuint_1.default.encodingLength(this.details.length); + for (const detail of this.details) { + length += detail.getByteLength(); + } + } + else { + length += this.getDetails().getByteLength(); + } + return length; + } + getDetailsBuffer() { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getDetailsBufferLength())); + if (this.hasCreatedAt()) { + writer.writeCompactSize(this.createdAt.toNumber()); + } + if (this.hasSalt()) { + writer.writeVarSlice(this.salt); + } + if (this.hasMultiDetails()) { + writer.writeCompactSize(this.details.length); + for (const detail of this.details) { + writer.writeSlice(detail.toBuffer()); + } + } + else { + writer.writeSlice(this.getDetails().toBuffer()); + } + return writer.buffer; + } + internalGetByteLength(includeSig = true) { + let length = 0; + length += varuint_1.default.encodingLength(this.version.toNumber()); + length += varuint_1.default.encodingLength(this.flags.toNumber()); + if (this.isSigned() && includeSig) { + length += this.signature.getByteLength(); + } + length += this.getDetailsBufferLength(); + return length; + } + getByteLengthOptionalSig(includeSig) { + return this.internalGetByteLength(includeSig); + } + getByteLength() { + return this.getByteLengthOptionalSig(true); + } + toBufferOptionalSig(includeSig = true) { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.internalGetByteLength(includeSig))); + writer.writeCompactSize(this.version.toNumber()); + writer.writeCompactSize(this.flags.toNumber()); + if (this.isSigned() && includeSig) { + writer.writeSlice(this.signature.toBuffer()); + } + writer.writeSlice(this.getDetailsBuffer()); + return writer.buffer; + } + toBuffer() { + return this.toBufferOptionalSig(true); + } + fromBuffer(buffer, offset) { + if (buffer.length == 0) + throw new Error("Cannot create envelope from empty buffer"); + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + this.version = new bn_js_1.BN(reader.readCompactSize()); + this.flags = new bn_js_1.BN(reader.readCompactSize()); + if (this.isSigned()) { + const _sig = new VerifiableSignatureData_1.VerifiableSignatureData(); + reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); + this.signature = _sig; + } + if (this.hasCreatedAt()) { + this.createdAt = new bn_js_1.BN(reader.readCompactSize()); + } + if (this.hasSalt()) { + this.salt = reader.readVarSlice(); + } + if (this.hasMultiDetails()) { + this.details = []; + const numItems = reader.readCompactSize(); + for (let i = 0; i < numItems; i++) { + const ord = OrdinalVDXFObject_1.OrdinalVDXFObject.createFromBuffer(reader.buffer, reader.offset); + reader.offset = ord.offset; + this.details.push(ord.obj); + } + } + else { + const ord = OrdinalVDXFObject_1.OrdinalVDXFObject.createFromBuffer(reader.buffer, reader.offset); + reader.offset = ord.offset; + this.details = [ord.obj]; + } + return reader.offset; + } + toString() { + return base64url_1.default.encode(this.toBuffer()); + } + toJson() { + const details = []; + if (this.details != null) { + for (const detail of this.details) { + details.push(detail.toJson()); + } + } + return { + signature: undefined, //TODO: Add signature toJson function this.isSigned() ? this.signature.toJson() : undefined, + details: details, + version: this.version.toString(), + flags: this.flags.toString(), + createdat: this.hasCreatedAt() ? this.createdAt.toString() : undefined + }; + } +} +exports.GenericEnvelope = GenericEnvelope; +GenericEnvelope.VERSION_CURRENT = new bn_js_1.BN(1, 10); +GenericEnvelope.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); +GenericEnvelope.VERSION_LASTVALID = new bn_js_1.BN(1, 10); +GenericEnvelope.BASE_FLAGS = new bn_js_1.BN(0, 10); +GenericEnvelope.FLAG_SIGNED = new bn_js_1.BN(1, 10); +GenericEnvelope.FLAG_HAS_CREATED_AT = new bn_js_1.BN(2, 10); +GenericEnvelope.FLAG_MULTI_DETAILS = new bn_js_1.BN(4, 10); +GenericEnvelope.FLAG_IS_TESTNET = new bn_js_1.BN(8, 10); +GenericEnvelope.FLAG_HAS_SALT = new bn_js_1.BN(16, 10); diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts new file mode 100644 index 00000000..a3eb212f --- /dev/null +++ b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts @@ -0,0 +1,75 @@ +import { PartialIdentity } from '../../../pbaas/PartialIdentity'; +import { PartialSignData, PartialSignDataCLIJson, PartialSignDataJson } from '../../../pbaas/PartialSignData'; +import { BigNumber } from '../../../utils/types/BigNumber'; +import { ContentMultiMapJsonValue, IdentityID, VerusCLIVerusIDJson, VerusCLIVerusIDJsonBase } from '../../../pbaas'; +import { ResponseURI, ResponseURIJson } from '../ResponseURI'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +export type SignDataMap = Map; +export type VerusCLIVerusIDJsonWithData = VerusCLIVerusIDJsonBase<{ + [key: string]: ContentMultiMapJsonValue | { + data: PartialSignDataCLIJson; + }; +}>; +export type IdentityUpdateRequestDetailsJson = { + flags?: string; + requestid?: string; + identity?: VerusCLIVerusIDJson; + expiryheight?: string; + systemid?: string; + responseuris?: Array; + signdatamap?: { + [key: string]: PartialSignDataJson; + }; + txid?: string; +}; +export declare class IdentityUpdateRequestDetails implements SerializableEntity { + flags?: BigNumber; + requestID?: string; + identity?: PartialIdentity; + expiryHeight?: BigNumber; + systemID?: IdentityID; + responseURIs?: Array; + signDataMap?: SignDataMap; + txid?: Buffer; + static IDENTITY_UPDATE_REQUEST_VALID: import("bn.js"); + static IDENTITY_UPDATE_REQUEST_CONTAINS_SIGNDATA: import("bn.js"); + static IDENTITY_UPDATE_REQUEST_EXPIRES: import("bn.js"); + static IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS: import("bn.js"); + static IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID: import("bn.js"); + static IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM: import("bn.js"); + static IDENTITY_UPDATE_REQUEST_CONTAINS_TXID: import("bn.js"); + static IDENTITY_UPDATE_REQUEST_IS_TESTNET: import("bn.js"); + constructor(data?: { + flags?: BigNumber; + requestID?: string; + identity?: PartialIdentity; + expiryHeight?: BigNumber; + systemID?: IdentityID; + txid?: Buffer; + responseURIs?: Array; + signDataMap?: SignDataMap; + }); + expires(): boolean; + containsSignData(): boolean; + containsSystem(): boolean; + containsRequestID(): boolean; + containsTxid(): boolean; + containsResponseUris(): boolean; + isTestnet(): boolean; + toggleExpires(): void; + toggleContainsSignData(): void; + toggleContainsSystem(): void; + toggleContainsRequestID(): void; + toggleContainsTxid(): void; + toggleContainsResponseUris(): void; + toggleIsTestnet(): void; + toSha256(): Buffer; + getIdentityAddress(): string; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number, parseVdxfObjects?: boolean): number; + toJson(): IdentityUpdateRequestDetailsJson; + static fromJson(json: IdentityUpdateRequestDetailsJson): IdentityUpdateRequestDetails; + toCLIJson(): VerusCLIVerusIDJsonWithData; + static fromCLIJson(json: VerusCLIVerusIDJsonWithData, details?: IdentityUpdateRequestDetailsJson): IdentityUpdateRequestDetails; +} diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js new file mode 100644 index 00000000..45a4a647 --- /dev/null +++ b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js @@ -0,0 +1,294 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IdentityUpdateRequestDetails = void 0; +const varuint_1 = require("../../../utils/varuint"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const address_1 = require("../../../utils/address"); +const vdxf_1 = require("../../../constants/vdxf"); +const createHash = require("create-hash"); +const PartialIdentity_1 = require("../../../pbaas/PartialIdentity"); +const PartialSignData_1 = require("../../../pbaas/PartialSignData"); +const bn_js_1 = require("bn.js"); +const pbaas_1 = require("../../../pbaas"); +const ResponseURI_1 = require("../ResponseURI"); +const pbaas_2 = require("../../../constants/pbaas"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class IdentityUpdateRequestDetails { + constructor(data) { + this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0", 10); + if (data === null || data === void 0 ? void 0 : data.requestID) { + if (!this.containsRequestID()) + this.toggleContainsRequestID(); + this.requestID = data.requestID; + } + if (data === null || data === void 0 ? void 0 : data.identity) { + this.identity = data.identity; + } + if (data === null || data === void 0 ? void 0 : data.expiryHeight) { + if (!this.expires()) + this.toggleExpires(); + this.expiryHeight = data.expiryHeight; + } + if (data === null || data === void 0 ? void 0 : data.systemID) { + if (!this.containsSystem()) + this.toggleContainsSystem(); + this.systemID = data.systemID; + } + if (data === null || data === void 0 ? void 0 : data.txid) { + if (!this.containsTxid()) + this.toggleContainsTxid(); + this.txid = data.txid; + } + if (data === null || data === void 0 ? void 0 : data.responseURIs) { + if (!this.containsResponseUris()) + this.toggleContainsResponseUris(); + this.responseURIs = data.responseURIs; + } + if (data === null || data === void 0 ? void 0 : data.signDataMap) { + if (!this.containsSignData()) + this.toggleContainsSignData(); + this.signDataMap = data.signDataMap; + } + } + expires() { + return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_EXPIRES).toNumber()); + } + containsSignData() { + return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SIGNDATA).toNumber()); + } + containsSystem() { + return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM).toNumber()); + } + containsRequestID() { + return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID).toNumber()); + } + containsTxid() { + return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID).toNumber()); + } + containsResponseUris() { + return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS).toNumber()); + } + isTestnet() { + return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET).toNumber()); + } + toggleExpires() { + this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_EXPIRES); + } + toggleContainsSignData() { + this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SIGNDATA); + } + toggleContainsSystem() { + this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM); + } + toggleContainsRequestID() { + this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID); + } + toggleContainsTxid() { + this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID); + } + toggleContainsResponseUris() { + this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS); + } + toggleIsTestnet() { + this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET); + } + toSha256() { + return createHash("sha256").update(this.toBuffer()).digest(); + } + getIdentityAddress() { + if (this.identity.name === "VRSC" || this.identity.name === "VRSCTEST") { + return (0, address_1.nameAndParentAddrToIAddr)(this.identity.name); + } + else if (this.identity.parent) { + return this.identity.getIdentityAddress(); + } + else if (this.isTestnet()) { + return (0, address_1.nameAndParentAddrToIAddr)(this.identity.name, (0, address_1.nameAndParentAddrToIAddr)("VRSCTEST")); + } + else { + return (0, address_1.nameAndParentAddrToIAddr)(this.identity.name, (0, address_1.nameAndParentAddrToIAddr)("VRSC")); + } + } + getByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.flags.toNumber()); + if (this.containsRequestID()) { + length += vdxf_1.HASH160_BYTE_LENGTH; + } + length += this.identity.getByteLength(); + if (this.expires()) + length += varuint_1.default.encodingLength(this.expiryHeight.toNumber()); + if (this.containsSystem()) + length += this.systemID.getByteLength(); + if (this.containsTxid()) { + length += pbaas_2.UINT_256_LENGTH; + } + if (this.containsResponseUris()) { + length += varuint_1.default.encodingLength(this.responseURIs.length); + length += this.responseURIs.reduce((sum, current) => sum + current.getByteLength(), 0); + } + if (this.containsSignData()) { + length += varuint_1.default.encodingLength(this.signDataMap.size); + for (const [key, value] of this.signDataMap.entries()) { + length += (0, address_1.fromBase58Check)(key).hash.length; + length += value.getByteLength(); + } + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeCompactSize(this.flags.toNumber()); + if (this.containsRequestID()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + } + writer.writeSlice(this.identity.toBuffer()); + if (this.expires()) + writer.writeCompactSize(this.expiryHeight.toNumber()); + if (this.containsSystem()) + writer.writeSlice(this.systemID.toBuffer()); + if (this.containsTxid()) { + if (this.txid.length !== pbaas_2.UINT_256_LENGTH) + throw new Error("invalid txid length"); + writer.writeSlice(this.txid); + } + if (this.containsResponseUris()) { + writer.writeArray(this.responseURIs.map((x) => x.toBuffer())); + } + if (this.containsSignData()) { + writer.writeCompactSize(this.signDataMap.size); + for (const [key, value] of this.signDataMap.entries()) { + writer.writeSlice((0, address_1.fromBase58Check)(key).hash); + writer.writeSlice(value.toBuffer()); + } + } + return writer.buffer; + } + fromBuffer(buffer, offset = 0, parseVdxfObjects = true) { + const reader = new BufferReader(buffer, offset); + this.flags = new bn_js_1.BN(reader.readCompactSize()); + if (this.containsRequestID()) { + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + } + this.identity = new PartialIdentity_1.PartialIdentity(); + reader.offset = this.identity.fromBuffer(reader.buffer, reader.offset, parseVdxfObjects); + if (this.expires()) { + this.expiryHeight = new bn_js_1.BN(reader.readCompactSize()); + } + if (this.containsSystem()) { + this.systemID = new pbaas_1.IdentityID(); + reader.offset = this.systemID.fromBuffer(reader.buffer, reader.offset); + } + if (this.containsTxid()) { + this.txid = reader.readSlice(pbaas_2.UINT_256_LENGTH); + } + if (this.containsResponseUris()) { + this.responseURIs = []; + const urisLength = reader.readCompactSize(); + for (let i = 0; i < urisLength; i++) { + const uri = new ResponseURI_1.ResponseURI(); + reader.offset = uri.fromBuffer(reader.buffer, reader.offset); + this.responseURIs.push(uri); + } + } + if (this.containsSignData()) { + this.signDataMap = new Map(); + const size = reader.readCompactSize(); + for (let i = 0; i < size; i++) { + const key = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + const value = new PartialSignData_1.PartialSignData(); + reader.offset = value.fromBuffer(reader.buffer, reader.offset); + this.signDataMap.set(key, value); + } + } + return reader.offset; + } + toJson() { + let signDataJson; + if (this.signDataMap) { + signDataJson = {}; + for (const [key, psd] of this.signDataMap.entries()) { + signDataJson[key] = psd.toJson(); + } + } + return { + flags: this.flags ? this.flags.toString(10) : undefined, + requestid: this.containsRequestID() ? this.requestID : undefined, + identity: this.identity ? this.identity.toJson() : undefined, + expiryheight: this.expiryHeight ? this.expiryHeight.toString(10) : undefined, + systemid: this.systemID ? this.systemID.toAddress() : undefined, + txid: this.txid ? (Buffer.from(this.txid.toString('hex'), 'hex').reverse()).toString('hex') : undefined, + responseuris: this.responseURIs ? this.responseURIs.map(x => x.toJson()) : undefined, + signdatamap: signDataJson + }; + } + static fromJson(json) { + let signDataMap; + if (json.signdatamap) { + signDataMap = new Map(); + for (const key in json.signdatamap) { + signDataMap.set(key, PartialSignData_1.PartialSignData.fromJson(json.signdatamap[key])); + } + } + return new IdentityUpdateRequestDetails({ + flags: json.flags ? new bn_js_1.BN(json.flags, 10) : undefined, + requestID: json.requestid, + identity: json.identity ? PartialIdentity_1.PartialIdentity.fromJson(json.identity) : undefined, + expiryHeight: json.expiryheight ? new bn_js_1.BN(json.expiryheight, 10) : undefined, + systemID: json.systemid ? pbaas_1.IdentityID.fromAddress(json.systemid) : undefined, + responseURIs: json.responseuris ? json.responseuris.map(x => ResponseURI_1.ResponseURI.fromJson(x)) : undefined, + signDataMap, + txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined, + }); + } + toCLIJson() { + if (!this.identity) + throw new Error("No identity details to update"); + const idJson = this.identity.toJson(); + if (this.containsSignData()) { + for (const [key, psd] of this.signDataMap.entries()) { + idJson.contentmultimap[key] = { + "data": psd.toCLIJson() + }; + } + } + return idJson; + } + static fromCLIJson(json, details) { + let identity; + let signDataMap; + if (json.contentmultimap) { + const cmm = Object.assign({}, json.contentmultimap); + for (const key in cmm) { + if (cmm[key]['data']) { + if (!signDataMap) + signDataMap = new Map(); + const psd = PartialSignData_1.PartialSignData.fromCLIJson(cmm[key]['data']); + signDataMap.set(key, psd); + delete cmm[key]; + } + } + json = Object.assign(Object.assign({}, json), { contentmultimap: cmm }); + } + identity = PartialIdentity_1.PartialIdentity.fromJson(json); + return new IdentityUpdateRequestDetails({ + identity, + signDataMap, + systemID: (details === null || details === void 0 ? void 0 : details.systemid) ? pbaas_1.IdentityID.fromAddress(details.systemid) : undefined, + requestID: details === null || details === void 0 ? void 0 : details.requestid, + expiryHeight: (details === null || details === void 0 ? void 0 : details.expiryheight) ? new bn_js_1.BN(details.expiryheight, 10) : undefined, + responseURIs: (details === null || details === void 0 ? void 0 : details.responseuris) ? details.responseuris.map(x => ResponseURI_1.ResponseURI.fromJson(x)) : undefined, + txid: (details === null || details === void 0 ? void 0 : details.txid) ? Buffer.from(details.txid, 'hex').reverse() : undefined, + }); + } +} +exports.IdentityUpdateRequestDetails = IdentityUpdateRequestDetails; +// stored in natural order, if displayed as text make sure to reverse! +IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_VALID = new bn_js_1.BN(0, 10); +IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SIGNDATA = new bn_js_1.BN(1, 10); +IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_EXPIRES = new bn_js_1.BN(2, 10); +IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS = new bn_js_1.BN(4, 10); +IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID = new bn_js_1.BN(8, 10); +IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM = new bn_js_1.BN(16, 10); +IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID = new bn_js_1.BN(32, 10); +IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET = new bn_js_1.BN(64, 10); diff --git a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts new file mode 100644 index 00000000..eb319c96 --- /dev/null +++ b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.d.ts @@ -0,0 +1,29 @@ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +export type IdentityUpdateResponseDetailsJson = { + flags: string; + requestid: string; + txid?: string; +}; +export declare class IdentityUpdateResponseDetails implements SerializableEntity { + flags?: BigNumber; + requestID?: string; + txid?: Buffer; + static IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID: import("bn.js"); + static IDENTITY_UPDATE_RESPONSE_CONTAINS_REQUEST_ID: import("bn.js"); + constructor(data?: { + flags?: BigNumber; + requestID?: string; + txid?: Buffer; + }); + containsTxid(): boolean; + containsRequestID(): boolean; + toggleContainsTxid(): void; + toggleContainsRequestID(): void; + toSha256(): Buffer; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): IdentityUpdateResponseDetailsJson; + static fromJson(json: IdentityUpdateResponseDetailsJson): IdentityUpdateResponseDetails; +} diff --git a/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js new file mode 100644 index 00000000..c677b35a --- /dev/null +++ b/dist/vdxf/classes/identity/IdentityUpdateResponseDetails.js @@ -0,0 +1,94 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IdentityUpdateResponseDetails = void 0; +const varint_1 = require("../../../utils/varint"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const createHash = require("create-hash"); +const bn_js_1 = require("bn.js"); +const pbaas_1 = require("../../../constants/pbaas"); +const vdxf_1 = require("../../../constants/vdxf"); +const address_1 = require("../../../utils/address"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class IdentityUpdateResponseDetails { + constructor(data) { + this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0", 10); + if (data === null || data === void 0 ? void 0 : data.requestID) { + if (!this.containsRequestID()) + this.toggleContainsRequestID(); + this.requestID = data.requestID; + } + if (data === null || data === void 0 ? void 0 : data.txid) { + if (!this.containsTxid()) + this.toggleContainsTxid(); + this.txid = data.txid; + } + } + containsTxid() { + return !!(this.flags.and(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID).toNumber()); + } + containsRequestID() { + return !!(this.flags.and(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_REQUEST_ID).toNumber()); + } + toggleContainsTxid() { + this.flags = this.flags.xor(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID); + } + toggleContainsRequestID() { + this.flags = this.flags.xor(IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_REQUEST_ID); + } + toSha256() { + return createHash("sha256").update(this.toBuffer()).digest(); + } + getByteLength() { + let length = 0; + length += varint_1.default.encodingLength(this.flags); + if (this.containsRequestID()) { + length += vdxf_1.HASH160_BYTE_LENGTH; + } + if (this.containsTxid()) { + length += pbaas_1.UINT_256_LENGTH; + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeVarInt(this.flags); + if (this.containsRequestID()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + } + if (this.containsTxid()) { + if (this.txid.length !== pbaas_1.UINT_256_LENGTH) + throw new Error("invalid txid length"); + writer.writeSlice(this.txid); + } + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.flags = reader.readVarInt(); + if (this.containsRequestID()) { + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + } + if (this.containsTxid()) { + this.txid = reader.readSlice(pbaas_1.UINT_256_LENGTH); + } + return reader.offset; + } + toJson() { + return { + flags: this.flags.toString(10), + requestid: this.containsRequestID() ? this.requestID : undefined, + txid: this.containsTxid() ? (Buffer.from(this.txid.toString('hex'), 'hex').reverse()).toString('hex') : undefined + }; + } + static fromJson(json) { + return new IdentityUpdateResponseDetails({ + flags: new bn_js_1.BN(json.flags, 10), + requestID: json.requestid, + txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined + }); + } +} +exports.IdentityUpdateResponseDetails = IdentityUpdateResponseDetails; +// stored in natural order, if displayed as text make sure to reverse! +IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_TXID = new bn_js_1.BN(1, 10); +IdentityUpdateResponseDetails.IDENTITY_UPDATE_RESPONSE_CONTAINS_REQUEST_ID = new bn_js_1.BN(2, 10); diff --git a/dist/vdxf/classes/index.d.ts b/dist/vdxf/classes/index.d.ts new file mode 100644 index 00000000..6a9b4d46 --- /dev/null +++ b/dist/vdxf/classes/index.d.ts @@ -0,0 +1,42 @@ +export { Challenge as LoginConsentChallenge } from "./Challenge"; +export { Decision as LoginConsentDecision } from "./Decision"; +export { Request as LoginConsentRequest } from "./Request"; +export { Response as LoginConsentResponse } from "./Response"; +export { ChallengeInterface as LoginConsentChallengeInterface } from "./Challenge"; +export { DecisionInterface as LoginConsentDecisionInterface } from "./Decision"; +export { RequestInterface as LoginConsentRequestInterface } from "./Request"; +export { ResponseInterface as LoginConsentResponseInterface } from "./Response"; +export { SignedSessionObject } from './Web/SignedSessionObject'; +export { SignedSessionObjectData } from './Web/SignedSessionObjectData'; +export { VerusPayInvoiceDetails } from './payment/VerusPayInvoiceDetails'; +export { VerusPayInvoice } from './payment/VerusPayInvoice'; +export { ProvisioningRequest as LoginConsentProvisioningRequest } from "./provisioning/ProvisioningRequest"; +export { ProvisioningChallenge as LoginConsentProvisioningChallenge } from "./provisioning/ProvisioningChallenge"; +export { ProvisioningResponse as LoginConsentProvisioningResponse } from "./provisioning/ProvisioningResponse"; +export { ProvisioningDecision as LoginConsentProvisioningDecision } from "./provisioning/ProvisioningDecision"; +export { ProvisioningResult as LoginConsentProvisioningResult } from "./provisioning/ProvisioningResult"; +export { ProvisioningRequestInterface as LoginConsentProvisioningRequestInterface } from "./provisioning/ProvisioningRequest"; +export { ProvisioningChallengeInterface as LoginConsentProvisioningChallengeInterface } from "./provisioning/ProvisioningChallenge"; +export { ProvisioningResponseInterface as LoginConsentProvisioningResponseInterface } from "./provisioning/ProvisioningResponse"; +export { ProvisioningDecisionInterface as LoginConsentProvisioningDecisionInterface } from "./provisioning/ProvisioningDecision"; +export { ProvisioningResultInterface as LoginConsentProvisioningResultInterface } from "./provisioning/ProvisioningResult"; +export * from "./identity/IdentityUpdateRequestDetails"; +export * from "./identity/IdentityUpdateResponseDetails"; +export * from './ResponseURI'; +export * from './request/GenericRequest'; +export * from './response/GenericResponse'; +export * from './response/AppEncryptionResponseDetails'; +export * from './ordinals'; +export { Hash160 } from './Hash160'; +export { RedirectUri, Subject, ProvisioningInfo, RequestedPermission, Audience, AltAuthFactor, Attestation, } from "./Challenge"; +export { ProvisioningTxid } from './provisioning/ProvisioningResult'; +export { Context } from './Context'; +export { DataCategory } from './PersonalProfile'; +export * from './requestobjects/UserDataRequestDetails'; +export * from './login/AuthenticationRequestDetails'; +export * from './login/AuthenticationResponseDetails'; +export * from './requestobjects/ProvisionIdentityDetails'; +export * from './requestobjects/AppEncryptionRequestDetails'; +export * from './requestobjects/UserSpecificDataPacketDetails'; +export * from './CompactAddressObject'; +export { VerifiableSignatureData, VerifiableSignatureDataJson } from './VerifiableSignatureData'; diff --git a/dist/vdxf/classes/index.js b/dist/vdxf/classes/index.js new file mode 100644 index 00000000..2e604773 --- /dev/null +++ b/dist/vdxf/classes/index.js @@ -0,0 +1,75 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VerifiableSignatureData = exports.DataCategory = exports.Context = exports.ProvisioningTxid = exports.Attestation = exports.AltAuthFactor = exports.Audience = exports.RequestedPermission = exports.ProvisioningInfo = exports.Subject = exports.RedirectUri = exports.Hash160 = exports.LoginConsentProvisioningResult = exports.LoginConsentProvisioningDecision = exports.LoginConsentProvisioningResponse = exports.LoginConsentProvisioningChallenge = exports.LoginConsentProvisioningRequest = exports.VerusPayInvoice = exports.VerusPayInvoiceDetails = exports.SignedSessionObjectData = exports.SignedSessionObject = exports.LoginConsentResponse = exports.LoginConsentRequest = exports.LoginConsentDecision = exports.LoginConsentChallenge = void 0; +var Challenge_1 = require("./Challenge"); +Object.defineProperty(exports, "LoginConsentChallenge", { enumerable: true, get: function () { return Challenge_1.Challenge; } }); +var Decision_1 = require("./Decision"); +Object.defineProperty(exports, "LoginConsentDecision", { enumerable: true, get: function () { return Decision_1.Decision; } }); +var Request_1 = require("./Request"); +Object.defineProperty(exports, "LoginConsentRequest", { enumerable: true, get: function () { return Request_1.Request; } }); +var Response_1 = require("./Response"); +Object.defineProperty(exports, "LoginConsentResponse", { enumerable: true, get: function () { return Response_1.Response; } }); +var SignedSessionObject_1 = require("./Web/SignedSessionObject"); +Object.defineProperty(exports, "SignedSessionObject", { enumerable: true, get: function () { return SignedSessionObject_1.SignedSessionObject; } }); +var SignedSessionObjectData_1 = require("./Web/SignedSessionObjectData"); +Object.defineProperty(exports, "SignedSessionObjectData", { enumerable: true, get: function () { return SignedSessionObjectData_1.SignedSessionObjectData; } }); +var VerusPayInvoiceDetails_1 = require("./payment/VerusPayInvoiceDetails"); +Object.defineProperty(exports, "VerusPayInvoiceDetails", { enumerable: true, get: function () { return VerusPayInvoiceDetails_1.VerusPayInvoiceDetails; } }); +var VerusPayInvoice_1 = require("./payment/VerusPayInvoice"); +Object.defineProperty(exports, "VerusPayInvoice", { enumerable: true, get: function () { return VerusPayInvoice_1.VerusPayInvoice; } }); +var ProvisioningRequest_1 = require("./provisioning/ProvisioningRequest"); +Object.defineProperty(exports, "LoginConsentProvisioningRequest", { enumerable: true, get: function () { return ProvisioningRequest_1.ProvisioningRequest; } }); +var ProvisioningChallenge_1 = require("./provisioning/ProvisioningChallenge"); +Object.defineProperty(exports, "LoginConsentProvisioningChallenge", { enumerable: true, get: function () { return ProvisioningChallenge_1.ProvisioningChallenge; } }); +var ProvisioningResponse_1 = require("./provisioning/ProvisioningResponse"); +Object.defineProperty(exports, "LoginConsentProvisioningResponse", { enumerable: true, get: function () { return ProvisioningResponse_1.ProvisioningResponse; } }); +var ProvisioningDecision_1 = require("./provisioning/ProvisioningDecision"); +Object.defineProperty(exports, "LoginConsentProvisioningDecision", { enumerable: true, get: function () { return ProvisioningDecision_1.ProvisioningDecision; } }); +var ProvisioningResult_1 = require("./provisioning/ProvisioningResult"); +Object.defineProperty(exports, "LoginConsentProvisioningResult", { enumerable: true, get: function () { return ProvisioningResult_1.ProvisioningResult; } }); +__exportStar(require("./identity/IdentityUpdateRequestDetails"), exports); +__exportStar(require("./identity/IdentityUpdateResponseDetails"), exports); +__exportStar(require("./ResponseURI"), exports); +__exportStar(require("./request/GenericRequest"), exports); +__exportStar(require("./response/GenericResponse"), exports); +__exportStar(require("./response/AppEncryptionResponseDetails"), exports); +__exportStar(require("./ordinals"), exports); +var Hash160_1 = require("./Hash160"); +Object.defineProperty(exports, "Hash160", { enumerable: true, get: function () { return Hash160_1.Hash160; } }); +var Challenge_2 = require("./Challenge"); +Object.defineProperty(exports, "RedirectUri", { enumerable: true, get: function () { return Challenge_2.RedirectUri; } }); +Object.defineProperty(exports, "Subject", { enumerable: true, get: function () { return Challenge_2.Subject; } }); +Object.defineProperty(exports, "ProvisioningInfo", { enumerable: true, get: function () { return Challenge_2.ProvisioningInfo; } }); +Object.defineProperty(exports, "RequestedPermission", { enumerable: true, get: function () { return Challenge_2.RequestedPermission; } }); +Object.defineProperty(exports, "Audience", { enumerable: true, get: function () { return Challenge_2.Audience; } }); +Object.defineProperty(exports, "AltAuthFactor", { enumerable: true, get: function () { return Challenge_2.AltAuthFactor; } }); +Object.defineProperty(exports, "Attestation", { enumerable: true, get: function () { return Challenge_2.Attestation; } }); +var ProvisioningResult_2 = require("./provisioning/ProvisioningResult"); +Object.defineProperty(exports, "ProvisioningTxid", { enumerable: true, get: function () { return ProvisioningResult_2.ProvisioningTxid; } }); +var Context_1 = require("./Context"); +Object.defineProperty(exports, "Context", { enumerable: true, get: function () { return Context_1.Context; } }); +var PersonalProfile_1 = require("./PersonalProfile"); +Object.defineProperty(exports, "DataCategory", { enumerable: true, get: function () { return PersonalProfile_1.DataCategory; } }); +__exportStar(require("./requestobjects/UserDataRequestDetails"), exports); +__exportStar(require("./login/AuthenticationRequestDetails"), exports); +__exportStar(require("./login/AuthenticationResponseDetails"), exports); +__exportStar(require("./requestobjects/ProvisionIdentityDetails"), exports); +__exportStar(require("./requestobjects/AppEncryptionRequestDetails"), exports); +__exportStar(require("./requestobjects/UserSpecificDataPacketDetails"), exports); +__exportStar(require("./CompactAddressObject"), exports); +var VerifiableSignatureData_1 = require("./VerifiableSignatureData"); +Object.defineProperty(exports, "VerifiableSignatureData", { enumerable: true, get: function () { return VerifiableSignatureData_1.VerifiableSignatureData; } }); diff --git a/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts b/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts new file mode 100644 index 00000000..e8842275 --- /dev/null +++ b/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts @@ -0,0 +1,72 @@ +/** + * AuthenticationRequestDetails - Class for handling application login and authentication requests + * + * This class is used when an application is requesting authentication or login from the user, + * including specific recipientConstraints and callback information. The request includes: + * - Request ID for tracking the authentication session + * - Permission sets defining what access the application is requesting + * - Response URIs for post-authentication redirects + * - Optional expiry time for the authentication session + * + * The user's wallet can use these parameters to present a clear authentication request + * to the user, showing exactly what recipientConstraints are being requested and where they will + * be redirected after successful authentication. This enables secure, user-controlled + * authentication flows with granular permission management. + */ +import { BigNumber } from "../../../utils/types/BigNumber"; +import { SerializableEntity } from "../../../utils/types/SerializableEntity"; +import { CompactAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; +import { ResponseURI, ResponseURIJson } from "../ResponseURI"; +export interface AuthenticationRequestDetailsInterface { + version?: BigNumber; + flags?: BigNumber; + requestID: string; + recipientConstraints?: Array; + responseURIs?: Array; + expiryTime?: BigNumber; +} +export interface RecipientConstraintJson { + type: number; + identity: CompactAddressObjectJson; +} +export interface RecipientConstraint { + type: number; + identity: CompactAddressObject; +} +export interface AuthenticationRequestDetailsJson { + version: number; + requestid: string; + flags: number; + recipientConstraints?: Array; + responseURIs?: Array; + expirytime?: number; +} +export declare class AuthenticationRequestDetails implements SerializableEntity { + version: BigNumber; + flags?: BigNumber; + requestID: string; + recipientConstraints?: Array; + responseURIs?: Array; + expiryTime?: BigNumber; + static DEFAULT_VERSION: import("bn.js"); + static VERSION_FIRSTVALID: import("bn.js"); + static VERSION_LASTVALID: import("bn.js"); + static FLAG_HAS_RECIPIENT_CONSTRAINTS: import("bn.js"); + static FLAG_HAS_RESPONSE_URIS: import("bn.js"); + static FLAG_HAS_EXPIRY_TIME: import("bn.js"); + static REQUIRED_ID: number; + static REQUIRED_SYSTEM: number; + static REQUIRED_PARENT: number; + constructor(request?: AuthenticationRequestDetailsInterface); + hasRecipentConstraints(): boolean; + hasResponseURIs(): boolean; + hasExpiryTime(): boolean; + calcFlags(flags?: BigNumber): BigNumber; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): AuthenticationRequestDetailsJson; + static fromJson(data: AuthenticationRequestDetailsJson): AuthenticationRequestDetails; + setFlags(): void; + isValid(): boolean; +} diff --git a/dist/vdxf/classes/login/AuthenticationRequestDetails.js b/dist/vdxf/classes/login/AuthenticationRequestDetails.js new file mode 100644 index 00000000..294a6503 --- /dev/null +++ b/dist/vdxf/classes/login/AuthenticationRequestDetails.js @@ -0,0 +1,205 @@ +"use strict"; +/** + * AuthenticationRequestDetails - Class for handling application login and authentication requests + * + * This class is used when an application is requesting authentication or login from the user, + * including specific recipientConstraints and callback information. The request includes: + * - Request ID for tracking the authentication session + * - Permission sets defining what access the application is requesting + * - Response URIs for post-authentication redirects + * - Optional expiry time for the authentication session + * + * The user's wallet can use these parameters to present a clear authentication request + * to the user, showing exactly what recipientConstraints are being requested and where they will + * be redirected after successful authentication. This enables secure, user-controlled + * authentication flows with granular permission management. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AuthenticationRequestDetails = void 0; +const bufferutils_1 = require("../../../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const varuint_1 = require("../../../utils/varuint"); +const vdxf_1 = require("../../../constants/vdxf"); +const address_1 = require("../../../utils/address"); +const CompactAddressObject_1 = require("../CompactAddressObject"); +const ResponseURI_1 = require("../ResponseURI"); +class AuthenticationRequestDetails { + constructor(request) { + this.version = (request === null || request === void 0 ? void 0 : request.version) || AuthenticationRequestDetails.DEFAULT_VERSION; + this.requestID = (request === null || request === void 0 ? void 0 : request.requestID) || ''; + this.flags = (request === null || request === void 0 ? void 0 : request.flags) || new bn_js_1.BN(0, 10); + this.recipientConstraints = (request === null || request === void 0 ? void 0 : request.recipientConstraints) || null; + this.responseURIs = (request === null || request === void 0 ? void 0 : request.responseURIs) || null; + this.expiryTime = (request === null || request === void 0 ? void 0 : request.expiryTime) || null; + this.setFlags(); + } + hasRecipentConstraints() { + return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS).eq(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); + } + hasResponseURIs() { + return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS).eq(AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS); + } + hasExpiryTime() { + return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME).eq(AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME); + } + calcFlags(flags = this.flags) { + if (this.recipientConstraints) { + flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); + } + if (this.responseURIs) { + flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS); + } + if (this.expiryTime) { + flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME); + } + return flags; + } + getByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.flags.toNumber()); + length += vdxf_1.HASH160_BYTE_LENGTH; + if (this.hasRecipentConstraints()) { + length += varuint_1.default.encodingLength(this.recipientConstraints.length); + for (let i = 0; i < this.recipientConstraints.length; i++) { + length += varuint_1.default.encodingLength(this.recipientConstraints[i].type); + length += this.recipientConstraints[i].identity.getByteLength(); + } + } + if (this.hasResponseURIs()) { + length += varuint_1.default.encodingLength(this.responseURIs.length); + for (let i = 0; i < this.responseURIs.length; i++) { + length += this.responseURIs[i].getByteLength(); + } + } + if (this.hasExpiryTime()) { + length += varuint_1.default.encodingLength(this.expiryTime.toNumber()); + } + return length; + } + toBuffer() { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeCompactSize(this.flags.toNumber()); + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + if (this.hasRecipentConstraints()) { + writer.writeCompactSize(this.recipientConstraints.length); + for (let i = 0; i < this.recipientConstraints.length; i++) { + writer.writeCompactSize(this.recipientConstraints[i].type); + writer.writeSlice(this.recipientConstraints[i].identity.toBuffer()); + } + } + if (this.hasResponseURIs()) { + writer.writeCompactSize(this.responseURIs.length); + for (let i = 0; i < this.responseURIs.length; i++) { + writer.writeSlice(this.responseURIs[i].toBuffer()); + } + } + if (this.hasExpiryTime()) { + writer.writeCompactSize(this.expiryTime.toNumber()); + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + this.flags = new bn_js_1.BN(reader.readCompactSize()); + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + if (this.hasRecipentConstraints()) { + this.recipientConstraints = []; + const recipientConstraintsLength = reader.readCompactSize(); + for (let i = 0; i < recipientConstraintsLength; i++) { + const compactId = new CompactAddressObject_1.CompactAddressObject(); + const type = reader.readCompactSize(); + const identityOffset = reader.offset; + reader.offset = compactId.fromBuffer(buffer, identityOffset); + this.recipientConstraints.push({ + type: type, + identity: compactId + }); + } + } + if (this.hasResponseURIs()) { + this.responseURIs = []; + const callbackURIsLength = reader.readCompactSize(); + for (let i = 0; i < callbackURIsLength; i++) { + const newURI = new ResponseURI_1.ResponseURI(); + reader.offset = newURI.fromBuffer(reader.buffer, reader.offset); + this.responseURIs.push(newURI); + } + } + if (this.hasExpiryTime()) { + this.expiryTime = new bn_js_1.BN(reader.readCompactSize()); + } + return reader.offset; + } + toJson() { + const flags = this.calcFlags(); + const retval = { + version: this.version.toNumber(), + flags: flags.toNumber(), + requestid: this.requestID, + recipientConstraints: this.recipientConstraints ? this.recipientConstraints.map(p => ({ type: p.type, + identity: p.identity.toJson() })) : undefined, + responseURIs: this.responseURIs ? this.responseURIs.map(x => x.toJson()) : undefined, + expirytime: this.expiryTime ? this.expiryTime.toNumber() : undefined + }; + return retval; + } + static fromJson(data) { + const loginDetails = new AuthenticationRequestDetails(); + loginDetails.version = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.version) || 0); + loginDetails.flags = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.flags) || 0); + loginDetails.requestID = data.requestid; + if (loginDetails.hasRecipentConstraints() && data.recipientConstraints) { + loginDetails.recipientConstraints = data.recipientConstraints.map(p => ({ type: p.type, + identity: CompactAddressObject_1.CompactAddressObject.fromJson(p.identity) })); + } + if (loginDetails.hasResponseURIs() && data.responseURIs) { + loginDetails.responseURIs = data.responseURIs.map(c => ResponseURI_1.ResponseURI.fromJson(c)); + } + if (loginDetails.hasExpiryTime() && data.expirytime) { + loginDetails.expiryTime = new bn_js_1.BN(data.expirytime); + } + return loginDetails; + } + setFlags() { + this.flags = this.calcFlags(); + } + isValid() { + let valid = this.requestID != null && this.requestID.length > 0; + valid && (valid = this.flags != null && this.flags.gte(new bn_js_1.BN(0))); + // Validate requestID is a valid base58 address + try { + (0, address_1.fromBase58Check)(this.requestID); + } + catch (_a) { + valid = false; + } + if (this.hasRecipentConstraints()) { + if (!this.recipientConstraints || this.recipientConstraints.length === 0) { + return false; + } + } + if (this.hasResponseURIs()) { + if (!this.responseURIs || this.responseURIs.length === 0) { + return false; + } + } + if (this.hasExpiryTime()) { + if (!this.expiryTime || this.expiryTime.isZero()) { + return false; + } + } + return valid; + } +} +exports.AuthenticationRequestDetails = AuthenticationRequestDetails; +// Version +AuthenticationRequestDetails.DEFAULT_VERSION = new bn_js_1.BN(1, 10); +AuthenticationRequestDetails.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); +AuthenticationRequestDetails.VERSION_LASTVALID = new bn_js_1.BN(1, 10); +AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS = new bn_js_1.BN(1, 10); +AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS = new bn_js_1.BN(2, 10); +AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME = new bn_js_1.BN(4, 10); +// Recipient Constraint Types - What types of Identity can login, e.g. REQUIRED_SYSTEM and "VRSC" means only identities on the Verus chain can login +AuthenticationRequestDetails.REQUIRED_ID = 1; +AuthenticationRequestDetails.REQUIRED_SYSTEM = 2; +AuthenticationRequestDetails.REQUIRED_PARENT = 3; diff --git a/dist/vdxf/classes/login/AuthenticationResponseDetails.d.ts b/dist/vdxf/classes/login/AuthenticationResponseDetails.d.ts new file mode 100644 index 00000000..5deb1d10 --- /dev/null +++ b/dist/vdxf/classes/login/AuthenticationResponseDetails.d.ts @@ -0,0 +1,20 @@ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +export type AuthenticationResponseDetailsJson = { + flags: string; + requestid: string; +}; +export declare class AuthenticationResponseDetails implements SerializableEntity { + flags?: BigNumber; + requestID?: string; + constructor(data?: { + flags?: BigNumber; + requestID?: string; + }); + toSha256(): Buffer; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): AuthenticationResponseDetailsJson; + static fromJson(json: AuthenticationResponseDetailsJson): AuthenticationResponseDetails; +} diff --git a/dist/vdxf/classes/login/AuthenticationResponseDetails.js b/dist/vdxf/classes/login/AuthenticationResponseDetails.js new file mode 100644 index 00000000..e4450b0d --- /dev/null +++ b/dist/vdxf/classes/login/AuthenticationResponseDetails.js @@ -0,0 +1,54 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AuthenticationResponseDetails = void 0; +const varint_1 = require("../../../utils/varint"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const createHash = require("create-hash"); +const bn_js_1 = require("bn.js"); +const address_1 = require("../../../utils/address"); +const vdxf_1 = require("../../../constants/vdxf"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +class AuthenticationResponseDetails { + constructor(data) { + this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0", 10); + if (data === null || data === void 0 ? void 0 : data.requestID) { + this.requestID = data.requestID; + } + else + this.requestID = ''; + } + toSha256() { + return createHash("sha256").update(this.toBuffer()).digest(); + } + getByteLength() { + let length = 0; + length += varint_1.default.encodingLength(this.flags); + length += vdxf_1.HASH160_BYTE_LENGTH; + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeVarInt(this.flags); + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.flags = reader.readVarInt(); + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + return reader.offset; + } + toJson() { + return { + flags: this.flags.toString(10), + requestid: this.requestID, + }; + } + static fromJson(json) { + return new AuthenticationResponseDetails({ + flags: new bn_js_1.BN(json.flags, 10), + requestID: json.requestid + }); + } +} +exports.AuthenticationResponseDetails = AuthenticationResponseDetails; diff --git a/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.d.ts b/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.d.ts new file mode 100644 index 00000000..92abf0c1 --- /dev/null +++ b/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; +import { AppEncryptionRequestDetails, AppEncryptionRequestJson } from "../requestobjects/AppEncryptionRequestDetails"; +export declare class AppEncryptionRequestOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { + data: AppEncryptionRequestDetails; + constructor(request?: OrdinalVDXFObjectInterfaceTemplate); + static fromJson(details: OrdinalVDXFObjectJsonTemplate): AppEncryptionRequestOrdinalVDXFObject; +} diff --git a/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.js b/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.js new file mode 100644 index 00000000..566e0a3a --- /dev/null +++ b/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AppEncryptionRequestOrdinalVDXFObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const SerializableEntityOrdinalVDXFObject_1 = require("./SerializableEntityOrdinalVDXFObject"); +const AppEncryptionRequestDetails_1 = require("../requestobjects/AppEncryptionRequestDetails"); +class AppEncryptionRequestOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject_1.SerializableEntityOrdinalVDXFObject { + constructor(request = { + data: new AppEncryptionRequestDetails_1.AppEncryptionRequestDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, + data: request.data + }, AppEncryptionRequestDetails_1.AppEncryptionRequestDetails); + } + static fromJson(details) { + return new AppEncryptionRequestOrdinalVDXFObject({ + data: AppEncryptionRequestDetails_1.AppEncryptionRequestDetails.fromJson(details.data) + }); + } +} +exports.AppEncryptionRequestOrdinalVDXFObject = AppEncryptionRequestOrdinalVDXFObject; diff --git a/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.d.ts b/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.d.ts new file mode 100644 index 00000000..44361c52 --- /dev/null +++ b/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; +import { AppEncryptionResponseDetails, AppEncryptionResponseDetailsJson } from "../response/AppEncryptionResponseDetails"; +export declare class AppEncryptionResponseOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { + data: AppEncryptionResponseDetails; + constructor(request?: OrdinalVDXFObjectInterfaceTemplate); + static fromJson(details: OrdinalVDXFObjectJsonTemplate): AppEncryptionResponseOrdinalVDXFObject; +} diff --git a/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.js b/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.js new file mode 100644 index 00000000..031638f5 --- /dev/null +++ b/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AppEncryptionResponseOrdinalVDXFObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const SerializableEntityOrdinalVDXFObject_1 = require("./SerializableEntityOrdinalVDXFObject"); +const AppEncryptionResponseDetails_1 = require("../response/AppEncryptionResponseDetails"); +class AppEncryptionResponseOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject_1.SerializableEntityOrdinalVDXFObject { + constructor(request = { + data: new AppEncryptionResponseDetails_1.AppEncryptionResponseDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE, + data: request.data + }, AppEncryptionResponseDetails_1.AppEncryptionResponseDetails); + } + static fromJson(details) { + return new AppEncryptionResponseOrdinalVDXFObject({ + data: AppEncryptionResponseDetails_1.AppEncryptionResponseDetails.fromJson(details.data) + }); + } +} +exports.AppEncryptionResponseOrdinalVDXFObject = AppEncryptionResponseOrdinalVDXFObject; diff --git a/dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVDXFObject.d.ts b/dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVDXFObject.d.ts new file mode 100644 index 00000000..f0a5abf8 --- /dev/null +++ b/dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVDXFObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; +import { AuthenticationRequestDetails, AuthenticationRequestDetailsJson } from "../login/AuthenticationRequestDetails"; +export declare class AuthenticationRequestOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { + data: AuthenticationRequestDetails; + constructor(request?: OrdinalVDXFObjectInterfaceTemplate); + static fromJson(details: OrdinalVDXFObjectJsonTemplate): AuthenticationRequestOrdinalVDXFObject; +} diff --git a/dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVDXFObject.js b/dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVDXFObject.js new file mode 100644 index 00000000..70fe1f66 --- /dev/null +++ b/dist/vdxf/classes/ordinals/AuthenticationRequestOrdinalVDXFObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AuthenticationRequestOrdinalVDXFObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const SerializableEntityOrdinalVDXFObject_1 = require("./SerializableEntityOrdinalVDXFObject"); +const AuthenticationRequestDetails_1 = require("../login/AuthenticationRequestDetails"); +class AuthenticationRequestOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject_1.SerializableEntityOrdinalVDXFObject { + constructor(request = { + data: new AuthenticationRequestDetails_1.AuthenticationRequestDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_AUTHENTICATION_REQUEST, + data: request.data + }, AuthenticationRequestDetails_1.AuthenticationRequestDetails); + } + static fromJson(details) { + return new AuthenticationRequestOrdinalVDXFObject({ + data: AuthenticationRequestDetails_1.AuthenticationRequestDetails.fromJson(details.data) + }); + } +} +exports.AuthenticationRequestOrdinalVDXFObject = AuthenticationRequestOrdinalVDXFObject; diff --git a/dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVDXFObject.d.ts b/dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVDXFObject.d.ts new file mode 100644 index 00000000..b9f7e900 --- /dev/null +++ b/dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVDXFObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; +import { AuthenticationResponseDetails, AuthenticationResponseDetailsJson } from "../login/AuthenticationResponseDetails"; +export declare class AuthenticationResponseOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { + data: AuthenticationResponseDetails; + constructor(response?: OrdinalVDXFObjectInterfaceTemplate); + static fromJson(details: OrdinalVDXFObjectJsonTemplate): AuthenticationResponseOrdinalVDXFObject; +} diff --git a/dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVDXFObject.js b/dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVDXFObject.js new file mode 100644 index 00000000..0e209df2 --- /dev/null +++ b/dist/vdxf/classes/ordinals/AuthenticationResponseOrdinalVDXFObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AuthenticationResponseOrdinalVDXFObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const SerializableEntityOrdinalVDXFObject_1 = require("./SerializableEntityOrdinalVDXFObject"); +const AuthenticationResponseDetails_1 = require("../login/AuthenticationResponseDetails"); +class AuthenticationResponseOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject_1.SerializableEntityOrdinalVDXFObject { + constructor(response = { + data: new AuthenticationResponseDetails_1.AuthenticationResponseDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_AUTHENTICATION_RESPONSE, + data: response.data + }, AuthenticationResponseDetails_1.AuthenticationResponseDetails); + } + static fromJson(details) { + return new AuthenticationResponseOrdinalVDXFObject({ + data: AuthenticationResponseDetails_1.AuthenticationResponseDetails.fromJson(details.data) + }); + } +} +exports.AuthenticationResponseOrdinalVDXFObject = AuthenticationResponseOrdinalVDXFObject; diff --git a/dist/vdxf/classes/ordinals/DataDescriptorOrdinalVDXFObject.d.ts b/dist/vdxf/classes/ordinals/DataDescriptorOrdinalVDXFObject.d.ts new file mode 100644 index 00000000..cb7d2683 --- /dev/null +++ b/dist/vdxf/classes/ordinals/DataDescriptorOrdinalVDXFObject.d.ts @@ -0,0 +1,9 @@ +import { DataDescriptor, DataDescriptorJson } from "../../../pbaas"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; +export declare class DataDescriptorOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { + data: DataDescriptor; + constructor(request?: OrdinalVDXFObjectInterfaceTemplate); + static fromJson(details: OrdinalVDXFObjectJsonTemplate): DataDescriptorOrdinalVDXFObject; +} diff --git a/dist/vdxf/classes/ordinals/DataDescriptorOrdinalVDXFObject.js b/dist/vdxf/classes/ordinals/DataDescriptorOrdinalVDXFObject.js new file mode 100644 index 00000000..545d2dd9 --- /dev/null +++ b/dist/vdxf/classes/ordinals/DataDescriptorOrdinalVDXFObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DataDescriptorOrdinalVDXFObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const pbaas_1 = require("../../../pbaas"); +const SerializableEntityOrdinalVDXFObject_1 = require("./SerializableEntityOrdinalVDXFObject"); +class DataDescriptorOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject_1.SerializableEntityOrdinalVDXFObject { + constructor(request = { + data: new pbaas_1.DataDescriptor() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR, + data: request.data + }, pbaas_1.DataDescriptor); + } + static fromJson(details) { + return new DataDescriptorOrdinalVDXFObject({ + data: pbaas_1.DataDescriptor.fromJson(details.data) + }); + } +} +exports.DataDescriptorOrdinalVDXFObject = DataDescriptorOrdinalVDXFObject; diff --git a/dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVDXFObject.d.ts b/dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVDXFObject.d.ts new file mode 100644 index 00000000..b61057ef --- /dev/null +++ b/dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVDXFObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; +import { DataPacketResponse, DataResponseJson } from "../datapacket/DataPacketResponse"; +export declare class DataPacketResponseOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { + data: DataPacketResponse; + constructor(request?: OrdinalVDXFObjectInterfaceTemplate); + static fromJson(details: OrdinalVDXFObjectJsonTemplate): DataPacketResponseOrdinalVDXFObject; +} diff --git a/dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVDXFObject.js b/dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVDXFObject.js new file mode 100644 index 00000000..7697708a --- /dev/null +++ b/dist/vdxf/classes/ordinals/DataPacketResponseOrdinalVDXFObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DataPacketResponseOrdinalVDXFObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const SerializableEntityOrdinalVDXFObject_1 = require("./SerializableEntityOrdinalVDXFObject"); +const DataPacketResponse_1 = require("../datapacket/DataPacketResponse"); +class DataPacketResponseOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject_1.SerializableEntityOrdinalVDXFObject { + constructor(request = { + data: new DataPacketResponse_1.DataPacketResponse() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_DATA_RESPONSE, + data: request.data + }, DataPacketResponse_1.DataPacketResponse); + } + static fromJson(details) { + return new DataPacketResponseOrdinalVDXFObject({ + data: DataPacketResponse_1.DataPacketResponse.fromJson(details.data) + }); + } +} +exports.DataPacketResponseOrdinalVDXFObject = DataPacketResponseOrdinalVDXFObject; diff --git a/dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVDXFObject.d.ts b/dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVDXFObject.d.ts new file mode 100644 index 00000000..ca0fef4d --- /dev/null +++ b/dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVDXFObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { IdentityUpdateRequestDetails, IdentityUpdateRequestDetailsJson } from "../identity/IdentityUpdateRequestDetails"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; +export declare class IdentityUpdateRequestOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { + data: IdentityUpdateRequestDetails; + constructor(request?: OrdinalVDXFObjectInterfaceTemplate); + static fromJson(details: OrdinalVDXFObjectJsonTemplate): IdentityUpdateRequestOrdinalVDXFObject; +} diff --git a/dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVDXFObject.js b/dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVDXFObject.js new file mode 100644 index 00000000..13aac64c --- /dev/null +++ b/dist/vdxf/classes/ordinals/IdentityUpdateRequestOrdinalVDXFObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IdentityUpdateRequestOrdinalVDXFObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const IdentityUpdateRequestDetails_1 = require("../identity/IdentityUpdateRequestDetails"); +const SerializableEntityOrdinalVDXFObject_1 = require("./SerializableEntityOrdinalVDXFObject"); +class IdentityUpdateRequestOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject_1.SerializableEntityOrdinalVDXFObject { + constructor(request = { + data: new IdentityUpdateRequestDetails_1.IdentityUpdateRequestDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, + data: request.data + }, IdentityUpdateRequestDetails_1.IdentityUpdateRequestDetails); + } + static fromJson(details) { + return new IdentityUpdateRequestOrdinalVDXFObject({ + data: IdentityUpdateRequestDetails_1.IdentityUpdateRequestDetails.fromJson(details.data) + }); + } +} +exports.IdentityUpdateRequestOrdinalVDXFObject = IdentityUpdateRequestOrdinalVDXFObject; diff --git a/dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVDXFObject.d.ts b/dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVDXFObject.d.ts new file mode 100644 index 00000000..0b295a14 --- /dev/null +++ b/dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVDXFObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { IdentityUpdateResponseDetails, IdentityUpdateResponseDetailsJson } from "../identity/IdentityUpdateResponseDetails"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; +export declare class IdentityUpdateResponseOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { + data: IdentityUpdateResponseDetails; + constructor(response?: OrdinalVDXFObjectInterfaceTemplate); + static fromJson(details: OrdinalVDXFObjectJsonTemplate): IdentityUpdateResponseOrdinalVDXFObject; +} diff --git a/dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVDXFObject.js b/dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVDXFObject.js new file mode 100644 index 00000000..680f7183 --- /dev/null +++ b/dist/vdxf/classes/ordinals/IdentityUpdateResponseOrdinalVDXFObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IdentityUpdateResponseOrdinalVDXFObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const IdentityUpdateResponseDetails_1 = require("../identity/IdentityUpdateResponseDetails"); +const SerializableEntityOrdinalVDXFObject_1 = require("./SerializableEntityOrdinalVDXFObject"); +class IdentityUpdateResponseOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject_1.SerializableEntityOrdinalVDXFObject { + constructor(response = { + data: new IdentityUpdateResponseDetails_1.IdentityUpdateResponseDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, + data: response.data + }, IdentityUpdateResponseDetails_1.IdentityUpdateResponseDetails); + } + static fromJson(details) { + return new IdentityUpdateResponseOrdinalVDXFObject({ + data: IdentityUpdateResponseDetails_1.IdentityUpdateResponseDetails.fromJson(details.data) + }); + } +} +exports.IdentityUpdateResponseOrdinalVDXFObject = IdentityUpdateResponseOrdinalVDXFObject; diff --git a/dist/vdxf/classes/ordinals/OrdinalVDXFObject.d.ts b/dist/vdxf/classes/ordinals/OrdinalVDXFObject.d.ts new file mode 100644 index 00000000..98da07c8 --- /dev/null +++ b/dist/vdxf/classes/ordinals/OrdinalVDXFObject.d.ts @@ -0,0 +1,58 @@ +import { BigNumber } from "../../../utils/types/BigNumber"; +import { SerializableDataEntity, SerializableEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVDXFObjectReservedData, OrdinalVDXFObjectReservedDataJson } from "../../../constants/ordinals/types"; +export interface OrdinalVDXFObjectInterfaceTemplate { + version?: BigNumber; + type?: BigNumber; + key?: string; + data?: T; +} +export type OrdinalVDXFObjectJsonTemplate = { + version: string; + type: string; + vdxfkey?: string; + data?: T; +}; +export type BufferOrOrdinalVDXFObjectReservedData = Buffer | OrdinalVDXFObjectReservedData; +export type StringOrOrdinalVDXFObjectReservedDataJson = string | OrdinalVDXFObjectReservedDataJson; +export type OrdinalVDXFObjectInterface = OrdinalVDXFObjectInterfaceTemplate; +export type OrdinalVDXFObjectJson = OrdinalVDXFObjectJsonTemplate; +export type OrdinalVDXFObjectDataClass = new (...args: any[]) => OrdinalVDXFObjectReservedData; +export type OrdinalVDXFObjectClass = new (...args: any[]) => OrdinalVDXFObject; +export declare const getOrdinalVDXFObjectClassForType: (type: BigNumber) => OrdinalVDXFObjectClass; +export declare class OrdinalVDXFObject implements SerializableEntity { + version: BigNumber; + type: BigNumber; + key?: string; + data?: BufferOrOrdinalVDXFObjectReservedData; + static VERSION_INVALID: import("bn.js"); + static VERSION_FIRST: import("bn.js"); + static VERSION_LAST: import("bn.js"); + static VERSION_CURRENT: import("bn.js"); + constructor(request?: OrdinalVDXFObjectInterfaceTemplate); + isDefinedByVdxfKey(): boolean; + isDefinedByTextVdxfKey(): boolean; + isDefinedByCurrencyOrId(): boolean; + isDefinedByCustomKey(): boolean; + getDataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer): void; + getByteLength(): number; + toBuffer(): Buffer; + fromBufferOptionalType(buffer: Buffer, offset?: number, type?: BigNumber, key?: string): number; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): OrdinalVDXFObjectJson; + static createFromBuffer(buffer: Buffer, offset?: number, optimizeWithOrdinal?: boolean, rootSystemName?: string): { + offset: number; + obj: OrdinalVDXFObject; + }; +} +export declare class GeneralTypeOrdinalVDXFObject extends OrdinalVDXFObject implements SerializableDataEntity { + data: Buffer; + key: string; + constructor(request?: OrdinalVDXFObjectInterfaceTemplate); + getDataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer): void; + static fromJson(details: OrdinalVDXFObjectJson): GeneralTypeOrdinalVDXFObject; +} diff --git a/dist/vdxf/classes/ordinals/OrdinalVDXFObject.js b/dist/vdxf/classes/ordinals/OrdinalVDXFObject.js new file mode 100644 index 00000000..a5c7853a --- /dev/null +++ b/dist/vdxf/classes/ordinals/OrdinalVDXFObject.js @@ -0,0 +1,205 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GeneralTypeOrdinalVDXFObject = exports.OrdinalVDXFObject = exports.getOrdinalVDXFObjectClassForType = void 0; +const bufferutils_1 = require("../../../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const varuint_1 = require("../../../utils/varuint"); +const address_1 = require("../../../utils/address"); +const varint_1 = require("../../../utils/varint"); +const vdxf_1 = require("../../../constants/vdxf"); +const OrdinalVDXFObjectOrdinalMap_1 = require("./OrdinalVDXFObjectOrdinalMap"); +const pbaas_1 = require("../../../constants/pbaas"); +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const getOrdinalVDXFObjectClassForType = (type) => { + if (OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.isRecognizedOrdinal(type.toNumber())) { + const key = OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.getVdxfKeyForOrdinal(type.toNumber()); + if (OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.hasClassForVdxfKey(key)) { + return OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.getClassForVdxfKey(OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.getVdxfKeyForOrdinal(type.toNumber())); + } + else { + throw new Error("No class found for " + key); + } + } + else if (type.eq(ordinals_1.VDXF_OBJECT_RESERVED_BYTE_I_ADDR) || + type.eq(ordinals_1.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING) || + type.eq(ordinals_1.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY)) + return GeneralTypeOrdinalVDXFObject; + else + throw new Error("Unrecognized vdxf ordinal object type " + type.toNumber()); +}; +exports.getOrdinalVDXFObjectClassForType = getOrdinalVDXFObjectClassForType; +class OrdinalVDXFObject { + constructor(request = { + type: ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR + }) { + if (request.key) { + this.type = ordinals_1.VDXF_OBJECT_RESERVED_BYTE_I_ADDR; + this.key = request.key; + if (request.data) { + this.data = request.data; + } + else + this.data = Buffer.alloc(0); + } + else if (request.type == null) { + this.type = ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR; + } + else { + this.type = request.type; + } + if (request.version) + this.version = request.version; + else + this.version = OrdinalVDXFObject.VERSION_CURRENT; + } + isDefinedByVdxfKey() { + return this.type.eq(ordinals_1.VDXF_OBJECT_RESERVED_BYTE_I_ADDR); + } + isDefinedByTextVdxfKey() { + return this.type.eq(ordinals_1.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING); + } + isDefinedByCurrencyOrId() { + return this.type.eq(ordinals_1.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY); + } + isDefinedByCustomKey() { + return this.isDefinedByCurrencyOrId() || this.isDefinedByTextVdxfKey() || this.isDefinedByVdxfKey(); + } + getDataByteLength() { + return 0; + } + toDataBuffer() { + return Buffer.alloc(0); + } + fromDataBuffer(buffer) { } + getByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.type.toNumber()); + if (this.isDefinedByVdxfKey()) { + length += (0, address_1.fromBase58Check)(this.key).hash.length; + } + else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { + const utf8Key = Buffer.from(this.key, 'utf8'); + length += varuint_1.default.encodingLength(utf8Key.length); + length += utf8Key.length; + } + length += varint_1.default.encodingLength(this.version); + const dataLength = this.getDataByteLength(); + length += varuint_1.default.encodingLength(dataLength); + length += dataLength; + return length; + } + toBuffer() { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeCompactSize(this.type.toNumber()); + if (this.isDefinedByVdxfKey()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.key).hash); + } + else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { + writer.writeVarSlice(Buffer.from(this.key, 'utf8')); + } + writer.writeVarInt(this.version); + writer.writeVarSlice(this.toDataBuffer()); + return writer.buffer; + } + fromBufferOptionalType(buffer, offset, type, key) { + if (buffer.length == 0) + throw new Error("Cannot create request from empty buffer"); + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + if (!type) { + this.type = new bn_js_1.BN(reader.readCompactSize()); + } + else + this.type = type; + if (!key) { + if (this.isDefinedByVdxfKey()) { + this.key = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + } + else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { + this.key = reader.readVarSlice().toString('utf8'); + } + } + else { + this.key = key; + } + this.version = reader.readVarInt(); + const dataBuf = reader.readVarSlice(); + this.fromDataBuffer(dataBuf); + return reader.offset; + } + fromBuffer(buffer, offset) { + return this.fromBufferOptionalType(buffer, offset); + } + toJson() { + return { + type: this.type ? this.type.toString() : undefined, + version: this.version ? this.version.toString() : undefined, + vdxfkey: this.key, + data: this.data ? this.isDefinedByCustomKey() ? this.data.toString('hex') : this.data.toJson() : undefined + }; + } + static createFromBuffer(buffer, offset, optimizeWithOrdinal = false, rootSystemName = pbaas_1.DEFAULT_VERUS_CHAINNAME) { + if (buffer.length == 0) + throw new Error("Cannot create request from empty buffer"); + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + let type = new bn_js_1.BN(reader.readCompactSize()); + const rootSystemId = (0, address_1.toIAddress)(rootSystemName); + const Entity = (0, exports.getOrdinalVDXFObjectClassForType)(type); + const ord = new Entity({ type }); + let key; + if (optimizeWithOrdinal) { + let vdxfKey; + if (ord.isDefinedByVdxfKey()) { + key = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + vdxfKey = key; + } + else if (ord.isDefinedByTextVdxfKey() || ord.isDefinedByCurrencyOrId()) { + key = reader.readVarSlice().toString('utf8'); + if (ord.isDefinedByTextVdxfKey()) { + vdxfKey = (0, address_1.getDataKey)(key, undefined, rootSystemId).id; + } + else { + vdxfKey = (0, address_1.toIAddress)(key, rootSystemName); + } + } + if (OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.vdxfKeyHasOrdinal(vdxfKey)) { + type = new bn_js_1.BN(OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.getOrdinalForVdxfKey(vdxfKey)); + } + } + reader.offset = ord.fromBufferOptionalType(buffer, reader.offset, type, key); + return { offset: reader.offset, obj: ord }; + } +} +exports.OrdinalVDXFObject = OrdinalVDXFObject; +OrdinalVDXFObject.VERSION_INVALID = new bn_js_1.BN(0, 10); +OrdinalVDXFObject.VERSION_FIRST = new bn_js_1.BN(1, 10); +OrdinalVDXFObject.VERSION_LAST = new bn_js_1.BN(1, 10); +OrdinalVDXFObject.VERSION_CURRENT = new bn_js_1.BN(1, 10); +class GeneralTypeOrdinalVDXFObject extends OrdinalVDXFObject { + constructor(request = { + type: ordinals_1.VDXF_OBJECT_RESERVED_BYTE_I_ADDR, + data: Buffer.alloc(0), + key: vdxf_1.NULL_ADDRESS + }) { + super({ + type: request.type, + data: request.data, + key: request.key + }); + } + getDataByteLength() { + return this.data.length; + } + toDataBuffer() { + return this.data; + } + fromDataBuffer(buffer) { + this.data = Buffer.from(buffer); + } + static fromJson(details) { + return new GeneralTypeOrdinalVDXFObject({ + key: details.vdxfkey, + data: details.data ? Buffer.from(details.data, 'hex') : undefined + }); + } +} +exports.GeneralTypeOrdinalVDXFObject = GeneralTypeOrdinalVDXFObject; diff --git a/dist/vdxf/classes/ordinals/OrdinalVDXFObjectOrdinalMap.d.ts b/dist/vdxf/classes/ordinals/OrdinalVDXFObjectOrdinalMap.d.ts new file mode 100644 index 00000000..2cf94547 --- /dev/null +++ b/dist/vdxf/classes/ordinals/OrdinalVDXFObjectOrdinalMap.d.ts @@ -0,0 +1,17 @@ +import { OrdinalVDXFObjectClass } from "./OrdinalVDXFObject"; +declare class _OrdinalVDXFObjectOrdinalMap { + private keyToOrdinalMap; + private ordinalToKeyMap; + keyToOrdinalClass: Map; + constructor(); + private updateOrdinalToKeyMap; + registerOrdinal(ordinal: number, vdxfKey: string, ordinalClass: OrdinalVDXFObjectClass, throwOnDuplicate?: boolean): void; + isRecognizedOrdinal(ordinal: number): boolean; + vdxfKeyHasOrdinal(vdxfKey: string): boolean; + hasClassForVdxfKey(vdxfKey: string): boolean; + getOrdinalForVdxfKey(vdxfKey: string): number; + getVdxfKeyForOrdinal(ordinal: number): string; + getClassForVdxfKey(vdxfKey: string): OrdinalVDXFObjectClass; +} +export declare const OrdinalVDXFObjectOrdinalMap: _OrdinalVDXFObjectOrdinalMap; +export {}; diff --git a/dist/vdxf/classes/ordinals/OrdinalVDXFObjectOrdinalMap.js b/dist/vdxf/classes/ordinals/OrdinalVDXFObjectOrdinalMap.js new file mode 100644 index 00000000..bf31a1c1 --- /dev/null +++ b/dist/vdxf/classes/ordinals/OrdinalVDXFObjectOrdinalMap.js @@ -0,0 +1,44 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OrdinalVDXFObjectOrdinalMap = void 0; +// Singleton class that exists to create a bidirectional map of ordinals <-> vdxf keys +class _OrdinalVDXFObjectOrdinalMap { + constructor() { + this.keyToOrdinalMap = new Map(); + this.ordinalToKeyMap = new Map(); + this.keyToOrdinalClass = new Map(); + } + updateOrdinalToKeyMap() { + this.ordinalToKeyMap = new Map(Array.from(this.keyToOrdinalMap, a => a.reverse())); + } + registerOrdinal(ordinal, vdxfKey, ordinalClass, throwOnDuplicate = true) { + if (this.isRecognizedOrdinal(ordinal) || this.vdxfKeyHasOrdinal(vdxfKey)) { + if (throwOnDuplicate) + throw new Error("Cannot overwrite existing ordinal"); + else + return; + } + this.keyToOrdinalMap.set(vdxfKey, ordinal); + this.keyToOrdinalClass.set(vdxfKey, ordinalClass); + this.updateOrdinalToKeyMap(); + } + isRecognizedOrdinal(ordinal) { + return this.ordinalToKeyMap.has(ordinal); + } + vdxfKeyHasOrdinal(vdxfKey) { + return this.keyToOrdinalMap.has(vdxfKey); + } + hasClassForVdxfKey(vdxfKey) { + return this.keyToOrdinalClass.has(vdxfKey); + } + getOrdinalForVdxfKey(vdxfKey) { + return this.keyToOrdinalMap.get(vdxfKey); + } + getVdxfKeyForOrdinal(ordinal) { + return this.ordinalToKeyMap.get(ordinal); + } + getClassForVdxfKey(vdxfKey) { + return this.keyToOrdinalClass.get(vdxfKey); + } +} +exports.OrdinalVDXFObjectOrdinalMap = new _OrdinalVDXFObjectOrdinalMap(); diff --git a/dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVDXFObject.d.ts b/dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVDXFObject.d.ts new file mode 100644 index 00000000..66bef3a1 --- /dev/null +++ b/dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVDXFObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; +import { ProvisionIdentityDetails, ProvisionIdentityDetailsJson } from "../requestobjects/ProvisionIdentityDetails"; +export declare class ProvisionIdentityDetailsOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { + data: ProvisionIdentityDetails; + constructor(request?: OrdinalVDXFObjectInterfaceTemplate); + static fromJson(details: OrdinalVDXFObjectJsonTemplate): ProvisionIdentityDetailsOrdinalVDXFObject; +} diff --git a/dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVDXFObject.js b/dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVDXFObject.js new file mode 100644 index 00000000..a68f75bb --- /dev/null +++ b/dist/vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVDXFObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ProvisionIdentityDetailsOrdinalVDXFObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const SerializableEntityOrdinalVDXFObject_1 = require("./SerializableEntityOrdinalVDXFObject"); +const ProvisionIdentityDetails_1 = require("../requestobjects/ProvisionIdentityDetails"); +class ProvisionIdentityDetailsOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject_1.SerializableEntityOrdinalVDXFObject { + constructor(request = { + data: new ProvisionIdentityDetails_1.ProvisionIdentityDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, + data: request.data + }, ProvisionIdentityDetails_1.ProvisionIdentityDetails); + } + static fromJson(details) { + return new ProvisionIdentityDetailsOrdinalVDXFObject({ + data: ProvisionIdentityDetails_1.ProvisionIdentityDetails.fromJson(details.data) + }); + } +} +exports.ProvisionIdentityDetailsOrdinalVDXFObject = ProvisionIdentityDetailsOrdinalVDXFObject; diff --git a/dist/vdxf/classes/ordinals/SerializableEntityOrdinalVDXFObject.d.ts b/dist/vdxf/classes/ordinals/SerializableEntityOrdinalVDXFObject.d.ts new file mode 100644 index 00000000..18735edf --- /dev/null +++ b/dist/vdxf/classes/ordinals/SerializableEntityOrdinalVDXFObject.d.ts @@ -0,0 +1,11 @@ +import { OrdinalVDXFObjectReservedData } from "../../../constants/ordinals/types"; +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVDXFObject, OrdinalVDXFObjectDataClass, OrdinalVDXFObjectInterfaceTemplate } from "./OrdinalVDXFObject"; +export declare class SerializableEntityOrdinalVDXFObject extends OrdinalVDXFObject implements SerializableDataEntity { + data: OrdinalVDXFObjectReservedData; + entity: OrdinalVDXFObjectDataClass; + constructor(request: OrdinalVDXFObjectInterfaceTemplate, entity: OrdinalVDXFObjectDataClass); + getDataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer): void; +} diff --git a/dist/vdxf/classes/ordinals/SerializableEntityOrdinalVDXFObject.js b/dist/vdxf/classes/ordinals/SerializableEntityOrdinalVDXFObject.js new file mode 100644 index 00000000..e5d4d0f7 --- /dev/null +++ b/dist/vdxf/classes/ordinals/SerializableEntityOrdinalVDXFObject.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SerializableEntityOrdinalVDXFObject = void 0; +const OrdinalVDXFObject_1 = require("./OrdinalVDXFObject"); +class SerializableEntityOrdinalVDXFObject extends OrdinalVDXFObject_1.OrdinalVDXFObject { + constructor(request, entity) { + if (!request || !request.type) + throw new Error("Expected request with data and type"); + super({ + type: request.type + }); + this.entity = entity; + this.data = request.data ? request.data : new entity(); + } + getDataByteLength() { + return this.data.getByteLength(); + } + toDataBuffer() { + return this.data.toBuffer(); + } + fromDataBuffer(buffer) { + this.data = new this.entity(); + this.data.fromBuffer(buffer); + } +} +exports.SerializableEntityOrdinalVDXFObject = SerializableEntityOrdinalVDXFObject; diff --git a/dist/vdxf/classes/ordinals/UserDataRequestOrdinalVDXFObject.d.ts b/dist/vdxf/classes/ordinals/UserDataRequestOrdinalVDXFObject.d.ts new file mode 100644 index 00000000..5487e06f --- /dev/null +++ b/dist/vdxf/classes/ordinals/UserDataRequestOrdinalVDXFObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; +import { UserDataRequestDetails, UserDataRequestJson } from "../requestobjects/UserDataRequestDetails"; +export declare class UserDataRequestOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { + data: UserDataRequestDetails; + constructor(request?: OrdinalVDXFObjectInterfaceTemplate); + static fromJson(details: OrdinalVDXFObjectJsonTemplate): UserDataRequestOrdinalVDXFObject; +} diff --git a/dist/vdxf/classes/ordinals/UserDataRequestOrdinalVDXFObject.js b/dist/vdxf/classes/ordinals/UserDataRequestOrdinalVDXFObject.js new file mode 100644 index 00000000..13029828 --- /dev/null +++ b/dist/vdxf/classes/ordinals/UserDataRequestOrdinalVDXFObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UserDataRequestOrdinalVDXFObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const SerializableEntityOrdinalVDXFObject_1 = require("./SerializableEntityOrdinalVDXFObject"); +const UserDataRequestDetails_1 = require("../requestobjects/UserDataRequestDetails"); +class UserDataRequestOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject_1.SerializableEntityOrdinalVDXFObject { + constructor(request = { + data: new UserDataRequestDetails_1.UserDataRequestDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_USER_DATA_REQUEST, + data: request.data + }, UserDataRequestDetails_1.UserDataRequestDetails); + } + static fromJson(details) { + return new UserDataRequestOrdinalVDXFObject({ + data: UserDataRequestDetails_1.UserDataRequestDetails.fromJson(details.data) + }); + } +} +exports.UserDataRequestOrdinalVDXFObject = UserDataRequestOrdinalVDXFObject; diff --git a/dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVDXFObject.d.ts b/dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVDXFObject.d.ts new file mode 100644 index 00000000..5ad5a816 --- /dev/null +++ b/dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVDXFObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; +import { UserSpecificDataPacketDetails, UserSpecificDataPacketDetailsJson } from "../requestobjects/UserSpecificDataPacketDetails"; +export declare class UserSpecificDataPacketDetailsOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { + data: UserSpecificDataPacketDetails; + constructor(request?: OrdinalVDXFObjectInterfaceTemplate); + static fromJson(details: OrdinalVDXFObjectJsonTemplate): UserSpecificDataPacketDetailsOrdinalVDXFObject; +} diff --git a/dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVDXFObject.js b/dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVDXFObject.js new file mode 100644 index 00000000..fd9b6c4b --- /dev/null +++ b/dist/vdxf/classes/ordinals/UserSpecificDataPacketDetailsOrdinalVDXFObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UserSpecificDataPacketDetailsOrdinalVDXFObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const SerializableEntityOrdinalVDXFObject_1 = require("./SerializableEntityOrdinalVDXFObject"); +const UserSpecificDataPacketDetails_1 = require("../requestobjects/UserSpecificDataPacketDetails"); +class UserSpecificDataPacketDetailsOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject_1.SerializableEntityOrdinalVDXFObject { + constructor(request = { + data: new UserSpecificDataPacketDetails_1.UserSpecificDataPacketDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET, + data: request.data + }, UserSpecificDataPacketDetails_1.UserSpecificDataPacketDetails); + } + static fromJson(details) { + return new UserSpecificDataPacketDetailsOrdinalVDXFObject({ + data: UserSpecificDataPacketDetails_1.UserSpecificDataPacketDetails.fromJson(details.data) + }); + } +} +exports.UserSpecificDataPacketDetailsOrdinalVDXFObject = UserSpecificDataPacketDetailsOrdinalVDXFObject; diff --git a/dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVDXFObject.d.ts b/dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVDXFObject.d.ts new file mode 100644 index 00000000..24a2fa43 --- /dev/null +++ b/dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVDXFObject.d.ts @@ -0,0 +1,9 @@ +import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; +import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "../payment/VerusPayInvoiceDetails"; +import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; +import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; +export declare class VerusPayInvoiceOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { + data: VerusPayInvoiceDetails; + constructor(request?: OrdinalVDXFObjectInterfaceTemplate); + static fromJson(details: OrdinalVDXFObjectJsonTemplate): VerusPayInvoiceOrdinalVDXFObject; +} diff --git a/dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVDXFObject.js b/dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVDXFObject.js new file mode 100644 index 00000000..56b896f0 --- /dev/null +++ b/dist/vdxf/classes/ordinals/VerusPayInvoiceOrdinalVDXFObject.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VerusPayInvoiceOrdinalVDXFObject = void 0; +const ordinals_1 = require("../../../constants/ordinals/ordinals"); +const VerusPayInvoiceDetails_1 = require("../payment/VerusPayInvoiceDetails"); +const SerializableEntityOrdinalVDXFObject_1 = require("./SerializableEntityOrdinalVDXFObject"); +class VerusPayInvoiceOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject_1.SerializableEntityOrdinalVDXFObject { + constructor(request = { + data: new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails() + }) { + super({ + type: ordinals_1.VDXF_ORDINAL_VERUSPAY_INVOICE, + data: request.data + }, VerusPayInvoiceDetails_1.VerusPayInvoiceDetails); + } + static fromJson(details) { + return new VerusPayInvoiceOrdinalVDXFObject({ + data: VerusPayInvoiceDetails_1.VerusPayInvoiceDetails.fromJson(details.data) + }); + } +} +exports.VerusPayInvoiceOrdinalVDXFObject = VerusPayInvoiceOrdinalVDXFObject; diff --git a/dist/vdxf/classes/ordinals/index.d.ts b/dist/vdxf/classes/ordinals/index.d.ts new file mode 100644 index 00000000..f967e2ac --- /dev/null +++ b/dist/vdxf/classes/ordinals/index.d.ts @@ -0,0 +1,15 @@ +export * from './DataDescriptorOrdinalVDXFObject'; +export * from './IdentityUpdateRequestOrdinalVDXFObject'; +export * from './IdentityUpdateResponseOrdinalVDXFObject'; +export * from './OrdinalVDXFObject'; +export * from './OrdinalVDXFObjectOrdinalMap'; +export * from './SerializableEntityOrdinalVDXFObject'; +export * from './VerusPayInvoiceOrdinalVDXFObject'; +export * from './AuthenticationRequestOrdinalVDXFObject'; +export * from './AuthenticationResponseOrdinalVDXFObject'; +export * from './AppEncryptionRequestOrdinalVDXFObject'; +export * from './AppEncryptionResponseOrdinalVDXFObject'; +export * from './ProvisionIdentityDetailsOrdinalVDXFObject'; +export * from './DataPacketResponseOrdinalVDXFObject'; +export * from './UserDataRequestOrdinalVDXFObject'; +export * from './UserSpecificDataPacketDetailsOrdinalVDXFObject'; diff --git a/dist/vdxf/classes/ordinals/index.js b/dist/vdxf/classes/ordinals/index.js new file mode 100644 index 00000000..1a80910b --- /dev/null +++ b/dist/vdxf/classes/ordinals/index.js @@ -0,0 +1,33 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const register_1 = require("../../../constants/ordinals/register"); +__exportStar(require("./DataDescriptorOrdinalVDXFObject"), exports); +__exportStar(require("./IdentityUpdateRequestOrdinalVDXFObject"), exports); +__exportStar(require("./IdentityUpdateResponseOrdinalVDXFObject"), exports); +__exportStar(require("./OrdinalVDXFObject"), exports); +__exportStar(require("./OrdinalVDXFObjectOrdinalMap"), exports); +__exportStar(require("./SerializableEntityOrdinalVDXFObject"), exports); +__exportStar(require("./VerusPayInvoiceOrdinalVDXFObject"), exports); +__exportStar(require("./AuthenticationRequestOrdinalVDXFObject"), exports); +__exportStar(require("./AuthenticationResponseOrdinalVDXFObject"), exports); +__exportStar(require("./AppEncryptionRequestOrdinalVDXFObject"), exports); +__exportStar(require("./AppEncryptionResponseOrdinalVDXFObject"), exports); +__exportStar(require("./ProvisionIdentityDetailsOrdinalVDXFObject"), exports); +__exportStar(require("./DataPacketResponseOrdinalVDXFObject"), exports); +__exportStar(require("./UserDataRequestOrdinalVDXFObject"), exports); +__exportStar(require("./UserSpecificDataPacketDetailsOrdinalVDXFObject"), exports); +(0, register_1.registerOrdinals)(); diff --git a/dist/vdxf/classes/payment/VerusPayInvoice.d.ts b/dist/vdxf/classes/payment/VerusPayInvoice.d.ts new file mode 100644 index 00000000..2d01279c --- /dev/null +++ b/dist/vdxf/classes/payment/VerusPayInvoice.d.ts @@ -0,0 +1,42 @@ +import { VDXFObject, VerusIDSignature, VerusIDSignatureInterface, VerusIDSignatureJson } from "../../"; +import { VerusPayInvoiceDetails, VerusPayInvoiceDetailsJson } from "./VerusPayInvoiceDetails"; +import { BigNumber } from "../../../utils/types/BigNumber"; +export interface VerusPayInvoiceInterface { + details: VerusPayInvoiceDetails; + system_id?: string; + signing_id?: string; + signature?: VerusIDSignatureInterface; + version?: BigNumber; +} +export type VerusPayInvoiceJson = { + vdxfkey: string; + details: VerusPayInvoiceDetailsJson; + system_id?: string; + signing_id?: string; + signature?: VerusIDSignatureJson; + version: string; +}; +export declare class VerusPayInvoice extends VDXFObject { + system_id: string; + signing_id: string; + signature?: VerusIDSignature; + details: VerusPayInvoiceDetails; + constructor(request?: VerusPayInvoiceInterface); + getVersionNoFlags(): BigNumber; + isValidVersion(): boolean; + isSigned(): boolean; + setSigned(): void; + getDetailsHash(signedBlockheight: number, signatureVersion?: number): Buffer; + protected _dataByteLength(signer?: string): number; + protected _toDataBuffer(signer?: string): Buffer; + dataByteLength(): number; + toDataBuffer(): Buffer; + protected _fromDataBuffer(buffer: Buffer, offset?: number): number; + fromDataBuffer(buffer: Buffer, offset?: number): number; + toWalletDeeplinkUri(): string; + static fromWalletDeeplinkUri(uri: string): VerusPayInvoice; + toQrString(): string; + static fromQrString(qrstring: string): VerusPayInvoice; + static fromJson(data: VerusPayInvoiceJson): VerusPayInvoice; + toJson(): VerusPayInvoiceJson; +} diff --git a/dist/vdxf/classes/payment/VerusPayInvoice.js b/dist/vdxf/classes/payment/VerusPayInvoice.js new file mode 100644 index 00000000..018b70d6 --- /dev/null +++ b/dist/vdxf/classes/payment/VerusPayInvoice.js @@ -0,0 +1,167 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VerusPayInvoice = void 0; +const __1 = require("../../"); +const keys_1 = require("../../keys"); +const Hash160_1 = require("./../Hash160"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const vdxf_1 = require("../../../constants/vdxf"); +const address_1 = require("../../../utils/address"); +const createHash = require("create-hash"); +const base64url_1 = require("base64url"); +const VerusPayInvoiceDetails_1 = require("./VerusPayInvoiceDetails"); +const bn_js_1 = require("bn.js"); +const veruspay_1 = require("../../../constants/vdxf/veruspay"); +class VerusPayInvoice extends __1.VDXFObject { + constructor(request = { + details: new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails(), + }) { + super(__1.VERUSPAY_INVOICE_VDXF_KEY.vdxfid); + this.system_id = request.system_id; + this.signing_id = request.signing_id; + this.signature = request.signature + ? new __1.VerusIDSignature(request.signature, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false) + : undefined; + if (request.version) + this.version = request.version; + else + this.version = veruspay_1.VERUSPAY_VERSION_CURRENT; + this.details = new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails(request.details, this.getVersionNoFlags()); + } + getVersionNoFlags() { + return this.version.and(veruspay_1.VERUSPAY_VERSION_MASK.notn(veruspay_1.VERUSPAY_VERSION_MASK.bitLength())); + } + isValidVersion() { + return this.getVersionNoFlags().gte(veruspay_1.VERUSPAY_VERSION_FIRSTVALID) && this.getVersionNoFlags().lte(veruspay_1.VERUSPAY_VERSION_LASTVALID); + } + isSigned() { + return !!(this.version.and(veruspay_1.VERUSPAY_VERSION_SIGNED).toNumber()); + } + setSigned() { + this.version = this.version.or(veruspay_1.VERUSPAY_VERSION_SIGNED); + } + getDetailsHash(signedBlockheight, signatureVersion = 2) { + if (this.isSigned()) { + var heightBufferWriter = new bufferutils_1.default.BufferWriter(Buffer.allocUnsafe(4)); + heightBufferWriter.writeUInt32(signedBlockheight); + if (signatureVersion === 1) { + return createHash("sha256") + .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) + .update((0, address_1.fromBase58Check)(this.system_id).hash) + .update(heightBufferWriter.buffer) + .update((0, address_1.fromBase58Check)(this.signing_id).hash) + .update(this.details.toSha256()) + .digest(); + } + else { + return createHash("sha256") + .update((0, address_1.fromBase58Check)(this.system_id).hash) + .update(heightBufferWriter.buffer) + .update((0, address_1.fromBase58Check)(this.signing_id).hash) + .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) + .update(this.details.toSha256()) + .digest(); + } + } + else + return this.details.toSha256(); + } + _dataByteLength(signer = this.signing_id) { + if (this.isSigned()) { + let length = 0; + const _signature = this.signature + ? this.signature + : new __1.VerusIDSignature({ signature: "" }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false); + const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); + length += _system_id.byteLength(); + const _signing_id = Hash160_1.Hash160.fromAddress(signer); + length += _signing_id.byteLength(); + length += _signature.byteLength(); + length += this.details.getByteLength(); + return length; + } + else + return this.details.getByteLength(); + } + _toDataBuffer(signer = this.signing_id) { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.dataByteLength())); + if (this.isSigned()) { + const _signing_id = Hash160_1.Hash160.fromAddress(signer); + const _signature = this.signature + ? this.signature + : new __1.VerusIDSignature({ signature: "" }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false); + const _system_id = Hash160_1.Hash160.fromAddress(this.system_id); + writer.writeSlice(_system_id.toBuffer()); + writer.writeSlice(_signing_id.toBuffer()); + writer.writeSlice(_signature.toBuffer()); + } + writer.writeSlice(this.details.toBuffer()); + return writer.buffer; + } + dataByteLength() { + return this._dataByteLength(); + } + toDataBuffer() { + return this._toDataBuffer(); + } + _fromDataBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + const reqLength = reader.readCompactSize(); + if (reqLength == 0) { + throw new Error("Cannot create request from empty buffer"); + } + else { + if (this.isSigned()) { + this.system_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + this.signing_id = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + const _sig = new __1.VerusIDSignature(undefined, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, false); + reader.offset = _sig.fromBuffer(reader.buffer, reader.offset, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY.vdxfid); + this.signature = _sig; + } + const _details = new VerusPayInvoiceDetails_1.VerusPayInvoiceDetails(); + reader.offset = _details.fromBuffer(reader.buffer, reader.offset, this.getVersionNoFlags()); + this.details = _details; + } + return reader.offset; + } + fromDataBuffer(buffer, offset) { + return this._fromDataBuffer(buffer, offset); + } + toWalletDeeplinkUri() { + return `${__1.WALLET_VDXF_KEY.vdxfid.toLowerCase()}://x-callback-url/${__1.VERUSPAY_INVOICE_VDXF_KEY.vdxfid}/${this.toString(false)}`; + } + static fromWalletDeeplinkUri(uri) { + const split = uri.split(`${__1.VERUSPAY_INVOICE_VDXF_KEY.vdxfid}/`); + const inv = new VerusPayInvoice(); + inv.fromBuffer(base64url_1.default.toBuffer(split[1]), 0, __1.VERUSPAY_INVOICE_VDXF_KEY.vdxfid); + return inv; + } + toQrString() { + return this.toString(true); + } + static fromQrString(qrstring) { + const inv = new VerusPayInvoice(); + inv.fromBuffer(base64url_1.default.toBuffer(qrstring), 0); + return inv; + } + static fromJson(data) { + return new VerusPayInvoice({ + details: VerusPayInvoiceDetails_1.VerusPayInvoiceDetails.fromJson(data.details, data.version ? new bn_js_1.BN(data.version) : veruspay_1.VERUSPAY_VERSION_CURRENT), + signature: data.signature != null ? __1.VerusIDSignature.fromJson(data.signature) : undefined, + signing_id: data.signing_id, + system_id: data.system_id, + version: new bn_js_1.BN(data.version) + }); + } + toJson() { + return { + vdxfkey: this.vdxfkey, + system_id: this.system_id, + signing_id: this.signing_id, + signature: this.isSigned() ? this.signature.toJson() : this.signature, + details: this.details.toJson(), + version: this.version.toString() + }; + } +} +exports.VerusPayInvoice = VerusPayInvoice; diff --git a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.d.ts b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.d.ts new file mode 100644 index 00000000..8b857b65 --- /dev/null +++ b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.d.ts @@ -0,0 +1,84 @@ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { TransferDestination, TransferDestinationJson } from '../../../pbaas/TransferDestination'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { SaplingPaymentAddress } from '../../../pbaas'; +import { CompactAddressObjectJson, CompactXAddressObject } from '../CompactAddressObject'; +export declare const VERUSPAY_INVALID: import("bn.js"); +export declare const VERUSPAY_VALID: import("bn.js"); +export declare const VERUSPAY_ACCEPTS_CONVERSION: import("bn.js"); +export declare const VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS: import("bn.js"); +export declare const VERUSPAY_EXPIRES: import("bn.js"); +export declare const VERUSPAY_ACCEPTS_ANY_DESTINATION: import("bn.js"); +export declare const VERUSPAY_ACCEPTS_ANY_AMOUNT: import("bn.js"); +export declare const VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN: import("bn.js"); +export declare const VERUSPAY_IS_TESTNET: import("bn.js"); +export declare const VERUSPAY_IS_PRECONVERT: import("bn.js"); +export declare const VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS: import("bn.js"); +export declare const VERUSPAY_IS_TAGGED: import("bn.js"); +export type VerusPayInvoiceDetailsJson = { + flags?: string; + amount?: string; + destination?: TransferDestinationJson | string; + requestedcurrencyid: string; + expiryheight?: string; + maxestimatedslippage?: string; + acceptedsystems?: Array; + tag?: CompactAddressObjectJson; +}; +export declare class VerusPayInvoiceDetails implements SerializableEntity { + verusPayVersion: BigNumber; + flags: BigNumber; + amount: BigNumber; + destination: TransferDestination | SaplingPaymentAddress; + requestedcurrencyid: string; + expiryheight: BigNumber; + maxestimatedslippage: BigNumber; + acceptedsystems: Array; + tag: CompactXAddressObject; + constructor(data?: { + flags?: BigNumber; + amount?: BigNumber; + destination?: TransferDestination | SaplingPaymentAddress; + requestedcurrencyid: string; + expiryheight?: BigNumber; + maxestimatedslippage?: BigNumber; + acceptedsystems?: Array; + tag?: CompactXAddressObject; + }, verusPayVersion?: BigNumber); + setFlags(flags: { + acceptsConversion?: boolean; + acceptsNonVerusSystems?: boolean; + expires?: boolean; + acceptsAnyAmount?: boolean; + acceptsAnyDestination?: boolean; + excludesVerusBlockchain?: boolean; + isTestnet?: boolean; + isPreconvert?: boolean; + destinationIsSaplingPaymentAddress?: boolean; + isTagged?: boolean; + }): void; + getFlagsJson(): { + [key: string]: boolean; + }; + toSha256(): Buffer; + acceptsConversion(): boolean; + acceptsNonVerusSystems(): boolean; + acceptsAnyAmount(): boolean; + acceptsAnyDestination(): boolean; + expires(): boolean; + excludesVerusBlockchain(): boolean; + isTestnet(): boolean; + isPreconvert(): boolean; + destinationIsSaplingPaymentAddress(): boolean; + isTagged(): boolean; + isValid(): boolean; + isGTEV4(): boolean; + private getVarUIntEncodingLength; + private writeVarUInt; + private readVarUInt; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number, verusPayVersion?: BigNumber): number; + static fromJson(data: VerusPayInvoiceDetailsJson, verusPayVersion?: BigNumber): VerusPayInvoiceDetails; + toJson(): VerusPayInvoiceDetailsJson; +} diff --git a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js new file mode 100644 index 00000000..97f9ee45 --- /dev/null +++ b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js @@ -0,0 +1,262 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VerusPayInvoiceDetails = exports.VERUSPAY_IS_TAGGED = exports.VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS = exports.VERUSPAY_IS_PRECONVERT = exports.VERUSPAY_IS_TESTNET = exports.VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN = exports.VERUSPAY_ACCEPTS_ANY_AMOUNT = exports.VERUSPAY_ACCEPTS_ANY_DESTINATION = exports.VERUSPAY_EXPIRES = exports.VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS = exports.VERUSPAY_ACCEPTS_CONVERSION = exports.VERUSPAY_VALID = exports.VERUSPAY_INVALID = void 0; +const varint_1 = require("../../../utils/varint"); +const varuint_1 = require("../../../utils/varuint"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const TransferDestination_1 = require("../../../pbaas/TransferDestination"); +const address_1 = require("../../../utils/address"); +const vdxf_1 = require("../../../constants/vdxf"); +const createHash = require("create-hash"); +const veruspay_1 = require("../../../constants/vdxf/veruspay"); +const pbaas_1 = require("../../../pbaas"); +const CompactAddressObject_1 = require("../CompactAddressObject"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +// Added in V3 +exports.VERUSPAY_INVALID = new bn_js_1.BN(0, 10); +exports.VERUSPAY_VALID = new bn_js_1.BN(1, 10); +exports.VERUSPAY_ACCEPTS_CONVERSION = new bn_js_1.BN(2, 10); +exports.VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS = new bn_js_1.BN(4, 10); +exports.VERUSPAY_EXPIRES = new bn_js_1.BN(8, 10); +exports.VERUSPAY_ACCEPTS_ANY_DESTINATION = new bn_js_1.BN(16, 10); +exports.VERUSPAY_ACCEPTS_ANY_AMOUNT = new bn_js_1.BN(32, 10); +exports.VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN = new bn_js_1.BN(64, 10); +exports.VERUSPAY_IS_TESTNET = new bn_js_1.BN(128, 10); +// Added in V4 +exports.VERUSPAY_IS_PRECONVERT = new bn_js_1.BN(256, 10); +exports.VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS = new bn_js_1.BN(512, 10); +exports.VERUSPAY_IS_TAGGED = new bn_js_1.BN(1024, 10); +class VerusPayInvoiceDetails { + constructor(data, verusPayVersion = veruspay_1.VERUSPAY_VERSION_CURRENT) { + this.flags = exports.VERUSPAY_VALID; + this.amount = null; + this.destination = null; + this.requestedcurrencyid = null; + this.expiryheight = null; + this.maxestimatedslippage = null; + this.acceptedsystems = null; + this.verusPayVersion = verusPayVersion; + this.tag = null; + if (data != null) { + if (data.flags != null) + this.flags = data.flags; + if (data.amount != null) + this.amount = data.amount; + if (data.destination != null) + this.destination = data.destination; + if (data.requestedcurrencyid != null) + this.requestedcurrencyid = data.requestedcurrencyid; + if (data.expiryheight != null) + this.expiryheight = data.expiryheight; + if (data.maxestimatedslippage != null) + this.maxestimatedslippage = data.maxestimatedslippage; + if (data.acceptedsystems != null) + this.acceptedsystems = data.acceptedsystems; + if (data.tag != null) + this.tag = data.tag; + } + } + setFlags(flags) { + if (flags.acceptsConversion) + this.flags = this.flags.or(exports.VERUSPAY_ACCEPTS_CONVERSION); + if (flags.acceptsNonVerusSystems) + this.flags = this.flags.or(exports.VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS); + if (flags.expires) + this.flags = this.flags.or(exports.VERUSPAY_EXPIRES); + if (flags.acceptsAnyAmount) + this.flags = this.flags.or(exports.VERUSPAY_ACCEPTS_ANY_AMOUNT); + if (flags.acceptsAnyDestination) + this.flags = this.flags.or(exports.VERUSPAY_ACCEPTS_ANY_DESTINATION); + if (flags.excludesVerusBlockchain) + this.flags = this.flags.or(exports.VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN); + if (flags.isTestnet) + this.flags = this.flags.or(exports.VERUSPAY_IS_TESTNET); + if (this.isGTEV4()) { + if (flags.isPreconvert) + this.flags = this.flags.or(exports.VERUSPAY_IS_PRECONVERT); + if (flags.destinationIsSaplingPaymentAddress) + this.flags = this.flags.or(exports.VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS); + if (flags.isTagged) + this.flags = this.flags.or(exports.VERUSPAY_IS_TAGGED); + } + } + getFlagsJson() { + return { + acceptsConversion: this.acceptsConversion(), + acceptsNonVerusSystems: this.acceptsNonVerusSystems(), + expires: this.expires(), + acceptsAnyAmount: this.acceptsAnyAmount(), + acceptsAnyDestination: this.acceptsAnyDestination(), + excludesVerusBlockchain: this.excludesVerusBlockchain(), + isTestnet: this.isTestnet(), + isPreconvert: this.isPreconvert(), + destinationIsSaplingPaymentAddress: this.destinationIsSaplingPaymentAddress(), + isTagged: this.isTagged() + }; + } + toSha256() { + return createHash("sha256").update(this.toBuffer()).digest(); + } + acceptsConversion() { + return !!(this.flags.and(exports.VERUSPAY_ACCEPTS_CONVERSION).toNumber()); + } + acceptsNonVerusSystems() { + return !!(this.flags.and(exports.VERUSPAY_ACCEPTS_NON_VERUS_SYSTEMS).toNumber()); + } + acceptsAnyAmount() { + return !!(this.flags.and(exports.VERUSPAY_ACCEPTS_ANY_AMOUNT).toNumber()); + } + acceptsAnyDestination() { + return !!(this.flags.and(exports.VERUSPAY_ACCEPTS_ANY_DESTINATION).toNumber()); + } + expires() { + return !!(this.flags.and(exports.VERUSPAY_EXPIRES).toNumber()); + } + excludesVerusBlockchain() { + return !!(this.flags.and(exports.VERUSPAY_EXCLUDES_VERUS_BLOCKCHAIN).toNumber()); + } + isTestnet() { + return !!(this.flags.and(exports.VERUSPAY_IS_TESTNET).toNumber()); + } + isPreconvert() { + return this.isGTEV4() && !!(this.flags.and(exports.VERUSPAY_IS_PRECONVERT).toNumber()); + } + destinationIsSaplingPaymentAddress() { + return this.isGTEV4() && !!(this.flags.and(exports.VERUSPAY_DESTINATION_IS_SAPLING_PAYMENT_ADDRESS).toNumber()); + } + isTagged() { + return this.isGTEV4() && !!(this.flags.and(exports.VERUSPAY_IS_TAGGED).toNumber()); + } + isValid() { + return (!!(this.flags.and(exports.VERUSPAY_VALID).toNumber())); + } + isGTEV4() { + return (this.verusPayVersion.gte(veruspay_1.VERUSPAY_VERSION_4)); + } + // Functions to deal with change in v4 + getVarUIntEncodingLength(uint) { + return this.isGTEV4() ? varuint_1.default.encodingLength(uint.toNumber()) : varint_1.default.encodingLength(uint); + } + writeVarUInt(writer = new BufferWriter(Buffer.alloc(0)), uint) { + if (this.isGTEV4()) { + return writer.writeCompactSize(uint.toNumber()); + } + else { + return writer.writeVarInt(uint); + } + } + readVarUInt(reader = new BufferReader(Buffer.alloc(0))) { + if (this.isGTEV4()) { + return new bn_js_1.BN(reader.readCompactSize()); + } + else { + return reader.readVarInt(); + } + } + getByteLength() { + let length = 0; + length += this.getVarUIntEncodingLength(this.flags); + if (!this.acceptsAnyAmount()) { + length += this.getVarUIntEncodingLength(this.amount); + } + if (!this.acceptsAnyDestination()) { + length += this.destination.getByteLength(); + } + length += (0, address_1.fromBase58Check)(this.requestedcurrencyid).hash.length; + if (this.expires()) { + length += this.getVarUIntEncodingLength(this.expiryheight); + } + if (this.acceptsConversion()) { + length += this.getVarUIntEncodingLength(this.maxestimatedslippage); + } + if (this.acceptsNonVerusSystems()) { + length += varuint_1.default.encodingLength(this.acceptedsystems.length); + this.acceptedsystems.forEach(() => { + length += vdxf_1.HASH160_BYTE_LENGTH; + }); + } + if (this.isTagged()) { + length += this.tag.getByteLength(); + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + this.writeVarUInt(writer, this.flags); + if (!this.acceptsAnyAmount()) + this.writeVarUInt(writer, this.amount); + if (!this.acceptsAnyDestination()) + writer.writeSlice(this.destination.toBuffer()); + writer.writeSlice((0, address_1.fromBase58Check)(this.requestedcurrencyid).hash); + if (this.expires()) { + this.writeVarUInt(writer, this.expiryheight); + } + if (this.acceptsConversion()) { + this.writeVarUInt(writer, this.maxestimatedslippage); + } + if (this.acceptsNonVerusSystems()) { + writer.writeArray(this.acceptedsystems.map(x => (0, address_1.fromBase58Check)(x).hash)); + } + if (this.isTagged()) { + writer.writeSlice(this.tag.toBuffer()); + } + return writer.buffer; + } + fromBuffer(buffer, offset = 0, verusPayVersion = veruspay_1.VERUSPAY_VERSION_CURRENT) { + const reader = new BufferReader(buffer, offset); + this.verusPayVersion = verusPayVersion; + this.flags = this.readVarUInt(reader); + if (!this.acceptsAnyAmount()) + this.amount = this.readVarUInt(reader); + if (!this.acceptsAnyDestination()) { + if (this.destinationIsSaplingPaymentAddress()) { + this.destination = new pbaas_1.SaplingPaymentAddress(); + } + else + this.destination = new TransferDestination_1.TransferDestination(); + reader.offset = this.destination.fromBuffer(reader.buffer, reader.offset); + } + this.requestedcurrencyid = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + if (this.expires()) { + this.expiryheight = this.readVarUInt(reader); + } + if (this.acceptsConversion()) { + this.maxestimatedslippage = this.readVarUInt(reader); + } + if (this.acceptsNonVerusSystems()) { + const acceptedSystemsBuffers = reader.readArray(20); + this.acceptedsystems = acceptedSystemsBuffers.map(x => (0, address_1.toBase58Check)(x, vdxf_1.I_ADDR_VERSION)); + } + if (this.isTagged()) { + this.tag = new CompactAddressObject_1.CompactAddressObject(); + reader.offset = this.tag.fromBuffer(reader.buffer, reader.offset); + } + return reader.offset; + } + static fromJson(data, verusPayVersion = veruspay_1.VERUSPAY_VERSION_CURRENT) { + return new VerusPayInvoiceDetails({ + flags: new bn_js_1.BN(data.flags), + amount: data.amount != null ? new bn_js_1.BN(data.amount) : undefined, + destination: data.destination != null ? typeof data.destination === 'string' ? pbaas_1.SaplingPaymentAddress.fromAddressString(data.destination) : TransferDestination_1.TransferDestination.fromJson(data.destination) : undefined, + requestedcurrencyid: data.requestedcurrencyid, + expiryheight: data.expiryheight != null ? new bn_js_1.BN(data.expiryheight) : undefined, + maxestimatedslippage: data.maxestimatedslippage != null ? new bn_js_1.BN(data.maxestimatedslippage) : undefined, + acceptedsystems: data.acceptedsystems, + tag: data.tag ? CompactAddressObject_1.CompactAddressObject.fromJson(data.tag) : undefined + }, verusPayVersion); + } + toJson() { + return { + flags: this.flags.toString(), + amount: this.acceptsAnyAmount() ? undefined : this.amount.toString(), + destination: this.acceptsAnyDestination() ? undefined : this.destinationIsSaplingPaymentAddress() ? this.destination.toAddressString() : this.destination.toJson(), + requestedcurrencyid: this.requestedcurrencyid, + expiryheight: this.expires() ? this.expiryheight.toString() : undefined, + maxestimatedslippage: this.acceptsConversion() ? this.maxestimatedslippage.toString() : undefined, + acceptedsystems: this.acceptsNonVerusSystems() ? this.acceptedsystems : undefined, + tag: this.isTagged() ? this.tag.toJson() : undefined + }; + } +} +exports.VerusPayInvoiceDetails = VerusPayInvoiceDetails; diff --git a/dist/vdxf/classes/provisioning/ProvisioningChallenge.d.ts b/dist/vdxf/classes/provisioning/ProvisioningChallenge.d.ts new file mode 100644 index 00000000..3362e3f0 --- /dev/null +++ b/dist/vdxf/classes/provisioning/ProvisioningChallenge.d.ts @@ -0,0 +1,39 @@ +import { Challenge } from "../Challenge"; +import { Context } from "../Context"; +export interface ProvisioningChallengeInterface { + challenge_id: string; + created_at: number; + salt?: string; + name?: string; + system_id?: string; + parent?: string; + context?: Context; +} +export declare class ProvisioningChallenge extends Challenge { + name?: string; + system_id?: string; + parent?: string; + constructor(challenge?: ProvisioningChallengeInterface); + dataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer, offset?: number): number; + toJson(): { + vdxfkey: string; + challenge_id: string; + created_at: number; + salt: string; + name: string; + system_id: string; + parent: string; + context: Context; + requested_access: any; + requested_access_audience: any; + subject: any; + provisioning_info: any; + alt_auth_factors: any; + session_id: any; + attestations: any; + skip: any; + redirect_uris: any; + }; +} diff --git a/dist/vdxf/classes/provisioning/ProvisioningChallenge.js b/dist/vdxf/classes/provisioning/ProvisioningChallenge.js new file mode 100644 index 00000000..e49a00b3 --- /dev/null +++ b/dist/vdxf/classes/provisioning/ProvisioningChallenge.js @@ -0,0 +1,84 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ProvisioningChallenge = void 0; +const bufferutils_1 = require("../../../utils/bufferutils"); +const varuint_1 = require("../../../utils/varuint"); +const keys_1 = require("../../keys"); +const Challenge_1 = require("../Challenge"); +const Hash160_1 = require("../Hash160"); +class ProvisioningChallenge extends Challenge_1.Challenge { + constructor(challenge = { challenge_id: "", created_at: 0 }) { + super({ + challenge_id: challenge.challenge_id, + created_at: challenge.created_at, + salt: challenge.salt, + context: challenge.context, + }, keys_1.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY.vdxfid); + this.name = challenge.name; + this.system_id = challenge.system_id; + this.parent = challenge.parent; + } + dataByteLength() { + const nameBuf = Buffer.from(this.name, 'utf-8'); + let length = 0; + length += nameBuf.length; + length += varuint_1.default.encodingLength(nameBuf.length); + length += this.system_id ? Hash160_1.Hash160.fromAddress(this.system_id, true).byteLength() + : Hash160_1.Hash160.getEmpty().byteLength(); + length += this.parent ? Hash160_1.Hash160.fromAddress(this.parent, true).byteLength() + : Hash160_1.Hash160.getEmpty().byteLength(); + return super.dataByteLength() + length; + } + toDataBuffer() { + const superBuf = super.toDataBuffer(); + const writer = new bufferutils_1.default.BufferWriter(superBuf, super.dataByteLength()); + writer.writeVarSlice(Buffer.from(this.name, 'utf-8')); + writer.writeSlice(this.system_id + ? Hash160_1.Hash160.fromAddress(this.system_id, true).toBuffer() + : Hash160_1.Hash160.getEmpty().toBuffer()); + writer.writeSlice(this.parent + ? Hash160_1.Hash160.fromAddress(this.parent, true).toBuffer() + : Hash160_1.Hash160.getEmpty().toBuffer()); + return writer.buffer; + } + fromDataBuffer(buffer, offset) { + const challenge = new Challenge_1.Challenge(undefined, keys_1.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY.vdxfid); + let _offset = challenge.fromDataBuffer(buffer, offset); + const reader = new bufferutils_1.default.BufferReader(buffer, _offset); + this.name = reader.readVarSlice().toString('utf-8'); + const _system_id = new Hash160_1.Hash160(); + reader.offset = _system_id.fromBuffer(reader.buffer, true, reader.offset); + this.system_id = _system_id.toAddress(); + const _parent = new Hash160_1.Hash160(); + reader.offset = _parent.fromBuffer(reader.buffer, true, reader.offset); + this.parent = _parent.toAddress(); + this.challenge_id = challenge.challenge_id; + this.created_at = challenge.created_at; + this.salt = challenge.salt; + this.context = challenge.context; + return reader.offset; + } + // toJson + toJson() { + return { + vdxfkey: this.vdxfkey, + challenge_id: this.challenge_id, + created_at: this.created_at, + salt: this.salt, + name: this.name, + system_id: this.system_id, + parent: this.parent, + context: this.context, + requested_access: undefined, + requested_access_audience: undefined, + subject: undefined, + provisioning_info: undefined, + alt_auth_factors: undefined, + session_id: undefined, + attestations: undefined, + skip: undefined, + redirect_uris: undefined + }; + } +} +exports.ProvisioningChallenge = ProvisioningChallenge; diff --git a/dist/vdxf/classes/provisioning/ProvisioningDecision.d.ts b/dist/vdxf/classes/provisioning/ProvisioningDecision.d.ts new file mode 100644 index 00000000..3d8ec70b --- /dev/null +++ b/dist/vdxf/classes/provisioning/ProvisioningDecision.d.ts @@ -0,0 +1,60 @@ +import { Decision } from "../Decision"; +import { Context } from "../Context"; +import { ProvisioningRequest } from "./ProvisioningRequest"; +import { ProvisioningResult } from "./ProvisioningResult"; +export interface ProvisioningDecisionInterface { + decision_id: string; + created_at: number; + salt?: string; + result?: ProvisioningResult; + request: ProvisioningRequest; + context?: Context; +} +export declare class ProvisioningDecision extends Decision implements ProvisioningDecisionInterface { + result?: ProvisioningResult; + salt?: string; + request: ProvisioningRequest; + constructor(decision?: ProvisioningDecisionInterface); + dataByteLength(): number; + toDataBuffer(): Buffer; + toJson(): { + vdxfkey: string; + decision_id: string; + created_at: number; + salt: string; + result: {}; + request: { + vdxfkey: string; + system_id: any; + signing_address: string; + signing_id: any; + signature: import("../../").VerusIDSignatureJson; + challenge: { + vdxfkey: string; + challenge_id: string; + created_at: number; + salt: string; + name: string; + system_id: string; + parent: string; + context: Context; + requested_access: any; + requested_access_audience: any; + subject: any; + provisioning_info: any; + alt_auth_factors: any; + session_id: any; + attestations: any; + skip: any; + redirect_uris: any; + }; + }; + context: { + kv: { + [key: string]: string; + }; + vdxfkey: string; + }; + }; + fromDataBuffer(buffer: Buffer, offset?: number): number; +} diff --git a/dist/vdxf/classes/provisioning/ProvisioningDecision.js b/dist/vdxf/classes/provisioning/ProvisioningDecision.js new file mode 100644 index 00000000..3deb2d05 --- /dev/null +++ b/dist/vdxf/classes/provisioning/ProvisioningDecision.js @@ -0,0 +1,69 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ProvisioningDecision = void 0; +const bufferutils_1 = require("../../../utils/bufferutils"); +const Decision_1 = require("../Decision"); +const ProvisioningRequest_1 = require("./ProvisioningRequest"); +const __1 = require("../../"); +const ProvisioningResult_1 = require("./ProvisioningResult"); +class ProvisioningDecision extends Decision_1.Decision { + constructor(decision = { + decision_id: "", + created_at: 0, + request: new ProvisioningRequest_1.ProvisioningRequest(), + }) { + super({ + decision_id: decision.decision_id, + created_at: decision.created_at, + salt: decision.salt, + context: decision.context, + request: decision.request, + }, __1.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY.vdxfid); + this.result = + decision.result != null + ? new ProvisioningResult_1.ProvisioningResult(decision.result) + : decision.result; + this.request = new ProvisioningRequest_1.ProvisioningRequest(decision.request); + } + dataByteLength() { + return super.dataByteLength() + this.result.byteLength(); + } + toDataBuffer() { + const superBuf = super.toDataBuffer(); + const resultBuf = this.result + ? this.result.toBuffer() + : new ProvisioningResult_1.ProvisioningResult({ + state: __1.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED.vdxfid, + }).toBuffer(); + const writer = new bufferutils_1.default.BufferWriter(superBuf, super.dataByteLength()); + writer.writeSlice(resultBuf); + return writer.buffer; + } + toJson() { + return { + vdxfkey: this.vdxfkey, + decision_id: this.decision_id, + created_at: this.created_at, + salt: this.salt, + result: this.result ? this.result.toJson() : null, + request: this.request.toJson(), + context: this.context ? this.context.toJson() : null, + }; + } + fromDataBuffer(buffer, offset) { + const decision = new Decision_1.Decision(undefined, __1.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY.vdxfid); + let _offset = decision.fromDataBuffer(buffer, offset, false); + const reader = new bufferutils_1.default.BufferReader(buffer, _offset); + this.request = new ProvisioningRequest_1.ProvisioningRequest(); + reader.offset = this.request.fromBuffer(buffer, _offset); + const _result = new ProvisioningResult_1.ProvisioningResult(); + reader.offset = _result.fromBuffer(reader.buffer, reader.offset); + this.result = _result; + this.decision_id = decision.decision_id; + this.created_at = decision.created_at; + this.salt = decision.salt; + this.context = decision.context; + return reader.offset; + } +} +exports.ProvisioningDecision = ProvisioningDecision; diff --git a/dist/vdxf/classes/provisioning/ProvisioningRequest.d.ts b/dist/vdxf/classes/provisioning/ProvisioningRequest.d.ts new file mode 100644 index 00000000..cacad663 --- /dev/null +++ b/dist/vdxf/classes/provisioning/ProvisioningRequest.d.ts @@ -0,0 +1,45 @@ +import { VerusIDSignatureInterface } from "../../"; +import { Request } from "../Request"; +import { ProvisioningChallenge, ProvisioningChallengeInterface } from "./ProvisioningChallenge"; +export interface ProvisioningRequestInterface { + signing_address?: string; + signature?: VerusIDSignatureInterface; + challenge: ProvisioningChallengeInterface; +} +export declare class ProvisioningRequest extends Request { + signing_address?: string; + challenge: ProvisioningChallenge; + constructor(request?: ProvisioningRequestInterface); + toJson(): { + vdxfkey: string; + system_id: any; + signing_address: string; + signing_id: any; + signature: import("../../").VerusIDSignatureJson; + challenge: { + vdxfkey: string; + challenge_id: string; + created_at: number; + salt: string; + name: string; + system_id: string; + parent: string; + context: import("..").Context; + requested_access: any; + requested_access_audience: any; + subject: any; + provisioning_info: any; + alt_auth_factors: any; + session_id: any; + attestations: any; + skip: any; + redirect_uris: any; + }; + }; + getChallengeHash(): Buffer; + dataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer, offset?: number): number; + toWalletDeeplinkUri(): string; + static fromWalletDeeplinkUri(uri: string): Request; +} diff --git a/dist/vdxf/classes/provisioning/ProvisioningRequest.js b/dist/vdxf/classes/provisioning/ProvisioningRequest.js new file mode 100644 index 00000000..9a3222f3 --- /dev/null +++ b/dist/vdxf/classes/provisioning/ProvisioningRequest.js @@ -0,0 +1,64 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ProvisioningRequest = void 0; +const createHash = require("create-hash"); +const __1 = require("../../"); +const vdxf_1 = require("../../../constants/vdxf"); +const Request_1 = require("../Request"); +const ProvisioningChallenge_1 = require("./ProvisioningChallenge"); +class ProvisioningRequest extends Request_1.Request { + constructor(request = { + signing_address: "", + challenge: new ProvisioningChallenge_1.ProvisioningChallenge(), + }) { + super({ + system_id: null, + signing_id: null, + challenge: request.challenge, + signature: request.signature, + }, __1.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY.vdxfid); + this.challenge = new ProvisioningChallenge_1.ProvisioningChallenge(request.challenge); + this.signing_address = request.signing_address; + } + toJson() { + return { + vdxfkey: this.vdxfkey, + system_id: null, + signing_address: this.signing_address, + signing_id: null, + signature: this.signature ? this.signature.toJson() : this.signature, + challenge: this.challenge.toJson(), + }; + } + getChallengeHash() { + return createHash("sha256") + .update(vdxf_1.VERUS_DATA_SIGNATURE_PREFIX) + .update(this.challenge.toSha256()) + .digest(); + } + dataByteLength() { + const length = this._dataByteLength(this.signing_address); + return length; + } + toDataBuffer() { + const buffer = this._toDataBuffer(this.signing_address); + return buffer; + } + fromDataBuffer(buffer, offset) { + let _offset = this._fromDataBuffer(buffer, offset); + this.challenge = new ProvisioningChallenge_1.ProvisioningChallenge(); + _offset = this.challenge.fromBuffer(buffer, _offset); + this.signing_address = this.signing_id; + this.signing_id = null; + return _offset; + } + toWalletDeeplinkUri() { + if (this.signature == null) + throw new Error("Request must be signed before it can be used as a deep link"); + throw new Error("Cannot create deeplink from provisioning request"); + } + static fromWalletDeeplinkUri(uri) { + throw new Error("Cannot create provisioning request from deeplink"); + } +} +exports.ProvisioningRequest = ProvisioningRequest; diff --git a/dist/vdxf/classes/provisioning/ProvisioningResponse.d.ts b/dist/vdxf/classes/provisioning/ProvisioningResponse.d.ts new file mode 100644 index 00000000..f72e2d70 --- /dev/null +++ b/dist/vdxf/classes/provisioning/ProvisioningResponse.d.ts @@ -0,0 +1,13 @@ +import { VerusIDSignatureInterface } from "../../"; +import { ProvisioningDecisionInterface } from "./ProvisioningDecision"; +import { Response } from "../Response"; +export interface ProvisioningResponseInterface { + system_id: string; + signing_id: string; + signature?: VerusIDSignatureInterface; + decision: ProvisioningDecisionInterface; +} +export declare class ProvisioningResponse extends Response { + constructor(response?: ProvisioningResponseInterface); + fromDataBuffer(buffer: Buffer, offset?: number): number; +} diff --git a/dist/vdxf/classes/provisioning/ProvisioningResponse.js b/dist/vdxf/classes/provisioning/ProvisioningResponse.js new file mode 100644 index 00000000..f2d74b44 --- /dev/null +++ b/dist/vdxf/classes/provisioning/ProvisioningResponse.js @@ -0,0 +1,28 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ProvisioningResponse = void 0; +const __1 = require("../../"); +const ProvisioningDecision_1 = require("./ProvisioningDecision"); +const Response_1 = require("../Response"); +class ProvisioningResponse extends Response_1.Response { + constructor(response = { + system_id: "", + signing_id: "", + decision: new ProvisioningDecision_1.ProvisioningDecision(), + }) { + super({ + system_id: response.system_id, + signing_id: response.signing_id, + signature: response.signature, + decision: response.decision, + }, __1.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY.vdxfid); + this.decision = new ProvisioningDecision_1.ProvisioningDecision(response.decision); + } + fromDataBuffer(buffer, offset) { + let _offset = super.fromDataBuffer(buffer, offset); + this.decision = new ProvisioningDecision_1.ProvisioningDecision(); + _offset = this.decision.fromBuffer(buffer, _offset); + return _offset; + } +} +exports.ProvisioningResponse = ProvisioningResponse; diff --git a/dist/vdxf/classes/provisioning/ProvisioningResult.d.ts b/dist/vdxf/classes/provisioning/ProvisioningResult.d.ts new file mode 100644 index 00000000..87dc49e8 --- /dev/null +++ b/dist/vdxf/classes/provisioning/ProvisioningResult.d.ts @@ -0,0 +1,32 @@ +import { HexDataVdxfObject, VDXFObject } from "../.."; +export interface ProvisioningResultInterface { + state: string; + error_key?: string; + error_desc?: string; + identity_address?: string; + system_id?: string; + fully_qualified_name?: string; + parent?: string; + info_uri?: string; + provisioning_txids?: Array; +} +export declare class ProvisioningTxid extends HexDataVdxfObject { + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer, offset?: number): number; +} +export declare class ProvisioningResult extends VDXFObject { + state: string; + error_key?: string; + error_desc?: string; + identity_address?: string; + info_uri?: string; + provisioning_txids?: Array; + system_id?: string; + fully_qualified_name?: string; + parent?: string; + constructor(result?: ProvisioningResultInterface); + dataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer, offset?: number): number; + toJson(): {}; +} diff --git a/dist/vdxf/classes/provisioning/ProvisioningResult.js b/dist/vdxf/classes/provisioning/ProvisioningResult.js new file mode 100644 index 00000000..0188cdbb --- /dev/null +++ b/dist/vdxf/classes/provisioning/ProvisioningResult.js @@ -0,0 +1,147 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ProvisioningResult = exports.ProvisioningTxid = void 0; +const __1 = require("../.."); +const bufferutils_1 = require("../../../utils/bufferutils"); +const varuint_1 = require("../../../utils/varuint"); +const keys_1 = require("../../keys"); +const Hash160_1 = require("../Hash160"); +class ProvisioningTxid extends __1.HexDataVdxfObject { + toDataBuffer() { + return (0, bufferutils_1.reverseBuffer)(super.toDataBuffer()); + } + fromDataBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + const provisioningTxidSlice = reader.readVarSlice(); + const provisioningTxidBuf = Buffer.alloc(provisioningTxidSlice.length); + const provisioningTxidWriter = new bufferutils_1.default.BufferWriter(provisioningTxidBuf); + provisioningTxidWriter.writeSlice(provisioningTxidSlice); + this.data = (0, bufferutils_1.reverseBuffer)(provisioningTxidWriter.buffer).toString('hex'); + return reader.offset; + } +} +exports.ProvisioningTxid = ProvisioningTxid; +class ProvisioningResult extends __1.VDXFObject { + constructor(result = { state: "" }) { + super(keys_1.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY.vdxfid); + this.state = result.state; + this.error_desc = result.error_desc; + this.error_key = result.error_key; + this.identity_address = result.identity_address; + this.info_uri = result.info_uri; + this.provisioning_txids = result.provisioning_txids + ? result.provisioning_txids.map((x) => new ProvisioningTxid(x.data, x.vdxfkey)) + : result.provisioning_txids; + this.system_id = result.system_id; + this.fully_qualified_name = result.fully_qualified_name; + this.parent = result.parent; + } + dataByteLength() { + const stateLength = Hash160_1.Hash160.fromAddress(this.state).byteLength(); + const errorKeyLength = this.error_key + ? Hash160_1.Hash160.fromAddress(this.error_key, true).byteLength() + : Hash160_1.Hash160.getEmpty().byteLength(); + const errorDescBuf = this.error_desc == null + ? Buffer.alloc(0) + : Buffer.from(this.error_desc, "utf-8"); + const errorDescLength = errorDescBuf.length + varuint_1.default.encodingLength(errorDescBuf.length); + const idAddrLength = this.identity_address + ? Hash160_1.Hash160.fromAddress(this.identity_address, true).byteLength() + : Hash160_1.Hash160.getEmpty().byteLength(); + const systemIdLength = this.system_id + ? Hash160_1.Hash160.fromAddress(this.system_id, true).byteLength() + : Hash160_1.Hash160.getEmpty().byteLength(); + const nameBuf = this.fully_qualified_name == null + ? Buffer.alloc(0) + : Buffer.from(this.fully_qualified_name, "utf-8"); + const nameLength = nameBuf.length + varuint_1.default.encodingLength(nameBuf.length); + const parentLength = this.parent + ? Hash160_1.Hash160.fromAddress(this.parent, true).byteLength() + : Hash160_1.Hash160.getEmpty().byteLength(); + const infoUriBuf = this.info_uri == null ? Buffer.alloc(0) : Buffer.from(this.info_uri, "utf-8"); + const infoUriLength = infoUriBuf.length + varuint_1.default.encodingLength(infoUriBuf.length); + const _provisioning_txids = this.provisioning_txids ? this.provisioning_txids : []; + let length = (stateLength + + errorKeyLength + + errorDescLength + + idAddrLength + + systemIdLength + + nameLength + + parentLength + + infoUriLength); + length += varuint_1.default.encodingLength(_provisioning_txids.length); + length += _provisioning_txids.reduce((sum, current) => sum + current.byteLength(), 0); + return length; + } + toDataBuffer() { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.dataByteLength())); + writer.writeSlice(Hash160_1.Hash160.fromAddress(this.state).toBuffer()); + writer.writeSlice(this.error_key + ? Hash160_1.Hash160.fromAddress(this.error_key, true).toBuffer() + : Hash160_1.Hash160.getEmpty().toBuffer()); + writer.writeVarSlice(this.error_desc == null ? Buffer.alloc(0) : Buffer.from(this.error_desc, "utf-8")); + writer.writeSlice(this.identity_address + ? Hash160_1.Hash160.fromAddress(this.identity_address, true).toBuffer() + : Hash160_1.Hash160.getEmpty().toBuffer()); + writer.writeSlice(this.system_id + ? Hash160_1.Hash160.fromAddress(this.system_id, true).toBuffer() + : Hash160_1.Hash160.getEmpty().toBuffer()); + writer.writeVarSlice(this.fully_qualified_name == null ? Buffer.alloc(0) : Buffer.from(this.fully_qualified_name, "utf-8")); + writer.writeSlice(this.parent + ? Hash160_1.Hash160.fromAddress(this.parent, true).toBuffer() + : Hash160_1.Hash160.getEmpty().toBuffer()); + writer.writeVarSlice(this.info_uri == null ? Buffer.alloc(0) : Buffer.from(this.info_uri, "utf-8")); + const _provisioning_txids = this.provisioning_txids ? this.provisioning_txids : []; + writer.writeArray(_provisioning_txids.map((x) => x.toBuffer())); + return writer.buffer; + } + fromDataBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + const resultLength = reader.readCompactSize(); + if (resultLength == 0) { + throw new Error("Cannot create provisioning result from empty buffer"); + } + else { + const _state = new Hash160_1.Hash160(); + reader.offset = _state.fromBuffer(reader.buffer, false, reader.offset); + this.state = _state.toAddress(); + const _error_key = new Hash160_1.Hash160(); + reader.offset = _error_key.fromBuffer(reader.buffer, true, reader.offset); + this.error_key = _error_key.toAddress(); + this.error_desc = reader.readVarSlice().toString('utf8'); + const _identity_address = new Hash160_1.Hash160(); + reader.offset = _identity_address.fromBuffer(reader.buffer, true, reader.offset); + this.identity_address = _identity_address.toAddress(); + const _system_id = new Hash160_1.Hash160(); + reader.offset = _system_id.fromBuffer(reader.buffer, true, reader.offset); + this.system_id = _system_id.toAddress(); + this.fully_qualified_name = reader.readVarSlice().toString('utf8'); + const _parent = new Hash160_1.Hash160(); + reader.offset = _parent.fromBuffer(reader.buffer, true, reader.offset); + this.parent = _parent.toAddress(); + this.info_uri = reader.readVarSlice().toString('utf8'); + this.provisioning_txids = []; + const provisioningTxidLength = reader.readCompactSize(); + for (let i = 0; i < provisioningTxidLength; i++) { + const _provisioning_txid = new ProvisioningTxid(); + reader.offset = _provisioning_txid.fromBuffer(reader.buffer, reader.offset); + this.provisioning_txids.push(_provisioning_txid); + } + } + return reader.offset; + } + toJson() { + return { + vdxfkey: this.vdxfkey, + state: this.state, + error_key: this.error_key, + error_desc: this.error_desc, + identity_address: this.identity_address, + info_uri: this.info_uri, + provisioning_txids: this.provisioning_txids, + system_id: this.system_id, + fully_qualified_name: this.fully_qualified_name + }; + } +} +exports.ProvisioningResult = ProvisioningResult; diff --git a/dist/vdxf/classes/request/GenericRequest.d.ts b/dist/vdxf/classes/request/GenericRequest.d.ts new file mode 100644 index 00000000..82d07fa8 --- /dev/null +++ b/dist/vdxf/classes/request/GenericRequest.d.ts @@ -0,0 +1,34 @@ +import { SerializableEntity } from "../../../utils/types/SerializableEntity"; +import { GenericEnvelope, GenericEnvelopeInterface, GenericEnvelopeJson } from "../envelope/GenericEnvelope"; +import { SaplingPaymentAddress } from '../../../pbaas/SaplingPaymentAddress'; +export type GenericRequestJson = GenericEnvelopeJson & { + encryptresponsetoaddress?: string; +}; +export type GenericRequestInterface = GenericEnvelopeInterface & { + encryptResponseToAddress?: SaplingPaymentAddress; +}; +export declare class GenericRequest extends GenericEnvelope implements SerializableEntity { + encryptResponseToAddress?: SaplingPaymentAddress; + static VERSION_CURRENT: import("bn.js"); + static VERSION_FIRSTVALID: import("bn.js"); + static VERSION_LASTVALID: import("bn.js"); + static BASE_FLAGS: import("bn.js"); + static FLAG_SIGNED: import("bn.js"); + static FLAG_HAS_CREATED_AT: import("bn.js"); + static FLAG_MULTI_DETAILS: import("bn.js"); + static FLAG_IS_TESTNET: import("bn.js"); + static FLAG_HAS_SALT: import("bn.js"); + static FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS: import("bn.js"); + constructor(envelope?: GenericRequestInterface); + hasEncryptResponseToAddress(): boolean; + setHasEncryptResponseToAddress(): void; + setFlags(): void; + getByteLengthOptionalSig(includeSig?: boolean): number; + toBufferOptionalSig(includeSig?: boolean): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): GenericRequestJson; + static fromWalletDeeplinkUri(uri: string): GenericRequest; + static fromQrString(qrstring: string): GenericRequest; + toWalletDeeplinkUri(): string; + toQrString(): string; +} diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js new file mode 100644 index 00000000..824f14bf --- /dev/null +++ b/dist/vdxf/classes/request/GenericRequest.js @@ -0,0 +1,100 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GenericRequest = void 0; +const bn_js_1 = require("bn.js"); +const GenericEnvelope_1 = require("../envelope/GenericEnvelope"); +const SaplingPaymentAddress_1 = require("../../../pbaas/SaplingPaymentAddress"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const base64url_1 = require("base64url"); +const deeplink_1 = require("../../../constants/deeplink"); +class GenericRequest extends GenericEnvelope_1.GenericEnvelope { + constructor(envelope = { + details: [], + flags: GenericRequest.BASE_FLAGS + }) { + super(envelope); + this.encryptResponseToAddress = envelope.encryptResponseToAddress; + this.setFlags(); + } + hasEncryptResponseToAddress() { + return !!(this.flags.and(GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS).toNumber()); + } + setHasEncryptResponseToAddress() { + this.flags = this.flags.or(GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS); + } + setFlags() { + super.setFlags(); + if (this.encryptResponseToAddress) + this.setHasEncryptResponseToAddress(); + } + getByteLengthOptionalSig(includeSig = true) { + let length = super.getByteLengthOptionalSig(includeSig); + if (this.hasEncryptResponseToAddress()) { + length += this.encryptResponseToAddress.getByteLength(); + } + return length; + } + toBufferOptionalSig(includeSig = true) { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLengthOptionalSig(includeSig))); + const superBuf = super.toBufferOptionalSig(includeSig); + writer.writeSlice(superBuf); + if (this.hasEncryptResponseToAddress()) { + writer.writeSlice(this.encryptResponseToAddress.toBuffer()); + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + if (buffer.length == 0) + throw new Error("Cannot create request from empty buffer"); + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + reader.offset = super.fromBuffer(reader.buffer, reader.offset); + if (this.hasEncryptResponseToAddress()) { + this.encryptResponseToAddress = new SaplingPaymentAddress_1.SaplingPaymentAddress(); + reader.offset = this.encryptResponseToAddress.fromBuffer(reader.buffer, reader.offset); + } + return reader.offset; + } + toJson() { + const parentJson = super.toJson(); + if (this.hasEncryptResponseToAddress()) { + parentJson["encryptresponsetoaddress"] = this.encryptResponseToAddress.toAddressString(); + } + return parentJson; + } + static fromWalletDeeplinkUri(uri) { + const urlProtocol = `${deeplink_1.DEEPLINK_PROTOCOL_URL_STRING}:`; + const split = uri.split(`/`); + if (split.length !== 4 || split.some(x => x == null)) + throw new Error("Unrecognized URL format"); + if (split[0] !== urlProtocol) + throw new Error("Unrecognized URL protocol"); + else if (isNaN(Number(split[2])) || !(new bn_js_1.BN(split[2], 10).eq(deeplink_1.DEEPLINK_PROTOCOL_URL_CURRENT_VERSION))) { + throw new Error("Unrecognized or incompatible generic request protocol version"); + } + const inv = new GenericRequest(); + inv.fromBuffer(base64url_1.default.toBuffer(split[3]), 0); + return inv; + } + static fromQrString(qrstring) { + const inv = new GenericRequest(); + inv.fromBuffer(base64url_1.default.toBuffer(qrstring), 0); + return inv; + } + toWalletDeeplinkUri() { + return `${deeplink_1.DEEPLINK_PROTOCOL_URL_STRING}://${deeplink_1.DEEPLINK_PROTOCOL_URL_CURRENT_VERSION.toString()}/${this.toString()}`; + } + toQrString() { + return this.toString(); + } +} +exports.GenericRequest = GenericRequest; +GenericRequest.VERSION_CURRENT = new bn_js_1.BN(1, 10); +GenericRequest.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); +GenericRequest.VERSION_LASTVALID = new bn_js_1.BN(1, 10); +GenericRequest.BASE_FLAGS = GenericEnvelope_1.GenericEnvelope.BASE_FLAGS; +GenericRequest.FLAG_SIGNED = GenericEnvelope_1.GenericEnvelope.FLAG_SIGNED; +GenericRequest.FLAG_HAS_CREATED_AT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_CREATED_AT; +GenericRequest.FLAG_MULTI_DETAILS = GenericEnvelope_1.GenericEnvelope.FLAG_MULTI_DETAILS; +GenericRequest.FLAG_IS_TESTNET = GenericEnvelope_1.GenericEnvelope.FLAG_IS_TESTNET; +GenericRequest.FLAG_HAS_SALT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_SALT; +GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS = new bn_js_1.BN(32, 10); diff --git a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts new file mode 100644 index 00000000..20f0554a --- /dev/null +++ b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts @@ -0,0 +1,73 @@ +/** + * AppEncryptionRequestDetails - Class for handling application requests for encrypted derived seeds + * + * This class is used when an application is requesting an encrypted derived seed from the user's master seed, + * using specific parameters passed by the application. The request includes: + * - App or delegated ID making the request (mandatory) + * - A target encryption key (zaddress format) for encrypting the reply + * - Derivation number for seed generation + * - Optional derivation ID (defaults to Z-address from ID signing if not present) + * - Optional request ID for tracking + * + * The user's wallet can use these parameters to derive a specific seed from their master seed + * and encrypt it using the provided encryption key, ensuring the application receives only + * the specific derived seed it needs without exposing the master seed. + * + * The RETURN_ESK flag can be set to signal that the Extended Spending Key should be returned. + */ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { CompactAddressObject, CompactAddressObjectJson } from '../CompactAddressObject'; +export interface AppEncryptionRequestInterface { + version?: BigNumber; + flags: BigNumber; + appOrDelegatedID: CompactAddressObject; + encryptToZAddress: string; + derivationNumber: BigNumber; + derivationID?: CompactAddressObject; + requestID?: string; +} +export interface AppEncryptionRequestJson { + version: number; + flags: number; + appordelegatedid: CompactAddressObjectJson; + encrypttozaddress: string; + derivationnumber: number; + derivationid?: CompactAddressObjectJson; + requestid?: string; +} +/** + * Checks if a string is a valid hexadecimal address + * @param flags - Optional flags for the request + * @flag HAS_REQUEST_ID - Indicates if a request ID is included + * + * @param encryptToZAddress - The encryption key to use for encrypting to + * @param derivationNumber - The derivation number to validate + */ +export declare class AppEncryptionRequestDetails implements SerializableEntity { + static VERSION_INVALID: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static DEFAULT_VERSION: import("bn.js"); + static HAS_DERIVATION_ID: import("bn.js"); + static HAS_REQUEST_ID: import("bn.js"); + static RETURN_ESK: import("bn.js"); + version: BigNumber; + flags: BigNumber; + appOrDelegatedID?: CompactAddressObject; + encryptToZAddress: string; + derivationNumber: BigNumber; + derivationID?: CompactAddressObject; + requestID?: string; + constructor(data?: AppEncryptionRequestInterface); + setFlags(): void; + calcFlags(): BigNumber; + isValid(): boolean; + hasDerivationID(flags?: BigNumber): boolean; + hasRequestID(flags?: BigNumber): boolean; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): AppEncryptionRequestJson; + static fromJson(json: AppEncryptionRequestJson): AppEncryptionRequestDetails; +} diff --git a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js new file mode 100644 index 00000000..fb417209 --- /dev/null +++ b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js @@ -0,0 +1,170 @@ +"use strict"; +/** + * AppEncryptionRequestDetails - Class for handling application requests for encrypted derived seeds + * + * This class is used when an application is requesting an encrypted derived seed from the user's master seed, + * using specific parameters passed by the application. The request includes: + * - App or delegated ID making the request (mandatory) + * - A target encryption key (zaddress format) for encrypting the reply + * - Derivation number for seed generation + * - Optional derivation ID (defaults to Z-address from ID signing if not present) + * - Optional request ID for tracking + * + * The user's wallet can use these parameters to derive a specific seed from their master seed + * and encrypt it using the provided encryption key, ensuring the application receives only + * the specific derived seed it needs without exposing the master seed. + * + * The RETURN_ESK flag can be set to signal that the Extended Spending Key should be returned. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AppEncryptionRequestDetails = void 0; +const bn_js_1 = require("bn.js"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const sapling_1 = require("../../../utils/sapling"); +const CompactAddressObject_1 = require("../CompactAddressObject"); +const varuint_1 = require("../../../utils/varuint"); +const address_1 = require("../../../utils/address"); +const vdxf_1 = require("../../../constants/vdxf"); +/** + * Checks if a string is a valid hexadecimal address + * @param flags - Optional flags for the request + * @flag HAS_REQUEST_ID - Indicates if a request ID is included + * + * @param encryptToZAddress - The encryption key to use for encrypting to + * @param derivationNumber - The derivation number to validate + */ +class AppEncryptionRequestDetails { + constructor(data) { + this.version = (data === null || data === void 0 ? void 0 : data.version) || AppEncryptionRequestDetails.DEFAULT_VERSION; + this.flags = (data === null || data === void 0 ? void 0 : data.flags) || new bn_js_1.BN(0); + this.appOrDelegatedID = data === null || data === void 0 ? void 0 : data.appOrDelegatedID; + this.encryptToZAddress = (data === null || data === void 0 ? void 0 : data.encryptToZAddress) || ''; + this.derivationNumber = (data === null || data === void 0 ? void 0 : data.derivationNumber) || new bn_js_1.BN(0); + this.derivationID = data === null || data === void 0 ? void 0 : data.derivationID; + this.requestID = data === null || data === void 0 ? void 0 : data.requestID; + this.setFlags(); + } + setFlags() { + this.flags = this.calcFlags(); + } + calcFlags() { + let flags = new bn_js_1.BN(0); + if (this.derivationID != null) { + flags = flags.or(AppEncryptionRequestDetails.HAS_DERIVATION_ID); + } + if (this.requestID != null) { + flags = flags.or(AppEncryptionRequestDetails.HAS_REQUEST_ID); + } + return flags; + } + isValid() { + let valid = this.appOrDelegatedID != null; + valid && (valid = this.encryptToZAddress != null && this.encryptToZAddress.length > 0); + valid && (valid = this.derivationNumber != null && this.derivationNumber.gte(new bn_js_1.BN(0))); + return valid; + } + hasDerivationID(flags = this.flags) { + return flags.and(AppEncryptionRequestDetails.HAS_DERIVATION_ID).gt(new bn_js_1.BN(0)); + } + hasRequestID(flags = this.flags) { + return flags.and(AppEncryptionRequestDetails.HAS_REQUEST_ID).gt(new bn_js_1.BN(0)); + } + getByteLength() { + const flags = this.calcFlags(); + let length = 0; + length += varuint_1.default.encodingLength(flags.toNumber()); + // appOrDelegatedID + length += this.appOrDelegatedID.getByteLength(); + // encryptToKey - zaddress encoding (43 bytes for sapling address data) + length += 43; // Sapling address decoded data (11 + 32 bytes) + length += varuint_1.default.encodingLength(this.derivationNumber.toNumber()); + if (this.hasDerivationID(flags)) { + length += this.derivationID.getByteLength(); + } + if (this.hasRequestID(flags)) { + length += vdxf_1.HASH160_BYTE_LENGTH; + } + return length; + } + toBuffer() { + const flags = this.calcFlags(); + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + // Write flags + writer.writeCompactSize(flags.toNumber()); + // Write appOrDelegatedID + writer.writeSlice(this.appOrDelegatedID.toBuffer()); + // Write encryptToAddress as decoded sapling address data + const saplingData = (0, sapling_1.decodeSaplingAddress)(this.encryptToZAddress); + writer.writeSlice(Buffer.concat([saplingData.d, saplingData.pk_d])); + // Write mandatory derivation number + writer.writeVarInt(this.derivationNumber); + if (this.hasDerivationID(flags)) { + writer.writeSlice(this.derivationID.toBuffer()); + } + if (this.hasRequestID(flags)) { + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new BufferReader(buffer, offset); + // Read flags + this.flags = new bn_js_1.BN(reader.readCompactSize()); + // Read appOrDelegatedID + const appOrDelegatedIDObj = new CompactAddressObject_1.CompactAddressObject(); + reader.offset = appOrDelegatedIDObj.fromBuffer(reader.buffer, reader.offset); + this.appOrDelegatedID = appOrDelegatedIDObj; + // Read encryptToAddress as 43-byte sapling data and encode as sapling address + const saplingData = reader.readSlice(43); + this.encryptToZAddress = (0, sapling_1.toBech32)('zs', saplingData); + // Read mandatory derivation number + this.derivationNumber = reader.readVarInt(); + if (this.hasDerivationID()) { + const derivationIDObj = new CompactAddressObject_1.CompactAddressObject(); + reader.offset = derivationIDObj.fromBuffer(reader.buffer, reader.offset); + this.derivationID = derivationIDObj; + } + if (this.hasRequestID()) { + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + } + return reader.offset; + } + toJson() { + var _a; + // Set flags before serialization + const flags = this.calcFlags(); + return { + version: this.version.toNumber(), + flags: flags.toNumber(), + appordelegatedid: this.appOrDelegatedID.toJson(), + encrypttozaddress: this.encryptToZAddress, + derivationnumber: this.derivationNumber.toNumber(), + derivationid: (_a = this.derivationID) === null || _a === void 0 ? void 0 : _a.toJson(), + requestid: this.requestID + }; + } + static fromJson(json) { + const instance = new AppEncryptionRequestDetails(); + instance.version = new bn_js_1.BN(json.version); + instance.flags = new bn_js_1.BN(json.flags); + instance.appOrDelegatedID = CompactAddressObject_1.CompactAddressObject.fromJson(json.appordelegatedid); + instance.encryptToZAddress = json.encrypttozaddress; + instance.derivationNumber = new bn_js_1.BN(json.derivationnumber); + if (instance.hasDerivationID()) { + instance.derivationID = CompactAddressObject_1.CompactAddressObject.fromJson(json === null || json === void 0 ? void 0 : json.derivationid); + } + if (instance.hasRequestID()) { + instance.requestID = json === null || json === void 0 ? void 0 : json.requestid; + } + return instance; + } +} +exports.AppEncryptionRequestDetails = AppEncryptionRequestDetails; +AppEncryptionRequestDetails.VERSION_INVALID = new bn_js_1.BN(0); +AppEncryptionRequestDetails.FIRST_VERSION = new bn_js_1.BN(1); +AppEncryptionRequestDetails.LAST_VERSION = new bn_js_1.BN(1); +AppEncryptionRequestDetails.DEFAULT_VERSION = new bn_js_1.BN(1); +AppEncryptionRequestDetails.HAS_DERIVATION_ID = new bn_js_1.BN(1); +AppEncryptionRequestDetails.HAS_REQUEST_ID = new bn_js_1.BN(2); +AppEncryptionRequestDetails.RETURN_ESK = new bn_js_1.BN(4); //flag to signal to return the Extended Spending Key diff --git a/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts new file mode 100644 index 00000000..7d43c31f --- /dev/null +++ b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts @@ -0,0 +1,57 @@ +/** + * ProvisioningIdentity - Class for handling identity provisioning requests + * + * This class is used when an application is requesting the provisioning or creation of a new identity + * within the Verus blockchain ecosystem. The request includes: + * - System ID (e.g., VRSC@) defining the blockchain system + * - Parent ID (e.g., Token@) defining the parent namespace + * - Identity ID (e.g., john.VRSC@) defining the full identity to be provisioned + * - Flags indicating which components are present and required + * + * The user's wallet can use these parameters to understand the complete identity hierarchy + * and present a clear provisioning request to the user, showing the system context, + * parent namespace, and the specific identity being created. This enables secure, + * user-controlled identity provisioning with proper namespace management. + */ +import { BigNumber } from "../../../utils/types/BigNumber"; +import { SerializableEntity } from "../../../utils/types/SerializableEntity"; +import { CompactAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; +export interface ProvisionIdentityDetailsInterface { + version?: BigNumber; + flags: BigNumber; + systemID?: CompactAddressObject; + parentID?: CompactAddressObject; + identityID?: CompactAddressObject; +} +export interface ProvisionIdentityDetailsJson { + version?: number; + flags: number; + systemid?: CompactAddressObjectJson; + parentid?: CompactAddressObjectJson; + identityid?: CompactAddressObjectJson; +} +export declare class ProvisionIdentityDetails implements SerializableEntity { + version: BigNumber; + flags: BigNumber; + systemID?: CompactAddressObject; + parentID?: CompactAddressObject; + identityID?: CompactAddressObject; + static DEFAULT_VERSION: import("bn.js"); + static VERSION_FIRSTVALID: import("bn.js"); + static VERSION_LASTVALID: import("bn.js"); + static FLAG_HAS_SYSTEMID: import("bn.js"); + static FLAG_HAS_PARENTID: import("bn.js"); + static FLAG_IS_A_DEFINED_NAME_TO_PROVISION: import("bn.js"); + constructor(data?: ProvisionIdentityDetailsInterface); + hasSystemId(): boolean; + hasParentId(): boolean; + hasIdentityId(): boolean; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): ProvisionIdentityDetailsJson; + static fromJson(data: any): ProvisionIdentityDetails; + calcFlags(): BigNumber; + setFlags(): void; + isValid(): boolean; +} diff --git a/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js new file mode 100644 index 00000000..fd3034ea --- /dev/null +++ b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js @@ -0,0 +1,146 @@ +"use strict"; +/** + * ProvisioningIdentity - Class for handling identity provisioning requests + * + * This class is used when an application is requesting the provisioning or creation of a new identity + * within the Verus blockchain ecosystem. The request includes: + * - System ID (e.g., VRSC@) defining the blockchain system + * - Parent ID (e.g., Token@) defining the parent namespace + * - Identity ID (e.g., john.VRSC@) defining the full identity to be provisioned + * - Flags indicating which components are present and required + * + * The user's wallet can use these parameters to understand the complete identity hierarchy + * and present a clear provisioning request to the user, showing the system context, + * parent namespace, and the specific identity being created. This enables secure, + * user-controlled identity provisioning with proper namespace management. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ProvisionIdentityDetails = void 0; +const bufferutils_1 = require("../../../utils/bufferutils"); +const bn_js_1 = require("bn.js"); +const CompactAddressObject_1 = require("../CompactAddressObject"); +const varuint_1 = require("../../../utils/varuint"); +class ProvisionIdentityDetails { + constructor(data) { + this.version = (data === null || data === void 0 ? void 0 : data.version) || ProvisionIdentityDetails.DEFAULT_VERSION; + this.flags = (data === null || data === void 0 ? void 0 : data.flags) || new bn_js_1.BN(0, 10); + this.systemID = data === null || data === void 0 ? void 0 : data.systemID; + this.parentID = data === null || data === void 0 ? void 0 : data.parentID; + this.identityID = data === null || data === void 0 ? void 0 : data.identityID; + this.setFlags(); + } + hasSystemId() { + return this.flags.and(ProvisionIdentityDetails.FLAG_HAS_SYSTEMID).eq(ProvisionIdentityDetails.FLAG_HAS_SYSTEMID); + } + hasParentId() { + return this.flags.and(ProvisionIdentityDetails.FLAG_HAS_PARENTID).eq(ProvisionIdentityDetails.FLAG_HAS_PARENTID); + } + hasIdentityId() { + return this.flags.and(ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION).eq(ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION); + } + getByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.flags.toNumber()); + if (this.hasSystemId()) { + length += this.systemID.getByteLength(); + } + if (this.hasParentId()) { + length += this.parentID.getByteLength(); + } + if (this.hasIdentityId()) { + length += this.identityID.getByteLength(); + } + return length; + } + toBuffer() { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeCompactSize(this.flags.toNumber()); + if (this.hasSystemId()) { + writer.writeSlice(this.systemID.toBuffer()); + } + if (this.hasParentId()) { + writer.writeSlice(this.parentID.toBuffer()); + } + if (this.hasIdentityId()) { + writer.writeSlice(this.identityID.toBuffer()); + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + if (buffer.length == 0) + throw new Error("Cannot create provision identity from empty buffer"); + this.flags = new bn_js_1.BN(reader.readCompactSize()); + if (this.hasSystemId()) { + const systemID = new CompactAddressObject_1.CompactAddressObject(); + reader.offset = systemID.fromBuffer(reader.buffer, reader.offset); + this.systemID = systemID; + } + if (this.hasParentId()) { + const parentID = new CompactAddressObject_1.CompactAddressObject(); + reader.offset = parentID.fromBuffer(reader.buffer, reader.offset); + this.parentID = parentID; + } + if (this.hasIdentityId()) { + const identityID = new CompactAddressObject_1.CompactAddressObject(); + reader.offset = identityID.fromBuffer(reader.buffer, reader.offset); + this.identityID = identityID; + } + return reader.offset; + } + toJson() { + const flags = this.calcFlags(); + return { + version: this.version.toNumber(), + flags: flags.toNumber(), + systemid: this.systemID ? this.systemID.toJson() : null, + parentid: this.parentID ? this.parentID.toJson() : null, + identityid: this.identityID ? this.identityID.toJson() : null, + }; + } + static fromJson(data) { + const provision = new ProvisionIdentityDetails(); + provision.version = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.version) || 0); + provision.flags = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.flags) || 0); + if (provision.hasSystemId()) { + provision.systemID = CompactAddressObject_1.CompactAddressObject.fromJson(data.systemid); + } + if (provision.hasParentId()) { + provision.parentID = CompactAddressObject_1.CompactAddressObject.fromJson(data.parentid); + } + if (provision.hasIdentityId()) { + provision.identityID = CompactAddressObject_1.CompactAddressObject.fromJson(data.identityid); + } + return provision; + } + calcFlags() { + let flags = new bn_js_1.BN(0, 10); + if (this.systemID) { + flags = flags.or(ProvisionIdentityDetails.FLAG_HAS_SYSTEMID); + } + if (this.parentID) { + flags = flags.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID); + } + if (this.identityID) { + flags = flags.or(ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION); + } + return flags; + } + setFlags() { + this.flags = this.calcFlags(); + } + isValid() { + let valid = this.flags != null && this.flags.gte(new bn_js_1.BN(0)); + valid && (valid = this.version != null); + return valid; + } +} +exports.ProvisionIdentityDetails = ProvisionIdentityDetails; +// Version +ProvisionIdentityDetails.DEFAULT_VERSION = new bn_js_1.BN(1, 10); +ProvisionIdentityDetails.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); +ProvisionIdentityDetails.VERSION_LASTVALID = new bn_js_1.BN(1, 10); +// flags include params // parent same as signer +ProvisionIdentityDetails.FLAG_HAS_SYSTEMID = new bn_js_1.BN(1, 10); +ProvisionIdentityDetails.FLAG_HAS_PARENTID = new bn_js_1.BN(2, 10); +ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION = new bn_js_1.BN(4, 10); diff --git a/dist/vdxf/classes/requestobjects/UserDataRequestDetails.d.ts b/dist/vdxf/classes/requestobjects/UserDataRequestDetails.d.ts new file mode 100644 index 00000000..11839bf7 --- /dev/null +++ b/dist/vdxf/classes/requestobjects/UserDataRequestDetails.d.ts @@ -0,0 +1,88 @@ +/** + * InformationRequest - Class for handling application requests for specific user information/data + * + * This class is used when an application is requesting specific information or data from the user's + * identity or data stores. The request includes: + * - Search data keys (VDXF keys) to identify the specific data being requested + * - Optional specific keys within the data object for partial data requests + * - Signer information to identify wanted signer of the data + * - Optional statement for boundhashes in the signature + * + * The user's wallet can use these parameters to locate the signed object information and present + * it to the user for approval before sharing with the requesting application. This enables + * selective disclosure of personal information while maintaining user privacy and control. + * + * Flags determine the type and scope of the request: + * - FULL_DATA vs PARTIAL_DATA: Whether complete objects or specific fields are requested + * - COLLECTION: Whether multiple data objects are being requested + * - HAS_STATEMENT: Whether the request includes an attestation statement + * - ATTESTATION/CLAIM/CREDENTIAL: Type of verification being requested + */ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { CompactAddressObject, CompactAddressObjectJson } from '../CompactAddressObject'; +export interface UserDataRequestInterface { + version?: BigNumber; + flags: BigNumber; + searchDataKey: Array<{ + [key: string]: string; + }>; + signer?: CompactAddressObject; + requestedKeys?: string[]; + requestID?: string; +} +export interface UserDataRequestJson { + version: number; + flags: number; + searchdatakey: Array<{ + [key: string]: string; + }>; + signer?: CompactAddressObjectJson; + requestedkeys?: string[]; + requestid?: string; +} +export declare class UserDataRequestDetails implements SerializableEntity { + static VERSION_INVALID: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static DEFAULT_VERSION: import("bn.js"); + static FULL_DATA: import("bn.js"); + static PARTIAL_DATA: import("bn.js"); + static COLLECTION: import("bn.js"); + static ATTESTATION: import("bn.js"); + static CLAIM: import("bn.js"); + static CREDENTIAL: import("bn.js"); + static HAS_SIGNER: import("bn.js"); + static HAS_REQUESTED_KEYS: import("bn.js"); + static HAS_REQUEST_ID: import("bn.js"); + version: BigNumber; + flags: BigNumber; + searchDataKey: Array<{ + [key: string]: string; + }>; + signer?: CompactAddressObject; + requestedKeys?: string[]; + requestID?: string; + constructor(data?: UserDataRequestInterface); + calcFlags(): BigNumber; + setFlags(): void; + hasSigner(): boolean; + hasRequestedKeys(): boolean; + hasRequestID(): boolean; + /** + * Checks if exactly one data type flag is set (FULL_DATA, PARTIAL_DATA, or COLLECTION) + * @returns True if exactly one data type flag is set + */ + hasDataTypeSet(): boolean; + /** + * Checks if exactly one request type flag is set (ATTESTATION, CLAIM, or CREDENTIAL) + * @returns True if exactly one request type flag is set + */ + hasRequestTypeSet(): boolean; + isValid(): boolean; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): UserDataRequestJson; + static fromJson(json: UserDataRequestJson): UserDataRequestDetails; +} diff --git a/dist/vdxf/classes/requestobjects/UserDataRequestDetails.js b/dist/vdxf/classes/requestobjects/UserDataRequestDetails.js new file mode 100644 index 00000000..15764109 --- /dev/null +++ b/dist/vdxf/classes/requestobjects/UserDataRequestDetails.js @@ -0,0 +1,214 @@ +"use strict"; +/** + * InformationRequest - Class for handling application requests for specific user information/data + * + * This class is used when an application is requesting specific information or data from the user's + * identity or data stores. The request includes: + * - Search data keys (VDXF keys) to identify the specific data being requested + * - Optional specific keys within the data object for partial data requests + * - Signer information to identify wanted signer of the data + * - Optional statement for boundhashes in the signature + * + * The user's wallet can use these parameters to locate the signed object information and present + * it to the user for approval before sharing with the requesting application. This enables + * selective disclosure of personal information while maintaining user privacy and control. + * + * Flags determine the type and scope of the request: + * - FULL_DATA vs PARTIAL_DATA: Whether complete objects or specific fields are requested + * - COLLECTION: Whether multiple data objects are being requested + * - HAS_STATEMENT: Whether the request includes an attestation statement + * - ATTESTATION/CLAIM/CREDENTIAL: Type of verification being requested + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UserDataRequestDetails = void 0; +const bn_js_1 = require("bn.js"); +const varuint_1 = require("../../../utils/varuint"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const CompactAddressObject_1 = require("../CompactAddressObject"); +const address_1 = require("../../../utils/address"); +const vdxf_1 = require("../../../constants/vdxf"); +class UserDataRequestDetails { + constructor(data) { + this.version = (data === null || data === void 0 ? void 0 : data.version) || UserDataRequestDetails.DEFAULT_VERSION; + this.flags = (data === null || data === void 0 ? void 0 : data.flags) || new bn_js_1.BN(0); + this.searchDataKey = (data === null || data === void 0 ? void 0 : data.searchDataKey) || []; + this.signer = data === null || data === void 0 ? void 0 : data.signer; + this.requestedKeys = data === null || data === void 0 ? void 0 : data.requestedKeys; + this.requestID = data === null || data === void 0 ? void 0 : data.requestID; + this.setFlags(); + } + calcFlags() { + let flags = new bn_js_1.BN(0); + if (this.requestedKeys && this.requestedKeys.length > 0) { + flags = flags.or(UserDataRequestDetails.HAS_REQUESTED_KEYS); + } + if (this.signer) { + flags = flags.or(UserDataRequestDetails.HAS_SIGNER); + } + if (this.requestID) { + flags = flags.or(UserDataRequestDetails.HAS_REQUEST_ID); + } + return flags; + } + setFlags() { + this.flags = this.calcFlags(); + } + hasSigner() { + return this.flags.and(UserDataRequestDetails.HAS_SIGNER).eq(UserDataRequestDetails.HAS_SIGNER); + } + hasRequestedKeys() { + return this.flags.and(UserDataRequestDetails.HAS_REQUESTED_KEYS).eq(UserDataRequestDetails.HAS_REQUESTED_KEYS); + } + hasRequestID() { + return this.flags.and(UserDataRequestDetails.HAS_REQUEST_ID).eq(UserDataRequestDetails.HAS_REQUEST_ID); + } + /** + * Checks if exactly one data type flag is set (FULL_DATA, PARTIAL_DATA, or COLLECTION) + * @returns True if exactly one data type flag is set + */ + hasDataTypeSet() { + const dataTypeFlags = UserDataRequestDetails.FULL_DATA.or(UserDataRequestDetails.PARTIAL_DATA).or(UserDataRequestDetails.COLLECTION); + const setDataFlags = this.flags.and(dataTypeFlags); + // Check if exactly one flag is set by verifying it's a power of 2 + return !setDataFlags.isZero() && setDataFlags.and(setDataFlags.sub(new bn_js_1.BN(1))).isZero(); + } + /** + * Checks if exactly one request type flag is set (ATTESTATION, CLAIM, or CREDENTIAL) + * @returns True if exactly one request type flag is set + */ + hasRequestTypeSet() { + const requestTypeFlags = UserDataRequestDetails.ATTESTATION.or(UserDataRequestDetails.CLAIM).or(UserDataRequestDetails.CREDENTIAL); + const setRequestFlags = this.flags.and(requestTypeFlags); + // Check if exactly one flag is set by verifying it's a power of 2 + return !setRequestFlags.isZero() && setRequestFlags.and(setRequestFlags.sub(new bn_js_1.BN(1))).isZero(); + } + isValid() { + let valid = this.version.gte(UserDataRequestDetails.FIRST_VERSION) && this.version.lte(UserDataRequestDetails.LAST_VERSION); + // Check that exactly one data type flag is set + valid && (valid = this.hasDataTypeSet()); + // Check that exactly one request type flag is set + valid && (valid = this.hasRequestTypeSet()); + // Check that searchDataKey is present + valid && (valid = Object.keys(this.searchDataKey).length > 0); + return valid; + } + getByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.flags.toNumber()); + length += varuint_1.default.encodingLength(this.searchDataKey.length); + for (const item of this.searchDataKey) { + const key = Object.keys(item)[0]; + const value = item[key]; + length += vdxf_1.HASH160_BYTE_LENGTH; + length += varuint_1.default.encodingLength(Buffer.byteLength(value, 'utf8')); + length += Buffer.byteLength(value, 'utf8'); + } + if (this.hasSigner()) { + length += this.signer.getByteLength(); + } + if (this.hasRequestedKeys()) { + length += varuint_1.default.encodingLength(this.requestedKeys ? this.requestedKeys.length : 0); + if (this.requestedKeys) { + for (const key of this.requestedKeys) { + length += vdxf_1.HASH160_BYTE_LENGTH; + } + } + } + if (this.hasRequestID()) { + length += vdxf_1.HASH160_BYTE_LENGTH; + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeCompactSize(this.flags.toNumber()); + writer.writeCompactSize(this.searchDataKey.length); + for (const item of this.searchDataKey) { + const key = Object.keys(item)[0]; + const value = item[key]; + writer.writeSlice((0, address_1.fromBase58Check)(key).hash); // 20-byte VDXF key + writer.writeVarSlice(Buffer.from(value, 'utf8')); + } + if (this.hasSigner()) { + writer.writeSlice(this.signer.toBuffer()); + } + if (this.hasRequestedKeys()) { + writer.writeCompactSize(this.requestedKeys.length); + for (const key of this.requestedKeys) { + writer.writeSlice((0, address_1.fromBase58Check)(key).hash); // 20-byte VDXF key + } + } + if (this.hasRequestID()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new BufferReader(buffer, offset); + this.flags = new bn_js_1.BN(reader.readCompactSize()); + const searchDataKeyLength = reader.readCompactSize(); + this.searchDataKey = []; + for (let i = 0; i < searchDataKeyLength; i++) { + const keyHash = reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH); // 20-byte VDXF key + const valueBuffer = reader.readVarSlice(); + const value = valueBuffer.toString('utf8'); + const key = (0, address_1.toBase58Check)(keyHash, vdxf_1.I_ADDR_VERSION); + this.searchDataKey.push({ [key]: value }); + } + if (this.hasSigner()) { + const signer = new CompactAddressObject_1.CompactAddressObject(); + reader.offset = signer.fromBuffer(reader.buffer, reader.offset); + this.signer = signer; + } + if (this.hasRequestedKeys()) { + const requestedKeysLength = reader.readCompactSize(); + this.requestedKeys = []; + for (let i = 0; i < requestedKeysLength; i++) { + const keyHash = reader.readSlice(20); // 20-byte VDXF key + const key = (0, address_1.toBase58Check)(keyHash, vdxf_1.I_ADDR_VERSION); + this.requestedKeys.push(key); + } + } + if (this.hasRequestID()) { + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + } + return reader.offset; + } + toJson() { + var _a; + const flags = this.calcFlags(); + return { + version: this.version.toNumber(), + flags: flags.toNumber(), + searchdatakey: this.searchDataKey, + signer: (_a = this.signer) === null || _a === void 0 ? void 0 : _a.toJson(), + requestedkeys: this.requestedKeys, + requestid: this.requestID + }; + } + static fromJson(json) { + const requestData = new UserDataRequestDetails(); + requestData.version = new bn_js_1.BN(json.version); + requestData.flags = new bn_js_1.BN(json.flags); + requestData.searchDataKey = json.searchdatakey; + requestData.signer = json.signer ? CompactAddressObject_1.CompactAddressObject.fromJson(json.signer) : undefined; + requestData.requestedKeys = json.requestedkeys; + requestData.requestID = json.requestid; + return requestData; + } +} +exports.UserDataRequestDetails = UserDataRequestDetails; +UserDataRequestDetails.VERSION_INVALID = new bn_js_1.BN(0); +UserDataRequestDetails.FIRST_VERSION = new bn_js_1.BN(1); +UserDataRequestDetails.LAST_VERSION = new bn_js_1.BN(1); +UserDataRequestDetails.DEFAULT_VERSION = new bn_js_1.BN(1); +UserDataRequestDetails.FULL_DATA = new bn_js_1.BN(1); +UserDataRequestDetails.PARTIAL_DATA = new bn_js_1.BN(2); +UserDataRequestDetails.COLLECTION = new bn_js_1.BN(4); +UserDataRequestDetails.ATTESTATION = new bn_js_1.BN(8); +UserDataRequestDetails.CLAIM = new bn_js_1.BN(16); +UserDataRequestDetails.CREDENTIAL = new bn_js_1.BN(32); +UserDataRequestDetails.HAS_SIGNER = new bn_js_1.BN(64); +UserDataRequestDetails.HAS_REQUESTED_KEYS = new bn_js_1.BN(128); +UserDataRequestDetails.HAS_REQUEST_ID = new bn_js_1.BN(256); diff --git a/dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.d.ts b/dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.d.ts new file mode 100644 index 00000000..6d52a609 --- /dev/null +++ b/dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.d.ts @@ -0,0 +1,69 @@ +/** + * UserSpecificDataPacketDetails - Class for sending personal data to user or requesting the user + * signature on personal data + * + * This class is used when an application is requesting to transfer or receive personal + * user data. The request includes: + * - Data objects as DataDescriptor instances containing the user's personal data + * - Optional statements array for additional context or transfer conditions + * - Optional signature data for verification of the transfer + * - Flags indicating transfer direction and optional components + * + * The user's wallet can use these parameters to present the data transfer request + * to the user, showing what personal data is being transferred, any associated + * statements or conditions, and whether it's for the user's signature or being + * transmitted to/from the user. This enables secure, user-controlled personal + * data sharing with clear visibility into what data is being transferred. + * + + */ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { DataDescriptor, DataDescriptorJson } from '../../../pbaas'; +import { VerifiableSignatureData, VerifiableSignatureDataJson } from '../VerifiableSignatureData'; +export interface UserSpecificDataPacketDetailsInterface { + version?: BigNumber; + flags: BigNumber; + signableObjects: Array; + statements?: Array; + signature?: VerifiableSignatureData; + detailsID?: string; +} +export interface UserSpecificDataPacketDetailsJson { + version: number; + flags: number; + signableobjects: Array; + statements?: Array; + signature?: VerifiableSignatureDataJson; + detailsid?: string; +} +export declare class UserSpecificDataPacketDetails implements SerializableEntity { + static VERSION_INVALID: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static DEFAULT_VERSION: import("bn.js"); + static HAS_STATEMENTS: import("bn.js"); + static HAS_SIGNATURE: import("bn.js"); + static FOR_USERS_SIGNATURE: import("bn.js"); + static FOR_TRANSMITTAL_TO_USER: import("bn.js"); + static HAS_URL_FOR_DOWNLOAD: import("bn.js"); + static HAS_DETAILS_ID: import("bn.js"); + version: BigNumber; + flags: BigNumber; + signableObjects: Array; + statements?: Array; + signature?: VerifiableSignatureData; + detailsID?: string; + constructor(data?: UserSpecificDataPacketDetailsInterface); + setFlags(): void; + calcFlags(): BigNumber; + hasStatements(): boolean; + hasSignature(): boolean; + hasDetailsID(): boolean; + isValid(): boolean; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): UserSpecificDataPacketDetailsJson; + static fromJson(json: UserSpecificDataPacketDetailsJson): UserSpecificDataPacketDetails; +} diff --git a/dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.js b/dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.js new file mode 100644 index 00000000..a4d68238 --- /dev/null +++ b/dist/vdxf/classes/requestobjects/UserSpecificDataPacketDetails.js @@ -0,0 +1,195 @@ +"use strict"; +/** + * UserSpecificDataPacketDetails - Class for sending personal data to user or requesting the user + * signature on personal data + * + * This class is used when an application is requesting to transfer or receive personal + * user data. The request includes: + * - Data objects as DataDescriptor instances containing the user's personal data + * - Optional statements array for additional context or transfer conditions + * - Optional signature data for verification of the transfer + * - Flags indicating transfer direction and optional components + * + * The user's wallet can use these parameters to present the data transfer request + * to the user, showing what personal data is being transferred, any associated + * statements or conditions, and whether it's for the user's signature or being + * transmitted to/from the user. This enables secure, user-controlled personal + * data sharing with clear visibility into what data is being transferred. + * + + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UserSpecificDataPacketDetails = void 0; +const bn_js_1 = require("bn.js"); +const varuint_1 = require("../../../utils/varuint"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const pbaas_1 = require("../../../pbaas"); +const VerifiableSignatureData_1 = require("../VerifiableSignatureData"); +const address_1 = require("../../../utils/address"); +const vdxf_1 = require("../../../constants/vdxf"); +// User_specific_data_packet +class UserSpecificDataPacketDetails { + constructor(data) { + this.version = (data === null || data === void 0 ? void 0 : data.version) || UserSpecificDataPacketDetails.DEFAULT_VERSION; + this.flags = (data === null || data === void 0 ? void 0 : data.flags) || new bn_js_1.BN(0); + this.signableObjects = (data === null || data === void 0 ? void 0 : data.signableObjects) || []; + this.statements = (data === null || data === void 0 ? void 0 : data.statements) || []; + this.signature = (data === null || data === void 0 ? void 0 : data.signature) || undefined; + this.detailsID = data === null || data === void 0 ? void 0 : data.detailsID; + this.setFlags(); + } + setFlags() { + this.flags = this.calcFlags(); + } + calcFlags() { + let flags = new bn_js_1.BN(0); + if (this.statements && this.statements.length > 0) { + flags = flags.or(UserSpecificDataPacketDetails.HAS_STATEMENTS); + } + if (this.signature) { + flags = flags.or(UserSpecificDataPacketDetails.HAS_SIGNATURE); + } + if (this.detailsID) { + flags = flags.or(UserSpecificDataPacketDetails.HAS_DETAILS_ID); + } + return flags; + } + hasStatements() { + return this.flags.and(UserSpecificDataPacketDetails.HAS_STATEMENTS).eq(UserSpecificDataPacketDetails.HAS_STATEMENTS); + } + hasSignature() { + return this.flags.and(UserSpecificDataPacketDetails.HAS_SIGNATURE).eq(UserSpecificDataPacketDetails.HAS_SIGNATURE); + } + hasDetailsID() { + return this.flags.and(UserSpecificDataPacketDetails.HAS_DETAILS_ID).eq(UserSpecificDataPacketDetails.HAS_DETAILS_ID); + } + isValid() { + let valid = this.version.gte(UserSpecificDataPacketDetails.FIRST_VERSION) && + this.version.lte(UserSpecificDataPacketDetails.LAST_VERSION); + // Check that we have signable objects + valid && (valid = this.signableObjects.length > 0); + if (this.hasStatements()) { + valid && (valid = this.statements !== undefined && this.statements.length > 0); + } + if (this.hasSignature()) { + valid && (valid = this.signature !== undefined); // TODO: && this.signature.isValid(); + } + return valid; + } + getByteLength() { + let length = 0; + length += varuint_1.default.encodingLength(this.flags.toNumber()); + // Add length for signableObjects array + length += varuint_1.default.encodingLength(this.signableObjects.length); + for (const obj of this.signableObjects) { + length += obj.getByteLength(); + } + // Add signer length if present + if (this.hasStatements()) { + length += varuint_1.default.encodingLength(this.statements.length); + for (const stmt of this.statements) { + length += varuint_1.default.encodingLength(Buffer.byteLength(stmt, 'utf8')); + length += Buffer.byteLength(stmt, 'utf8'); + } + } + if (this.hasSignature() && this.signature) { + length += this.signature.getByteLength(); + } + if (this.hasDetailsID()) { + length += vdxf_1.HASH160_BYTE_LENGTH; + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeCompactSize(this.flags.toNumber()); + // Write signableObjects array + writer.writeCompactSize(this.signableObjects.length); + for (const obj of this.signableObjects) { + writer.writeSlice(obj.toBuffer()); + } + // Write statements if present + if (this.hasStatements()) { + writer.writeCompactSize(this.statements.length); + for (const stmt of this.statements) { + writer.writeVarSlice(Buffer.from(stmt, 'utf8')); + } + } + if (this.hasSignature() && this.signature) { + writer.writeSlice(this.signature.toBuffer()); + } + if (this.hasDetailsID()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.detailsID).hash); + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new BufferReader(buffer, offset); + this.flags = new bn_js_1.BN(reader.readCompactSize()); + // Read signableObjects array + const objectCount = reader.readCompactSize(); + this.signableObjects = []; + for (let i = 0; i < objectCount; i++) { + const obj = new pbaas_1.DataDescriptor(); + reader.offset = obj.fromBuffer(reader.buffer, reader.offset); + this.signableObjects.push(obj); + } + // Read statements if flag is set + if (this.hasStatements()) { + this.statements = []; + const statementCount = reader.readCompactSize(); + for (let i = 0; i < statementCount; i++) { + const stmt = reader.readVarSlice().toString('utf8'); + this.statements.push(stmt); + } + } + if (this.hasSignature()) { + const signature = new VerifiableSignatureData_1.VerifiableSignatureData(); + reader.offset = signature.fromBuffer(reader.buffer, reader.offset); + this.signature = signature; + } + if (this.hasDetailsID()) { + this.detailsID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + } + return reader.offset; + } + toJson() { + const flags = this.calcFlags(); + return { + version: this.version.toNumber(), + flags: flags.toNumber(), + signableobjects: this.signableObjects.map(obj => obj.toJson()), + statements: this.statements, + signature: this.signature ? this.signature.toJson() : undefined, + detailsid: this.detailsID + }; + } + static fromJson(json) { + const instance = new UserSpecificDataPacketDetails(); + instance.version = new bn_js_1.BN(json.version); + instance.flags = new bn_js_1.BN(json.flags); + const dataDescriptorObjects = []; + for (const objJson of json.signableobjects) { + const dataDescriptor = pbaas_1.DataDescriptor.fromJson(objJson); + dataDescriptorObjects.push(dataDescriptor); + } + instance.signableObjects = dataDescriptorObjects; + instance.statements = json.statements || []; + instance.signature = json.signature ? VerifiableSignatureData_1.VerifiableSignatureData.fromJson(json.signature) : undefined; + instance.detailsID = json.detailsid; + return instance; + } +} +exports.UserSpecificDataPacketDetails = UserSpecificDataPacketDetails; +UserSpecificDataPacketDetails.VERSION_INVALID = new bn_js_1.BN(0); +UserSpecificDataPacketDetails.FIRST_VERSION = new bn_js_1.BN(1); +UserSpecificDataPacketDetails.LAST_VERSION = new bn_js_1.BN(1); +UserSpecificDataPacketDetails.DEFAULT_VERSION = new bn_js_1.BN(1); +// types of data to sign +UserSpecificDataPacketDetails.HAS_STATEMENTS = new bn_js_1.BN(1); +UserSpecificDataPacketDetails.HAS_SIGNATURE = new bn_js_1.BN(2); +UserSpecificDataPacketDetails.FOR_USERS_SIGNATURE = new bn_js_1.BN(4); +UserSpecificDataPacketDetails.FOR_TRANSMITTAL_TO_USER = new bn_js_1.BN(8); +UserSpecificDataPacketDetails.HAS_URL_FOR_DOWNLOAD = new bn_js_1.BN(16); +UserSpecificDataPacketDetails.HAS_DETAILS_ID = new bn_js_1.BN(32); diff --git a/dist/vdxf/classes/response/AppEncryptionResponseDetails.d.ts b/dist/vdxf/classes/response/AppEncryptionResponseDetails.d.ts new file mode 100644 index 00000000..e204655b --- /dev/null +++ b/dist/vdxf/classes/response/AppEncryptionResponseDetails.d.ts @@ -0,0 +1,45 @@ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { SaplingPaymentAddress } from '../../../pbaas'; +import { SaplingExtendedSpendingKey } from '../../../pbaas/SaplingExtendedSpendingKey'; +import { SaplingExtendedViewingKey } from '../../../pbaas/SaplingExtendedViewingKey'; +export interface AppEncryptionResponseDetailsInterface { + version: BigNumber; + flags?: BigNumber; + requestID?: string; + IncomingViewingKey: Buffer; + extendedViewingKey: SaplingExtendedViewingKey; + address: SaplingPaymentAddress; + extendedSpendingKey?: SaplingExtendedSpendingKey; +} +export interface AppEncryptionResponseDetailsJson { + version: number; + flags?: number; + requestid?: string; + incomingviewingkey: string; + extendedviewingkey: string; + address: string; + extendedspendingkey?: string; +} +export declare class AppEncryptionResponseDetails implements SerializableEntity { + version: BigNumber; + flags: BigNumber; + requestID?: string; + IncomingViewingKey: Buffer; + extendedViewingKey: SaplingExtendedViewingKey; + address: SaplingPaymentAddress; + extendedSpendingKey?: SaplingExtendedSpendingKey; + static RESPONSE_CONTAINS_REQUEST_ID: import("bn.js"); + static RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY: import("bn.js"); + constructor(data?: AppEncryptionResponseDetailsInterface); + containsRequestID(): boolean; + toggleContainsRequestID(): void; + containsExtendedSpendingKey(): boolean; + toggleContainsExtendedSpendingKey(): void; + toSha256(): Buffer; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): AppEncryptionResponseDetailsJson; + static fromJson(json: AppEncryptionResponseDetailsJson): AppEncryptionResponseDetails; +} diff --git a/dist/vdxf/classes/response/AppEncryptionResponseDetails.js b/dist/vdxf/classes/response/AppEncryptionResponseDetails.js new file mode 100644 index 00000000..c0899c15 --- /dev/null +++ b/dist/vdxf/classes/response/AppEncryptionResponseDetails.js @@ -0,0 +1,119 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AppEncryptionResponseDetails = void 0; +const bn_js_1 = require("bn.js"); +const varint_1 = require("../../../utils/varint"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const address_1 = require("../../../utils/address"); +const vdxf_1 = require("../../../constants/vdxf"); +const pbaas_1 = require("../../../pbaas"); +const createHash = require("create-hash"); +const SaplingExtendedSpendingKey_1 = require("../../../pbaas/SaplingExtendedSpendingKey"); +const SaplingExtendedViewingKey_1 = require("../../../pbaas/SaplingExtendedViewingKey"); +class AppEncryptionResponseDetails { + constructor(data) { + var _a, _b, _c, _d, _e; + this.version = (_a = data === null || data === void 0 ? void 0 : data.version) !== null && _a !== void 0 ? _a : new bn_js_1.BN(1); + this.flags = (_b = data === null || data === void 0 ? void 0 : data.flags) !== null && _b !== void 0 ? _b : new bn_js_1.BN(0, 10); + this.IncomingViewingKey = (_c = data === null || data === void 0 ? void 0 : data.IncomingViewingKey) !== null && _c !== void 0 ? _c : Buffer.alloc(32); + this.extendedViewingKey = (_d = data === null || data === void 0 ? void 0 : data.extendedViewingKey) !== null && _d !== void 0 ? _d : new SaplingExtendedViewingKey_1.SaplingExtendedViewingKey(); + this.address = (_e = data === null || data === void 0 ? void 0 : data.address) !== null && _e !== void 0 ? _e : new pbaas_1.SaplingPaymentAddress(); + if (data === null || data === void 0 ? void 0 : data.requestID) { + if (!this.containsRequestID()) + this.toggleContainsRequestID(); + this.requestID = data.requestID; + } + if (data === null || data === void 0 ? void 0 : data.extendedSpendingKey) { + if (!this.containsExtendedSpendingKey()) + this.toggleContainsExtendedSpendingKey(); + this.extendedSpendingKey = data.extendedSpendingKey; + } + } + containsRequestID() { + return !!(this.flags.and(AppEncryptionResponseDetails.RESPONSE_CONTAINS_REQUEST_ID).toNumber()); + } + toggleContainsRequestID() { + this.flags = this.flags.xor(AppEncryptionResponseDetails.RESPONSE_CONTAINS_REQUEST_ID); + } + containsExtendedSpendingKey() { + return !!(this.flags.and(AppEncryptionResponseDetails.RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY).toNumber()); + } + toggleContainsExtendedSpendingKey() { + this.flags = this.flags.xor(AppEncryptionResponseDetails.RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY); + } + toSha256() { + return createHash("sha256").update(this.toBuffer()).digest(); + } + getByteLength() { + let length = 0; + length += varint_1.default.encodingLength(this.flags); + if (this.containsRequestID()) { + length += vdxf_1.HASH160_BYTE_LENGTH; + } + length += 32; // IncomingViewingKey + length += this.extendedViewingKey.getByteLength(); + length += this.address.getByteLength(); + if (this.containsExtendedSpendingKey()) { + length += this.extendedSpendingKey.getByteLength(); + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeVarInt(this.flags); + if (this.containsRequestID()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + } + writer.writeSlice(this.IncomingViewingKey); + writer.writeSlice(this.extendedViewingKey.toBuffer()); + writer.writeSlice(this.address.toBuffer()); + if (this.containsExtendedSpendingKey()) { + writer.writeSlice(this.extendedSpendingKey.toBuffer()); + } + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.flags = reader.readVarInt(); + if (this.containsRequestID()) { + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + } + this.IncomingViewingKey = reader.readSlice(32); + this.extendedViewingKey = new SaplingExtendedViewingKey_1.SaplingExtendedViewingKey(); + reader.offset = this.extendedViewingKey.fromBuffer(reader.buffer, reader.offset); + this.address = new pbaas_1.SaplingPaymentAddress(); + reader.offset = this.address.fromBuffer(reader.buffer, reader.offset); + if (this.containsExtendedSpendingKey()) { + this.extendedSpendingKey = new SaplingExtendedSpendingKey_1.SaplingExtendedSpendingKey(); + reader.offset = this.extendedSpendingKey.fromBuffer(reader.buffer, reader.offset); + } + return reader.offset; + } + toJson() { + return { + version: this.version.toNumber(), + flags: this.flags.toNumber(), + requestid: this.containsRequestID() ? this.requestID : undefined, + incomingviewingkey: this.IncomingViewingKey.toString('hex'), + extendedviewingkey: this.extendedViewingKey.toKeyString(), + address: this.address.toAddressString(), + extendedspendingkey: this.containsExtendedSpendingKey() ? this.extendedSpendingKey.toKeyString() : undefined + }; + } + static fromJson(json) { + var _a; + return new AppEncryptionResponseDetails({ + version: new bn_js_1.BN(json.version, 10), + flags: new bn_js_1.BN((_a = json.flags) !== null && _a !== void 0 ? _a : 0, 10), + requestID: json.requestid, + IncomingViewingKey: Buffer.from(json.incomingviewingkey, 'hex'), + extendedViewingKey: SaplingExtendedViewingKey_1.SaplingExtendedViewingKey.fromKeyString(json.extendedviewingkey), + address: pbaas_1.SaplingPaymentAddress.fromAddressString(json.address), + extendedSpendingKey: json.extendedspendingkey ? SaplingExtendedSpendingKey_1.SaplingExtendedSpendingKey.fromKeyString(json.extendedspendingkey) : undefined + }); + } +} +exports.AppEncryptionResponseDetails = AppEncryptionResponseDetails; +AppEncryptionResponseDetails.RESPONSE_CONTAINS_REQUEST_ID = new bn_js_1.BN(1, 10); +AppEncryptionResponseDetails.RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY = new bn_js_1.BN(2, 10); diff --git a/dist/vdxf/classes/response/GenericResponse.d.ts b/dist/vdxf/classes/response/GenericResponse.d.ts new file mode 100644 index 00000000..b234f8c0 --- /dev/null +++ b/dist/vdxf/classes/response/GenericResponse.d.ts @@ -0,0 +1,33 @@ +import { SerializableEntity } from "../../../utils/types/SerializableEntity"; +import { GenericEnvelope, GenericEnvelopeInterface, GenericEnvelopeJson } from "../envelope/GenericEnvelope"; +import { BigNumber } from '../../../utils/types/BigNumber'; +export type GenericResponseJson = GenericEnvelopeJson & { + requesthash?: string; + requesthashtype?: number; +}; +export type GenericResponseInterface = GenericEnvelopeInterface & { + requestHash?: Buffer; + requestHashType?: BigNumber; +}; +export declare class GenericResponse extends GenericEnvelope implements SerializableEntity { + requestHash?: Buffer; + requestHashType?: BigNumber; + static VERSION_CURRENT: import("bn.js"); + static VERSION_FIRSTVALID: import("bn.js"); + static VERSION_LASTVALID: import("bn.js"); + static BASE_FLAGS: import("bn.js"); + static FLAG_SIGNED: import("bn.js"); + static FLAG_HAS_CREATED_AT: import("bn.js"); + static FLAG_MULTI_DETAILS: import("bn.js"); + static FLAG_IS_TESTNET: import("bn.js"); + static FLAG_HAS_SALT: import("bn.js"); + static FLAG_HAS_REQUEST_HASH: import("bn.js"); + constructor(envelope?: GenericResponseInterface); + hasRequestHash(): boolean; + setHasRequestHash(): void; + setFlags(): void; + getByteLengthOptionalSig(includeSig?: boolean): number; + protected toBufferOptionalSig(includeSig?: boolean): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): GenericResponseJson; +} diff --git a/dist/vdxf/classes/response/GenericResponse.js b/dist/vdxf/classes/response/GenericResponse.js new file mode 100644 index 00000000..e935907c --- /dev/null +++ b/dist/vdxf/classes/response/GenericResponse.js @@ -0,0 +1,83 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GenericResponse = void 0; +const bn_js_1 = require("bn.js"); +const GenericEnvelope_1 = require("../envelope/GenericEnvelope"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const DataDescriptor_1 = require("../../../pbaas/DataDescriptor"); +const varuint_1 = require("../../../utils/varuint"); +class GenericResponse extends GenericEnvelope_1.GenericEnvelope { + constructor(envelope = { + details: [], + flags: GenericResponse.BASE_FLAGS + }) { + super(envelope); + this.requestHash = envelope.requestHash; + this.setFlags(); + this.requestHashType = envelope.requestHashType; + if (this.requestHashType == null && this.hasRequestHash()) { + this.requestHashType = new bn_js_1.BN(DataDescriptor_1.EHashTypes.HASH_SHA256); + } + } + hasRequestHash() { + return !!(this.flags.and(GenericResponse.FLAG_HAS_REQUEST_HASH).toNumber()); + } + setHasRequestHash() { + this.flags = this.flags.or(GenericResponse.FLAG_HAS_REQUEST_HASH); + } + setFlags() { + super.setFlags(); + if (this.requestHash) + this.setHasRequestHash(); + } + getByteLengthOptionalSig(includeSig = true) { + let length = super.getByteLengthOptionalSig(includeSig); + if (this.hasRequestHash()) { + const hashLen = this.requestHash.length; + length += varuint_1.default.encodingLength(this.requestHashType.toNumber()); + length += varuint_1.default.encodingLength(this.requestHash.length); + length += hashLen; + } + return length; + } + toBufferOptionalSig(includeSig = true) { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLengthOptionalSig(includeSig))); + const superBuf = super.toBufferOptionalSig(includeSig); + writer.writeSlice(superBuf); + if (this.hasRequestHash()) { + writer.writeCompactSize(this.requestHashType.toNumber()); + writer.writeVarSlice(this.requestHash); + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + if (buffer.length == 0) + throw new Error("Cannot create response from empty buffer"); + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + reader.offset = super.fromBuffer(reader.buffer, reader.offset); + if (this.hasRequestHash()) { + this.requestHashType = new bn_js_1.BN(reader.readCompactSize()); + this.requestHash = reader.readVarSlice(); + } + return reader.offset; + } + toJson() { + const parentJson = super.toJson(); + if (this.hasRequestHash()) { + parentJson["requesthash"] = this.requestHash.toString('hex'); + parentJson["requesthashtype"] = this.requestHashType.toNumber(); + } + return parentJson; + } +} +exports.GenericResponse = GenericResponse; +GenericResponse.VERSION_CURRENT = new bn_js_1.BN(1, 10); +GenericResponse.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); +GenericResponse.VERSION_LASTVALID = new bn_js_1.BN(1, 10); +GenericResponse.BASE_FLAGS = GenericEnvelope_1.GenericEnvelope.BASE_FLAGS; +GenericResponse.FLAG_SIGNED = GenericEnvelope_1.GenericEnvelope.FLAG_SIGNED; +GenericResponse.FLAG_HAS_CREATED_AT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_CREATED_AT; +GenericResponse.FLAG_MULTI_DETAILS = GenericEnvelope_1.GenericEnvelope.FLAG_MULTI_DETAILS; +GenericResponse.FLAG_IS_TESTNET = GenericEnvelope_1.GenericEnvelope.FLAG_IS_TESTNET; +GenericResponse.FLAG_HAS_SALT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_SALT; +GenericResponse.FLAG_HAS_REQUEST_HASH = new bn_js_1.BN(32, 10); diff --git a/dist/vdxf/identitydatakeys.d.ts b/dist/vdxf/identitydatakeys.d.ts new file mode 100644 index 00000000..7c9f4515 --- /dev/null +++ b/dist/vdxf/identitydatakeys.d.ts @@ -0,0 +1,184 @@ +import { VDXFKeyInterface } from "./keys"; +export declare const IDENTITY_ACCOUNT_ID: VDXFKeyInterface; +export declare const IDENTITY_ACCOUNT_USERID: VDXFKeyInterface; +export declare const IDENTITY_ACCOUNT_CREATEDAT: VDXFKeyInterface; +export declare const IDENTITY_ACCOUNT_COMPLETEDAT: VDXFKeyInterface; +export declare const IDENTITY_ACCOUNT_PREVIOUSATTEMPTID: VDXFKeyInterface; +export declare const IDENTITY_ACCOUNT_SHAREABLEURL: VDXFKeyInterface; +export declare const IDENTITY_ACCOUNT_TEMPLATEID: VDXFKeyInterface; +export declare const IDENTITY_ACCOUNT_TEMPLATEVERSION: VDXFKeyInterface; +export declare const IDENTITY_ACCOUNT_STATUS: VDXFKeyInterface; +export declare const IDENTITY_PHONENUMBER: VDXFKeyInterface; +export declare const IDENTITY_DATEOFBIRTH: VDXFKeyInterface; +export declare const IDENTITY_OVER18: VDXFKeyInterface; +export declare const IDENTITY_OVER21: VDXFKeyInterface; +export declare const IDENTITY_OVER25: VDXFKeyInterface; +export declare const IDENTITY_ACCOUNT_REQUESTING_IPADDRESS: VDXFKeyInterface; +export declare const IDENTITY_EMAIL: VDXFKeyInterface; +export declare const IDENTITY_NATIONALITY: VDXFKeyInterface; +export declare const IDENTITY_FIRSTNAME: VDXFKeyInterface; +export declare const IDENTITY_MIDDLENAME: VDXFKeyInterface; +export declare const IDENTITY_LASTNAME: VDXFKeyInterface; +export declare const IDENTITY_GENDER: VDXFKeyInterface; +export declare const IDENTITY_HEIGHT: VDXFKeyInterface; +export declare const IDENTITY_EYECOLOR: VDXFKeyInterface; +export declare const IDENTITY_ETHNICITY: VDXFKeyInterface; +export declare const IDENTITY_WEIGHT: VDXFKeyInterface; +export declare const IDENTITY_HOMEADDRESS: VDXFKeyInterface; +export declare const IDENTITY_HOMEADDRESS_STREET1: VDXFKeyInterface; +export declare const IDENTITY_HOMEADDRESS_STREET2: VDXFKeyInterface; +export declare const IDENTITY_HOMEADDRESS_CITY: VDXFKeyInterface; +export declare const IDENTITY_HOMEADDRESS_REGION: VDXFKeyInterface; +export declare const IDENTITY_HOMEADDRESS_POSTCODE: VDXFKeyInterface; +export declare const IDENTITY_HOMEADDRESS_COUNTRY: VDXFKeyInterface; +export declare const IDENTITY_IDNUMBER_VALUE: VDXFKeyInterface; +export declare const IDENTITY_IDNUMBER_TYPE: VDXFKeyInterface; +export declare const IDENTITY_VERIFICATION_STATUS: VDXFKeyInterface; +export declare const IDENTITY_VERIFICATION_APPROVALS: VDXFKeyInterface; +export declare const IDENTITY_VERIFICATION_APPROVALS_ACCEPTEDTOS: VDXFKeyInterface; +export declare const IDENTITY_VERIFICATION_APPROVALS_VERIFIEDSMS: VDXFKeyInterface; +export declare const IDENTITY_VERIFICATION_APPROVALS_KYCCHECKED: VDXFKeyInterface; +export declare const IDENTITY_VERIFICATION_APPROVALS_DOCUMENTSVERIFIED: VDXFKeyInterface; +export declare const IDENTITY_VERIFICATION_APPROVALS_SELFIECHECKED: VDXFKeyInterface; +export declare const IDENTITY_VERIFICATION_APPROVALS_WATCHLISTOK: VDXFKeyInterface; +export declare const IDENTITY_VERIFICATION_APPROVALS_RISKCHECKOK: VDXFKeyInterface; +export declare const IDENTITY_VERIFICATION_APPROVALS_STATUS: VDXFKeyInterface; +export declare const IDENTITY_DRIVINGLICENCE: VDXFKeyInterface; +export declare const IDENTITY_DRIVINGLICENCE_ORIGINALFRONT: VDXFKeyInterface; +export declare const IDENTITY_DRIVINGLICENCE_ORIGINALBACK: VDXFKeyInterface; +export declare const IDENTITY_DRIVINGLICENCE_CROPPEDFRONT: VDXFKeyInterface; +export declare const IDENTITY_DRIVINGLICENCE_CROPPEDBACK: VDXFKeyInterface; +export declare const IDENTITY_DRIVINGLICENCE_FACE: VDXFKeyInterface; +export declare const IDENTITY_DRIVINGLICENCE_IDNUMBER: VDXFKeyInterface; +export declare const IDENTITY_DRIVINGLICENCE_CATEGORY: VDXFKeyInterface; +export declare const IDENTITY_DRIVINGLICENCE_EXPIRATIONDATE: VDXFKeyInterface; +export declare const IDENTITY_DRIVINGLICENCE_ISSUINGCOUNTRY: VDXFKeyInterface; +export declare const IDENTITY_DRIVINGLICENCE_ISSUINGREGION: VDXFKeyInterface; +export declare const IDENTITY_DRIVINGLICENCE_DATEOFBIRTH: VDXFKeyInterface; +export declare const IDENTITY_DRIVINGLICENCE_ADDRESS_STREET1: VDXFKeyInterface; +export declare const IDENTITY_DRIVINGLICENCE_ADDRESS_CITY: VDXFKeyInterface; +export declare const IDENTITY_DRIVINGLICENCE_ADDRESS_REGION: VDXFKeyInterface; +export declare const IDENTITY_DRIVINGLICENCE_ADDRESS_POSTCODE: VDXFKeyInterface; +export declare const IDENTITY_DRIVINGLICENCE_ADDRESS_COUNTRY: VDXFKeyInterface; +export declare const IDENTITY_SELFIECHECK_IMAGE: VDXFKeyInterface; +export declare const IDENTITY_SELFIECHECK_VIDEO: VDXFKeyInterface; +export declare const IDENTITY_EMAIL_ISDELIVERABLE: VDXFKeyInterface; +export declare const IDENTITY_EMAIL_BREACHCOUNT: VDXFKeyInterface; +export declare const IDENTITY_EMAIL_FIRSTBREACHEDAT: VDXFKeyInterface; +export declare const IDENTITY_EMAIL_LASTBREACHEDAT: VDXFKeyInterface; +export declare const IDENTITY_EMAIL_DOMAIN_REGISTEREDAT: VDXFKeyInterface; +export declare const IDENTITY_EMAIL_DOMAIN_FREEPROVIDER: VDXFKeyInterface; +export declare const IDENTITY_EMAIL_DOMAIN_CUSTOM: VDXFKeyInterface; +export declare const IDENTITY_EMAIL_DOMAIN_DISPOSABLE: VDXFKeyInterface; +export declare const IDENTITY_EMAIL_DOMAIN_TOPLEVEL_SUSPICIOUS: VDXFKeyInterface; +export declare const IDENTITY_PASSPORT: VDXFKeyInterface; +export declare const IDENTITY_PASSPORT_ORIGINALFRONT: VDXFKeyInterface; +export declare const IDENTITY_PASSPORT_ORIGINALBACK: VDXFKeyInterface; +export declare const IDENTITY_PASSPORT_CROPPEDFRONT: VDXFKeyInterface; +export declare const IDENTITY_PASSPORT_CROPPEDBACK: VDXFKeyInterface; +export declare const IDENTITY_PASSPORT_FACE: VDXFKeyInterface; +export declare const IDENTITY_PASSPORT_IDNUMBER: VDXFKeyInterface; +export declare const IDENTITY_PASSPORT_CATEGORY: VDXFKeyInterface; +export declare const IDENTITY_PASSPORT_EXPIRATIONDATE: VDXFKeyInterface; +export declare const IDENTITY_PASSPORT_ISSUINGCOUNTRY: VDXFKeyInterface; +export declare const IDENTITY_PASSPORT_ISSUINGREGION: VDXFKeyInterface; +export declare const IDENTITY_PASSPORT_DATEOFBIRTH: VDXFKeyInterface; +export declare const IDENTITY_PASSPORT_ADDRESS_STREET1: VDXFKeyInterface; +export declare const IDENTITY_PASSPORT_ADDRESS_CITY: VDXFKeyInterface; +export declare const IDENTITY_PASSPORT_ADDRESS_REGION: VDXFKeyInterface; +export declare const IDENTITY_PASSPORT_ADDRESS_POSTCODE: VDXFKeyInterface; +export declare const IDENTITY_PASSPORT_ADDRESS_COUNTRY: VDXFKeyInterface; +export declare const IDENTITY_RESIDENCEPERMIT: VDXFKeyInterface; +export declare const IDENTITY_RESIDENCEPERMIT_ORIGINALFRONT: VDXFKeyInterface; +export declare const IDENTITY_RESIDENCEPERMIT_ORIGINALBACK: VDXFKeyInterface; +export declare const IDENTITY_RESIDENCEPERMIT_CROPPEDFRONT: VDXFKeyInterface; +export declare const IDENTITY_RESIDENCEPERMIT_CROPPEDBACK: VDXFKeyInterface; +export declare const IDENTITY_RESIDENCEPERMIT_FACE: VDXFKeyInterface; +export declare const IDENTITY_RESIDENCEPERMIT_IDNUMBER: VDXFKeyInterface; +export declare const IDENTITY_RESIDENCEPERMIT_CATEGORY: VDXFKeyInterface; +export declare const IDENTITY_RESIDENCEPERMIT_EXPIRATIONDATE: VDXFKeyInterface; +export declare const IDENTITY_RESIDENCEPERMIT_ISSUINGCOUNTRY: VDXFKeyInterface; +export declare const IDENTITY_RESIDENCEPERMIT_ISSUINGREGION: VDXFKeyInterface; +export declare const IDENTITY_RESIDENCEPERMIT_DATEOFBIRTH: VDXFKeyInterface; +export declare const IDENTITY_RESIDENCEPERMIT_ADDRESS: VDXFKeyInterface; +export declare const IDENTITY_RESIDENCEPERMIT_ADDRESS_STREET1: VDXFKeyInterface; +export declare const IDENTITY_RESIDENCEPERMIT_ADDRESS_CITY: VDXFKeyInterface; +export declare const IDENTITY_RESIDENCEPERMIT_ADDRESS_REGION: VDXFKeyInterface; +export declare const IDENTITY_RESIDENCEPERMIT_ADDRESS_POSTCODE: VDXFKeyInterface; +export declare const IDENTITY_RESIDENCEPERMIT_ADDRESS_COUNTRY: VDXFKeyInterface; +export declare const IDENTITY_RESIDENTCARD: VDXFKeyInterface; +export declare const IDENTITY_RESIDENTCARD_ORIGINALFRONT: VDXFKeyInterface; +export declare const IDENTITY_RESIDENTCARD_ORIGINALBACK: VDXFKeyInterface; +export declare const IDENTITY_RESIDENTCARD_CROPPEDFRONT: VDXFKeyInterface; +export declare const IDENTITY_RESIDENTCARD_CROPPEDBACK: VDXFKeyInterface; +export declare const IDENTITY_RESIDENTCARD_FACE: VDXFKeyInterface; +export declare const IDENTITY_RESIDENTCARD_IDNUMBER: VDXFKeyInterface; +export declare const IDENTITY_RESIDENTCARD_CATEGORY: VDXFKeyInterface; +export declare const IDENTITY_RESIDENTCARD_EXPIRATIONDATE: VDXFKeyInterface; +export declare const IDENTITY_RESIDENTCARD_ISSUINGCOUNTRY: VDXFKeyInterface; +export declare const IDENTITY_RESIDENTCARD_ISSUINGREGION: VDXFKeyInterface; +export declare const IDENTITY_RESIDENTCARD_DATEOFBIRTH: VDXFKeyInterface; +export declare const IDENTITY_RESIDENTCARD_ADDRESS_STREET1: VDXFKeyInterface; +export declare const IDENTITY_RESIDENTCARD_ADDRESS_CITY: VDXFKeyInterface; +export declare const IDENTITY_RESIDENTCARD_ADDRESS_REGION: VDXFKeyInterface; +export declare const IDENTITY_RESIDENTCARD_ADDRESS_POSTCODE: VDXFKeyInterface; +export declare const IDENTITY_RESIDENTCARD_ADDRESS_COUNTRY: VDXFKeyInterface; +export declare const IDENTITY_IDCARD: VDXFKeyInterface; +export declare const IDENTITY_IDCARD_ORIGINALFRONT: VDXFKeyInterface; +export declare const IDENTITY_IDCARD_ORIGINALBACK: VDXFKeyInterface; +export declare const IDENTITY_IDCARD_CROPPEDFRONT: VDXFKeyInterface; +export declare const IDENTITY_IDCARD_CROPPEDBACK: VDXFKeyInterface; +export declare const IDENTITY_IDCARD_FACE: VDXFKeyInterface; +export declare const IDENTITY_IDCARD_IDNUMBER: VDXFKeyInterface; +export declare const IDENTITY_IDCARD_CATEGORY: VDXFKeyInterface; +export declare const IDENTITY_IDCARD_EXPIRATIONDATE: VDXFKeyInterface; +export declare const IDENTITY_IDCARD_ISSUINGCOUNTRY: VDXFKeyInterface; +export declare const IDENTITY_IDCARD_ISSUINGREGION: VDXFKeyInterface; +export declare const IDENTITY_IDCARD_DATEOFBIRTH: VDXFKeyInterface; +export declare const IDENTITY_IDCARD_ADDRESS_STREET1: VDXFKeyInterface; +export declare const IDENTITY_IDCARD_ADDRESS_CITY: VDXFKeyInterface; +export declare const IDENTITY_IDCARD_ADDRESS_REGION: VDXFKeyInterface; +export declare const IDENTITY_IDCARD_ADDRESS_POSTCODE: VDXFKeyInterface; +export declare const IDENTITY_IDCARD_ADDRESS_COUNTRY: VDXFKeyInterface; +export declare const IDENTITY_VISA: VDXFKeyInterface; +export declare const IDENTITY_VISA_ORIGINALFRONT: VDXFKeyInterface; +export declare const IDENTITY_VISA_ORIGINALBACK: VDXFKeyInterface; +export declare const IDENTITY_VISA_CROPPEDFRONT: VDXFKeyInterface; +export declare const IDENTITY_VISA_CROPPEDBACK: VDXFKeyInterface; +export declare const IDENTITY_VISA_FACE: VDXFKeyInterface; +export declare const IDENTITY_VISA_IDNUMBER: VDXFKeyInterface; +export declare const IDENTITY_VISA_CATEGORY: VDXFKeyInterface; +export declare const IDENTITY_VISA_EXPIRATIONDATE: VDXFKeyInterface; +export declare const IDENTITY_VISA_ISSUINGCOUNTRY: VDXFKeyInterface; +export declare const IDENTITY_VISA_ISSUINGREGION: VDXFKeyInterface; +export declare const IDENTITY_VISA_DATEOFBIRTH: VDXFKeyInterface; +export declare const IDENTITY_VISA_ADDRESS_STREET1: VDXFKeyInterface; +export declare const IDENTITY_VISA_ADDRESS_CITY: VDXFKeyInterface; +export declare const IDENTITY_VISA_ADDRESS_REGION: VDXFKeyInterface; +export declare const IDENTITY_VISA_ADDRESS_POSTCODE: VDXFKeyInterface; +export declare const IDENTITY_VISA_ADDRESS_COUNTRY: VDXFKeyInterface; +export declare const IDENTITY_PERSONALDETAILS: VDXFKeyInterface; +export declare const IDENTITY_CONTACTDETAILS: VDXFKeyInterface; +export declare const IDENTITY_LOCATION: VDXFKeyInterface; +export declare const IDENTITY_BANKINGDETAILS: VDXFKeyInterface; +export declare const IDENTITY_DOCUMENTS: VDXFKeyInterface; +export declare const IDENTITY_BANKACCOUNT: VDXFKeyInterface; +export declare const IDENTITY_BANKINGDETAILS_CURRENCY: VDXFKeyInterface; +export declare const IDENTITY_BANKINGDETAILS_COUNTRY: VDXFKeyInterface; +export declare const IDENTITY_BANKINGDETAILS_STREET1: VDXFKeyInterface; +export declare const IDENTITY_BANKINGDETAILS_STREET2: VDXFKeyInterface; +export declare const IDENTITY_BANKINGDETAILS_CITY: VDXFKeyInterface; +export declare const IDENTITY_BANKINGDETAILS_REGION: VDXFKeyInterface; +export declare const IDENTITY_BANKINGDETAILS_POSTALCODE: VDXFKeyInterface; +export declare const IDENTITY_BANKINGDETAILS_TAXNUMBER: VDXFKeyInterface; +export declare const IDENTITY_BANKINGDETAILS_TAXCOUNTRY: VDXFKeyInterface; +export declare const IDENTITY_BANKINGDETAILS_FIRSTNAME: VDXFKeyInterface; +export declare const IDENTITY_BANKINGDETAILS_LASTNAME: VDXFKeyInterface; +export declare const IDENTITY_BANKINGDETAILS_PHONENUMBER: VDXFKeyInterface; +export declare const IDENTITY_BANKINGDETAILS_NUMBER: VDXFKeyInterface; +export declare const IDENTITY_BANKINGDETAILS_TYPE: VDXFKeyInterface; +export declare const IDENTITY_BANKINGDETAILS_SORTCODE: VDXFKeyInterface; +export declare const IDENTITY_DOCUMENTS_PASSPORT: VDXFKeyInterface; +export declare const IDENTITY_RESIDENCECARD: VDXFKeyInterface; +export declare const IDENTITY_ATTESTOR: VDXFKeyInterface; +export declare const IDENTITY_ATTESTATION_RECIPIENT: VDXFKeyInterface; diff --git a/dist/vdxf/identitydatakeys.js b/dist/vdxf/identitydatakeys.js new file mode 100644 index 00000000..5039ee43 --- /dev/null +++ b/dist/vdxf/identitydatakeys.js @@ -0,0 +1,1653 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IDENTITY_DRIVINGLICENCE_FACE = exports.IDENTITY_DRIVINGLICENCE_CROPPEDBACK = exports.IDENTITY_DRIVINGLICENCE_CROPPEDFRONT = exports.IDENTITY_DRIVINGLICENCE_ORIGINALBACK = exports.IDENTITY_DRIVINGLICENCE_ORIGINALFRONT = exports.IDENTITY_DRIVINGLICENCE = exports.IDENTITY_VERIFICATION_APPROVALS_STATUS = exports.IDENTITY_VERIFICATION_APPROVALS_RISKCHECKOK = exports.IDENTITY_VERIFICATION_APPROVALS_WATCHLISTOK = exports.IDENTITY_VERIFICATION_APPROVALS_SELFIECHECKED = exports.IDENTITY_VERIFICATION_APPROVALS_DOCUMENTSVERIFIED = exports.IDENTITY_VERIFICATION_APPROVALS_KYCCHECKED = exports.IDENTITY_VERIFICATION_APPROVALS_VERIFIEDSMS = exports.IDENTITY_VERIFICATION_APPROVALS_ACCEPTEDTOS = exports.IDENTITY_VERIFICATION_APPROVALS = exports.IDENTITY_VERIFICATION_STATUS = exports.IDENTITY_IDNUMBER_TYPE = exports.IDENTITY_IDNUMBER_VALUE = exports.IDENTITY_HOMEADDRESS_COUNTRY = exports.IDENTITY_HOMEADDRESS_POSTCODE = exports.IDENTITY_HOMEADDRESS_REGION = exports.IDENTITY_HOMEADDRESS_CITY = exports.IDENTITY_HOMEADDRESS_STREET2 = exports.IDENTITY_HOMEADDRESS_STREET1 = exports.IDENTITY_HOMEADDRESS = exports.IDENTITY_WEIGHT = exports.IDENTITY_ETHNICITY = exports.IDENTITY_EYECOLOR = exports.IDENTITY_HEIGHT = exports.IDENTITY_GENDER = exports.IDENTITY_LASTNAME = exports.IDENTITY_MIDDLENAME = exports.IDENTITY_FIRSTNAME = exports.IDENTITY_NATIONALITY = exports.IDENTITY_EMAIL = exports.IDENTITY_ACCOUNT_REQUESTING_IPADDRESS = exports.IDENTITY_OVER25 = exports.IDENTITY_OVER21 = exports.IDENTITY_OVER18 = exports.IDENTITY_DATEOFBIRTH = exports.IDENTITY_PHONENUMBER = exports.IDENTITY_ACCOUNT_STATUS = exports.IDENTITY_ACCOUNT_TEMPLATEVERSION = exports.IDENTITY_ACCOUNT_TEMPLATEID = exports.IDENTITY_ACCOUNT_SHAREABLEURL = exports.IDENTITY_ACCOUNT_PREVIOUSATTEMPTID = exports.IDENTITY_ACCOUNT_COMPLETEDAT = exports.IDENTITY_ACCOUNT_CREATEDAT = exports.IDENTITY_ACCOUNT_USERID = exports.IDENTITY_ACCOUNT_ID = void 0; +exports.IDENTITY_RESIDENCEPERMIT_ISSUINGREGION = exports.IDENTITY_RESIDENCEPERMIT_ISSUINGCOUNTRY = exports.IDENTITY_RESIDENCEPERMIT_EXPIRATIONDATE = exports.IDENTITY_RESIDENCEPERMIT_CATEGORY = exports.IDENTITY_RESIDENCEPERMIT_IDNUMBER = exports.IDENTITY_RESIDENCEPERMIT_FACE = exports.IDENTITY_RESIDENCEPERMIT_CROPPEDBACK = exports.IDENTITY_RESIDENCEPERMIT_CROPPEDFRONT = exports.IDENTITY_RESIDENCEPERMIT_ORIGINALBACK = exports.IDENTITY_RESIDENCEPERMIT_ORIGINALFRONT = exports.IDENTITY_RESIDENCEPERMIT = exports.IDENTITY_PASSPORT_ADDRESS_COUNTRY = exports.IDENTITY_PASSPORT_ADDRESS_POSTCODE = exports.IDENTITY_PASSPORT_ADDRESS_REGION = exports.IDENTITY_PASSPORT_ADDRESS_CITY = exports.IDENTITY_PASSPORT_ADDRESS_STREET1 = exports.IDENTITY_PASSPORT_DATEOFBIRTH = exports.IDENTITY_PASSPORT_ISSUINGREGION = exports.IDENTITY_PASSPORT_ISSUINGCOUNTRY = exports.IDENTITY_PASSPORT_EXPIRATIONDATE = exports.IDENTITY_PASSPORT_CATEGORY = exports.IDENTITY_PASSPORT_IDNUMBER = exports.IDENTITY_PASSPORT_FACE = exports.IDENTITY_PASSPORT_CROPPEDBACK = exports.IDENTITY_PASSPORT_CROPPEDFRONT = exports.IDENTITY_PASSPORT_ORIGINALBACK = exports.IDENTITY_PASSPORT_ORIGINALFRONT = exports.IDENTITY_PASSPORT = exports.IDENTITY_EMAIL_DOMAIN_TOPLEVEL_SUSPICIOUS = exports.IDENTITY_EMAIL_DOMAIN_DISPOSABLE = exports.IDENTITY_EMAIL_DOMAIN_CUSTOM = exports.IDENTITY_EMAIL_DOMAIN_FREEPROVIDER = exports.IDENTITY_EMAIL_DOMAIN_REGISTEREDAT = exports.IDENTITY_EMAIL_LASTBREACHEDAT = exports.IDENTITY_EMAIL_FIRSTBREACHEDAT = exports.IDENTITY_EMAIL_BREACHCOUNT = exports.IDENTITY_EMAIL_ISDELIVERABLE = exports.IDENTITY_SELFIECHECK_VIDEO = exports.IDENTITY_SELFIECHECK_IMAGE = exports.IDENTITY_DRIVINGLICENCE_ADDRESS_COUNTRY = exports.IDENTITY_DRIVINGLICENCE_ADDRESS_POSTCODE = exports.IDENTITY_DRIVINGLICENCE_ADDRESS_REGION = exports.IDENTITY_DRIVINGLICENCE_ADDRESS_CITY = exports.IDENTITY_DRIVINGLICENCE_ADDRESS_STREET1 = exports.IDENTITY_DRIVINGLICENCE_DATEOFBIRTH = exports.IDENTITY_DRIVINGLICENCE_ISSUINGREGION = exports.IDENTITY_DRIVINGLICENCE_ISSUINGCOUNTRY = exports.IDENTITY_DRIVINGLICENCE_EXPIRATIONDATE = exports.IDENTITY_DRIVINGLICENCE_CATEGORY = exports.IDENTITY_DRIVINGLICENCE_IDNUMBER = void 0; +exports.IDENTITY_VISA_EXPIRATIONDATE = exports.IDENTITY_VISA_CATEGORY = exports.IDENTITY_VISA_IDNUMBER = exports.IDENTITY_VISA_FACE = exports.IDENTITY_VISA_CROPPEDBACK = exports.IDENTITY_VISA_CROPPEDFRONT = exports.IDENTITY_VISA_ORIGINALBACK = exports.IDENTITY_VISA_ORIGINALFRONT = exports.IDENTITY_VISA = exports.IDENTITY_IDCARD_ADDRESS_COUNTRY = exports.IDENTITY_IDCARD_ADDRESS_POSTCODE = exports.IDENTITY_IDCARD_ADDRESS_REGION = exports.IDENTITY_IDCARD_ADDRESS_CITY = exports.IDENTITY_IDCARD_ADDRESS_STREET1 = exports.IDENTITY_IDCARD_DATEOFBIRTH = exports.IDENTITY_IDCARD_ISSUINGREGION = exports.IDENTITY_IDCARD_ISSUINGCOUNTRY = exports.IDENTITY_IDCARD_EXPIRATIONDATE = exports.IDENTITY_IDCARD_CATEGORY = exports.IDENTITY_IDCARD_IDNUMBER = exports.IDENTITY_IDCARD_FACE = exports.IDENTITY_IDCARD_CROPPEDBACK = exports.IDENTITY_IDCARD_CROPPEDFRONT = exports.IDENTITY_IDCARD_ORIGINALBACK = exports.IDENTITY_IDCARD_ORIGINALFRONT = exports.IDENTITY_IDCARD = exports.IDENTITY_RESIDENTCARD_ADDRESS_COUNTRY = exports.IDENTITY_RESIDENTCARD_ADDRESS_POSTCODE = exports.IDENTITY_RESIDENTCARD_ADDRESS_REGION = exports.IDENTITY_RESIDENTCARD_ADDRESS_CITY = exports.IDENTITY_RESIDENTCARD_ADDRESS_STREET1 = exports.IDENTITY_RESIDENTCARD_DATEOFBIRTH = exports.IDENTITY_RESIDENTCARD_ISSUINGREGION = exports.IDENTITY_RESIDENTCARD_ISSUINGCOUNTRY = exports.IDENTITY_RESIDENTCARD_EXPIRATIONDATE = exports.IDENTITY_RESIDENTCARD_CATEGORY = exports.IDENTITY_RESIDENTCARD_IDNUMBER = exports.IDENTITY_RESIDENTCARD_FACE = exports.IDENTITY_RESIDENTCARD_CROPPEDBACK = exports.IDENTITY_RESIDENTCARD_CROPPEDFRONT = exports.IDENTITY_RESIDENTCARD_ORIGINALBACK = exports.IDENTITY_RESIDENTCARD_ORIGINALFRONT = exports.IDENTITY_RESIDENTCARD = exports.IDENTITY_RESIDENCEPERMIT_ADDRESS_COUNTRY = exports.IDENTITY_RESIDENCEPERMIT_ADDRESS_POSTCODE = exports.IDENTITY_RESIDENCEPERMIT_ADDRESS_REGION = exports.IDENTITY_RESIDENCEPERMIT_ADDRESS_CITY = exports.IDENTITY_RESIDENCEPERMIT_ADDRESS_STREET1 = exports.IDENTITY_RESIDENCEPERMIT_ADDRESS = exports.IDENTITY_RESIDENCEPERMIT_DATEOFBIRTH = void 0; +exports.IDENTITY_ATTESTATION_RECIPIENT = exports.IDENTITY_ATTESTOR = exports.IDENTITY_RESIDENCECARD = exports.IDENTITY_DOCUMENTS_PASSPORT = exports.IDENTITY_BANKINGDETAILS_SORTCODE = exports.IDENTITY_BANKINGDETAILS_TYPE = exports.IDENTITY_BANKINGDETAILS_NUMBER = exports.IDENTITY_BANKINGDETAILS_PHONENUMBER = exports.IDENTITY_BANKINGDETAILS_LASTNAME = exports.IDENTITY_BANKINGDETAILS_FIRSTNAME = exports.IDENTITY_BANKINGDETAILS_TAXCOUNTRY = exports.IDENTITY_BANKINGDETAILS_TAXNUMBER = exports.IDENTITY_BANKINGDETAILS_POSTALCODE = exports.IDENTITY_BANKINGDETAILS_REGION = exports.IDENTITY_BANKINGDETAILS_CITY = exports.IDENTITY_BANKINGDETAILS_STREET2 = exports.IDENTITY_BANKINGDETAILS_STREET1 = exports.IDENTITY_BANKINGDETAILS_COUNTRY = exports.IDENTITY_BANKINGDETAILS_CURRENCY = exports.IDENTITY_BANKACCOUNT = exports.IDENTITY_DOCUMENTS = exports.IDENTITY_BANKINGDETAILS = exports.IDENTITY_LOCATION = exports.IDENTITY_CONTACTDETAILS = exports.IDENTITY_PERSONALDETAILS = exports.IDENTITY_VISA_ADDRESS_COUNTRY = exports.IDENTITY_VISA_ADDRESS_POSTCODE = exports.IDENTITY_VISA_ADDRESS_REGION = exports.IDENTITY_VISA_ADDRESS_CITY = exports.IDENTITY_VISA_ADDRESS_STREET1 = exports.IDENTITY_VISA_DATEOFBIRTH = exports.IDENTITY_VISA_ISSUINGREGION = exports.IDENTITY_VISA_ISSUINGCOUNTRY = void 0; +exports.IDENTITY_ACCOUNT_ID = { + "vdxfid": "i5Xgd7Aqds922eE8FDBUsKHSgiig39AnfS", + "indexid": "xAMo5ubvVBMgep7A6tqdqhoyiNjgq3j1ci", + "hash160result": "4c5e79bf46593fe959cb1918422eaa8fc82b8916", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.account.id" + } +}; +exports.IDENTITY_ACCOUNT_USERID = { + "vdxfid": "iNKVUvr5GzdCHgybMauK11DdZZUyWE3pe3", + "indexid": "xT9bwjHA8JqrurrdDGZTyPkAbDVzR53C2o", + "hash160result": "93b62bfd8c861ac7a5aa3d3d9f618ccd8c04b5ce", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.account.userid" + } +}; +exports.IDENTITY_ACCOUNT_CREATEDAT = { + "vdxfid": "i42uTbJmVBcPacY3Ak1g95LBg5rBBntQby", + "indexid": "x8s1vPjrLVq4CnR52Rfq7TrihjsBzxAEic", + "hash160result": "c40b12b14582c976e67a2e5992b0fdf67fb21f06", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.account.createdat" + } +}; +exports.IDENTITY_ACCOUNT_COMPLETEDAT = { + "vdxfid": "iRJTZj7osY5EYA7pd7K3UcJVAApkvodDjZ", + "indexid": "xW8a2XYtirHuAKzrUnyCSzq2BpqmpCnnHQ", + "hash160result": "c568b6e1f734f5dc9b754e5932ebdb63f2606bef", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.account.completedat" + } +}; +exports.IDENTITY_ACCOUNT_PREVIOUSATTEMPTID = { + "vdxfid": "iGU6RCWyjU1sscCPLN77XhTESJ21JCTNxF", + "indexid": "xMJCszx4anEYVn5RC3mGW5ymTx32EBfaqs", + "hash160result": "50c2b12bb483802d14beae3c6b7454c6ecc0848e", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.account.previousattemptid" + } +}; +exports.IDENTITY_ACCOUNT_SHAREABLEURL = { + "vdxfid": "i92YkV3FVGZfp5Ep3j1sfQUgqUS37M9v82", + "indexid": "xDrfDHULLanLSF7quQg2do1Ds8T3yGCRw3", + "hash160result": "52e9f990e5e89cc1088acd29a2fda0ef140ae73c", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.account.shareableurl" + } +}; +exports.IDENTITY_ACCOUNT_TEMPLATEID = { + "vdxfid": "iL5diuVsHAG5DLVeyc8XYdEXR6fFro5G7s", + "indexid": "xQukBhvx8UUjqWNgqHngX1m4SkgGhnybh1", + "hash160result": "37ef653fe6685fca132d77834384702f6cd225b6", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.account.templateid" + } +}; +exports.IDENTITY_ACCOUNT_TEMPLATEVERSION = { + "vdxfid": "i7eBZNzKrgFov6c2Sx2QecyEmPq2Mc4BGe", + "indexid": "xCUJ2BRQhzUUYGV4JdgZd1Vmo3r39BsUym", + "hash160result": "e6e490ce8bfde333ab0374880ea0efbb9c12b42d", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.account.templateversion" + } +}; +exports.IDENTITY_ACCOUNT_STATUS = { + "vdxfid": "iJf3EbihEtdEpJjbQ6PgUaL3GxDgZRzSWk", + "indexid": "xPV9hQ9n6CquSUcdFn3qSxraJcEhVfWa72", + "hash160result": "d6fc5578c2fbed3251f3aa250c73b58386ec86a6", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.account.status" + } +}; +exports.IDENTITY_PHONENUMBER = { + "vdxfid": "iAQY8o4HwupzcJAw9aBtFwgrvWZGQStkge", + "indexid": "xFEebbVNoE3fEU3y1Fr3ELDPxAaHE7V2kN", + "hash160result": "32bc2c7919f626c39679630ee4d6d6d07bcd074c", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.phonenumber" + } +}; +exports.IDENTITY_DATEOFBIRTH = { + "vdxfid": "iSZsa7C4esogN3W6fBngUHR6GvSmt7We4j", + "indexid": "xXPz2ud9WC2LzDP8WsSqSfwdJaTnqpHdND", + "hash160result": "ab74371e952a27f615b079d3c084b38b98c84dfd", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.dateofbirth" + } +}; +exports.IDENTITY_OVER18 = { + "vdxfid": "iHPD8vB7jhtbuqPkUqzheqcZdfAfHUFVzM", + "indexid": "xNDKbicCb27GY1GnLXerdE96fKBg9tLUDT", + "hash160result": "28139ce1eae370e76f749066f778466597689098", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.over18" + } +}; +exports.IDENTITY_OVER21 = { + "vdxfid": "iAXYYrZaipc4DAmAKXUFYZxavsf6uBJqaj", + "indexid": "xFMf1ezfa8piqLeCBD8QWxV7xXg7mxMc1Z", + "hash160result": "7a1fee70ace1c048c0a93c120a8a4c5f890f5b4d", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.over21" + } +}; +exports.IDENTITY_OVER25 = { + "vdxfid": "iDuForPTZFeFBAgDX1HyrP3d6of7wzrRaS", + "indexid": "xJjNGepYQZruoLZFNgx8pmaA8Tg8qSfnzM", + "hash160result": "2a1e6fa6913ea3659dcaf1c5bc20a96e399d5e72", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.over25" + } +}; +exports.IDENTITY_ACCOUNT_REQUESTING_IPADDRESS = { + "vdxfid": "i4uE1EvnDbq9WGhF5UbBr6fbxNLsgk1eZ3", + "indexid": "x9jLU3Ms4v3p8SaGwAFLpVC8z2MtYJTVwp", + "hash160result": "05a3aa58192812972a2c4e4184af7bb5fbf9a30f", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.account.requesting.ipaddress" + } +}; +exports.IDENTITY_EMAIL = { + "vdxfid": "iJ4pq4DCymfbu8SAuXyNhasLeSHFNKPr23", + "indexid": "xNtwHreHq5tGXJKCmDdXfyPsg6JGHUY6X1", + "hash160result": "15a8095b6298bbff5147060d9a6363a9df6c0ea0", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.email" + } +}; +exports.IDENTITY_NATIONALITY = { + "vdxfid": "iEUYNTkw6kFhZWto7vyTpQqtdRL7eoKZY2", + "indexid": "xKJeqGC1x4UNBgmpycdcnoNRf5M8btexbt", + "hash160result": "db935713b90281d6aefe5e7b33e5b660962aaa78", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.nationality" + } +}; +exports.IDENTITY_FIRSTNAME = { + "vdxfid": "iLB8SG7ErJtTYcG1f4w9RLuMJPpAsjFkiL", + "indexid": "xR1Eu4YKhd78An93WkbJPjRtL3qBprmMno", + "hash160result": "0bab76359b70b37c858399c2a3776939c5de2fb7", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.firstname" + } +}; +exports.IDENTITY_MIDDLENAME = { + "vdxfid": "iHG6ALRUPyRcgJMsPqBmvUCZxe4PrMfgej", + "indexid": "xN6Cd8rZFHeHJUEuFWqvtrj6zJ5QjX94j5", + "hash160result": "b98bd82034ec86ae5538313c9f5501c086ac3797", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.middlename" + } +}; +exports.IDENTITY_LASTNAME = { + "vdxfid": "iKRmfy4xgjWQyPdXYie6dJezRXF4aKdbHB", + "indexid": "xQFt8mW3Y3j5bZWZQQJFbhBXTBG5S4vdaZ", + "hash160result": "6b597e0c05d1430566b7b17a59da683fb4a6fcae", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.lastname" + } +}; +exports.IDENTITY_GENDER = { + "vdxfid": "iShgSBdiYDQnVwgNcDnSbNYHGU6CTwBDb1", + "indexid": "xXXntz4oPXdT87ZQTuSbZm4pJ87DGEgHpG", + "hash160result": "3baee594e927d47b641c7cf3927ab3229dd0c7fe", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.gender" + } +}; +exports.IDENTITY_HEIGHT = { + "vdxfid": "iLmLmsFMTUm4dd2iMuMe4xaMC8VSZN9soP", + "indexid": "xRbTEfgSJnyjFnukDb1o3M6tDnWTSUiii7", + "hash160result": "e80652253fa52b95cd9ea5ff43d51642ea4fa8bd", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.height" + } +}; +exports.IDENTITY_EYECOLOR = { + "vdxfid": "iRo2XT8tcMtLTpuPJ6V5WxbnVWa2CrcdsJ", + "indexid": "xWd8zFZyTg715znR9n9EVM8KXAb328xGbZ", + "hash160result": "c60fdfcc04173f273aa92a3b1844964b368ad2f4", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.eyecolor" + } +}; +exports.IDENTITY_ETHNICITY = { + "vdxfid": "i9jHPJokwnLoCQ83P6jqezCcEZUD1g34B9", + "indexid": "xEZPr7Eqo6ZTpa15EnPzdNj9GDVDsfToki", + "hash160result": "0476d568a9cf949bc8b6d84dc73e38cf85449b44", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.ethnicity" + } +}; +exports.IDENTITY_WEIGHT = { + "vdxfid": "iMzGK44r6SNkzi3N3AmcZBtuysPvgYiRiT", + "indexid": "xSpNmrVvwkbRcsvPtrRmXaRT1XQwXFe2Ut", + "hash160result": "8abe0e94cb1ff345f1351720acc8eefed91e12cb", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.weight" + } +}; +exports.IDENTITY_HOMEADDRESS = { + "vdxfid": "i9A1fD5sVwFFXzEmCJWSRDqN94PXp9oNaS", + "indexid": "xDz881WxMFTvAA7o3zAbPcMuAiQYiT4Vnc", + "hash160result": "072a3abed3a353e001288074d9426285e569503e", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.homeaddress" + } +}; +exports.IDENTITY_HOMEADDRESS_STREET1 = { + "vdxfid": "i5BJAwQbrP4Bht8gUpoqSrovuBwfRc6jiv", + "indexid": "xA1QdjqghhGrL41iLWTzRFLTvqxgNsVzXY", + "hash160result": "ff22b196e64c9388daab76a57bcaea50491cae12", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.homeaddress.street1" + } +}; +exports.IDENTITY_HOMEADDRESS_STREET2 = { + "vdxfid": "iMx71C14hrBoWD3yyhYChmhJEw4Kqw1zj4", + "indexid": "xSnDTzS9ZAQU8Nw1qPCMgADqGb5Lgqb4zw", + "hash160result": "efdda473a6a9e98cd91b02d36bfeb5dec784a9ca", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.homeaddress.street2" + } +}; +exports.IDENTITY_HOMEADDRESS_CITY = { + "vdxfid": "i75ZpW5T6wgQEMVxyvqHT9ZaV4fjsQ7kws", + "indexid": "xBugHJWXxFu4rXNzqcVSRY67WigkoCUEUQ", + "hash160result": "fcae40d5d327f13dc0e0c1e80f3db212a4ed8827", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.homeaddress.city" + } +}; +exports.IDENTITY_HOMEADDRESS_REGION = { + "vdxfid": "iRkYck3JowdFWmrM6VUAS8Wtpmxds2fLXS", + "indexid": "xWaf5YUPfFqv8wjNxB8KQX3RrRyenbioh5", + "hash160result": "fa06b90a547658a3efc3cd1797d6b3cd30695af4", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.homeaddress.region" + } +}; +exports.IDENTITY_HOMEADDRESS_POSTCODE = { + "vdxfid": "iAL2FRG8PVi18fN8MatjXhV1YkuZr7PM4T", + "indexid": "xFA8iDhDEovfkqFADGYtW61YaQvahtrhJA", + "hash160result": "b4f4c3a08fdcf32209482fa3d8c7b01201312d4b", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.homeaddress.postcode" + } +}; +exports.IDENTITY_HOMEADDRESS_COUNTRY = { + "vdxfid": "iABYGvas6uUDk9ejCkfCVLvE9PPJXgyCKX", + "indexid": "xF1ejj1wxDgtNKXm4SKMTjSmB3QKL8LhQG", + "hash160result": "bafb2cb6d5cc86478622feb8a00097d71d839249", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.homeaddress.country" + } +}; +exports.IDENTITY_IDNUMBER_VALUE = { + "vdxfid": "iQrnvbCNWMaG6PjTmeXzrcuAXKsMzmNJWA", + "indexid": "xVguPPdTMfnviZcVdLC9q1RhYytNuZ3ToS", + "hash160result": "72cf52b2f6b4f68173c933fb046e892870b990ea", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.idnumber.value" + } +}; +exports.IDENTITY_IDNUMBER_TYPE = { + "vdxfid": "iSSZX5yUdQh7zLf1gUewH5rVfbXtSq2c4s", + "indexid": "xXGfytQZUiuncWY3YAK6FUP2hFYuQ4yYwW", + "hash160result": "2807f356d687b4c6208ce0379b31043c7fcdebfb", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.idnumber.type" + } +}; +exports.IDENTITY_VERIFICATION_STATUS = { + "vdxfid": "i8MhqW3ejupmV1M5UyhyhG13dkS8A7g7zg", + "indexid": "xDBpJJUjbE3S7BE7LfN8feXafQT92YQZPm", + "hash160result": "47f2864de74ffe01ccb7eeabf0f2d848e3668e35", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.verification.status" + } +}; +exports.IDENTITY_VERIFICATION_APPROVALS = { + "vdxfid": "iBMkZtqC9yqVrFL4GfYtXckFpYAhRkE2mj", + "indexid": "xGBs2hGH1J4AURD68MD3W1GnrCBiJ3nRgG", + "hash160result": "a98801de1ba5ff5e571dbdde50519483140f7956", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.verification.approvals" + } +}; +exports.IDENTITY_VERIFICATION_APPROVALS_ACCEPTEDTOS = { + "vdxfid": "iH32QkXBKyWEJD6kh9HJ4KMfeiWfPWoHEh", + "indexid": "xMs8sYxGBHitvNynYpwT2htCgNXgHt6VAW", + "hash160result": "bbe4c09ae069561d3c14b04e3b7b96c98622bf94", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.verification.approvals.acceptedtos" + } +}; +exports.IDENTITY_VERIFICATION_APPROVALS_VERIFIEDSMS = { + "vdxfid": "iPgyMDFQ9QMNrqc3ckEBEubDNwLnvubUdW", + "indexid": "xUX5p1gUzia3V1V5URtLDJ7kQbMosPsVj8", + "hash160result": "72853b66aa158531e1f15b9ff075199a1224bddd", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.verification.approvals.verifiedsms" + } +}; +exports.IDENTITY_VERIFICATION_APPROVALS_KYCCHECKED = { + "vdxfid": "iRnbiA4dAPbeuB6KQN2donBHP9mKUHHFZf", + "indexid": "xWciAxVi1hpKXLyMG3gnnAhpQonLQapWPv", + "hash160result": "c6114ffec250b746bde117903b930d9a34d3bdf4", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.verification.approvals.kycchecked" + } +}; +exports.IDENTITY_VERIFICATION_APPROVALS_DOCUMENTSVERIFIED = { + "vdxfid": "iBjML9DHV67MBQyMEHVTSoJPhU8DNeWRTE", + "indexid": "xGZTnweNLQL1oarP5y9cRBpvj89EGt5VSm", + "hash160result": "0a93883010769ff783be5ced074ecfa50dd08e5a", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.verification.approvals.documentsverified" + } +}; +exports.IDENTITY_VERIFICATION_APPROVALS_SELFIECHECKED = { + "vdxfid": "iKgeFKoy6WMx9MoEjig5vHoXbyxVFBPWDN", + "indexid": "xQWki8F3wpacmXgGbQLEtgL4ddyWC8UZLv", + "hash160result": "6a044306ef77ce9896ffcd26ee40174651b1ccb1", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.verification.approvals.selfiechecked" + } +}; +exports.IDENTITY_VERIFICATION_APPROVALS_WATCHLISTOK = { + "vdxfid": "iFDB1qKYSrWMRaMCWX6hNGE8HVXB1cNtJu", + "indexid": "xL3HUdkdJAj23kEENCkrLekfK9YBymnLrX", + "hash160result": "e691a2d2af30df6ee21f0eb805a98e11d539ba80", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.verification.approvals.watchlistok" + } +}; +exports.IDENTITY_VERIFICATION_APPROVALS_RISKCHECKOK = { + "vdxfid": "i9dva492S7vQphjLiK2UaS7JikZKs5TQsB", + "indexid": "xEU32ra7HS95SscNZzgdYpdqkQaLjnzcyC", + "hash160result": "6ffdbee07124450d29698724573bd6ab07d09743", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.verification.approvals.riskcheckok" + } +}; +exports.IDENTITY_VERIFICATION_APPROVALS_STATUS = { + "vdxfid": "iKhGUcTH4ZQ7uiy933m8f1GbwSLcwJW8ev", + "indexid": "xQXNwQtMuscnXtrAtjRHdPo8y6MdomjAXM", + "hash160result": "00612f17d9cedc346fcd139c0c5b56e666efeab1", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.verification.approvals.status" + } +}; +exports.IDENTITY_DRIVINGLICENCE = { + "vdxfid": "iMYQw33ryywcNyQDjFjiVvFm2kAwG85poV", + "indexid": "xSNXPqUwqJAH19HFawPsUJnJ4QBxCATPNx", + "hash160result": "e2857ddcc4f3301c354a00d1376558a75e802ec6", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.drivinglicence" + } +}; +exports.IDENTITY_DRIVINGLICENCE_ORIGINALFRONT = { + "vdxfid": "i3fq6ET2dL8CxC3BJzdYTpUsjEsQaKP7bX", + "indexid": "x8VwZ2t7UeLsaMvDAgHhSD1QkttRPYndPW", + "hash160result": "26bab54e1f760b1abb888229a38a5179cc502302", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.drivinglicence.originalfront" + } +}; +exports.IDENTITY_DRIVINGLICENCE_ORIGINALBACK = { + "vdxfid": "i7LTNZvJmm5LjAwMWuryb52yKt7txaV5FW", + "indexid": "xCAZqNMPd5J1MLpPNbX8ZTZWMY8unxdAfs", + "hash160result": "c7b3e9a70908fafc8de3e81f6ac2e0c131c9592a", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.drivinglicence.originalback" + } +}; +exports.IDENTITY_DRIVINGLICENCE_CROPPEDFRONT = { + "vdxfid": "i8KsL3JJgbJyuqEyEbu5KZkDBFvHscLoM6", + "indexid": "xD9ynqjPXuXeY1816HZEHxGkCuwJoHBx54", + "hash160result": "7b28226a4f3eaae379cddbc84d037cfe587e3535", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.drivinglicence.croppedfront" + } +}; +exports.IDENTITY_DRIVINGLICENCE_CROPPEDBACK = { + "vdxfid": "iRwumhx12vtT8CkspBLmKQY8WZywurxVXo", + "indexid": "xWn2EWP5tF77kNdufrzvHo4fYDzxhjXyZz", + "hash160result": "0b6edf21bfe119173b3fffab6118d79a39a580f6", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.drivinglicence.croppedback" + } +}; +exports.IDENTITY_DRIVINGLICENCE_FACE = { + "vdxfid": "i5i7U4EAbgPzhCRebtbmoZt6pTyqGqP8jj", + "indexid": "xAYDvrfFSzcfKNJgTaFvmxQdr7zr6oGgFh", + "hash160result": "1f47647bf3e71f0c1c2638c99e6a42e6bf118218", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.drivinglicence.face" + } +}; +exports.IDENTITY_DRIVINGLICENCE_IDNUMBER = { + "vdxfid": "iBCA8b4zS5ygVgTFqxabke7BBFs92dhcXQ", + "indexid": "xG2GbPW5HQCM7rLHheEkj2diCut9vgFhM2", + "hash160result": "fcf0571278bd1afce6d93f0a99f41437bb91a854", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.drivinglicence.idnumber" + } +}; +exports.IDENTITY_DRIVINGLICENCE_CATEGORY = { + "vdxfid": "i5Cm95DZa6FPP66bA6aFfoYL2jaojetHMp", + "indexid": "xA2sbseeRQU41Fyd1nEQeC4s4Pbpf63xB4", + "hash160result": "3b91fccdf59d99b21e442441b89abb31bf09f512", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.drivinglicence.category" + } +}; +exports.IDENTITY_DRIVINGLICENCE_EXPIRATIONDATE = { + "vdxfid": "iJvGpPoP1uUkUqn9bAchLyfaGWyy8JGQoX", + "indexid": "xPkPHCETsDhR71fBSrGrKNC7JAzz17RsLk", + "hash160result": "96aee63b3c6094a4d9edbc04b63a8e45688068a9", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.drivinglicence.expirationdate" + } +}; +exports.IDENTITY_DRIVINGLICENCE_ISSUINGCOUNTRY = { + "vdxfid": "iBsNEqysX64cQAjiRHHL1msd7LxroGM6Mb", + "indexid": "xGhUheQxNQHH2LckGxwUzAQA8zysfnKDSU", + "hash160result": "f2f24dd2383538493d21ff0aca77c7cd1fe6125c", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.drivinglicence.issuingcountry" + } +}; +exports.IDENTITY_DRIVINGLICENCE_ISSUINGREGION = { + "vdxfid": "i6gZSDYpK9inexaeFQDSk9GuAmew1ymMFo", + "indexid": "xBWfu1yuATwTH8Tg75sbiXoSCRfwsxQzeR", + "hash160result": "67f4fd5c49250912aecf1eb8ab17f29d590a2f23", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.drivinglicence.issuingregion" + } +}; +exports.IDENTITY_DRIVINGLICENCE_DATEOFBIRTH = { + "vdxfid": "iChWUsL1NQwDqcwXbFGxHiCegfquGPyadv", + "indexid": "xHXcwfm6Dj9tTnpZSvw7G6jBiKrvBUhwaw", + "hash160result": "3c7bd13bcdb54368e7590a9f2da5b201b7be2d65", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.drivinglicence.dateofbirth" + } +}; +exports.IDENTITY_DRIVINGLICENCE_ADDRESS_STREET1 = { + "vdxfid": "i9xaEvSQ537wuYgcVPRgG3zop9bVzeDTBw", + "indexid": "xEnghisUvMLcXiZeM55qESXLqocWsv6zmJ", + "hash160result": "48dd1caf84c1a49209ca44064846dc4ad0be1e47", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.drivinglicence.address.street1" + } +}; +exports.IDENTITY_DRIVINGLICENCE_ADDRESS_CITY = { + "vdxfid": "i6XMEh3jrxzdyoVYoNWhRSncR9oWSnmikd", + "indexid": "xBMThVUpiHDJbyNaf4ArPqK9SopXGndEyv", + "hash160result": "c1f3612774870d1f12320bff317e7790211d7121", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.drivinglicence.address.city" + } +}; +exports.IDENTITY_DRIVINGLICENCE_ADDRESS_REGION = { + "vdxfid": "i7sPBSqerD23RAqfN167aYePjfC8LL34UA", + "indexid": "xChVeFGjhXEi3LihDgkGYwAvmKD9CsNunu", + "hash160result": "991d24c053cb59a816e161fe3af2f40a7f2e3330", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.drivinglicence.address.region" + } +}; +exports.IDENTITY_DRIVINGLICENCE_ADDRESS_POSTCODE = { + "vdxfid": "i9eHAmpeA3tmpsVeG5EkHuVfALFrmpzLqM", + "indexid": "xEUPdaFj1N7ST3Ng7ktuGJ2CBzGsZbja5V", + "hash160result": "f5905bbdf2eb60b24ccf6851716cc0efe801a943", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.drivinglicence.address.postcode" + } +}; +exports.IDENTITY_DRIVINGLICENCE_ADDRESS_COUNTRY = { + "vdxfid": "i3xAMYBKLVdK89kuheXhTjuJTAxozmypj3", + "indexid": "x8nGpLcQBoqykKdwZLBrS8RqUpypqVUEV5", + "hash160result": "459844e00df4387514f31f182a88f7e13b0d3a05", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.drivinglicence.address.country" + } +}; +exports.IDENTITY_SELFIECHECK_IMAGE = { + "vdxfid": "iC22PxGqY7Mx3YT9kNrW1d11JNyGL56N8e", + "indexid": "xGr8rkhvPRacfiLBc4Wez1XYL2zHDDbJgD", + "hash160result": "c52d0023cce8c847a5097b6898f867651914b65d", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.selfiecheck.image" + } +}; +exports.IDENTITY_SELFIECHECK_VIDEO = { + "vdxfid": "iLfnRYzcdQXR6am8rZk7xNtTUbLZo5NLG6", + "indexid": "xRVttMRhUik5ikeAiFQGvmQzWFMajwrVzX", + "hash160result": "ac0674f6d656d434e0b5b310daaaed554c3a9bbc", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.selfiecheck.video" + } +}; +exports.IDENTITY_EMAIL_ISDELIVERABLE = { + "vdxfid": "iN5Tdse8NSwuW6A4ZavHbHoDyD8aVjn1Ky", + "indexid": "xSua6g5DDmAa8G36RGaSZgKkzs9bSnFbCX", + "hash160result": "8194ee01a0bc66dca2af9ba7c3bba4a24da70dcc", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.email.isdeliverable" + } +}; +exports.IDENTITY_EMAIL_BREACHCOUNT = { + "vdxfid": "iDy1YKGhzVjAiMiuAvFDqxQbmLRhLEjwPo", + "indexid": "xJo817hnqowqLXbw2buNpLw8nzSiAygHhx", + "hash160result": "8144d2d8cafd733bb03847166be8493d275e1473", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.email.breachcount" + } +}; +exports.IDENTITY_EMAIL_FIRSTBREACHEDAT = { + "vdxfid": "i3eSGR4wrLk5djHsnT18dDHrJBFSBBxVST", + "indexid": "x8UYjDW2hexkFuAue8fHbbpPKqGT4mjAzH", + "hash160result": "df796054181f57d3b61d655d604d42d6c6d8df01", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.email.firstbreachedat" + } +}; +exports.IDENTITY_EMAIL_LASTBREACHEDAT = { + "vdxfid": "iCuZWBzmxCoFcRFjXYFgC6g4jT7kzxvhew", + "indexid": "xHjfxzRroX1vEb8mPDuqAVCbm78ms8Hkhd", + "hash160result": "d1b421db4c835cfa67b491342c31f89283427567", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.email.lastbreachedat" + } +}; +exports.IDENTITY_EMAIL_DOMAIN_REGISTEREDAT = { + "vdxfid": "iGxV4SBRZMk5qWrQEKgUS4RoqzpDmyBEpC", + "indexid": "xMnbXEcWQfxkTgjS61LdQSxLseqEcTADNA", + "hash160result": "e195ef220f8e71bfa7bef160291ecaa0164de393", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.email.domain.registeredat" + } +}; +exports.IDENTITY_EMAIL_DOMAIN_FREEPROVIDER = { + "vdxfid": "iLUfvKcg92CYo3BvCuRf5o844d44kGLhJL", + "indexid": "xRJnP83kzLRDRD4x4b5p4Beb6H55fetTy7", + "hash160result": "0b0f213c88a1b0df6cd01721955b1d0c103981ba", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.email.domain.freeprovider" + } +}; +exports.IDENTITY_EMAIL_DOMAIN_CUSTOM = { + "vdxfid": "i4FSBFpQ6Ccjiy2g61GrxhBppv1jDDh6on", + "indexid": "x95Ye4FUwWqQM8uhwgw1w5iMra2k7F1Lfz", + "hash160result": "bea1175185aeaf256aa7f04795b2c8d0c8547e08", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.email.domain.custom" + } +}; +exports.IDENTITY_EMAIL_DOMAIN_DISPOSABLE = { + "vdxfid": "i52PJxRyjKAEkmQFd2oGYgZV3pcsQUcD1T", + "indexid": "x9rVmks4adNuNwHHUiTRX5625UdtJPBQ1w", + "hash160result": "3adf98cb5cc90a074a52a651c50f67f5f0a7fe10", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.email.domain.disposable" + } +}; +exports.IDENTITY_EMAIL_DOMAIN_TOPLEVEL_SUSPICIOUS = { + "vdxfid": "iCtAZWinafiyf4tmvPxFkKNn5KxayXTPSV", + "indexid": "xHiH2K9sRyweHEmon5cQihuK6yybre797b", + "hash160result": "85477eb8148562614c396ca64fc7563637b13167", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.email.domain.toplevel.suspicious" + } +}; +exports.IDENTITY_PASSPORT = { + "vdxfid": "iKgbqmZ4Ks9SPNQGj5PZ5TgXomYG4CtaXv", + "indexid": "xQWiJZz9BBN71YHJam3i3rD4qRZH1sbLHD", + "hash160result": "775f52820102c994e30a29b1828b064421afcab1", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.passport" + } +}; +exports.IDENTITY_PASSPORT_ORIGINALFRONT = { + "vdxfid": "iCwT1mHdci9wooC6Q8mtx8QssXzwiL4hxp", + "indexid": "xHmZUZiiU2NcRy58FpS3vWwQuC1xdM48mW", + "hash160result": "25023e23a25ba4daa7ac0a9c96180f5e90acd067", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.passport.originalfront" + } +}; +exports.IDENTITY_PASSPORT_ORIGINALBACK = { + "vdxfid": "iDXKJaroNRKr9GZfLFvH7LttJQaXqGoSrc", + "indexid": "xJMRmPHtDjYWmSShBwaS5jRRL4bYmTdC9J", + "hash160result": "21734b0f37ec51dd77bdab8c10065cf67b61386e", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.passport.originalback" + } +}; +exports.IDENTITY_PASSPORT_CROPPEDFRONT = { + "vdxfid": "i4cr6CxCYDHUDjc6UoMsDVAZoNep6Meuyi", + "indexid": "x9SxZ1PHPXW8quV8LV22Bsh6q2fpxtJ6Zd", + "hash160result": "274c241806d31576a57a074cc2f6b4c624078b0c", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.passport.croppedfront" + } +}; +exports.IDENTITY_PASSPORT_CROPPEDBACK = { + "vdxfid": "i6wA2ttX7vcxBXmrdmGEa44NZEFBZWoRYa", + "indexid": "xBmGVhKbyEqcohetVSvPYSauatGCUYDMs2", + "hash160result": "f56f1db46ddebc99f3c8954fc8bf1d26a9bef125", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.passport.croppedback" + } +}; +exports.IDENTITY_PASSPORT_FACE = { + "vdxfid": "iLCbvnyU4V3XeMz18CXAG5MCtjb2FjpcZX", + "indexid": "xR2iPbQYuoGCGXs2ytBKETsjvPc35DNZDm", + "hash160result": "26f7dc9d524f84a21c8a9e3f2dc5149f3a3c77b7", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.passport.face" + } +}; +exports.IDENTITY_PASSPORT_IDNUMBER = { + "vdxfid": "iDYih1jmCA1oexyxZ1PQFL5ewyciqoQ2rw", + "indexid": "xJNq9pAr3UEUH8rzQh3ZDicByddjgKM4vN", + "hash160result": "c8a25af227fc07e260119b370da0eae2a9517c6e", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.passport.idnumber" + } +}; +exports.IDENTITY_PASSPORT_CATEGORY = { + "vdxfid": "iMtpUJYWZmnnSJyJcshHRdWJZMhZVZZifT", + "indexid": "xSivw6ybR61T4UrLUZMSQ22qb1iaQux7BU", + "hash160result": "84a9f125285d7e93a1e676ed48e3fbe459780aca", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.passport.category" + } +}; +exports.IDENTITY_PASSPORT_EXPIRATIONDATE = { + "vdxfid": "i98TaZ3wTh3qRw2ufeunVY2MD5eKwoamGE", + "indexid": "xDxa3MV2K1GW46uwXLZwTvYtEjfLspcYEK", + "hash160result": "07727b480c654d59cb611ed01715e254eb37053e", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.passport.expirationdate" + } +}; +exports.IDENTITY_PASSPORT_ISSUINGCOUNTRY = { + "vdxfid": "iRHGM2GEYeRUuHKSG1wENVA16bdyVRxchn", + "indexid": "xW7NophKPxe9XTCU7hbPLsgY8FezLKmJHi", + "hash160result": "4798dee337b16fc22d26748fb0803738f99831ef", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.passport.issuingcountry" + } +}; +exports.IDENTITY_PASSPORT_ISSUINGREGION = { + "vdxfid": "i6Ay9VdcZjGrJur5SNyhBDZWzxGmo7qUmW", + "indexid": "xB15cJ4hR3VWw5j7J4dr9c642cHnbq2nm9", + "hash160result": "f3d9b605096f4c816de7d72c597fee07e75a961d", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.passport.issuingregion" + } +}; +exports.IDENTITY_PASSPORT_DATEOFBIRTH = { + "vdxfid": "iAjG8DwYfKxt9affJy6CUBDDFK5jaeHRLJ", + "indexid": "xFZNb2NdWeBYmkYhAekMSZjkGy6kWqAqyd", + "hash160result": "73eb23619d178f495a24b41aaf6aac107357924f", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.passport.dateofbirth" + } +}; +exports.IDENTITY_PASSPORT_ADDRESS_STREET1 = { + "vdxfid": "i7HPJNB16V5pws8xSq4a8pHF29Mcg6sUyy", + "indexid": "xC7VmAc5woJVa31zJWij7Con3oNdXuBysY", + "hash160result": "c28625c4dfc12d3cdd85f8c7272e87a57523c529", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.passport.address.street1" + } +}; +exports.IDENTITY_PASSPORT_ADDRESS_CITY = { + "vdxfid": "iFSLsk21VvWSWLg9a4XFTB3kEN8bLnTB7c", + "indexid": "xLGTLYT6MEj78WZBRkBQRZaHG29cBfjnYu", + "hash160result": "c06884e75232e86de75c6ccbd5605a3352dd3783", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.passport.address.city" + } +}; +exports.IDENTITY_PASSPORT_ADDRESS_REGION = { + "vdxfid": "iFNoUQhExFEYTgrqgy7x22Q6URM7ek9L3J", + "indexid": "xLCuwD8KoZTD5rjsYen6zQvdW5N8Z4oGqf", + "hash160result": "7b7baa6d0d788f434536aa472c57d9de40678c82", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.passport.address.region" + } +}; +exports.IDENTITY_PASSPORT_ADDRESS_POSTCODE = { + "vdxfid": "iS4SakGdB4ek1Q1QAitXUwFEk1RVyi3rLY", + "indexid": "xWtZ3Yhi2NsQdZtS2QYgTKmmmfSWrxdFKY", + "hash160result": "4457551bc48db37393f5ec3ec3d0cf6766dcbcf7", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.passport.address.postcode" + } +}; +exports.IDENTITY_PASSPORT_ADDRESS_COUNTRY = { + "vdxfid": "iB9w9GgcJdGTt3ZuM2pm5qpDBA3UaJdcvj", + "indexid": "xFz3c57h9wV8WDSwCiUv4ELkCp4VNyPHLr", + "hash160result": "dd93bcbecc805e5b1606efafa1ecab6b33e53c54", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.passport.address.country" + } +}; +exports.IDENTITY_RESIDENCEPERMIT = { + "vdxfid": "i8WZetqKFn98rHRZGvAvPuzPyrJeyUMjfb", + "indexid": "xDLg7hGQ76MoUTJb8bq5NJWw1WKftQg9VL", + "hash160result": "712ef00d9937eb4ade0fd3e627c2df1d99503b37", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residencepermit" + } +}; +exports.IDENTITY_RESIDENCEPERMIT_ORIGINALFRONT = { + "vdxfid": "iC5NrmPgKckxBjKv7v9HjUMytm4jRtEBgZ", + "indexid": "xGuVKZpmAvycouCwyboShrtWvR5kNYzWoH", + "hash160result": "639ed2ef9da2f5e75fe63e1ccf83d1b54e68585e", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residencepermit.originalfront" + } +}; +exports.IDENTITY_RESIDENCEPERMIT_ORIGINALBACK = { + "vdxfid": "iLTPvrZi8HNALuVmYeAWnSnLdZ5GsAAUcx", + "indexid": "xRHWPeznybapy5NoQKpfkqJsfD6HmQW5eW", + "hash160result": "94d200a22dbdfa7ba47d1970c21eacb65f7543ba", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residencepermit.originalback" + } +}; +exports.IDENTITY_RESIDENCEPERMIT_CROPPEDFRONT = { + "vdxfid": "i6T3rairykWA5vVEtQqptjp5RBRhTCmsBS", + "indexid": "xBHAKP9wq4ipi6NGk6Vys8LcSqSiKAMKZU", + "hash160result": "14136815f288a4b6426c7f4ab6b28221dcf0a020", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residencepermit.croppedfront" + } +}; +exports.IDENTITY_RESIDENCEPERMIT_CROPPEDBACK = { + "vdxfid": "iHssgpjB2gsusjjLH36N3KqUQqz7JPXumA", + "indexid": "xNhz9dAFt16aVucN8ikX1iN1SW18D7SNDP", + "hash160result": "ce3cae77f2010009817f1e01de52ce8a493cfc9d", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residencepermit.croppedback" + } +}; +exports.IDENTITY_RESIDENCEPERMIT_FACE = { + "vdxfid": "iNVvVYKcKuredXKvctn5uQxp3kNXoJrwNb", + "indexid": "xTL2xLkhBE5KFhCxUaSEsoVM5QPYfELeHf", + "hash160result": "4dd17db50d569a63cc892d78850ac9de1d0eaed0", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residencepermit.face" + } +}; +exports.IDENTITY_RESIDENCEPERMIT_IDNUMBER = { + "vdxfid": "iMxygBvDFftAnmUCjVLh21etV5v4wt9zdk", + "indexid": "xSo68zMJ6z6qQwMEbAzqzQBRWjw5u6Tm63", + "hash160result": "ab544471e583d6a11245bb971e3ee1ef5ed1d3ca", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residencepermit.idnumber" + } +}; +exports.IDENTITY_RESIDENCEPERMIT_CATEGORY = { + "vdxfid": "iGbMb21an69VE6iTH2iRtRFKCEUZPJHTwU", + "indexid": "xMRU3pSfdQN9rGbV8iNaromrDtVaCufAXu", + "hash160result": "ae9031bab1ee600e10aa16ec1d4c13def953e48f", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residencepermit.category" + } +}; +exports.IDENTITY_RESIDENCEPERMIT_EXPIRATIONDATE = { + "vdxfid": "iJ48ALemxyMV6DYzeuRMe8Fn78iMZdjSXZ", + "indexid": "xNtEd95rpHa9iPS2Wb5WcWnK8njNXD9HEH", + "hash160result": "d3083b08621d6ff5dc3f7f9cace34f944d7aec9f", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residencepermit.expirationdate" + } +}; +exports.IDENTITY_RESIDENCEPERMIT_ISSUINGCOUNTRY = { + "vdxfid": "i7UhTp4gruQwtkC1bi4RxE4wUAsro6n9Ym", + "indexid": "xCJovcVmiDdcWv53TPiavcbUVptsgMKzdL", + "hash160result": "75e37dc8957c8c6765c60962804d446b2de0e82b", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residencepermit.issuingcountry" + } +}; +exports.IDENTITY_RESIDENCEPERMIT_ISSUINGREGION = { + "vdxfid": "iERBNWk2tyaGJ2w8P1kM88Mdj5WA9qFzbv", + "indexid": "xKFHqKB7kHnvvCpAEhQW6WtAkjXAymjqXM", + "hash160result": "788165581de37b5473c2f127d387f3d7a8630778", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residencepermit.issuingregion" + } +}; +exports.IDENTITY_RESIDENCEPERMIT_DATEOFBIRTH = { + "vdxfid": "iM62dN7LSHWDuetPi6qAewG6bzYwFrcqBN", + "indexid": "xRv96AYRHbitXpmRZnVKdKnddeZxAivvFE", + "hash160result": "e2533190e4822ab51c5b2029039fbb0d431131c1", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residencepermit.dateofbirth" + } +}; +exports.IDENTITY_RESIDENCEPERMIT_ADDRESS = { + "vdxfid": "iCA8P2rVs5DjtzQpXEnPJcG4KBs79C9EpL", + "indexid": "xGzEqqHaiPSQXAHrNvSYGznbLqt83gLGV5", + "hash160result": "2c7264a72e1d7937da951620039e48a0c8663e5f", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residencepermit.address" + } +}; +exports.IDENTITY_RESIDENCEPERMIT_ADDRESS_STREET1 = { + "vdxfid": "iMuY2CbmQpCFzodGBtqxogmTb5dYfNbCJa", + "indexid": "xSjeV12rG8QvcyWJ3aW7n5HzcjeZaxtGwr", + "hash160result": "444cbb0dc6f471ecb2261dc7d6731cd97e272dca", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residencepermit.address.street1" + } +}; +exports.IDENTITY_RESIDENCEPERMIT_ADDRESS_CITY = { + "vdxfid": "iRckJ1VkfYazfVHWJuA9iXTth83ZYp8znz", + "indexid": "xWSrkovqWrofHfAYAapJguzRin4aPEqHJK", + "hash160result": "73e22f5d24515103052ab165736a0198a7d4e0f2", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residencepermit.address.city" + } +}; +exports.IDENTITY_RESIDENCEPERMIT_ADDRESS_REGION = { + "vdxfid": "iBpH337NTJSLjSxbBWuu2wBLu12k4JVGk4", + "indexid": "xGePVqYTJcf1Mcqd3Ca41Khsvf3kyxtNXH", + "hash160result": "2f7b3040cf60259ee4bf6dfc93a4de42ab4e7d5b", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residencepermit.address.region" + } +}; +exports.IDENTITY_RESIDENCEPERMIT_ADDRESS_POSTCODE = { + "vdxfid": "iGKi47jtg6CumKYSUBj57drgLNGzhJY3Gj", + "indexid": "xM9pWvAyXQRaPVRUKsPE62PDN2J1Zp4d6b", + "hash160result": "db85ea63848a6ad2c3a0e82bb29e215c00c2ee8c", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residencepermit.address.postcode" + } +}; +exports.IDENTITY_RESIDENCEPERMIT_ADDRESS_COUNTRY = { + "vdxfid": "i8KD9CUn7Su4YT44WhbD8HYA1K425cFCqM", + "indexid": "xD9Kbzurxm7jAcw6NPFN6g4h2y531jRanx", + "hash160result": "75970ae74cd40419dc78ecef7be22c5ee09d1535", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residencepermit.address.country" + } +}; +exports.IDENTITY_RESIDENTCARD = { + "vdxfid": "iKkJFFtbxRMJutjoruW47Mc1sCfdGYQrC9", + "indexid": "xQaQi4KgojZyY4cqibAD5k8Ytrge9jwt3u", + "hash160result": "2b737a5733b91d305dcf07d9e75797740da97db2", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residentcard" + } +}; +exports.IDENTITY_RESIDENTCARD_ORIGINALFRONT = { + "vdxfid": "iNMJhZ3wie5U2SRF7WSFTpjJo6B6RSTR4t", + "indexid": "xTBRAMV2ZxJ8ecJGyC6QSDFqpkC7KTFMbW", + "hash160result": "e440d2d8bab46633691a12e7bed0ea785bd90ccf", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residentcard.originalfront" + } +}; +exports.IDENTITY_RESIDENTCARD_ORIGINALBACK = { + "vdxfid": "i4pAk8J5ec2wn55VattFRr7PyN4J2L13HJ", + "indexid": "x9eHCvjAVvFcQExXSaYQQEdw125Jz84d8u", + "hash160result": "9fa70ca8b49eab8c3e704f78f0e0ae1bc52caf0e", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residentcard.originalback" + } +}; +exports.IDENTITY_RESIDENTCARD_CROPPEDFRONT = { + "vdxfid": "iLnx7NDcAWtb9uWicdgSaiwco56TywMh5w", + "indexid": "xRd4aAeh1q7Fn5PkUKLbZ7U9pj7UvU8v2V", + "hash160result": "fa7347c3517552a028890dacaf889a6ead39f6bd", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residentcard.croppedfront" + } +}; +exports.IDENTITY_RESIDENTCARD_CROPPEDBACK = { + "vdxfid": "i8WjL22L4UeaCDKZuj8R4Uub6zurTPdaLv", + "indexid": "xDLqnpTQunsEpPCbmQna2sS88evsLJL51v", + "hash160result": "b5134fe72682aa4f0dc645ceb73421dc07644337", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residentcard.croppedback" + } +}; +exports.IDENTITY_RESIDENTCARD_FACE = { + "vdxfid": "i6dGShbLY2ppZnXSyfvdtdGFkCxBQd2r9Y", + "indexid": "xBTNuW2RPM3VBxQUqMans1nnmryCFH4rRD", + "hash160result": "25a41b37f64414a2477c5c0d1a139d64ce9b8f22", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residentcard.face" + } +}; +exports.IDENTITY_RESIDENTCARD_IDNUMBER = { + "vdxfid": "iKFkbwDcQRXjapZcZAXsaMXjgER9CZbwZx", + "indexid": "xQ5s4jehFjkQCzSeQrC2Yk4GhtSA2GbM4B", + "hash160result": "e30d9a01765325e02ca22f60335d4bdb499917ad", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residentcard.idnumber" + } +}; +exports.IDENTITY_RESIDENTCARD_CATEGORY = { + "vdxfid": "i46Fgc8ev9zAkjikjHWreqSXkMRpFr5Lsi", + "indexid": "x8vN9QZjmUCqNubnayB1dDy4n1SqAqg4vn", + "hash160result": "c0039a4929d081eec1d1f5ca3040e19bded3c106", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residentcard.category" + } +}; +exports.IDENTITY_RESIDENTCARD_EXPIRATIONDATE = { + "vdxfid": "iBA1oFvDABKqbu9i61AEGy1m5fFHdCWkpy", + "indexid": "xFz8G4MJ1VYWE52jwgpPFMYJ7KGJUd6Y4b", + "hash160result": "0866dd99514f509c9ad4584b3f570515f4c74054", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residentcard.expirationdate" + } +}; +exports.IDENTITY_RESIDENTCARD_ISSUINGCOUNTRY = { + "vdxfid": "iHBgD199BSEQWREtiW8dP259DX4qg6KjkM", + "indexid": "xN1nfoaE2kT58b7vaBnnMQbgFB5rWuKCtd", + "hash160result": "ef88ffb14a8b66dacc690351fa9c3d35a8036296", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residentcard.issuingcountry" + } +}; +exports.IDENTITY_RESIDENTCARD_ISSUINGREGION = { + "vdxfid": "i6jygVNjzZUFEXVgtzWxXpBYf5rwjXF92J", + "indexid": "xBa69HopqsgurhNikgB7WCi5gjsxbi12z3", + "hash160result": "dc31e031328cfe3697527e046a52cc372687d423", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residentcard.issuingregion" + } +}; +exports.IDENTITY_RESIDENTCARD_DATEOFBIRTH = { + "vdxfid": "iQfYTwmTxXzxxyFh6XbY2PQVLVwswRoJL1", + "indexid": "xVVevkCYorDdb98ixDFgzmw2N9xtnBn6M2", + "hash160result": "73e0e5f4af76255bc2a3583ad9a7b1d0241470e8", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residentcard.dateofbirth" + } +}; +exports.IDENTITY_RESIDENTCARD_ADDRESS_STREET1 = { + "vdxfid": "iJ67qMPN6tyrLXBhbJpKKBZYpkcBzZD8S4", + "indexid": "xNvEJ9pSxDCWxh4jSzUUHa65rQdCviMqur", + "hash160result": "8540d9cb71ca32f4c03caf26a4cffa4d51094da0", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residentcard.address.street1" + } +}; +exports.IDENTITY_RESIDENTCARD_ADDRESS_CITY = { + "vdxfid": "iLCQ2n5tKHzKcVBv8of1eYmdWEdEY5vTUN", + "indexid": "xR2WVaWyAcCzEf4wzVKAcwJAXteFUoFSux", + "hash160result": "7990100969a22f4b4ba35613b3994219e74d6db7", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residentcard.address.city" + } +}; +exports.IDENTITY_RESIDENTCARD_ADDRESS_REGION = { + "vdxfid": "iPWcAQ6zbC9rKaaWAgrpoHmKs5G5SQCprF", + "indexid": "xULidCY5SWNWwkTY2NWymgHrtjH6QfP6JL", + "hash160result": "ff3f1523bfb1fe501ef10f0036c9f059b64bc7db", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residentcard.address.region" + } +}; +exports.IDENTITY_RESIDENTCARD_ADDRESS_POSTCODE = { + "vdxfid": "iG1QGYyp4SkiP7b9ngPwkTGC3DxVG3hB16", + "indexid": "xLqWjMQtukyP1HUBeN46iqnj4syW4eat4U", + "hash160result": "f345aa72196b006e2200bd08ed0ea165806c7889", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residentcard.address.postcode" + } +}; +exports.IDENTITY_RESIDENTCARD_ADDRESS_COUNTRY = { + "vdxfid": "i4wzngZfZb2QBnjr2TjtoMoMF9roSqQkho", + "indexid": "x9n7FUzkQuF4oxcst9Q3mkKtGospNqDjEQ", + "hash160result": "dd2a94da0a94115ed04de616b7d0ea1b19312a10", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residentcard.address.country" + } +}; +exports.IDENTITY_IDCARD = { + "vdxfid": "iK7FrcxNvsej84qZjYR73iGgEV96sGKwTU", + "indexid": "xPwNKRPTnBsPkEibbE5G26oDG9A7j4JSm7", + "hash160result": "4f2b2c852e4cfa5a640988af78c4d02243467cab", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.idcard" + } +}; +exports.IDENTITY_IDCARD_ORIGINALFRONT = { + "vdxfid": "iCnLNq42DxhuK84Nes4UGjFFUuNsGGpuBZ", + "indexid": "xHcSqdV75GvZwHwQWYidF7mnWZPtATN7Ky", + "hash160result": "9f5f63641e6e935628d7602e92814311ea631766", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.idcard.originalfront" + } +}; +exports.IDENTITY_IDCARD_ORIGINALBACK = { + "vdxfid": "iJyfvwrUeTRiGxiYw6oJZ3uALsuBt7QTyy", + "indexid": "xPonPkHZVmeNu8bannTTXSRhNXvCpAD3MB", + "hash160result": "df3a44e11ad54673eff910c1320d9f50100b0daa", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.idcard.originalback" + } +}; +exports.IDENTITY_IDCARD_CROPPEDFRONT = { + "vdxfid": "iFDp8jWwybweGStGQnYxwhbi8eiucZ29sr", + "indexid": "xL3vbXx2pvAJtcmJGUD7v68FAJjvZmrsga", + "hash160result": "b10845ae9b29f3ed25f33f091398fd0a1536d980", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.idcard.croppedfront" + } +}; +exports.IDENTITY_IDCARD_CROPPEDBACK = { + "vdxfid": "i8GpXrygUPpQYVwcoZ7JVRB1xB46xZsMuG", + "indexid": "xD6vzfQmKi35AfpefEmTTohYyq57sdLVxr", + "hash160result": "84c05d2d84ab69db2834df22602f34445ae9a134", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.idcard.croppedback" + } +}; +exports.IDENTITY_IDCARD_FACE = { + "vdxfid": "i8sfiwALhk4FtSaWSnBWYwKnWN3G7m3jyU", + "indexid": "xDhnBjbRZ4GvWcTYJTqfXKrKY24GxBC5cg", + "hash160result": "4afc5fda25a15a4627b8426f40594ff2e11d393b", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.idcard.face" + } +}; +exports.IDENTITY_IDCARD_IDNUMBER = { + "vdxfid": "iBEJB1xD1mpR4kYQbYieW3hNFpe5QmQ6qA", + "indexid": "xG4QdpPHs635gvRSTENoUSDuHUf6JB2izs", + "hash160result": "0af18c033e6ad395bdfb5fbdbf5144d63c1d1055", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.idcard.idnumber" + } +}; +exports.IDENTITY_IDCARD_CATEGORY = { + "vdxfid": "i4HCpvV1NJd4Ka8atCtDkXs4XLAkrmtKib", + "indexid": "x97KHiv6Dcqiwk1cjtYNivPbYzBmg48ama", + "hash160result": "68b49fa5bf2ed00672c881c15167fee2c304d408", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.idcard.category" + } +}; +exports.IDENTITY_IDCARD_EXPIRATIONDATE = { + "vdxfid": "iNTbsfTmeAm7KUFehtCq3RH1JgbUdTJwCt", + "indexid": "xTHiLTtrVUymwe8gZZrz1ooYLLcVZC5A4n", + "hash160result": "f4b807e32848d5a40815e2aa19cb219c64ae3dd0", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.idcard.expirationdate" + } +}; +exports.IDENTITY_IDCARD_ISSUINGCOUNTRY = { + "vdxfid": "iJ5qVRWTHerkVreE9UrSfKyphD3XB9s8FA", + "indexid": "xNuwxDwY8y5R82XG1AWbdiWMis4Y3BXDg7", + "hash160result": "2cc5492966de5135e638de253b497cccb8643fa0", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.idcard.issuingcountry" + } +}; +exports.IDENTITY_IDCARD_ISSUINGREGION = { + "vdxfid": "i8dHTbZ62Bth8NwkxasnKFpvX4EZYuBun4", + "indexid": "xDTPvPzAsW7MkYpnpGXwHeMTYiFaMyp6FD", + "hash160result": "f42f7b71bb43c590b9063755754bf2d534b58038", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.idcard.issuingregion" + } +}; +exports.IDENTITY_IDCARD_DATEOFBIRTH = { + "vdxfid": "iGcwhC6znG63pb6jqsRnrtDjXV4aXXsub2", + "indexid": "xMT49zY5daJiSkymhZ5wqGkGZ95bMGYJ9r", + "hash160result": "4d0c72c3369a0ac64711e58ae1b10785f1363190", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.idcard.dateofbirth" + } +}; +exports.IDENTITY_IDCARD_ADDRESS_STREET1 = { + "vdxfid": "i6jMXjNE9qioZ2dFricFnEBEQEWK5Kg3PS", + "indexid": "xBZTzXoK19wUBCWHiQGQkchmRtXKugcKWw", + "hash160result": "2cee0d13a2fdeaac83d052ad27610da8bf59b623", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.idcard.address.street1" + } +}; +exports.IDENTITY_IDCARD_ADDRESS_CITY = { + "vdxfid": "i3viAeqayk3KDk5tQpYcz6gFs1ayW5vBma", + "indexid": "x8kpdTGfq4FyquxvGWCmxVCntfbzM8iAVb", + "hash160result": "a10bfcd1cfd12d466a276339072d2f2a7ec6f304", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.idcard.address.city" + } +}; +exports.IDENTITY_IDCARD_ADDRESS_REGION = { + "vdxfid": "iEHvf3XCFacMihTQPVXxNeo6hBCqggDFie", + "indexid": "xK837qxH6tq2LsLSFBC7M3KdiqDrYBNMK7", + "hash160result": "55af249b3ceb591709c693017e5b7b1cb131a876", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.idcard.address.region" + } +}; +exports.IDENTITY_IDCARD_ADDRESS_POSTCODE = { + "vdxfid": "i3yAnt6zdceYxbCBnLwxn2tNdM4BnPkzhT", + "indexid": "x8oHFgY5UvsDam5De2c7kRQuf15ChzdWFA", + "hash160result": "acd086baf0863cff86fc56ec0fbb16dd18d56a05", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.idcard.address.postcode" + } +}; +exports.IDENTITY_IDCARD_ADDRESS_COUNTRY = { + "vdxfid": "iA6KVD2C4QJAyKfCS3XfQV8AxmpR9R3XG5", + "indexid": "xEvRx1TGuiWqbVYEHjBpNsehzRqS2fp4qg", + "hash160result": "bab14b514d91d7daa39175c90e29a956dec19548", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.idcard.address.country" + } +}; +exports.IDENTITY_VISA = { + "vdxfid": "iDCwZf84AhbJkm4zKZP7Le8h8ukJS9FySA", + "indexid": "xJ342TZ921oyNvx2BF3GK2fEAZmKGeUQUd", + "hash160result": "57faa6b546ac92c71022178b8c5e9fbae9bebe6a", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.visa" + } +}; +exports.IDENTITY_VISA_ORIGINALFRONT = { + "vdxfid": "iGAgzyLDVs5vYFLRgXVnkQpDRKy9Zh1TiV", + "indexid": "xLzoTmmJMBJbARDTYD9wioLkSyzARsVQWr", + "hash160result": "755da3361216260b786ba78fbe68800557223a8b", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.visa.originalfront" + } +}; +exports.IDENTITY_VISA_ORIGINALBACK = { + "vdxfid": "i3becgcmf85RiY2PAxsp3fbuGKG8Qc73t1", + "indexid": "x8Rm5V3rWSJ6LhuR2eXy248SHyH9Jjue4S", + "hash160result": "e71909c77e2e0361764d22b81f4f53085fe85801", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.visa.originalback" + } +}; +exports.IDENTITY_VISA_CROPPEDFRONT = { + "vdxfid": "iAapfFQMAQy7USdjRwqzAZ2nWhRMSiQMmV", + "indexid": "xFQw83qS1jBn6cWmHdW98wZKYMSNHsb2wy", + "hash160result": "56ed30f8daf83e3b09eee57517be45b6b8c1f94d", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.visa.croppedfront" + } +}; +exports.IDENTITY_VISA_CROPPEDBACK = { + "vdxfid": "i3quMdmv3vAQDBA6nzM8fTiFtqJrw7tcnf", + "indexid": "x8g1pSCzuEP4qM38eg1HdrEnvVKsoXBZ7R", + "hash160result": "1d8106821498549cebc0af6f8d120b9933090b04", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.visa.croppedback" + } +}; +exports.IDENTITY_VISA_FACE = { + "vdxfid": "iAqxnB58655ZcRLAUm2Utib2rguRXT9wZM", + "indexid": "xFg5EyWCwPJEEbDCLSgds77ZtLvSRpw2k9", + "hash160result": "59564e826c8342a2b721708f6a83c9761dc6d650", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.visa.face" + } +}; +exports.IDENTITY_VISA_IDNUMBER = { + "vdxfid": "iQ5LfUtuggDyqbePUB9iWLgxYj7tvDm2VE", + "indexid": "xUuT8HKzXzSeTmXRKrosUjDVaP8upm7rqg", + "hash160result": "77ae761bf6bf7922ff8e47b53bd88107be15f8e1", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.visa.idnumber" + } +}; +exports.IDENTITY_VISA_CATEGORY = { + "vdxfid": "iH4nhrNsZKK6bEkgLDu17fBPR5dnVgitiQ", + "indexid": "xMtuAeoxQdXmDQdiBuZA63hvSjeoT3wsnv", + "hash160result": "8052162609b4da20bb5932ead5b6deedbb861495", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.visa.category" + } +}; +exports.IDENTITY_VISA_EXPIRATIONDATE = { + "vdxfid": "iNW2k7p7hVK2GCc7m1k4mihqh8jd94Dmnh", + "indexid": "xTL9CvFCYoXgtNV9chQDk7ENinkdzPUodD", + "hash160result": "5eaa0aef6ed6d27ee4909bc6ce8619c60346b3d0", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.visa.expirationdate" + } +}; +exports.IDENTITY_VISA_ISSUINGCOUNTRY = { + "vdxfid": "i5vDfPKMfCRPXVRhfumjWPEvBFhNMVjtGK", + "indexid": "xAkL8BkSWWe49fJjXbRtUmmTCuiPJGBZ2c", + "hash160result": "ebf49255193b4ffbb3a0487106a4df98833bcc1a", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.visa.issuingcountry" + } +}; +exports.IDENTITY_VISA_ISSUINGREGION = { + "vdxfid": "iPRc9Ns6LadQNYU7DqSNyx7LW8W9dPKDjC", + "indexid": "xUFicBJBBtr4ziM95X6XxLdsXnXAYQ1XFN", + "hash160result": "a1217c6e44b1f47faf9d59378206009d8433d5da", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.visa.issuingregion" + } +}; +exports.IDENTITY_VISA_DATEOFBIRTH = { + "vdxfid": "i55bTsxLkCTmE6VvppvG8doYnmxuHhec65", + "indexid": "x9uhvgPRbWgRrGNxgWaR72L5pRyvA4vVWm", + "hash160result": "ed824bbfd195e63d6d5151a07eda49eba60c9a11", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.visa.dateofbirth" + } +}; +exports.IDENTITY_VISA_ADDRESS_STREET1 = { + "vdxfid": "iMzWxFVzJHbQm5YWv9c1eujvrUrPHAGVAc", + "indexid": "xSpdR3w59bp5PFRYmqGAdJGTt8sQ8o4mpu", + "hash160result": "05992eb838a4f562b6b7e0ff84bb05cdac571ecb", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.visa.address.street1" + } +}; +exports.IDENTITY_VISA_ADDRESS_CITY = { + "vdxfid": "i8YXgZ7doRhidT5phX6qyRnttV6hZiyWTm", + "indexid": "xDNe9MYiejvPFcxrZCkzwpKRv97iS3TQjA", + "hash160result": "04959daab853c797bbbcb9c5ead7376e4a809a37", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.visa.address.city" + } +}; +exports.IDENTITY_VISA_ADDRESS_REGION = { + "vdxfid": "i6YkTDEi1M1mzuTyzww8hNoksJFpev17Fu", + "indexid": "xBNrv1fnrfESd5M1rdbHfmLHtxGqUoeALR", + "hash160result": "3a47a53e8717444b5d31e8618049daa8cde8b421", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.visa.address.region" + } +}; +exports.IDENTITY_VISA_ADDRESS_POSTCODE = { + "vdxfid": "iBJDLHSLB4cHvaeXazFp25Be3V9yRWmcoK", + "indexid": "xG8Ko5sR2NpxYkXZSfuxzTiB59AzMUATiw", + "hash160result": "dd0d87e3163157402aa16d2017a3ea06d6bccd55", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.visa.address.postcode" + } +}; +exports.IDENTITY_VISA_ADDRESS_COUNTRY = { + "vdxfid": "iQ9Z1PZMMp49rtDuGQSjfEZn3xACfxLAYa", + "indexid": "xUyfUBzSD8GpV46w866tdd6K5cBDbMPuNo", + "hash160result": "c45655a6924c0b377e9182869dc780df690dc4e2", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.visa.address.country" + } +}; +exports.IDENTITY_PERSONALDETAILS = { + "vdxfid": "i8SSgM1z7XVoCtoP9CCsMms3zCndaNjtCe", + "indexid": "xDGZ99T4xqiTq4gQzss2LAPb1roeUyLwkU", + "hash160result": "a8fbe89451c1d0a77b336ccf6b0fb7601dd47336", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.personaldetails" + } +}; +exports.IDENTITY_CONTACTDETAILS = { + "vdxfid": "iRLT8V9NN178CvZQusJSHuyuFC2fD2QmE3", + "indexid": "xWAZbHaTDKKnq6SSmYxbGJWSGr3g1GRDYH", + "hash160result": "b9185ad980909708754a484bf11edc9febd8cbef", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.contactdetails" + } +}; +exports.IDENTITY_LOCATION = { + "vdxfid": "iGmiLZ7J6GjxjZ4rkSMsDzyyvWtmMBjnbo", + "indexid": "xMbpoMYNwaxdMiwtc822CPWWxAunLDE1BS", + "hash160result": "15ea60d9ddde976095b0c79ceecef7b034cfd991", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.location" + } +}; +exports.IDENTITY_BANKINGDETAILS = { + "vdxfid": "i8DUrZJJRjNQMJNeJ3Ti6pbpKPJ55LECyJ", + "indexid": "xD3bKMjPH3b4yUFg9j7s5D8MM3K612HEir", + "hash160result": "a7e5de6ac208f110d0509cffeb916b8dd03c0034", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.bankingdetails" + } +}; +exports.IDENTITY_DOCUMENTS = { + "vdxfid": "iCm3ERZoUw2ze1P11QyRUtvhKYovCWFXbT", + "indexid": "xHb9hDztLFFfGBG2s6daTHTEMCpw3tcbVJ", + "hash160result": "ee9f8d5ba7366983cf9b9d3e5e8ac50898a9d865", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.documents" + } +}; +exports.IDENTITY_BANKACCOUNT = { + "vdxfid": "iN4AgB4KEN1C3TfZnYDFUhxn37PdcrZvxT", + "indexid": "xStH8yVQ5gDrfdYbeDsQT6VK4mQeYDjcFm", + "hash160result": "122bf0739d7d1def003656a63c443efb6c14cfcb", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.bankaccount" + } +}; +exports.IDENTITY_BANKINGDETAILS_CURRENCY = { + "vdxfid": "i5k8pb9FHf5VZJKki6him1WMBkpyhe56BY", + "indexid": "xAaFHPaL8yJABUCnZnMsjQ2tDQqzfUkZRm", + "hash160result": "cc655f9f104ad6c25cc65407121fa7ac1208e418", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.bankingdetails.currency" + } +}; +exports.IDENTITY_BANKINGDETAILS_COUNTRY = { + "vdxfid": "iHYqZF4Asa4erZR9kJ5G5nWRNGWdiS8vBh", + "indexid": "xNNx23VFitHKUjJBbyjR4B2xPvXebL5g4h", + "hash160result": "cf7870c11608bf6e58890fbfc18ffe0db98d629a", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.bankingdetails.country" + } +}; +exports.IDENTITY_BANKINGDETAILS_STREET1 = { + "vdxfid": "iRhANjQk2G3aFXiaGtG68kZjdYr2iVXQJJ", + "indexid": "xWXGqXqpsaGEshbc8ZvF796GfCs3bDhrgC", + "hash160result": "bd420c73e6bba2e48542cddf188c23b8c098b6f3", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.bankingdetails.street1" + } +}; +exports.IDENTITY_BANKINGDETAILS_STREET2 = { + "vdxfid": "iFWtcLUKAECLrREJr6mxtHM9xPUocxmTSY", + "indexid": "xLM158uQ1YR1Ub7LhnS7rfsgz3VpTpBcCu", + "hash160result": "7f1a53da2e265bab3230d9eec1ed0f36d7041484", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.bankingdetails.street2" + } +}; +exports.IDENTITY_BANKINGDETAILS_CITY = { + "vdxfid": "iQxBEB8sXNez25HJCzvnTWtWqXUkEVAuo8", + "indexid": "xVnHgyZxNgseeFAL4gawRuR3sBVm7nyQqt", + "hash160result": "5878bb5b9371344acb1b679316e0e087046c95eb", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.bankingdetails.city" + } +}; +exports.IDENTITY_BANKINGDETAILS_REGION = { + "vdxfid": "i4HJ5yrzBFEwjiYgzptMcrBsCeBjPYQJFX", + "indexid": "x97QYnJ52ZTcMtRirWYWbEiQEJCkKnxArM", + "hash160result": "7bf3a5ee05846c54bd19032e6ee9069cbc68d808", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.bankingdetails.region" + } +}; +exports.IDENTITY_BANKINGDETAILS_POSTALCODE = { + "vdxfid": "iFVaE922Bzrro6rb87d9En2t2AAGx7EivG", + "indexid": "xLKggwT73K5XRGjcyoHJDAZR3pBHqz4Utt", + "hash160result": "ebd93a0f4fb8db6fb0cb8d397c45b41a0142d483", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.bankingdetails.postalcode" + } +}; +exports.IDENTITY_BANKINGDETAILS_TAXNUMBER = { + "vdxfid": "i6Gbi3EkYrbREumkLmHUedbzrisXkRzwKY", + "indexid": "xB6iAqfqQAp5s5enCSwdd28XtNtYcHgrDb", + "hash160result": "bcc691f5d53f99e196b291ea2a00a9805ff4a61e", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.bankingdetails.taxnumber" + } +}; +exports.IDENTITY_BANKINGDETAILS_TAXCOUNTRY = { + "vdxfid": "iMJzAfPjqvWJdYyoWTX79cSjd51HbVc7wC", + "indexid": "xS96dTpphEiyFirqN9BG7zyGej2JTACDB1", + "hash160result": "e19f920e684c7d906dd8c85d72a5d5f0cd6ba4c3", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.bankingdetails.taxcountry" + } +}; +exports.IDENTITY_BANKINGDETAILS_FIRSTNAME = { + "vdxfid": "iGAomW7jtsy7zRaoMFU48KvrHahHwdjzi7", + "indexid": "xLzvEJYpkCBncbTqCw8D6iTPKEiJpW3beK", + "hash160result": "d33bd09ba3184bf0e3fa00ad62e92a7a99c83f8b", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.bankingdetails.firstname" + } +}; +exports.IDENTITY_BANKINGDETAILS_LASTNAME = { + "vdxfid": "iMrvbLJnZawGsdFshtrHM3QKa4pDPbRk3L", + "indexid": "xSh348jsQu9wVo8uZaWSKRvrbiqED1eny3", + "hash160result": "4a0d68f2cafc3cbe827a91fd5038c65878bfaec9", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.bankingdetails.lastname" + } +}; +exports.IDENTITY_BANKINGDETAILS_PHONENUMBER = { + "vdxfid": "i9jKPi8ubg5fx3BBmZdiyobJxNgzcmV9et", + "indexid": "xEZRrWZzSzJLaD4DdFHsxC7qz2i1YejHqk", + "hash160result": "b092c8f73031298d26b919f4b398fa9b66f19c44", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.bankingdetails.phonenumber" + } +}; +exports.IDENTITY_BANKINGDETAILS_NUMBER = { + "vdxfid": "iKGaF7fZ6yAvwJyxcmpuas2Hn9PZPF99yf", + "indexid": "xQ6ghv6dxHPbZUrzUTV4ZFYpooQaFZG1aa", + "hash160result": "fcceea7c24223218bc9313e8176daea6155e3fad", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.bankingdetails.number" + } +}; +exports.IDENTITY_BANKINGDETAILS_TYPE = { + "vdxfid": "iNkzXo7BBcUvCBH8somKyFtAFsR3mmmYuG", + "indexid": "xTb6zbYG2vhapMAAjVRUweQhHXS4csH9eB", + "hash160result": "26dcd354b4b2bd8b939af29fc5ea57a082aa87d3", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.bankingdetails.type" + } +}; +exports.IDENTITY_BANKINGDETAILS_SORTCODE = { + "vdxfid": "i8v2y1beTivG8Nyi6Td3VFTc2ExFQJT8pC", + "indexid": "xDk9Rp2jK38vkYrjx9HCTdz93tyGLCaa3E", + "hash160result": "27df54160c8a8a962dd455004c8afac060aeab3b", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.bankingdetails.sortcode" + } +}; +exports.IDENTITY_DOCUMENTS_PASSPORT = { + "vdxfid": "iJHkDyp8dPnNdrh7P9fzow4gTshpbznkSK", + "indexid": "xP7rgnFDUi13G2a9EqL9nKbDVXiqVHVtyg", + "hash160result": "456f1956c77f7ff59d98dd57030d7ed22afd7fa2", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.documents.passport" + } +}; +exports.IDENTITY_RESIDENCECARD = { + "vdxfid": "iQerHJHjqVT32hU1ZUyVYKQEkavs4xFtHo", + "indexid": "xVUxk6ipgofhesM3RAdeWhvmnEwsywApa2", + "hash160result": "0b2227f2bb574fe3cbcc683eecfc4d3bff884ee8", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.residencecard" + } +}; +exports.IDENTITY_ATTESTOR = { + "vdxfid": "iFNc5DG22Btm69wBDDXatvSPLxzJq53QBa", + "indexid": "xLCiY1h6sW7RiKpD4uBjsJxvNd1Kiej8tW", + "hash160result": "e5d18dab811f87643c1e7a63627172331be38282", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.attestor" + } +}; +exports.IDENTITY_ATTESTATION_RECIPIENT = { + "vdxfid": "iAkd3VBhYQ3MK6PUCtfhXrLVNbqSghxxpn", + "indexid": "xFajWHcnPiG1wGGW4aKrWEs2QFrTbwP7wd", + "hash160result": "71b7cbbfc8be868f6d9f6c481c420b002438d44f", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.attestation.recipient" + } +}; diff --git a/dist/vdxf/index.d.ts b/dist/vdxf/index.d.ts new file mode 100644 index 00000000..58b683bd --- /dev/null +++ b/dist/vdxf/index.d.ts @@ -0,0 +1,103 @@ +import { VDXFKeyInterface } from './keys'; +import { BigNumber } from "../utils/types/BigNumber"; +export * from './keys'; +export * from './scopes'; +export * from './keymap'; +export * from './identitydatakeys'; +export * from './vdxfdatakeys'; +export interface VDXFObjectInterface { + vdxfkey: string; + toString: () => string; + toJson: () => { + [key: string]: any; + }; + toBuffer: () => Buffer; + toDataBuffer: () => Buffer; + fromDataBuffer: (buffer: Buffer, offset: number) => number; + fromBuffer: (buffer: Buffer, offset: number) => number; + dataByteLength: () => number; + byteLength: () => number; + getVersionNoFlags: () => BigNumber; +} +export interface VerusIDSignatureInterface { + signature: string; +} +export type VerusIDSignatureJson = { + signature: string; + vdxfkey: string; + serializekey: boolean; +}; +export declare class VDXFObject implements VDXFObjectInterface { + vdxfkey: string; + version: BigNumber; + serializekey: boolean; + constructor(key?: string, serializekey?: boolean); + getVersionNoFlags(): import("bn.js"); + toJson(): {}; + toString(includeKey?: boolean): string; + dataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer, offset?: number): number; + isValidVersion(): boolean; + fromBuffer(buffer: Buffer, offset?: number, vdxfkey?: string): number; + byteLength(includeKey?: boolean): number; + toBuffer(includeKey?: boolean): Buffer; + toSha256(): Buffer; +} +export declare class BufferDataVdxfObject extends VDXFObject { + data: string; + encoding: BufferEncoding; + constructor(data?: string, vdxfkey?: string, encoding?: BufferEncoding); + dataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer, offset?: number): number; + toJson(): { + data: string; + vdxfkey: string; + }; + static fromJson(json: { + data: string; + vdxfkey: string; + }): BufferDataVdxfObject; +} +export declare class VDXFData extends VDXFObject { + data: Buffer; + constructor(data?: Buffer, vdxfkey?: string); + dataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer, offset?: number): number; + toJson(): { + data: string; + vdxfkey: string; + }; +} +export declare class Utf8DataVdxfObject extends BufferDataVdxfObject { + constructor(data?: string, vdxfkey?: string); +} +export declare class HexDataVdxfObject extends BufferDataVdxfObject { + constructor(data?: string, vdxfkey?: string); +} +export declare class Utf8OrBase58Object extends VDXFObject { + data: string; + base58Keys: { + [key: string]: boolean; + }; + constructor(data?: string, vdxfkey?: string, base58Keys?: Array); + isBase58(): boolean; + dataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer, offset?: number): number; + toJson(): { + data: string; + vdxfkey: string; + }; +} +export declare class VerusIDSignature extends VDXFObject { + signature: string; + constructor(sig?: VerusIDSignatureInterface, vdxfkey?: VDXFKeyInterface, serializekey?: boolean); + dataByteLength(): number; + toDataBuffer(): Buffer; + fromDataBuffer(buffer: Buffer, offset?: number): number; + static fromJson(data: VerusIDSignatureJson): VerusIDSignature; + toJson(): VerusIDSignatureJson; +} diff --git a/dist/vdxf/index.js b/dist/vdxf/index.js new file mode 100644 index 00000000..4a88a26a --- /dev/null +++ b/dist/vdxf/index.js @@ -0,0 +1,240 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VerusIDSignature = exports.Utf8OrBase58Object = exports.HexDataVdxfObject = exports.Utf8DataVdxfObject = exports.VDXFData = exports.BufferDataVdxfObject = exports.VDXFObject = void 0; +const base64url_1 = require("base64url"); +const createHash = require("create-hash"); +const vdxf_1 = require("../constants/vdxf"); +const address_1 = require("../utils/address"); +const bufferutils_1 = require("../utils/bufferutils"); +const varint_1 = require("../utils/varint"); +const varuint_1 = require("../utils/varuint"); +const Hash160_1 = require("./classes/Hash160"); +const keys_1 = require("./keys"); +const bn_js_1 = require("bn.js"); +__exportStar(require("./keys"), exports); +__exportStar(require("./scopes"), exports); +__exportStar(require("./keymap"), exports); +__exportStar(require("./identitydatakeys"), exports); +__exportStar(require("./vdxfdatakeys"), exports); +class VDXFObject { + constructor(key = "", serializekey = true) { + this.serializekey = true; + this.vdxfkey = key; + this.version = vdxf_1.VDXF_OBJECT_DEFAULT_VERSION; + this.serializekey = serializekey; + } + getVersionNoFlags() { + return this.version; + } + toJson() { + return {}; + } + toString(includeKey = this.serializekey) { + return base64url_1.default.encode(this.toBuffer(includeKey)); + } + dataByteLength() { + return 0; + } + toDataBuffer() { + return Buffer.alloc(0); + } + fromDataBuffer(buffer, offset = 0) { + return offset; + } + isValidVersion() { + return true; + } + fromBuffer(buffer, offset = 0, vdxfkey) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + if (vdxfkey == null) { + const keyHash = reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH); + this.vdxfkey = (0, address_1.toBase58Check)(keyHash, vdxf_1.I_ADDR_VERSION); + } + const version = reader.readVarInt(); + this.version = version; + if (!this.isValidVersion()) + throw new Error("Unsupported version for vdxf object."); + if (offset < buffer.length - 1) { + reader.offset = this.fromDataBuffer(reader.buffer, reader.offset); + } + return reader.offset; + } + byteLength(includeKey = this.serializekey) { + const dataLength = this.dataByteLength(); + const keyLength = includeKey ? (0, address_1.fromBase58Check)(this.vdxfkey).hash.length : 0; + const versionEncodingLength = varint_1.default.encodingLength(new bn_js_1.BN(this.version)); + const dataEncodingLength = varuint_1.default.encodingLength(dataLength); + return dataLength + keyLength + versionEncodingLength + dataEncodingLength; + } + toBuffer(includeKey = this.serializekey) { + const key = (0, address_1.fromBase58Check)(this.vdxfkey); + const dataLength = this.dataByteLength(); + const buffer = Buffer.alloc(this.byteLength(includeKey)); + const writer = new bufferutils_1.default.BufferWriter(buffer); + if (includeKey) { + writer.writeSlice(key.hash); + } + writer.writeVarInt(new bn_js_1.BN(this.version, 10)); + if (dataLength) { + writer.writeVarSlice(this.toDataBuffer()); + } + return writer.buffer; + } + toSha256() { + return createHash("sha256").update(this.toBuffer()).digest(); + } +} +exports.VDXFObject = VDXFObject; +class BufferDataVdxfObject extends VDXFObject { + constructor(data = "", vdxfkey = "", encoding = "hex") { + super(vdxfkey); + this.encoding = "hex"; + this.data = data; + this.encoding = encoding; + } + dataByteLength() { + return this.toDataBuffer().length; + } + toDataBuffer() { + return Buffer.from(this.data, this.encoding); + } + fromDataBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + this.data = reader.readVarSlice().toString(this.encoding); + return reader.offset; + } + toJson() { + return { + data: this.data, + vdxfkey: this.vdxfkey, + }; + } + static fromJson(json) { + return new BufferDataVdxfObject(json.data, json.vdxfkey); + } +} +exports.BufferDataVdxfObject = BufferDataVdxfObject; +class VDXFData extends VDXFObject { + constructor(data = Buffer.from(""), vdxfkey = "") { + super(vdxfkey); + this.data = data; + } + dataByteLength() { + return this.data.length; + } + toDataBuffer() { + return this.data; + } + fromDataBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + this.data = reader.readVarSlice(); + return reader.offset; + } + toJson() { + return { + data: this.data.toString("hex"), + vdxfkey: this.vdxfkey, + }; + } +} +exports.VDXFData = VDXFData; +class Utf8DataVdxfObject extends BufferDataVdxfObject { + constructor(data = "", vdxfkey = "") { + super(data, vdxfkey, "utf-8"); + } +} +exports.Utf8DataVdxfObject = Utf8DataVdxfObject; +class HexDataVdxfObject extends BufferDataVdxfObject { + constructor(data = "", vdxfkey = "") { + super(data, vdxfkey, "hex"); + } +} +exports.HexDataVdxfObject = HexDataVdxfObject; +class Utf8OrBase58Object extends VDXFObject { + constructor(data = "", vdxfkey = "", base58Keys = []) { + super(vdxfkey); + // VDXF keys that would cause this object to be base58 instead of utf8 + this.base58Keys = {}; + for (const key of base58Keys) { + this.base58Keys[key] = true; + } + this.data = data; + } + isBase58() { + return this.base58Keys[this.vdxfkey]; + } + dataByteLength() { + return this.toDataBuffer().length; + } + toDataBuffer() { + return this.isBase58() + ? (Hash160_1.Hash160.fromAddress(this.data, false)).toBuffer() + : Buffer.from(this.data, "utf-8"); + } + fromDataBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + if (this.isBase58()) { + const _data = new Hash160_1.Hash160(); + // varlength is set to true here because vdxf objects always have a + // variable length data field. This has160 object was not creted with + // varlength true, but this is a shortcut instead of writing readVarSlice + // and then fromBuffer. + reader.offset = _data.fromBuffer(reader.buffer, true, reader.offset); + _data.varlength = false; + this.data = _data.toAddress(); + } + else { + this.data = reader.readVarSlice().toString('utf-8'); + } + return reader.offset; + } + toJson() { + return { + data: this.data, + vdxfkey: this.vdxfkey, + }; + } +} +exports.Utf8OrBase58Object = Utf8OrBase58Object; +class VerusIDSignature extends VDXFObject { + constructor(sig = { signature: "" }, vdxfkey = keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, serializekey = true) { + super(vdxfkey.vdxfid, serializekey); + this.signature = sig.signature; + } + dataByteLength() { + return this.toDataBuffer().length; + } + toDataBuffer() { + return Buffer.from(this.signature, "base64"); + } + fromDataBuffer(buffer, offset) { + const reader = new bufferutils_1.default.BufferReader(buffer, offset); + this.signature = reader.readVarSlice().toString("base64"); + return reader.offset; + } + static fromJson(data) { + return new VerusIDSignature({ signature: data.signature }, keys_1.IDENTITY_AUTH_SIG_VDXF_KEY, data.serializekey); + } + toJson() { + return { + vdxfkey: this.vdxfkey, + signature: this.signature, + serializekey: this.serializekey + }; + } +} +exports.VerusIDSignature = VerusIDSignature; diff --git a/dist/vdxf/keymap.d.ts b/dist/vdxf/keymap.d.ts new file mode 100644 index 00000000..fcbcb5f1 --- /dev/null +++ b/dist/vdxf/keymap.d.ts @@ -0,0 +1,12 @@ +import * as keylist from './keys'; +export declare const keymap: { + [key: string]: keylist.VDXFKeyInterface; +}; +export declare const attestationDataKeys: { + [key: string]: keylist.VDXFKeyInterface; +}; +export declare const IdentityVdxfidMap: { + [x: string]: { + EN: string; + }; +}; diff --git a/dist/vdxf/keymap.js b/dist/vdxf/keymap.js new file mode 100644 index 00000000..d9f9d9dd --- /dev/null +++ b/dist/vdxf/keymap.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IdentityVdxfidMap = exports.attestationDataKeys = exports.keymap = void 0; +const keylist = require("./keys"); +const attestationData = require("../utils/IdentityData"); +exports.keymap = Object.keys(keylist) + .reduce((obj, item) => { obj[keylist[item].vdxfid] = keylist[item]; return obj; }, {}); +exports.attestationDataKeys = Object.keys(attestationData) + .reduce((obj, item) => { obj[attestationData[item].vdxfid] = attestationData[item]; return obj; }, {}); +exports.IdentityVdxfidMap = attestationData.IdentityVdxfidMap; diff --git a/dist/vdxf/keys.d.ts b/dist/vdxf/keys.d.ts new file mode 100644 index 00000000..ff1b2283 --- /dev/null +++ b/dist/vdxf/keys.d.ts @@ -0,0 +1,86 @@ +export interface VDXFKeyInterface { + vdxfid: string; + hash160result: string; + qualifiedname: { + name: string; + namespace: string; + }; + bounddata?: { + vdxfkey: string; + }; + indexid?: string; +} +export declare const VERUSPAY_INVOICE_VDXF_KEY: VDXFKeyInterface; +export declare const VERUSPAY_INVOICE_DETAILS_VDXF_KEY: VDXFKeyInterface; +export declare const GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY: VDXFKeyInterface; +export declare const IDENTITY_UPDATE_REQUEST_VDXF_KEY: VDXFKeyInterface; +export declare const IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface; +export declare const IDENTITY_UPDATE_RESPONSE_VDXF_KEY: VDXFKeyInterface; +export declare const IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY: VDXFKeyInterface; +export declare const IDENTITY_AUTH_SIG_VDXF_KEY: VDXFKeyInterface; +export declare const LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY: VDXFKeyInterface; +export declare const LOGIN_CONSENT_REQUEST_VDXF_KEY: VDXFKeyInterface; +export declare const LOGIN_CONSENT_RESPONSE_VDXF_KEY: VDXFKeyInterface; +export declare const LOGIN_CONSENT_CHALLENGE_VDXF_KEY: VDXFKeyInterface; +export declare const LOGIN_CONSENT_DECISION_VDXF_KEY: VDXFKeyInterface; +export declare const WALLET_VDXF_KEY: VDXFKeyInterface; +export declare const LOGIN_CONSENT_REDIRECT_VDXF_KEY: VDXFKeyInterface; +export declare const LOGIN_CONSENT_WEBHOOK_VDXF_KEY: VDXFKeyInterface; +export declare const LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY: VDXFKeyInterface; +export declare const LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY: VDXFKeyInterface; +export declare const LOGIN_CONSENT_CONTEXT_VDXF_KEY: VDXFKeyInterface; +export declare const LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY: VDXFKeyInterface; +export declare const ID_ADDRESS_VDXF_KEY: VDXFKeyInterface; +export declare const ID_SYSTEMID_VDXF_KEY: VDXFKeyInterface; +export declare const ID_FULLYQUALIFIEDNAME_VDXF_KEY: VDXFKeyInterface; +export declare const ID_PARENT_VDXF_KEY: VDXFKeyInterface; +export declare const LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY: VDXFKeyInterface; +export declare const LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY: VDXFKeyInterface; +export declare const LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY: VDXFKeyInterface; +export declare const LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY: VDXFKeyInterface; +export declare const LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY: VDXFKeyInterface; +export declare const IDENTITY_NAME_COMMITMENT_TXID: VDXFKeyInterface; +export declare const IDENTITY_REGISTRATION_TXID: VDXFKeyInterface; +export declare const IDENTITY_UPDATE_TXID: VDXFKeyInterface; +export declare const LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO: VDXFKeyInterface; +export declare const LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL: VDXFKeyInterface; +export declare const LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE: VDXFKeyInterface; +export declare const LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED: VDXFKeyInterface; +export declare const LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN: VDXFKeyInterface; +export declare const LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN: VDXFKeyInterface; +export declare const LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED: VDXFKeyInterface; +export declare const LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED: VDXFKeyInterface; +export declare const LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED: VDXFKeyInterface; +export declare const SIGNED_SESSION_OBJECT_DATA: VDXFKeyInterface; +export declare const SIGNED_SESSION_OBJECT: VDXFKeyInterface; +export declare const CURRENCY_ADDRESS: VDXFKeyInterface; +export declare const ATTESTATION_PROVISION_URL: VDXFKeyInterface; +export declare const ATTESTATION_PROVISION_TYPE: VDXFKeyInterface; +export declare const ATTESTATION_PROVISION_OBJECT: VDXFKeyInterface; +export declare const ATTESTATION_VIEW_REQUEST: VDXFKeyInterface; +export declare const ATTESTATION_VIEW_RESPONSE: VDXFKeyInterface; +export declare const ATTESTATION_ID: VDXFKeyInterface; +export declare const ATTESTATION_NAME: VDXFKeyInterface; +export declare const ATTESTATION_TYPE: VDXFKeyInterface; +export declare const ATTESTATION_VIEW_REQUEST_KEY: VDXFKeyInterface; +export declare const ATTESTATION_VIEW_REQUEST_NAME: VDXFKeyInterface; +export declare const ATTESTATION_VIEW_REQUEST_ATTESTOR: VDXFKeyInterface; +export declare const ATTESTATION_VIEW_REQUEST_ID: VDXFKeyInterface; +export declare const PROFILE_DATA_VIEW_REQUEST: VDXFKeyInterface; +export declare const IDENTITY_SIGNDATA_REQUEST: VDXFKeyInterface; +export declare const DATA_TYPE_STRING: VDXFKeyInterface; +export declare const DATA_TYPE_DEFINEDKEY: VDXFKeyInterface; +export declare const DATA_TYPE_OBJECT_DATADESCRIPTOR: VDXFKeyInterface; +export declare const DATA_TYPE_OBJECT_CREDENTIAL: VDXFKeyInterface; +export declare const IDENTITY_CREDENTIALS: VDXFKeyInterface; +export declare const IDENTITY_CREDENTIAL_PLAINLOGIN: VDXFKeyInterface; +export declare const IDENTITY_CREDENTIAL_USERNAME: VDXFKeyInterface; +export declare const ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS: VDXFKeyInterface; +export declare const AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface; +export declare const AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY: VDXFKeyInterface; +export declare const PROVISION_IDENTITY_DETAILS_VDXF_KEY: VDXFKeyInterface; +export declare const APP_ENCRYPTION_REQUEST_VDXF_KEY: VDXFKeyInterface; +export declare const DATA_RESPONSE_VDXF_KEY: VDXFKeyInterface; +export declare const USER_DATA_REQUEST_VDXF_KEY: VDXFKeyInterface; +export declare const USER_SPECIFIC_DATA_PACKET_VDXF_KEY: VDXFKeyInterface; +export declare const APP_ENCRYPTION_RESPONSE_VDXF_KEY: VDXFKeyInterface; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js new file mode 100644 index 00000000..09b1bcb6 --- /dev/null +++ b/dist/vdxf/keys.js @@ -0,0 +1,626 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; +exports.APP_ENCRYPTION_RESPONSE_VDXF_KEY = exports.USER_SPECIFIC_DATA_PACKET_VDXF_KEY = exports.USER_DATA_REQUEST_VDXF_KEY = exports.DATA_RESPONSE_VDXF_KEY = exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY = exports.AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; +exports.VERUSPAY_INVOICE_VDXF_KEY = { + hash160result: "628efc28c2e2d40050e1a9de7a93e7ddf2aa0076", + indexid: "xK4aRumetZg2ecW4Z45qdDBH769xxnaiEH", + qualifiedname: { + name: "veruspay.vrsc::invoice", + namespace: "iAisVse7piEiE2VsixZx4SARyHzSpxYxgq" + }, + vdxfid: "iEETy7La3FTN2Sd2hNRgepek5S8x8eeUeQ" +}; +exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = { + "hash160result": "743a23f19531686d70b26a2e220b50a9c70d78a3", + "indexid": "xPCyrdbnb89NftNSuPaVFENwzGDmAukVbS", + "qualifiedname": { + "name": "veruspay.vrsc::invoice.details", + "namespace": "iAisVse7piEiE2VsixZx4SARyHzSpxYxgq" + }, + "vdxfid": "iJNsPqAhjovi3iVR3hvLGqrQxcCkHq9n9H" +}; +exports.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY = { + "hash160result": "bc05c4263031cc791296fa8bd15553ccef3de4ba", + "indexid": "xRLq15vpenCUGVpmZgqEtoygZW2b32oVgX", + "qualifiedname": { + "name": "vrsc::envelope.generic", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iLWiYHVjoTyoeKwji1B5vRT9Xr1aA9yyvX" +}; +exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = { + "hash160result": "0bcef8b06c211828d16dc038e4d34d097aeb64e4", + "indexid": "xV8GreW8nt1Py99r8KPsLxDyy6UYJQvXja", + "qualifiedname": { + "name": "vrsc::identity.update.request", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iQJAPr53wZnjLyGpGdjiNZhSwSTXSfyoYy" +}; +exports.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY = { + "hash160result": "4cedf62ce2a66dbb228ba8abe7a10bbffe35db93", + "indexid": "xMnRq7oBMqxzdJqzFniFTtfKyf6qh3BVPs", + "qualifiedname": { + "name": "vrsc::identity.update.request.details", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iGxKNKN6WXkL18xxQ746VW8nx15prPMP7L" +}; +exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = { + "hash160result": "667802c74fbf3dd3a9693bb9aec9bef1250b2b14", + "indexid": "xA9GyS1bt1WGERamNVqVrhuGvGJeYuWyNk", + "qualifiedname": { + "name": "vrsc::identity.update.response", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "i5KAWdaX2hHbcFhjWpBLtKNjtcHdeQFjuX" +}; +exports.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY = { + "hash160result": "4f9a304beccceaa5692247c0d5789814a24f66be", + "indexid": "xRfNr2GNGNEnckSRSPZe4TgbZRKqZfLxqk", + "qualifiedname": { + "name": "vrsc::identity.update.response.details", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iLqGPDqHR427zaZPahuV65A4XmJpiqb9eF" +}; +exports.IDENTITY_AUTH_SIG_VDXF_KEY = { + vdxfid: "iPi1DPgDDu7hP1mAp5xJ8rHBWwXSzc6yA8", + hash160result: "06d4b963da3dcf17f00905b0720f7a4c241defdd", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.authentication.signature", + }, +}; +exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = { + vdxfid: "iPi1DPgDDu7hP1mAp5xJ8rHBWwXSzc6yA8", + hash160result: "06d4b963da3dcf17f00905b0720f7a4c241defdd", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.authentication.signature", + }, +}; +exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = { + vdxfid: "i3dQmgjq8L8XFGQUrs9Gpo8zvPWqs1KMtV", + hash160result: "c539b36efc768d1a7b728aa2052c2c28bd2eae01", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.authentication.loginconsent.request", + }, +}; +exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = { + vdxfid: "i5fvfsaTFKtrHCPYQHTXRaXcyxHmJMxTMe", + hash160result: "17dafae5a8417394df73fb718cff87b5a2391818", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.authentication.loginconsent.response", + }, +}; +exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = { + vdxfid: "i5maLnB62WmKKXFZniqDRU1JiC2Hd1xpVb", + hash160result: "9c35c457fb8a932676b58d1f9cd4a88f3ec02919", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.authentication.loginconsent.challenge", + }, +}; +exports.LOGIN_CONSENT_DECISION_VDXF_KEY = { + vdxfid: "iQP5eKQaYDV3FFXsq7276LyWxk4ttjuSdm", + hash160result: "89baa310edcc2a4ef9841cc09c7d0a88bc0853e5", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.authentication.loginconsent.decision", + }, +}; +exports.WALLET_VDXF_KEY = { + vdxfid: "i5JtwbP6zyMEAy9LLnRAGLgJQGdRFfsAu4", + hash160result: "cb8486edea3f09c06c687327bda71487f30b1e14", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::applications.wallet", + }, + indexid: "xA91QPpBrHZto92NCU5KEjCqRveS4dAPrf" +}; +exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = { + vdxfid: "iDXvHYhRpWcoARCEYeLv8GwkVdrbvSFuam", + hash160result: "a6d2c261dcbd96cc1ef27a47c9a67c031895556e", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.authentication.loginconsent.redirect", + }, +}; +exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = { + vdxfid: "iSaBWByu4zqhEZ6HQmFxvfR1HyiFuhnJfL", + hash160result: "19e760a7025856237a57866c92479821bac05cfd", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.authentication.loginconsent.webhook", + }, +}; +exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = { + vdxfid: "iEiQe3C68gKvAevZWAx6MLmoSR64hVqfMb", + hash160result: "6759ec3006891e89422e59fb613ab2653389497b", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.attestation.webhook", + }, +}; +exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = { + vdxfid: "i8RW9fcZHh1oaAqR2fWWLCB99mfNW6Q2mQ", + indexid: "xDFccU3e91EUCLiStMAfJahgBRgPHfYq74", + hash160result: "fe40712687cd6f9f288e535ced75b653624f4636", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.identitydata.webhook" + } +}; +exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = { + vdxfid: "iBMochrKPSQfua5yZYWyd6p4QnREakqU44", + hash160result: "3b605d4ace1e19dd0bddb2eef63171b1879a7b56", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.authentication.loginconsent.context", + }, +}; +exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = { + vdxfid: "iMiXw4BuL4iESPqz6fvJ4rHbDg1SvVKLnc", + hash160result: "7b051db57821563ec22544182eb0f4c5308118c8", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.provisioning.webhooks.provisionidentity", + }, +}; +exports.ID_ADDRESS_VDXF_KEY = { + vdxfid: "i3a3M9n7uVtRYv1vhjmyb4DxY825AVAwic", + hash160result: "63fc04d860fde7b60ddf5d9ef9985b573a0d0b01", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.address", + }, +}; +exports.ID_SYSTEMID_VDXF_KEY = { + vdxfid: "iMZTNkNBgBXNHkMLipQw9wQb56pxBSEp3k", + hash160result: "3e65e72cc0130c87184c91aa4d33cae3fcf460c6", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.systemid", + }, +}; +exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = { + vdxfid: "iCQ5gYekWs5DaXiBN7YfoDfNWT3VtpUwVq", + hash160result: "4d21dd52ee9d4b6a9f55a452f3ba247006f9e161", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.fullyqualifiedname", + }, +}; +exports.ID_PARENT_VDXF_KEY = { + vdxfid: "i6aJSTKfNiDZ4rPxj1pPh4Y8xDmh1GqYm9", + hash160result: "fe0be7479818a0a41fb4e6bc58a0f34dd6060022", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.parent", + }, +}; +exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = { + vdxfid: "iAN8hxt2pkU32jvBsXtJ7Nu9sfn9QDgr5q", + hash160result: "8598120ec657fc662355adc49348c518f869934b", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.provisioning.request", + }, +}; +exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = { + vdxfid: "iLvLAJ2YycueCYMDPJA8DwrenULPJkJgKE", + hash160result: "7467ddf0c155f0c8dd3f38a68103fe97398b5bbf", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.provisioning.challenge", + }, +}; +exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = { + vdxfid: "i6VH8kxLH3ERRf7dQCupRW8VKjs7kVAsxR", + hash160result: "0a7179eea76dea5ceb58ae65c9fbb10c82db0c21", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.provisioning.decision", + }, +}; +exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = { + vdxfid: "i85sHR4C9BqZkP7BMses4UaggJXwnc4nSx", + hash160result: "5d8c77fc5e97c49ed7c4babfc693268cdea18f32", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.provisioning.response", + }, +}; +exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = { + vdxfid: "iGV8yvy8YqLxrd5GcHbX9vRpbajpM1px3w", + hash160result: "3d379d42a495bd8946833ea2990d4600684fb78e", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.provisioning.result", + }, +}; +exports.IDENTITY_NAME_COMMITMENT_TXID = { + vdxfid: "iEJTmGeALUU3ABtVNi8dZwFJk4FqP9N1Et", + hash160result: "2007222f775f209fccd9d5f16bb2bf6b4529c276", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.txid.namecommitment", + }, +}; +exports.IDENTITY_REGISTRATION_TXID = { + vdxfid: "iA8weZfoUatpDo7kAMgLjByeNP6G9sbWqG", + hash160result: "11892abb92a82b94925113361653962a71c61449", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.txid.identityregistration", + }, +}; +exports.IDENTITY_UPDATE_TXID = { + vdxfid: "iHhzJVTGkzCgwCuLRsFMZ81t3XLxUNGs2D", + hash160result: "ca480a573642c36f18fb90e2bdabb87207991d9c", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.txid.updateidentity", + }, +}; +exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = { + vdxfid: "iKPocacGnQePtXEfcqBadmmrQA35pbLPhT", + hash160result: "4412732b594d0bda49917e57b9f886c9a5709dae", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.provisioning.states.pendingrequiredinfo", + }, +}; +exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = { + vdxfid: "i4MTVaYamSYTSEMRJaaHxKypmmCMack2LZ", + hash160result: "307c505245e3d2a8ace6f36558eafed5e8eca109", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.provisioning.states.pendingapproval", + }, +}; +exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = { + vdxfid: "iG89yjgnQEqSVv3dShPHpTUkCtJt96gzVU", + hash160result: "7d8da8429719fc554309f1b2340118522d68bf8a", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.provisioning.states.complete", + }, +}; +exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = { + vdxfid: "iCF1tj2zY83mgB8JbNg4dvfD2yefvMGZ4p", + hash160result: "10a31da845d563f37520e82a32474be3ba102b60", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.provisioning.states.failed", + }, +}; +exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = { + vdxfid: "iNjhjmfwQGwGXZaXhonZHk4n6Q36JS6fQS", + hash160result: "672f11be28b26ca7f440c5c2b8aa9e94473b49d3", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.provisioning.errors.nametaken", + }, +}; +exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = { + vdxfid: "i4dhDcmzNGj9SxCJ9DZZHEJKx4jXZdJkU5", + hash160result: "1560866b0137c0bb444033db2d8368efa609b40c", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.provisioning.errors.unknown", + }, +}; +exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = { + vdxfid: "iRZSxLxmuaW87SrUV5eqLc9gATQB42RXRP", + hash160result: "1b69aa9315d450656d8e023a510ad07fe01b41f2", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.provisioning.errors.commitment", + }, +}; +exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = { + vdxfid: "iHMSEbaZw7joHG8mdh4N2XX1ygWWwjLtwr", + hash160result: "11dd7d101bf5b2854429b0b8816a436d9e823a98", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.provisioning.errors.creation", + }, +}; +exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = { + vdxfid: "iMMzX8s3P9syh4Cx6BQLRCuu2aQEzjn7La", + hash160result: "f7d0e1fe2452f9d7bfc2072f76188379b2f635c4", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.provisioning.errors.transfer", + }, +}; +exports.SIGNED_SESSION_OBJECT_DATA = { + "vdxfid": "iGQiFxLgGDtpTT9CVBARTjhUMoWnnMetzy", + "hash160result": "db9e0983fc2da941c8fadee6d08cc6790c02e18d", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.signedsessionobject.data" + } +}; +exports.SIGNED_SESSION_OBJECT = { + "vdxfid": "iQFqjYQnaiCPENEShSb8Jy3qD6En43juVr", + "hash160result": "76733b2dbe76a03c6da94719733c0a06cf82f4e3", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.signedsessionobject" + } +}; +exports.CURRENCY_ADDRESS = { + "vdxfid": "iBy2s9cQL9RadMVPjog6bbSV5ityBxTuNR", + "hash160result": "4fb4c86b8ce18e596e28f62bc9a78f43d738255d", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::currency.address" + } +}; +exports.ATTESTATION_PROVISION_URL = { + "vdxfid": "iD9J9aQ6vsRYvqZbBs9QpKmCcgUynee7mT", + "indexid": "xHyQcNqBnBeDZ1Sd3YoZniHjeLVzgLK5ka", + "hash160result": "e1059d2a03500749f86ed9c49137b86de6430e6a", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::attestation.provision.url" + } +}; +exports.ATTESTATION_PROVISION_TYPE = { + "vdxfid": "i7VGPAp3q2h4U4njZ556b9eG3Jts2gmzHn", + "indexid": "xCKNqyF8gLuj6EfmQkjFZYAo4xuswrB6X9", + "hash160result": "5f922c9d09e0160b7c3bc5f31588dfc11b5b042c", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::attestation.provision.type" + } +}; +exports.ATTESTATION_PROVISION_OBJECT = { + "vdxfid": "iA4mSmR35HNwXogTtdGasrmxHzX9zFfDqM", + "indexid": "xEtsuZr7vbbc9yZVkJvjrFJVKeYArDTHtu", + "hash160result": "568af36801cfae2e1290ecef7a60c7ae0c984a48", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::attestation.provision.object" + } +}; +exports.ATTESTATION_VIEW_REQUEST = { + "vdxfid": "i5R9p3V1sxZ9p1NDV7nPkz1wvmQTUvuByY", + "hash160result": "872923256c56f6bda8256c5bb6a4c98d85f44c15", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::attestation.view.request" + } +}; +exports.ATTESTATION_VIEW_RESPONSE = { + "vdxfid": "i5R9p3V1sxZ9p1NDV7nPkz1wvmQTUvuByY", + "hash160result": "872923256c56f6bda8256c5bb6a4c98d85f44c15", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::attestation.view.response" + } +}; +exports.ATTESTATION_ID = { + "vdxfid": "i87ZC3B5EFiKtLW9fCUkw9yoMVmh2i2bZ3", + "hash160result": "f540229f88da9e3a9f40f99ce5a22afe765ce132", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::attestation.id" + } +}; +exports.ATTESTATION_NAME = { + "vdxfid": "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1", + "hash160result": "8a00bdd77505b345ed85d7292459b61457a10d76", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::attestation.name" + } +}; +exports.ATTESTATION_TYPE = { + "vdxfid": "iAJUD5mgT6MHz8ymF49XUtBDRS7uvYqNWZ", + "indexid": "xF8aftCmJQZxcJro6jogTGhkT68vqfCDCm", + "hash160result": "e56544849c038b7cfadb0a1074ac51df9207e24a", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::attestation.type" + } +}; +exports.ATTESTATION_VIEW_REQUEST_KEY = { + "vdxfid": "i8iRyLrnapw29BTaHYtu7C3wWPtbjKvEJp", + "indexid": "xDYYS9HsS99gmMLc9EZ45aaUY3ucaC7FDD", + "hash160result": "fa51ed48a3b250818d2fb1efcdf6275fd2e47939", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::attestation.view.request.key" + } +}; +exports.ATTESTATION_VIEW_REQUEST_NAME = { + "vdxfid": "i6psJBVkM3yivumyxuhmAwmMYixiFRD9LT", + "indexid": "xBeykyvqCNCPZ5f1pbMv9LHtaNyjDs5X2m", + "hash160result": "8bb63c962ccec2eced99eb15f958b2d03247c124", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::attestation.view.request.name" + } +}; +exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = { + "vdxfid": "iHuiKHNSLJd6xeUCN8etjnTcGgzhDp9Zug", + "indexid": "xNjpn5oXBcqmapMEDpK3iAz9JM1i7g8cDX", + "hash160result": "1bdced61a4c500114659b9f15759eea89c3e559e", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::attestation.view.request.attestor" + } +}; +exports.ATTESTATION_VIEW_REQUEST_ID = { + "vdxfid": "iSoJNm8wz9Jtv69YvReNyRSzBr8KJSXTym", + "indexid": "xXdQqZa2qTXZYG2an7JXwoyXDW9L9NjTYS", + "hash160result": "70cbf4f61e3d585bcaac692fa9443a9890e5d7ff", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::attestation.view.request.id" + } +}; +exports.PROFILE_DATA_VIEW_REQUEST = { + "vdxfid": "iEocxePWah2zp5Hn4ujeoQpc4UVYeJeQ2g", + "indexid": "xKdjRSpbS1FfSFAovbPomoM968WZVsmW1E", + "hash160result": "b1778ef367dbf00e7b9ad15eea2ef17490e6457c", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::profile.data.view.request" + } +}; +exports.IDENTITY_SIGNDATA_REQUEST = { + "vdxfid": "i8pWCPRLoGD9MgL7HM13xo5Bhr9TsXjGxs", + "indexid": "xDecfBrReaRoyrD992fCwBbijWAUi4yjUN", + "hash160result": "0785689a95a2a08dd2e0efd60b71237e97ea9f3a", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.signdata.request" + } +}; +// DATA TYPES +exports.DATA_TYPE_STRING = { + "vdxfid": "iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c", + "hash160result": "e5c061641228a399169211e666de18448b7b8bab", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.string" + }, +}; +exports.DATA_TYPE_DEFINEDKEY = { + "vdxfid": "iD3yzD6KnrSG75d8RzirMD6SyvrAS2HxjH", + "indexid": "xHt6T1XQeAevjFWAHgP1Kbcz1asBJp9Kbs", + "hash160result": "5dd4e0d5f7bd891d55ca8060a044390b64060d69", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.definedkey" + } +}; +exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = { + vdxfid: "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv", + hash160result: "4d4f12424ded2033a526a4e2a8835fc5b2eba208", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::data.type.object.datadescriptor" + }, +}; +exports.DATA_TYPE_OBJECT_CREDENTIAL = { + vdxfid: "iDTG49YLqmkHMYRyuQBYgEyTByQwAzqGd6", + hash160result: "09fbc202710c9f2dacb87e5623e97e2e4101746d", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::data.type.object.credential" + }, +}; +exports.IDENTITY_CREDENTIALS = { + vdxfid: "iM8ULboymw7rqdjX5YihsmxFG59dbyT2Cj", + hash160result: "089fcd4c0bb1edb78789a223cf76a3399e5ca7c1", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.credentials" + }, +}; +exports.IDENTITY_CREDENTIAL_PLAINLOGIN = { + vdxfid: "iHh1FFVvcNb2mcBudD11umfKJXHbBbH6Sj", + hash160result: "21edefb10b2ea96ffb0fbad986e268164df8ed9b", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.credential.plainlogin" + }, +}; +exports.IDENTITY_CREDENTIAL_USERNAME = { + vdxfid: "iN6LYCurcypx7orxkFB73mWRq6Jetf23ck", + hash160result: "9125e70938468eea614a4f538199fa4d052538cc", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.credential.username" + }, +}; +exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = { + "vdxfid": "i4BWC5Lr7gAT7KzyDx82Ye5DeFQD8ckcXe", + "indexid": "x91cesmvxzP7jVt15dnBX2bkfuRDya9TPq", + "hash160result": "3c520f0bde6be181461ebbff11bce396a604c007", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::attestation.view.request.multipleattestations" + } +}; +exports.AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY = { + "hash160result": "ba8f92aeb1d135d6a64366af727ce0435a03ef45", + "indexid": "xEgQr2xov3Sa5XCaWYF67mgqz2swZXpUk3", + "qualifiedname": { + "name": "vrsc::identity.authentication.request.details", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "i9rJPEXj4jDuTMKYeraw9PAJxNrvaRM5fu" +}; +exports.AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY = { + "hash160result": "32bee6633cbf8bb8ceff189a5c51abb16615e033", + "indexid": "xD2voG9dsSKNJXcW6jDvJ7KwGbvWqT1jXL", + "qualifiedname": { + "name": "vrsc::identity.authentication.response.details", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "i8CpLTiZ286hgMjUF3ZmKioQEwuVytVpYr" +}; +exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = { + "hash160result": "1ed843dce0f4d9a2bbb839994e3927807eb1878c", + "indexid": "xM7h3sXBovFXuwGQ3wvK2ibtUmMHn3mYkM", + "qualifiedname": { + "name": "vrsc::identity.provision.details", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iGHab566xc2sHmPNCGGA4L5MT7LGoJzmCa" +}; +exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = { + "vdxfid": "iL5nfPuV8Ekiz1EeW5KE3pXHuUTfQf6QC9", + "indexid": "xQuu8CLZyYyPcB7gMkyP2D3pw8UgHevmcM", + "hash160result": "5f398b165b8ea8c547b5f473f951178fc5482db6", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "application.encryption.request" + } +}; +exports.DATA_RESPONSE_VDXF_KEY = { + "vdxfid": "i5L8SNcCqY68X3KZEPgJEjGxY2zvMPzutN", + "indexid": "xAAEuB3HgrJo9DCb65LTD7oVZh1wAjCfTC", + "hash160result": "47ecd4c56c93486380a1ec0d06e186ae8cba5914", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::generic.data.packet.response" + } +}; +exports.USER_DATA_REQUEST_VDXF_KEY = { + "vdxfid": "iC7kqU8mfKtqe2gcE2qpuyN4CEcPFTxKGL", + "indexid": "xGwsJGZrWe7WGCZe5iVytMtbDtdQCPvmno", + "hash160result": "d1fba3d9bf18a5293ff912374fc64725db95cb5e", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "user.data.request" + } +}; +exports.USER_SPECIFIC_DATA_PACKET_VDXF_KEY = { + "vdxfid": "i6JYTdVNLz4Sb6515B73BSX6C1Xba63tNQ", + "indexid": "xB8evRvTCJH7DFx2vrmC9q3dDfYcXW1F15", + "hash160result": "34dfdf234ec37a8451790a19538dbd162913051f", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "user.data.packet.details" + } +}; +exports.APP_ENCRYPTION_RESPONSE_VDXF_KEY = { + "vdxfid": "iLgnRLninDtMa7f7EbH7zsDqHRknC4CUpB", + "indexid": "xRWtt9DodY72CHY96GwGyFkNK5mo1n7Jxe", + "hash160result": "0d3c42aec1d154f1678e0585e557e75202a4cbbc", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "application.encryption.response" + } +}; diff --git a/dist/vdxf/parser.d.ts b/dist/vdxf/parser.d.ts new file mode 100644 index 00000000..bc4d1b24 --- /dev/null +++ b/dist/vdxf/parser.d.ts @@ -0,0 +1,2 @@ +import { LoginConsentRequest, VerusPayInvoice } from "./classes"; +export declare function parseVdxfObjectString(str: string): LoginConsentRequest | VerusPayInvoice; diff --git a/dist/vdxf/parser.js b/dist/vdxf/parser.js new file mode 100644 index 00000000..29d4d306 --- /dev/null +++ b/dist/vdxf/parser.js @@ -0,0 +1,44 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parseVdxfObjectString = parseVdxfObjectString; +const base64url_1 = require("base64url"); +const classes_1 = require("./classes"); +const keys_1 = require("./keys"); +const bufferutils_1 = require("../utils/bufferutils"); +const vdxf_1 = require("../constants/vdxf"); +const address_1 = require("../utils/address"); +function parseVdxfObjectString(str) { + const isDeeplinkUri = str.includes("x-callback-url"); + if (isDeeplinkUri) { + const splitUri = str.split('x-callback-url/'); + const uriTail = splitUri[1]; + if (uriTail == null) + throw new Error("Failed to decode deeplink uri"); + const splitUriTail = uriTail.split('/'); + const deeplinkType = splitUriTail[0]; + if (deeplinkType == null) + throw new Error("Failed to parse deeplink type"); + if (deeplinkType === keys_1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid) { + return classes_1.LoginConsentRequest.fromWalletDeeplinkUri(str); + } + else if (deeplinkType === keys_1.VERUSPAY_INVOICE_VDXF_KEY.vdxfid) { + return classes_1.VerusPayInvoice.fromWalletDeeplinkUri(str); + } + else + throw new Error("Unrecognized vdxf object type " + deeplinkType); + } + else { + const objBuf = base64url_1.default.toBuffer(str); + const reader = new bufferutils_1.default.BufferReader(objBuf, 0); + const vdxfKeyBuf = reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH); + const vdxfKey = (0, address_1.toBase58Check)(vdxfKeyBuf, vdxf_1.I_ADDR_VERSION); + if (vdxfKey === keys_1.LOGIN_CONSENT_REQUEST_VDXF_KEY.vdxfid) { + return classes_1.LoginConsentRequest.fromQrString(str); + } + else if (vdxfKey === keys_1.VERUSPAY_INVOICE_VDXF_KEY.vdxfid) { + return classes_1.VerusPayInvoice.fromQrString(str); + } + else + throw new Error("Unrecognized vdxf object type " + vdxfKey); + } +} diff --git a/dist/vdxf/scopes.d.ts b/dist/vdxf/scopes.d.ts new file mode 100644 index 00000000..0c3ccd41 --- /dev/null +++ b/dist/vdxf/scopes.d.ts @@ -0,0 +1,6 @@ +import { VDXFKeyInterface } from "./keys"; +export declare const IDENTITY_VIEW: VDXFKeyInterface; +export declare const IDENTITY_AGREEMENT: VDXFKeyInterface; +export declare const ATTESTATION_READ_REQUEST: VDXFKeyInterface; +export declare const PROFILE_DATA_READ_REQUEST: VDXFKeyInterface; +export declare const ATTESTATION_RECEIVE_REQUEST: VDXFKeyInterface; diff --git a/dist/vdxf/scopes.js b/dist/vdxf/scopes.js new file mode 100644 index 00000000..e2f1baa4 --- /dev/null +++ b/dist/vdxf/scopes.js @@ -0,0 +1,45 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ATTESTATION_RECEIVE_REQUEST = exports.PROFILE_DATA_READ_REQUEST = exports.ATTESTATION_READ_REQUEST = exports.IDENTITY_AGREEMENT = exports.IDENTITY_VIEW = void 0; +exports.IDENTITY_VIEW = { + vdxfid: "iLUrA89mDKnwxZcMiPadfNB9TLp58A2TKU", + hash160result: "aeab47faa1b2bde2633a63b8284770a8e5c489ba", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.authentication.permission.read", + }, +}; +exports.IDENTITY_AGREEMENT = { + vdxfid: "i3fMEsmYzGbd8s7EM9uKZ28fUf9LZAMnEe", + hash160result: "894dae7e135484ccfad8924ad59dec9619110c02", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.authentication.permission.agree" + } +}; +exports.ATTESTATION_READ_REQUEST = { + vdxfid: "iNqLaiDJjcADGCvXcQZnPqwTqMXzQbDCFu", + hash160result: "fbd8fe825062b19a9bd26dc51b6f768828115ad4", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::identity.attestation.read" + } +}; +exports.PROFILE_DATA_READ_REQUEST = { + vdxfid: "iFYznrRxyHaoJZ91cFDSYGT4szETf4RLRV", + indexid: "xLP7Fes3pboTvj23TvsbWeybueFUatbQQh", + hash160result: "d3f2168aad438c6c6eab8f3384458cbebf027a84", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::profile.data.view" + } +}; +exports.ATTESTATION_RECEIVE_REQUEST = { + "vdxfid": "iQxHMa4cGQRMEVFchV7fah2JDqxjcgMAZK", + "indexid": "xVnPpNVh7ie1rf8eZAmpZ5YqFVykaYqC8E", + "hash160result": "b9af87a7313fff9976f29bc6abaffc1674899aeb", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.attestation.receive" + } +}; diff --git a/dist/vdxf/vdxfdatakeys.d.ts b/dist/vdxf/vdxfdatakeys.d.ts new file mode 100644 index 00000000..c498c83d --- /dev/null +++ b/dist/vdxf/vdxfdatakeys.d.ts @@ -0,0 +1,73 @@ +import { VDXFKeyInterface } from "./keys"; +export declare const DataByteKeyName = "vrsc::data.type.byte"; +export declare const DataByteKey: VDXFKeyInterface; +export declare const DataInt16KeyName = "vrsc::data.type.int16"; +export declare const DataInt16Key: VDXFKeyInterface; +export declare const DataUint16KeyName = "vrsc::data.type.uint16"; +export declare const DataUint16Key: VDXFKeyInterface; +export declare const DataInt32KeyName = "vrsc::data.type.int32"; +export declare const DataInt32Key: VDXFKeyInterface; +export declare const DataUint32KeyName = "vrsc::data.type.uint32"; +export declare const DataUint32Key: VDXFKeyInterface; +export declare const DataInt64KeyName = "vrsc::data.type.int64"; +export declare const DataInt64Key: VDXFKeyInterface; +export declare const DataUint64KeyName = "vrsc::data.type.uint64"; +export declare const DataUint64Key: VDXFKeyInterface; +export declare const DataUint160KeyName = "vrsc::data.type.uint160"; +export declare const DataUint160Key: VDXFKeyInterface; +export declare const DataUint256KeyName = "vrsc::data.type.uint256"; +export declare const DataUint256Key: VDXFKeyInterface; +export declare const DataStringKeyName = "vrsc::data.type.string"; +export declare const DataStringKey: VDXFKeyInterface; +export declare const DataVectorKeyName = "vrsc::data.type.vector"; +export declare const DataVectorKey: VDXFKeyInterface; +export declare const DataByteVectorKeyName = "vrsc::data.type.bytevector"; +export declare const DataByteVectorKey: VDXFKeyInterface; +export declare const DataInt32VectorKeyName = "vrsc::data.type.int32vector"; +export declare const DataInt32VectorKey: VDXFKeyInterface; +export declare const DataInt64VectorKeyName = "vrsc::data.type.int64vector"; +export declare const DataInt64VectorKey: VDXFKeyInterface; +export declare const DataCurrencyMapKeyName = "vrsc::data.type.object.currencymap"; +export declare const DataCurrencyMapKey: VDXFKeyInterface; +export declare const DataRatingsKeyName = "vrsc::data.type.object.ratings"; +export declare const DataRatingsKey: VDXFKeyInterface; +export declare const DataURLKeyName = "vrsc::data.type.object.url"; +export declare const DataURLKey: VDXFKeyInterface; +export declare const DataTransferDestinationKeyName = "vrsc::data.type.object.transferdestination"; +export declare const DataTransferDestinationKey: VDXFKeyInterface; +export declare const UTXORefKeyName = "vrsc::data.type.object.utxoref"; +export declare const UTXORefKey: VDXFKeyInterface; +export declare const CrossChainDataRefKeyName = "vrsc::data.type.object.crosschaindataref"; +export declare const CrossChainDataRefKey: VDXFKeyInterface; +export declare const EncryptionDescriptorKeyName = "vrsc::data.type.encryptiondescriptor"; +export declare const EncryptionDescriptorKey: VDXFKeyInterface; +export declare const SaltedDataKeyName = "vrsc::data.type.salteddata"; +export declare const SaltedDataKey: VDXFKeyInterface; +export declare const DataDescriptorKeyName = "vrsc::data.type.object.datadescriptor"; +export declare const DataDescriptorKey: VDXFKeyInterface; +export declare const SignatureDataKeyName = "vrsc::data.signaturedata"; +export declare const SignatureDataKey: VDXFKeyInterface; +export declare const VectorUint256KeyName = "vrsc::data.mmrhashes"; +export declare const VectorUint256Key: VDXFKeyInterface; +export declare const MMRLinksKeyName = "vrsc::data.mmrlinks"; +export declare const MMRLinksKey: VDXFKeyInterface; +export declare const MMRDescriptorKeyName = "vrsc::data.mmrdescriptor"; +export declare const MMRDescriptorKey: VDXFKeyInterface; +export declare const TypeDefinitionKeyName = "vrsc::data.type.typedefinition"; +export declare const TypeDefinitionKey: VDXFKeyInterface; +export declare const MultiMapKeyName = "vrsc::identity.multimapkey"; +export declare const MultiMapKey: VDXFKeyInterface; +export declare const ContentMultiMapRemoveKeyName = "vrsc::identity.multimapremove"; +export declare const ContentMultiMapRemoveKey: VDXFKeyInterface; +export declare const ProfileMediaKeyName = "vrsc::identity.profile.media"; +export declare const ProfileMediaKey: VDXFKeyInterface; +export declare const ZMemoMessageKeyName = "vrsc::system.zmemo.message"; +export declare const ZMemoMessageKey: VDXFKeyInterface; +export declare const ZMemoSignatureKeyName = "vrsc::system.zmemo.signature"; +export declare const ZMemoSignatureKey: VDXFKeyInterface; +export declare const CurrencyStartNotarizationKeyName = "vrsc::system.currency.startnotarization"; +export declare const CurrencyStartNotarizationKey: VDXFKeyInterface; +export declare const EvidenceDataKeyName = "vrsc::system.crosschain.evidencedata"; +export declare const EvidenceDataKey: VDXFKeyInterface; +export declare const CredentialKeyName = "vrsc::data.type.object.credential"; +export declare const CredentialKey: VDXFKeyInterface; diff --git a/dist/vdxf/vdxfdatakeys.js b/dist/vdxf/vdxfdatakeys.js new file mode 100644 index 00000000..6ff5431c --- /dev/null +++ b/dist/vdxf/vdxfdatakeys.js @@ -0,0 +1,367 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VectorUint256Key = exports.VectorUint256KeyName = exports.SignatureDataKey = exports.SignatureDataKeyName = exports.DataDescriptorKey = exports.DataDescriptorKeyName = exports.SaltedDataKey = exports.SaltedDataKeyName = exports.EncryptionDescriptorKey = exports.EncryptionDescriptorKeyName = exports.CrossChainDataRefKey = exports.CrossChainDataRefKeyName = exports.UTXORefKey = exports.UTXORefKeyName = exports.DataTransferDestinationKey = exports.DataTransferDestinationKeyName = exports.DataURLKey = exports.DataURLKeyName = exports.DataRatingsKey = exports.DataRatingsKeyName = exports.DataCurrencyMapKey = exports.DataCurrencyMapKeyName = exports.DataInt64VectorKey = exports.DataInt64VectorKeyName = exports.DataInt32VectorKey = exports.DataInt32VectorKeyName = exports.DataByteVectorKey = exports.DataByteVectorKeyName = exports.DataVectorKey = exports.DataVectorKeyName = exports.DataStringKey = exports.DataStringKeyName = exports.DataUint256Key = exports.DataUint256KeyName = exports.DataUint160Key = exports.DataUint160KeyName = exports.DataUint64Key = exports.DataUint64KeyName = exports.DataInt64Key = exports.DataInt64KeyName = exports.DataUint32Key = exports.DataUint32KeyName = exports.DataInt32Key = exports.DataInt32KeyName = exports.DataUint16Key = exports.DataUint16KeyName = exports.DataInt16Key = exports.DataInt16KeyName = exports.DataByteKey = exports.DataByteKeyName = void 0; +exports.CredentialKey = exports.CredentialKeyName = exports.EvidenceDataKey = exports.EvidenceDataKeyName = exports.CurrencyStartNotarizationKey = exports.CurrencyStartNotarizationKeyName = exports.ZMemoSignatureKey = exports.ZMemoSignatureKeyName = exports.ZMemoMessageKey = exports.ZMemoMessageKeyName = exports.ProfileMediaKey = exports.ProfileMediaKeyName = exports.ContentMultiMapRemoveKey = exports.ContentMultiMapRemoveKeyName = exports.MultiMapKey = exports.MultiMapKeyName = exports.TypeDefinitionKey = exports.TypeDefinitionKeyName = exports.MMRDescriptorKey = exports.MMRDescriptorKeyName = exports.MMRLinksKey = exports.MMRLinksKeyName = void 0; +exports.DataByteKeyName = "vrsc::data.type.byte"; +exports.DataByteKey = { + "vdxfid": "iBXUHbh4iacbeZnzDRxishvBSrYk2S2k7t", + "indexid": "xGMakQ89ZtqGGjg257csr6SiUWZksGmjWp", + "hash160result": "2e97a8bba443773812341e1d761530d3bba04f58", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.byte" + } +}; +exports.DataInt16KeyName = "vrsc::data.type.int16"; +exports.DataInt16Key = { + "vdxfid": "iDtTv3wf1Vk3M2Y46RjLPKtttx5hydwtY1", + "indexid": "xJiaNrNjroxhyCR5x7PVMiRRvc6ipg6N9g", + "hash160result": "ee334ebd432db0b24cc2702eda61c28ff44d3872", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.int16" + } +}; +exports.DataUint16KeyName = "vrsc::data.type.uint16"; +exports.DataUint16Key = { + "vdxfid": "iHn7urT2yVfS7pQn6WGAmCVWh4HBLV24n3", + "indexid": "xNcENet7pot6jzHoxBvKjb23iiJCGpekDk", + "hash160result": "5cfc322d2a216145f7b82714115e7953269de59c", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.uint16" + } +}; +exports.DataInt32KeyName = "vrsc::data.type.int32"; +exports.DataInt32Key = { + "vdxfid": "iHpLPprRDv3H5H3ZMaJ9nyHFzkG9xJWZDb", + "indexid": "xNeSrdHW5EFwhSvbDFxJmMoo2QHAtoEaEM", + "hash160result": "3e9ba478b23b13232f28d21051d907ce8fdd509d", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.int32" + } +}; +exports.DataUint32KeyName = "vrsc::data.type.uint32"; +exports.DataUint32Key = { + "vdxfid": "iKSj5zhd6cSsLudaGhtfmisRNgEM7SPFWY", + "indexid": "xQGqYo8hwvfXy5Wc8PYpk7PxQLFMwfP7Fp", + "hash160result": "f279818aeb4fe768956b350d1fc7216ca0e82aaf", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.uint32" + } +}; +exports.DataInt64KeyName = "vrsc::data.type.int64"; +exports.DataInt64Key = { + "vdxfid": "iKB3TGi9Dg5HZ4nQAgLQAgp3tuXBaRKHpC", + "indexid": "xQ19v59E4zHxBEfS2MzZ95LavZYCTTeuyg", + "hash160result": "ab3705f8a7fae59786ef897b014df85fcd9533ac", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.int64" + } +}; +exports.DataUint64KeyName = "vrsc::data.type.uint64"; +exports.DataUint64Key = { + "vdxfid": "iPamkQf38AeGQ8z4zSsZL7t9kXMeUkYLJL", + "indexid": "xUQtDD67yUrw2Js6r8XiJWQgnBNfNeeoUq", + "hash160result": "bb2ae9ed3e9f400def0724937fbf65f23ef690dc", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.uint64" + } +}; +exports.DataUint160KeyName = "vrsc::data.type.uint160"; +exports.DataUint160Key = { + "vdxfid": "iAAwdbLyKYL39nJ1eQHaHtb75krg4mV1Lq", + "indexid": "xF146Pn4ArYhmxB3W5wjGH7e7Qsgx9bkpj", + "hash160result": "d97d2295d4c73f6f6f0697c8086bd822d6977549", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.uint160" + } +}; +exports.DataUint256KeyName = "vrsc::data.type.uint256"; +exports.DataUint256Key = { + "vdxfid": "i8k7g7z6grtGYrNZmZr5TQ872aHssXuuua", + "indexid": "xDaE8vRBYB6wB2FbdFWERnee4EJtjbCtMM", + "hash160result": "939b27bea698d180237c40b2194025acc673cb39", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.uint256" + } +}; +exports.DataStringKeyName = "vrsc::data.type.string"; +exports.DataStringKey = { + "vdxfid": "iK7a5JNJnbeuYWVHCDRpJosj3irGJ5Qa8c", + "indexid": "xPwgY6oPdusaAgNK3u5yHCQG5NsHEcBpi5", + "hash160result": "e5c061641228a399169211e666de18448b7b8bab", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.string" + } +}; +// this is a key for a typed vector, which will have the object type key following the vector key +exports.DataVectorKeyName = "vrsc::data.type.vector"; +exports.DataVectorKey = { + "vdxfid": "iAEShwk1xjdGhaUSz3Maa2XR32o3vRuHq7", + "indexid": "xF4ZAkB6p3qwKkMUqj1jYR3x4gp4mGz657", + "hash160result": "503875b0dc301189a98927d3ece56c5f921c1f4a", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.vector" + } +}; +exports.DataByteVectorKeyName = "vrsc::data.type.bytevector"; +exports.DataByteVectorKey = { + "vdxfid": "iKMhRLX1JHQihVZx2t2pAWW2uzmK6AzwW3", + "indexid": "xQBot8x69bdPKfSytZgy8u2ZwenKzVjR4X", + "hash160result": "cc3ae6466006629f5105f71325bb2a19107037ae", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.bytevector" + } +}; +exports.DataInt32VectorKeyName = "vrsc::data.type.int32vector"; +exports.DataInt32VectorKey = { + "vdxfid": "iJZt2fcUv1iivbfC3tuPuefabcTppQEoVq", + "indexid": "xPPzVU3ZmKwPYmYDuaZYt3C7dGUqk939N7", + "hash160result": "c0847f3025c408059b5a8f6a9e414a8ed8288da5", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.int32vector" + } +}; +exports.DataInt64VectorKeyName = "vrsc::data.type.int64vector"; +exports.DataInt64VectorKey = { + "vdxfid": "i4qtYkFS9iNyu2AkqwoSn1xyCdfH9PUvak", + "indexid": "x9g11YgX12beXC3nhdTbkQVWEHgJ2jqfz1", + "hash160result": "c6219ea13884987453692cb14c72d5f6a47c020f", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.int64vector" + } +}; +exports.DataCurrencyMapKeyName = "vrsc::data.type.object.currencymap"; +exports.DataCurrencyMapKey = { + "vdxfid": "iMrGhzkZq5fpWWSa1RambRySFPb7CuvKuX", + "indexid": "xSgPAoBegPtV8gKbs7EvZpVyH3c858ZUvL", + "hash160result": "25db70c2fcae2571f89201181bec04587e1f8fc9", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.object.currencymap" + } +}; +exports.DataRatingsKeyName = "vrsc::data.type.object.ratings"; +exports.DataRatingsKey = { + "vdxfid": "iHJComZUXXGniLkDhjYprWYEN8qvQGDoam", + "indexid": "xN8KGZzZNqVTLWdFZRCypu4mPnrwHFKbCK", + "hash160result": "32cad57ff1dc5db4b5ba573ce01bc9c89b0d9e97", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.object.ratings" + } +}; +exports.DataURLKeyName = "vrsc::data.type.object.url"; +exports.DataURLKey = { + "vdxfid": "iJ7xdhJTJAvJubNnSJFXyA3jujzqGxjLuZ", + "indexid": "xNx56VjY9V8yXmFpHyugwYaGwQ1rCt6J9W", + "hash160result": "7748bfaf53dd2ff63ed5f73a41174c360f30a6a0", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.object.url" + } +}; +exports.DataTransferDestinationKeyName = "vrsc::data.type.object.transferdestination"; +exports.DataTransferDestinationKey = { + "vdxfid": "i91L6zwZQrkbNVMB1AZ1Z671qybexRmeVK", + "indexid": "xDqSZoNeGAyFzfECrrDAXUdYsdcfs3Zuku", + "hash160result": "92f38773849383146037b16a48ea350c1c11ac3c", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.object.transferdestination" + } +}; +exports.UTXORefKeyName = "vrsc::data.type.object.utxoref"; +exports.UTXORefKey = { + "vdxfid": "iNcKvh7mazaXptzHf85q6EtpFYFE7asKC1", + "indexid": "xTSSPVYrSJoCT4sKWojz4dRMHCGF3h9tM4", + "hash160result": "013e760f7451c289672993ea391ae643c21ce4d1", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.object.utxoref" + } +}; +exports.CrossChainDataRefKeyName = "vrsc::data.type.object.crosschaindataref"; +exports.CrossChainDataRefKey = { + "vdxfid": "iP3euVSzNcXUrLNHnQnR9G6q8jeYuGSxgw", + "indexid": "xTsmNHt5Dvk9UWFKe6Sa7edNAPfZmJVgLc", + "hash160result": "4d33e0aee0f648c7871b2661d1221b57c05aaed6", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.object.crosschaindataref" + } +}; +exports.EncryptionDescriptorKeyName = "vrsc::data.type.encryptiondescriptor"; +exports.EncryptionDescriptorKey = { + "vdxfid": "iHEEK8ipj58BeKZNWuaaR2tDR5RK2kmf9A", + "indexid": "xN4Lmw9uaPLrGVSQNbEjPRQkSjSKxsHUQu", + "hash160result": "8d021acc1b68335bd7d37b28ff773c138ea5dd96", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.encryptiondescriptor" + } +}; +exports.SaltedDataKeyName = "vrsc::data.type.salteddata"; +exports.SaltedDataKey = { + "vdxfid": "i92U1nLuLJkC44FZZ4Lq9zk4qW3HrWAWNo", + "indexid": "xDraUamzBcxrgE8bQjzz8PGbsA4JiFskTD", + "hash160result": "9e13510e01d0d03a7bc90d7a2ef32824f515e33c", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.salteddata" + } +}; +exports.DataDescriptorKeyName = "vrsc::data.type.object.datadescriptor"; +exports.DataDescriptorKey = { + "vdxfid": "i4GC1YGEVD21afWudGoFJVdnfjJ5XWnCQv", + "indexid": "x96JULhKLXEgCqPwUxTQGtAKhPK6Qh1iaW", + "hash160result": "4d4f12424ded2033a526a4e2a8835fc5b2eba208", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.object.datadescriptor" + } +}; +exports.SignatureDataKeyName = "vrsc::data.signaturedata"; +exports.SignatureDataKey = { + "vdxfid": "i7PcVF9wwPtQ6p6jDtCVpohX65pTZuP2ah", + "indexid": "xCDix3b2ni74iyym5ZreoCE47jqUTBFRAb", + "hash160result": "b48b359e9a00042cec64f7f66ac717d388a4f22a", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.signaturedata" + } +}; +exports.VectorUint256KeyName = "vrsc::data.mmrhashes"; +exports.VectorUint256Key = { + "vdxfid": "i9UgJ2WxGw95PKdoCXjpfnBShtP5gi9fxS", + "indexid": "xEJnkpx38FMk1VWq4DPyeAhyjYQ6X5Gsti", + "hash160result": "8c1afd59e904f6d2702699963abccbc6d326d841", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.mmrhashes" + } +}; +exports.MMRLinksKeyName = "vrsc::data.mmrlinks"; +exports.MMRLinksKey = { + "vdxfid": "iPQsnA1R8UjHNddZKZ3FxsuKQ5WzKqSC7w", + "indexid": "xUEzExSVynwwzoWbBEhQwGRrRjY1Bc2MYc", + "hash160result": "f535a4e9ac0f94eda01695d16489a4a102d6b1da", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.mmrlinks" + } +}; +exports.MMRDescriptorKeyName = "vrsc::data.mmrdescriptor"; +exports.MMRDescriptorKey = { + "vdxfid": "i9dVDb4LgfMYrZD1JBNP2uaso4bNAkT4Jr", + "indexid": "xETbgPVRXyaDUj639s2Y1J7QpicP4DvZMt", + "hash160result": "97273a4c02d6be002f8d69c3979616732ba68243", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.mmrdescriptor" + } +}; +exports.TypeDefinitionKeyName = "vrsc::data.type.typedefinition"; +exports.TypeDefinitionKey = { + "vdxfid": "iL5MPPHWXQEY3p2Q1UsmGDvXsgPiqd1W1S", + "indexid": "xQuTrBibNiTCfyuRsAXvEcT4uLQjhxrpyL", + "hash160result": "ae8d805d9650c0512a6b6ec33e963386542f18b6", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.typedefinition" + } +}; +exports.MultiMapKeyName = "vrsc::identity.multimapkey"; +exports.MultiMapKey = { + "vdxfid": "i3mbggp3NBR77C5JeFQJTpAxmgMidayLLE", + "indexid": "x8bi9VF8DVdmjMxLVw4TSChVoLNjUyapgs", + "hash160result": "6920bb81b420bc95e29a10ed677379b1e39e3a03", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.multimapkey" + } +}; +exports.ContentMultiMapRemoveKeyName = "vrsc::identity.multimapremove"; +exports.ContentMultiMapRemoveKey = { + "vdxfid": "i5Zkx5Z7tEfh42xtKfwbJ5LgEWE9rEgpFY", + "indexid": "xAPsQszCjYtMgCqvBMbkGTsDGAFAmrN33A", + "hash160result": "d393b986e4f82db7bec82d97b186882d739ded16", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.multimapremove" + } +}; +// for any ID, this key indexes content that applies to representing the profile of +// that ID. there may be many mime-type instances of a particular piece of profile media +exports.ProfileMediaKeyName = "vrsc::identity.profile.media"; +exports.ProfileMediaKey = { + "vdxfid": "iEYsp2njSt1M4EVYi9uuAPBU2wpKmThkkr", + "indexid": "xKNzGqDpJCE1gQNaZqa48mi14bqLaG669g", + "hash160result": "e95b2ee1abb130a93900ddaef2d8e528010f7c79", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::identity.profile.media" + } +}; +exports.ZMemoMessageKeyName = "vrsc::system.zmemo.message"; +exports.ZMemoMessageKey = { + "vdxfid": "iNHg1n828PUxktkYeNxC6sdVmuKTipn3L3", + "indexid": "xT7nUaZ6yhhdP4daW4cM5GA2oZLUaNVaBD", + "hash160result": "4a8f418203621f10d1a61701be8dbbbb38fa5cce", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::system.zmemo.message" + } +}; +exports.ZMemoSignatureKeyName = "vrsc::system.zmemo.signature"; +exports.ZMemoSignatureKey = { + "vdxfid": "i7mrLLjUfGYuHJwnsxFvd282hsdn4staJG", + "indexid": "xCbxo9AZWamZuUppjdv5bQeZjXeo1vbaCc", + "hash160result": "7b47c8cd90c4c3ddc542f37ca77473b7325a272f", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::system.zmemo.signature" + } +}; +exports.CurrencyStartNotarizationKeyName = "vrsc::system.currency.startnotarization"; +exports.CurrencyStartNotarizationKey = { + "vdxfid": "iRvxVcGLaCXcDiAfnQ5FfeBCo2AiBibAft", + "indexid": "xWm4xQhRRWkGqt3he5jQe2hjpgBj5C7Tj3", + "hash160result": "b537201ca6465976bea7bdb03119644a858052f6", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::system.currency.startnotarization" + } +}; +exports.EvidenceDataKeyName = "vrsc::system.crosschain.evidencedata"; +exports.EvidenceDataKey = { + "vdxfid": "i6ZGLNfqu4cQ3h98VHimETwnWtizMwCJw6", + "indexid": "xBPNoB6vkNq4fs2ALyNvCrUKYYk1FFK2fs", + "hash160result": "3dd00f6451974c99a3190f430cce5b788ddacd21", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::system.crosschain.evidencedata" + } +}; +exports.CredentialKeyName = "vrsc::data.type.object.credential"; +exports.CredentialKey = { + "vdxfid": "iDTG49YLqmkHMYRyuQBYgEyTByQwAzqGd6", + "indexid": "xJHNWwyRh5xwyiK1m5qhedVzDdRx3pe2c7", + "hash160result": "09fbc202710c9f2dacb87e5623e97e2e4101746d", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::data.type.object.credential" + } +}; From 4ba80ac6aa0862854cf7918807a398bde77c4e0d Mon Sep 17 00:00:00 2001 From: michaeltout Date: Mon, 1 Dec 2025 16:09:12 +0100 Subject: [PATCH 094/123] Add ResponseURI to GenericRequest --- dist/vdxf/classes/request/GenericRequest.d.ts | 7 +++ dist/vdxf/classes/request/GenericRequest.js | 40 +++++++++++++- src/__tests__/vdxf/genericrequest.test.ts | 19 ++++--- src/vdxf/classes/request/GenericRequest.ts | 52 +++++++++++++++++-- 4 files changed, 103 insertions(+), 15 deletions(-) diff --git a/dist/vdxf/classes/request/GenericRequest.d.ts b/dist/vdxf/classes/request/GenericRequest.d.ts index 82d07fa8..4276d77d 100644 --- a/dist/vdxf/classes/request/GenericRequest.d.ts +++ b/dist/vdxf/classes/request/GenericRequest.d.ts @@ -1,13 +1,17 @@ import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import { GenericEnvelope, GenericEnvelopeInterface, GenericEnvelopeJson } from "../envelope/GenericEnvelope"; import { SaplingPaymentAddress } from '../../../pbaas/SaplingPaymentAddress'; +import { ResponseURI, ResponseURIJson } from '../ResponseURI'; export type GenericRequestJson = GenericEnvelopeJson & { + responseuris?: Array; encryptresponsetoaddress?: string; }; export type GenericRequestInterface = GenericEnvelopeInterface & { + responseURIs?: Array; encryptResponseToAddress?: SaplingPaymentAddress; }; export declare class GenericRequest extends GenericEnvelope implements SerializableEntity { + responseURIs?: Array; encryptResponseToAddress?: SaplingPaymentAddress; static VERSION_CURRENT: import("bn.js"); static VERSION_FIRSTVALID: import("bn.js"); @@ -18,9 +22,12 @@ export declare class GenericRequest extends GenericEnvelope implements Serializa static FLAG_MULTI_DETAILS: import("bn.js"); static FLAG_IS_TESTNET: import("bn.js"); static FLAG_HAS_SALT: import("bn.js"); + static FLAG_HAS_RESPONSE_URIS: import("bn.js"); static FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS: import("bn.js"); constructor(envelope?: GenericRequestInterface); + hasResponseURIs(): boolean; hasEncryptResponseToAddress(): boolean; + setHasResponseURIs(): void; setHasEncryptResponseToAddress(): void; setFlags(): void; getByteLengthOptionalSig(includeSig?: boolean): number; diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js index 824f14bf..3a3b785e 100644 --- a/dist/vdxf/classes/request/GenericRequest.js +++ b/dist/vdxf/classes/request/GenericRequest.js @@ -7,28 +7,45 @@ const SaplingPaymentAddress_1 = require("../../../pbaas/SaplingPaymentAddress"); const bufferutils_1 = require("../../../utils/bufferutils"); const base64url_1 = require("base64url"); const deeplink_1 = require("../../../constants/deeplink"); +const ResponseURI_1 = require("../ResponseURI"); +const varuint_1 = require("../../../utils/varuint"); class GenericRequest extends GenericEnvelope_1.GenericEnvelope { constructor(envelope = { details: [], flags: GenericRequest.BASE_FLAGS }) { super(envelope); - this.encryptResponseToAddress = envelope.encryptResponseToAddress; + this.responseURIs = envelope === null || envelope === void 0 ? void 0 : envelope.responseURIs; + this.encryptResponseToAddress = envelope === null || envelope === void 0 ? void 0 : envelope.encryptResponseToAddress; this.setFlags(); } + hasResponseURIs() { + return !!(this.flags.and(GenericRequest.FLAG_HAS_RESPONSE_URIS).toNumber()); + } hasEncryptResponseToAddress() { return !!(this.flags.and(GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS).toNumber()); } + setHasResponseURIs() { + this.flags = this.flags.or(GenericRequest.FLAG_HAS_RESPONSE_URIS); + } setHasEncryptResponseToAddress() { this.flags = this.flags.or(GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS); } setFlags() { super.setFlags(); + if (this.responseURIs) + this.setHasResponseURIs(); if (this.encryptResponseToAddress) this.setHasEncryptResponseToAddress(); } getByteLengthOptionalSig(includeSig = true) { let length = super.getByteLengthOptionalSig(includeSig); + if (this.hasResponseURIs()) { + length += varuint_1.default.encodingLength(this.responseURIs.length); + for (let i = 0; i < this.responseURIs.length; i++) { + length += this.responseURIs[i].getByteLength(); + } + } if (this.hasEncryptResponseToAddress()) { length += this.encryptResponseToAddress.getByteLength(); } @@ -38,6 +55,12 @@ class GenericRequest extends GenericEnvelope_1.GenericEnvelope { const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLengthOptionalSig(includeSig))); const superBuf = super.toBufferOptionalSig(includeSig); writer.writeSlice(superBuf); + if (this.hasResponseURIs()) { + writer.writeCompactSize(this.responseURIs.length); + for (let i = 0; i < this.responseURIs.length; i++) { + writer.writeSlice(this.responseURIs[i].toBuffer()); + } + } if (this.hasEncryptResponseToAddress()) { writer.writeSlice(this.encryptResponseToAddress.toBuffer()); } @@ -48,6 +71,15 @@ class GenericRequest extends GenericEnvelope_1.GenericEnvelope { throw new Error("Cannot create request from empty buffer"); const reader = new bufferutils_1.default.BufferReader(buffer, offset); reader.offset = super.fromBuffer(reader.buffer, reader.offset); + if (this.hasResponseURIs()) { + this.responseURIs = []; + const callbackURIsLength = reader.readCompactSize(); + for (let i = 0; i < callbackURIsLength; i++) { + const newURI = new ResponseURI_1.ResponseURI(); + reader.offset = newURI.fromBuffer(reader.buffer, reader.offset); + this.responseURIs.push(newURI); + } + } if (this.hasEncryptResponseToAddress()) { this.encryptResponseToAddress = new SaplingPaymentAddress_1.SaplingPaymentAddress(); reader.offset = this.encryptResponseToAddress.fromBuffer(reader.buffer, reader.offset); @@ -56,6 +88,9 @@ class GenericRequest extends GenericEnvelope_1.GenericEnvelope { } toJson() { const parentJson = super.toJson(); + if (this.hasResponseURIs()) { + parentJson["responseuris"] = this.responseURIs.map(x => x.toJson()); + } if (this.hasEncryptResponseToAddress()) { parentJson["encryptresponsetoaddress"] = this.encryptResponseToAddress.toAddressString(); } @@ -97,4 +132,5 @@ GenericRequest.FLAG_HAS_CREATED_AT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_ GenericRequest.FLAG_MULTI_DETAILS = GenericEnvelope_1.GenericEnvelope.FLAG_MULTI_DETAILS; GenericRequest.FLAG_IS_TESTNET = GenericEnvelope_1.GenericEnvelope.FLAG_IS_TESTNET; GenericRequest.FLAG_HAS_SALT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_SALT; -GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS = new bn_js_1.BN(32, 10); +GenericRequest.FLAG_HAS_RESPONSE_URIS = new bn_js_1.BN(32, 10); +GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS = new bn_js_1.BN(64, 10); diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts index dccd5951..7c672a9b 100644 --- a/src/__tests__/vdxf/genericrequest.test.ts +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -1,8 +1,7 @@ import { BN } from 'bn.js'; import base64url from 'base64url'; import { DATA_TYPE_MMRDATA, DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256 } from '../../constants/pbaas'; -import { ContentMultiMap, GenericRequest, IDENTITY_VERSION_PBAAS, IdentityID, IdentityUpdateRequestDetails, KeyID, PartialIdentity, PartialMMRData, PartialSignData, PartialSignDataInitData, SaplingPaymentAddress } from '../../'; -import { createHash } from 'crypto'; +import { ContentMultiMap, GenericRequest, IDENTITY_VERSION_PBAAS, IdentityID, IdentityUpdateRequestDetails, KeyID, PartialIdentity, PartialMMRData, PartialSignData, PartialSignDataInitData, ResponseURI, SaplingPaymentAddress } from '../../'; import { VerifiableSignatureData, VerifiableSignatureDataInterface } from '../../vdxf/classes/VerifiableSignatureData'; import { CompactAddressObject } from '../../vdxf/classes/CompactAddressObject'; import { GeneralTypeOrdinalVDXFObject, IdentityUpdateRequestOrdinalVDXFObject } from '../../vdxf/classes/ordinals'; @@ -17,12 +16,6 @@ describe('GenericRequest — buffer / URI / QR operations', () => { return GenericRequest.fromQrString((GenericRequest.fromWalletDeeplinkUri(clone.toWalletDeeplinkUri())).toQrString()); } - function rawDetailsSha256(req: GenericRequest): Buffer { - // replicate the same behavior as getRawDetailsSha256() - const buf = req['toBufferOptionalSig'](false); // call internal method - return createHash("sha256").update(buf).digest(); - } - it('round trips with a single detail (no signature / createdAt)', () => { const detail = new GeneralTypeOrdinalVDXFObject({ data: Buffer.from('cafebabe', 'hex'), @@ -64,7 +57,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); }); - it('round trips with createdAt, signature, and encryptResponseToAddress', () => { + it('round trips with createdAt, signature, responseURI, and encryptResponseToAddress', () => { const sig = new VerifiableSignatureData({ flags: new BN(0), version: new BN(1), @@ -90,7 +83,8 @@ describe('GenericRequest — buffer / URI / QR operations', () => { details: [detail], signature: sig, createdAt, - encryptResponseToAddress: SaplingPaymentAddress.fromAddressString(saplingAddr) + encryptResponseToAddress: SaplingPaymentAddress.fromAddressString(saplingAddr), + responseURIs: [ResponseURI.fromUriString("https://verus.io/callback", ResponseURI.TYPE_POST), ResponseURI.fromUriString("https://example.com/callback", ResponseURI.TYPE_REDIRECT)] }); expect(req.isSigned()).toBe(true); @@ -100,6 +94,11 @@ describe('GenericRequest — buffer / URI / QR operations', () => { expect(round.signature).toBeDefined(); expect(round.signature?.signatureAsVch.toString('base64')).toBe(sig.signatureAsVch.toString('base64')) expect(round.createdAt?.toString()).toEqual(createdAt.toString()); + expect(round.hasResponseURIs()).toBe(true) + expect(round.responseURIs![0].getUriString()).toBe("https://verus.io/callback") + expect(round.responseURIs![0].type.toString()).toBe(ResponseURI.TYPE_POST.toString()) + expect(round.responseURIs![1].getUriString()).toBe("https://example.com/callback") + expect(round.responseURIs![1].type.toString()).toBe(ResponseURI.TYPE_REDIRECT.toString()) expect(round.hasEncryptResponseToAddress()).toBe(true) expect(round.encryptResponseToAddress?.toAddressString()).toBe(saplingAddr) const d2 = round.getDetails(0); diff --git a/src/vdxf/classes/request/GenericRequest.ts b/src/vdxf/classes/request/GenericRequest.ts index 2c8ced84..81a5d2df 100644 --- a/src/vdxf/classes/request/GenericRequest.ts +++ b/src/vdxf/classes/request/GenericRequest.ts @@ -3,19 +3,23 @@ import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import { GenericEnvelope, GenericEnvelopeInterface, GenericEnvelopeJson } from "../envelope/GenericEnvelope"; import { SaplingPaymentAddress } from '../../../pbaas/SaplingPaymentAddress'; import bufferutils from '../../../utils/bufferutils'; -import { GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY } from '../../keys'; import base64url from 'base64url'; import { DEEPLINK_PROTOCOL_URL_CURRENT_VERSION, DEEPLINK_PROTOCOL_URL_STRING } from '../../../constants/deeplink'; +import { ResponseURI, ResponseURIJson } from '../ResponseURI'; +import varuint from '../../../utils/varuint'; export type GenericRequestJson = GenericEnvelopeJson & { + responseuris?: Array; encryptresponsetoaddress?: string; }; export type GenericRequestInterface = GenericEnvelopeInterface & { + responseURIs?: Array; encryptResponseToAddress?: SaplingPaymentAddress; } export class GenericRequest extends GenericEnvelope implements SerializableEntity { + responseURIs?: Array; encryptResponseToAddress?: SaplingPaymentAddress; static VERSION_CURRENT = new BN(1, 10); @@ -28,7 +32,8 @@ export class GenericRequest extends GenericEnvelope implements SerializableEntit static FLAG_MULTI_DETAILS = GenericEnvelope.FLAG_MULTI_DETAILS; static FLAG_IS_TESTNET = GenericEnvelope.FLAG_IS_TESTNET; static FLAG_HAS_SALT = GenericEnvelope.FLAG_HAS_SALT; - static FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS = new BN(32, 10); + static FLAG_HAS_RESPONSE_URIS = new BN(32, 10); + static FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS = new BN(64, 10); constructor( envelope: GenericRequestInterface = { @@ -38,15 +43,24 @@ export class GenericRequest extends GenericEnvelope implements SerializableEntit ) { super(envelope) - this.encryptResponseToAddress = envelope.encryptResponseToAddress; + this.responseURIs = envelope?.responseURIs; + this.encryptResponseToAddress = envelope?.encryptResponseToAddress; this.setFlags(); } + hasResponseURIs() { + return !!(this.flags.and(GenericRequest.FLAG_HAS_RESPONSE_URIS).toNumber()); + } + hasEncryptResponseToAddress() { return !!(this.flags.and(GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS).toNumber()); } + setHasResponseURIs() { + this.flags = this.flags.or(GenericRequest.FLAG_HAS_RESPONSE_URIS); + } + setHasEncryptResponseToAddress() { this.flags = this.flags.or(GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS); } @@ -54,12 +68,21 @@ export class GenericRequest extends GenericEnvelope implements SerializableEntit setFlags() { super.setFlags(); + if (this.responseURIs) this.setHasResponseURIs(); if (this.encryptResponseToAddress) this.setHasEncryptResponseToAddress(); } getByteLengthOptionalSig(includeSig = true): number { let length = super.getByteLengthOptionalSig(includeSig); + if (this.hasResponseURIs()) { + length += varuint.encodingLength(this.responseURIs.length); + + for (let i = 0; i < this.responseURIs.length; i++) { + length += this.responseURIs[i].getByteLength(); + } + } + if (this.hasEncryptResponseToAddress()) { length += this.encryptResponseToAddress.getByteLength(); } @@ -76,6 +99,14 @@ export class GenericRequest extends GenericEnvelope implements SerializableEntit writer.writeSlice(superBuf); + if (this.hasResponseURIs()) { + writer.writeCompactSize(this.responseURIs.length); + + for (let i = 0; i < this.responseURIs.length; i++) { + writer.writeSlice(this.responseURIs[i].toBuffer()); + } + } + if (this.hasEncryptResponseToAddress()) { writer.writeSlice(this.encryptResponseToAddress.toBuffer()); } @@ -90,6 +121,17 @@ export class GenericRequest extends GenericEnvelope implements SerializableEntit reader.offset = super.fromBuffer(reader.buffer, reader.offset); + if (this.hasResponseURIs()) { + this.responseURIs = []; + const callbackURIsLength = reader.readCompactSize(); + + for (let i = 0; i < callbackURIsLength; i++) { + const newURI = new ResponseURI(); + reader.offset = newURI.fromBuffer(reader.buffer, reader.offset); + this.responseURIs.push(newURI); + } + } + if (this.hasEncryptResponseToAddress()) { this.encryptResponseToAddress = new SaplingPaymentAddress(); @@ -102,6 +144,10 @@ export class GenericRequest extends GenericEnvelope implements SerializableEntit toJson(): GenericRequestJson { const parentJson = super.toJson(); + if (this.hasResponseURIs()) { + parentJson["responseuris"] = this.responseURIs.map(x => x.toJson()) + } + if (this.hasEncryptResponseToAddress()) { parentJson["encryptresponsetoaddress"] = this.encryptResponseToAddress.toAddressString(); } From 6469309125fc0d1c21ee8b446df4e8286aa2bab5 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Mon, 1 Dec 2025 17:02:53 +0100 Subject: [PATCH 095/123] Add requestID to GenericEnvelope --- .../classes/envelope/GenericEnvelope.d.ts | 10 ++- dist/vdxf/classes/envelope/GenericEnvelope.js | 66 ++++++++++++------ dist/vdxf/classes/request/GenericRequest.js | 4 +- dist/vdxf/classes/response/GenericResponse.js | 2 +- src/__tests__/vdxf/genericrequest.test.ts | 6 +- src/__tests__/vdxf/genericresponse.test.ts | 6 +- src/vdxf/classes/envelope/GenericEnvelope.ts | 69 +++++++++++++------ src/vdxf/classes/request/GenericRequest.ts | 4 +- src/vdxf/classes/response/GenericResponse.ts | 2 +- 9 files changed, 115 insertions(+), 54 deletions(-) diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts index 404fceef..63c1527d 100644 --- a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts +++ b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts @@ -6,6 +6,7 @@ export interface GenericEnvelopeInterface { version?: BigNumber; flags?: BigNumber; signature?: VerifiableSignatureData; + requestID?: string; createdAt?: BigNumber; salt?: Buffer; details: Array; @@ -14,6 +15,7 @@ export type GenericEnvelopeJson = { version: string; flags?: string; signature?: VerifiableSignatureDataJson; + requestid?: string; createdat?: string; salt?: string; details: Array; @@ -22,6 +24,7 @@ export declare class GenericEnvelope implements SerializableEntity { version: BigNumber; flags: BigNumber; signature?: VerifiableSignatureData; + requestID?: string; createdAt?: BigNumber; salt?: Buffer; details: Array; @@ -30,6 +33,7 @@ export declare class GenericEnvelope implements SerializableEntity { static VERSION_LASTVALID: import("bn.js"); static BASE_FLAGS: import("bn.js"); static FLAG_SIGNED: import("bn.js"); + static FLAG_HAS_REQUEST_ID: import("bn.js"); static FLAG_HAS_CREATED_AT: import("bn.js"); static FLAG_MULTI_DETAILS: import("bn.js"); static FLAG_IS_TESTNET: import("bn.js"); @@ -37,11 +41,13 @@ export declare class GenericEnvelope implements SerializableEntity { constructor(envelope?: GenericEnvelopeInterface); isValidVersion(): boolean; isSigned(): boolean; + hasRequestID(): boolean; hasMultiDetails(): boolean; hasCreatedAt(): boolean; hasSalt(): boolean; isTestnet(): boolean; setSigned(): void; + setHasRequestID(): void; setHasMultiDetails(): void; setHasCreatedAt(): void; setHasSalt(): void; @@ -50,8 +56,8 @@ export declare class GenericEnvelope implements SerializableEntity { getRawDataSha256(includeSig?: boolean): Buffer; getDetailsIdentitySignatureHash(signedBlockheight: number): Buffer; getDetails(index?: number): OrdinalVDXFObject; - protected getDetailsBufferLength(): number; - protected getDetailsBuffer(): Buffer; + protected getDataBufferLengthAfterSig(): number; + protected getDataBufferAfterSig(): Buffer; private internalGetByteLength; protected getByteLengthOptionalSig(includeSig?: boolean): number; getByteLength(): number; diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.js b/dist/vdxf/classes/envelope/GenericEnvelope.js index eb5f835b..dc388e60 100644 --- a/dist/vdxf/classes/envelope/GenericEnvelope.js +++ b/dist/vdxf/classes/envelope/GenericEnvelope.js @@ -8,20 +8,23 @@ const OrdinalVDXFObject_1 = require("../ordinals/OrdinalVDXFObject"); const varuint_1 = require("../../../utils/varuint"); const crypto_1 = require("crypto"); const VerifiableSignatureData_1 = require("../VerifiableSignatureData"); +const vdxf_1 = require("../../../constants/vdxf"); +const address_1 = require("../../../utils/address"); class GenericEnvelope { constructor(envelope = { details: [], flags: GenericEnvelope.BASE_FLAGS }) { - this.signature = envelope.signature; - this.details = envelope.details; - this.createdAt = envelope.createdAt; - this.salt = envelope.salt; - if (envelope.flags) + this.signature = envelope === null || envelope === void 0 ? void 0 : envelope.signature; + this.requestID = envelope === null || envelope === void 0 ? void 0 : envelope.requestID; + this.details = envelope === null || envelope === void 0 ? void 0 : envelope.details; + this.createdAt = envelope === null || envelope === void 0 ? void 0 : envelope.createdAt; + this.salt = envelope === null || envelope === void 0 ? void 0 : envelope.salt; + if (envelope === null || envelope === void 0 ? void 0 : envelope.flags) this.flags = envelope.flags; else this.flags = GenericEnvelope.BASE_FLAGS; - if (envelope.version) + if (envelope === null || envelope === void 0 ? void 0 : envelope.version) this.version = envelope.version; else this.version = GenericEnvelope.VERSION_CURRENT; @@ -33,6 +36,9 @@ class GenericEnvelope { isSigned() { return !!(this.flags.and(GenericEnvelope.FLAG_SIGNED).toNumber()); } + hasRequestID() { + return !!(this.flags.and(GenericEnvelope.FLAG_HAS_REQUEST_ID).toNumber()); + } hasMultiDetails() { return !!(this.flags.and(GenericEnvelope.FLAG_MULTI_DETAILS).toNumber()); } @@ -48,6 +54,9 @@ class GenericEnvelope { setSigned() { this.flags = this.flags.or(GenericEnvelope.FLAG_SIGNED); } + setHasRequestID() { + this.flags = this.flags.or(GenericEnvelope.FLAG_HAS_REQUEST_ID); + } setHasMultiDetails() { this.flags = this.flags.or(GenericEnvelope.FLAG_MULTI_DETAILS); } @@ -61,14 +70,16 @@ class GenericEnvelope { this.flags = this.flags.or(GenericEnvelope.FLAG_IS_TESTNET); } setFlags() { - if (this.createdAt) - this.setHasCreatedAt(); - if (this.details && this.details.length > 1) - this.setHasMultiDetails(); if (this.signature) this.setSigned(); + if (this.requestID) + this.setHasRequestID(); + if (this.createdAt) + this.setHasCreatedAt(); if (this.salt) this.setHasSalt(); + if (this.details && this.details.length > 1) + this.setHasMultiDetails(); } getRawDataSha256(includeSig = false) { return (0, crypto_1.createHash)("sha256").update(this.toBufferOptionalSig(includeSig)).digest(); @@ -83,8 +94,11 @@ class GenericEnvelope { getDetails(index = 0) { return this.details[index]; } - getDetailsBufferLength() { + getDataBufferLengthAfterSig() { let length = 0; + if (this.hasRequestID()) { + length += vdxf_1.HASH160_BYTE_LENGTH; + } if (this.hasCreatedAt()) { length += varuint_1.default.encodingLength(this.createdAt.toNumber()); } @@ -104,8 +118,11 @@ class GenericEnvelope { } return length; } - getDetailsBuffer() { - const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getDetailsBufferLength())); + getDataBufferAfterSig() { + const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getDataBufferLengthAfterSig())); + if (this.hasRequestID()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + } if (this.hasCreatedAt()) { writer.writeCompactSize(this.createdAt.toNumber()); } @@ -130,7 +147,7 @@ class GenericEnvelope { if (this.isSigned() && includeSig) { length += this.signature.getByteLength(); } - length += this.getDetailsBufferLength(); + length += this.getDataBufferLengthAfterSig(); return length; } getByteLengthOptionalSig(includeSig) { @@ -146,7 +163,7 @@ class GenericEnvelope { if (this.isSigned() && includeSig) { writer.writeSlice(this.signature.toBuffer()); } - writer.writeSlice(this.getDetailsBuffer()); + writer.writeSlice(this.getDataBufferAfterSig()); return writer.buffer; } toBuffer() { @@ -163,6 +180,9 @@ class GenericEnvelope { reader.offset = _sig.fromBuffer(reader.buffer, reader.offset); this.signature = _sig; } + if (this.hasRequestID()) { + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + } if (this.hasCreatedAt()) { this.createdAt = new bn_js_1.BN(reader.readCompactSize()); } @@ -196,11 +216,12 @@ class GenericEnvelope { } } return { - signature: undefined, //TODO: Add signature toJson function this.isSigned() ? this.signature.toJson() : undefined, - details: details, version: this.version.toString(), flags: this.flags.toString(), - createdat: this.hasCreatedAt() ? this.createdAt.toString() : undefined + signature: this.isSigned() ? this.signature.toJson() : undefined, + requestid: this.requestID, + createdat: this.hasCreatedAt() ? this.createdAt.toString() : undefined, + details: details }; } } @@ -210,7 +231,8 @@ GenericEnvelope.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); GenericEnvelope.VERSION_LASTVALID = new bn_js_1.BN(1, 10); GenericEnvelope.BASE_FLAGS = new bn_js_1.BN(0, 10); GenericEnvelope.FLAG_SIGNED = new bn_js_1.BN(1, 10); -GenericEnvelope.FLAG_HAS_CREATED_AT = new bn_js_1.BN(2, 10); -GenericEnvelope.FLAG_MULTI_DETAILS = new bn_js_1.BN(4, 10); -GenericEnvelope.FLAG_IS_TESTNET = new bn_js_1.BN(8, 10); -GenericEnvelope.FLAG_HAS_SALT = new bn_js_1.BN(16, 10); +GenericEnvelope.FLAG_HAS_REQUEST_ID = new bn_js_1.BN(2, 10); +GenericEnvelope.FLAG_HAS_CREATED_AT = new bn_js_1.BN(4, 10); +GenericEnvelope.FLAG_MULTI_DETAILS = new bn_js_1.BN(8, 10); +GenericEnvelope.FLAG_IS_TESTNET = new bn_js_1.BN(16, 10); +GenericEnvelope.FLAG_HAS_SALT = new bn_js_1.BN(32, 10); diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js index 3a3b785e..98d3bbbc 100644 --- a/dist/vdxf/classes/request/GenericRequest.js +++ b/dist/vdxf/classes/request/GenericRequest.js @@ -132,5 +132,5 @@ GenericRequest.FLAG_HAS_CREATED_AT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_ GenericRequest.FLAG_MULTI_DETAILS = GenericEnvelope_1.GenericEnvelope.FLAG_MULTI_DETAILS; GenericRequest.FLAG_IS_TESTNET = GenericEnvelope_1.GenericEnvelope.FLAG_IS_TESTNET; GenericRequest.FLAG_HAS_SALT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_SALT; -GenericRequest.FLAG_HAS_RESPONSE_URIS = new bn_js_1.BN(32, 10); -GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS = new bn_js_1.BN(64, 10); +GenericRequest.FLAG_HAS_RESPONSE_URIS = new bn_js_1.BN(64, 10); +GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS = new bn_js_1.BN(128, 10); diff --git a/dist/vdxf/classes/response/GenericResponse.js b/dist/vdxf/classes/response/GenericResponse.js index e935907c..45fdb6f2 100644 --- a/dist/vdxf/classes/response/GenericResponse.js +++ b/dist/vdxf/classes/response/GenericResponse.js @@ -80,4 +80,4 @@ GenericResponse.FLAG_HAS_CREATED_AT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS GenericResponse.FLAG_MULTI_DETAILS = GenericEnvelope_1.GenericEnvelope.FLAG_MULTI_DETAILS; GenericResponse.FLAG_IS_TESTNET = GenericEnvelope_1.GenericEnvelope.FLAG_IS_TESTNET; GenericResponse.FLAG_HAS_SALT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_SALT; -GenericResponse.FLAG_HAS_REQUEST_HASH = new bn_js_1.BN(32, 10); +GenericResponse.FLAG_HAS_REQUEST_HASH = new bn_js_1.BN(64, 10); diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts index 7c672a9b..5f44b231 100644 --- a/src/__tests__/vdxf/genericrequest.test.ts +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -1,6 +1,6 @@ import { BN } from 'bn.js'; import base64url from 'base64url'; -import { DATA_TYPE_MMRDATA, DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256 } from '../../constants/pbaas'; +import { DATA_TYPE_MMRDATA, DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256, NULL_I_ADDR } from '../../constants/pbaas'; import { ContentMultiMap, GenericRequest, IDENTITY_VERSION_PBAAS, IdentityID, IdentityUpdateRequestDetails, KeyID, PartialIdentity, PartialMMRData, PartialSignData, PartialSignDataInitData, ResponseURI, SaplingPaymentAddress } from '../../'; import { VerifiableSignatureData, VerifiableSignatureDataInterface } from '../../vdxf/classes/VerifiableSignatureData'; import { CompactAddressObject } from '../../vdxf/classes/CompactAddressObject'; @@ -57,7 +57,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); }); - it('round trips with createdAt, signature, responseURI, and encryptResponseToAddress', () => { + it('round trips with createdAt, signature, responseURI, requestID, and encryptResponseToAddress', () => { const sig = new VerifiableSignatureData({ flags: new BN(0), version: new BN(1), @@ -82,6 +82,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { const req = new GenericRequest({ details: [detail], signature: sig, + requestID: NULL_I_ADDR, createdAt, encryptResponseToAddress: SaplingPaymentAddress.fromAddressString(saplingAddr), responseURIs: [ResponseURI.fromUriString("https://verus.io/callback", ResponseURI.TYPE_POST), ResponseURI.fromUriString("https://example.com/callback", ResponseURI.TYPE_REDIRECT)] @@ -99,6 +100,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { expect(round.responseURIs![0].type.toString()).toBe(ResponseURI.TYPE_POST.toString()) expect(round.responseURIs![1].getUriString()).toBe("https://example.com/callback") expect(round.responseURIs![1].type.toString()).toBe(ResponseURI.TYPE_REDIRECT.toString()) + expect(round.requestID).toBe(NULL_I_ADDR) expect(round.hasEncryptResponseToAddress()).toBe(true) expect(round.encryptResponseToAddress?.toAddressString()).toBe(saplingAddr) const d2 = round.getDetails(0); diff --git a/src/__tests__/vdxf/genericresponse.test.ts b/src/__tests__/vdxf/genericresponse.test.ts index 966556a9..31aee081 100644 --- a/src/__tests__/vdxf/genericresponse.test.ts +++ b/src/__tests__/vdxf/genericresponse.test.ts @@ -1,6 +1,6 @@ import { BN } from 'bn.js'; import base64url from 'base64url'; -import { DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256 } from '../../constants/pbaas'; +import { DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256, NULL_I_ADDR } from '../../constants/pbaas'; import { GenericResponse, IdentityID, IdentityUpdateResponseDetails } from '../../'; import { createHash } from 'crypto'; import { VerifiableSignatureData, VerifiableSignatureDataInterface } from '../../vdxf/classes/VerifiableSignatureData'; @@ -64,7 +64,7 @@ describe('GenericResponse — buffer / URI / QR operations', () => { expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); }); - it('round trips with createdAt, signature, and requestHash/requestHashType', () => { + it('round trips with createdAt, signature, requestID, and requestHash/requestHashType', () => { const sig = new VerifiableSignatureData({ flags: new BN(0), version: new BN(1), @@ -89,6 +89,7 @@ describe('GenericResponse — buffer / URI / QR operations', () => { const req = new GenericResponse({ details: [detail], + requestID: NULL_I_ADDR, signature: sig, createdAt, requestHash: requestHash, @@ -104,6 +105,7 @@ describe('GenericResponse — buffer / URI / QR operations', () => { expect(round.hasRequestHash()).toBe(true) expect(round.requestHash?.toString('hex')).toBe(requestHash.toString('hex')) expect(round.requestHashType?.toNumber()).toBe(requestHashType.toNumber()) + expect(round.requestID).toBe(NULL_I_ADDR) const d2 = round.getDetails(0); expect((d2 as GeneralTypeOrdinalVDXFObject).data).toEqual(detail.data); expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); diff --git a/src/vdxf/classes/envelope/GenericEnvelope.ts b/src/vdxf/classes/envelope/GenericEnvelope.ts index bb170f82..78137298 100644 --- a/src/vdxf/classes/envelope/GenericEnvelope.ts +++ b/src/vdxf/classes/envelope/GenericEnvelope.ts @@ -7,11 +7,14 @@ import varuint from "../../../utils/varuint"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import { createHash } from "crypto"; import { VerifiableSignatureData, VerifiableSignatureDataJson } from "../VerifiableSignatureData"; +import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from "../../../constants/vdxf"; +import { fromBase58Check, toBase58Check } from "../../../utils/address"; export interface GenericEnvelopeInterface { version?: BigNumber; flags?: BigNumber; signature?: VerifiableSignatureData; + requestID?: string; createdAt?: BigNumber; salt?: Buffer; details: Array; @@ -21,6 +24,7 @@ export type GenericEnvelopeJson = { version: string; flags?: string; signature?: VerifiableSignatureDataJson; + requestid?: string; createdat?: string; salt?: string; details: Array; @@ -30,6 +34,7 @@ export class GenericEnvelope implements SerializableEntity { version: BigNumber; flags: BigNumber; signature?: VerifiableSignatureData; + requestID?: string; createdAt?: BigNumber; salt?: Buffer; // var length buffer details: Array; @@ -40,10 +45,11 @@ export class GenericEnvelope implements SerializableEntity { static BASE_FLAGS = new BN(0, 10) static FLAG_SIGNED = new BN(1, 10) - static FLAG_HAS_CREATED_AT = new BN(2, 10) - static FLAG_MULTI_DETAILS = new BN(4, 10) - static FLAG_IS_TESTNET = new BN(8, 10) - static FLAG_HAS_SALT = new BN(16, 10) + static FLAG_HAS_REQUEST_ID = new BN(2, 10) + static FLAG_HAS_CREATED_AT = new BN(4, 10) + static FLAG_MULTI_DETAILS = new BN(8, 10) + static FLAG_IS_TESTNET = new BN(16, 10) + static FLAG_HAS_SALT = new BN(32, 10) constructor( envelope: GenericEnvelopeInterface = { @@ -51,15 +57,16 @@ export class GenericEnvelope implements SerializableEntity { flags: GenericEnvelope.BASE_FLAGS } ) { - this.signature = envelope.signature; - this.details = envelope.details; - this.createdAt = envelope.createdAt; - this.salt = envelope.salt; + this.signature = envelope?.signature; + this.requestID = envelope?.requestID; + this.details = envelope?.details; + this.createdAt = envelope?.createdAt; + this.salt = envelope?.salt; - if (envelope.flags) this.flags = envelope.flags; + if (envelope?.flags) this.flags = envelope.flags; else this.flags = GenericEnvelope.BASE_FLAGS; - if (envelope.version) this.version = envelope.version; + if (envelope?.version) this.version = envelope.version; else this.version = GenericEnvelope.VERSION_CURRENT; this.setFlags(); @@ -73,6 +80,10 @@ export class GenericEnvelope implements SerializableEntity { return !!(this.flags.and(GenericEnvelope.FLAG_SIGNED).toNumber()); } + hasRequestID() { + return !!(this.flags.and(GenericEnvelope.FLAG_HAS_REQUEST_ID).toNumber()); + } + hasMultiDetails() { return !!(this.flags.and(GenericEnvelope.FLAG_MULTI_DETAILS).toNumber()); } @@ -93,6 +104,10 @@ export class GenericEnvelope implements SerializableEntity { this.flags = this.flags.or(GenericEnvelope.FLAG_SIGNED); } + setHasRequestID() { + this.flags = this.flags.or(GenericEnvelope.FLAG_HAS_REQUEST_ID); + } + setHasMultiDetails() { this.flags = this.flags.or(GenericEnvelope.FLAG_MULTI_DETAILS); } @@ -110,10 +125,11 @@ export class GenericEnvelope implements SerializableEntity { } setFlags() { - if (this.createdAt) this.setHasCreatedAt(); - if (this.details && this.details.length > 1) this.setHasMultiDetails(); if (this.signature) this.setSigned(); + if (this.requestID) this.setHasRequestID(); + if (this.createdAt) this.setHasCreatedAt(); if (this.salt) this.setHasSalt(); + if (this.details && this.details.length > 1) this.setHasMultiDetails(); } getRawDataSha256(includeSig = false) { @@ -130,9 +146,13 @@ export class GenericEnvelope implements SerializableEntity { return this.details[index]; } - protected getDetailsBufferLength(): number { + protected getDataBufferLengthAfterSig(): number { let length = 0; + if (this.hasRequestID()) { + length += HASH160_BYTE_LENGTH; + } + if (this.hasCreatedAt()) { length += varuint.encodingLength(this.createdAt.toNumber()); } @@ -157,11 +177,15 @@ export class GenericEnvelope implements SerializableEntity { return length; } - protected getDetailsBuffer(): Buffer { + protected getDataBufferAfterSig(): Buffer { const writer = new bufferutils.BufferWriter( - Buffer.alloc(this.getDetailsBufferLength()) + Buffer.alloc(this.getDataBufferLengthAfterSig()) ); + if (this.hasRequestID()) { + writer.writeSlice(fromBase58Check(this.requestID).hash); + } + if (this.hasCreatedAt()) { writer.writeCompactSize(this.createdAt.toNumber()); } @@ -193,7 +217,7 @@ export class GenericEnvelope implements SerializableEntity { length += this.signature!.getByteLength(); } - length += this.getDetailsBufferLength(); + length += this.getDataBufferLengthAfterSig(); return length; } @@ -218,7 +242,7 @@ export class GenericEnvelope implements SerializableEntity { writer.writeSlice(this.signature!.toBuffer()); } - writer.writeSlice(this.getDetailsBuffer()); + writer.writeSlice(this.getDataBufferAfterSig()); return writer.buffer; } @@ -241,6 +265,10 @@ export class GenericEnvelope implements SerializableEntity { this.signature = _sig; } + if (this.hasRequestID()) { + this.requestID = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); + } + if (this.hasCreatedAt()) { this.createdAt = new BN(reader.readCompactSize()); } @@ -284,11 +312,12 @@ export class GenericEnvelope implements SerializableEntity { } return { - signature: undefined, //TODO: Add signature toJson function this.isSigned() ? this.signature.toJson() : undefined, - details: details, version: this.version.toString(), flags: this.flags.toString(), - createdat: this.hasCreatedAt() ? this.createdAt.toString() : undefined + signature: this.isSigned() ? this.signature.toJson() : undefined, + requestid: this.requestID, + createdat: this.hasCreatedAt() ? this.createdAt.toString() : undefined, + details: details }; } } \ No newline at end of file diff --git a/src/vdxf/classes/request/GenericRequest.ts b/src/vdxf/classes/request/GenericRequest.ts index 81a5d2df..9f7974c4 100644 --- a/src/vdxf/classes/request/GenericRequest.ts +++ b/src/vdxf/classes/request/GenericRequest.ts @@ -32,8 +32,8 @@ export class GenericRequest extends GenericEnvelope implements SerializableEntit static FLAG_MULTI_DETAILS = GenericEnvelope.FLAG_MULTI_DETAILS; static FLAG_IS_TESTNET = GenericEnvelope.FLAG_IS_TESTNET; static FLAG_HAS_SALT = GenericEnvelope.FLAG_HAS_SALT; - static FLAG_HAS_RESPONSE_URIS = new BN(32, 10); - static FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS = new BN(64, 10); + static FLAG_HAS_RESPONSE_URIS = new BN(64, 10); + static FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS = new BN(128, 10); constructor( envelope: GenericRequestInterface = { diff --git a/src/vdxf/classes/response/GenericResponse.ts b/src/vdxf/classes/response/GenericResponse.ts index 56e97e4c..d7145565 100644 --- a/src/vdxf/classes/response/GenericResponse.ts +++ b/src/vdxf/classes/response/GenericResponse.ts @@ -33,7 +33,7 @@ export class GenericResponse extends GenericEnvelope implements SerializableEnti static FLAG_MULTI_DETAILS = GenericEnvelope.FLAG_MULTI_DETAILS; static FLAG_IS_TESTNET = GenericEnvelope.FLAG_IS_TESTNET; static FLAG_HAS_SALT = GenericEnvelope.FLAG_HAS_SALT; - static FLAG_HAS_REQUEST_HASH = new BN(32, 10); + static FLAG_HAS_REQUEST_HASH = new BN(64, 10); constructor( envelope: GenericResponseInterface = { From b8dab715ffc4dad545e7a1e3f975924b1c865b67 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Tue, 2 Dec 2025 17:12:57 +0100 Subject: [PATCH 096/123] Export everything from VerifiableSignatureData --- dist/vdxf/classes/index.d.ts | 2 +- dist/vdxf/classes/index.js | 5 ++--- src/vdxf/classes/index.ts | 5 +---- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/dist/vdxf/classes/index.d.ts b/dist/vdxf/classes/index.d.ts index 6a9b4d46..242fd730 100644 --- a/dist/vdxf/classes/index.d.ts +++ b/dist/vdxf/classes/index.d.ts @@ -39,4 +39,4 @@ export * from './requestobjects/ProvisionIdentityDetails'; export * from './requestobjects/AppEncryptionRequestDetails'; export * from './requestobjects/UserSpecificDataPacketDetails'; export * from './CompactAddressObject'; -export { VerifiableSignatureData, VerifiableSignatureDataJson } from './VerifiableSignatureData'; +export * from './VerifiableSignatureData'; diff --git a/dist/vdxf/classes/index.js b/dist/vdxf/classes/index.js index 2e604773..ccc713f0 100644 --- a/dist/vdxf/classes/index.js +++ b/dist/vdxf/classes/index.js @@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.VerifiableSignatureData = exports.DataCategory = exports.Context = exports.ProvisioningTxid = exports.Attestation = exports.AltAuthFactor = exports.Audience = exports.RequestedPermission = exports.ProvisioningInfo = exports.Subject = exports.RedirectUri = exports.Hash160 = exports.LoginConsentProvisioningResult = exports.LoginConsentProvisioningDecision = exports.LoginConsentProvisioningResponse = exports.LoginConsentProvisioningChallenge = exports.LoginConsentProvisioningRequest = exports.VerusPayInvoice = exports.VerusPayInvoiceDetails = exports.SignedSessionObjectData = exports.SignedSessionObject = exports.LoginConsentResponse = exports.LoginConsentRequest = exports.LoginConsentDecision = exports.LoginConsentChallenge = void 0; +exports.DataCategory = exports.Context = exports.ProvisioningTxid = exports.Attestation = exports.AltAuthFactor = exports.Audience = exports.RequestedPermission = exports.ProvisioningInfo = exports.Subject = exports.RedirectUri = exports.Hash160 = exports.LoginConsentProvisioningResult = exports.LoginConsentProvisioningDecision = exports.LoginConsentProvisioningResponse = exports.LoginConsentProvisioningChallenge = exports.LoginConsentProvisioningRequest = exports.VerusPayInvoice = exports.VerusPayInvoiceDetails = exports.SignedSessionObjectData = exports.SignedSessionObject = exports.LoginConsentResponse = exports.LoginConsentRequest = exports.LoginConsentDecision = exports.LoginConsentChallenge = void 0; var Challenge_1 = require("./Challenge"); Object.defineProperty(exports, "LoginConsentChallenge", { enumerable: true, get: function () { return Challenge_1.Challenge; } }); var Decision_1 = require("./Decision"); @@ -71,5 +71,4 @@ __exportStar(require("./requestobjects/ProvisionIdentityDetails"), exports); __exportStar(require("./requestobjects/AppEncryptionRequestDetails"), exports); __exportStar(require("./requestobjects/UserSpecificDataPacketDetails"), exports); __exportStar(require("./CompactAddressObject"), exports); -var VerifiableSignatureData_1 = require("./VerifiableSignatureData"); -Object.defineProperty(exports, "VerifiableSignatureData", { enumerable: true, get: function () { return VerifiableSignatureData_1.VerifiableSignatureData; } }); +__exportStar(require("./VerifiableSignatureData"), exports); diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index 6635689a..0d763520 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -55,7 +55,4 @@ export * from './requestobjects/ProvisionIdentityDetails' export * from './requestobjects/AppEncryptionRequestDetails' export * from './requestobjects/UserSpecificDataPacketDetails' export * from './CompactAddressObject' -export { - VerifiableSignatureData, - VerifiableSignatureDataJson -} from './VerifiableSignatureData' \ No newline at end of file +export * from './VerifiableSignatureData' \ No newline at end of file From d63d07e8eceaa404194c06e1ed81d96ab40176a0 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Mon, 8 Dec 2025 17:19:21 +0100 Subject: [PATCH 097/123] Export deeplink constants --- dist/index.d.ts | 1 + dist/index.js | 1 + src/index.ts | 1 + 3 files changed, 3 insertions(+) diff --git a/dist/index.d.ts b/dist/index.d.ts index beeabf1d..37ce6548 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -21,6 +21,7 @@ export * from './constants/ordinals/register'; export * from './constants/ordinals/ordinals'; export * from './constants/ordinals/types'; export * from './constants/vdxf/veruspay'; +export * from './constants/deeplink'; export * from './identity/IdentityDefinition'; export * from './currency/CurrencyDefinition'; export * from './vdxf/classes'; diff --git a/dist/index.js b/dist/index.js index a5b55c80..99c89f52 100644 --- a/dist/index.js +++ b/dist/index.js @@ -38,6 +38,7 @@ __exportStar(require("./constants/ordinals/register"), exports); __exportStar(require("./constants/ordinals/ordinals"), exports); __exportStar(require("./constants/ordinals/types"), exports); __exportStar(require("./constants/vdxf/veruspay"), exports); +__exportStar(require("./constants/deeplink"), exports); __exportStar(require("./identity/IdentityDefinition"), exports); __exportStar(require("./currency/CurrencyDefinition"), exports); __exportStar(require("./vdxf/classes"), exports); diff --git a/src/index.ts b/src/index.ts index fab03f47..a0fb89b5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -25,6 +25,7 @@ export * from './constants/ordinals/register' export * from './constants/ordinals/ordinals' export * from './constants/ordinals/types' export * from './constants/vdxf/veruspay' +export * from './constants/deeplink' export * from './identity/IdentityDefinition' export * from './currency/CurrencyDefinition' From 25ed24b9988088ef210409e664dd1ee2cbeb647d Mon Sep 17 00:00:00 2001 From: michaeltout Date: Tue, 9 Dec 2025 13:51:54 +0100 Subject: [PATCH 098/123] Add test for GenericRequest with invoice --- src/__tests__/vdxf/genericrequest.test.ts | 57 ++++++++++++++++++++++- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts index 5f44b231..7626861b 100644 --- a/src/__tests__/vdxf/genericrequest.test.ts +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -1,10 +1,10 @@ import { BN } from 'bn.js'; import base64url from 'base64url'; import { DATA_TYPE_MMRDATA, DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256, NULL_I_ADDR } from '../../constants/pbaas'; -import { ContentMultiMap, GenericRequest, IDENTITY_VERSION_PBAAS, IdentityID, IdentityUpdateRequestDetails, KeyID, PartialIdentity, PartialMMRData, PartialSignData, PartialSignDataInitData, ResponseURI, SaplingPaymentAddress } from '../../'; +import { ContentMultiMap, DEST_PKH, fromBase58Check, GenericRequest, IDENTITY_VERSION_PBAAS, IdentityID, IdentityUpdateRequestDetails, KeyID, PartialIdentity, PartialMMRData, PartialSignData, PartialSignDataInitData, ResponseURI, SaplingPaymentAddress, TransferDestination, VerusPayInvoiceDetails } from '../../'; import { VerifiableSignatureData, VerifiableSignatureDataInterface } from '../../vdxf/classes/VerifiableSignatureData'; import { CompactAddressObject } from '../../vdxf/classes/CompactAddressObject'; -import { GeneralTypeOrdinalVDXFObject, IdentityUpdateRequestOrdinalVDXFObject } from '../../vdxf/classes/ordinals'; +import { GeneralTypeOrdinalVDXFObject, IdentityUpdateRequestOrdinalVDXFObject, VerusPayInvoiceOrdinalVDXFObject } from '../../vdxf/classes/ordinals'; import { DEEPLINK_PROTOCOL_URL_CURRENT_VERSION, DEEPLINK_PROTOCOL_URL_STRING } from '../../constants/deeplink'; describe('GenericRequest — buffer / URI / QR operations', () => { @@ -146,6 +146,59 @@ describe('GenericRequest — buffer / URI / QR operations', () => { expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); }); + it('round trips with createdAt, signature that can be hashed, and invoice', () => { + const sig = new VerifiableSignatureData({ + systemID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + identityID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + signatureAsVch: Buffer.from('AgX3RgAAAUEgHAVIHuui1Sc9oLxLbglKvmrv47JJLiM0/RBQwzYL1dlamI/2o9qBc93d79laLXWMhQomqZ4U3Mlr3ueuwl4JFA==', 'base64'), + }); + + const details = new VerusPayInvoiceDetails({ + amount: new BN(10000000000, 10), + destination: new TransferDestination({ + type: DEST_PKH, + destination_bytes: fromBase58Check("R9J8E2no2HVjQmzX6Ntes2ShSGcn7WiRcx").hash + }), + requestedcurrencyid: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", + maxestimatedslippage: new BN(40000000, 10), + expiryheight: new BN(2000000, 10), + acceptedsystems: ["iNC9NG5Jqk2tqVtqfjfiSpaqxrXaFU6RDu", "iBDkVJqik6BrtcDBQfFygffiYzTMy6EuhU"] + }) + + details.setFlags({ + acceptsConversion: true, + expires: true, + acceptsNonVerusSystems: true + }) + + const createdAt = new BN(9999); + const saplingAddr = "zs1wczplx4kegw32h8g0f7xwl57p5tvnprwdmnzmdnsw50chcl26f7tws92wk2ap03ykaq6jyyztfa" + + const req = new GenericRequest({ + details: [new VerusPayInvoiceOrdinalVDXFObject({ + data: details, + })], + signature: sig, + createdAt, + encryptResponseToAddress: SaplingPaymentAddress.fromAddressString(saplingAddr) + }); + + expect(req.isSigned()).toBe(true); + expect(req.hasCreatedAt()).toBe(true); + expect(req.getDetailsIdentitySignatureHash(1000)).toBeDefined(); + expect(req.signature?.signatureVersion.toString()).toBe("2"); + + const round = roundTripBuffer(req); + expect(round.signature).toBeDefined(); + expect(round.signature?.signatureAsVch.toString('base64')).toBe(sig.signatureAsVch.toString('base64')) + expect(round.createdAt?.toString()).toEqual(createdAt.toString()); + expect(round.hasEncryptResponseToAddress()).toBe(true) + expect(round.encryptResponseToAddress?.toAddressString()).toBe(saplingAddr) + const d2 = round.getDetails(0); + expect((d2 as VerusPayInvoiceOrdinalVDXFObject).data).toEqual(details); + expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); + }); + it('same hash before/after signature', () => { const contentmap = new Map(); contentmap.set("iPsFBfFoCcxtuZNzE8yxPQhXVn4dmytf8j", Buffer.alloc(32)); From dd20971144b9c1d71f6ca91777b3a1eaa4e0f544 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Wed, 10 Dec 2025 11:15:25 +0100 Subject: [PATCH 099/123] Move appOrDelegatedID into GenericEnvelope + typo fixes --- .../AppEncryptionRequestDetails.d.ts | 70 ++++++++ .../AppEncryptionRequestDetails.js | 159 ++++++++++++++++++ .../AppEncryptionResponseDetails.d.ts | 45 +++++ .../AppEncryptionResponseDetails.js | 119 +++++++++++++ .../classes/envelope/GenericEnvelope.d.ts | 7 + dist/vdxf/classes/envelope/GenericEnvelope.js | 23 +++ dist/vdxf/classes/index.d.ts | 4 +- dist/vdxf/classes/index.js | 4 +- ...AppEncryptionRequestOrdinalVDXFObject.d.ts | 2 +- .../AppEncryptionRequestOrdinalVDXFObject.js | 2 +- ...ppEncryptionResponseOrdinalVDXFObject.d.ts | 2 +- .../AppEncryptionResponseOrdinalVDXFObject.js | 2 +- dist/vdxf/classes/request/GenericRequest.d.ts | 1 + dist/vdxf/classes/request/GenericRequest.js | 5 +- .../AppEncryptionRequestDetails.d.ts | 3 - .../AppEncryptionRequestDetails.js | 13 +- .../AppEncryptionResponseDetails.d.ts | 4 +- .../response/AppEncryptionResponseDetails.js | 12 +- .../classes/response/GenericResponse.d.ts | 1 + dist/vdxf/classes/response/GenericResponse.js | 3 +- .../vdxf/appencryptionrequestdetails.test.ts | 5 - .../vdxf/appencryptionresponsedetails.test.ts | 34 ++-- src/__tests__/vdxf/genericrequest.test.ts | 4 +- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 7 +- .../AppEncryptionRequestDetails.ts | 20 +-- .../AppEncryptionResponseDetails.ts | 16 +- src/vdxf/classes/envelope/GenericEnvelope.ts | 31 ++++ src/vdxf/classes/index.ts | 4 +- .../AppEncryptionRequestOrdinalVDXFObject.ts | 2 +- .../AppEncryptionResponseOrdinalVDXFObject.ts | 2 +- src/vdxf/classes/request/GenericRequest.ts | 6 +- src/vdxf/classes/response/GenericResponse.ts | 6 +- 32 files changed, 519 insertions(+), 99 deletions(-) create mode 100644 dist/vdxf/classes/appencryption/AppEncryptionRequestDetails.d.ts create mode 100644 dist/vdxf/classes/appencryption/AppEncryptionRequestDetails.js create mode 100644 dist/vdxf/classes/appencryption/AppEncryptionResponseDetails.d.ts create mode 100644 dist/vdxf/classes/appencryption/AppEncryptionResponseDetails.js rename src/vdxf/classes/{requestobjects => appencryption}/AppEncryptionRequestDetails.ts (89%) rename src/vdxf/classes/{response => appencryption}/AppEncryptionResponseDetails.ts (93%) diff --git a/dist/vdxf/classes/appencryption/AppEncryptionRequestDetails.d.ts b/dist/vdxf/classes/appencryption/AppEncryptionRequestDetails.d.ts new file mode 100644 index 00000000..757b8af4 --- /dev/null +++ b/dist/vdxf/classes/appencryption/AppEncryptionRequestDetails.d.ts @@ -0,0 +1,70 @@ +/** + * AppEncryptionRequestDetails - Class for handling application requests for encrypted derived seeds + * + * This class is used when an application is requesting an encrypted derived seed from the user's master seed, + * using specific parameters passed by the application. The request includes: + * - App or delegated ID making the request (mandatory) + * - A target encryption key (zaddress format) for encrypting the reply + * - Derivation number for seed generation + * - Optional derivation ID (defaults to Z-address from ID signing if not present) + * - Optional request ID for tracking + * + * The user's wallet can use these parameters to derive a specific seed from their master seed + * and encrypt it using the provided encryption key, ensuring the application receives only + * the specific derived seed it needs without exposing the master seed. + * + * The RETURN_ESK flag can be set to signal that the Extended Spending Key should be returned. + */ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { CompactAddressObject, CompactAddressObjectJson } from '../CompactAddressObject'; +export interface AppEncryptionRequestInterface { + version?: BigNumber; + flags: BigNumber; + encryptToZAddress: string; + derivationNumber: BigNumber; + derivationID?: CompactAddressObject; + requestID?: string; +} +export interface AppEncryptionRequestJson { + version: number; + flags: number; + encrypttozaddress: string; + derivationnumber: number; + derivationid?: CompactAddressObjectJson; + requestid?: string; +} +/** + * Checks if a string is a valid hexadecimal address + * @param flags - Optional flags for the request + * @flag HAS_REQUEST_ID - Indicates if a request ID is included + * + * @param encryptToZAddress - The encryption key to use for encrypting to + * @param derivationNumber - The derivation number to validate + */ +export declare class AppEncryptionRequestDetails implements SerializableEntity { + static VERSION_INVALID: import("bn.js"); + static FIRST_VERSION: import("bn.js"); + static LAST_VERSION: import("bn.js"); + static DEFAULT_VERSION: import("bn.js"); + static HAS_DERIVATION_ID: import("bn.js"); + static HAS_REQUEST_ID: import("bn.js"); + static RETURN_ESK: import("bn.js"); + version: BigNumber; + flags: BigNumber; + encryptToZAddress: string; + derivationNumber: BigNumber; + derivationID?: CompactAddressObject; + requestID?: string; + constructor(data?: AppEncryptionRequestInterface); + setFlags(): void; + calcFlags(): BigNumber; + isValid(): boolean; + hasDerivationID(flags?: BigNumber): boolean; + hasRequestID(flags?: BigNumber): boolean; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): AppEncryptionRequestJson; + static fromJson(json: AppEncryptionRequestJson): AppEncryptionRequestDetails; +} diff --git a/dist/vdxf/classes/appencryption/AppEncryptionRequestDetails.js b/dist/vdxf/classes/appencryption/AppEncryptionRequestDetails.js new file mode 100644 index 00000000..606652b8 --- /dev/null +++ b/dist/vdxf/classes/appencryption/AppEncryptionRequestDetails.js @@ -0,0 +1,159 @@ +"use strict"; +/** + * AppEncryptionRequestDetails - Class for handling application requests for encrypted derived seeds + * + * This class is used when an application is requesting an encrypted derived seed from the user's master seed, + * using specific parameters passed by the application. The request includes: + * - App or delegated ID making the request (mandatory) + * - A target encryption key (zaddress format) for encrypting the reply + * - Derivation number for seed generation + * - Optional derivation ID (defaults to Z-address from ID signing if not present) + * - Optional request ID for tracking + * + * The user's wallet can use these parameters to derive a specific seed from their master seed + * and encrypt it using the provided encryption key, ensuring the application receives only + * the specific derived seed it needs without exposing the master seed. + * + * The RETURN_ESK flag can be set to signal that the Extended Spending Key should be returned. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AppEncryptionRequestDetails = void 0; +const bn_js_1 = require("bn.js"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const sapling_1 = require("../../../utils/sapling"); +const CompactAddressObject_1 = require("../CompactAddressObject"); +const varuint_1 = require("../../../utils/varuint"); +const address_1 = require("../../../utils/address"); +const vdxf_1 = require("../../../constants/vdxf"); +/** + * Checks if a string is a valid hexadecimal address + * @param flags - Optional flags for the request + * @flag HAS_REQUEST_ID - Indicates if a request ID is included + * + * @param encryptToZAddress - The encryption key to use for encrypting to + * @param derivationNumber - The derivation number to validate + */ +class AppEncryptionRequestDetails { + constructor(data) { + this.version = (data === null || data === void 0 ? void 0 : data.version) || AppEncryptionRequestDetails.DEFAULT_VERSION; + this.flags = (data === null || data === void 0 ? void 0 : data.flags) || new bn_js_1.BN(0); + this.encryptToZAddress = (data === null || data === void 0 ? void 0 : data.encryptToZAddress) || ''; + this.derivationNumber = (data === null || data === void 0 ? void 0 : data.derivationNumber) || new bn_js_1.BN(0); + this.derivationID = data === null || data === void 0 ? void 0 : data.derivationID; + this.requestID = data === null || data === void 0 ? void 0 : data.requestID; + this.setFlags(); + } + setFlags() { + this.flags = this.calcFlags(); + } + calcFlags() { + let flags = new bn_js_1.BN(0); + if (this.derivationID != null) { + flags = flags.or(AppEncryptionRequestDetails.HAS_DERIVATION_ID); + } + if (this.requestID != null) { + flags = flags.or(AppEncryptionRequestDetails.HAS_REQUEST_ID); + } + return flags; + } + isValid() { + let valid = true; + valid && (valid = this.encryptToZAddress != null && this.encryptToZAddress.length > 0); + valid && (valid = this.derivationNumber != null && this.derivationNumber.gte(new bn_js_1.BN(0))); + return valid; + } + hasDerivationID(flags = this.flags) { + return flags.and(AppEncryptionRequestDetails.HAS_DERIVATION_ID).gt(new bn_js_1.BN(0)); + } + hasRequestID(flags = this.flags) { + return flags.and(AppEncryptionRequestDetails.HAS_REQUEST_ID).gt(new bn_js_1.BN(0)); + } + getByteLength() { + const flags = this.calcFlags(); + let length = 0; + length += varuint_1.default.encodingLength(flags.toNumber()); + // encryptToKey - zaddress encoding (43 bytes for sapling address data) + length += 43; // Sapling address decoded data (11 + 32 bytes) + length += varuint_1.default.encodingLength(this.derivationNumber.toNumber()); + if (this.hasDerivationID(flags)) { + length += this.derivationID.getByteLength(); + } + if (this.hasRequestID(flags)) { + length += vdxf_1.HASH160_BYTE_LENGTH; + } + return length; + } + toBuffer() { + const flags = this.calcFlags(); + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + // Write flags + writer.writeCompactSize(flags.toNumber()); + // Write encryptToAddress as decoded sapling address data + const saplingData = (0, sapling_1.decodeSaplingAddress)(this.encryptToZAddress); + writer.writeSlice(Buffer.concat([saplingData.d, saplingData.pk_d])); + // Write mandatory derivation number + writer.writeVarInt(this.derivationNumber); + if (this.hasDerivationID(flags)) { + writer.writeSlice(this.derivationID.toBuffer()); + } + if (this.hasRequestID(flags)) { + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + } + return writer.buffer; + } + fromBuffer(buffer, offset) { + const reader = new BufferReader(buffer, offset); + // Read flags + this.flags = new bn_js_1.BN(reader.readCompactSize()); + // Read encryptToAddress as 43-byte sapling data and encode as sapling address + const saplingData = reader.readSlice(43); + this.encryptToZAddress = (0, sapling_1.toBech32)('zs', saplingData); + // Read mandatory derivation number + this.derivationNumber = reader.readVarInt(); + if (this.hasDerivationID()) { + const derivationIDObj = new CompactAddressObject_1.CompactAddressObject(); + reader.offset = derivationIDObj.fromBuffer(reader.buffer, reader.offset); + this.derivationID = derivationIDObj; + } + if (this.hasRequestID()) { + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + } + return reader.offset; + } + toJson() { + var _a; + // Set flags before serialization + const flags = this.calcFlags(); + return { + version: this.version.toNumber(), + flags: flags.toNumber(), + encrypttozaddress: this.encryptToZAddress, + derivationnumber: this.derivationNumber.toNumber(), + derivationid: (_a = this.derivationID) === null || _a === void 0 ? void 0 : _a.toJson(), + requestid: this.requestID + }; + } + static fromJson(json) { + const instance = new AppEncryptionRequestDetails(); + instance.version = new bn_js_1.BN(json.version); + instance.flags = new bn_js_1.BN(json.flags); + instance.encryptToZAddress = json.encrypttozaddress; + instance.derivationNumber = new bn_js_1.BN(json.derivationnumber); + if (instance.hasDerivationID()) { + instance.derivationID = CompactAddressObject_1.CompactAddressObject.fromJson(json === null || json === void 0 ? void 0 : json.derivationid); + } + if (instance.hasRequestID()) { + instance.requestID = json === null || json === void 0 ? void 0 : json.requestid; + } + return instance; + } +} +exports.AppEncryptionRequestDetails = AppEncryptionRequestDetails; +AppEncryptionRequestDetails.VERSION_INVALID = new bn_js_1.BN(0); +AppEncryptionRequestDetails.FIRST_VERSION = new bn_js_1.BN(1); +AppEncryptionRequestDetails.LAST_VERSION = new bn_js_1.BN(1); +AppEncryptionRequestDetails.DEFAULT_VERSION = new bn_js_1.BN(1); +AppEncryptionRequestDetails.HAS_DERIVATION_ID = new bn_js_1.BN(1); +AppEncryptionRequestDetails.HAS_REQUEST_ID = new bn_js_1.BN(2); +AppEncryptionRequestDetails.RETURN_ESK = new bn_js_1.BN(4); //flag to signal to return the Extended Spending Key diff --git a/dist/vdxf/classes/appencryption/AppEncryptionResponseDetails.d.ts b/dist/vdxf/classes/appencryption/AppEncryptionResponseDetails.d.ts new file mode 100644 index 00000000..b9ba93c6 --- /dev/null +++ b/dist/vdxf/classes/appencryption/AppEncryptionResponseDetails.d.ts @@ -0,0 +1,45 @@ +import { BigNumber } from '../../../utils/types/BigNumber'; +import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { SaplingPaymentAddress } from '../../../pbaas'; +import { SaplingExtendedSpendingKey } from '../../../pbaas/SaplingExtendedSpendingKey'; +import { SaplingExtendedViewingKey } from '../../../pbaas/SaplingExtendedViewingKey'; +export interface AppEncryptionResponseDetailsInterface { + version: BigNumber; + flags?: BigNumber; + requestID?: string; + incomingViewingKey: Buffer; + extendedViewingKey: SaplingExtendedViewingKey; + address: SaplingPaymentAddress; + extendedSpendingKey?: SaplingExtendedSpendingKey; +} +export interface AppEncryptionResponseDetailsJson { + version: number; + flags?: number; + requestid?: string; + incomingviewingkey: string; + extendedviewingkey: string; + address: string; + extendedspendingkey?: string; +} +export declare class AppEncryptionResponseDetails implements SerializableEntity { + version: BigNumber; + flags: BigNumber; + requestID?: string; + incomingViewingKey: Buffer; + extendedViewingKey: SaplingExtendedViewingKey; + address: SaplingPaymentAddress; + extendedSpendingKey?: SaplingExtendedSpendingKey; + static RESPONSE_CONTAINS_REQUEST_ID: import("bn.js"); + static RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY: import("bn.js"); + constructor(data?: AppEncryptionResponseDetailsInterface); + containsRequestID(): boolean; + toggleContainsRequestID(): void; + containsExtendedSpendingKey(): boolean; + toggleContainsExtendedSpendingKey(): void; + toSha256(): Buffer; + getByteLength(): number; + toBuffer(): Buffer; + fromBuffer(buffer: Buffer, offset?: number): number; + toJson(): AppEncryptionResponseDetailsJson; + static fromJson(json: AppEncryptionResponseDetailsJson): AppEncryptionResponseDetails; +} diff --git a/dist/vdxf/classes/appencryption/AppEncryptionResponseDetails.js b/dist/vdxf/classes/appencryption/AppEncryptionResponseDetails.js new file mode 100644 index 00000000..9e1f08ed --- /dev/null +++ b/dist/vdxf/classes/appencryption/AppEncryptionResponseDetails.js @@ -0,0 +1,119 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AppEncryptionResponseDetails = void 0; +const bn_js_1 = require("bn.js"); +const varint_1 = require("../../../utils/varint"); +const bufferutils_1 = require("../../../utils/bufferutils"); +const { BufferReader, BufferWriter } = bufferutils_1.default; +const address_1 = require("../../../utils/address"); +const vdxf_1 = require("../../../constants/vdxf"); +const pbaas_1 = require("../../../pbaas"); +const createHash = require("create-hash"); +const SaplingExtendedSpendingKey_1 = require("../../../pbaas/SaplingExtendedSpendingKey"); +const SaplingExtendedViewingKey_1 = require("../../../pbaas/SaplingExtendedViewingKey"); +class AppEncryptionResponseDetails { + constructor(data) { + var _a, _b, _c, _d, _e; + this.version = (_a = data === null || data === void 0 ? void 0 : data.version) !== null && _a !== void 0 ? _a : new bn_js_1.BN(1); + this.flags = (_b = data === null || data === void 0 ? void 0 : data.flags) !== null && _b !== void 0 ? _b : new bn_js_1.BN(0, 10); + this.incomingViewingKey = (_c = data === null || data === void 0 ? void 0 : data.incomingViewingKey) !== null && _c !== void 0 ? _c : Buffer.alloc(32); + this.extendedViewingKey = (_d = data === null || data === void 0 ? void 0 : data.extendedViewingKey) !== null && _d !== void 0 ? _d : new SaplingExtendedViewingKey_1.SaplingExtendedViewingKey(); + this.address = (_e = data === null || data === void 0 ? void 0 : data.address) !== null && _e !== void 0 ? _e : new pbaas_1.SaplingPaymentAddress(); + if (data === null || data === void 0 ? void 0 : data.requestID) { + if (!this.containsRequestID()) + this.toggleContainsRequestID(); + this.requestID = data.requestID; + } + if (data === null || data === void 0 ? void 0 : data.extendedSpendingKey) { + if (!this.containsExtendedSpendingKey()) + this.toggleContainsExtendedSpendingKey(); + this.extendedSpendingKey = data.extendedSpendingKey; + } + } + containsRequestID() { + return !!(this.flags.and(AppEncryptionResponseDetails.RESPONSE_CONTAINS_REQUEST_ID).toNumber()); + } + toggleContainsRequestID() { + this.flags = this.flags.xor(AppEncryptionResponseDetails.RESPONSE_CONTAINS_REQUEST_ID); + } + containsExtendedSpendingKey() { + return !!(this.flags.and(AppEncryptionResponseDetails.RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY).toNumber()); + } + toggleContainsExtendedSpendingKey() { + this.flags = this.flags.xor(AppEncryptionResponseDetails.RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY); + } + toSha256() { + return createHash("sha256").update(this.toBuffer()).digest(); + } + getByteLength() { + let length = 0; + length += varint_1.default.encodingLength(this.flags); + if (this.containsRequestID()) { + length += vdxf_1.HASH160_BYTE_LENGTH; + } + length += 32; // incomingViewingKey + length += this.extendedViewingKey.getByteLength(); + length += this.address.getByteLength(); + if (this.containsExtendedSpendingKey()) { + length += this.extendedSpendingKey.getByteLength(); + } + return length; + } + toBuffer() { + const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); + writer.writeVarInt(this.flags); + if (this.containsRequestID()) { + writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + } + writer.writeSlice(this.incomingViewingKey); + writer.writeSlice(this.extendedViewingKey.toBuffer()); + writer.writeSlice(this.address.toBuffer()); + if (this.containsExtendedSpendingKey()) { + writer.writeSlice(this.extendedSpendingKey.toBuffer()); + } + return writer.buffer; + } + fromBuffer(buffer, offset = 0) { + const reader = new BufferReader(buffer, offset); + this.flags = reader.readVarInt(); + if (this.containsRequestID()) { + this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + } + this.incomingViewingKey = reader.readSlice(32); + this.extendedViewingKey = new SaplingExtendedViewingKey_1.SaplingExtendedViewingKey(); + reader.offset = this.extendedViewingKey.fromBuffer(reader.buffer, reader.offset); + this.address = new pbaas_1.SaplingPaymentAddress(); + reader.offset = this.address.fromBuffer(reader.buffer, reader.offset); + if (this.containsExtendedSpendingKey()) { + this.extendedSpendingKey = new SaplingExtendedSpendingKey_1.SaplingExtendedSpendingKey(); + reader.offset = this.extendedSpendingKey.fromBuffer(reader.buffer, reader.offset); + } + return reader.offset; + } + toJson() { + return { + version: this.version.toNumber(), + flags: this.flags.toNumber(), + requestid: this.containsRequestID() ? this.requestID : undefined, + incomingviewingkey: this.incomingViewingKey.toString('hex'), + extendedviewingkey: this.extendedViewingKey.toKeyString(), + address: this.address.toAddressString(), + extendedspendingkey: this.containsExtendedSpendingKey() ? this.extendedSpendingKey.toKeyString() : undefined + }; + } + static fromJson(json) { + var _a; + return new AppEncryptionResponseDetails({ + version: new bn_js_1.BN(json.version, 10), + flags: new bn_js_1.BN((_a = json.flags) !== null && _a !== void 0 ? _a : 0, 10), + requestID: json.requestid, + incomingViewingKey: Buffer.from(json.incomingviewingkey, 'hex'), + extendedViewingKey: SaplingExtendedViewingKey_1.SaplingExtendedViewingKey.fromKeyString(json.extendedviewingkey), + address: pbaas_1.SaplingPaymentAddress.fromAddressString(json.address), + extendedSpendingKey: json.extendedspendingkey ? SaplingExtendedSpendingKey_1.SaplingExtendedSpendingKey.fromKeyString(json.extendedspendingkey) : undefined + }); + } +} +exports.AppEncryptionResponseDetails = AppEncryptionResponseDetails; +AppEncryptionResponseDetails.RESPONSE_CONTAINS_REQUEST_ID = new bn_js_1.BN(1, 10); +AppEncryptionResponseDetails.RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY = new bn_js_1.BN(2, 10); diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts index 63c1527d..ea443dab 100644 --- a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts +++ b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts @@ -2,6 +2,7 @@ import { BigNumber } from "../../../utils/types/BigNumber"; import { OrdinalVDXFObject, OrdinalVDXFObjectJson } from "../ordinals/OrdinalVDXFObject"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import { VerifiableSignatureData, VerifiableSignatureDataJson } from "../VerifiableSignatureData"; +import { CompactAddressObject } from "../CompactAddressObject"; export interface GenericEnvelopeInterface { version?: BigNumber; flags?: BigNumber; @@ -9,6 +10,7 @@ export interface GenericEnvelopeInterface { requestID?: string; createdAt?: BigNumber; salt?: Buffer; + appOrDelegatedID?: CompactAddressObject; details: Array; } export type GenericEnvelopeJson = { @@ -18,6 +20,7 @@ export type GenericEnvelopeJson = { requestid?: string; createdat?: string; salt?: string; + appOrDelegatedID?: string; details: Array; }; export declare class GenericEnvelope implements SerializableEntity { @@ -27,6 +30,7 @@ export declare class GenericEnvelope implements SerializableEntity { requestID?: string; createdAt?: BigNumber; salt?: Buffer; + appOrDelegatedID?: CompactAddressObject; details: Array; static VERSION_CURRENT: import("bn.js"); static VERSION_FIRSTVALID: import("bn.js"); @@ -38,6 +42,7 @@ export declare class GenericEnvelope implements SerializableEntity { static FLAG_MULTI_DETAILS: import("bn.js"); static FLAG_IS_TESTNET: import("bn.js"); static FLAG_HAS_SALT: import("bn.js"); + static FLAG_HAS_APP_OR_DELEGATED_ID: import("bn.js"); constructor(envelope?: GenericEnvelopeInterface); isValidVersion(): boolean; isSigned(): boolean; @@ -45,12 +50,14 @@ export declare class GenericEnvelope implements SerializableEntity { hasMultiDetails(): boolean; hasCreatedAt(): boolean; hasSalt(): boolean; + hasAppOrDelegatedID(): boolean; isTestnet(): boolean; setSigned(): void; setHasRequestID(): void; setHasMultiDetails(): void; setHasCreatedAt(): void; setHasSalt(): void; + setHasAppOrDelegatedID(): void; setIsTestnet(): void; setFlags(): void; getRawDataSha256(includeSig?: boolean): Buffer; diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.js b/dist/vdxf/classes/envelope/GenericEnvelope.js index dc388e60..79228e72 100644 --- a/dist/vdxf/classes/envelope/GenericEnvelope.js +++ b/dist/vdxf/classes/envelope/GenericEnvelope.js @@ -10,6 +10,7 @@ const crypto_1 = require("crypto"); const VerifiableSignatureData_1 = require("../VerifiableSignatureData"); const vdxf_1 = require("../../../constants/vdxf"); const address_1 = require("../../../utils/address"); +const CompactAddressObject_1 = require("../CompactAddressObject"); class GenericEnvelope { constructor(envelope = { details: [], @@ -20,6 +21,7 @@ class GenericEnvelope { this.details = envelope === null || envelope === void 0 ? void 0 : envelope.details; this.createdAt = envelope === null || envelope === void 0 ? void 0 : envelope.createdAt; this.salt = envelope === null || envelope === void 0 ? void 0 : envelope.salt; + this.appOrDelegatedID = envelope === null || envelope === void 0 ? void 0 : envelope.appOrDelegatedID; if (envelope === null || envelope === void 0 ? void 0 : envelope.flags) this.flags = envelope.flags; else @@ -48,6 +50,9 @@ class GenericEnvelope { hasSalt() { return !!(this.flags.and(GenericEnvelope.FLAG_HAS_SALT).toNumber()); } + hasAppOrDelegatedID() { + return !!(this.flags.and(GenericEnvelope.FLAG_HAS_APP_OR_DELEGATED_ID).toNumber()); + } isTestnet() { return !!(this.flags.and(GenericEnvelope.FLAG_IS_TESTNET).toNumber()); } @@ -66,6 +71,9 @@ class GenericEnvelope { setHasSalt() { this.flags = this.flags.or(GenericEnvelope.FLAG_HAS_SALT); } + setHasAppOrDelegatedID() { + this.flags = this.flags.or(GenericEnvelope.FLAG_HAS_APP_OR_DELEGATED_ID); + } setIsTestnet() { this.flags = this.flags.or(GenericEnvelope.FLAG_IS_TESTNET); } @@ -78,6 +86,8 @@ class GenericEnvelope { this.setHasCreatedAt(); if (this.salt) this.setHasSalt(); + if (this.appOrDelegatedID) + this.setHasAppOrDelegatedID(); if (this.details && this.details.length > 1) this.setHasMultiDetails(); } @@ -107,6 +117,9 @@ class GenericEnvelope { length += varuint_1.default.encodingLength(saltLen); length += saltLen; } + if (this.hasAppOrDelegatedID()) { + length += this.appOrDelegatedID.getByteLength(); + } if (this.hasMultiDetails()) { length += varuint_1.default.encodingLength(this.details.length); for (const detail of this.details) { @@ -129,6 +142,9 @@ class GenericEnvelope { if (this.hasSalt()) { writer.writeVarSlice(this.salt); } + if (this.hasAppOrDelegatedID()) { + writer.writeSlice(this.appOrDelegatedID.toBuffer()); + } if (this.hasMultiDetails()) { writer.writeCompactSize(this.details.length); for (const detail of this.details) { @@ -189,6 +205,10 @@ class GenericEnvelope { if (this.hasSalt()) { this.salt = reader.readVarSlice(); } + if (this.hasAppOrDelegatedID()) { + this.appOrDelegatedID = new CompactAddressObject_1.CompactAddressObject(); + reader.offset = this.appOrDelegatedID.fromBuffer(reader.buffer, reader.offset); + } if (this.hasMultiDetails()) { this.details = []; const numItems = reader.readCompactSize(); @@ -221,6 +241,8 @@ class GenericEnvelope { signature: this.isSigned() ? this.signature.toJson() : undefined, requestid: this.requestID, createdat: this.hasCreatedAt() ? this.createdAt.toString() : undefined, + salt: this.hasSalt() ? this.salt.toString('hex') : undefined, + appOrDelegatedID: this.hasAppOrDelegatedID() ? this.appOrDelegatedID.toIAddress() : undefined, details: details }; } @@ -236,3 +258,4 @@ GenericEnvelope.FLAG_HAS_CREATED_AT = new bn_js_1.BN(4, 10); GenericEnvelope.FLAG_MULTI_DETAILS = new bn_js_1.BN(8, 10); GenericEnvelope.FLAG_IS_TESTNET = new bn_js_1.BN(16, 10); GenericEnvelope.FLAG_HAS_SALT = new bn_js_1.BN(32, 10); +GenericEnvelope.FLAG_HAS_APP_OR_DELEGATED_ID = new bn_js_1.BN(64, 10); diff --git a/dist/vdxf/classes/index.d.ts b/dist/vdxf/classes/index.d.ts index 242fd730..47371ba7 100644 --- a/dist/vdxf/classes/index.d.ts +++ b/dist/vdxf/classes/index.d.ts @@ -25,7 +25,7 @@ export * from "./identity/IdentityUpdateResponseDetails"; export * from './ResponseURI'; export * from './request/GenericRequest'; export * from './response/GenericResponse'; -export * from './response/AppEncryptionResponseDetails'; +export * from './appencryption/AppEncryptionResponseDetails'; export * from './ordinals'; export { Hash160 } from './Hash160'; export { RedirectUri, Subject, ProvisioningInfo, RequestedPermission, Audience, AltAuthFactor, Attestation, } from "./Challenge"; @@ -36,7 +36,7 @@ export * from './requestobjects/UserDataRequestDetails'; export * from './login/AuthenticationRequestDetails'; export * from './login/AuthenticationResponseDetails'; export * from './requestobjects/ProvisionIdentityDetails'; -export * from './requestobjects/AppEncryptionRequestDetails'; +export * from './appencryption/AppEncryptionRequestDetails'; export * from './requestobjects/UserSpecificDataPacketDetails'; export * from './CompactAddressObject'; export * from './VerifiableSignatureData'; diff --git a/dist/vdxf/classes/index.js b/dist/vdxf/classes/index.js index ccc713f0..e21fde43 100644 --- a/dist/vdxf/classes/index.js +++ b/dist/vdxf/classes/index.js @@ -46,7 +46,7 @@ __exportStar(require("./identity/IdentityUpdateResponseDetails"), exports); __exportStar(require("./ResponseURI"), exports); __exportStar(require("./request/GenericRequest"), exports); __exportStar(require("./response/GenericResponse"), exports); -__exportStar(require("./response/AppEncryptionResponseDetails"), exports); +__exportStar(require("./appencryption/AppEncryptionResponseDetails"), exports); __exportStar(require("./ordinals"), exports); var Hash160_1 = require("./Hash160"); Object.defineProperty(exports, "Hash160", { enumerable: true, get: function () { return Hash160_1.Hash160; } }); @@ -68,7 +68,7 @@ __exportStar(require("./requestobjects/UserDataRequestDetails"), exports); __exportStar(require("./login/AuthenticationRequestDetails"), exports); __exportStar(require("./login/AuthenticationResponseDetails"), exports); __exportStar(require("./requestobjects/ProvisionIdentityDetails"), exports); -__exportStar(require("./requestobjects/AppEncryptionRequestDetails"), exports); +__exportStar(require("./appencryption/AppEncryptionRequestDetails"), exports); __exportStar(require("./requestobjects/UserSpecificDataPacketDetails"), exports); __exportStar(require("./CompactAddressObject"), exports); __exportStar(require("./VerifiableSignatureData"), exports); diff --git a/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.d.ts b/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.d.ts index 92abf0c1..26268652 100644 --- a/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.d.ts +++ b/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.d.ts @@ -1,7 +1,7 @@ import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; -import { AppEncryptionRequestDetails, AppEncryptionRequestJson } from "../requestobjects/AppEncryptionRequestDetails"; +import { AppEncryptionRequestDetails, AppEncryptionRequestJson } from "../appencryption/AppEncryptionRequestDetails"; export declare class AppEncryptionRequestOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { data: AppEncryptionRequestDetails; constructor(request?: OrdinalVDXFObjectInterfaceTemplate); diff --git a/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.js b/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.js index 566e0a3a..2f9c4d2e 100644 --- a/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.js +++ b/dist/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.js @@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.AppEncryptionRequestOrdinalVDXFObject = void 0; const ordinals_1 = require("../../../constants/ordinals/ordinals"); const SerializableEntityOrdinalVDXFObject_1 = require("./SerializableEntityOrdinalVDXFObject"); -const AppEncryptionRequestDetails_1 = require("../requestobjects/AppEncryptionRequestDetails"); +const AppEncryptionRequestDetails_1 = require("../appencryption/AppEncryptionRequestDetails"); class AppEncryptionRequestOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject_1.SerializableEntityOrdinalVDXFObject { constructor(request = { data: new AppEncryptionRequestDetails_1.AppEncryptionRequestDetails() diff --git a/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.d.ts b/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.d.ts index 44361c52..b4cdfbd0 100644 --- a/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.d.ts +++ b/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.d.ts @@ -1,7 +1,7 @@ import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; -import { AppEncryptionResponseDetails, AppEncryptionResponseDetailsJson } from "../response/AppEncryptionResponseDetails"; +import { AppEncryptionResponseDetails, AppEncryptionResponseDetailsJson } from "../appencryption/AppEncryptionResponseDetails"; export declare class AppEncryptionResponseOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { data: AppEncryptionResponseDetails; constructor(request?: OrdinalVDXFObjectInterfaceTemplate); diff --git a/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.js b/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.js index 031638f5..ed657738 100644 --- a/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.js +++ b/dist/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.js @@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.AppEncryptionResponseOrdinalVDXFObject = void 0; const ordinals_1 = require("../../../constants/ordinals/ordinals"); const SerializableEntityOrdinalVDXFObject_1 = require("./SerializableEntityOrdinalVDXFObject"); -const AppEncryptionResponseDetails_1 = require("../response/AppEncryptionResponseDetails"); +const AppEncryptionResponseDetails_1 = require("../appencryption/AppEncryptionResponseDetails"); class AppEncryptionResponseOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject_1.SerializableEntityOrdinalVDXFObject { constructor(request = { data: new AppEncryptionResponseDetails_1.AppEncryptionResponseDetails() diff --git a/dist/vdxf/classes/request/GenericRequest.d.ts b/dist/vdxf/classes/request/GenericRequest.d.ts index 4276d77d..ee60e691 100644 --- a/dist/vdxf/classes/request/GenericRequest.d.ts +++ b/dist/vdxf/classes/request/GenericRequest.d.ts @@ -22,6 +22,7 @@ export declare class GenericRequest extends GenericEnvelope implements Serializa static FLAG_MULTI_DETAILS: import("bn.js"); static FLAG_IS_TESTNET: import("bn.js"); static FLAG_HAS_SALT: import("bn.js"); + static FLAG_HAS_APP_OR_DELEGATED_ID: import("bn.js"); static FLAG_HAS_RESPONSE_URIS: import("bn.js"); static FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS: import("bn.js"); constructor(envelope?: GenericRequestInterface); diff --git a/dist/vdxf/classes/request/GenericRequest.js b/dist/vdxf/classes/request/GenericRequest.js index 98d3bbbc..ac241f1b 100644 --- a/dist/vdxf/classes/request/GenericRequest.js +++ b/dist/vdxf/classes/request/GenericRequest.js @@ -132,5 +132,6 @@ GenericRequest.FLAG_HAS_CREATED_AT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_ GenericRequest.FLAG_MULTI_DETAILS = GenericEnvelope_1.GenericEnvelope.FLAG_MULTI_DETAILS; GenericRequest.FLAG_IS_TESTNET = GenericEnvelope_1.GenericEnvelope.FLAG_IS_TESTNET; GenericRequest.FLAG_HAS_SALT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_SALT; -GenericRequest.FLAG_HAS_RESPONSE_URIS = new bn_js_1.BN(64, 10); -GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS = new bn_js_1.BN(128, 10); +GenericRequest.FLAG_HAS_APP_OR_DELEGATED_ID = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_APP_OR_DELEGATED_ID; +GenericRequest.FLAG_HAS_RESPONSE_URIS = new bn_js_1.BN(128, 10); +GenericRequest.FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS = new bn_js_1.BN(256, 10); diff --git a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts index 20f0554a..757b8af4 100644 --- a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts +++ b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.d.ts @@ -21,7 +21,6 @@ import { CompactAddressObject, CompactAddressObjectJson } from '../CompactAddres export interface AppEncryptionRequestInterface { version?: BigNumber; flags: BigNumber; - appOrDelegatedID: CompactAddressObject; encryptToZAddress: string; derivationNumber: BigNumber; derivationID?: CompactAddressObject; @@ -30,7 +29,6 @@ export interface AppEncryptionRequestInterface { export interface AppEncryptionRequestJson { version: number; flags: number; - appordelegatedid: CompactAddressObjectJson; encrypttozaddress: string; derivationnumber: number; derivationid?: CompactAddressObjectJson; @@ -54,7 +52,6 @@ export declare class AppEncryptionRequestDetails implements SerializableEntity { static RETURN_ESK: import("bn.js"); version: BigNumber; flags: BigNumber; - appOrDelegatedID?: CompactAddressObject; encryptToZAddress: string; derivationNumber: BigNumber; derivationID?: CompactAddressObject; diff --git a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js index fb417209..606652b8 100644 --- a/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js +++ b/dist/vdxf/classes/requestobjects/AppEncryptionRequestDetails.js @@ -38,7 +38,6 @@ class AppEncryptionRequestDetails { constructor(data) { this.version = (data === null || data === void 0 ? void 0 : data.version) || AppEncryptionRequestDetails.DEFAULT_VERSION; this.flags = (data === null || data === void 0 ? void 0 : data.flags) || new bn_js_1.BN(0); - this.appOrDelegatedID = data === null || data === void 0 ? void 0 : data.appOrDelegatedID; this.encryptToZAddress = (data === null || data === void 0 ? void 0 : data.encryptToZAddress) || ''; this.derivationNumber = (data === null || data === void 0 ? void 0 : data.derivationNumber) || new bn_js_1.BN(0); this.derivationID = data === null || data === void 0 ? void 0 : data.derivationID; @@ -59,7 +58,7 @@ class AppEncryptionRequestDetails { return flags; } isValid() { - let valid = this.appOrDelegatedID != null; + let valid = true; valid && (valid = this.encryptToZAddress != null && this.encryptToZAddress.length > 0); valid && (valid = this.derivationNumber != null && this.derivationNumber.gte(new bn_js_1.BN(0))); return valid; @@ -74,8 +73,6 @@ class AppEncryptionRequestDetails { const flags = this.calcFlags(); let length = 0; length += varuint_1.default.encodingLength(flags.toNumber()); - // appOrDelegatedID - length += this.appOrDelegatedID.getByteLength(); // encryptToKey - zaddress encoding (43 bytes for sapling address data) length += 43; // Sapling address decoded data (11 + 32 bytes) length += varuint_1.default.encodingLength(this.derivationNumber.toNumber()); @@ -92,8 +89,6 @@ class AppEncryptionRequestDetails { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); // Write flags writer.writeCompactSize(flags.toNumber()); - // Write appOrDelegatedID - writer.writeSlice(this.appOrDelegatedID.toBuffer()); // Write encryptToAddress as decoded sapling address data const saplingData = (0, sapling_1.decodeSaplingAddress)(this.encryptToZAddress); writer.writeSlice(Buffer.concat([saplingData.d, saplingData.pk_d])); @@ -111,10 +106,6 @@ class AppEncryptionRequestDetails { const reader = new BufferReader(buffer, offset); // Read flags this.flags = new bn_js_1.BN(reader.readCompactSize()); - // Read appOrDelegatedID - const appOrDelegatedIDObj = new CompactAddressObject_1.CompactAddressObject(); - reader.offset = appOrDelegatedIDObj.fromBuffer(reader.buffer, reader.offset); - this.appOrDelegatedID = appOrDelegatedIDObj; // Read encryptToAddress as 43-byte sapling data and encode as sapling address const saplingData = reader.readSlice(43); this.encryptToZAddress = (0, sapling_1.toBech32)('zs', saplingData); @@ -137,7 +128,6 @@ class AppEncryptionRequestDetails { return { version: this.version.toNumber(), flags: flags.toNumber(), - appordelegatedid: this.appOrDelegatedID.toJson(), encrypttozaddress: this.encryptToZAddress, derivationnumber: this.derivationNumber.toNumber(), derivationid: (_a = this.derivationID) === null || _a === void 0 ? void 0 : _a.toJson(), @@ -148,7 +138,6 @@ class AppEncryptionRequestDetails { const instance = new AppEncryptionRequestDetails(); instance.version = new bn_js_1.BN(json.version); instance.flags = new bn_js_1.BN(json.flags); - instance.appOrDelegatedID = CompactAddressObject_1.CompactAddressObject.fromJson(json.appordelegatedid); instance.encryptToZAddress = json.encrypttozaddress; instance.derivationNumber = new bn_js_1.BN(json.derivationnumber); if (instance.hasDerivationID()) { diff --git a/dist/vdxf/classes/response/AppEncryptionResponseDetails.d.ts b/dist/vdxf/classes/response/AppEncryptionResponseDetails.d.ts index e204655b..b9ba93c6 100644 --- a/dist/vdxf/classes/response/AppEncryptionResponseDetails.d.ts +++ b/dist/vdxf/classes/response/AppEncryptionResponseDetails.d.ts @@ -7,7 +7,7 @@ export interface AppEncryptionResponseDetailsInterface { version: BigNumber; flags?: BigNumber; requestID?: string; - IncomingViewingKey: Buffer; + incomingViewingKey: Buffer; extendedViewingKey: SaplingExtendedViewingKey; address: SaplingPaymentAddress; extendedSpendingKey?: SaplingExtendedSpendingKey; @@ -25,7 +25,7 @@ export declare class AppEncryptionResponseDetails implements SerializableEntity version: BigNumber; flags: BigNumber; requestID?: string; - IncomingViewingKey: Buffer; + incomingViewingKey: Buffer; extendedViewingKey: SaplingExtendedViewingKey; address: SaplingPaymentAddress; extendedSpendingKey?: SaplingExtendedSpendingKey; diff --git a/dist/vdxf/classes/response/AppEncryptionResponseDetails.js b/dist/vdxf/classes/response/AppEncryptionResponseDetails.js index c0899c15..9e1f08ed 100644 --- a/dist/vdxf/classes/response/AppEncryptionResponseDetails.js +++ b/dist/vdxf/classes/response/AppEncryptionResponseDetails.js @@ -16,7 +16,7 @@ class AppEncryptionResponseDetails { var _a, _b, _c, _d, _e; this.version = (_a = data === null || data === void 0 ? void 0 : data.version) !== null && _a !== void 0 ? _a : new bn_js_1.BN(1); this.flags = (_b = data === null || data === void 0 ? void 0 : data.flags) !== null && _b !== void 0 ? _b : new bn_js_1.BN(0, 10); - this.IncomingViewingKey = (_c = data === null || data === void 0 ? void 0 : data.IncomingViewingKey) !== null && _c !== void 0 ? _c : Buffer.alloc(32); + this.incomingViewingKey = (_c = data === null || data === void 0 ? void 0 : data.incomingViewingKey) !== null && _c !== void 0 ? _c : Buffer.alloc(32); this.extendedViewingKey = (_d = data === null || data === void 0 ? void 0 : data.extendedViewingKey) !== null && _d !== void 0 ? _d : new SaplingExtendedViewingKey_1.SaplingExtendedViewingKey(); this.address = (_e = data === null || data === void 0 ? void 0 : data.address) !== null && _e !== void 0 ? _e : new pbaas_1.SaplingPaymentAddress(); if (data === null || data === void 0 ? void 0 : data.requestID) { @@ -51,7 +51,7 @@ class AppEncryptionResponseDetails { if (this.containsRequestID()) { length += vdxf_1.HASH160_BYTE_LENGTH; } - length += 32; // IncomingViewingKey + length += 32; // incomingViewingKey length += this.extendedViewingKey.getByteLength(); length += this.address.getByteLength(); if (this.containsExtendedSpendingKey()) { @@ -65,7 +65,7 @@ class AppEncryptionResponseDetails { if (this.containsRequestID()) { writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); } - writer.writeSlice(this.IncomingViewingKey); + writer.writeSlice(this.incomingViewingKey); writer.writeSlice(this.extendedViewingKey.toBuffer()); writer.writeSlice(this.address.toBuffer()); if (this.containsExtendedSpendingKey()) { @@ -79,7 +79,7 @@ class AppEncryptionResponseDetails { if (this.containsRequestID()) { this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); } - this.IncomingViewingKey = reader.readSlice(32); + this.incomingViewingKey = reader.readSlice(32); this.extendedViewingKey = new SaplingExtendedViewingKey_1.SaplingExtendedViewingKey(); reader.offset = this.extendedViewingKey.fromBuffer(reader.buffer, reader.offset); this.address = new pbaas_1.SaplingPaymentAddress(); @@ -95,7 +95,7 @@ class AppEncryptionResponseDetails { version: this.version.toNumber(), flags: this.flags.toNumber(), requestid: this.containsRequestID() ? this.requestID : undefined, - incomingviewingkey: this.IncomingViewingKey.toString('hex'), + incomingviewingkey: this.incomingViewingKey.toString('hex'), extendedviewingkey: this.extendedViewingKey.toKeyString(), address: this.address.toAddressString(), extendedspendingkey: this.containsExtendedSpendingKey() ? this.extendedSpendingKey.toKeyString() : undefined @@ -107,7 +107,7 @@ class AppEncryptionResponseDetails { version: new bn_js_1.BN(json.version, 10), flags: new bn_js_1.BN((_a = json.flags) !== null && _a !== void 0 ? _a : 0, 10), requestID: json.requestid, - IncomingViewingKey: Buffer.from(json.incomingviewingkey, 'hex'), + incomingViewingKey: Buffer.from(json.incomingviewingkey, 'hex'), extendedViewingKey: SaplingExtendedViewingKey_1.SaplingExtendedViewingKey.fromKeyString(json.extendedviewingkey), address: pbaas_1.SaplingPaymentAddress.fromAddressString(json.address), extendedSpendingKey: json.extendedspendingkey ? SaplingExtendedSpendingKey_1.SaplingExtendedSpendingKey.fromKeyString(json.extendedspendingkey) : undefined diff --git a/dist/vdxf/classes/response/GenericResponse.d.ts b/dist/vdxf/classes/response/GenericResponse.d.ts index b234f8c0..e73f3e6a 100644 --- a/dist/vdxf/classes/response/GenericResponse.d.ts +++ b/dist/vdxf/classes/response/GenericResponse.d.ts @@ -21,6 +21,7 @@ export declare class GenericResponse extends GenericEnvelope implements Serializ static FLAG_MULTI_DETAILS: import("bn.js"); static FLAG_IS_TESTNET: import("bn.js"); static FLAG_HAS_SALT: import("bn.js"); + static FLAG_HAS_APP_OR_DELEGATED_ID: import("bn.js"); static FLAG_HAS_REQUEST_HASH: import("bn.js"); constructor(envelope?: GenericResponseInterface); hasRequestHash(): boolean; diff --git a/dist/vdxf/classes/response/GenericResponse.js b/dist/vdxf/classes/response/GenericResponse.js index 45fdb6f2..cbd283ea 100644 --- a/dist/vdxf/classes/response/GenericResponse.js +++ b/dist/vdxf/classes/response/GenericResponse.js @@ -80,4 +80,5 @@ GenericResponse.FLAG_HAS_CREATED_AT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS GenericResponse.FLAG_MULTI_DETAILS = GenericEnvelope_1.GenericEnvelope.FLAG_MULTI_DETAILS; GenericResponse.FLAG_IS_TESTNET = GenericEnvelope_1.GenericEnvelope.FLAG_IS_TESTNET; GenericResponse.FLAG_HAS_SALT = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_SALT; -GenericResponse.FLAG_HAS_REQUEST_HASH = new bn_js_1.BN(64, 10); +GenericResponse.FLAG_HAS_APP_OR_DELEGATED_ID = GenericEnvelope_1.GenericEnvelope.FLAG_HAS_APP_OR_DELEGATED_ID; +GenericResponse.FLAG_HAS_REQUEST_HASH = new bn_js_1.BN(128, 10); diff --git a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts index a235eaa7..a6872ea9 100644 --- a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts +++ b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts @@ -18,7 +18,6 @@ describe("AppEncryptionRequestDetails serialization tests", () => { version: AppEncryptionRequestDetails.DEFAULT_VERSION, flags: AppEncryptionRequestDetails.HAS_DERIVATION_ID .or(AppEncryptionRequestDetails.HAS_REQUEST_ID), - appOrDelegatedID: createCompactAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), derivationID: createCompactAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), @@ -37,7 +36,6 @@ describe("AppEncryptionRequestDetails serialization tests", () => { expect(details.encryptToZAddress).toBe("zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4"); expect(details.flags.toNumber()).toBe(1+2); // HAS_DERIVATION_ID + HAS_REQUEST_ID expect(details.derivationNumber.toNumber()).toBe(42); - expect(details.appOrDelegatedID?.address).toBe("i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"); expect(details.derivationID?.address).toBe("i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"); expect(details.requestID).toBe("iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ"); }); @@ -48,7 +46,6 @@ describe("AppEncryptionRequestDetails serialization tests", () => { version: AppEncryptionRequestDetails.DEFAULT_VERSION, flags: AppEncryptionRequestDetails.HAS_DERIVATION_ID .or(AppEncryptionRequestDetails.HAS_REQUEST_ID), - appOrDelegatedID: createCompactAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), derivationID: createCompactAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), @@ -71,8 +68,6 @@ describe("AppEncryptionRequestDetails serialization tests", () => { expect(deserializedDetails.flags.toNumber()).toBe(originalDetails.flags.toNumber()); expect(deserializedDetails.encryptToZAddress).toBe(originalDetails.encryptToZAddress); expect(deserializedDetails.derivationNumber.toNumber()).toBe(originalDetails.derivationNumber.toNumber()); - expect(deserializedDetails.appOrDelegatedID?.BNType.toNumber()).toBe(originalDetails.appOrDelegatedID?.BNType.toNumber()); - expect(deserializedDetails.appOrDelegatedID?.address).toBe(originalDetails.appOrDelegatedID?.address); expect(deserializedDetails.derivationID?.BNType.toNumber()).toBe(originalDetails.derivationID?.BNType.toNumber()); expect(deserializedDetails.derivationID?.address).toBe(originalDetails.derivationID?.address); expect(deserializedDetails.requestID).toBe(originalDetails.requestID); diff --git a/src/__tests__/vdxf/appencryptionresponsedetails.test.ts b/src/__tests__/vdxf/appencryptionresponsedetails.test.ts index 9c004cfe..3ec2dc57 100644 --- a/src/__tests__/vdxf/appencryptionresponsedetails.test.ts +++ b/src/__tests__/vdxf/appencryptionresponsedetails.test.ts @@ -1,8 +1,8 @@ -import { AppEncryptionResponseDetails } from '../../vdxf/classes/response/AppEncryptionResponseDetails'; import { SaplingExtendedViewingKey } from '../../pbaas/SaplingExtendedViewingKey'; import { SaplingExtendedSpendingKey } from '../../pbaas/SaplingExtendedSpendingKey'; import { SaplingPaymentAddress } from '../../pbaas/SaplingPaymentAddress'; import { BN } from 'bn.js'; +import { AppEncryptionRequestDetails, AppEncryptionResponseDetails } from '../../vdxf/classes'; describe('AppEncryptionResponseDetails', () => { const testViewingKey = 'zxviews1q0njl87fqqqqpq8vghkp6nz9wx48mwelukvhx3yfwg7msatglv4xy8rrh87k9z472edvlrt950qyy6r766dxnpqktxug7t2wy80s4ug325dwp9hf4vw9a6ethf2mwc9wan28p88dq8q2e8sdlw2mhffg6hy92tjyuquz7a8reqdz905x6xt6kqdx5wn7jvas0733hends8q6s8k87emn6m060xdnhgmvn4zmx0ssrwve84lzxkqu2dnfq5qsjwrtlject0an0k282rsnx0kq4'; @@ -14,12 +14,12 @@ describe('AppEncryptionResponseDetails', () => { const testIncomingViewingKey = Buffer.from('be9af283ecfe0552480dd7e1ce9af61a12e64da4927e8011a795cb223f4afc00"', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), - IncomingViewingKey: testIncomingViewingKey, + incomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress) }); - expect(response.IncomingViewingKey).toEqual(testIncomingViewingKey); + expect(response.incomingViewingKey).toEqual(testIncomingViewingKey); expect(response.extendedViewingKey).toBeInstanceOf(SaplingExtendedViewingKey); expect(response.address).toBeInstanceOf(SaplingPaymentAddress); expect(response.containsRequestID()).toBe(false); @@ -31,12 +31,12 @@ describe('AppEncryptionResponseDetails', () => { const response = new AppEncryptionResponseDetails({ version: new BN(1), requestID: testRequestID, - IncomingViewingKey: testIncomingViewingKey, + incomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress) }); - expect(response.IncomingViewingKey).toEqual(testIncomingViewingKey); + expect(response.incomingViewingKey).toEqual(testIncomingViewingKey); expect(response.requestID).toBe(testRequestID); expect(response.containsRequestID()).toBe(true); expect(response.containsExtendedSpendingKey()).toBe(false); @@ -46,13 +46,13 @@ describe('AppEncryptionResponseDetails', () => { const testIncomingViewingKey = Buffer.from('fedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), - IncomingViewingKey: testIncomingViewingKey, + incomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress), extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey) }); - expect(response.IncomingViewingKey).toEqual(testIncomingViewingKey); + expect(response.incomingViewingKey).toEqual(testIncomingViewingKey); expect(response.extendedSpendingKey).toBeInstanceOf(SaplingExtendedSpendingKey); expect(response.containsRequestID()).toBe(false); expect(response.containsExtendedSpendingKey()).toBe(true); @@ -63,13 +63,13 @@ describe('AppEncryptionResponseDetails', () => { const response = new AppEncryptionResponseDetails({ version: new BN(1), requestID: testRequestID, - IncomingViewingKey: testIncomingViewingKey, + incomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress), extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey) }); - expect(response.IncomingViewingKey).toEqual(testIncomingViewingKey); + expect(response.incomingViewingKey).toEqual(testIncomingViewingKey); expect(response.requestID).toBe(testRequestID); expect(response.containsRequestID()).toBe(true); expect(response.extendedSpendingKey).toBeInstanceOf(SaplingExtendedSpendingKey); @@ -80,7 +80,7 @@ describe('AppEncryptionResponseDetails', () => { const testIncomingViewingKey = Buffer.from('9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), - IncomingViewingKey: testIncomingViewingKey, + incomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress) }); @@ -89,7 +89,7 @@ describe('AppEncryptionResponseDetails', () => { const response2 = new AppEncryptionResponseDetails(); response2.fromBuffer(buffer); - expect(response2.IncomingViewingKey.toString('hex')).toBe(testIncomingViewingKey.toString('hex')); + expect(response2.incomingViewingKey.toString('hex')).toBe(testIncomingViewingKey.toString('hex')); expect(response2.containsRequestID()).toBe(false); expect(response2.containsExtendedSpendingKey()).toBe(false); expect(response2.extendedViewingKey.toKeyString()).toBe(testViewingKey); @@ -101,7 +101,7 @@ describe('AppEncryptionResponseDetails', () => { const response = new AppEncryptionResponseDetails({ version: new BN(1), requestID: testRequestID, - IncomingViewingKey: testIncomingViewingKey, + incomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress) }); @@ -110,7 +110,7 @@ describe('AppEncryptionResponseDetails', () => { const response2 = new AppEncryptionResponseDetails(); response2.fromBuffer(buffer); - expect(response2.IncomingViewingKey.toString('hex')).toBe(testIncomingViewingKey.toString('hex')); + expect(response2.incomingViewingKey.toString('hex')).toBe(testIncomingViewingKey.toString('hex')); expect(response2.requestID).toBe(testRequestID); expect(response2.containsRequestID()).toBe(true); expect(response2.extendedViewingKey.toKeyString()).toBe(testViewingKey); @@ -121,7 +121,7 @@ describe('AppEncryptionResponseDetails', () => { const testIncomingViewingKey = Buffer.from('5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a', 'hex'); const response = new AppEncryptionResponseDetails({ version: new BN(1), - IncomingViewingKey: testIncomingViewingKey, + incomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress), extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey) @@ -131,7 +131,7 @@ describe('AppEncryptionResponseDetails', () => { const response2 = new AppEncryptionResponseDetails(); response2.fromBuffer(buffer); - expect(response2.IncomingViewingKey.toString('hex')).toBe(testIncomingViewingKey.toString('hex')); + expect(response2.incomingViewingKey.toString('hex')).toBe(testIncomingViewingKey.toString('hex')); expect(response2.containsExtendedSpendingKey()).toBe(true); expect(response2.extendedSpendingKey).toBeDefined(); expect(response2.extendedSpendingKey!.toKeyString()).toBe(testSpendingKey); @@ -142,7 +142,7 @@ describe('AppEncryptionResponseDetails', () => { const response = new AppEncryptionResponseDetails({ version: new BN(1), requestID: testRequestID, - IncomingViewingKey: testIncomingViewingKey, + incomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), address: SaplingPaymentAddress.fromAddressString(testAddress), extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey) @@ -151,7 +151,7 @@ describe('AppEncryptionResponseDetails', () => { const json = response.toJson(); const response2 = AppEncryptionResponseDetails.fromJson(json); - expect(response2.IncomingViewingKey.toString('hex')).toBe(testIncomingViewingKey.toString('hex')); + expect(response2.incomingViewingKey.toString('hex')).toBe(testIncomingViewingKey.toString('hex')); expect(response2.requestID).toBe(testRequestID); expect(response2.containsRequestID()).toBe(true); expect(response2.extendedViewingKey.toKeyString()).toBe(testViewingKey); diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts index 7626861b..e89f9b1a 100644 --- a/src/__tests__/vdxf/genericrequest.test.ts +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -57,7 +57,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); }); - it('round trips with createdAt, signature, responseURI, requestID, and encryptResponseToAddress', () => { + it('round trips with createdAt, signature, responseURI, requestID, encryptResponseToAddress, and appOrDelegatedID', () => { const sig = new VerifiableSignatureData({ flags: new BN(0), version: new BN(1), @@ -85,6 +85,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { requestID: NULL_I_ADDR, createdAt, encryptResponseToAddress: SaplingPaymentAddress.fromAddressString(saplingAddr), + appOrDelegatedID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), responseURIs: [ResponseURI.fromUriString("https://verus.io/callback", ResponseURI.TYPE_POST), ResponseURI.fromUriString("https://example.com/callback", ResponseURI.TYPE_REDIRECT)] }); @@ -101,6 +102,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { expect(round.responseURIs![1].getUriString()).toBe("https://example.com/callback") expect(round.responseURIs![1].type.toString()).toBe(ResponseURI.TYPE_REDIRECT.toString()) expect(round.requestID).toBe(NULL_I_ADDR) + expect(round.appOrDelegatedID?.toIAddress()).toBe(DEFAULT_VERUS_CHAINID) expect(round.hasEncryptResponseToAddress()).toBe(true) expect(round.encryptResponseToAddress?.toAddressString()).toBe(saplingAddr) const d2 = round.getDetails(0); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 16fc9b86..664edd68 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -354,7 +354,6 @@ describe('OrdinalVDXFObject and subclasses round-trip serialization', () => { version: AppEncryptionRequestDetails.DEFAULT_VERSION, flags: AppEncryptionRequestDetails.HAS_DERIVATION_ID .or(AppEncryptionRequestDetails.HAS_REQUEST_ID), - appOrDelegatedID: createCompactAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"), encryptToZAddress: "zs1sthrnsx5vmpmdl3pcd0paltcq9jf56hjjzu87shf90mt54y3szde6zaauvxw5sfuqh565arhmh4", derivationNumber: new BN(42), derivationID: createCompactAddressObject(CompactAddressObject.TYPE_I_ADDRESS, "i9nwxtKuVYX4MSbeULLiK2ttVi6rUEhh4X"), @@ -367,7 +366,6 @@ describe('OrdinalVDXFObject and subclasses round-trip serialization', () => { expect(round).toBeInstanceOf(AppEncryptionRequestOrdinalVDXFObject); const d2 = (round as AppEncryptionRequestOrdinalVDXFObject).data; - expect(d2.appOrDelegatedID!.toIAddress()).toEqual(details.appOrDelegatedID!.toIAddress()); expect(d2.encryptToZAddress!).toEqual(details.encryptToZAddress); expect(d2.derivationNumber!.toString()).toEqual(details.derivationNumber!.toString()); expect(d2.derivationID!.toIAddress()).toEqual(details.derivationID!.toIAddress()); @@ -379,7 +377,6 @@ describe('OrdinalVDXFObject and subclasses round-trip serialization', () => { expect(roundJ).toBeInstanceOf(AppEncryptionRequestOrdinalVDXFObject); const d3 = (roundJ as AppEncryptionRequestOrdinalVDXFObject).data; - expect(d3.appOrDelegatedID!.toIAddress()).toEqual(details.appOrDelegatedID!.toIAddress()); expect(d3.encryptToZAddress!).toEqual(details.encryptToZAddress); expect(d3.derivationNumber!.toString()).toEqual(details.derivationNumber!.toString()); expect(d3.derivationID!.toIAddress()).toEqual(details.derivationID!.toIAddress()); @@ -534,7 +531,7 @@ describe('OrdinalVDXFObject and subclasses round-trip serialization', () => { version: new BN(1), flags: AppEncryptionResponseDetails.RESPONSE_CONTAINS_REQUEST_ID.or(AppEncryptionResponseDetails.RESPONSE_CONTAINS_EXTENDED_SPENDING_KEY), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ", - IncomingViewingKey: testIncomingViewingKey, + incomingViewingKey: testIncomingViewingKey, extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(testViewingKey), extendedSpendingKey: SaplingExtendedSpendingKey.fromKeyString(testSpendingKey), address: SaplingPaymentAddress.fromAddressString(testAddress) @@ -546,7 +543,7 @@ describe('OrdinalVDXFObject and subclasses round-trip serialization', () => { expect(round).toBeInstanceOf(AppEncryptionResponseOrdinalVDXFObject); const d2 = (round as AppEncryptionResponseOrdinalVDXFObject).data; - expect(d2.IncomingViewingKey.toString('hex')).toEqual(testIncomingViewingKey.toString('hex')); + expect(d2.incomingViewingKey.toString('hex')).toEqual(testIncomingViewingKey.toString('hex')); expect(d2.requestID!.toString()).toEqual(details.requestID!.toString()); expect(d2.extendedViewingKey!.toKeyString()).toEqual(details.extendedViewingKey!.toKeyString()); expect(d2.extendedSpendingKey!.toKeyString()).toEqual(details.extendedSpendingKey!.toKeyString()); diff --git a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts b/src/vdxf/classes/appencryption/AppEncryptionRequestDetails.ts similarity index 89% rename from src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts rename to src/vdxf/classes/appencryption/AppEncryptionRequestDetails.ts index 66dbdb26..adfadfdf 100644 --- a/src/vdxf/classes/requestobjects/AppEncryptionRequestDetails.ts +++ b/src/vdxf/classes/appencryption/AppEncryptionRequestDetails.ts @@ -19,7 +19,6 @@ import { BigNumber } from '../../../utils/types/BigNumber'; import { BN } from 'bn.js'; -import varint from '../../../utils/varint'; import bufferutils from '../../../utils/bufferutils'; const { BufferReader, BufferWriter } = bufferutils; import { decodeSaplingAddress, toBech32 } from '../../../utils/sapling'; @@ -32,7 +31,6 @@ import { I_ADDR_VERSION, HASH160_BYTE_LENGTH } from '../../../constants/vdxf'; export interface AppEncryptionRequestInterface { version?: BigNumber; flags: BigNumber; - appOrDelegatedID: CompactAddressObject; encryptToZAddress: string; derivationNumber: BigNumber; derivationID?: CompactAddressObject; @@ -42,7 +40,6 @@ export interface AppEncryptionRequestInterface { export interface AppEncryptionRequestJson { version: number; flags: number; - appordelegatedid: CompactAddressObjectJson; encrypttozaddress: string; derivationnumber: number; derivationid?: CompactAddressObjectJson; @@ -70,7 +67,6 @@ export class AppEncryptionRequestDetails implements SerializableEntity { version: BigNumber; flags: BigNumber; - appOrDelegatedID?: CompactAddressObject; // ID of the app or delegated entity making the request encryptToZAddress: string; // zaddress reply is encrypted to derivationNumber: BigNumber; derivationID?: CompactAddressObject; // Defaults to choosing the Z-address from the ID signing if not present @@ -79,7 +75,6 @@ export class AppEncryptionRequestDetails implements SerializableEntity { constructor(data?: AppEncryptionRequestInterface) { this.version = data?.version || AppEncryptionRequestDetails.DEFAULT_VERSION; this.flags = data?.flags || new BN(0); - this.appOrDelegatedID = data?.appOrDelegatedID; this.encryptToZAddress = data?.encryptToZAddress || ''; this.derivationNumber = data?.derivationNumber || new BN(0); this.derivationID = data?.derivationID; @@ -107,7 +102,7 @@ export class AppEncryptionRequestDetails implements SerializableEntity { } isValid(): boolean { - let valid = this.appOrDelegatedID != null; + let valid = true; valid &&= this.encryptToZAddress != null && this.encryptToZAddress.length > 0; valid &&= this.derivationNumber != null && this.derivationNumber.gte(new BN(0)); @@ -130,9 +125,6 @@ export class AppEncryptionRequestDetails implements SerializableEntity { length += varuint.encodingLength(flags.toNumber()); - // appOrDelegatedID - length += this.appOrDelegatedID.getByteLength(); - // encryptToKey - zaddress encoding (43 bytes for sapling address data) length += 43; // Sapling address decoded data (11 + 32 bytes) @@ -156,9 +148,6 @@ export class AppEncryptionRequestDetails implements SerializableEntity { // Write flags writer.writeCompactSize(flags.toNumber()); - // Write appOrDelegatedID - writer.writeSlice(this.appOrDelegatedID.toBuffer()); - // Write encryptToAddress as decoded sapling address data const saplingData = decodeSaplingAddress(this.encryptToZAddress); writer.writeSlice(Buffer.concat([saplingData.d, saplingData.pk_d])); @@ -184,11 +173,6 @@ export class AppEncryptionRequestDetails implements SerializableEntity { // Read flags this.flags = new BN(reader.readCompactSize()); - // Read appOrDelegatedID - const appOrDelegatedIDObj = new CompactAddressObject(); - reader.offset = appOrDelegatedIDObj.fromBuffer(reader.buffer, reader.offset); - this.appOrDelegatedID = appOrDelegatedIDObj; - // Read encryptToAddress as 43-byte sapling data and encode as sapling address const saplingData = reader.readSlice(43); this.encryptToZAddress = toBech32('zs', saplingData); @@ -216,7 +200,6 @@ export class AppEncryptionRequestDetails implements SerializableEntity { return { version: this.version.toNumber(), flags: flags.toNumber(), - appordelegatedid: this.appOrDelegatedID.toJson(), encrypttozaddress: this.encryptToZAddress, derivationnumber: this.derivationNumber.toNumber(), derivationid: this.derivationID?.toJson(), @@ -228,7 +211,6 @@ export class AppEncryptionRequestDetails implements SerializableEntity { const instance = new AppEncryptionRequestDetails(); instance.version = new BN(json.version); instance.flags = new BN(json.flags); - instance.appOrDelegatedID = CompactAddressObject.fromJson(json.appordelegatedid); instance.encryptToZAddress = json.encrypttozaddress; instance.derivationNumber = new BN(json.derivationnumber); diff --git a/src/vdxf/classes/response/AppEncryptionResponseDetails.ts b/src/vdxf/classes/appencryption/AppEncryptionResponseDetails.ts similarity index 93% rename from src/vdxf/classes/response/AppEncryptionResponseDetails.ts rename to src/vdxf/classes/appencryption/AppEncryptionResponseDetails.ts index fd111a5c..4d57a8dc 100644 --- a/src/vdxf/classes/response/AppEncryptionResponseDetails.ts +++ b/src/vdxf/classes/appencryption/AppEncryptionResponseDetails.ts @@ -16,7 +16,7 @@ export interface AppEncryptionResponseDetailsInterface { version: BigNumber; flags?: BigNumber; requestID?: string; - IncomingViewingKey: Buffer; + incomingViewingKey: Buffer; extendedViewingKey: SaplingExtendedViewingKey; address: SaplingPaymentAddress; extendedSpendingKey?: SaplingExtendedSpendingKey; @@ -36,7 +36,7 @@ export class AppEncryptionResponseDetails implements SerializableEntity { version: BigNumber; flags: BigNumber; requestID?: string; - IncomingViewingKey: Buffer; + incomingViewingKey: Buffer; extendedViewingKey: SaplingExtendedViewingKey; address: SaplingPaymentAddress; extendedSpendingKey?: SaplingExtendedSpendingKey; @@ -47,7 +47,7 @@ export class AppEncryptionResponseDetails implements SerializableEntity { constructor(data?: AppEncryptionResponseDetailsInterface) { this.version = data?.version ?? new BN(1); this.flags = data?.flags ?? new BN(0, 10); - this.IncomingViewingKey = data?.IncomingViewingKey ?? Buffer.alloc(32); + this.incomingViewingKey = data?.incomingViewingKey ?? Buffer.alloc(32); this.extendedViewingKey = data?.extendedViewingKey ?? new SaplingExtendedViewingKey(); this.address = data?.address ?? new SaplingPaymentAddress(); @@ -91,7 +91,7 @@ export class AppEncryptionResponseDetails implements SerializableEntity { length += HASH160_BYTE_LENGTH; } - length += 32; // IncomingViewingKey + length += 32; // incomingViewingKey length += this.extendedViewingKey.getByteLength(); length += this.address.getByteLength(); @@ -111,7 +111,7 @@ export class AppEncryptionResponseDetails implements SerializableEntity { writer.writeSlice(fromBase58Check(this.requestID).hash); } - writer.writeSlice(this.IncomingViewingKey); + writer.writeSlice(this.incomingViewingKey); writer.writeSlice(this.extendedViewingKey.toBuffer()); writer.writeSlice(this.address.toBuffer()); @@ -131,7 +131,7 @@ export class AppEncryptionResponseDetails implements SerializableEntity { this.requestID = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); } - this.IncomingViewingKey = reader.readSlice(32); + this.incomingViewingKey = reader.readSlice(32); this.extendedViewingKey = new SaplingExtendedViewingKey(); reader.offset = this.extendedViewingKey.fromBuffer(reader.buffer, reader.offset); @@ -152,7 +152,7 @@ export class AppEncryptionResponseDetails implements SerializableEntity { version: this.version.toNumber(), flags: this.flags.toNumber(), requestid: this.containsRequestID() ? this.requestID : undefined, - incomingviewingkey: this.IncomingViewingKey.toString('hex'), + incomingviewingkey: this.incomingViewingKey.toString('hex'), extendedviewingkey: this.extendedViewingKey.toKeyString(), address: this.address.toAddressString(), extendedspendingkey: this.containsExtendedSpendingKey() ? this.extendedSpendingKey.toKeyString() : undefined @@ -164,7 +164,7 @@ export class AppEncryptionResponseDetails implements SerializableEntity { version: new BN(json.version, 10), flags: new BN(json.flags ?? 0, 10), requestID: json.requestid, - IncomingViewingKey: Buffer.from(json.incomingviewingkey, 'hex'), + incomingViewingKey: Buffer.from(json.incomingviewingkey, 'hex'), extendedViewingKey: SaplingExtendedViewingKey.fromKeyString(json.extendedviewingkey), address: SaplingPaymentAddress.fromAddressString(json.address), extendedSpendingKey: json.extendedspendingkey ? SaplingExtendedSpendingKey.fromKeyString(json.extendedspendingkey) : undefined diff --git a/src/vdxf/classes/envelope/GenericEnvelope.ts b/src/vdxf/classes/envelope/GenericEnvelope.ts index 78137298..a43fa6eb 100644 --- a/src/vdxf/classes/envelope/GenericEnvelope.ts +++ b/src/vdxf/classes/envelope/GenericEnvelope.ts @@ -9,6 +9,7 @@ import { createHash } from "crypto"; import { VerifiableSignatureData, VerifiableSignatureDataJson } from "../VerifiableSignatureData"; import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from "../../../constants/vdxf"; import { fromBase58Check, toBase58Check } from "../../../utils/address"; +import { CompactAddressObject } from "../CompactAddressObject"; export interface GenericEnvelopeInterface { version?: BigNumber; @@ -17,6 +18,7 @@ export interface GenericEnvelopeInterface { requestID?: string; createdAt?: BigNumber; salt?: Buffer; + appOrDelegatedID?: CompactAddressObject; details: Array; } @@ -27,6 +29,7 @@ export type GenericEnvelopeJson = { requestid?: string; createdat?: string; salt?: string; + appOrDelegatedID?: string; details: Array; } @@ -37,6 +40,7 @@ export class GenericEnvelope implements SerializableEntity { requestID?: string; createdAt?: BigNumber; salt?: Buffer; // var length buffer + appOrDelegatedID?: CompactAddressObject; details: Array; static VERSION_CURRENT = new BN(1, 10) @@ -50,6 +54,7 @@ export class GenericEnvelope implements SerializableEntity { static FLAG_MULTI_DETAILS = new BN(8, 10) static FLAG_IS_TESTNET = new BN(16, 10) static FLAG_HAS_SALT = new BN(32, 10) + static FLAG_HAS_APP_OR_DELEGATED_ID = new BN(64, 10); constructor( envelope: GenericEnvelopeInterface = { @@ -62,6 +67,7 @@ export class GenericEnvelope implements SerializableEntity { this.details = envelope?.details; this.createdAt = envelope?.createdAt; this.salt = envelope?.salt; + this.appOrDelegatedID = envelope?.appOrDelegatedID; if (envelope?.flags) this.flags = envelope.flags; else this.flags = GenericEnvelope.BASE_FLAGS; @@ -96,6 +102,10 @@ export class GenericEnvelope implements SerializableEntity { return !!(this.flags.and(GenericEnvelope.FLAG_HAS_SALT).toNumber()); } + hasAppOrDelegatedID() { + return !!(this.flags.and(GenericEnvelope.FLAG_HAS_APP_OR_DELEGATED_ID).toNumber()); + } + isTestnet() { return !!(this.flags.and(GenericEnvelope.FLAG_IS_TESTNET).toNumber()); } @@ -120,6 +130,10 @@ export class GenericEnvelope implements SerializableEntity { this.flags = this.flags.or(GenericEnvelope.FLAG_HAS_SALT); } + setHasAppOrDelegatedID() { + this.flags = this.flags.or(GenericEnvelope.FLAG_HAS_APP_OR_DELEGATED_ID); + } + setIsTestnet() { this.flags = this.flags.or(GenericEnvelope.FLAG_IS_TESTNET); } @@ -129,6 +143,7 @@ export class GenericEnvelope implements SerializableEntity { if (this.requestID) this.setHasRequestID(); if (this.createdAt) this.setHasCreatedAt(); if (this.salt) this.setHasSalt(); + if (this.appOrDelegatedID) this.setHasAppOrDelegatedID(); if (this.details && this.details.length > 1) this.setHasMultiDetails(); } @@ -164,6 +179,10 @@ export class GenericEnvelope implements SerializableEntity { length += saltLen; } + if (this.hasAppOrDelegatedID()) { + length += this.appOrDelegatedID.getByteLength(); + } + if (this.hasMultiDetails()) { length += varuint.encodingLength(this.details.length); @@ -194,6 +213,10 @@ export class GenericEnvelope implements SerializableEntity { writer.writeVarSlice(this.salt); } + if (this.hasAppOrDelegatedID()) { + writer.writeSlice(this.appOrDelegatedID.toBuffer()); + } + if (this.hasMultiDetails()) { writer.writeCompactSize(this.details.length); @@ -277,6 +300,12 @@ export class GenericEnvelope implements SerializableEntity { this.salt = reader.readVarSlice(); } + if (this.hasAppOrDelegatedID()) { + this.appOrDelegatedID = new CompactAddressObject(); + + reader.offset = this.appOrDelegatedID.fromBuffer(reader.buffer, reader.offset); + } + if (this.hasMultiDetails()) { this.details = []; @@ -317,6 +346,8 @@ export class GenericEnvelope implements SerializableEntity { signature: this.isSigned() ? this.signature.toJson() : undefined, requestid: this.requestID, createdat: this.hasCreatedAt() ? this.createdAt.toString() : undefined, + salt: this.hasSalt() ? this.salt.toString('hex') : undefined, + appOrDelegatedID: this.hasAppOrDelegatedID() ? this.appOrDelegatedID.toIAddress() : undefined, details: details }; } diff --git a/src/vdxf/classes/index.ts b/src/vdxf/classes/index.ts index 0d763520..017d15fc 100644 --- a/src/vdxf/classes/index.ts +++ b/src/vdxf/classes/index.ts @@ -29,7 +29,7 @@ export * from "./identity/IdentityUpdateResponseDetails"; export * from './ResponseURI'; export * from './request/GenericRequest'; export * from './response/GenericResponse'; -export * from './response/AppEncryptionResponseDetails' +export * from './appencryption/AppEncryptionResponseDetails' export * from './ordinals'; @@ -52,7 +52,7 @@ export * from './requestobjects/UserDataRequestDetails' export * from './login/AuthenticationRequestDetails' export * from './login/AuthenticationResponseDetails' export * from './requestobjects/ProvisionIdentityDetails' -export * from './requestobjects/AppEncryptionRequestDetails' +export * from './appencryption/AppEncryptionRequestDetails' export * from './requestobjects/UserSpecificDataPacketDetails' export * from './CompactAddressObject' export * from './VerifiableSignatureData' \ No newline at end of file diff --git a/src/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.ts b/src/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.ts index cc82f0fa..c87c7972 100644 --- a/src/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.ts +++ b/src/vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject.ts @@ -2,7 +2,7 @@ import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST } from "../../../constants/ordinals import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; -import { AppEncryptionRequestDetails, AppEncryptionRequestJson } from "../requestobjects/AppEncryptionRequestDetails"; +import { AppEncryptionRequestDetails, AppEncryptionRequestJson } from "../appencryption/AppEncryptionRequestDetails"; export class AppEncryptionRequestOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { data: AppEncryptionRequestDetails; diff --git a/src/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.ts b/src/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.ts index 11675b96..fc249c0e 100644 --- a/src/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.ts +++ b/src/vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject.ts @@ -2,7 +2,7 @@ import { VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE } from "../../../constants/ordinal import { SerializableDataEntity } from "../../../utils/types/SerializableEntity"; import { OrdinalVDXFObjectInterfaceTemplate, OrdinalVDXFObjectJsonTemplate } from "./OrdinalVDXFObject"; import { SerializableEntityOrdinalVDXFObject } from "./SerializableEntityOrdinalVDXFObject"; -import { AppEncryptionResponseDetails, AppEncryptionResponseDetailsJson } from "../response/AppEncryptionResponseDetails"; +import { AppEncryptionResponseDetails, AppEncryptionResponseDetailsJson } from "../appencryption/AppEncryptionResponseDetails"; export class AppEncryptionResponseOrdinalVDXFObject extends SerializableEntityOrdinalVDXFObject implements SerializableDataEntity { data: AppEncryptionResponseDetails; diff --git a/src/vdxf/classes/request/GenericRequest.ts b/src/vdxf/classes/request/GenericRequest.ts index 9f7974c4..40936d95 100644 --- a/src/vdxf/classes/request/GenericRequest.ts +++ b/src/vdxf/classes/request/GenericRequest.ts @@ -32,8 +32,10 @@ export class GenericRequest extends GenericEnvelope implements SerializableEntit static FLAG_MULTI_DETAILS = GenericEnvelope.FLAG_MULTI_DETAILS; static FLAG_IS_TESTNET = GenericEnvelope.FLAG_IS_TESTNET; static FLAG_HAS_SALT = GenericEnvelope.FLAG_HAS_SALT; - static FLAG_HAS_RESPONSE_URIS = new BN(64, 10); - static FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS = new BN(128, 10); + static FLAG_HAS_APP_OR_DELEGATED_ID = GenericEnvelope.FLAG_HAS_APP_OR_DELEGATED_ID; + + static FLAG_HAS_RESPONSE_URIS = new BN(128, 10); + static FLAG_HAS_ENCRYPT_RESPONSE_TO_ADDRESS = new BN(256, 10); constructor( envelope: GenericRequestInterface = { diff --git a/src/vdxf/classes/response/GenericResponse.ts b/src/vdxf/classes/response/GenericResponse.ts index d7145565..b6025667 100644 --- a/src/vdxf/classes/response/GenericResponse.ts +++ b/src/vdxf/classes/response/GenericResponse.ts @@ -5,9 +5,6 @@ import bufferutils from '../../../utils/bufferutils'; import { BigNumber } from '../../../utils/types/BigNumber'; import { EHashTypes } from '../../../pbaas/DataDescriptor'; import varuint from '../../../utils/varuint'; -import { GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY } from '../../keys'; -import base64url from 'base64url'; -import { DEEPLINK_PROTOCOL_URL_CURRENT_VERSION, DEEPLINK_PROTOCOL_URL_STRING } from '../../../constants/deeplink'; export type GenericResponseJson = GenericEnvelopeJson & { requesthash?: string, @@ -33,7 +30,8 @@ export class GenericResponse extends GenericEnvelope implements SerializableEnti static FLAG_MULTI_DETAILS = GenericEnvelope.FLAG_MULTI_DETAILS; static FLAG_IS_TESTNET = GenericEnvelope.FLAG_IS_TESTNET; static FLAG_HAS_SALT = GenericEnvelope.FLAG_HAS_SALT; - static FLAG_HAS_REQUEST_HASH = new BN(64, 10); + static FLAG_HAS_APP_OR_DELEGATED_ID = GenericEnvelope.FLAG_HAS_APP_OR_DELEGATED_ID; + static FLAG_HAS_REQUEST_HASH = new BN(128, 10); constructor( envelope: GenericResponseInterface = { From 1ae9055b35ac5bbb8e794e6018f3089f5a96b5b0 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 12 Dec 2025 11:26:04 +0100 Subject: [PATCH 100/123] Rename ResponseUri to ResponseURI --- src/vdxf/classes/{ResponseUri.ts => ResponseURI.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/vdxf/classes/{ResponseUri.ts => ResponseURI.ts} (100%) diff --git a/src/vdxf/classes/ResponseUri.ts b/src/vdxf/classes/ResponseURI.ts similarity index 100% rename from src/vdxf/classes/ResponseUri.ts rename to src/vdxf/classes/ResponseURI.ts From be54c37ac7946ecb5cabca4a0f90dbc244e0e339 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 12 Dec 2025 16:21:59 +0100 Subject: [PATCH 101/123] Add getIAddressKey to OrdinalVDXFObject and fix issue with unrecognized type --- .../classes/ordinals/OrdinalVDXFObject.d.ts | 3 +- .../classes/ordinals/OrdinalVDXFObject.js | 34 +++++++-- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 76 +++++++++++++++++-- .../classes/ordinals/OrdinalVDXFObject.ts | 30 ++++++-- 4 files changed, 120 insertions(+), 23 deletions(-) diff --git a/dist/vdxf/classes/ordinals/OrdinalVDXFObject.d.ts b/dist/vdxf/classes/ordinals/OrdinalVDXFObject.d.ts index 98da07c8..98e1c534 100644 --- a/dist/vdxf/classes/ordinals/OrdinalVDXFObject.d.ts +++ b/dist/vdxf/classes/ordinals/OrdinalVDXFObject.d.ts @@ -32,8 +32,9 @@ export declare class OrdinalVDXFObject implements SerializableEntity { constructor(request?: OrdinalVDXFObjectInterfaceTemplate); isDefinedByVdxfKey(): boolean; isDefinedByTextVdxfKey(): boolean; - isDefinedByCurrencyOrId(): boolean; + isDefinedByIDOrCurrencyFQN(): boolean; isDefinedByCustomKey(): boolean; + getIAddressKey(): string; getDataByteLength(): number; toDataBuffer(): Buffer; fromDataBuffer(buffer: Buffer): void; diff --git a/dist/vdxf/classes/ordinals/OrdinalVDXFObject.js b/dist/vdxf/classes/ordinals/OrdinalVDXFObject.js index a5c7853a..937472aa 100644 --- a/dist/vdxf/classes/ordinals/OrdinalVDXFObject.js +++ b/dist/vdxf/classes/ordinals/OrdinalVDXFObject.js @@ -33,7 +33,7 @@ class OrdinalVDXFObject { type: ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR }) { if (request.key) { - this.type = ordinals_1.VDXF_OBJECT_RESERVED_BYTE_I_ADDR; + this.type = request.type ? request.type : ordinals_1.VDXF_OBJECT_RESERVED_BYTE_I_ADDR; this.key = request.key; if (request.data) { this.data = request.data; @@ -58,11 +58,28 @@ class OrdinalVDXFObject { isDefinedByTextVdxfKey() { return this.type.eq(ordinals_1.VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING); } - isDefinedByCurrencyOrId() { + isDefinedByIDOrCurrencyFQN() { return this.type.eq(ordinals_1.VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY); } isDefinedByCustomKey() { - return this.isDefinedByCurrencyOrId() || this.isDefinedByTextVdxfKey() || this.isDefinedByVdxfKey(); + return this.isDefinedByIDOrCurrencyFQN() || this.isDefinedByTextVdxfKey() || this.isDefinedByVdxfKey(); + } + // Returns the I address vdxf key of this vdxf object + getIAddressKey() { + if (this.isDefinedByVdxfKey()) { + return this.key; + } + else if (this.isDefinedByTextVdxfKey()) { + return (0, address_1.getDataKey)(this.key).id; + } + else if (this.isDefinedByIDOrCurrencyFQN()) { + return (0, address_1.toIAddress)(this.key); + } + else if (OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.isRecognizedOrdinal(this.type.toNumber())) { + return OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.getVdxfKeyForOrdinal(this.type.toNumber()); + } + else + throw new Error("Could not get I address for ordinal VDXF object"); } getDataByteLength() { return 0; @@ -77,7 +94,7 @@ class OrdinalVDXFObject { if (this.isDefinedByVdxfKey()) { length += (0, address_1.fromBase58Check)(this.key).hash.length; } - else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { + else if (this.isDefinedByTextVdxfKey() || this.isDefinedByIDOrCurrencyFQN()) { const utf8Key = Buffer.from(this.key, 'utf8'); length += varuint_1.default.encodingLength(utf8Key.length); length += utf8Key.length; @@ -94,7 +111,7 @@ class OrdinalVDXFObject { if (this.isDefinedByVdxfKey()) { writer.writeSlice((0, address_1.fromBase58Check)(this.key).hash); } - else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { + else if (this.isDefinedByTextVdxfKey() || this.isDefinedByIDOrCurrencyFQN()) { writer.writeVarSlice(Buffer.from(this.key, 'utf8')); } writer.writeVarInt(this.version); @@ -114,7 +131,7 @@ class OrdinalVDXFObject { if (this.isDefinedByVdxfKey()) { this.key = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); } - else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { + else if (this.isDefinedByTextVdxfKey() || this.isDefinedByIDOrCurrencyFQN()) { this.key = reader.readVarSlice().toString('utf8'); } } @@ -152,7 +169,7 @@ class OrdinalVDXFObject { key = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); vdxfKey = key; } - else if (ord.isDefinedByTextVdxfKey() || ord.isDefinedByCurrencyOrId()) { + else if (ord.isDefinedByTextVdxfKey() || ord.isDefinedByIDOrCurrencyFQN()) { key = reader.readVarSlice().toString('utf8'); if (ord.isDefinedByTextVdxfKey()) { vdxfKey = (0, address_1.getDataKey)(key, undefined, rootSystemId).id; @@ -198,7 +215,8 @@ class GeneralTypeOrdinalVDXFObject extends OrdinalVDXFObject { static fromJson(details) { return new GeneralTypeOrdinalVDXFObject({ key: details.vdxfkey, - data: details.data ? Buffer.from(details.data, 'hex') : undefined + data: details.data ? Buffer.from(details.data, 'hex') : undefined, + type: details.type ? new bn_js_1.BN(details.type) : ordinals_1.VDXF_OBJECT_RESERVED_BYTE_I_ADDR }); } } diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 664edd68..34949474 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -33,7 +33,7 @@ import { } from '../../vdxf/classes'; import { DEFAULT_VERUS_CHAINID } from '../../constants/pbaas'; import { fromBase58Check } from '../../utils/address'; -import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_AUTHENTICATION_REQUEST, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE } from '../../constants/ordinals/ordinals'; +import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_AUTHENTICATION_REQUEST, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE, VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING, VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY } from '../../constants/ordinals/ordinals'; import { VerusPayInvoiceOrdinalVDXFObject } from '../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVDXFObject'; import { TEST_CHALLENGE_ID, TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, TEST_EXPIRYHEIGHT, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3, TEST_REQUESTID, TEST_SALT, TEST_SYSTEMID, TEST_TXID } from '../constants/fixtures'; import { ProvisionIdentityDetailsOrdinalVDXFObject } from '../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVDXFObject'; @@ -42,6 +42,7 @@ import { DataPacketResponse } from '../../vdxf/classes/datapacket/DataPacketResp import { VerifiableSignatureData } from '../../vdxf/classes/VerifiableSignatureData'; import { SaplingExtendedSpendingKey } from '../../pbaas/SaplingExtendedSpendingKey'; import { SaplingExtendedViewingKey } from '../../pbaas/SaplingExtendedViewingKey'; +import { VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from '../../vdxf'; // Helper function to create TransferDestination from address string function createCompactAddressObject(type: BigNumber, address: string): CompactAddressObject { @@ -104,19 +105,21 @@ describe('OrdinalVDXFObject and subclasses round-trip serialization', () => { return newObj as T; } - it('should serialize / deserialize a GeneralTypeOrdinalVDXFObject (opaque buffer) via buffer', () => { + it('should serialize / deserialize a GeneralTypeOrdinalVDXFObject (opaque buffer) via buffer with I address key', () => { const sample = Buffer.from('deadbeef', 'hex'); - const obj = new GeneralTypeOrdinalVDXFObject({ data: sample, key: DEFAULT_VERUS_CHAINID }); + const obj = new GeneralTypeOrdinalVDXFObject({ data: sample, key: VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid }); // check some properties expect(obj.isDefinedByVdxfKey()).toBe(true); + expect(obj.getIAddressKey()).toBe(VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid); expect(obj.data).toEqual(sample); - expect(obj.key).toEqual(DEFAULT_VERUS_CHAINID); + expect(obj.key).toEqual(VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid); const round = roundTripBuffer(obj); expect(round).toBeInstanceOf(GeneralTypeOrdinalVDXFObject); expect((round as GeneralTypeOrdinalVDXFObject).data).toEqual(sample); - expect(((round as GeneralTypeOrdinalVDXFObject).key)).toEqual(DEFAULT_VERUS_CHAINID); + expect((round as GeneralTypeOrdinalVDXFObject).getIAddressKey()).toEqual(VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid); + expect(((round as GeneralTypeOrdinalVDXFObject).key)).toEqual(VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid); // Their JSON should match hex const j = obj.toJson(); @@ -124,7 +127,68 @@ describe('OrdinalVDXFObject and subclasses round-trip serialization', () => { const roundJ = roundTripJson(obj); expect(roundJ).toBeInstanceOf(GeneralTypeOrdinalVDXFObject); expect((roundJ as GeneralTypeOrdinalVDXFObject).data).toEqual(sample); - expect(((roundJ as GeneralTypeOrdinalVDXFObject).key)).toEqual(DEFAULT_VERUS_CHAINID); + expect((roundJ as GeneralTypeOrdinalVDXFObject).getIAddressKey()).toEqual(VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid); + expect(((roundJ as GeneralTypeOrdinalVDXFObject).key)).toEqual(VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid); + }); + + it('should serialize / deserialize a GeneralTypeOrdinalVDXFObject (opaque buffer) via buffer with vdxfkey text key', () => { + const sample = Buffer.from('deadbeef', 'hex'); + const obj = new GeneralTypeOrdinalVDXFObject({ + data: sample, + key: VERUSPAY_INVOICE_DETAILS_VDXF_KEY.qualifiedname.name, + type: VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING + }); + + // check some properties + expect(obj.isDefinedByTextVdxfKey()).toBe(true); + expect(obj.getIAddressKey()).toBe(VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid); + expect(obj.data).toEqual(sample); + expect(obj.key).toEqual(VERUSPAY_INVOICE_DETAILS_VDXF_KEY.qualifiedname.name); + + const round = roundTripBuffer(obj); + expect(round).toBeInstanceOf(GeneralTypeOrdinalVDXFObject); + expect((round as GeneralTypeOrdinalVDXFObject).data).toEqual(sample); + expect((round as GeneralTypeOrdinalVDXFObject).getIAddressKey()).toEqual(VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid); + expect(((round as GeneralTypeOrdinalVDXFObject).key)).toEqual(VERUSPAY_INVOICE_DETAILS_VDXF_KEY.qualifiedname.name); + + // Their JSON should match hex + const j = obj.toJson(); + expect(j.data).toEqual(sample.toString('hex')); + const roundJ = roundTripJson(obj); + expect(roundJ).toBeInstanceOf(GeneralTypeOrdinalVDXFObject); + expect((roundJ as GeneralTypeOrdinalVDXFObject).data).toEqual(sample); + expect((roundJ as GeneralTypeOrdinalVDXFObject).getIAddressKey()).toEqual(VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid); + expect(((roundJ as GeneralTypeOrdinalVDXFObject).key)).toEqual(VERUSPAY_INVOICE_DETAILS_VDXF_KEY.qualifiedname.name); + }); + + it('should serialize / deserialize a GeneralTypeOrdinalVDXFObject (opaque buffer) via buffer with FQN key', () => { + const sample = Buffer.from('deadbeef', 'hex'); + const obj = new GeneralTypeOrdinalVDXFObject({ + data: sample, + key: "service.VRSCTEST", + type: VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY + }); + + // check some properties + expect(obj.isDefinedByIDOrCurrencyFQN()).toBe(true); + expect(obj.getIAddressKey()).toBe("iFZC7A1HnnJGwBmoPjX3mG37RKbjZZLPhm"); + expect(obj.data).toEqual(sample); + expect(obj.key).toEqual("service.VRSCTEST"); + + const round = roundTripBuffer(obj); + expect(round).toBeInstanceOf(GeneralTypeOrdinalVDXFObject); + expect((round as GeneralTypeOrdinalVDXFObject).data).toEqual(sample); + expect((round as GeneralTypeOrdinalVDXFObject).getIAddressKey()).toEqual("iFZC7A1HnnJGwBmoPjX3mG37RKbjZZLPhm"); + expect(((round as GeneralTypeOrdinalVDXFObject).key)).toEqual("service.VRSCTEST"); + + // Their JSON should match hex + const j = obj.toJson(); + expect(j.data).toEqual(sample.toString('hex')); + const roundJ = roundTripJson(obj); + expect(roundJ).toBeInstanceOf(GeneralTypeOrdinalVDXFObject); + expect((roundJ as GeneralTypeOrdinalVDXFObject).data).toEqual(sample); + expect((roundJ as GeneralTypeOrdinalVDXFObject).getIAddressKey()).toEqual("iFZC7A1HnnJGwBmoPjX3mG37RKbjZZLPhm"); + expect(((roundJ as GeneralTypeOrdinalVDXFObject).key)).toEqual("service.VRSCTEST"); }); it('should serialize / deserialize a DataDescriptorOrdinalVDXFObject via buffer', () => { diff --git a/src/vdxf/classes/ordinals/OrdinalVDXFObject.ts b/src/vdxf/classes/ordinals/OrdinalVDXFObject.ts index 0256453c..2a9b3877 100644 --- a/src/vdxf/classes/ordinals/OrdinalVDXFObject.ts +++ b/src/vdxf/classes/ordinals/OrdinalVDXFObject.ts @@ -73,7 +73,7 @@ export class OrdinalVDXFObject implements SerializableEntity { } ) { if (request.key) { - this.type = VDXF_OBJECT_RESERVED_BYTE_I_ADDR; + this.type = request.type ? request.type : VDXF_OBJECT_RESERVED_BYTE_I_ADDR; this.key = request.key; if (request.data) { @@ -97,12 +97,25 @@ export class OrdinalVDXFObject implements SerializableEntity { return this.type.eq(VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING); } - isDefinedByCurrencyOrId() { + isDefinedByIDOrCurrencyFQN() { return this.type.eq(VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY); } isDefinedByCustomKey() { - return this.isDefinedByCurrencyOrId() || this.isDefinedByTextVdxfKey() || this.isDefinedByVdxfKey(); + return this.isDefinedByIDOrCurrencyFQN() || this.isDefinedByTextVdxfKey() || this.isDefinedByVdxfKey(); + } + + // Returns the I address vdxf key of this vdxf object + getIAddressKey(): string { + if (this.isDefinedByVdxfKey()) { + return this.key; + } else if (this.isDefinedByTextVdxfKey()) { + return getDataKey(this.key).id; + } else if (this.isDefinedByIDOrCurrencyFQN()) { + return toIAddress(this.key); + } else if (OrdinalVDXFObjectOrdinalMap.isRecognizedOrdinal(this.type.toNumber())) { + return OrdinalVDXFObjectOrdinalMap.getVdxfKeyForOrdinal(this.type.toNumber()) + } else throw new Error("Could not get I address for ordinal VDXF object") } getDataByteLength(): number { @@ -122,7 +135,7 @@ export class OrdinalVDXFObject implements SerializableEntity { if (this.isDefinedByVdxfKey()) { length += fromBase58Check(this.key).hash.length; - } else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { + } else if (this.isDefinedByTextVdxfKey() || this.isDefinedByIDOrCurrencyFQN()) { const utf8Key = Buffer.from(this.key, 'utf8'); length += varuint.encodingLength(utf8Key.length); @@ -148,7 +161,7 @@ export class OrdinalVDXFObject implements SerializableEntity { if (this.isDefinedByVdxfKey()) { writer.writeSlice(fromBase58Check(this.key).hash); - } else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { + } else if (this.isDefinedByTextVdxfKey() || this.isDefinedByIDOrCurrencyFQN()) { writer.writeVarSlice(Buffer.from(this.key, 'utf8')); } @@ -171,7 +184,7 @@ export class OrdinalVDXFObject implements SerializableEntity { if (!key) { if (this.isDefinedByVdxfKey()) { this.key = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); - } else if (this.isDefinedByTextVdxfKey() || this.isDefinedByCurrencyOrId()) { + } else if (this.isDefinedByTextVdxfKey() || this.isDefinedByIDOrCurrencyFQN()) { this.key = reader.readVarSlice().toString('utf8'); } } else { @@ -222,7 +235,7 @@ export class OrdinalVDXFObject implements SerializableEntity { if (ord.isDefinedByVdxfKey()) { key = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); vdxfKey = key; - } else if (ord.isDefinedByTextVdxfKey() || ord.isDefinedByCurrencyOrId()) { + } else if (ord.isDefinedByTextVdxfKey() || ord.isDefinedByIDOrCurrencyFQN()) { key = reader.readVarSlice().toString('utf8'); if (ord.isDefinedByTextVdxfKey()) { @@ -276,7 +289,8 @@ export class GeneralTypeOrdinalVDXFObject extends OrdinalVDXFObject implements S static fromJson(details: OrdinalVDXFObjectJson): GeneralTypeOrdinalVDXFObject { return new GeneralTypeOrdinalVDXFObject({ key: details.vdxfkey, - data: details.data ? Buffer.from(details.data as string, 'hex') : undefined + data: details.data ? Buffer.from(details.data as string, 'hex') : undefined, + type: details.type ? new BN(details.type) : VDXF_OBJECT_RESERVED_BYTE_I_ADDR }); } } \ No newline at end of file From 5f23048f91cf13c26d3c547d15040d9245d9789c Mon Sep 17 00:00:00 2001 From: michaeltout Date: Mon, 15 Dec 2025 16:08:40 +0100 Subject: [PATCH 102/123] Fix keys for non response/request types not to include "detail" --- dist/constants/ordinals/register.js | 12 ++++++--- dist/vdxf/keys.d.ts | 6 ++--- dist/vdxf/keys.js | 42 +++++++++-------------------- src/constants/ordinals/register.ts | 14 ++++++---- src/vdxf/keys.ts | 40 +++++++-------------------- 5 files changed, 41 insertions(+), 73 deletions(-) diff --git a/dist/constants/ordinals/register.js b/dist/constants/ordinals/register.js index 6707ce64..22b57de3 100644 --- a/dist/constants/ordinals/register.js +++ b/dist/constants/ordinals/register.js @@ -16,13 +16,17 @@ const ProvisionIdentityDetailsOrdinalVDXFObject_1 = require("../../vdxf/classes/ const VerusPayInvoiceOrdinalVDXFObject_1 = require("../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVDXFObject"); const ordinals_1 = require("./ordinals"); const AppEncryptionResponseOrdinalVDXFObject_1 = require("../../vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject"); +// This is where all ordinals are currently registered for ordinal VDXF objects. Standard naming convention for the VDXF keys is to +// include the word "response" at the end if it is a response and "request" at the end if it is a request. In case it isn't a request +// (an object expecting a response) or a response, you can use the world "details" at the end, but best not to mix request + details +// or response + details const registerOrdinals = () => { OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), vdxf_1.DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVDXFObject_1.DataDescriptorOrdinalVDXFObject, false); OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), vdxf_1.VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid, VerusPayInvoiceOrdinalVDXFObject_1.VerusPayInvoiceOrdinalVDXFObject, false); - OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_AUTHENTICATION_REQUEST.toNumber(), vdxf_1.AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY.vdxfid, AuthenticationRequestOrdinalVDXFObject_1.AuthenticationRequestOrdinalVDXFObject, false); - OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_AUTHENTICATION_RESPONSE.toNumber(), vdxf_1.AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY.vdxfid, AuthenticationResponseOrdinalVDXFObject_1.AuthenticationResponseOrdinalVDXFObject, false); - OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), vdxf_1.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVDXFObject_1.IdentityUpdateRequestOrdinalVDXFObject, false); - OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), vdxf_1.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVDXFObject_1.IdentityUpdateResponseOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_AUTHENTICATION_REQUEST.toNumber(), vdxf_1.AUTHENTICATION_REQUEST_VDXF_KEY.vdxfid, AuthenticationRequestOrdinalVDXFObject_1.AuthenticationRequestOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_AUTHENTICATION_RESPONSE.toNumber(), vdxf_1.AUTHENTICATION_RESPONSE_VDXF_KEY.vdxfid, AuthenticationResponseOrdinalVDXFObject_1.AuthenticationResponseOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), vdxf_1.IDENTITY_UPDATE_REQUEST_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVDXFObject_1.IdentityUpdateRequestOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), vdxf_1.IDENTITY_UPDATE_RESPONSE_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVDXFObject_1.IdentityUpdateResponseOrdinalVDXFObject, false); OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), vdxf_1.PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVDXFObject_1.ProvisionIdentityDetailsOrdinalVDXFObject, false); OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST.toNumber(), vdxf_1.APP_ENCRYPTION_REQUEST_VDXF_KEY.vdxfid, AppEncryptionRequestOrdinalVDXFObject_1.AppEncryptionRequestOrdinalVDXFObject, false); OrdinalVDXFObjectOrdinalMap_1.OrdinalVDXFObjectOrdinalMap.registerOrdinal(ordinals_1.VDXF_ORDINAL_DATA_RESPONSE.toNumber(), vdxf_1.DATA_RESPONSE_VDXF_KEY.vdxfid, DataPacketResponseOrdinalVDXFObject_1.DataPacketResponseOrdinalVDXFObject, false); diff --git a/dist/vdxf/keys.d.ts b/dist/vdxf/keys.d.ts index ff1b2283..4ebb4ffd 100644 --- a/dist/vdxf/keys.d.ts +++ b/dist/vdxf/keys.d.ts @@ -14,9 +14,7 @@ export declare const VERUSPAY_INVOICE_VDXF_KEY: VDXFKeyInterface; export declare const VERUSPAY_INVOICE_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY: VDXFKeyInterface; export declare const IDENTITY_UPDATE_REQUEST_VDXF_KEY: VDXFKeyInterface; -export declare const IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const IDENTITY_UPDATE_RESPONSE_VDXF_KEY: VDXFKeyInterface; -export declare const IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const IDENTITY_AUTH_SIG_VDXF_KEY: VDXFKeyInterface; export declare const LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY: VDXFKeyInterface; export declare const LOGIN_CONSENT_REQUEST_VDXF_KEY: VDXFKeyInterface; @@ -76,8 +74,8 @@ export declare const IDENTITY_CREDENTIALS: VDXFKeyInterface; export declare const IDENTITY_CREDENTIAL_PLAINLOGIN: VDXFKeyInterface; export declare const IDENTITY_CREDENTIAL_USERNAME: VDXFKeyInterface; export declare const ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS: VDXFKeyInterface; -export declare const AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface; -export declare const AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY: VDXFKeyInterface; +export declare const AUTHENTICATION_REQUEST_VDXF_KEY: VDXFKeyInterface; +export declare const AUTHENTICATION_RESPONSE_VDXF_KEY: VDXFKeyInterface; export declare const PROVISION_IDENTITY_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const APP_ENCRYPTION_REQUEST_VDXF_KEY: VDXFKeyInterface; export declare const DATA_RESPONSE_VDXF_KEY: VDXFKeyInterface; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index 09b1bcb6..837d650e 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; -exports.APP_ENCRYPTION_RESPONSE_VDXF_KEY = exports.USER_SPECIFIC_DATA_PACKET_VDXF_KEY = exports.USER_DATA_REQUEST_VDXF_KEY = exports.DATA_RESPONSE_VDXF_KEY = exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY = exports.AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; +exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; +exports.APP_ENCRYPTION_RESPONSE_VDXF_KEY = exports.USER_SPECIFIC_DATA_PACKET_VDXF_KEY = exports.USER_DATA_REQUEST_VDXF_KEY = exports.DATA_RESPONSE_VDXF_KEY = exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.AUTHENTICATION_RESPONSE_VDXF_KEY = exports.AUTHENTICATION_REQUEST_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = void 0; exports.VERUSPAY_INVOICE_VDXF_KEY = { hash160result: "628efc28c2e2d40050e1a9de7a93e7ddf2aa0076", indexid: "xK4aRumetZg2ecW4Z45qdDBH769xxnaiEH", @@ -38,15 +38,6 @@ exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = { }, "vdxfid": "iQJAPr53wZnjLyGpGdjiNZhSwSTXSfyoYy" }; -exports.IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY = { - "hash160result": "4cedf62ce2a66dbb228ba8abe7a10bbffe35db93", - "indexid": "xMnRq7oBMqxzdJqzFniFTtfKyf6qh3BVPs", - "qualifiedname": { - "name": "vrsc::identity.update.request.details", - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" - }, - "vdxfid": "iGxKNKN6WXkL18xxQ746VW8nx15prPMP7L" -}; exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = { "hash160result": "667802c74fbf3dd3a9693bb9aec9bef1250b2b14", "indexid": "xA9GyS1bt1WGERamNVqVrhuGvGJeYuWyNk", @@ -56,15 +47,6 @@ exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = { }, "vdxfid": "i5KAWdaX2hHbcFhjWpBLtKNjtcHdeQFjuX" }; -exports.IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY = { - "hash160result": "4f9a304beccceaa5692247c0d5789814a24f66be", - "indexid": "xRfNr2GNGNEnckSRSPZe4TgbZRKqZfLxqk", - "qualifiedname": { - "name": "vrsc::identity.update.response.details", - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" - }, - "vdxfid": "iLqGPDqHR427zaZPahuV65A4XmJpiqb9eF" -}; exports.IDENTITY_AUTH_SIG_VDXF_KEY = { vdxfid: "iPi1DPgDDu7hP1mAp5xJ8rHBWwXSzc6yA8", hash160result: "06d4b963da3dcf17f00905b0720f7a4c241defdd", @@ -552,23 +534,23 @@ exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = { "name": "vrsc::attestation.view.request.multipleattestations" } }; -exports.AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY = { - "hash160result": "ba8f92aeb1d135d6a64366af727ce0435a03ef45", - "indexid": "xEgQr2xov3Sa5XCaWYF67mgqz2swZXpUk3", +exports.AUTHENTICATION_REQUEST_VDXF_KEY = { + "hash160result": "d989dfa450a2bcd597fff2409a62c00640644cba", + "indexid": "xRHh6LdgnyNjv5vhoUYbdPaDE5b1Asnykb", "qualifiedname": { - "name": "vrsc::identity.authentication.request.details", + "name": "vrsc::identity.authentication.request", "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, - "vdxfid": "i9rJPEXj4jDuTMKYeraw9PAJxNrvaRM5fu" + "vdxfid": "iLTadYCbwfA5Hv3fwntSf13gCRZzF8Qedv" }; -exports.AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY = { - "hash160result": "32bee6633cbf8bb8ceff189a5c51abb16615e033", - "indexid": "xD2voG9dsSKNJXcW6jDvJ7KwGbvWqT1jXL", +exports.AUTHENTICATION_RESPONSE_VDXF_KEY = { + "hash160result": "70db17c46d4aebbf0023ac0e23dd3d85c196eee8", + "indexid": "xVYGUq1veNvX7bQMPkysn77RwfXbLcjhnJ", "qualifiedname": { - "name": "vrsc::identity.authentication.response.details", + "name": "vrsc::identity.authentication.response", "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, - "vdxfid": "i8CpLTiZ286hgMjUF3ZmKioQEwuVytVpYr" + "vdxfid": "iQiA22aqo4hrVRXKY5Kioiatv1WaSL2EEw" }; exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = { "hash160result": "1ed843dce0f4d9a2bbb839994e3927807eb1878c", diff --git a/src/constants/ordinals/register.ts b/src/constants/ordinals/register.ts index ad4e381b..534bdf2e 100644 --- a/src/constants/ordinals/register.ts +++ b/src/constants/ordinals/register.ts @@ -1,4 +1,4 @@ -import { APP_ENCRYPTION_REQUEST_VDXF_KEY, APP_ENCRYPTION_RESPONSE_VDXF_KEY, DATA_RESPONSE_VDXF_KEY, DATA_TYPE_OBJECT_DATADESCRIPTOR, IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY, AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY, AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, USER_DATA_REQUEST_VDXF_KEY, USER_SPECIFIC_DATA_PACKET_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from "../../vdxf"; +import { APP_ENCRYPTION_REQUEST_VDXF_KEY, APP_ENCRYPTION_RESPONSE_VDXF_KEY, DATA_RESPONSE_VDXF_KEY, DATA_TYPE_OBJECT_DATADESCRIPTOR, AUTHENTICATION_REQUEST_VDXF_KEY, AUTHENTICATION_RESPONSE_VDXF_KEY, PROVISION_IDENTITY_DETAILS_VDXF_KEY, USER_DATA_REQUEST_VDXF_KEY, USER_SPECIFIC_DATA_PACKET_VDXF_KEY, VERUSPAY_INVOICE_DETAILS_VDXF_KEY, IDENTITY_UPDATE_RESPONSE_VDXF_KEY, IDENTITY_UPDATE_REQUEST_VDXF_KEY } from "../../vdxf"; import { AppEncryptionRequestOrdinalVDXFObject } from "../../vdxf/classes/ordinals/AppEncryptionRequestOrdinalVDXFObject"; import { DataDescriptorOrdinalVDXFObject } from "../../vdxf/classes/ordinals/DataDescriptorOrdinalVDXFObject"; import { DataPacketResponseOrdinalVDXFObject } from "../../vdxf/classes/ordinals/DataPacketResponseOrdinalVDXFObject"; @@ -14,13 +14,17 @@ import { VerusPayInvoiceOrdinalVDXFObject } from "../../vdxf/classes/ordinals/Ve import { VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_DATA_RESPONSE, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_AUTHENTICATION_REQUEST, VDXF_ORDINAL_AUTHENTICATION_RESPONSE, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_USER_DATA_REQUEST, VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET, VDXF_ORDINAL_VERUSPAY_INVOICE } from "./ordinals"; import { AppEncryptionResponseOrdinalVDXFObject } from "../../vdxf/classes/ordinals/AppEncryptionResponseOrdinalVDXFObject"; +// This is where all ordinals are currently registered for ordinal VDXF objects. Standard naming convention for the VDXF keys is to +// include the word "response" at the end if it is a response and "request" at the end if it is a request. In case it isn't a request +// (an object expecting a response) or a response, you can use the world "details" at the end, but best not to mix request + details +// or response + details export const registerOrdinals = () => { OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_DESCRIPTOR.toNumber(), DATA_TYPE_OBJECT_DATADESCRIPTOR.vdxfid, DataDescriptorOrdinalVDXFObject, false); OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_VERUSPAY_INVOICE.toNumber(), VERUSPAY_INVOICE_DETAILS_VDXF_KEY.vdxfid, VerusPayInvoiceOrdinalVDXFObject, false); - OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_AUTHENTICATION_REQUEST.toNumber(), AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY.vdxfid, AuthenticationRequestOrdinalVDXFObject, false); - OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_AUTHENTICATION_RESPONSE.toNumber(), AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY.vdxfid, AuthenticationResponseOrdinalVDXFObject, false); - OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVDXFObject, false); - OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_AUTHENTICATION_REQUEST.toNumber(), AUTHENTICATION_REQUEST_VDXF_KEY.vdxfid, AuthenticationRequestOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_AUTHENTICATION_RESPONSE.toNumber(), AUTHENTICATION_RESPONSE_VDXF_KEY.vdxfid, AuthenticationResponseOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST.toNumber(), IDENTITY_UPDATE_REQUEST_VDXF_KEY.vdxfid, IdentityUpdateRequestOrdinalVDXFObject, false); + OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE.toNumber(), IDENTITY_UPDATE_RESPONSE_VDXF_KEY.vdxfid, IdentityUpdateResponseOrdinalVDXFObject, false); OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS.toNumber(), PROVISION_IDENTITY_DETAILS_VDXF_KEY.vdxfid, ProvisionIdentityDetailsOrdinalVDXFObject, false); OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_APP_ENCRYPTION_REQUEST.toNumber(), APP_ENCRYPTION_REQUEST_VDXF_KEY.vdxfid, AppEncryptionRequestOrdinalVDXFObject, false); OrdinalVDXFObjectOrdinalMap.registerOrdinal(VDXF_ORDINAL_DATA_RESPONSE.toNumber(), DATA_RESPONSE_VDXF_KEY.vdxfid, DataPacketResponseOrdinalVDXFObject, false); diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index bace6ef2..af9c6f5a 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -51,16 +51,6 @@ export const IDENTITY_UPDATE_REQUEST_VDXF_KEY: VDXFKeyInterface = { "vdxfid": "iQJAPr53wZnjLyGpGdjiNZhSwSTXSfyoYy" }; -export const IDENTITY_UPDATE_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface = { - "hash160result": "4cedf62ce2a66dbb228ba8abe7a10bbffe35db93", - "indexid": "xMnRq7oBMqxzdJqzFniFTtfKyf6qh3BVPs", - "qualifiedname": { - "name": "vrsc::identity.update.request.details", - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" - }, - "vdxfid": "iGxKNKN6WXkL18xxQ746VW8nx15prPMP7L" -} - export const IDENTITY_UPDATE_RESPONSE_VDXF_KEY: VDXFKeyInterface = { "hash160result": "667802c74fbf3dd3a9693bb9aec9bef1250b2b14", "indexid": "xA9GyS1bt1WGERamNVqVrhuGvGJeYuWyNk", @@ -71,16 +61,6 @@ export const IDENTITY_UPDATE_RESPONSE_VDXF_KEY: VDXFKeyInterface = { "vdxfid": "i5KAWdaX2hHbcFhjWpBLtKNjtcHdeQFjuX" }; -export const IDENTITY_UPDATE_RESPONSE_DETAILS_VDXF_KEY: VDXFKeyInterface = { - "hash160result": "4f9a304beccceaa5692247c0d5789814a24f66be", - "indexid": "xRfNr2GNGNEnckSRSPZe4TgbZRKqZfLxqk", - "qualifiedname": { - "name": "vrsc::identity.update.response.details", - "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" - }, - "vdxfid": "iLqGPDqHR427zaZPahuV65A4XmJpiqb9eF" -} - export const IDENTITY_AUTH_SIG_VDXF_KEY: VDXFKeyInterface = { vdxfid: "iPi1DPgDDu7hP1mAp5xJ8rHBWwXSzc6yA8", hash160result: "06d4b963da3dcf17f00905b0720f7a4c241defdd", @@ -637,24 +617,24 @@ export const ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS: VDXFKeyInterface = { } } -export const AUTHENTICATION_REQUEST_DETAILS_VDXF_KEY: VDXFKeyInterface = { - "hash160result": "ba8f92aeb1d135d6a64366af727ce0435a03ef45", - "indexid": "xEgQr2xov3Sa5XCaWYF67mgqz2swZXpUk3", +export const AUTHENTICATION_REQUEST_VDXF_KEY: VDXFKeyInterface = { + "hash160result": "d989dfa450a2bcd597fff2409a62c00640644cba", + "indexid": "xRHh6LdgnyNjv5vhoUYbdPaDE5b1Asnykb", "qualifiedname": { - "name": "vrsc::identity.authentication.request.details", + "name": "vrsc::identity.authentication.request", "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, - "vdxfid": "i9rJPEXj4jDuTMKYeraw9PAJxNrvaRM5fu" + "vdxfid": "iLTadYCbwfA5Hv3fwntSf13gCRZzF8Qedv" } -export const AUTHENTICATION_RESPONSE_DETAILS_VDXF_KEY: VDXFKeyInterface = { - "hash160result": "32bee6633cbf8bb8ceff189a5c51abb16615e033", - "indexid": "xD2voG9dsSKNJXcW6jDvJ7KwGbvWqT1jXL", +export const AUTHENTICATION_RESPONSE_VDXF_KEY: VDXFKeyInterface = { + "hash160result": "70db17c46d4aebbf0023ac0e23dd3d85c196eee8", + "indexid": "xVYGUq1veNvX7bQMPkysn77RwfXbLcjhnJ", "qualifiedname": { - "name": "vrsc::identity.authentication.response.details", + "name": "vrsc::identity.authentication.response", "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" }, - "vdxfid": "i8CpLTiZ286hgMjUF3ZmKioQEwuVytVpYr" + "vdxfid": "iQiA22aqo4hrVRXKY5Kioiatv1WaSL2EEw" } export const PROVISION_IDENTITY_DETAILS_VDXF_KEY: VDXFKeyInterface = { From d75bb207c15b77e72e9d4fa61542db2991086ff9 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Wed, 17 Dec 2025 17:31:26 +0100 Subject: [PATCH 103/123] Add generic request deeplink vdxf key --- dist/vdxf/keys.d.ts | 1 + dist/vdxf/keys.js | 13 +++++++++++-- src/vdxf/keys.ts | 10 ++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/dist/vdxf/keys.d.ts b/dist/vdxf/keys.d.ts index 4ebb4ffd..d52d9b36 100644 --- a/dist/vdxf/keys.d.ts +++ b/dist/vdxf/keys.d.ts @@ -13,6 +13,7 @@ export interface VDXFKeyInterface { export declare const VERUSPAY_INVOICE_VDXF_KEY: VDXFKeyInterface; export declare const VERUSPAY_INVOICE_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY: VDXFKeyInterface; +export declare const GENERIC_REQUEST_DEEPLINK_VDXF_KEY: VDXFKeyInterface; export declare const IDENTITY_UPDATE_REQUEST_VDXF_KEY: VDXFKeyInterface; export declare const IDENTITY_UPDATE_RESPONSE_VDXF_KEY: VDXFKeyInterface; export declare const IDENTITY_AUTH_SIG_VDXF_KEY: VDXFKeyInterface; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index 837d650e..53dab5ed 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; -exports.APP_ENCRYPTION_RESPONSE_VDXF_KEY = exports.USER_SPECIFIC_DATA_PACKET_VDXF_KEY = exports.USER_DATA_REQUEST_VDXF_KEY = exports.DATA_RESPONSE_VDXF_KEY = exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.AUTHENTICATION_RESPONSE_VDXF_KEY = exports.AUTHENTICATION_REQUEST_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = void 0; +exports.ATTESTATION_NAME = exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = exports.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; +exports.APP_ENCRYPTION_RESPONSE_VDXF_KEY = exports.USER_SPECIFIC_DATA_PACKET_VDXF_KEY = exports.USER_DATA_REQUEST_VDXF_KEY = exports.DATA_RESPONSE_VDXF_KEY = exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.AUTHENTICATION_RESPONSE_VDXF_KEY = exports.AUTHENTICATION_REQUEST_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = void 0; exports.VERUSPAY_INVOICE_VDXF_KEY = { hash160result: "628efc28c2e2d40050e1a9de7a93e7ddf2aa0076", indexid: "xK4aRumetZg2ecW4Z45qdDBH769xxnaiEH", @@ -29,6 +29,15 @@ exports.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY = { }, "vdxfid": "iLWiYHVjoTyoeKwji1B5vRT9Xr1aA9yyvX" }; +exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = { + "hash160result": "bc05c4263031cc791296fa8bd15553ccef3de4ba", + "indexid": "xRLq15vpenCUGVpmZgqEtoygZW2b32oVgX", + "qualifiedname": { + "name": "vrsc::request.generic", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iLWiYHVjoTyoeKwji1B5vRT9Xr1aA9yyvX" +}; exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = { "hash160result": "0bcef8b06c211828d16dc038e4d34d097aeb64e4", "indexid": "xV8GreW8nt1Py99r8KPsLxDyy6UYJQvXja", diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index af9c6f5a..25ff2205 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -41,6 +41,16 @@ export const GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY: VDXFKeyInterface = { "vdxfid": "iLWiYHVjoTyoeKwji1B5vRT9Xr1aA9yyvX" } +export const GENERIC_REQUEST_DEEPLINK_VDXF_KEY: VDXFKeyInterface = { + "hash160result": "bc05c4263031cc791296fa8bd15553ccef3de4ba", + "indexid": "xRLq15vpenCUGVpmZgqEtoygZW2b32oVgX", + "qualifiedname": { + "name": "vrsc::request.generic", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iLWiYHVjoTyoeKwji1B5vRT9Xr1aA9yyvX" +} + export const IDENTITY_UPDATE_REQUEST_VDXF_KEY: VDXFKeyInterface = { "hash160result": "0bcef8b06c211828d16dc038e4d34d097aeb64e4", "indexid": "xV8GreW8nt1Py99r8KPsLxDyy6UYJQvXja", From 2f2fa8055e9462e779b84bc4272aba86d404d43a Mon Sep 17 00:00:00 2001 From: michaeltout Date: Thu, 8 Jan 2026 17:35:23 +0100 Subject: [PATCH 104/123] Fix JSON capitalization in AuthenticationRequestDetails --- .../classes/login/AuthenticationRequestDetails.d.ts | 4 ++-- .../classes/login/AuthenticationRequestDetails.js | 8 ++++---- .../classes/login/AuthenticationRequestDetails.ts | 13 ++++++------- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts b/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts index e8842275..287aeec9 100644 --- a/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts +++ b/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts @@ -37,8 +37,8 @@ export interface AuthenticationRequestDetailsJson { version: number; requestid: string; flags: number; - recipientConstraints?: Array; - responseURIs?: Array; + recipientconstraints?: Array; + responseuris?: Array; expirytime?: number; } export declare class AuthenticationRequestDetails implements SerializableEntity { diff --git a/dist/vdxf/classes/login/AuthenticationRequestDetails.js b/dist/vdxf/classes/login/AuthenticationRequestDetails.js index 294a6503..3775f667 100644 --- a/dist/vdxf/classes/login/AuthenticationRequestDetails.js +++ b/dist/vdxf/classes/login/AuthenticationRequestDetails.js @@ -148,12 +148,12 @@ class AuthenticationRequestDetails { loginDetails.version = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.version) || 0); loginDetails.flags = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.flags) || 0); loginDetails.requestID = data.requestid; - if (loginDetails.hasRecipentConstraints() && data.recipientConstraints) { - loginDetails.recipientConstraints = data.recipientConstraints.map(p => ({ type: p.type, + if (loginDetails.hasRecipentConstraints() && data.recipientconstraints) { + loginDetails.recipientConstraints = data.recipientconstraints.map(p => ({ type: p.type, identity: CompactAddressObject_1.CompactAddressObject.fromJson(p.identity) })); } - if (loginDetails.hasResponseURIs() && data.responseURIs) { - loginDetails.responseURIs = data.responseURIs.map(c => ResponseURI_1.ResponseURI.fromJson(c)); + if (loginDetails.hasResponseURIs() && data.responseuris) { + loginDetails.responseURIs = data.responseuris.map(c => ResponseURI_1.ResponseURI.fromJson(c)); } if (loginDetails.hasExpiryTime() && data.expirytime) { loginDetails.expiryTime = new bn_js_1.BN(data.expirytime); diff --git a/src/vdxf/classes/login/AuthenticationRequestDetails.ts b/src/vdxf/classes/login/AuthenticationRequestDetails.ts index 943747ee..b8513cb7 100644 --- a/src/vdxf/classes/login/AuthenticationRequestDetails.ts +++ b/src/vdxf/classes/login/AuthenticationRequestDetails.ts @@ -48,8 +48,8 @@ export interface AuthenticationRequestDetailsJson { version: number; requestid: string; flags: number; - recipientConstraints?: Array; - responseURIs?: Array; + recipientconstraints?: Array; + responseuris?: Array; expirytime?: number; } @@ -228,20 +228,19 @@ export class AuthenticationRequestDetails implements SerializableEntity { } static fromJson(data: AuthenticationRequestDetailsJson): AuthenticationRequestDetails { - const loginDetails = new AuthenticationRequestDetails(); loginDetails.version = new BN(data?.version || 0); loginDetails.flags = new BN(data?.flags || 0); loginDetails.requestID = data.requestid; - if(loginDetails.hasRecipentConstraints() && data.recipientConstraints) { - loginDetails.recipientConstraints = data.recipientConstraints.map(p => ({type: p.type, + if(loginDetails.hasRecipentConstraints() && data.recipientconstraints) { + loginDetails.recipientConstraints = data.recipientconstraints.map(p => ({type: p.type, identity: CompactAddressObject.fromJson(p.identity)})); } - if(loginDetails.hasResponseURIs() && data.responseURIs) { - loginDetails.responseURIs = data.responseURIs.map(c => ResponseURI.fromJson(c)); + if(loginDetails.hasResponseURIs() && data.responseuris) { + loginDetails.responseURIs = data.responseuris.map(c => ResponseURI.fromJson(c)); } if(loginDetails.hasExpiryTime() && data.expirytime) { From 2fc5860fe6feeddb88ba835e6c18e7fc8625b6c7 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 9 Jan 2026 16:59:32 +0100 Subject: [PATCH 105/123] Remove responseURIs from within AuthenticationRequestDetails --- .../login/AuthenticationRequestDetails.d.ts | 7 --- .../login/AuthenticationRequestDetails.js | 42 +------------- src/__tests__/constants/fixtures.ts | 2 +- .../vdxf/authenticationrequestdetails.test.ts | 7 +-- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 1 - .../login/AuthenticationRequestDetails.ts | 56 +------------------ 6 files changed, 5 insertions(+), 110 deletions(-) diff --git a/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts b/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts index 287aeec9..eea2421b 100644 --- a/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts +++ b/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts @@ -5,7 +5,6 @@ * including specific recipientConstraints and callback information. The request includes: * - Request ID for tracking the authentication session * - Permission sets defining what access the application is requesting - * - Response URIs for post-authentication redirects * - Optional expiry time for the authentication session * * The user's wallet can use these parameters to present a clear authentication request @@ -16,13 +15,11 @@ import { BigNumber } from "../../../utils/types/BigNumber"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import { CompactAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; -import { ResponseURI, ResponseURIJson } from "../ResponseURI"; export interface AuthenticationRequestDetailsInterface { version?: BigNumber; flags?: BigNumber; requestID: string; recipientConstraints?: Array; - responseURIs?: Array; expiryTime?: BigNumber; } export interface RecipientConstraintJson { @@ -38,7 +35,6 @@ export interface AuthenticationRequestDetailsJson { requestid: string; flags: number; recipientconstraints?: Array; - responseuris?: Array; expirytime?: number; } export declare class AuthenticationRequestDetails implements SerializableEntity { @@ -46,20 +42,17 @@ export declare class AuthenticationRequestDetails implements SerializableEntity flags?: BigNumber; requestID: string; recipientConstraints?: Array; - responseURIs?: Array; expiryTime?: BigNumber; static DEFAULT_VERSION: import("bn.js"); static VERSION_FIRSTVALID: import("bn.js"); static VERSION_LASTVALID: import("bn.js"); static FLAG_HAS_RECIPIENT_CONSTRAINTS: import("bn.js"); - static FLAG_HAS_RESPONSE_URIS: import("bn.js"); static FLAG_HAS_EXPIRY_TIME: import("bn.js"); static REQUIRED_ID: number; static REQUIRED_SYSTEM: number; static REQUIRED_PARENT: number; constructor(request?: AuthenticationRequestDetailsInterface); hasRecipentConstraints(): boolean; - hasResponseURIs(): boolean; hasExpiryTime(): boolean; calcFlags(flags?: BigNumber): BigNumber; getByteLength(): number; diff --git a/dist/vdxf/classes/login/AuthenticationRequestDetails.js b/dist/vdxf/classes/login/AuthenticationRequestDetails.js index 3775f667..61d83396 100644 --- a/dist/vdxf/classes/login/AuthenticationRequestDetails.js +++ b/dist/vdxf/classes/login/AuthenticationRequestDetails.js @@ -6,7 +6,6 @@ * including specific recipientConstraints and callback information. The request includes: * - Request ID for tracking the authentication session * - Permission sets defining what access the application is requesting - * - Response URIs for post-authentication redirects * - Optional expiry time for the authentication session * * The user's wallet can use these parameters to present a clear authentication request @@ -22,23 +21,18 @@ const varuint_1 = require("../../../utils/varuint"); const vdxf_1 = require("../../../constants/vdxf"); const address_1 = require("../../../utils/address"); const CompactAddressObject_1 = require("../CompactAddressObject"); -const ResponseURI_1 = require("../ResponseURI"); class AuthenticationRequestDetails { constructor(request) { this.version = (request === null || request === void 0 ? void 0 : request.version) || AuthenticationRequestDetails.DEFAULT_VERSION; this.requestID = (request === null || request === void 0 ? void 0 : request.requestID) || ''; this.flags = (request === null || request === void 0 ? void 0 : request.flags) || new bn_js_1.BN(0, 10); this.recipientConstraints = (request === null || request === void 0 ? void 0 : request.recipientConstraints) || null; - this.responseURIs = (request === null || request === void 0 ? void 0 : request.responseURIs) || null; this.expiryTime = (request === null || request === void 0 ? void 0 : request.expiryTime) || null; this.setFlags(); } hasRecipentConstraints() { return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS).eq(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); } - hasResponseURIs() { - return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS).eq(AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS); - } hasExpiryTime() { return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME).eq(AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME); } @@ -46,9 +40,6 @@ class AuthenticationRequestDetails { if (this.recipientConstraints) { flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); } - if (this.responseURIs) { - flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS); - } if (this.expiryTime) { flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME); } @@ -65,12 +56,6 @@ class AuthenticationRequestDetails { length += this.recipientConstraints[i].identity.getByteLength(); } } - if (this.hasResponseURIs()) { - length += varuint_1.default.encodingLength(this.responseURIs.length); - for (let i = 0; i < this.responseURIs.length; i++) { - length += this.responseURIs[i].getByteLength(); - } - } if (this.hasExpiryTime()) { length += varuint_1.default.encodingLength(this.expiryTime.toNumber()); } @@ -87,12 +72,6 @@ class AuthenticationRequestDetails { writer.writeSlice(this.recipientConstraints[i].identity.toBuffer()); } } - if (this.hasResponseURIs()) { - writer.writeCompactSize(this.responseURIs.length); - for (let i = 0; i < this.responseURIs.length; i++) { - writer.writeSlice(this.responseURIs[i].toBuffer()); - } - } if (this.hasExpiryTime()) { writer.writeCompactSize(this.expiryTime.toNumber()); } @@ -116,15 +95,6 @@ class AuthenticationRequestDetails { }); } } - if (this.hasResponseURIs()) { - this.responseURIs = []; - const callbackURIsLength = reader.readCompactSize(); - for (let i = 0; i < callbackURIsLength; i++) { - const newURI = new ResponseURI_1.ResponseURI(); - reader.offset = newURI.fromBuffer(reader.buffer, reader.offset); - this.responseURIs.push(newURI); - } - } if (this.hasExpiryTime()) { this.expiryTime = new bn_js_1.BN(reader.readCompactSize()); } @@ -138,7 +108,6 @@ class AuthenticationRequestDetails { requestid: this.requestID, recipientConstraints: this.recipientConstraints ? this.recipientConstraints.map(p => ({ type: p.type, identity: p.identity.toJson() })) : undefined, - responseURIs: this.responseURIs ? this.responseURIs.map(x => x.toJson()) : undefined, expirytime: this.expiryTime ? this.expiryTime.toNumber() : undefined }; return retval; @@ -152,9 +121,6 @@ class AuthenticationRequestDetails { loginDetails.recipientConstraints = data.recipientconstraints.map(p => ({ type: p.type, identity: CompactAddressObject_1.CompactAddressObject.fromJson(p.identity) })); } - if (loginDetails.hasResponseURIs() && data.responseuris) { - loginDetails.responseURIs = data.responseuris.map(c => ResponseURI_1.ResponseURI.fromJson(c)); - } if (loginDetails.hasExpiryTime() && data.expirytime) { loginDetails.expiryTime = new bn_js_1.BN(data.expirytime); } @@ -178,11 +144,6 @@ class AuthenticationRequestDetails { return false; } } - if (this.hasResponseURIs()) { - if (!this.responseURIs || this.responseURIs.length === 0) { - return false; - } - } if (this.hasExpiryTime()) { if (!this.expiryTime || this.expiryTime.isZero()) { return false; @@ -197,8 +158,7 @@ AuthenticationRequestDetails.DEFAULT_VERSION = new bn_js_1.BN(1, 10); AuthenticationRequestDetails.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); AuthenticationRequestDetails.VERSION_LASTVALID = new bn_js_1.BN(1, 10); AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS = new bn_js_1.BN(1, 10); -AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS = new bn_js_1.BN(2, 10); -AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME = new bn_js_1.BN(4, 10); +AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME = new bn_js_1.BN(2, 10); // Recipient Constraint Types - What types of Identity can login, e.g. REQUIRED_SYSTEM and "VRSC" means only identities on the Verus chain can login AuthenticationRequestDetails.REQUIRED_ID = 1; AuthenticationRequestDetails.REQUIRED_SYSTEM = 2; diff --git a/src/__tests__/constants/fixtures.ts b/src/__tests__/constants/fixtures.ts index 5578f5b1..867d1adc 100644 --- a/src/__tests__/constants/fixtures.ts +++ b/src/__tests__/constants/fixtures.ts @@ -454,4 +454,4 @@ export const TEST_IDENTITY_ID_1 = "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"; export const TEST_IDENTITY_ID_2 = "i84T3MWcb6zWcwgNZoU3TXtrUn9EqM84A4"; export const TEST_IDENTITY_ID_3 = "iJ5LnijKvp1wkL4hB3EsJ5kjcE4T8VL4hD"; -export const SERIALIZED_AUTHENTICATION_REQUEST_DETAILS = Buffer.from("07c72c5b342995a2186f96271e91686c5e942d13e1030101022a5fc0e9dedf4f1e8351fe652a140e9dd38fa5a9020102324afad29f51859c54050db854d2c9bb52acd9bd030102a0276f355ad37d8e5d2d10f16c1d051b6f6ead6201021c68747470733a2f2f6578616d706c652e636f6d2f63616c6c6261636bff9982d02aac020000", 'hex'); \ No newline at end of file +export const SERIALIZED_AUTHENTICATION_REQUEST_DETAILS = Buffer.from("03c72c5b342995a2186f96271e91686c5e942d13e1030101022a5fc0e9dedf4f1e8351fe652a140e9dd38fa5a9020102324afad29f51859c54050db854d2c9bb52acd9bd030102a0276f355ad37d8e5d2d10f16c1d051b6f6ead62ff9982d02aac020000", 'hex'); diff --git a/src/__tests__/vdxf/authenticationrequestdetails.test.ts b/src/__tests__/vdxf/authenticationrequestdetails.test.ts index 37861bb1..fc9b9c5b 100644 --- a/src/__tests__/vdxf/authenticationrequestdetails.test.ts +++ b/src/__tests__/vdxf/authenticationrequestdetails.test.ts @@ -1,8 +1,7 @@ import { BN } from "bn.js"; import { AuthenticationRequestDetails, - CompactAddressObject, - ResponseURI + CompactAddressObject } from "../../vdxf/classes"; import { SERIALIZED_AUTHENTICATION_REQUEST_DETAILS, TEST_CHALLENGE_ID, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3 } from "../constants/fixtures"; @@ -22,7 +21,6 @@ describe("AuthenticationRequestDetails", () => { expect(details.version.toString()).toBe("1"); expect(details.flags?.toString()).toBe("0"); expect(details.recipientConstraints).toBeNull(); - expect(details.responseURIs).toBeNull(); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); }); @@ -34,7 +32,6 @@ describe("AuthenticationRequestDetails", () => { { type: AuthenticationRequestDetails.REQUIRED_SYSTEM, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, { type: AuthenticationRequestDetails.REQUIRED_PARENT, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } ], - responseURIs: [ResponseURI.fromUriString("https://example.com/callback", ResponseURI.TYPE_POST)], expiryTime: new BN(2938475938457) // 1 hour from now }); @@ -45,7 +42,6 @@ describe("AuthenticationRequestDetails", () => { expect(newDetails.requestID).toBe(TEST_CHALLENGE_ID); expect(newDetails.recipientConstraints?.length).toBe(3); - expect(newDetails.responseURIs?.length).toBe(1); expect(newDetails.expiryTime?.toString()).toBe("2938475938457"); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); @@ -61,7 +57,6 @@ describe("AuthenticationRequestDetails", () => { expect(details.version.toString()).toBe("1"); expect(details.flags?.toString()).toBe("0"); expect(details.recipientConstraints).toBeNull(); - expect(details.responseURIs).toBeNull(); }); }); }); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 34949474..06bff7b9 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -341,7 +341,6 @@ describe('OrdinalVDXFObject and subclasses round-trip serialization', () => { { type: AuthenticationRequestDetails.REQUIRED_SYSTEM, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, { type: AuthenticationRequestDetails.REQUIRED_PARENT, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } ], - responseURIs: [ResponseURI.fromUriString("https://example.com/callback", ResponseURI.TYPE_POST)], expiryTime: new BN(2938475938457) }); diff --git a/src/vdxf/classes/login/AuthenticationRequestDetails.ts b/src/vdxf/classes/login/AuthenticationRequestDetails.ts index b8513cb7..15785ac7 100644 --- a/src/vdxf/classes/login/AuthenticationRequestDetails.ts +++ b/src/vdxf/classes/login/AuthenticationRequestDetails.ts @@ -6,7 +6,6 @@ * including specific recipientConstraints and callback information. The request includes: * - Request ID for tracking the authentication session * - Permission sets defining what access the application is requesting - * - Response URIs for post-authentication redirects * - Optional expiry time for the authentication session * * The user's wallet can use these parameters to present a clear authentication request @@ -23,14 +22,12 @@ import varuint from "../../../utils/varuint"; import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../../../constants/vdxf'; import { fromBase58Check, toBase58Check } from "../../../utils/address"; import { CompactAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; -import { ResponseURI, ResponseURIJson } from "../ResponseURI"; export interface AuthenticationRequestDetailsInterface { version?: BigNumber; flags?: BigNumber; requestID: string; recipientConstraints?: Array; - responseURIs?: Array; expiryTime?: BigNumber; // UNIX Timestamp } @@ -49,7 +46,6 @@ export interface AuthenticationRequestDetailsJson { requestid: string; flags: number; recipientconstraints?: Array; - responseuris?: Array; expirytime?: number; } @@ -58,7 +54,6 @@ export class AuthenticationRequestDetails implements SerializableEntity { flags?: BigNumber; requestID: string; recipientConstraints?: Array; - responseURIs?: Array; expiryTime?: BigNumber; // UNIX Timestamp // Version @@ -67,8 +62,7 @@ export class AuthenticationRequestDetails implements SerializableEntity { static VERSION_LASTVALID = new BN(1, 10) static FLAG_HAS_RECIPIENT_CONSTRAINTS = new BN(1, 10); - static FLAG_HAS_RESPONSE_URIS = new BN(2, 10); - static FLAG_HAS_EXPIRY_TIME = new BN(4, 10); + static FLAG_HAS_EXPIRY_TIME = new BN(2, 10); // Recipient Constraint Types - What types of Identity can login, e.g. REQUIRED_SYSTEM and "VRSC" means only identities on the Verus chain can login static REQUIRED_ID = 1; @@ -82,7 +76,6 @@ export class AuthenticationRequestDetails implements SerializableEntity { this.requestID = request?.requestID || ''; this.flags = request?.flags || new BN(0, 10); this.recipientConstraints = request?.recipientConstraints || null; - this.responseURIs = request?.responseURIs || null; this.expiryTime = request?.expiryTime || null; this.setFlags(); @@ -92,10 +85,6 @@ export class AuthenticationRequestDetails implements SerializableEntity { return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS).eq(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); } - hasResponseURIs(): boolean { - return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS).eq(AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS); - } - hasExpiryTime(): boolean { return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME).eq(AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME); } @@ -104,9 +93,6 @@ export class AuthenticationRequestDetails implements SerializableEntity { if (this.recipientConstraints) { flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); } - if (this.responseURIs) { - flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_RESPONSE_URIS); - } if (this.expiryTime) { flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME); } @@ -127,14 +113,6 @@ export class AuthenticationRequestDetails implements SerializableEntity { } } - if (this.hasResponseURIs()) { - length += varuint.encodingLength(this.responseURIs.length); - - for (let i = 0; i < this.responseURIs.length; i++) { - length += this.responseURIs[i].getByteLength(); - } - } - if (this.hasExpiryTime()) { length += varuint.encodingLength(this.expiryTime.toNumber()); } @@ -156,14 +134,6 @@ export class AuthenticationRequestDetails implements SerializableEntity { } } - if (this.hasResponseURIs()) { - writer.writeCompactSize(this.responseURIs.length); - - for (let i = 0; i < this.responseURIs.length; i++) { - writer.writeSlice(this.responseURIs[i].toBuffer()); - } - } - if (this.hasExpiryTime()) { writer.writeCompactSize(this.expiryTime.toNumber()); } @@ -193,17 +163,6 @@ export class AuthenticationRequestDetails implements SerializableEntity { } } - if (this.hasResponseURIs()) { - this.responseURIs = []; - const callbackURIsLength = reader.readCompactSize(); - - for (let i = 0; i < callbackURIsLength; i++) { - const newURI = new ResponseURI(); - reader.offset = newURI.fromBuffer(reader.buffer, reader.offset); - this.responseURIs.push(newURI); - } - } - if (this.hasExpiryTime()) { this.expiryTime = new BN(reader.readCompactSize()); } @@ -220,7 +179,6 @@ export class AuthenticationRequestDetails implements SerializableEntity { requestid: this.requestID, recipientConstraints: this.recipientConstraints ? this.recipientConstraints.map(p => ({type: p.type, identity: p.identity.toJson()})) : undefined, - responseURIs: this.responseURIs ? this.responseURIs.map(x => x.toJson()) : undefined, expirytime: this.expiryTime ? this.expiryTime.toNumber() : undefined }; @@ -239,10 +197,6 @@ export class AuthenticationRequestDetails implements SerializableEntity { identity: CompactAddressObject.fromJson(p.identity)})); } - if(loginDetails.hasResponseURIs() && data.responseuris) { - loginDetails.responseURIs = data.responseuris.map(c => ResponseURI.fromJson(c)); - } - if(loginDetails.hasExpiryTime() && data.expirytime) { loginDetails.expiryTime = new BN(data.expirytime); } @@ -271,12 +225,6 @@ export class AuthenticationRequestDetails implements SerializableEntity { } } - if (this.hasResponseURIs()) { - if (!this.responseURIs || this.responseURIs.length === 0) { - return false; - } - } - if (this.hasExpiryTime()) { if (!this.expiryTime || this.expiryTime.isZero()) { return false; @@ -285,4 +233,4 @@ export class AuthenticationRequestDetails implements SerializableEntity { return valid; } -} \ No newline at end of file +} From ce460522d464f17fe02af5da002040edf04df308 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 9 Jan 2026 18:35:48 +0100 Subject: [PATCH 106/123] Add GENERIC_RESPONSE_DEEPLINK_VDXF_KEY --- dist/vdxf/keys.d.ts | 1 + dist/vdxf/keys.js | 13 +++++++++++-- src/vdxf/keys.ts | 10 ++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/dist/vdxf/keys.d.ts b/dist/vdxf/keys.d.ts index d52d9b36..b31bcb87 100644 --- a/dist/vdxf/keys.d.ts +++ b/dist/vdxf/keys.d.ts @@ -14,6 +14,7 @@ export declare const VERUSPAY_INVOICE_VDXF_KEY: VDXFKeyInterface; export declare const VERUSPAY_INVOICE_DETAILS_VDXF_KEY: VDXFKeyInterface; export declare const GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY: VDXFKeyInterface; export declare const GENERIC_REQUEST_DEEPLINK_VDXF_KEY: VDXFKeyInterface; +export declare const GENERIC_RESPONSE_DEEPLINK_VDXF_KEY: VDXFKeyInterface; export declare const IDENTITY_UPDATE_REQUEST_VDXF_KEY: VDXFKeyInterface; export declare const IDENTITY_UPDATE_RESPONSE_VDXF_KEY: VDXFKeyInterface; export declare const IDENTITY_AUTH_SIG_VDXF_KEY: VDXFKeyInterface; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index 53dab5ed..2fc9ce35 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.ATTESTATION_NAME = exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = exports.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; -exports.APP_ENCRYPTION_RESPONSE_VDXF_KEY = exports.USER_SPECIFIC_DATA_PACKET_VDXF_KEY = exports.USER_DATA_REQUEST_VDXF_KEY = exports.DATA_RESPONSE_VDXF_KEY = exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.AUTHENTICATION_RESPONSE_VDXF_KEY = exports.AUTHENTICATION_REQUEST_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = void 0; +exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_RESPONSE_DEEPLINK_VDXF_KEY = exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = exports.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; +exports.APP_ENCRYPTION_RESPONSE_VDXF_KEY = exports.USER_SPECIFIC_DATA_PACKET_VDXF_KEY = exports.USER_DATA_REQUEST_VDXF_KEY = exports.DATA_RESPONSE_VDXF_KEY = exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.AUTHENTICATION_RESPONSE_VDXF_KEY = exports.AUTHENTICATION_REQUEST_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; exports.VERUSPAY_INVOICE_VDXF_KEY = { hash160result: "628efc28c2e2d40050e1a9de7a93e7ddf2aa0076", indexid: "xK4aRumetZg2ecW4Z45qdDBH769xxnaiEH", @@ -38,6 +38,15 @@ exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = { }, "vdxfid": "iLWiYHVjoTyoeKwji1B5vRT9Xr1aA9yyvX" }; +exports.GENERIC_RESPONSE_DEEPLINK_VDXF_KEY = { + "hash160result": "4eb641e76ca30947a0782a7c9b5d79e934300340", + "indexid": "xE96xgWEcUhxTuVAMr4TvW7mGpR5c2SFy4", + "qualifiedname": { + "name": "vrsc::response.generic", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "i9JzVt59mAVHqjc8WAQJx7bEFAQ4ffuhrC" +}; exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = { "hash160result": "0bcef8b06c211828d16dc038e4d34d097aeb64e4", "indexid": "xV8GreW8nt1Py99r8KPsLxDyy6UYJQvXja", diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index 25ff2205..96fc0cf0 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -51,6 +51,16 @@ export const GENERIC_REQUEST_DEEPLINK_VDXF_KEY: VDXFKeyInterface = { "vdxfid": "iLWiYHVjoTyoeKwji1B5vRT9Xr1aA9yyvX" } +export const GENERIC_RESPONSE_DEEPLINK_VDXF_KEY: VDXFKeyInterface = { + "hash160result": "4eb641e76ca30947a0782a7c9b5d79e934300340", + "indexid": "xE96xgWEcUhxTuVAMr4TvW7mGpR5c2SFy4", + "qualifiedname": { + "name": "vrsc::response.generic", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "i9JzVt59mAVHqjc8WAQJx7bEFAQ4ffuhrC" +} + export const IDENTITY_UPDATE_REQUEST_VDXF_KEY: VDXFKeyInterface = { "hash160result": "0bcef8b06c211828d16dc038e4d34d097aeb64e4", "indexid": "xV8GreW8nt1Py99r8KPsLxDyy6UYJQvXja", From bf71d852f10bfb324a7f8e784f933f5668ebefab Mon Sep 17 00:00:00 2001 From: michaeltout Date: Sun, 11 Jan 2026 16:57:36 +0100 Subject: [PATCH 107/123] Remove responseURIs from IdentityUpdateRequestDetails --- .../IdentityUpdateRequestDetails.d.ts | 7 --- .../identity/IdentityUpdateRequestDetails.js | 40 ++----------- .../vdxf/identityupdateenvelope.test.ts | 17 +----- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 7 +-- .../identity/IdentityUpdateRequestDetails.ts | 57 ++----------------- 5 files changed, 11 insertions(+), 117 deletions(-) diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts index a3eb212f..b845787f 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts +++ b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts @@ -2,7 +2,6 @@ import { PartialIdentity } from '../../../pbaas/PartialIdentity'; import { PartialSignData, PartialSignDataCLIJson, PartialSignDataJson } from '../../../pbaas/PartialSignData'; import { BigNumber } from '../../../utils/types/BigNumber'; import { ContentMultiMapJsonValue, IdentityID, VerusCLIVerusIDJson, VerusCLIVerusIDJsonBase } from '../../../pbaas'; -import { ResponseURI, ResponseURIJson } from '../ResponseURI'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; export type SignDataMap = Map; export type VerusCLIVerusIDJsonWithData = VerusCLIVerusIDJsonBase<{ @@ -16,7 +15,6 @@ export type IdentityUpdateRequestDetailsJson = { identity?: VerusCLIVerusIDJson; expiryheight?: string; systemid?: string; - responseuris?: Array; signdatamap?: { [key: string]: PartialSignDataJson; }; @@ -28,13 +26,11 @@ export declare class IdentityUpdateRequestDetails implements SerializableEntity identity?: PartialIdentity; expiryHeight?: BigNumber; systemID?: IdentityID; - responseURIs?: Array; signDataMap?: SignDataMap; txid?: Buffer; static IDENTITY_UPDATE_REQUEST_VALID: import("bn.js"); static IDENTITY_UPDATE_REQUEST_CONTAINS_SIGNDATA: import("bn.js"); static IDENTITY_UPDATE_REQUEST_EXPIRES: import("bn.js"); - static IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS: import("bn.js"); static IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID: import("bn.js"); static IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM: import("bn.js"); static IDENTITY_UPDATE_REQUEST_CONTAINS_TXID: import("bn.js"); @@ -46,7 +42,6 @@ export declare class IdentityUpdateRequestDetails implements SerializableEntity expiryHeight?: BigNumber; systemID?: IdentityID; txid?: Buffer; - responseURIs?: Array; signDataMap?: SignDataMap; }); expires(): boolean; @@ -54,14 +49,12 @@ export declare class IdentityUpdateRequestDetails implements SerializableEntity containsSystem(): boolean; containsRequestID(): boolean; containsTxid(): boolean; - containsResponseUris(): boolean; isTestnet(): boolean; toggleExpires(): void; toggleContainsSignData(): void; toggleContainsSystem(): void; toggleContainsRequestID(): void; toggleContainsTxid(): void; - toggleContainsResponseUris(): void; toggleIsTestnet(): void; toSha256(): Buffer; getIdentityAddress(): string; diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js index 45a4a647..0438e823 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js +++ b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js @@ -10,7 +10,6 @@ const PartialIdentity_1 = require("../../../pbaas/PartialIdentity"); const PartialSignData_1 = require("../../../pbaas/PartialSignData"); const bn_js_1 = require("bn.js"); const pbaas_1 = require("../../../pbaas"); -const ResponseURI_1 = require("../ResponseURI"); const pbaas_2 = require("../../../constants/pbaas"); const { BufferReader, BufferWriter } = bufferutils_1.default; class IdentityUpdateRequestDetails { @@ -39,11 +38,6 @@ class IdentityUpdateRequestDetails { this.toggleContainsTxid(); this.txid = data.txid; } - if (data === null || data === void 0 ? void 0 : data.responseURIs) { - if (!this.containsResponseUris()) - this.toggleContainsResponseUris(); - this.responseURIs = data.responseURIs; - } if (data === null || data === void 0 ? void 0 : data.signDataMap) { if (!this.containsSignData()) this.toggleContainsSignData(); @@ -65,9 +59,6 @@ class IdentityUpdateRequestDetails { containsTxid() { return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID).toNumber()); } - containsResponseUris() { - return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS).toNumber()); - } isTestnet() { return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET).toNumber()); } @@ -86,9 +77,6 @@ class IdentityUpdateRequestDetails { toggleContainsTxid() { this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID); } - toggleContainsResponseUris() { - this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS); - } toggleIsTestnet() { this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET); } @@ -123,10 +111,6 @@ class IdentityUpdateRequestDetails { if (this.containsTxid()) { length += pbaas_2.UINT_256_LENGTH; } - if (this.containsResponseUris()) { - length += varuint_1.default.encodingLength(this.responseURIs.length); - length += this.responseURIs.reduce((sum, current) => sum + current.getByteLength(), 0); - } if (this.containsSignData()) { length += varuint_1.default.encodingLength(this.signDataMap.size); for (const [key, value] of this.signDataMap.entries()) { @@ -152,9 +136,6 @@ class IdentityUpdateRequestDetails { throw new Error("invalid txid length"); writer.writeSlice(this.txid); } - if (this.containsResponseUris()) { - writer.writeArray(this.responseURIs.map((x) => x.toBuffer())); - } if (this.containsSignData()) { writer.writeCompactSize(this.signDataMap.size); for (const [key, value] of this.signDataMap.entries()) { @@ -182,15 +163,6 @@ class IdentityUpdateRequestDetails { if (this.containsTxid()) { this.txid = reader.readSlice(pbaas_2.UINT_256_LENGTH); } - if (this.containsResponseUris()) { - this.responseURIs = []; - const urisLength = reader.readCompactSize(); - for (let i = 0; i < urisLength; i++) { - const uri = new ResponseURI_1.ResponseURI(); - reader.offset = uri.fromBuffer(reader.buffer, reader.offset); - this.responseURIs.push(uri); - } - } if (this.containsSignData()) { this.signDataMap = new Map(); const size = reader.readCompactSize(); @@ -218,7 +190,6 @@ class IdentityUpdateRequestDetails { expiryheight: this.expiryHeight ? this.expiryHeight.toString(10) : undefined, systemid: this.systemID ? this.systemID.toAddress() : undefined, txid: this.txid ? (Buffer.from(this.txid.toString('hex'), 'hex').reverse()).toString('hex') : undefined, - responseuris: this.responseURIs ? this.responseURIs.map(x => x.toJson()) : undefined, signdatamap: signDataJson }; } @@ -236,7 +207,6 @@ class IdentityUpdateRequestDetails { identity: json.identity ? PartialIdentity_1.PartialIdentity.fromJson(json.identity) : undefined, expiryHeight: json.expiryheight ? new bn_js_1.BN(json.expiryheight, 10) : undefined, systemID: json.systemid ? pbaas_1.IdentityID.fromAddress(json.systemid) : undefined, - responseURIs: json.responseuris ? json.responseuris.map(x => ResponseURI_1.ResponseURI.fromJson(x)) : undefined, signDataMap, txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined, }); @@ -277,7 +247,6 @@ class IdentityUpdateRequestDetails { systemID: (details === null || details === void 0 ? void 0 : details.systemid) ? pbaas_1.IdentityID.fromAddress(details.systemid) : undefined, requestID: details === null || details === void 0 ? void 0 : details.requestid, expiryHeight: (details === null || details === void 0 ? void 0 : details.expiryheight) ? new bn_js_1.BN(details.expiryheight, 10) : undefined, - responseURIs: (details === null || details === void 0 ? void 0 : details.responseuris) ? details.responseuris.map(x => ResponseURI_1.ResponseURI.fromJson(x)) : undefined, txid: (details === null || details === void 0 ? void 0 : details.txid) ? Buffer.from(details.txid, 'hex').reverse() : undefined, }); } @@ -287,8 +256,7 @@ exports.IdentityUpdateRequestDetails = IdentityUpdateRequestDetails; IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_VALID = new bn_js_1.BN(0, 10); IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SIGNDATA = new bn_js_1.BN(1, 10); IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_EXPIRES = new bn_js_1.BN(2, 10); -IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS = new bn_js_1.BN(4, 10); -IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID = new bn_js_1.BN(8, 10); -IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM = new bn_js_1.BN(16, 10); -IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID = new bn_js_1.BN(32, 10); -IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET = new bn_js_1.BN(64, 10); +IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID = new bn_js_1.BN(4, 10); +IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM = new bn_js_1.BN(8, 10); +IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID = new bn_js_1.BN(16, 10); +IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET = new bn_js_1.BN(32, 10); diff --git a/src/__tests__/vdxf/identityupdateenvelope.test.ts b/src/__tests__/vdxf/identityupdateenvelope.test.ts index 909e763e..9980e97a 100644 --- a/src/__tests__/vdxf/identityupdateenvelope.test.ts +++ b/src/__tests__/vdxf/identityupdateenvelope.test.ts @@ -1,7 +1,6 @@ import { IdentityUpdateRequestDetails } from "../../vdxf/classes/identity/IdentityUpdateRequestDetails"; import { IdentityUpdateResponseDetails } from "../../vdxf/classes/identity/IdentityUpdateResponseDetails"; import { ContentMultiMap } from "../../pbaas"; -import { ResponseURI } from "../../vdxf/classes/ResponseURI"; import { PartialSignData } from "../../pbaas/PartialSignData"; import { TEST_BASE_SIGN_DATA_WITH_MMR_DATA, @@ -64,11 +63,10 @@ describe("IdentityUpdate request/response details Serialization", () => { systemID: TEST_SYSTEMID, identity: TEST_PARTIAL_IDENTITY, expiryHeight: TEST_EXPIRYHEIGHT, - responseURIs: [ResponseURI.fromUriString("http:/127.0.0.1:8000", ResponseURI.TYPE_REDIRECT), ResponseURI.fromUriString("http:/127.0.0.1:8000", ResponseURI.TYPE_POST)], signDataMap: TEST_SIGNDATA_MAP }; - const toRemove = ["expiryHeight", "responseURIs", "signDataMap", "systemID"]; + const toRemove = ["expiryHeight", "signDataMap", "systemID"]; for (let i = 0; i < toRemove.length + 1; i++) { const newRequestDetails = new IdentityUpdateRequestDetails({ ...baseRequestDetailsConfig }); @@ -157,11 +155,6 @@ describe("IdentityUpdate request/response details Serialization", () => { testJsonSerialization(TEST_MMR_DATA); }); - test("Serialize/Deserialize ResponseURI to/from JSON", () => { - const responseUri = ResponseURI.fromUriString("http:/127.0.0.1:8000", ResponseURI.TYPE_REDIRECT); - testJsonSerialization(responseUri); - }); - test("Serialize/Deserialize ContentMultiMap to/from JSON", () => { const contentMultiMap = ContentMultiMap.fromJson({ "iPsFBfFoCcxtuZNzE8yxPQhXVn4dmytf8j": [ @@ -185,10 +178,6 @@ describe("IdentityUpdate request/response details Serialization", () => { systemid: TEST_SYSTEMID.toAddress() as string, requestid: TEST_REQUESTID.toString(), expiryheight: TEST_EXPIRYHEIGHT.toString(), - responseuris: [ - ResponseURI.fromUriString("http:/127.0.0.1:8000", ResponseURI.TYPE_REDIRECT).toJson(), - ResponseURI.fromUriString("http:/127.0.0.1:8000", ResponseURI.TYPE_POST).toJson() - ], txid: TEST_TXID } ); @@ -202,10 +191,6 @@ describe("IdentityUpdate request/response details Serialization", () => { const detailsProps = { requestID: TEST_REQUESTID.toString(), expiryHeight: TEST_EXPIRYHEIGHT.toString(), - responseuris: [ - ResponseURI.fromUriString("http:/127.0.0.1:8000", ResponseURI.TYPE_REDIRECT).toJson(), - ResponseURI.fromUriString("http:/127.0.0.1:8000", ResponseURI.TYPE_POST).toJson() - ], txid: TEST_TXID }; diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 06bff7b9..418b17de 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -24,7 +24,6 @@ import { AuthenticationRequestDetails, AuthenticationResponseDetails, ProvisionIdentityDetails, - ResponseURI, VerusPayInvoiceDetails, UserDataRequestDetails, UserSpecificDataPacketDetails, @@ -277,10 +276,6 @@ describe('OrdinalVDXFObject and subclasses round-trip serialization', () => { systemid: TEST_SYSTEMID.toAddress() as string, requestid: TEST_REQUESTID.toString(), expiryheight: TEST_EXPIRYHEIGHT.toString(), - responseuris: [ - ResponseURI.fromUriString("http:/127.0.0.1:8000", ResponseURI.TYPE_REDIRECT).toJson(), - ResponseURI.fromUriString("http:/127.0.0.1:8000", ResponseURI.TYPE_POST).toJson() - ], txid: TEST_TXID } ); @@ -613,4 +608,4 @@ describe('OrdinalVDXFObject and subclasses round-trip serialization', () => { expect(d2.address!.toAddressString()).toEqual(details.address!.toAddressString()); }); -}); \ No newline at end of file +}); diff --git a/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts b/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts index d5192f9e..b8125081 100644 --- a/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts +++ b/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts @@ -8,7 +8,6 @@ import { PartialSignData, PartialSignDataCLIJson, PartialSignDataJson } from '.. import { BigNumber } from '../../../utils/types/BigNumber'; import { BN } from 'bn.js'; import { ContentMultiMapJsonValue, IdentityID, VerusCLIVerusIDJson, VerusCLIVerusIDJsonBase } from '../../../pbaas'; -import { ResponseURI, ResponseURIJson } from '../ResponseURI'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { UINT_256_LENGTH } from '../../../constants/pbaas'; @@ -24,7 +23,6 @@ export type IdentityUpdateRequestDetailsJson = { identity?: VerusCLIVerusIDJson; expiryheight?: string; systemid?: string; - responseuris?: Array; signdatamap?: { [key: string]: PartialSignDataJson }; txid?: string; } @@ -35,7 +33,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { identity?: PartialIdentity; // Parts of the identity to update expiryHeight?: BigNumber; // Time after which update request will no longer be accepted systemID?: IdentityID; // System that identity should be updated on (will default to VRSC/VRSCTEST if not present, depending on testnet flag) - responseURIs?: Array; // Array of uris + type to send response to (type can be post, redirect, etc. depending on how response is expected to be received) signDataMap?: SignDataMap; // Map of data to pass to signdata txid?: Buffer; // 32 byte transaction ID of transaction that must be spent to update identity, on same system asked for in request // stored in natural order, if displayed as text make sure to reverse! @@ -43,11 +40,10 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { static IDENTITY_UPDATE_REQUEST_VALID = new BN(0, 10); static IDENTITY_UPDATE_REQUEST_CONTAINS_SIGNDATA = new BN(1, 10); static IDENTITY_UPDATE_REQUEST_EXPIRES = new BN(2, 10); - static IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS = new BN(4, 10); - static IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID = new BN(8, 10); - static IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM = new BN(16, 10); - static IDENTITY_UPDATE_REQUEST_CONTAINS_TXID = new BN(32, 10); - static IDENTITY_UPDATE_REQUEST_IS_TESTNET = new BN(64, 10); + static IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID = new BN(4, 10); + static IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM = new BN(8, 10); + static IDENTITY_UPDATE_REQUEST_CONTAINS_TXID = new BN(16, 10); + static IDENTITY_UPDATE_REQUEST_IS_TESTNET = new BN(32, 10); constructor (data?: { flags?: BigNumber, @@ -56,7 +52,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { expiryHeight?: BigNumber, systemID?: IdentityID, txid?: Buffer, - responseURIs?: Array, signDataMap?: SignDataMap }) { this.flags = data && data.flags ? data.flags : new BN("0", 10); @@ -85,11 +80,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { this.txid = data.txid; } - if (data?.responseURIs) { - if (!this.containsResponseUris()) this.toggleContainsResponseUris(); - this.responseURIs = data.responseURIs; - } - if (data?.signDataMap) { if (!this.containsSignData()) this.toggleContainsSignData(); this.signDataMap = data.signDataMap; @@ -116,10 +106,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID).toNumber()); } - containsResponseUris() { - return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS).toNumber()); - } - isTestnet() { return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET).toNumber()); } @@ -144,10 +130,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID); } - toggleContainsResponseUris() { - this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_RESPONSE_URIS); - } - toggleIsTestnet() { this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET); } @@ -187,14 +169,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { length += UINT_256_LENGTH; } - if (this.containsResponseUris()) { - length += varuint.encodingLength(this.responseURIs.length); - length += this.responseURIs.reduce( - (sum: number, current: ResponseURI) => sum + current.getByteLength(), - 0 - ); - } - if (this.containsSignData()) { length += varuint.encodingLength(this.signDataMap.size); for (const [key, value] of this.signDataMap.entries()) { @@ -227,10 +201,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { writer.writeSlice(this.txid); } - if (this.containsResponseUris()) { - writer.writeArray(this.responseURIs.map((x) => x.toBuffer())); - } - if (this.containsSignData()) { writer.writeCompactSize(this.signDataMap.size); for (const [key, value] of this.signDataMap.entries()) { @@ -267,20 +237,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { this.txid = reader.readSlice(UINT_256_LENGTH); } - if (this.containsResponseUris()) { - this.responseURIs = []; - const urisLength = reader.readCompactSize(); - - for (let i = 0; i < urisLength; i++) { - const uri = new ResponseURI(); - reader.offset = uri.fromBuffer( - reader.buffer, - reader.offset - ); - this.responseURIs.push(uri); - } - } - if (this.containsSignData()) { this.signDataMap = new Map(); @@ -317,7 +273,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { expiryheight: this.expiryHeight ? this.expiryHeight.toString(10) : undefined, systemid: this.systemID ? this.systemID.toAddress() : undefined, txid: this.txid ? (Buffer.from(this.txid.toString('hex'), 'hex').reverse()).toString('hex') : undefined, - responseuris: this.responseURIs ? this.responseURIs.map(x => x.toJson()) : undefined, signdatamap: signDataJson } } @@ -339,7 +294,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { identity: json.identity ? PartialIdentity.fromJson(json.identity) : undefined, expiryHeight: json.expiryheight ? new BN(json.expiryheight, 10) : undefined, systemID: json.systemid ? IdentityID.fromAddress(json.systemid) : undefined, - responseURIs: json.responseuris ? json.responseuris.map(x => ResponseURI.fromJson(x)) : undefined, signDataMap, txid: json.txid ? Buffer.from(json.txid, 'hex').reverse() : undefined, }) @@ -393,8 +347,7 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { systemID: details?.systemid ? IdentityID.fromAddress(details.systemid) : undefined, requestID: details?.requestid, expiryHeight: details?.expiryheight ? new BN(details.expiryheight, 10) : undefined, - responseURIs: details?.responseuris ? details.responseuris.map(x => ResponseURI.fromJson(x)) : undefined, txid: details?.txid ? Buffer.from(details.txid, 'hex').reverse() : undefined, }) } -} \ No newline at end of file +} From 36095866d7e2dc684afbae13ca1d3c74cb105e4d Mon Sep 17 00:00:00 2001 From: michaeltout Date: Mon, 12 Jan 2026 12:25:29 +0100 Subject: [PATCH 108/123] Remove testnet flag from IdentityUpdateRequestDetails --- .../identity/IdentityUpdateRequestDetails.d.ts | 5 +---- .../identity/IdentityUpdateRequestDetails.js | 11 ++--------- .../identity/IdentityUpdateRequestDetails.ts | 13 ++----------- 3 files changed, 5 insertions(+), 24 deletions(-) diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts index b845787f..5d1b9eeb 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts +++ b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.d.ts @@ -34,7 +34,6 @@ export declare class IdentityUpdateRequestDetails implements SerializableEntity static IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID: import("bn.js"); static IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM: import("bn.js"); static IDENTITY_UPDATE_REQUEST_CONTAINS_TXID: import("bn.js"); - static IDENTITY_UPDATE_REQUEST_IS_TESTNET: import("bn.js"); constructor(data?: { flags?: BigNumber; requestID?: string; @@ -49,15 +48,13 @@ export declare class IdentityUpdateRequestDetails implements SerializableEntity containsSystem(): boolean; containsRequestID(): boolean; containsTxid(): boolean; - isTestnet(): boolean; toggleExpires(): void; toggleContainsSignData(): void; toggleContainsSystem(): void; toggleContainsRequestID(): void; toggleContainsTxid(): void; - toggleIsTestnet(): void; toSha256(): Buffer; - getIdentityAddress(): string; + getIdentityAddress(isTestnet?: boolean): string; getByteLength(): number; toBuffer(): Buffer; fromBuffer(buffer: Buffer, offset?: number, parseVdxfObjects?: boolean): number; diff --git a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js index 0438e823..47761669 100644 --- a/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js +++ b/dist/vdxf/classes/identity/IdentityUpdateRequestDetails.js @@ -59,9 +59,6 @@ class IdentityUpdateRequestDetails { containsTxid() { return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID).toNumber()); } - isTestnet() { - return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET).toNumber()); - } toggleExpires() { this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_EXPIRES); } @@ -77,20 +74,17 @@ class IdentityUpdateRequestDetails { toggleContainsTxid() { this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID); } - toggleIsTestnet() { - this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET); - } toSha256() { return createHash("sha256").update(this.toBuffer()).digest(); } - getIdentityAddress() { + getIdentityAddress(isTestnet = false) { if (this.identity.name === "VRSC" || this.identity.name === "VRSCTEST") { return (0, address_1.nameAndParentAddrToIAddr)(this.identity.name); } else if (this.identity.parent) { return this.identity.getIdentityAddress(); } - else if (this.isTestnet()) { + else if (isTestnet) { return (0, address_1.nameAndParentAddrToIAddr)(this.identity.name, (0, address_1.nameAndParentAddrToIAddr)("VRSCTEST")); } else { @@ -259,4 +253,3 @@ IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_EXPIRES = new bn_js_1.BN(2, IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID = new bn_js_1.BN(4, 10); IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM = new bn_js_1.BN(8, 10); IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID = new bn_js_1.BN(16, 10); -IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET = new bn_js_1.BN(32, 10); diff --git a/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts b/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts index b8125081..d225e2ce 100644 --- a/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts +++ b/src/vdxf/classes/identity/IdentityUpdateRequestDetails.ts @@ -43,7 +43,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { static IDENTITY_UPDATE_REQUEST_CONTAINS_REQUEST_ID = new BN(4, 10); static IDENTITY_UPDATE_REQUEST_CONTAINS_SYSTEM = new BN(8, 10); static IDENTITY_UPDATE_REQUEST_CONTAINS_TXID = new BN(16, 10); - static IDENTITY_UPDATE_REQUEST_IS_TESTNET = new BN(32, 10); constructor (data?: { flags?: BigNumber, @@ -106,10 +105,6 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID).toNumber()); } - isTestnet() { - return !!(this.flags.and(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET).toNumber()); - } - toggleExpires() { this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_EXPIRES); } @@ -130,20 +125,16 @@ export class IdentityUpdateRequestDetails implements SerializableEntity { this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_CONTAINS_TXID); } - toggleIsTestnet() { - this.flags = this.flags.xor(IdentityUpdateRequestDetails.IDENTITY_UPDATE_REQUEST_IS_TESTNET); - } - toSha256() { return createHash("sha256").update(this.toBuffer()).digest(); } - getIdentityAddress() { + getIdentityAddress(isTestnet: boolean = false) { if (this.identity.name === "VRSC" || this.identity.name === "VRSCTEST") { return nameAndParentAddrToIAddr(this.identity.name); } else if (this.identity.parent) { return this.identity.getIdentityAddress(); - } else if (this.isTestnet()) { + } else if (isTestnet) { return nameAndParentAddrToIAddr(this.identity.name, nameAndParentAddrToIAddr("VRSCTEST")); } else { return nameAndParentAddrToIAddr(this.identity.name, nameAndParentAddrToIAddr("VRSC")); From 77faa1637512a53f0ba915d100641305b5a7b686 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Tue, 27 Jan 2026 10:59:54 +0100 Subject: [PATCH 109/123] Add vdxftag to SendCurrencyRequest --- dist/api/classes/SendCurrency/SendCurrencyRequest.d.ts | 1 + src/api/classes/SendCurrency/SendCurrencyRequest.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/dist/api/classes/SendCurrency/SendCurrencyRequest.d.ts b/dist/api/classes/SendCurrency/SendCurrencyRequest.d.ts index c1c602e1..e35aa363 100644 --- a/dist/api/classes/SendCurrency/SendCurrencyRequest.d.ts +++ b/dist/api/classes/SendCurrency/SendCurrencyRequest.d.ts @@ -15,6 +15,7 @@ type output = { preconvert?: boolean; burn?: boolean; mintnew?: boolean; + vdxftag?: string; }; export declare class SendCurrencyRequest extends ApiRequest { fromaddress: string; diff --git a/src/api/classes/SendCurrency/SendCurrencyRequest.ts b/src/api/classes/SendCurrency/SendCurrencyRequest.ts index d44f27e7..7118eec8 100644 --- a/src/api/classes/SendCurrency/SendCurrencyRequest.ts +++ b/src/api/classes/SendCurrency/SendCurrencyRequest.ts @@ -17,6 +17,7 @@ type output = { preconvert?: boolean; burn?: boolean; mintnew?: boolean; + vdxftag?: string; } export class SendCurrencyRequest extends ApiRequest { From deb6b213499fc0ba1ecf52328b4e5184acacadfd Mon Sep 17 00:00:00 2001 From: michaeltout Date: Tue, 27 Jan 2026 16:31:33 +0100 Subject: [PATCH 110/123] Tweak type for Compact X Addresses --- dist/vdxf/classes/CompactAddressObject.d.ts | 5 ++++- dist/vdxf/classes/CompactAddressObject.js | 16 +++++++++++++- .../classes/payment/VerusPayInvoiceDetails.js | 2 +- .../vdxf/compactaddressidobject.test.ts | 22 ++++++++++++++++++- src/__tests__/vdxf/veruspayinvoice.test.ts | 4 ++-- src/vdxf/classes/CompactAddressObject.ts | 14 +++++++++++- .../classes/payment/VerusPayInvoiceDetails.ts | 4 ++-- 7 files changed, 58 insertions(+), 9 deletions(-) diff --git a/dist/vdxf/classes/CompactAddressObject.d.ts b/dist/vdxf/classes/CompactAddressObject.d.ts index 04065cab..816cabc9 100644 --- a/dist/vdxf/classes/CompactAddressObject.d.ts +++ b/dist/vdxf/classes/CompactAddressObject.d.ts @@ -56,4 +56,7 @@ export declare class CompactAddressObject(json: any): CompactAddressObject; } -export type CompactXAddressObject = CompactAddressObject; +export declare class CompactXAddressObject extends CompactAddressObject { + static fromAddress(xaddr: string, nameSpace?: string): CompactXAddressObject; + toAddress(): string; +} diff --git a/dist/vdxf/classes/CompactAddressObject.js b/dist/vdxf/classes/CompactAddressObject.js index 7bb6a739..efd29f46 100644 --- a/dist/vdxf/classes/CompactAddressObject.js +++ b/dist/vdxf/classes/CompactAddressObject.js @@ -8,7 +8,7 @@ * and validation of the compact id object. */ Object.defineProperty(exports, "__esModule", { value: true }); -exports.CompactAddressObject = void 0; +exports.CompactXAddressObject = exports.CompactAddressObject = void 0; const bn_js_1 = require("bn.js"); const bufferutils_1 = require("../../utils/bufferutils"); const { BufferReader, BufferWriter } = bufferutils_1.default; @@ -139,3 +139,17 @@ CompactAddressObject.DEFAULT_VERSION = new bn_js_1.BN(1); CompactAddressObject.TYPE_FQN = new bn_js_1.BN(1); CompactAddressObject.TYPE_I_ADDRESS = new bn_js_1.BN(2); CompactAddressObject.TYPE_X_ADDRESS = new bn_js_1.BN(3); +class CompactXAddressObject extends CompactAddressObject { + static fromAddress(xaddr, nameSpace = pbaas_1.DEFAULT_VERUS_CHAINID) { + return new CompactXAddressObject({ + address: xaddr, + nameSpace: nameSpace, + type: CompactAddressObject.TYPE_X_ADDRESS + }); + } + toAddress() { + return this.toXAddress(); + } +} +exports.CompactXAddressObject = CompactXAddressObject; +; diff --git a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js index 97f9ee45..542cca19 100644 --- a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js +++ b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js @@ -229,7 +229,7 @@ class VerusPayInvoiceDetails { this.acceptedsystems = acceptedSystemsBuffers.map(x => (0, address_1.toBase58Check)(x, vdxf_1.I_ADDR_VERSION)); } if (this.isTagged()) { - this.tag = new CompactAddressObject_1.CompactAddressObject(); + this.tag = new CompactAddressObject_1.CompactXAddressObject; reader.offset = this.tag.fromBuffer(reader.buffer, reader.offset); } return reader.offset; diff --git a/src/__tests__/vdxf/compactaddressidobject.test.ts b/src/__tests__/vdxf/compactaddressidobject.test.ts index c37db0c1..6c8fc3be 100644 --- a/src/__tests__/vdxf/compactaddressidobject.test.ts +++ b/src/__tests__/vdxf/compactaddressidobject.test.ts @@ -1,4 +1,4 @@ -import { CompactAddressObject, CompactAddressXVariant } from '../../vdxf/classes/CompactAddressObject'; +import { CompactAddressObject, CompactAddressXVariant, CompactXAddressObject } from '../../vdxf/classes/CompactAddressObject'; import { BN } from "bn.js"; @@ -23,6 +23,7 @@ describe("CompactAddressObject", () => { expect(newDetails.address).toBe("iB5PRXMHLYcNtM8dfLB6KwfJrHU2mKDYuU"); expect(newDetails.rootSystemName).toBe("VRSC"); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); + expect(item.toIAddress()).toBe("iB5PRXMHLYcNtM8dfLB6KwfJrHU2mKDYuU"); }); test("creates instance with xaddress", () => { @@ -63,6 +64,25 @@ describe("CompactAddressObject", () => { expect(item.toXAddress()).toBe("xA91QPpBrHZto92NCU5KEjCqRveS4dAPrf"); }); + test("creates instance of CompactXAddress with data key", () => { + const item = new CompactXAddressObject({ + version: new BN(CompactAddressObject.DEFAULT_VERSION), + type: CompactAddressObject.TYPE_FQN, + address: "vrsc::applications.wallet" + }); + + const detailsBuffer = item.toBuffer(); + + const newDetails = new CompactAddressObject(); + newDetails.fromBuffer(detailsBuffer); + expect(newDetails.version.toString()).toBe("1"); + expect(newDetails.BNType.toNumber()).toBe(CompactAddressObject.TYPE_FQN.toNumber()); + expect(newDetails.address).toBe("vrsc::applications.wallet"); + expect(newDetails.rootSystemName).toBe("VRSC"); + expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); + expect(item.toAddress()).toBe("xA91QPpBrHZto92NCU5KEjCqRveS4dAPrf"); + }); + test("creates instance with fqn", () => { const item = new CompactAddressObject({ version: new BN(CompactAddressObject.DEFAULT_VERSION), diff --git a/src/__tests__/vdxf/veruspayinvoice.test.ts b/src/__tests__/vdxf/veruspayinvoice.test.ts index fd80e697..8897f610 100644 --- a/src/__tests__/vdxf/veruspayinvoice.test.ts +++ b/src/__tests__/vdxf/veruspayinvoice.test.ts @@ -1,5 +1,5 @@ import { BN } from "bn.js"; -import { CompactAddressObject, VerusPayInvoice, VerusPayInvoiceDetails } from "../../vdxf/classes"; +import { CompactAddressObject, CompactXAddressObject, VerusPayInvoice, VerusPayInvoiceDetails } from "../../vdxf/classes"; import { DEST_PKH, TransferDestination } from "../../pbaas/TransferDestination"; import { fromBase58Check } from "../../utils/address"; import { VERUSPAY_VERSION_3, VERUSPAY_VERSION_4, VERUSPAY_VERSION_FIRSTVALID, VERUSPAY_VERSION_LASTVALID } from "../../constants/vdxf/veruspay"; @@ -314,7 +314,7 @@ describe('Serializes and deserializes VerusPay invoice', () => { maxestimatedslippage: new BN(40000000, 10), expiryheight: new BN(2000000, 10), acceptedsystems: ["iNC9NG5Jqk2tqVtqfjfiSpaqxrXaFU6RDu", "iBDkVJqik6BrtcDBQfFygffiYzTMy6EuhU"], - tag: CompactAddressObject.fromXAddress("xA91QPpBrHZto92NCU5KEjCqRveS4dAPrf") + tag: CompactXAddressObject.fromAddress("xA91QPpBrHZto92NCU5KEjCqRveS4dAPrf") }, version) details.setFlags({ diff --git a/src/vdxf/classes/CompactAddressObject.ts b/src/vdxf/classes/CompactAddressObject.ts index 961b4a23..d010a1c3 100644 --- a/src/vdxf/classes/CompactAddressObject.ts +++ b/src/vdxf/classes/CompactAddressObject.ts @@ -190,4 +190,16 @@ export class CompactAddressObject; \ No newline at end of file +export class CompactXAddressObject extends CompactAddressObject { + static fromAddress(xaddr: string, nameSpace: string = DEFAULT_VERUS_CHAINID): CompactXAddressObject { + return new CompactXAddressObject({ + address: xaddr, + nameSpace: nameSpace, + type: CompactAddressObject.TYPE_X_ADDRESS + }) + } + + toAddress() { + return this.toXAddress(); + } +}; \ No newline at end of file diff --git a/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts b/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts index ef767554..ac18d811 100644 --- a/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts +++ b/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts @@ -302,7 +302,7 @@ export class VerusPayInvoiceDetails implements SerializableEntity { } if (this.isTagged()) { - this.tag = new CompactAddressObject(); + this.tag = new CompactXAddressObject; reader.offset = this.tag.fromBuffer(reader.buffer, reader.offset); } @@ -319,7 +319,7 @@ export class VerusPayInvoiceDetails implements SerializableEntity { expiryheight: data.expiryheight != null ? new BN(data.expiryheight) : undefined, maxestimatedslippage: data.maxestimatedslippage != null ? new BN(data.maxestimatedslippage) : undefined, acceptedsystems: data.acceptedsystems, - tag: data.tag ? CompactAddressObject.fromJson(data.tag) : undefined + tag: data.tag ? CompactAddressObject.fromJson(data.tag) as CompactXAddressObject : undefined }, verusPayVersion) } From 799ffeadd1bc937eb8c5445b8b594c3538d73f08 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Tue, 3 Feb 2026 18:10:50 +0100 Subject: [PATCH 111/123] Initialize data in DataPacketResponse constructor (if not present) to prevent runtime errors. --- dist/vdxf/classes/datapacket/DataPacketResponse.d.ts | 2 +- dist/vdxf/classes/datapacket/DataPacketResponse.js | 10 +++++----- src/vdxf/classes/datapacket/DataPacketResponse.ts | 11 +++++------ 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/dist/vdxf/classes/datapacket/DataPacketResponse.d.ts b/dist/vdxf/classes/datapacket/DataPacketResponse.d.ts index ab3cb927..b2484e17 100644 --- a/dist/vdxf/classes/datapacket/DataPacketResponse.d.ts +++ b/dist/vdxf/classes/datapacket/DataPacketResponse.d.ts @@ -52,7 +52,7 @@ export declare class DataPacketResponse implements SerializableEntity { requestID?: string; data: DataDescriptor; static RESPONSE_CONTAINS_REQUEST_ID: import("bn.js"); - constructor(data?: { + constructor(initialData?: { flags?: BigNumber; requestID?: string; data: DataDescriptor; diff --git a/dist/vdxf/classes/datapacket/DataPacketResponse.js b/dist/vdxf/classes/datapacket/DataPacketResponse.js index a6beb887..e5aca09d 100644 --- a/dist/vdxf/classes/datapacket/DataPacketResponse.js +++ b/dist/vdxf/classes/datapacket/DataPacketResponse.js @@ -46,14 +46,14 @@ const vdxf_1 = require("../../../constants/vdxf"); const pbaas_1 = require("../../../pbaas"); const createHash = require("create-hash"); class DataPacketResponse { - constructor(data) { - this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0", 10); - if (data === null || data === void 0 ? void 0 : data.requestID) { + constructor(initialData) { + this.flags = initialData && initialData.flags ? initialData.flags : new bn_js_1.BN("0", 10); + if (initialData === null || initialData === void 0 ? void 0 : initialData.requestID) { if (!this.containsRequestID()) this.toggleContainsRequestID(); - this.requestID = data.requestID; + this.requestID = initialData.requestID; } - this.data = data === null || data === void 0 ? void 0 : data.data; + this.data = initialData && initialData.data ? initialData.data : new pbaas_1.DataDescriptor(); } containsRequestID() { return !!(this.flags.and(DataPacketResponse.RESPONSE_CONTAINS_REQUEST_ID).toNumber()); diff --git a/src/vdxf/classes/datapacket/DataPacketResponse.ts b/src/vdxf/classes/datapacket/DataPacketResponse.ts index 4ba65f92..2a701499 100644 --- a/src/vdxf/classes/datapacket/DataPacketResponse.ts +++ b/src/vdxf/classes/datapacket/DataPacketResponse.ts @@ -68,20 +68,19 @@ export class DataPacketResponse implements SerializableEntity { static RESPONSE_CONTAINS_REQUEST_ID = new BN(1, 10); - constructor (data?: { + constructor (initialData?: { flags?: BigNumber, requestID?: string, data: DataDescriptor }) { - this.flags = data && data.flags ? data.flags : new BN("0", 10); + this.flags = initialData && initialData.flags ? initialData.flags : new BN("0", 10); - if (data?.requestID) { + if (initialData?.requestID) { if (!this.containsRequestID()) this.toggleContainsRequestID(); - this.requestID = data.requestID; + this.requestID = initialData.requestID; } - this.data = data?.data; - + this.data = initialData && initialData.data ? initialData.data : new DataDescriptor(); } containsRequestID() { From 457d3825d5b56e89a7910d184de77211abde6c41 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Tue, 3 Feb 2026 19:01:02 +0100 Subject: [PATCH 112/123] Re-add vdxf keys deleted by merge mistake --- src/vdxf/keys.ts | 90 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/src/vdxf/keys.ts b/src/vdxf/keys.ts index dbfd38e8..70529e12 100644 --- a/src/vdxf/keys.ts +++ b/src/vdxf/keys.ts @@ -690,3 +690,93 @@ export const PROOFS_CONTROLLER_BLUESKY: VDXFKeyInterface = { name: "vrsc::system.proofs.controller.bluesky" } }; + +export const ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS: VDXFKeyInterface = { + "vdxfid": "i4BWC5Lr7gAT7KzyDx82Ye5DeFQD8ckcXe", + "indexid": "x91cesmvxzP7jVt15dnBX2bkfuRDya9TPq", + "hash160result": "3c520f0bde6be181461ebbff11bce396a604c007", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::attestation.view.request.multipleattestations" + } +} + +export const AUTHENTICATION_REQUEST_VDXF_KEY: VDXFKeyInterface = { + "hash160result": "d989dfa450a2bcd597fff2409a62c00640644cba", + "indexid": "xRHh6LdgnyNjv5vhoUYbdPaDE5b1Asnykb", + "qualifiedname": { + "name": "vrsc::identity.authentication.request", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iLTadYCbwfA5Hv3fwntSf13gCRZzF8Qedv" +} + +export const AUTHENTICATION_RESPONSE_VDXF_KEY: VDXFKeyInterface = { + "hash160result": "70db17c46d4aebbf0023ac0e23dd3d85c196eee8", + "indexid": "xVYGUq1veNvX7bQMPkysn77RwfXbLcjhnJ", + "qualifiedname": { + "name": "vrsc::identity.authentication.response", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iQiA22aqo4hrVRXKY5Kioiatv1WaSL2EEw" +} + +export const PROVISION_IDENTITY_DETAILS_VDXF_KEY: VDXFKeyInterface = { + "hash160result": "1ed843dce0f4d9a2bbb839994e3927807eb1878c", + "indexid": "xM7h3sXBovFXuwGQ3wvK2ibtUmMHn3mYkM", + "qualifiedname": { + "name": "vrsc::identity.provision.details", + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV" + }, + "vdxfid": "iGHab566xc2sHmPNCGGA4L5MT7LGoJzmCa" +} + +export const APP_ENCRYPTION_REQUEST_VDXF_KEY: VDXFKeyInterface = { + "vdxfid": "iL5nfPuV8Ekiz1EeW5KE3pXHuUTfQf6QC9", + "indexid": "xQuu8CLZyYyPcB7gMkyP2D3pw8UgHevmcM", + "hash160result": "5f398b165b8ea8c547b5f473f951178fc5482db6", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "application.encryption.request" + } +} + +export const DATA_RESPONSE_VDXF_KEY: VDXFKeyInterface = { + "vdxfid": "i5L8SNcCqY68X3KZEPgJEjGxY2zvMPzutN", + "indexid": "xAAEuB3HgrJo9DCb65LTD7oVZh1wAjCfTC", + "hash160result": "47ecd4c56c93486380a1ec0d06e186ae8cba5914", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "vrsc::generic.data.packet.response" + } +} + +export const USER_DATA_REQUEST_VDXF_KEY: VDXFKeyInterface = { + "vdxfid": "iC7kqU8mfKtqe2gcE2qpuyN4CEcPFTxKGL", + "indexid": "xGwsJGZrWe7WGCZe5iVytMtbDtdQCPvmno", + "hash160result": "d1fba3d9bf18a5293ff912374fc64725db95cb5e", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "user.data.request" + } +} + +export const USER_SPECIFIC_DATA_PACKET_VDXF_KEY: VDXFKeyInterface = { + "vdxfid": "i6JYTdVNLz4Sb6515B73BSX6C1Xba63tNQ", + "indexid": "xB8evRvTCJH7DFx2vrmC9q3dDfYcXW1F15", + "hash160result": "34dfdf234ec37a8451790a19538dbd162913051f", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "user.data.packet.details" + } +} + +export const APP_ENCRYPTION_RESPONSE_VDXF_KEY: VDXFKeyInterface = { + "vdxfid": "iLgnRLninDtMa7f7EbH7zsDqHRknC4CUpB", + "indexid": "xRWtt9DodY72CHY96GwGyFkNK5mo1n7Jxe", + "hash160result": "0d3c42aec1d154f1678e0585e557e75202a4cbbc", + "qualifiedname": { + "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + "name": "application.encryption.response" + } +} \ No newline at end of file From 91f68b56750dce45a8bc7d9758de406a47f1ef4d Mon Sep 17 00:00:00 2001 From: michaeltout Date: Tue, 3 Feb 2026 19:01:44 +0100 Subject: [PATCH 113/123] Push build files for re-adding deleted keys --- dist/vdxf/keys.d.ts | 14 +++--- dist/vdxf/keys.js | 116 ++++++++++++++++++++++---------------------- 2 files changed, 65 insertions(+), 65 deletions(-) diff --git a/dist/vdxf/keys.d.ts b/dist/vdxf/keys.d.ts index 6145f3e3..0a85d482 100644 --- a/dist/vdxf/keys.d.ts +++ b/dist/vdxf/keys.d.ts @@ -75,6 +75,13 @@ export declare const DATA_TYPE_OBJECT_CREDENTIAL: VDXFKeyInterface; export declare const IDENTITY_CREDENTIAL: VDXFKeyInterface; export declare const IDENTITY_CREDENTIAL_PLAINLOGIN: VDXFKeyInterface; export declare const IDENTITY_CREDENTIAL_USERNAME: VDXFKeyInterface; +export declare const PROOFS_CONTROLLER: VDXFKeyInterface; +export declare const PROOFS_CONTROLLER_DISCORD: VDXFKeyInterface; +export declare const PROOFS_CONTROLLER_FACEBOOK: VDXFKeyInterface; +export declare const PROOFS_CONTROLLER_GITHUB: VDXFKeyInterface; +export declare const PROOFS_CONTROLLER_LINKEDIN: VDXFKeyInterface; +export declare const PROOFS_CONTROLLER_REDDIT: VDXFKeyInterface; +export declare const PROOFS_CONTROLLER_BLUESKY: VDXFKeyInterface; export declare const ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS: VDXFKeyInterface; export declare const AUTHENTICATION_REQUEST_VDXF_KEY: VDXFKeyInterface; export declare const AUTHENTICATION_RESPONSE_VDXF_KEY: VDXFKeyInterface; @@ -84,10 +91,3 @@ export declare const DATA_RESPONSE_VDXF_KEY: VDXFKeyInterface; export declare const USER_DATA_REQUEST_VDXF_KEY: VDXFKeyInterface; export declare const USER_SPECIFIC_DATA_PACKET_VDXF_KEY: VDXFKeyInterface; export declare const APP_ENCRYPTION_RESPONSE_VDXF_KEY: VDXFKeyInterface; -export declare const PROOFS_CONTROLLER: VDXFKeyInterface; -export declare const PROOFS_CONTROLLER_DISCORD: VDXFKeyInterface; -export declare const PROOFS_CONTROLLER_FACEBOOK: VDXFKeyInterface; -export declare const PROOFS_CONTROLLER_GITHUB: VDXFKeyInterface; -export declare const PROOFS_CONTROLLER_LINKEDIN: VDXFKeyInterface; -export declare const PROOFS_CONTROLLER_REDDIT: VDXFKeyInterface; -export declare const PROOFS_CONTROLLER_BLUESKY: VDXFKeyInterface; diff --git a/dist/vdxf/keys.js b/dist/vdxf/keys.js index da75504a..0374f0c9 100644 --- a/dist/vdxf/keys.js +++ b/dist/vdxf/keys.js @@ -1,9 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.GENERIC_RESPONSE_DEEPLINK_VDXF_KEY = exports.GENERIC_REQUEST_DEEPLINK_VDXF_KEY = exports.GENERIC_ENVELOPE_DEEPLINK_VDXF_KEY = exports.VERUSPAY_INVOICE_DETAILS_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; -exports.APP_ENCRYPTION_RESPONSE_VDXF_KEY = exports.USER_SPECIFIC_DATA_PACKET_VDXF_KEY = exports.USER_DATA_REQUEST_VDXF_KEY = exports.DATA_RESPONSE_VDXF_KEY = exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.AUTHENTICATION_RESPONSE_VDXF_KEY = exports.AUTHENTICATION_REQUEST_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIALS = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; -exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = exports.ATTESTATION_ID = exports.ATTESTATION_VIEW_RESPONSE = exports.ATTESTATION_VIEW_REQUEST = exports.ATTESTATION_PROVISION_OBJECT = exports.ATTESTATION_PROVISION_TYPE = exports.ATTESTATION_PROVISION_URL = exports.CURRENCY_ADDRESS = exports.SIGNED_SESSION_OBJECT = exports.SIGNED_SESSION_OBJECT_DATA = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_TRANSFER_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_CREATION_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_COMMIT_FAILED = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_UNKNOWN = exports.LOGIN_CONSENT_PROVISIONING_ERROR_KEY_NAMETAKEN = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_FAILED = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_COMPLETE = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGAPPROVAL = exports.LOGIN_CONSENT_PROVISIONING_RESULT_STATE_PENDINGREQUIREDINFO = exports.IDENTITY_UPDATE_TXID = exports.IDENTITY_REGISTRATION_TXID = exports.IDENTITY_NAME_COMMITMENT_TXID = exports.LOGIN_CONSENT_PROVISIONING_RESULT_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_PROVISIONING_REQUEST_VDXF_KEY = exports.ID_PARENT_VDXF_KEY = exports.ID_FULLYQUALIFIEDNAME_VDXF_KEY = exports.ID_SYSTEMID_VDXF_KEY = exports.ID_ADDRESS_VDXF_KEY = exports.LOGIN_CONSENT_ID_PROVISIONING_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_CONTEXT_VDXF_KEY = exports.LOGIN_CONSENT_PERSONALINFO_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_ATTESTATION_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_WEBHOOK_VDXF_KEY = exports.LOGIN_CONSENT_REDIRECT_VDXF_KEY = exports.WALLET_VDXF_KEY = exports.LOGIN_CONSENT_DECISION_VDXF_KEY = exports.LOGIN_CONSENT_CHALLENGE_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_VDXF_KEY = exports.LOGIN_CONSENT_REQUEST_VDXF_KEY = exports.LOGIN_CONSENT_RESPONSE_SIG_VDXF_KEY = exports.IDENTITY_AUTH_SIG_VDXF_KEY = exports.IDENTITY_UPDATE_RESPONSE_VDXF_KEY = exports.IDENTITY_UPDATE_REQUEST_VDXF_KEY = exports.VERUSPAY_INVOICE_VDXF_KEY = void 0; -exports.PROOFS_CONTROLLER_BLUESKY = exports.PROOFS_CONTROLLER_REDDIT = exports.PROOFS_CONTROLLER_LINKEDIN = exports.PROOFS_CONTROLLER_GITHUB = exports.PROOFS_CONTROLLER_FACEBOOK = exports.PROOFS_CONTROLLER_DISCORD = exports.PROOFS_CONTROLLER = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIAL = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = void 0; +exports.APP_ENCRYPTION_RESPONSE_VDXF_KEY = exports.USER_SPECIFIC_DATA_PACKET_VDXF_KEY = exports.USER_DATA_REQUEST_VDXF_KEY = exports.DATA_RESPONSE_VDXF_KEY = exports.APP_ENCRYPTION_REQUEST_VDXF_KEY = exports.PROVISION_IDENTITY_DETAILS_VDXF_KEY = exports.AUTHENTICATION_RESPONSE_VDXF_KEY = exports.AUTHENTICATION_REQUEST_VDXF_KEY = exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = exports.PROOFS_CONTROLLER_BLUESKY = exports.PROOFS_CONTROLLER_REDDIT = exports.PROOFS_CONTROLLER_LINKEDIN = exports.PROOFS_CONTROLLER_GITHUB = exports.PROOFS_CONTROLLER_FACEBOOK = exports.PROOFS_CONTROLLER_DISCORD = exports.PROOFS_CONTROLLER = exports.IDENTITY_CREDENTIAL_USERNAME = exports.IDENTITY_CREDENTIAL_PLAINLOGIN = exports.IDENTITY_CREDENTIAL = exports.DATA_TYPE_OBJECT_CREDENTIAL = exports.DATA_TYPE_OBJECT_DATADESCRIPTOR = exports.DATA_TYPE_DEFINEDKEY = exports.DATA_TYPE_STRING = exports.IDENTITY_SIGNDATA_REQUEST = exports.PROFILE_DATA_VIEW_REQUEST = exports.ATTESTATION_VIEW_REQUEST_ID = exports.ATTESTATION_VIEW_REQUEST_ATTESTOR = exports.ATTESTATION_VIEW_REQUEST_NAME = exports.ATTESTATION_VIEW_REQUEST_KEY = exports.ATTESTATION_TYPE = exports.ATTESTATION_NAME = void 0; exports.VERUSPAY_INVOICE_VDXF_KEY = { hash160result: "628efc28c2e2d40050e1a9de7a93e7ddf2aa0076", indexid: "xK4aRumetZg2ecW4Z45qdDBH769xxnaiEH", @@ -545,6 +543,63 @@ exports.IDENTITY_CREDENTIAL_USERNAME = { name: "vrsc::identity.credential.username" }, }; +exports.PROOFS_CONTROLLER = { + vdxfid: "i9TbCypmPKRpKPZDjk3YcCEZXK6wmPTXjw", + hash160result: "aa3bd2020b6347500c1831665345a2ed417da341", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::system.proofs.controller" + } +}; +exports.PROOFS_CONTROLLER_DISCORD = { + vdxfid: "i6mezdUSNyPq6fsze4cN6U4SAtsHHu1Tn7", + hash160result: "5bc38e3dc0a8d3681c4a685ea8f6658ab1c22524", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::system.proofs.controller.discord" + } +}; +exports.PROOFS_CONTROLLER_FACEBOOK = { + vdxfid: "iHm7TCzTyRFkRrNGTcGhJsLsVwmi4P7SCr", + hash160result: "ad714f6d836cecc6394d09b686db01017dd0b49c", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::system.proofs.controller.facebook" + } +}; +exports.PROOFS_CONTROLLER_GITHUB = { + vdxfid: "i5cjUDhRPEBQctXQYr3gNq8ZZakdBZwDKw", + hash160result: "b627bd17208e8a1d956e202fa688423190a07d17", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::system.proofs.controller.github" + } +}; +exports.PROOFS_CONTROLLER_LINKEDIN = { + vdxfid: "iLWNwRnEujoenFaYvQ3ShkSXhcduw8j8R5", + hash160result: "aceb990c8981b13773f9763d4b3d8e9a3ee1d3ba", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::system.proofs.controller.linkedin" + } +}; +exports.PROOFS_CONTROLLER_REDDIT = { + vdxfid: "i4eJshMkii8ML6FCMEFUqj5GgVUchRvQca", + hash160result: "c778b90896928a8806109ba751d79d3162cdd10c", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::system.proofs.controller.reddit" + } +}; +exports.PROOFS_CONTROLLER_BLUESKY = { + vdxfid: "iBnLtVL69rXXZtjEVndYahV5EgKeWi4GS4", + indexid: "xGcTMHmB1AkCC4cGMUHhZ61cGLLfM1kPwm", + hash160result: "d60b5cfbf4408e338c491ca2994ee186feb01f5b", + qualifiedname: { + namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", + name: "vrsc::system.proofs.controller.bluesky" + } +}; exports.ATTESTATION_VIEW_REQUEST_MULTIPLEATTESTATIONS = { "vdxfid": "i4BWC5Lr7gAT7KzyDx82Ye5DeFQD8ckcXe", "indexid": "x91cesmvxzP7jVt15dnBX2bkfuRDya9TPq", @@ -624,60 +679,5 @@ exports.APP_ENCRYPTION_RESPONSE_VDXF_KEY = { "qualifiedname": { "namespace": "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", "name": "application.encryption.response" -exports.PROOFS_CONTROLLER = { - vdxfid: "i9TbCypmPKRpKPZDjk3YcCEZXK6wmPTXjw", - hash160result: "aa3bd2020b6347500c1831665345a2ed417da341", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::system.proofs.controller" - } -}; -exports.PROOFS_CONTROLLER_DISCORD = { - vdxfid: "i6mezdUSNyPq6fsze4cN6U4SAtsHHu1Tn7", - hash160result: "5bc38e3dc0a8d3681c4a685ea8f6658ab1c22524", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::system.proofs.controller.discord" - } -}; -exports.PROOFS_CONTROLLER_FACEBOOK = { - vdxfid: "iHm7TCzTyRFkRrNGTcGhJsLsVwmi4P7SCr", - hash160result: "ad714f6d836cecc6394d09b686db01017dd0b49c", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::system.proofs.controller.facebook" - } -}; -exports.PROOFS_CONTROLLER_GITHUB = { - vdxfid: "i5cjUDhRPEBQctXQYr3gNq8ZZakdBZwDKw", - hash160result: "b627bd17208e8a1d956e202fa688423190a07d17", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::system.proofs.controller.github" - } -}; -exports.PROOFS_CONTROLLER_LINKEDIN = { - vdxfid: "iLWNwRnEujoenFaYvQ3ShkSXhcduw8j8R5", - hash160result: "aceb990c8981b13773f9763d4b3d8e9a3ee1d3ba", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::system.proofs.controller.linkedin" - } -}; -exports.PROOFS_CONTROLLER_REDDIT = { - vdxfid: "i4eJshMkii8ML6FCMEFUqj5GgVUchRvQca", - hash160result: "c778b90896928a8806109ba751d79d3162cdd10c", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::system.proofs.controller.reddit" - } -}; -exports.PROOFS_CONTROLLER_BLUESKY = { - vdxfid: "iBnLtVL69rXXZtjEVndYahV5EgKeWi4GS4", - indexid: "xGcTMHmB1AkCC4cGMUHhZ61cGLLfM1kPwm", - hash160result: "d60b5cfbf4408e338c491ca2994ee186feb01f5b", - qualifiedname: { - namespace: "i5w5MuNik5NtLcYmNzcvaoixooEebB6MGV", - name: "vrsc::system.proofs.controller.bluesky" } }; From 33f60e578b264a69966b26e70344a9277ebc4738 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Tue, 3 Feb 2026 19:02:17 +0100 Subject: [PATCH 114/123] Change requestID in authentication request/response to be CompactIAddressObject type and also optional (with appropriate flags) --- dist/vdxf/classes/CompactAddressObject.d.ts | 6 ++ dist/vdxf/classes/CompactAddressObject.js | 24 +++++- .../login/AuthenticationRequestDetails.d.ts | 18 ++--- .../login/AuthenticationRequestDetails.js | 55 +++++++------- .../login/AuthenticationResponseDetails.d.ts | 11 ++- .../login/AuthenticationResponseDetails.js | 38 +++++++--- .../classes/payment/VerusPayInvoiceDetails.js | 2 +- src/__tests__/constants/fixtures.ts | 2 +- .../vdxf/authenticationrequestdetails.test.ts | 24 +++--- .../authenticationresponsedetails.test.ts | 9 ++- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 13 ++-- src/vdxf/classes/CompactAddressObject.ts | 26 +++++++ .../login/AuthenticationRequestDetails.ts | 75 ++++++++++--------- .../login/AuthenticationResponseDetails.ts | 50 +++++++++---- .../classes/payment/VerusPayInvoiceDetails.ts | 2 +- 15 files changed, 227 insertions(+), 128 deletions(-) diff --git a/dist/vdxf/classes/CompactAddressObject.d.ts b/dist/vdxf/classes/CompactAddressObject.d.ts index 816cabc9..77db3e31 100644 --- a/dist/vdxf/classes/CompactAddressObject.d.ts +++ b/dist/vdxf/classes/CompactAddressObject.d.ts @@ -59,4 +59,10 @@ export declare class CompactAddressObject { static fromAddress(xaddr: string, nameSpace?: string): CompactXAddressObject; toAddress(): string; + static fromCompactAddressObjectJson(json: any): CompactXAddressObject; +} +export declare class CompactIAddressObject extends CompactAddressObject { + static fromAddress(iaddr: string, nameSpace?: string): CompactIAddressObject; + toAddress(): string; + static fromCompactAddressObjectJson(json: any): CompactIAddressObject; } diff --git a/dist/vdxf/classes/CompactAddressObject.js b/dist/vdxf/classes/CompactAddressObject.js index efd29f46..cc2f2e53 100644 --- a/dist/vdxf/classes/CompactAddressObject.js +++ b/dist/vdxf/classes/CompactAddressObject.js @@ -8,7 +8,7 @@ * and validation of the compact id object. */ Object.defineProperty(exports, "__esModule", { value: true }); -exports.CompactXAddressObject = exports.CompactAddressObject = void 0; +exports.CompactIAddressObject = exports.CompactXAddressObject = exports.CompactAddressObject = void 0; const bn_js_1 = require("bn.js"); const bufferutils_1 = require("../../utils/bufferutils"); const { BufferReader, BufferWriter } = bufferutils_1.default; @@ -150,6 +150,28 @@ class CompactXAddressObject extends CompactAddressObject { toAddress() { return this.toXAddress(); } + static fromCompactAddressObjectJson(json) { + const inst = CompactAddressObject.fromJson(json); + return inst; + } } exports.CompactXAddressObject = CompactXAddressObject; ; +class CompactIAddressObject extends CompactAddressObject { + static fromAddress(iaddr, nameSpace = pbaas_1.DEFAULT_VERUS_CHAINID) { + return new CompactIAddressObject({ + address: iaddr, + nameSpace: nameSpace, + type: CompactAddressObject.TYPE_I_ADDRESS + }); + } + toAddress() { + return this.toIAddress(); + } + static fromCompactAddressObjectJson(json) { + const inst = CompactAddressObject.fromJson(json); + return inst; + } +} +exports.CompactIAddressObject = CompactIAddressObject; +; diff --git a/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts b/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts index eea2421b..93daecba 100644 --- a/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts +++ b/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts @@ -14,11 +14,10 @@ */ import { BigNumber } from "../../../utils/types/BigNumber"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; -import { CompactAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; +import { CompactIAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; export interface AuthenticationRequestDetailsInterface { - version?: BigNumber; flags?: BigNumber; - requestID: string; + requestID?: CompactIAddressObject; recipientConstraints?: Array; expiryTime?: BigNumber; } @@ -28,30 +27,27 @@ export interface RecipientConstraintJson { } export interface RecipientConstraint { type: number; - identity: CompactAddressObject; + identity: CompactIAddressObject; } export interface AuthenticationRequestDetailsJson { - version: number; - requestid: string; + requestid?: CompactAddressObjectJson; flags: number; recipientconstraints?: Array; expirytime?: number; } export declare class AuthenticationRequestDetails implements SerializableEntity { - version: BigNumber; flags?: BigNumber; - requestID: string; + requestID: CompactIAddressObject; recipientConstraints?: Array; expiryTime?: BigNumber; - static DEFAULT_VERSION: import("bn.js"); - static VERSION_FIRSTVALID: import("bn.js"); - static VERSION_LASTVALID: import("bn.js"); + static FLAG_HAS_REQUEST_ID: import("bn.js"); static FLAG_HAS_RECIPIENT_CONSTRAINTS: import("bn.js"); static FLAG_HAS_EXPIRY_TIME: import("bn.js"); static REQUIRED_ID: number; static REQUIRED_SYSTEM: number; static REQUIRED_PARENT: number; constructor(request?: AuthenticationRequestDetailsInterface); + hasRequestID(): boolean; hasRecipentConstraints(): boolean; hasExpiryTime(): boolean; calcFlags(flags?: BigNumber): BigNumber; diff --git a/dist/vdxf/classes/login/AuthenticationRequestDetails.js b/dist/vdxf/classes/login/AuthenticationRequestDetails.js index 61d83396..7dbfbe2c 100644 --- a/dist/vdxf/classes/login/AuthenticationRequestDetails.js +++ b/dist/vdxf/classes/login/AuthenticationRequestDetails.js @@ -18,18 +18,18 @@ exports.AuthenticationRequestDetails = void 0; const bufferutils_1 = require("../../../utils/bufferutils"); const bn_js_1 = require("bn.js"); const varuint_1 = require("../../../utils/varuint"); -const vdxf_1 = require("../../../constants/vdxf"); -const address_1 = require("../../../utils/address"); const CompactAddressObject_1 = require("../CompactAddressObject"); class AuthenticationRequestDetails { constructor(request) { - this.version = (request === null || request === void 0 ? void 0 : request.version) || AuthenticationRequestDetails.DEFAULT_VERSION; - this.requestID = (request === null || request === void 0 ? void 0 : request.requestID) || ''; this.flags = (request === null || request === void 0 ? void 0 : request.flags) || new bn_js_1.BN(0, 10); + this.requestID = (request === null || request === void 0 ? void 0 : request.requestID) || null; this.recipientConstraints = (request === null || request === void 0 ? void 0 : request.recipientConstraints) || null; this.expiryTime = (request === null || request === void 0 ? void 0 : request.expiryTime) || null; this.setFlags(); } + hasRequestID() { + return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_REQUEST_ID).eq(AuthenticationRequestDetails.FLAG_HAS_REQUEST_ID); + } hasRecipentConstraints() { return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS).eq(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); } @@ -37,6 +37,9 @@ class AuthenticationRequestDetails { return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME).eq(AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME); } calcFlags(flags = this.flags) { + if (this.requestID) { + flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_REQUEST_ID); + } if (this.recipientConstraints) { flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); } @@ -48,7 +51,9 @@ class AuthenticationRequestDetails { getByteLength() { let length = 0; length += varuint_1.default.encodingLength(this.flags.toNumber()); - length += vdxf_1.HASH160_BYTE_LENGTH; + if (this.hasRequestID()) { + length += this.requestID.getByteLength(); + } if (this.hasRecipentConstraints()) { length += varuint_1.default.encodingLength(this.recipientConstraints.length); for (let i = 0; i < this.recipientConstraints.length; i++) { @@ -64,7 +69,9 @@ class AuthenticationRequestDetails { toBuffer() { const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getByteLength())); writer.writeCompactSize(this.flags.toNumber()); - writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + if (this.hasRequestID()) { + writer.writeSlice(this.requestID.toBuffer()); + } if (this.hasRecipentConstraints()) { writer.writeCompactSize(this.recipientConstraints.length); for (let i = 0; i < this.recipientConstraints.length; i++) { @@ -80,12 +87,15 @@ class AuthenticationRequestDetails { fromBuffer(buffer, offset) { const reader = new bufferutils_1.default.BufferReader(buffer, offset); this.flags = new bn_js_1.BN(reader.readCompactSize()); - this.requestID = (0, address_1.toBase58Check)(reader.readSlice(20), vdxf_1.I_ADDR_VERSION); + if (this.hasRequestID()) { + this.requestID = new CompactAddressObject_1.CompactIAddressObject(); + reader.offset = this.requestID.fromBuffer(reader.buffer, reader.offset); + } if (this.hasRecipentConstraints()) { this.recipientConstraints = []; const recipientConstraintsLength = reader.readCompactSize(); for (let i = 0; i < recipientConstraintsLength; i++) { - const compactId = new CompactAddressObject_1.CompactAddressObject(); + const compactId = new CompactAddressObject_1.CompactIAddressObject(); const type = reader.readCompactSize(); const identityOffset = reader.offset; reader.offset = compactId.fromBuffer(buffer, identityOffset); @@ -103,9 +113,8 @@ class AuthenticationRequestDetails { toJson() { const flags = this.calcFlags(); const retval = { - version: this.version.toNumber(), flags: flags.toNumber(), - requestid: this.requestID, + requestid: this.requestID.toJson(), recipientConstraints: this.recipientConstraints ? this.recipientConstraints.map(p => ({ type: p.type, identity: p.identity.toJson() })) : undefined, expirytime: this.expiryTime ? this.expiryTime.toNumber() : undefined @@ -114,12 +123,11 @@ class AuthenticationRequestDetails { } static fromJson(data) { const loginDetails = new AuthenticationRequestDetails(); - loginDetails.version = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.version) || 0); loginDetails.flags = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.flags) || 0); - loginDetails.requestID = data.requestid; + loginDetails.requestID = CompactAddressObject_1.CompactIAddressObject.fromCompactAddressObjectJson(data.requestid); if (loginDetails.hasRecipentConstraints() && data.recipientconstraints) { loginDetails.recipientConstraints = data.recipientconstraints.map(p => ({ type: p.type, - identity: CompactAddressObject_1.CompactAddressObject.fromJson(p.identity) })); + identity: CompactAddressObject_1.CompactIAddressObject.fromCompactAddressObjectJson(p.identity) })); } if (loginDetails.hasExpiryTime() && data.expirytime) { loginDetails.expiryTime = new bn_js_1.BN(data.expirytime); @@ -130,14 +138,12 @@ class AuthenticationRequestDetails { this.flags = this.calcFlags(); } isValid() { - let valid = this.requestID != null && this.requestID.length > 0; + let valid = true; valid && (valid = this.flags != null && this.flags.gte(new bn_js_1.BN(0))); - // Validate requestID is a valid base58 address - try { - (0, address_1.fromBase58Check)(this.requestID); - } - catch (_a) { - valid = false; + if (this.hasRequestID()) { + if (!this.requestID || !this.requestID.isValid()) { + return false; + } } if (this.hasRecipentConstraints()) { if (!this.recipientConstraints || this.recipientConstraints.length === 0) { @@ -153,12 +159,9 @@ class AuthenticationRequestDetails { } } exports.AuthenticationRequestDetails = AuthenticationRequestDetails; -// Version -AuthenticationRequestDetails.DEFAULT_VERSION = new bn_js_1.BN(1, 10); -AuthenticationRequestDetails.VERSION_FIRSTVALID = new bn_js_1.BN(1, 10); -AuthenticationRequestDetails.VERSION_LASTVALID = new bn_js_1.BN(1, 10); -AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS = new bn_js_1.BN(1, 10); -AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME = new bn_js_1.BN(2, 10); +AuthenticationRequestDetails.FLAG_HAS_REQUEST_ID = new bn_js_1.BN(1, 10); +AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS = new bn_js_1.BN(2, 10); +AuthenticationRequestDetails.FLAG_HAS_EXPIRY_TIME = new bn_js_1.BN(4, 10); // Recipient Constraint Types - What types of Identity can login, e.g. REQUIRED_SYSTEM and "VRSC" means only identities on the Verus chain can login AuthenticationRequestDetails.REQUIRED_ID = 1; AuthenticationRequestDetails.REQUIRED_SYSTEM = 2; diff --git a/dist/vdxf/classes/login/AuthenticationResponseDetails.d.ts b/dist/vdxf/classes/login/AuthenticationResponseDetails.d.ts index 5deb1d10..0f318549 100644 --- a/dist/vdxf/classes/login/AuthenticationResponseDetails.d.ts +++ b/dist/vdxf/classes/login/AuthenticationResponseDetails.d.ts @@ -1,16 +1,21 @@ import { BigNumber } from '../../../utils/types/BigNumber'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; +import { CompactAddressObjectJson, CompactIAddressObject } from '../CompactAddressObject'; export type AuthenticationResponseDetailsJson = { flags: string; - requestid: string; + requestid?: CompactAddressObjectJson; }; export declare class AuthenticationResponseDetails implements SerializableEntity { flags?: BigNumber; - requestID?: string; + requestID?: CompactIAddressObject; + static FLAG_HAS_REQUEST_ID: import("bn.js"); constructor(data?: { flags?: BigNumber; - requestID?: string; + requestID?: CompactIAddressObject; }); + hasRequestID(): boolean; + setFlags(): void; + calcFlags(flags?: BigNumber): BigNumber; toSha256(): Buffer; getByteLength(): number; toBuffer(): Buffer; diff --git a/dist/vdxf/classes/login/AuthenticationResponseDetails.js b/dist/vdxf/classes/login/AuthenticationResponseDetails.js index e4450b0d..16db40c0 100644 --- a/dist/vdxf/classes/login/AuthenticationResponseDetails.js +++ b/dist/vdxf/classes/login/AuthenticationResponseDetails.js @@ -5,17 +5,25 @@ const varint_1 = require("../../../utils/varint"); const bufferutils_1 = require("../../../utils/bufferutils"); const createHash = require("create-hash"); const bn_js_1 = require("bn.js"); -const address_1 = require("../../../utils/address"); -const vdxf_1 = require("../../../constants/vdxf"); +const CompactAddressObject_1 = require("../CompactAddressObject"); const { BufferReader, BufferWriter } = bufferutils_1.default; class AuthenticationResponseDetails { constructor(data) { this.flags = data && data.flags ? data.flags : new bn_js_1.BN("0", 10); - if (data === null || data === void 0 ? void 0 : data.requestID) { - this.requestID = data.requestID; + this.requestID = (data === null || data === void 0 ? void 0 : data.requestID) || null; + this.setFlags(); + } + hasRequestID() { + return this.flags.and(AuthenticationResponseDetails.FLAG_HAS_REQUEST_ID).eq(AuthenticationResponseDetails.FLAG_HAS_REQUEST_ID); + } + setFlags() { + this.flags = this.calcFlags(); + } + calcFlags(flags = this.flags) { + if (this.requestID) { + flags = flags.or(AuthenticationResponseDetails.FLAG_HAS_REQUEST_ID); } - else - this.requestID = ''; + return flags; } toSha256() { return createHash("sha256").update(this.toBuffer()).digest(); @@ -23,32 +31,40 @@ class AuthenticationResponseDetails { getByteLength() { let length = 0; length += varint_1.default.encodingLength(this.flags); - length += vdxf_1.HASH160_BYTE_LENGTH; + if (this.hasRequestID()) { + length += this.requestID.getByteLength(); + } return length; } toBuffer() { const writer = new BufferWriter(Buffer.alloc(this.getByteLength())); writer.writeVarInt(this.flags); - writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + if (this.hasRequestID()) { + writer.writeSlice(this.requestID.toBuffer()); + } return writer.buffer; } fromBuffer(buffer, offset = 0) { const reader = new BufferReader(buffer, offset); this.flags = reader.readVarInt(); - this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + if (this.hasRequestID()) { + this.requestID = new CompactAddressObject_1.CompactIAddressObject(); + reader.offset = this.requestID.fromBuffer(reader.buffer, reader.offset); + } return reader.offset; } toJson() { return { flags: this.flags.toString(10), - requestid: this.requestID, + requestid: this.requestID.toJson(), }; } static fromJson(json) { return new AuthenticationResponseDetails({ flags: new bn_js_1.BN(json.flags, 10), - requestID: json.requestid + requestID: CompactAddressObject_1.CompactIAddressObject.fromCompactAddressObjectJson(json.requestid) }); } } exports.AuthenticationResponseDetails = AuthenticationResponseDetails; +AuthenticationResponseDetails.FLAG_HAS_REQUEST_ID = new bn_js_1.BN(1, 10); diff --git a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js index 542cca19..fd2ff37c 100644 --- a/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js +++ b/dist/vdxf/classes/payment/VerusPayInvoiceDetails.js @@ -229,7 +229,7 @@ class VerusPayInvoiceDetails { this.acceptedsystems = acceptedSystemsBuffers.map(x => (0, address_1.toBase58Check)(x, vdxf_1.I_ADDR_VERSION)); } if (this.isTagged()) { - this.tag = new CompactAddressObject_1.CompactXAddressObject; + this.tag = new CompactAddressObject_1.CompactXAddressObject(); reader.offset = this.tag.fromBuffer(reader.buffer, reader.offset); } return reader.offset; diff --git a/src/__tests__/constants/fixtures.ts b/src/__tests__/constants/fixtures.ts index 867d1adc..eef2fc9d 100644 --- a/src/__tests__/constants/fixtures.ts +++ b/src/__tests__/constants/fixtures.ts @@ -454,4 +454,4 @@ export const TEST_IDENTITY_ID_1 = "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW"; export const TEST_IDENTITY_ID_2 = "i84T3MWcb6zWcwgNZoU3TXtrUn9EqM84A4"; export const TEST_IDENTITY_ID_3 = "iJ5LnijKvp1wkL4hB3EsJ5kjcE4T8VL4hD"; -export const SERIALIZED_AUTHENTICATION_REQUEST_DETAILS = Buffer.from("03c72c5b342995a2186f96271e91686c5e942d13e1030101022a5fc0e9dedf4f1e8351fe652a140e9dd38fa5a9020102324afad29f51859c54050db854d2c9bb52acd9bd030102a0276f355ad37d8e5d2d10f16c1d051b6f6ead62ff9982d02aac020000", 'hex'); +export const SERIALIZED_AUTHENTICATION_REQUEST_DETAILS = Buffer.from("070102c72c5b342995a2186f96271e91686c5e942d13e1030101022a5fc0e9dedf4f1e8351fe652a140e9dd38fa5a9020102324afad29f51859c54050db854d2c9bb52acd9bd030102a0276f355ad37d8e5d2d10f16c1d051b6f6ead62ff9982d02aac020000", 'hex'); diff --git a/src/__tests__/vdxf/authenticationrequestdetails.test.ts b/src/__tests__/vdxf/authenticationrequestdetails.test.ts index fc9b9c5b..9379b289 100644 --- a/src/__tests__/vdxf/authenticationrequestdetails.test.ts +++ b/src/__tests__/vdxf/authenticationrequestdetails.test.ts @@ -1,24 +1,21 @@ import { BN } from "bn.js"; import { AuthenticationRequestDetails, - CompactAddressObject + CompactAddressObject, + CompactIAddressObject } from "../../vdxf/classes"; -import { SERIALIZED_AUTHENTICATION_REQUEST_DETAILS, TEST_CHALLENGE_ID, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3 } from "../constants/fixtures"; +import { SERIALIZED_AUTHENTICATION_REQUEST_DETAILS, TEST_CHALLENGE_ID, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3, TEST_SYSTEMID } from "../constants/fixtures"; describe("AuthenticationRequestDetails", () => { describe("constructor and basic properties", () => { test("creates instance with minimal required data", () => { - const details = new AuthenticationRequestDetails({ - requestID: TEST_CHALLENGE_ID - }); + const details = new AuthenticationRequestDetails(); const detailsBuffer = details.toBuffer(); const newDetails = new AuthenticationRequestDetails(); newDetails.fromBuffer(detailsBuffer); - expect(details.requestID).toBe(TEST_CHALLENGE_ID); - expect(details.version.toString()).toBe("1"); expect(details.flags?.toString()).toBe("0"); expect(details.recipientConstraints).toBeNull(); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); @@ -26,11 +23,11 @@ describe("AuthenticationRequestDetails", () => { test("creates instance with all optional data", () => { const details = new AuthenticationRequestDetails({ - requestID: TEST_CHALLENGE_ID, + requestID: CompactIAddressObject.fromAddress(TEST_CHALLENGE_ID, TEST_SYSTEMID.toAddress()!), recipientConstraints: [ - { type: AuthenticationRequestDetails.REQUIRED_ID, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }, - { type: AuthenticationRequestDetails.REQUIRED_SYSTEM, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, - { type: AuthenticationRequestDetails.REQUIRED_PARENT, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } + { type: AuthenticationRequestDetails.REQUIRED_ID, identity: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }, + { type: AuthenticationRequestDetails.REQUIRED_SYSTEM, identity: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, + { type: AuthenticationRequestDetails.REQUIRED_PARENT, identity: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } ], expiryTime: new BN(2938475938457) // 1 hour from now }); @@ -40,7 +37,7 @@ describe("AuthenticationRequestDetails", () => { const newDetails = new AuthenticationRequestDetails(); newDetails.fromBuffer(detailsBuffer); - expect(newDetails.requestID).toBe(TEST_CHALLENGE_ID); + expect(newDetails.requestID.toAddress()).toBe(TEST_CHALLENGE_ID); expect(newDetails.recipientConstraints?.length).toBe(3); expect(newDetails.expiryTime?.toString()).toBe("2938475938457"); @@ -53,8 +50,7 @@ describe("AuthenticationRequestDetails", () => { test("creates instance with default constructor", () => { const details = new AuthenticationRequestDetails(); - expect(details.requestID).toBe(""); - expect(details.version.toString()).toBe("1"); + expect(details.hasRequestID()).toBe(false); expect(details.flags?.toString()).toBe("0"); expect(details.recipientConstraints).toBeNull(); }); diff --git a/src/__tests__/vdxf/authenticationresponsedetails.test.ts b/src/__tests__/vdxf/authenticationresponsedetails.test.ts index 82324585..63ecc682 100644 --- a/src/__tests__/vdxf/authenticationresponsedetails.test.ts +++ b/src/__tests__/vdxf/authenticationresponsedetails.test.ts @@ -1,14 +1,15 @@ import { BN } from "bn.js"; import { - AuthenticationResponseDetails + AuthenticationResponseDetails, + CompactIAddressObject } from "../../vdxf/classes"; -import { TEST_CHALLENGE_ID } from "../constants/fixtures"; +import { TEST_CHALLENGE_ID, TEST_SYSTEMID } from "../constants/fixtures"; describe("AuthenticationRequestDetails", () => { describe("constructor and basic properties", () => { test("creates instance with all optional data", () => { const details = new AuthenticationResponseDetails({ - requestID: TEST_CHALLENGE_ID + requestID: CompactIAddressObject.fromAddress(TEST_CHALLENGE_ID, TEST_SYSTEMID.toAddress()!) }); const detailsBuffer = details.toBuffer(); @@ -16,7 +17,7 @@ describe("AuthenticationRequestDetails", () => { const newDetails = new AuthenticationResponseDetails(); newDetails.fromBuffer(detailsBuffer); - expect(newDetails.requestID).toBe(TEST_CHALLENGE_ID); + expect(newDetails.requestID!.toAddress()).toBe(TEST_CHALLENGE_ID); expect(detailsBuffer.toString('hex')).toBe(newDetails.toBuffer().toString('hex')); }); diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 418b17de..19dfedb9 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -28,7 +28,8 @@ import { UserDataRequestDetails, UserSpecificDataPacketDetails, AppEncryptionResponseOrdinalVDXFObject, - AppEncryptionResponseDetails + AppEncryptionResponseDetails, + CompactIAddressObject } from '../../vdxf/classes'; import { DEFAULT_VERUS_CHAINID } from '../../constants/pbaas'; import { fromBase58Check } from '../../utils/address'; @@ -330,11 +331,11 @@ describe('OrdinalVDXFObject and subclasses round-trip serialization', () => { it('should serialize / deserialize a AuthenticationRequestOrdinalVDXFObject via buffer', () => { const details = new AuthenticationRequestDetails({ - requestID: TEST_CHALLENGE_ID, + requestID: CompactIAddressObject.fromAddress(TEST_CHALLENGE_ID, TEST_SYSTEMID.toAddress()!), recipientConstraints: [ - { type: AuthenticationRequestDetails.REQUIRED_ID, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }, - { type: AuthenticationRequestDetails.REQUIRED_SYSTEM, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, - { type: AuthenticationRequestDetails.REQUIRED_PARENT, identity: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } + { type: AuthenticationRequestDetails.REQUIRED_ID, identity: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }, + { type: AuthenticationRequestDetails.REQUIRED_SYSTEM, identity: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }, + { type: AuthenticationRequestDetails.REQUIRED_PARENT, identity: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_3, rootSystemName: "VRSC" }) } ], expiryTime: new BN(2938475938457) }); @@ -360,7 +361,7 @@ describe('OrdinalVDXFObject and subclasses round-trip serialization', () => { it('should serialize / deserialize a AuthenticationResponseOrdinalVDXFObject via buffer', () => { const details = new AuthenticationResponseDetails({ - requestID: TEST_CHALLENGE_ID + requestID: CompactIAddressObject.fromAddress(TEST_CHALLENGE_ID, TEST_SYSTEMID.toAddress()!) }); const obj = new AuthenticationResponseOrdinalVDXFObject({ data: details }); diff --git a/src/vdxf/classes/CompactAddressObject.ts b/src/vdxf/classes/CompactAddressObject.ts index d010a1c3..6791720c 100644 --- a/src/vdxf/classes/CompactAddressObject.ts +++ b/src/vdxf/classes/CompactAddressObject.ts @@ -202,4 +202,30 @@ export class CompactXAddressObject extends CompactAddressObject { + static fromAddress(iaddr: string, nameSpace: string = DEFAULT_VERUS_CHAINID): CompactIAddressObject { + return new CompactIAddressObject({ + address: iaddr, + nameSpace: nameSpace, + type: CompactAddressObject.TYPE_I_ADDRESS + }) + } + + toAddress() { + return this.toIAddress(); + } + + static fromCompactAddressObjectJson(json: any): CompactIAddressObject { + const inst = CompactAddressObject.fromJson(json); + + return inst as CompactIAddressObject; + } }; \ No newline at end of file diff --git a/src/vdxf/classes/login/AuthenticationRequestDetails.ts b/src/vdxf/classes/login/AuthenticationRequestDetails.ts index 15785ac7..85da5601 100644 --- a/src/vdxf/classes/login/AuthenticationRequestDetails.ts +++ b/src/vdxf/classes/login/AuthenticationRequestDetails.ts @@ -19,14 +19,11 @@ import { BigNumber } from "../../../utils/types/BigNumber"; import { BN } from "bn.js"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import varuint from "../../../utils/varuint"; -import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../../../constants/vdxf'; -import { fromBase58Check, toBase58Check } from "../../../utils/address"; -import { CompactAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; +import { CompactIAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; export interface AuthenticationRequestDetailsInterface { - version?: BigNumber; flags?: BigNumber; - requestID: string; + requestID?: CompactIAddressObject; recipientConstraints?: Array; expiryTime?: BigNumber; // UNIX Timestamp } @@ -38,31 +35,25 @@ export interface RecipientConstraintJson { export interface RecipientConstraint { type: number; - identity: CompactAddressObject; + identity: CompactIAddressObject; } export interface AuthenticationRequestDetailsJson { - version: number; - requestid: string; + requestid?: CompactAddressObjectJson; flags: number; recipientconstraints?: Array; expirytime?: number; } export class AuthenticationRequestDetails implements SerializableEntity { - version: BigNumber; - flags?: BigNumber; - requestID: string; + flags?: BigNumber; + requestID: CompactIAddressObject; recipientConstraints?: Array; expiryTime?: BigNumber; // UNIX Timestamp - // Version - static DEFAULT_VERSION = new BN(1, 10) - static VERSION_FIRSTVALID = new BN(1, 10) - static VERSION_LASTVALID = new BN(1, 10) - - static FLAG_HAS_RECIPIENT_CONSTRAINTS = new BN(1, 10); - static FLAG_HAS_EXPIRY_TIME = new BN(2, 10); + static FLAG_HAS_REQUEST_ID = new BN(1, 10); + static FLAG_HAS_RECIPIENT_CONSTRAINTS = new BN(2, 10); + static FLAG_HAS_EXPIRY_TIME = new BN(4, 10); // Recipient Constraint Types - What types of Identity can login, e.g. REQUIRED_SYSTEM and "VRSC" means only identities on the Verus chain can login static REQUIRED_ID = 1; @@ -72,15 +63,18 @@ export class AuthenticationRequestDetails implements SerializableEntity { constructor( request?: AuthenticationRequestDetailsInterface ) { - this.version = request?.version || AuthenticationRequestDetails.DEFAULT_VERSION; - this.requestID = request?.requestID || ''; this.flags = request?.flags || new BN(0, 10); + this.requestID = request?.requestID || null; this.recipientConstraints = request?.recipientConstraints || null; this.expiryTime = request?.expiryTime || null; this.setFlags(); } + hasRequestID(): boolean { + return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_REQUEST_ID).eq(AuthenticationRequestDetails.FLAG_HAS_REQUEST_ID); + } + hasRecipentConstraints(): boolean { return this.flags.and(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS).eq(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); } @@ -90,6 +84,9 @@ export class AuthenticationRequestDetails implements SerializableEntity { } calcFlags(flags: BigNumber = this.flags): BigNumber { + if (this.requestID) { + flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_REQUEST_ID); + } if (this.recipientConstraints) { flags = flags.or(AuthenticationRequestDetails.FLAG_HAS_RECIPIENT_CONSTRAINTS); } @@ -103,7 +100,10 @@ export class AuthenticationRequestDetails implements SerializableEntity { let length = 0; length += varuint.encodingLength(this.flags.toNumber()); - length += HASH160_BYTE_LENGTH; + + if (this.hasRequestID()) { + length += this.requestID.getByteLength(); + } if (this.hasRecipentConstraints()) { length += varuint.encodingLength(this.recipientConstraints.length); @@ -124,8 +124,11 @@ export class AuthenticationRequestDetails implements SerializableEntity { const writer = new bufferutils.BufferWriter(Buffer.alloc(this.getByteLength())) writer.writeCompactSize(this.flags.toNumber()); - writer.writeSlice(fromBase58Check(this.requestID).hash); + if (this.hasRequestID()) { + writer.writeSlice(this.requestID.toBuffer()); + } + if (this.hasRecipentConstraints()) { writer.writeCompactSize(this.recipientConstraints.length); for (let i = 0; i < this.recipientConstraints.length; i++) { @@ -145,14 +148,19 @@ export class AuthenticationRequestDetails implements SerializableEntity { const reader = new bufferutils.BufferReader(buffer, offset); this.flags = new BN(reader.readCompactSize()); - this.requestID = toBase58Check(reader.readSlice(20), I_ADDR_VERSION); + + if (this.hasRequestID()) { + this.requestID = new CompactIAddressObject(); + + reader.offset = this.requestID.fromBuffer(reader.buffer, reader.offset); + } if (this.hasRecipentConstraints()) { this.recipientConstraints = []; const recipientConstraintsLength = reader.readCompactSize(); for (let i = 0; i < recipientConstraintsLength; i++) { - const compactId = new CompactAddressObject(); + const compactId = new CompactIAddressObject(); const type = reader.readCompactSize(); const identityOffset = reader.offset; reader.offset = compactId.fromBuffer(buffer, identityOffset); @@ -174,9 +182,8 @@ export class AuthenticationRequestDetails implements SerializableEntity { const flags = this.calcFlags(); const retval = { - version: this.version.toNumber(), flags: flags.toNumber(), - requestid: this.requestID, + requestid: this.requestID.toJson(), recipientConstraints: this.recipientConstraints ? this.recipientConstraints.map(p => ({type: p.type, identity: p.identity.toJson()})) : undefined, expirytime: this.expiryTime ? this.expiryTime.toNumber() : undefined @@ -188,13 +195,12 @@ export class AuthenticationRequestDetails implements SerializableEntity { static fromJson(data: AuthenticationRequestDetailsJson): AuthenticationRequestDetails { const loginDetails = new AuthenticationRequestDetails(); - loginDetails.version = new BN(data?.version || 0); loginDetails.flags = new BN(data?.flags || 0); - loginDetails.requestID = data.requestid; + loginDetails.requestID = CompactIAddressObject.fromCompactAddressObjectJson(data.requestid); if(loginDetails.hasRecipentConstraints() && data.recipientconstraints) { loginDetails.recipientConstraints = data.recipientconstraints.map(p => ({type: p.type, - identity: CompactAddressObject.fromJson(p.identity)})); + identity: CompactIAddressObject.fromCompactAddressObjectJson(p.identity)})); } if(loginDetails.hasExpiryTime() && data.expirytime) { @@ -209,14 +215,13 @@ export class AuthenticationRequestDetails implements SerializableEntity { } isValid(): boolean { - let valid = this.requestID != null && this.requestID.length > 0; + let valid = true; valid &&= this.flags != null && this.flags.gte(new BN(0)); - // Validate requestID is a valid base58 address - try { - fromBase58Check(this.requestID); - } catch { - valid = false; + if (this.hasRequestID()) { + if (!this.requestID || !this.requestID.isValid()) { + return false; + } } if (this.hasRecipentConstraints()) { diff --git a/src/vdxf/classes/login/AuthenticationResponseDetails.ts b/src/vdxf/classes/login/AuthenticationResponseDetails.ts index 31dba0ce..1d71ee69 100644 --- a/src/vdxf/classes/login/AuthenticationResponseDetails.ts +++ b/src/vdxf/classes/login/AuthenticationResponseDetails.ts @@ -4,29 +4,43 @@ import createHash = require('create-hash'); import { BigNumber } from '../../../utils/types/BigNumber'; import { BN } from 'bn.js'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { fromBase58Check, toBase58Check } from '../../../utils/address'; -import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from '../../../constants/vdxf'; -import varuint from '../../../utils/varuint'; +import { CompactAddressObjectJson, CompactIAddressObject } from '../CompactAddressObject'; const { BufferReader, BufferWriter } = bufferutils; export type AuthenticationResponseDetailsJson = { flags: string, - requestid: string + requestid?: CompactAddressObjectJson } export class AuthenticationResponseDetails implements SerializableEntity { flags?: BigNumber; - requestID?: string; // ID of request, to be referenced in response + requestID?: CompactIAddressObject; // ID of request, to be referenced in response + + static FLAG_HAS_REQUEST_ID = new BN(1, 10); constructor (data?: { flags?: BigNumber, - requestID?: string + requestID?: CompactIAddressObject }) { this.flags = data && data.flags ? data.flags : new BN("0", 10); + this.requestID = data?.requestID || null; - if (data?.requestID) { - this.requestID = data.requestID; - } else this.requestID = ''; + this.setFlags(); + } + + hasRequestID(): boolean { + return this.flags.and(AuthenticationResponseDetails.FLAG_HAS_REQUEST_ID).eq(AuthenticationResponseDetails.FLAG_HAS_REQUEST_ID); + } + + setFlags() { + this.flags = this.calcFlags(); + } + + calcFlags(flags: BigNumber = this.flags): BigNumber { + if (this.requestID) { + flags = flags.or(AuthenticationResponseDetails.FLAG_HAS_REQUEST_ID); + } + return flags; } toSha256() { @@ -38,7 +52,9 @@ export class AuthenticationResponseDetails implements SerializableEntity { length += varint.encodingLength(this.flags); - length += HASH160_BYTE_LENGTH; + if (this.hasRequestID()) { + length += this.requestID.getByteLength(); + } return length; } @@ -48,7 +64,9 @@ export class AuthenticationResponseDetails implements SerializableEntity { writer.writeVarInt(this.flags); - writer.writeSlice(fromBase58Check(this.requestID).hash); + if (this.hasRequestID()) { + writer.writeSlice(this.requestID.toBuffer()); + } return writer.buffer; } @@ -58,7 +76,11 @@ export class AuthenticationResponseDetails implements SerializableEntity { this.flags = reader.readVarInt(); - this.requestID = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); + if (this.hasRequestID()) { + this.requestID = new CompactIAddressObject(); + + reader.offset = this.requestID.fromBuffer(reader.buffer, reader.offset); + } return reader.offset; } @@ -66,14 +88,14 @@ export class AuthenticationResponseDetails implements SerializableEntity { toJson(): AuthenticationResponseDetailsJson { return { flags: this.flags.toString(10), - requestid: this.requestID, + requestid: this.requestID.toJson(), } } static fromJson(json: AuthenticationResponseDetailsJson): AuthenticationResponseDetails { return new AuthenticationResponseDetails({ flags: new BN(json.flags, 10), - requestID: json.requestid + requestID: CompactIAddressObject.fromCompactAddressObjectJson(json.requestid) }); } } \ No newline at end of file diff --git a/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts b/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts index ac18d811..5a6be7ea 100644 --- a/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts +++ b/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts @@ -302,7 +302,7 @@ export class VerusPayInvoiceDetails implements SerializableEntity { } if (this.isTagged()) { - this.tag = new CompactXAddressObject; + this.tag = new CompactXAddressObject(); reader.offset = this.tag.fromBuffer(reader.buffer, reader.offset); } From 6d190895235fe9b597971496bda98125ac001d57 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Wed, 4 Feb 2026 18:55:13 +0100 Subject: [PATCH 115/123] Make requestID optional in AuthenticationRequestDetails --- dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts | 2 +- src/__tests__/vdxf/authenticationrequestdetails.test.ts | 2 +- src/vdxf/classes/login/AuthenticationRequestDetails.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts b/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts index 93daecba..6cfa2244 100644 --- a/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts +++ b/dist/vdxf/classes/login/AuthenticationRequestDetails.d.ts @@ -37,7 +37,7 @@ export interface AuthenticationRequestDetailsJson { } export declare class AuthenticationRequestDetails implements SerializableEntity { flags?: BigNumber; - requestID: CompactIAddressObject; + requestID?: CompactIAddressObject; recipientConstraints?: Array; expiryTime?: BigNumber; static FLAG_HAS_REQUEST_ID: import("bn.js"); diff --git a/src/__tests__/vdxf/authenticationrequestdetails.test.ts b/src/__tests__/vdxf/authenticationrequestdetails.test.ts index 9379b289..2797a3a0 100644 --- a/src/__tests__/vdxf/authenticationrequestdetails.test.ts +++ b/src/__tests__/vdxf/authenticationrequestdetails.test.ts @@ -37,7 +37,7 @@ describe("AuthenticationRequestDetails", () => { const newDetails = new AuthenticationRequestDetails(); newDetails.fromBuffer(detailsBuffer); - expect(newDetails.requestID.toAddress()).toBe(TEST_CHALLENGE_ID); + expect(newDetails.requestID!.toAddress()).toBe(TEST_CHALLENGE_ID); expect(newDetails.recipientConstraints?.length).toBe(3); expect(newDetails.expiryTime?.toString()).toBe("2938475938457"); diff --git a/src/vdxf/classes/login/AuthenticationRequestDetails.ts b/src/vdxf/classes/login/AuthenticationRequestDetails.ts index 85da5601..59f8aa78 100644 --- a/src/vdxf/classes/login/AuthenticationRequestDetails.ts +++ b/src/vdxf/classes/login/AuthenticationRequestDetails.ts @@ -47,7 +47,7 @@ export interface AuthenticationRequestDetailsJson { export class AuthenticationRequestDetails implements SerializableEntity { flags?: BigNumber; - requestID: CompactIAddressObject; + requestID?: CompactIAddressObject; recipientConstraints?: Array; expiryTime?: BigNumber; // UNIX Timestamp From bd15754e7de35437a6ca6dd3a7e2f87ebca77232 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Thu, 5 Feb 2026 12:39:54 +0100 Subject: [PATCH 116/123] Use CompactIAddressObject in place of CompactAddressObject and string where applicable --- dist/utils/address.d.ts | 1 + dist/utils/address.js | 6 +++- dist/vdxf/classes/CompactAddressObject.d.ts | 1 + dist/vdxf/classes/CompactAddressObject.js | 24 +++++++++++-- .../vdxf/classes/VerifiableSignatureData.d.ts | 10 +++--- dist/vdxf/classes/VerifiableSignatureData.js | 14 ++++---- .../AppEncryptionRequestDetails.d.ts | 6 ++-- .../AppEncryptionRequestDetails.js | 4 +-- .../classes/envelope/GenericEnvelope.d.ts | 14 ++++---- dist/vdxf/classes/envelope/GenericEnvelope.js | 15 ++++---- .../login/AuthenticationResponseDetails.d.ts | 2 +- .../ProvisionIdentityDetails.d.ts | 14 ++++---- .../ProvisionIdentityDetails.js | 12 +++---- .../UserDataRequestDetails.d.ts | 6 ++-- .../requestobjects/UserDataRequestDetails.js | 4 +-- .../vdxf/appencryptionrequestdetails.test.ts | 6 ++-- src/__tests__/vdxf/genericrequest.test.ts | 24 ++++++------- src/__tests__/vdxf/genericresponse.test.ts | 18 +++++----- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 14 ++++---- .../vdxf/provisioningidentitydetails.test.ts | 8 ++--- .../userspecificdatapacketdetails.test.ts | 7 ++-- .../vdxf/verifiablesignaturedata.test.ts | 35 +++++++++---------- src/utils/address.ts | 4 +++ src/vdxf/classes/CompactAddressObject.ts | 22 ++++++++++-- src/vdxf/classes/VerifiableSignatureData.ts | 24 ++++++------- .../AppEncryptionRequestDetails.ts | 10 +++--- src/vdxf/classes/envelope/GenericEnvelope.ts | 30 ++++++++-------- .../login/AuthenticationResponseDetails.ts | 2 +- .../classes/payment/VerusPayInvoiceDetails.ts | 2 +- .../ProvisionIdentityDetails.ts | 26 +++++++------- .../requestobjects/UserDataRequestDetails.ts | 10 +++--- 31 files changed, 210 insertions(+), 165 deletions(-) diff --git a/dist/utils/address.d.ts b/dist/utils/address.d.ts index 5b51face..be5e8cfc 100644 --- a/dist/utils/address.d.ts +++ b/dist/utils/address.d.ts @@ -7,6 +7,7 @@ export declare const nameAndParentAddrToAddr: (name: string, parentIAddr?: strin export declare const nameAndParentAddrToIAddr: (name: string, parentIAddr?: string) => string; export declare const fqnToAddress: (fullyqualifiedname: string, rootSystemName?: string, version?: number) => string; export declare const toIAddress: (fullyqualifiedname: string, rootSystemName?: string) => string; +export declare const toXAddress: (fullyqualifiedname: string, rootSystemName?: string) => string; export declare function getDataKey(keyName: string, nameSpaceID?: string, verusChainId?: string, version?: number): { id: string; namespace: string; diff --git a/dist/utils/address.js b/dist/utils/address.js index e5c0db97..2b72e536 100644 --- a/dist/utils/address.js +++ b/dist/utils/address.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.decodeEthDestination = exports.decodeDestination = exports.toIAddress = exports.fqnToAddress = exports.nameAndParentAddrToIAddr = exports.nameAndParentAddrToAddr = exports.toBase58Check = exports.fromBase58Check = void 0; +exports.decodeEthDestination = exports.decodeDestination = exports.toXAddress = exports.toIAddress = exports.fqnToAddress = exports.nameAndParentAddrToIAddr = exports.nameAndParentAddrToAddr = exports.toBase58Check = exports.fromBase58Check = void 0; exports.getDataKey = getDataKey; const pbaas_1 = require("../constants/pbaas"); const vdxf_1 = require("../constants/vdxf"); @@ -96,6 +96,10 @@ const toIAddress = (fullyqualifiedname, rootSystemName = "") => { return (0, exports.fqnToAddress)(fullyqualifiedname, rootSystemName, vdxf_1.I_ADDR_VERSION); }; exports.toIAddress = toIAddress; +const toXAddress = (fullyqualifiedname, rootSystemName = "") => { + return (0, exports.fqnToAddress)(fullyqualifiedname, rootSystemName, vdxf_1.X_ADDR_VERSION); +}; +exports.toXAddress = toXAddress; function trimSpaces(name, removeDuals) { // Unicode "dual spaces" — visually space-like but potentially problematic const dualSpaces = [ diff --git a/dist/vdxf/classes/CompactAddressObject.d.ts b/dist/vdxf/classes/CompactAddressObject.d.ts index 77db3e31..afd22bf9 100644 --- a/dist/vdxf/classes/CompactAddressObject.d.ts +++ b/dist/vdxf/classes/CompactAddressObject.d.ts @@ -48,6 +48,7 @@ export declare class CompactAddressObject; static fromXAddress(xaddr: string, nameSpace?: string): CompactAddressObject; getByteLength(): number; diff --git a/dist/vdxf/classes/CompactAddressObject.js b/dist/vdxf/classes/CompactAddressObject.js index cc2f2e53..7af899c7 100644 --- a/dist/vdxf/classes/CompactAddressObject.js +++ b/dist/vdxf/classes/CompactAddressObject.js @@ -48,7 +48,12 @@ class CompactAddressObject { else if (this.isIaddress()) return this.address; else if (this.isFQN()) { - return (0, address_1.toIAddress)(this.address, this.rootSystemName); + if (this.address.includes("::")) { + return (0, address_1.getDataKey)(this.address, this.nameSpace, (0, address_1.toIAddress)(this.rootSystemName), vdxf_1.I_ADDR_VERSION).id; + } + else { + return (0, address_1.toIAddress)(this.address, this.rootSystemName); + } } else throw new Error("Unknown type"); @@ -59,11 +64,26 @@ class CompactAddressObject { else if (this.isXaddress()) return this.address; else if (this.isFQN()) { - return (0, address_1.getDataKey)(this.address, this.nameSpace, (0, address_1.toIAddress)(this.rootSystemName), vdxf_1.X_ADDR_VERSION).id; + if (this.address.includes("::")) { + return (0, address_1.getDataKey)(this.address, this.nameSpace, (0, address_1.toIAddress)(this.rootSystemName), vdxf_1.X_ADDR_VERSION).id; + } + else { + return (0, address_1.toXAddress)(this.address, this.rootSystemName); + } } else throw new Error("Unknown type"); } + toString() { + if (this.isIaddress()) { + return this.toIAddress(); + } + else if (this.isXaddress()) { + return this.toXAddress(); + } + else + return this.address; + } static fromIAddress(iaddr) { return new CompactAddressObject({ address: iaddr, diff --git a/dist/vdxf/classes/VerifiableSignatureData.d.ts b/dist/vdxf/classes/VerifiableSignatureData.d.ts index 591b24e2..8a8520fa 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.d.ts +++ b/dist/vdxf/classes/VerifiableSignatureData.d.ts @@ -1,6 +1,6 @@ import { BigNumber } from '../../utils/types/BigNumber'; import { SerializableEntity } from '../../utils/types/SerializableEntity'; -import { CompactAddressObject, CompactAddressObjectJson } from './CompactAddressObject'; +import { CompactIAddressObject, CompactAddressObjectJson } from './CompactAddressObject'; import { SignatureData, SignatureJsonDataInterface } from '../../pbaas'; export interface VerifiableSignatureDataJson { version: number; @@ -20,8 +20,8 @@ export interface VerifiableSignatureDataInterface { flags?: BigNumber; signatureVersion?: BigNumber; hashType?: BigNumber; - systemID?: CompactAddressObject; - identityID: CompactAddressObject; + systemID?: CompactIAddressObject; + identityID: CompactIAddressObject; vdxfKeys?: Array; vdxfKeyNames?: Array; boundHashes?: Array; @@ -49,8 +49,8 @@ export declare class VerifiableSignatureData implements SerializableEntity { flags: BigNumber; signatureVersion: BigNumber; hashType: BigNumber; - identityID: CompactAddressObject; - systemID: CompactAddressObject; + identityID: CompactIAddressObject; + systemID: CompactIAddressObject; vdxfKeys?: Array; vdxfKeyNames?: Array; boundHashes?: Array; diff --git a/dist/vdxf/classes/VerifiableSignatureData.js b/dist/vdxf/classes/VerifiableSignatureData.js index 2c899946..ac4086af 100644 --- a/dist/vdxf/classes/VerifiableSignatureData.js +++ b/dist/vdxf/classes/VerifiableSignatureData.js @@ -19,7 +19,7 @@ class VerifiableSignatureData { this.version = data && data.version ? data.version : new bn_js_1.BN(0); this.flags = data && data.flags ? data.flags : new bn_js_1.BN(0); this.signatureVersion = data && data.signatureVersion ? data.signatureVersion : new bn_js_1.BN(2, 10); - this.systemID = data && data.systemID ? data.systemID : new CompactAddressObject_1.CompactAddressObject({ type: CompactAddressObject_1.CompactAddressObject.TYPE_FQN, address: pbaas_1.DEFAULT_VERUS_CHAINNAME }); + this.systemID = data && data.systemID ? data.systemID : new CompactAddressObject_1.CompactIAddressObject({ type: CompactAddressObject_1.CompactIAddressObject.TYPE_FQN, address: pbaas_1.DEFAULT_VERUS_CHAINNAME }); this.hashType = data && data.hashType ? data.hashType : pbaas_1.HASH_TYPE_SHA256; this.identityID = data ? data.identityID : undefined; this.vdxfKeys = data ? data.vdxfKeys : undefined; @@ -191,8 +191,8 @@ class VerifiableSignatureData { this.flags = new bn_js_1.BN(bufferReader.readCompactSize()); this.signatureVersion = new bn_js_1.BN(bufferReader.readCompactSize()); this.hashType = new bn_js_1.BN(bufferReader.readCompactSize()); - this.systemID = new CompactAddressObject_1.CompactAddressObject(); - this.identityID = new CompactAddressObject_1.CompactAddressObject(); + this.systemID = new CompactAddressObject_1.CompactIAddressObject(); + this.identityID = new CompactAddressObject_1.CompactIAddressObject(); bufferReader.offset = this.systemID.fromBuffer(bufferReader.buffer, bufferReader.offset); bufferReader.offset = this.identityID.fromBuffer(bufferReader.buffer, bufferReader.offset); if (this.hasVdxfKeys()) { @@ -285,8 +285,8 @@ class VerifiableSignatureData { instance.flags = new bn_js_1.BN(json.flags); instance.signatureVersion = new bn_js_1.BN(json.signatureversion); instance.hashType = new bn_js_1.BN(json.hashtype); - instance.systemID = CompactAddressObject_1.CompactAddressObject.fromJson(json.systemid); - instance.identityID = CompactAddressObject_1.CompactAddressObject.fromJson(json.identityid); + instance.systemID = CompactAddressObject_1.CompactIAddressObject.fromCompactAddressObjectJson(json.systemid); + instance.identityID = CompactAddressObject_1.CompactIAddressObject.fromCompactAddressObjectJson(json.identityid); instance.vdxfKeys = json === null || json === void 0 ? void 0 : json.vdxfkeys; instance.vdxfKeyNames = json === null || json === void 0 ? void 0 : json.vdxfkeynames; instance.boundHashes = (_a = json.boundhashes) === null || _a === void 0 ? void 0 : _a.map(x => Buffer.from(x, 'hex')); @@ -300,8 +300,8 @@ class VerifiableSignatureData { instance.version = new bn_js_1.BN(VerifiableSignatureData.TYPE_VERUSID_DEFAULT); instance.hashType = new bn_js_1.BN(json.signaturedata.hashtype); instance.signatureVersion = new bn_js_1.BN(json.signatureversion); //default Signature Version - instance.systemID = CompactAddressObject_1.CompactAddressObject.fromJson({ address: json.systemid, version: 1, type: CompactAddressObject_1.CompactAddressObject.TYPE_I_ADDRESS, rootSystemName }); - instance.identityID = CompactAddressObject_1.CompactAddressObject.fromJson({ address: json.address, version: 1, type: CompactAddressObject_1.CompactAddressObject.TYPE_I_ADDRESS, rootSystemName }); + instance.systemID = CompactAddressObject_1.CompactIAddressObject.fromAddress(json.systemid, rootSystemName); + instance.identityID = CompactAddressObject_1.CompactIAddressObject.fromAddress(json.address, rootSystemName); // Set optional fields instance.vdxfKeys = json.vdxfkeys; instance.vdxfKeyNames = json.vdxfkeynames; diff --git a/dist/vdxf/classes/appencryption/AppEncryptionRequestDetails.d.ts b/dist/vdxf/classes/appencryption/AppEncryptionRequestDetails.d.ts index 757b8af4..60ffa21d 100644 --- a/dist/vdxf/classes/appencryption/AppEncryptionRequestDetails.d.ts +++ b/dist/vdxf/classes/appencryption/AppEncryptionRequestDetails.d.ts @@ -17,13 +17,13 @@ */ import { BigNumber } from '../../../utils/types/BigNumber'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { CompactAddressObject, CompactAddressObjectJson } from '../CompactAddressObject'; +import { CompactIAddressObject, CompactAddressObjectJson } from '../CompactAddressObject'; export interface AppEncryptionRequestInterface { version?: BigNumber; flags: BigNumber; encryptToZAddress: string; derivationNumber: BigNumber; - derivationID?: CompactAddressObject; + derivationID?: CompactIAddressObject; requestID?: string; } export interface AppEncryptionRequestJson { @@ -54,7 +54,7 @@ export declare class AppEncryptionRequestDetails implements SerializableEntity { flags: BigNumber; encryptToZAddress: string; derivationNumber: BigNumber; - derivationID?: CompactAddressObject; + derivationID?: CompactIAddressObject; requestID?: string; constructor(data?: AppEncryptionRequestInterface); setFlags(): void; diff --git a/dist/vdxf/classes/appencryption/AppEncryptionRequestDetails.js b/dist/vdxf/classes/appencryption/AppEncryptionRequestDetails.js index 606652b8..d0c98e09 100644 --- a/dist/vdxf/classes/appencryption/AppEncryptionRequestDetails.js +++ b/dist/vdxf/classes/appencryption/AppEncryptionRequestDetails.js @@ -112,7 +112,7 @@ class AppEncryptionRequestDetails { // Read mandatory derivation number this.derivationNumber = reader.readVarInt(); if (this.hasDerivationID()) { - const derivationIDObj = new CompactAddressObject_1.CompactAddressObject(); + const derivationIDObj = new CompactAddressObject_1.CompactIAddressObject(); reader.offset = derivationIDObj.fromBuffer(reader.buffer, reader.offset); this.derivationID = derivationIDObj; } @@ -141,7 +141,7 @@ class AppEncryptionRequestDetails { instance.encryptToZAddress = json.encrypttozaddress; instance.derivationNumber = new bn_js_1.BN(json.derivationnumber); if (instance.hasDerivationID()) { - instance.derivationID = CompactAddressObject_1.CompactAddressObject.fromJson(json === null || json === void 0 ? void 0 : json.derivationid); + instance.derivationID = CompactAddressObject_1.CompactIAddressObject.fromCompactAddressObjectJson(json === null || json === void 0 ? void 0 : json.derivationid); } if (instance.hasRequestID()) { instance.requestID = json === null || json === void 0 ? void 0 : json.requestid; diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts index ea443dab..6b199ced 100644 --- a/dist/vdxf/classes/envelope/GenericEnvelope.d.ts +++ b/dist/vdxf/classes/envelope/GenericEnvelope.d.ts @@ -2,35 +2,35 @@ import { BigNumber } from "../../../utils/types/BigNumber"; import { OrdinalVDXFObject, OrdinalVDXFObjectJson } from "../ordinals/OrdinalVDXFObject"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import { VerifiableSignatureData, VerifiableSignatureDataJson } from "../VerifiableSignatureData"; -import { CompactAddressObject } from "../CompactAddressObject"; +import { CompactAddressObjectJson, CompactIAddressObject } from "../CompactAddressObject"; export interface GenericEnvelopeInterface { version?: BigNumber; flags?: BigNumber; signature?: VerifiableSignatureData; - requestID?: string; + requestID?: CompactIAddressObject; createdAt?: BigNumber; salt?: Buffer; - appOrDelegatedID?: CompactAddressObject; + appOrDelegatedID?: CompactIAddressObject; details: Array; } export type GenericEnvelopeJson = { version: string; flags?: string; signature?: VerifiableSignatureDataJson; - requestid?: string; + requestid?: CompactAddressObjectJson; createdat?: string; salt?: string; - appOrDelegatedID?: string; + appOrDelegatedID?: CompactAddressObjectJson; details: Array; }; export declare class GenericEnvelope implements SerializableEntity { version: BigNumber; flags: BigNumber; signature?: VerifiableSignatureData; - requestID?: string; + requestID?: CompactIAddressObject; createdAt?: BigNumber; salt?: Buffer; - appOrDelegatedID?: CompactAddressObject; + appOrDelegatedID?: CompactIAddressObject; details: Array; static VERSION_CURRENT: import("bn.js"); static VERSION_FIRSTVALID: import("bn.js"); diff --git a/dist/vdxf/classes/envelope/GenericEnvelope.js b/dist/vdxf/classes/envelope/GenericEnvelope.js index 79228e72..7dc2b023 100644 --- a/dist/vdxf/classes/envelope/GenericEnvelope.js +++ b/dist/vdxf/classes/envelope/GenericEnvelope.js @@ -8,8 +8,6 @@ const OrdinalVDXFObject_1 = require("../ordinals/OrdinalVDXFObject"); const varuint_1 = require("../../../utils/varuint"); const crypto_1 = require("crypto"); const VerifiableSignatureData_1 = require("../VerifiableSignatureData"); -const vdxf_1 = require("../../../constants/vdxf"); -const address_1 = require("../../../utils/address"); const CompactAddressObject_1 = require("../CompactAddressObject"); class GenericEnvelope { constructor(envelope = { @@ -107,7 +105,7 @@ class GenericEnvelope { getDataBufferLengthAfterSig() { let length = 0; if (this.hasRequestID()) { - length += vdxf_1.HASH160_BYTE_LENGTH; + length += this.requestID.getByteLength(); } if (this.hasCreatedAt()) { length += varuint_1.default.encodingLength(this.createdAt.toNumber()); @@ -134,7 +132,7 @@ class GenericEnvelope { getDataBufferAfterSig() { const writer = new bufferutils_1.default.BufferWriter(Buffer.alloc(this.getDataBufferLengthAfterSig())); if (this.hasRequestID()) { - writer.writeSlice((0, address_1.fromBase58Check)(this.requestID).hash); + writer.writeSlice(this.requestID.toBuffer()); } if (this.hasCreatedAt()) { writer.writeCompactSize(this.createdAt.toNumber()); @@ -197,7 +195,8 @@ class GenericEnvelope { this.signature = _sig; } if (this.hasRequestID()) { - this.requestID = (0, address_1.toBase58Check)(reader.readSlice(vdxf_1.HASH160_BYTE_LENGTH), vdxf_1.I_ADDR_VERSION); + this.requestID = new CompactAddressObject_1.CompactIAddressObject(); + reader.offset = this.requestID.fromBuffer(reader.buffer, reader.offset); } if (this.hasCreatedAt()) { this.createdAt = new bn_js_1.BN(reader.readCompactSize()); @@ -206,7 +205,7 @@ class GenericEnvelope { this.salt = reader.readVarSlice(); } if (this.hasAppOrDelegatedID()) { - this.appOrDelegatedID = new CompactAddressObject_1.CompactAddressObject(); + this.appOrDelegatedID = new CompactAddressObject_1.CompactIAddressObject(); reader.offset = this.appOrDelegatedID.fromBuffer(reader.buffer, reader.offset); } if (this.hasMultiDetails()) { @@ -239,10 +238,10 @@ class GenericEnvelope { version: this.version.toString(), flags: this.flags.toString(), signature: this.isSigned() ? this.signature.toJson() : undefined, - requestid: this.requestID, + requestid: this.hasRequestID() ? this.requestID.toJson() : undefined, createdat: this.hasCreatedAt() ? this.createdAt.toString() : undefined, salt: this.hasSalt() ? this.salt.toString('hex') : undefined, - appOrDelegatedID: this.hasAppOrDelegatedID() ? this.appOrDelegatedID.toIAddress() : undefined, + appOrDelegatedID: this.hasAppOrDelegatedID() ? this.appOrDelegatedID.toJson() : undefined, details: details }; } diff --git a/dist/vdxf/classes/login/AuthenticationResponseDetails.d.ts b/dist/vdxf/classes/login/AuthenticationResponseDetails.d.ts index 0f318549..9794053d 100644 --- a/dist/vdxf/classes/login/AuthenticationResponseDetails.d.ts +++ b/dist/vdxf/classes/login/AuthenticationResponseDetails.d.ts @@ -1,6 +1,6 @@ import { BigNumber } from '../../../utils/types/BigNumber'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { CompactAddressObjectJson, CompactIAddressObject } from '../CompactAddressObject'; +import { CompactIAddressObject, CompactAddressObjectJson } from '../CompactAddressObject'; export type AuthenticationResponseDetailsJson = { flags: string; requestid?: CompactAddressObjectJson; diff --git a/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts index 7d43c31f..9a276b49 100644 --- a/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts +++ b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.d.ts @@ -15,13 +15,13 @@ */ import { BigNumber } from "../../../utils/types/BigNumber"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; -import { CompactAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; +import { CompactIAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; export interface ProvisionIdentityDetailsInterface { version?: BigNumber; flags: BigNumber; - systemID?: CompactAddressObject; - parentID?: CompactAddressObject; - identityID?: CompactAddressObject; + systemID?: CompactIAddressObject; + parentID?: CompactIAddressObject; + identityID?: CompactIAddressObject; } export interface ProvisionIdentityDetailsJson { version?: number; @@ -33,9 +33,9 @@ export interface ProvisionIdentityDetailsJson { export declare class ProvisionIdentityDetails implements SerializableEntity { version: BigNumber; flags: BigNumber; - systemID?: CompactAddressObject; - parentID?: CompactAddressObject; - identityID?: CompactAddressObject; + systemID?: CompactIAddressObject; + parentID?: CompactIAddressObject; + identityID?: CompactIAddressObject; static DEFAULT_VERSION: import("bn.js"); static VERSION_FIRSTVALID: import("bn.js"); static VERSION_LASTVALID: import("bn.js"); diff --git a/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js index fd3034ea..0bb24fbb 100644 --- a/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js +++ b/dist/vdxf/classes/requestobjects/ProvisionIdentityDetails.js @@ -72,17 +72,17 @@ class ProvisionIdentityDetails { throw new Error("Cannot create provision identity from empty buffer"); this.flags = new bn_js_1.BN(reader.readCompactSize()); if (this.hasSystemId()) { - const systemID = new CompactAddressObject_1.CompactAddressObject(); + const systemID = new CompactAddressObject_1.CompactIAddressObject(); reader.offset = systemID.fromBuffer(reader.buffer, reader.offset); this.systemID = systemID; } if (this.hasParentId()) { - const parentID = new CompactAddressObject_1.CompactAddressObject(); + const parentID = new CompactAddressObject_1.CompactIAddressObject(); reader.offset = parentID.fromBuffer(reader.buffer, reader.offset); this.parentID = parentID; } if (this.hasIdentityId()) { - const identityID = new CompactAddressObject_1.CompactAddressObject(); + const identityID = new CompactAddressObject_1.CompactIAddressObject(); reader.offset = identityID.fromBuffer(reader.buffer, reader.offset); this.identityID = identityID; } @@ -103,13 +103,13 @@ class ProvisionIdentityDetails { provision.version = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.version) || 0); provision.flags = new bn_js_1.BN((data === null || data === void 0 ? void 0 : data.flags) || 0); if (provision.hasSystemId()) { - provision.systemID = CompactAddressObject_1.CompactAddressObject.fromJson(data.systemid); + provision.systemID = CompactAddressObject_1.CompactIAddressObject.fromCompactAddressObjectJson(data.systemid); } if (provision.hasParentId()) { - provision.parentID = CompactAddressObject_1.CompactAddressObject.fromJson(data.parentid); + provision.parentID = CompactAddressObject_1.CompactIAddressObject.fromCompactAddressObjectJson(data.parentid); } if (provision.hasIdentityId()) { - provision.identityID = CompactAddressObject_1.CompactAddressObject.fromJson(data.identityid); + provision.identityID = CompactAddressObject_1.CompactIAddressObject.fromCompactAddressObjectJson(data.identityid); } return provision; } diff --git a/dist/vdxf/classes/requestobjects/UserDataRequestDetails.d.ts b/dist/vdxf/classes/requestobjects/UserDataRequestDetails.d.ts index 11839bf7..9eb0b365 100644 --- a/dist/vdxf/classes/requestobjects/UserDataRequestDetails.d.ts +++ b/dist/vdxf/classes/requestobjects/UserDataRequestDetails.d.ts @@ -20,14 +20,14 @@ */ import { BigNumber } from '../../../utils/types/BigNumber'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { CompactAddressObject, CompactAddressObjectJson } from '../CompactAddressObject'; +import { CompactIAddressObject, CompactAddressObjectJson } from '../CompactAddressObject'; export interface UserDataRequestInterface { version?: BigNumber; flags: BigNumber; searchDataKey: Array<{ [key: string]: string; }>; - signer?: CompactAddressObject; + signer?: CompactIAddressObject; requestedKeys?: string[]; requestID?: string; } @@ -60,7 +60,7 @@ export declare class UserDataRequestDetails implements SerializableEntity { searchDataKey: Array<{ [key: string]: string; }>; - signer?: CompactAddressObject; + signer?: CompactIAddressObject; requestedKeys?: string[]; requestID?: string; constructor(data?: UserDataRequestInterface); diff --git a/dist/vdxf/classes/requestobjects/UserDataRequestDetails.js b/dist/vdxf/classes/requestobjects/UserDataRequestDetails.js index 15764109..b65ca506 100644 --- a/dist/vdxf/classes/requestobjects/UserDataRequestDetails.js +++ b/dist/vdxf/classes/requestobjects/UserDataRequestDetails.js @@ -157,7 +157,7 @@ class UserDataRequestDetails { this.searchDataKey.push({ [key]: value }); } if (this.hasSigner()) { - const signer = new CompactAddressObject_1.CompactAddressObject(); + const signer = new CompactAddressObject_1.CompactIAddressObject(); reader.offset = signer.fromBuffer(reader.buffer, reader.offset); this.signer = signer; } @@ -192,7 +192,7 @@ class UserDataRequestDetails { requestData.version = new bn_js_1.BN(json.version); requestData.flags = new bn_js_1.BN(json.flags); requestData.searchDataKey = json.searchdatakey; - requestData.signer = json.signer ? CompactAddressObject_1.CompactAddressObject.fromJson(json.signer) : undefined; + requestData.signer = json.signer ? CompactAddressObject_1.CompactIAddressObject.fromCompactAddressObjectJson(json.signer) : undefined; requestData.requestedKeys = json.requestedkeys; requestData.requestID = json.requestid; return requestData; diff --git a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts index a6872ea9..52ab85c0 100644 --- a/src/__tests__/vdxf/appencryptionrequestdetails.test.ts +++ b/src/__tests__/vdxf/appencryptionrequestdetails.test.ts @@ -1,10 +1,10 @@ import { BN } from "bn.js"; -import { AppEncryptionRequestDetails, CompactAddressObject } from "../../vdxf/classes"; +import { AppEncryptionRequestDetails, CompactIAddressObject, CompactAddressObject } from "../../vdxf/classes"; import { BigNumber } from "../../utils/types/BigNumber"; // Helper function to create TransferDestination from address string -function createCompactAddressObject(type: BigNumber, address: string): CompactAddressObject { - const obj = new CompactAddressObject({ +function createCompactAddressObject(type: BigNumber, address: string): CompactIAddressObject { + const obj = new CompactIAddressObject({ address, type }); diff --git a/src/__tests__/vdxf/genericrequest.test.ts b/src/__tests__/vdxf/genericrequest.test.ts index e89f9b1a..ea2c12ea 100644 --- a/src/__tests__/vdxf/genericrequest.test.ts +++ b/src/__tests__/vdxf/genericrequest.test.ts @@ -3,7 +3,7 @@ import base64url from 'base64url'; import { DATA_TYPE_MMRDATA, DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256, NULL_I_ADDR } from '../../constants/pbaas'; import { ContentMultiMap, DEST_PKH, fromBase58Check, GenericRequest, IDENTITY_VERSION_PBAAS, IdentityID, IdentityUpdateRequestDetails, KeyID, PartialIdentity, PartialMMRData, PartialSignData, PartialSignDataInitData, ResponseURI, SaplingPaymentAddress, TransferDestination, VerusPayInvoiceDetails } from '../../'; import { VerifiableSignatureData, VerifiableSignatureDataInterface } from '../../vdxf/classes/VerifiableSignatureData'; -import { CompactAddressObject } from '../../vdxf/classes/CompactAddressObject'; +import { CompactIAddressObject } from '../../vdxf/classes/CompactAddressObject'; import { GeneralTypeOrdinalVDXFObject, IdentityUpdateRequestOrdinalVDXFObject, VerusPayInvoiceOrdinalVDXFObject } from '../../vdxf/classes/ordinals'; import { DEEPLINK_PROTOCOL_URL_CURRENT_VERSION, DEEPLINK_PROTOCOL_URL_STRING } from '../../constants/deeplink'; @@ -61,9 +61,9 @@ describe('GenericRequest — buffer / URI / QR operations', () => { const sig = new VerifiableSignatureData({ flags: new BN(0), version: new BN(1), - systemID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + systemID: CompactIAddressObject.fromAddress(DEFAULT_VERUS_CHAINID), hashType: HASH_TYPE_SHA256, - identityID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + identityID: CompactIAddressObject.fromAddress(DEFAULT_VERUS_CHAINID), signatureAsVch: Buffer.from('AgX3RgAAAUEgHAVIHuui1Sc9oLxLbglKvmrv47JJLiM0/RBQwzYL1dlamI/2o9qBc93d79laLXWMhQomqZ4U3Mlr3ueuwl4JFA==', 'base64'), vdxfKeys: [DEFAULT_VERUS_CHAINID, DEFAULT_VERUS_CHAINID], vdxfKeyNames: ["VRSC", "VRSC"], @@ -82,10 +82,10 @@ describe('GenericRequest — buffer / URI / QR operations', () => { const req = new GenericRequest({ details: [detail], signature: sig, - requestID: NULL_I_ADDR, + requestID: CompactIAddressObject.fromAddress(NULL_I_ADDR), createdAt, encryptResponseToAddress: SaplingPaymentAddress.fromAddressString(saplingAddr), - appOrDelegatedID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + appOrDelegatedID: CompactIAddressObject.fromAddress(DEFAULT_VERUS_CHAINID), responseURIs: [ResponseURI.fromUriString("https://verus.io/callback", ResponseURI.TYPE_POST), ResponseURI.fromUriString("https://example.com/callback", ResponseURI.TYPE_REDIRECT)] }); @@ -101,7 +101,7 @@ describe('GenericRequest — buffer / URI / QR operations', () => { expect(round.responseURIs![0].type.toString()).toBe(ResponseURI.TYPE_POST.toString()) expect(round.responseURIs![1].getUriString()).toBe("https://example.com/callback") expect(round.responseURIs![1].type.toString()).toBe(ResponseURI.TYPE_REDIRECT.toString()) - expect(round.requestID).toBe(NULL_I_ADDR) + expect(round.requestID?.toAddress()).toBe(NULL_I_ADDR) expect(round.appOrDelegatedID?.toIAddress()).toBe(DEFAULT_VERUS_CHAINID) expect(round.hasEncryptResponseToAddress()).toBe(true) expect(round.encryptResponseToAddress?.toAddressString()).toBe(saplingAddr) @@ -112,8 +112,8 @@ describe('GenericRequest — buffer / URI / QR operations', () => { it('round trips with createdAt, and valid signature that can be hashed', () => { const sig = new VerifiableSignatureData({ - systemID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), - identityID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + systemID: CompactIAddressObject.fromAddress(DEFAULT_VERUS_CHAINID), + identityID: CompactIAddressObject.fromAddress(DEFAULT_VERUS_CHAINID), signatureAsVch: Buffer.from('AgX3RgAAAUEgHAVIHuui1Sc9oLxLbglKvmrv47JJLiM0/RBQwzYL1dlamI/2o9qBc93d79laLXWMhQomqZ4U3Mlr3ueuwl4JFA==', 'base64'), }); @@ -150,8 +150,8 @@ describe('GenericRequest — buffer / URI / QR operations', () => { it('round trips with createdAt, signature that can be hashed, and invoice', () => { const sig = new VerifiableSignatureData({ - systemID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), - identityID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + systemID: CompactIAddressObject.fromAddress(DEFAULT_VERUS_CHAINID), + identityID: CompactIAddressObject.fromAddress(DEFAULT_VERUS_CHAINID), signatureAsVch: Buffer.from('AgX3RgAAAUEgHAVIHuui1Sc9oLxLbglKvmrv47JJLiM0/RBQwzYL1dlamI/2o9qBc93d79laLXWMhQomqZ4U3Mlr3ueuwl4JFA==', 'base64'), }); @@ -288,8 +288,8 @@ describe('GenericRequest — buffer / URI / QR operations', () => { }); const unsignedSigData: VerifiableSignatureDataInterface = { - systemID: CompactAddressObject.fromIAddress(systemID.toAddress()!), - identityID: CompactAddressObject.fromIAddress(systemID.toAddress()!) + systemID: CompactIAddressObject.fromAddress(systemID.toAddress()!), + identityID: CompactIAddressObject.fromAddress(systemID.toAddress()!) } const req = new GenericRequest({ diff --git a/src/__tests__/vdxf/genericresponse.test.ts b/src/__tests__/vdxf/genericresponse.test.ts index 31aee081..970096f0 100644 --- a/src/__tests__/vdxf/genericresponse.test.ts +++ b/src/__tests__/vdxf/genericresponse.test.ts @@ -4,7 +4,7 @@ import { DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256, NULL_I_ADDR } from '../../cons import { GenericResponse, IdentityID, IdentityUpdateResponseDetails } from '../../'; import { createHash } from 'crypto'; import { VerifiableSignatureData, VerifiableSignatureDataInterface } from '../../vdxf/classes/VerifiableSignatureData'; -import { CompactAddressObject } from '../../vdxf/classes/CompactAddressObject'; +import { CompactAddressObject, CompactIAddressObject } from '../../vdxf/classes/CompactAddressObject'; import { GeneralTypeOrdinalVDXFObject, IdentityUpdateResponseOrdinalVDXFObject } from '../../vdxf/classes/ordinals'; import { TEST_TXID } from '../constants/fixtures'; @@ -68,9 +68,9 @@ describe('GenericResponse — buffer / URI / QR operations', () => { const sig = new VerifiableSignatureData({ flags: new BN(0), version: new BN(1), - systemID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + systemID: CompactIAddressObject.fromAddress(DEFAULT_VERUS_CHAINID), hashType: HASH_TYPE_SHA256, - identityID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + identityID: CompactIAddressObject.fromAddress(DEFAULT_VERUS_CHAINID), signatureAsVch: Buffer.from('abcd', 'hex'), vdxfKeys: [DEFAULT_VERUS_CHAINID, DEFAULT_VERUS_CHAINID], vdxfKeyNames: ["VRSC", "VRSC"], @@ -89,7 +89,7 @@ describe('GenericResponse — buffer / URI / QR operations', () => { const req = new GenericResponse({ details: [detail], - requestID: NULL_I_ADDR, + requestID: CompactIAddressObject.fromAddress(NULL_I_ADDR), signature: sig, createdAt, requestHash: requestHash, @@ -105,7 +105,7 @@ describe('GenericResponse — buffer / URI / QR operations', () => { expect(round.hasRequestHash()).toBe(true) expect(round.requestHash?.toString('hex')).toBe(requestHash.toString('hex')) expect(round.requestHashType?.toNumber()).toBe(requestHashType.toNumber()) - expect(round.requestID).toBe(NULL_I_ADDR) + expect(round.requestID?.toAddress()).toBe(NULL_I_ADDR) const d2 = round.getDetails(0); expect((d2 as GeneralTypeOrdinalVDXFObject).data).toEqual(detail.data); expect(round.toBuffer().toString('hex')).toEqual(req.toBuffer().toString('hex')); @@ -113,8 +113,8 @@ describe('GenericResponse — buffer / URI / QR operations', () => { it('round trips with createdAt, and valid signature that can be hashed', () => { const sig = new VerifiableSignatureData({ - systemID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), - identityID: CompactAddressObject.fromIAddress(DEFAULT_VERUS_CHAINID), + systemID: CompactIAddressObject.fromAddress(DEFAULT_VERUS_CHAINID), + identityID: CompactIAddressObject.fromAddress(DEFAULT_VERUS_CHAINID), signatureAsVch: Buffer.from('AgX3RgAAAUEgHAVIHuui1Sc9oLxLbglKvmrv47JJLiM0/RBQwzYL1dlamI/2o9qBc93d79laLXWMhQomqZ4U3Mlr3ueuwl4JFA==', 'base64'), }); @@ -167,8 +167,8 @@ describe('GenericResponse — buffer / URI / QR operations', () => { }); const unsignedSigData: VerifiableSignatureDataInterface = { - systemID: CompactAddressObject.fromIAddress(systemID.toAddress()!), - identityID: CompactAddressObject.fromIAddress(systemID.toAddress()!) + systemID: CompactIAddressObject.fromAddress(systemID.toAddress()!), + identityID: CompactIAddressObject.fromAddress(systemID.toAddress()!) } const req = new GenericResponse({ diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 19dfedb9..364bd881 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -45,8 +45,8 @@ import { SaplingExtendedViewingKey } from '../../pbaas/SaplingExtendedViewingKey import { VERUSPAY_INVOICE_DETAILS_VDXF_KEY } from '../../vdxf'; // Helper function to create TransferDestination from address string -function createCompactAddressObject(type: BigNumber, address: string): CompactAddressObject { - const obj = new CompactAddressObject({ +function createCompactAddressObject(type: BigNumber, address: string): CompactIAddressObject { + const obj = new CompactIAddressObject({ type, address }); @@ -385,8 +385,8 @@ describe('OrdinalVDXFObject and subclasses round-trip serialization', () => { const details = new ProvisionIdentityDetails({ version: new BN(1, 10), flags: ProvisionIdentityDetails.FLAG_HAS_SYSTEMID.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID), - systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }), - parentID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) + systemID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }), + parentID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }) const obj = new ProvisionIdentityDetailsOrdinalVDXFObject({ data: details }); @@ -514,7 +514,7 @@ describe('OrdinalVDXFObject and subclasses round-trip serialization', () => { version: new BN(1), flags: UserDataRequestDetails.FULL_DATA.or(UserDataRequestDetails.ATTESTATION).or(UserDataRequestDetails.HAS_SIGNER), searchDataKey: [{ "iEEjVkvM9Niz4u2WCr6QQzx1zpVSvDFub1": "Attestation Name" }], - signer: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootSystemName: "VRSC" }), + signer: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq", rootSystemName: "VRSC" }), requestID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); @@ -550,8 +550,8 @@ describe('OrdinalVDXFObject and subclasses round-trip serialization', () => { signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), hashType: new BN(1), flags: new BN(0), - identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), - systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), + identityID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), }), detailsID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); diff --git a/src/__tests__/vdxf/provisioningidentitydetails.test.ts b/src/__tests__/vdxf/provisioningidentitydetails.test.ts index 11511847..c218e850 100644 --- a/src/__tests__/vdxf/provisioningidentitydetails.test.ts +++ b/src/__tests__/vdxf/provisioningidentitydetails.test.ts @@ -1,6 +1,6 @@ import { ProvisionIdentityDetails } from "../../vdxf/classes/requestobjects/ProvisionIdentityDetails"; -import { CompactAddressObject } from "../../vdxf/classes"; +import { CompactIAddressObject, CompactAddressObject } from "../../vdxf/classes"; import { BN } from "bn.js"; import { TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2 } from "../constants/fixtures"; @@ -9,8 +9,8 @@ describe('Serializes and deserializes ProvisionIdentityDetails', () => { const e = new ProvisionIdentityDetails({ version: new BN(1, 10), flags: ProvisionIdentityDetails.FLAG_HAS_SYSTEMID.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID), - systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }), - parentID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) + systemID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }), + parentID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) }) const r = e.toBuffer(); @@ -24,7 +24,7 @@ describe('Serializes and deserializes ProvisionIdentityDetails', () => { const e = new ProvisionIdentityDetails({ version: new BN(1, 10), flags: ProvisionIdentityDetails.FLAG_IS_A_DEFINED_NAME_TO_PROVISION, - identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) + identityID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }) }) const r = e.toBuffer(); diff --git a/src/__tests__/vdxf/userspecificdatapacketdetails.test.ts b/src/__tests__/vdxf/userspecificdatapacketdetails.test.ts index dd979b9e..fd489347 100644 --- a/src/__tests__/vdxf/userspecificdatapacketdetails.test.ts +++ b/src/__tests__/vdxf/userspecificdatapacketdetails.test.ts @@ -1,7 +1,8 @@ import { BN } from "bn.js"; import { CompactAddressObject, - UserSpecificDataPacketDetails, UserSpecificDataPacketDetailsJson + CompactIAddressObject, + UserSpecificDataPacketDetails } from "../../vdxf/classes"; import { DataDescriptor } from "../../pbaas"; import { VerifiableSignatureData } from "../../vdxf/classes/VerifiableSignatureData"; @@ -20,8 +21,8 @@ describe("UserSpecificDataPacketDetails", () => { signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), hashType: new BN(1), flags: new BN(0), - identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), - systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), + identityID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), }), detailsID: "iD4CrjbJBZmwEZQ4bCWgbHx9tBHGP9mdSQ" }); diff --git a/src/__tests__/vdxf/verifiablesignaturedata.test.ts b/src/__tests__/vdxf/verifiablesignaturedata.test.ts index ec59f7ea..4af7b30a 100644 --- a/src/__tests__/vdxf/verifiablesignaturedata.test.ts +++ b/src/__tests__/vdxf/verifiablesignaturedata.test.ts @@ -1,8 +1,7 @@ import { VerifiableSignatureData } from "../../vdxf/classes/VerifiableSignatureData"; -import { CompactAddressObject } from "../../vdxf/classes/CompactAddressObject"; +import { CompactAddressObject, CompactIAddressObject } from "../../vdxf/classes/CompactAddressObject"; import { HASH_TYPE_SHA256 } from '../../constants/pbaas'; import { BN } from "bn.js"; -import { SignatureData } from "../../pbaas/SignatureData"; const createHash = require("create-hash"); @@ -14,8 +13,8 @@ describe('Serializes and deserializes SignatureData', () => { signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), hashType: HASH_TYPE_SHA256, flags: new BN(0), - identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), - systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), + identityID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), }) const sFromBuf = new VerifiableSignatureData(); @@ -31,8 +30,8 @@ describe('Serializes and deserializes SignatureData', () => { signatureVersion: new BN(2), signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), hashType: HASH_TYPE_SHA256, - identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), - systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), + identityID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), vdxfKeys: ["iRrCKQqLQrWczeNotMgqJkoUW5ZzF182Ax", "iCCSCFbq9n7ftEQCQT94t8CcVV5NdxnTvL"], }) @@ -50,8 +49,8 @@ describe('Serializes and deserializes SignatureData', () => { signatureVersion: new BN(2), signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), hashType: HASH_TYPE_SHA256, - identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), - systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), + identityID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), vdxfKeyNames: ["key.name.one", "key.name.two", "another.key"], }) @@ -69,8 +68,8 @@ describe('Serializes and deserializes SignatureData', () => { signatureVersion: new BN(2), signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), hashType: HASH_TYPE_SHA256, - identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), - systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), + identityID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), boundHashes: [ Buffer.from("a".repeat(64), 'hex'), Buffer.from("b".repeat(64), 'hex'), @@ -91,8 +90,8 @@ describe('Serializes and deserializes SignatureData', () => { signatureVersion: new BN(2), signatureAsVch: Buffer.from("efc8d6b60c5b6efaeb3fce4b2c0749c317f2167549ec22b1bee411b8802d5aaf", 'hex'), hashType: HASH_TYPE_SHA256, - identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), - systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), + identityID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i7LaXD2cdy1zeh33eHzZaEPyueT4yQmBfW", rootSystemName: "VRSC" }), + systemID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSC", rootSystemName: "VRSC" }), vdxfKeys: ["iRrCKQqLQrWczeNotMgqJkoUW5ZzF182Ax", "iCCSCFbq9n7ftEQCQT94t8CcVV5NdxnTvL"], vdxfKeyNames: ["key.name.one", "key.name.two"], boundHashes: [ @@ -120,8 +119,8 @@ describe('Serializes and deserializes SignatureData', () => { signatureVersion: new BN(2), signatureAsVch: Buffer.from("AgVfngwAAUEgywnMVejMz6iZj88qRawIivovU9L9uQtGcDbD635QbNt2G/QoZjxT6c7w099JjBd2cGa8ajI99KG0MTbHT99ZZw==", 'base64'), hashType: HASH_TYPE_SHA256, - identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", rootSystemName: "VRSCTEST" }), - systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSCTEST", rootSystemName: "VRSCTEST" }), + identityID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", rootSystemName: "VRSCTEST" }), + systemID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSCTEST", rootSystemName: "VRSCTEST" }), vdxfKeys: ["iQRWB2Ay9rEbzStXDjMFpveh4oEmD6YWXa"], }) @@ -134,8 +133,8 @@ describe('Serializes and deserializes SignatureData', () => { signatureVersion: new BN(2), signatureAsVch: Buffer.from("AgVfngwAAUEgywnMVejMz6iZj88qRawIivovU9L9uQtGcDbD635QbNt2G/QoZjxT6c7w099JjBd2cGa8ajI99KG0MTbHT99ZZw==", 'base64'), hashType: HASH_TYPE_SHA256, - identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", rootSystemName: "VRSCTEST" }), - systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSCTEST", rootSystemName: "VRSCTEST" }), + identityID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", rootSystemName: "VRSCTEST" }), + systemID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSCTEST", rootSystemName: "VRSCTEST" }), vdxfKeys: ["iQRWB2Ay9rEbzStXDjMFpveh4oEmD6YWXa"], }) @@ -152,8 +151,8 @@ describe('Serializes and deserializes SignatureData', () => { signatureVersion: new BN(2), signatureAsVch: Buffer.from("AgV1ngwAAUEfYEg7UW5l0zS88ERfSBXZJ6+RWiUwXQ8BwMkkUesmemFBF29LEVw0C60csXMbMdLYxt3qGLLhgHnev9XIwWFIvw==", 'base64'), hashType: HASH_TYPE_SHA256, - identityID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", rootSystemName: "VRSCTEST" }), - systemID: new CompactAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSCTEST", rootSystemName: "VRSCTEST" }), + identityID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: "i4M7ar436N7wKHgZodjGAWdsBSNjG7cz8s", rootSystemName: "VRSCTEST" }), + systemID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_FQN, address: "VRSCTEST", rootSystemName: "VRSCTEST" }), }) const sigHash = createHash("sha256").update("hello world1").digest(); diff --git a/src/utils/address.ts b/src/utils/address.ts index e5f95a02..1355bb14 100644 --- a/src/utils/address.ts +++ b/src/utils/address.ts @@ -112,6 +112,10 @@ export const toIAddress = (fullyqualifiedname: string, rootSystemName: string = return fqnToAddress(fullyqualifiedname, rootSystemName, I_ADDR_VERSION) } +export const toXAddress = (fullyqualifiedname: string, rootSystemName: string = ""): string => { + return fqnToAddress(fullyqualifiedname, rootSystemName, X_ADDR_VERSION) +} + function trimSpaces( name: string, removeDuals: boolean diff --git a/src/vdxf/classes/CompactAddressObject.ts b/src/vdxf/classes/CompactAddressObject.ts index 6791720c..e21e37e9 100644 --- a/src/vdxf/classes/CompactAddressObject.ts +++ b/src/vdxf/classes/CompactAddressObject.ts @@ -13,7 +13,7 @@ import { BigNumber } from '../../utils/types/BigNumber'; const { BufferReader, BufferWriter } = bufferutils; import { SerializableEntity } from '../../utils/types/SerializableEntity'; import varuint from '../../utils/varuint'; -import { fromBase58Check, getDataKey, toBase58Check, toIAddress } from "../../utils/address"; +import { fromBase58Check, getDataKey, toBase58Check, toIAddress, toXAddress } from "../../utils/address"; import { HASH160_BYTE_LENGTH, I_ADDR_VERSION, X_ADDR_VERSION } from '../../constants/vdxf'; import { DEFAULT_VERUS_CHAINID } from '../../constants/pbaas'; @@ -95,7 +95,11 @@ export class CompactAddressObject { return new CompactAddressObject({ address: iaddr, diff --git a/src/vdxf/classes/VerifiableSignatureData.ts b/src/vdxf/classes/VerifiableSignatureData.ts index a284c7cd..1e39a6b7 100644 --- a/src/vdxf/classes/VerifiableSignatureData.ts +++ b/src/vdxf/classes/VerifiableSignatureData.ts @@ -9,7 +9,7 @@ import { EHashTypes } from '../../pbaas/DataDescriptor'; const { BufferReader, BufferWriter } = bufferutils const createHash = require("create-hash"); import { VERUS_DATA_SIGNATURE_PREFIX } from "../../constants/vdxf"; -import { CompactAddressObject, CompactAddressObjectJson } from './CompactAddressObject'; +import { CompactIAddressObject, CompactAddressObjectJson } from './CompactAddressObject'; import { DEFAULT_VERUS_CHAINNAME, HASH_TYPE_SHA256 } from '../../constants/pbaas'; import varint from '../../utils/varint'; import { SignatureData, SignatureJsonDataInterface } from '../../pbaas'; @@ -33,8 +33,8 @@ export interface VerifiableSignatureDataInterface { flags?: BigNumber; signatureVersion?: BigNumber; hashType?: BigNumber; - systemID?: CompactAddressObject; - identityID: CompactAddressObject; + systemID?: CompactIAddressObject; + identityID: CompactIAddressObject; vdxfKeys?: Array; vdxfKeyNames?: Array; boundHashes?: Array; @@ -64,8 +64,8 @@ export class VerifiableSignatureData implements SerializableEntity { flags: BigNumber; signatureVersion: BigNumber; hashType: BigNumber; - identityID: CompactAddressObject; - systemID: CompactAddressObject; + identityID: CompactIAddressObject; + systemID: CompactIAddressObject; vdxfKeys?: Array; vdxfKeyNames?: Array; boundHashes?: Array; @@ -87,7 +87,7 @@ export class VerifiableSignatureData implements SerializableEntity { this.version = data && data.version ? data.version : new BN(0); this.flags = data && data.flags ? data.flags : new BN(0); this.signatureVersion = data && data.signatureVersion ? data.signatureVersion : new BN(2, 10); - this.systemID = data && data.systemID ? data.systemID : new CompactAddressObject({ type: CompactAddressObject.TYPE_FQN, address: DEFAULT_VERUS_CHAINNAME }); + this.systemID = data && data.systemID ? data.systemID : new CompactIAddressObject({ type: CompactIAddressObject.TYPE_FQN, address: DEFAULT_VERUS_CHAINNAME }); this.hashType = data && data.hashType ? data.hashType : HASH_TYPE_SHA256; this.identityID = data ? data.identityID : undefined; this.vdxfKeys = data ? data.vdxfKeys : undefined; @@ -313,8 +313,8 @@ export class VerifiableSignatureData implements SerializableEntity { this.hashType = new BN(bufferReader.readCompactSize()); - this.systemID = new CompactAddressObject(); - this.identityID = new CompactAddressObject(); + this.systemID = new CompactIAddressObject(); + this.identityID = new CompactIAddressObject(); bufferReader.offset = this.systemID.fromBuffer(bufferReader.buffer, bufferReader.offset); bufferReader.offset = this.identityID.fromBuffer(bufferReader.buffer, bufferReader.offset); @@ -418,8 +418,8 @@ export class VerifiableSignatureData implements SerializableEntity { instance.flags = new BN(json.flags); instance.signatureVersion = new BN(json.signatureversion); instance.hashType = new BN(json.hashtype); - instance.systemID = CompactAddressObject.fromJson(json.systemid); - instance.identityID = CompactAddressObject.fromJson(json.identityid); + instance.systemID = CompactIAddressObject.fromCompactAddressObjectJson(json.systemid); + instance.identityID = CompactIAddressObject.fromCompactAddressObjectJson(json.identityid); instance.vdxfKeys = json?.vdxfkeys; instance.vdxfKeyNames = json?.vdxfkeynames; instance.boundHashes = json.boundhashes?.map(x => Buffer.from(x, 'hex')); @@ -434,8 +434,8 @@ export class VerifiableSignatureData implements SerializableEntity { instance.hashType = new BN(json.signaturedata.hashtype); instance.signatureVersion = new BN(json.signatureversion); //default Signature Version - instance.systemID = CompactAddressObject.fromJson({address: json.systemid, version: 1, type: CompactAddressObject.TYPE_I_ADDRESS, rootSystemName}); - instance.identityID = CompactAddressObject.fromJson({address: json.address, version: 1, type: CompactAddressObject.TYPE_I_ADDRESS, rootSystemName}); + instance.systemID = CompactIAddressObject.fromAddress(json.systemid, rootSystemName); + instance.identityID = CompactIAddressObject.fromAddress(json.address, rootSystemName); // Set optional fields instance.vdxfKeys = json.vdxfkeys; diff --git a/src/vdxf/classes/appencryption/AppEncryptionRequestDetails.ts b/src/vdxf/classes/appencryption/AppEncryptionRequestDetails.ts index adfadfdf..8dcd8bb7 100644 --- a/src/vdxf/classes/appencryption/AppEncryptionRequestDetails.ts +++ b/src/vdxf/classes/appencryption/AppEncryptionRequestDetails.ts @@ -23,7 +23,7 @@ import bufferutils from '../../../utils/bufferutils'; const { BufferReader, BufferWriter } = bufferutils; import { decodeSaplingAddress, toBech32 } from '../../../utils/sapling'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { CompactAddressObject, CompactAddressObjectJson } from '../CompactAddressObject'; +import { CompactIAddressObject, CompactAddressObjectJson } from '../CompactAddressObject'; import varuint from '../../../utils/varuint'; import { fromBase58Check, toBase58Check } from '../../../utils/address'; import { I_ADDR_VERSION, HASH160_BYTE_LENGTH } from '../../../constants/vdxf'; @@ -33,7 +33,7 @@ export interface AppEncryptionRequestInterface { flags: BigNumber; encryptToZAddress: string; derivationNumber: BigNumber; - derivationID?: CompactAddressObject; + derivationID?: CompactIAddressObject; requestID?: string; } @@ -69,7 +69,7 @@ export class AppEncryptionRequestDetails implements SerializableEntity { flags: BigNumber; encryptToZAddress: string; // zaddress reply is encrypted to derivationNumber: BigNumber; - derivationID?: CompactAddressObject; // Defaults to choosing the Z-address from the ID signing if not present + derivationID?: CompactIAddressObject; // Defaults to choosing the Z-address from the ID signing if not present requestID?: string; // Unique identifier for the request constructor(data?: AppEncryptionRequestInterface) { @@ -181,7 +181,7 @@ export class AppEncryptionRequestDetails implements SerializableEntity { this.derivationNumber = reader.readVarInt(); if (this.hasDerivationID()) { - const derivationIDObj = new CompactAddressObject(); + const derivationIDObj = new CompactIAddressObject(); reader.offset = derivationIDObj.fromBuffer(reader.buffer, reader.offset); this.derivationID = derivationIDObj; } @@ -215,7 +215,7 @@ export class AppEncryptionRequestDetails implements SerializableEntity { instance.derivationNumber = new BN(json.derivationnumber); if(instance.hasDerivationID()) { - instance.derivationID = CompactAddressObject.fromJson(json?.derivationid); + instance.derivationID = CompactIAddressObject.fromCompactAddressObjectJson(json?.derivationid); } if(instance.hasRequestID()) { diff --git a/src/vdxf/classes/envelope/GenericEnvelope.ts b/src/vdxf/classes/envelope/GenericEnvelope.ts index a43fa6eb..17a6b0c7 100644 --- a/src/vdxf/classes/envelope/GenericEnvelope.ts +++ b/src/vdxf/classes/envelope/GenericEnvelope.ts @@ -7,18 +7,16 @@ import varuint from "../../../utils/varuint"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; import { createHash } from "crypto"; import { VerifiableSignatureData, VerifiableSignatureDataJson } from "../VerifiableSignatureData"; -import { HASH160_BYTE_LENGTH, I_ADDR_VERSION } from "../../../constants/vdxf"; -import { fromBase58Check, toBase58Check } from "../../../utils/address"; -import { CompactAddressObject } from "../CompactAddressObject"; +import { CompactAddressObjectJson, CompactIAddressObject } from "../CompactAddressObject"; export interface GenericEnvelopeInterface { version?: BigNumber; flags?: BigNumber; signature?: VerifiableSignatureData; - requestID?: string; + requestID?: CompactIAddressObject; createdAt?: BigNumber; salt?: Buffer; - appOrDelegatedID?: CompactAddressObject; + appOrDelegatedID?: CompactIAddressObject; details: Array; } @@ -26,10 +24,10 @@ export type GenericEnvelopeJson = { version: string; flags?: string; signature?: VerifiableSignatureDataJson; - requestid?: string; + requestid?: CompactAddressObjectJson; createdat?: string; salt?: string; - appOrDelegatedID?: string; + appOrDelegatedID?: CompactAddressObjectJson; details: Array; } @@ -37,10 +35,10 @@ export class GenericEnvelope implements SerializableEntity { version: BigNumber; flags: BigNumber; signature?: VerifiableSignatureData; - requestID?: string; + requestID?: CompactIAddressObject; createdAt?: BigNumber; salt?: Buffer; // var length buffer - appOrDelegatedID?: CompactAddressObject; + appOrDelegatedID?: CompactIAddressObject; details: Array; static VERSION_CURRENT = new BN(1, 10) @@ -165,7 +163,7 @@ export class GenericEnvelope implements SerializableEntity { let length = 0; if (this.hasRequestID()) { - length += HASH160_BYTE_LENGTH; + length += this.requestID.getByteLength(); } if (this.hasCreatedAt()) { @@ -202,7 +200,7 @@ export class GenericEnvelope implements SerializableEntity { ); if (this.hasRequestID()) { - writer.writeSlice(fromBase58Check(this.requestID).hash); + writer.writeSlice(this.requestID.toBuffer()); } if (this.hasCreatedAt()) { @@ -289,7 +287,9 @@ export class GenericEnvelope implements SerializableEntity { } if (this.hasRequestID()) { - this.requestID = toBase58Check(reader.readSlice(HASH160_BYTE_LENGTH), I_ADDR_VERSION); + this.requestID = new CompactIAddressObject(); + + reader.offset = this.requestID.fromBuffer(reader.buffer, reader.offset); } if (this.hasCreatedAt()) { @@ -301,7 +301,7 @@ export class GenericEnvelope implements SerializableEntity { } if (this.hasAppOrDelegatedID()) { - this.appOrDelegatedID = new CompactAddressObject(); + this.appOrDelegatedID = new CompactIAddressObject(); reader.offset = this.appOrDelegatedID.fromBuffer(reader.buffer, reader.offset); } @@ -344,10 +344,10 @@ export class GenericEnvelope implements SerializableEntity { version: this.version.toString(), flags: this.flags.toString(), signature: this.isSigned() ? this.signature.toJson() : undefined, - requestid: this.requestID, + requestid: this.hasRequestID() ? this.requestID.toJson() : undefined, createdat: this.hasCreatedAt() ? this.createdAt.toString() : undefined, salt: this.hasSalt() ? this.salt.toString('hex') : undefined, - appOrDelegatedID: this.hasAppOrDelegatedID() ? this.appOrDelegatedID.toIAddress() : undefined, + appOrDelegatedID: this.hasAppOrDelegatedID() ? this.appOrDelegatedID.toJson() : undefined, details: details }; } diff --git a/src/vdxf/classes/login/AuthenticationResponseDetails.ts b/src/vdxf/classes/login/AuthenticationResponseDetails.ts index 1d71ee69..75db7b19 100644 --- a/src/vdxf/classes/login/AuthenticationResponseDetails.ts +++ b/src/vdxf/classes/login/AuthenticationResponseDetails.ts @@ -4,7 +4,7 @@ import createHash = require('create-hash'); import { BigNumber } from '../../../utils/types/BigNumber'; import { BN } from 'bn.js'; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { CompactAddressObjectJson, CompactIAddressObject } from '../CompactAddressObject'; +import { CompactIAddressObject, CompactAddressObjectJson } from '../CompactAddressObject'; const { BufferReader, BufferWriter } = bufferutils; export type AuthenticationResponseDetailsJson = { diff --git a/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts b/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts index 5a6be7ea..42308a83 100644 --- a/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts +++ b/src/vdxf/classes/payment/VerusPayInvoiceDetails.ts @@ -10,7 +10,7 @@ import createHash = require('create-hash'); import { SerializableEntity } from '../../../utils/types/SerializableEntity'; import { VERUSPAY_VERSION_4, VERUSPAY_VERSION_CURRENT } from '../../../constants/vdxf/veruspay'; import { SaplingPaymentAddress } from '../../../pbaas'; -import { CompactAddressObject, CompactAddressObjectJson, CompactAddressXVariant, CompactXAddressObject } from '../CompactAddressObject'; +import { CompactAddressObject, CompactAddressObjectJson, CompactXAddressObject } from '../CompactAddressObject'; const { BufferReader, BufferWriter } = bufferutils; // Added in V3 diff --git a/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts b/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts index a24a2aa3..2705485a 100644 --- a/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts +++ b/src/vdxf/classes/requestobjects/ProvisionIdentityDetails.ts @@ -18,15 +18,15 @@ import bufferutils from "../../../utils/bufferutils"; import { BigNumber } from "../../../utils/types/BigNumber"; import { BN } from "bn.js"; import { SerializableEntity } from "../../../utils/types/SerializableEntity"; -import { CompactAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; +import { CompactIAddressObject, CompactAddressObjectJson } from "../CompactAddressObject"; import varuint from "../../../utils/varuint"; export interface ProvisionIdentityDetailsInterface { version?: BigNumber; flags: BigNumber; - systemID?: CompactAddressObject; // system e.g. VRSC@ - parentID?: CompactAddressObject; // parent e.g. Token@ - identityID?: CompactAddressObject; // Full identity e.g. john.VRSC@ + systemID?: CompactIAddressObject; // system e.g. VRSC@ + parentID?: CompactIAddressObject; // parent e.g. Token@ + identityID?: CompactIAddressObject; // Full identity e.g. john.VRSC@ } export interface ProvisionIdentityDetailsJson { @@ -40,9 +40,9 @@ export interface ProvisionIdentityDetailsJson { export class ProvisionIdentityDetails implements SerializableEntity { version: BigNumber; flags: BigNumber; - systemID?: CompactAddressObject; // system e.g. VRSC@ - parentID?: CompactAddressObject; // parent e.g. Token@ - identityID?: CompactAddressObject; // Full identity e.g. john.VRSC@ + systemID?: CompactIAddressObject; // system e.g. VRSC@ + parentID?: CompactIAddressObject; // parent e.g. Token@ + identityID?: CompactIAddressObject; // Full identity e.g. john.VRSC@ // Version static DEFAULT_VERSION = new BN(1, 10) @@ -122,19 +122,19 @@ export class ProvisionIdentityDetails implements SerializableEntity { this.flags = new BN(reader.readCompactSize()); if (this.hasSystemId()) { - const systemID = new CompactAddressObject(); + const systemID = new CompactIAddressObject(); reader.offset = systemID.fromBuffer(reader.buffer, reader.offset); this.systemID = systemID; } if (this.hasParentId()) { - const parentID = new CompactAddressObject(); + const parentID = new CompactIAddressObject(); reader.offset = parentID.fromBuffer(reader.buffer, reader.offset); this.parentID = parentID; } if (this.hasIdentityId()) { - const identityID = new CompactAddressObject(); + const identityID = new CompactIAddressObject(); reader.offset = identityID.fromBuffer(reader.buffer, reader.offset); this.identityID = identityID; } @@ -160,15 +160,15 @@ export class ProvisionIdentityDetails implements SerializableEntity { provision.flags = new BN(data?.flags || 0); if (provision.hasSystemId()) { - provision.systemID = CompactAddressObject.fromJson(data.systemid); + provision.systemID = CompactIAddressObject.fromCompactAddressObjectJson(data.systemid); } if (provision.hasParentId()) { - provision.parentID = CompactAddressObject.fromJson(data.parentid); + provision.parentID = CompactIAddressObject.fromCompactAddressObjectJson(data.parentid); } if (provision.hasIdentityId()) { - provision.identityID = CompactAddressObject.fromJson(data.identityid); + provision.identityID = CompactIAddressObject.fromCompactAddressObjectJson(data.identityid); } return provision; diff --git a/src/vdxf/classes/requestobjects/UserDataRequestDetails.ts b/src/vdxf/classes/requestobjects/UserDataRequestDetails.ts index 830796f2..0a82fa5e 100644 --- a/src/vdxf/classes/requestobjects/UserDataRequestDetails.ts +++ b/src/vdxf/classes/requestobjects/UserDataRequestDetails.ts @@ -26,7 +26,7 @@ import varuint from '../../../utils/varuint'; import bufferutils from '../../../utils/bufferutils'; const { BufferReader, BufferWriter } = bufferutils; import { SerializableEntity } from '../../../utils/types/SerializableEntity'; -import { CompactAddressObject, CompactAddressObjectJson } from '../CompactAddressObject'; +import { CompactIAddressObject, CompactAddressObjectJson } from '../CompactAddressObject'; import { fromBase58Check, toBase58Check } from '../../../utils/address'; import { I_ADDR_VERSION, HASH160_BYTE_LENGTH } from '../../../constants/vdxf'; @@ -34,7 +34,7 @@ export interface UserDataRequestInterface { version?: BigNumber; flags: BigNumber; searchDataKey: Array<{[key: string]: string}>; - signer?: CompactAddressObject; + signer?: CompactIAddressObject; requestedKeys?: string[]; requestID?: string; } @@ -69,7 +69,7 @@ export class UserDataRequestDetails implements SerializableEntity { version: BigNumber; flags: BigNumber; searchDataKey: Array<{[key: string]: string}>; - signer?: CompactAddressObject; + signer?: CompactIAddressObject; requestedKeys?: string[]; requestID?: string; @@ -235,7 +235,7 @@ export class UserDataRequestDetails implements SerializableEntity { } if (this.hasSigner()) { - const signer = new CompactAddressObject(); + const signer = new CompactIAddressObject(); reader.offset = signer.fromBuffer(reader.buffer, reader.offset); this.signer = signer; @@ -276,7 +276,7 @@ export class UserDataRequestDetails implements SerializableEntity { requestData.version = new BN(json.version); requestData.flags = new BN(json.flags); requestData.searchDataKey = json.searchdatakey; - requestData.signer = json.signer ? CompactAddressObject.fromJson(json.signer) : undefined; + requestData.signer = json.signer ? CompactIAddressObject.fromCompactAddressObjectJson(json.signer) : undefined; requestData.requestedKeys = json.requestedkeys; requestData.requestID = json.requestid; From 17e53eb25d4fa8fea3e2b5e856daeb112f404a47 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 6 Feb 2026 11:41:48 +0100 Subject: [PATCH 117/123] Remove unused import --- src/__tests__/vdxf/authenticationresponsedetails.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/__tests__/vdxf/authenticationresponsedetails.test.ts b/src/__tests__/vdxf/authenticationresponsedetails.test.ts index 63ecc682..497b3081 100644 --- a/src/__tests__/vdxf/authenticationresponsedetails.test.ts +++ b/src/__tests__/vdxf/authenticationresponsedetails.test.ts @@ -1,4 +1,3 @@ -import { BN } from "bn.js"; import { AuthenticationResponseDetails, CompactIAddressObject From 8070882f8b5d4f22fc636b7584737e6f829cf5d9 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 6 Feb 2026 11:45:26 +0100 Subject: [PATCH 118/123] Removed unused import --- src/__tests__/vdxf/appencryptionresponsedetails.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/__tests__/vdxf/appencryptionresponsedetails.test.ts b/src/__tests__/vdxf/appencryptionresponsedetails.test.ts index 3ec2dc57..96af4c92 100644 --- a/src/__tests__/vdxf/appencryptionresponsedetails.test.ts +++ b/src/__tests__/vdxf/appencryptionresponsedetails.test.ts @@ -2,7 +2,7 @@ import { SaplingExtendedViewingKey } from '../../pbaas/SaplingExtendedViewingKey import { SaplingExtendedSpendingKey } from '../../pbaas/SaplingExtendedSpendingKey'; import { SaplingPaymentAddress } from '../../pbaas/SaplingPaymentAddress'; import { BN } from 'bn.js'; -import { AppEncryptionRequestDetails, AppEncryptionResponseDetails } from '../../vdxf/classes'; +import { AppEncryptionResponseDetails } from '../../vdxf/classes'; describe('AppEncryptionResponseDetails', () => { const testViewingKey = 'zxviews1q0njl87fqqqqpq8vghkp6nz9wx48mwelukvhx3yfwg7msatglv4xy8rrh87k9z472edvlrt950qyy6r766dxnpqktxug7t2wy80s4ug325dwp9hf4vw9a6ethf2mwc9wan28p88dq8q2e8sdlw2mhffg6hy92tjyuquz7a8reqdz905x6xt6kqdx5wn7jvas0733hends8q6s8k87emn6m060xdnhgmvn4zmx0ssrwve84lzxkqu2dnfq5qsjwrtlject0an0k282rsnx0kq4'; From 3f92205445ebbf59cd0caa2b8f32054ba247a09f Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 6 Feb 2026 11:52:35 +0100 Subject: [PATCH 119/123] Update unused imports --- src/__tests__/vdxf/veruspayinvoice.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/__tests__/vdxf/veruspayinvoice.test.ts b/src/__tests__/vdxf/veruspayinvoice.test.ts index 8897f610..a1c25861 100644 --- a/src/__tests__/vdxf/veruspayinvoice.test.ts +++ b/src/__tests__/vdxf/veruspayinvoice.test.ts @@ -1,5 +1,5 @@ import { BN } from "bn.js"; -import { CompactAddressObject, CompactXAddressObject, VerusPayInvoice, VerusPayInvoiceDetails } from "../../vdxf/classes"; +import { CompactXAddressObject, VerusPayInvoice, VerusPayInvoiceDetails } from "../../vdxf/classes"; import { DEST_PKH, TransferDestination } from "../../pbaas/TransferDestination"; import { fromBase58Check } from "../../utils/address"; import { VERUSPAY_VERSION_3, VERUSPAY_VERSION_4, VERUSPAY_VERSION_FIRSTVALID, VERUSPAY_VERSION_LASTVALID } from "../../constants/vdxf/veruspay"; From 20a3fbf2634c43b99fd735e29a2952f9c21ee5e2 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 6 Feb 2026 12:01:49 +0100 Subject: [PATCH 120/123] Remove unused imports and minor style fixes --- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 6 +++--- src/__tests__/vdxf/veruspayinvoice.test.ts | 2 +- src/pbaas/Credential.ts | 2 +- src/pbaas/Identity.ts | 2 +- src/vdxf/classes/envelope/GenericEnvelope.ts | 2 +- src/vdxf/classes/ordinals/OrdinalVDXFObject.ts | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 364bd881..0d216445 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -35,7 +35,7 @@ import { DEFAULT_VERUS_CHAINID } from '../../constants/pbaas'; import { fromBase58Check } from '../../utils/address'; import { VDXF_OBJECT_RESERVED_BYTE_I_ADDR, VDXF_ORDINAL_APP_ENCRYPTION_REQUEST, VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE, VDXF_ORDINAL_DATA_DESCRIPTOR, VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST, VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE, VDXF_ORDINAL_AUTHENTICATION_REQUEST, VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS, VDXF_ORDINAL_VERUSPAY_INVOICE, VDXF_OBJECT_RESERVED_BYTE_VDXF_ID_STRING, VDXF_OBJECT_RESERVED_BYTE_ID_OR_CURRENCY } from '../../constants/ordinals/ordinals'; import { VerusPayInvoiceOrdinalVDXFObject } from '../../vdxf/classes/ordinals/VerusPayInvoiceOrdinalVDXFObject'; -import { TEST_CHALLENGE_ID, TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, TEST_EXPIRYHEIGHT, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3, TEST_REQUESTID, TEST_SALT, TEST_SYSTEMID, TEST_TXID } from '../constants/fixtures'; +import { TEST_CHALLENGE_ID, TEST_CLI_ID_UPDATE_REQUEST_JSON_HEX, TEST_EXPIRYHEIGHT, TEST_IDENTITY_ID_1, TEST_IDENTITY_ID_2, TEST_IDENTITY_ID_3, TEST_REQUESTID, TEST_SYSTEMID, TEST_TXID } from '../constants/fixtures'; import { ProvisionIdentityDetailsOrdinalVDXFObject } from '../../vdxf/classes/ordinals/ProvisionIdentityDetailsOrdinalVDXFObject'; import { BigNumber } from '../../utils/types/BigNumber'; import { DataPacketResponse } from '../../vdxf/classes/datapacket/DataPacketResponse'; @@ -99,7 +99,7 @@ describe('OrdinalVDXFObject and subclasses round-trip serialization', () => { } else if (obj instanceof AppEncryptionResponseOrdinalVDXFObject) { newObj = AppEncryptionResponseOrdinalVDXFObject.fromJson(json as any); } else { - throw new Error("Unrecognized type") + throw new Error("Unrecognized type"); } return newObj as T; @@ -248,7 +248,7 @@ describe('OrdinalVDXFObject and subclasses round-trip serialization', () => { destination_bytes: fromBase58Check("R9J8E2no2HVjQmzX6Ntes2ShSGcn7WiRcx").hash }), requestedcurrencyid: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq" - }) + }); details.amount = new BN(12345); details.requestedcurrencyid = DEFAULT_VERUS_CHAINID; diff --git a/src/__tests__/vdxf/veruspayinvoice.test.ts b/src/__tests__/vdxf/veruspayinvoice.test.ts index a1c25861..1e73200f 100644 --- a/src/__tests__/vdxf/veruspayinvoice.test.ts +++ b/src/__tests__/vdxf/veruspayinvoice.test.ts @@ -33,7 +33,7 @@ describe('Serializes and deserializes VerusPay invoice', () => { destination_bytes: fromBase58Check("R9J8E2no2HVjQmzX6Ntes2ShSGcn7WiRcx").hash }), requestedcurrencyid: "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2yq" - }) + }); const inv2 = new VerusPayInvoice({ details: details2, diff --git a/src/pbaas/Credential.ts b/src/pbaas/Credential.ts index 6201cdaf..40f8f081 100644 --- a/src/pbaas/Credential.ts +++ b/src/pbaas/Credential.ts @@ -77,7 +77,7 @@ export class Credential implements SerializableEntity { length += varint.encodingLength(this.version); length += varint.encodingLength(this.flags); - length += HASH160_BYTE_LENGTH // Credential key + length += HASH160_BYTE_LENGTH; // Credential key // Both the credential and scopes are serialized as JSON strings. const credStr = JSON.stringify(this.credential); diff --git a/src/pbaas/Identity.ts b/src/pbaas/Identity.ts index 36f79de8..517a6b65 100644 --- a/src/pbaas/Identity.ts +++ b/src/pbaas/Identity.ts @@ -158,7 +158,7 @@ export class Identity extends Principal implements SerializableEntity { for (const m of this.content_map.entries()) { length += HASH160_BYTE_LENGTH; //uint160 key - length += HASH256_BYTE_LENGTH + length += HASH256_BYTE_LENGTH; } } diff --git a/src/vdxf/classes/envelope/GenericEnvelope.ts b/src/vdxf/classes/envelope/GenericEnvelope.ts index 17a6b0c7..ed340b8c 100644 --- a/src/vdxf/classes/envelope/GenericEnvelope.ts +++ b/src/vdxf/classes/envelope/GenericEnvelope.ts @@ -321,7 +321,7 @@ export class GenericEnvelope implements SerializableEntity { const ord = OrdinalVDXFObject.createFromBuffer(reader.buffer, reader.offset); reader.offset = ord.offset; - this.details = [ord.obj] + this.details = [ord.obj]; } return reader.offset; diff --git a/src/vdxf/classes/ordinals/OrdinalVDXFObject.ts b/src/vdxf/classes/ordinals/OrdinalVDXFObject.ts index 2a9b3877..6ebde8ef 100644 --- a/src/vdxf/classes/ordinals/OrdinalVDXFObject.ts +++ b/src/vdxf/classes/ordinals/OrdinalVDXFObject.ts @@ -188,7 +188,7 @@ export class OrdinalVDXFObject implements SerializableEntity { this.key = reader.readVarSlice().toString('utf8'); } } else { - this.key = key + this.key = key; } this.version = reader.readVarInt(); From 6c537dcd75f8d0fd9733d9b957fd86dc9fcd7946 Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 6 Feb 2026 12:14:44 +0100 Subject: [PATCH 121/123] Fix potential runtime error on toJson in AuthenticationResponseDetails --- dist/vdxf/classes/login/AuthenticationResponseDetails.js | 2 +- src/vdxf/classes/login/AuthenticationResponseDetails.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/vdxf/classes/login/AuthenticationResponseDetails.js b/dist/vdxf/classes/login/AuthenticationResponseDetails.js index 16db40c0..5c774a5b 100644 --- a/dist/vdxf/classes/login/AuthenticationResponseDetails.js +++ b/dist/vdxf/classes/login/AuthenticationResponseDetails.js @@ -56,7 +56,7 @@ class AuthenticationResponseDetails { toJson() { return { flags: this.flags.toString(10), - requestid: this.requestID.toJson(), + requestid: this.hasRequestID() ? this.requestID.toJson() : undefined }; } static fromJson(json) { diff --git a/src/vdxf/classes/login/AuthenticationResponseDetails.ts b/src/vdxf/classes/login/AuthenticationResponseDetails.ts index 75db7b19..3eb24d37 100644 --- a/src/vdxf/classes/login/AuthenticationResponseDetails.ts +++ b/src/vdxf/classes/login/AuthenticationResponseDetails.ts @@ -88,7 +88,7 @@ export class AuthenticationResponseDetails implements SerializableEntity { toJson(): AuthenticationResponseDetailsJson { return { flags: this.flags.toString(10), - requestid: this.requestID.toJson(), + requestid: this.hasRequestID() ? this.requestID.toJson() : undefined } } From 985f2902234d46c349dddf73b5dbdbe59644580c Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 6 Feb 2026 12:17:36 +0100 Subject: [PATCH 122/123] Style fixes --- src/__tests__/vdxf/genericresponse.test.ts | 2 +- src/__tests__/vdxf/ordinalvdxfobject.test.ts | 2 +- src/__tests__/vdxf/provisioningidentitydetails.test.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/__tests__/vdxf/genericresponse.test.ts b/src/__tests__/vdxf/genericresponse.test.ts index 970096f0..fad9e21f 100644 --- a/src/__tests__/vdxf/genericresponse.test.ts +++ b/src/__tests__/vdxf/genericresponse.test.ts @@ -4,7 +4,7 @@ import { DEFAULT_VERUS_CHAINID, HASH_TYPE_SHA256, NULL_I_ADDR } from '../../cons import { GenericResponse, IdentityID, IdentityUpdateResponseDetails } from '../../'; import { createHash } from 'crypto'; import { VerifiableSignatureData, VerifiableSignatureDataInterface } from '../../vdxf/classes/VerifiableSignatureData'; -import { CompactAddressObject, CompactIAddressObject } from '../../vdxf/classes/CompactAddressObject'; +import { CompactIAddressObject } from '../../vdxf/classes/CompactAddressObject'; import { GeneralTypeOrdinalVDXFObject, IdentityUpdateResponseOrdinalVDXFObject } from '../../vdxf/classes/ordinals'; import { TEST_TXID } from '../constants/fixtures'; diff --git a/src/__tests__/vdxf/ordinalvdxfobject.test.ts b/src/__tests__/vdxf/ordinalvdxfobject.test.ts index 0d216445..5da6851b 100644 --- a/src/__tests__/vdxf/ordinalvdxfobject.test.ts +++ b/src/__tests__/vdxf/ordinalvdxfobject.test.ts @@ -387,7 +387,7 @@ describe('OrdinalVDXFObject and subclasses round-trip serialization', () => { flags: ProvisionIdentityDetails.FLAG_HAS_SYSTEMID.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID), systemID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }), parentID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) - }) + }); const obj = new ProvisionIdentityDetailsOrdinalVDXFObject({ data: details }); diff --git a/src/__tests__/vdxf/provisioningidentitydetails.test.ts b/src/__tests__/vdxf/provisioningidentitydetails.test.ts index c218e850..5b8d8cc6 100644 --- a/src/__tests__/vdxf/provisioningidentitydetails.test.ts +++ b/src/__tests__/vdxf/provisioningidentitydetails.test.ts @@ -11,7 +11,7 @@ describe('Serializes and deserializes ProvisionIdentityDetails', () => { flags: ProvisionIdentityDetails.FLAG_HAS_SYSTEMID.or(ProvisionIdentityDetails.FLAG_HAS_PARENTID), systemID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_1, rootSystemName: "VRSC" }), parentID: new CompactIAddressObject({ version: CompactAddressObject.DEFAULT_VERSION, type: CompactAddressObject.TYPE_I_ADDRESS, address: TEST_IDENTITY_ID_2, rootSystemName: "VRSC" }) - }) + }); const r = e.toBuffer(); const rFromBuf = new ProvisionIdentityDetails(); From 8ee736605207bd36a525c26d814eb390029dbcac Mon Sep 17 00:00:00 2001 From: michaeltout Date: Fri, 6 Feb 2026 13:40:06 +0100 Subject: [PATCH 123/123] Fix ordinal numbering order in constants/ordinals/ordinals.js --- dist/constants/ordinals/ordinals.js | 10 +++++----- src/constants/ordinals/ordinals.ts | 11 +++++------ 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/dist/constants/ordinals/ordinals.js b/dist/constants/ordinals/ordinals.js index 377533af..5f0a8249 100644 --- a/dist/constants/ordinals/ordinals.js +++ b/dist/constants/ordinals/ordinals.js @@ -12,8 +12,8 @@ exports.VDXF_ORDINAL_AUTHENTICATION_RESPONSE = new bn_js_1.BN(3, 10); exports.VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new bn_js_1.BN(4, 10); exports.VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new bn_js_1.BN(5, 10); exports.VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new bn_js_1.BN(6, 10); -exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = new bn_js_1.BN(8, 10); -exports.VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE = new bn_js_1.BN(9, 10); -exports.VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET = new bn_js_1.BN(10, 10); -exports.VDXF_ORDINAL_USER_DATA_REQUEST = new bn_js_1.BN(12, 10); -exports.VDXF_ORDINAL_DATA_RESPONSE = new bn_js_1.BN(13, 10); +exports.VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = new bn_js_1.BN(7, 10); +exports.VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE = new bn_js_1.BN(8, 10); +exports.VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET = new bn_js_1.BN(9, 10); +exports.VDXF_ORDINAL_USER_DATA_REQUEST = new bn_js_1.BN(10, 10); +exports.VDXF_ORDINAL_DATA_RESPONSE = new bn_js_1.BN(11, 10); diff --git a/src/constants/ordinals/ordinals.ts b/src/constants/ordinals/ordinals.ts index 37846a3b..734c9f0e 100644 --- a/src/constants/ordinals/ordinals.ts +++ b/src/constants/ordinals/ordinals.ts @@ -11,9 +11,8 @@ export const VDXF_ORDINAL_AUTHENTICATION_RESPONSE = new BN(3, 10); export const VDXF_ORDINAL_IDENTITY_UPDATE_REQUEST = new BN(4, 10); export const VDXF_ORDINAL_IDENTITY_UPDATE_RESPONSE = new BN(5, 10); export const VDXF_ORDINAL_PROVISION_IDENTITY_DETAILS = new BN(6, 10); - -export const VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = new BN(8, 10); -export const VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE = new BN(9, 10); -export const VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET = new BN(10, 10); -export const VDXF_ORDINAL_USER_DATA_REQUEST = new BN(12, 10); -export const VDXF_ORDINAL_DATA_RESPONSE = new BN(13, 10); +export const VDXF_ORDINAL_APP_ENCRYPTION_REQUEST = new BN(7, 10); +export const VDXF_ORDINAL_APP_ENCRYPTION_RESPONSE = new BN(8, 10); +export const VDXF_ORDINAL_USER_SPECIFIC_DATA_PACKET = new BN(9, 10); +export const VDXF_ORDINAL_USER_DATA_REQUEST = new BN(10, 10); +export const VDXF_ORDINAL_DATA_RESPONSE = new BN(11, 10);