emilsoftware-utilities 2.0.0-dev.4 → 2.0.0-dev.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/Utilities.js CHANGED
@@ -403,8 +403,6 @@ class DatabaseUtilities {
403
403
  pageSize: 100000, // The page size for database transactions. Default: 100,000.
404
404
  retryConnectionInterval: 1000, // The interval (in ms) to retry a failed connection. Default: 1,000 ms.
405
405
  blobAsText: true, // Determines if BLOB fields should be treated as text. Default: true.
406
- wireCrypt: 'enabled',
407
- pluginName: 'Srp',
408
406
  authPlugins: ['Srp256', 'Srp', 'Legacy_Auth'],
409
407
  connectTimeoutMs: 15000,
410
408
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Utilities.js","sourceRoot":"","sources":["../src/Utilities.ts"],"names":[],"mappings":"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","sourcesContent":["import { Response } from 'express';\r\nimport { Options } from \"es-node-firebird\";\nimport { FirebirdOptions } from \"./firebird-compat\";\nimport crypto from \"crypto\";\r\n\r\n\r\nexport enum StatusCode {\r\n Ok = 0,\r\n Warning = 1,\r\n Error = 2,\r\n}\r\n\r\nexport class DateUtilities {\r\n /**\r\n * Pads a number with leading zeros to reach a specified length.\r\n * @param num - The number to pad.\r\n * @param totalLength - The total length of the resulting string.\r\n * @returns The padded string.\r\n */\r\n static addStartingZeros(num: number, totalLength: number): string {\r\n return String(num).padStart(totalLength, '0');\r\n }\r\n\r\n /**\r\n * Formats a Date object as a Moncler-style string.\r\n * @param dData - The date to format.\r\n * @param bAddMs - Whether to include milliseconds.\r\n * @returns The formatted date string.\r\n */\r\n static dateToMoncler(dData: Date, bAddMs: boolean = false): string {\r\n const yy = dData.getFullYear();\r\n const mm = this.addStartingZeros(dData.getMonth() + 1, 2);\r\n const dd = this.addStartingZeros(dData.getDate(), 2);\r\n const hh = this.addStartingZeros(dData.getHours(), 2);\r\n const nn = this.addStartingZeros(dData.getMinutes(), 2);\r\n const ss = this.addStartingZeros(dData.getSeconds(), 2);\r\n const ms = this.addStartingZeros(dData.getMilliseconds(), 3);\r\n return bAddMs ? `${yy}${mm}${dd}${hh}${nn}${ss}${ms}` : `${yy}${mm}${dd}${hh}${nn}${ss}`;\r\n }\r\n\r\n /**\r\n * Formats a Date object as a SQL-style string.\r\n * @param dData - The date to format.\r\n * @param bAddMs - Whether to include milliseconds.\r\n * @returns The formatted date string.\r\n */\r\n static dateToSql(dData: Date, bAddMs: boolean = false): string {\r\n const yy = dData.getFullYear();\r\n const mm = this.addStartingZeros(dData.getMonth() + 1, 2);\r\n const dd = this.addStartingZeros(dData.getDate(), 2);\r\n const hh = this.addStartingZeros(dData.getHours(), 2);\r\n const nn = this.addStartingZeros(dData.getMinutes(), 2);\r\n const ss = this.addStartingZeros(dData.getSeconds(), 2);\r\n const ms = this.addStartingZeros(dData.getMilliseconds(), 3);\r\n return bAddMs\r\n ? `${yy}-${mm}-${dd} ${hh}:${nn}:${ss}.${ms}`\r\n : `${yy}-${mm}-${dd} ${hh}:${nn}:${ss}`;\r\n }\r\n\r\n /**\r\n * Formats a Date object as a simple string (dd-MM-yyyy).\r\n * @param dData - The date to format.\r\n * @returns The formatted date string.\r\n */\r\n static dateToSimple(dData: Date): string {\r\n const yy = dData.getFullYear();\r\n const mm = this.addStartingZeros(dData.getMonth() + 1, 2);\r\n const dd = this.addStartingZeros(dData.getDate(), 2);\r\n return `${dd}-${mm}-${yy}`;\r\n }\r\n\r\n /**\r\n * Gets the current date and time as a formatted string.\r\n * @returns The current date and time in the format dd.MM.yyyy HH:mm:ss.\r\n */\r\n static getNowDateString(): string {\r\n const now: Date = new Date();\r\n const day = now.getDate().toString().padStart(2, \"0\");\r\n const month = (now.getMonth() + 1).toString().padStart(2, \"0\");\r\n const year = now.getFullYear();\r\n const hours = now.getHours().toString().padStart(2, \"0\");\r\n const minutes = now.getMinutes().toString().padStart(2, \"0\");\r\n const seconds = now.getSeconds().toString().padStart(2, \"0\");\r\n return `${day}.${month}.${year} ${hours}:${minutes}:${seconds}`;\r\n }\r\n\r\n /**\r\n * Parses a date string in the format dd/MM/yyyy into a Date object.\r\n * @param date - The date string to parse.\r\n * @returns A Date object.\r\n */\r\n static parseDate(date: string): Date {\r\n const parts: string[] = date.split(\"/\");\r\n return new Date(Number(parts[2]), Number(parts[1]) - 1, Number(parts[0]));\r\n }\r\n}\r\n\r\n\r\nexport class RestUtilities {\r\n /**\r\n * Sends an OK message as a response.\r\n * @param res - Express Response object.\r\n * @param message - The success message.\r\n * @returns The Response object.\r\n */\r\n static sendOKMessage(res: Response, message: string): Response {\r\n return res.send({\r\n severity: \"success\",\r\n status: 200,\r\n statusCode: StatusCode.Ok,\r\n message,\r\n });\r\n }\r\n\r\n /**\r\n * Sends an error message as a response.\r\n * @param res - Express Response object.\r\n * @param error - The error to send.\r\n * @param tag - Optional tag for additional context.\r\n * @param status - HTTP status code (default: 500).\r\n * @returns The Response object.\r\n */\r\n static sendErrorMessage(res: Response, error: any, tag: string = \"[BASE ERROR]\", status: number = 500): Response {\r\n return res.status(status).send({\r\n severity: \"error\",\r\n status,\r\n statusCode: StatusCode.Error,\r\n message: \"An error occurred\",\r\n error: `${tag}: ${error}`,\r\n });\r\n }\r\n\r\n\r\n static sendUnauthorized(res: Response): Response {\r\n return res.status(401).send({\r\n severity: \"error\",\r\n statusCode: StatusCode.Error,\r\n message: \"Non sei autorizzato\",\r\n });\r\n }\r\n\r\n static sendInvalidCredentials(res: Response): Response {\r\n return res.status(401).send({\r\n severity: \"error\",\r\n statusCode: StatusCode.Error,\r\n message: \"Credenziali non valide\"\r\n });\r\n }\r\n\r\n static sendPasswordExpired(res: Response): Response {\r\n return res.status(403).send({\r\n severity: \"warning\",\r\n statusCode: StatusCode.Warning,\r\n code: \"PASSWORD_EXPIRED\",\r\n message: \"Password scaduta. E' necessario aggiornarla\"\r\n })\r\n }\r\n\r\n /**\r\n * Sends a base response with a payload.\r\n * @param res - Express Response object.\r\n * @param payload - The payload to include in the response.\r\n * @returns The Response object.\r\n */\r\n static sendBaseResponse(res: Response, payload: any): Response {\r\n try {\r\n payload = JSON.parse(JSON.stringify(payload));\r\n const response = {\r\n Status: {\r\n errorCode: \"0\",\r\n errorDescription: \"\",\r\n },\r\n Result: payload,\r\n Message: \"Dati recuperati con successo.\",\r\n };\r\n return res.send(response);\r\n } catch (error) {\r\n return this.sendErrorMessage(res, `Error sending response: ${error}`, \"[UTILITIES]\", 500);\r\n }\r\n }\r\n\r\n /**\r\n * Sends an execution message as a response.\r\n * @param res - Express Response object.\r\n * @param executionObject - The execution data.\r\n * @param title - The title of the response.\r\n * @returns The Response object.\r\n */\r\n static sendExecMessage(res: Response, executionObject: any, title: string): Response {\r\n try {\r\n const response = {\r\n Status: {\r\n errorCode: \"0\",\r\n errorDescription: \"\",\r\n },\r\n Sql: \"\",\r\n ID: executionObject?.id,\r\n data: executionObject,\r\n Title: title,\r\n };\r\n return res.send(response);\r\n } catch (error) {\r\n return this.sendErrorMessage(res, `Error sending execution message: ${error}`, title, 500);\r\n }\r\n }\r\n\r\n /**\r\n * Prints a SQL query with parameters replaced.\r\n * @param query - The SQL query.\r\n * @param params - The parameters to replace.\r\n * @returns The formatted query.\r\n */\r\n static printQueryWithParams(query: string = \"\", params: any[]): string {\r\n try {\r\n params.forEach(param => {\r\n query = query.replace(\"?\", param);\r\n });\r\n return query;\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n\r\n public static convertKeysToCamelCase(obj: any): any {\r\n if (obj !== null && obj.constructor === Object) {\r\n return Object.keys(obj).reduce((acc: any, key: string) => {\r\n const camelCaseKey = key.toLowerCase().replace(/_([a-z])/g, g => g[1].toUpperCase());\r\n acc[camelCaseKey] = obj[key];\r\n return acc;\r\n }, {});\r\n }\r\n return obj;\r\n }\r\n}\r\n\r\n\r\nexport class CryptUtilities {\r\n\r\n /**\r\n * Cifra un testo in chiaro usando l'algoritmo AES-128 in modalità ECB.\r\n * \r\n * @param plainText - Il testo in chiaro da cifrare.\r\n * @param key - La chiave di cifratura (16 byte per AES-128).\r\n * @param outputEncoding - Codifica del risultato cifrato (predefinito: \"base64\").\r\n * @returns Il testo cifrato codificato.\r\n * @throws Errore in caso di problemi durante la cifratura.\r\n */\r\n public static encrypt(plainData: string, key: string, outputEncoding: BufferEncoding = \"base64\"): string {\r\n try {\r\n // Crea un oggetto Cipher usando AES-128 in modalità ECB\r\n const cipher = crypto.createCipheriv(\"aes-128-ecb\", Buffer.from(key, \"utf8\"), null);\r\n\r\n // Cifra il testo in chiaro e finalizza il processo\r\n const encryptedBuffer = Buffer.concat([\r\n cipher.update(plainData, \"utf8\"),\r\n cipher.final(),\r\n ]);\r\n\r\n // Restituisce il risultato cifrato codificato\r\n return encryptedBuffer.toString(outputEncoding);\r\n } catch (error) {\r\n // Gestisce eventuali errori di cifratura\r\n throw new Error(`Errore durante la cifratura: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * Decifra un testo cifrato usando l'algoritmo AES-128 in modalità ECB.\r\n * \r\n * @param encryptedData - Il testo cifrato da decifrare.\r\n * @param key - La chiave di decifratura (16 byte per AES-128).\r\n * @returns Il testo decifrato o null in caso di errore.\r\n */\r\n public static decrypt(encryptedData: string, key: string): string | null {\r\n try {\r\n // Crea un oggetto Decipher usando AES-128 in modalità ECB\r\n const decipher = crypto.createDecipheriv(\"aes-128-ecb\", Buffer.from(key, \"utf8\"), null);\r\n decipher.setAutoPadding(false);\r\n\r\n // Decifra il testo cifrato\r\n let decoded = decipher.update(encryptedData, \"base64\", \"utf8\");\r\n decoded += decipher.final(\"utf8\");\r\n\r\n // Rimuove il padding manuale\r\n const lastChar = decoded.charCodeAt(decoded.length - 1);\r\n decoded = decoded.slice(0, decoded.length - lastChar);\r\n\r\n return decoded;\r\n } catch (error) {\r\n console.error(\"Errore durante la decifratura:\", error);\r\n return null;\r\n }\r\n }\r\n}\r\n\r\nexport class PasswordUtilities {\r\n private static readonly HASH_PREFIX = \"scrypt\";\r\n private static readonly LEGACY_HASH_PREFIX = \"scrypt-legacy\";\r\n private static readonly SCRYPT_N = 16384;\r\n private static readonly SCRYPT_R = 8;\r\n private static readonly SCRYPT_P = 1;\r\n private static readonly SALT_LENGTH = 16;\r\n\r\n private static hashSecret(secretValue: string, prefix: string): string {\r\n if (typeof secretValue !== \"string\" || secretValue.length === 0) {\r\n throw new Error(\"Il valore da proteggere non puo essere vuoto.\");\r\n }\r\n const salt = crypto.randomBytes(this.SALT_LENGTH).toString(\"hex\");\r\n const derivedKey = crypto.scryptSync(\r\n secretValue,\r\n salt,\r\n 64,\r\n {\r\n N: this.SCRYPT_N,\r\n r: this.SCRYPT_R,\r\n p: this.SCRYPT_P,\r\n maxmem: 64 * 1024 * 1024,\r\n },\r\n );\r\n\r\n return [\r\n prefix,\r\n this.SCRYPT_N,\r\n this.SCRYPT_R,\r\n this.SCRYPT_P,\r\n salt,\r\n derivedKey.toString(\"hex\"),\r\n ].join(\"$\");\r\n }\r\n\r\n private static hasPrefix(value: string, prefix: string): boolean {\r\n return typeof value === \"string\" && value.startsWith(`${prefix}$`);\r\n }\r\n\r\n private static parseHash(\r\n storedPassword: string,\r\n expectedPrefix: string\r\n ): {\r\n salt: string;\r\n expectedHash: Buffer;\r\n N: number;\r\n r: number;\r\n p: number;\r\n } | null {\r\n if (!this.hasPrefix(storedPassword, expectedPrefix)) {\r\n return null;\r\n }\r\n\r\n const [, rawN, rawR, rawP, salt, expectedHashHex] = storedPassword.split(\"$\");\r\n const N = Number(rawN);\r\n const r = Number(rawR);\r\n const p = Number(rawP);\r\n\r\n if (!salt || !expectedHashHex || !Number.isFinite(N) || !Number.isFinite(r) || !Number.isFinite(p)) {\r\n return null;\r\n }\r\n\r\n const expectedHash = Buffer.from(expectedHashHex, \"hex\");\r\n if (expectedHash.length === 0) {\r\n return null;\r\n }\r\n\r\n return {\r\n salt,\r\n expectedHash,\r\n N,\r\n r,\r\n p,\r\n };\r\n }\r\n\r\n private static verifySecret(secretValue: string, storedPassword: string, expectedPrefix: string): boolean {\r\n if (typeof secretValue !== \"string\") {\r\n return false;\r\n }\r\n\r\n const parsedHash = this.parseHash(storedPassword, expectedPrefix);\r\n if (!parsedHash) {\r\n return false;\r\n }\r\n\r\n const derivedKey = crypto.scryptSync(\r\n secretValue,\r\n parsedHash.salt,\r\n parsedHash.expectedHash.length,\r\n {\r\n N: parsedHash.N,\r\n r: parsedHash.r,\r\n p: parsedHash.p,\r\n maxmem: 64 * 1024 * 1024,\r\n },\r\n );\r\n\r\n return crypto.timingSafeEqual(derivedKey, parsedHash.expectedHash);\r\n }\r\n\r\n public static hashPassword(plainPassword: string): string {\r\n return this.hashSecret(plainPassword, this.HASH_PREFIX);\r\n }\r\n\r\n public static hashLegacyEncryptedPassword(legacyEncryptedPassword: string): string {\r\n return this.hashSecret(legacyEncryptedPassword, this.LEGACY_HASH_PREFIX);\r\n }\r\n\r\n public static isPasswordHash(value: string): boolean {\r\n return this.hasPrefix(value, this.HASH_PREFIX);\r\n }\r\n\r\n public static isLegacyPasswordHash(value: string): boolean {\r\n return this.hasPrefix(value, this.LEGACY_HASH_PREFIX);\r\n }\r\n\r\n public static verifyPassword(plainPassword: string, storedPassword: string): boolean {\r\n return this.verifySecret(plainPassword, storedPassword, this.HASH_PREFIX);\r\n }\r\n\r\n public static verifyLegacyEncryptedPassword(\r\n legacyEncryptedPassword: string,\r\n storedPassword: string\r\n ): boolean {\r\n return this.verifySecret(legacyEncryptedPassword, storedPassword, this.LEGACY_HASH_PREFIX);\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Utility class for managing database-related configurations and operations.\r\n */\r\nexport class DatabaseUtilities {\r\n /**\r\n * Creates a configuration object for connecting to a Firebird database.\r\n *\r\n * @param {string} host - The hostname or IP address of the database server.\r\n * @param {number} port - The port number on which the database server is running.\r\n * @param {string} database - The path or alias of the database to connect to.\r\n * @param {string} [username='SYSDBA'] - The username for authentication. Defaults to 'SYSDBA'.\r\n * @param {string} [password='masterkey'] - The password for authentication. Defaults to 'masterkey'.\r\n * @returns {Options} - The configuration object to use for establishing a Firebird database connection.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = DatabaseUtilities.createOption(\r\n * 'localhost',\r\n * 3050,\r\n * '/path/to/database.fdb',\r\n * 'myUsername',\r\n * 'myPassword'\r\n * );\r\n * ```\r\n */\r\n public static createOption(\r\n host: string,\r\n port: number,\r\n database: string,\r\n username = 'SYSDBA',\r\n password = 'masterkey'\r\n ): FirebirdOptions {\n return {\n host, // The hostname or IP address of the database server.\n port, // The port number used by the database server.\n user: username, // The username for database authentication.\r\n password, // The password for database authentication.\r\n database, // The path or alias of the target database.\r\n lowercase_keys: false, // Determines if the keys in query results should be in lowercase. Default: false.\r\n role: undefined, // The role for the database connection. Default: undefined.\r\n pageSize: 100000, // The page size for database transactions. Default: 100,000.\n retryConnectionInterval: 1000, // The interval (in ms) to retry a failed connection. Default: 1,000 ms.\n blobAsText: true, // Determines if BLOB fields should be treated as text. Default: true.\n wireCrypt: 'enabled',\n pluginName: 'Srp',\n authPlugins: ['Srp256', 'Srp', 'Legacy_Auth'],\n connectTimeoutMs: 15000,\n };\n }\n}\n\r\nexport function Deprecated(message: string) {\r\n return function (target: any, key?: string, descriptor?: PropertyDescriptor) {\r\n console.warn(`[DEPRECATED] ${message}`);\r\n };\r\n }\r\n"]}
1
+ {"version":3,"file":"Utilities.js","sourceRoot":"","sources":["../src/Utilities.ts"],"names":[],"mappings":";;;;;;AA8dA,gCAIG;AA/dH,oDAA4B;AAG5B,IAAY,UAIX;AAJD,WAAY,UAAU;IAClB,uCAAM,CAAA;IACN,iDAAW,CAAA;IACX,6CAAS,CAAA;AACb,CAAC,EAJW,UAAU,0BAAV,UAAU,QAIrB;AAED,MAAa,aAAa;IACtB;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,GAAW,EAAE,WAAmB;QACpD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,KAAW,EAAE,SAAkB,KAAK;QACrD,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1D,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QACtD,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7D,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;IAC7F,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,SAAS,CAAC,KAAW,EAAE,SAAkB,KAAK;QACjD,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1D,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QACtD,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7D,OAAO,MAAM;YACT,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YAC7C,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;IAChD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,KAAW;QAC3B,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1D,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACrD,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,gBAAgB;QACnB,MAAM,GAAG,GAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7D,OAAO,GAAG,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;IACpE,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,IAAY;QACzB,MAAM,KAAK,GAAa,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC;CACJ;AAnFD,sCAmFC;AAGD,MAAa,aAAa;IACtB;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,GAAa,EAAE,OAAe;QAC/C,OAAO,GAAG,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,SAAS;YACnB,MAAM,EAAE,GAAG;YACX,UAAU,EAAE,UAAU,CAAC,EAAE;YACzB,OAAO;SACV,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,gBAAgB,CAAC,GAAa,EAAE,KAAU,EAAE,MAAc,cAAc,EAAE,SAAiB,GAAG;QACjG,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;YAC3B,QAAQ,EAAE,OAAO;YACjB,MAAM;YACN,UAAU,EAAE,UAAU,CAAC,KAAK;YAC5B,OAAO,EAAE,mBAAmB;YAC5B,KAAK,EAAE,GAAG,GAAG,KAAK,KAAK,EAAE;SAC5B,CAAC,CAAC;IACP,CAAC;IAGD,MAAM,CAAC,gBAAgB,CAAC,GAAa;QACjC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACxB,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,UAAU,CAAC,KAAK;YAC5B,OAAO,EAAE,qBAAqB;SACjC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,sBAAsB,CAAC,GAAa;QACvC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACxB,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,UAAU,CAAC,KAAK;YAC5B,OAAO,EAAE,wBAAwB;SACpC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAC,GAAa;QACpC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACxB,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,UAAU,CAAC,OAAO;YAC9B,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,6CAA6C;SACzD,CAAC,CAAA;IACN,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,GAAa,EAAE,OAAY;QAC/C,IAAI,CAAC;YACD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG;gBACb,MAAM,EAAE;oBACJ,SAAS,EAAE,GAAG;oBACd,gBAAgB,EAAE,EAAE;iBACvB;gBACD,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,+BAA+B;aAC3C,CAAC;YACF,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,2BAA2B,KAAK,EAAE,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;QAC9F,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,eAAe,CAAC,GAAa,EAAE,eAAoB,EAAE,KAAa;QACrE,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG;gBACb,MAAM,EAAE;oBACJ,SAAS,EAAE,GAAG;oBACd,gBAAgB,EAAE,EAAE;iBACvB;gBACD,GAAG,EAAE,EAAE;gBACP,EAAE,EAAE,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,EAAE;gBACvB,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,KAAK;aACf,CAAC;YACF,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,oCAAoC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC/F,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,oBAAoB,CAAC,QAAgB,EAAE,EAAE,MAAa;QACzD,IAAI,CAAC;YACD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACnB,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAGM,MAAM,CAAC,sBAAsB,CAAC,GAAQ;QACzC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;YAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,GAAW,EAAE,EAAE;gBACrD,MAAM,YAAY,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;gBACrF,GAAG,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC7B,OAAO,GAAG,CAAC;YACf,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;CACJ;AAxID,sCAwIC;AAGD,MAAa,cAAc;IAEvB;;;;;;;;GAQD;IACQ,MAAM,CAAC,OAAO,CAAC,SAAiB,EAAE,GAAW,EAAE,iBAAiC,QAAQ;QAC3F,IAAI,CAAC;YACD,wDAAwD;YACxD,MAAM,MAAM,GAAG,gBAAM,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;YAEpF,mDAAmD;YACnD,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;gBAClC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC;gBAChC,MAAM,CAAC,KAAK,EAAE;aACjB,CAAC,CAAC;YAEH,8CAA8C;YAC9C,OAAO,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,yCAAyC;YACzC,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,OAAO,CAAC,aAAqB,EAAE,GAAW;QACpD,IAAI,CAAC;YACD,0DAA0D;YAC1D,MAAM,QAAQ,GAAG,gBAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;YACxF,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAE/B,2BAA2B;YAC3B,IAAI,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC/D,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAElC,6BAA6B;YAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACxD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;YAEtD,OAAO,OAAO,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;CACJ;AAzDD,wCAyDC;AAED,MAAa,iBAAiB;IAQlB,MAAM,CAAC,UAAU,CAAC,WAAmB,EAAE,MAAc;QACzD,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,IAAI,GAAG,gBAAM,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,gBAAM,CAAC,UAAU,CAChC,WAAW,EACX,IAAI,EACJ,EAAE,EACF;YACI,CAAC,EAAE,IAAI,CAAC,QAAQ;YAChB,CAAC,EAAE,IAAI,CAAC,QAAQ;YAChB,CAAC,EAAE,IAAI,CAAC,QAAQ;YAChB,MAAM,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;SAC3B,CACJ,CAAC;QAEF,OAAO;YACH,MAAM;YACN,IAAI,CAAC,QAAQ;YACb,IAAI,CAAC,QAAQ;YACb,IAAI,CAAC,QAAQ;YACb,IAAI;YACJ,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;SAC7B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IAEO,MAAM,CAAC,SAAS,CAAC,KAAa,EAAE,MAAc;QAClD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IACvE,CAAC;IAEO,MAAM,CAAC,SAAS,CACpB,cAAsB,EACtB,cAAsB;QAQtB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9E,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAEvB,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACjG,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QACzD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO;YACH,IAAI;YACJ,YAAY;YACZ,CAAC;YACD,CAAC;YACD,CAAC;SACJ,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,YAAY,CAAC,WAAmB,EAAE,cAAsB,EAAE,cAAsB;QAC3F,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QAClE,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,UAAU,GAAG,gBAAM,CAAC,UAAU,CAChC,WAAW,EACX,UAAU,CAAC,IAAI,EACf,UAAU,CAAC,YAAY,CAAC,MAAM,EAC9B;YACI,CAAC,EAAE,UAAU,CAAC,CAAC;YACf,CAAC,EAAE,UAAU,CAAC,CAAC;YACf,CAAC,EAAE,UAAU,CAAC,CAAC;YACf,MAAM,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;SAC3B,CACJ,CAAC;QAEF,OAAO,gBAAM,CAAC,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IACvE,CAAC;IAEM,MAAM,CAAC,YAAY,CAAC,aAAqB;QAC5C,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5D,CAAC;IAEM,MAAM,CAAC,2BAA2B,CAAC,uBAA+B;QACrE,OAAO,IAAI,CAAC,UAAU,CAAC,uBAAuB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC7E,CAAC;IAEM,MAAM,CAAC,cAAc,CAAC,KAAa;QACtC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACnD,CAAC;IAEM,MAAM,CAAC,oBAAoB,CAAC,KAAa;QAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC1D,CAAC;IAEM,MAAM,CAAC,cAAc,CAAC,aAAqB,EAAE,cAAsB;QACtE,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9E,CAAC;IAEM,MAAM,CAAC,6BAA6B,CACvC,uBAA+B,EAC/B,cAAsB;QAEtB,OAAO,IAAI,CAAC,YAAY,CAAC,uBAAuB,EAAE,cAAc,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC/F,CAAC;;AA9HL,8CA+HC;AA9H2B,6BAAW,GAAG,QAAQ,CAAC;AACvB,oCAAkB,GAAG,eAAe,CAAC;AACrC,0BAAQ,GAAG,KAAK,CAAC;AACjB,0BAAQ,GAAG,CAAC,CAAC;AACb,0BAAQ,GAAG,CAAC,CAAC;AACb,6BAAW,GAAG,EAAE,CAAC;AA+H7C;;GAEG;AACH,MAAa,iBAAiB;IAC1B;;;;;;;;;;;;;;;;;;;;OAoBG;IACI,MAAM,CAAC,YAAY,CACtB,IAAY,EACZ,IAAY,EACZ,QAAgB,EAChB,QAAQ,GAAG,QAAQ,EACnB,QAAQ,GAAG,WAAW;QAEtB,OAAO;YACH,IAAI,EAAoB,qDAAqD;YAC7E,IAAI,EAAoB,+CAA+C;YACvE,IAAI,EAAE,QAAQ,EAAU,4CAA4C;YACpE,QAAQ,EAAgB,4CAA4C;YACpE,QAAQ,EAAgB,4CAA4C;YACpE,cAAc,EAAE,KAAK,EAAG,kFAAkF;YAC1G,IAAI,EAAE,SAAS,EAAS,4DAA4D;YACpF,QAAQ,EAAE,MAAM,EAAQ,6DAA6D;YACrF,uBAAuB,EAAE,IAAI,EAAE,wEAAwE;YACvG,UAAU,EAAE,IAAI,EAAQ,sEAAsE;YAC9F,WAAW,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,CAAC;YAC7C,gBAAgB,EAAE,KAAK;SAC1B,CAAC;IACN,CAAC;CACJ;AA5CD,8CA4CC;AAED,SAAgB,UAAU,CAAC,OAAe;IACtC,OAAO,UAAU,MAAW,EAAE,GAAY,EAAE,UAA+B;QACzE,OAAO,CAAC,IAAI,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { Response } from 'express';\r\nimport { Options } from \"es-node-firebird\";\nimport { FirebirdOptions } from \"./firebird-compat\";\nimport crypto from \"crypto\";\r\n\r\n\r\nexport enum StatusCode {\r\n Ok = 0,\r\n Warning = 1,\r\n Error = 2,\r\n}\r\n\r\nexport class DateUtilities {\r\n /**\r\n * Pads a number with leading zeros to reach a specified length.\r\n * @param num - The number to pad.\r\n * @param totalLength - The total length of the resulting string.\r\n * @returns The padded string.\r\n */\r\n static addStartingZeros(num: number, totalLength: number): string {\r\n return String(num).padStart(totalLength, '0');\r\n }\r\n\r\n /**\r\n * Formats a Date object as a Moncler-style string.\r\n * @param dData - The date to format.\r\n * @param bAddMs - Whether to include milliseconds.\r\n * @returns The formatted date string.\r\n */\r\n static dateToMoncler(dData: Date, bAddMs: boolean = false): string {\r\n const yy = dData.getFullYear();\r\n const mm = this.addStartingZeros(dData.getMonth() + 1, 2);\r\n const dd = this.addStartingZeros(dData.getDate(), 2);\r\n const hh = this.addStartingZeros(dData.getHours(), 2);\r\n const nn = this.addStartingZeros(dData.getMinutes(), 2);\r\n const ss = this.addStartingZeros(dData.getSeconds(), 2);\r\n const ms = this.addStartingZeros(dData.getMilliseconds(), 3);\r\n return bAddMs ? `${yy}${mm}${dd}${hh}${nn}${ss}${ms}` : `${yy}${mm}${dd}${hh}${nn}${ss}`;\r\n }\r\n\r\n /**\r\n * Formats a Date object as a SQL-style string.\r\n * @param dData - The date to format.\r\n * @param bAddMs - Whether to include milliseconds.\r\n * @returns The formatted date string.\r\n */\r\n static dateToSql(dData: Date, bAddMs: boolean = false): string {\r\n const yy = dData.getFullYear();\r\n const mm = this.addStartingZeros(dData.getMonth() + 1, 2);\r\n const dd = this.addStartingZeros(dData.getDate(), 2);\r\n const hh = this.addStartingZeros(dData.getHours(), 2);\r\n const nn = this.addStartingZeros(dData.getMinutes(), 2);\r\n const ss = this.addStartingZeros(dData.getSeconds(), 2);\r\n const ms = this.addStartingZeros(dData.getMilliseconds(), 3);\r\n return bAddMs\r\n ? `${yy}-${mm}-${dd} ${hh}:${nn}:${ss}.${ms}`\r\n : `${yy}-${mm}-${dd} ${hh}:${nn}:${ss}`;\r\n }\r\n\r\n /**\r\n * Formats a Date object as a simple string (dd-MM-yyyy).\r\n * @param dData - The date to format.\r\n * @returns The formatted date string.\r\n */\r\n static dateToSimple(dData: Date): string {\r\n const yy = dData.getFullYear();\r\n const mm = this.addStartingZeros(dData.getMonth() + 1, 2);\r\n const dd = this.addStartingZeros(dData.getDate(), 2);\r\n return `${dd}-${mm}-${yy}`;\r\n }\r\n\r\n /**\r\n * Gets the current date and time as a formatted string.\r\n * @returns The current date and time in the format dd.MM.yyyy HH:mm:ss.\r\n */\r\n static getNowDateString(): string {\r\n const now: Date = new Date();\r\n const day = now.getDate().toString().padStart(2, \"0\");\r\n const month = (now.getMonth() + 1).toString().padStart(2, \"0\");\r\n const year = now.getFullYear();\r\n const hours = now.getHours().toString().padStart(2, \"0\");\r\n const minutes = now.getMinutes().toString().padStart(2, \"0\");\r\n const seconds = now.getSeconds().toString().padStart(2, \"0\");\r\n return `${day}.${month}.${year} ${hours}:${minutes}:${seconds}`;\r\n }\r\n\r\n /**\r\n * Parses a date string in the format dd/MM/yyyy into a Date object.\r\n * @param date - The date string to parse.\r\n * @returns A Date object.\r\n */\r\n static parseDate(date: string): Date {\r\n const parts: string[] = date.split(\"/\");\r\n return new Date(Number(parts[2]), Number(parts[1]) - 1, Number(parts[0]));\r\n }\r\n}\r\n\r\n\r\nexport class RestUtilities {\r\n /**\r\n * Sends an OK message as a response.\r\n * @param res - Express Response object.\r\n * @param message - The success message.\r\n * @returns The Response object.\r\n */\r\n static sendOKMessage(res: Response, message: string): Response {\r\n return res.send({\r\n severity: \"success\",\r\n status: 200,\r\n statusCode: StatusCode.Ok,\r\n message,\r\n });\r\n }\r\n\r\n /**\r\n * Sends an error message as a response.\r\n * @param res - Express Response object.\r\n * @param error - The error to send.\r\n * @param tag - Optional tag for additional context.\r\n * @param status - HTTP status code (default: 500).\r\n * @returns The Response object.\r\n */\r\n static sendErrorMessage(res: Response, error: any, tag: string = \"[BASE ERROR]\", status: number = 500): Response {\r\n return res.status(status).send({\r\n severity: \"error\",\r\n status,\r\n statusCode: StatusCode.Error,\r\n message: \"An error occurred\",\r\n error: `${tag}: ${error}`,\r\n });\r\n }\r\n\r\n\r\n static sendUnauthorized(res: Response): Response {\r\n return res.status(401).send({\r\n severity: \"error\",\r\n statusCode: StatusCode.Error,\r\n message: \"Non sei autorizzato\",\r\n });\r\n }\r\n\r\n static sendInvalidCredentials(res: Response): Response {\r\n return res.status(401).send({\r\n severity: \"error\",\r\n statusCode: StatusCode.Error,\r\n message: \"Credenziali non valide\"\r\n });\r\n }\r\n\r\n static sendPasswordExpired(res: Response): Response {\r\n return res.status(403).send({\r\n severity: \"warning\",\r\n statusCode: StatusCode.Warning,\r\n code: \"PASSWORD_EXPIRED\",\r\n message: \"Password scaduta. E' necessario aggiornarla\"\r\n })\r\n }\r\n\r\n /**\r\n * Sends a base response with a payload.\r\n * @param res - Express Response object.\r\n * @param payload - The payload to include in the response.\r\n * @returns The Response object.\r\n */\r\n static sendBaseResponse(res: Response, payload: any): Response {\r\n try {\r\n payload = JSON.parse(JSON.stringify(payload));\r\n const response = {\r\n Status: {\r\n errorCode: \"0\",\r\n errorDescription: \"\",\r\n },\r\n Result: payload,\r\n Message: \"Dati recuperati con successo.\",\r\n };\r\n return res.send(response);\r\n } catch (error) {\r\n return this.sendErrorMessage(res, `Error sending response: ${error}`, \"[UTILITIES]\", 500);\r\n }\r\n }\r\n\r\n /**\r\n * Sends an execution message as a response.\r\n * @param res - Express Response object.\r\n * @param executionObject - The execution data.\r\n * @param title - The title of the response.\r\n * @returns The Response object.\r\n */\r\n static sendExecMessage(res: Response, executionObject: any, title: string): Response {\r\n try {\r\n const response = {\r\n Status: {\r\n errorCode: \"0\",\r\n errorDescription: \"\",\r\n },\r\n Sql: \"\",\r\n ID: executionObject?.id,\r\n data: executionObject,\r\n Title: title,\r\n };\r\n return res.send(response);\r\n } catch (error) {\r\n return this.sendErrorMessage(res, `Error sending execution message: ${error}`, title, 500);\r\n }\r\n }\r\n\r\n /**\r\n * Prints a SQL query with parameters replaced.\r\n * @param query - The SQL query.\r\n * @param params - The parameters to replace.\r\n * @returns The formatted query.\r\n */\r\n static printQueryWithParams(query: string = \"\", params: any[]): string {\r\n try {\r\n params.forEach(param => {\r\n query = query.replace(\"?\", param);\r\n });\r\n return query;\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n\r\n public static convertKeysToCamelCase(obj: any): any {\r\n if (obj !== null && obj.constructor === Object) {\r\n return Object.keys(obj).reduce((acc: any, key: string) => {\r\n const camelCaseKey = key.toLowerCase().replace(/_([a-z])/g, g => g[1].toUpperCase());\r\n acc[camelCaseKey] = obj[key];\r\n return acc;\r\n }, {});\r\n }\r\n return obj;\r\n }\r\n}\r\n\r\n\r\nexport class CryptUtilities {\r\n\r\n /**\r\n * Cifra un testo in chiaro usando l'algoritmo AES-128 in modalità ECB.\r\n * \r\n * @param plainText - Il testo in chiaro da cifrare.\r\n * @param key - La chiave di cifratura (16 byte per AES-128).\r\n * @param outputEncoding - Codifica del risultato cifrato (predefinito: \"base64\").\r\n * @returns Il testo cifrato codificato.\r\n * @throws Errore in caso di problemi durante la cifratura.\r\n */\r\n public static encrypt(plainData: string, key: string, outputEncoding: BufferEncoding = \"base64\"): string {\r\n try {\r\n // Crea un oggetto Cipher usando AES-128 in modalità ECB\r\n const cipher = crypto.createCipheriv(\"aes-128-ecb\", Buffer.from(key, \"utf8\"), null);\r\n\r\n // Cifra il testo in chiaro e finalizza il processo\r\n const encryptedBuffer = Buffer.concat([\r\n cipher.update(plainData, \"utf8\"),\r\n cipher.final(),\r\n ]);\r\n\r\n // Restituisce il risultato cifrato codificato\r\n return encryptedBuffer.toString(outputEncoding);\r\n } catch (error) {\r\n // Gestisce eventuali errori di cifratura\r\n throw new Error(`Errore durante la cifratura: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * Decifra un testo cifrato usando l'algoritmo AES-128 in modalità ECB.\r\n * \r\n * @param encryptedData - Il testo cifrato da decifrare.\r\n * @param key - La chiave di decifratura (16 byte per AES-128).\r\n * @returns Il testo decifrato o null in caso di errore.\r\n */\r\n public static decrypt(encryptedData: string, key: string): string | null {\r\n try {\r\n // Crea un oggetto Decipher usando AES-128 in modalità ECB\r\n const decipher = crypto.createDecipheriv(\"aes-128-ecb\", Buffer.from(key, \"utf8\"), null);\r\n decipher.setAutoPadding(false);\r\n\r\n // Decifra il testo cifrato\r\n let decoded = decipher.update(encryptedData, \"base64\", \"utf8\");\r\n decoded += decipher.final(\"utf8\");\r\n\r\n // Rimuove il padding manuale\r\n const lastChar = decoded.charCodeAt(decoded.length - 1);\r\n decoded = decoded.slice(0, decoded.length - lastChar);\r\n\r\n return decoded;\r\n } catch (error) {\r\n console.error(\"Errore durante la decifratura:\", error);\r\n return null;\r\n }\r\n }\r\n}\r\n\r\nexport class PasswordUtilities {\r\n private static readonly HASH_PREFIX = \"scrypt\";\r\n private static readonly LEGACY_HASH_PREFIX = \"scrypt-legacy\";\r\n private static readonly SCRYPT_N = 16384;\r\n private static readonly SCRYPT_R = 8;\r\n private static readonly SCRYPT_P = 1;\r\n private static readonly SALT_LENGTH = 16;\r\n\r\n private static hashSecret(secretValue: string, prefix: string): string {\r\n if (typeof secretValue !== \"string\" || secretValue.length === 0) {\r\n throw new Error(\"Il valore da proteggere non puo essere vuoto.\");\r\n }\r\n const salt = crypto.randomBytes(this.SALT_LENGTH).toString(\"hex\");\r\n const derivedKey = crypto.scryptSync(\r\n secretValue,\r\n salt,\r\n 64,\r\n {\r\n N: this.SCRYPT_N,\r\n r: this.SCRYPT_R,\r\n p: this.SCRYPT_P,\r\n maxmem: 64 * 1024 * 1024,\r\n },\r\n );\r\n\r\n return [\r\n prefix,\r\n this.SCRYPT_N,\r\n this.SCRYPT_R,\r\n this.SCRYPT_P,\r\n salt,\r\n derivedKey.toString(\"hex\"),\r\n ].join(\"$\");\r\n }\r\n\r\n private static hasPrefix(value: string, prefix: string): boolean {\r\n return typeof value === \"string\" && value.startsWith(`${prefix}$`);\r\n }\r\n\r\n private static parseHash(\r\n storedPassword: string,\r\n expectedPrefix: string\r\n ): {\r\n salt: string;\r\n expectedHash: Buffer;\r\n N: number;\r\n r: number;\r\n p: number;\r\n } | null {\r\n if (!this.hasPrefix(storedPassword, expectedPrefix)) {\r\n return null;\r\n }\r\n\r\n const [, rawN, rawR, rawP, salt, expectedHashHex] = storedPassword.split(\"$\");\r\n const N = Number(rawN);\r\n const r = Number(rawR);\r\n const p = Number(rawP);\r\n\r\n if (!salt || !expectedHashHex || !Number.isFinite(N) || !Number.isFinite(r) || !Number.isFinite(p)) {\r\n return null;\r\n }\r\n\r\n const expectedHash = Buffer.from(expectedHashHex, \"hex\");\r\n if (expectedHash.length === 0) {\r\n return null;\r\n }\r\n\r\n return {\r\n salt,\r\n expectedHash,\r\n N,\r\n r,\r\n p,\r\n };\r\n }\r\n\r\n private static verifySecret(secretValue: string, storedPassword: string, expectedPrefix: string): boolean {\r\n if (typeof secretValue !== \"string\") {\r\n return false;\r\n }\r\n\r\n const parsedHash = this.parseHash(storedPassword, expectedPrefix);\r\n if (!parsedHash) {\r\n return false;\r\n }\r\n\r\n const derivedKey = crypto.scryptSync(\r\n secretValue,\r\n parsedHash.salt,\r\n parsedHash.expectedHash.length,\r\n {\r\n N: parsedHash.N,\r\n r: parsedHash.r,\r\n p: parsedHash.p,\r\n maxmem: 64 * 1024 * 1024,\r\n },\r\n );\r\n\r\n return crypto.timingSafeEqual(derivedKey, parsedHash.expectedHash);\r\n }\r\n\r\n public static hashPassword(plainPassword: string): string {\r\n return this.hashSecret(plainPassword, this.HASH_PREFIX);\r\n }\r\n\r\n public static hashLegacyEncryptedPassword(legacyEncryptedPassword: string): string {\r\n return this.hashSecret(legacyEncryptedPassword, this.LEGACY_HASH_PREFIX);\r\n }\r\n\r\n public static isPasswordHash(value: string): boolean {\r\n return this.hasPrefix(value, this.HASH_PREFIX);\r\n }\r\n\r\n public static isLegacyPasswordHash(value: string): boolean {\r\n return this.hasPrefix(value, this.LEGACY_HASH_PREFIX);\r\n }\r\n\r\n public static verifyPassword(plainPassword: string, storedPassword: string): boolean {\r\n return this.verifySecret(plainPassword, storedPassword, this.HASH_PREFIX);\r\n }\r\n\r\n public static verifyLegacyEncryptedPassword(\r\n legacyEncryptedPassword: string,\r\n storedPassword: string\r\n ): boolean {\r\n return this.verifySecret(legacyEncryptedPassword, storedPassword, this.LEGACY_HASH_PREFIX);\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * Utility class for managing database-related configurations and operations.\r\n */\r\nexport class DatabaseUtilities {\r\n /**\r\n * Creates a configuration object for connecting to a Firebird database.\r\n *\r\n * @param {string} host - The hostname or IP address of the database server.\r\n * @param {number} port - The port number on which the database server is running.\r\n * @param {string} database - The path or alias of the database to connect to.\r\n * @param {string} [username='SYSDBA'] - The username for authentication. Defaults to 'SYSDBA'.\r\n * @param {string} [password='masterkey'] - The password for authentication. Defaults to 'masterkey'.\r\n * @returns {Options} - The configuration object to use for establishing a Firebird database connection.\r\n *\r\n * @example\r\n * ```typescript\r\n * const options = DatabaseUtilities.createOption(\r\n * 'localhost',\r\n * 3050,\r\n * '/path/to/database.fdb',\r\n * 'myUsername',\r\n * 'myPassword'\r\n * );\r\n * ```\r\n */\r\n public static createOption(\r\n host: string,\r\n port: number,\r\n database: string,\r\n username = 'SYSDBA',\r\n password = 'masterkey'\r\n ): FirebirdOptions {\n return {\n host, // The hostname or IP address of the database server.\n port, // The port number used by the database server.\n user: username, // The username for database authentication.\r\n password, // The password for database authentication.\r\n database, // The path or alias of the target database.\r\n lowercase_keys: false, // Determines if the keys in query results should be in lowercase. Default: false.\r\n role: undefined, // The role for the database connection. Default: undefined.\r\n pageSize: 100000, // The page size for database transactions. Default: 100,000.\n retryConnectionInterval: 1000, // The interval (in ms) to retry a failed connection. Default: 1,000 ms.\n blobAsText: true, // Determines if BLOB fields should be treated as text. Default: true.\n authPlugins: ['Srp256', 'Srp', 'Legacy_Auth'],\n connectTimeoutMs: 15000,\n };\n }\n}\n\r\nexport function Deprecated(message: string) {\r\n return function (target: any, key?: string, descriptor?: PropertyDescriptor) {\r\n console.warn(`[DEPRECATED] ${message}`);\r\n };\r\n }\r\n"]}
@@ -87,13 +87,18 @@ function normalizeAuthPluginList(value) {
87
87
  }
