@freshpointcz/fresh-core 0.0.12 → 0.0.14

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/dotenv/package.json","../../../node_modules/dotenv/lib/main.js","../src/common/date-utils.ts","../src/common/promise-magic/deferred.ts","../src/common/promise-magic/single-promise-waiter.ts","../src/common/winston.ts","../src/common/utils/is-cron-valid.ts","../src/common/patterns/singleton.ts","../src/common/dto/status-dto.ts","../src/common/constants/amount-unit.ts","../src/common/schema/entities/category.entity.ts","../src/database/entities/fresh-entity.ts","../../../node_modules/uuid/dist/esm/stringify.js","../../../node_modules/uuid/dist/esm/rng.js","../../../node_modules/uuid/dist/esm/native.js","../../../node_modules/uuid/dist/esm/v4.js","../src/database/entities/fresh-hyper-entity.ts","../src/database/decorators/timestamp-column.ts","../src/database/entities/fresh-translation-entity.ts","../src/enums/action-command-code.ts","../src/enums/depot-pool-status.ts","../src/enums/http-status.ts","../src/enums/language-code.ts","../src/enums/payment-method.ts","../src/enums/transaction-type.ts","../src/database/dao/fresh-dao.ts","../src/common/schema/entities/device.entity.ts","../src/common/schema/entities/manufacturer.entity.ts","../src/common/schema/entities/product.entity.ts","../src/common/schema/entities/subcategory.entity.ts","../src/core/data-helper.ts","../src/core/class/fresh-job.ts","../src/core/errors/api-error.ts","../src/config/eslint-config.ts","../src/config/datasource.ts"],"sourcesContent":["{\n \"name\": \"dotenv\",\n \"version\": \"16.6.1\",\n \"description\": \"Loads environment variables from .env file\",\n \"main\": \"lib/main.js\",\n \"types\": \"lib/main.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/main.d.ts\",\n \"require\": \"./lib/main.js\",\n \"default\": \"./lib/main.js\"\n },\n \"./config\": \"./config.js\",\n \"./config.js\": \"./config.js\",\n \"./lib/env-options\": \"./lib/env-options.js\",\n \"./lib/env-options.js\": \"./lib/env-options.js\",\n \"./lib/cli-options\": \"./lib/cli-options.js\",\n \"./lib/cli-options.js\": \"./lib/cli-options.js\",\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"dts-check\": \"tsc --project tests/types/tsconfig.json\",\n \"lint\": \"standard\",\n \"pretest\": \"npm run lint && npm run dts-check\",\n \"test\": \"tap run --allow-empty-coverage --disable-coverage --timeout=60000\",\n \"test:coverage\": \"tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov\",\n \"prerelease\": \"npm test\",\n \"release\": \"standard-version\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/motdotla/dotenv.git\"\n },\n \"homepage\": \"https://github.com/motdotla/dotenv#readme\",\n \"funding\": \"https://dotenvx.com\",\n \"keywords\": [\n \"dotenv\",\n \"env\",\n \".env\",\n \"environment\",\n \"variables\",\n \"config\",\n \"settings\"\n ],\n \"readmeFilename\": \"README.md\",\n \"license\": \"BSD-2-Clause\",\n \"devDependencies\": {\n \"@types/node\": \"^18.11.3\",\n \"decache\": \"^4.6.2\",\n \"sinon\": \"^14.0.1\",\n \"standard\": \"^17.0.0\",\n \"standard-version\": \"^9.5.0\",\n \"tap\": \"^19.2.0\",\n \"typescript\": \"^4.8.4\"\n },\n \"engines\": {\n \"node\": \">=12\"\n },\n \"browser\": {\n \"fs\": false\n }\n}\n","const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n const obj = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n let match\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n\nfunction _parseVault (options) {\n options = options || {}\n\n const vaultPath = _vaultPath(options)\n options.path = vaultPath // parse .env.vault\n const result = DotenvModule.configDotenv(options)\n if (!result.parsed) {\n const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n err.code = 'MISSING_DATA'\n throw err\n }\n\n // handle scenario for comma separated keys - for use with key rotation\n // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n const keys = _dotenvKey(options).split(',')\n const length = keys.length\n\n let decrypted\n for (let i = 0; i < length; i++) {\n try {\n // Get full key\n const key = keys[i].trim()\n\n // Get instructions for decrypt\n const attrs = _instructions(result, key)\n\n // Decrypt\n decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n break\n } catch (error) {\n // last key\n if (i + 1 >= length) {\n throw error\n }\n // try next key\n }\n }\n\n // Parse decrypted .env string\n return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n console.log(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _log (message) {\n console.log(`[dotenv@${version}] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n // prioritize developer directly setting options.DOTENV_KEY\n if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n return options.DOTENV_KEY\n }\n\n // secondary infra already contains a DOTENV_KEY environment variable\n if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n return process.env.DOTENV_KEY\n }\n\n // fallback to empty string\n return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n // Parse DOTENV_KEY. Format is a URI\n let uri\n try {\n uri = new URL(dotenvKey)\n } catch (error) {\n if (error.code === 'ERR_INVALID_URL') {\n const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n throw error\n }\n\n // Get decrypt key\n const key = uri.password\n if (!key) {\n const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get environment\n const environment = uri.searchParams.get('environment')\n if (!environment) {\n const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get ciphertext payload\n const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n if (!ciphertext) {\n const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n throw err\n }\n\n return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n let possibleVaultPath = null\n\n if (options && options.path && options.path.length > 0) {\n if (Array.isArray(options.path)) {\n for (const filepath of options.path) {\n if (fs.existsSync(filepath)) {\n possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n }\n }\n } else {\n possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n }\n } else {\n possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n }\n\n if (fs.existsSync(possibleVaultPath)) {\n return possibleVaultPath\n }\n\n return null\n}\n\nfunction _resolveHome (envPath) {\n return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n const debug = Boolean(options && options.debug)\n const quiet = options && 'quiet' in options ? options.quiet : true\n\n if (debug || !quiet) {\n _log('Loading env from encrypted .env.vault')\n }\n\n const parsed = DotenvModule._parseVault(options)\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsed, options)\n\n return { parsed }\n}\n\nfunction configDotenv (options) {\n const dotenvPath = path.resolve(process.cwd(), '.env')\n let encoding = 'utf8'\n const debug = Boolean(options && options.debug)\n const quiet = options && 'quiet' in options ? options.quiet : true\n\n if (options && options.encoding) {\n encoding = options.encoding\n } else {\n if (debug) {\n _debug('No encoding is specified. UTF-8 is used by default')\n }\n }\n\n let optionPaths = [dotenvPath] // default, look for .env\n if (options && options.path) {\n if (!Array.isArray(options.path)) {\n optionPaths = [_resolveHome(options.path)]\n } else {\n optionPaths = [] // reset default\n for (const filepath of options.path) {\n optionPaths.push(_resolveHome(filepath))\n }\n }\n }\n\n // Build the parsed data in a temporary object (because we need to return it). Once we have the final\n // parsed data, we will combine it with process.env (or options.processEnv if provided).\n let lastError\n const parsedAll = {}\n for (const path of optionPaths) {\n try {\n // Specifying an encoding returns a string instead of a buffer\n const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n DotenvModule.populate(parsedAll, parsed, options)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${path} ${e.message}`)\n }\n lastError = e\n }\n }\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsedAll, options)\n\n if (debug || !quiet) {\n const keysCount = Object.keys(parsedAll).length\n const shortPaths = []\n for (const filePath of optionPaths) {\n try {\n const relative = path.relative(process.cwd(), filePath)\n shortPaths.push(relative)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${filePath} ${e.message}`)\n }\n lastError = e\n }\n }\n\n _log(`injecting env (${keysCount}) from ${shortPaths.join(',')}`)\n }\n\n if (lastError) {\n return { parsed: parsedAll, error: lastError }\n } else {\n return { parsed: parsedAll }\n }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n // fallback to original dotenv if DOTENV_KEY is not set\n if (_dotenvKey(options).length === 0) {\n return DotenvModule.configDotenv(options)\n }\n\n const vaultPath = _vaultPath(options)\n\n // dotenvKey exists but .env.vault file does not exist\n if (!vaultPath) {\n _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n return DotenvModule.configDotenv(options)\n }\n\n return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n const key = Buffer.from(keyStr.slice(-64), 'hex')\n let ciphertext = Buffer.from(encrypted, 'base64')\n\n const nonce = ciphertext.subarray(0, 12)\n const authTag = ciphertext.subarray(-16)\n ciphertext = ciphertext.subarray(12, -16)\n\n try {\n const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n aesgcm.setAuthTag(authTag)\n return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n } catch (error) {\n const isRange = error instanceof RangeError\n const invalidKeyLength = error.message === 'Invalid key length'\n const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n if (isRange || invalidKeyLength) {\n const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n } else if (decryptionFailed) {\n const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n err.code = 'DECRYPTION_FAILED'\n throw err\n } else {\n throw error\n }\n }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n const debug = Boolean(options && options.debug)\n const override = Boolean(options && options.override)\n\n if (typeof parsed !== 'object') {\n const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n err.code = 'OBJECT_REQUIRED'\n throw err\n }\n\n // Set process.env\n for (const key of Object.keys(parsed)) {\n if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n if (override === true) {\n processEnv[key] = parsed[key]\n }\n\n if (debug) {\n if (override === true) {\n _debug(`\"${key}\" is already defined and WAS overwritten`)\n } else {\n _debug(`\"${key}\" is already defined and was NOT overwritten`)\n }\n }\n } else {\n processEnv[key] = parsed[key]\n }\n }\n}\n\nconst DotenvModule = {\n configDotenv,\n _configVault,\n _parseVault,\n config,\n decrypt,\n parse,\n populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n","import dayjs, { Dayjs } from \"dayjs\";\r\n\r\nimport utc from \"dayjs/plugin/utc\";\r\nimport timezone from \"dayjs/plugin/timezone\";\r\nimport isBetween from \"dayjs/plugin/isBetween\";\r\nimport customParseFormat from \"dayjs/plugin/customParseFormat\";\r\n\r\ndayjs.extend(utc);\r\ndayjs.extend(timezone);\r\ndayjs.extend(isBetween);\r\ndayjs.extend(customParseFormat);\r\n\r\n/**\r\n * Static DateUtils class\r\n */\r\nexport class DateUtils {\r\n //#region Holidays\r\n /** Holidays 2025-2030 as YYYY-MM-DD strings */\r\n static HOLIDAYS_STR: readonly string[] = [\r\n /* 2025 */ \"2025-01-01\",\r\n \"2025-04-18\",\r\n \"2025-04-21\",\r\n \"2025-05-01\",\r\n \"2025-05-08\",\r\n \"2025-07-05\",\r\n \"2025-07-06\",\r\n \"2025-09-28\",\r\n \"2025-10-28\",\r\n \"2025-11-17\",\r\n \"2025-12-24\",\r\n \"2025-12-25\",\r\n \"2025-12-26\",\r\n /* 2026 */ \"2026-01-01\",\r\n \"2026-04-03\",\r\n \"2026-04-06\",\r\n \"2026-05-01\",\r\n \"2026-05-08\",\r\n \"2026-07-05\",\r\n \"2026-07-06\",\r\n \"2026-09-28\",\r\n \"2026-10-28\",\r\n \"2026-11-17\",\r\n \"2026-12-24\",\r\n \"2026-12-25\",\r\n \"2026-12-26\",\r\n /* 2027 */ \"2027-01-01\",\r\n \"2027-03-26\",\r\n \"2027-03-29\",\r\n \"2027-05-01\",\r\n \"2027-05-08\",\r\n \"2027-07-05\",\r\n \"2027-07-06\",\r\n \"2027-09-28\",\r\n \"2027-10-28\",\r\n \"2027-11-17\",\r\n \"2027-12-24\",\r\n \"2027-12-25\",\r\n \"2027-12-26\",\r\n /* 2028 */ \"2028-01-01\",\r\n \"2028-04-14\",\r\n \"2028-04-17\",\r\n \"2028-05-01\",\r\n \"2028-05-08\",\r\n \"2028-07-05\",\r\n \"2028-07-06\",\r\n \"2028-09-28\",\r\n \"2028-10-28\",\r\n \"2028-11-17\",\r\n \"2028-12-24\",\r\n \"2028-12-25\",\r\n \"2028-12-26\",\r\n /* 2029 */ \"2029-01-01\",\r\n \"2029-03-30\",\r\n \"2029-04-02\",\r\n \"2029-05-01\",\r\n \"2029-05-08\",\r\n \"2029-07-05\",\r\n \"2029-07-06\",\r\n \"2029-09-28\",\r\n \"2029-10-28\",\r\n \"2029-11-17\",\r\n \"2029-12-24\",\r\n \"2029-12-25\",\r\n \"2029-12-26\",\r\n /* 2030 */ \"2030-01-01\",\r\n \"2030-04-19\",\r\n \"2030-04-22\",\r\n \"2030-05-01\",\r\n \"2030-05-08\",\r\n \"2030-07-05\",\r\n \"2030-07-06\",\r\n \"2030-09-28\",\r\n \"2030-10-28\",\r\n \"2030-11-17\",\r\n \"2030-12-24\",\r\n \"2030-12-25\",\r\n \"2030-12-26\",\r\n ];\r\n\r\n /** Holidays 2025-2030 as UTC timestamps */\r\n static HOLIDAYS: readonly number[] = DateUtils.HOLIDAYS_STR.map((h: string) => {\r\n const date: Date = new Date(h);\r\n date.setUTCHours(0, 0, 0, 0);\r\n return date.getTime();\r\n });\r\n\r\n //#endregion\r\n\r\n //#region SQL timestamps\r\n static fromISOtoSQLtimestamp(ts?: string): string {\r\n return dayjs(ts).utc().format(\"YYYY-MM-DD HH:mm:ss\");\r\n }\r\n\r\n static toSQLtimestamp(ts: Dayjs): string {\r\n return ts.format(\"YYYY-MM-DD HH:mm:ss\");\r\n }\r\n\r\n static fromSQLtimestamp(mysqlDate: string): Dayjs {\r\n return dayjs(mysqlDate, \"YYYY-MM-DD HH:mm:ss\").utc(true);\r\n }\r\n\r\n static getSqlTimestampFromNowCzech(): string {\r\n return DateUtils.toSQLtimestamp(DateUtils.getNowCzech());\r\n }\r\n\r\n //#endregion\r\n\r\n // ---------- UTC\r\n static fromISO(isoDate: string): Dayjs {\r\n return dayjs(isoDate).utc(false);\r\n }\r\n\r\n // ----------\r\n\r\n static getDate(ts: string) {\r\n return dayjs(ts);\r\n }\r\n\r\n static getNow(): Dayjs {\r\n return dayjs();\r\n }\r\n\r\n static getNowCzech(): Dayjs {\r\n return dayjs().tz(\"Europe/Prague\").utc(true);\r\n }\r\n\r\n static clone(ts: Dayjs): Dayjs {\r\n return dayjs(ts);\r\n }\r\n\r\n static getLastSunday(weeksOffset = 0): Dayjs {\r\n let now: Dayjs = DateUtils.getNowCzech(); // get now\r\n now = now.date(now.date() - ((now.day() + 1) % 7) - 7 * weeksOffset); // remove time shift\r\n now = now.hour(0);\r\n now = now.minute(0);\r\n now = now.second(0);\r\n now = now.millisecond(0); // set time to all zeros - only keep date\r\n return now;\r\n }\r\n\r\n static dayInWeek(ts?: Dayjs) {\r\n const input = ts ?? dayjs();\r\n const day = input.day();\r\n if (day === 0) {\r\n return 7;\r\n }\r\n return day;\r\n }\r\n\r\n static isWorkdayDay(ts: Dayjs): boolean {\r\n // is weekend?\r\n const weekDay = ts.get(\"day\");\r\n\r\n // sunday\r\n if (weekDay === 0) {\r\n return false;\r\n }\r\n\r\n // saturday\r\n if (weekDay === 6) {\r\n return false;\r\n }\r\n\r\n // holiday?\r\n ts = ts.set(\"hour\", 0).set(\"minutes\", 0).set(\"seconds\", 0).set(\"milliseconds\", 0);\r\n\r\n return !DateUtils.HOLIDAYS.includes(ts.valueOf());\r\n }\r\n\r\n static getDiffInMinutesWithNow(inputTime: Dayjs) {\r\n const now = dayjs();\r\n const diffInMinutes = now.diff(inputTime, \"minute\");\r\n return diffInMinutes;\r\n }\r\n\r\n static isInLastDays(numOfDays: number, timestampInput: string | Dayjs) {\r\n const timestamp =\r\n typeof timestampInput === \"string\" ? dayjs(timestampInput) : timestampInput;\r\n const now = dayjs();\r\n const dateLimit = now.subtract(numOfDays, \"day\");\r\n return timestamp.isAfter(dateLimit);\r\n }\r\n}\r\n","export type Deferred<T> = {\r\n promise: Promise<T>;\r\n resolve: (value: T) => void;\r\n reject: (err: any) => void;\r\n};\r\n\r\n/**\r\n * Deferred promise is like \"fake\" which is used to manually resolve/reject later on with different promise\r\n * With resolve and reject outside for easier change of promise\r\n * is used as placeholder untill real promise is assigned\r\n */\r\nexport function createDeferred<T>(): Deferred<T> {\r\n let resolve!: (value: T) => void;\r\n let reject!: (err: any) => void;\r\n const promise = new Promise<T>((res, rej) => {\r\n resolve = res;\r\n reject = rej;\r\n });\r\n return { promise, resolve, reject };\r\n}\r\n","/**\r\n * Experimental class to maintain just one promise for some process flow.\r\n * Currently is in singleton design, so can be used only in one proces. (currently: all-product-availability-per-day)\r\n */\r\nexport class SinglePromiseWaiter<T = any> {\r\n private static _instance: SinglePromiseWaiter<any>;\r\n static getInstance<T = any>() {\r\n if (!SinglePromiseWaiter._instance) {\r\n SinglePromiseWaiter._instance = new SinglePromiseWaiter<T>();\r\n }\r\n return SinglePromiseWaiter._instance;\r\n }\r\n\r\n private _promise: Promise<T> | null = null;\r\n\r\n public get promise() {\r\n return this._promise;\r\n }\r\n\r\n public set promise(promise: Promise<T> | null) {\r\n if (promise !== null) {\r\n this._promise = promise;\r\n this._promise.finally(() => {\r\n // direct change outside setter\r\n this._promise = null;\r\n });\r\n }\r\n }\r\n\r\n public get hasPromise() {\r\n return this._promise !== null;\r\n }\r\n}\r\n","import winston, { Logger } from \"winston\";\r\n\r\nconst SERVICE = process.env.SERVICE_NAME || \"depot-ordering-service\";\r\nconst ENV = process.env.NODE_ENV || \"localhost\";\r\n\r\nconst levelToSeverity: Record<string, string> = {\r\n silly: \"debug\",\r\n verbose: \"debug\",\r\n debug: \"debug\",\r\n http: \"info\",\r\n info: \"info\",\r\n warn: \"warn\",\r\n error: \"error\",\r\n};\r\n\r\nconst baseFormat = winston.format.combine(\r\n winston.format.timestamp({ format: () => new Date().toISOString() }),\r\n winston.format.errors({ stack: true }),\r\n winston.format.printf((info) => {\r\n const payload = {\r\n ts: info.timestamp,\r\n level: info.level,\r\n severity: levelToSeverity[info.level] || info.level,\r\n message: info.message,\r\n service: SERVICE,\r\n env: ENV,\r\n process_name: process.title || process.argv[1] || \"node\",\r\n pid: process.pid,\r\n device: process.env.DEVICE_ID || undefined,\r\n traceId: (info as any).traceId,\r\n spanId: (info as any).spanId,\r\n extra: info.extra || (info as any).meta || undefined,\r\n stack: info.stack,\r\n };\r\n return JSON.stringify(payload);\r\n })\r\n);\r\n\r\nconst transports: winston.transport[] = [\r\n new winston.transports.Console({\r\n level: process.env.LOG_LEVEL || \"info\",\r\n }),\r\n];\r\n\r\nexport const logger: Logger = winston.createLogger({\r\n level: process.env.LOG_LEVEL || \"info\",\r\n format: baseFormat,\r\n transports,\r\n exitOnError: false,\r\n});\r\n\r\n(logger as any).stream = {\r\n write: (message: string) => logger.info(message.trim()),\r\n};\r\n\r\nexport default logger;\r\n","export function isValidCron(expr: string): boolean {\r\n const parts = expr.trim().split(/\\s+/);\r\n\r\n if (parts.length < 5 || parts.length > 6) {\r\n return false;\r\n }\r\n\r\n const cronPart = /^(\\*|\\d+|\\d+\\-\\d+|\\d+\\/\\d+|\\*\\/\\d+)(,\\d+)*$/;\r\n return parts.every((part) => cronPart.test(part));\r\n}\r\n","export abstract class Singleton {\r\n private static instances = new Map<Function, any>();\r\n\r\n constructor() {\r\n const ctor = this.constructor as Function;\r\n const existing = Singleton.instances.get(ctor);\r\n if (existing) {\r\n return existing;\r\n }\r\n\r\n Singleton.instances.set(ctor, this);\r\n }\r\n\r\n protected abstract onInit(): void;\r\n}\r\n","import { Status } from \"../../types/status\";\r\nimport { DateUtils } from \"../date-utils\";\r\n\r\nexport class StatusDto {\r\n /**\r\n * Call result status\r\n */\r\n public status: Status;\r\n\r\n /**\r\n * UTC Timestamp\r\n * @example \"2021-12-01T13:23:39.305Z\"\r\n */\r\n public timestamp: string;\r\n\r\n /**\r\n * Details (optional)\r\n */\r\n public details?: string;\r\n\r\n constructor(status: Status, details?: string, timestamp?: string) {\r\n this.status = status;\r\n this.details = details;\r\n this.timestamp = timestamp ?? DateUtils.getNowCzech().toISOString(); // Use nullish coalescing for fallback\r\n }\r\n}\r\n","export const AMOUNT_UNIT = {\r\n 1: { symbol: \"g\", translations: { en: \"gram\", cs: \"gram\" } },\r\n 2: { symbol: \"kg\", translations: { en: \"kilogram\", cs: \"kilogram\" } },\r\n 3: { symbol: \"ml\", translations: { en: \"milliliter\", cs: \"mililitr\" } },\r\n 4: { symbol: \"l\", translations: { en: \"liter\", cs: \"litr\" } },\r\n} as const;\r\n","import { Entity } from \"typeorm\";\r\nimport { FreshEntity } from \"../../../database\";\r\n\r\n@Entity()\r\nexport class Category extends FreshEntity {\r\n // ...\r\n}\r\n","import {\r\n BaseEntity,\r\n PrimaryGeneratedColumn,\r\n CreateDateColumn,\r\n UpdateDateColumn,\r\n DeleteDateColumn,\r\n Index,\r\n Column,\r\n} from \"typeorm\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\n/**\r\n * Default Entity with needed columns for every basic entity `id`, `uuid`, `created_at`, `updated_at` and `deleted_at`;\r\n */\r\nexport abstract class FreshEntity extends BaseEntity {\r\n @PrimaryGeneratedColumn(\"increment\")\r\n id: number;\r\n\r\n @Index({ unique: true })\r\n @Column({ type: \"uuid\", default: () => \"timescale.uuid_generate_v4()\" })\r\n uuid: string;\r\n\r\n @CreateDateColumn({ type: \"timestamptz\" })\r\n created_at: Date;\r\n\r\n @UpdateDateColumn({ type: \"timestamptz\" })\r\n updated_at: Date;\r\n\r\n // for soft delete methods by typeorm\r\n @DeleteDateColumn({ type: \"timestamptz\", nullable: true })\r\n deleted_at: Date | null;\r\n\r\n /** After manual construction `id` is irrelevant. Refer to `uuid` only, because that will be inserted into DB */\r\n constructor() {\r\n super();\r\n // will be overridden by DB\r\n this.id = 0;\r\n this.uuid = uuidv4();\r\n const newDate = new Date();\r\n this.created_at = newDate;\r\n this.updated_at = newDate;\r\n this.deleted_at = null;\r\n }\r\n}\r\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","import { randomFillSync } from 'crypto';\nconst rnds8Pool = new Uint8Array(256);\nlet poolPtr = rnds8Pool.length;\nexport default function rng() {\n if (poolPtr > rnds8Pool.length - 16) {\n randomFillSync(rnds8Pool);\n poolPtr = 0;\n }\n return rnds8Pool.slice(poolPtr, (poolPtr += 16));\n}\n","import { randomUUID } from 'crypto';\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n","import { BaseEntity, PrimaryColumn } from \"typeorm\";\r\nimport { TimestampColumn } from \"../decorators/timestamp-column\";\r\n\r\n/**\r\n * Abstract class for hypertable entity\r\n * @description\r\n * @property `timestamp` is PrimaryKey of type 'timestamptz'\r\n * @property `created_at` is timestamp of insert into DB\r\n *\r\n * @usage add into generated migration these snippets:\r\n ** up: await queryRunner.query(`SELECT create_hypertable('my_hyper_table', 'timestamp', if_not_exists => TRUE);`);\r\n ** down: await queryRunner.query(`SELECT drop_hypertable('my_hyper_table', if_exists => TRUE);`);\r\n */\r\nexport abstract class FreshHyperEntity extends BaseEntity {\r\n // input timestamp as PK\r\n @PrimaryColumn({ type: \"timestamptz\" })\r\n timestamp: Date;\r\n\r\n // just info column about time of insert\r\n @TimestampColumn()\r\n created_at: Date;\r\n\r\n /** After manual construction `id` is irrelevant */\r\n constructor(timestamp?: Date) {\r\n super();\r\n this.timestamp = timestamp ?? new Date();\r\n // will be overridden by DB\r\n this.created_at = new Date();\r\n }\r\n}\r\n","import { ColumnOptions, Column } from \"typeorm\";\r\n\r\n/**\r\n * Extended typeorm `column` decorator for timestamp columns\r\n *\r\n * @description\r\n * Is timestamp column with timezones and as default value passes current timestamp.\r\n *\r\n * * type: 'timestamptz'\r\n * * nullable: false\r\n * * default: () => 'CURRENT_TIMESTAMP'\r\n */\r\n// eslint-disable-next-line\r\nexport function TimestampColumn(options: ColumnOptions = {}): PropertyDecorator {\r\n const defaultOptions: ColumnOptions = {\r\n type: \"timestamptz\",\r\n nullable: false,\r\n default: () => \"CURRENT_TIMESTAMP\",\r\n ...options,\r\n };\r\n\r\n return Column(defaultOptions);\r\n}\r\n","import { PrimaryGeneratedColumn, Column, BaseEntity, Check } from \"typeorm\";\r\nimport { LanguageCode } from \"../../enums\";\r\nimport { FreshEntity } from \"./fresh-entity\";\r\n\r\nconst languageValues = Object.values(LanguageCode)\r\n .map((v) => `'${v}'`)\r\n .join(\",\");\r\n\r\nexport abstract class FreshTranslationBase<T extends FreshEntity> extends BaseEntity {\r\n @PrimaryGeneratedColumn()\r\n id: number;\r\n\r\n @Column({\r\n type: \"varchar\",\r\n length: 3,\r\n nullable: false,\r\n })\r\n @Check(`\"languageCode\" IN (${languageValues})`)\r\n languageCode: LanguageCode;\r\n\r\n /**\r\n * @description relation column to parent Entity\r\n * @override with your Entity specific relation using \r\n * \r\n ** `@ManyToOne(type => YourEntity, { onDelete: \"CASCADE\" })`\r\n `baseEntity: YourEntity;`\r\n * \r\n * @usage \r\n * In parent must be this definition\r\n ** `@OneToMany(() => EntityTranslation, (t) => t.baseEntity, {\r\n cascade: true,\r\n })\r\n translations!: EntityTranslation[];`\r\n `translations: EntityTranslation[];`\r\n */\r\n abstract baseEntity: T;\r\n\r\n constructor() {\r\n super();\r\n this.id = 0;\r\n this.languageCode = LanguageCode.CS;\r\n }\r\n}\r\n","export enum ActionCommandCode {\r\n RESTART_PC = 1,\r\n RESTART_APPLICATION = 2,\r\n RESTART_ROUTER = 3,\r\n RESTART_REMOTE_CONTROL = 4,\r\n SYNCHRONIZE = 5,\r\n DIAGNOSE_LOCKS = 6,\r\n /** download config, save it locally and upload local config, if nothing found on server then just upload */\r\n SYNCHRONIZE_CONFIG = 7,\r\n}\r\n","export enum DepotPoolStatus {\r\n NEW = 0,\r\n PICKED = 1,\r\n WRITTEN_OFF = 2,\r\n ACTIVE = 3,\r\n TERMINATED = 4,\r\n}\r\n","export enum HttpStatus {\r\n CONTINUE = 100,\r\n SWITCHING_PROTOCOLS = 101,\r\n PROCESSING = 102,\r\n EARLY_HINTS = 103,\r\n\r\n OK = 200,\r\n CREATED = 201,\r\n ACCEPTED = 202,\r\n NON_AUTHORITATIVE_INFORMATION = 203,\r\n NO_CONTENT = 204,\r\n RESET_CONTENT = 205,\r\n PARTIAL_CONTENT = 206,\r\n MULTI_STATUS = 207,\r\n ALREADY_REPORTED = 208,\r\n IM_USED = 226,\r\n\r\n MULTIPLE_CHOICES = 300,\r\n MOVED_PERMANENTLY = 301,\r\n FOUND = 302,\r\n SEE_OTHER = 303,\r\n NOT_MODIFIED = 304,\r\n USE_PROXY = 305,\r\n TEMPORARY_REDIRECT = 307,\r\n PERMANENT_REDIRECT = 308,\r\n\r\n BAD_REQUEST = 400,\r\n UNAUTHORIZED = 401,\r\n PAYMENT_REQUIRED = 402,\r\n FORBIDDEN = 403,\r\n NOT_FOUND = 404,\r\n METHOD_NOT_ALLOWED = 405,\r\n NOT_ACCEPTABLE = 406,\r\n PROXY_AUTHENTICATION_REQUIRED = 407,\r\n REQUEST_TIMEOUT = 408,\r\n CONFLICT = 409,\r\n GONE = 410,\r\n LENGTH_REQUIRED = 411,\r\n PRECONDITION_FAILED = 412,\r\n PAYLOAD_TOO_LARGE = 413,\r\n URI_TOO_LONG = 414,\r\n UNSUPPORTED_MEDIA_TYPE = 415,\r\n RANGE_NOT_SATISFIABLE = 416,\r\n EXPECTATION_FAILED = 417,\r\n IM_A_TEAPOT = 418,\r\n MISDIRECTED_REQUEST = 421,\r\n UNPROCESSABLE_ENTITY = 422,\r\n LOCKED = 423,\r\n FAILED_DEPENDENCY = 424,\r\n TOO_EARLY = 425,\r\n UPGRADE_REQUIRED = 426,\r\n PRECONDITION_REQUIRED = 428,\r\n TOO_MANY_REQUESTS = 429,\r\n REQUEST_HEADER_FIELDS_TOO_LARGE = 431,\r\n UNAVAILABLE_FOR_LEGAL_REASONS = 451,\r\n\r\n INTERNAL_SERVER_ERROR = 500,\r\n NOT_IMPLEMENTED = 501,\r\n BAD_GATEWAY = 502,\r\n SERVICE_UNAVAILABLE = 503,\r\n GATEWAY_TIMEOUT = 504,\r\n HTTP_VERSION_NOT_SUPPORTED = 505,\r\n VARIANT_ALSO_NEGOTIATES = 506,\r\n INSUFFICIENT_STORAGE = 507,\r\n LOOP_DETECTED = 508,\r\n NOT_EXTENDED = 510,\r\n NETWORK_AUTHENTICATION_REQUIRED = 511,\r\n}\r\n","export enum LanguageCode {\r\n CS = \"cs\",\r\n EN = \"en\",\r\n DE = \"de\",\r\n PL = \"pl\",\r\n SK = \"sk\",\r\n}\r\n","export enum PaymentMethod {\r\n CODE = 0,\r\n CARD,\r\n NONE,\r\n}\r\n","export enum TransactionType {\r\n WRITEOFF = 0,\r\n SALE = 1,\r\n LOST = 2,\r\n ADD = 3,\r\n DELIVERY = 4,\r\n DEPOT_WRITEOFF = 5,\r\n DEPOT_ADD = 6,\r\n RETURN = 7,\r\n INVENTORY_SURPLUS = 8,\r\n INVENTORY_MISSING = 9,\r\n}\r\n","import { BaseEntity, Repository } from \"typeorm\";\r\n\r\nexport abstract class FreshDao<T extends BaseEntity> {\r\n protected abstract repo: Repository<T>;\r\n}\r\n","import { Entity } from \"typeorm\";\r\nimport { FreshEntity } from \"../../../database\";\r\n\r\n@Entity()\r\nexport class Device extends FreshEntity {\r\n // ...\r\n}\r\n","import { Entity } from \"typeorm\";\r\nimport { FreshEntity } from \"../../../database\";\r\n\r\n@Entity()\r\nexport class Manufacturer extends FreshEntity {\r\n // ...\r\n}\r\n","import { Entity } from \"typeorm\";\r\nimport { FreshEntity } from \"../../../database\";\r\n\r\n@Entity()\r\nexport class Product extends FreshEntity {\r\n // ...\r\n}\r\n","import { Entity } from \"typeorm\";\r\nimport { FreshEntity } from \"../../../database\";\r\n\r\n@Entity()\r\nexport class Subcategory extends FreshEntity {\r\n // ...\r\n}\r\n","import { Maybe } from \"../types/maybe-type\";\r\n\r\nexport abstract class DataHelper<T> {\r\n private _data?: Maybe<T> | undefined;\r\n private _dataPromise: Maybe<Promise<Maybe<T>>> = null;\r\n\r\n protected deviceIds: Promise<number[]>;\r\n\r\n constructor(startDataRetrieve = true, deviceIds: Promise<number[]>) {\r\n this.deviceIds = deviceIds;\r\n if (startDataRetrieve) {\r\n this._dataPromise = this.startDataRetrieval();\r\n }\r\n }\r\n\r\n protected get data(): Maybe<T> | undefined {\r\n return this._data;\r\n }\r\n protected set data(value: Maybe<T>) {\r\n this._data = value;\r\n }\r\n\r\n protected get dataPromise(): Maybe<Promise<Maybe<T>>> {\r\n return this._dataPromise;\r\n }\r\n protected set dataPromise(value: Maybe<Promise<Maybe<T>>>) {\r\n this._dataPromise = value;\r\n }\r\n\r\n public async getData(): Promise<Maybe<T>> {\r\n // loading in progress - return same promise\r\n if (this._dataPromise) {\r\n return await this._dataPromise;\r\n }\r\n\r\n // data were not even loaded at start - start new (first) promise\r\n if (this._data === undefined) {\r\n this._dataPromise = this.startDataRetrieval();\r\n return this._dataPromise;\r\n }\r\n\r\n // return data which can be null as valid response in empty data or error in retrive process\r\n return this._data;\r\n }\r\n\r\n abstract startDataRetrieval(): Promise<Maybe<T>>;\r\n}\r\n","import { Job, scheduleJob } from \"node-schedule\";\r\n\r\nimport { isValidCron } from \"../../common\";\r\nimport { Singleton } from \"../../common/patterns/singleton\";\r\n\r\n// TODO: add description\r\nexport abstract class FreshJob<T = void> extends Singleton {\r\n private _jobName: string;\r\n private _cronExpression: string;\r\n private _job: Job | null = null;\r\n\r\n /**\r\n * @param cronExpression must be cron of just numbers ex.: `0 5 * * 4`\r\n * By default timezone is added \" Europe/Prague\"\r\n */\r\n constructor(jobName: string, cronExpression: string, jobEnabled: boolean) {\r\n super();\r\n this._jobName = jobName;\r\n\r\n if (!isValidCron(cronExpression)) {\r\n throw new Error(\r\n `Job ${this.jobName} cannot be constructed with invalid cron: \"${cronExpression}\"`\r\n );\r\n }\r\n\r\n this._cronExpression = cronExpression;\r\n\r\n if (jobEnabled) {\r\n this._job = scheduleJob(\r\n { rule: this._cronExpression, tz: \"Europe/Prague\" },\r\n async () => {\r\n await this.invoke();\r\n }\r\n );\r\n\r\n if (!this._job) {\r\n throw new Error(`Job ${this._jobName} could not be scheduled`);\r\n }\r\n }\r\n\r\n this.onInit();\r\n }\r\n\r\n /** Just logging */\r\n protected onInit(rescheduled?: boolean): void {\r\n console.log(\r\n `Job ${this.jobName} ${rescheduled ? \"rescheduled\" : \"initialized\"} with cron rule: \"${this.cronExpression}\"`\r\n );\r\n }\r\n\r\n public get jobName(): string {\r\n return this._jobName;\r\n }\r\n\r\n protected set jobName(value: string) {\r\n this._jobName = value;\r\n }\r\n\r\n public get cronExpression(): string {\r\n return this._cronExpression;\r\n }\r\n\r\n protected set cronExpression(value: string) {\r\n this._cronExpression = value;\r\n }\r\n\r\n protected get job(): Job | null {\r\n return this._job;\r\n }\r\n\r\n protected set job(value: Job | null) {\r\n this._job = value;\r\n }\r\n\r\n public abstract invoke(): T | Promise<T>;\r\n}\r\n","import { StatusDto } from \"../../common\";\r\nimport { Status } from \"../../types\";\r\n\r\nexport class ApiError extends Error {\r\n private _statusCode: number;\r\n\r\n public get statusCode(): number {\r\n return this._statusCode;\r\n }\r\n\r\n private _statusDto: any;\r\n\r\n public get statusDto(): any {\r\n return this._statusDto;\r\n }\r\n\r\n constructor(statusCode: number, status: Status, detail?: string) {\r\n super();\r\n this._statusCode = statusCode;\r\n this._statusDto = new StatusDto(status, detail);\r\n }\r\n}\r\n","import tseslint from \"typescript-eslint\";\r\nimport eslintPluginPrettier from \"eslint-plugin-prettier\";\r\nimport eslintConfigPrettier from \"eslint-config-prettier\";\r\n\r\nconst FRESH_ESLINT_CONFIG = [\r\n {\r\n // Prettier integration\r\n ...eslintConfigPrettier,\r\n\r\n // Affected files\r\n files: [\"**/*.ts\", \"**/*.tsx\"],\r\n ignores: [\r\n \"dist/**\",\r\n \"node_modules/**\",\r\n \"build/**\",\r\n \"**/*.js\",\r\n \"**/*.mjs\",\r\n \"**/*-migration.ts\",\r\n \"**/*-migration.js\",\r\n ],\r\n\r\n languageOptions: {\r\n parser: tseslint.parser,\r\n ecmaVersion: \"latest\",\r\n sourceType: \"module\",\r\n },\r\n\r\n // Extra plugins declared\r\n plugins: {\r\n \"@typescript-eslint\": tseslint.plugin,\r\n prettier: eslintPluginPrettier,\r\n },\r\n\r\n rules: {\r\n // Eslint rules\r\n // no lets or vars\r\n \"prefer-const\": \"error\",\r\n\r\n // blocks (\"red\" === color) these ifs\r\n yoda: [\"error\", \"never\"],\r\n\r\n \"no-multiple-empty-lines\": [\"error\", { max: 1 }],\r\n\r\n // semi-colons\r\n semi: [\"error\", \"always\"],\r\n\r\n // forces block for all control statements (forbid one-line returns)\r\n curly: [\"error\", \"all\"],\r\n\r\n // makes spaces between brackets\r\n \"object-curly-spacing\": [\"error\", \"always\"],\r\n\r\n // checks same if/else conditions\r\n \"no-dupe-else-if\": \"error\",\r\n\r\n // keeps imports from one package in same declaration\r\n \"no-duplicate-imports\": \"error\",\r\n\r\n // blocks simple '=' in condition blocks\r\n \"no-cond-assign\": [\"error\", \"always\"],\r\n\r\n // forbids promise inside promise\r\n \"no-async-promise-executor\": \"error\",\r\n\r\n // watches possible falltrough in switch cases\r\n \"no-fallthrough\": \"error\",\r\n\r\n // use === instead of ==\r\n eqeqeq: [\"error\", \"always\"],\r\n\r\n // Prettier formatting rules\r\n \"prettier/prettier\": [\r\n \"error\",\r\n {\r\n // max 100 chars per line\r\n printWidth: 100,\r\n\r\n // keep 4 spaces and no tabs\r\n tabWidth: 4,\r\n useTabs: false,\r\n\r\n // enforce semicolons\r\n semi: true,\r\n\r\n // prefers \"\"\r\n singleQuote: false,\r\n\r\n // last comma in array or object\r\n trailingComma: \"es5\",\r\n\r\n // enable spacing next to brackets\r\n bracketSpacing: true,\r\n\r\n // enables CRLF eol which is enforced by git\r\n endOfLine: \"auto\",\r\n },\r\n ],\r\n\r\n // Namin conventions\r\n \"@typescript-eslint/naming-convention\": [\r\n \"error\",\r\n {\r\n selector: [\"variable\", \"function\"],\r\n format: [\"camelCase\"],\r\n leadingUnderscore: \"allow\",\r\n },\r\n {\r\n selector: \"class\",\r\n format: [\"PascalCase\"],\r\n },\r\n {\r\n selector: \"variable\",\r\n modifiers: [\"const\", \"exported\"],\r\n format: [\"UPPER_CASE\"],\r\n },\r\n {\r\n selector: \"property\",\r\n modifiers: [\"readonly\"],\r\n format: [\"UPPER_CASE\"],\r\n },\r\n ],\r\n },\r\n },\r\n];\r\n\r\nexport default FRESH_ESLINT_CONFIG;\r\n","import path from \"path\";\r\n\r\nimport { DataSourceOptions } from \"typeorm\";\r\nimport { SnakeNamingStrategy } from \"typeorm-naming-strategies\";\r\n\r\nimport { config } from \"dotenv\";\r\nconfig();\r\n\r\nconst basePath = process.cwd(); // project root\r\nconst isTs = process.env.LOCAL === \"true\";\r\n\r\n/**\r\n * @usage\r\n * configurate dotenv before dependency import\r\n * @example\r\n * `import { config } from 'dotenv';`\r\n * `config();`\r\n * `import { PgDataSourceOptions } from '@freshpointcz/fresh-package';`\r\n */\r\nconst PG_DATA_SOURCE_OPTIONS: DataSourceOptions = {\r\n applicationName: \"<service-name>\",\r\n name: \"<service-name>-connection\",\r\n type: \"postgres\",\r\n host: process.env.POSTGRE_SQL_HOST || \"<host>\",\r\n port: Number(process.env.POSTGRE_SQL_PORT || \"3300\"),\r\n username: process.env.POSTGRE_SQL_USER || \"<user>\",\r\n password: process.env.POSTGRE_SQL_PASSWORD || \"<password>\",\r\n database: process.env.POSTGRE_SQL_DATABASE || \"<database>\",\r\n schema: process.env.POSTGRE_SQL_SCHEMA || \"<scheme>\",\r\n entities: [path.join(basePath, isTs ? \"src/entity/*.{ts,js}\" : \"build/entity/*.js\")],\r\n migrations: [path.join(basePath, isTs ? \"src/migration/*.{ts,js}\" : \"build/migration/*.js\")],\r\n migrationsRun: process.env.RUN_MIGRATIONS === \"true\",\r\n migrationsTableName: \"migrations\",\r\n migrationsTransactionMode: \"each\",\r\n synchronize: false,\r\n logging: false,\r\n extra: {\r\n connectionLimit: 20,\r\n },\r\n useUTC: true,\r\n cache: true,\r\n namingStrategy: new SnakeNamingStrategy(),\r\n // replication: undefined,\r\n};\r\n\r\nexport default PG_DATA_SOURCE_OPTIONS;\r\n"],"mappings":"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","names":["path","config","BaseEntity","Column","BaseEntity","PrimaryGeneratedColumn","Column","BaseEntity","ActionCommandCode","DepotPoolStatus","HttpStatus","LanguageCode","PaymentMethod","TransactionType","BaseEntity","PrimaryGeneratedColumn","Column","Entity","Entity","Entity","Entity","Entity","Entity","Entity","Entity"]}
1
+ {"version":3,"sources":["../../../node_modules/dotenv/package.json","../../../node_modules/dotenv/lib/main.js","../src/common/date-utils.ts","../src/common/promise-magic/deferred.ts","../src/common/promise-magic/single-promise-waiter.ts","../src/common/winston.ts","../src/common/utils/is-cron-valid.ts","../src/common/patterns/singleton.ts","../src/common/dto/status-dto.ts","../src/common/constants/amount-unit.ts","../src/common/schema/entities/category.entity.ts","../src/database/entities/fresh-entity.ts","../../../node_modules/uuid/dist/esm/stringify.js","../../../node_modules/uuid/dist/esm/rng.js","../../../node_modules/uuid/dist/esm/native.js","../../../node_modules/uuid/dist/esm/v4.js","../src/database/entities/fresh-hyper-entity.ts","../src/database/decorators/timestamp-column.ts","../src/database/entities/fresh-translation-entity.ts","../src/enums/action-command-code.ts","../src/enums/depot-pool-status.ts","../src/enums/http-status.ts","../src/enums/language-code.ts","../src/enums/payment-method.ts","../src/enums/transaction-type.ts","../src/database/dao/fresh-dao.ts","../src/common/schema/entities/device.entity.ts","../src/common/schema/entities/manufacturer.entity.ts","../src/common/schema/entities/product.entity.ts","../src/common/schema/entities/subcategory.entity.ts","../src/core/data-helper.ts","../src/core/class/fresh-job.ts","../src/core/errors/api-error.ts","../src/config/eslint-config.ts","../src/config/datasource.ts"],"sourcesContent":["{\n \"name\": \"dotenv\",\n \"version\": \"16.6.1\",\n \"description\": \"Loads environment variables from .env file\",\n \"main\": \"lib/main.js\",\n \"types\": \"lib/main.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/main.d.ts\",\n \"require\": \"./lib/main.js\",\n \"default\": \"./lib/main.js\"\n },\n \"./config\": \"./config.js\",\n \"./config.js\": \"./config.js\",\n \"./lib/env-options\": \"./lib/env-options.js\",\n \"./lib/env-options.js\": \"./lib/env-options.js\",\n \"./lib/cli-options\": \"./lib/cli-options.js\",\n \"./lib/cli-options.js\": \"./lib/cli-options.js\",\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"dts-check\": \"tsc --project tests/types/tsconfig.json\",\n \"lint\": \"standard\",\n \"pretest\": \"npm run lint && npm run dts-check\",\n \"test\": \"tap run --allow-empty-coverage --disable-coverage --timeout=60000\",\n \"test:coverage\": \"tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov\",\n \"prerelease\": \"npm test\",\n \"release\": \"standard-version\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/motdotla/dotenv.git\"\n },\n \"homepage\": \"https://github.com/motdotla/dotenv#readme\",\n \"funding\": \"https://dotenvx.com\",\n \"keywords\": [\n \"dotenv\",\n \"env\",\n \".env\",\n \"environment\",\n \"variables\",\n \"config\",\n \"settings\"\n ],\n \"readmeFilename\": \"README.md\",\n \"license\": \"BSD-2-Clause\",\n \"devDependencies\": {\n \"@types/node\": \"^18.11.3\",\n \"decache\": \"^4.6.2\",\n \"sinon\": \"^14.0.1\",\n \"standard\": \"^17.0.0\",\n \"standard-version\": \"^9.5.0\",\n \"tap\": \"^19.2.0\",\n \"typescript\": \"^4.8.4\"\n },\n \"engines\": {\n \"node\": \">=12\"\n },\n \"browser\": {\n \"fs\": false\n }\n}\n","const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n const obj = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n let match\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n\nfunction _parseVault (options) {\n options = options || {}\n\n const vaultPath = _vaultPath(options)\n options.path = vaultPath // parse .env.vault\n const result = DotenvModule.configDotenv(options)\n if (!result.parsed) {\n const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n err.code = 'MISSING_DATA'\n throw err\n }\n\n // handle scenario for comma separated keys - for use with key rotation\n // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n const keys = _dotenvKey(options).split(',')\n const length = keys.length\n\n let decrypted\n for (let i = 0; i < length; i++) {\n try {\n // Get full key\n const key = keys[i].trim()\n\n // Get instructions for decrypt\n const attrs = _instructions(result, key)\n\n // Decrypt\n decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n break\n } catch (error) {\n // last key\n if (i + 1 >= length) {\n throw error\n }\n // try next key\n }\n }\n\n // Parse decrypted .env string\n return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n console.log(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _log (message) {\n console.log(`[dotenv@${version}] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n // prioritize developer directly setting options.DOTENV_KEY\n if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n return options.DOTENV_KEY\n }\n\n // secondary infra already contains a DOTENV_KEY environment variable\n if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n return process.env.DOTENV_KEY\n }\n\n // fallback to empty string\n return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n // Parse DOTENV_KEY. Format is a URI\n let uri\n try {\n uri = new URL(dotenvKey)\n } catch (error) {\n if (error.code === 'ERR_INVALID_URL') {\n const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n throw error\n }\n\n // Get decrypt key\n const key = uri.password\n if (!key) {\n const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get environment\n const environment = uri.searchParams.get('environment')\n if (!environment) {\n const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get ciphertext payload\n const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n if (!ciphertext) {\n const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n throw err\n }\n\n return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n let possibleVaultPath = null\n\n if (options && options.path && options.path.length > 0) {\n if (Array.isArray(options.path)) {\n for (const filepath of options.path) {\n if (fs.existsSync(filepath)) {\n possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n }\n }\n } else {\n possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n }\n } else {\n possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n }\n\n if (fs.existsSync(possibleVaultPath)) {\n return possibleVaultPath\n }\n\n return null\n}\n\nfunction _resolveHome (envPath) {\n return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n const debug = Boolean(options && options.debug)\n const quiet = options && 'quiet' in options ? options.quiet : true\n\n if (debug || !quiet) {\n _log('Loading env from encrypted .env.vault')\n }\n\n const parsed = DotenvModule._parseVault(options)\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsed, options)\n\n return { parsed }\n}\n\nfunction configDotenv (options) {\n const dotenvPath = path.resolve(process.cwd(), '.env')\n let encoding = 'utf8'\n const debug = Boolean(options && options.debug)\n const quiet = options && 'quiet' in options ? options.quiet : true\n\n if (options && options.encoding) {\n encoding = options.encoding\n } else {\n if (debug) {\n _debug('No encoding is specified. UTF-8 is used by default')\n }\n }\n\n let optionPaths = [dotenvPath] // default, look for .env\n if (options && options.path) {\n if (!Array.isArray(options.path)) {\n optionPaths = [_resolveHome(options.path)]\n } else {\n optionPaths = [] // reset default\n for (const filepath of options.path) {\n optionPaths.push(_resolveHome(filepath))\n }\n }\n }\n\n // Build the parsed data in a temporary object (because we need to return it). Once we have the final\n // parsed data, we will combine it with process.env (or options.processEnv if provided).\n let lastError\n const parsedAll = {}\n for (const path of optionPaths) {\n try {\n // Specifying an encoding returns a string instead of a buffer\n const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n DotenvModule.populate(parsedAll, parsed, options)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${path} ${e.message}`)\n }\n lastError = e\n }\n }\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsedAll, options)\n\n if (debug || !quiet) {\n const keysCount = Object.keys(parsedAll).length\n const shortPaths = []\n for (const filePath of optionPaths) {\n try {\n const relative = path.relative(process.cwd(), filePath)\n shortPaths.push(relative)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${filePath} ${e.message}`)\n }\n lastError = e\n }\n }\n\n _log(`injecting env (${keysCount}) from ${shortPaths.join(',')}`)\n }\n\n if (lastError) {\n return { parsed: parsedAll, error: lastError }\n } else {\n return { parsed: parsedAll }\n }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n // fallback to original dotenv if DOTENV_KEY is not set\n if (_dotenvKey(options).length === 0) {\n return DotenvModule.configDotenv(options)\n }\n\n const vaultPath = _vaultPath(options)\n\n // dotenvKey exists but .env.vault file does not exist\n if (!vaultPath) {\n _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n return DotenvModule.configDotenv(options)\n }\n\n return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n const key = Buffer.from(keyStr.slice(-64), 'hex')\n let ciphertext = Buffer.from(encrypted, 'base64')\n\n const nonce = ciphertext.subarray(0, 12)\n const authTag = ciphertext.subarray(-16)\n ciphertext = ciphertext.subarray(12, -16)\n\n try {\n const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n aesgcm.setAuthTag(authTag)\n return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n } catch (error) {\n const isRange = error instanceof RangeError\n const invalidKeyLength = error.message === 'Invalid key length'\n const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n if (isRange || invalidKeyLength) {\n const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n } else if (decryptionFailed) {\n const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n err.code = 'DECRYPTION_FAILED'\n throw err\n } else {\n throw error\n }\n }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n const debug = Boolean(options && options.debug)\n const override = Boolean(options && options.override)\n\n if (typeof parsed !== 'object') {\n const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n err.code = 'OBJECT_REQUIRED'\n throw err\n }\n\n // Set process.env\n for (const key of Object.keys(parsed)) {\n if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n if (override === true) {\n processEnv[key] = parsed[key]\n }\n\n if (debug) {\n if (override === true) {\n _debug(`\"${key}\" is already defined and WAS overwritten`)\n } else {\n _debug(`\"${key}\" is already defined and was NOT overwritten`)\n }\n }\n } else {\n processEnv[key] = parsed[key]\n }\n }\n}\n\nconst DotenvModule = {\n configDotenv,\n _configVault,\n _parseVault,\n config,\n decrypt,\n parse,\n populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n","import dayjs, { Dayjs } from \"dayjs\";\r\n\r\nimport utc from \"dayjs/plugin/utc\";\r\nimport timezone from \"dayjs/plugin/timezone\";\r\nimport isBetween from \"dayjs/plugin/isBetween\";\r\nimport customParseFormat from \"dayjs/plugin/customParseFormat\";\r\n\r\ndayjs.extend(utc);\r\ndayjs.extend(timezone);\r\ndayjs.extend(isBetween);\r\ndayjs.extend(customParseFormat);\r\n\r\n/**\r\n * Static DateUtils class\r\n */\r\nexport class DateUtils {\r\n //#region Holidays\r\n /** Holidays 2025-2030 as YYYY-MM-DD strings */\r\n static HOLIDAYS_STR: readonly string[] = [\r\n /* 2025 */ \"2025-01-01\",\r\n \"2025-04-18\",\r\n \"2025-04-21\",\r\n \"2025-05-01\",\r\n \"2025-05-08\",\r\n \"2025-07-05\",\r\n \"2025-07-06\",\r\n \"2025-09-28\",\r\n \"2025-10-28\",\r\n \"2025-11-17\",\r\n \"2025-12-24\",\r\n \"2025-12-25\",\r\n \"2025-12-26\",\r\n /* 2026 */ \"2026-01-01\",\r\n \"2026-04-03\",\r\n \"2026-04-06\",\r\n \"2026-05-01\",\r\n \"2026-05-08\",\r\n \"2026-07-05\",\r\n \"2026-07-06\",\r\n \"2026-09-28\",\r\n \"2026-10-28\",\r\n \"2026-11-17\",\r\n \"2026-12-24\",\r\n \"2026-12-25\",\r\n \"2026-12-26\",\r\n /* 2027 */ \"2027-01-01\",\r\n \"2027-03-26\",\r\n \"2027-03-29\",\r\n \"2027-05-01\",\r\n \"2027-05-08\",\r\n \"2027-07-05\",\r\n \"2027-07-06\",\r\n \"2027-09-28\",\r\n \"2027-10-28\",\r\n \"2027-11-17\",\r\n \"2027-12-24\",\r\n \"2027-12-25\",\r\n \"2027-12-26\",\r\n /* 2028 */ \"2028-01-01\",\r\n \"2028-04-14\",\r\n \"2028-04-17\",\r\n \"2028-05-01\",\r\n \"2028-05-08\",\r\n \"2028-07-05\",\r\n \"2028-07-06\",\r\n \"2028-09-28\",\r\n \"2028-10-28\",\r\n \"2028-11-17\",\r\n \"2028-12-24\",\r\n \"2028-12-25\",\r\n \"2028-12-26\",\r\n /* 2029 */ \"2029-01-01\",\r\n \"2029-03-30\",\r\n \"2029-04-02\",\r\n \"2029-05-01\",\r\n \"2029-05-08\",\r\n \"2029-07-05\",\r\n \"2029-07-06\",\r\n \"2029-09-28\",\r\n \"2029-10-28\",\r\n \"2029-11-17\",\r\n \"2029-12-24\",\r\n \"2029-12-25\",\r\n \"2029-12-26\",\r\n /* 2030 */ \"2030-01-01\",\r\n \"2030-04-19\",\r\n \"2030-04-22\",\r\n \"2030-05-01\",\r\n \"2030-05-08\",\r\n \"2030-07-05\",\r\n \"2030-07-06\",\r\n \"2030-09-28\",\r\n \"2030-10-28\",\r\n \"2030-11-17\",\r\n \"2030-12-24\",\r\n \"2030-12-25\",\r\n \"2030-12-26\",\r\n ];\r\n\r\n /** Holidays 2025-2030 as UTC timestamps */\r\n static HOLIDAYS: readonly number[] = DateUtils.HOLIDAYS_STR.map((h: string) => {\r\n const date: Date = new Date(h);\r\n date.setUTCHours(0, 0, 0, 0);\r\n return date.getTime();\r\n });\r\n\r\n //#endregion\r\n\r\n //#region SQL timestamps\r\n static fromISOtoSQLtimestamp(ts?: string): string {\r\n return dayjs(ts).utc().format(\"YYYY-MM-DD HH:mm:ss\");\r\n }\r\n\r\n static toSQLtimestamp(ts: Dayjs): string {\r\n return ts.format(\"YYYY-MM-DD HH:mm:ss\");\r\n }\r\n\r\n static fromSQLtimestamp(mysqlDate: string): Dayjs {\r\n return dayjs(mysqlDate, \"YYYY-MM-DD HH:mm:ss\").utc(true);\r\n }\r\n\r\n static getSqlTimestampFromNowCzech(): string {\r\n return DateUtils.toSQLtimestamp(DateUtils.getNowCzech());\r\n }\r\n\r\n //#endregion\r\n\r\n // ---------- UTC\r\n static fromISO(isoDate: string): Dayjs {\r\n return dayjs(isoDate).utc(false);\r\n }\r\n\r\n // ----------\r\n\r\n static getDate(ts: string) {\r\n return dayjs(ts);\r\n }\r\n\r\n static getNow(): Dayjs {\r\n return dayjs();\r\n }\r\n\r\n static getNowCzech(): Dayjs {\r\n return dayjs().tz(\"Europe/Prague\").utc(true);\r\n }\r\n\r\n static clone(ts: Dayjs): Dayjs {\r\n return dayjs(ts);\r\n }\r\n\r\n static getLastSunday(weeksOffset = 0): Dayjs {\r\n let now: Dayjs = DateUtils.getNowCzech(); // get now\r\n now = now.date(now.date() - ((now.day() + 1) % 7) - 7 * weeksOffset); // remove time shift\r\n now = now.hour(0);\r\n now = now.minute(0);\r\n now = now.second(0);\r\n now = now.millisecond(0); // set time to all zeros - only keep date\r\n return now;\r\n }\r\n\r\n static dayInWeek(ts?: Dayjs) {\r\n const input = ts ?? dayjs();\r\n const day = input.day();\r\n if (day === 0) {\r\n return 7;\r\n }\r\n return day;\r\n }\r\n\r\n static isWorkdayDay(ts: Dayjs): boolean {\r\n // is weekend?\r\n const weekDay = ts.get(\"day\");\r\n\r\n // sunday\r\n if (weekDay === 0) {\r\n return false;\r\n }\r\n\r\n // saturday\r\n if (weekDay === 6) {\r\n return false;\r\n }\r\n\r\n // holiday?\r\n ts = ts.set(\"hour\", 0).set(\"minutes\", 0).set(\"seconds\", 0).set(\"milliseconds\", 0);\r\n\r\n return !DateUtils.HOLIDAYS.includes(ts.valueOf());\r\n }\r\n\r\n static getDiffInMinutesWithNow(inputTime: Dayjs) {\r\n const now = dayjs();\r\n const diffInMinutes = now.diff(inputTime, \"minute\");\r\n return diffInMinutes;\r\n }\r\n\r\n static isInLastDays(numOfDays: number, timestampInput: string | Dayjs) {\r\n const timestamp =\r\n typeof timestampInput === \"string\" ? dayjs(timestampInput) : timestampInput;\r\n const now = dayjs();\r\n const dateLimit = now.subtract(numOfDays, \"day\");\r\n return timestamp.isAfter(dateLimit);\r\n }\r\n}\r\n","export type Deferred<T> = {\r\n promise: Promise<T>;\r\n resolve: (value: T) => void;\r\n reject: (err: any) => void;\r\n};\r\n\r\n/**\r\n * Deferred promise is like \"fake\" which is used to manually resolve/reject later on with different promise\r\n * With resolve and reject outside for easier change of promise\r\n * is used as placeholder untill real promise is assigned\r\n */\r\nexport function createDeferred<T>(): Deferred<T> {\r\n let resolve!: (value: T) => void;\r\n let reject!: (err: any) => void;\r\n const promise = new Promise<T>((res, rej) => {\r\n resolve = res;\r\n reject = rej;\r\n });\r\n return { promise, resolve, reject };\r\n}\r\n","/**\r\n * Experimental class to maintain just one promise for some process flow.\r\n * Currently is in singleton design, so can be used only in one proces. (currently: all-product-availability-per-day)\r\n */\r\nexport class SinglePromiseWaiter<T = any> {\r\n private static _instance: SinglePromiseWaiter<any>;\r\n static getInstance<T = any>() {\r\n if (!SinglePromiseWaiter._instance) {\r\n SinglePromiseWaiter._instance = new SinglePromiseWaiter<T>();\r\n }\r\n return SinglePromiseWaiter._instance;\r\n }\r\n\r\n private _promise: Promise<T> | null = null;\r\n\r\n public get promise() {\r\n return this._promise;\r\n }\r\n\r\n public set promise(promise: Promise<T> | null) {\r\n if (promise !== null) {\r\n this._promise = promise;\r\n this._promise.finally(() => {\r\n // direct change outside setter\r\n this._promise = null;\r\n });\r\n }\r\n }\r\n\r\n public get hasPromise() {\r\n return this._promise !== null;\r\n }\r\n}\r\n","import winston, { Logger } from \"winston\";\r\n\r\nconst SERVICE = process.env.SERVICE_NAME || \"depot-ordering-service\";\r\nconst ENV = process.env.NODE_ENV || \"localhost\";\r\n\r\nconst levelToSeverity: Record<string, string> = {\r\n silly: \"debug\",\r\n verbose: \"debug\",\r\n debug: \"debug\",\r\n http: \"info\",\r\n info: \"info\",\r\n warn: \"warn\",\r\n error: \"error\",\r\n};\r\n\r\nconst baseFormat = winston.format.combine(\r\n winston.format.timestamp({ format: () => new Date().toISOString() }),\r\n winston.format.errors({ stack: true }),\r\n winston.format.printf((info) => {\r\n const payload = {\r\n ts: info.timestamp,\r\n level: info.level,\r\n severity: levelToSeverity[info.level] || info.level,\r\n message: info.message,\r\n service: SERVICE,\r\n env: ENV,\r\n process_name: process.title || process.argv[1] || \"node\",\r\n pid: process.pid,\r\n device: process.env.DEVICE_ID || undefined,\r\n traceId: (info as any).traceId,\r\n spanId: (info as any).spanId,\r\n extra: info.extra || (info as any).meta || undefined,\r\n stack: info.stack,\r\n };\r\n return JSON.stringify(payload);\r\n })\r\n);\r\n\r\nconst transports: winston.transport[] = [\r\n new winston.transports.Console({\r\n level: process.env.LOG_LEVEL || \"info\",\r\n }),\r\n];\r\n\r\nexport const logger: Logger = winston.createLogger({\r\n level: process.env.LOG_LEVEL || \"info\",\r\n format: baseFormat,\r\n transports,\r\n exitOnError: false,\r\n});\r\n\r\n(logger as any).stream = {\r\n write: (message: string) => logger.info(message.trim()),\r\n};\r\n\r\nexport default logger;\r\n","export function isValidCron(expr: string): boolean {\r\n const parts = expr.trim().split(/\\s+/);\r\n\r\n if (parts.length < 5 || parts.length > 6) {\r\n return false;\r\n }\r\n\r\n const cronPart = /^(\\*|\\d+|\\d+\\-\\d+|\\d+\\/\\d+|\\*\\/\\d+)(,\\d+)*$/;\r\n return parts.every((part) => cronPart.test(part));\r\n}\r\n","/**\r\n * Abstract base class implementing a per-subclass Singleton pattern.\r\n *\r\n * Each subclass of `Singleton` can have exactly one instance.\r\n * Instantiation is guarded at runtime: calling `new` multiple times\r\n * will always return the first created instance for that subclass.\r\n *\r\n * Instances are stored internally in a static map keyed by constructor\r\n * function, allowing independent singleton instances per subclass.\r\n *\r\n * ⚠️ Important:\r\n * - Subclasses MUST NOT override the constructor unless they fully\r\n * understand the consequences.\r\n * - Initialization logic must be placed in {@link onInit}, not the constructor.\r\n * - The constructor may return an existing instance, which is legal in JS\r\n * but mildly unsettling.\r\n */\r\nexport abstract class Singleton {\r\n /**\r\n * Internal registry of singleton instances.\r\n * One instance per subclass constructor.\r\n */\r\n private static instances = new Map<Function, any>();\r\n\r\n /**\r\n * Creates or returns the singleton instance for the subclass.\r\n *\r\n * If an instance already exists for the subclass, that instance is\r\n * returned instead of creating a new one.\r\n *\r\n * @param callOnInit - Whether to call {@link onInit} for a newly\r\n * created instance. Ignored if the instance already exists.\r\n */\r\n constructor(callOnInit = true) {\r\n const ctor = this.constructor as Function;\r\n const existing = Singleton.instances.get(ctor);\r\n if (existing) {\r\n return existing;\r\n }\r\n\r\n Singleton.instances.set(ctor, this);\r\n\r\n if (callOnInit) {\r\n void this.onInit();\r\n }\r\n }\r\n\r\n /**\r\n * Retrieves the singleton instance for the calling subclass.\r\n *\r\n * If no instance exists, a new one is created using the provided\r\n * constructor arguments.\r\n *\r\n * Intended to be used by subclasses as a protected factory method.\r\n *\r\n * @typeParam T - The concrete subclass type.\r\n * @param args - Arguments forwarded to the subclass constructor.\r\n * @returns The singleton instance of the subclass.\r\n */\r\n protected static getInstance<T>(\r\n this: new (...args: any[]) => T,\r\n ...args: ConstructorParameters<any>\r\n ): T {\r\n let instance = Singleton.instances.get(this as unknown as Function);\r\n if (!instance) {\r\n instance = new this(...args);\r\n Singleton.instances.set(this as unknown as Function, instance);\r\n }\r\n return instance as T;\r\n }\r\n\r\n /**\r\n * Lifecycle hook called once when the singleton instance is first created.\r\n *\r\n * Subclasses must implement this method instead of relying on the\r\n * constructor for initialization logic.\r\n *\r\n * This method is guaranteed to be called at most once per subclass\r\n * instance.\r\n */\r\n protected abstract onInit(): void | Promise<void>;\r\n}\r\n","import { Status } from \"../../types/status\";\r\nimport { DateUtils } from \"../date-utils\";\r\n\r\nexport class StatusDto {\r\n /**\r\n * Call result status\r\n */\r\n public status: Status;\r\n\r\n /**\r\n * UTC Timestamp\r\n * @example \"2021-12-01T13:23:39.305Z\"\r\n */\r\n public timestamp: string;\r\n\r\n /**\r\n * Details (optional)\r\n */\r\n public details?: string;\r\n\r\n constructor(status: Status, details?: string, timestamp?: string) {\r\n this.status = status;\r\n this.details = details;\r\n this.timestamp = timestamp ?? DateUtils.getNowCzech().toISOString(); // Use nullish coalescing for fallback\r\n }\r\n}\r\n","export const AMOUNT_UNIT = {\r\n 1: { symbol: \"g\", translations: { en: \"gram\", cs: \"gram\" } },\r\n 2: { symbol: \"kg\", translations: { en: \"kilogram\", cs: \"kilogram\" } },\r\n 3: { symbol: \"ml\", translations: { en: \"milliliter\", cs: \"mililitr\" } },\r\n 4: { symbol: \"l\", translations: { en: \"liter\", cs: \"litr\" } },\r\n} as const;\r\n","import { Entity } from \"typeorm\";\r\nimport { FreshEntity } from \"../../../database\";\r\n\r\n@Entity()\r\nexport class Category extends FreshEntity {\r\n // ...\r\n}\r\n","import {\r\n BaseEntity,\r\n PrimaryGeneratedColumn,\r\n CreateDateColumn,\r\n UpdateDateColumn,\r\n DeleteDateColumn,\r\n Index,\r\n Column,\r\n} from \"typeorm\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\n/**\r\n * Default Entity with needed columns for every basic entity `id`, `uuid`, `created_at`, `updated_at` and `deleted_at`;\r\n */\r\nexport abstract class FreshEntity extends BaseEntity {\r\n @PrimaryGeneratedColumn(\"increment\")\r\n id: number;\r\n\r\n @Index({ unique: true })\r\n @Column({ type: \"uuid\", default: () => \"timescale.uuid_generate_v4()\" })\r\n uuid: string;\r\n\r\n @CreateDateColumn({ type: \"timestamptz\" })\r\n created_at: Date;\r\n\r\n @UpdateDateColumn({ type: \"timestamptz\" })\r\n updated_at: Date;\r\n\r\n // for soft delete methods by typeorm\r\n @DeleteDateColumn({ type: \"timestamptz\", nullable: true })\r\n deleted_at: Date | null;\r\n\r\n /** After manual construction `id` is irrelevant. Refer to `uuid` only, because that will be inserted into DB */\r\n constructor() {\r\n super();\r\n // will be overridden by DB\r\n this.id = 0;\r\n this.uuid = uuidv4();\r\n const newDate = new Date();\r\n this.created_at = newDate;\r\n this.updated_at = newDate;\r\n this.deleted_at = null;\r\n }\r\n}\r\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","import { randomFillSync } from 'crypto';\nconst rnds8Pool = new Uint8Array(256);\nlet poolPtr = rnds8Pool.length;\nexport default function rng() {\n if (poolPtr > rnds8Pool.length - 16) {\n randomFillSync(rnds8Pool);\n poolPtr = 0;\n }\n return rnds8Pool.slice(poolPtr, (poolPtr += 16));\n}\n","import { randomUUID } from 'crypto';\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n","import { BaseEntity, PrimaryColumn } from \"typeorm\";\r\nimport { TimestampColumn } from \"../decorators/timestamp-column\";\r\n\r\n/**\r\n * Abstract class for hypertable entity\r\n * @description\r\n * @property `timestamp` is PrimaryKey of type 'timestamptz'\r\n * @property `created_at` is timestamp of insert into DB\r\n *\r\n * @usage add into generated migration these snippets:\r\n ** up: await queryRunner.query(`SELECT create_hypertable('my_hyper_table', 'timestamp', if_not_exists => TRUE);`);\r\n ** down: await queryRunner.query(`SELECT drop_hypertable('my_hyper_table', if_exists => TRUE);`);\r\n */\r\nexport abstract class FreshHyperEntity extends BaseEntity {\r\n // input timestamp as PK\r\n @PrimaryColumn({ type: \"timestamptz\" })\r\n timestamp: Date;\r\n\r\n // just info column about time of insert\r\n @TimestampColumn()\r\n created_at: Date;\r\n\r\n /** After manual construction `id` is irrelevant */\r\n constructor(timestamp?: Date) {\r\n super();\r\n this.timestamp = timestamp ?? new Date();\r\n // will be overridden by DB\r\n this.created_at = new Date();\r\n }\r\n}\r\n","import { ColumnOptions, Column } from \"typeorm\";\r\n\r\n/**\r\n * Extended typeorm `column` decorator for timestamp columns\r\n *\r\n * @description\r\n * Is timestamp column with timezones and as default value passes current timestamp.\r\n *\r\n * * type: 'timestamptz'\r\n * * nullable: false\r\n * * default: () => 'CURRENT_TIMESTAMP'\r\n */\r\n// eslint-disable-next-line\r\nexport function TimestampColumn(options: ColumnOptions = {}): PropertyDecorator {\r\n const defaultOptions: ColumnOptions = {\r\n type: \"timestamptz\",\r\n nullable: false,\r\n default: () => \"CURRENT_TIMESTAMP\",\r\n ...options,\r\n };\r\n\r\n return Column(defaultOptions);\r\n}\r\n","import { PrimaryGeneratedColumn, Column, BaseEntity, Check } from \"typeorm\";\r\nimport { LanguageCode } from \"../../enums\";\r\nimport { FreshEntity } from \"./fresh-entity\";\r\n\r\nconst languageValues = Object.values(LanguageCode)\r\n .map((v) => `'${v}'`)\r\n .join(\",\");\r\n\r\nexport abstract class FreshTranslationBase<T extends FreshEntity> extends BaseEntity {\r\n @PrimaryGeneratedColumn()\r\n id: number;\r\n\r\n @Column({\r\n type: \"varchar\",\r\n length: 3,\r\n nullable: false,\r\n })\r\n @Check(`\"languageCode\" IN (${languageValues})`)\r\n languageCode: LanguageCode;\r\n\r\n /**\r\n * @description relation column to parent Entity\r\n * @override with your Entity specific relation using \r\n * \r\n ** `@ManyToOne(type => YourEntity, { onDelete: \"CASCADE\" })`\r\n `baseEntity: YourEntity;`\r\n * \r\n * @usage \r\n * In parent must be this definition\r\n ** `@OneToMany(() => EntityTranslation, (t) => t.baseEntity, {\r\n cascade: true,\r\n })\r\n translations!: EntityTranslation[];`\r\n `translations: EntityTranslation[];`\r\n */\r\n abstract baseEntity: T;\r\n\r\n constructor() {\r\n super();\r\n this.id = 0;\r\n this.languageCode = LanguageCode.CS;\r\n }\r\n}\r\n","export enum ActionCommandCode {\r\n RESTART_PC = 1,\r\n RESTART_APPLICATION = 2,\r\n RESTART_ROUTER = 3,\r\n RESTART_REMOTE_CONTROL = 4,\r\n SYNCHRONIZE = 5,\r\n DIAGNOSE_LOCKS = 6,\r\n /** download config, save it locally and upload local config, if nothing found on server then just upload */\r\n SYNCHRONIZE_CONFIG = 7,\r\n}\r\n","export enum DepotPoolStatus {\r\n NEW = 0,\r\n PICKED = 1,\r\n WRITTEN_OFF = 2,\r\n ACTIVE = 3,\r\n TERMINATED = 4,\r\n}\r\n","export enum HttpStatus {\r\n CONTINUE = 100,\r\n SWITCHING_PROTOCOLS = 101,\r\n PROCESSING = 102,\r\n EARLY_HINTS = 103,\r\n\r\n OK = 200,\r\n CREATED = 201,\r\n ACCEPTED = 202,\r\n NON_AUTHORITATIVE_INFORMATION = 203,\r\n NO_CONTENT = 204,\r\n RESET_CONTENT = 205,\r\n PARTIAL_CONTENT = 206,\r\n MULTI_STATUS = 207,\r\n ALREADY_REPORTED = 208,\r\n IM_USED = 226,\r\n\r\n MULTIPLE_CHOICES = 300,\r\n MOVED_PERMANENTLY = 301,\r\n FOUND = 302,\r\n SEE_OTHER = 303,\r\n NOT_MODIFIED = 304,\r\n USE_PROXY = 305,\r\n TEMPORARY_REDIRECT = 307,\r\n PERMANENT_REDIRECT = 308,\r\n\r\n BAD_REQUEST = 400,\r\n UNAUTHORIZED = 401,\r\n PAYMENT_REQUIRED = 402,\r\n FORBIDDEN = 403,\r\n NOT_FOUND = 404,\r\n METHOD_NOT_ALLOWED = 405,\r\n NOT_ACCEPTABLE = 406,\r\n PROXY_AUTHENTICATION_REQUIRED = 407,\r\n REQUEST_TIMEOUT = 408,\r\n CONFLICT = 409,\r\n GONE = 410,\r\n LENGTH_REQUIRED = 411,\r\n PRECONDITION_FAILED = 412,\r\n PAYLOAD_TOO_LARGE = 413,\r\n URI_TOO_LONG = 414,\r\n UNSUPPORTED_MEDIA_TYPE = 415,\r\n RANGE_NOT_SATISFIABLE = 416,\r\n EXPECTATION_FAILED = 417,\r\n IM_A_TEAPOT = 418,\r\n MISDIRECTED_REQUEST = 421,\r\n UNPROCESSABLE_ENTITY = 422,\r\n LOCKED = 423,\r\n FAILED_DEPENDENCY = 424,\r\n TOO_EARLY = 425,\r\n UPGRADE_REQUIRED = 426,\r\n PRECONDITION_REQUIRED = 428,\r\n TOO_MANY_REQUESTS = 429,\r\n REQUEST_HEADER_FIELDS_TOO_LARGE = 431,\r\n UNAVAILABLE_FOR_LEGAL_REASONS = 451,\r\n\r\n INTERNAL_SERVER_ERROR = 500,\r\n NOT_IMPLEMENTED = 501,\r\n BAD_GATEWAY = 502,\r\n SERVICE_UNAVAILABLE = 503,\r\n GATEWAY_TIMEOUT = 504,\r\n HTTP_VERSION_NOT_SUPPORTED = 505,\r\n VARIANT_ALSO_NEGOTIATES = 506,\r\n INSUFFICIENT_STORAGE = 507,\r\n LOOP_DETECTED = 508,\r\n NOT_EXTENDED = 510,\r\n NETWORK_AUTHENTICATION_REQUIRED = 511,\r\n}\r\n","export enum LanguageCode {\r\n CS = \"cs\",\r\n EN = \"en\",\r\n DE = \"de\",\r\n PL = \"pl\",\r\n SK = \"sk\",\r\n}\r\n","export enum PaymentMethod {\r\n CODE = 0,\r\n CARD,\r\n NONE,\r\n}\r\n","export enum TransactionType {\r\n WRITEOFF = 0,\r\n SALE = 1,\r\n LOST = 2,\r\n ADD = 3,\r\n DELIVERY = 4,\r\n DEPOT_WRITEOFF = 5,\r\n DEPOT_ADD = 6,\r\n RETURN = 7,\r\n INVENTORY_SURPLUS = 8,\r\n INVENTORY_MISSING = 9,\r\n}\r\n","import { BaseEntity, Repository } from \"typeorm\";\r\n\r\nexport abstract class FreshDao<T extends BaseEntity> {\r\n protected abstract repo: Repository<T>;\r\n}\r\n","import { Entity } from \"typeorm\";\r\nimport { FreshEntity } from \"../../../database\";\r\n\r\n@Entity()\r\nexport class Device extends FreshEntity {\r\n // ...\r\n}\r\n","import { Entity } from \"typeorm\";\r\nimport { FreshEntity } from \"../../../database\";\r\n\r\n@Entity()\r\nexport class Manufacturer extends FreshEntity {\r\n // ...\r\n}\r\n","import { Entity } from \"typeorm\";\r\nimport { FreshEntity } from \"../../../database\";\r\n\r\n@Entity()\r\nexport class Product extends FreshEntity {\r\n // ...\r\n}\r\n","import { Entity } from \"typeorm\";\r\nimport { FreshEntity } from \"../../../database\";\r\n\r\n@Entity()\r\nexport class Subcategory extends FreshEntity {\r\n // ...\r\n}\r\n","import { Maybe } from \"../types/maybe-type\";\r\n\r\nexport abstract class DataHelper<T> {\r\n private _data?: Maybe<T> | undefined;\r\n private _dataPromise: Maybe<Promise<Maybe<T>>> = null;\r\n\r\n protected deviceIds: Promise<number[]>;\r\n\r\n constructor(startDataRetrieve = true, deviceIds: Promise<number[]>) {\r\n this.deviceIds = deviceIds;\r\n if (startDataRetrieve) {\r\n this._dataPromise = this.startDataRetrieval();\r\n }\r\n }\r\n\r\n protected get data(): Maybe<T> | undefined {\r\n return this._data;\r\n }\r\n protected set data(value: Maybe<T>) {\r\n this._data = value;\r\n }\r\n\r\n protected get dataPromise(): Maybe<Promise<Maybe<T>>> {\r\n return this._dataPromise;\r\n }\r\n protected set dataPromise(value: Maybe<Promise<Maybe<T>>>) {\r\n this._dataPromise = value;\r\n }\r\n\r\n public async getData(): Promise<Maybe<T>> {\r\n // loading in progress - return same promise\r\n if (this._dataPromise) {\r\n return await this._dataPromise;\r\n }\r\n\r\n // data were not even loaded at start - start new (first) promise\r\n if (this._data === undefined) {\r\n this._dataPromise = this.startDataRetrieval();\r\n return this._dataPromise;\r\n }\r\n\r\n // return data which can be null as valid response in empty data or error in retrive process\r\n return this._data;\r\n }\r\n\r\n abstract startDataRetrieval(): Promise<Maybe<T>>;\r\n}\r\n","import { Job, scheduleJob } from \"node-schedule\";\r\n\r\nimport { isValidCron } from \"../../common\";\r\nimport { Singleton } from \"../../common/patterns/singleton\";\r\n\r\n/**\r\n * Abstract base class for scheduled singleton jobs.\r\n *\r\n * Combines:\r\n * - a per-subclass Singleton lifecycle\r\n * - cron-based scheduling via `node-schedule`\r\n * - a predictable execution entry point via {@link invoke}\r\n *\r\n * Each concrete job:\r\n * - exists exactly once per process\r\n * - may or may not be scheduled (depending on `jobEnabled`)\r\n * - is responsible only for business logic, not scheduling mechanics\r\n *\r\n * The job is scheduled immediately during construction if enabled.\r\n * Initialization logging is handled internally.\r\n *\r\n * @typeParam T - Return type of the job execution.\r\n *\r\n * ⚠️ Design notes for future maintainers:\r\n * - Do NOT override the constructor unless you enjoy debugging time-based bugs.\r\n * - All job logic belongs in {@link invoke}.\r\n * - Rescheduling requires calling {@link reschedule} with valid cron.\r\n */\r\nexport abstract class FreshJob<T = void> extends Singleton {\r\n /** Human-readable job identifier (used for logs and errors). */\r\n private _jobName: string;\r\n\r\n /**\r\n * Cron expression defining when the job runs.\r\n *\r\n * Must contain numeric cron fields only.\r\n * Example: `0 5 * * 4`\r\n *\r\n * Timezone is always forced to `\"Europe/Prague\"`.\r\n * If you need another timezone, this class is not your friend.\r\n */\r\n private _cronExpression: string;\r\n\r\n /** Scheduled job instance, or `null` if the job is disabled. */\r\n private _job: Job | null = null;\r\n\r\n /**\r\n * Creates and optionally schedules a singleton cron job.\r\n *\r\n * @param jobName - Logical name of the job (used in logs and errors).\r\n * @param cronExpression - Cron expression consisting of numeric fields only.\r\n * Example: `0 5 * * 4`\r\n * The timezone `\"Europe/Prague\"` is applied automatically.\r\n *\r\n * @param jobEnabled - Whether the job should be scheduled immediately.\r\n * If `false`, the instance exists but no cron trigger is registered.\r\n *\r\n * @throws Error If the cron expression is invalid.\r\n * @throws Error If the job cannot be scheduled.\r\n */\r\n constructor(jobName: string, cronExpression: string, jobEnabled: boolean) {\r\n // disable Singleton auto-init, FreshJob controls its own lifecycle.\r\n super(false);\r\n this._jobName = jobName;\r\n\r\n // fail fast. Bad cron rules should explode loudly.\r\n if (!isValidCron(cronExpression)) {\r\n throw new Error(\r\n `Job ${this.jobName} cannot be constructed with invalid cron: \"${cronExpression}\"`\r\n );\r\n }\r\n\r\n // use direct change instead of setter. setter is for outside usage\r\n this._cronExpression = cronExpression;\r\n\r\n if (jobEnabled) {\r\n this._job = scheduleJob(\r\n { rule: this._cronExpression, tz: \"Europe/Prague\" },\r\n async () => {\r\n await this.invoke();\r\n }\r\n );\r\n\r\n if (!this._job) {\r\n throw new Error(`Job ${this._jobName} could not be scheduled`);\r\n }\r\n }\r\n\r\n this.onInit();\r\n }\r\n\r\n /**\r\n * Initialization hook.\r\n *\r\n * Called once during construction and used primarily for logging.\r\n * Can also be reused by subclasses if manual rescheduling is implemented.\r\n *\r\n * @param rescheduled - Indicates whether the job was reconfigured\r\n * after initial creation.\r\n */\r\n protected onInit(rescheduled?: boolean): void {\r\n console.log(\r\n `Job ${this.jobName} ${rescheduled ? \"rescheduled\" : \"initialized\"} with cron rule: \"${this.cronExpression}\"`\r\n );\r\n }\r\n\r\n /** @returns The logical name of the job. */\r\n public get jobName(): string {\r\n return this._jobName;\r\n }\r\n\r\n /** Allows subclasses to rename the job if absolutely necessary. */\r\n protected set jobName(value: string) {\r\n this._jobName = value;\r\n }\r\n\r\n /** @returns The cron expression used to schedule the job. */\r\n public get cronExpression(): string {\r\n return this._cronExpression;\r\n }\r\n\r\n /**\r\n * Allows subclasses to update the cron expression internally.\r\n * Does reschedule of job if exists\r\n */\r\n protected set cronExpression(value: string) {\r\n if (!isValidCron(value)) {\r\n throw new Error(\r\n `Job ${this._jobName} cannot be re-scheduled with invalid cron: \"${value}\"`\r\n );\r\n }\r\n\r\n this._cronExpression = value;\r\n }\r\n\r\n /** @returns The underlying scheduled job instance, or `null` if disabled. */\r\n protected get job(): Job | null {\r\n return this._job;\r\n }\r\n\r\n /** Allows subclasses to manage the scheduled job instance. */\r\n protected set job(value: Job | null) {\r\n this._job = value;\r\n }\r\n\r\n protected reschedule(newCronExpression: string) {\r\n let result = false;\r\n\r\n if (!isValidCron(newCronExpression)) {\r\n throw new Error(\r\n `Job ${this._jobName} cannot be re-scheduled with invalid cron: \"${newCronExpression}\"`\r\n );\r\n }\r\n\r\n this._cronExpression = newCronExpression;\r\n\r\n if (this._job) {\r\n const rescheduleSuccess = this._job.reschedule({\r\n rule: this._cronExpression,\r\n tz: \"Europe/Prague\",\r\n });\r\n if (!rescheduleSuccess) {\r\n throw new Error(`Job ${this._jobName} could not be re-scheduled`);\r\n } else {\r\n this.onInit(true);\r\n }\r\n\r\n result = rescheduleSuccess;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Job execution entry point.\r\n *\r\n * This method is called by the scheduler when the cron rule matches.\r\n * All business logic belongs here.\r\n *\r\n * @returns The result of the job execution, optionally wrapped in a Promise.\r\n */\r\n public abstract invoke(): T | Promise<T>;\r\n}\r\n","import { StatusDto } from \"../../common\";\r\nimport { Status } from \"../../types\";\r\n\r\nexport class ApiError extends Error {\r\n private _statusCode: number;\r\n\r\n public get statusCode(): number {\r\n return this._statusCode;\r\n }\r\n\r\n private _statusDto: any;\r\n\r\n public get statusDto(): any {\r\n return this._statusDto;\r\n }\r\n\r\n constructor(statusCode: number, status: Status, detail?: string) {\r\n super();\r\n this._statusCode = statusCode;\r\n this._statusDto = new StatusDto(status, detail);\r\n }\r\n}\r\n","import tseslint from \"typescript-eslint\";\r\nimport eslintPluginPrettier from \"eslint-plugin-prettier\";\r\nimport eslintConfigPrettier from \"eslint-config-prettier\";\r\n\r\nconst FRESH_ESLINT_CONFIG = [\r\n {\r\n // Prettier integration\r\n ...eslintConfigPrettier,\r\n\r\n // Affected files\r\n files: [\"**/*.ts\", \"**/*.tsx\"],\r\n ignores: [\r\n \"dist/**\",\r\n \"node_modules/**\",\r\n \"build/**\",\r\n \"**/*.js\",\r\n \"**/*.mjs\",\r\n \"**/*-migration.ts\",\r\n \"**/*-migration.js\",\r\n ],\r\n\r\n languageOptions: {\r\n parser: tseslint.parser,\r\n ecmaVersion: \"latest\",\r\n sourceType: \"module\",\r\n },\r\n\r\n // Extra plugins declared\r\n plugins: {\r\n \"@typescript-eslint\": tseslint.plugin,\r\n prettier: eslintPluginPrettier,\r\n },\r\n\r\n rules: {\r\n // Eslint rules\r\n // no lets or vars\r\n \"prefer-const\": \"error\",\r\n\r\n // blocks (\"red\" === color) these ifs\r\n yoda: [\"error\", \"never\"],\r\n\r\n \"no-multiple-empty-lines\": [\"error\", { max: 1 }],\r\n\r\n // semi-colons\r\n semi: [\"error\", \"always\"],\r\n\r\n // forces block for all control statements (forbid one-line returns)\r\n curly: [\"error\", \"all\"],\r\n\r\n // makes spaces between brackets\r\n \"object-curly-spacing\": [\"error\", \"always\"],\r\n\r\n // checks same if/else conditions\r\n \"no-dupe-else-if\": \"error\",\r\n\r\n // keeps imports from one package in same declaration\r\n \"no-duplicate-imports\": \"error\",\r\n\r\n // blocks simple '=' in condition blocks\r\n \"no-cond-assign\": [\"error\", \"always\"],\r\n\r\n // forbids promise inside promise\r\n \"no-async-promise-executor\": \"error\",\r\n\r\n // watches possible falltrough in switch cases\r\n \"no-fallthrough\": \"error\",\r\n\r\n // use === instead of ==\r\n eqeqeq: [\"error\", \"always\"],\r\n\r\n // Prettier formatting rules\r\n \"prettier/prettier\": [\r\n \"error\",\r\n {\r\n // max 100 chars per line\r\n printWidth: 100,\r\n\r\n // keep 4 spaces and no tabs\r\n tabWidth: 4,\r\n useTabs: false,\r\n\r\n // enforce semicolons\r\n semi: true,\r\n\r\n // prefers \"\"\r\n singleQuote: false,\r\n\r\n // last comma in array or object\r\n trailingComma: \"es5\",\r\n\r\n // enable spacing next to brackets\r\n bracketSpacing: true,\r\n\r\n // enables CRLF eol which is enforced by git\r\n endOfLine: \"auto\",\r\n },\r\n ],\r\n\r\n // Namin conventions\r\n \"@typescript-eslint/naming-convention\": [\r\n \"error\",\r\n {\r\n selector: [\"variable\", \"function\"],\r\n format: [\"camelCase\"],\r\n leadingUnderscore: \"allow\",\r\n },\r\n {\r\n selector: \"class\",\r\n format: [\"PascalCase\"],\r\n },\r\n {\r\n selector: \"variable\",\r\n modifiers: [\"const\", \"exported\"],\r\n format: [\"UPPER_CASE\", \"PascalCase\"],\r\n },\r\n {\r\n selector: \"property\",\r\n modifiers: [\"readonly\"],\r\n format: [\"UPPER_CASE\"],\r\n },\r\n ],\r\n },\r\n },\r\n];\r\n\r\nexport default FRESH_ESLINT_CONFIG;\r\n","import path from \"path\";\r\n\r\nimport { DataSourceOptions } from \"typeorm\";\r\nimport { SnakeNamingStrategy } from \"typeorm-naming-strategies\";\r\n\r\nimport { config } from \"dotenv\";\r\nconfig();\r\n\r\nconst basePath = process.cwd(); // project root\r\nconst isTs = process.env.LOCAL === \"true\";\r\n\r\n/**\r\n * @usage\r\n * configurate dotenv before dependency import\r\n * @example\r\n * `import { config } from 'dotenv';`\r\n * `config();`\r\n * `import { PgDataSourceOptions } from '@freshpointcz/fresh-package';`\r\n */\r\nconst PG_DATA_SOURCE_OPTIONS: DataSourceOptions = {\r\n applicationName: \"<service-name>\",\r\n name: \"<service-name>-connection\",\r\n type: \"postgres\",\r\n host: process.env.POSTGRE_SQL_HOST || \"<host>\",\r\n port: Number(process.env.POSTGRE_SQL_PORT || \"3300\"),\r\n username: process.env.POSTGRE_SQL_USER || \"<user>\",\r\n password: process.env.POSTGRE_SQL_PASSWORD || \"<password>\",\r\n database: process.env.POSTGRE_SQL_DATABASE || \"<database>\",\r\n schema: process.env.POSTGRE_SQL_SCHEMA || \"<scheme>\",\r\n entities: [path.join(basePath, isTs ? \"src/entity/*.{ts,js}\" : \"build/entity/*.js\")],\r\n migrations: [path.join(basePath, isTs ? \"src/migration/*.{ts,js}\" : \"build/migration/*.js\")],\r\n migrationsRun: process.env.RUN_MIGRATIONS === \"true\",\r\n migrationsTableName: \"migrations\",\r\n migrationsTransactionMode: \"each\",\r\n synchronize: false,\r\n logging: false,\r\n extra: {\r\n connectionLimit: 20,\r\n },\r\n useUTC: true,\r\n cache: true,\r\n namingStrategy: new SnakeNamingStrategy(),\r\n // replication: undefined,\r\n};\r\n\r\nexport default PG_DATA_SOURCE_OPTIONS;\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA,MACE,MAAQ;AAAA,MACR,SAAW;AAAA,MACX,aAAe;AAAA,MACf,MAAQ;AAAA,MACR,OAAS;AAAA,MACT,SAAW;AAAA,QACT,KAAK;AAAA,UACH,OAAS;AAAA,UACT,SAAW;AAAA,UACX,SAAW;AAAA,QACb;AAAA,QACA,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,qBAAqB;AAAA,QACrB,wBAAwB;AAAA,QACxB,qBAAqB;AAAA,QACrB,wBAAwB;AAAA,QACxB,kBAAkB;AAAA,MACpB;AAAA,MACA,SAAW;AAAA,QACT,aAAa;AAAA,QACb,MAAQ;AAAA,QACR,SAAW;AAAA,QACX,MAAQ;AAAA,QACR,iBAAiB;AAAA,QACjB,YAAc;AAAA,QACd,SAAW;AAAA,MACb;AAAA,MACA,YAAc;AAAA,QACZ,MAAQ;AAAA,QACR,KAAO;AAAA,MACT;AAAA,MACA,UAAY;AAAA,MACZ,SAAW;AAAA,MACX,UAAY;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,gBAAkB;AAAA,MAClB,SAAW;AAAA,MACX,iBAAmB;AAAA,QACjB,eAAe;AAAA,QACf,SAAW;AAAA,QACX,OAAS;AAAA,QACT,UAAY;AAAA,QACZ,oBAAoB;AAAA,QACpB,KAAO;AAAA,QACP,YAAc;AAAA,MAChB;AAAA,MACA,SAAW;AAAA,QACT,MAAQ;AAAA,MACV;AAAA,MACA,SAAW;AAAA,QACT,IAAM;AAAA,MACR;AAAA,IACF;AAAA;AAAA;;;AC7DA;;;QAAMA,KAAKC,UAAQ,IAAA;AACnB,QAAMC,QAAOD,UAAQ,MAAA;AACrB,QAAME,KAAKF,UAAQ,IAAA;AACnB,QAAMG,SAASH,UAAQ,QAAA;AACvB,QAAMI,cAAcJ;AAEpB,QAAMK,UAAUD,YAAYC;AAE5B,QAAMC,OAAO;AAGb,aAASC,MAAOC,KAAG;AACjB,YAAMC,MAAM,CAAC;AAGb,UAAIC,QAAQF,IAAIG,SAAQ;AAGxBD,cAAQA,MAAME,QAAQ,WAAW,IAAA;AAEjC,UAAIC;AACJ,cAAQA,QAAQP,KAAKQ,KAAKJ,KAAAA,MAAW,MAAM;AACzC,cAAMK,MAAMF,MAAM,CAAA;AAGlB,YAAIG,QAASH,MAAM,CAAA,KAAM;AAGzBG,gBAAQA,MAAMC,KAAI;AAGlB,cAAMC,aAAaF,MAAM,CAAA;AAGzBA,gBAAQA,MAAMJ,QAAQ,0BAA0B,IAAA;AAGhD,YAAIM,eAAe,KAAK;AACtBF,kBAAQA,MAAMJ,QAAQ,QAAQ,IAAA;AAC9BI,kBAAQA,MAAMJ,QAAQ,QAAQ,IAAA;QAChC;AAGAH,YAAIM,GAAAA,IAAOC;MACb;AAEA,aAAOP;IACT;AApCSF;AAsCT,aAASY,YAAaC,SAAO;AAC3BA,gBAAUA,WAAW,CAAC;AAEtB,YAAMC,YAAYC,WAAWF,OAAAA;AAC7BA,cAAQnB,OAAOoB;AACf,YAAME,SAASC,aAAaC,aAAaL,OAAAA;AACzC,UAAI,CAACG,OAAOG,QAAQ;AAClB,cAAMC,MAAM,IAAIC,MAAM,8BAA8BP,SAAAA,wBAAiC;AACrFM,YAAIE,OAAO;AACX,cAAMF;MACR;AAIA,YAAMG,OAAOC,WAAWX,OAAAA,EAASY,MAAM,GAAA;AACvC,YAAMC,SAASH,KAAKG;AAEpB,UAAIC;AACJ,eAASC,IAAI,GAAGA,IAAIF,QAAQE,KAAK;AAC/B,YAAI;AAEF,gBAAMpB,MAAMe,KAAKK,CAAAA,EAAGlB,KAAI;AAGxB,gBAAMmB,QAAQC,cAAcd,QAAQR,GAAAA;AAGpCmB,sBAAYV,aAAac,QAAQF,MAAMG,YAAYH,MAAMrB,GAAG;AAE5D;QACF,SAASyB,OAAO;AAEd,cAAIL,IAAI,KAAKF,QAAQ;AACnB,kBAAMO;UACR;QAEF;MACF;AAGA,aAAOhB,aAAajB,MAAM2B,SAAAA;IAC5B;AAzCSf;AA2CT,aAASsB,MAAOC,SAAO;AACrBC,cAAQC,IAAI,WAAWvC,OAAAA,WAAkBqC,OAAAA,EAAS;IACpD;AAFSD;AAIT,aAASI,OAAQH,SAAO;AACtBC,cAAQC,IAAI,WAAWvC,OAAAA,YAAmBqC,OAAAA,EAAS;IACrD;AAFSG;AAIT,aAASC,KAAMJ,SAAO;AACpBC,cAAQC,IAAI,WAAWvC,OAAAA,KAAYqC,OAAAA,EAAS;IAC9C;AAFSI;AAIT,aAASf,WAAYX,SAAO;AAE1B,UAAIA,WAAWA,QAAQ2B,cAAc3B,QAAQ2B,WAAWd,SAAS,GAAG;AAClE,eAAOb,QAAQ2B;MACjB;AAGA,UAAIC,QAAQC,IAAIF,cAAcC,QAAQC,IAAIF,WAAWd,SAAS,GAAG;AAC/D,eAAOe,QAAQC,IAAIF;MACrB;AAGA,aAAO;IACT;AAbShB;AAeT,aAASM,cAAed,QAAQ2B,WAAS;AAEvC,UAAIC;AACJ,UAAI;AACFA,cAAM,IAAIC,IAAIF,SAAAA;MAChB,SAASV,OAAO;AACd,YAAIA,MAAMX,SAAS,mBAAmB;AACpC,gBAAMF,MAAM,IAAIC,MAAM,4IAAA;AACtBD,cAAIE,OAAO;AACX,gBAAMF;QACR;AAEA,cAAMa;MACR;AAGA,YAAMzB,MAAMoC,IAAIE;AAChB,UAAI,CAACtC,KAAK;AACR,cAAMY,MAAM,IAAIC,MAAM,sCAAA;AACtBD,YAAIE,OAAO;AACX,cAAMF;MACR;AAGA,YAAM2B,cAAcH,IAAII,aAAaC,IAAI,aAAA;AACzC,UAAI,CAACF,aAAa;AAChB,cAAM3B,MAAM,IAAIC,MAAM,8CAAA;AACtBD,YAAIE,OAAO;AACX,cAAMF;MACR;AAGA,YAAM8B,iBAAiB,gBAAgBH,YAAYI,YAAW,CAAA;AAC9D,YAAMnB,aAAahB,OAAOG,OAAO+B,cAAAA;AACjC,UAAI,CAAClB,YAAY;AACf,cAAMZ,MAAM,IAAIC,MAAM,2DAA2D6B,cAAAA,2BAAyC;AAC1H9B,YAAIE,OAAO;AACX,cAAMF;MACR;AAEA,aAAO;QAAEY;QAAYxB;MAAI;IAC3B;AAzCSsB;AA2CT,aAASf,WAAYF,SAAO;AAC1B,UAAIuC,oBAAoB;AAExB,UAAIvC,WAAWA,QAAQnB,QAAQmB,QAAQnB,KAAKgC,SAAS,GAAG;AACtD,YAAI2B,MAAMC,QAAQzC,QAAQnB,IAAI,GAAG;AAC/B,qBAAW6D,YAAY1C,QAAQnB,MAAM;AACnC,gBAAIF,GAAGgE,WAAWD,QAAAA,GAAW;AAC3BH,kCAAoBG,SAASE,SAAS,QAAA,IAAYF,WAAW,GAAGA,QAAAA;YAClE;UACF;QACF,OAAO;AACLH,8BAAoBvC,QAAQnB,KAAK+D,SAAS,QAAA,IAAY5C,QAAQnB,OAAO,GAAGmB,QAAQnB,IAAI;QACtF;MACF,OAAO;AACL0D,4BAAoB1D,MAAKgE,QAAQjB,QAAQkB,IAAG,GAAI,YAAA;MAClD;AAEA,UAAInE,GAAGgE,WAAWJ,iBAAAA,GAAoB;AACpC,eAAOA;MACT;AAEA,aAAO;IACT;AAtBSrC;AAwBT,aAAS6C,aAAcC,SAAO;AAC5B,aAAOA,QAAQ,CAAA,MAAO,MAAMnE,MAAKoE,KAAKnE,GAAGoE,QAAO,GAAIF,QAAQG,MAAM,CAAA,CAAA,IAAMH;IAC1E;AAFSD;AAIT,aAASK,aAAcpD,SAAO;AAC5B,YAAMqD,QAAQC,QAAQtD,WAAWA,QAAQqD,KAAK;AAC9C,YAAME,QAAQvD,WAAW,WAAWA,UAAUA,QAAQuD,QAAQ;AAE9D,UAAIF,SAAS,CAACE,OAAO;AACnB7B,aAAK,uCAAA;MACP;AAEA,YAAMpB,SAASF,aAAaL,YAAYC,OAAAA;AAExC,UAAIwD,aAAa5B,QAAQC;AACzB,UAAI7B,WAAWA,QAAQwD,cAAc,MAAM;AACzCA,qBAAaxD,QAAQwD;MACvB;AAEApD,mBAAaqD,SAASD,YAAYlD,QAAQN,OAAAA;AAE1C,aAAO;QAAEM;MAAO;IAClB;AAlBS8C;AAoBT,aAAS/C,aAAcL,SAAO;AAC5B,YAAM0D,aAAa7E,MAAKgE,QAAQjB,QAAQkB,IAAG,GAAI,MAAA;AAC/C,UAAIa,WAAW;AACf,YAAMN,QAAQC,QAAQtD,WAAWA,QAAQqD,KAAK;AAC9C,YAAME,QAAQvD,WAAW,WAAWA,UAAUA,QAAQuD,QAAQ;AAE9D,UAAIvD,WAAWA,QAAQ2D,UAAU;AAC/BA,mBAAW3D,QAAQ2D;MACrB,OAAO;AACL,YAAIN,OAAO;AACT5B,iBAAO,oDAAA;QACT;MACF;AAEA,UAAImC,cAAc;QAACF;;AACnB,UAAI1D,WAAWA,QAAQnB,MAAM;AAC3B,YAAI,CAAC2D,MAAMC,QAAQzC,QAAQnB,IAAI,GAAG;AAChC+E,wBAAc;YAACb,aAAa/C,QAAQnB,IAAI;;QAC1C,OAAO;AACL+E,wBAAc,CAAA;AACd,qBAAWlB,YAAY1C,QAAQnB,MAAM;AACnC+E,wBAAYC,KAAKd,aAAaL,QAAAA,CAAAA;UAChC;QACF;MACF;AAIA,UAAIoB;AACJ,YAAMC,YAAY,CAAC;AACnB,iBAAWlF,SAAQ+E,aAAa;AAC9B,YAAI;AAEF,gBAAMtD,SAASF,aAAajB,MAAMR,GAAGqF,aAAanF,OAAM;YAAE8E;UAAS,CAAA,CAAA;AAEnEvD,uBAAaqD,SAASM,WAAWzD,QAAQN,OAAAA;QAC3C,SAASiE,GAAG;AACV,cAAIZ,OAAO;AACT5B,mBAAO,kBAAkB5C,KAAAA,IAAQoF,EAAE3C,OAAO,EAAE;UAC9C;AACAwC,sBAAYG;QACd;MACF;AAEA,UAAIT,aAAa5B,QAAQC;AACzB,UAAI7B,WAAWA,QAAQwD,cAAc,MAAM;AACzCA,qBAAaxD,QAAQwD;MACvB;AAEApD,mBAAaqD,SAASD,YAAYO,WAAW/D,OAAAA;AAE7C,UAAIqD,SAAS,CAACE,OAAO;AACnB,cAAMW,YAAYC,OAAOzD,KAAKqD,SAAAA,EAAWlD;AACzC,cAAMuD,aAAa,CAAA;AACnB,mBAAWC,YAAYT,aAAa;AAClC,cAAI;AACF,kBAAMU,WAAWzF,MAAKyF,SAAS1C,QAAQkB,IAAG,GAAIuB,QAAAA;AAC9CD,uBAAWP,KAAKS,QAAAA;UAClB,SAASL,GAAG;AACV,gBAAIZ,OAAO;AACT5B,qBAAO,kBAAkB4C,QAAAA,IAAYJ,EAAE3C,OAAO,EAAE;YAClD;AACAwC,wBAAYG;UACd;QACF;AAEAvC,aAAK,kBAAkBwC,SAAAA,UAAmBE,WAAWnB,KAAK,GAAA,CAAA,EAAM;MAClE;AAEA,UAAIa,WAAW;AACb,eAAO;UAAExD,QAAQyD;UAAW3C,OAAO0C;QAAU;MAC/C,OAAO;AACL,eAAO;UAAExD,QAAQyD;QAAU;MAC7B;IACF;AA1ES1D;AA6ET,aAASkE,QAAQvE,SAAO;AAEtB,UAAIW,WAAWX,OAAAA,EAASa,WAAW,GAAG;AACpC,eAAOT,aAAaC,aAAaL,OAAAA;MACnC;AAEA,YAAMC,YAAYC,WAAWF,OAAAA;AAG7B,UAAI,CAACC,WAAW;AACdoB,cAAM,+DAA+DpB,SAAAA,+BAAwC;AAE7G,eAAOG,aAAaC,aAAaL,OAAAA;MACnC;AAEA,aAAOI,aAAagD,aAAapD,OAAAA;IACnC;AAhBSuE,WAAAA,SAAAA;AAkBT,aAASrD,QAASsD,WAAWC,QAAM;AACjC,YAAM9E,MAAM+E,OAAOC,KAAKF,OAAOtB,MAAM,GAAC,GAAK,KAAA;AAC3C,UAAIhC,aAAauD,OAAOC,KAAKH,WAAW,QAAA;AAExC,YAAMI,QAAQzD,WAAW0D,SAAS,GAAG,EAAA;AACrC,YAAMC,UAAU3D,WAAW0D,SAAS,GAAC;AACrC1D,mBAAaA,WAAW0D,SAAS,IAAI,GAAC;AAEtC,UAAI;AACF,cAAME,SAAShG,OAAOiG,iBAAiB,eAAerF,KAAKiF,KAAAA;AAC3DG,eAAOE,WAAWH,OAAAA;AAClB,eAAO,GAAGC,OAAOG,OAAO/D,UAAAA,CAAAA,GAAc4D,OAAOI,MAAK,CAAA;MACpD,SAAS/D,OAAO;AACd,cAAMgE,UAAUhE,iBAAiBiE;AACjC,cAAMC,mBAAmBlE,MAAME,YAAY;AAC3C,cAAMiE,mBAAmBnE,MAAME,YAAY;AAE3C,YAAI8D,WAAWE,kBAAkB;AAC/B,gBAAM/E,MAAM,IAAIC,MAAM,6DAAA;AACtBD,cAAIE,OAAO;AACX,gBAAMF;QACR,WAAWgF,kBAAkB;AAC3B,gBAAMhF,MAAM,IAAIC,MAAM,iDAAA;AACtBD,cAAIE,OAAO;AACX,gBAAMF;QACR,OAAO;AACL,gBAAMa;QACR;MACF;IACF;AA7BSF;AAgCT,aAASuC,SAAUD,YAAYlD,QAAQN,UAAU,CAAC,GAAC;AACjD,YAAMqD,QAAQC,QAAQtD,WAAWA,QAAQqD,KAAK;AAC9C,YAAMmC,WAAWlC,QAAQtD,WAAWA,QAAQwF,QAAQ;AAEpD,UAAI,OAAOlF,WAAW,UAAU;AAC9B,cAAMC,MAAM,IAAIC,MAAM,gFAAA;AACtBD,YAAIE,OAAO;AACX,cAAMF;MACR;AAGA,iBAAWZ,OAAOwE,OAAOzD,KAAKJ,MAAAA,GAAS;AACrC,YAAI6D,OAAOsB,UAAUC,eAAeC,KAAKnC,YAAY7D,GAAAA,GAAM;AACzD,cAAI6F,aAAa,MAAM;AACrBhC,uBAAW7D,GAAAA,IAAOW,OAAOX,GAAAA;UAC3B;AAEA,cAAI0D,OAAO;AACT,gBAAImC,aAAa,MAAM;AACrB/D,qBAAO,IAAI9B,GAAAA,0CAA6C;YAC1D,OAAO;AACL8B,qBAAO,IAAI9B,GAAAA,8CAAiD;YAC9D;UACF;QACF,OAAO;AACL6D,qBAAW7D,GAAAA,IAAOW,OAAOX,GAAAA;QAC3B;MACF;IACF;AA5BS8D;AA8BT,QAAMrD,eAAe;MACnBC;MACA+C;MACArD;MACAwE,QAAAA;MACArD;MACA/B;MACAsE;IACF;AAEAmC,WAAOC,QAAQxF,eAAeD,aAAaC;AAC3CuF,WAAOC,QAAQzC,eAAehD,aAAagD;AAC3CwC,WAAOC,QAAQ9F,cAAcK,aAAaL;AAC1C6F,WAAOC,QAAQtB,SAASnE,aAAamE;AACrCqB,WAAOC,QAAQ3E,UAAUd,aAAac;AACtC0E,WAAOC,QAAQ1G,QAAQiB,aAAajB;AACpCyG,WAAOC,QAAQpC,WAAWrD,aAAaqD;AAEvCmC,WAAOC,UAAUzF;;;;;ACjYjB,OAAO0F,WAAsB;AAE7B,OAAOC,SAAS;AAChB,OAAOC,cAAc;AACrB,OAAOC,eAAe;AACtB,OAAOC,uBAAuB;AAE9BC,MAAMC,OAAOC,GAAAA;AACbF,MAAMC,OAAOE,QAAAA;AACbH,MAAMC,OAAOG,SAAAA;AACbJ,MAAMC,OAAOI,iBAAAA;AAKN,IAAMC,aAAN,MAAMA,WAAAA;;;EA8FT,OAAOC,sBAAsBC,IAAqB;AAC9C,WAAOR,MAAMQ,EAAAA,EAAIN,IAAG,EAAGO,OAAO,qBAAA;EAClC;EAEA,OAAOC,eAAeF,IAAmB;AACrC,WAAOA,GAAGC,OAAO,qBAAA;EACrB;EAEA,OAAOE,iBAAiBC,WAA0B;AAC9C,WAAOZ,MAAMY,WAAW,qBAAA,EAAuBV,IAAI,IAAA;EACvD;EAEA,OAAOW,8BAAsC;AACzC,WAAOP,WAAUI,eAAeJ,WAAUQ,YAAW,CAAA;EACzD;;;EAKA,OAAOC,QAAQC,SAAwB;AACnC,WAAOhB,MAAMgB,OAAAA,EAASd,IAAI,KAAA;EAC9B;;EAIA,OAAOe,QAAQT,IAAY;AACvB,WAAOR,MAAMQ,EAAAA;EACjB;EAEA,OAAOU,SAAgB;AACnB,WAAOlB,MAAAA;EACX;EAEA,OAAOc,cAAqB;AACxB,WAAOd,MAAAA,EAAQmB,GAAG,eAAA,EAAiBjB,IAAI,IAAA;EAC3C;EAEA,OAAOkB,MAAMZ,IAAkB;AAC3B,WAAOR,MAAMQ,EAAAA;EACjB;EAEA,OAAOa,cAAcC,cAAc,GAAU;AACzC,QAAIC,MAAajB,WAAUQ,YAAW;AACtCS,UAAMA,IAAIC,KAAKD,IAAIC,KAAI,KAAOD,IAAIE,IAAG,IAAK,KAAK,IAAK,IAAIH,WAAAA;AACxDC,UAAMA,IAAIG,KAAK,CAAA;AACfH,UAAMA,IAAII,OAAO,CAAA;AACjBJ,UAAMA,IAAIK,OAAO,CAAA;AACjBL,UAAMA,IAAIM,YAAY,CAAA;AACtB,WAAON;EACX;EAEA,OAAOO,UAAUtB,IAAY;AACzB,UAAMuB,QAAQvB,kBAAMR,MAAAA;AACpB,UAAMyB,MAAMM,MAAMN,IAAG;AACrB,QAAIA,QAAQ,GAAG;AACX,aAAO;IACX;AACA,WAAOA;EACX;EAEA,OAAOO,aAAaxB,IAAoB;AAEpC,UAAMyB,UAAUzB,GAAG0B,IAAI,KAAA;AAGvB,QAAID,YAAY,GAAG;AACf,aAAO;IACX;AAGA,QAAIA,YAAY,GAAG;AACf,aAAO;IACX;AAGAzB,SAAKA,GAAG2B,IAAI,QAAQ,CAAA,EAAGA,IAAI,WAAW,CAAA,EAAGA,IAAI,WAAW,CAAA,EAAGA,IAAI,gBAAgB,CAAA;AAE/E,WAAO,CAAC7B,WAAU8B,SAASC,SAAS7B,GAAG8B,QAAO,CAAA;EAClD;EAEA,OAAOC,wBAAwBC,WAAkB;AAC7C,UAAMjB,MAAMvB,MAAAA;AACZ,UAAMyC,gBAAgBlB,IAAImB,KAAKF,WAAW,QAAA;AAC1C,WAAOC;EACX;EAEA,OAAOE,aAAaC,WAAmBC,gBAAgC;AACnE,UAAMC,YACF,OAAOD,mBAAmB,WAAW7C,MAAM6C,cAAAA,IAAkBA;AACjE,UAAMtB,MAAMvB,MAAAA;AACZ,UAAM+C,YAAYxB,IAAIyB,SAASJ,WAAW,KAAA;AAC1C,WAAOE,UAAUG,QAAQF,SAAAA;EAC7B;AACJ;AA3LazC;;;AAGT,cAHSA,YAGF4C,gBAAkC;;EAC1B;EACX;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACW;EACX;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACW;EACX;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACW;EACX;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACW;EACX;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACW;EACX;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ,cArFS5C,YAqFF8B,YAA8B9B,WAAU4C,aAAaC,IAAI,CAACC,MAAAA;AAC7D,QAAM5B,OAAa,IAAI6B,KAAKD,CAAAA;AAC5B5B,OAAK8B,YAAY,GAAG,GAAG,GAAG,CAAA;AAC1B,SAAO9B,KAAK+B,QAAO;AACvB,CAAA;AAzFG,IAAMjD,YAAN;;;ACJA,SAASkD,iBAAAA;AACZ,MAAIC;AACJ,MAAIC;AACJ,QAAMC,UAAU,IAAIC,QAAW,CAACC,KAAKC,QAAAA;AACjCL,cAAUI;AACVH,aAASI;EACb,CAAA;AACA,SAAO;IAAEH;IAASF;IAASC;EAAO;AACtC;AARgBF;;;ACPT,IAAMO,uBAAN,MAAMA,qBAAAA;EAAN;AASKC,oCAA8B;;EAPtC,OAAOC,cAAuB;AAC1B,QAAI,CAACF,qBAAoBG,WAAW;AAChCH,2BAAoBG,YAAY,IAAIH,qBAAAA;IACxC;AACA,WAAOA,qBAAoBG;EAC/B;EAIA,IAAWC,UAAU;AACjB,WAAO,KAAKH;EAChB;EAEA,IAAWG,QAAQA,SAA4B;AAC3C,QAAIA,YAAY,MAAM;AAClB,WAAKH,WAAWG;AAChB,WAAKH,SAASI,QAAQ,MAAA;AAElB,aAAKJ,WAAW;MACpB,CAAA;IACJ;EACJ;EAEA,IAAWK,aAAa;AACpB,WAAO,KAAKL,aAAa;EAC7B;AACJ;AA5BaD;AACT,cADSA,sBACMG;AADZ,IAAMH,sBAAN;;;ACJP,OAAOO,aAAyB;AAEhC,IAAMC,UAAUC,QAAQC,IAAIC,gBAAgB;AAC5C,IAAMC,MAAMH,QAAQC,IAAIG,YAAY;AAEpC,IAAMC,kBAA0C;EAC9CC,OAAO;EACPC,SAAS;EACTC,OAAO;EACPC,MAAM;EACNC,MAAM;EACNC,MAAM;EACNC,OAAO;AACT;AAEA,IAAMC,aAAaC,QAAQC,OAAOC,QAChCF,QAAQC,OAAOE,UAAU;EAAEF,QAAQ,8BAAM,oBAAIG,KAAAA,GAAOC,YAAW,GAA5B;AAA+B,CAAA,GAClEL,QAAQC,OAAOK,OAAO;EAAEC,OAAO;AAAK,CAAA,GACpCP,QAAQC,OAAOO,OAAO,CAACZ,SAAAA;AACrB,QAAMa,UAAU;IACdC,IAAId,KAAKO;IACTQ,OAAOf,KAAKe;IACZC,UAAUrB,gBAAgBK,KAAKe,KAAK,KAAKf,KAAKe;IAC9CE,SAASjB,KAAKiB;IACdC,SAAS7B;IACTE,KAAKE;IACL0B,cAAc7B,QAAQ8B,SAAS9B,QAAQ+B,KAAK,CAAA,KAAM;IAClDC,KAAKhC,QAAQgC;IACbC,QAAQjC,QAAQC,IAAIiC,aAAaC;IACjCC,SAAU1B,KAAa0B;IACvBC,QAAS3B,KAAa2B;IACtBC,OAAO5B,KAAK4B,SAAU5B,KAAa6B,QAAQJ;IAC3Cd,OAAOX,KAAKW;EACd;AACA,SAAOmB,KAAKC,UAAUlB,OAAAA;AACxB,CAAA,CAAA;AAGF,IAAMmB,aAAkC;EACtC,IAAI5B,QAAQ4B,WAAWC,QAAQ;IAC7BlB,OAAOzB,QAAQC,IAAI2C,aAAa;EAClC,CAAA;;AAGK,IAAMC,SAAiB/B,QAAQgC,aAAa;EACjDrB,OAAOzB,QAAQC,IAAI2C,aAAa;EAChC7B,QAAQF;EACR6B;EACAK,aAAa;AACf,CAAA;AAECF,OAAeG,SAAS;EACvBC,OAAO,wBAACtB,YAAoBkB,OAAOnC,KAAKiB,QAAQuB,KAAI,CAAA,GAA7C;AACT;;;ACrDO,SAASC,YAAYC,MAAY;AACpC,QAAMC,QAAQD,KAAKE,KAAI,EAAGC,MAAM,KAAA;AAEhC,MAAIF,MAAMG,SAAS,KAAKH,MAAMG,SAAS,GAAG;AACtC,WAAO;EACX;AAEA,QAAMC,WAAW;AACjB,SAAOJ,MAAMK,MAAM,CAACC,SAASF,SAASG,KAAKD,IAAAA,CAAAA;AAC/C;AATgBR;;;ACiBT,IAAeU,aAAf,MAAeA,WAAAA;;;;;;;;;;EAgBlB,YAAYC,aAAa,MAAM;AAC3B,UAAMC,OAAO,KAAK;AAClB,UAAMC,WAAWH,WAAUI,UAAUC,IAAIH,IAAAA;AACzC,QAAIC,UAAU;AACV,aAAOA;IACX;AAEAH,eAAUI,UAAUE,IAAIJ,MAAM,IAAI;AAElC,QAAID,YAAY;AACZ,WAAK,KAAKM,OAAM;IACpB;EACJ;;;;;;;;;;;;;EAcA,OAAiBC,eAEVC,MACF;AACD,QAAIC,WAAWV,WAAUI,UAAUC,IAAI,IAAI;AAC3C,QAAI,CAACK,UAAU;AACXA,iBAAW,IAAI,KAAI,GAAID,IAAAA;AACvBT,iBAAUI,UAAUE,IAAI,MAA6BI,QAAAA;IACzD;AACA,WAAOA;EACX;AAYJ;AAhEsBV;;;;;AAKlB,cALkBA,YAKHI,aAAY,oBAAIO,IAAAA;AAL5B,IAAeX,YAAf;;;ACdA,IAAMY,aAAN,MAAMA,WAAAA;EAiBT,YAAYC,QAAgBC,SAAkBC,WAAoB;AAb3DF;;;;AAMAE;;;;;AAKAD;;;;AAGH,SAAKD,SAASA;AACd,SAAKC,UAAUA;AACf,SAAKC,YAAYA,gCAAaC,UAAUC,YAAW,EAAGC,YAAW;EACrE;AACJ;AAtBaN;AAAN,IAAMA,YAAN;;;ACHA,IAAMO,cAAc;EACvB,GAAG;IAAEC,QAAQ;IAAKC,cAAc;MAAEC,IAAI;MAAQC,IAAI;IAAO;EAAE;EAC3D,GAAG;IAAEH,QAAQ;IAAMC,cAAc;MAAEC,IAAI;MAAYC,IAAI;IAAW;EAAE;EACpE,GAAG;IAAEH,QAAQ;IAAMC,cAAc;MAAEC,IAAI;MAAcC,IAAI;IAAW;EAAE;EACtE,GAAG;IAAEH,QAAQ;IAAKC,cAAc;MAAEC,IAAI;MAASC,IAAI;IAAO;EAAE;AAChE;;;ACLA,SAASC,cAAc;;;ACAvB,SACIC,YACAC,wBACAC,kBACAC,kBACAC,kBACAC,OACAC,cACG;;;ACPP,IAAMC,YAAY,CAAA;AAClB,SAASC,IAAI,GAAGA,IAAI,KAAK,EAAEA,GAAG;AAC1BD,YAAUE,MAAMD,IAAI,KAAOE,SAAS,EAAA,EAAIC,MAAM,CAAA,CAAA;AAClD;AACO,SAASC,gBAAgBC,KAAKC,SAAS,GAAC;AAC3C,UAAQP,UAAUM,IAAIC,SAAS,CAAA,CAAE,IAC7BP,UAAUM,IAAIC,SAAS,CAAA,CAAE,IACzBP,UAAUM,IAAIC,SAAS,CAAA,CAAE,IACzBP,UAAUM,IAAIC,SAAS,CAAA,CAAE,IACzB,MACAP,UAAUM,IAAIC,SAAS,CAAA,CAAE,IACzBP,UAAUM,IAAIC,SAAS,CAAA,CAAE,IACzB,MACAP,UAAUM,IAAIC,SAAS,CAAA,CAAE,IACzBP,UAAUM,IAAIC,SAAS,CAAA,CAAE,IACzB,MACAP,UAAUM,IAAIC,SAAS,CAAA,CAAE,IACzBP,UAAUM,IAAIC,SAAS,CAAA,CAAE,IACzB,MACAP,UAAUM,IAAIC,SAAS,EAAA,CAAG,IAC1BP,UAAUM,IAAIC,SAAS,EAAA,CAAG,IAC1BP,UAAUM,IAAIC,SAAS,EAAA,CAAG,IAC1BP,UAAUM,IAAIC,SAAS,EAAA,CAAG,IAC1BP,UAAUM,IAAIC,SAAS,EAAA,CAAG,IAC1BP,UAAUM,IAAIC,SAAS,EAAA,CAAG,GAAGC,YAAW;AAChD;AArBgBH;;;ACLhB,SAASI,sBAAsB;AAC/B,IAAMC,YAAY,IAAIC,WAAW,GAAA;AACjC,IAAIC,UAAUF,UAAUG;AACT,SAAf,MAAwBC;AACpB,MAAIF,UAAUF,UAAUG,SAAS,IAAI;AACjCE,mBAAeL,SAAAA;AACfE,cAAU;EACd;AACA,SAAOF,UAAUM,MAAMJ,SAAUA,WAAW,EAAA;AAChD;AANwBE;;;ACHxB,SAASG,kBAAkB;AAC3B,IAAA,iBAAe;EAAEA;AAAW;;;ACE5B,SAASC,GAAGC,SAASC,KAAKC,QAAM;AAHhC;AAII,MAAIC,eAAOC,cAAc,CAACH,OAAO,CAACD,SAAS;AACvC,WAAOG,eAAOC,WAAU;EAC5B;AACAJ,YAAUA,WAAW,CAAC;AACtB,QAAMK,QAAOL,mBAAQM,WAARN,aAAkBA,aAAQO,QAARP,qCAAlBA,YAAqCO,IAAAA;AAClD,MAAIF,KAAKG,SAAS,IAAI;AAClB,UAAM,IAAIC,MAAM,mCAAA;EACpB;AACAJ,OAAK,CAAA,IAAMA,KAAK,CAAA,IAAK,KAAQ;AAC7BA,OAAK,CAAA,IAAMA,KAAK,CAAA,IAAK,KAAQ;AAC7B,MAAIJ,KAAK;AACLC,aAASA,UAAU;AACnB,QAAIA,SAAS,KAAKA,SAAS,KAAKD,IAAIO,QAAQ;AACxC,YAAM,IAAIE,WAAW,mBAAmBR,MAAAA,IAAUA,SAAS,EAAA,0BAA4B;IAC3F;AACA,aAASS,IAAI,GAAGA,IAAI,IAAI,EAAEA,GAAG;AACzBV,UAAIC,SAASS,CAAAA,IAAKN,KAAKM,CAAAA;IAC3B;AACA,WAAOV;EACX;AACA,SAAOW,gBAAgBP,IAAAA;AAC3B;AAtBSN;AAuBT,IAAA,aAAeA;;;;;;;;;;;;;;AJZR,IAAec,eAAf,MAAeA,qBAAoBC,WAAAA;;EAmBtC,cAAc;AACV,UAAK;AAlBTC;AAIAC;AAGAC;AAGAC;AAIAC;;AAMI,SAAKJ,KAAK;AACV,SAAKC,OAAOI,WAAAA;AACZ,UAAMC,UAAU,oBAAIC,KAAAA;AACpB,SAAKL,aAAaI;AAClB,SAAKH,aAAaG;AAClB,SAAKF,aAAa;EACtB;AACJ;AA7B0CL;AAAnC,IAAeD,cAAf;;;;;;;IAIMU,QAAQ;;;IACPC,MAAM;IAAQC,SAAS,6BAAM,gCAAN;;;;;;IAGbD,MAAM;;;;;;IAGNA,MAAM;;;;;;IAINA,MAAM;IAAeE,UAAU;;;;;;AK7BvD,SAASC,cAAAA,aAAYC,qBAAqB;;;ACA1C,SAAwBC,UAAAA,eAAc;AAa/B,SAASC,gBAAgBC,UAAyB,CAAC,GAAC;AACvD,QAAMC,iBAAgC;IAClCC,MAAM;IACNC,UAAU;IACVC,SAAS,6BAAM,qBAAN;IACT,GAAGJ;EACP;AAEA,SAAOK,QAAOJ,cAAAA;AAClB;AATgBF;;;;;;;;;;;;;;ADAT,IAAeO,oBAAf,MAAeA,0BAAyBC,YAAAA;;EAU3C,YAAYC,WAAkB;AAC1B,UAAK;AARTA;;AAIAC;;AAKI,SAAKD,YAAYA,gCAAa,oBAAIE,KAAAA;AAElC,SAAKD,aAAa,oBAAIC,KAAAA;EAC1B;AACJ;AAhB+CH;AAAxC,IAAeD,mBAAf;;;IAEcK,MAAM;;;;;;;;;;AEf3B,SAASC,0BAAAA,yBAAwBC,UAAAA,SAAQC,cAAAA,aAAYC,aAAa;;;ACA3D,IAAKC,oBAAAA,0BAAAA,oBAAAA;;;;;;;AAOkG,EAAAA,mBAAAA,mBAAA,oBAAA,IAAA,CAAA,IAAA;SAPlGA;;;;ACAL,IAAKC,kBAAAA,0BAAAA,kBAAAA;;;;;;SAAAA;;;;ACAL,IAAKC,aAAAA,0BAAAA,aAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAAAA;;;;ACAL,IAAKC,eAAAA,0BAAAA,eAAAA;;;;;;SAAAA;;;;ACAL,IAAKC,gBAAAA,0BAAAA,gBAAAA;;;;SAAAA;;;;ACAL,IAAKC,kBAAAA,0BAAAA,kBAAAA;;;;;;;;;;;SAAAA;;;;;;;;;;;;;;;ANIZ,IAAMC,iBAAiBC,OAAOC,OAAOC,YAAAA,EAChCC,IAAI,CAACC,MAAM,IAAIA,CAAAA,GAAI,EACnBC,KAAK,GAAA;AAEH,IAAeC,wBAAf,MAAeA,8BAAoDC,YAAAA;EA6BtE,cAAc;AACV,UAAK;AA5BTC;AAQAC;AAqBI,SAAKD,KAAK;AACV,SAAKC,eAAeP,aAAaQ;EACrC;AACJ;AAlC0EH;AAAnE,IAAeD,uBAAf;;;;;;;IAKCK,MAAM;IACNC,QAAQ;IACRC,UAAU;;8BAEed,cAAAA,GAAgB;;;;;AOf1C,IAAee,YAAf,MAAeA,UAAAA;AAEtB;AAFsBA;AAAf,IAAeA,WAAf;;;;;;;;;;AfEA,IAAMC,YAAN,MAAMA,kBAAiBC,YAAAA;AAE9B;AAF8BA;AAAvB,IAAMD,WAAN;;;;;;AgBJP,SAASE,UAAAA,eAAc;;;;;;;;AAIhB,IAAMC,UAAN,MAAMA,gBAAeC,YAAAA;AAE5B;AAF4BA;AAArB,IAAMD,SAAN;;;;;;ACJP,SAASE,UAAAA,eAAc;;;;;;;;AAIhB,IAAMC,gBAAN,MAAMA,sBAAqBC,YAAAA;AAElC;AAFkCA;AAA3B,IAAMD,eAAN;;;;;;ACJP,SAASE,UAAAA,eAAc;;;;;;;;AAIhB,IAAMC,WAAN,MAAMA,iBAAgBC,YAAAA;AAE7B;AAF6BA;AAAtB,IAAMD,UAAN;;;;;;ACJP,SAASE,UAAAA,eAAc;;;;;;;;AAIhB,IAAMC,eAAN,MAAMA,qBAAoBC,YAAAA;AAEjC;AAFiCA;AAA1B,IAAMD,cAAN;;;;;;ACFA,IAAeE,cAAf,MAAeA,YAAAA;EAMlB,YAAYC,oBAAoB,MAAMC,WAA8B;AAL5DC;AACAC,wCAAyC;AAEvCF;AAGN,SAAKA,YAAYA;AACjB,QAAID,mBAAmB;AACnB,WAAKG,eAAe,KAAKC,mBAAkB;IAC/C;EACJ;EAEA,IAAcC,OAA6B;AACvC,WAAO,KAAKH;EAChB;EACA,IAAcG,KAAKC,OAAiB;AAChC,SAAKJ,QAAQI;EACjB;EAEA,IAAcC,cAAwC;AAClD,WAAO,KAAKJ;EAChB;EACA,IAAcI,YAAYD,OAAiC;AACvD,SAAKH,eAAeG;EACxB;EAEA,MAAaE,UAA6B;AAEtC,QAAI,KAAKL,cAAc;AACnB,aAAO,MAAM,KAAKA;IACtB;AAGA,QAAI,KAAKD,UAAUO,QAAW;AAC1B,WAAKN,eAAe,KAAKC,mBAAkB;AAC3C,aAAO,KAAKD;IAChB;AAGA,WAAO,KAAKD;EAChB;AAGJ;AA5CsBH;AAAf,IAAeA,aAAf;;;ACFP,SAAcW,mBAAmB;AA4B1B,IAAeC,YAAf,MAAeA,kBAA2BC,UAAAA;;;;;;;;;;;;;;;EAgC7C,YAAYC,SAAiBC,gBAAwBC,YAAqB;AAEtE,UAAM,KAAA;AAhCFC;;AAWAC;;;;;;;;;;AAGAC;gCAAmB;AAmBvB,SAAKF,WAAWH;AAGhB,QAAI,CAACM,YAAYL,cAAAA,GAAiB;AAC9B,YAAM,IAAIM,MACN,OAAO,KAAKP,OAAO,8CAA8CC,cAAAA,GAAiB;IAE1F;AAGA,SAAKG,kBAAkBH;AAEvB,QAAIC,YAAY;AACZ,WAAKG,OAAOG,YACR;QAAEC,MAAM,KAAKL;QAAiBM,IAAI;MAAgB,GAClD,YAAA;AACI,cAAM,KAAKC,OAAM;MACrB,CAAA;AAGJ,UAAI,CAAC,KAAKN,MAAM;AACZ,cAAM,IAAIE,MAAM,OAAO,KAAKJ,QAAQ,yBAAyB;MACjE;IACJ;AAEA,SAAKS,OAAM;EACf;;;;;;;;;;EAWUA,OAAOC,aAA6B;AAC1CC,YAAQC,IACJ,OAAO,KAAKf,OAAO,IAAIa,cAAc,gBAAgB,aAAA,qBAAkC,KAAKZ,cAAc,GAAG;EAErH;;EAGA,IAAWD,UAAkB;AACzB,WAAO,KAAKG;EAChB;;EAGA,IAAcH,QAAQgB,OAAe;AACjC,SAAKb,WAAWa;EACpB;;EAGA,IAAWf,iBAAyB;AAChC,WAAO,KAAKG;EAChB;;;;;EAMA,IAAcH,eAAee,OAAe;AACxC,QAAI,CAACV,YAAYU,KAAAA,GAAQ;AACrB,YAAM,IAAIT,MACN,OAAO,KAAKJ,QAAQ,+CAA+Ca,KAAAA,GAAQ;IAEnF;AAEA,SAAKZ,kBAAkBY;EAC3B;;EAGA,IAAcC,MAAkB;AAC5B,WAAO,KAAKZ;EAChB;;EAGA,IAAcY,IAAID,OAAmB;AACjC,SAAKX,OAAOW;EAChB;EAEUE,WAAWC,mBAA2B;AAC5C,QAAIC,SAAS;AAEb,QAAI,CAACd,YAAYa,iBAAAA,GAAoB;AACjC,YAAM,IAAIZ,MACN,OAAO,KAAKJ,QAAQ,+CAA+CgB,iBAAAA,GAAoB;IAE/F;AAEA,SAAKf,kBAAkBe;AAEvB,QAAI,KAAKd,MAAM;AACX,YAAMgB,oBAAoB,KAAKhB,KAAKa,WAAW;QAC3CT,MAAM,KAAKL;QACXM,IAAI;MACR,CAAA;AACA,UAAI,CAACW,mBAAmB;AACpB,cAAM,IAAId,MAAM,OAAO,KAAKJ,QAAQ,4BAA4B;MACpE,OAAO;AACH,aAAKS,OAAO,IAAA;MAChB;AAEAQ,eAASC;IACb;AAEA,WAAOD;EACX;AAWJ;AA1JiDrB;AAA1C,IAAeD,WAAf;;;ACzBA,IAAMwB,YAAN,MAAMA,kBAAiBC,MAAAA;EAa1B,YAAYC,YAAoBC,QAAgBC,QAAiB;AAC7D,UAAK;AAbDC;AAMAC;AAQJ,SAAKD,cAAcH;AACnB,SAAKI,aAAa,IAAIC,UAAUJ,QAAQC,MAAAA;EAC5C;EAdA,IAAWF,aAAqB;AAC5B,WAAO,KAAKG;EAChB;EAIA,IAAWG,YAAiB;AACxB,WAAO,KAAKF;EAChB;AAOJ;AAlB8BL;AAAvB,IAAMD,WAAN;;;ACHP,OAAOS,cAAc;AACrB,OAAOC,0BAA0B;AACjC,OAAOC,0BAA0B;AAEjC,IAAMC,sBAAsB;EACxB;;IAEI,GAAGD;;IAGHE,OAAO;MAAC;MAAW;;IACnBC,SAAS;MACL;MACA;MACA;MACA;MACA;MACA;MACA;;IAGJC,iBAAiB;MACbC,QAAQP,SAASO;MACjBC,aAAa;MACbC,YAAY;IAChB;;IAGAC,SAAS;MACL,sBAAsBV,SAASW;MAC/BC,UAAUX;IACd;IAEAY,OAAO;;;MAGH,gBAAgB;;MAGhBC,MAAM;QAAC;QAAS;;MAEhB,2BAA2B;QAAC;QAAS;UAAEC,KAAK;QAAE;;;MAG9CC,MAAM;QAAC;QAAS;;;MAGhBC,OAAO;QAAC;QAAS;;;MAGjB,wBAAwB;QAAC;QAAS;;;MAGlC,mBAAmB;;MAGnB,wBAAwB;;MAGxB,kBAAkB;QAAC;QAAS;;;MAG5B,6BAA6B;;MAG7B,kBAAkB;;MAGlBC,QAAQ;QAAC;QAAS;;;MAGlB,qBAAqB;QACjB;QACA;;UAEIC,YAAY;;UAGZC,UAAU;UACVC,SAAS;;UAGTL,MAAM;;UAGNM,aAAa;;UAGbC,eAAe;;UAGfC,gBAAgB;;UAGhBC,WAAW;QACf;;;MAIJ,wCAAwC;QACpC;QACA;UACIC,UAAU;YAAC;YAAY;;UACvBC,QAAQ;YAAC;;UACTC,mBAAmB;QACvB;QACA;UACIF,UAAU;UACVC,QAAQ;YAAC;;QACb;QACA;UACID,UAAU;UACVG,WAAW;YAAC;YAAS;;UACrBF,QAAQ;YAAC;YAAc;;QAC3B;QACA;UACID,UAAU;UACVG,WAAW;YAAC;;UACZF,QAAQ;YAAC;;QACb;;IAER;EACJ;;AAGJ,IAAA,wBAAexB;;;ACxHf,oBAAuB;AALvB,OAAO2B,UAAU;AAGjB,SAASC,2BAA2B;IAGpCC,sBAAAA;AAEA,IAAMC,WAAWC,QAAQC,IAAG;AAC5B,IAAMC,OAAOF,QAAQG,IAAIC,UAAU;AAUnC,IAAMC,yBAA4C;EAC9CC,iBAAiB;EACjBC,MAAM;EACNC,MAAM;EACNC,MAAMT,QAAQG,IAAIO,oBAAoB;EACtCC,MAAMC,OAAOZ,QAAQG,IAAIU,oBAAoB,MAAA;EAC7CC,UAAUd,QAAQG,IAAIY,oBAAoB;EAC1CC,UAAUhB,QAAQG,IAAIc,wBAAwB;EAC9CC,UAAUlB,QAAQG,IAAIgB,wBAAwB;EAC9CC,QAAQpB,QAAQG,IAAIkB,sBAAsB;EAC1CC,UAAU;IAAC1B,KAAK2B,KAAKxB,UAAUG,OAAO,yBAAyB,mBAAA;;EAC/DsB,YAAY;IAAC5B,KAAK2B,KAAKxB,UAAUG,OAAO,4BAA4B,sBAAA;;EACpEuB,eAAezB,QAAQG,IAAIuB,mBAAmB;EAC9CC,qBAAqB;EACrBC,2BAA2B;EAC3BC,aAAa;EACbC,SAAS;EACTC,OAAO;IACHC,iBAAiB;EACrB;EACAC,QAAQ;EACRC,OAAO;EACPC,gBAAgB,IAAItC,oBAAAA;AAExB;AAEA,IAAA,qBAAeQ;","names":["fs","require","path","os","crypto","packageJson","version","LINE","parse","src","obj","lines","toString","replace","match","exec","key","value","trim","maybeQuote","_parseVault","options","vaultPath","_vaultPath","result","DotenvModule","configDotenv","parsed","err","Error","code","keys","_dotenvKey","split","length","decrypted","i","attrs","_instructions","decrypt","ciphertext","error","_warn","message","console","log","_debug","_log","DOTENV_KEY","process","env","dotenvKey","uri","URL","password","environment","searchParams","get","environmentKey","toUpperCase","possibleVaultPath","Array","isArray","filepath","existsSync","endsWith","resolve","cwd","_resolveHome","envPath","join","homedir","slice","_configVault","debug","Boolean","quiet","processEnv","populate","dotenvPath","encoding","optionPaths","push","lastError","parsedAll","readFileSync","e","keysCount","Object","shortPaths","filePath","relative","config","encrypted","keyStr","Buffer","from","nonce","subarray","authTag","aesgcm","createDecipheriv","setAuthTag","update","final","isRange","RangeError","invalidKeyLength","decryptionFailed","override","prototype","hasOwnProperty","call","module","exports","dayjs","utc","timezone","isBetween","customParseFormat","dayjs","extend","utc","timezone","isBetween","customParseFormat","DateUtils","fromISOtoSQLtimestamp","ts","format","toSQLtimestamp","fromSQLtimestamp","mysqlDate","getSqlTimestampFromNowCzech","getNowCzech","fromISO","isoDate","getDate","getNow","tz","clone","getLastSunday","weeksOffset","now","date","day","hour","minute","second","millisecond","dayInWeek","input","isWorkdayDay","weekDay","get","set","HOLIDAYS","includes","valueOf","getDiffInMinutesWithNow","inputTime","diffInMinutes","diff","isInLastDays","numOfDays","timestampInput","timestamp","dateLimit","subtract","isAfter","HOLIDAYS_STR","map","h","Date","setUTCHours","getTime","createDeferred","resolve","reject","promise","Promise","res","rej","SinglePromiseWaiter","_promise","getInstance","_instance","promise","finally","hasPromise","winston","SERVICE","process","env","SERVICE_NAME","ENV","NODE_ENV","levelToSeverity","silly","verbose","debug","http","info","warn","error","baseFormat","winston","format","combine","timestamp","Date","toISOString","errors","stack","printf","payload","ts","level","severity","message","service","process_name","title","argv","pid","device","DEVICE_ID","undefined","traceId","spanId","extra","meta","JSON","stringify","transports","Console","LOG_LEVEL","logger","createLogger","exitOnError","stream","write","trim","isValidCron","expr","parts","trim","split","length","cronPart","every","part","test","Singleton","callOnInit","ctor","existing","instances","get","set","onInit","getInstance","args","instance","Map","StatusDto","status","details","timestamp","DateUtils","getNowCzech","toISOString","AMOUNT_UNIT","symbol","translations","en","cs","Entity","BaseEntity","PrimaryGeneratedColumn","CreateDateColumn","UpdateDateColumn","DeleteDateColumn","Index","Column","byteToHex","i","push","toString","slice","unsafeStringify","arr","offset","toLowerCase","randomFillSync","rnds8Pool","Uint8Array","poolPtr","length","rng","randomFillSync","slice","randomUUID","v4","options","buf","offset","native","randomUUID","rnds","random","rng","length","Error","RangeError","i","unsafeStringify","FreshEntity","BaseEntity","id","uuid","created_at","updated_at","deleted_at","uuidv4","newDate","Date","unique","type","default","nullable","BaseEntity","PrimaryColumn","Column","TimestampColumn","options","defaultOptions","type","nullable","default","Column","FreshHyperEntity","BaseEntity","timestamp","created_at","Date","type","PrimaryGeneratedColumn","Column","BaseEntity","Check","ActionCommandCode","DepotPoolStatus","HttpStatus","LanguageCode","PaymentMethod","TransactionType","languageValues","Object","values","LanguageCode","map","v","join","FreshTranslationBase","BaseEntity","id","languageCode","CS","type","length","nullable","FreshDao","Category","FreshEntity","Entity","Device","FreshEntity","Entity","Manufacturer","FreshEntity","Entity","Product","FreshEntity","Entity","Subcategory","FreshEntity","DataHelper","startDataRetrieve","deviceIds","_data","_dataPromise","startDataRetrieval","data","value","dataPromise","getData","undefined","scheduleJob","FreshJob","Singleton","jobName","cronExpression","jobEnabled","_jobName","_cronExpression","_job","isValidCron","Error","scheduleJob","rule","tz","invoke","onInit","rescheduled","console","log","value","job","reschedule","newCronExpression","result","rescheduleSuccess","ApiError","Error","statusCode","status","detail","_statusCode","_statusDto","StatusDto","statusDto","tseslint","eslintPluginPrettier","eslintConfigPrettier","FRESH_ESLINT_CONFIG","files","ignores","languageOptions","parser","ecmaVersion","sourceType","plugins","plugin","prettier","rules","yoda","max","semi","curly","eqeqeq","printWidth","tabWidth","useTabs","singleQuote","trailingComma","bracketSpacing","endOfLine","selector","format","leadingUnderscore","modifiers","path","SnakeNamingStrategy","config","basePath","process","cwd","isTs","env","LOCAL","PG_DATA_SOURCE_OPTIONS","applicationName","name","type","host","POSTGRE_SQL_HOST","port","Number","POSTGRE_SQL_PORT","username","POSTGRE_SQL_USER","password","POSTGRE_SQL_PASSWORD","database","POSTGRE_SQL_DATABASE","schema","POSTGRE_SQL_SCHEMA","entities","join","migrations","migrationsRun","RUN_MIGRATIONS","migrationsTableName","migrationsTransactionMode","synchronize","logging","extra","connectionLimit","useUTC","cache","namingStrategy"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@freshpointcz/fresh-core",
3
- "version": "0.0.12",
3
+ "version": "0.0.14",
4
4
  "description": "Contains core mechanisms for our custom framework",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",