diff --git a/Makefile b/Makefile index 50f4b01..df9fb51 100644 --- a/Makefile +++ b/Makefile @@ -4,4 +4,5 @@ generate_protos: --ts_proto_out=./src/generated \ --ts_proto_opt=esModuleInterop=true \ --ts_proto_opt=importSuffix=.js \ - --proto_path= ./protos/data.proto + --proto_path= ./protos/data.proto \ + --proto_path= ./protos/validation_status.proto diff --git a/dist/generated/google/protobuf/timestamp.js b/dist/generated/google/protobuf/timestamp.js index 175e1e3..3b95ae3 100644 --- a/dist/generated/google/protobuf/timestamp.js +++ b/dist/generated/google/protobuf/timestamp.js @@ -1,7 +1,7 @@ // Code generated by protoc-gen-ts_proto. DO NOT EDIT. // versions: // protoc-gen-ts_proto v2.2.4 -// protoc v5.27.0 +// protoc v5.26.1 // source: google/protobuf/timestamp.proto /* eslint-disable */ import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire"; diff --git a/dist/generated/protos/data.d.ts b/dist/generated/protos/data.d.ts index d155cfb..06443bc 100644 --- a/dist/generated/protos/data.d.ts +++ b/dist/generated/protos/data.d.ts @@ -1,5 +1,18 @@ import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire"; -export declare const protobufPackage = "espressocash.data.v1"; +export declare const protobufPackage = "brij.storage.v1"; +export declare enum DataType { + DATA_TYPE_UNSPECIFIED = 0, + DATA_TYPE_PHONE = 1, + DATA_TYPE_EMAIL = 2, + DATA_TYPE_NAME = 3, + DATA_TYPE_BIRTH_DATE = 4, + DATA_TYPE_DOCUMENT = 5, + DATA_TYPE_BANK_INFO = 6, + DATA_TYPE_SELFIE_IMAGE = 7, + UNRECOGNIZED = -1 +} +export declare function dataTypeFromJSON(object: any): DataType; +export declare function dataTypeToJSON(object: DataType): string; export declare enum DocumentType { DOCUMENT_TYPE_UNSPECIFIED = 0, DOCUMENT_TYPE_VOTER_ID = 1, @@ -7,28 +20,13 @@ export declare enum DocumentType { } export declare function documentTypeFromJSON(object: any): DocumentType; export declare function documentTypeToJSON(object: DocumentType): string; -export declare enum ValidationStatus { - VALIDATION_STATUS_UNSPECIFIED = 0, - VALIDATION_STATUS_PENDING = 1, - VALIDATION_STATUS_APPROVED = 2, - VALIDATION_STATUS_REJECTED = 3, - UNRECOGNIZED = -1 -} -export declare function validationStatusFromJSON(object: any): ValidationStatus; -export declare function validationStatusToJSON(object: ValidationStatus): string; -export interface WrappedData { - email?: string | undefined; - name?: Name | undefined; - birthDate?: Date | undefined; - phone?: string | undefined; - document?: Document | undefined; - bankInfo?: BankInfo | undefined; - selfieImage?: Uint8Array | undefined; -} export interface Name { firstName: string; lastName: string; } +export interface BirthDate { + value: Date | undefined; +} export interface Document { type: DocumentType; number: string; @@ -39,25 +37,22 @@ export interface BankInfo { bankCode: string; bankName: string; } -export interface WrappedValidation { - hash?: HashValidation | undefined; - custom?: CustomValidation | undefined; +export interface Email { + value: string; } -export interface HashValidation { - hash: string; - status: ValidationStatus; +export interface SelfieImage { + value: Uint8Array; } -export interface CustomValidation { - type: string; - data: Uint8Array; +export interface Phone { + value: string; } -export declare const WrappedData: MessageFns; export declare const Name: MessageFns; +export declare const BirthDate: MessageFns; export declare const Document: MessageFns; export declare const BankInfo: MessageFns; -export declare const WrappedValidation: MessageFns; -export declare const HashValidation: MessageFns; -export declare const CustomValidation: MessageFns; +export declare const Email: MessageFns; +export declare const SelfieImage: MessageFns; +export declare const Phone: MessageFns; type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; export type DeepPartial = T extends Builtin ? T : T extends globalThis.Array ? globalThis.Array> : T extends ReadonlyArray ? ReadonlyArray> : T extends {} ? { [K in keyof T]?: DeepPartial; diff --git a/dist/generated/protos/data.js b/dist/generated/protos/data.js index 15480b1..5ab7b83 100644 --- a/dist/generated/protos/data.js +++ b/dist/generated/protos/data.js @@ -1,12 +1,79 @@ // Code generated by protoc-gen-ts_proto. DO NOT EDIT. // versions: // protoc-gen-ts_proto v2.2.4 -// protoc v5.27.0 +// protoc v5.26.1 // source: protos/data.proto /* eslint-disable */ import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire"; import { Timestamp } from "../google/protobuf/timestamp.js"; -export const protobufPackage = "espressocash.data.v1"; +export const protobufPackage = "brij.storage.v1"; +export var DataType; +(function (DataType) { + DataType[DataType["DATA_TYPE_UNSPECIFIED"] = 0] = "DATA_TYPE_UNSPECIFIED"; + DataType[DataType["DATA_TYPE_PHONE"] = 1] = "DATA_TYPE_PHONE"; + DataType[DataType["DATA_TYPE_EMAIL"] = 2] = "DATA_TYPE_EMAIL"; + DataType[DataType["DATA_TYPE_NAME"] = 3] = "DATA_TYPE_NAME"; + DataType[DataType["DATA_TYPE_BIRTH_DATE"] = 4] = "DATA_TYPE_BIRTH_DATE"; + DataType[DataType["DATA_TYPE_DOCUMENT"] = 5] = "DATA_TYPE_DOCUMENT"; + DataType[DataType["DATA_TYPE_BANK_INFO"] = 6] = "DATA_TYPE_BANK_INFO"; + DataType[DataType["DATA_TYPE_SELFIE_IMAGE"] = 7] = "DATA_TYPE_SELFIE_IMAGE"; + DataType[DataType["UNRECOGNIZED"] = -1] = "UNRECOGNIZED"; +})(DataType || (DataType = {})); +export function dataTypeFromJSON(object) { + switch (object) { + case 0: + case "DATA_TYPE_UNSPECIFIED": + return DataType.DATA_TYPE_UNSPECIFIED; + case 1: + case "DATA_TYPE_PHONE": + return DataType.DATA_TYPE_PHONE; + case 2: + case "DATA_TYPE_EMAIL": + return DataType.DATA_TYPE_EMAIL; + case 3: + case "DATA_TYPE_NAME": + return DataType.DATA_TYPE_NAME; + case 4: + case "DATA_TYPE_BIRTH_DATE": + return DataType.DATA_TYPE_BIRTH_DATE; + case 5: + case "DATA_TYPE_DOCUMENT": + return DataType.DATA_TYPE_DOCUMENT; + case 6: + case "DATA_TYPE_BANK_INFO": + return DataType.DATA_TYPE_BANK_INFO; + case 7: + case "DATA_TYPE_SELFIE_IMAGE": + return DataType.DATA_TYPE_SELFIE_IMAGE; + case -1: + case "UNRECOGNIZED": + default: + return DataType.UNRECOGNIZED; + } +} +export function dataTypeToJSON(object) { + switch (object) { + case DataType.DATA_TYPE_UNSPECIFIED: + return "DATA_TYPE_UNSPECIFIED"; + case DataType.DATA_TYPE_PHONE: + return "DATA_TYPE_PHONE"; + case DataType.DATA_TYPE_EMAIL: + return "DATA_TYPE_EMAIL"; + case DataType.DATA_TYPE_NAME: + return "DATA_TYPE_NAME"; + case DataType.DATA_TYPE_BIRTH_DATE: + return "DATA_TYPE_BIRTH_DATE"; + case DataType.DATA_TYPE_DOCUMENT: + return "DATA_TYPE_DOCUMENT"; + case DataType.DATA_TYPE_BANK_INFO: + return "DATA_TYPE_BANK_INFO"; + case DataType.DATA_TYPE_SELFIE_IMAGE: + return "DATA_TYPE_SELFIE_IMAGE"; + case DataType.UNRECOGNIZED: + default: + return "UNRECOGNIZED"; + } +} export var DocumentType; (function (DocumentType) { DocumentType[DocumentType["DOCUMENT_TYPE_UNSPECIFIED"] = 0] = "DOCUMENT_TYPE_UNSPECIFIED"; @@ -38,89 +105,23 @@ export function documentTypeToJSON(object) { return "UNRECOGNIZED"; } } -export var ValidationStatus; -(function (ValidationStatus) { - ValidationStatus[ValidationStatus["VALIDATION_STATUS_UNSPECIFIED"] = 0] = "VALIDATION_STATUS_UNSPECIFIED"; - ValidationStatus[ValidationStatus["VALIDATION_STATUS_PENDING"] = 1] = "VALIDATION_STATUS_PENDING"; - ValidationStatus[ValidationStatus["VALIDATION_STATUS_APPROVED"] = 2] = "VALIDATION_STATUS_APPROVED"; - ValidationStatus[ValidationStatus["VALIDATION_STATUS_REJECTED"] = 3] = "VALIDATION_STATUS_REJECTED"; - ValidationStatus[ValidationStatus["UNRECOGNIZED"] = -1] = "UNRECOGNIZED"; -})(ValidationStatus || (ValidationStatus = {})); -export function validationStatusFromJSON(object) { - switch (object) { - case 0: - case "VALIDATION_STATUS_UNSPECIFIED": - return ValidationStatus.VALIDATION_STATUS_UNSPECIFIED; - case 1: - case "VALIDATION_STATUS_PENDING": - return ValidationStatus.VALIDATION_STATUS_PENDING; - case 2: - case "VALIDATION_STATUS_APPROVED": - return ValidationStatus.VALIDATION_STATUS_APPROVED; - case 3: - case "VALIDATION_STATUS_REJECTED": - return ValidationStatus.VALIDATION_STATUS_REJECTED; - case -1: - case "UNRECOGNIZED": - default: - return ValidationStatus.UNRECOGNIZED; - } -} -export function validationStatusToJSON(object) { - switch (object) { - case ValidationStatus.VALIDATION_STATUS_UNSPECIFIED: - return "VALIDATION_STATUS_UNSPECIFIED"; - case ValidationStatus.VALIDATION_STATUS_PENDING: - return "VALIDATION_STATUS_PENDING"; - case ValidationStatus.VALIDATION_STATUS_APPROVED: - return "VALIDATION_STATUS_APPROVED"; - case ValidationStatus.VALIDATION_STATUS_REJECTED: - return "VALIDATION_STATUS_REJECTED"; - case ValidationStatus.UNRECOGNIZED: - default: - return "UNRECOGNIZED"; - } -} -function createBaseWrappedData() { - return { - email: undefined, - name: undefined, - birthDate: undefined, - phone: undefined, - document: undefined, - bankInfo: undefined, - selfieImage: undefined, - }; +function createBaseName() { + return { firstName: "", lastName: "" }; } -export const WrappedData = { +export const Name = { encode(message, writer = new BinaryWriter()) { - if (message.email !== undefined) { - writer.uint32(10).string(message.email); - } - if (message.name !== undefined) { - Name.encode(message.name, writer.uint32(18).fork()).join(); - } - if (message.birthDate !== undefined) { - Timestamp.encode(toTimestamp(message.birthDate), writer.uint32(26).fork()).join(); - } - if (message.phone !== undefined) { - writer.uint32(34).string(message.phone); - } - if (message.document !== undefined) { - Document.encode(message.document, writer.uint32(42).fork()).join(); - } - if (message.bankInfo !== undefined) { - BankInfo.encode(message.bankInfo, writer.uint32(50).fork()).join(); + if (message.firstName !== "") { + writer.uint32(10).string(message.firstName); } - if (message.selfieImage !== undefined) { - writer.uint32(58).bytes(message.selfieImage); + if (message.lastName !== "") { + writer.uint32(18).string(message.lastName); } return writer; }, decode(input, length) { const reader = input instanceof BinaryReader ? input : new BinaryReader(input); let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseWrappedData(); + const message = createBaseName(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { @@ -128,49 +129,14 @@ export const WrappedData = { if (tag !== 10) { break; } - message.email = reader.string(); + message.firstName = reader.string(); continue; } case 2: { if (tag !== 18) { break; } - message.name = Name.decode(reader, reader.uint32()); - continue; - } - case 3: { - if (tag !== 26) { - break; - } - message.birthDate = fromTimestamp(Timestamp.decode(reader, reader.uint32())); - continue; - } - case 4: { - if (tag !== 34) { - break; - } - message.phone = reader.string(); - continue; - } - case 5: { - if (tag !== 42) { - break; - } - message.document = Document.decode(reader, reader.uint32()); - continue; - } - case 6: { - if (tag !== 50) { - break; - } - message.bankInfo = BankInfo.decode(reader, reader.uint32()); - continue; - } - case 7: { - if (tag !== 58) { - break; - } - message.selfieImage = reader.bytes(); + message.lastName = reader.string(); continue; } } @@ -183,76 +149,44 @@ export const WrappedData = { }, fromJSON(object) { return { - email: isSet(object.email) ? globalThis.String(object.email) : undefined, - name: isSet(object.name) ? Name.fromJSON(object.name) : undefined, - birthDate: isSet(object.birthDate) ? fromJsonTimestamp(object.birthDate) : undefined, - phone: isSet(object.phone) ? globalThis.String(object.phone) : undefined, - document: isSet(object.document) ? Document.fromJSON(object.document) : undefined, - bankInfo: isSet(object.bankInfo) ? BankInfo.fromJSON(object.bankInfo) : undefined, - selfieImage: isSet(object.selfieImage) ? bytesFromBase64(object.selfieImage) : undefined, + firstName: isSet(object.firstName) ? globalThis.String(object.firstName) : "", + lastName: isSet(object.lastName) ? globalThis.String(object.lastName) : "", }; }, toJSON(message) { const obj = {}; - if (message.email !== undefined) { - obj.email = message.email; - } - if (message.name !== undefined) { - obj.name = Name.toJSON(message.name); - } - if (message.birthDate !== undefined) { - obj.birthDate = message.birthDate.toISOString(); - } - if (message.phone !== undefined) { - obj.phone = message.phone; - } - if (message.document !== undefined) { - obj.document = Document.toJSON(message.document); - } - if (message.bankInfo !== undefined) { - obj.bankInfo = BankInfo.toJSON(message.bankInfo); + if (message.firstName !== "") { + obj.firstName = message.firstName; } - if (message.selfieImage !== undefined) { - obj.selfieImage = base64FromBytes(message.selfieImage); + if (message.lastName !== "") { + obj.lastName = message.lastName; } return obj; }, create(base) { - return WrappedData.fromPartial(base ?? {}); + return Name.fromPartial(base ?? {}); }, fromPartial(object) { - const message = createBaseWrappedData(); - message.email = object.email ?? undefined; - message.name = (object.name !== undefined && object.name !== null) ? Name.fromPartial(object.name) : undefined; - message.birthDate = object.birthDate ?? undefined; - message.phone = object.phone ?? undefined; - message.document = (object.document !== undefined && object.document !== null) - ? Document.fromPartial(object.document) - : undefined; - message.bankInfo = (object.bankInfo !== undefined && object.bankInfo !== null) - ? BankInfo.fromPartial(object.bankInfo) - : undefined; - message.selfieImage = object.selfieImage ?? undefined; + const message = createBaseName(); + message.firstName = object.firstName ?? ""; + message.lastName = object.lastName ?? ""; return message; }, }; -function createBaseName() { - return { firstName: "", lastName: "" }; +function createBaseBirthDate() { + return { value: undefined }; } -export const Name = { +export const BirthDate = { encode(message, writer = new BinaryWriter()) { - if (message.firstName !== "") { - writer.uint32(10).string(message.firstName); - } - if (message.lastName !== "") { - writer.uint32(18).string(message.lastName); + if (message.value !== undefined) { + Timestamp.encode(toTimestamp(message.value), writer.uint32(10).fork()).join(); } return writer; }, decode(input, length) { const reader = input instanceof BinaryReader ? input : new BinaryReader(input); let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseName(); + const message = createBaseBirthDate(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { @@ -260,14 +194,7 @@ export const Name = { if (tag !== 10) { break; } - message.firstName = reader.string(); - continue; - } - case 2: { - if (tag !== 18) { - break; - } - message.lastName = reader.string(); + message.value = fromTimestamp(Timestamp.decode(reader, reader.uint32())); continue; } } @@ -279,28 +206,21 @@ export const Name = { return message; }, fromJSON(object) { - return { - firstName: isSet(object.firstName) ? globalThis.String(object.firstName) : "", - lastName: isSet(object.lastName) ? globalThis.String(object.lastName) : "", - }; + return { value: isSet(object.value) ? fromJsonTimestamp(object.value) : undefined }; }, toJSON(message) { const obj = {}; - if (message.firstName !== "") { - obj.firstName = message.firstName; - } - if (message.lastName !== "") { - obj.lastName = message.lastName; + if (message.value !== undefined) { + obj.value = message.value.toISOString(); } return obj; }, create(base) { - return Name.fromPartial(base ?? {}); + return BirthDate.fromPartial(base ?? {}); }, fromPartial(object) { - const message = createBaseName(); - message.firstName = object.firstName ?? ""; - message.lastName = object.lastName ?? ""; + const message = createBaseBirthDate(); + message.value = object.value ?? undefined; return message; }, }; @@ -470,23 +390,20 @@ export const BankInfo = { return message; }, }; -function createBaseWrappedValidation() { - return { hash: undefined, custom: undefined }; +function createBaseEmail() { + return { value: "" }; } -export const WrappedValidation = { +export const Email = { encode(message, writer = new BinaryWriter()) { - if (message.hash !== undefined) { - HashValidation.encode(message.hash, writer.uint32(10).fork()).join(); - } - if (message.custom !== undefined) { - CustomValidation.encode(message.custom, writer.uint32(18).fork()).join(); + if (message.value !== "") { + writer.uint32(10).string(message.value); } return writer; }, decode(input, length) { const reader = input instanceof BinaryReader ? input : new BinaryReader(input); let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseWrappedValidation(); + const message = createBaseEmail(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { @@ -494,14 +411,7 @@ export const WrappedValidation = { if (tag !== 10) { break; } - message.hash = HashValidation.decode(reader, reader.uint32()); - continue; - } - case 2: { - if (tag !== 18) { - break; - } - message.custom = CustomValidation.decode(reader, reader.uint32()); + message.value = reader.string(); continue; } } @@ -513,52 +423,38 @@ export const WrappedValidation = { return message; }, fromJSON(object) { - return { - hash: isSet(object.hash) ? HashValidation.fromJSON(object.hash) : undefined, - custom: isSet(object.custom) ? CustomValidation.fromJSON(object.custom) : undefined, - }; + return { value: isSet(object.value) ? globalThis.String(object.value) : "" }; }, toJSON(message) { const obj = {}; - if (message.hash !== undefined) { - obj.hash = HashValidation.toJSON(message.hash); - } - if (message.custom !== undefined) { - obj.custom = CustomValidation.toJSON(message.custom); + if (message.value !== "") { + obj.value = message.value; } return obj; }, create(base) { - return WrappedValidation.fromPartial(base ?? {}); + return Email.fromPartial(base ?? {}); }, fromPartial(object) { - const message = createBaseWrappedValidation(); - message.hash = (object.hash !== undefined && object.hash !== null) - ? HashValidation.fromPartial(object.hash) - : undefined; - message.custom = (object.custom !== undefined && object.custom !== null) - ? CustomValidation.fromPartial(object.custom) - : undefined; + const message = createBaseEmail(); + message.value = object.value ?? ""; return message; }, }; -function createBaseHashValidation() { - return { hash: "", status: 0 }; +function createBaseSelfieImage() { + return { value: new Uint8Array(0) }; } -export const HashValidation = { +export const SelfieImage = { encode(message, writer = new BinaryWriter()) { - if (message.hash !== "") { - writer.uint32(10).string(message.hash); - } - if (message.status !== 0) { - writer.uint32(16).int32(message.status); + if (message.value.length !== 0) { + writer.uint32(10).bytes(message.value); } return writer; }, decode(input, length) { const reader = input instanceof BinaryReader ? input : new BinaryReader(input); let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseHashValidation(); + const message = createBaseSelfieImage(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { @@ -566,14 +462,7 @@ export const HashValidation = { if (tag !== 10) { break; } - message.hash = reader.string(); - continue; - } - case 2: { - if (tag !== 16) { - break; - } - message.status = reader.int32(); + message.value = reader.bytes(); continue; } } @@ -585,48 +474,38 @@ export const HashValidation = { return message; }, fromJSON(object) { - return { - hash: isSet(object.hash) ? globalThis.String(object.hash) : "", - status: isSet(object.status) ? validationStatusFromJSON(object.status) : 0, - }; + return { value: isSet(object.value) ? bytesFromBase64(object.value) : new Uint8Array(0) }; }, toJSON(message) { const obj = {}; - if (message.hash !== "") { - obj.hash = message.hash; - } - if (message.status !== 0) { - obj.status = validationStatusToJSON(message.status); + if (message.value.length !== 0) { + obj.value = base64FromBytes(message.value); } return obj; }, create(base) { - return HashValidation.fromPartial(base ?? {}); + return SelfieImage.fromPartial(base ?? {}); }, fromPartial(object) { - const message = createBaseHashValidation(); - message.hash = object.hash ?? ""; - message.status = object.status ?? 0; + const message = createBaseSelfieImage(); + message.value = object.value ?? new Uint8Array(0); return message; }, }; -function createBaseCustomValidation() { - return { type: "", data: new Uint8Array(0) }; +function createBasePhone() { + return { value: "" }; } -export const CustomValidation = { +export const Phone = { encode(message, writer = new BinaryWriter()) { - if (message.type !== "") { - writer.uint32(10).string(message.type); - } - if (message.data.length !== 0) { - writer.uint32(18).bytes(message.data); + if (message.value !== "") { + writer.uint32(10).string(message.value); } return writer; }, decode(input, length) { const reader = input instanceof BinaryReader ? input : new BinaryReader(input); let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseCustomValidation(); + const message = createBasePhone(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { @@ -634,14 +513,7 @@ export const CustomValidation = { if (tag !== 10) { break; } - message.type = reader.string(); - continue; - } - case 2: { - if (tag !== 18) { - break; - } - message.data = reader.bytes(); + message.value = reader.string(); continue; } } @@ -653,28 +525,21 @@ export const CustomValidation = { return message; }, fromJSON(object) { - return { - type: isSet(object.type) ? globalThis.String(object.type) : "", - data: isSet(object.data) ? bytesFromBase64(object.data) : new Uint8Array(0), - }; + return { value: isSet(object.value) ? globalThis.String(object.value) : "" }; }, toJSON(message) { const obj = {}; - if (message.type !== "") { - obj.type = message.type; - } - if (message.data.length !== 0) { - obj.data = base64FromBytes(message.data); + if (message.value !== "") { + obj.value = message.value; } return obj; }, create(base) { - return CustomValidation.fromPartial(base ?? {}); + return Phone.fromPartial(base ?? {}); }, fromPartial(object) { - const message = createBaseCustomValidation(); - message.type = object.type ?? ""; - message.data = object.data ?? new Uint8Array(0); + const message = createBasePhone(); + message.value = object.value ?? ""; return message; }, }; diff --git a/dist/generated/protos/data.js.map b/dist/generated/protos/data.js.map index ba8b522..db2fdfb 100644 --- a/dist/generated/protos/data.js.map +++ b/dist/generated/protos/data.js.map @@ -1 +1 @@ -{"version":3,"file":"data.js","sourceRoot":"","sources":["../../../src/generated/protos/data.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"data.js","sourceRoot":"","sources":["../../../src/generated/protos/data.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/generated/protos/validation_status.d.ts b/dist/generated/protos/validation_status.d.ts new file mode 100644 index 0000000..3a75d6f --- /dev/null +++ b/dist/generated/protos/validation_status.d.ts @@ -0,0 +1,10 @@ +export declare const protobufPackage = "brij.storage.v1"; +export declare enum ValidationStatus { + VALIDATION_STATUS_UNSPECIFIED = 0, + VALIDATION_STATUS_PENDING = 1, + VALIDATION_STATUS_APPROVED = 2, + VALIDATION_STATUS_REJECTED = 3, + UNRECOGNIZED = -1 +} +export declare function validationStatusFromJSON(object: any): ValidationStatus; +export declare function validationStatusToJSON(object: ValidationStatus): string; diff --git a/dist/generated/protos/validation_status.js b/dist/generated/protos/validation_status.js new file mode 100644 index 0000000..7b2b3be --- /dev/null +++ b/dist/generated/protos/validation_status.js @@ -0,0 +1,51 @@ +// Code generated by protoc-gen-ts_proto. DO NOT EDIT. +// versions: +// protoc-gen-ts_proto v2.2.4 +// protoc v5.26.1 +// source: protos/validation_status.proto +/* eslint-disable */ +export const protobufPackage = "brij.storage.v1"; +export var ValidationStatus; +(function (ValidationStatus) { + ValidationStatus[ValidationStatus["VALIDATION_STATUS_UNSPECIFIED"] = 0] = "VALIDATION_STATUS_UNSPECIFIED"; + ValidationStatus[ValidationStatus["VALIDATION_STATUS_PENDING"] = 1] = "VALIDATION_STATUS_PENDING"; + ValidationStatus[ValidationStatus["VALIDATION_STATUS_APPROVED"] = 2] = "VALIDATION_STATUS_APPROVED"; + ValidationStatus[ValidationStatus["VALIDATION_STATUS_REJECTED"] = 3] = "VALIDATION_STATUS_REJECTED"; + ValidationStatus[ValidationStatus["UNRECOGNIZED"] = -1] = "UNRECOGNIZED"; +})(ValidationStatus || (ValidationStatus = {})); +export function validationStatusFromJSON(object) { + switch (object) { + case 0: + case "VALIDATION_STATUS_UNSPECIFIED": + return ValidationStatus.VALIDATION_STATUS_UNSPECIFIED; + case 1: + case "VALIDATION_STATUS_PENDING": + return ValidationStatus.VALIDATION_STATUS_PENDING; + case 2: + case "VALIDATION_STATUS_APPROVED": + return ValidationStatus.VALIDATION_STATUS_APPROVED; + case 3: + case "VALIDATION_STATUS_REJECTED": + return ValidationStatus.VALIDATION_STATUS_REJECTED; + case -1: + case "UNRECOGNIZED": + default: + return ValidationStatus.UNRECOGNIZED; + } +} +export function validationStatusToJSON(object) { + switch (object) { + case ValidationStatus.VALIDATION_STATUS_UNSPECIFIED: + return "VALIDATION_STATUS_UNSPECIFIED"; + case ValidationStatus.VALIDATION_STATUS_PENDING: + return "VALIDATION_STATUS_PENDING"; + case ValidationStatus.VALIDATION_STATUS_APPROVED: + return "VALIDATION_STATUS_APPROVED"; + case ValidationStatus.VALIDATION_STATUS_REJECTED: + return "VALIDATION_STATUS_REJECTED"; + case ValidationStatus.UNRECOGNIZED: + default: + return "UNRECOGNIZED"; + } +} +//# sourceMappingURL=validation_status.js.map \ No newline at end of file diff --git a/dist/generated/protos/validation_status.js.map b/dist/generated/protos/validation_status.js.map new file mode 100644 index 0000000..f1fe948 --- /dev/null +++ b/dist/generated/protos/validation_status.js.map @@ -0,0 +1 @@ +{"version":3,"file":"validation_status.js","sourceRoot":"","sources":["../../../src/generated/protos/validation_status.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,YAAY;AACZ,gCAAgC;AAChC,iCAAiC;AACjC,yCAAyC;AAEzC,oBAAoB;AAEpB,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAEjD,MAAM,CAAN,IAAY,gBAMX;AAND,WAAY,gBAAgB;IAC1B,yGAAiC,CAAA;IACjC,iGAA6B,CAAA;IAC7B,mGAA8B,CAAA;IAC9B,mGAA8B,CAAA;IAC9B,wEAAiB,CAAA;AACnB,CAAC,EANW,gBAAgB,KAAhB,gBAAgB,QAM3B;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAW;IAClD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,CAAC,CAAC;QACP,KAAK,+BAA+B;YAClC,OAAO,gBAAgB,CAAC,6BAA6B,CAAC;QACxD,KAAK,CAAC,CAAC;QACP,KAAK,2BAA2B;YAC9B,OAAO,gBAAgB,CAAC,yBAAyB,CAAC;QACpD,KAAK,CAAC,CAAC;QACP,KAAK,4BAA4B;YAC/B,OAAO,gBAAgB,CAAC,0BAA0B,CAAC;QACrD,KAAK,CAAC,CAAC;QACP,KAAK,4BAA4B;YAC/B,OAAO,gBAAgB,CAAC,0BAA0B,CAAC;QACrD,KAAK,CAAC,CAAC,CAAC;QACR,KAAK,cAAc,CAAC;QACpB;YACE,OAAO,gBAAgB,CAAC,YAAY,CAAC;IACzC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAwB;IAC7D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,gBAAgB,CAAC,6BAA6B;YACjD,OAAO,+BAA+B,CAAC;QACzC,KAAK,gBAAgB,CAAC,yBAAyB;YAC7C,OAAO,2BAA2B,CAAC;QACrC,KAAK,gBAAgB,CAAC,0BAA0B;YAC9C,OAAO,4BAA4B,CAAC;QACtC,KAAK,gBAAgB,CAAC,0BAA0B;YAC9C,OAAO,4BAA4B,CAAC;QACtC,KAAK,gBAAgB,CAAC,YAAY,CAAC;QACnC;YACE,OAAO,cAAc,CAAC;IAC1B,CAAC;AACH,CAAC"} \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts index 07dbe42..d55e172 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -37,6 +37,7 @@ export type RejectOrderParams = { export type DataAccessParams = { userPK: string; secretKey: string; + includeValues?: boolean; }; export type UserDataField = { dataId: string; @@ -46,25 +47,25 @@ export type UserDataValueField = { value: T; } & UserDataField; export type UserData = { - email: Array>; - phone: Array>; - name: Array<{ + email?: UserDataValueField; + phone?: UserDataValueField; + name?: { firstName: string; lastName: string; - } & UserDataField>; - birthDate: Array>; - document: Array<{ + } & UserDataField; + birthDate?: UserDataValueField; + document?: { type: string; number: string; countryCode: string; - } & UserDataField>; - bankInfo: Array<{ + } & UserDataField; + bankInfo?: { bankName: string; accountNumber: string; bankCode: string; - } & UserDataField>; - selfie: Array>; - custom: Record; + } & UserDataField; + selfie?: UserDataValueField; + custom?: Record; }; export declare enum ValidationStatus { Unspecified = "UNSPECIFIED", @@ -96,10 +97,10 @@ export type Order = { }; export declare class BrijPartnerClient { private authKeyPair; - private readonly kycBaseUrl; + private readonly storageBaseUrl; private readonly orderBaseUrl; private _authPublicKey; - private _kycClient; + private _storageClient; private _orderClient; private constructor(); static generateKeyPair(): Promise<{ @@ -114,7 +115,7 @@ export declare class BrijPartnerClient { private init; private generateAuthToken; private createToken; - getUserData({ userPK, secretKey }: DataAccessParams): Promise; + getUserData({ userPK, secretKey, includeValues }: DataAccessParams): Promise; private decryptOrderFields; private processOrder; getOrder({ externalId, orderId }: OrderIds): Promise; diff --git a/dist/index.js b/dist/index.js index 84ccf88..7eab66f 100644 --- a/dist/index.js +++ b/dist/index.js @@ -5,7 +5,8 @@ import nacl from "tweetnacl"; import base58 from "bs58"; import naclUtil from "tweetnacl-util"; import ed2curve from "ed2curve"; -import { documentTypeToJSON, ValidationStatus as ProtoValidationStatus, WrappedData, WrappedValidation, } from "./generated/protos/data.js"; +import { documentTypeToJSON, dataTypeFromJSON, DataType, Email, Phone, Name, BirthDate, Document, BankInfo, SelfieImage, } from "./generated/protos/data.js"; +import { ValidationStatus as ProtoValidationStatus, validationStatusFromJSON } from "./generated/protos/validation_status.js"; export class AppConfig { storageBaseUrl; orderBaseUrl; @@ -47,17 +48,17 @@ function toValidationStatus(protoStatus) { } export class BrijPartnerClient { authKeyPair; - kycBaseUrl; + storageBaseUrl; orderBaseUrl; _authPublicKey; - _kycClient; + _storageClient; _orderClient; constructor({ authKeyPair, appConfig = AppConfig.demo() }) { this.authKeyPair = authKeyPair; - this.kycBaseUrl = appConfig.storageBaseUrl; + this.storageBaseUrl = appConfig.storageBaseUrl; this.orderBaseUrl = appConfig.orderBaseUrl; this._authPublicKey = ""; - this._kycClient = null; + this._storageClient = null; this._orderClient = null; } static async generateKeyPair() { @@ -97,10 +98,10 @@ export class BrijPartnerClient { this.authKeyPair.getPrivateKeyBytes(), ]); this._authPublicKey = base58.encode(publicKeyBytes); - const kycToken = await this.createToken(privateKeyBytes, "kyc.espressocash.com"); - this._kycClient = axios.create({ - baseURL: this.kycBaseUrl, - headers: { Authorization: `Bearer ${kycToken}` }, + const storageToken = await this.createToken(privateKeyBytes, "storage.brij.fi"); + this._storageClient = axios.create({ + baseURL: this.storageBaseUrl, + headers: { Authorization: `Bearer ${storageToken}` }, }); const orderToken = await this.createToken(privateKeyBytes, "orders.espressocash.com"); this._orderClient = axios.create({ @@ -121,107 +122,89 @@ export class BrijPartnerClient { const signature = nacl.sign.detached(new TextEncoder().encode(dataToSign), privateKeyBytes); return `${dataToSign}.${base64url.encode(signature)}`; } - async getUserData({ userPK, secretKey }) { - const response = await this._kycClient.post("/v1/getUserData", { + async getUserData({ userPK, secretKey, includeValues = true }) { + const response = await this._storageClient.post("/v1/getUserData", { userPublicKey: userPK, + includeValues, }); const responseData = response.data; - const validationMap = new Map(); - const custom = {}; - const userVerifyKey = base58.decode(userPK); + const validationMap = new Map(responseData.validationData.map((data) => [ + data.dataId, + { + dataId: data.dataId, + hash: data.hash, + status: data.status, + }, + ])); + const userData = {}; const secret = base58.decode(secretKey); - // Validation results - for (const encrypted of responseData.validationData) { - const encryptedData = encrypted.encryptedData; - const validatorVerifyKey = base58.decode(encrypted.validatorPublicKey); - const signedMessage = naclUtil.decodeBase64(encryptedData); - const message = nacl.sign.open(signedMessage, validatorVerifyKey); - if (!message) { - throw new Error(`Invalid signature for key`); - } - const decryptedData = await this.decryptData(message, secret); - const wrappedData = WrappedValidation.decode(new Uint8Array(decryptedData)); - if (wrappedData.hash) { - const result = { - dataId: encrypted.dataId, - value: wrappedData.hash.hash, - status: wrappedData.hash.status, - }; - validationMap.set(result.dataId, result); - } - else if (wrappedData.custom) { - const result = { - type: wrappedData.custom.type, - value: new TextDecoder().decode(wrappedData.custom.data), - }; - custom[result.type] = result.value; - } - } - const userData = { - email: [], - phone: [], - name: [], - birthDate: [], - document: [], - bankInfo: [], - selfie: [], - custom: custom, - }; - // User data for (const encrypted of responseData.userData) { - const encryptedData = encrypted.encryptedData; - const signedMessage = naclUtil.decodeBase64(encryptedData); - const message = nacl.sign.open(signedMessage, userVerifyKey); - if (!message) { - throw new Error(`Invalid signature for key`); - } - const decryptedData = await this.decryptData(message, secret); - const wrappedData = WrappedData.decode(new Uint8Array(decryptedData)); + const decryptedData = encrypted.encryptedValue?.trim() + ? await this.decryptData(naclUtil.decodeBase64(encrypted.encryptedValue), secret) + : new Uint8Array(0); const dataId = encrypted.id; const verificationData = validationMap.get(dataId); - let status = ValidationStatus.Unspecified; - if (verificationData) { - const hash = await this.generateHash(wrappedData); - const hashMatching = hash === verificationData.value; - status = hashMatching ? toValidationStatus(verificationData.status) : ValidationStatus.Unverified; - } - const commonFields = { dataId, status }; - if (wrappedData.email) { - userData.email.push({ value: wrappedData.email, ...commonFields }); - } - else if (wrappedData.name) { - userData.name.push({ - firstName: wrappedData.name.firstName, - lastName: wrappedData.name.lastName, - ...commonFields, - }); - } - else if (wrappedData.birthDate) { - userData.birthDate.push({ value: new Date(wrappedData.birthDate), ...commonFields }); - } - else if (wrappedData.phone) { - userData.phone.push({ value: wrappedData.phone, ...commonFields }); - } - else if (wrappedData.document) { - userData.document.push({ - type: documentTypeToJSON(wrappedData.document.type), - number: wrappedData.document.number, - countryCode: wrappedData.document.countryCode, - ...commonFields, - }); - } - else if (wrappedData.bankInfo) { - userData.bankInfo.push({ - bankName: wrappedData.bankInfo.bankName, - accountNumber: wrappedData.bankInfo.accountNumber, - bankCode: wrappedData.bankInfo.bankCode, - ...commonFields, - }); - } - else if (wrappedData.selfieImage) { - userData.selfie.push({ value: wrappedData.selfieImage, ...commonFields }); + const status = verificationData?.status ?? ProtoValidationStatus.UNRECOGNIZED; + const commonFields = { dataId, status: toValidationStatus(validationStatusFromJSON(status)) }; + switch (dataTypeFromJSON(encrypted.type)) { + case DataType.DATA_TYPE_EMAIL: { + const data = Email.decode(decryptedData); + userData.email = { value: data.value, ...commonFields }; + break; + } + case DataType.DATA_TYPE_NAME: { + const data = Name.decode(decryptedData); + userData.name = { + firstName: data.firstName, + lastName: data.lastName, + ...commonFields, + }; + break; + } + case DataType.DATA_TYPE_BIRTH_DATE: { + const data = BirthDate.decode(decryptedData); + userData.birthDate = { value: new Date(data.value), ...commonFields }; + break; + } + case DataType.DATA_TYPE_PHONE: { + const data = Phone.decode(decryptedData); + userData.phone = { value: data.value, ...commonFields }; + break; + } + case DataType.DATA_TYPE_DOCUMENT: { + const data = Document.decode(decryptedData); + userData.document = { + type: documentTypeToJSON(data.type), + number: data.number, + countryCode: data.countryCode, + ...commonFields, + }; + break; + } + case DataType.DATA_TYPE_BANK_INFO: { + const data = BankInfo.decode(decryptedData); + userData.bankInfo = { + bankName: data.bankName, + accountNumber: data.accountNumber, + bankCode: data.bankCode, + ...commonFields, + }; + break; + } + case DataType.DATA_TYPE_SELFIE_IMAGE: { + const data = SelfieImage.decode(decryptedData); + userData.selfie = { value: data.value, ...commonFields }; + break; + } } } + userData.custom = Object.fromEntries(await Promise.all(responseData.customValidationData.map(async (data) => { + if (!data.encryptedValue) { + return [data.id, ""]; + } + const decryptedValue = await this.decryptData(naclUtil.decodeBase64(data.encryptedValue), secret); + return [data.id, new TextDecoder().decode(decryptedValue)]; + }))); return userData; } async decryptOrderFields(order, secretKey) { @@ -377,7 +360,7 @@ export class BrijPartnerClient { }); } async getUserInfo(publicKey) { - const response = await this._kycClient.post("/v1/getInfo", { + const response = await this._storageClient.post("/v1/getInfo", { publicKey: publicKey, }); return response.data; @@ -398,6 +381,9 @@ export class BrijPartnerClient { return base58.encode(decryptedSecretKey); } async decryptData(encryptedMessage, key) { + if (encryptedMessage.length < nacl.secretbox.nonceLength) { + throw new Error(`Encrypted message too short: ${encryptedMessage.length} bytes`); + } const nonce = encryptedMessage.slice(0, nacl.secretbox.nonceLength); const ciphertext = encryptedMessage.slice(nacl.secretbox.nonceLength); const decrypted = nacl.secretbox.open(ciphertext, nonce, key); @@ -407,7 +393,7 @@ export class BrijPartnerClient { return decrypted; } async generateHash(value) { - const serializedData = WrappedData.encode(value).finish(); + const serializedData = value.encode(value).finish(); //TODO double check return createHash("sha256").update(Buffer.from(serializedData)).digest("hex"); } createUserOnRampMessage({ cryptoAmount, cryptoCurrency, fiatAmount, fiatCurrency, }) { diff --git a/dist/index.js.map b/dist/index.js.map index 94c1469..e288331 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,MAAM,CAAC;AAC1B,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,QAAQ,EACR,KAAK,EACL,KAAK,EACL,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,WAAW,GAEZ,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,gBAAgB,IAAI,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AAQ9H,MAAM,OAAO,SAAS;IACX,cAAc,CAAS;IACvB,YAAY,CAAS;IAE9B,YAAoB,cAAsB,EAAE,YAAoB;QAC9D,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,IAAI;QACT,OAAO,IAAI,SAAS,CAAC,+BAA+B,EAAE,8BAA8B,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,CAAC,UAAU;QACf,OAAO,IAAI,SAAS,CAAC,0BAA0B,EAAE,yBAAyB,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,cAAsB,EAAE,YAAoB;QACxD,OAAO,IAAI,SAAS,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IACrD,CAAC;CACF;AAqDD,MAAM,CAAN,IAAY,gBAMX;AAND,WAAY,gBAAgB;IAC1B,+CAA2B,CAAA;IAC3B,uCAAmB,CAAA;IACnB,yCAAqB,CAAA;IACrB,yCAAqB,CAAA;IACrB,6CAAyB,CAAA;AAC3B,CAAC,EANW,gBAAgB,KAAhB,gBAAgB,QAM3B;AAwBD,SAAS,kBAAkB,CAAC,WAAkC;IAC5D,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,qBAAqB,CAAC,6BAA6B;YACtD,OAAO,gBAAgB,CAAC,WAAW,CAAC;QACtC,KAAK,qBAAqB,CAAC,yBAAyB;YAClD,OAAO,gBAAgB,CAAC,OAAO,CAAC;QAClC,KAAK,qBAAqB,CAAC,0BAA0B;YACnD,OAAO,gBAAgB,CAAC,QAAQ,CAAC;QACnC,KAAK,qBAAqB,CAAC,0BAA0B;YACnD,OAAO,gBAAgB,CAAC,QAAQ,CAAC;QACnC;YACE,OAAO,gBAAgB,CAAC,WAAW,CAAC;IACxC,CAAC;AACH,CAAC;AAED,MAAM,OAAO,iBAAiB;IACpB,WAAW,CAAc;IAChB,cAAc,CAAS;IACvB,YAAY,CAAS;IAC9B,cAAc,CAAS;IACvB,cAAc,CAAuB;IACrC,YAAY,CAAuB;IAE3C,YAAoB,EAAE,WAAW,EAAE,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,EAA4B;QACzF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC;QAC/C,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC;QAC3C,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,eAAe;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,OAAO;YACL,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;YAC3C,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;YAC5C,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;YAC3C,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnD,iBAAiB,EAAE,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS;YAChD,kBAAkB,EAAE,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS;SAClD,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,SAAqB;QACvD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAExD,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC;YACnC,WAAW,EAAE;gBACX,KAAK,CAAC,kBAAkB;oBACtB,OAAO,WAAW,CAAC,SAAS,CAAC;gBAC/B,CAAC;gBACD,KAAK,CAAC,iBAAiB;oBACrB,OAAO,WAAW,CAAC,SAAS,CAAC;gBAC/B,CAAC;aACF;YACD,SAAS;SACV,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAEpB,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC1D,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE;YACpC,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE;SACtC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAEpD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;QAEhF,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC;YACjC,OAAO,EAAE,IAAI,CAAC,cAAc;YAC5B,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,YAAY,EAAE,EAAE;SACrD,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,yBAAyB,CAAC,CAAC;QAEtF,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC;YAC/B,OAAO,EAAE,IAAI,CAAC,YAAY;YAC1B,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,UAAU,EAAE,EAAE;SACnD,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,eAA2B,EAAE,QAAgB;QACrE,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG;YACd,GAAG,EAAE,IAAI,CAAC,cAAc;YACxB,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YAClC,GAAG,EAAE,QAAQ;SACd,CAAC;QAEF,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/D,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,GAAG,aAAa,IAAI,cAAc,EAAE,CAAC;QAExD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC,CAAC;QAE5F,OAAO,GAAG,UAAU,IAAI,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI,EAAoB;QAC7E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAe,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAClE,aAAa,EAAE,MAAM;YACrB,aAAa;SACd,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;QAEnC,MAAM,aAAa,GAAG,IAAI,GAAG,CAC3B,YAAY,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM;YACX;gBACE,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB;SACF,CAAC,CACH,CAAC;QAEF,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAExC,KAAK,MAAM,SAAS,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC9C,MAAM,aAAa,GAAG,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE;gBACpD,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;gBACjF,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;YAEtB,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;YAC5B,MAAM,gBAAgB,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,gBAAgB,EAAE,MAAM,IAAI,qBAAqB,CAAC,YAAY,CAAC;YAC9E,MAAM,YAAY,GAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YAE7G,QAAQ,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,KAAK,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;oBAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;oBACzC,QAAQ,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,YAAY,EAAE,CAAC;oBACxD,MAAM;gBACR,CAAC;gBACD,KAAK,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;oBAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;oBACxC,QAAQ,CAAC,IAAI,GAAG;wBACd,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,GAAG,YAAY;qBAChB,CAAC;oBACF,MAAM;gBACR,CAAC;gBACD,KAAK,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC;oBACnC,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;oBAC7C,QAAQ,CAAC,SAAS,GAAG,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,KAAM,CAAC,EAAE,GAAG,YAAY,EAAE,CAAC;oBACvE,MAAM;gBACR,CAAC;gBACD,KAAK,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;oBAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;oBACzC,QAAQ,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,YAAY,EAAE,CAAC;oBACxD,MAAM;gBACR,CAAC;gBACD,KAAK,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;oBACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;oBAC5C,QAAQ,CAAC,QAAQ,GAAG;wBAClB,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;wBACnC,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,GAAG,YAAY;qBAChB,CAAC;oBACF,MAAM;gBACR,CAAC;gBACD,KAAK,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;oBAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;oBAC5C,QAAQ,CAAC,QAAQ,GAAG;wBAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,aAAa,EAAE,IAAI,CAAC,aAAa;wBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,GAAG,YAAY;qBAChB,CAAC;oBACF,MAAM;gBACR,CAAC;gBACD,KAAK,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC;oBACrC,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;oBAC/C,QAAQ,CAAC,MAAM,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,YAAY,EAAE,CAAC;oBACzD,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAClC,MAAM,OAAO,CAAC,GAAG,CACf,YAAY,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAS,EAAE,EAAE;YACxD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACvB,CAAC;YACD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;YAClG,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CACH,CACF,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,KAAY,EAAE,SAAqB;QAClE,MAAM,YAAY,GAAG,KAAK,EAAE,KAAyB,EAAE,EAAE;YACvD,IAAI,CAAC,KAAK;gBAAE,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,aAAa,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACnD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;YACpF,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC;QAEF,OAAO;YACL,GAAG,KAAK;YACR,WAAW,EAAE,MAAM,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC;YAClD,QAAQ,EAAE,MAAM,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC;SAC7C,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,KAAY,EAAE,SAAqB;QAC5D,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAEvE,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACzD,MAAM,WAAW,GACf,KAAK,CAAC,IAAI,KAAK,SAAS;gBACtB,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC;oBAC3B,YAAY,EAAE,KAAK,CAAC,YAAY;oBAChC,cAAc,EAAE,KAAK,CAAC,cAAc;oBACpC,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;iBACjC,CAAC;gBACJ,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC;oBAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;oBAChC,cAAc,EAAE,KAAK,CAAC,cAAc;oBACpC,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;oBAChC,QAAQ,EAAE,cAAc,CAAC,QAAQ;oBACjC,WAAW,EAAE,cAAc,CAAC,WAAW;iBACxC,CAAC,CAAC;YAET,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAC9C,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,EACrC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAClC,aAAa,CACd,CAAC;YAEF,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC3B,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC/D,MAAM,cAAc,GAClB,KAAK,CAAC,IAAI,KAAK,SAAS;gBACtB,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC;oBAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;oBAChC,cAAc,EAAE,KAAK,CAAC,cAAc;oBACpC,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;oBAChC,QAAQ,EAAE,cAAc,CAAC,QAAQ;oBACjC,WAAW,EAAE,cAAc,CAAC,WAAW;iBACxC,CAAC;gBACJ,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC;oBAC/B,YAAY,EAAE,KAAK,CAAC,YAAY;oBAChC,cAAc,EAAE,KAAK,CAAC,cAAc;oBACpC,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;oBAChC,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;iBAC/C,CAAC,CAAC;YAET,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CACjD,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,EACxC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,EACrC,gBAAgB,CACjB,CAAC;YAEF,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,OAAO,EAAY;QAC9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAa,CAAC,IAAI,CAAC,cAAc,EAAE;YAC7D,OAAO;YACP,UAAU;SACX,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAa,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAEvE,OAAO,OAAO,CAAC,GAAG,CAChB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAY,EAAE,EAAE;YAC9C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACnE,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,EACtB,OAAO,EACP,QAAQ,EACR,WAAW,EACX,UAAU,EACV,aAAa,GACuC;QACpD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAE/C,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;YAC1E,OAAO,QAAQ,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC,CAAC;QAEF,MAAM,gBAAgB,GAAG,IAAI,CAAC,0BAA0B,CAAC;YACvD,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,QAAQ;YACR,WAAW;SACZ,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC;QACpE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,eAAe,CAAC,CAAC;QAElG,MAAM,IAAI,CAAC,YAAa,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC/C,OAAO;YACP,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC;YAChC,WAAW,EAAE,YAAY,CAAC,WAAW,CAAC;YACtC,UAAU;YACV,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;SAC3C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAA4B;QAC7F,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAE/C,MAAM,gBAAgB,GAAG,IAAI,CAAC,2BAA2B,CAAC;YACxD,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,mBAAmB;SACpB,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC;QACpE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,eAAe,CAAC,CAAC;QAElG,MAAM,IAAI,CAAC,YAAa,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC/C,OAAO;YACP,mBAAmB;YACnB,UAAU;YACV,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;SAC3C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAA6B;QACzF,MAAM,IAAI,CAAC,YAAa,CAAC,IAAI,CAAC,mBAAmB,EAAE;YACjD,OAAO,EAAE,OAAO;YAChB,aAAa,EAAE,aAAa;YAC5B,UAAU,EAAE,UAAU;SACvB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAY;QAC1D,MAAM,IAAI,CAAC,YAAa,CAAC,IAAI,CAAC,mBAAmB,EAAE;YACjD,OAAO,EAAE,OAAO;YAChB,UAAU,EAAE,UAAU;SACvB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAmB;QAC9D,MAAM,IAAI,CAAC,YAAa,CAAC,IAAI,CAAC,eAAe,EAAE;YAC7C,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,UAAU;SACvB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,MAAM,EAAqB;QACtD,MAAM,IAAI,CAAC,YAAa,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC/C,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB;QACjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAe,CAAC,IAAI,CAAC,aAAa,EAAE;YAC9D,SAAS,EAAE,SAAS;SACrB,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,SAAiB;QACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAE/C,MAAM,aAAa,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAErE,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC;QACpE,MAAM,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;QAEpE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,eAAe,GAAG,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAE,CAAC;QAE3D,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAE7D,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAE/F,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC3C,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,gBAA4B,EAAE,GAAe;QACrE,IAAI,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,gCAAgC,gBAAgB,CAAC,MAAM,QAAQ,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACpE,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAEtE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9D,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IACO,KAAK,CAAC,YAAY,CAAC,KAAsB;QAC/C,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,mBAAmB;QACxE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChF,CAAC;IAEO,uBAAuB,CAAC,EAC9B,YAAY,EACZ,cAAc,EACd,UAAU,EACV,YAAY,GAMb;QACC,OAAO,GAAG,YAAY,IAAI,cAAc,IAAI,UAAU,IAAI,YAAY,EAAE,CAAC;IAC3E,CAAC;IAEO,wBAAwB,CAAC,EAC/B,YAAY,EACZ,cAAc,EACd,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,WAAW,GAQZ;QACC,OAAO,GAAG,YAAY,IAAI,cAAc,IAAI,UAAU,IAAI,YAAY,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;IACtG,CAAC;IAEO,0BAA0B,CAAC,EACjC,YAAY,EACZ,cAAc,EACd,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,WAAW,GAQZ;QACC,OAAO,GAAG,YAAY,IAAI,cAAc,IAAI,UAAU,IAAI,YAAY,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;IACtG,CAAC;IAEO,2BAA2B,CAAC,EAClC,YAAY,EACZ,cAAc,EACd,UAAU,EACV,YAAY,EACZ,mBAAmB,GAOpB;QACC,OAAO,GAAG,YAAY,IAAI,cAAc,IAAI,UAAU,IAAI,YAAY,IAAI,mBAAmB,EAAE,CAAC;IAClG,CAAC;CACF"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index f97973d..0dec0d4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "brij-partner-sdk", - "version": "0.3.1", + "version": "0.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "brij-partner-sdk", - "version": "0.3.1", + "version": "0.4.0", "license": "ISC", "dependencies": { "@bufbuild/protobuf": "^2.2.0", diff --git a/package.json b/package.json index 68dbc64..6215dfd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "brij-partner-sdk", - "version": "0.3.2", + "version": "0.4.0", "description": "", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/protos/data.proto b/protos/data.proto index 0b82460..cea2f92 100644 --- a/protos/data.proto +++ b/protos/data.proto @@ -1,19 +1,20 @@ syntax = "proto3"; -package espressocash.data.v1; +package brij.storage.v1; import "google/protobuf/timestamp.proto"; -message WrappedData { - oneof data { - string email = 1; - Name name = 2; - google.protobuf.Timestamp birth_date = 3; - string phone = 4; - Document document = 5; - BankInfo bank_info = 6; - bytes selfie_image = 7; - } +option go_package = 'brij.fi/storage'; + +enum DataType { + DATA_TYPE_UNSPECIFIED = 0; + DATA_TYPE_PHONE = 1; + DATA_TYPE_EMAIL = 2; + DATA_TYPE_NAME = 3; + DATA_TYPE_BIRTH_DATE = 4; + DATA_TYPE_DOCUMENT = 5; + DATA_TYPE_BANK_INFO = 6; + DATA_TYPE_SELFIE_IMAGE = 7; } message Name { @@ -21,10 +22,8 @@ message Name { string last_name = 2; } -message Document { - DocumentType type = 1; - string number = 2; - string country_code = 3; +message BirthDate { + google.protobuf.Timestamp value = 1; } enum DocumentType { @@ -32,32 +31,26 @@ enum DocumentType { DOCUMENT_TYPE_VOTER_ID = 1; } +message Document { + DocumentType type = 1; + string number = 2; + string country_code = 3; +} + message BankInfo { string account_number = 1; string bank_code = 2; string bank_name = 3; } -message WrappedValidation { - oneof data { - HashValidation hash = 1; - CustomValidation custom = 2; - } +message Email { + string value = 1; } -message HashValidation { - string hash = 1; - ValidationStatus status = 2; +message SelfieImage { + bytes value = 1; } -enum ValidationStatus { - VALIDATION_STATUS_UNSPECIFIED = 0; - VALIDATION_STATUS_PENDING = 1; - VALIDATION_STATUS_APPROVED = 2; - VALIDATION_STATUS_REJECTED = 3; +message Phone { + string value = 1; } - -message CustomValidation { - string type = 1; - bytes data = 2; -} \ No newline at end of file diff --git a/protos/validation_status.proto b/protos/validation_status.proto new file mode 100644 index 0000000..0caf44b --- /dev/null +++ b/protos/validation_status.proto @@ -0,0 +1,12 @@ +syntax = 'proto3'; + +package brij.storage.v1; + +option go_package = 'brij.fi/storage'; + +enum ValidationStatus { + VALIDATION_STATUS_UNSPECIFIED = 0; + VALIDATION_STATUS_PENDING = 1; + VALIDATION_STATUS_APPROVED = 2; + VALIDATION_STATUS_REJECTED = 3; +} diff --git a/src/generated/google/protobuf/timestamp.ts b/src/generated/google/protobuf/timestamp.ts index 800aab3..09e7ec5 100644 --- a/src/generated/google/protobuf/timestamp.ts +++ b/src/generated/google/protobuf/timestamp.ts @@ -1,7 +1,7 @@ // Code generated by protoc-gen-ts_proto. DO NOT EDIT. // versions: // protoc-gen-ts_proto v2.2.4 -// protoc v5.27.0 +// protoc v5.26.1 // source: google/protobuf/timestamp.proto /* eslint-disable */ diff --git a/src/generated/protos/data.ts b/src/generated/protos/data.ts index 6c07a3b..aac8f43 100644 --- a/src/generated/protos/data.ts +++ b/src/generated/protos/data.ts @@ -1,108 +1,126 @@ // Code generated by protoc-gen-ts_proto. DO NOT EDIT. // versions: // protoc-gen-ts_proto v2.2.4 -// protoc v5.27.0 +// protoc v5.26.1 // source: protos/data.proto /* eslint-disable */ import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire"; import { Timestamp } from "../google/protobuf/timestamp.js"; -export const protobufPackage = "espressocash.data.v1"; - -export enum DocumentType { - DOCUMENT_TYPE_UNSPECIFIED = 0, - DOCUMENT_TYPE_VOTER_ID = 1, +export const protobufPackage = "brij.storage.v1"; + +export enum DataType { + DATA_TYPE_UNSPECIFIED = 0, + DATA_TYPE_PHONE = 1, + DATA_TYPE_EMAIL = 2, + DATA_TYPE_NAME = 3, + DATA_TYPE_BIRTH_DATE = 4, + DATA_TYPE_DOCUMENT = 5, + DATA_TYPE_BANK_INFO = 6, + DATA_TYPE_SELFIE_IMAGE = 7, UNRECOGNIZED = -1, } -export function documentTypeFromJSON(object: any): DocumentType { +export function dataTypeFromJSON(object: any): DataType { switch (object) { case 0: - case "DOCUMENT_TYPE_UNSPECIFIED": - return DocumentType.DOCUMENT_TYPE_UNSPECIFIED; + case "DATA_TYPE_UNSPECIFIED": + return DataType.DATA_TYPE_UNSPECIFIED; case 1: - case "DOCUMENT_TYPE_VOTER_ID": - return DocumentType.DOCUMENT_TYPE_VOTER_ID; + case "DATA_TYPE_PHONE": + return DataType.DATA_TYPE_PHONE; + case 2: + case "DATA_TYPE_EMAIL": + return DataType.DATA_TYPE_EMAIL; + case 3: + case "DATA_TYPE_NAME": + return DataType.DATA_TYPE_NAME; + case 4: + case "DATA_TYPE_BIRTH_DATE": + return DataType.DATA_TYPE_BIRTH_DATE; + case 5: + case "DATA_TYPE_DOCUMENT": + return DataType.DATA_TYPE_DOCUMENT; + case 6: + case "DATA_TYPE_BANK_INFO": + return DataType.DATA_TYPE_BANK_INFO; + case 7: + case "DATA_TYPE_SELFIE_IMAGE": + return DataType.DATA_TYPE_SELFIE_IMAGE; case -1: case "UNRECOGNIZED": default: - return DocumentType.UNRECOGNIZED; + return DataType.UNRECOGNIZED; } } -export function documentTypeToJSON(object: DocumentType): string { +export function dataTypeToJSON(object: DataType): string { switch (object) { - case DocumentType.DOCUMENT_TYPE_UNSPECIFIED: - return "DOCUMENT_TYPE_UNSPECIFIED"; - case DocumentType.DOCUMENT_TYPE_VOTER_ID: - return "DOCUMENT_TYPE_VOTER_ID"; - case DocumentType.UNRECOGNIZED: + case DataType.DATA_TYPE_UNSPECIFIED: + return "DATA_TYPE_UNSPECIFIED"; + case DataType.DATA_TYPE_PHONE: + return "DATA_TYPE_PHONE"; + case DataType.DATA_TYPE_EMAIL: + return "DATA_TYPE_EMAIL"; + case DataType.DATA_TYPE_NAME: + return "DATA_TYPE_NAME"; + case DataType.DATA_TYPE_BIRTH_DATE: + return "DATA_TYPE_BIRTH_DATE"; + case DataType.DATA_TYPE_DOCUMENT: + return "DATA_TYPE_DOCUMENT"; + case DataType.DATA_TYPE_BANK_INFO: + return "DATA_TYPE_BANK_INFO"; + case DataType.DATA_TYPE_SELFIE_IMAGE: + return "DATA_TYPE_SELFIE_IMAGE"; + case DataType.UNRECOGNIZED: default: return "UNRECOGNIZED"; } } -export enum ValidationStatus { - VALIDATION_STATUS_UNSPECIFIED = 0, - VALIDATION_STATUS_PENDING = 1, - VALIDATION_STATUS_APPROVED = 2, - VALIDATION_STATUS_REJECTED = 3, +export enum DocumentType { + DOCUMENT_TYPE_UNSPECIFIED = 0, + DOCUMENT_TYPE_VOTER_ID = 1, UNRECOGNIZED = -1, } -export function validationStatusFromJSON(object: any): ValidationStatus { +export function documentTypeFromJSON(object: any): DocumentType { switch (object) { case 0: - case "VALIDATION_STATUS_UNSPECIFIED": - return ValidationStatus.VALIDATION_STATUS_UNSPECIFIED; + case "DOCUMENT_TYPE_UNSPECIFIED": + return DocumentType.DOCUMENT_TYPE_UNSPECIFIED; case 1: - case "VALIDATION_STATUS_PENDING": - return ValidationStatus.VALIDATION_STATUS_PENDING; - case 2: - case "VALIDATION_STATUS_APPROVED": - return ValidationStatus.VALIDATION_STATUS_APPROVED; - case 3: - case "VALIDATION_STATUS_REJECTED": - return ValidationStatus.VALIDATION_STATUS_REJECTED; + case "DOCUMENT_TYPE_VOTER_ID": + return DocumentType.DOCUMENT_TYPE_VOTER_ID; case -1: case "UNRECOGNIZED": default: - return ValidationStatus.UNRECOGNIZED; + return DocumentType.UNRECOGNIZED; } } -export function validationStatusToJSON(object: ValidationStatus): string { +export function documentTypeToJSON(object: DocumentType): string { switch (object) { - case ValidationStatus.VALIDATION_STATUS_UNSPECIFIED: - return "VALIDATION_STATUS_UNSPECIFIED"; - case ValidationStatus.VALIDATION_STATUS_PENDING: - return "VALIDATION_STATUS_PENDING"; - case ValidationStatus.VALIDATION_STATUS_APPROVED: - return "VALIDATION_STATUS_APPROVED"; - case ValidationStatus.VALIDATION_STATUS_REJECTED: - return "VALIDATION_STATUS_REJECTED"; - case ValidationStatus.UNRECOGNIZED: + case DocumentType.DOCUMENT_TYPE_UNSPECIFIED: + return "DOCUMENT_TYPE_UNSPECIFIED"; + case DocumentType.DOCUMENT_TYPE_VOTER_ID: + return "DOCUMENT_TYPE_VOTER_ID"; + case DocumentType.UNRECOGNIZED: default: return "UNRECOGNIZED"; } } -export interface WrappedData { - email?: string | undefined; - name?: Name | undefined; - birthDate?: Date | undefined; - phone?: string | undefined; - document?: Document | undefined; - bankInfo?: BankInfo | undefined; - selfieImage?: Uint8Array | undefined; -} - export interface Name { firstName: string; lastName: string; } +export interface BirthDate { + value: Date | undefined; +} + export interface Document { type: DocumentType; number: string; @@ -115,63 +133,37 @@ export interface BankInfo { bankName: string; } -export interface WrappedValidation { - hash?: HashValidation | undefined; - custom?: CustomValidation | undefined; +export interface Email { + value: string; } -export interface HashValidation { - hash: string; - status: ValidationStatus; +export interface SelfieImage { + value: Uint8Array; } -export interface CustomValidation { - type: string; - data: Uint8Array; +export interface Phone { + value: string; } -function createBaseWrappedData(): WrappedData { - return { - email: undefined, - name: undefined, - birthDate: undefined, - phone: undefined, - document: undefined, - bankInfo: undefined, - selfieImage: undefined, - }; +function createBaseName(): Name { + return { firstName: "", lastName: "" }; } -export const WrappedData: MessageFns = { - encode(message: WrappedData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { - if (message.email !== undefined) { - writer.uint32(10).string(message.email); - } - if (message.name !== undefined) { - Name.encode(message.name, writer.uint32(18).fork()).join(); - } - if (message.birthDate !== undefined) { - Timestamp.encode(toTimestamp(message.birthDate), writer.uint32(26).fork()).join(); - } - if (message.phone !== undefined) { - writer.uint32(34).string(message.phone); - } - if (message.document !== undefined) { - Document.encode(message.document, writer.uint32(42).fork()).join(); - } - if (message.bankInfo !== undefined) { - BankInfo.encode(message.bankInfo, writer.uint32(50).fork()).join(); +export const Name: MessageFns = { + encode(message: Name, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + if (message.firstName !== "") { + writer.uint32(10).string(message.firstName); } - if (message.selfieImage !== undefined) { - writer.uint32(58).bytes(message.selfieImage); + if (message.lastName !== "") { + writer.uint32(18).string(message.lastName); } return writer; }, - decode(input: BinaryReader | Uint8Array, length?: number): WrappedData { + decode(input: BinaryReader | Uint8Array, length?: number): Name { const reader = input instanceof BinaryReader ? input : new BinaryReader(input); let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseWrappedData(); + const message = createBaseName(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { @@ -180,7 +172,7 @@ export const WrappedData: MessageFns = { break; } - message.email = reader.string(); + message.firstName = reader.string(); continue; } case 2: { @@ -188,47 +180,7 @@ export const WrappedData: MessageFns = { break; } - message.name = Name.decode(reader, reader.uint32()); - continue; - } - case 3: { - if (tag !== 26) { - break; - } - - message.birthDate = fromTimestamp(Timestamp.decode(reader, reader.uint32())); - continue; - } - case 4: { - if (tag !== 34) { - break; - } - - message.phone = reader.string(); - continue; - } - case 5: { - if (tag !== 42) { - break; - } - - message.document = Document.decode(reader, reader.uint32()); - continue; - } - case 6: { - if (tag !== 50) { - break; - } - - message.bankInfo = BankInfo.decode(reader, reader.uint32()); - continue; - } - case 7: { - if (tag !== 58) { - break; - } - - message.selfieImage = reader.bytes(); + message.lastName = reader.string(); continue; } } @@ -240,83 +192,51 @@ export const WrappedData: MessageFns = { return message; }, - fromJSON(object: any): WrappedData { + fromJSON(object: any): Name { return { - email: isSet(object.email) ? globalThis.String(object.email) : undefined, - name: isSet(object.name) ? Name.fromJSON(object.name) : undefined, - birthDate: isSet(object.birthDate) ? fromJsonTimestamp(object.birthDate) : undefined, - phone: isSet(object.phone) ? globalThis.String(object.phone) : undefined, - document: isSet(object.document) ? Document.fromJSON(object.document) : undefined, - bankInfo: isSet(object.bankInfo) ? BankInfo.fromJSON(object.bankInfo) : undefined, - selfieImage: isSet(object.selfieImage) ? bytesFromBase64(object.selfieImage) : undefined, + firstName: isSet(object.firstName) ? globalThis.String(object.firstName) : "", + lastName: isSet(object.lastName) ? globalThis.String(object.lastName) : "", }; }, - toJSON(message: WrappedData): unknown { + toJSON(message: Name): unknown { const obj: any = {}; - if (message.email !== undefined) { - obj.email = message.email; - } - if (message.name !== undefined) { - obj.name = Name.toJSON(message.name); - } - if (message.birthDate !== undefined) { - obj.birthDate = message.birthDate.toISOString(); - } - if (message.phone !== undefined) { - obj.phone = message.phone; - } - if (message.document !== undefined) { - obj.document = Document.toJSON(message.document); - } - if (message.bankInfo !== undefined) { - obj.bankInfo = BankInfo.toJSON(message.bankInfo); + if (message.firstName !== "") { + obj.firstName = message.firstName; } - if (message.selfieImage !== undefined) { - obj.selfieImage = base64FromBytes(message.selfieImage); + if (message.lastName !== "") { + obj.lastName = message.lastName; } return obj; }, - create, I>>(base?: I): WrappedData { - return WrappedData.fromPartial(base ?? ({} as any)); - }, - fromPartial, I>>(object: I): WrappedData { - const message = createBaseWrappedData(); - message.email = object.email ?? undefined; - message.name = (object.name !== undefined && object.name !== null) ? Name.fromPartial(object.name) : undefined; - message.birthDate = object.birthDate ?? undefined; - message.phone = object.phone ?? undefined; - message.document = (object.document !== undefined && object.document !== null) - ? Document.fromPartial(object.document) - : undefined; - message.bankInfo = (object.bankInfo !== undefined && object.bankInfo !== null) - ? BankInfo.fromPartial(object.bankInfo) - : undefined; - message.selfieImage = object.selfieImage ?? undefined; + create, I>>(base?: I): Name { + return Name.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): Name { + const message = createBaseName(); + message.firstName = object.firstName ?? ""; + message.lastName = object.lastName ?? ""; return message; }, }; -function createBaseName(): Name { - return { firstName: "", lastName: "" }; +function createBaseBirthDate(): BirthDate { + return { value: undefined }; } -export const Name: MessageFns = { - encode(message: Name, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { - if (message.firstName !== "") { - writer.uint32(10).string(message.firstName); - } - if (message.lastName !== "") { - writer.uint32(18).string(message.lastName); +export const BirthDate: MessageFns = { + encode(message: BirthDate, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + if (message.value !== undefined) { + Timestamp.encode(toTimestamp(message.value), writer.uint32(10).fork()).join(); } return writer; }, - decode(input: BinaryReader | Uint8Array, length?: number): Name { + decode(input: BinaryReader | Uint8Array, length?: number): BirthDate { const reader = input instanceof BinaryReader ? input : new BinaryReader(input); let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseName(); + const message = createBaseBirthDate(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { @@ -325,15 +245,7 @@ export const Name: MessageFns = { break; } - message.firstName = reader.string(); - continue; - } - case 2: { - if (tag !== 18) { - break; - } - - message.lastName = reader.string(); + message.value = fromTimestamp(Timestamp.decode(reader, reader.uint32())); continue; } } @@ -345,31 +257,24 @@ export const Name: MessageFns = { return message; }, - fromJSON(object: any): Name { - return { - firstName: isSet(object.firstName) ? globalThis.String(object.firstName) : "", - lastName: isSet(object.lastName) ? globalThis.String(object.lastName) : "", - }; + fromJSON(object: any): BirthDate { + return { value: isSet(object.value) ? fromJsonTimestamp(object.value) : undefined }; }, - toJSON(message: Name): unknown { + toJSON(message: BirthDate): unknown { const obj: any = {}; - if (message.firstName !== "") { - obj.firstName = message.firstName; - } - if (message.lastName !== "") { - obj.lastName = message.lastName; + if (message.value !== undefined) { + obj.value = message.value.toISOString(); } return obj; }, - create, I>>(base?: I): Name { - return Name.fromPartial(base ?? ({} as any)); + create, I>>(base?: I): BirthDate { + return BirthDate.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): Name { - const message = createBaseName(); - message.firstName = object.firstName ?? ""; - message.lastName = object.lastName ?? ""; + fromPartial, I>>(object: I): BirthDate { + const message = createBaseBirthDate(); + message.value = object.value ?? undefined; return message; }, }; @@ -558,25 +463,22 @@ export const BankInfo: MessageFns = { }, }; -function createBaseWrappedValidation(): WrappedValidation { - return { hash: undefined, custom: undefined }; +function createBaseEmail(): Email { + return { value: "" }; } -export const WrappedValidation: MessageFns = { - encode(message: WrappedValidation, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { - if (message.hash !== undefined) { - HashValidation.encode(message.hash, writer.uint32(10).fork()).join(); - } - if (message.custom !== undefined) { - CustomValidation.encode(message.custom, writer.uint32(18).fork()).join(); +export const Email: MessageFns = { + encode(message: Email, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + if (message.value !== "") { + writer.uint32(10).string(message.value); } return writer; }, - decode(input: BinaryReader | Uint8Array, length?: number): WrappedValidation { + decode(input: BinaryReader | Uint8Array, length?: number): Email { const reader = input instanceof BinaryReader ? input : new BinaryReader(input); let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseWrappedValidation(); + const message = createBaseEmail(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { @@ -585,15 +487,7 @@ export const WrappedValidation: MessageFns = { break; } - message.hash = HashValidation.decode(reader, reader.uint32()); - continue; - } - case 2: { - if (tag !== 18) { - break; - } - - message.custom = CustomValidation.decode(reader, reader.uint32()); + message.value = reader.string(); continue; } } @@ -605,58 +499,44 @@ export const WrappedValidation: MessageFns = { return message; }, - fromJSON(object: any): WrappedValidation { - return { - hash: isSet(object.hash) ? HashValidation.fromJSON(object.hash) : undefined, - custom: isSet(object.custom) ? CustomValidation.fromJSON(object.custom) : undefined, - }; + fromJSON(object: any): Email { + return { value: isSet(object.value) ? globalThis.String(object.value) : "" }; }, - toJSON(message: WrappedValidation): unknown { + toJSON(message: Email): unknown { const obj: any = {}; - if (message.hash !== undefined) { - obj.hash = HashValidation.toJSON(message.hash); - } - if (message.custom !== undefined) { - obj.custom = CustomValidation.toJSON(message.custom); + if (message.value !== "") { + obj.value = message.value; } return obj; }, - create, I>>(base?: I): WrappedValidation { - return WrappedValidation.fromPartial(base ?? ({} as any)); + create, I>>(base?: I): Email { + return Email.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): WrappedValidation { - const message = createBaseWrappedValidation(); - message.hash = (object.hash !== undefined && object.hash !== null) - ? HashValidation.fromPartial(object.hash) - : undefined; - message.custom = (object.custom !== undefined && object.custom !== null) - ? CustomValidation.fromPartial(object.custom) - : undefined; + fromPartial, I>>(object: I): Email { + const message = createBaseEmail(); + message.value = object.value ?? ""; return message; }, }; -function createBaseHashValidation(): HashValidation { - return { hash: "", status: 0 }; +function createBaseSelfieImage(): SelfieImage { + return { value: new Uint8Array(0) }; } -export const HashValidation: MessageFns = { - encode(message: HashValidation, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { - if (message.hash !== "") { - writer.uint32(10).string(message.hash); - } - if (message.status !== 0) { - writer.uint32(16).int32(message.status); +export const SelfieImage: MessageFns = { + encode(message: SelfieImage, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + if (message.value.length !== 0) { + writer.uint32(10).bytes(message.value); } return writer; }, - decode(input: BinaryReader | Uint8Array, length?: number): HashValidation { + decode(input: BinaryReader | Uint8Array, length?: number): SelfieImage { const reader = input instanceof BinaryReader ? input : new BinaryReader(input); let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseHashValidation(); + const message = createBaseSelfieImage(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { @@ -665,15 +545,7 @@ export const HashValidation: MessageFns = { break; } - message.hash = reader.string(); - continue; - } - case 2: { - if (tag !== 16) { - break; - } - - message.status = reader.int32() as any; + message.value = reader.bytes(); continue; } } @@ -685,54 +557,44 @@ export const HashValidation: MessageFns = { return message; }, - fromJSON(object: any): HashValidation { - return { - hash: isSet(object.hash) ? globalThis.String(object.hash) : "", - status: isSet(object.status) ? validationStatusFromJSON(object.status) : 0, - }; + fromJSON(object: any): SelfieImage { + return { value: isSet(object.value) ? bytesFromBase64(object.value) : new Uint8Array(0) }; }, - toJSON(message: HashValidation): unknown { + toJSON(message: SelfieImage): unknown { const obj: any = {}; - if (message.hash !== "") { - obj.hash = message.hash; - } - if (message.status !== 0) { - obj.status = validationStatusToJSON(message.status); + if (message.value.length !== 0) { + obj.value = base64FromBytes(message.value); } return obj; }, - create, I>>(base?: I): HashValidation { - return HashValidation.fromPartial(base ?? ({} as any)); + create, I>>(base?: I): SelfieImage { + return SelfieImage.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): HashValidation { - const message = createBaseHashValidation(); - message.hash = object.hash ?? ""; - message.status = object.status ?? 0; + fromPartial, I>>(object: I): SelfieImage { + const message = createBaseSelfieImage(); + message.value = object.value ?? new Uint8Array(0); return message; }, }; -function createBaseCustomValidation(): CustomValidation { - return { type: "", data: new Uint8Array(0) }; +function createBasePhone(): Phone { + return { value: "" }; } -export const CustomValidation: MessageFns = { - encode(message: CustomValidation, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { - if (message.type !== "") { - writer.uint32(10).string(message.type); - } - if (message.data.length !== 0) { - writer.uint32(18).bytes(message.data); +export const Phone: MessageFns = { + encode(message: Phone, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + if (message.value !== "") { + writer.uint32(10).string(message.value); } return writer; }, - decode(input: BinaryReader | Uint8Array, length?: number): CustomValidation { + decode(input: BinaryReader | Uint8Array, length?: number): Phone { const reader = input instanceof BinaryReader ? input : new BinaryReader(input); let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseCustomValidation(); + const message = createBasePhone(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { @@ -741,15 +603,7 @@ export const CustomValidation: MessageFns = { break; } - message.type = reader.string(); - continue; - } - case 2: { - if (tag !== 18) { - break; - } - - message.data = reader.bytes(); + message.value = reader.string(); continue; } } @@ -761,31 +615,24 @@ export const CustomValidation: MessageFns = { return message; }, - fromJSON(object: any): CustomValidation { - return { - type: isSet(object.type) ? globalThis.String(object.type) : "", - data: isSet(object.data) ? bytesFromBase64(object.data) : new Uint8Array(0), - }; + fromJSON(object: any): Phone { + return { value: isSet(object.value) ? globalThis.String(object.value) : "" }; }, - toJSON(message: CustomValidation): unknown { + toJSON(message: Phone): unknown { const obj: any = {}; - if (message.type !== "") { - obj.type = message.type; - } - if (message.data.length !== 0) { - obj.data = base64FromBytes(message.data); + if (message.value !== "") { + obj.value = message.value; } return obj; }, - create, I>>(base?: I): CustomValidation { - return CustomValidation.fromPartial(base ?? ({} as any)); + create, I>>(base?: I): Phone { + return Phone.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>(object: I): CustomValidation { - const message = createBaseCustomValidation(); - message.type = object.type ?? ""; - message.data = object.data ?? new Uint8Array(0); + fromPartial, I>>(object: I): Phone { + const message = createBasePhone(); + message.value = object.value ?? ""; return message; }, }; diff --git a/src/generated/protos/validation_status.ts b/src/generated/protos/validation_status.ts new file mode 100644 index 0000000..2cd5843 --- /dev/null +++ b/src/generated/protos/validation_status.ts @@ -0,0 +1,54 @@ +// Code generated by protoc-gen-ts_proto. DO NOT EDIT. +// versions: +// protoc-gen-ts_proto v2.2.4 +// protoc v5.26.1 +// source: protos/validation_status.proto + +/* eslint-disable */ + +export const protobufPackage = "brij.storage.v1"; + +export enum ValidationStatus { + VALIDATION_STATUS_UNSPECIFIED = 0, + VALIDATION_STATUS_PENDING = 1, + VALIDATION_STATUS_APPROVED = 2, + VALIDATION_STATUS_REJECTED = 3, + UNRECOGNIZED = -1, +} + +export function validationStatusFromJSON(object: any): ValidationStatus { + switch (object) { + case 0: + case "VALIDATION_STATUS_UNSPECIFIED": + return ValidationStatus.VALIDATION_STATUS_UNSPECIFIED; + case 1: + case "VALIDATION_STATUS_PENDING": + return ValidationStatus.VALIDATION_STATUS_PENDING; + case 2: + case "VALIDATION_STATUS_APPROVED": + return ValidationStatus.VALIDATION_STATUS_APPROVED; + case 3: + case "VALIDATION_STATUS_REJECTED": + return ValidationStatus.VALIDATION_STATUS_REJECTED; + case -1: + case "UNRECOGNIZED": + default: + return ValidationStatus.UNRECOGNIZED; + } +} + +export function validationStatusToJSON(object: ValidationStatus): string { + switch (object) { + case ValidationStatus.VALIDATION_STATUS_UNSPECIFIED: + return "VALIDATION_STATUS_UNSPECIFIED"; + case ValidationStatus.VALIDATION_STATUS_PENDING: + return "VALIDATION_STATUS_PENDING"; + case ValidationStatus.VALIDATION_STATUS_APPROVED: + return "VALIDATION_STATUS_APPROVED"; + case ValidationStatus.VALIDATION_STATUS_REJECTED: + return "VALIDATION_STATUS_REJECTED"; + case ValidationStatus.UNRECOGNIZED: + default: + return "UNRECOGNIZED"; + } +} diff --git a/src/index.ts b/src/index.ts index e20a96f..ec896b2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,10 +7,18 @@ import naclUtil from "tweetnacl-util"; import ed2curve from "ed2curve"; import { documentTypeToJSON, - ValidationStatus as ProtoValidationStatus, - WrappedData, - WrappedValidation, + dataTypeFromJSON, + DataType, + Email, + Phone, + Name, + BirthDate, + Document, + BankInfo, + SelfieImage, + MessageFns, } from "./generated/protos/data.js"; +import { ValidationStatus as ProtoValidationStatus, validationStatusFromJSON } from "./generated/protos/validation_status.js"; interface AuthKeyPair { getPrivateKeyBytes(): Promise; @@ -66,21 +74,25 @@ export type AcceptOffRampOrderParams = { export type RejectOrderParams = { orderId: string; reason: string }; -export type DataAccessParams = { userPK: string; secretKey: string }; +export type DataAccessParams = { + userPK: string; + secretKey: string; + includeValues?: boolean; +}; export type UserDataField = { dataId: string; status: ValidationStatus }; export type UserDataValueField = { value: T } & UserDataField; export type UserData = { - email: Array>; - phone: Array>; - name: Array<{ firstName: string; lastName: string } & UserDataField>; - birthDate: Array>; - document: Array<{ type: string; number: string; countryCode: string } & UserDataField>; - bankInfo: Array<{ bankName: string; accountNumber: string; bankCode: string } & UserDataField>; - selfie: Array>; - custom: Record; + email?: UserDataValueField; + phone?: UserDataValueField; + name?: { firstName: string; lastName: string } & UserDataField; + birthDate?: UserDataValueField; + document?: { type: string; number: string; countryCode: string } & UserDataField; + bankInfo?: { bankName: string; accountNumber: string; bankCode: string } & UserDataField; + selfie?: UserDataValueField; + custom?: Record; }; type ValidationResult = { dataId: string; value: string; status: ProtoValidationStatus }; @@ -134,18 +146,18 @@ function toValidationStatus(protoStatus: ProtoValidationStatus): ValidationStatu export class BrijPartnerClient { private authKeyPair: AuthKeyPair; - private readonly kycBaseUrl: string; + private readonly storageBaseUrl: string; private readonly orderBaseUrl: string; private _authPublicKey: string; - private _kycClient: AxiosInstance | null; + private _storageClient: AxiosInstance | null; private _orderClient: AxiosInstance | null; private constructor({ authKeyPair, appConfig = AppConfig.demo() }: BrijPartnerClientOptions) { this.authKeyPair = authKeyPair; - this.kycBaseUrl = appConfig.storageBaseUrl; + this.storageBaseUrl = appConfig.storageBaseUrl; this.orderBaseUrl = appConfig.orderBaseUrl; this._authPublicKey = ""; - this._kycClient = null; + this._storageClient = null; this._orderClient = null; } @@ -194,11 +206,11 @@ export class BrijPartnerClient { this._authPublicKey = base58.encode(publicKeyBytes); - const kycToken = await this.createToken(privateKeyBytes, "kyc.espressocash.com"); + const storageToken = await this.createToken(privateKeyBytes, "storage.brij.fi"); - this._kycClient = axios.create({ - baseURL: this.kycBaseUrl, - headers: { Authorization: `Bearer ${kycToken}` }, + this._storageClient = axios.create({ + baseURL: this.storageBaseUrl, + headers: { Authorization: `Bearer ${storageToken}` }, }); const orderToken = await this.createToken(privateKeyBytes, "orders.espressocash.com"); @@ -226,114 +238,102 @@ export class BrijPartnerClient { return `${dataToSign}.${base64url.encode(signature)}`; } - async getUserData({ userPK, secretKey }: DataAccessParams): Promise { - const response = await this._kycClient!.post("/v1/getUserData", { + async getUserData({ userPK, secretKey, includeValues = true }: DataAccessParams): Promise { + const response = await this._storageClient!.post("/v1/getUserData", { userPublicKey: userPK, + includeValues, }); const responseData = response.data; - const validationMap = new Map(); - const custom: Record = {}; + const validationMap = new Map( + responseData.validationData.map((data: any) => [ + data.dataId, + { + dataId: data.dataId, + hash: data.hash, + status: data.status, + }, + ]) + ); - const userVerifyKey = base58.decode(userPK); + const userData: UserData = {}; const secret = base58.decode(secretKey); - // Validation results - for (const encrypted of responseData.validationData) { - const encryptedData = encrypted.encryptedData; - const validatorVerifyKey = base58.decode(encrypted.validatorPublicKey); - - const signedMessage = naclUtil.decodeBase64(encryptedData); - const message = nacl.sign.open(signedMessage, validatorVerifyKey); - - if (!message) { - throw new Error(`Invalid signature for key`); - } - const decryptedData = await this.decryptData(message, secret); - const wrappedData = WrappedValidation.decode(new Uint8Array(decryptedData)); - - if (wrappedData.hash) { - const result: ValidationResult = { - dataId: encrypted.dataId, - value: wrappedData.hash.hash, - status: wrappedData.hash.status, - }; - validationMap.set(result.dataId, result); - } else if (wrappedData.custom) { - const result: CustomValidationResult = { - type: wrappedData.custom.type, - value: new TextDecoder().decode(wrappedData.custom.data), - }; - custom[result.type] = result.value; - } - } - - const userData: UserData = { - email: [], - phone: [], - name: [], - birthDate: [], - document: [], - bankInfo: [], - selfie: [], - custom: custom, - }; - - // User data for (const encrypted of responseData.userData) { - const encryptedData = encrypted.encryptedData; - - const signedMessage = naclUtil.decodeBase64(encryptedData); - const message = nacl.sign.open(signedMessage, userVerifyKey); - - if (!message) { - throw new Error(`Invalid signature for key`); - } - const decryptedData = await this.decryptData(message, secret); - const wrappedData = WrappedData.decode(new Uint8Array(decryptedData)); + const decryptedData = encrypted.encryptedValue?.trim() + ? await this.decryptData(naclUtil.decodeBase64(encrypted.encryptedValue), secret) + : new Uint8Array(0); const dataId = encrypted.id; const verificationData = validationMap.get(dataId); - - let status = ValidationStatus.Unspecified; - if (verificationData) { - const hash = await this.generateHash(wrappedData); - const hashMatching = hash === verificationData.value; - status = hashMatching ? toValidationStatus(verificationData.status) : ValidationStatus.Unverified; - } - - const commonFields: UserDataField = { dataId, status }; - if (wrappedData.email) { - userData.email.push({ value: wrappedData.email, ...commonFields }); - } else if (wrappedData.name) { - userData.name.push({ - firstName: wrappedData.name.firstName, - lastName: wrappedData.name.lastName, - ...commonFields, - }); - } else if (wrappedData.birthDate) { - userData.birthDate.push({ value: new Date(wrappedData.birthDate), ...commonFields }); - } else if (wrappedData.phone) { - userData.phone.push({ value: wrappedData.phone, ...commonFields }); - } else if (wrappedData.document) { - userData.document.push({ - type: documentTypeToJSON(wrappedData.document.type), - number: wrappedData.document.number, - countryCode: wrappedData.document.countryCode, - ...commonFields, - }); - } else if (wrappedData.bankInfo) { - userData.bankInfo.push({ - bankName: wrappedData.bankInfo.bankName, - accountNumber: wrappedData.bankInfo.accountNumber, - bankCode: wrappedData.bankInfo.bankCode, - ...commonFields, - }); - } else if (wrappedData.selfieImage) { - userData.selfie.push({ value: wrappedData.selfieImage, ...commonFields }); + const status = verificationData?.status ?? ProtoValidationStatus.UNRECOGNIZED; + const commonFields: UserDataField = { dataId, status: toValidationStatus(validationStatusFromJSON(status)) }; + + switch (dataTypeFromJSON(encrypted.type)) { + case DataType.DATA_TYPE_EMAIL: { + const data = Email.decode(decryptedData); + userData.email = { value: data.value, ...commonFields }; + break; + } + case DataType.DATA_TYPE_NAME: { + const data = Name.decode(decryptedData); + userData.name = { + firstName: data.firstName, + lastName: data.lastName, + ...commonFields, + }; + break; + } + case DataType.DATA_TYPE_BIRTH_DATE: { + const data = BirthDate.decode(decryptedData); + userData.birthDate = { value: new Date(data.value!), ...commonFields }; + break; + } + case DataType.DATA_TYPE_PHONE: { + const data = Phone.decode(decryptedData); + userData.phone = { value: data.value, ...commonFields }; + break; + } + case DataType.DATA_TYPE_DOCUMENT: { + const data = Document.decode(decryptedData); + userData.document = { + type: documentTypeToJSON(data.type), + number: data.number, + countryCode: data.countryCode, + ...commonFields, + }; + break; + } + case DataType.DATA_TYPE_BANK_INFO: { + const data = BankInfo.decode(decryptedData); + userData.bankInfo = { + bankName: data.bankName, + accountNumber: data.accountNumber, + bankCode: data.bankCode, + ...commonFields, + }; + break; + } + case DataType.DATA_TYPE_SELFIE_IMAGE: { + const data = SelfieImage.decode(decryptedData); + userData.selfie = { value: data.value, ...commonFields }; + break; + } } } + userData.custom = Object.fromEntries( + await Promise.all( + responseData.customValidationData.map(async (data: any) => { + if (!data.encryptedValue) { + return [data.id, ""]; + } + const decryptedValue = await this.decryptData(naclUtil.decodeBase64(data.encryptedValue), secret); + return [data.id, new TextDecoder().decode(decryptedValue)]; + }) + ) + ); + return userData; } @@ -533,7 +533,7 @@ export class BrijPartnerClient { } async getUserInfo(publicKey: string) { - const response = await this._kycClient!.post("/v1/getInfo", { + const response = await this._storageClient!.post("/v1/getInfo", { publicKey: publicKey, }); @@ -564,20 +564,22 @@ export class BrijPartnerClient { } private async decryptData(encryptedMessage: Uint8Array, key: Uint8Array): Promise { + if (encryptedMessage.length < nacl.secretbox.nonceLength) { + throw new Error(`Encrypted message too short: ${encryptedMessage.length} bytes`); + } + const nonce = encryptedMessage.slice(0, nacl.secretbox.nonceLength); const ciphertext = encryptedMessage.slice(nacl.secretbox.nonceLength); const decrypted = nacl.secretbox.open(ciphertext, nonce, key); - if (!decrypted) { throw new Error("Unable to decrypt data"); } return decrypted; } - - private async generateHash(value: WrappedData): Promise { - const serializedData = WrappedData.encode(value).finish(); + private async generateHash(value: MessageFns): Promise { + const serializedData = value.encode(value).finish(); //TODO double check return createHash("sha256").update(Buffer.from(serializedData)).digest("hex"); }