@freshpointcz/fresh-core 0.0.12 → 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/dotenv/package.json","../../../node_modules/dotenv/lib/main.js","../src/index.ts","../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","export * from \"./common\";\r\nexport * from \"./core\";\r\nexport * from \"./types\";\r\nexport * from \"./database\";\r\nexport * from \"./config\";\r\nexport * from \"./enums\";\r\nexport * from \"./interfaces\";\r\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":["exports","module","exports","module","path","config","dayjs","utc","timezone","isBetween","customParseFormat","winston","import_typeorm","import_crypto","import_typeorm","import_typeorm","import_typeorm","ActionCommandCode","DepotPoolStatus","HttpStatus","LanguageCode","PaymentMethod","TransactionType","import_typeorm","import_typeorm","import_typeorm","import_typeorm","eslintConfigPrettier","tseslint","eslintPluginPrettier","path"]}
1
+ {"version":3,"sources":["../../../node_modules/dotenv/package.json","../../../node_modules/dotenv/lib/main.js","../src/index.ts","../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","export * from \"./common\";\r\nexport * from \"./core\";\r\nexport * from \"./types\";\r\nexport * from \"./database\";\r\nexport * from \"./config\";\r\nexport * from \"./enums\";\r\nexport * from \"./interfaces\";\r\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 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 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\", \"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":"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","names":["exports","module","exports","module","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","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","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","ctor","existing","instances","get","set","getInstance","args","instance","Map","StatusDto","status","details","timestamp","DateUtils","getNowCzech","toISOString","AMOUNT_UNIT","symbol","translations","en","cs","import_typeorm","byteToHex","i","push","toString","slice","unsafeStringify","arr","offset","toLowerCase","rnds8Pool","Uint8Array","poolPtr","length","rng","randomFillSync","slice","import_crypto","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","import_typeorm","import_typeorm","TimestampColumn","options","defaultOptions","type","nullable","default","Column","FreshHyperEntity","BaseEntity","timestamp","created_at","Date","type","import_typeorm","ActionCommandCode","DepotPoolStatus","HttpStatus","LanguageCode","PaymentMethod","TransactionType","languageValues","Object","values","LanguageCode","map","v","join","FreshTranslationBase","BaseEntity","id","languageCode","CS","type","length","nullable","FreshDao","Category","FreshEntity","import_typeorm","Device","FreshEntity","import_typeorm","Manufacturer","FreshEntity","import_typeorm","Product","FreshEntity","import_typeorm","Subcategory","FreshEntity","DataHelper","startDataRetrieve","deviceIds","_data","_dataPromise","startDataRetrieval","data","value","dataPromise","getData","undefined","FreshJob","Singleton","jobName","cronExpression","jobEnabled","_jobName","_cronExpression","_job","isValidCron","Error","scheduleJob","rule","tz","invoke","onInit","rescheduled","console","log","value","job","ApiError","Error","statusCode","status","detail","_statusCode","_statusDto","StatusDto","statusDto","FRESH_ESLINT_CONFIG","eslintConfigPrettier","files","ignores","languageOptions","parser","tseslint","ecmaVersion","sourceType","plugins","plugin","prettier","eslintPluginPrettier","rules","yoda","max","semi","curly","eqeqeq","printWidth","tabWidth","useTabs","singleQuote","trailingComma","bracketSpacing","endOfLine","selector","format","leadingUnderscore","modifiers","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","path","join","migrations","migrationsRun","RUN_MIGRATIONS","migrationsTableName","migrationsTransactionMode","synchronize","logging","extra","connectionLimit","useUTC","cache","namingStrategy","SnakeNamingStrategy"]}