import lodash from 'lodash' import { LogLevel, LoggerOptions } from '@diia-inhouse/types' import { InternalLoggerOptions } from './interfaces/index.js' // oxlint-disable-next-line typescript/unbound-method const { merge } = lodash const freeTextFields = ['value', 'text', 'textItems', 'label', 'shortText', 'accessibilityDescription'] export const defaultOptions: LoggerOptions = { logLevel: LogLevel.INFO, maxArrayLength: 100, maxStringLength: 255, endLengthToLog: 10, maxObjectDepth: 8, maxObjectBreadth: 50, redact: { fields: [ 'inn', 'itn', 'client', 'firstName', 'lastName', 'middleName', 'firstname', 'lastname', 'middlename', 'first_name', 'last_name', 'middle_name', 'given_name', 'family_name', 'patronymic_name', 'passportSeries', 'passportNumber', 'addressOfRegistration', 'addressOfBirth', 'birthDay', 'birthday', 'date_birth', 'fio', 'passport', 'address', 'birthplace', 'fullName', 'full_name', 'refreshToken', 'token', 'fName', 'lName', 'mName', 'DocNumberDRFO', 'GivenName', 'PatronymicName', 'FamilyName', 'surname', 'patronymic', 'rnokpp', 'document', 'firstNameUA', 'lastNameUA', 'middleNameUA', 'serialNumber', 'department', 'departmentUA', 'departmentEN', 'birthPlaceUA', 'birthPlaceEN', 'recordNumber', 'firstNameEN', 'lastNameEN', 'docNumber', 'documentRegistrationPlaceUA', 'currentRegistrationPlaceUA', 'registrationPlace', 'birthDate', 'categories', 'photo', 'sign', 'docIdentity', 'collegeName', 'facultyName', 'educationType', 'vehicleLicenseId', 'website', 'vin', 'licensePlate', 'dateReg', 'dateFirstReg', 'number', 'residenceRegistrationPlace', 'documentNumber', 'password', 'vault', 'appPartnerId', 'partnerToken', 'partnerFullName', 'residenceAddress', 'displayName', 'content', 'subjAddress', 'subjDrfoCode', 'oldLastName', 'oldFirstName', 'oldMiddleName', 'personName', 'personSurname', 'personBirthDate', 'personFullName', 'INN', 'D_DOC', 'N_DOC', 'S_DOC', 'N_REG', ], paths: [], fieldsToRedactFullname: [ 'value', 'name', 'title', 'creditors', 'pay_text', 'order_description', 'owner', 'label', 'shortText', 'listName', 'text', 'textItems', 'subject', 'subjCn', 'subjFullName', 'accessibilityDescription', 'documents', ], fieldsToRedactItn: ['label', 'paymentPurpose', 'subject', 'value'], fieldsToRedactEmail: ['email', 'subjEmail', ...freeTextFields], fieldsToRedactPhone: ['phone', 'phoneNumber', 'extraPhoneNumber', 'personalPhone', 'subjPhone', ...freeTextFields], }, } export const toInternalLoggerOptions = (options: LoggerOptions = {}): InternalLoggerOptions => { const merged = merge({}, defaultOptions, options) const { redact } = merged return { ...merged, redact: { fields: new Set(redact.fields), paths: new Set(redact.paths), fieldsToRedactFullname: new Set(redact.fieldsToRedactFullname), fieldsToRedactItn: new Set(redact.fieldsToRedactItn), fieldsToRedactEmail: new Set(redact.fieldsToRedactEmail), fieldsToRedactPhone: new Set(redact.fieldsToRedactPhone), fieldsToScan: new Set([ ...(redact.fieldsToRedactFullname || []), ...(redact.fieldsToRedactItn || []), ...(redact.fieldsToRedactEmail || []), ...(redact.fieldsToRedactPhone || []), ]), }, } }