88
88
  function normalizeFirebirdOptions(options) {
89
89
  const compatibilityOptions = options;
90
- return Object.assign(Object.assign({}, options), { wireCrypt: normalizeWireCryptMode(compatibilityOptions.wireCrypt), pluginName: normalizeAuthPlugin(compatibilityOptions.pluginName), authPlugins: normalizeAuthPluginList(compatibilityOptions.authPlugins) });
90
+ return Object.assign(Object.assign({}, options), { wireCrypt: compatibilityOptions.wireCrypt === undefined
91
+ ? undefined
92
+ : normalizeWireCryptMode(compatibilityOptions.wireCrypt), pluginName: compatibilityOptions.pluginName === undefined
93
+ ? undefined
94
+ : normalizeAuthPlugin(compatibilityOptions.pluginName), authPlugins: normalizeAuthPluginList(compatibilityOptions.authPlugins) });
91
95
  }
92
96
  function isRetryableCompatibilityError(error) {
93
97
  var _a, _b;
94
98
  const message = String((_b = (_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error) !== null && _b !== void 0 ? _b : "").toLowerCase();
95
99
  return message.includes("incompatible wire encryption")
96
100
  || message.includes("no matching plugins on server")
101
+ || message.includes("server don't accept plugin")
97
102
  || message.includes("unknown auth plugin")
98
103
  || message.includes("unknow auth plugin")
99
104
  || message.includes("timeout during firebird attach");
@@ -122,8 +127,8 @@ function buildFirebirdCompatibilityCandidates(options) {
122
127
  const hasExplicitPlugin = compatibilityOptions.pluginName !== undefined;
123
128
  const hasExplicitWireCrypt = compatibilityOptions.wireCrypt !== undefined;
124
129
  const candidates = [];
125
- pushUniqueCandidate(candidates, normalized);
126
130
  if (hasExplicitPlugin && hasExplicitWireCrypt) {
131
+ pushUniqueCandidate(candidates, normalized);
127
132
  return candidates;
128
133
  }
129
134
  if (hasExplicitPlugin) {
@@ -139,7 +144,7 @@ function buildFirebirdCompatibilityCandidates(options) {
139
144
  appendPluginCandidates(candidates, normalized, "Legacy_Auth", [normalized.wireCrypt]);
140
145
  return candidates;
141
146
  }
142
- appendPluginCandidates(candidates, normalized, "Srp256", ["enabled", "required", "disabled"]);
147
+ appendPluginCandidates(candidates, normalized, "Srp256", ["required", "enabled", "disabled"]);
143
148
  appendPluginCandidates(candidates, normalized, "Srp", ["enabled", "required", "disabled"]);
144
149
  appendPluginCandidates(candidates, normalized, "Legacy_Auth", ["disabled", "enabled"]);
145
150
  return candidates;
@@ -1 +1 @@
1
- {"version":3,"file":"firebird-compat.js","sourceRoot":"","sources":["../src/firebird-compat.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Firebird from \"es-node-firebird\";\nimport { Options } from \"es-node-firebird\";\n\nexport type FirebirdWireCryptMode = \"disabled\" | \"enabled\" | \"required\";\nexport type FirebirdAuthPlugin = \"Legacy_Auth\" | \"Srp\" | \"Srp256\";\n\nexport type FirebirdOptions = Options & {\n wireCrypt?: FirebirdWireCryptMode;\n pluginName?: FirebirdAuthPlugin;\n authPlugins?: FirebirdAuthPlugin[];\n connectTimeoutMs?: number;\n connectTimeout?: number;\n compatibilityProbeTimeoutMs?: number;\n compatibilityTotalTimeoutMs?: number;\n};\n\nconst CNCT_PLUGIN_NAME = 8;\nconst CNCT_PLUGIN_LIST = 10;\nconst CNCT_CLIENT_CRYPT = 11;\nconst WIRE_CRYPT_DISABLE = 0;\nconst WIRE_CRYPT_ENABLE = 1;\nconst WIRE_CRYPT_REQUIRED = 2;\nconst DEFAULT_AUTH_PLUGIN_LIST: FirebirdAuthPlugin[] = [\"Srp256\", \"Srp\", \"Legacy_Auth\"];\n\ntype BlrWriterLike = {\n addBytes: (bytes: number[], ...args: unknown[]) => unknown;\n addString: (code: number, value: string, encoding?: string) => unknown;\n};\n\ntype ConnectionLike = {\n _blr?: BlrWriterLike;\n accept?: {\n protocolMinimumType?: number;\n pluginName?: string;\n };\n};\n\ntype FirebirdModuleLike = {\n Connection?: {\n prototype?: {\n connect?: (this: ConnectionLike, options: FirebirdOptions, callback: unknown) => unknown;\n __emilsoftwareWireCryptPatched?: boolean;\n };\n };\n};\n\nfunction normalizeWireCryptMode(value: unknown): FirebirdWireCryptMode {\n const normalized = String(value ?? \"\").trim().toLowerCase();\n if (normalized === \"required\") {\n return \"required\";\n }\n\n if (normalized === \"disabled\") {\n return \"disabled\";\n }\n\n return \"enabled\";\n}\n\nfunction normalizeAuthPlugin(value: unknown): FirebirdAuthPlugin {\n const normalized = String(value ?? \"\").trim().toLowerCase();\n\n if (normalized === \"legacy_auth\" || normalized === \"legacy\") {\n return \"Legacy_Auth\";\n }\n\n if (normalized === \"srp256\") {\n return \"Srp256\";\n }\n\n return \"Srp\";\n}\n\nfunction toWireCryptFlag(mode: FirebirdWireCryptMode): number {\n switch (mode) {\n case \"required\":\n return WIRE_CRYPT_REQUIRED;\n case \"disabled\":\n return WIRE_CRYPT_DISABLE;\n default:\n return WIRE_CRYPT_ENABLE;\n }\n}\n\nfunction normalizeAuthPluginList(value: unknown): FirebirdAuthPlugin[] {\n if (!Array.isArray(value) || value.length === 0) {\n return [...DEFAULT_AUTH_PLUGIN_LIST];\n }\n\n const normalized = value\n .map((entry: unknown) => normalizeAuthPlugin(entry))\n .filter((entry: FirebirdAuthPlugin, index: number, source: FirebirdAuthPlugin[]) => source.indexOf(entry) === index);\n\n return normalized.length > 0 ? normalized : [...DEFAULT_AUTH_PLUGIN_LIST];\n}\n\nexport function normalizeFirebirdOptions(options: Options): FirebirdOptions {\n const compatibilityOptions = options as FirebirdOptions;\n return {\n ...options,\n wireCrypt: normalizeWireCryptMode(compatibilityOptions.wireCrypt),\n pluginName: normalizeAuthPlugin(compatibilityOptions.pluginName),\n authPlugins: normalizeAuthPluginList(compatibilityOptions.authPlugins),\n };\n}\n\nfunction isRetryableCompatibilityError(error: unknown): boolean {\n const message = String((error as { message?: unknown })?.message ?? error ?? \"\").toLowerCase();\n return message.includes(\"incompatible wire encryption\")\n || message.includes(\"no matching plugins on server\")\n || message.includes(\"unknown auth plugin\")\n || message.includes(\"unknow auth plugin\")\n || message.includes(\"timeout during firebird attach\");\n}\n\nfunction pushUniqueCandidate(target: FirebirdOptions[], candidate: FirebirdOptions): void {\n const normalized = normalizeFirebirdOptions(candidate);\n const key = `${normalized.pluginName}|${normalized.wireCrypt}|${(normalized.authPlugins ?? []).join(\",\")}`;\n const alreadyPresent = target.some((entry) => {\n const normalizedEntry = normalizeFirebirdOptions(entry);\n return `${normalizedEntry.pluginName}|${normalizedEntry.wireCrypt}|${(normalizedEntry.authPlugins ?? []).join(\",\")}` === key;\n });\n\n if (!alreadyPresent) {\n target.push(normalized);\n }\n}\n\nfunction appendPluginCandidates(\n target: FirebirdOptions[],\n base: FirebirdOptions,\n pluginName: FirebirdAuthPlugin,\n wireCryptModes: FirebirdWireCryptMode[],\n): void {\n wireCryptModes.forEach((wireCrypt) => {\n pushUniqueCandidate(target, { ...base, pluginName, wireCrypt });\n });\n}\n\nexport function buildFirebirdCompatibilityCandidates(options: Options): FirebirdOptions[] {\n const normalized = normalizeFirebirdOptions(options);\n const compatibilityOptions = options as FirebirdOptions;\n const hasExplicitPlugin = compatibilityOptions.pluginName !== undefined;\n const hasExplicitWireCrypt = compatibilityOptions.wireCrypt !== undefined;\n const candidates: FirebirdOptions[] = [];\n\n pushUniqueCandidate(candidates, normalized);\n\n if (hasExplicitPlugin && hasExplicitWireCrypt) {\n return candidates;\n }\n\n if (hasExplicitPlugin) {\n const wireCryptModes = normalized.pluginName === \"Legacy_Auth\"\n ? [\"disabled\", \"enabled\"] as FirebirdWireCryptMode[]\n : [\"enabled\", \"required\", \"disabled\"] as FirebirdWireCryptMode[];\n\n appendPluginCandidates(candidates, normalized, normalized.pluginName!, wireCryptModes);\n return candidates;\n }\n\n if (hasExplicitWireCrypt) {\n appendPluginCandidates(candidates, normalized, \"Srp256\", [normalized.wireCrypt!]);\n appendPluginCandidates(candidates, normalized, \"Srp\", [normalized.wireCrypt!]);\n appendPluginCandidates(candidates, normalized, \"Legacy_Auth\", [normalized.wireCrypt!]);\n return candidates;\n }\n\n appendPluginCandidates(candidates, normalized, \"Srp256\", [\"enabled\", \"required\", \"disabled\"]);\n appendPluginCandidates(candidates, normalized, \"Srp\", [\"enabled\", \"required\", \"disabled\"]);\n appendPluginCandidates(candidates, normalized, \"Legacy_Auth\", [\"disabled\", \"enabled\"]);\n return candidates;\n}\n\nexport function shouldRetryFirebirdCompatibility(error: unknown): boolean {\n return isRetryableCompatibilityError(error);\n}\n\nexport function describeFirebirdCompatibilityOptions(options: Options): string {\n const normalized = normalizeFirebirdOptions(options);\n return `plugin=${normalized.pluginName}, wireCrypt=${normalized.wireCrypt}, authPlugins=${(normalized.authPlugins ?? []).join(\"/\")}`;\n}\n\nexport function ensureEsNodeFirebirdCompatibilityPatch(): void {\n const firebird = Firebird as FirebirdModuleLike;\n const connectionPrototype = firebird.Connection?.prototype;\n\n if (!connectionPrototype?.connect || connectionPrototype.__emilsoftwareWireCryptPatched) {\n return;\n }\n\n const originalConnect = connectionPrototype.connect;\n\n connectionPrototype.connect = function patchedConnect(\n this: ConnectionLike,\n options: FirebirdOptions,\n callback: unknown,\n ) {\n const normalizedOptions = normalizeFirebirdOptions(options);\n const wireCryptFlag = toWireCryptFlag(normalizedOptions.wireCrypt);\n const authPlugin = normalizedOptions.pluginName;\n const authPlugins = normalizedOptions.authPlugins ?? DEFAULT_AUTH_PLUGIN_LIST;\n\n this.accept ??= { protocolMinimumType: 0, pluginName: authPlugin };\n\n const blr = this._blr;\n const originalAddBytes = blr?.addBytes;\n const originalAddString = blr?.addString;\n\n if (!blr || !originalAddBytes || !originalAddString) {\n return originalConnect.call(this, normalizedOptions, callback);\n }\n\n const patchedOptions = authPlugin === \"Srp256\"\n ? { ...normalizedOptions, pluginName: \"Srp\" as FirebirdAuthPlugin }\n : normalizedOptions;\n\n blr.addBytes = function patchedAddBytes(bytes: number[], ...args: unknown[]) {\n if (Array.isArray(bytes) && bytes.length === 6 && bytes[0] === CNCT_CLIENT_CRYPT && bytes[1] === 4) {\n return originalAddBytes.call(this, [bytes[0], bytes[1], wireCryptFlag, 0, 0, 0], ...args);\n }\n\n return originalAddBytes.call(this, bytes, ...args);\n };\n\n blr.addString = function patchedAddString(code: number, value: string, encoding?: string) {\n if (code === CNCT_PLUGIN_NAME) {\n return originalAddString.call(this, code, authPlugin, encoding);\n }\n\n if (code === CNCT_PLUGIN_LIST) {\n return originalAddString.call(this, code, authPlugins.join(\",\"), encoding);\n }\n\n return originalAddString.call(this, code, value, encoding);\n };\n\n try {\n return originalConnect.call(this, patchedOptions, callback);\n } finally {\n blr.addBytes = originalAddBytes;\n blr.addString = originalAddString;\n }\n };\n\n connectionPrototype.__emilsoftwareWireCryptPatched = true;\n}\n\nensureEsNodeFirebirdCompatibilityPatch();\n"]}
1
+ {"version":3,"file":"firebird-compat.js","sourceRoot":"","sources":["../src/firebird-compat.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Firebird from \"es-node-firebird\";\nimport { Options } from \"es-node-firebird\";\n\nexport type FirebirdWireCryptMode = \"disabled\" | \"enabled\" | \"required\";\nexport type FirebirdAuthPlugin = \"Legacy_Auth\" | \"Srp\" | \"Srp256\";\n\nexport type FirebirdOptions = Options & {\n wireCrypt?: FirebirdWireCryptMode;\n pluginName?: FirebirdAuthPlugin;\n authPlugins?: FirebirdAuthPlugin[];\n connectTimeoutMs?: number;\n connectTimeout?: number;\n compatibilityProbeTimeoutMs?: number;\n compatibilityTotalTimeoutMs?: number;\n};\n\nconst CNCT_PLUGIN_NAME = 8;\nconst CNCT_PLUGIN_LIST = 10;\nconst CNCT_CLIENT_CRYPT = 11;\nconst WIRE_CRYPT_DISABLE = 0;\nconst WIRE_CRYPT_ENABLE = 1;\nconst WIRE_CRYPT_REQUIRED = 2;\nconst DEFAULT_AUTH_PLUGIN_LIST: FirebirdAuthPlugin[] = [\"Srp256\", \"Srp\", \"Legacy_Auth\"];\n\ntype BlrWriterLike = {\n addBytes: (bytes: number[], ...args: unknown[]) => unknown;\n addString: (code: number, value: string, encoding?: string) => unknown;\n};\n\ntype ConnectionLike = {\n _blr?: BlrWriterLike;\n accept?: {\n protocolMinimumType?: number;\n pluginName?: string;\n };\n};\n\ntype FirebirdModuleLike = {\n Connection?: {\n prototype?: {\n connect?: (this: ConnectionLike, options: FirebirdOptions, callback: unknown) => unknown;\n __emilsoftwareWireCryptPatched?: boolean;\n };\n };\n};\n\nfunction normalizeWireCryptMode(value: unknown): FirebirdWireCryptMode {\n const normalized = String(value ?? \"\").trim().toLowerCase();\n if (normalized === \"required\") {\n return \"required\";\n }\n\n if (normalized === \"disabled\") {\n return \"disabled\";\n }\n\n return \"enabled\";\n}\n\nfunction normalizeAuthPlugin(value: unknown): FirebirdAuthPlugin {\n const normalized = String(value ?? \"\").trim().toLowerCase();\n\n if (normalized === \"legacy_auth\" || normalized === \"legacy\") {\n return \"Legacy_Auth\";\n }\n\n if (normalized === \"srp256\") {\n return \"Srp256\";\n }\n\n return \"Srp\";\n}\n\nfunction toWireCryptFlag(mode: FirebirdWireCryptMode): number {\n switch (mode) {\n case \"required\":\n return WIRE_CRYPT_REQUIRED;\n case \"disabled\":\n return WIRE_CRYPT_DISABLE;\n default:\n return WIRE_CRYPT_ENABLE;\n }\n}\n\nfunction normalizeAuthPluginList(value: unknown): FirebirdAuthPlugin[] {\n if (!Array.isArray(value) || value.length === 0) {\n return [...DEFAULT_AUTH_PLUGIN_LIST];\n }\n\n const normalized = value\n .map((entry: unknown) => normalizeAuthPlugin(entry))\n .filter((entry: FirebirdAuthPlugin, index: number, source: FirebirdAuthPlugin[]) => source.indexOf(entry) === index);\n\n return normalized.length > 0 ? normalized : [...DEFAULT_AUTH_PLUGIN_LIST];\n}\n\nexport function normalizeFirebirdOptions(options: Options): FirebirdOptions {\n const compatibilityOptions = options as FirebirdOptions;\n return {\n ...options,\n wireCrypt: compatibilityOptions.wireCrypt === undefined\n ? undefined\n : normalizeWireCryptMode(compatibilityOptions.wireCrypt),\n pluginName: compatibilityOptions.pluginName === undefined\n ? undefined\n : normalizeAuthPlugin(compatibilityOptions.pluginName),\n authPlugins: normalizeAuthPluginList(compatibilityOptions.authPlugins),\n };\n}\n\nfunction isRetryableCompatibilityError(error: unknown): boolean {\n const message = String((error as { message?: unknown })?.message ?? error ?? \"\").toLowerCase();\n return message.includes(\"incompatible wire encryption\")\n || message.includes(\"no matching plugins on server\")\n || message.includes(\"server don't accept plugin\")\n || message.includes(\"unknown auth plugin\")\n || message.includes(\"unknow auth plugin\")\n || message.includes(\"timeout during firebird attach\");\n}\n\nfunction pushUniqueCandidate(target: FirebirdOptions[], candidate: FirebirdOptions): void {\n const normalized = normalizeFirebirdOptions(candidate);\n const key = `${normalized.pluginName}|${normalized.wireCrypt}|${(normalized.authPlugins ?? []).join(\",\")}`;\n const alreadyPresent = target.some((entry) => {\n const normalizedEntry = normalizeFirebirdOptions(entry);\n return `${normalizedEntry.pluginName}|${normalizedEntry.wireCrypt}|${(normalizedEntry.authPlugins ?? []).join(\",\")}` === key;\n });\n\n if (!alreadyPresent) {\n target.push(normalized);\n }\n}\n\nfunction appendPluginCandidates(\n target: FirebirdOptions[],\n base: FirebirdOptions,\n pluginName: FirebirdAuthPlugin,\n wireCryptModes: FirebirdWireCryptMode[],\n): void {\n wireCryptModes.forEach((wireCrypt) => {\n pushUniqueCandidate(target, { ...base, pluginName, wireCrypt });\n });\n}\n\nexport function buildFirebirdCompatibilityCandidates(options: Options): FirebirdOptions[] {\n const normalized = normalizeFirebirdOptions(options);\n const compatibilityOptions = options as FirebirdOptions;\n const hasExplicitPlugin = compatibilityOptions.pluginName !== undefined;\n const hasExplicitWireCrypt = compatibilityOptions.wireCrypt !== undefined;\n const candidates: FirebirdOptions[] = [];\n\n if (hasExplicitPlugin && hasExplicitWireCrypt) {\n pushUniqueCandidate(candidates, normalized);\n return candidates;\n }\n\n if (hasExplicitPlugin) {\n const wireCryptModes = normalized.pluginName === \"Legacy_Auth\"\n ? [\"disabled\", \"enabled\"] as FirebirdWireCryptMode[]\n : [\"enabled\", \"required\", \"disabled\"] as FirebirdWireCryptMode[];\n\n appendPluginCandidates(candidates, normalized, normalized.pluginName!, wireCryptModes);\n return candidates;\n }\n\n if (hasExplicitWireCrypt) {\n appendPluginCandidates(candidates, normalized, \"Srp256\", [normalized.wireCrypt!]);\n appendPluginCandidates(candidates, normalized, \"Srp\", [normalized.wireCrypt!]);\n appendPluginCandidates(candidates, normalized, \"Legacy_Auth\", [normalized.wireCrypt!]);\n return candidates;\n }\n\n appendPluginCandidates(candidates, normalized, \"Srp256\", [\"required\", \"enabled\", \"disabled\"]);\n appendPluginCandidates(candidates, normalized, \"Srp\", [\"enabled\", \"required\", \"disabled\"]);\n appendPluginCandidates(candidates, normalized, \"Legacy_Auth\", [\"disabled\", \"enabled\"]);\n return candidates;\n}\n\nexport function shouldRetryFirebirdCompatibility(error: unknown): boolean {\n return isRetryableCompatibilityError(error);\n}\n\nexport function describeFirebirdCompatibilityOptions(options: Options): string {\n const normalized = normalizeFirebirdOptions(options);\n return `plugin=${normalized.pluginName}, wireCrypt=${normalized.wireCrypt}, authPlugins=${(normalized.authPlugins ?? []).join(\"/\")}`;\n}\n\nexport function ensureEsNodeFirebirdCompatibilityPatch(): void {\n const firebird = Firebird as FirebirdModuleLike;\n const connectionPrototype = firebird.Connection?.prototype;\n\n if (!connectionPrototype?.connect || connectionPrototype.__emilsoftwareWireCryptPatched) {\n return;\n }\n\n const originalConnect = connectionPrototype.connect;\n\n connectionPrototype.connect = function patchedConnect(\n this: ConnectionLike,\n options: FirebirdOptions,\n callback: unknown,\n ) {\n const normalizedOptions = normalizeFirebirdOptions(options);\n const wireCryptFlag = toWireCryptFlag(normalizedOptions.wireCrypt);\n const authPlugin = normalizedOptions.pluginName;\n const authPlugins = normalizedOptions.authPlugins ?? DEFAULT_AUTH_PLUGIN_LIST;\n\n this.accept ??= { protocolMinimumType: 0, pluginName: authPlugin };\n\n const blr = this._blr;\n const originalAddBytes = blr?.addBytes;\n const originalAddString = blr?.addString;\n\n if (!blr || !originalAddBytes || !originalAddString) {\n return originalConnect.call(this, normalizedOptions, callback);\n }\n\n const patchedOptions = authPlugin === \"Srp256\"\n ? { ...normalizedOptions, pluginName: \"Srp\" as FirebirdAuthPlugin }\n : normalizedOptions;\n\n blr.addBytes = function patchedAddBytes(bytes: number[], ...args: unknown[]) {\n if (Array.isArray(bytes) && bytes.length === 6 && bytes[0] === CNCT_CLIENT_CRYPT && bytes[1] === 4) {\n return originalAddBytes.call(this, [bytes[0], bytes[1], wireCryptFlag, 0, 0, 0], ...args);\n }\n\n return originalAddBytes.call(this, bytes, ...args);\n };\n\n blr.addString = function patchedAddString(code: number, value: string, encoding?: string) {\n if (code === CNCT_PLUGIN_NAME) {\n return originalAddString.call(this, code, authPlugin, encoding);\n }\n\n if (code === CNCT_PLUGIN_LIST) {\n return originalAddString.call(this, code, authPlugins.join(\",\"), encoding);\n }\n\n return originalAddString.call(this, code, value, encoding);\n };\n\n try {\n return originalConnect.call(this, patchedOptions, callback);\n } finally {\n blr.addBytes = originalAddBytes;\n blr.addString = originalAddString;\n }\n };\n\n connectionPrototype.__emilsoftwareWireCryptPatched = true;\n}\n\nensureEsNodeFirebirdCompatibilityPatch();\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "emilsoftware-utilities",
3
- "version": "2.0.0-dev.4",
3
+ "version": "2.0.0-dev.6",
4
4
  "description": "Utilities for EmilSoftware",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",