@synergy-server/core 1.2.0 → 1.2.1

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/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEY;;AAEZ,aAAa,mBAAO,CAAC,4BAAW;AAChC,cAAc,mBAAO,CAAC,wBAAS;AAC/B;AACA;AACA;AACA;;AAEA,cAAc;AACd,kBAAkB;AAClB,yBAAyB;;AAEzB;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,wCAAwC,SAAS;AACjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;;AAEA;AACA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iDAAiD,EAAE;AACnD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB,eAAe;AACxC;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,yBAAyB,QAAQ;AACjC;AACA,sBAAsB,eAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,YAAY;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AA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","sources":["webpack://@synergy-server/core/./node_modules/buffer/index.js","webpack://@synergy-server/core/./src/core/accessLogs/controllers/index.ts","webpack://@synergy-server/core/./src/core/accessLogs/routes/index.ts","webpack://@synergy-server/core/./src/core/app/controllers/index.ts","webpack://@synergy-server/core/./src/core/app/routes/index.ts","webpack://@synergy-server/core/./src/core/auth/autoLoginAuth.ts","webpack://@synergy-server/core/./src/core/auth/controllers/index.ts","webpack://@synergy-server/core/./src/core/auth/cryptoGen.ts","webpack://@synergy-server/core/./src/core/auth/passportAuth.ts","webpack://@synergy-server/core/./src/core/auth/routes/index.ts","webpack://@synergy-server/core/./src/core/auth/session.ts","webpack://@synergy-server/core/./src/core/objects/controllers.ts","webpack://@synergy-server/core/./src/core/objects/index.ts","webpack://@synergy-server/core/./src/core/objects/routes.ts","webpack://@synergy-server/core/./src/core/reports/controllers/index.ts","webpack://@synergy-server/core/./src/core/reports/controllers/virtualTables.ts","webpack://@synergy-server/core/./src/core/reports/routes/index.ts","webpack://@synergy-server/core/./src/core/services/accessLogger.service.ts","webpack://@synergy-server/core/./src/core/services/app.service.ts","webpack://@synergy-server/core/./src/core/services/common.service.ts","webpack://@synergy-server/core/./src/core/services/commonCommands.service.ts","webpack://@synergy-server/core/./src/core/services/controller.service.ts","webpack://@synergy-server/core/./src/core/services/dataProcessor.service.ts","webpack://@synergy-server/core/./src/core/services/document.service.ts","webpack://@synergy-server/core/./src/core/services/event.service.ts","webpack://@synergy-server/core/./src/core/services/eventSubscription.service.ts","webpack://@synergy-server/core/./src/core/services/license.service.ts","webpack://@synergy-server/core/./src/core/services/logger.service.ts","webpack://@synergy-server/core/./src/core/services/migration.service.ts","webpack://@synergy-server/core/./src/core/services/multiType.service.ts","webpack://@synergy-server/core/./src/core/services/objectVersions.service.ts","webpack://@synergy-server/core/./src/core/services/register.service.ts","webpack://@synergy-server/core/./src/core/services/reportToExcel.service.ts","webpack://@synergy-server/core/./src/core/services/reportToPdf.service.ts","webpack://@synergy-server/core/./src/core/services/restApi.service.ts","webpack://@synergy-server/core/./src/core/services/rotatingStream.service.ts","webpack://@synergy-server/core/./src/core/services/scheduledJob.service.ts","webpack://@synergy-server/core/./src/core/services/security.service.ts","webpack://@synergy-server/core/./src/core/services/seeder.service.ts","webpack://@synergy-server/core/./src/core/services/sms.service.ts","webpack://@synergy-server/core/./src/core/services/userAccess.service.ts","webpack://@synergy-server/core/./src/core/services/userRights.service.ts","webpack://@synergy-server/core/./src/core/services/workers.service.ts","webpack://@synergy-server/core/./src/core/sms/controllers/index.ts","webpack://@synergy-server/core/./src/core/sms/routes/index.ts","webpack://@synergy-server/core/./src/database/config.ts","webpack://@synergy-server/core/./src/database/dbConnection.ts","webpack://@synergy-server/core/./src/main.ts","webpack://@synergy-server/core/./src/middleware/accessRights.ts","webpack://@synergy-server/core/./src/middleware/fileUpload.ts","webpack://@synergy-server/core/./src/routes/dynamicRoutes.ts","webpack://@synergy-server/core/./src/routes/index.ts","webpack://@synergy-server/core/./src/routes/staticRoutes.ts","webpack://@synergy-server/core/external commonjs \"base64-js\"","webpack://@synergy-server/core/external commonjs \"bcrypt\"","webpack://@synergy-server/core/external commonjs \"compression\"","webpack://@synergy-server/core/external commonjs \"connect-session-sequelize\"","webpack://@synergy-server/core/external commonjs \"cookie-parser\"","webpack://@synergy-server/core/external commonjs \"cors\"","webpack://@synergy-server/core/external node-commonjs \"crypto\"","webpack://@synergy-server/core/external commonjs \"crypto-js\"","webpack://@synergy-server/core/external commonjs \"dotenv/config\"","webpack://@synergy-server/core/external commonjs \"events\"","webpack://@synergy-server/core/external commonjs \"exceljs\"","webpack://@synergy-server/core/external commonjs \"express\"","webpack://@synergy-server/core/external commonjs \"express-rate-limit\"","webpack://@synergy-server/core/external commonjs \"express-session\"","webpack://@synergy-server/core/external node-commonjs \"fs\"","webpack://@synergy-server/core/external commonjs \"helmet\"","webpack://@synergy-server/core/external commonjs \"http-status-codes\"","webpack://@synergy-server/core/external commonjs \"ieee754\"","webpack://@synergy-server/core/external commonjs \"jsonwebtoken\"","webpack://@synergy-server/core/external commonjs \"lodash\"","webpack://@synergy-server/core/external commonjs \"moment\"","webpack://@synergy-server/core/external commonjs \"morgan\"","webpack://@synergy-server/core/external commonjs \"multer\"","webpack://@synergy-server/core/external commonjs \"node-cron\"","webpack://@synergy-server/core/external commonjs \"node-sql-parser\"","webpack://@synergy-server/core/external commonjs \"nodemailer\"","webpack://@synergy-server/core/external commonjs \"passport\"","webpack://@synergy-server/core/external commonjs \"passport-local\"","webpack://@synergy-server/core/external node-commonjs \"path\"","webpack://@synergy-server/core/external commonjs \"pdfmake\"","webpack://@synergy-server/core/external commonjs \"sequelize\"","webpack://@synergy-server/core/external commonjs \"ssf\"","webpack://@synergy-server/core/external commonjs \"terser\"","webpack://@synergy-server/core/external commonjs \"uuid\"","webpack://@synergy-server/core/external commonjs \"winston\"","webpack://@synergy-server/core/webpack/bootstrap","webpack://@synergy-server/core/webpack/before-startup","webpack://@synergy-server/core/webpack/startup","webpack://@synergy-server/core/webpack/after-startup"],"sourcesContent":["/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n var arr = new Uint8Array(1)\n var proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n var buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n var valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n var b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(\n value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n )\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n var length = byteLength(string, encoding) | 0\n var buf = createBuffer(length)\n\n var actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n var buf = createBuffer(length)\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n var copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n var buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n var buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n Buffer.from(buf).copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n var len = string.length\n var mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n var strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (var i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n var len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nvar hexSliceLookupTable = (function () {\n var alphabet = '0123456789abcdef'\n var table = new Array(256)\n for (var i = 0; i < 16; ++i) {\n var i16 = i * 16\n for (var j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n","import path from 'path'\nimport fs from 'fs'\nimport moment from 'moment'\nimport logger from '@/core/services/logger.service'\nimport { Request, Response } from 'express'\nimport { Pagination, Sort } from '@/src/types'\n\nconst directoryPath = `${process.cwd()}/logs/access`\n\ninterface Filter {\n period?: [string, string]\n searchFilter?: Record<string, any>\n searchStr?: {\n searchText: string\n searchColumns: string[]\n }\n}\n\ninterface PaginatedResult<T> {\n totalItems: number\n currentPage: number\n data: T[]\n}\n\nexport const accessLogsController = {\n async getFilesInfo(req: Request, res: Response): Promise<void> {\n try {\n const filter: Filter = JSON.parse((req.query.filter as string) || '{}')\n const pagination: Pagination = JSON.parse((req.query.pagination as string) || '{}')\n const sort: Sort = JSON.parse((req.query.sort as string) || '{}')\n\n if (!filter.period) {\n res.status(400).send({ message: 'Period filter is required' })\n return\n }\n\n const startDate = moment(filter.period[0]).format('YYYYMMDD')\n const endDate = moment(filter.period[1]).format('YYYYMMDD')\n\n const files = await readDirectory(directoryPath)\n\n if (!files || files.length === 0) {\n res.status(404).send({ message: 'No log files found' })\n return\n }\n\n const filesInPeriod = filterFilesByPeriod(files, startDate, endDate)\n\n if (filesInPeriod.length === 0) {\n res.status(404).send({ message: 'No log files found for the specified period' })\n return\n }\n\n let result: any[] | PaginatedResult<any> = []\n for (const file of filesInPeriod) {\n const filePath = path.join(directoryPath, file)\n const fileRows = await getFileRows(filePath, filter.searchFilter)\n result.push(...fileRows)\n }\n\n if (filter.searchStr) {\n result = filterBySearch(result, filter.searchStr.searchText, filter.searchStr.searchColumns)\n }\n\n if (Array.isArray(sort)) {\n for (const s of sort) {\n if (s.sortBy) {\n result = sortByColumn(result, s.sortBy, s.sortDesc)\n }\n }\n } else {\n if (sort.sortBy) {\n result = sortByColumn(result, sort.sortBy, sort.sortDesc)\n }\n }\n\n result = paginateArray(result, pagination.limit, pagination.page)\n\n res.status(200).send(result)\n } catch (error) {\n logger.error('Error in accessLogsController.getFilesInfo', { meta: error })\n res.status(500).send({ message: 'Internal server error' })\n }\n },\n}\n\nasync function readDirectory(directoryPath: string): Promise<string[]> {\n return new Promise((resolve, reject) => {\n fs.readdir(directoryPath, (err, files) => {\n if (err) {\n return reject(new Error(`Failed to read directory: ${directoryPath}`))\n }\n resolve(files)\n })\n })\n}\n\nfunction filterFilesByPeriod(files: string[], startDate: string, endDate: string): string[] {\n return files.filter((file) => {\n const fileBirthtime = file.slice(0, 8)\n return fileBirthtime === startDate || fileBirthtime === endDate || (fileBirthtime > startDate && fileBirthtime < endDate)\n })\n}\n\nasync function getFileRows(filePath: string, searchFilter?: Record<string, any>): Promise<any[]> {\n try {\n const data = fs.readFileSync(filePath, 'utf8')\n const fileRows = data.split(/\\r?\\n/)\n const parsedRows: any[] = []\n\n for (const fileRow of fileRows) {\n if (fileRow.trim() !== '') {\n const parsedRow = JSON.parse(fileRow)\n if (searchFilter) {\n let allMatch = true\n for (const key in searchFilter) {\n if (key === 'user') {\n if (parsedRow[key]?.id !== searchFilter[key]?.id) {\n allMatch = false\n break\n }\n } else {\n if (parsedRow[key] !== searchFilter[key]) {\n allMatch = false\n break\n }\n }\n }\n if (allMatch) {\n parsedRows.push(parsedRow)\n }\n } else {\n parsedRows.push(parsedRow)\n }\n }\n }\n\n return parsedRows\n } catch (error) {\n throw new Error(`Failed to process file: ${filePath}. Error: ${error.message}`)\n }\n}\n\nfunction paginateArray<T>(arr: T[], limit: number, pageNumber: number): PaginatedResult<T> {\n const startIndex = (pageNumber - 1) * limit\n const endIndex = startIndex + limit\n\n const pageData = arr.slice(startIndex, endIndex)\n\n return {\n totalItems: arr.length,\n currentPage: pageNumber,\n data: pageData,\n }\n}\n\nfunction sortByColumn<T>(arr: T[], column: keyof T, sortDesc: boolean): T[] {\n const sortedArray = arr.slice()\n\n sortedArray.sort((a, b) => {\n const aValue = a[column]\n const bValue = b[column]\n\n if (sortDesc) {\n if (aValue > bValue) return -1\n if (aValue < bValue) return 1\n } else {\n if (aValue < bValue) return -1\n if (aValue > bValue) return 1\n }\n\n return 0\n })\n\n return sortedArray\n}\n\nfunction filterBySearch<T>(arr: T[], searchText: string, searchColumns: string[]): T[] {\n const searchValue = searchText.replace(/\\s/g, '').replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n const regex = new RegExp(searchValue, 'i')\n\n return arr.filter((item) => {\n let foundMatch = false\n for (const column of searchColumns) {\n const splitArray = column.split('.')\n if (splitArray.length > 1) {\n if (item[splitArray[0]]) {\n if (item[splitArray[0]][splitArray[1]] && deepSearch(item[splitArray[0]][splitArray[1]], regex)) {\n foundMatch = true\n break\n }\n }\n } else {\n if (item[column] && deepSearch(item[column], regex)) {\n foundMatch = true\n break\n }\n }\n }\n return foundMatch\n })\n}\n\nfunction deepSearch(value: string, regex: RegExp): boolean {\n if (value && typeof value === 'object') {\n const stringObj = JSON.stringify(value)\n if (stringObj.match(regex)) {\n return true\n }\n } else if (value && value.toString().replace(/\\s/g, '').match(regex)) {\n return true\n }\n return false\n}\n","import express, { Router } from 'express'\nimport { accessLogsController } from '../controllers/index'\nimport accessRights from '@/middleware/accessRights'\n\nconst router: Router = express.Router()\n\nrouter.get('/access_log', accessRights.canRead({ key: 'access_logs' }), accessLogsController.getFilesInfo)\n\nexport default router\n","import sequelize from '@/database/dbConnection'\nimport { QueryTypes } from 'sequelize'\nimport { StatusCodes } from 'http-status-codes'\nimport { Parser } from 'node-sql-parser'\nimport logger from '@/core/services/logger.service'\nimport { Op, ModelStatic, Model } from 'sequelize'\nimport fs from 'fs'\nimport { promises as fsp } from 'fs'\nimport path from 'path'\nimport cryptoJs from 'crypto-js'\nimport { minify } from 'terser'\nimport eventSubscriptionsService from '@/core/services/eventSubscription.service'\nimport commonCommandsService from '@/core/services/commonCommands.service'\n\nconst packagePath = path.resolve(process.cwd(), 'package.json')\n\nif (!fs.existsSync(packagePath)) {\n throw new Error(`native package.json not found at ${packagePath}`)\n}\n\nconst serverPackage = __non_webpack_require__(packagePath)\n\nimport AppService from '@/core/services/app.service'\n\nimport commonService from '@/core/services/common.service'\nimport userAccessService from '@/core/services/userAccess.service'\n\nimport { Request, Response, NextFunction } from 'express'\nimport { AppObjectField } from '@/src/types'\n\ninterface TableNameModel {\n tableName: string\n model: string\n}\n\nexport default {\n async getAppInfo(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const info = {\n appName: 'SynergyCore',\n company: 'INTELEKTSOFT',\n serverVersion: serverPackage?.version || '0.0.0',\n }\n\n res.status(200).send(info)\n },\n\n async getObjectMetadata(req: Request, res: Response, next: NextFunction): Promise<void> {\n const { objectType, tableName } = req.query\n\n const withTableParts: boolean = JSON.parse((req.query.withTableParts as string) || 'false')\n\n let Model: ModelStatic<Model<any, any>> | undefined\n if (objectType) {\n Model = sequelize.models[objectType as string]\n } else {\n Object.keys(sequelize.models).forEach((key) => {\n let table = sequelize.models[key].getTableName()\n if (table === tableName) {\n Model = sequelize.models[key]\n }\n })\n }\n\n if (!Model) {\n console.error('Model not found: ', objectType)\n res.status(400).send({ message: 'Model not found' })\n return\n }\n\n let attributes: Record<string, any>[] = []\n let associations: Record<string, any>[] = []\n let noConstrainAssociations: Record<string, any>[] = []\n\n Object.keys(Model.associations).forEach((key) => {\n const currAssociation: any = Model!.associations[key]\n\n if (currAssociation.isMultiAssociation === true) {\n return\n }\n\n const association: Record<string, any> = {\n name: key,\n foreignKey: currAssociation.foreignKey,\n ref: '',\n modelName: currAssociation.target.name,\n }\n\n if (Object.prototype.hasOwnProperty.call(currAssociation.target, 'options')) {\n if (currAssociation.target.options.namespace) {\n association.ref = currAssociation.target.options.namespace\n } else {\n const pluralName = currAssociation.target.options.name.plural\n association.ref = pluralName.charAt(0).toLowerCase() + pluralName.slice(1)\n }\n }\n\n const targetAttribs = currAssociation.target.rawAttributes\n\n if (targetAttribs.presentation?._sortBy) {\n association.sortBy = targetAttribs.presentation._sortBy\n } else {\n association.sortBy = 'createdAt'\n }\n\n if (currAssociation.options.constraints === false) {\n noConstrainAssociations.push(association)\n } else {\n associations.push(association)\n }\n })\n\n const skipTypeFields: any[] = []\n\n for (let key in Model.getAttributes()) {\n if (skipTypeFields.includes(key)) {\n continue\n }\n\n const modelAttrib = Model.getAttributes()[key]\n let attrib = assembleAttrib(modelAttrib, key)\n\n let association: Record<string, any> | undefined\n association = associations.find((el) => {\n return el.foreignKey === key\n })\n\n if (!association) {\n association = noConstrainAssociations.filter((el) => {\n return el.foreignKey === key\n })\n if (association.length === 0) {\n association = undefined\n }\n }\n\n if (association) {\n if (Array.isArray(association)) {\n const name = key.endsWith('Id') ? key.slice(0, -2) : key\n const typeFieldName = name + 'Type'\n\n let typeField = attributes.find((obj) => {\n return obj.name === typeFieldName\n })\n if (typeField) {\n const index = attributes.findIndex((obj) => obj === typeField)\n attributes.splice(index, 1)\n } else {\n skipTypeFields.push(typeFieldName)\n }\n\n for (const el of association) {\n const index = attributes.findIndex((obj) => obj.name === name)\n if (index !== -1) {\n attributes[index].ref.push(el.ref)\n attributes[index].model.push(el.modelName)\n } else {\n attrib.name = name\n attrib.ref = [el.ref]\n attrib.model = [el.modelName]\n attrib.fieldPath = key\n attrib.fieldTypePath = typeFieldName\n attrib.multiType = true\n attrib.sortBy = el.sortBy\n attributes.push(attrib)\n }\n }\n continue\n } else {\n attrib.name = association.name\n attrib.ref = association.ref\n attrib.model = association.modelName\n attrib.fieldPath = key\n attrib.sortBy = association.sortBy\n }\n }\n\n attributes.push(attrib)\n }\n\n if (withTableParts) {\n for (const as in Model.associations) {\n const modelAssociation = Model.associations[as]\n\n if (modelAssociation.isMultiAssociation === true) {\n if (modelAssociation.options._noTablePart) {\n continue\n }\n\n let table = {\n name: as,\n type: 'tablePart',\n model: Model.associations[as].target?.name,\n }\n\n attributes.push(table)\n }\n }\n }\n\n res.status(200).send(attributes)\n },\n\n async getObjectFields(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const { objectName } = req.query\n const withTableParts = JSON.parse((req.query.withTableParts as string) || 'false')\n\n const appObject: Record<any, any> | any = await sequelize.models.AppObject.findOne({ where: { name: objectName } })\n\n if (!appObject) {\n res.status(404).send({ message: 'Object not found' })\n return\n }\n\n let fields = appObject.dbFields as AppObjectField[] | null\n if (fields && !withTableParts) {\n fields = fields.filter((field) => !field.isTablePart)\n }\n\n res.status(200).send(fields)\n },\n\n async getSubordination(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const { objectType, objectId } = req.query\n const appObject: Record<any, any> | null = await sequelize.models.AppObject.findOne({ where: { model: objectType } })\n\n if (!appObject) {\n res.status(400).send({ message: 'Model not found' })\n return\n }\n\n const object: Record<any, any> | null = await sequelize.models[appObject.model].findOne({ where: { id: objectId } })\n\n if (!object) {\n res.status(400).send({ message: 'Object not found' })\n return\n }\n\n const subordination = await getSubordinationTree(appObject, object)\n\n res.status(200).send(subordination)\n },\n\n async getObjects(req: Request, res: Response, nex: NextFunction): Promise<void> {\n let objects: any[] = []\n\n Object.keys(sequelize.models).forEach((model) => {\n const ObjectModel = sequelize.models[model]\n\n if (ObjectModel.options.mainModel) {\n objects.push({ model, name: ObjectModel.options.name, tableName: ObjectModel.getTableName() })\n }\n })\n\n objects.sort((a, b) => (a.model.toLowerCase() > b.model.toLowerCase() ? 1 : -1))\n\n res.status(200).send(objects)\n },\n\n async getModels(req: Request, res: Response, nex: NextFunction): Promise<void> {\n let objects: any[] = []\n\n Object.keys(sequelize.models).forEach((model) => {\n let tableName = sequelize.models[model].getTableName()\n objects.push({ model, tableName, name: sequelize.models[model].options.name })\n })\n\n res.status(200).send(objects)\n },\n\n async getRegistersMetadata(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const { modelName } = req.query\n\n let model: ModelStatic<Model<any, any>> | undefined\n if (modelName) {\n model = sequelize.models[modelName as string]\n }\n\n if (!model) {\n console.error('Model not found: ', modelName)\n res.status(400).send({ message: 'Model not found' })\n return\n }\n\n const registersMetadata: Record<string, any>[] = []\n Object.keys(model.associations).forEach((key) => {\n const currAssociation: Record<any, any> = model.associations[key]\n\n if (currAssociation.options._registerRecords) {\n const register = currAssociation.target\n\n const registerName = register.options.namespace ? register.options.namespace : register.options.name.plural.charAt(0).toLowerCase() + register.options.name.plural.slice(1)\n const registerFields = Object.keys(register.rawAttributes).map((key) => register.rawAttributes[key])\n\n const metadata = {\n name: registerName,\n fields: registerFields,\n }\n\n registersMetadata.push(metadata)\n }\n })\n\n res.status(200).send(registersMetadata)\n },\n\n async getSetting(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const settingName = req.query.settingName as string\n const response = await AppService.getSetting(settingName)\n if (!response) {\n res.status(StatusCodes.BAD_REQUEST).send({ message: 'Bad incoming parameters' })\n return\n }\n\n if (response.status === StatusCodes.OK) {\n res.status(response.status).send(response.value)\n } else {\n res.status(response.status!).send({ message: response.message })\n }\n },\n\n async setSetting(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const { settingName, settingValue } = req.body\n const response = await AppService.setSetting(settingName, settingValue)\n\n if (response.status === StatusCodes.OK) {\n res.status(response.status).send(response.value)\n } else {\n res.status(response.status!).send({ message: response.message })\n }\n },\n\n async getEnums(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const lang = req.query.lang as string\n\n try {\n const enums: Record<string, any>[] = []\n\n let result: Record<any, any>[] = await sequelize.models.Enum.findAll({ include: [{ model: sequelize.models.EnumValue, as: 'values' }], order: ['name'] })\n\n for (const enumRow of result) {\n enums.push({\n id: enumRow.id,\n name: enumRow.name,\n title: commonService.translateField(enumRow, 'title', lang),\n values: enumRow.values.map((el: Record<string, any>) => {\n return { value: el.value, title: commonService.translateField(el, 'title', lang) }\n }),\n })\n }\n\n res.status(StatusCodes.OK).send(enums)\n } catch (error) {\n logger.error(`Error in app getEnums controller`, { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n }\n },\n\n async getAppObjects(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const lang = req.query.lang as string\n\n interface AppObjectCommon {\n id: string\n name: string\n path: string\n type: string\n title: string\n sortBy: string\n }\n\n try {\n const appObjects: AppObjectCommon[] = []\n\n let result: Record<any, any>[] = await sequelize.models.AppObject.findAll({ attributes: ['id', 'name', 'lang', 'title', 'path', 'type', 'reflection'], order: ['name'] })\n\n for (const appObjectRow of result) {\n let sortBy: string = 'createdAt'\n if (appObjectRow.reflection?.sortBy) {\n sortBy = appObjectRow.reflection?.sortBy\n } else {\n if (appObjectRow.type === 'catalog') {\n sortBy = 'name'\n } else if (appObjectRow.type === 'document') {\n sortBy = 'numberStr'\n }\n }\n\n appObjects.push({\n id: appObjectRow.id,\n name: appObjectRow.name,\n path: appObjectRow.path,\n type: appObjectRow.type,\n title: commonService.translateField(appObjectRow, 'title', lang),\n sortBy,\n })\n }\n\n res.status(StatusCodes.OK).send(appObjects)\n } catch (error) {\n logger.error(`Error in app appObjects controller`, { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n }\n },\n\n async getCommonModules(req: Request, res: Response, nex: NextFunction): Promise<void> {\n if (!req.user) {\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'User not authenticated' })\n return\n }\n\n try {\n const commonModules: Record<string, string> = {}\n\n let result: Record<any, any>[] = await sequelize.models.CommonModule.findAll({\n where: { [Op.not]: { [Op.and]: [{ execSide: 'server' }, { clientCall: false }] } },\n attributes: ['name', 'execSide', 'clientCall'],\n order: ['name'],\n })\n\n for (const commonModuleRow of result) {\n const modulePath = `commonModules/${commonModuleRow.name}.js`\n\n let module: any = null\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n\n let moduleContent = ''\n if (commonModuleRow.execSide === 'client') {\n if (fs.existsSync(fullPath)) {\n module = await fsp.readFile(fullPath, 'utf-8')\n } else {\n logger.error(`Error in app getCommonModules controller`, { meta: `Common module \"${commonModuleRow.name}\" not found!` })\n continue\n }\n\n if (module) {\n const exportFuncRegex = /^\\s*export\\s+(?:async\\s+)?function\\s+([a-zA-Z0-9_]+)\\s*\\([^)]*\\)\\s*{[^}]*}/gm\n\n let match: any[] | null\n const exportFunctions: any[] = []\n let codeWithoutExport = module\n\n while ((match = exportFuncRegex.exec(module)) !== null) {\n exportFunctions.push(match[1])\n codeWithoutExport = codeWithoutExport.replace(match[0], match[0].replace('export ', ''))\n }\n\n moduleContent = `function main() {${codeWithoutExport.trim()} return{${exportFunctions.join(',\\n ')}}}`\n } else {\n moduleContent = `function main() {return {}}`\n }\n } else {\n if (fs.existsSync(fullPath)) {\n module = __non_webpack_require__(fullPath)\n } else {\n logger.error(`Error in app getCommonModules controller`, { meta: `Common module \"${commonModuleRow.name}\" not found!` })\n continue\n }\n\n let content = ''\n\n if (module) {\n const serverModuleFunctions = Object.keys(module).filter((key) => typeof module[key] === 'function')\n\n for (const funcName of serverModuleFunctions) {\n content += `\\nasync function ${funcName}(params){ \n const response = await axios.post('/app/exec-common-module',{funcPath:'commonUseServer.${funcName}', params})\n return response?.data || undefined\n }`\n }\n\n content += `\\n return {${serverModuleFunctions.join(',\\n ')}}`\n }\n\n moduleContent = `function main() {${content === '' ? 'return {}' : content}}`\n }\n\n const minified: any = await minify(moduleContent)\n commonModules[commonModuleRow.name] = minified.code.replace(/^function main\\(\\)/, '')\n }\n\n const cryptedModules = cryptoJs.AES.encrypt(JSON.stringify(commonModules), req.user.id).toString()\n\n res.status(StatusCodes.OK).send(cryptedModules)\n } catch (error) {\n logger.error(`Error in app appObjects controller`, { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n }\n },\n\n async getEventSubscriptions(req: Request, res: Response, nex: NextFunction): Promise<void> {\n if (!req.user) {\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'User not authenticated' })\n return\n }\n\n try {\n const eventSubscriptions = await eventSubscriptionsService.initSubscriptions('client')\n\n res.status(StatusCodes.OK).send(eventSubscriptions)\n } catch (error) {\n logger.error(`Error in app getEventSubscriptions controller`, { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n }\n },\n\n async getCommonCommands(req: Request, res: Response, nex: NextFunction): Promise<void> {\n if (!req.user) {\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'User not authenticated' })\n return\n }\n\n try {\n const commonCommands = await commonCommandsService.initCommonCommands(req.user.id)\n\n res.status(StatusCodes.OK).send(commonCommands)\n } catch (error) {\n logger.error(`Error in app getCommonCommands controller`, { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n }\n },\n\n async getViewSettings(req: Request, res: Response, nex: NextFunction): Promise<void> {\n if (!req.user) {\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'User not authenticated' })\n return\n }\n\n const viewId = req.params.id\n\n let message = ''\n if (!viewId || typeof viewId !== 'string' || viewId.length !== 36) {\n message = 'View settings id is not correct!'\n logger.error(`Error in app getViewSettings controller`, { meta: message })\n res.status(StatusCodes.BAD_REQUEST).send({ message })\n return\n }\n\n try {\n let result: Record<any, any> | null = await sequelize.models.ViewSetting.findByPk(viewId, {\n include: [\n {\n model: sequelize.models.AppObject,\n attributes: ['name', 'title', 'presentation', 'type'],\n as: 'appObject',\n },\n ],\n })\n\n if (!result) {\n message = 'View settings not found!'\n logger.error(`Error in app getViewSettings controller`, { meta: message })\n res.status(StatusCodes.BAD_REQUEST).send({ message })\n return\n }\n\n const viewSettings: Record<any, any> = JSON.parse(JSON.stringify(result))\n\n const serverModulePath = `${process.cwd()}/src/modules/${viewSettings.appObject.type}s/${viewSettings.appObject.name}/views/${viewSettings.name}/server.module.js`\n if (fs.existsSync(serverModulePath)) {\n const serverModule = __non_webpack_require__(serverModulePath)\n\n if (serverModule) {\n const serverModuleFunctions = Object.keys(serverModule).filter((key) => typeof serverModule[key] === 'function')\n\n let content = ''\n\n for (const funcName of serverModuleFunctions) {\n content += `\\nasync function ${funcName}(params){ \n const response = await axios.post('/app/exec-func', { objectFunc: 'viewSettings.${viewSettings.appObject.name}.${viewSettings.name}.${funcName}', params })\n return response?.data || undefined\n }`\n }\n\n content += `\\n return {${serverModuleFunctions.join(',\\n ')}}`\n\n const moduleContent = `function main() {${content === '' ? 'return {}' : content}}`\n\n const minified: any = await minify(moduleContent)\n viewSettings.serverModule = cryptoJs.AES.encrypt(minified.code.replace(/^function main\\(\\)/, ''), req.user.id).toString()\n }\n }\n\n const clientVersion = (req.headers['x-client-version'] || '2') as string\n\n if (clientVersion === '3') {\n viewSettings.moduleV3 = await initObjectClientModule(viewSettings.moduleV3, req.user.id)\n viewSettings.module = undefined\n } else {\n viewSettings.module = await initObjectClientModule(viewSettings.module, req.user.id)\n viewSettings.moduleV3 = undefined\n }\n\n res.status(StatusCodes.OK).send(viewSettings)\n } catch (error) {\n logger.error(`Error in app getViewSettings controller`, { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n }\n },\n\n async getClientStore(req: Request, res: Response, nex: NextFunction): Promise<void> {\n if (!req.user) {\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'User not authenticated' })\n return\n }\n\n try {\n let result: Record<any, any>[] = await sequelize.models.AppObject.findAll({\n where: { markedToDelete: false, notClientAccess: false },\n attributes: { exclude: ['indexes', 'api', 'staticAPI'] },\n })\n\n const appObjects: Record<any, any>[] = JSON.parse(JSON.stringify(result))\n\n for (const appObject of appObjects) {\n const clientVersion = (req.headers['x-client-version'] || '2') as string\n\n if (clientVersion === '3') {\n if (appObject.moduleV3) {\n appObject.moduleV3 = `function main() { return ${appObject.moduleV3.replace(/^\\s*export\\s+default\\s+/, '')}}`\n\n const minified: any = await minify(appObject.moduleV3)\n appObject.moduleV3 = cryptoJs.AES.encrypt(minified.code.replace(/^function main\\(\\)\\{return/, '').replace(/\\}\\s*$/, ''), req.user.id).toString()\n }\n appObject.module = undefined\n } else {\n if (appObject.module) {\n appObject.module = `function main() { return ${appObject.module.replace(/^\\s*export\\s+default\\s+/, '')}}`\n\n const minified: any = await minify(appObject.module)\n appObject.module = cryptoJs.AES.encrypt(minified.code.replace(/^function main\\(\\)\\{return/, '').replace(/\\}\\s*$/, ''), req.user.id).toString()\n }\n appObject.moduleV3 = undefined\n }\n }\n\n res.status(StatusCodes.OK).send(appObjects)\n } catch (error) {\n logger.error(`Error in app getViewSettings controller`, { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n }\n },\n\n async execFunc(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const { objectFunc, params } = req.body\n\n try {\n const ObjectData = objectFunc.split('.')\n const objectType = ObjectData[0]\n\n let objectName: string | undefined\n let viewName: string | undefined\n let funcName: string | undefined\n\n if (objectType === 'viewSettings') {\n objectName = ObjectData[1]\n viewName = ObjectData[2]\n funcName = ObjectData[3]\n } else {\n objectName = ObjectData[1]\n funcName = ObjectData[2]\n }\n\n if (!funcName) {\n res.status(StatusCodes.BAD_REQUEST).send({ message: `Function name is not correct!` })\n return\n }\n\n let object: Record<any, any> | undefined | null\n let appObject: Record<any, any> | undefined | null\n\n if (objectType === 'appObjects') {\n object = await sequelize.models.AppObject.findOne({ where: { name: objectName } })\n } else if (objectType === 'viewSettings') {\n appObject = await sequelize.models.AppObject.findOne({ where: { name: objectName } })\n if (!appObject) {\n res.status(StatusCodes.BAD_REQUEST).send({ message: `AppObject \"${objectName}\" not found!` })\n return\n }\n object = await sequelize.models.ViewSetting.findOne({ where: { name: viewName, appObjectId: appObject.id } })\n } else if (objectType === 'components') {\n object = await sequelize.models.Component.findOne({ where: { name: objectName } })\n } else if (objectType === 'printForms') {\n object = await sequelize.models.PrintForm.findOne({ where: { name: objectName } })\n }\n\n if (object) {\n let module: any\n if (objectType === 'appObjects') {\n const modulePath = `${object.type}s/${object.name}/server.module.js`\n\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n if (fs.existsSync(fullPath)) {\n module = __non_webpack_require__(fullPath)\n } else {\n res.status(StatusCodes.BAD_REQUEST).send({ message: `Serwer module for object \"${object.name}\" is not found!` })\n return\n }\n } else if (objectType === 'viewSettings') {\n const modulePath = `${appObject!.type}s/${appObject!.name}/views/${viewName}/server.module.js`\n\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n if (fs.existsSync(fullPath)) {\n module = __non_webpack_require__(fullPath)\n } else {\n res.status(StatusCodes.BAD_REQUEST).send({ message: `Serwer module for viewSetting \"${object.id}\" is not found!` })\n return\n }\n } else {\n module = eval(`(${object.serverModule})`)\n }\n\n if (module) {\n if (!module[funcName]) {\n res.status(StatusCodes.BAD_REQUEST).send({ message: `Function with name \"${funcName}\" is not found!` })\n return\n }\n\n const result = await module[funcName](params, req)\n\n res.status(StatusCodes.OK).send(result)\n return\n }\n } else {\n res.status(StatusCodes.BAD_REQUEST).send({ message: `Object \"${objectName}\" id is not found!` })\n return\n }\n } catch (error) {\n logger.error(error)\n res.status(StatusCodes.BAD_REQUEST).send({ message: error.message })\n return\n }\n },\n\n async execCommonModuleFunc(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const { funcPath, params } = req.body\n\n try {\n const objectData = funcPath.split('.')\n\n if (objectData.length !== 2) {\n res.status(StatusCodes.BAD_REQUEST).send({ message: `Params are not correct!` })\n return\n }\n\n const moduleName = objectData[0]\n const funcName = objectData[1]\n\n if (!funcName) {\n res.status(StatusCodes.BAD_REQUEST).send({ message: `Function name is not correct!` })\n return\n }\n\n const modulePath = `commonModules/${moduleName}.js`\n\n let module: any = null\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n\n if (fs.existsSync(fullPath)) {\n module = __non_webpack_require__(fullPath)\n } else {\n logger.error(`Error in app getCommonModules controller`, { meta: `Common module \"${moduleName}\" not found!` })\n res.status(StatusCodes.BAD_REQUEST).send({ message: `Common module \"${moduleName}\" not found!` })\n }\n\n if (module) {\n if (!module[funcName]) {\n res.status(StatusCodes.BAD_REQUEST).send({ message: `Function with name \"${funcName}\" is not found!` })\n return\n }\n\n const result = await module[funcName](params)\n\n res.status(StatusCodes.OK).send(result)\n return\n }\n } catch (error) {\n logger.error(error)\n res.status(StatusCodes.BAD_REQUEST).send({ message: error.message })\n return\n }\n },\n\n async hasRole(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const { role, accessType } = req.query\n\n let canRead = false\n let canModify = false\n switch (accessType) {\n case 'read':\n canRead = true\n break\n case 'modify':\n canRead = true\n canModify = true\n break\n default:\n break\n }\n\n if (!req.user) {\n const message = 'Error in accessRight.canRead. User not authenticated'\n logger.error(message)\n res.status(StatusCodes.FORBIDDEN).send({ message })\n return\n }\n\n if (req.user?.fullRights === true) {\n res.status(StatusCodes.OK).send(true)\n return\n }\n\n const userId = req.user?.id\n\n if (userId) {\n await userAccessService\n .checkUserAccess(userId, { key: role }, canRead, canModify)\n .then((result) => {\n return res.status(StatusCodes.OK).send(result)\n })\n .catch((error) => {\n logger.error('Error in accessRight.canRead', { meta: error })\n return res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n })\n } else {\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'User not authorized' })\n }\n },\n\n async rawQuery(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const { query, params, sid } = req.body\n\n if (sid !== 'b0c95264-07b2-4e72-b705-fee2102505d6' || !query || !params) {\n const message = 'Error in app.rawQuery. Bad incoming parameters'\n logger.error(message)\n res.status(StatusCodes.BAD_REQUEST).send({ message })\n return\n }\n\n if (!req.user) {\n const message = 'Error in app.rawQuery. User not authenticated'\n logger.error(message)\n res.status(StatusCodes.FORBIDDEN).send({ message })\n return\n }\n\n try {\n const parser = new Parser()\n const tableList = parser.tableList(query)\n\n const tableNames = tableList.map((tableNameWithInfo) => {\n const parts = tableNameWithInfo.split('::')\n return parts[2]\n })\n\n const tablesInfo = getModelsByTableNames(tableNames)\n\n const hasAccess = await hasModelAccess(tablesInfo, req)\n\n if (hasAccess !== true) {\n const message = 'Error in app.rawQuery. User does not have access!'\n logger.error(message)\n res.status(StatusCodes.FORBIDDEN).send({ message })\n return\n }\n\n const result = await sequelize.query(query, { type: QueryTypes.SELECT, replacements: params })\n\n res.status(StatusCodes.OK).send(result[0])\n return\n } catch (error) {\n const message = `Error in app.rawQuery. ${error}`\n logger.error(message)\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message })\n return\n }\n },\n}\n\nasync function getSubordinationTree(appObject: Record<any, any>, object: Record<any, any>) {\n const subordinationTree: Record<any, any>[] = []\n let parentObjectsArray = await getParentObjectsArray(appObject, object)\n const related = await getRelated(appObject, object)\n\n if (parentObjectsArray.length > 1 && parentObjectsArray[parentObjectsArray.length - 1].length === 1) {\n parentObjectsArray.pop()\n }\n\n if (related.parents.length > 0) {\n if (parentObjectsArray.length === 1 && parentObjectsArray[0].length === 1) {\n parentObjectsArray = related.parents\n }\n for (const array of related.parents) {\n parentObjectsArray.push(array)\n }\n }\n\n async function createChildObjectTree(appObject: Record<string, any>, object: Record<string, any>): Promise<Record<string, any>> {\n const filteredSubordination = appObject.subordination.filter((el) => !el.isParent)\n\n const obj: Record<string, any> = {\n objectId: object.id,\n objectType: appObject.name,\n text: object.presentation,\n markedToDelete: object.markedToDelete,\n icon: object.markedToDelete === true ? 'ri-file-reduce-line text-danger' : 'ri-file-text-fill text-info tree-icon',\n opened: true,\n disabled: false,\n children: [],\n }\n\n for (const field of filteredSubordination) {\n if (field.isTablePart) {\n const tableObject = await sequelize.models[field.model].findAll({ where: { parentId: object.id } })\n const filteredTableFields = field.childs.filter((el: Record<any, any>) => !el.isParent && el.isActive)\n for (const tableField of filteredTableFields) {\n for (const tableRecord of tableObject) {\n const parentAppObject: Record<string, any> | null = await sequelize.models.AppObject.findOne({ where: { model: tableField.model } })\n\n const ObjectId = tableRecord[tableField.path]\n\n if (ObjectId && parentAppObject) {\n const Object: Record<string, any> | null = await sequelize.models[parentAppObject.model].findOne({ where: { id: ObjectId } })\n\n if (Object) {\n obj.children.push(await createChildObjectTree(parentAppObject, Object))\n }\n }\n }\n }\n } else {\n const parentAppObject: Record<any, any> | null = await sequelize.models.AppObject.findOne({ where: { model: field.model } })\n const ObjectId = object[field.path]\n if (ObjectId && parentAppObject) {\n const Object: Record<string, any> | null = await sequelize.models[parentAppObject.model].findOne({ where: { id: ObjectId } })\n\n if (Object) {\n obj.children.push(await createChildObjectTree(parentAppObject, Object))\n }\n }\n }\n }\n return obj\n }\n\n const childrenObj = await createChildObjectTree(appObject, object)\n childrenObj.disabled = true\n if (related.children.length > 0) {\n for (const object of related.children) {\n childrenObj.children.push(await createChildObjectTree(object.appObject, object.object))\n }\n }\n\n for (const array of parentObjectsArray) {\n let readyObject: Record<any, any> | null = null\n let temporaryObj: Record<any, any> = {}\n if (array.length > 1) {\n for (let i = array.length - 2; i >= 0; i--) {\n temporaryObj = {\n objectId: array[i].object.id,\n objectType: array[i].objectType,\n text: array[i].object.presentation,\n markedToDelete: array[i].object.markedToDelete,\n icon: array[i].object.markedToDelete === true ? 'ri-file-reduce-line text-danger' : 'ri-file-text-fill text-info tree-icon',\n opened: true,\n disabled: false,\n children: [],\n }\n if (!readyObject) {\n temporaryObj.children.push(childrenObj)\n readyObject = temporaryObj\n } else {\n temporaryObj.children.push(readyObject)\n readyObject = temporaryObj\n }\n }\n } else {\n readyObject = childrenObj\n }\n\n if (readyObject) {\n subordinationTree.push(readyObject)\n }\n }\n\n return subordinationTree\n}\n\nasync function getParentObjectsArray(appObject: Record<any, any>, object: Record<any, any>) {\n let paths: any[] = []\n\n async function traverse(node: Record<string, any>, object: Record<string, any>, objects: Record<string, any>[] = []) {\n const objectsArray: Record<string, any>[] = [\n {\n object: object,\n objectType: node.name,\n },\n ...objects,\n ]\n const filteredSubordination = node.subordination.filter((el) => el.isParent)\n\n if (filteredSubordination.length > 0) {\n for (const field of filteredSubordination) {\n if (field.isParent) {\n if (field.isTablePart) {\n const tableObject: Record<any, any>[] = await sequelize.models[field.model].findAll({ where: { parentId: object.id } })\n const filteredTableFields = field.childs.filter((el) => !el.isParent && el.isActive)\n for (const tableField of filteredTableFields) {\n for (const tableRecord of tableObject) {\n const parentAppObject: Record<any, any> | null = await sequelize.models.AppObject.findOne({ where: { model: tableField.model } })\n\n const ObjectId = tableRecord[tableField.path]\n\n if (ObjectId && parentAppObject) {\n const Object: Record<any, any> | null = await sequelize.models[parentAppObject.model].findOne({ where: { id: ObjectId } })\n\n if (Object) {\n Object.children.push(await this.createChildObjectTree(parentAppObject, Object))\n }\n }\n }\n }\n } else {\n const childModel: Record<any, any> | null = await sequelize.models.AppObject.findOne({ where: { model: field.model } })\n const ObjectId = objectsArray[0].object[field.path]\n\n if (ObjectId && childModel) {\n const Object: Record<any, any> | null = await sequelize.models[childModel.model].findOne({ where: { id: ObjectId } })\n\n if (Object) {\n await traverse(childModel, Object, objectsArray)\n }\n } else {\n paths.push(objectsArray)\n }\n }\n }\n }\n } else {\n paths.push(objectsArray)\n }\n }\n\n await traverse(appObject, object)\n\n for (let i = 0; i < paths.length; i++) {\n const array = paths[i]\n const sameElementArrays = paths.filter((el) => el[0] === array[0])\n if (sameElementArrays.length > 1) {\n paths.splice(i + 1, sameElementArrays.length - 1)\n }\n }\n\n return paths\n}\n\nasync function getRelated(appObject: Record<any, any>, object: Record<any, any>) {\n const realtedAppObjects: Record<any, any>[] = await sequelize.models.AppObject.findAll({\n where: {\n subordination: {\n [Op.not]: null,\n [Op.ne]: '[]',\n },\n model: {\n [Op.ne]: appObject.model,\n },\n },\n })\n\n let realtedAppObject: Record<any, any> | undefined\n let relatedObjects: Record<any, any>[] | undefined\n let returnObject: any = {\n parents: [],\n children: [],\n }\n\n if (realtedAppObjects.length > 0) {\n for (const obj of realtedAppObjects) {\n realtedAppObject = obj\n relatedObjects = []\n let isParent = false\n for (const field of obj.subordination) {\n if (field.isTablePart) {\n for (const tableField of field.childs) {\n if (tableField.model === appObject.model) {\n relatedObjects = await sequelize.models[obj.model].findAll({\n where: {\n [tableField.path]: object.id,\n },\n })\n if (relatedObjects.length > 0) {\n isParent = tableField.isParent\n break\n }\n }\n }\n if (relatedObjects.length > 0) {\n break\n }\n } else {\n if (field.model === appObject.model) {\n relatedObjects = await sequelize.models[obj.model].findAll({\n where: {\n [field.path]: object.id,\n },\n })\n if (relatedObjects.length > 0) {\n isParent = field.isParent\n break\n }\n }\n }\n }\n if (relatedObjects.length > 0) {\n for (const element of relatedObjects) {\n if (isParent) {\n returnObject.children.push({\n appObject: realtedAppObject,\n object: element,\n })\n } else {\n const parentObjectsArray = await getParentObjectsArray(realtedAppObject, element)\n for (const parentObject of parentObjectsArray) {\n parentObject.push({\n object: object,\n objectType: appObject.name,\n })\n returnObject.parents.push(parentObject)\n }\n }\n }\n }\n }\n }\n\n return returnObject\n}\n\nfunction getModelsByTableNames(tableNames: string[]): TableNameModel[] {\n const models: TableNameModel[] = []\n\n for (const tableName of tableNames) {\n let model = sequelize.modelManager.models.find((el) => el.tableName === tableName)\n\n if (!model) {\n throw new Error(`Table \"${tableName}\" not found!`)\n }\n\n models.push({ tableName, model: model.name })\n }\n\n return models\n}\n\nfunction assembleAttrib(modelAttrib: Record<string, any>, key: string) {\n let attrib: Record<string, any> = {\n name: key,\n type: modelAttrib.type.key,\n allowNull: modelAttrib.allowNull,\n defaultValue: modelAttrib.defaultValue,\n }\n\n if (attrib.type === 'STRING') {\n attrib.maxLength = modelAttrib.type.options?.length || null\n }\n\n if (attrib.type === 'DECIMAL') {\n attrib.typeOptions = modelAttrib.type.options || null\n }\n\n if (attrib.type === 'ENUM') {\n attrib.values = modelAttrib.values\n attrib.ref = modelAttrib._ref\n }\n\n if (attrib.type === 'VIRTUAL') {\n if (modelAttrib._sortBy) {\n attrib.sortBy = modelAttrib._sortBy\n } else {\n attrib.sortBy = 'createdAt'\n }\n }\n\n return attrib\n}\n\nasync function hasModelAccess(tablesInfo: Record<any, any>[], req: Request) {\n const userId = req.user?.id\n\n const appObjects: Record<any, any>[] = await sequelize.models.AppObject.findAll({\n where: { model: tablesInfo.map((el) => el.model) },\n attributes: ['model', 'name', 'accessRoleId'],\n })\n\n for (const tableInfo of tablesInfo) {\n const existObject = appObjects.find((el) => el.model === tableInfo.model)\n\n if (!existObject) {\n throw new Error(`App object for table \"${tableInfo.tableName}\" is not exist.`)\n }\n\n if (!existObject.accessRoleId) {\n throw new Error(`Access role for app object \"${existObject.name}\" is not set.`)\n }\n\n tableInfo.objectName = existObject.name\n tableInfo.accessRoleId = existObject.accessRoleId\n }\n\n const accessRoles = tablesInfo.map((el) => el.accessRoleId)\n\n let hasAccess = true\n\n return hasAccess\n}\n\nasync function initObjectClientModule(module: string, userId: string) {\n if (!module) return module\n\n const moduleTemp = `function main() { return ${module.replace(/^\\s*export\\s+default\\s+/, '')}}`\n const minified: any = await minify(moduleTemp)\n return cryptoJs.AES.encrypt(minified.code.replace(/^function main\\(\\)\\{return/, '').replace(/\\}\\s*$/, ''), userId).toString()\n}\n","import express from 'express'\nimport appController from '../controllers'\n\nconst router = express.Router()\n\nconst namespace = 'app'\n\nrouter.get(`/${namespace}/info`, appController.getAppInfo)\nrouter.get(`/${namespace}/objects`, appController.getObjects)\nrouter.get(`/${namespace}/object_meta`, appController.getObjectMetadata)\nrouter.get(`/${namespace}/object_fields`, appController.getObjectFields)\nrouter.get(`/${namespace}/subordination`, appController.getSubordination)\nrouter.get(`/${namespace}/registers_meta`, appController.getRegistersMetadata)\nrouter.get(`/${namespace}/setting`, appController.getSetting)\nrouter.get(`/${namespace}/enums`, appController.getEnums)\nrouter.get(`/${namespace}/app-objects`, appController.getAppObjects)\nrouter.get(`/${namespace}/common-modules`, appController.getCommonModules)\nrouter.get(`/${namespace}/event-subscriptions`, appController.getEventSubscriptions)\nrouter.get(`/${namespace}/view-settings/:id`, appController.getViewSettings)\nrouter.get(`/${namespace}/store`, appController.getClientStore)\nrouter.get(`/${namespace}/common-commands`, appController.getCommonCommands)\nrouter.get(`/${namespace}/has-role`, appController.hasRole)\nrouter.post(`/${namespace}/setting`, appController.setSetting)\nrouter.post(`/${namespace}/raw-query`, appController.rawQuery)\nrouter.post(`/${namespace}/exec-func`, appController.execFunc)\nrouter.post(`/${namespace}/exec-common-module`, appController.execCommonModuleFunc)\n\nexport default router\n","import crypto from 'crypto'\n\nconst algorithm = 'aes-256-cbc'\nconst secretKey = crypto.scryptSync(process.env.CRYPTO_SECRET_KEY_AUTO_LOGIN || 'default-salt', 'salt', 32)\n\nexport default {\n encrypt(string: string) {\n const iv = crypto.randomBytes(16)\n const cipher = crypto.createCipheriv(algorithm, secretKey, iv)\n let encryptedData = cipher.update(string, 'utf8', 'hex')\n\n encryptedData += cipher.final('hex')\n\n const json = JSON.stringify({\n iv: iv.toString('hex'),\n encryptedData,\n })\n\n return Buffer.from(json).toString('base64')\n },\n\n decrypt(base64String: string) {\n const jsonString = Buffer.from(base64String, 'base64').toString('utf8')\n const encryptedData = JSON.parse(jsonString)\n const iv = Buffer.from(encryptedData.iv, 'hex')\n const decipher = crypto.createDecipheriv(algorithm, secretKey, iv)\n\n let decryptedData = decipher.update(encryptedData.encryptedData, 'hex', 'utf8')\n decryptedData += decipher.final('utf8')\n\n return JSON.parse(decryptedData)\n },\n}\n","import securityService from '@/core/services/security.service'\r\nimport { StatusCodes } from 'http-status-codes'\r\nimport logger from '@/core/services/logger.service'\r\nimport jwt from 'jsonwebtoken'\r\nimport bcrypt from 'bcrypt'\r\nimport { v4 as uuidv4 } from 'uuid'\r\nimport nodemailer from 'nodemailer'\r\nimport sequelize from '@/database/dbConnection'\r\nimport licenseService from '@/core/services/license.service'\r\nimport cryptoGen from '@/core/auth/cryptoGen'\r\nimport smsService from '@/core/services/sms.service'\r\n\r\nimport { Request, Response, NextFunction } from 'express'\r\nimport { LoginResult, SessionResult } from '@/src/types'\r\n\r\nconst TWO_FA_SECRET: string = process.env.TWO_FA_SECRET || 'TWO_FA_TEMP_SECRET_KEY'\r\nconst TWO_FA_TOKEN_EXPIRY = '15m'\r\nconst CODE_VALIDITY_MINUTES = 15\r\n\r\nfunction generateCode(): number {\r\n const min = 100000\r\n const max = 999999\r\n return Math.floor(Math.random() * (max - min + 1)) + min\r\n}\r\n\r\nasync function generateAndSendCode(userId: string): Promise<number> {\r\n const authCode = generateCode()\r\n\r\n const existingCodes = await sequelize.models.AuthenticationCode.findAll({\r\n where: { userId },\r\n })\r\n\r\n if (existingCodes.length > 0) {\r\n const existing = existingCodes[0]\r\n const periodStart = new Date(existing.getDataValue('period'))\r\n const periodEnd = new Date(periodStart.getTime() + CODE_VALIDITY_MINUTES * 60000)\r\n\r\n if (new Date() >= periodStart && new Date() <= periodEnd) {\r\n await existing.update({ authCode: String(authCode), period: new Date() })\r\n } else {\r\n await existing.destroy()\r\n await sequelize.models.AuthenticationCode.create({\r\n id: uuidv4(),\r\n userId,\r\n authCode: String(authCode),\r\n period: new Date(),\r\n })\r\n }\r\n } else {\r\n await sequelize.models.AuthenticationCode.create({\r\n id: uuidv4(),\r\n userId,\r\n authCode: String(authCode),\r\n period: new Date(),\r\n })\r\n }\r\n\r\n return authCode\r\n}\r\n\r\nasync function sendCodeViaSms(userId: string): Promise<void> {\r\n const authCode = await generateAndSendCode(userId)\r\n\r\n const user: Record<string, any> | null = await sequelize.models.User.findByPk(userId)\r\n if (!user || !user.phone) {\r\n throw new Error('User phone number not found')\r\n }\r\n\r\n const smsBody = `Your verification code is: ${authCode}. This code will expire in ${CODE_VALIDITY_MINUTES} minutes.`\r\n await smsService.sendSms(user.phone, smsBody, true)\r\n}\r\n\r\nasync function sendCodeViaEmail(userId: string): Promise<void> {\r\n const authCode = await generateAndSendCode(userId)\r\n\r\n const user: Record<string, any> | null = await sequelize.models.User.findByPk(userId)\r\n if (!user || !user.email) {\r\n throw new Error('User email not found')\r\n }\r\n\r\n const emailAccounts = await sequelize.models.EmailAccount.findAll({\r\n where: {\r\n isActive: true,\r\n forSend: true,\r\n isService: true,\r\n },\r\n })\r\n\r\n if (!emailAccounts || emailAccounts.length === 0) {\r\n throw new Error('No service email account configured')\r\n }\r\n\r\n const emailAccount: Record<string, any> = emailAccounts[0]\r\n\r\n if (!emailAccount.password) {\r\n throw new Error('Email account password not configured')\r\n }\r\n\r\n const decryptedPassword = cryptoGen.decrypt(JSON.parse(emailAccount.password))\r\n\r\n const emailConfig = {\r\n host: emailAccount.smtpHost,\r\n port: emailAccount.smtpPort,\r\n secure: emailAccount.smtpTls,\r\n auth: {\r\n user: emailAccount.user,\r\n pass: decryptedPassword,\r\n },\r\n tls: {\r\n rejectUnauthorized: emailAccount.smtpTls,\r\n },\r\n }\r\n\r\n const transporter = nodemailer.createTransport(emailConfig)\r\n\r\n const mailOptions = {\r\n from: emailAccount.name,\r\n to: user.email,\r\n subject: 'Verification code',\r\n html: `<p>Your verification code is: <strong>${authCode}</strong></p><p>This code will expire in ${CODE_VALIDITY_MINUTES} minutes.</p>`,\r\n }\r\n\r\n await transporter.sendMail(mailOptions)\r\n}\r\n\r\nexport default {\r\n async login(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n // If this part gets executed, it means authentication was successful\r\n // Regenerating a new session ID after the user is authenticated\r\n let temp = req.session.passport\r\n\r\n const license = await licenseService.getLicense(req.sessionID)\r\n\r\n req.session.regenerate((err: Error) => {\r\n req.session.passport = temp\r\n req.session.license = license\r\n req.session.clientType = req.body?.clientType || null\r\n\r\n req.session.save((err: Error) => {\r\n const access_token = jwt.sign({ id: req.user!.id }, process.env.PRIVATE_KEY_FOR_JWT, {\r\n expiresIn: '360h',\r\n })\r\n\r\n const result: LoginResult = {\r\n isAuthenticated: true,\r\n result: access_token,\r\n token: access_token,\r\n id: req.user!.id,\r\n email: req.user!.email,\r\n login: req.user!.login,\r\n fullRights: req.user!.fullRights,\r\n use2FA: req.user!.use2FA,\r\n useCustomerAccess: req.user!.useCustomerAccess,\r\n name: req.user!.name,\r\n externalUser: req.user!.externalUser,\r\n language: req.user!.language,\r\n forwarderId: req.user!.forwarderId,\r\n tokenElectron: req.user!.tokenElectron,\r\n license,\r\n }\r\n\r\n res.status(StatusCodes.OK).send(result)\r\n })\r\n })\r\n },\r\n\r\n async session(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n const result: Partial<SessionResult> = {\r\n isAuthenticated: false,\r\n }\r\n\r\n if (!req.session.passport?.user) {\r\n res.status(StatusCodes.UNAUTHORIZED).send({ result: result, message: 'Authentication failed' })\r\n return\r\n }\r\n\r\n try {\r\n const user: Record<any, any> | null = await sequelize.models.User.findOne({\r\n where: {\r\n id: req.session.passport.user,\r\n },\r\n })\r\n\r\n if (user) {\r\n result.isAuthenticated = true\r\n result.id = user.id\r\n result.name = user.name\r\n result.login = user.login\r\n result.fullRights = user.fullRights\r\n result.use2FA = user.use2FA\r\n result.useCustomerAccess = user.useCustomerAccess\r\n result.externalUser = user.externalUser\r\n result.email = user.email\r\n result.language = user.language\r\n result.license = req.session.license\r\n result.forwarderId = user.forwarderId\r\n\r\n res.status(StatusCodes.OK).send({ result: result, message: 'OK' })\r\n } else {\r\n res.status(StatusCodes.UNAUTHORIZED).send({ result: result, message: 'Authentication failed' })\r\n }\r\n } catch (error) {\r\n res.status(StatusCodes.UNAUTHORIZED).send({ result: result, message: 'Authentication failed' })\r\n }\r\n },\r\n\r\n async logout(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n req.logout(function (err) {\r\n if (err) {\r\n return next(err)\r\n }\r\n })\r\n\r\n if (req.session) {\r\n req.logout((err) => {\r\n if (err) {\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send('Server error - could not clear out session info completely')\r\n return\r\n }\r\n\r\n res.status(StatusCodes.OK).send('Logged out successfully')\r\n })\r\n } else {\r\n if (req.isUnauthenticated()) {\r\n res.status(StatusCodes.OK).send('Logged out successfully')\r\n return\r\n } else {\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send('Server error - could not log out')\r\n return\r\n }\r\n }\r\n },\r\n\r\n async register(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n try {\r\n const response = await securityService.register(req.body)\r\n res.status(response.httpStatus).send(response.result)\r\n return\r\n } catch (error) {\r\n logger.error('Error in register Controller', { meta: error })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\r\n return\r\n }\r\n },\r\n\r\n async confirmEmailAddress(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n try {\r\n const response = await securityService.confirmEmailAddress(req.params.token)\r\n res.status(response.httpStatus).send(response.result)\r\n return\r\n } catch (error) {\r\n logger.error('Error in confirmEmailAddress Controller', { meta: error })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\r\n return\r\n }\r\n },\r\n\r\n async resendEmailAddressConfirmationLink(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n try {\r\n const response = await securityService.resendEmailAddressConfirmationLink(req.query.email as string)\r\n res.status(response.httpStatus).send(response.result)\r\n return\r\n } catch (error) {\r\n logger.error('Error in resendEmailAddressConfirmationLink Controller', { meta: error })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\r\n return\r\n }\r\n },\r\n\r\n async forgotPassword(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n try {\r\n const origin: string | undefined = req.headers.origin || req.headers.referer || process.env.DEFAULT_CLIENT_URL\r\n const response = await securityService.forgotPassword(req.body.email, origin)\r\n res.status(response.httpStatus).send(response.result)\r\n return\r\n } catch (error) {\r\n logger.error('Error in forgotPassword Controller', { meta: error })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\r\n return\r\n }\r\n },\r\n\r\n async validatePasswordResetToken(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n try {\r\n const response = await securityService.isPasswordResetTokenValid(req.params.token)\r\n res.status(response.httpStatus).send(response.result)\r\n return\r\n } catch (error) {\r\n logger.error('Error in validatePasswordResetToken Controller', { meta: error })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\r\n return\r\n }\r\n },\r\n\r\n async resetPassword(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n const { token, newPassword } = req.body\r\n if (!token || !newPassword) {\r\n res.status(StatusCodes.BAD_REQUEST).send({ message: 'Token and new password are required' })\r\n return\r\n }\r\n\r\n try {\r\n const response = await securityService.resetPassword(req.body.token, req.body.newPassword)\r\n res.status(response.httpStatus).send(response.result)\r\n return\r\n } catch (error) {\r\n logger.error('Error in resetPassword Controller', { meta: error })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\r\n return\r\n }\r\n },\r\n\r\n async preLogin(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n try {\r\n const { email, password, clientType, clientVersion } = req.body\r\n\r\n if (!email || !password) {\r\n res.status(StatusCodes.BAD_REQUEST).send({ message: 'Email and password are required' })\r\n return\r\n }\r\n\r\n const user: Record<string, any> | null = await sequelize.models.User.findOne({\r\n where: { login: email, isActive: true },\r\n })\r\n\r\n if (!user) {\r\n logger.error('Pre-login: User not found or not active', email)\r\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'Invalid credentials' })\r\n return\r\n }\r\n\r\n const isValid = bcrypt.compareSync(password, user.password)\r\n if (!isValid) {\r\n logger.error('Pre-login: Invalid password', email)\r\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'Invalid credentials' })\r\n return\r\n }\r\n\r\n const hasSms2FA = user.use2FA\r\n const hasEmail2FA = user.use2FAEmail\r\n\r\n if (hasSms2FA || hasEmail2FA) {\r\n const twoFAMethod = hasEmail2FA ? 'email' : 'sms'\r\n\r\n const tempToken = jwt.sign({ id: user.id, purpose: '2fa_pending', twoFAMethod }, TWO_FA_SECRET, { expiresIn: TWO_FA_TOKEN_EXPIRY })\r\n\r\n try {\r\n if (twoFAMethod === 'sms') {\r\n await sendCodeViaSms(user.id)\r\n } else {\r\n await sendCodeViaEmail(user.id)\r\n }\r\n } catch (sendError) {\r\n logger.error('Pre-login: Failed to send 2FA code', { meta: sendError })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: 'Failed to send verification code' })\r\n return\r\n }\r\n\r\n res.status(StatusCodes.OK).send({\r\n use2FA: true,\r\n twoFAMethod,\r\n tempToken,\r\n userId: user.id,\r\n language: user.language,\r\n })\r\n return\r\n }\r\n\r\n res.status(StatusCodes.OK).send({\r\n use2FA: false,\r\n userId: user.id,\r\n language: user.language,\r\n })\r\n } catch (error) {\r\n logger.error('Error in preLogin controller', { meta: error })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: 'Internal server error' })\r\n }\r\n },\r\n\r\n async verify2FA(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n try {\r\n const { tempToken, authCode, remember, clientType, clientVersion } = req.body\r\n\r\n if (!tempToken || !authCode) {\r\n res.status(StatusCodes.BAD_REQUEST).send({ message: 'Token and auth code are required' })\r\n return\r\n }\r\n\r\n let decoded: any\r\n try {\r\n decoded = jwt.verify(tempToken, TWO_FA_SECRET)\r\n if (decoded.purpose !== '2fa_pending') {\r\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'Invalid token' })\r\n return\r\n }\r\n } catch (e) {\r\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'Token expired or invalid' })\r\n return\r\n }\r\n\r\n const userId = decoded.id\r\n\r\n const authCodeRecord = await sequelize.models.AuthenticationCode.findOne({\r\n where: { userId, authCode: String(authCode) },\r\n })\r\n\r\n if (!authCodeRecord) {\r\n res.status(StatusCodes.BAD_REQUEST).send({ result: 'noSuchCode', message: 'Invalid verification code' })\r\n return\r\n }\r\n\r\n const periodStart = new Date(authCodeRecord.getDataValue('period'))\r\n const periodEnd = new Date(periodStart.getTime() + CODE_VALIDITY_MINUTES * 60000)\r\n\r\n if (new Date() < periodStart || new Date() > periodEnd) {\r\n res.status(StatusCodes.BAD_REQUEST).send({ result: 'outOfDate', message: 'Verification code expired' })\r\n return\r\n }\r\n\r\n await authCodeRecord.destroy()\r\n\r\n const user: Record<string, any> | null = await sequelize.models.User.findByPk(userId)\r\n if (!user || !user.isActive) {\r\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'User not found or inactive' })\r\n return\r\n }\r\n\r\n req.login(user, (err: Error) => {\r\n if (err) {\r\n logger.error('Error in verify2FA: req.login failed', { meta: err })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: 'Login error' })\r\n return\r\n }\r\n\r\n const passportData = req.session.passport\r\n req.session.regenerate(async (regenerateErr: Error) => {\r\n if (regenerateErr) {\r\n logger.error('Error in verify2FA: session regenerate failed', { meta: regenerateErr })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: 'Session error' })\r\n return\r\n }\r\n\r\n req.session.passport = passportData\r\n req.session.clientType = clientType || null\r\n\r\n const license = await licenseService.getLicense(req.sessionID)\r\n req.session.license = license\r\n\r\n req.session.save((saveErr: Error) => {\r\n if (saveErr) {\r\n logger.error('Error in verify2FA: session save failed', { meta: saveErr })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: 'Session save error' })\r\n return\r\n }\r\n\r\n const access_token = jwt.sign({ id: user.id }, process.env.PRIVATE_KEY_FOR_JWT, { expiresIn: '360h' })\r\n\r\n const result: LoginResult = {\r\n isAuthenticated: true,\r\n result: access_token,\r\n token: access_token,\r\n id: user.id,\r\n email: user.email,\r\n login: user.login,\r\n fullRights: user.fullRights,\r\n use2FA: user.use2FA,\r\n useCustomerAccess: user.useCustomerAccess,\r\n name: user.name,\r\n externalUser: user.externalUser,\r\n language: user.language,\r\n forwarderId: user.forwarderId,\r\n tokenElectron: user.tokenElectron,\r\n license,\r\n }\r\n\r\n res.status(StatusCodes.OK).send(result)\r\n })\r\n })\r\n })\r\n } catch (error) {\r\n logger.error('Error in verify2FA controller', { meta: error })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: 'Internal server error' })\r\n }\r\n },\r\n\r\n async resend2FA(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n try {\r\n const { tempToken } = req.body\r\n\r\n if (!tempToken) {\r\n res.status(StatusCodes.BAD_REQUEST).send({ message: 'Token is required' })\r\n return\r\n }\r\n\r\n let decoded: any\r\n try {\r\n decoded = jwt.verify(tempToken, TWO_FA_SECRET)\r\n if (decoded.purpose !== '2fa_pending') {\r\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'Invalid token' })\r\n return\r\n }\r\n } catch (e) {\r\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'Token expired or invalid' })\r\n return\r\n }\r\n\r\n const twoFAMethod = decoded.twoFAMethod || 'sms'\r\n\r\n if (twoFAMethod === 'sms') {\r\n await sendCodeViaSms(decoded.id)\r\n } else {\r\n await sendCodeViaEmail(decoded.id)\r\n }\r\n\r\n res.status(StatusCodes.OK).send({ message: 'Code sent successfully' })\r\n } catch (error) {\r\n logger.error('Error in resend2FA controller', { meta: error })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: 'Failed to send verification code' })\r\n }\r\n },\r\n}\r\n","import cryptoJs from 'crypto-js'\nimport bCrypt from 'bcrypt'\n\nconst secretKey = process.env.CRYPTO_SECRET_KEY as string\n\nexport default {\n generateRandomToken() {\n return cryptoJs.lib.WordArray.random(20).toString(cryptoJs.enc.Hex)\n },\n\n createPasswordHash(password: string) {\n return bCrypt.hashSync(password, bCrypt.genSaltSync(10))\n },\n\n encrypt(value: any) {\n const key = cryptoJs.enc.Utf8.parse(secretKey)\n const iv = cryptoJs.lib.WordArray.random(16)\n\n const encrypted = cryptoJs.AES.encrypt(value, key, { iv: iv, mode: cryptoJs.mode.CTR, padding: cryptoJs.pad.NoPadding })\n\n return {\n iv: iv.toString(cryptoJs.enc.Hex),\n content: encrypted.ciphertext.toString(cryptoJs.enc.Hex),\n }\n },\n\n decrypt(hash: { iv: string; content: string }) {\n const key = cryptoJs.enc.Utf8.parse(secretKey)\n const iv = cryptoJs.enc.Hex.parse(hash.iv)\n const content = cryptoJs.enc.Hex.parse(hash.content)\n\n const encrypted = cryptoJs.lib.CipherParams.create({\n ciphertext: content,\n })\n\n const decrypted = cryptoJs.AES.decrypt(encrypted, key, { iv: iv, mode: cryptoJs.mode.CTR, padding: cryptoJs.pad.NoPadding })\n\n return cryptoJs.enc.Utf8.stringify(decrypted)\n },\n}\n","var LocalStrategy = require('passport-local').Strategy\nimport BCrypt from 'bcrypt'\nimport { StatusCodes } from 'http-status-codes'\nimport logger from '@/core/services/logger.service'\nimport sequelize from '@/database/dbConnection'\nimport autoLoginAuth from '@/core/auth/autoLoginAuth'\nimport { PassportStatic } from 'passport'\n\nimport { Request, Response } from 'express'\n\nconst checkPermissions = (req: Request, res: Response, done: Function) => {\n if (req.user?.isFullRight === true) {\n done()\n } else {\n console.warn('User doesnt have necessary permission to access this.')\n return res.status(StatusCodes.FORBIDDEN).send('Permission denied for the user. User doesnt have necessary permission to access this')\n }\n}\n\nexport default {\n initializePassport(passport: PassportStatic) {\n // Configure Passport authenticated session persistence.\n //\n // In order to restore authentication state across HTTP requests, Passport needs\n // to serialize users into and deserialize users out of the session. The\n // typical implementation of this is as simple as supplying the user ID when\n // serializing, and querying the user record by ID from the database when\n // deserializing.\n\n // Passport needs to be able to serialize and deserialize users to support persistent login sessions\n passport.serializeUser(function (user: Record<any, any>, done: Function) {\n done(null, user.id)\n })\n\n passport.deserializeUser(async function (id: string, done: Function) {\n const user: Record<any, any> | null = await sequelize.models.User.findByPk(id)\n if (user && user.isActive === true) {\n done(null, user)\n } else {\n done('User is not found', false)\n }\n })\n\n // Configure the local strategy for use by Passport.\n //\n // The local strategy require a `verify` function which receives the credentials\n // (`username` and `password`) submitted by the user. The function must verify\n // that the password is correct and then invoke `cb` with a user object, which\n // will be set at `req.user` in route handlers after authentication.\n passport.use(\n 'login',\n new LocalStrategy(\n {\n usernameField: 'email',\n passwordField: 'password',\n passReqToCallback: true,\n },\n async function (req: Request, username: string, password: string, done) {\n if (req.body.tokenElectron) {\n let decriptData = autoLoginAuth.decrypt(req.body.tokenElectron)\n let workingPlace = req.body.workingPlace\n if (workingPlace !== decriptData.workingPlace) {\n logger.error('Electron auth error', req.body.workingPlace)\n return done(null, false)\n }\n username = decriptData.login\n password = decriptData.password\n }\n const user: Record<any, any> = await sequelize.models.User.findOne({\n where: {\n login: username,\n isActive: true,\n },\n }).catch((err) => {\n console.error(err)\n logger.error('Bad request for user', username)\n return done(null, false)\n })\n\n if (!user) {\n logger.error(`User not found or not active with username: ${username}`)\n return done(null, false)\n }\n // User exists but wrong password, log the error\n if (!isValidPassword(user, password)) {\n logger.error('Invalid Password', username)\n return done(null, false) // redirect back to login page\n }\n\n let tokenElectron = ''\n if (req.body.electronCert) {\n tokenElectron = JSON.stringify({\n login: req.body.email,\n password: req.body.password,\n workingPlace: req.body.workingPlace,\n })\n user.tokenElectron = autoLoginAuth.encrypt(tokenElectron)\n }\n return done(null, user)\n }\n )\n )\n\n var isValidPassword = (user: Record<any, any>, password: string) => {\n return BCrypt.compareSync(password, user.password)\n }\n },\n\n isAuthenticated(req: Request, res: Response, done: Function) {\n // Passport adds the isAuthenticated function in req body when successfully authenticated, removes when session expired or user logs out\n\n if (req.url.includes('/app') || req.url.includes('/auth')) {\n done()\n return\n }\n\n if (req.isAuthenticated()) {\n done()\n } else {\n return res.status(StatusCodes.UNAUTHORIZED).send('only for logged in users')\n }\n },\n\n isSuperAdmin(req: Request, res: Response, done: Function) {\n // Validate if admin is a superadmin, otherwise return a 401\n return checkPermissions(req, res, done)\n },\n}\n","import express from 'express'\r\nimport passport from 'passport'\r\n\r\nimport controllers from '../controllers'\r\n\r\nconst router = express.Router()\r\n\r\nconst namespace = 'auth'\r\n\r\nrouter.route(`/${namespace}/login`).post(passport.authenticate('login'), controllers.login)\r\nrouter.route(`/${namespace}/session`).get(controllers.session)\r\nrouter.route(`/${namespace}/logout`).get(controllers.logout)\r\nrouter.route(`/${namespace}/register`).post(controllers.register)\r\nrouter.route(`/${namespace}/confirm_email_address/:token`).get(controllers.confirmEmailAddress)\r\nrouter.route(`/${namespace}/resend_email_address_confirmation_link`).get(controllers.resendEmailAddressConfirmationLink)\r\nrouter.route(`/${namespace}/forgot_password`).post(controllers.forgotPassword)\r\nrouter.route(`/${namespace}/validate_password_reset_token/:token`).get(controllers.validatePasswordResetToken)\r\nrouter.route(`/${namespace}/reset_password`).post(controllers.resetPassword)\r\nrouter.route(`/${namespace}/pre_login`).post(controllers.preLogin)\r\nrouter.route(`/${namespace}/verify_2fa`).post(controllers.verify2FA)\r\nrouter.route(`/${namespace}/resend_2fa`).post(controllers.resend2FA)\r\n\r\nexport default router\r\n","import sequelize from '@/database/dbConnection'\nimport { DataTypes, Model } from 'sequelize'\n\nclass BasicSessionModel extends Model {}\n\nBasicSessionModel.init(\n {\n id: {\n type: DataTypes.UUID,\n primaryKey: true,\n },\n sid: {\n type: DataTypes.UUID,\n allowNull: false,\n unique: true,\n },\n userId: DataTypes.UUID,\n expires: DataTypes.DATE,\n data: DataTypes.TEXT,\n licNumber: DataTypes.STRING(100),\n clientType: {\n type: DataTypes.ENUM,\n values: ['browser', 'mobile', 'electron', 'api'],\n defaultValue: 'browser',\n },\n },\n {\n sequelize,\n tableName: 'session',\n modelName: 'Session',\n }\n)\n","import initObjects from './index'\nimport controllerService from '@/core/services/controller.service'\nimport dataProcessorService from '@/core/services/dataProcessor.service'\nimport scheduledJobService from '@/core/services/scheduledJob.service'\nimport migrationService from '@/core/services/migration.service'\nimport eventSubscriptionsService from '@/core/services/eventSubscription.service'\n\nimport cryptoGen from '@/core/auth/cryptoGen'\nimport fs from 'fs'\nimport { StatusCodes } from 'http-status-codes'\nimport logger from '@/core/services/logger.service'\n\nimport { Request, Response, NextFunction } from 'express'\nimport { Transaction } from 'sequelize'\nimport { AppObject, ControllerParams, ControllerResult } from '@/src/types'\n\nexport default async () => {\n const objects = await initObjects()\n const eventSubscriptions = await eventSubscriptionsService.initSubscriptions('server')\n\n for (const objectName in objects) {\n let module: any\n\n const modulePath = `${objects[objectName].type}s/${objectName}/server.module.js`\n\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n if (fs.existsSync(fullPath)) {\n module = __non_webpack_require__(fullPath)\n }\n\n objects[objectName].findAll = async (req: Request, res: Response, next: NextFunction) => {\n let result: ControllerResult | null = null\n\n if (module?.findAll) {\n result = await module.findAll(req, res, next, objects[objectName])\n } else {\n const params: ControllerParams = {}\n if (module?.beforeFindAll) {\n await module.beforeFindAll(req, res, next, objects[objectName], params)\n }\n\n const subscriptionBeforeFindAll = eventSubscriptionsService.getSubscription(eventSubscriptions, 'beforeFindAll', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionBeforeFindAll?.serviceFunction) {\n await subscriptionBeforeFindAll?.serviceFunction(req, res, next, objects[objectName], params)\n }\n\n result = await controllerService.findAllItems(req, res, next, objects[objectName], params)\n\n if (module?.afterFindAll) {\n await module.afterFindAll(req, res, next, objects[objectName], result, params)\n }\n\n const subscriptionAfterFindAll = eventSubscriptionsService.getSubscription(eventSubscriptions, 'afterFindAll', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionAfterFindAll?.serviceFunction) {\n await subscriptionAfterFindAll?.serviceFunction(req, res, next, objects[objectName], result, params)\n }\n }\n\n if (!result?.status || !result?.responseData) {\n logger.error(`Error in ${objectName} findById controller. Controller result is not correct`)\n }\n\n return res ? res.status(result?.status || StatusCodes.INTERNAL_SERVER_ERROR).send(result?.responseData || { message: 'Result error.' }) : result\n }\n\n objects[objectName].findById = async (req: Request, res: Response, next: NextFunction) => {\n let result: ControllerResult | null = null\n\n if (module?.findById) {\n result = await module.findById(req, res, next, objects[objectName])\n } else {\n const params: ControllerParams = {}\n if (module?.beforeFindById) {\n await module.beforeFindById(req, res, next, objects[objectName], params)\n }\n\n const subscriptionBeforeFindById = eventSubscriptionsService.getSubscription(eventSubscriptions, 'beforeFindById', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionBeforeFindById?.serviceFunction) {\n await subscriptionBeforeFindById?.serviceFunction(req, res, next, objects[objectName], params)\n }\n\n result = await controllerService.findItem(req, res, next, objects[objectName], params)\n\n if (module?.afterFindById) {\n await module.afterFindById(req, res, next, objects[objectName], result, params)\n }\n\n const subscriptionAfterFindById = eventSubscriptionsService.getSubscription(eventSubscriptions, 'afterFindById', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionAfterFindById?.serviceFunction) {\n await subscriptionAfterFindById?.serviceFunction(req, res, next, objects[objectName], result, params)\n }\n }\n\n if (!result?.status || !result?.responseData) {\n logger.error(`Error in ${objectName} findById controller. Controller result is not correct`)\n }\n\n return res ? res.status(result?.status || StatusCodes.INTERNAL_SERVER_ERROR).send(result?.responseData || { message: 'Result error.' }) : result\n }\n\n objects[objectName].create = async (req: Request, res: Response, next: NextFunction) => {\n if (module?.create) {\n return await module.create(req, res, next, objects[objectName])\n } else {\n const transaction: Transaction = req.transaction ? req.transaction : await objects[objectName].model.sequelize.transaction()\n\n const params: ControllerParams = {\n cancel: false,\n transaction,\n }\n\n try {\n if (module?.beforeCreate && typeof module?.beforeCreate === 'function') {\n await module.beforeCreate(req, res, next, objects[objectName], params)\n }\n\n const subscriptionBeforeCreate = eventSubscriptionsService.getSubscription(eventSubscriptions, 'beforeCreate', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionBeforeCreate?.serviceFunction) {\n await subscriptionBeforeCreate?.serviceFunction(req, res, next, objects[objectName], params)\n }\n\n if (params.cancel) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: params.message ? params.message : 'Operation is canceled' } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n const afterCreate = async (req: Request, res: Response, newItem: Record<string, any>, t: Transaction) => {\n if (module?.afterCreate && typeof module?.afterCreate === 'function') {\n await module.afterCreate(req, res, next, objects[objectName], { newItem, transaction: t })\n }\n\n const subscriptionAfterCreate = eventSubscriptionsService.getSubscription(eventSubscriptions, 'afterCreate', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionAfterCreate?.serviceFunction) {\n await subscriptionAfterCreate?.serviceFunction(req, res, next, objects[objectName], { newItem, transaction: t })\n }\n }\n\n hashPasswordData(req, objects[objectName], params)\n\n const result = await controllerService.createItem(req, res, next, objects[objectName], params, afterCreate)\n\n if (result?.status !== StatusCodes.OK) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n const confirmedDocument = objects[objectName].type === 'document' && objects[objectName].confirmation === true && req.body?.isConfirmed === true\n\n if (!confirmedDocument) {\n if (!req.transaction) {\n await transaction.commit()\n }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n const recordsSet: Record<string, any> = {}\n\n if (module?.beforeConfirm && typeof module?.beforeConfirm === 'function') {\n await module.beforeConfirm(req, res, next, objects[objectName], recordsSet, params)\n }\n\n const subscriptionBeforeConfirm = eventSubscriptionsService.getSubscription(eventSubscriptions, 'beforeConfirm', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionBeforeConfirm?.serviceFunction) {\n await subscriptionBeforeConfirm?.serviceFunction(req, res, next, objects[objectName], recordsSet, params)\n }\n\n if (params.cancel) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: params.message ? params.message : 'Operation is canceled' } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n const confirmResult = await controllerService.confirmItem(req, res, next, objects[objectName], { recordsSet, ...params })\n\n if (module?.afterConfirm && typeof module?.afterConfirm === 'function') {\n await module.afterConfirm(req, res, next, objects[objectName], params)\n }\n\n const subscriptionAfterConfirm = eventSubscriptionsService.getSubscription(eventSubscriptions, 'afterConfirm', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionAfterConfirm?.serviceFunction) {\n await subscriptionAfterConfirm?.serviceFunction(req, res, next, objects[objectName], params)\n }\n\n if (confirmResult.status === StatusCodes.OK) {\n if (!req.transaction) {\n await transaction.commit()\n }\n return res ? res.status(result.status).send(result.responseData) : result\n } else {\n if (!req.transaction) {\n await transaction.rollback()\n }\n return res ? res.status(confirmResult.status).send(confirmResult.responseData) : confirmResult\n }\n } catch (error) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result: ControllerResult = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error.message } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n }\n }\n\n objects[objectName].update = async (req: Request, res: Response, next: NextFunction) => {\n if (module?.update) {\n return await module.update(req, res, next, objects[objectName])\n } else {\n const transaction: Transaction = req.transaction ? req.transaction : await objects[objectName].model.sequelize.transaction()\n\n const params: ControllerParams = {\n cancel: false,\n transaction,\n }\n\n try {\n if (module?.beforeUpdate && typeof module?.beforeUpdate === 'function') {\n await module.beforeUpdate(req, res, next, objects[objectName], params)\n }\n\n const subscriptionBeforeUpdate = eventSubscriptionsService.getSubscription(eventSubscriptions, 'beforeUpdate', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionBeforeUpdate?.serviceFunction) {\n await subscriptionBeforeUpdate?.serviceFunction(req, res, next, objects[objectName], params)\n }\n\n if (params.cancel) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: params.message ? params.message : 'Operation is canceled' } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n const afterUpdate = async (req: Request, res: Response, updatedObject: Record<string, any>, existObject: Record<string, any>, t: Transaction) => {\n if (module?.afterUpdate && typeof module?.afterUpdate === 'function') {\n await module.afterUpdate(req, res, next, objects[objectName], { updatedObject, existObject, transaction: t, changeDeletionMark: false })\n }\n\n const subscriptionAfterUpdate = eventSubscriptionsService.getSubscription(eventSubscriptions, 'afterUpdate', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionAfterUpdate?.serviceFunction) {\n await subscriptionAfterUpdate?.serviceFunction(req, res, next, objects[objectName], { updatedObject, existObject, transaction: t, changeDeletionMark: false })\n }\n }\n\n hashPasswordData(req, objects[objectName], params)\n\n const result = await controllerService.updateItem(req, res, next, objects[objectName], params, afterUpdate)\n\n if (result?.status !== StatusCodes.OK) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n const confirmedDocument = objects[objectName].type === 'document' && objects[objectName].confirmation === true && req.body?.isConfirmed === true\n\n if (!confirmedDocument) {\n if (!req.transaction) {\n await transaction.commit()\n }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n const recordsSet: Record<string, any> = {}\n\n if (module?.beforeConfirm && typeof module?.beforeConfirm === 'function') {\n await module.beforeConfirm(req, res, next, objects[objectName], recordsSet, params)\n }\n\n const subscriptionBeforeConfirm = eventSubscriptionsService.getSubscription(eventSubscriptions, 'beforeConfirm', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionBeforeConfirm?.serviceFunction) {\n await subscriptionBeforeConfirm?.serviceFunction(req, res, next, objects[objectName], recordsSet, params)\n }\n\n if (params.cancel) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result: ControllerResult = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: params.message ? params.message : 'Operation is canceled' } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n const confirmResult = await controllerService.confirmItem(req, res, next, objects[objectName], { recordsSet, ...params })\n\n if (module?.afterConfirm && typeof module?.afterConfirm === 'function') {\n await module.afterConfirm(req, res, next, objects[objectName], params)\n }\n\n const subscriptionAfterConfirm = eventSubscriptionsService.getSubscription(eventSubscriptions, 'afterConfirm', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionAfterConfirm?.serviceFunction) {\n await subscriptionAfterConfirm?.serviceFunction(req, res, next, objects[objectName], params)\n }\n\n if (confirmResult.status === StatusCodes.OK) {\n if (!req.transaction) {\n await transaction.commit()\n }\n return res ? res.status(result.status).send(result.responseData) : result\n } else {\n if (!req.transaction) {\n await transaction.rollback()\n }\n return res ? res.status(confirmResult.status).send(confirmResult.responseData) : confirmResult\n }\n } catch (error) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result: ControllerResult = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error.message } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n }\n }\n\n objects[objectName].delete = async (req: Request, res: Response, next: NextFunction) => {\n if (module?.delete) {\n return await module.delete(req, res, next, objects[objectName])\n } else {\n const transaction: Transaction = req.transaction ? req.transaction : await objects[objectName].model.sequelize.transaction()\n\n const params: ControllerParams = {\n transaction,\n }\n\n try {\n if (module?.beforeDelete && typeof module?.beforeDelete === 'function') {\n await module.beforeDelete(req, res, next, objects[objectName], params)\n }\n\n const subscriptionBeforeDelete = eventSubscriptionsService.getSubscription(eventSubscriptions, 'beforeDelete', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionBeforeDelete?.serviceFunction) {\n await subscriptionBeforeDelete?.serviceFunction(req, res, next, objects[objectName], params)\n }\n\n const afterDelete = async (req: Request, res: Response, deletedObject: Record<string, any>, t: Transaction) => {\n if (module?.afterDelete && typeof module?.afterDelete === 'function') {\n module.afterDelete(req, res, next, objects[objectName], { deletedObject, ...params })\n }\n\n const subscriptionAfterDelete = eventSubscriptionsService.getSubscription(eventSubscriptions, 'afterDelete', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionAfterDelete?.serviceFunction) {\n await subscriptionAfterDelete?.serviceFunction(req, res, next, objects[objectName], { deletedObject, ...params })\n }\n }\n\n const result = await controllerService.deleteItem(req, res, next, objects[objectName], params, afterDelete)\n\n if (!req.transaction) {\n if (result.status === StatusCodes.OK) {\n await transaction.commit()\n } else {\n await transaction.rollback()\n }\n }\n\n return res ? res.status(result.status).send(result.responseData) : result\n } catch (error) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result: ControllerResult = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error.message } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n }\n }\n\n if (objects[objectName].type === 'catalog') {\n objects[objectName].findPredefined = async (req: Request, res: Response, next: NextFunction) => {\n const result = await controllerService.findPredefinedItem(req, res, next, objects[objectName])\n return res ? res.status(result.status).send(result.responseData) : result\n }\n }\n\n if (objects[objectName].type === 'catalog' || objects[objectName].type === 'document') {\n objects[objectName].changeDeletionMark = async (req: Request, res: Response, next: NextFunction) => {\n const transaction: Transaction = req.transaction ? req.transaction : await objects[objectName].model.sequelize.transaction()\n\n const params: ControllerParams = {\n transaction,\n changeDeletionMark: true,\n }\n\n try {\n if (module?.beforeUpdate && typeof module?.beforeUpdate === 'function') {\n await module.beforeUpdate(req, res, next, objects[objectName], params)\n }\n\n const subscriptionBeforeUpdate = eventSubscriptionsService.getSubscription(eventSubscriptions, 'beforeUpdate', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionBeforeUpdate?.serviceFunction) {\n await subscriptionBeforeUpdate?.serviceFunction(req, res, next, objects[objectName], params)\n }\n\n const afterChange = async (req: Request, res: Response, updatedObject: Record<string, any>, existObject: Record<string, any>, t: Transaction) => {\n if (module?.afterUpdate && typeof module?.afterUpdate === 'function') {\n await module.afterUpdate(req, res, next, objects[objectName], { updatedObject, existObject, ...params })\n }\n\n const subscriptionAfterUpdate = eventSubscriptionsService.getSubscription(eventSubscriptions, 'afterUpdate', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionAfterUpdate?.serviceFunction) {\n await subscriptionAfterUpdate?.serviceFunction(req, res, next, objects[objectName], { updatedObject, existObject, ...params })\n }\n }\n\n const result = await controllerService.changeItemDeletionMark(req, res, next, objects[objectName], params, afterChange)\n\n if (!req.transaction) {\n if (result?.status === StatusCodes.OK) {\n await transaction.commit()\n } else {\n await transaction.rollback()\n }\n }\n\n return res ? res.status(result.status).send(result.responseData) : result\n } catch (error) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result: ControllerResult = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error.message } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n }\n }\n\n if (objects[objectName].type === 'register') {\n if (objects[objectName].accumulationRegister) {\n objects[objectName].calculateTotals = async (req: Request, res: Response, next: NextFunction) => {\n const result = await controllerService.calculateRegisterTotals(req, res, next, objects[objectName])\n return res ? res.status(result.status).send(result.responseData) : result\n }\n }\n\n if (objectName === 'dataProcessors') {\n objects[objectName].executeProcessing = async (req: Request, res: Response, next: NextFunction) => {\n const result = await dataProcessorService.executeProcessing(req, res, next, objects[objectName])\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n objects[objectName].exportProcessor = async (req: Request, res: Response, next: NextFunction) => {\n if (!req) {\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: 'Controller can only be called from client' } }\n }\n\n await dataProcessorService.exportProcessor(req, res, next, objects[objectName])\n }\n\n objects[objectName].importProcessor = async (req: Request, res: Response, next: NextFunction) => {\n if (!req) {\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: 'Controller can only be called from client' } }\n }\n\n await dataProcessorService.importProcessor(req, res, next, objects[objectName])\n }\n }\n }\n\n if (objects[objectName].type === 'catalog') {\n if (objectName === 'appObjects') {\n objects[objectName].executeMigration = async (req: Request, res: Response, next: NextFunction) => {\n try {\n const result = await migrationService.executeMigrations(req, res, next, objects[objectName])\n return res ? res.status(result.status).send(result.responseData) : result\n } catch (error) {\n logger.error(`Error in executeMigration controller`, { meta: error })\n return res.status(StatusCodes.INTERNAL_SERVER_ERROR).send(error)\n }\n }\n\n objects[objectName].existMigrations = async (req: Request, res: Response, next: NextFunction) => {\n try {\n const result = await migrationService.existMigrations(req, res, next, objects[objectName])\n return res ? res.status(result.status).send(result.responseData) : result\n } catch (error) {\n logger.error(`Error in existMigrations controller`, { meta: error })\n return res.status(StatusCodes.INTERNAL_SERVER_ERROR).send(error)\n }\n }\n } else if (objectName === 'scheduledJobs') {\n objects[objectName].executeManually = async (req: Request, res: Response, next: NextFunction) => {\n const result = await scheduledJobService.executeManually(req, res, next, objects[objectName])\n return res ? res.status(result.status).send(result.responseData) : result\n }\n }\n }\n\n if (objects[objectName].type === 'document') {\n objects[objectName].confirm = async (req: Request, res: Response, next: NextFunction) => {\n const transaction: Transaction = req.transaction ? req.transaction : await objects[objectName].model.sequelize.transaction()\n\n const recordsSet: Record<string, any> = {}\n const params: ControllerParams = { cancel: false, transaction }\n\n try {\n const objectData: ControllerResult = await objects[objectName].findById({ params: { id: req.body.id } })\n\n if (objectData.status === StatusCodes.OK) {\n req.body = JSON.parse(JSON.stringify(objectData.responseData))\n }\n\n if (module?.beforeConfirm && typeof module?.beforeConfirm === 'function') {\n await module.beforeConfirm(req, res, next, objects[objectName], recordsSet, params)\n }\n\n const subscriptionBeforeConfirm = eventSubscriptionsService.getSubscription(eventSubscriptions, 'beforeConfirm', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionBeforeConfirm?.serviceFunction) {\n await subscriptionBeforeConfirm?.serviceFunction(req, res, next, objects[objectName], recordsSet, params)\n }\n\n if (params.cancel) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result: ControllerResult = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: params.message ? params.message : 'Operation is canceled' } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n const result = await controllerService.confirmItem(req, res, next, objects[objectName], { recordsSet, ...params })\n\n if (module?.afterConfirm && typeof module?.afterConfirm === 'function') {\n await module.afterConfirm(req, res, next, objects[objectName], params)\n }\n\n const subscriptionAfterConfirm = eventSubscriptionsService.getSubscription(eventSubscriptions, 'afterConfirm', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionAfterConfirm?.serviceFunction) {\n await subscriptionAfterConfirm?.serviceFunction(req, res, next, objects[objectName], params)\n }\n\n if (!req.transaction) {\n if (result.status === StatusCodes.OK) {\n await transaction.commit()\n } else {\n await transaction.rollback()\n }\n }\n\n return res ? res.status(result.status).send(result.responseData) : result\n } catch (error) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result: ControllerResult = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error.message } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n }\n\n objects[objectName].undoConfirm = async (req: Request, res: Response, next: NextFunction) => {\n const transaction = req.transaction ? req.transaction : await objects[objectName].model.sequelize.transaction()\n const params: ControllerParams = { cancel: false, transaction }\n\n try {\n const objectData: ControllerResult = await objects[objectName].findById({ params: { id: req.body.id } })\n\n if (objectData.status === StatusCodes.OK) {\n req.body = JSON.parse(JSON.stringify(objectData.responseData))\n }\n\n if (module?.undoConfirm && typeof module?.undoConfirm === 'function') {\n await module.undoConfirm(req, res, next, objects[objectName], params)\n }\n\n const subscriptionUndoConfirm = eventSubscriptionsService.getSubscription(eventSubscriptions, 'undoConfirm', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionUndoConfirm?.serviceFunction) {\n await subscriptionUndoConfirm?.serviceFunction(req, res, next, objects[objectName], params)\n }\n\n if (params.cancel) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: params.message ? params.message : 'Operation is canceled' } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n const result = await controllerService.undoConfirmItem(req, res, next, objects[objectName], params)\n\n if (!req.transaction) {\n if (result.status === StatusCodes.OK) {\n await transaction.commit()\n } else {\n await transaction.rollback()\n }\n }\n\n return res ? res.status(result.status).send(result.responseData) : result\n } catch (error) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error.message } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n }\n }\n\n if (objects[objectName].api && module) {\n for (const api of objects[objectName].api) {\n if (module[api.controller]) {\n objects[objectName].controllers[api.controller] = async (req: Request, res: Response, next: NextFunction) => {\n module[api.controller](req, res, next, objects[objectName])\n }\n }\n }\n }\n }\n\n return objects\n}\n\nfunction hashPasswordData(req: Request, object: AppObject, params: ControllerParams) {\n const hasPassword = object.fields.find((el) => el.password === true)\n\n if (hasPassword) {\n const objectData: Record<string, any> = params.objectData ? params.objectData : { ...req.body }\n\n for (const field of object.fields.filter((el) => el.password === true)) {\n if (objectData[field.name] === '') {\n objectData[field.name] = null\n } else if (objectData[field.name]) {\n if (field.decryptable) {\n const fieldHash = cryptoGen.encrypt(objectData[field.name])\n objectData[field.name] = JSON.stringify(fieldHash)\n } else {\n objectData[field.name] = cryptoGen.createPasswordHash(objectData[field.name])\n }\n }\n }\n\n params.objectData = objectData\n }\n}\n","import { DataTypes, Model, QueryTypes, ModelStatic, AbstractDataType, ModelAttributes, ModelAttributeColumnOptions, ModelIndexesOptions } from 'sequelize'\nimport sequelize from '@/database/dbConnection'\nimport moment from 'moment'\nimport fs from 'fs'\nimport _ from 'lodash'\nimport commonService from '@/core/services/common.service'\nimport { DBAppObject, AppObject, AppObjectTablePart, AppObjectAccumulationTable, AppObjectField, RefField, LeadingField, AppObjectReflection } from '@/src/types'\nimport multiTypeService from '@/core/services/multiType.service'\nimport logger from '@/core/services/logger.service'\n\nlet enums: Record<string, any> = {}\n\ninterface MissingRef {\n refField?: RefField\n object?: AppObject\n belongToObject?: DBAppObject[] | DBAppObject\n leadingField?: LeadingField\n leading?: boolean\n model?: string\n}\n\ninterface RefFieldData {\n foreignKey: string\n as: string\n allowNull?: boolean\n index?: boolean\n _fullSearch?: boolean\n constraints?: boolean\n}\n\nexport default async (): Promise<Record<string, AppObject>> => {\n enums = await commonService.initEnums()\n\n const queryText =\n 'SELECT *\\\n FROM app_objects \\\n WHERE \\\n app_objects.\"markedToDelete\" = false \\\n AND app_objects.\"dbTableName\" IS NOT NULL'\n\n const appObjects: DBAppObject[] = await sequelize.query(queryText, { type: QueryTypes.SELECT })\n\n const objects: Record<string, AppObject> = {}\n const refFields: RefField[] = []\n const leadingFields: LeadingField[] = []\n\n for (const appObject of appObjects) {\n let fields: ModelAttributes = {}\n let indexes: ModelIndexesOptions[] = []\n\n const objectFields: AppObjectField[] = JSON.parse(appObject.dbFields)\n\n const techFields: Array<string> = []\n let existMultiTypeCommonField = false\n for (const field of objectFields.filter((el) => !el.isTablePart)) {\n if (field.multiType) {\n if (field.multiTypeVariant === 'common') existMultiTypeCommonField = true\n initMultiTypeFields(fields, field, techFields)\n } else if (field.type !== 'object') {\n fields[field.dbName] = prepareFieldData(field)\n }\n\n if (field.type === 'object') {\n refFields.push({\n objectName: appObject.name,\n field,\n })\n }\n }\n\n if (appObject.indexes) {\n const objectIndexes: ModelIndexesOptions[] = JSON.parse(appObject.indexes)\n\n for (const index of objectIndexes) {\n indexes.push({\n name: index.name,\n fields: index.fields,\n unique: index.unique,\n using: index.using,\n })\n }\n }\n\n const reflection: AppObjectReflection = appObject.reflection ? JSON.parse(appObject.reflection) : {}\n\n if (appObject.type === 'catalog') {\n fields.presentation = {\n type: new DataTypes.VIRTUAL(DataTypes.STRING, reflection.fields ? reflection.fields : ['name']),\n get() {\n let dvPresentation: string\n if (appObject.processedPresentation) {\n dvPresentation = this.getDataValue('presentation')\n if (dvPresentation) {\n return dvPresentation\n }\n }\n\n if (reflection.template && reflection.template !== '') {\n const regex = /\\[[a-zA-Z\\\\.]+\\]/gm\n const params: string[] = []\n let m: RegExpExecArray | null\n\n while ((m = regex.exec(reflection.template)) !== null) {\n if (m.index === regex.lastIndex) {\n regex.lastIndex++\n }\n\n m.forEach((match) => {\n params.push(match)\n })\n }\n\n let presentation = reflection.template\n\n for (const param of params) {\n const paramKey = param.replace('[', '').replace(']', '')\n let paramValue = this[paramKey]\n\n const objectField = objectFields.find((el) => el.dbName === paramKey)\n\n if (objectField) {\n if (objectField.type === 'date') {\n const dateFormat = objectField.format && objectField.format !== '' ? objectField.format : 'DD.MM.YYYY HH:mm:ss'\n paramValue = moment(this[paramKey]).format(dateFormat)\n } else {\n paramValue = this[paramKey]\n }\n }\n\n presentation = presentation.replace(param, paramValue)\n }\n\n return presentation\n } else if (reflection.fields?.length > 0) {\n const presentation = reflection.fields\n .map((el) => {\n if (this[el]) {\n return this[el]\n }\n })\n .filter((el) => el !== undefined)\n return presentation.join(', ')\n } else {\n return this.getDataValue('name')\n }\n },\n set(value: string) {\n this.setDataValue('presentation', value)\n },\n _sortBy: reflection.sortBy ? reflection.sortBy : 'name',\n }\n }\n\n if (appObject.type === 'document') {\n fields.presentation = {\n type: new DataTypes.VIRTUAL(DataTypes.STRING, reflection.fields ? reflection.fields : ['numberStr']),\n get() {\n let dvPresentation: string\n if (appObject.processedPresentation) {\n dvPresentation = this.getDataValue('presentation')\n if (dvPresentation) {\n return dvPresentation\n }\n }\n\n if (reflection.template && reflection.template !== '') {\n const regex = /\\[[a-zA-Z\\\\.]+\\]/gm\n const params: string[] = []\n let m: RegExpExecArray | null\n\n while ((m = regex.exec(reflection.template)) !== null) {\n if (m.index === regex.lastIndex) {\n regex.lastIndex++\n }\n\n m.forEach((match) => {\n params.push(match)\n })\n }\n\n let presentation = reflection.template\n\n for (const param of params) {\n const paramKey = param.replace('[', '').replace(']', '')\n let paramValue = this[paramKey]\n\n const objectField = objectFields.find((el) => el.dbName === paramKey)\n\n if (objectField) {\n if (objectField.type === 'date') {\n const dateFormat = objectField.format && objectField.format !== '' ? objectField.format : 'DD.MM.YYYY HH:mm:ss'\n paramValue = moment(this[paramKey]).format(dateFormat)\n } else {\n paramValue = this[paramKey]\n }\n }\n\n presentation = presentation.replace(param, paramValue)\n }\n\n return presentation\n } else if (reflection.fields?.length > 0) {\n const presentation = reflection.fields\n .map((el) => {\n if (this[el]) {\n return this[el]\n }\n })\n .filter((el) => el !== undefined)\n return presentation.join(', ')\n } else {\n return this.getDataValue('numberStr')\n }\n },\n set(value: string) {\n this.setDataValue('presentation', value)\n },\n _sortBy: reflection.sortBy ? reflection.sortBy : 'numberStr',\n }\n }\n\n class ObjectModel extends Model {}\n\n const newObject: AppObject = {\n id: appObject.id,\n name: appObject.name,\n singularName: appObject.singularName,\n title: appObject.title,\n path: appObject.path,\n tableName: appObject.dbTableName,\n type: appObject.type,\n confirmation: appObject.confirmation,\n system: appObject.system,\n configurationData: appObject.configurationData,\n hierarchic: appObject.hierarchic,\n api: appObject.api ? JSON.parse(appObject.api) : null,\n staticAPI: appObject.staticAPI ? JSON.parse(appObject.staticAPI) : {},\n fields: objectFields,\n reflection,\n withoutTimestamps: appObject.withoutTimestamps,\n processedPresentation: appObject.processedPresentation,\n accessRoleId: appObject.accessRoleId,\n accumulationRegister: appObject.accumulationRegister,\n model: ObjectModel.init(fields, {\n sequelize,\n modelName: appObject.model,\n tableName: appObject.dbTableName,\n indexes,\n timestamps: appObject.withoutTimestamps !== true,\n mainModel: true,\n }),\n accTable: null,\n tables: {},\n controllers: {},\n }\n\n const hasPassword = objectFields.find((el) => el.password === true)\n\n if (hasPassword) {\n newObject.model.prototype.toJSON = function () {\n const values = Object.assign({}, this.get())\n\n for (const field of objectFields.filter((el) => el.password === true)) {\n delete values[field.name]\n }\n return values\n }\n }\n\n for (const field of objectFields) {\n if (field.leading) {\n leadingFields.push({\n field,\n belongTable: newObject.model,\n })\n }\n }\n\n for (const field of objectFields.filter((el) => el.isTablePart)) {\n createTablePart(field, newObject, refFields, leadingFields, objects)\n }\n\n if (newObject.type === 'register' && newObject.accumulationRegister) {\n createAccumulationTable(appObject, newObject, refFields)\n }\n\n if (existMultiTypeCommonField) {\n if (techFields.length > 0) {\n const prevToJSON = newObject.model.prototype.toJSON\n newObject.model.prototype.toJSON = function () {\n const values = prevToJSON ? prevToJSON.call(this) : Object.assign({}, this.get ? this.get() : this)\n for (const key of techFields) {\n if (key in values) delete values[key]\n }\n\n const multiRefFields = objectFields.filter((el) => el.multiType && el.multiTypeVariant === 'common' && multiTypeService.typeIncludesRef(el.type as string[]))\n\n for (const f of multiRefFields) {\n const dv = (this as any).dataValues && (this as any).dataValues[f.dbName]\n if (dv && typeof dv === 'object') {\n values[f.dbName] = dv\n }\n }\n return values\n }\n }\n\n newObject.model.addHook('beforeSave', (instance: any) => {\n for (const f of objectFields.filter((el) => el.multiType && el.multiTypeVariant === 'common')) {\n const pendingKey = `__pending_${f.dbName}`\n if (!Object.prototype.hasOwnProperty.call(instance.dataValues, pendingKey)) continue\n\n const pendingValue = instance.getDataValue(pendingKey)\n const fieldType = instance.getDataValue(`_${f.dbName}Type`)\n\n const typesSufixes = multiTypeService.typesSufixes()\n for (const ft in typesSufixes) {\n const techName = `_${f.dbName}${typesSufixes[ft]}`\n instance.setDataValue(techName, null)\n }\n\n if (multiTypeService.typeIncludesRef(f.type as string[])) {\n instance.setDataValue(`_${f.dbName}Ref`, null)\n }\n\n if (fieldType) {\n const valueField = multiTypeService.getFieldNameByType(f.dbName, fieldType)\n if (valueField) {\n if (multiTypeService.isRefType(fieldType) && typeof pendingValue === 'object') {\n instance.setDataValue(valueField, pendingValue.id || null)\n } else {\n instance.setDataValue(valueField, pendingValue)\n }\n }\n }\n\n delete instance.dataValues[pendingKey]\n }\n })\n\n newObject.model.addHook('afterFind', 'refObjectsPreload', async (findResult: any) => {\n if (!findResult) return\n\n const instances = Array.isArray(findResult) ? findResult : [findResult]\n const multiRefFields = objectFields.filter((el) => el.multiType && el.multiTypeVariant === 'common' && multiTypeService.typeIncludesRef(el.type as string[]))\n\n const promises: Promise<any>[] = []\n\n for (const inst of instances) {\n for (const f of multiRefFields) {\n const typeVal: string | null = inst.getDataValue(`_${f.dbName}Type`)\n const refId = inst.getDataValue(`_${f.dbName}Ref`)\n if (!typeVal || !refId) continue\n\n const m = typeVal.match(/^(catalog|document)\\.(.+)$/)\n if (!m) continue\n\n const kind = m[1] // 'catalog' | 'document'\n const refName = m[2] // object name in objects map\n\n const target = objects[refName]\n const targetModel: ModelStatic<Model<any, any>> | undefined = target?.model\n if (!targetModel) continue\n\n const attributes = kind === 'catalog' ? ['id', 'name', 'presentation'] : ['id', 'presentation', 'numberStr', 'date']\n\n const p = targetModel\n .findByPk(refId, { attributes })\n .then((row: any) => {\n if (!row) return\n const data = row.get ? row.get() : row\n if (kind === 'catalog') {\n const out = { id: data.id, name: data.name ?? null, presentation: data.presentation ?? null }\n inst.setDataValue(f.dbName, out)\n inst.dataValues[f.dbName] = out\n } else {\n const out = { id: data.id, numberStr: data.numberStr ?? null, date: data.date ?? null, presentation: data.presentation ?? null }\n inst.setDataValue(f.dbName, out)\n inst.dataValues[f.dbName] = out\n }\n })\n .catch((error) => {\n logger.error(`Error in 'afterFind' 'refObjectsPreload' hook`, { meta: error })\n })\n\n promises.push(p)\n }\n }\n\n if (promises.length > 0) {\n await Promise.all(promises)\n }\n })\n }\n\n objects[newObject.name] = newObject\n }\n\n const missingRefs: MissingRef[] = []\n for (const refField of refFields) {\n const object = objects[refField.objectName]\n\n if (object) {\n if (refField.field.multiType) {\n if (!Array.isArray(refField.field.ref)) {\n continue\n }\n\n const belongObjects: DBAppObject[] = []\n let missingObject: boolean = false\n for (const objRef of refField.field.ref) {\n const belongToObject = appObjects.find((el) => el.name === objRef)\n\n if (!belongToObject) {\n missingObject = true\n console.info('No belongs to object: ', `${object.name} -> ${objRef}`)\n break\n }\n\n belongObjects.push(belongToObject)\n }\n\n if (!missingObject) {\n const belongModels: { object: DBAppObject; model: ModelStatic<Model<any, any>> }[] = []\n let missingModels: boolean = false\n for (const belongObject of belongObjects) {\n const belongToModel: ModelStatic<Model<any, any>> = sequelize.models[belongObject.model]\n\n if (!belongToModel) {\n missingModels = true\n missingRefs.push({ refField, object, belongToObject: belongObjects })\n break\n }\n\n belongModels.push({ object: belongObject, model: belongToModel })\n }\n\n if (!missingModels) {\n const objectModel = refField.tableName ? object.tables[refField.tableName].model : refField.accModel ? object.accTable?.model : object.model\n\n for (const belongModel of belongModels) {\n const fieldData = initRefField(refField)\n fieldData.constraints = false\n fieldData.as = `${refField.field.name}${belongModel.model.name}`\n\n objectModel.belongsTo(belongModel.model, fieldData)\n\n let alias = refField.accModel ? `${object.name}Acc` : object.name\n\n if (belongModel.model.associations[alias]) {\n alias = `${refField.field.name}${alias.charAt(0).toUpperCase() + alias.slice(1)} `\n }\n\n const reverseData = {\n foreignKey: refField.field.dbName,\n _noTablePart: true,\n _registerRecords: refField.field.name === 'recorder' ? true : undefined,\n constraints: false,\n as: alias,\n scope: {\n [`${refField.field.name}Type`]: belongModel.object.name,\n },\n }\n\n belongModel.model.hasMany(objectModel, reverseData)\n }\n\n objectModel.addHook('afterFind', (findResult) => {\n if (!Array.isArray(findResult)) {\n if (findResult) {\n findResult = [findResult]\n } else {\n findResult = []\n }\n }\n\n for (const instance of findResult) {\n const currType = belongModels.find((el) => instance[`${refField.field.name}Type`] === el.object.name)\n if (currType && instance[`${refField.field.name}${currType.model.name}`] !== undefined) {\n instance[refField.field.name] = instance[`${refField.field.name}${currType.model.name}`]\n instance.dataValues[refField.field.name] = instance[`${refField.field.name}${currType.model.name}`]\n } else {\n instance[refField.field.name] = null\n instance.dataValues[refField.field.name] = null\n }\n\n for (const belongModel of belongModels) {\n delete instance[`${refField.field.name}${belongModel.model.name}`]\n delete instance.dataValues[`${refField.field.name}${belongModel.model.name}`]\n }\n }\n })\n }\n }\n } else {\n const belongToObject = appObjects.find((el) => el.name === refField.field.ref)\n\n if (belongToObject) {\n const belongToModel = sequelize.models[belongToObject.model]\n\n if (belongToModel) {\n const fieldData = initRefField(refField)\n\n if (refField.tableName) {\n object.tables[refField.tableName].model.belongsTo(belongToModel, fieldData)\n } else if (refField.accModel) {\n object.accTable?.model.belongsTo(belongToModel, fieldData)\n } else {\n try {\n object.model.belongsTo(belongToModel, fieldData)\n } catch (error) {\n console.error('Error in belongsTo: ', { belongToModel, fieldData }, error)\n }\n }\n } else {\n missingRefs.push({ refField, object, belongToObject })\n }\n } else {\n console.info('No belongs to object: ', `${object.name} -> ${refField.field.name} (${refField.field.ref})`)\n }\n }\n } else {\n console.info('No object: ', refField.objectName)\n }\n }\n\n for (const leadingField of leadingFields) {\n const object = objects[leadingField.field.ref]\n\n if (object) {\n object.model.hasMany(leadingField.belongTable, {\n foreignKey: leadingField.field.dbName,\n as: leadingField.field.leadingAlias,\n _noTablePart: true,\n })\n } else {\n const appObject = appObjects.find((el) => el.name === leadingField.field.ref)\n if (appObject) {\n missingRefs.push({ leading: true, leadingField, model: appObject.model })\n } else {\n console.info('No app object for leading field: ', leadingField.field.ref)\n }\n }\n }\n for (const objectName in objects) {\n if (!objects[objectName].processedPresentation) {\n continue\n }\n\n const object = objects[objectName]\n let module: any\n\n const modulePath = `${object.type}s/${object.name}/server.module.js`\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n\n if (fs.existsSync(fullPath)) {\n module = __non_webpack_require__(fullPath)\n }\n\n if (module?.initPresentation) {\n object.model.addHook('afterFind', 'addPresentationGetter', async (findResult) => {\n if (!Array.isArray(findResult)) {\n if (findResult) {\n findResult = [findResult]\n } else {\n findResult = []\n }\n }\n\n for (const instance of findResult) {\n const initPresentation = await module.initPresentation(instance)\n instance.setDataValue('presentation', initPresentation)\n }\n })\n }\n }\n\n for (const missingRef of missingRefs) {\n console.warn('Missing ref: ', missingRef)\n }\n\n return objects\n}\n\nfunction initMultiTypeFields(fields: ModelAttributes, field: AppObjectField, techFields: Array<string>) {\n if (field.multiTypeVariant === 'common') {\n const currFieldTechFields: Array<string> = []\n\n fields[`_${field.dbName}Type`] = {\n type: DataTypes.STRING,\n allowNull: field.notNull !== true,\n }\n\n //currFieldTechFields.push(`_${field.dbName}Type`)\n\n if (field.type.includes('string')) {\n const fieldName = `_${field.dbName}ST`\n fields[fieldName] = {\n type: DataTypes.STRING(field.typeOptions.length),\n }\n currFieldTechFields.push(fieldName)\n }\n\n if (field.type.includes('text')) {\n const fieldName = `_${field.dbName}TX`\n fields[fieldName] = {\n type: DataTypes.TEXT,\n }\n currFieldTechFields.push(fieldName)\n }\n\n if (field.type.includes('integer')) {\n const fieldName = `_${field.dbName}IN`\n fields[fieldName] = {\n type: DataTypes.INTEGER,\n }\n currFieldTechFields.push(fieldName)\n }\n\n if (field.type.includes('decimal')) {\n const fieldName = `_${field.dbName}DC`\n fields[fieldName] = {\n type: DataTypes.DECIMAL(field.typeOptions?.precision, field.typeOptions?.scale),\n }\n currFieldTechFields.push(fieldName)\n }\n\n if (field.type.includes('boolean')) {\n const fieldName = `_${field.dbName}BL`\n fields[fieldName] = {\n type: DataTypes.BOOLEAN,\n }\n currFieldTechFields.push(fieldName)\n }\n\n if (field.type.includes('date')) {\n const fieldName = `_${field.dbName}DT`\n fields[fieldName] = {\n type: DataTypes.DATE,\n }\n currFieldTechFields.push(fieldName)\n }\n\n if (multiTypeService.typeIncludesRef(field.type as string[])) {\n const fieldName = `_${field.dbName}Ref`\n fields[fieldName] = {\n type: DataTypes.STRING(100),\n }\n currFieldTechFields.push(fieldName)\n }\n\n techFields.push(...currFieldTechFields)\n\n fields[`${field.dbName}`] = {\n type: DataTypes.VIRTUAL(DataTypes.ABSTRACT, [`_${field.dbName}Type`, ...currFieldTechFields]),\n get() {\n const fieldType = this.getDataValue(`_${field.dbName}Type`)\n if (!fieldType) return null\n const valueField = multiTypeService.getFieldNameByType(field.dbName, fieldType)\n\n if (valueField) {\n return this.getDataValue(valueField)\n }\n\n return null\n },\n set(val) {\n this.setDataValue(`__pending_${field.dbName}`, val)\n },\n }\n } else {\n fields[field.dbName] = {\n type: DataTypes.UUID,\n allowNull: field.notNull !== true,\n _index: field.index === true,\n }\n\n fields[`${field.name}Type`] = {\n type: DataTypes.STRING,\n allowNull: field.notNull !== true,\n _index: field.index === true,\n }\n }\n}\n\nfunction initRefField(refField: RefField): RefFieldData {\n const fieldData: RefFieldData = {\n foreignKey: refField.field.dbName,\n as: refField.field.name,\n }\n\n if (refField.field.notNull) {\n fieldData.allowNull = false\n }\n\n if (refField.field.index) {\n fieldData.index = true\n }\n\n if (refField.field.fullSearch) {\n fieldData._fullSearch = refField.field.fullSearch\n }\n\n return fieldData\n}\n\nfunction prepareFieldData(field: AppObjectField): ModelAttributeColumnOptions {\n const fieldData: ModelAttributeColumnOptions = { type: DataTypes.STRING }\n\n const dataType = (field.type as string).toUpperCase()\n\n if (dataType === 'STRING') {\n if (field.typeOptions?.length && field.typeOptions?.length !== 0) {\n fieldData.type = DataTypes[dataType](field.typeOptions?.length)\n } else {\n fieldData.type = DataTypes[dataType]()\n }\n } else if (dataType === 'JSON') {\n fieldData.type = DataTypes.TEXT()\n\n fieldData.get = function () {\n const rawValue = this.getDataValue(field.name)\n return rawValue ? JSON.parse(rawValue) : null\n }\n\n fieldData.set = function (value) {\n this.setDataValue(field.name, value ? JSON.stringify(value) : value)\n }\n } else if (dataType === 'ENUM') {\n fieldData.type = DataTypes.ENUM\n fieldData.values = field.ref ? enums[field.ref] : ['empty']\n fieldData._ref = field.ref\n } else {\n fieldData.type = DataTypes[dataType]()\n }\n\n if (dataType === 'UUID' && field.name === 'id') {\n fieldData.defaultValue = DataTypes.UUIDV4()\n }\n\n if (field.primaryKey) {\n fieldData.primaryKey = true\n }\n\n if (field.notNull) {\n fieldData.allowNull = false\n }\n\n if (field.index) {\n fieldData._index = true\n }\n\n if (field.defaultValue !== null && field.defaultValue !== undefined) {\n fieldData.defaultValue = field.defaultValue\n }\n\n if (field.fullSearch) {\n fieldData._fullSearch = field.fullSearch\n }\n\n return fieldData\n}\n\nfunction createTablePart(tableData: AppObjectField, parentObject: AppObject, refFields: RefField[], leadingFields: LeadingField[], objects: Record<string, AppObject>) {\n let fields = {}\n const techFields: Array<string> = []\n\n let existMultiTypeCommonField = false\n\n for (const field of tableData.fields!) {\n if (field.multiType) {\n if (field.multiTypeVariant === 'common') existMultiTypeCommonField = true\n initMultiTypeFields(fields, field, techFields)\n } else if (field.type !== 'object') {\n fields[field.dbName] = prepareFieldData(field)\n }\n\n if (field.type === 'object') {\n refFields.push({\n objectName: parentObject.name,\n tableName: tableData.name,\n field,\n })\n }\n }\n\n class ObjectModel extends Model {}\n\n const tablePart: AppObjectTablePart = {\n title: tableData.title,\n name: tableData.name,\n fields: tableData.fields,\n model: ObjectModel.init(fields, {\n sequelize,\n modelName: tableData.model,\n tableName: tableData.dbName,\n }),\n }\n\n parentObject.model.hasMany(tablePart.model, {\n foreignKey: 'parentId',\n as: tableData.name,\n onDelete: 'CASCADE',\n hooks: true,\n })\n\n if (techFields.length > 0) {\n const prevToJSON = tablePart.model.prototype.toJSON\n tablePart.model.prototype.toJSON = function () {\n const values = prevToJSON ? prevToJSON.call(this) : Object.assign({}, this.get ? this.get() : this)\n for (const key of techFields) {\n if (key in values) delete values[key]\n }\n\n if (tableData.fields) {\n const multiRefFields = tableData.fields.filter((el) => el.multiType && el.multiTypeVariant === 'common' && multiTypeService.typeIncludesRef(el.type as string[]))\n\n for (const f of multiRefFields) {\n const dv = (this as any).dataValues && (this as any).dataValues[f.dbName]\n if (dv && typeof dv === 'object') {\n values[f.dbName] = dv\n }\n }\n }\n\n return values\n }\n }\n\n if (existMultiTypeCommonField) {\n tablePart.model.addHook('beforeSave', (instance: any) => {\n onSaveMultiTypeData(instance)\n })\n\n tablePart.model.addHook('beforeBulkCreate', (instances: any[]) => {\n for (const instance of instances) {\n onSaveMultiTypeData(instance)\n }\n })\n\n function onSaveMultiTypeData(instance: any) {\n if (!tableData.fields) return\n\n const typesSufixes = multiTypeService.typesSufixes()\n for (const f of tableData.fields.filter((el) => el.multiType && el.multiTypeVariant === 'common')) {\n const pendingKey = `__pending_${f.dbName}`\n if (!Object.prototype.hasOwnProperty.call(instance.dataValues, pendingKey)) continue\n\n const pendingValue = instance.getDataValue(pendingKey)\n const fieldType = instance.getDataValue(`_${f.dbName}Type`)\n\n for (const ft in typesSufixes) {\n const techName = `_${f.dbName}${typesSufixes[ft]}`\n instance.setDataValue(techName, null)\n }\n\n if (multiTypeService.typeIncludesRef(f.type as string[])) {\n instance.setDataValue(`_${f.dbName}Ref`, null)\n }\n\n if (fieldType) {\n const valueField = multiTypeService.getFieldNameByType(f.dbName, fieldType)\n if (valueField) {\n if (multiTypeService.isRefType(fieldType) && typeof pendingValue === 'object') {\n instance.setDataValue(valueField, pendingValue.id || null)\n } else {\n instance.setDataValue(valueField, pendingValue)\n }\n }\n }\n\n delete instance.dataValues[pendingKey]\n }\n }\n\n tablePart.model.addHook('afterFind', 'refObjectsPreload', async (findResult: any) => {\n if (!tableData.fields) return\n if (!findResult) return\n\n const instances = Array.isArray(findResult) ? findResult : [findResult]\n const multiRefFields = tableData.fields.filter((el) => el.multiType && el.multiTypeVariant === 'common' && multiTypeService.typeIncludesRef(el.type as string[]))\n\n const promises: Promise<any>[] = []\n\n for (const inst of instances) {\n for (const f of multiRefFields) {\n const typeVal: string | null = inst.getDataValue(`_${f.dbName}Type`)\n const refId = inst.getDataValue(`_${f.dbName}Ref`)\n if (!typeVal || !refId) continue\n\n const m = typeVal.match(/^(catalog|document)\\.(.+)$/)\n if (!m) continue\n\n const kind = m[1] // 'catalog' | 'document'\n const refName = m[2] // object name in objects map\n\n const target = objects[refName]\n const targetModel: ModelStatic<Model<any, any>> | undefined = target?.model\n if (!targetModel) continue\n\n const attributes = kind === 'catalog' ? ['id', 'name', 'presentation'] : ['id', 'presentation', 'numberStr', 'date']\n\n const p = targetModel\n .findByPk(refId, { attributes })\n .then((row: any) => {\n if (!row) return\n const data = row.get ? row.get() : row\n if (kind === 'catalog') {\n const out = { id: data.id, name: data.name ?? null, presentation: data.presentation ?? null }\n inst.setDataValue(f.dbName, out)\n inst.dataValues[f.dbName] = out\n } else {\n const out = { id: data.id, numberStr: data.numberStr ?? null, date: data.date ?? null, presentation: data.presentation ?? null }\n inst.setDataValue(f.dbName, out)\n inst.dataValues[f.dbName] = out\n }\n })\n .catch((error) => {\n logger.error(`Error in 'afterFind' 'refObjectsPreload' hook`, { meta: error })\n })\n\n promises.push(p)\n }\n }\n\n if (promises.length > 0) {\n await Promise.all(promises)\n }\n })\n }\n\n for (const field of tableData.fields!) {\n if (field.leading) {\n leadingFields.push({\n field,\n belongTable: tablePart.model,\n })\n }\n }\n\n parentObject.tables[tableData.name] = tablePart\n}\n\nfunction createAccumulationTable(appObject: DBAppObject, newObject: AppObject, refFields: RefField[]) {\n let fields: ModelAttributes = {}\n let dimensions: AppObjectField[] = []\n let resources: AppObjectField[] = []\n\n fields.id = {\n type: DataTypes.UUID,\n primaryKey: true,\n allowNull: false,\n }\n\n fields.period = {\n type: DataTypes.DATE,\n allowNull: false,\n _index: true,\n }\n\n for (const field of newObject.fields) {\n if (field.role === 'dimension' || field.role === 'resource') {\n if (field.type !== 'object') {\n fields[field.dbName] = prepareFieldData(field)\n } else {\n refFields.push({\n objectName: newObject.name,\n accModel: true,\n field,\n })\n }\n\n if (field.role === 'dimension') {\n dimensions.push(_.cloneDeep(field))\n }\n\n if (field.role === 'resource') {\n resources.push(_.cloneDeep(field))\n }\n }\n }\n\n class ObjectModel extends Model {}\n\n const accumulationTable: AppObjectAccumulationTable = {\n name: `${newObject.name}Acc`,\n dimensions,\n resources,\n model: ObjectModel.init(fields, {\n sequelize,\n modelName: `${appObject.model}Acc`,\n tableName: `${appObject.path}_acc`,\n }),\n }\n\n newObject.accTable = accumulationTable\n}\n","import express from 'express'\nimport accessRights from '@/middleware/accessRights'\nimport fileUpload from '@/middleware/fileUpload'\nimport initObjects from './controllers'\n\nimport { Request, Response, NextFunction } from 'express'\nimport { AppObject, AppObjectStaticAPI } from '@/src/types'\n\nconst router = express.Router()\n\nexport default async () => {\n const objects = await initObjects()\n\n for (const object of Object.values(objects)) {\n if (object.api) {\n for (const api of object.api) {\n if (!api.controller) {\n console.error('API controller is not set for object: ', object.name, api)\n continue\n }\n\n if (!object.controllers[api.controller]) {\n console.error('API controller is not exist: ', object.name, api.controller)\n continue\n }\n\n router[api.httpMethod.toLowerCase()](\n `/${object.path}/${api.path}`,\n setAccess(api, object),\n (req: Request, res: Response, next: NextFunction) => {\n const contentType = req.headers['content-type']\n if (contentType && contentType.includes('multipart/form-data')) {\n return fileUpload.array('files')(req, res, (err) => {\n if (err) {\n return res.status(400).json({ message: `File upload error: ${err}` })\n }\n next()\n })\n } else {\n next()\n }\n },\n object.controllers[api.controller]\n )\n }\n }\n\n if (object.type === 'register') {\n if (object.accumulationRegister) {\n router.post(`/${object.path}/calculate_totals`, setAccess(object.staticAPI.calculateTotals || { httpMethod: 'POST' }, object), object.calculateTotals)\n }\n\n if (object.name === 'dataProcessors') {\n router.post(`/${object.path}/execute_processing`, setAccess(object.staticAPI.executeProcessing || { httpMethod: 'POST' }, object), object.executeProcessing)\n router.get(`/${object.path}/export/:id`, setAccess(object.staticAPI.exportProcessor || { httpMethod: 'POST' }, object), object.exportProcessor)\n router.post(\n `/${object.path}/import`,\n setAccess(object.staticAPI.importProcessor || { httpMethod: 'POST' }, object),\n (req: Request, res: Response, next: NextFunction) => {\n const contentType = req.headers['content-type']\n if (contentType && contentType.includes('multipart/form-data')) {\n return fileUpload.array('files')(req, res, (err: any) => {\n if (err) {\n return res.status(400).json({ message: `File upload error: ${err}` })\n }\n next()\n })\n } else {\n next()\n }\n },\n object.importProcessor\n )\n }\n }\n\n if (object.type === 'catalog') {\n if (object.name === 'appObjects') {\n router.post(`/${object.path}/execute_migration`, setAccess(object.staticAPI.executeMigration || { httpMethod: 'POST' }, object), object.executeMigration)\n router.post(`/${object.path}/exist_migrations`, setAccess(object.staticAPI.existMigrations || { httpMethod: 'POST' }, object), object.existMigrations)\n } else if (object.name === 'scheduledJobs') {\n router.post(`/${object.path}/execute_manually`, setAccess(object.staticAPI.executeManually || { httpMethod: 'POST' }, object), object.executeManually)\n }\n }\n\n if (object.staticAPI.findAll?.disabled !== true) {\n router.get(`/${object.path}`, setAccess(object.staticAPI.findAll || { httpMethod: 'GET' }, object), object.findAll)\n }\n\n if (object.staticAPI.findById?.disabled !== true) {\n router.get(`/${object.path}/:id`, setAccess(object.staticAPI.findById || { httpMethod: 'GET' }, object), object.findById)\n }\n\n if (object.staticAPI.create?.disabled !== true) {\n router.post(\n `/${object.path}`,\n setAccess(object.staticAPI.create || { httpMethod: 'POST' }, object),\n (req: Request, res: Response, next: NextFunction) => {\n const contentType = req.headers['content-type']\n if (contentType && contentType.includes('multipart/form-data')) {\n return fileUpload.array('files')(req, res, (err: any) => {\n if (err) {\n return res.status(400).json({ message: `File upload error: ${err}` })\n }\n next()\n })\n } else {\n next()\n }\n },\n object.create\n )\n }\n\n if (object.staticAPI.update?.disabled !== true) {\n router.put(`/${object.path}/:id`, setAccess(object.staticAPI.update || { httpMethod: 'PUT' }, object), object.update)\n }\n\n if (object.staticAPI.delete?.disabled !== true) {\n router.delete(`/${object.path}/:id`, setAccess(object.staticAPI.delete || { httpMethod: 'DELETE' }, object), object.delete)\n }\n\n if (object.type === 'catalog') {\n router.get(`/${object.path}/predefined/:name`, setAccess(object.staticAPI.findById || { httpMethod: 'GET' }, object), object.findPredefined)\n }\n\n if ((object.type === 'catalog' || object.type === 'document') && object.staticAPI.changeDeletionMark?.disabled !== true) {\n router.post(`/${object.path}/change_deletion_mark`, setAccess(object.staticAPI.changeDeletionMark || { httpMethod: 'POST' }, object), object.changeDeletionMark)\n }\n\n if (object.type === 'document') {\n if (object.staticAPI.confirm?.disabled !== true) {\n router.put(`/${object.path}/confirm/:id`, setAccess(object.staticAPI.confirm || { httpMethod: 'PUT' }, object), object.confirm)\n }\n if (object.staticAPI.undoConfirm?.disabled !== true) {\n router.put(`/${object.path}/undo_confirm/:id`, setAccess(object.staticAPI.undoConfirm || { httpMethod: 'PUT' }, object), object.undoConfirm)\n }\n }\n }\n\n return { router, objects }\n}\n\nfunction setAccess(api: AppObjectStaticAPI = { httpMethod: 'GET' }, object: AppObject) {\n let method: any\n\n const accesRole: Record<string, any> = {}\n\n if (api.userRole) {\n accesRole.id = api.userRole\n } else if (object.accessRoleId) {\n accesRole.id = object.accessRoleId\n } else {\n accesRole.key = object.path\n }\n\n if (api.accessLevel) {\n method =\n api.accessLevel === 'CAN_REED'\n ? accessRights.canRead(accesRole)\n : api.accessLevel === 'CAN_MODIFY'\n ? accessRights.canModify(accesRole)\n : api.accessLevel === 'IS_AUTH'\n ? accessRights.isAuth\n : accessRights.isFullRights\n } else {\n if (object.system === true) {\n method = api.httpMethod === 'GET' ? accessRights.isAuth : accessRights.isFullRights\n } else {\n method = api.httpMethod === 'GET' ? accessRights.canRead(accesRole) : accessRights.canModify(accesRole)\n }\n }\n\n return method\n}\n","import moment from 'moment'\nimport { QueryTypes } from 'sequelize'\nimport { StatusCodes } from 'http-status-codes'\nimport logger from '@/core/services/logger.service'\nimport sequelize from '@/database/dbConnection'\nimport fs from 'fs'\nimport reportToExcelService from '@/core/services/reportToExcel.service'\nimport reportToPdfService from '@/core/services/reportToPdf.service'\nimport commonService from '@/core/services/common.service'\nimport virtualTables from './virtualTables'\n\nimport { Sequelize as ExternalSequelize, FindAttributeOptions } from 'sequelize'\nimport { NextFunction, Request, Response } from 'express'\n\nexport default {\n async getSettings(req: Request, res: Response, next: NextFunction) {\n const reportId = req.params.id\n\n if (!reportId || typeof reportId !== 'string' || reportId.length !== 36) {\n logger.error(`Error in ${sequelize.models.ReportSetting.options.name?.plural} findItem controller`, { meta: 'Report id is not correct!' })\n res.status(StatusCodes.BAD_REQUEST).send({ message: 'Report id is not correct!' })\n return\n }\n\n const attributes: FindAttributeOptions = { exclude: ['dataQuery'] }\n\n await sequelize.models.ReportSetting.findByPk(reportId, { attributes })\n .then((existReport) => {\n if (existReport) {\n res.status(StatusCodes.OK).send(existReport)\n } else {\n logger.error(`Error in ${sequelize.models.ReportSetting.options.name?.plural} findByPk controller`, {\n meta: `${sequelize.models.ReportSetting.options.name?.plural} not found`,\n })\n res.status(StatusCodes.NOT_FOUND).send({ message: `${sequelize.models.ReportSetting.options.name?.plural} not found` })\n }\n })\n .catch((error) => {\n logger.error(`Error in ${sequelize.models.ReportSetting.options.name?.plural} findByPk controller`, { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error.message })\n })\n },\n\n async getResult(req: Request, res: Response, next: NextFunction) {\n let params = { ...req.body }\n\n if (!params.id || typeof params.id !== 'string' || params.id.length !== 36) {\n logger.error(`Error in ${sequelize.models.ReportSetting.options.name?.plural} findItem controller`, { meta: 'Report id is not correct!' })\n res.status(StatusCodes.BAD_REQUEST).send({ message: 'Report id is not correct!' })\n return\n }\n\n await sequelize.models.ReportSetting.findByPk(params.id)\n .then(async (existReport: Record<string, any> | null) => {\n if (existReport) {\n params.query = existReport.dataQuery\n\n params.externalData = existReport.externalData\n params.externalUsername = existReport.externalUsername\n params.externalPassword = existReport.externalPassword\n params.externalServer = existReport.externalServer\n params.externalPort = existReport.externalPort\n params.externalDatabase = existReport.externalDatabase\n params.externalDialect = existReport.externalDialect\n params.externalDateKind = existReport.externalDateKind\n params.externalDateFormat = existReport.externalDateFormat\n params.fields = flatFields(params.fields)\n\n prepareFilters(params)\n\n let module: any\n\n const modulePath = `reports/${existReport.name}/server.module.js`\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n\n if (fs.existsSync(fullPath)) {\n module = __non_webpack_require__(fullPath)\n }\n\n let queryData: any[] = []\n if (module?.onComposeResult && typeof module?.onComposeResult === 'function') {\n queryData = await module.onComposeResult(req, existReport, params)\n } else {\n queryData = await getDataRecords(req, params, module)\n }\n\n let resultData = await convertQueryData(queryData, params.fields)\n\n let resultTotal = resultData.length\n\n if (params.sorts?.length > 0) {\n sortData(resultData, params.sorts, params)\n }\n\n params.cols = []\n if (params.colGroups?.length > 0) {\n params.cols = getUniqueGroupData(resultData, params.colGroups[0])\n }\n\n let limitError = false\n\n if (params.rowGroups?.length > 0) {\n if (resultData.length > params.maxLimit) {\n resultData = []\n limitError = true\n }\n\n resultData = generateTreeData(resultData, params)\n renumberTree(params.fields, resultData)\n\n resultTotal = indexTree(resultData, 1)\n } else {\n renumberTable(params.fields, resultData)\n }\n\n const totals = []\n if (params.showYTotal === true) {\n calcGeneralTotals(params, resultData, totals)\n }\n\n if (params.rowGroups?.length > 0 && params.hideDetails) {\n deleteDetails(resultData)\n resultTotal = indexTree(resultData, 1)\n }\n\n if (params.rowGroups?.length === 0 && params.limit && params.page) {\n resultData = paginateResult(resultData, params.limit, params.page)\n }\n\n let resposeData = {\n resultData,\n cols: params.cols,\n totals,\n total: resultTotal - 1,\n limitError,\n }\n\n if (resposeData) {\n res.status(200).send(resposeData)\n } else {\n console.error('Bad request')\n res.status(400).send({\n message: 'Bad request',\n })\n }\n } else {\n logger.error(`Error in reports getResult controller`, { meta: `${sequelize.models.ReportSetting.options.name?.plural} not found` })\n res.status(StatusCodes.NOT_FOUND).send({ message: `${sequelize.models.ReportSetting.options.name?.plural} not found` })\n }\n })\n .catch((error) => {\n logger.error(`Error in reports getResult controller`, { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error.message })\n })\n },\n\n async generateExcel(req: Request, res: Response) {\n reportToExcelService.generateExcel(req, res)\n },\n\n async generatePdf(req: Request, res: Response) {\n reportToPdfService.generatePdf(req, res)\n },\n}\n\nfunction flatFields(fields: Record<string, any>[]) {\n let flatFields: Record<string, any>[] = []\n for (const field of fields) {\n if (field.isGroup) {\n flatFields = flatFields.concat(field.fields)\n } else {\n flatFields.push(field)\n }\n }\n return flatFields\n}\n\nfunction generateTreeData(resultData: Record<string, any>[], params: Record<string, any>) {\n let treeList: Record<string, any>[] = []\n\n fillTreeLvl(params, 0, resultData, treeList)\n\n let listRegrouped = false\n for (let i = params.rowGroups.length - 1; i > 0; i--) {\n if (params.rowGroups[i].withParent) {\n const comparedTree = compareGroups(treeList, i - 1)\n\n if (comparedTree) {\n treeList = comparedTree\n }\n\n listRegrouped = true\n }\n }\n\n if (listRegrouped) {\n recalcTree(treeList, 0, params)\n }\n\n calcGroupTotals(params, treeList)\n\n return treeList\n}\n\nfunction sortData(resultData: Record<string, any>, sortBy: Record<string, any>[], params: Record<string, any>): void {\n resultData.sort((a: Record<string, any>, b: Record<string, any>) => {\n for (const field of sortBy) {\n let aName: string | number\n let bName: string | number\n\n if (field.valueType === 'object') {\n aName = a[field.name]?.name || ''\n bName = b[field.name]?.name || ''\n } else {\n aName = a[field.name] || ''\n bName = b[field.name] || ''\n }\n\n let comparison = 0\n\n if (field.valueType === 'date') {\n if (params.externalData && params.externalDateKind === 'default' && params.externalDateFormat && params.externalDateFormat.length > 0) {\n const dateA = moment(aName, params.externalDateFormat).toDate()\n const dateB = moment(bName, params.externalDateFormat).toDate()\n comparison = dateA.getTime() - dateB.getTime()\n } else {\n const dateA = new Date(aName)\n const dateB = new Date(bName)\n comparison = dateA.getTime() - dateB.getTime()\n }\n } else if (typeof aName === 'number' && typeof bName === 'number') {\n comparison = aName - bName\n } else if (typeof aName === 'string' && typeof bName === 'string') {\n comparison = aName.localeCompare(bName)\n }\n\n if (comparison !== 0) {\n return field.direction === 'asc' ? comparison : comparison * -1\n }\n }\n return 0\n })\n}\n\nfunction recalcTree(treeList: Record<string, any>[], lvl: number, params: Record<string, any>): number {\n let childrenCount: number = 0\n\n for (const row of treeList) {\n row.lvl = lvl\n\n if (row.hasSub) {\n row.childrenCount = recalcTree(row.children, lvl + 1, params)\n } else {\n row.childrenCount = params.hideDetails === true ? 0 : row.children.length\n }\n\n childrenCount += row.childrenCount + 1\n }\n\n return childrenCount\n}\n\nfunction indexTree(treeList: Record<string, any>[], index: number): number {\n for (const row of treeList) {\n row._index = index++\n row._vIndex = row._index\n\n if (row.children?.length > 0) {\n index = indexTree(row.children, index)\n }\n }\n\n return index\n}\n\nfunction renumberTree(fields: Record<string, any>[], resultData: Record<string, any>[]): void {\n const numberFields = fields.filter((el) => el.rowNumber === true)\n\n for (const field of numberFields) {\n let rowNumber = 1\n for (const row of resultData) {\n if (row.hasSub === true) {\n rowNumber = renumberTreeGroup(row.children, field, rowNumber)\n } else {\n for (const childRow of row.children) {\n childRow[field.name] = rowNumber\n rowNumber++\n }\n }\n }\n }\n}\n\nfunction renumberTreeGroup(rows: Record<string, any>[], field: Record<string, any>, rowNumber: number): number {\n for (const row of rows) {\n if (row.hasSub === true) {\n rowNumber = renumberTreeGroup(row.children, field, rowNumber)\n } else {\n for (const childRow of row.children) {\n childRow[field.name] = rowNumber\n rowNumber++\n }\n }\n }\n\n return rowNumber\n}\n\nfunction renumberTable(fields: Record<string, any>[], resultData: Record<string, any>[], rowNumber: number = 1): void {\n const numberFields = fields.filter((el) => el.rowNumber === true)\n\n for (const field of numberFields) {\n for (const row of resultData) {\n row[field.name] = rowNumber\n rowNumber++\n }\n }\n}\n\nfunction fillTreeLvl(params: Record<string, any>, lvl: number, resultData: Record<string, any>[], treeList: Record<string, any>[]): number {\n const groupSetting = params.rowGroups[lvl]\n const groupData = getUniqueGroupData(resultData, groupSetting)\n let childrenCount = 0\n\n for (let group of groupData) {\n const filteredData = getFilteredData(resultData, groupSetting, group)\n\n const listItem: Record<string, any> = {\n isGroup: true,\n expanded: true,\n hasSub: params.rowGroups.length - 1 > lvl,\n lvl,\n groups: [{ value: group, ...groupSetting }],\n totals: [],\n children: [],\n childrenCount: 0,\n }\n\n if (params.rowGroups.length - 1 === lvl) {\n listItem.children = filteredData\n listItem.childrenCount = params.hideDetails === true ? 0 : filteredData.length\n } else {\n listItem.childrenCount = fillTreeLvl(params, lvl + 1, filteredData, listItem.children)\n }\n\n treeList.push(listItem)\n\n childrenCount += listItem.childrenCount + 1\n }\n\n return childrenCount\n}\n\nfunction compareGroups(treeList: Record<string, any>[], lvl: number) {\n if (treeList.length === 0) {\n return\n }\n\n if (!treeList[0].isGroup) {\n return\n }\n\n const currLvl = treeList[0].lvl\n\n if (currLvl < lvl) {\n for (const row of treeList) {\n const comparedTree = compareGroups(row.children, lvl)\n\n if (comparedTree) {\n row.children = comparedTree\n }\n }\n\n return\n } else if (currLvl === lvl) {\n const newList: Record<string, any>[] = []\n\n for (const row of treeList) {\n const rowGroups = [...row.groups]\n\n for (const childRow of row.children) {\n const groups = rowGroups.concat(childRow.groups)\n newList.push({ ...childRow, groups, lvl: currLvl })\n }\n }\n\n return newList\n }\n}\n\nfunction calcGroupTotals(params: Record<string, any>, resultData: Record<string, any>[]) {\n if (params.calcs.length === 0) {\n return\n }\n\n if (params.colGroups.length > 0) {\n const groupSettings = params.colGroups[0]\n for (const colGroup of params.cols) {\n for (const calc of params.calcs) {\n for (const dataRow of resultData) {\n calcGroupField(dataRow, calc, { name: groupSettings.name, valueType: groupSettings.valueType, value: colGroup })\n }\n }\n }\n } else {\n for (const calc of params.calcs) {\n for (const dataRow of resultData) {\n calcGroupField(dataRow, calc)\n }\n }\n }\n cleanZeroRows(resultData)\n}\n\nfunction cleanZeroRows(resultData: Record<string, any>[]) {\n if (!Array.isArray(resultData)) {\n return\n }\n for (let i = resultData.length - 1; i >= 0; i--) {\n const dataRow = resultData[i]\n cleanZeroRows(dataRow.children)\n \n const totals = dataRow.totals?.filter((el) => el.value !== 0)\n if (totals?.length === 0 && \n (dataRow.children?.length === 0 && dataRow.childrenCount > 0 || dataRow.childrenCount === 0)) {\n resultData.splice(i, 1)\n }\n }\n}\n\nfunction calcGeneralTotals(params: Record<string, any>, resultData: Record<string, any>[], totals: Record<string, any>[]) {\n if (params.calcs?.length === 0) {\n return\n }\n\n if (params.colGroups?.length > 0) {\n const valueType = params.colGroups[0].valueType\n\n for (const col of params.cols) {\n for (const calc of params.calcs) {\n const groupTotals: number[] = []\n\n for (const groupRow of resultData) {\n let groupTotal = groupRow.totals.find((el) => {\n return el.name === calc.name && (valueType === 'object' ? el.group.id === col.id : el.group === col)\n })\n\n if (groupTotal) {\n groupTotals.push(groupTotal.value)\n }\n }\n\n const value = calcGroupsValue(groupTotals, calc.expression)\n totals.push({ ...calc, value, group: col })\n }\n }\n } else {\n for (const calc of params.calcs) {\n if (params.rowGroups?.length > 0) {\n const groupTotals: number[] = []\n\n for (const groupRow of resultData) {\n const groupTotal = groupRow.totals.find((el) => el.name === calc.name)\n\n if (groupTotal) {\n groupTotals.push(groupTotal.value)\n }\n }\n\n const value = calcGroupsValue(groupTotals, calc.expression)\n totals.push({ ...calc, value })\n } else {\n const value = calcDetailsValue(resultData, calc)\n totals.push({ ...calc, value })\n }\n }\n }\n}\n\nfunction calcGroupField(dataRow: Record<string, any>, calc: Record<string, any>, filter: Record<string, any> | null = null): number {\n let value: number = 0\n\n if (dataRow.hasSub === true) {\n const childrenValues: any[] = []\n\n dataRow.children.map((childRow) => {\n childrenValues.push(calcGroupField(childRow, calc, filter))\n })\n\n value = calcGroupsValue(childrenValues, calc.expression)\n } else {\n value = calcDetailsValue(dataRow.children, calc, filter)\n }\n\n if (filter) {\n dataRow.totals.push({ ...calc, value, group: filter.value })\n } else {\n dataRow.totals.push({ ...calc, value })\n }\n\n return value\n}\n\nfunction calcDetailsValue(rows: Record<string, any>[], calcField: Record<string, any>, filter: Record<string, any> | null = null) {\n let sum: number = 0\n let value: number = 0\n let flag: number\n let calcRows: Record<string, any>[] = []\n\n if (filter) {\n calcRows = rows.filter((el) => {\n return filter.valueType === 'object' ? el[filter.name].id === filter.value.id : el[filter.name] === filter.value\n })\n } else {\n calcRows = rows\n }\n\n switch (calcField.expression) {\n case 'sum': {\n calcRows.map((item) => {\n value += item[calcField.name] * 1\n })\n value = commonService.normalizeFloat(value, 6)\n\n break\n }\n case 'average': {\n calcRows.map((item) => {\n sum += item[calcField.name] * 1\n })\n\n value += sum / calcRows.length\n value = commonService.normalizeFloat(value, 6)\n\n break\n }\n case 'max': {\n if (calcRows.length > 0) {\n flag = calcRows[0][calcField.name] * 1\n\n for (let i = 1; i < calcRows?.length; i++) {\n if (flag <= calcRows[i][calcField.name] * 1) flag = calcRows[i][calcField.name] * 1\n }\n if (value <= flag) {\n value = flag\n }\n }\n\n break\n }\n case 'min': {\n if (calcRows.length > 0) {\n flag = calcRows[0][calcField.name]\n\n for (let i = 1; i < calcRows?.length; i++) {\n if (flag >= calcRows[i][calcField.name]) {\n flag = calcRows[i][calcField.name]\n }\n }\n\n value = flag\n }\n break\n }\n default:\n break\n }\n\n return value\n}\n\nfunction calcGroupsValue(values: number[], exp: string) {\n let value = 0\n\n switch (exp) {\n case 'sum': {\n value = values.reduce((acc, curr) => {\n return acc + curr\n }, 0)\n value = commonService.normalizeFloat(value, 6)\n\n break\n }\n case 'average': {\n const sum = values.reduce((acc, curr) => {\n return acc + curr\n }, 0)\n\n value = sum / values.length\n value = commonService.normalizeFloat(value, 6)\n\n break\n }\n case 'max': {\n value = Math.max(...values)\n break\n }\n case 'min': {\n value = Math.min(...values)\n break\n }\n default:\n break\n }\n\n return value\n}\n\nfunction getUniqueGroupData(resultData: Record<string, any>[], groupSetting: Record<string, any>) {\n let uniqueGroups: Record<string, any>[] = []\n\n if (groupSetting.valueType === 'object') {\n const seenIds = new Set()\n\n for (const row of resultData) {\n if (!seenIds.has(row[groupSetting.name].id)) {\n seenIds.add(row[groupSetting.name].id)\n uniqueGroups.push(row[groupSetting.name])\n }\n }\n } else {\n uniqueGroups = [...new Set(resultData.map((e) => e[groupSetting.name]))]\n }\n\n return uniqueGroups\n}\n\nfunction getFilteredData(resultData: Record<string, any>[], groupSetting: Record<string, any>, group: Record<string, any>) {\n return resultData.filter((el) => {\n if (groupSetting.valueType === 'object') {\n return el[groupSetting.name].id === group.id\n } else {\n return el[groupSetting.name] === group\n }\n })\n}\n\nfunction paginateResult(result: Record<string, any>[], limit: number, page: number): Record<string, any>[] {\n const startIndex = (page - 1) * limit\n const endIndex = startIndex + limit\n\n const pageItems = result.slice(startIndex, endIndex)\n\n return pageItems\n}\n\nfunction deleteDetails(resultData: Record<string, any>[]) {\n for (const resultRow of resultData) {\n if (resultRow.hasSub) {\n deleteDetails(resultRow.children)\n } else {\n resultRow.children = []\n }\n }\n}\n\nasync function getDataRecords(req: Request, params: Record<string, any>, module: any) {\n await prepareVirtualTables(req, params)\n\n const lastOrderByIndex = params.query.lastIndexOf('ORDER BY')\n const lastGroupByIndex = params.query.lastIndexOf('GROUP BY')\n const lastHavingByIndex = params.query.lastIndexOf('HAVING')\n const lastFromIndex = params.query.lastIndexOf('FROM')\n\n let insertClauseIndex = params.query.length\n let needInsertWhereClause = false\n\n let blockIndexes = [\n { name: 'ORDER BY', index: lastOrderByIndex },\n { name: 'HAVING', index: lastHavingByIndex },\n { name: 'GROUP BY', index: lastGroupByIndex },\n ]\n\n blockIndexes = blockIndexes.filter((b) => b.index > lastFromIndex)\n\n if (blockIndexes.length > 0) {\n needInsertWhereClause = true\n insertClauseIndex = Math.min(...blockIndexes.map((b) => b.index))\n }\n\n if (params.sqlFilters.length > 0) {\n if (needInsertWhereClause) {\n params.query = insertWhereClause(params.query, params.sqlFilters, insertClauseIndex)\n } else {\n params.query = params.query + addWhereClause(params.query, params.sqlFilters)\n }\n }\n\n if (module?.beforeQuery && typeof module?.beforeQuery === 'function') {\n await module.beforeQuery(req, params)\n }\n\n if (params.externalData === true) {\n const configSequelize = {\n userName: params.externalUsername,\n password: params.externalPassword,\n host: params.externalServer,\n port: Number(params.externalPort),\n database: params.externalDatabase,\n dialect: params.externalDialect,\n pool: {\n max: 5,\n min: 0,\n acquire: 30000,\n idle: 10000,\n },\n }\n const externalSequelize = new ExternalSequelize(configSequelize.database, configSequelize.userName, configSequelize.password, {\n host: configSequelize.host,\n port: configSequelize.port,\n dialect: configSequelize.dialect,\n pool: {\n max: configSequelize.pool.max,\n min: configSequelize.pool.min,\n acquire: configSequelize.pool.acquire,\n idle: configSequelize.pool.idle,\n },\n })\n\n return await externalSequelize.query(params.query, { type: QueryTypes.SELECT, replacements: params.sqlReplacements })\n } else {\n return await sequelize.query(params.query, { type: QueryTypes.SELECT, replacements: params.sqlReplacements })\n }\n}\n\nfunction insertWhereClause(query: string, filters: Record<string, any>, insertIndex: number) {\n const topQuery = query.substring(0, insertIndex)\n const bottomQuery = query.substring(insertIndex)\n return `${topQuery} ${addWhereClause(query, filters)} \\n${bottomQuery}`\n}\n\nfunction addWhereClause(query: string, filters: Record<string, any>) {\n const lastWhereIndex = query.lastIndexOf('WHERE')\n const lastFromIndex = query.lastIndexOf('FROM')\n if (lastWhereIndex > lastFromIndex) {\n return generateWhereClause(filters, true)\n } else {\n return '\\nWHERE ' + generateWhereClause(filters)\n }\n}\n\nfunction generateWhereClause(filters: Record<string, any>, withAnd: boolean = false) {\n const whereClause = filters.join('')\n if (withAnd) {\n return whereClause\n } else {\n return whereClause.substring(5)\n }\n}\n\nfunction prepareFilters(params: Record<string, any>) {\n params.sqlFilters = []\n params.sqlReplacements = {}\n\n if (params.period.type !== 'without') {\n let dateFrom: Date | number\n let dateTo: Date | number\n let date: Date\n\n if (params.period.type === 'date') {\n dateFrom = new Date(params.period.date).setHours(0, 0, 0, 0)\n dateTo = new Date(params.period.date).setHours(23, 59, 59, 999)\n date = new Date(params.period.date)\n if (params.externalData && params.externalDateKind === 'default') {\n params.sqlReplacements.date = new Date(date).toLocaleDateString()\n } else {\n params.sqlReplacements.date = new Date(date).toISOString()\n }\n } else {\n if (params.period.dateType === 'dateTime') {\n dateFrom = new Date(params.period.dateFrom)\n dateTo = new Date(params.period.dateTo)\n } else {\n dateFrom = new Date(params.period.dateFrom).setHours(0, 0, 0, 0)\n dateTo = new Date(params.period.dateTo).setHours(23, 59, 59, 999)\n }\n }\n if (params.externalData && params.externalDateKind === 'default') {\n params.sqlReplacements.dateFrom = new Date(dateFrom).toLocaleDateString()\n params.sqlReplacements.dateTo = new Date(dateTo).toLocaleDateString()\n } else {\n params.sqlReplacements.dateFrom = new Date(dateFrom).toISOString()\n params.sqlReplacements.dateTo = new Date(dateTo).toISOString()\n }\n }\n\n let rowFilter = ''\n\n const filters = params.filters\n\n for (let filter of filters) {\n let columnName = filter.path\n\n if (filter.operator === 'filled') {\n rowFilter = `${columnName} IS NOT NULL`\n } else if (filter.operator === 'notFilled') {\n rowFilter = `${columnName} IS NULL`\n } else {\n if (filter.valueType === 'object') {\n if (filter.operator === 'inList' || filter.operator === 'notInList') {\n let ids: string[] = []\n\n for (let rowValue of filter.value) {\n ids.push(`'${rowValue.id}'`)\n }\n\n rowFilter = `${columnName} ${filter.operator === 'inList' ? ' IN ' : 'NOT IN '} (${ids.toString()})`\n } else {\n if (!filter.value) {\n rowFilter = `${columnName} IS NULL`\n } else {\n rowFilter = `${columnName} ${filter.operator} '${filter.value.id}'`\n }\n }\n } else if (filter.valueType === 'enum') {\n if (filter.operator === 'inList' || filter.operator === 'notInList') {\n let values: string[] = []\n for (let rowValue of filter.value) {\n values.push(`'${rowValue}'`)\n }\n rowFilter = `${columnName} ${filter.operator === 'inList' ? ' IN ' : 'NOT IN '} (${values.toString()})`\n } else {\n rowFilter = `${columnName} ${filter.operator} '${filter.value}'`\n }\n } else if (filter.valueType === 'text') {\n if (filter.operator === 'iLike') {\n rowFilter = `${columnName} LIKE '%${filter.value}%'`\n } else if (filter.operator === 'notILike') {\n rowFilter = `${columnName} NOT LIKE '%${filter.value}%'`\n } else {\n rowFilter = columnName + filter.operator + \"'\" + filter.value + \"'\"\n }\n } else if (filter.valueType === 'date') {\n if (filter.operator === 'between') {\n if (filter.value?.[0] && filter.value?.[1]) {\n let dateFrom = ''\n let dateTo = ''\n\n if (filter.dateType === 'dateTime') {\n dateFrom = moment(filter.value[0], 'DD.MM.YYYY HH:mm:ss').toISOString()\n dateTo = moment(filter.value[1], 'DD.MM.YYYY HH:mm:ss').toISOString()\n } else {\n const dateFromStr = moment(filter.value[0], 'DD.MM.YYYY').toDate()\n const dateToStr = moment(filter.value[1], 'DD.MM.YYYY').toDate()\n\n dateFrom = moment(dateFromStr.setHours(0, 0, 0, 0)).toISOString()\n dateTo = moment(dateToStr.setHours(23, 59, 59, 999)).toISOString()\n }\n\n rowFilter = `${columnName} ${filter.operator} '${dateFrom}' and '${dateTo}'`\n }\n } else {\n if (filter.dateType === 'dateTime') {\n rowFilter = `${columnName} ${filter.operator} '${moment(filter.value, 'DD.MM.YYYY HH:mm:ss').toISOString()}'`\n } else {\n rowFilter = `${columnName} ${filter.operator} '${moment(filter.value, 'DD.MM.YYYY').toISOString()}'`\n }\n }\n } else if (filter.valueType === 'number' && filter.operator === 'between') {\n if (filter.value?.[0] && filter.value?.[1]) {\n let minValue = filter.value[0]\n let maxValue = filter.value[1]\n rowFilter = `${columnName} ${filter.operator} '${minValue}' and '${maxValue}'`\n }\n } else {\n rowFilter = columnName + filter.operator + filter.value\n }\n }\n\n params.sqlFilters.push(' AND ' + rowFilter)\n }\n}\n\nasync function convertQueryData(queryData: Record<string, any>[], fields: Record<string, any>[]): Promise<Record<string, any>[]> {\n let resData: Record<string, any>[] = []\n\n let rowNumber = 0\n for (const record of queryData) {\n rowNumber += 1\n\n const rowData = {}\n\n for (const field of fields) {\n if (field.rowNumber === true) {\n rowData[field.name] = rowNumber\n } else if (field.valueType === 'date') {\n let format = 'DD.MM.YYYY HH:mm:ss'\n if (field.dateType === 'date') {\n format = 'DD.MM.YYYY'\n }\n if (field.format && field.format !== '') {\n format = field.format\n }\n\n rowData[field.name] = record[field.name] ? moment(record[field.name]).format(format) : ''\n } else if (field.valueType === 'number') {\n let value = record[field.name]\n\n if (value && field.format && field.format !== '') {\n try {\n const format = JSON.parse(field.format)\n\n if (format.NFD) {\n value = Number(value)\n value = value.toFixed(format.NFD)\n }\n\n rowData[field.name] = value\n } catch (error) {\n rowData[field.name] = '0'\n logger.error(`Error in Reports getResult controller`, { meta: error })\n }\n } else {\n rowData[field.name] = value\n }\n } else if (field.valueType === 'object') {\n if (field.attribs) {\n rowData[field.name] = {}\n\n for (const attr of field.attribs) {\n rowData[field.name][attr.name] = record[attr.path]\n }\n } else {\n rowData[field.name] = { id: undefined, name: undefined }\n }\n } else {\n rowData[field.name] = record[field.name]\n }\n }\n\n resData.push(rowData)\n }\n\n return resData\n}\n\nasync function prepareVirtualTables(req: Request, params: Record<string, any>) {\n const vTables = await virtualTables(req)\n\n let matches = params.query.match(/\\{([^}]+)\\}/g)\n\n if (matches) {\n let vtNames = matches.map((match: string[]) => match.slice(1, -1))\n\n let vtQuery: string | undefined\n for (const vtName of vtNames) {\n const tableData = vTables.find((el) => el.name === vtName)\n\n if (tableData) {\n params.query = params.query.replace(`{${vtName}}`, vtName)\n\n if (!vtQuery) {\n vtQuery = `with ${vtName} as (${tableData.query})`\n } else {\n vtQuery = `${vtQuery}, ${vtName} as (${tableData.query})`\n }\n\n if (tableData.params) {\n params.sqlReplacements = Object.assign(params.sqlReplacements, tableData.params)\n }\n }\n }\n\n if (vtQuery) {\n params.query = `${vtQuery} ${params.query}`\n }\n }\n}\n","import userRightsService from '@/core/services/userRights.service'\nimport { Request } from 'express'\n\nexport default async (req: Request) => {\n const wheres = await customerRigth(req)\n\n return [\n {\n name: 'customerRequests',\n query: 'select * from customer_requests where \"authorId\" = :authorId',\n params: {\n authorId: req.user?.id,\n },\n },\n {\n name: 'customerRequestStatuses',\n query: 'select * from customer_request_statuses',\n },\n {\n name: 'deliveryNotes',\n query: `SELECT * FROM delivery_notes as virtual_table ${wheres}`,\n },\n {\n name: 'deliveryOrders',\n query: `SELECT * FROM delivery_orders as virtual_table ${wheres}`,\n },\n {\n name: 'Dispositions',\n query: `SELECT * FROM dispositions as virtual_table ${wheres}`,\n },\n ]\n}\n\nconst customerRigth = async (req: Request) => {\n let wheres = ''\n const forwarders = await userRightsService.getForwarderFilter(req)\n if (forwarders.fullAccess === false) {\n wheres = 'WHERE ' + `virtual_table.\"forwarderId\" = '${forwarders.forwarder}'`\n }\n\n return wheres\n}\n","import express from 'express'\nimport controllers from '../controllers'\n\nconst router = express.Router()\n\nconst path = 'report'\n\nrouter.get(`/${path}/settings/:id`, controllers.getSettings)\nrouter.post(`/${path}/result`, controllers.getResult)\n// router.post(`/${path}/export_excel`, controllers.generateExcel)\n// router.post(`/${path}/export_pdf`, controllers.generatePdf)\n\nexport default router\n","import morgan from 'morgan'\nimport _ from 'lodash'\nimport { Application, Request, Response } from 'express'\nimport createRotatingStream from './rotatingStream.service'\n\nconst accessLogStream = createRotatingStream({\n path: `${process.cwd()}/logs/access`,\n interval: '1d', // '6h', '1h', '15m'\n})\n\nfunction setupLogger(app: Application) {\n app.use(\n morgan(\n (tokens, req: Request, res: Response) => {\n const user: Record<string, any> = {}\n\n if ((req as any).user) {\n user.id = (req as any).user.id\n user.login = (req as any).user.login\n user.name = (req as any).user.name\n }\n\n let body: Record<string, any> = {}\n if (req.body) {\n body = _.cloneDeep(req.body)\n delete body.password\n }\n\n const headers = Object.fromEntries(Object.entries(req.headers).filter(([k]) => k !== 'cookie'))\n\n return JSON.stringify({\n date: new Date().toISOString(),\n ip: req.headers['x-real-ip'] || req.headers['x-forwarded-for'] || req.ip,\n method: tokens.method(req, res),\n url: tokens.url(req, res),\n status: tokens.status(req, res),\n time: tokens['response-time'](req, res),\n length: tokens.res(req, res, 'content-length'),\n user,\n query: req.query,\n params: req.params,\n body,\n headers,\n })\n },\n { stream: accessLogStream }\n )\n )\n}\n\nexport default setupLogger\n","import { StatusCodes } from 'http-status-codes'\nimport sequelize from '@/database/dbConnection'\nimport logger from '@/core/services/logger.service'\n\nimport { AppSettingModel, AppSettingItemModel, AppSetting } from '@/src/types'\n\ninterface ReturnObject<T = any> {\n value: T | null\n message: string\n status: number | null\n}\n\nexport default {\n async getSetting(settingName: string): Promise<ReturnObject<any>> {\n const returnObject: ReturnObject = { value: null, message: '', status: null }\n\n if (!settingName) {\n returnObject.status = StatusCodes.BAD_REQUEST\n returnObject.message = 'Bad incoming parameters.'\n return returnObject\n }\n\n try {\n const settingItem = (await sequelize.models.AppSettingItem.findOne({\n where: { predefinedName: settingName },\n })) as AppSettingItemModel | null\n\n if (!settingItem) {\n returnObject.status = StatusCodes.BAD_REQUEST\n returnObject.message = 'App setting is not found.'\n return returnObject\n }\n\n const existSetting = (await sequelize.models.AppSetting.findOne({\n where: { appSettingItemId: settingItem.id },\n })) as AppSettingModel | null\n\n if (!existSetting) {\n const result = getDefaultValue(settingItem)\n returnObject.status = StatusCodes.OK\n returnObject.value = result\n } else {\n returnObject.value = getValueByType(settingItem.valueType, existSetting)\n returnObject.status = StatusCodes.OK\n }\n } catch (error) {\n logger.error(`Error in App getSetting controller`, { meta: error })\n returnObject.status = StatusCodes.INTERNAL_SERVER_ERROR\n returnObject.message = 'Internal server error.'\n }\n\n return returnObject\n },\n\n async setSetting(settingName: string, settingValue: any): Promise<ReturnObject<any>> {\n const returnObject: ReturnObject = { value: null, message: '', status: null }\n\n if (!settingName) {\n returnObject.status = StatusCodes.BAD_REQUEST\n returnObject.message = 'Bad incoming parameters.'\n return returnObject\n }\n\n try {\n const settingItem = (await sequelize.models.AppSettingItem.findOne({\n where: { predefinedName: settingName },\n })) as AppSettingItemModel | null\n\n if (!settingItem) {\n returnObject.status = StatusCodes.BAD_REQUEST\n returnObject.message = 'App setting is not found.'\n return returnObject\n }\n\n const existSetting = (await sequelize.models.AppSetting.findOne({\n where: { appSettingItemId: settingItem.id },\n })) as AppSettingModel | null\n\n if (!existSetting) {\n const newData: Partial<AppSetting> = {\n appSettingItemId: settingItem.id,\n }\n setValue(newData, settingItem.valueType, settingValue)\n\n const createdSetting = await sequelize.models.AppSetting.create(newData)\n returnObject.status = StatusCodes.OK\n returnObject.value = createdSetting\n } else {\n const updateData: Partial<AppSetting> = {}\n setValue(updateData, settingItem.valueType, settingValue)\n\n const updatedSetting = await existSetting.update(updateData)\n returnObject.status = StatusCodes.OK\n returnObject.value = updatedSetting\n }\n } catch (error) {\n logger.error(`Error in App setSetting controller`, { meta: error })\n returnObject.status = StatusCodes.INTERNAL_SERVER_ERROR\n returnObject.message = 'Internal server error.'\n }\n\n return returnObject\n },\n}\n\nfunction getDefaultValue(settingItem: AppSettingItemModel) {\n switch (settingItem.valueType) {\n case 'number':\n return 0\n case 'string':\n case 'text':\n return ''\n case 'date':\n return null\n case 'boolean':\n return false\n case 'object':\n case 'enum':\n return null\n default:\n return null\n }\n}\n\nfunction getValueByType(valueType: string, setting: AppSettingModel): any {\n switch (valueType) {\n case 'number':\n return setting.valueNumber\n case 'string':\n case 'text':\n return setting.valueString\n case 'date':\n return setting.valueDate\n case 'boolean':\n return setting.valueBoolean\n case 'object':\n case 'enum':\n return setting.valueRef\n default:\n return null\n }\n}\n\nfunction setValue(data: Partial<AppSettingModel>, valueType: string, value: any): void {\n switch (valueType) {\n case 'number':\n data.valueNumber = value\n break\n case 'string':\n case 'text':\n data.valueString = value\n break\n case 'date':\n data.valueDate = value\n break\n case 'boolean':\n data.valueBoolean = value\n break\n case 'object':\n data.valueRef = value\n break\n }\n}\n","import sequelize from '@/database/dbConnection'\nimport { Model, ModelStatic, QueryTypes } from 'sequelize'\nimport { Request } from 'express'\n\ninterface IncludeOptions {\n model: ModelStatic<Model<any, any>>\n as: string\n attributes?: string[]\n where?: Record<string, unknown>\n include?: IncludeOptions[]\n}\n\ninterface TranslateData {\n [key: string]: any\n lang?: {\n [key: string]: {\n [langCode: string]: string\n }\n }\n}\n\ninterface EnumRow {\n id: number\n enumName: string\n valueId: number\n value: string\n rowNumber: number\n}\n\nexport default {\n prepareIncludes(\n object: ModelStatic<Model<any, any>>,\n params: { [key: string]: any },\n attributes: string[] = [],\n filters: Record<string, any> | null = null,\n order: any[] | null = null,\n extraAttributes: string[] = []\n ): IncludeOptions[] | { all: true } {\n let include: IncludeOptions[] = []\n let compactInclude = true // default mode\n\n if (Object.prototype.hasOwnProperty.call(params, 'compactInclude')) {\n compactInclude = params.compactInclude\n }\n\n const includeAttribs = prepareAttributes(attributes)\n const extraAttribs = prepareAttributes(extraAttributes)\n\n if (params.include) {\n include = params.include\n } else if (object.associations) {\n if (compactInclude !== true) {\n return { all: true }\n }\n\n for (let as in object.associations) {\n if (object.associations[as].options._noTablePart) {\n continue\n }\n\n let model = object.associations[as].target\n\n if (object.associations[as].isSingleAssociation) {\n let attributes = ['id', 'presentation']\n\n if (object.associations[as].target.getAttributes().name) {\n attributes.push('name')\n }\n\n const subInclude: any[] = []\n if (includeAttribs[as]) {\n for (const subAs of includeAttribs[as]) {\n if (typeof subAs === 'object') {\n for (const subAsKey in subAs) {\n const subModel = model.associations[subAsKey]?.target\n\n if (subModel) {\n const subAsValue = subAs[subAsKey]\n if (Array.isArray(subAsValue)) {\n let subAttributes = [...new Set(['id', 'presentation', ...subAsValue])]\n\n if (subModel.getAttributes().name) {\n subAttributes.push('name')\n }\n\n subInclude.push({ model: subModel, as: subAsKey, attributes: subAttributes })\n }\n }\n }\n } else {\n if (!attributes.includes(subAs)) {\n attributes.push(subAs)\n }\n }\n }\n }\n\n if (extraAttribs[as]) {\n attributes = [...new Set([...attributes, ...extraAttribs[as]])]\n }\n\n const where: Record<string, unknown> = filters?.[as]\n\n include.push({ model, as, attributes, where, include: subInclude }) // include field ref data\n } else if (params.withTableParts) {\n const where: Record<string, any> = filters?.[as]\n const count = include.push({ model, as, where, include: [] }) // include tables\n\n if (order && model.getAttributes().rowNumber) {\n order.push([{ model, as }, 'rowNumber', 'asc'])\n }\n\n if (model.associations) {\n include[count - 1].include = []\n\n for (let tFieldAs in model.associations) {\n let tFieldModel = model.associations[tFieldAs].target\n\n if (model.associations[tFieldAs].isSingleAssociation) {\n let tFieldAttributes = ['id', 'presentation']\n\n if (model.associations[tFieldAs].target.getAttributes().name) {\n tFieldAttributes.push('name')\n }\n if (includeAttribs[as]?.[tFieldAs]) {\n tFieldAttributes = [...new Set([...tFieldAttributes, ...includeAttribs[as][tFieldAs]])]\n }\n\n include[count - 1].include?.push({ model: tFieldModel, as: tFieldAs, attributes: tFieldAttributes }) // include table field ref data\n }\n }\n }\n }\n }\n }\n\n return include\n },\n\n async setAuthor(objectData: Record<string, unknown>, req: Request): Promise<void> {\n if (req.user) {\n objectData.authorId = req.user.id\n objectData.author = req.user\n } else {\n console.error('Not found user on request!')\n }\n },\n\n executeConditionCode(str: string, args: unknown): unknown {\n const conditionFunction = new Function('args', str)\n const conditionRes = conditionFunction(args)\n return conditionRes\n },\n\n translateField(rowData: TranslateData, fieldName: string, langCode: string): string {\n const needTranslate = langCode && langCode !== 'pl'\n\n if (needTranslate !== true || rowData.lang === null) {\n return rowData[fieldName]\n }\n\n return rowData.lang?.[fieldName]?.[langCode] || rowData[fieldName]\n },\n\n async initEnums(): Promise<Record<string, string[]>> {\n const queryText = `\n SELECT \n enums.id AS \"id\",\n enums.name AS \"enumName\",\n enum_values.id AS \"valueId\",\n enum_values.value AS \"value\",\n enum_values.\"rowNumber\" AS \"rowNumber\"\n FROM \n enums\n LEFT JOIN \n enum_values \n ON \n enum_values.\"parentId\" = enums.id\n ORDER BY \n enums.id ASC, \n enum_values.\"rowNumber\" ASC`\n\n try {\n const enums: EnumRow[] = await sequelize.query(queryText, { type: QueryTypes.SELECT })\n\n const result = enums.reduce<Record<string, string[]>>((acc, row) => {\n if (!acc[row.enumName]) {\n acc[row.enumName] = []\n }\n acc[row.enumName].push(row.value)\n return acc\n }, {})\n\n return result\n } catch (error) {\n console.error(error)\n return {}\n }\n },\n\n normalizeFloat(value: number, digits: number = 6): number {\n if (!Number.isFinite(value)) return value\n\n const factor = Math.pow(10, digits)\n const rounded = Math.round(value * factor) / factor\n\n const factorZero = Math.pow(10, 3)\n const roundedZero = Math.round(value * factorZero) / factorZero\n\n return roundedZero === 0 ? 0 : rounded\n },\n}\n\nfunction prepareAttributes(inputAttributes: string[]): Record<string, any> {\n const outputAttributes = {}\n if (inputAttributes.length === 0) {\n return outputAttributes\n }\n\n for (const attrib of inputAttributes) {\n const attribInfo = attrib.split('.')\n\n if (attribInfo.length > 0) {\n if (outputAttributes[attribInfo[0]]) {\n if (attribInfo.length == 2) {\n outputAttributes[attribInfo[0]].push(attribInfo[1])\n } else if (attribInfo.length > 2) {\n if (outputAttributes[attribInfo[0]][attribInfo[1]]) {\n outputAttributes[attribInfo[0]][attribInfo[1]].push(attribInfo[2])\n } else {\n outputAttributes[attribInfo[0]].push({ [attribInfo[1]]: [attribInfo[2]] })\n }\n }\n } else {\n if (attribInfo.length == 2) {\n outputAttributes[attribInfo[0]] = [attribInfo[1]]\n } else if (attribInfo.length > 2) {\n outputAttributes[attribInfo[0]] = {}\n outputAttributes[attribInfo[0]][attribInfo[1]] = [attribInfo[2]]\n }\n }\n }\n }\n\n return outputAttributes\n}\n","import { QueryTypes } from 'sequelize'\nimport sequelize from '@/database/dbConnection'\nimport logger from '@/core/services/logger.service'\nimport cryptoJs from 'crypto-js'\nimport { minify } from 'terser'\n\ninterface CommonCommand {\n id: string\n name: string\n title: string\n objectType: string | null\n viewType: string | null\n module: string | null\n moduleV3?: string | null\n lang: string | null\n presentationType: string\n icon: string | null\n hidden: boolean\n variant: string | null\n tooltip: string | null\n classes: string | null\n styles: string | null\n groupId: string | null\n isGroup: boolean\n objects: string[]\n}\n\ninterface CommandGroup {\n id: string\n name: string\n title: string\n objectType: string | null\n viewType: string | null\n lang: string | null\n presentationType: string\n icon: string | null\n hidden: boolean\n variant: string | null\n tooltip: string | null\n classes: string | null\n styles: string | null\n isGroup: boolean\n objects: string[]\n items: CommonCommand[]\n}\n\nexport default {\n async initCommonCommands(userId: string) {\n const commandsTree: Array<CommandGroup | CommonCommand> = await initCommandGroups()\n const commonCommands = await initPlaneCommands(userId)\n\n for (const commonCommand of commonCommands) {\n if (commonCommand.groupId) {\n const existGroup = commandsTree.find((el) => el.id === commonCommand.groupId && el.isGroup) as CommandGroup\n\n if (existGroup) {\n existGroup.items.push({ ...commonCommand })\n }\n } else {\n commandsTree.push({ ...commonCommand })\n }\n }\n\n return commandsTree\n },\n}\n\nasync function initCommandGroups() {\n const queryText = `\n SELECT\n command_groups.id AS \"id\",\n command_groups.name AS \"name\",\n command_groups.\"title\" AS \"title\",\n command_groups.\"objectType\" AS \"objectType\",\n command_groups.\"viewType\" AS \"viewType\",\n command_groups.\"lang\" AS \"lang\",\n command_groups.\"presentationType\" AS \"presentationType\",\n command_groups.\"variant\" AS \"variant\",\n command_groups.\"icon\" AS \"icon\",\n command_groups.\"hidden\" AS \"hidden\",\n command_groups.\"tooltip\" AS \"tooltip\",\n command_groups.\"classes\" AS \"classes\",\n command_groups.\"styles\" AS \"styles\",\n groups_objects.\"objectId\" AS \"objectId\"\n FROM \n command_groups\n LEFT JOIN \n command_groups_objects as \"groups_objects\"\n ON \n groups_objects.\"parentId\" = command_groups.id \n WHERE\n command_groups.\"markedToDelete\" = false`\n\n try {\n const commandGroupsRaw: any[] = await sequelize.query(queryText, { type: QueryTypes.SELECT })\n\n const commandGroups: CommandGroup[] = commandGroupsRaw.reduce<any[]>((acc, row) => {\n let findIndex = acc.findIndex((el) => el.name === row.name)\n if (findIndex === -1) {\n const arrayLength = acc.push({\n id: row.id,\n name: row.name,\n title: row.title,\n objectType: row.objectType,\n viewType: row.viewType,\n lang: row.lang ? JSON.parse(row.lang) : row.lang,\n presentationType: row.presentationType,\n icon: row.icon,\n variant: row.variant,\n description: row.description,\n hidden: row.hidden,\n tooltip: row.tooltip,\n classes: row.classes,\n styles: row.styles,\n isGroup: true,\n objects: [],\n items: [],\n })\n findIndex = arrayLength - 1\n }\n\n if (findIndex > -1 && row.objectId) {\n acc[findIndex].objects.push(row.objectId)\n }\n\n return acc\n }, [])\n\n return commandGroups\n } catch (error) {\n console.error(error)\n return []\n }\n}\n\nasync function initPlaneCommands(userId: string) {\n const queryText = `\n SELECT\n common_commands.id AS \"id\",\n common_commands.name AS \"name\",\n common_commands.\"title\" AS \"title\",\n common_commands.\"objectType\" AS \"objectType\",\n common_commands.\"viewType\" AS \"viewType\",\n common_commands.\"module\" AS \"module\",\n common_commands.\"moduleV3\" AS \"moduleV3\",\n common_commands.\"lang\" AS \"lang\",\n common_commands.\"presentationType\" AS \"presentationType\",\n common_commands.\"variant\" AS \"variant\",\n common_commands.\"icon\" AS \"icon\",\n common_commands.\"hidden\" AS \"hidden\",\n common_commands.\"tooltip\" AS \"tooltip\",\n common_commands.\"classes\" AS \"classes\",\n common_commands.\"styles\" AS \"styles\",\n common_commands.\"groupId\" AS \"groupId\",\n commands_objects.\"objectId\" AS \"objectId\"\n FROM \n common_commands\n LEFT JOIN \n common_commands_objects as \"commands_objects\"\n ON \n commands_objects.\"parentId\" = common_commands.id \n WHERE\n common_commands.\"markedToDelete\" = false`\n\n try {\n const commonCommandsRaw: any[] = await sequelize.query(queryText, { type: QueryTypes.SELECT })\n\n const commonCommands: CommonCommand[] = commonCommandsRaw.reduce<any[]>((acc, row) => {\n let findIndex = acc.findIndex((el) => el.name === row.name)\n if (findIndex === -1) {\n const arrayLength = acc.push({\n id: row.id,\n name: row.name,\n title: row.title,\n objectType: row.objectType,\n viewType: row.viewType,\n module: row.module,\n moduleV3: row.moduleV3,\n lang: row.lang ? JSON.parse(row.lang) : row.lang,\n presentationType: row.presentationType,\n variant: row.variant,\n icon: row.icon,\n description: row.description,\n hidden: row.hidden,\n tooltip: row.tooltip,\n classes: row.classes,\n styles: row.styles,\n groupId: row.groupId,\n isGroup: false,\n objects: [],\n })\n findIndex = arrayLength - 1\n }\n\n if (findIndex > -1 && row.objectId) {\n acc[findIndex].objects.push(row.objectId)\n }\n\n return acc\n }, [])\n\n const exportRemoveRegex = /^\\s*export\\s+/gm\n const exportFuncRegex = /^\\s*(?:async\\s+)?function\\s+commandProcessing\\s*\\([^)]*\\)\\s*{[\\s\\S]*?}/gm\n\n for (const commonCommand of commonCommands) {\n if (commonCommand.module) {\n commonCommand.module = commonCommand.module.replace(exportRemoveRegex, '')\n\n exportFuncRegex.lastIndex = 0\n const paternExist: boolean = exportFuncRegex.test(commonCommand.module)\n\n let moduleContent: string = ''\n if (paternExist) {\n moduleContent = `function main() {${commonCommand.module.trim()} return{commandProcessing}}`\n } else {\n moduleContent = `function main() {return {}}`\n }\n\n try {\n const minifiedModule: any = await minify(moduleContent)\n commonCommand.module = cryptoJs.AES.encrypt(minifiedModule.code.replace(/^function main\\(\\)/, ''), userId).toString()\n } catch (error) {\n logger.error(`Error in commonCommand module`, { meta: error })\n commonCommand.module = null\n }\n }\n\n if (commonCommand.moduleV3) {\n commonCommand.moduleV3 = commonCommand.moduleV3.replace(exportRemoveRegex, 'function ')\n\n exportFuncRegex.lastIndex = 0\n const paternExist: boolean = exportFuncRegex.test(commonCommand.moduleV3)\n\n let moduleContent: string = ''\n if (paternExist) {\n moduleContent = `function main() {${commonCommand.moduleV3.trim()} return{commandProcessing}}`\n } else {\n moduleContent = `function main() {return {}}`\n }\n\n try {\n const minifiedModule: any = await minify(moduleContent)\n commonCommand.moduleV3 = cryptoJs.AES.encrypt(minifiedModule.code.replace(/^function main\\(\\)/, ''), userId).toString()\n } catch (error) {\n logger.error(`Error in commonCommand module`, { meta: error })\n commonCommand.moduleV3 = null\n }\n }\n }\n\n return commonCommands\n } catch (error) {\n console.error(error)\n return []\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\nimport { StatusCodes } from 'http-status-codes'\nimport { Model, ModelStatic, Op } from 'sequelize'\nimport moment from 'moment'\nimport fs from 'fs'\n\nimport logger from '@/core/services/logger.service'\nimport commonService from '@/core/services/common.service'\nimport documentService from '@/core/services/document.service'\nimport registerService from '@/core/services/register.service'\nimport seederService from '@/core/services/seeder.service'\nimport objectVersioning from '@/core/services/objectVersions.service'\nimport sequelize from '@/database/dbConnection'\nimport { NextFunction, Request, Response } from 'express'\nimport { AppObject } from '@/src/types'\nimport cryptoJs from 'crypto-js'\n\ninterface Sort {\n sortBy: string\n sortDesc: boolean\n}\n\ninterface Pagination {\n page: number\n limit: number\n}\n\ninterface IncludeFilter {\n [key: string]: Record<string, unknown>\n}\n\ninterface IncludeModel {\n model: ModelStatic<Model>\n as: string\n fkField?: string\n}\ninterface ControllerResult<T> {\n status: number\n responseData: T\n}\n\nexport default {\n async findAllItems(req: Request, res: Response, next: NextFunction, object: AppObject, params: Record<string, any> = {}): Promise<ControllerResult<any>> {\n const pagination: Pagination = JSON.parse((req.query?.pagination as string) || '{}')\n const sort: Sort[] | Sort = JSON.parse((req.query?.sort as string) || '{}')\n\n let filter: Record<string | symbol, any> = {}\n if (req.query?.filter) {\n filter = typeof req.query?.filter === 'string' ? JSON.parse(req.query?.filter) : req.query?.filter\n }\n\n const limit = req.query?.limit || null\n const withTableParts = req.query?.withTableParts || null\n\n let attributes: any = {}\n let includeAttributes: string[] = []\n if (req.query?.attributes) {\n attributes = req.query?.attributes\n\n if (typeof attributes === 'string') {\n attributes = JSON.parse(attributes)\n }\n }\n\n if (params.attributes && typeof params.attributes === 'object') {\n if (typeof attributes === 'object' && !Array.isArray(attributes) && Object.keys(attributes).length === 0) {\n attributes = params.attributes\n } else if (typeof attributes === 'object' && Array.isArray(attributes) && attributes.length === 0) {\n attributes = params.attributes\n } else if (typeof attributes === 'object' && !Array.isArray(attributes) && !Array.isArray(params.attributes)) {\n attributes = Object.assign(attributes, params.attributes)\n } else if (typeof attributes === 'object' && Array.isArray(attributes) && Array.isArray(params.attributes)) {\n attributes = [...new Set([...attributes, ...params.attributes])]\n }\n }\n\n if (Array.isArray(attributes)) {\n includeAttributes = attributes.filter((el) => {\n return el.includes('.')\n })\n\n attributes = attributes.filter((el) => {\n return !el.includes('.')\n })\n }\n\n let extraAttributes: string[] = []\n if (req.query?.extraAttributes) {\n if (typeof req.query?.extraAttributes === 'string') {\n extraAttributes = JSON.parse(req.query?.extraAttributes)\n } else {\n extraAttributes = req.query?.extraAttributes as string[]\n }\n }\n\n let includeFilter: IncludeFilter = {}\n if (params.filter) {\n filter = Object.assign(filter, params.filter)\n }\n\n if (filter.searchStr) {\n const searchFields = prepareSearchFields(object)\n\n if (searchFields.length > 0) {\n if (searchFields.length > 1) {\n filter[Op.or] = []\n\n for (let searchField of searchFields) {\n filter[Op.or].push({ [searchField]: { [Op.iLike]: `%${filter.searchStr}%` } })\n }\n } else {\n filter[searchFields[0]] = {\n [Op.iLike]: `%${filter.searchStr}%`,\n }\n }\n }\n\n delete filter.searchStr\n }\n\n if (filter.exclude) {\n filter.id = { [Op.and]: filter.exclude.map((id) => ({ [Op.ne]: id })) }\n delete filter.exclude\n }\n\n if (filter.advanced) {\n prepareFilters(filter.advanced, filter, includeFilter)\n delete filter.advanced\n }\n\n if (filter.quick) {\n prepareFilters(filter.quick, filter, includeFilter)\n delete filter.quick\n }\n\n for (const filterField in filter) {\n if (filterField.includes('.')) {\n const filterAttrib = filterField.split('.')\n if (includeFilter[filterAttrib[0]]) {\n includeFilter[filterAttrib[0]][filterAttrib[1]] = filter[filterField]\n } else {\n includeFilter[filterAttrib[0]] = {\n [filterAttrib[1]]: filter[filterField],\n }\n }\n\n delete filter[filterField]\n }\n }\n\n if (object.type === 'document' && filter.period) {\n const dateFrom = filter.period[0]\n const dateTo = moment(filter.period[1]).endOf('day').toISOString()\n\n filter.date = { [Op.between]: [dateFrom, dateTo] }\n delete filter.period\n }\n\n if (object.type === 'register' && filter.period) {\n const dateFrom = filter.period[0]\n const dateTo = filter.period[1]\n filter.period = { [Op.between]: [dateFrom, dateTo] }\n }\n\n const order: string[][] = []\n prepareSorting(object, sort, order)\n\n const lang = req.query?.lang\n const needTranslate = lang && lang !== 'pl'\n\n if (withTableParts) {\n params.withTableParts = withTableParts\n }\n\n let include = commonService.prepareIncludes(object.model, params, includeAttributes, includeFilter, null, extraAttributes)\n\n try {\n let items: Record<string, any>[]\n\n if (pagination.page) {\n let limit = pagination.limit\n let offset = 0 + (pagination.page - 1) * limit\n\n items = await object.model.findAndCountAll({\n where: filter,\n offset,\n limit,\n attributes,\n order,\n include,\n group: params?.group || null,\n })\n } else {\n items = await object.model.findAll({\n where: filter,\n attributes,\n order,\n limit,\n include,\n group: params?.group || null,\n })\n }\n\n if (params.resultProcessing) {\n items = params.resultProcessing(items)\n }\n\n if (items) {\n items = JSON.parse(JSON.stringify(items))\n\n if (needTranslate) {\n // TO DO\n }\n\n return { status: StatusCodes.OK, responseData: items }\n } else {\n const message = 'Items not find'\n logger.error(`Error in ${object.name} findAll controller`, { meta: message })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message } }\n }\n } catch (error) {\n logger.error(`Error in ${object.name} findAll controller`, { meta: error })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error.message } }\n }\n },\n\n async findItem(req: Request, res: Response, next: NextFunction, object: AppObject, params: Record<string, any> = {}): Promise<ControllerResult<any>> {\n const objId = req.params.id\n\n if (!objId || typeof objId !== 'string' || objId.length !== 36) {\n const message = 'Object id is not correct!'\n logger.error(`Error in ${object.name} findItem controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n params.withTableParts = false\n\n let attributes = {}\n let includeAttributes: string[] = []\n if (req.query?.attributes) {\n attributes = req.query.attributes\n\n if (typeof attributes === 'string') {\n attributes = JSON.parse(attributes)\n }\n\n if (Array.isArray(attributes)) {\n includeAttributes = attributes.filter((el) => {\n return el.includes('.')\n })\n\n attributes = attributes.filter((el) => {\n return !el.includes('.')\n })\n }\n }\n\n if (params?.attributes) {\n if (Array.isArray(params.attributes)) {\n const paramIncludeAttributes = params.attributes.filter((el) => {\n return el.includes('.')\n })\n\n const paramAttributes = params.attributes.filter((el) => {\n return !el.includes('.')\n })\n attributes = Object.assign(attributes, paramAttributes)\n includeAttributes = Object.assign(includeAttributes, paramIncludeAttributes)\n }\n }\n\n const paramExtraAttributes = req.query?.extraAttributes\n\n let extraAttributes: string[] = []\n\n if (paramExtraAttributes) {\n extraAttributes = typeof paramExtraAttributes === 'string' ? JSON.parse(paramExtraAttributes) : paramExtraAttributes\n }\n\n let order: string[][] = []\n\n let mainAttributes: string[] = includeAttributes\n let mainExtraAttributes: string[] = extraAttributes\n for (const tablePart in object.tables) {\n mainAttributes = mainAttributes.filter((el) => !el.startsWith(`${tablePart}.`))\n mainExtraAttributes = mainExtraAttributes.filter((el) => !el.startsWith(`${tablePart}.`))\n }\n\n let include = commonService.prepareIncludes(object.model, params, mainAttributes, null, order, mainExtraAttributes)\n\n try {\n let existObject: Record<string, any> = await object.model.findByPk(objId, { include, order })\n\n if (existObject) {\n existObject = JSON.parse(JSON.stringify(existObject))\n\n for (const tablePart in object.tables) {\n order = []\n\n let tableAttributes: string[] = includeAttributes\n let tableExtraAttributes: string[] = extraAttributes\n\n tableAttributes = tableAttributes.filter((el) => el.startsWith(`${tablePart}.`))\n tableExtraAttributes = tableExtraAttributes.filter((el) => el.startsWith(`${tablePart}.`))\n\n const regex = new RegExp(`^${tablePart}\\\\.`)\n\n tableAttributes = tableAttributes.map((el) => el.replace(regex, ''))\n tableExtraAttributes = tableExtraAttributes.map((el) => el.replace(regex, ''))\n\n const tableInclude = commonService.prepareIncludes(object.tables[tablePart].model, params, tableAttributes, null, order, tableExtraAttributes)\n\n if (order && object.tables[tablePart].model.getAttributes().rowNumber) {\n order.push(['rowNumber', 'asc'])\n }\n\n const tableRows: Record<string, any>[] = await object.tables[tablePart].model.findAll({ where: { parentId: existObject.id }, include: tableInclude, order })\n\n existObject[tablePart] = JSON.parse(JSON.stringify(tableRows))\n }\n\n if (object.configurationData === true) {\n const clientVersion = (req.headers['x-client-version'] || '2') as string\n await initObjectModule(object, existObject, req.user?.id, clientVersion)\n }\n\n return { status: StatusCodes.OK, responseData: existObject }\n } else {\n const message = `${object.name} with id ${objId} not found`\n logger.error(`Error in ${object.name} findByPk controller`, { meta: message })\n return { status: StatusCodes.NOT_FOUND, responseData: { message } }\n }\n } catch (error) {\n logger.error(`Error in ${object.name} findByPk controller`, { meta: error })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error.message } }\n }\n },\n\n async findOne(req: Request, res: Response, next: NextFunction, object: AppObject, params: Record<string, any> = {}): Promise<ControllerResult<any>> {\n const whereCondition = req.params.whereCondition\n\n if (!whereCondition) {\n const message = 'Erron in findOne query parameters!'\n logger.error(`Error in ${object.name} findOne controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n params.withTableParts = true\n\n const include = commonService.prepareIncludes(object.model, params)\n\n return await object.model\n .findOne({\n where: whereCondition,\n include,\n })\n .then((result: Record<string, any>) => {\n if (result) {\n return { status: StatusCodes.OK, responseData: result }\n } else {\n const message = `${object.name} not found`\n logger.error(`Error in ${object.name} findOne controller`, { meta: message })\n return { status: StatusCodes.NOT_FOUND, responseData: { message } }\n }\n })\n .catch((error: Error) => {\n logger.error(`Error in ${object.name} findOne controller`, { meta: error })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error.message } }\n })\n },\n\n async findPredefinedItem(req: Request, res: Response, next: NextFunction, object: AppObject, params: Record<string, any> = {}): Promise<ControllerResult<any>> {\n const predefinedName = req.params.name\n\n if (!predefinedName || typeof predefinedName !== 'string') {\n const message = 'Object predefined name is not correct!'\n logger.error(`Error in ${object.name} findPredefinedItem controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n params.withTableParts = true\n\n let include = commonService.prepareIncludes(object.model, params)\n\n return await object.model\n .findOne({ where: { predefinedName }, include })\n .then((existObject: Record<string, any>) => {\n if (existObject) {\n return { status: StatusCodes.OK, responseData: existObject }\n } else {\n const message = `${object.name} with predefinedName ${predefinedName} is not found`\n logger.error(`Error in ${object.name} findPredefinedItem controller`, { meta: message })\n return { status: StatusCodes.NOT_FOUND, responseData: { message } }\n }\n })\n .catch((error) => {\n logger.error(`Error in ${object.name} findPredefinedItem controller`, { meta: error })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error.message } }\n })\n },\n\n async createItem(\n req: Request,\n res: Response,\n next: NextFunction,\n object: AppObject,\n params: Record<string, any> = {},\n afterCreate: Function | undefined = undefined\n ): Promise<ControllerResult<any>> {\n const objectData = params?.objectData ? params.objectData : { ...req.body }\n\n if (!objectData.id) {\n objectData.id = uuidv4()\n }\n\n delete objectData.presentation\n\n const include = prepareObjectIncludes(object.model, objectData)\n\n const t = params.transaction ? params.transaction : await object.model.sequelize.transaction()\n\n try {\n if (object.type === 'document') {\n await documentService.setNumber(object, objectData, t)\n }\n\n const newItem = await object.model.create(objectData, { include, transaction: t })\n\n if (!newItem) {\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: 'Object is not created' } }\n }\n\n t.afterCommit(() => {\n if (object.configurationData === true) {\n const configParams: Record<string, any> = { objectId: newItem.id, event: 'create', newValue: newItem }\n\n setAdditionalConfigParams(object, objectData, configParams)\n\n seederService.updateInitialData(object.model, object.path, configParams)\n } else {\n if (Object.prototype.hasOwnProperty.call(object.model.rawAttributes, 'predefinedName') && object.type === 'catalog') {\n seederService.updatePredefinedInitialData(object)\n }\n }\n\n objectVersioning.onChangeHandler(object.model, newItem.id, 'create', req.user?.id)\n })\n\n if (afterCreate && typeof afterCreate === 'function') {\n await afterCreate(req, res, newItem, t)\n }\n\n if (!params.transaction) {\n await t.commit()\n }\n\n return { status: StatusCodes.OK, responseData: newItem }\n } catch (error) {\n if (!params.transaction) {\n await t.rollback()\n }\n\n logger.error(`Error in ${object.name} createItem controller`, { meta: `${object.name} is not created. ${error}` })\n\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error?.original?.message || error?.message } }\n }\n },\n\n async updateItem(\n req: Request,\n res: Response,\n next: NextFunction,\n object: AppObject,\n params: Record<string, any> = {},\n afterUpdate: Function | undefined = undefined\n ): Promise<ControllerResult<any>> {\n let message = ''\n\n const objId = req.params.id\n\n if (!objId || typeof objId !== 'string' || objId.length !== 36) {\n message = 'Object id is not correct!'\n logger.error(`Error in ${object.name} updateItem controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n const objectData = params.objectData ? params.objectData : { ...req.body }\n\n delete objectData.presentation\n\n const t = params.transaction ? params.transaction : await object.model.sequelize.transaction()\n\n let existItem = await object.model.findByPk(objId, { transaction: t })\n\n if (!existItem) {\n if (!params.transaction) {\n await t.rollback()\n }\n\n message = `${object.name} with uuid ${objId} not found`\n logger.error(`Error in ${object.name} updateItem controller`, { meta: message })\n return { status: StatusCodes.NOT_FOUND, responseData: { message } }\n }\n\n const beforeItem: Record<string, any> = JSON.parse(JSON.stringify(existItem))\n\n for (const tablePart in object.tables) {\n const tableRows: Record<string, any>[] = await object.tables[tablePart].model.findAll({ where: { parentId: existItem.id } })\n beforeItem[tablePart] = JSON.parse(JSON.stringify(tableRows))\n }\n\n try {\n if (!params.noVersionCheck) {\n if (!objectData.updatedAt) {\n message = 'The data version not defined'\n logger.error(`Error in ${object.name} updateItem controller`, { meta: message })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message } }\n }\n\n const updatedAt = new Date(objectData.updatedAt)\n\n if (existItem.updatedAt > updatedAt) {\n message = 'The data version is less than the existing one in the database'\n logger.error(`Error in ${object.name} updateItem controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n }\n\n const updatedItem = await existItem.update(objectData, { transaction: t })\n\n if (!updatedItem) {\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: 'Item is not updated' } }\n }\n\n const include = prepareObjectIncludes(object.model, objectData)\n\n if (include.length > 0) {\n const fkValue = existItem.id\n\n for (const includeTable of include) {\n if (Object.prototype.hasOwnProperty.call(objectData, includeTable.as)) {\n let fkField = 'parentId'\n\n if (includeTable.fkField) {\n fkField = includeTable.fkField\n }\n await includeTable.model.destroy({ where: { [fkField]: fkValue }, transaction: t })\n\n const tableRows: Record<string, any>[] = []\n\n for (const tableRow of objectData[includeTable.as]) {\n const newRow = { ...tableRow }\n if (!includeTable.fkField) {\n newRow.parentId = fkValue\n }\n tableRows.push(newRow)\n }\n\n await includeTable.model.bulkCreate(tableRows, { transaction: t })\n }\n }\n }\n\n if (afterUpdate && typeof afterUpdate === 'function') {\n await afterUpdate(req, res, updatedItem, beforeItem, t)\n }\n\n t.afterCommit(() => {\n if (object.configurationData === true) {\n const configParams: Record<string, any> = { objectId: updatedItem.id, event: 'update', oldValue: beforeItem, newValue: updatedItem }\n\n setAdditionalConfigParams(object, objectData, configParams)\n\n seederService.updateInitialData(object.model, object.path, configParams)\n } else {\n if (Object.prototype.hasOwnProperty.call(object.model.rawAttributes, 'predefinedName') && object.type === 'catalog') {\n seederService.updatePredefinedInitialData(object)\n }\n }\n\n objectVersioning.onChangeHandler(object.model, objId, 'update', req.user?.id)\n })\n\n if (!params.transaction) {\n await t.commit()\n }\n\n return { status: StatusCodes.OK, responseData: updatedItem }\n } catch (error) {\n if (!params.transaction) {\n await t.rollback()\n }\n logger.error(`Error in ${object.name} updateItem controller`, { meta: error })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error?.original?.message || error?.message } }\n }\n },\n\n async confirmItem(req: Request, res: Response, next: NextFunction, object: AppObject, params: Record<string, any> = {}): Promise<ControllerResult<any>> {\n const recorderId = req.body.id\n const isConfirmed = req.body.isConfirmed\n const recorderType = object.name\n const recordsSet = params.recordsSet || {}\n\n const t = params.transaction ? params.transaction : await object.model.sequelize.transaction()\n\n try {\n for (const key of Object.keys(recordsSet)) {\n const registerObject = req.objects[key]\n\n if (registerObject && object.model.associations[key]) {\n let recordsBefore = await registerObject.model.findAll({ where: { recorderId, recorderType } })\n\n recordsBefore = JSON.parse(JSON.stringify(recordsBefore))\n\n await registerObject.model.destroy({ where: { recorderId, recorderType }, transaction: t })\n\n for (const record of recordsSet[key]) {\n await registerObject.model.create(record, { transaction: t })\n }\n\n await registerService.updateTotals(registerObject, { objects: req.objects, recordsBefore, recordsAfter: recordsSet[key], recorderId, recorderType, transaction: t })\n }\n }\n\n if (isConfirmed === false) {\n await object.model.update({ isConfirmed: true, markedToDelete: false }, { where: { id: req.body.id }, transaction: t })\n\n t.afterCommit(() => {\n objectVersioning.onChangeHandler(object.model, req.body.id, 'confirm', req.user?.id)\n })\n }\n\n if (!params.transaction) {\n await t.commit()\n }\n\n return { status: StatusCodes.OK, responseData: { message: 'OK' } }\n } catch (error) {\n if (!params.transaction) {\n await t.rollback()\n }\n\n logger.error(`Error in ${object.name} confirmItem controller`, { meta: `${object.name} is not confirmed. ${error}` })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error?.original?.message || error?.message } }\n }\n },\n\n async undoConfirmItem(req: Request, res: Response, next: NextFunction, object: AppObject, params: Record<string, any> = {}) {\n const recorderId = req.body.id\n const recorderType = object.name\n\n const t = params.transaction ? params.transaction : await object.model.sequelize.transaction()\n\n try {\n for (const key of Object.keys(object.model.associations)) {\n if (object.model.associations[key].options._registerRecords) {\n const registerObject = req.objects?.[key]\n\n if (registerObject) {\n let recordsBefore = await registerObject.model.findAll({ where: { recorderId, recorderType } })\n\n recordsBefore = JSON.parse(JSON.stringify(recordsBefore))\n\n const registerModel = registerObject.model\n await registerModel.destroy({ where: { recorderId, recorderType }, transaction: t })\n\n await registerService.updateTotals(registerObject, { objects: req.objects, recordsBefore, recordsAfter: [], recorderId, recorderType, transaction: t })\n }\n }\n }\n\n await object.model.update({ isConfirmed: false }, { where: { id: req.body.id }, transaction: t })\n\n t.afterCommit(() => {\n objectVersioning.onChangeHandler(object.model, req.body.id, 'undoConfirm', req.user?.id)\n })\n\n if (!params.transaction) {\n await t.commit()\n }\n\n return { status: StatusCodes.OK, responseData: { message: 'OK' } }\n } catch (error) {\n logger.error(`Error in ${object.name} undoConfirmItem controller`, { meta: error })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error?.original?.message || error?.message } }\n }\n },\n\n async deleteItem(\n req: Request,\n res: Response,\n next: NextFunction,\n object: AppObject,\n params: Record<string, any> = {},\n afterDelete: Function | undefined\n ): Promise<ControllerResult<any>> {\n const objId = req.params.id\n\n if (!objId || typeof objId !== 'string' || objId.length !== 36) {\n const message = 'Object id is not correct!'\n logger.error(`Error in ${object.name} deleteItem controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n const t = params.transaction ? params.transaction : await object.model.sequelize.transaction()\n\n const existItem = await object.model.findByPk(objId)\n\n if (!existItem) {\n if (!params.transaction) {\n await t.rollback()\n }\n\n const message = `${object.name} with uuid ${objId} not found`\n logger.error(`Error in ${object.name} deleteItem controller`, { meta: message })\n return { status: StatusCodes.NOT_FOUND, responseData: { message } }\n }\n\n try {\n await existItem.destroy({ where: { id: objId }, cascade: true, transaction: t })\n\n t.afterCommit(() => {\n if (object.configurationData === true) {\n seederService.updateInitialData(object.model, object.path, { objectId: existItem.id, event: 'delete', oldValue: existItem })\n } else {\n if (Object.prototype.hasOwnProperty.call(object.model.rawAttributes, 'predefinedName') && object.type === 'catalog') {\n seederService.updatePredefinedInitialData(object)\n }\n }\n })\n\n if (afterDelete && typeof afterDelete === 'function') {\n afterDelete(req, res, existItem, t)\n }\n\n if (!params.transaction) {\n await t.commit()\n }\n\n return { status: StatusCodes.OK, responseData: { message: 'OK' } }\n } catch (error) {\n if (!params.transaction) {\n await t.rollback()\n }\n\n logger.error(`Error in ${object.name} deleteItem controller`, { meta: error })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error?.original?.message || error?.message } }\n }\n },\n\n async changeItemDeletionMark(\n req: Request,\n res: Response,\n next: NextFunction,\n object: AppObject,\n params: Record<string, any> = {},\n afterUpdate: Function | undefined = undefined\n ): Promise<ControllerResult<any>> {\n const objId = req.body.id\n\n if (!objId || typeof objId !== 'string' || objId.length !== 36) {\n const message = 'Object id is not correct!'\n logger.error(`Error in ${object.name} changeDeletionMark controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n const t = params.transaction ? params.transaction : await object.model.sequelize.transaction()\n\n const existItem = await object.model.findByPk(objId)\n\n if (!existItem) {\n if (!params.transaction) {\n await t.rollback()\n }\n\n const message = `${object.name} with uuid ${objId} not found`\n logger.error(`Error in ${object.name} changeDeletionMark controller`, { meta: message })\n return { status: StatusCodes.NOT_FOUND, responseData: { message } }\n }\n\n const objectData = {\n markedToDelete: !existItem.markedToDelete,\n }\n\n try {\n const beforeItem = JSON.parse(JSON.stringify(existItem))\n\n const updatedItem = await existItem.update(objectData, { transaction: t })\n\n if (afterUpdate && typeof afterUpdate === 'function') {\n await afterUpdate(req, res, updatedItem, beforeItem, t)\n }\n\n t.afterCommit(() => {\n if (object.configurationData === true) {\n seederService.updateInitialData(object.model, object.path, {\n objectId: updatedItem.id,\n event: 'update',\n oldValue: beforeItem,\n newValue: updatedItem,\n changeDeletionMark: true,\n })\n } else {\n if (Object.prototype.hasOwnProperty.call(object.model.rawAttributes, 'predefinedName') && object.type === 'catalog') {\n seederService.updatePredefinedInitialData(object)\n }\n }\n\n objectVersioning.onChangeHandler(object.model, objId, 'update', req.user?.id)\n })\n\n if (object.type === 'document' && existItem.isConfirmed) {\n for (const key of Object.keys(object.model.associations)) {\n if (object.model.associations[key].options._registerRecords) {\n const register = object.model.associations[key].target\n await register.destroy({ where: { recorderId: objId }, transaction: t })\n }\n }\n\n await object.model.update({ isConfirmed: false }, { where: { id: objId }, transaction: t })\n }\n\n if (!params.transaction) {\n await t.commit()\n }\n\n return { status: StatusCodes.OK, responseData: updatedItem }\n } catch (error) {\n if (!params.transaction) {\n await t.rollback()\n }\n\n logger.error(`Error in ${object.name} changeDeletionMark controller`, { meta: error })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error?.original?.message || error?.message } }\n }\n },\n\n async calculateRegisterTotals(req: Request, res: Response, next: NextFunction, object: AppObject) {\n await registerService.calculateTotals(object, req.objects)\n return { status: StatusCodes.OK, responseData: { message: 'OK' } }\n },\n}\n\nfunction prepareObjectIncludes(objectModel: ModelStatic<Model<any, any>>, objectData: Record<string, any>) {\n const include: IncludeModel[] = []\n\n if (objectModel.associations) {\n for (const as in objectModel.associations) {\n if (objectModel.associations[as].isMultiAssociation) {\n if (objectModel.associations[as].options._noTablePart) {\n continue\n }\n\n if (Object.prototype.hasOwnProperty.call(objectData, as)) {\n let model = objectModel.associations[as].target\n include.push({ model, as })\n }\n }\n }\n }\n\n if (objectData.addInclude) {\n for (const addInclude of objectData.addInclude) {\n const modelIndex = include.findIndex((includeItem) => {\n return includeItem.model === addInclude.model\n })\n if (modelIndex === -1) {\n include.push({ ...addInclude })\n } else {\n include[modelIndex].fkField = addInclude.fkField\n }\n }\n }\n\n return include\n}\n\nfunction prepareSearchFields(object: AppObject): string[] {\n const searchFields: string[] = []\n\n for (const field in object.model.rawAttributes) {\n if (object.model.rawAttributes[field]._fullSearch) {\n searchFields.push(field)\n }\n }\n\n for (const field in object.model.associations) {\n if (object.model.associations[field].options._fullSearch) {\n const target = object.model.associations[field].target.rawAttributes\n if (target.name) {\n searchFields.push(`$${field}.name$`)\n } else if (target.numberStr) {\n searchFields.push(`$${field}.numberStr$`)\n }\n }\n }\n\n return searchFields\n}\n\nfunction prepareFilters(filters: Record<string, any>[], filter: Record<string, any>, includeFilter: Record<string, any>) {\n for (const filterField in filters) {\n const filterValue = filters[filterField]\n\n if (typeof filterValue === 'object') {\n const valueDef = {}\n\n for (const valueOp in filterValue) {\n if (valueOp === 'inList') {\n valueDef[Op.in] = filterValue[valueOp]\n } else if (valueOp === 'notInList') {\n valueDef[Op.notIn] = filterValue[valueOp]\n } else {\n valueDef[Op[valueOp]] = filterValue[valueOp]\n }\n }\n\n if (filterField.includes('.')) {\n const filterAttrib = filterField.split('.')\n if (includeFilter[filterAttrib[0]]) {\n includeFilter[filterAttrib[0]][filterAttrib[1]] = valueDef\n } else {\n includeFilter[filterAttrib[0]] = {\n [filterAttrib[1]]: valueDef,\n }\n }\n } else {\n filter[filterField] = valueDef\n }\n } else {\n if (filterField.includes('.')) {\n const filterAttrib = filterField.split('.')\n if (includeFilter[filterAttrib[0]]) {\n includeFilter[filterAttrib[0]][filterAttrib[1]] = filterValue\n } else {\n includeFilter[filterAttrib[0]] = {\n [filterAttrib[1]]: filterValue,\n }\n }\n } else {\n filter[filterField] = filterValue\n }\n }\n }\n}\n\nasync function initObjectModule(object: AppObject, existObject: Record<string, any>, userId: string, clientVersion: string) {\n if (object.name === 'appObjects') {\n // Init server module for appObjects\n delete existObject.serverModule\n const modulePath = `src/modules/${existObject.type}s/${existObject.name}/server.module.js`\n\n if (fs.existsSync(modulePath)) {\n existObject.serverModule = cryptoJs.AES.encrypt(fs.readFileSync(modulePath, { encoding: 'utf8', flag: 'r' }), userId).toString()\n } else {\n existObject.serverModule = null\n }\n\n if (clientVersion === '3') {\n if (existObject.moduleV3) {\n existObject.moduleV3 = cryptoJs.AES.encrypt(existObject.moduleV3, userId).toString()\n }\n } else {\n if (existObject.module) {\n existObject.module = cryptoJs.AES.encrypt(existObject.module, userId).toString()\n }\n }\n\n // Init info for appObjects\n delete existObject.info\n const infoPath = `src/modules/${existObject.type}s/${existObject.name}/object.info.md`\n if (fs.existsSync(infoPath)) {\n existObject.info = fs.readFileSync(infoPath, { encoding: 'utf8', flag: 'r' })\n } else {\n existObject.info = null\n }\n } else if (object.name === 'viewSettings') {\n const appObject: Record<string, any> | null = await sequelize.models.AppObject.findByPk(existObject.appObjectId)\n\n existObject.serverModule = null\n existObject.info = null\n\n if (clientVersion === '3') {\n if (existObject.moduleV3) {\n existObject.moduleV3 = cryptoJs.AES.encrypt(existObject.moduleV3, userId).toString()\n }\n } else {\n if (existObject.module) {\n existObject.module = cryptoJs.AES.encrypt(existObject.module, userId).toString()\n }\n }\n\n if (appObject) {\n // Init server module for viewSettings\n const modulePath = `src/modules/${appObject.type}s/${appObject.name}/views/${existObject.name}/server.module.js`\n if (fs.existsSync(modulePath)) {\n existObject.serverModule = cryptoJs.AES.encrypt(fs.readFileSync(modulePath, { encoding: 'utf8', flag: 'r' }), userId).toString()\n }\n\n // Init info for viewSettings\n const infoPath = `src/modules/${appObject.type}s/${appObject.name}/views/${existObject.name}/view.info.md`\n if (fs.existsSync(infoPath)) {\n existObject.info = fs.readFileSync(infoPath, { encoding: 'utf8', flag: 'r' })\n }\n }\n } else if (object.name === 'reportSettings') {\n // Init server module for reportSettings\n const modulePath = `src/modules/reports/${existObject.name}/server.module.js`\n if (fs.existsSync(modulePath)) {\n existObject.serverModule = cryptoJs.AES.encrypt(fs.readFileSync(modulePath, { encoding: 'utf8', flag: 'r' }), userId).toString()\n } else {\n existObject.serverModule = null\n }\n\n // Init info for reportSettings\n const infoPath = `src/modules/reports/${existObject.name}/report.info.md`\n if (fs.existsSync(infoPath)) {\n existObject.info = fs.readFileSync(infoPath, { encoding: 'utf8', flag: 'r' })\n } else {\n existObject.info = null\n }\n } else if (object.name === 'dataProcessors') {\n const modulePath = `src/modules/dataProcessors/${existObject.name}/server.module.js`\n if (fs.existsSync(modulePath)) {\n existObject.serverModule = cryptoJs.AES.encrypt(fs.readFileSync(modulePath, { encoding: 'utf8', flag: 'r' }), userId).toString()\n } else {\n existObject.serverModule = null\n }\n } else if (object.name === 'scheduledJobs') {\n // Init server module for scheduledJobs\n const modulePath = `src/modules/scheduledJobs/${existObject.name}/server.module.js`\n if (fs.existsSync(modulePath)) {\n existObject.serverModule = cryptoJs.AES.encrypt(fs.readFileSync(modulePath, { encoding: 'utf8', flag: 'r' }), userId).toString()\n } else {\n existObject.serverModule = null\n }\n\n // Init info for scheduledJobs\n const infoPath = `src/modules/scheduledJobs/${existObject.name}/job.info.md`\n if (fs.existsSync(infoPath)) {\n existObject.info = fs.readFileSync(infoPath, { encoding: 'utf8', flag: 'r' })\n } else {\n existObject.info = null\n }\n } else if (object.name === 'restApi') {\n // Init server module for restApi\n const modulePath = `src/modules/restApi/${existObject.name}/server.module.js`\n if (fs.existsSync(modulePath)) {\n existObject.serverModule = cryptoJs.AES.encrypt(fs.readFileSync(modulePath, { encoding: 'utf8', flag: 'r' }), userId).toString()\n } else {\n existObject.serverModule = null\n }\n\n // Init info for restApi\n const infoPath = `src/modules/restApi/${existObject.name}/api.info.md`\n if (fs.existsSync(infoPath)) {\n existObject.info = fs.readFileSync(infoPath, { encoding: 'utf8', flag: 'r' })\n } else {\n existObject.info = null\n }\n } else if (object.name === 'components') {\n // Init server module for workers\n const modulePath = `src/modules/components/${existObject.name}/server.module.js`\n if (fs.existsSync(modulePath)) {\n existObject.serverModule = cryptoJs.AES.encrypt(fs.readFileSync(modulePath, { encoding: 'utf8', flag: 'r' }), userId).toString()\n } else {\n existObject.serverModule = null\n }\n\n if (clientVersion === '3') {\n if (existObject.moduleV3) {\n existObject.moduleV3 = cryptoJs.AES.encrypt(existObject.moduleV3, userId).toString()\n }\n } else {\n existObject.module = existObject.module\n }\n } else if (object.name === 'workers') {\n // Init server module for workers\n const modulePath = `src/modules/workers/${existObject.name}/server.module.js`\n if (fs.existsSync(modulePath)) {\n existObject.serverModule = cryptoJs.AES.encrypt(fs.readFileSync(modulePath, { encoding: 'utf8', flag: 'r' }), userId).toString()\n } else {\n existObject.serverModule = null\n }\n\n if (clientVersion === '3') {\n if (existObject.moduleV3) {\n existObject.moduleV3 = cryptoJs.AES.encrypt(existObject.moduleV3, userId).toString()\n }\n } else {\n existObject.module = null\n }\n\n // Init info for workers\n const infoPath = `src/modules/workers/${existObject.name}/worker.info.md`\n if (fs.existsSync(infoPath)) {\n existObject.info = fs.readFileSync(infoPath, { encoding: 'utf8', flag: 'r' })\n } else {\n existObject.info = null\n }\n } else if (object.name === 'commonModules') {\n const modulePath = `src/modules/commonModules/${existObject.name}.js`\n if (fs.existsSync(modulePath)) {\n existObject.module = cryptoJs.AES.encrypt(fs.readFileSync(modulePath, { encoding: 'utf8', flag: 'r' }), userId).toString()\n } else {\n existObject.module = null\n }\n }\n}\n\nfunction prepareSorting(object: AppObject, sort: Record<string, any>, order: Array<string[]>) {\n if (Array.isArray(sort)) {\n for (const sortItem of sort) {\n if (sortItem.sortBy) {\n order.push(initSortItem(object, sortItem))\n }\n }\n } else {\n if (sort?.sortBy) {\n order.push(initSortItem(object, sort))\n }\n }\n\n //default sorting\n if (!object.withoutTimestamps) {\n order.push(['createdAt', 'DESC'])\n }\n order.push(['id', 'DESC'])\n}\n\nfunction initSortItem(object: AppObject, sortItem: Record<string, any>) {\n let sortItemArr = sortItem.sortBy.split('.')\n if (sortItemArr.length > 1) {\n const attrModel = object.model.associations[sortItemArr[0]]?.target\n\n if (attrModel?.rawAttributes?.numberStr) {\n sortItemArr[1] = 'numberStr'\n } else {\n sortItemArr[1] = 'name'\n }\n }\n if (sortItem.sortDesc === true) {\n sortItemArr.push('DESC')\n }\n\n return sortItemArr\n}\n\nfunction setAdditionalConfigParams(object: AppObject, objectData: Record<string, any>, configParams: Record<string, any>) {\n if (\n object.name === 'appObjects' ||\n object.name === 'viewSettings' ||\n object.name === 'reportSettings' ||\n object.name === 'dataProcessors' ||\n object.name === 'scheduledJobs' ||\n object.name === 'restApi' ||\n object.name === 'components' ||\n object.name === 'workers'\n ) {\n configParams.serverModule = objectData.serverModule\n }\n\n if (object.name === 'commonModules') {\n configParams.module = objectData.module\n }\n\n if (\n object.name === 'appObjects' ||\n object.name === 'viewSettings' ||\n object.name === 'reportSettings' ||\n object.name === 'scheduledJobs' ||\n object.name === 'restApi' ||\n object.name === 'workers'\n ) {\n configParams.info = objectData.info\n }\n}\n","import logger from '@/core/services/logger.service'\nimport { StatusCodes } from 'http-status-codes'\nimport fs from 'fs'\nimport CryptoJS from 'crypto-js'\nimport seederService from '@/core/services/seeder.service'\nimport { NextFunction, Request, Response } from 'express'\nimport { AppObject } from '@/src/types'\n\nexport default {\n async executeProcessing(req: Request, res: Response, next: NextFunction, object: AppObject) {\n const objectName = req.body.name\n\n if (!objectName) {\n const message = 'Object name is not correct!'\n logger.error(`Error in ${object.name} executeProcessing controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n let module: any\n const modulePath = `dataProcessors/${objectName}/server.module.js`\n\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n if (fs.existsSync(fullPath)) {\n const path = __non_webpack_require__.resolve(fullPath)\n if (__non_webpack_require__.cache[path]) {\n delete __non_webpack_require__.cache[path]\n }\n module = __non_webpack_require__(fullPath)\n }\n\n if (!module) {\n const message = 'Data processor module is empty!'\n logger.error(`Error in ${object.name} executeProcessing controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n if (!module?.executeProcessing || typeof module?.executeProcessing !== 'function') {\n const message = 'Data processor run function is not exist!'\n logger.error(`Error in ${object.name} executeProcessing controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n try {\n const result = await module.executeProcessing(req, res, next, object)\n\n return { status: StatusCodes.OK, responseData: { executionComplited: true, result } }\n } catch (error) {\n logger.error(`Error in ${object.name} executeProcessing controller`, { meta: error })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error?.original?.message || error?.message } }\n }\n },\n\n async exportProcessor(req: Request, res: Response, next: NextFunction, object: AppObject) {\n const objId = req.params.id\n\n if (!objId || typeof objId !== 'string' || objId.length !== 36) {\n const message = 'Object id is not correct!'\n logger.error(`Error in ${object.name} findItem controller`, { meta: message })\n return res.status(StatusCodes.BAD_REQUEST).send({ message })\n }\n\n return await object.model\n .findByPk(objId)\n .then((existObject: Record<string, any>) => {\n if (existObject) {\n const exportedObject = JSON.parse(JSON.stringify(existObject))\n\n let module: any\n const modulePath = `dataProcessors/${exportedObject.name}/server.module.js`\n\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n if (fs.existsSync(fullPath)) {\n delete __non_webpack_require__.cache[__non_webpack_require__.resolve(fullPath)]\n module = __non_webpack_require__(fullPath)\n }\n\n if (module) {\n exportedObject.serverModule = fs.readFileSync(`src/modules/${modulePath}`, { encoding: 'utf8', flag: 'r' })\n } else {\n exportedObject.serverModule = ''\n }\n\n const encrypted = CryptoJS.AES.encrypt(JSON.stringify(exportedObject), process.env.CRYPTO_SECRET_KEY || '').toString()\n const tempFilePath = `/tmp/${exportedObject.id}.sdp`\n fs.writeFileSync(tempFilePath, encrypted)\n\n res.status(StatusCodes.OK).download(tempFilePath, `${exportedObject.name}.sdp`, (err) => {\n if (err) {\n logger.error(`Error in ${object.name} exportProcessor controller`, { meta: err })\n return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ message: err.message })\n }\n\n fs.unlinkSync(tempFilePath)\n })\n } else {\n const message = `${object.name} with id ${objId} not found`\n logger.error(`Error in ${object.name} exportProcessor controller`, { meta: message })\n return res.status(StatusCodes.NOT_FOUND).send({ message })\n }\n })\n .catch((error: Error) => {\n logger.error(`Error in ${object.name} exportProcessor controller`, { meta: error })\n return res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error.message })\n })\n },\n\n async importProcessor(req: Request, res: Response, next: NextFunction, object: AppObject) {\n let { data } = req.body\n data = JSON.parse(data || '{}')\n\n if (!req.files || !data) {\n const message = 'No file uploaded!'\n logger.error(`Error in ${object.name} importProcessor controller`, { meta: message })\n return res.status(StatusCodes.BAD_REQUEST).send({ message })\n }\n\n try {\n for (let file of req.files as Record<string, any>[]) {\n const tempFilePath = file.path\n const encryptedData = fs.readFileSync(tempFilePath, { encoding: 'utf8', flag: 'r' })\n const bytes = CryptoJS.AES.decrypt(encryptedData, process.env.CRYPTO_SECRET_KEY || '')\n const decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8))\n\n fs.unlinkSync(tempFilePath)\n\n let existObject = await object.model.findByPk(data.id)\n\n const configParams: Record<string, any> = { objectId: data.id, serverModule: decryptedData.serverModule }\n let newObject: Record<string, any>\n if (!existObject) {\n newObject = await object.model.create({ id: data.id, name: decryptedData.name, title: decryptedData.title, lang: decryptedData.lang })\n configParams.event = 'create'\n configParams.newValue = newObject\n } else {\n newObject = await existObject.update({ name: decryptedData.name, title: decryptedData.title, lang: decryptedData.lang }, { where: { id: data.id } })\n configParams.event = 'update'\n configParams.oldValue = existObject\n configParams.newValue = newObject\n }\n\n await seederService.updateInitialData(object.model, object.path, configParams)\n\n return res.status(StatusCodes.OK).send({ message: 'OK' })\n }\n } catch (error) {\n logger.error(`Error in ${object.name} importProcessor controller`, { meta: error })\n return res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error.message })\n }\n },\n}\n","import sequelize from '@/database/dbConnection'\nimport moment from 'moment'\nimport logger from '@/core/services/logger.service'\nimport { ModelStatic, Model, Transaction } from 'sequelize'\nimport { AppObject } from '@/src/types'\n\nexport default {\n async setNumber(object: AppObject, objectData: Record<string, any>, t: Transaction) {\n if (objectData.noSetPrefix && objectData.noSetPrefix === true) {\n return\n }\n\n if (!objectData.prefix) {\n objectData.prefix = 'AA'\n } else {\n if (objectData.prefix.id) {\n objectData.prefix = await sequelize.models.DocumentPrefix.findByPk(objectData.prefix.id)\n }\n }\n\n initDocumentNumberPeriod(objectData)\n\n const prefix = objectData.prefix?.id ? objectData.prefix.name : objectData.prefix\n const period = objectData.numberPeriod ? objectData.numberPeriod : null\n\n let nextNumber = 1\n\n try {\n let numerator: Record<string, any> | null = await sequelize.models.Numerator.findOne({\n where: {\n tableName: object.path,\n prefix,\n period,\n },\n lock: Transaction.LOCK.UPDATE,\n transaction: t,\n })\n\n if (!numerator) {\n let filter: Record<string, any> = {}\n\n filter.prefixId = null\n\n if (objectData.prefix.id) {\n filter.prefixId = objectData.prefix.id\n } else {\n filter.prefixId = null\n }\n\n if ('numberPeriod' in objectData) {\n filter.numberPeriod = period\n }\n\n const maxNumberRow = await object.model.findOne({\n where: filter,\n order: [['number', 'DESC']],\n transaction: t,\n })\n\n if (maxNumberRow) {\n nextNumber = parseFloat(maxNumberRow.number) + 1\n }\n\n numerator = await sequelize.models.Numerator.create(\n {\n tableName: object.path,\n prefix,\n period,\n number: nextNumber,\n },\n { transaction: t }\n )\n } else {\n numerator.number++\n await numerator.save({ transaction: t })\n }\n\n nextNumber = numerator.number\n } catch (error) {\n logger.error(`Error in ${object.name} createItem controller`, { meta: error })\n }\n\n objectData.number = nextNumber\n\n initDocumentNumberStr(objectData)\n },\n\n async nextNumber(object: ModelStatic<Model<any, any>>, prefix: string, numberPeriod = undefined, t: Transaction) {\n let nextNumber = 1\n\n let transaction: Transaction | undefined\n let externalTransaction = false\n\n if (t) {\n transaction = t\n externalTransaction = true\n } else {\n transaction = await object.sequelize?.transaction()\n }\n\n try {\n const tableName = object.getTableName()\n\n let numerator: Record<string, any> | null = await sequelize.models.Numerator.findOne({ where: { tableName, prefix }, lock: Transaction.LOCK.UPDATE, transaction })\n\n if (!numerator) {\n const maxNumberRow: Record<string, any> | null = await object.findOne({ where: { prefix }, order: [['number', 'DESC']], transaction })\n\n if (maxNumberRow) {\n nextNumber = maxNumberRow.number + 1\n }\n\n numerator = await sequelize.models.Numerator.create({ tableName, prefix, number: nextNumber }, { transaction })\n } else {\n numerator.number++\n await numerator.save({ transaction })\n }\n\n if (externalTransaction !== true && transaction) {\n await transaction.commit()\n }\n\n nextNumber = numerator.number\n } catch (error) {\n if (externalTransaction !== true && transaction) {\n await transaction.rollback()\n }\n logger.error(`Error in ${object.options.name?.plural} createItem controller`, { meta: error })\n }\n\n return nextNumber\n },\n}\n\nfunction initDocumentNumberPeriod(objectData: Record<string, any>) {\n if ('numberPeriod' in objectData) {\n if (objectData.prefix.id) {\n if (objectData.prefix.periodicity === 'year') {\n objectData.numberPeriod = moment(objectData.date).startOf('year').toDate()\n } else if (objectData.prefix.periodicity === 'quarter') {\n objectData.numberPeriod = moment(objectData.date).startOf('quarter').toDate()\n } else if (objectData.prefix.periodicity === 'month') {\n objectData.numberPeriod = moment(objectData.date).startOf('month').toDate()\n } else if (objectData.prefix.periodicity === 'day') {\n objectData.numberPeriod = objectData.date.startOf('day').toDate()\n } else {\n objectData.numberPeriod = null\n }\n }\n }\n}\n\nfunction initDocumentNumberStr(objectData: Record<string, any>) {\n if (objectData.prefix?.template && objectData.prefix?.template != '') {\n const trimedTemplate = objectData.prefix.template.trim()\n const modifiedString = trimedTemplate.replace(/\\[([^\\]]+)\\]/g, (match, key) => {\n if (key === 'Number') {\n return objectData.number.toString().padStart(6, '0')\n } else if (key === 'MonthDay') {\n return moment(objectData.date).format('DD')\n } else if (key === 'MonthNumber') {\n return moment(objectData.date).format('MM')\n } else if (key === 'QuarterNumber') {\n return moment(objectData.date).quarter().toString().padStart(2, '0')\n } else if (key === 'YearTwoDigits') {\n return moment(objectData.date).format('YY')\n } else if (key === 'YearFourDigits') {\n return moment(objectData.date).format('YYYY')\n } else if (key === 'Prefix') {\n return objectData.prefix.name\n } else if (key === 'Organization') {\n return objectData.organization?.code ? objectData.organization.code : match\n } else if (key === 'CounterpartyCode') {\n return objectData.counterparty?.code ? objectData.counterparty.code : match\n } else if (key === 'StoreCode') {\n return objectData.warehouse?.code ? objectData.warehouse.code : match\n } else {\n return match\n }\n })\n objectData.numberStr = modifiedString\n } else {\n objectData.numberStr = (objectData.prefix?.name ? objectData.prefix?.name : objectData.prefix) + '-' + objectData.number.toString().padStart(6, '0')\n }\n}\n","import EventEmitter from 'events'\n\nimport { Request, Application } from 'express'\n\nexport default {\n sendMessage(req: Request, message: string) {\n req.app.get('eventEmitter').emit('processing', { message })\n },\n\n sendData(req: Request, data: Record<string, any>) {\n req.app.get('eventEmitter').emit('processing', data)\n },\n\n init(app: Application) {\n const eventEmitter = new EventEmitter()\n app.set('eventEmitter', eventEmitter)\n\n app.get('/client_events', (req, res) => {\n res.setHeader('Content-Type', 'text/event-stream')\n res.setHeader('Cache-Control', 'no-cache')\n res.setHeader('Connection', 'keep-alive')\n res.setHeader('Access-Control-Allow-Credentials', 'true')\n\n res.flushHeaders()\n\n const sendEvent = (data: Record<string, any>) => {\n res.write(`data: ${JSON.stringify(data)}\\n\\n`)\n res.flush()\n }\n\n eventEmitter.on('processing', (data) => {\n sendEvent(data)\n })\n\n req.on('close', () => {\n res.end()\n })\n })\n },\n}\n","import { QueryTypes } from 'sequelize'\nimport sequelize from '@/database/dbConnection'\nimport fs from 'fs'\n\ninterface EventSubscription {\n name: string\n execSide: string\n objectType: string\n event: string\n serviceFunctionPath: string\n serviceFunction?: Function\n objects: string[]\n}\n\nexport default {\n async initSubscriptions(side: string) {\n const queryText = `\n SELECT\n event_subscriptions.id AS \"id\",\n event_subscriptions.name AS \"name\",\n event_subscriptions.\"execSide\" AS \"execSide\",\n event_subscriptions.\"objectType\" AS \"objectType\",\n event_subscriptions.event AS \"event\",\n event_subscriptions.\"serviceFunction\" AS \"serviceFunctionPath\",\n subscription_objects.\"objectId\" AS \"objectId\"\n FROM \n event_subscriptions\n LEFT JOIN \n event_subscriptions_event_objects as \"subscription_objects\"\n ON \n subscription_objects.\"parentId\" = event_subscriptions.id \n WHERE\n event_subscriptions.\"markedToDelete\" = false\n AND event_subscriptions.\"execSide\" = '${side}'`\n\n try {\n const eventSubscriptionsRaw: any[] = await sequelize.query(queryText, { type: QueryTypes.SELECT })\n\n const eventSubscriptions: EventSubscription[] = eventSubscriptionsRaw.reduce<any[]>((acc, row) => {\n let findIndex = acc.findIndex((el) => el.name === row.name)\n if (findIndex === -1) {\n const arrayLength = acc.push({\n name: row.name,\n execSide: row.execSide,\n objectType: row.objectType,\n event: row.event,\n serviceFunctionPath: row.serviceFunctionPath,\n objects: [],\n })\n findIndex = arrayLength - 1\n }\n\n if (findIndex > -1 && row.objectId) {\n acc[findIndex].objects.push(row.objectId)\n }\n\n return acc\n }, [])\n\n if (side === 'server') {\n for (const eventSubscription of eventSubscriptions) {\n if (eventSubscription.serviceFunctionPath) {\n const functionParts = eventSubscription.serviceFunctionPath.split('.')\n if (functionParts.length !== 2) {\n eventSubscription.serviceFunction = undefined\n continue\n }\n\n const commonModuleName = functionParts[0]\n const functionName = functionParts[1]\n\n const fullPath = `${process.cwd()}/src/modules/commonModules/${commonModuleName}.js`\n let commonModule: any\n if (fs.existsSync(fullPath)) {\n commonModule = __non_webpack_require__(fullPath)\n\n if (commonModule?.[functionName]) {\n eventSubscription.serviceFunction = commonModule[functionName]\n }\n }\n }\n }\n }\n\n return eventSubscriptions\n } catch (error) {\n console.error(error)\n return []\n }\n },\n\n getSubscription(subscriptions: EventSubscription[], event: string, objectType: string, objectId: string): EventSubscription | undefined {\n return subscriptions.find((el) => {\n if (el.event === event && el.objectType === objectType) {\n return el.objects.length === 0 || el.objects.includes(objectId)\n }\n\n return false\n })\n },\n}\n","import sequelize from '@/database/dbConnection'\nimport { QueryTypes } from 'sequelize'\n\nimport { LicenseData } from '@/src/types'\n\nexport default {\n /**\n * Get license information\n * @param sessionID - Session ID\n * @returns License data\n */\n async getLicense(sessionID: string): Promise<LicenseData> {\n const licNumber = process.env.LIC_NUMBER\n const licCount = process.env.LIC_COUNT\n\n const licenseData: LicenseData = { active: false, number: 'none' }\n\n if (!licNumber || !licCount) {\n return licenseData\n }\n\n const queryText =\n 'SELECT \\\n COUNT(id) as auth_users \\\n FROM \\\n session \\\n WHERE \\\n sid != :sessionID \\\n AND \"licNumber\" IS NOT NULL'\n\n const queryResult: Record<string, any>[] = await sequelize.query(queryText, {\n type: QueryTypes.SELECT,\n replacements: { sessionID },\n })\n\n let usersCount = 0\n\n if (queryResult.length > 0) {\n usersCount = queryResult[0].auth_users\n }\n\n if (usersCount >= Number(licCount)) {\n licenseData.number = null\n } else {\n licenseData.active = true\n licenseData.number = licNumber\n }\n\n return licenseData\n },\n}\n","import winston, { Logger, format, transports } from 'winston'\n\n// Winston needs to be told about color coding, but it only takes effect on loggers where the format parameter has a colorize called\nwinston.addColors({\n error: 'bold red',\n warn: 'yellow',\n info: 'green',\n verbose: 'dim white',\n debug: 'gray',\n silly: 'magenta',\n})\n\n// The filepath is from the root of the project since that's where this file is executed within app.js\nconst logger: Logger = winston.createLogger({\n level: 'info',\n format: format.combine(\n format.colorize(),\n format.timestamp({\n format: 'YYYY-MM-DD HH:mm:ss',\n }),\n format.prettyPrint(),\n format.printf((info: Record<string, any>) => {\n return `${info.timestamp}${info.context ? ` [${info.context}]` : ''}${info.level ? ` ${info.level}` : ''}: ${info.message ? info.message : ''} ${\n info.meta ? (info.meta?.stack ? `${info.meta.original?.message ? info.meta.original?.message : ''} ${info.meta.stack}` : info.meta) : ''\n } ${info.stack ? `\\n${info.stack}` : ''}`\n })\n ),\n transports: [\n new transports.File({\n level: 'error',\n filename: 'logs/common/error.log',\n format: winston.format.uncolorize(),\n }),\n new transports.File({\n filename: 'logs/common/combined.log',\n format: winston.format.uncolorize(),\n }),\n\n new transports.Console(),\n ],\n\n exceptionHandlers: [new transports.File({ filename: 'logs/common/exceptions.log' })],\n})\n\nexport default logger\n","import { StatusCodes } from 'http-status-codes'\nimport path from 'path'\nimport moment from 'moment'\nimport fs from 'fs'\nimport { promises as fsp } from 'fs'\nimport seederService from '@/core/services/seeder.service'\nimport logger from '@/core/services/logger.service'\nimport commonService from '@/core/services/common.service'\nimport { NextFunction, Request, Response } from 'express'\nimport { AppObject, AppObjectField, DBAppObject } from '@/src/types'\nimport defineObjects from '@/core/objects/index'\nimport multiTypeService from '@/core/services/multiType.service'\n\ninterface Field {\n id: string\n dbName: string\n type: string\n isTablePart?: boolean\n virtual?: boolean\n index?: boolean\n primaryKey?: boolean\n unique?: boolean\n notNull?: boolean\n defaultValue?: string | number | null\n autoIncrement?: boolean\n typeOptions?: {\n length?: number\n precision?: number\n scale?: number\n }\n multiType?: boolean\n multiTypeVariant?: string\n ref?: string\n fields: Field[]\n}\n\ninterface CreateTableAction {\n action: 'createTable'\n newTable: Field\n}\n\ninterface ChangeTableAction {\n action: 'changeTable'\n oldTable: Field\n newTable: Field\n}\n\ninterface DropTableAction {\n action: 'dropTable'\n oldTable: Field\n}\n\ntype TablePartAction = CreateTableAction | ChangeTableAction | DropTableAction\n\ninterface TablePart {\n id: string\n dbName: string\n fields: Field[]\n}\n\ninterface MigrationAction {\n action: 'addField' | 'dropField' | 'renameField' | 'changeField' | 'addIndex' | 'removeIndex'\n fieldName?: string\n oldName?: string\n newName?: string\n field?: Field\n oldField?: Field\n newField?: Field\n}\n\nconst migrationFolder = 'src/database/migrations'\nlet enums: Record<string, string[]> = {}\nlet addConstraintsObjectsArray: any[] = []\nlet delConstraintsObjectsArray: any[] = []\n\nexport default {\n async executeMigrationsAtServer() {\n const objects = await defineObjects()\n\n const appObjects: DBAppObject[] = await objects.appObjects.model.findAll({ where: { modified: true } })\n\n if (!appObjects || appObjects.length === 0) {\n return { status: StatusCodes.OK, responseData: { message: 'No migrations needed' } }\n }\n\n const baseDate = moment()\n\n for (const appObject of appObjects) {\n await this.executeObjectMigration(appObject, objects.appObjects, baseDate)\n }\n\n baseDate.add(1, 'seconds')\n\n for (const appObject of appObjects) {\n const acResult = await this.addFieldsForeignKeys(baseDate)\n if (acResult) {\n await syncAppObjectStructure(appObject, objects.appObjects)\n }\n }\n\n return { status: StatusCodes.OK, responseData: { message: 'Migrations executed successfully' } }\n },\n\n async executeMigrationsFromFiles() {\n const objects = await defineObjects()\n\n const modulesPath = `${process.cwd()}/src/modules`\n const objectStructFiles = findObjectStructFiles(modulesPath)\n\n const baseDate = moment()\n\n for (const filePath of objectStructFiles) {\n baseDate.add(1, 'seconds')\n const fileContent = await fsp.readFile(filePath, 'utf-8')\n const appObject = JSON.parse(fileContent)\n if (appObject.dbTableName && !appObject.modified) continue\n console.log('Migration creation for object:', appObject.name)\n await this.executeObjectMigration(appObject, objects.appObjects, baseDate, filePath)\n }\n\n baseDate.add(1, 'seconds')\n\n for (const filePath of objectStructFiles) {\n const fileContent = await fsp.readFile(filePath, 'utf-8')\n const appObject = JSON.parse(fileContent)\n if (appObject.dbTableName && !appObject.modified) continue\n const acResult = await this.addFieldsForeignKeys(baseDate)\n if (acResult) {\n await syncAppObjectStructureFiles(appObject, filePath)\n }\n }\n\n return { status: StatusCodes.OK, responseData: { message: 'Migrations were created successfully' } }\n },\n\n async executeMigrations(req: Request, res: Response, next: NextFunction, object: AppObject) {\n const appObjects: DBAppObject[] = await object.model.findAll({ where: { modified: true } })\n\n if (!appObjects || appObjects.length === 0) {\n return { status: StatusCodes.OK, responseData: { message: 'No migrations needed' } }\n }\n\n const baseDate = moment()\n\n for (const appObject of appObjects) {\n baseDate.add(1, 'seconds')\n await this.executeObjectMigration(appObject, object, baseDate)\n }\n\n baseDate.add(1, 'seconds')\n\n for (const appObject of appObjects) {\n const acResult = await this.addFieldsForeignKeys(baseDate)\n if (acResult) {\n await syncAppObjectStructure(appObject, object)\n }\n }\n\n return { status: StatusCodes.OK, responseData: { message: 'Migrations executed successfully' } }\n },\n\n async existMigrations(req: Request, res: Response, next: NextFunction, object: AppObject) {\n const appObjects: DBAppObject[] = await object.model.findAll({ where: { modified: true } })\n\n if (!appObjects || appObjects.length === 0) {\n return { status: StatusCodes.OK, responseData: false }\n } else {\n return { status: StatusCodes.OK, responseData: true }\n }\n },\n\n async executeMigration(req: Request, res: Response, next: NextFunction, object: AppObject) {\n const objectId = req.body.objectId\n\n if (!objectId || typeof objectId !== 'string' || objectId.length !== 36) {\n const message = 'Object id is not correct!'\n logger.error(`Error in ${object.name} findItem controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n const baseDate = moment()\n\n const appObject: any | null = await object.model.findByPk(objectId)\n const result = await this.executeObjectMigration(appObject, object, baseDate)\n\n return result\n ? { status: StatusCodes.OK, responseData: { message: 'OK' } }\n : { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: 'Error during migration file creation!' } }\n },\n\n async executeObjectMigration(appObject: any, object: AppObject, baseDate: moment.Moment, filePath: string = '') {\n if (!appObject) {\n throw new Error(`Object not found!`)\n }\n\n if (!appObject.fields) {\n throw new Error(`Object ${appObject.name} has incorrect fields!`)\n }\n\n if (filePath) {\n const modulesPath = path.join(process.cwd(), 'src', 'modules', 'enums')\n const indexFile = path.join(modulesPath, 'index.json')\n\n if (fs.existsSync(indexFile)) {\n const raw = fs.readFileSync(indexFile, 'utf8')\n enums = JSON.parse(raw)\n } else {\n throw new Error(`File index.json not found in ${modulesPath}`)\n }\n } else {\n enums = await commonService.initEnums()\n }\n\n const tableResult = !appObject.dbTableName\n ? await this.createTable(appObject, baseDate)\n : await this.updateTable(\n {\n id: appObject.id,\n dbName: appObject.dbTableName,\n name: appObject.path,\n dbFields: appObject.dbFields,\n fields: appObject.fields,\n },\n baseDate\n )\n\n return tableResult\n },\n\n async addFieldsForeignKeys(baseDate = moment()) {\n for (const appObject of addConstraintsObjectsArray) {\n console.log('Foreign keys creation for object:', appObject.path)\n\n const tableParts: TablePart[] = []\n await prepareFieldsStruct(appObject.fields, tableParts)\n\n const migrationHeader = getMigrationHeader()\n const migrationBottom = getMigrationBottom()\n let constraints = ''\n\n for (const field of appObject.fields) {\n if (field.type === 'object' && field.ref && !field.multiType) {\n const fkName = truncateFkName(`${appObject.path}_${field.dbName}_fkey`)\n constraints += `\n await queryInterface.addConstraint('${appObject.path}', {\n fields: ['${field.dbName}'],\n type: 'foreign key',\n name: '${fkName}',\n references: {\n table: '${this.toSnakeCase(field.ref)}',\n field: 'id',\n },\n onUpdate: 'CASCADE',\n onDelete: 'SET NULL',\n });\\n`\n }\n }\n\n if (constraints) {\n baseDate.add(1, 'seconds')\n const filename = `${baseDate.format('YYYYMMDDHHmmss')}-add-foreign-keys-${appObject.path}.js`\n const fullPath = path.join(migrationFolder, filename)\n await fsp.writeFile(fullPath, `${migrationHeader}${constraints}${migrationBottom}`)\n }\n\n for (const tablePart of tableParts) {\n const objectFields = tablePart.fields.filter((field) => field.type === 'object' && field.ref && !field.multiType)\n if (objectFields.length === 0) continue\n\n let partConstraints = ''\n for (const field of objectFields) {\n const fkName = truncateFkName(`${tablePart.dbName}_${field.dbName}_fkey`)\n partConstraints += `\n await queryInterface.addConstraint('${tablePart.dbName}', {\n fields: ['${field.dbName}'],\n type: 'foreign key',\n name: '${fkName}',\n references: {\n table: '${this.toSnakeCase(field.ref)}',\n field: 'id',\n },\n onUpdate: 'CASCADE',\n onDelete: 'SET NULL',\n });\\n`\n }\n\n baseDate.add(1, 'seconds')\n const filenamePart = `${baseDate.format('YYYYMMDDHHmmss')}-add-foreign-keys-${tablePart.dbName}.js`\n await fsp.writeFile(path.join(migrationFolder, filenamePart), `${migrationHeader}${partConstraints}${migrationBottom}`)\n }\n }\n\n addConstraintsObjectsArray = []\n\n return true\n },\n\n toSnakeCase(str: string): string {\n return str\n .replace(/([a-z0-9])([A-Z])/g, '$1_$2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1_$2')\n .toLowerCase()\n },\n\n async delFieldsForeignKeys(baseDate = moment()) {\n for (const appObject of delConstraintsObjectsArray) {\n const tableParts: TablePart[] = []\n await prepareFieldsStruct(appObject.fields, tableParts)\n\n const migrationHeader = getMigrationHeader()\n const migrationBottom = getMigrationBottom()\n let constraints = ''\n\n for (const field of appObject.fields) {\n if (field.type === 'object' && field.ref && !field.multiType) {\n const fkName = truncateFkName(`${appObject.path}_${field.dbName}_fkey`)\n constraints += `\n await queryInterface.removeConstraint('${appObject.path}', '${fkName}');\\n`\n }\n }\n\n if (constraints) {\n baseDate.add(1, 'seconds')\n const filename = `${baseDate.format('YYYYMMDDHHmmss')}-remove-foreign-keys-${appObject.path}.js`\n const fullPath = path.join(migrationFolder, filename)\n await fsp.writeFile(fullPath, `${migrationHeader}${constraints}${migrationBottom}`)\n }\n\n for (const tablePart of tableParts) {\n const objectFields = tablePart.fields.filter((field) => field.type === 'object' && field.ref && !field.multiType)\n if (objectFields.length === 0) continue\n\n let partConstraints = ''\n for (const field of objectFields) {\n const fkName = truncateFkName(`${tablePart.dbName}_${field.dbName}_fkey`)\n partConstraints += `\n await queryInterface.removeConstraint('${tablePart.dbName}', '${fkName}');\\n`\n }\n\n baseDate.add(1, 'seconds')\n const filenamePart = `${baseDate.format('YYYYMMDDHHmmss')}-remove-foreign-keys-${tablePart.dbName}.js`\n await fsp.writeFile(path.join(migrationFolder, filenamePart), `${migrationHeader}${partConstraints}${migrationBottom}`)\n }\n }\n delConstraintsObjectsArray = []\n return true\n },\n\n prepareFieldsDifs(oldFields: Field[], newFields: Field[], tableParts: TablePartAction[]): MigrationAction[] {\n const migrations: MigrationAction[] = []\n\n if (!oldFields || !newFields) {\n return []\n }\n\n for (const newField of newFields) {\n const existField = oldFields.find((el) => el.id === newField.id)\n\n if (!existField) {\n if (newField.isTablePart === true) {\n tableParts.push({ action: 'createTable', newTable: { ...newField } })\n } else {\n migrations.push({ action: 'addField', field: { ...newField } })\n if (newField.index === true) {\n migrations.push({ action: 'addIndex', field: newField })\n }\n }\n } else {\n if (newField.isTablePart === true) {\n tableParts.push({ action: 'changeTable', oldTable: { ...existField }, newTable: { ...newField } })\n } else {\n if (existField.multiType === true && existField.multiTypeVariant === 'common' && newField.multiType === false) {\n migrations.push({ action: 'dropField', field: { ...existField } })\n migrations.push({ action: 'addField', field: { ...newField } })\n if (newField.index === true) {\n migrations.push({ action: 'addIndex', field: newField })\n }\n } else if (existField.multiType === false && newField.multiType === true && newField.multiTypeVariant === 'common') {\n if (existField.index === true) {\n migrations.push({ action: 'removeIndex', field: existField })\n }\n migrations.push({ action: 'dropField', field: { ...existField } })\n migrations.push({ action: 'addField', field: { ...newField } })\n } else {\n if (newField.dbName !== existField.dbName) {\n migrations.push({ action: 'renameField', newName: newField.dbName, oldName: existField.dbName, field: existField })\n }\n\n if (changedFieldProperties(existField, newField)) {\n migrations.push({ action: 'changeField', oldField: { ...existField }, newField: { ...newField } })\n }\n }\n\n if (existField.index !== newField.index) {\n if (newField.index === true) {\n migrations.push({ action: 'addIndex', field: newField })\n } else {\n migrations.push({ action: 'removeIndex', field: newField })\n }\n }\n }\n }\n }\n\n for (const oldField of oldFields) {\n const existField = newFields.find((el) => el.id === oldField.id)\n\n if (!existField) {\n if (oldField.isTablePart === true) {\n tableParts.push({ action: 'dropTable', oldTable: { ...oldField } })\n } else {\n if (oldField.index === true) {\n migrations.push({ action: 'removeIndex', field: oldField })\n }\n\n migrations.push({ action: 'dropField', field: { ...oldField } })\n }\n }\n }\n\n return migrations\n },\n\n async createTable(appObject: AppObject, migrationDate = moment()): Promise<boolean> {\n addConstraintsObjectsArray.push(appObject)\n let filename = `${migrationDate.format('YYYYMMDDHHmmss')}-create-table-${appObject.path}.js`\n let fullPath = path.join(migrationFolder, filename)\n\n const tableParts: TablePart[] = []\n let objectsFields = await prepareFieldsStruct(appObject.fields, tableParts)\n\n const migrationHeader = getMigrationHeader()\n const migrationBottom = getMigrationBottom()\n\n let migrationFileText = `${migrationHeader}\\n await queryInterface.createTable('${appObject.path}', {${objectsFields}\\n })`\n\n let indexedFields: AppObjectField[] | Field[] = appObject.fields.filter((el) => el.index === true)\n for (const indexedField of indexedFields) {\n const indexName = `${appObject.id.substring(24)}_${indexedField.id.substring(24)}`\n\n if (indexedField.multiType && indexedField.multiTypeVariant === 'common') {\n migrationFileText += addMultiTypeIndexes(appObject.path, indexedField, indexName)\n } else {\n migrationFileText += addIndex(appObject.path, indexedField.dbName, indexName)\n }\n }\n\n migrationFileText += `${migrationBottom}`\n await fsp.writeFile(fullPath, migrationFileText)\n\n for (const tablePart of tableParts) {\n migrationDate.add(1, 'seconds')\n filename = `${migrationDate.format('YYYYMMDDHHmmss')}-create-table-part-${tablePart.dbName}.js`\n fullPath = path.join(migrationFolder, filename)\n\n objectsFields = await prepareFieldsStruct(tablePart.fields, [])\n migrationFileText = `${migrationHeader}\\n await queryInterface.createTable('${tablePart.dbName}', {${objectsFields}\\n })`\n\n indexedFields = tablePart.fields.filter((el) => el.index === true)\n for (const indexedField of indexedFields) {\n const indexName = `${tablePart.id.substring(24)}_${indexedField.id.substring(24)}`\n\n if (indexedField.multiType && indexedField.multiTypeVariant === 'common') {\n migrationFileText += addMultiTypeIndexes(tablePart.dbName, indexedField, indexName)\n } else {\n migrationFileText += addIndex(tablePart.dbName, indexedField.dbName, indexName)\n }\n }\n\n migrationFileText += `${migrationBottom}`\n await fsp.writeFile(fullPath, migrationFileText)\n }\n\n return true\n },\n\n async updateTable(tableData: Record<string, any>, migrationDate = moment()) {\n let migrationContent = ''\n\n if (tableData.name !== tableData.dbName) {\n migrationContent += `\\n await queryInterface.renameTable('${tableData.dbName}', '${tableData.name}')`\n }\n\n const tableParts: TablePartAction[] = []\n const changedData = this.prepareFieldsDifs(tableData.dbFields, tableData.fields, tableParts)\n\n if (changedData.length > 0) {\n const addContraintFields: any = []\n const delContraintFields: any = []\n for (const changedField of changedData) {\n if (changedField.action === 'addField') {\n if (changedField.field.multiType && changedField.field.multiTypeVariant === 'common') {\n migrationContent += addMultiTypeColumnContent(tableData.name, changedField.field)\n } else {\n migrationContent += await addColumnContent(tableData.name, changedField.field!.dbName, changedField.field!)\n if (changedField.field.type === 'object' && !changedField.field.multiType) {\n addContraintFields.push(changedField.field)\n }\n }\n }\n\n if (changedField.action === 'dropField') {\n if (changedField.field.multiType && changedField.field.multiTypeVariant === 'common') {\n migrationContent += removeMultiTypeColumnContent(tableData.name, changedField.field)\n } else {\n migrationContent += removeColumnContent(tableData.name, changedField.field!.dbName)\n if (changedField.field.type === 'object' && !changedField.field.multiType) {\n delContraintFields.push(changedField.field)\n }\n if (changedField.field.type === 'object' && changedField.field.multiType) {\n migrationContent += removeColumnContent(tableData.name, `${changedField.field!.dbName.slice(0, -2)}Type`)\n }\n }\n }\n\n if (changedField.action === 'renameField') {\n if (changedField.field.multiType && changedField.field.multiTypeVariant === 'common') {\n migrationContent += renameMultiTypeColumnContent(tableData.name, changedField)\n } else {\n migrationContent += renameColumnContent(tableData.name, changedField.oldName!, changedField.newName!)\n }\n }\n\n if (changedField.action === 'changeField') {\n if (changedField.newField.multiType && changedField.oldField.multiType) {\n migrationContent += changeMultiTypeColumn(tableData.name, changedField.oldField, changedField.newField)\n } else {\n migrationContent += await changeColumn(tableData, changedField.oldField!, changedField.newField!)\n }\n\n if (changedField.oldField.type === 'object' && changedField.newField.type !== 'object' && !changedField.oldField.multiType) {\n delContraintFields.push(changedField.oldField)\n }\n if (\n changedField.oldField.type === 'object' &&\n changedField.newField.type === 'object' &&\n changedField.oldField.ref !== changedField.newField.ref &&\n !changedField.oldField.multiType &&\n !changedField.newField.multiType\n ) {\n delContraintFields.push(changedField.oldField)\n addContraintFields.push(changedField.newField)\n }\n if (changedField.oldField.type !== 'object' && changedField.newField.type === 'object' && !changedField.newField.multiType) {\n addContraintFields.push(changedField.newField)\n }\n if (changedField.oldField.type === 'object' && !changedField.oldField.multiType && changedField.newField.type === 'object' && changedField.newField.multiType) {\n delContraintFields.push(changedField.oldField)\n }\n if (changedField.oldField.type === 'object' && changedField.oldField.multiType && changedField.newField.type === 'object' && !changedField.newField.multiType) {\n migrationContent += removeColumnContent(tableData.name, `${changedField.oldField!.dbName.slice(0, -2)}Type`)\n addContraintFields.push(changedField.newField)\n }\n }\n\n if (changedField.action === 'addIndex') {\n const indexName = `${tableData.id.substring(24)}_${changedField.field.id.substring(24)}`\n\n if (changedField.field.multiType && changedField.field.multiTypeVariant === 'common') {\n migrationContent += addMultiTypeIndexes(tableData.name, changedField.field, indexName)\n } else {\n migrationContent += addIndex(tableData.name, changedField.field.dbName!, indexName)\n }\n }\n\n if (changedField.action === 'removeIndex') {\n if (changedField.field.multiType && changedField.field.multiTypeVariant === 'common') {\n migrationContent += removeMultiTypeIndexes(tableData.name, changedField.field)\n } else {\n migrationContent += removeIndex(tableData.name, changedField.field.dbName!)\n }\n }\n }\n if (addContraintFields.length > 0) {\n addConstraintsObjectsArray.push({\n path: tableData.name,\n fields: addContraintFields,\n })\n }\n if (delContraintFields.length > 0) {\n delConstraintsObjectsArray.push({\n path: tableData.name,\n fields: delContraintFields,\n })\n await this.delFieldsForeignKeys(migrationDate.clone().subtract(2, 'seconds'))\n }\n }\n\n if (migrationContent !== '') {\n let filename = `${migrationDate.format('YYYYMMDDHHmmss')}-change-table-${tableData.isTablePart ? 'part-' : ''}${tableData.dbName}.js`\n let fullPath = path.join(migrationFolder, filename)\n\n const migrationHeader = getMigrationHeader()\n const migrationBottom = getMigrationBottom()\n let migrationFileText = `${migrationHeader}${migrationContent}${migrationBottom}`\n\n await fsp.writeFile(fullPath, migrationFileText)\n }\n\n for (const tablePart of tableParts) {\n if (tablePart.action === 'createTable') {\n migrationDate.add(1, 'seconds')\n let filename = `${migrationDate.format('YYYYMMDDHHmmss')}-create-table-part-${tablePart.newTable.dbName}.js`\n let fullPath = path.join(migrationFolder, filename)\n\n const tableFields = await prepareFieldsStruct(tablePart.newTable.fields, [])\n const migrationHeader = getMigrationHeader()\n const migrationBottom = getMigrationBottom()\n let migrationFileText = `${migrationHeader}\\n await queryInterface.createTable('${tablePart.newTable.dbName}', {${tableFields}\\n })${migrationBottom}`\n\n const indexedFields = tablePart.newTable.fields.filter((el) => el.index === true)\n for (const indexedField of indexedFields) {\n const indexName = `${tablePart.newTable.id.substring(24)}_${indexedField.id.substring(24)}`\n\n if (indexedField.multiType && indexedField.multiTypeVariant === 'common') {\n migrationFileText += addMultiTypeIndexes(tablePart.newTable.dbName, indexedField, indexName)\n } else {\n migrationFileText += addIndex(tablePart.newTable.dbName, indexedField.dbName, indexName)\n }\n }\n\n migrationFileText += `${migrationBottom}`\n\n await fsp.writeFile(fullPath, migrationFileText)\n\n addConstraintsObjectsArray.push({\n path: tableData.name,\n fields: [tablePart.newTable],\n })\n }\n\n if (tablePart.action === 'changeTable') {\n await this.updateTable(\n {\n id: tablePart.oldTable.id,\n dbName: tablePart.oldTable.dbName,\n name: tablePart.newTable.dbName,\n dbFields: tablePart.oldTable.fields,\n fields: tablePart.newTable.fields,\n isTablePart: true,\n },\n migrationDate.add(1, 'seconds')\n )\n }\n\n if (tablePart.action === 'dropTable') {\n delConstraintsObjectsArray.push({\n path: tableData.name,\n fields: [tablePart.oldTable],\n })\n await this.delFieldsForeignKeys(migrationDate.clone().subtract(2, 'seconds'))\n\n migrationDate.add(1, 'seconds')\n let filename = `${migrationDate.format('YYYYMMDDHHmmss')}-drop-table-part-${tablePart.oldTable.dbName}.js`\n let fullPath = path.join(migrationFolder, filename)\n\n const migrationHeader = getMigrationHeader()\n const migrationBottom = getMigrationBottom()\n let migrationFileText = `${migrationHeader}\\n await queryInterface.dropTable('${tablePart.oldTable.dbName}')${migrationBottom}`\n\n await fsp.writeFile(fullPath, migrationFileText)\n }\n }\n\n return true\n },\n}\n\nfunction findObjectStructFiles(baseDir: string) {\n const result: string[] = []\n\n function searchDir(dir: string) {\n const files = fs.readdirSync(dir, { withFileTypes: true })\n\n for (const file of files) {\n const fullPath = path.join(dir, file.name)\n if (file.isDirectory()) {\n searchDir(fullPath)\n } else if (file.isFile() && file.name === 'object.struct.json') {\n result.push(fullPath)\n }\n }\n }\n\n searchDir(baseDir)\n return result\n}\n\nasync function prepareFieldsStruct(fields: Record<string, any>[], tableParts: Record<string, any>[]) {\n let result = ''\n for (const field of fields) {\n if (field.isTablePart === true) {\n tableParts.push({ ...field })\n continue\n }\n if (field.virtual === true) continue\n\n if (field.multiType && field.multiTypeVariant === 'common') {\n result += `${prepareMultiTypeFieldDetails(field)}`\n } else {\n result += `\\n ${field.dbName}: ${await prepareFieldDetails(field)}`\n }\n }\n\n result += `\\n createdAt: {\\n type: Sequelize.DataTypes.DATE,\\n allowNull: false,\\n },`\n result += `\\n updatedAt: {\\n type: Sequelize.DataTypes.DATE,\\n allowNull: false,\\n },`\n return result\n}\n\nasync function prepareFieldDetails(field: Record<string, any>, tableName: string = '', addMode: boolean = false) {\n let result = `{\\n `\n let fieldType = ''\n\n switch (field.type) {\n case 'json':\n fieldType = 'TEXT'\n break\n case 'object':\n fieldType = 'UUID'\n break\n default:\n fieldType = field.type.toUpperCase()\n }\n\n let typeDetails = ''\n if (field.type === 'string') {\n if (field.typeOptions?.length && field.typeOptions?.length !== 0) {\n typeDetails += `(${field.typeOptions.length})`\n }\n } else if (field.type === 'decimal') {\n if (field.typeOptions?.precision && field.typeOptions?.scale) {\n typeDetails += `(${field.typeOptions?.precision}, ${field.typeOptions?.scale})`\n }\n }\n\n result += ` type: Sequelize.DataTypes.${fieldType}${typeDetails},\\n`\n\n if (field.type === 'enum' && field.ref) {\n result += ` values: [${enums[field.ref].map((el: string) => `'${el}'`)}],\\n`\n }\n\n if (field.primaryKey === true) result += ` primaryKey: true,\\n`\n if (field.unique === true) result += ` unique: true,\\n`\n if (field.notNull === true) result += ` allowNull: false,\\n`\n\n if (field.defaultValue !== null && field.defaultValue !== undefined) {\n if (['enum', 'string', 'text'].includes(field.type)) {\n result += ` defaultValue: '${field.defaultValue}',\\n`\n } else {\n result += ` defaultValue: ${field.defaultValue},\\n`\n }\n }\n\n if (field.autoIncrement === true) result += ` autoIncrement: true,\\n`\n result += ` },`\n\n if (field.type === 'object' && field.multiType === true) {\n let columnName = field.dbName.endsWith('Id') ? field.dbName.slice(0, -2) : field.dbName\n if (addMode) {\n result += `)`\n result += `\\n await queryInterface.addColumn('${tableName}', '${columnName}Type', {\\n type: Sequelize.DataTypes.STRING,\\n`\n if (field.notNull === true) result += ` allowNull: false,\\n`\n result += ` },`\n } else {\n result += `\\n ${columnName}Type: {\\n type: Sequelize.DataTypes.STRING,\\n`\n if (field.notNull === true) result += ` allowNull: false,\\n`\n result += ` },`\n }\n }\n\n return result\n}\n\nfunction prepareMultiTypeFieldDetails(field: Record<string, any>) {\n let result = ''\n\n const dataTypeTemp = '\\n type: Sequelize.DataTypes.'\n const allowNullTemp = field.notNull === true ? ` allowNull: false,\\n` : ''\n\n result += `\\n _${field.dbName}Type: {${dataTypeTemp}STRING,\\n${allowNullTemp} },`\n\n if (field.type.includes('string')) {\n result += `\\n _${field.dbName}ST: {${dataTypeTemp}STRING(${field.typeOptions.length}),\\n },`\n }\n\n if (field.type.includes('text')) {\n result += `\\n _${field.dbName}TX: {${dataTypeTemp}TEXT,\\n },`\n }\n\n if (field.type.includes('integer')) {\n result += `\\n _${field.dbName}IN: {${dataTypeTemp}INTEGER,\\n },`\n }\n\n if (field.type.includes('decimal')) {\n result += `\\n _${field.dbName}DC: {${dataTypeTemp}DECIMAL(${field.typeOptions?.precision}, ${field.typeOptions?.scale}),\\n },`\n }\n\n if (field.type.includes('boolean')) {\n result += `\\n _${field.dbName}BL: {${dataTypeTemp}BOOLEAN,\\n },`\n }\n\n if (field.type.includes('date')) {\n result += `\\n _${field.dbName}DT: {${dataTypeTemp}DATE,\\n },`\n }\n\n const existRefs = multiTypeService.typeIncludesRef(field.type)\n\n if (existRefs) {\n result += `\\n _${field.dbName}Ref: {${dataTypeTemp}STRING(100),\\n },`\n }\n\n return result\n}\n\nfunction changedFieldProperties(oldField: Record<string, any>, newField: Record<string, any>) {\n return (\n (oldField.type !== newField.type && !((oldField.type === 'json' && newField.type === 'text') || (oldField.type === 'text' && newField.type === 'json'))) ||\n oldField.unique !== newField.unique ||\n oldField.defaultValue !== newField.defaultValue ||\n oldField.notNull !== newField.notNull ||\n oldField.primaryKey !== newField.primaryKey ||\n oldField.typeOptions?.precision !== newField.typeOptions?.precision ||\n oldField.typeOptions?.scale !== newField.typeOptions?.scale ||\n oldField.typeOptions?.length !== newField.typeOptions?.length ||\n oldField.multiType !== newField.multiType ||\n oldField.multiTypeVariant !== newField.multiTypeVariant\n )\n}\n\nfunction changeMultiTypeColumn(tableName: string, oldField: Record<string, any>, newField: Record<string, any>) {\n let result = ''\n\n const addColumnTemp = '\\n await queryInterface.addColumn('\n const dataTypeTemp = '\\n type: Sequelize.DataTypes.'\n const allowNullTemp = newField.notNull === true ? ` allowNull: false,\\n` : ''\n\n if (oldField.multiTypeVariant === newField.multiTypeVariant) {\n const typesMap = multiTypeService.typesSufixes() // { string: 'ST', text: 'TX', ... }\n const oldTypes: string[] = Array.isArray(oldField.type) ? oldField.type : oldField.type ? [oldField.type] : []\n const newTypes: string[] = Array.isArray(newField.type) ? newField.type : newField.type ? [newField.type] : []\n\n const toAdd = newTypes.filter((t) => !oldTypes.includes(t))\n const toRemove = oldTypes.filter((t) => !newTypes.includes(t))\n\n // Remove obsolete technical columns\n for (const t of toRemove) {\n const suffix = typesMap[t] || ''\n if (suffix) {\n result += `\\n await queryInterface.removeColumn('${tableName}', '_${oldField.dbName}${suffix}')`\n }\n }\n\n // If reference type was removed but existed previously - remove Ref column\n if (multiTypeService.typeIncludesRef(oldField.type) && !multiTypeService.typeIncludesRef(newField.type)) {\n result += `\\n await queryInterface.removeColumn('${tableName}', '_${oldField.dbName}Ref')`\n }\n\n // Add new technical columns\n for (const t of toAdd) {\n const suffix = typesMap[t] || ''\n if (!suffix) continue\n\n if (t === 'string') {\n const len = newField.typeOptions?.length || 255\n result += `${addColumnTemp}'${tableName}', '_${newField.dbName}${suffix}', {${dataTypeTemp}STRING(${len}),\\n${allowNullTemp} })`\n } else if (t === 'text') {\n result += `${addColumnTemp}'${tableName}', '_${newField.dbName}${suffix}', {${dataTypeTemp}TEXT,\\n${allowNullTemp} })`\n } else if (t === 'integer') {\n result += `${addColumnTemp}'${tableName}', '_${newField.dbName}${suffix}', {${dataTypeTemp}INTEGER,\\n${allowNullTemp} })`\n } else if (t === 'decimal') {\n const p = newField.typeOptions?.precision || 18\n const s = newField.typeOptions?.scale || 2\n result += `${addColumnTemp}'${tableName}', '_${newField.dbName}${suffix}', {${dataTypeTemp}DECIMAL(${p}, ${s}),\\n${allowNullTemp} })`\n } else if (t === 'boolean') {\n result += `${addColumnTemp}'${tableName}', '_${newField.dbName}${suffix}', {${dataTypeTemp}BOOLEAN,\\n${allowNullTemp} })`\n } else if (t === 'date') {\n result += `${addColumnTemp}'${tableName}', '_${newField.dbName}${suffix}', {${dataTypeTemp}DATE,\\n${allowNullTemp} })`\n } else if (multiTypeService.isRefType(t)) {\n // reference -> Ref column (string)\n result += `${addColumnTemp}'${tableName}', '_${newField.dbName}Ref', {${dataTypeTemp}STRING(100),\\n${allowNullTemp} })`\n } else {\n // fallback: add as TEXT\n result += `${addColumnTemp}'${tableName}', '_${newField.dbName}${suffix}', {${dataTypeTemp}TEXT,\\n${allowNullTemp} })`\n }\n }\n\n // If new types include references but old didn't - add Ref column\n if (!multiTypeService.typeIncludesRef(oldField.type) && multiTypeService.typeIncludesRef(newField.type)) {\n result += `${addColumnTemp}'${tableName}', '_${newField.dbName}Ref', {${dataTypeTemp}STRING(100),\\n${allowNullTemp} })`\n }\n\n return result\n } else {\n if (!oldField.multiTypeVariant && newField.multiTypeVariant === 'objects') {\n // It's the same variant\n return ''\n }\n if (newField.multiTypeVariant === 'objects') {\n // If previously had different technical columns (e.g. from 'common'), ensure they are removed\n result += removeMultiTypeColumnContent(tableName, oldField)\n\n // Then ensure Type and Id columns present\n // Add Type\n result += `${addColumnTemp}'${tableName}', '${newField.dbName}Type', {${dataTypeTemp}STRING,\\n${allowNullTemp} })`\n // Add Id (UUID)\n result += `${addColumnTemp}'${tableName}', '${newField.dbName}Id', {${dataTypeTemp}UUID,\\n${allowNullTemp} })`\n\n return result\n } else {\n result += removeColumnContent(tableName, oldField!.dbName)\n result += removeColumnContent(tableName, `${oldField!.dbName.slice(0, -2)}Type`)\n result += addMultiTypeColumnContent(tableName, newField)\n\n return result\n }\n }\n}\n\nfunction getMigrationHeader() {\n return `\\n'use strict'\\n\\n/** @type {import('sequelize-cli').Migration} */\\nmodule.exports = {\\n async up(queryInterface, Sequelize) {`\n}\n\nfunction getMigrationBottom() {\n return `\\n },\\n async down(queryInterface, Sequelize) {\\n },\\n}`\n}\n\nasync function syncAppObjectStructureFiles(appObject: any, filePath: string) {\n appObject.dbFields = appObject.fields\n appObject.dbTableName = appObject.path\n appObject.modified = false\n\n const jsonContent = JSON.stringify(appObject, null, 2)\n await fsp.writeFile(filePath, jsonContent, 'utf-8')\n}\n\nfunction truncateFkName(name: string): string {\n const MAX = 63\n if (!name) return name\n return name.length > MAX ? name.slice(name.length - MAX) : name\n}\n\nasync function syncAppObjectStructure(appObject: any, object: AppObject) {\n return await appObject.update({ dbFields: appObject.fields, dbTableName: appObject.path, modified: false }).then(async (updatedItem) => {\n return await seederService.updateInitialData(object.model, 'app_objects', {\n objectId: appObject.id,\n event: 'update',\n oldValue: appObject,\n newValue: updatedItem,\n })\n })\n}\n\nasync function addColumnContent(tableName: string, fieldName: string, fieldDetails: Record<string, any>) {\n return `\\n await queryInterface.addColumn('${tableName}', '${fieldName}', ${await prepareFieldDetails(fieldDetails, tableName, true)})`\n}\n\nfunction addMultiTypeColumnContent(tableName: string, fieldData: Record<string, any>) {\n let result = ''\n\n const addColumnTemp = '\\n await queryInterface.addColumn('\n const dataTypeTemp = '\\n type: Sequelize.DataTypes.'\n const allowNullTemp = fieldData.notNull === true ? ` allowNull: false,\\n` : ''\n\n result += `${addColumnTemp}'${tableName}', '_${fieldData.dbName}Type', {${dataTypeTemp}STRING,\\n${allowNullTemp} })`\n\n if (fieldData.type.includes('string')) {\n result += `${addColumnTemp}'${tableName}', '_${fieldData.dbName}ST', {${dataTypeTemp}STRING(${fieldData.typeOptions.length}),\\n })`\n }\n\n if (fieldData.type.includes('text')) {\n result += `${addColumnTemp}'${tableName}', '_${fieldData.dbName}TX', {${dataTypeTemp}TEXT,\\n })`\n }\n\n if (fieldData.type.includes('integer')) {\n result += `${addColumnTemp}'${tableName}', '_${fieldData.dbName}IN', {${dataTypeTemp}INTEGER,\\n })`\n }\n\n if (fieldData.type.includes('decimal')) {\n result += `${addColumnTemp}'${tableName}', '_${fieldData.dbName}DC', {${dataTypeTemp}DECIMAL(${fieldData.typeOptions?.precision}, ${fieldData.typeOptions?.scale}),\\n })`\n }\n\n if (fieldData.type.includes('boolean')) {\n result += `${addColumnTemp}'${tableName}', '_${fieldData.dbName}BL', {${dataTypeTemp}BOOLEAN,\\n })`\n }\n\n if (fieldData.type.includes('date')) {\n result += `${addColumnTemp}'${tableName}', '_${fieldData.dbName}DT', {${dataTypeTemp}DATE,\\n })`\n }\n\n if (multiTypeService.typeIncludesRef(fieldData.type)) {\n result += `${addColumnTemp}'${tableName}', '_${fieldData.dbName}Ref', {${dataTypeTemp}STRING(100),\\n })`\n }\n\n return result\n}\n\nfunction removeMultiTypeColumnContent(tableName: string, fieldData: Record<string, any>) {\n let result = ''\n\n const removeColumnTemp = `\\n await queryInterface.removeColumn('${tableName}', '_${fieldData.dbName}`\n\n result += `${removeColumnTemp}Type')`\n\n const typesMap = multiTypeService.typesSufixes()\n\n for (const fieldType in typesMap) {\n if (fieldData.type.includes(fieldType)) {\n result += `${removeColumnTemp}${typesMap[fieldType]}')`\n }\n }\n\n const existRefs = multiTypeService.typeIncludesRef(fieldData.type)\n\n if (existRefs) {\n result += `${removeColumnTemp}Ref')`\n }\n\n return result\n}\n\nfunction renameColumnContent(tableName: string, oldName: string, newName: string) {\n return `\\n await queryInterface.renameColumn('${tableName}', '${oldName}', '${newName}')`\n}\n\nfunction renameMultiTypeColumnContent(tableName: string, changedField: MigrationAction) {\n const typesMap = multiTypeService.typesSufixes()\n\n let result = ''\n\n const renameTemplate = `\\n await queryInterface.renameColumn('${tableName}', `\n\n result += `${renameTemplate}'${changedField.oldName}Type', '${changedField.newName}Type')`\n\n for (const fieldType in typesMap) {\n if (changedField.field?.type.includes(fieldType)) {\n result += `${renameTemplate}'${changedField.oldName}${typesMap[fieldType]}', '${changedField.newName}${typesMap[fieldType]}')`\n }\n }\n\n if (multiTypeService.typeIncludesRef((changedField.field?.type || []) as string[])) {\n result += `${renameTemplate}'${changedField.oldName}Ref', '${changedField.newName}Ref')`\n }\n\n return result\n}\n\nasync function changeColumn(tableData: Record<string, any>, oldField: Record<string, any>, newField: Record<string, any>) {\n let migrationContent = ''\n\n if (oldField.type !== newField.type) {\n if (notConvertableField(oldField.type, newField.type)) {\n migrationContent += removeColumnContent(tableData.name, newField.dbName)\n migrationContent += await addColumnContent(tableData.name, newField.dbName, newField)\n } else if (existConversion(oldField.type, newField.type)) {\n migrationContent += await addColumnContent(tableData.name, `temp_${newField.dbName}`, newField)\n let rawQuery = ''\n if (['integer', 'decimal', 'text'].includes(oldField.type) && newField.type === 'string') {\n rawQuery += `UPDATE ${tableData.name} SET temp_${newField.dbName} = LEFT(CAST(${newField.dbName} AS VARCHAR), ${newField?.typeOptions?.length || 255})`\n } else if (['integer', 'decimal'].includes(oldField.type) && newField.type === 'text') {\n rawQuery += `UPDATE ${tableData.name} SET temp_${newField.dbName} = CAST(${newField.dbName} AS TEXT)`\n } else if (['text', 'string'].includes(oldField.type) && newField.type === 'integer') {\n rawQuery += `UPDATE ${tableData.name} SET temp_${newField.dbName} = CASE\n WHEN ${newField.dbName} ~ '^[0-9]+$' THEN CAST(${newField.dbName} AS INTEGER)\n ELSE NULL\n END`\n } else if (['text', 'string'].includes(oldField.type) && newField.type === 'decimal') {\n rawQuery += `UPDATE ${tableData.name} SET temp_${newField.dbName} = CASE\n WHEN ${newField.dbName} ~ '^[0-9]+$' THEN CAST(${newField.dbName} AS DECIMAL)\n ELSE NULL\n END`\n }\n if (rawQuery) migrationContent += addRawQueryContent(rawQuery)\n migrationContent += removeColumnContent(tableData.name, newField.dbName)\n migrationContent += renameColumnContent(tableData.name, `temp_${newField.dbName}`, newField.dbName)\n } else {\n migrationContent += await changeColumnContent(tableData.name, newField.dbName, newField)\n }\n } else {\n migrationContent += await changeColumnContent(tableData.name, newField.dbName, newField)\n }\n return migrationContent\n}\n\nasync function changeColumnContent(tableName: string, fieldName: string, fieldDetails: Record<string, any>) {\n return `\\n await queryInterface.changeColumn('${tableName}', '${fieldName}', ${await prepareFieldDetails(fieldDetails, tableName, true)})`\n}\n\nfunction removeColumnContent(tableName: string, fieldName: string) {\n return `\\n await queryInterface.removeColumn('${tableName}', '${fieldName}')`\n}\n\nfunction addRawQueryContent(rawQuery: string) {\n return `\\n await queryInterface.sequelize.query(\\`${rawQuery}\\`)`\n}\n\nfunction existConversion(typeFrom: string, typeTo: string) {\n const conversions = [\n { typeFrom: 'integer', typeTo: 'string' },\n { typeFrom: 'decimal', typeTo: 'string' },\n { typeFrom: 'text', typeTo: 'string' },\n { typeFrom: 'integer', typeTo: 'text' },\n { typeFrom: 'decimal', typeTo: 'text' },\n { typeFrom: 'text', typeTo: 'decimal' },\n { typeFrom: 'text', typeTo: 'integer' },\n { typeFrom: 'string', typeTo: 'integer' },\n { typeFrom: 'string', typeTo: 'decimal' },\n ]\n return conversions.find((el) => el.typeFrom === typeFrom && el.typeTo === typeTo)\n}\n\nfunction notConvertableField(typeFrom: string, typeTo: string): string | undefined {\n const fields = ['uuid', 'date', 'boolean', 'object', 'enum']\n return fields.find((el) => el === typeFrom) || fields.find((el) => el === typeTo)\n}\n\nfunction addIndex(tableName: string, fieldName: string, indexName: string): string {\n return `\\n await queryInterface.addIndex('${tableName}', ['${fieldName}'], { name: '${indexName}'})`\n}\n\nfunction addMultiTypeIndexes(tableName: string, fieldData: Record<string, any>, indexName: string) {\n let result = ''\n\n const addIndexTemp = '\\n await queryInterface.addIndex('\n\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}Type'], { name: '${indexName}_type'})`\n\n if (fieldData.type.includes('string')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}ST'], { name: '${indexName}_st'})`\n }\n\n if (fieldData.type.includes('text')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}TX'], { name: '${indexName}_tx'})`\n }\n\n if (fieldData.type.includes('integer')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}IN'], { name: '${indexName}_in'})`\n }\n\n if (fieldData.type.includes('decimal')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}DC'], { name: '${indexName}_dc'})`\n }\n\n if (fieldData.type.includes('boolean')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}BL'], { name: '${indexName}_type'})`\n }\n\n if (fieldData.type.includes('date')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}DT'], { name: '${indexName}_dt'})`\n }\n\n if (multiTypeService.typeIncludesRef(fieldData.type)) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}Ref'], { name: '${indexName}_ref'})`\n }\n\n return result\n}\n\nfunction removeIndex(tableName: string, fieldName: string): string {\n return `\\n await queryInterface.removeIndex('${tableName}', ['${fieldName}'])`\n}\n\nfunction removeMultiTypeIndexes(tableName: string, fieldData: Record<string, any>) {\n let result = ''\n\n const addIndexTemp = '\\n await queryInterface.removeIndex('\n\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}Type'])`\n\n if (fieldData.type.includes('string')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}ST'])`\n }\n\n if (fieldData.type.includes('text')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}TX'])`\n }\n\n if (fieldData.type.includes('integer')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}IN'])`\n }\n\n if (fieldData.type.includes('decimal')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}DC'])`\n }\n\n if (fieldData.type.includes('boolean')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}BL'])`\n }\n\n if (fieldData.type.includes('date')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}DT'])`\n }\n\n if (multiTypeService.typeIncludesRef(fieldData.type)) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}Ref'])`\n }\n\n return result\n}\n","export default {\n typesSufixes() {\n return { string: 'ST', text: 'TX', integer: 'IN', decimal: 'DC', boolean: 'BL', date: 'DT' }\n },\n\n typeIncludesRef(fieldType: Array<string>) {\n return (\n fieldType.includes('enum') ||\n fieldType.includes('catalog') ||\n fieldType.includes('document') ||\n fieldType.includes('anyRef') ||\n fieldType.findIndex((el) => el.includes('.')) > -1\n )\n },\n\n isRefType(fieldType: string) {\n return fieldType === 'enum' || fieldType === 'catalog' || fieldType === 'document' || fieldType === 'anyRef' || fieldType.includes('.')\n },\n\n getFieldNameByType(baseName: string, type: string) {\n const typesSufixes = this.typesSufixes()\n\n if (typesSufixes[type]) {\n return `_${baseName}${typesSufixes[type]}`\n }\n\n if (this.isRefType(type)) {\n return `_${baseName}Ref`\n }\n\n return null\n },\n}\n","import logger from '@/core/services/logger.service'\nimport sequelize from '@/database/dbConnection'\nimport { Model, Transaction, IncludeOptions, ModelStatic } from 'sequelize'\nimport { Request } from 'express'\n\nexport default {\n async onChangeHandler(objectModel: ModelStatic<Model<any, any>>, objectId: string, changeMode: string, userId: string, t?: Transaction): Promise<void> {\n try {\n const existVersioning: Record<string, any> | null = await sequelize.models.ObjectVersioningSetting.findOne({ where: { objectType: objectModel.name } })\n\n if (existVersioning) {\n if (existVersioning.versioningMethod === 'all' || existVersioning.versioningMethod === changeMode) {\n let include = prepareIncludes(objectModel)\n\n await objectModel.findByPk(objectId, { include, transaction: t }).then(async (object) => {\n if (object) {\n const versionInfo: Record<string, any> = {\n objectId,\n objectData: JSON.stringify(object),\n objectType: objectModel.name,\n userId,\n description: changeMode,\n }\n\n const options = { transaction: t ? t : null }\n\n await sequelize.models.ObjectVersion.create(versionInfo, options).catch((err) => {\n console.error(err)\n })\n }\n })\n }\n }\n } catch (error) {\n logger.error(`Error in ${objectModel.options.name?.plural} objectVersionsService onChangeHandler`, { meta: error })\n }\n },\n\n async addChanges(objectData: Record<string, any>, req: Request): Promise<void> {\n let changesData = { ...objectData }\n\n if (req.user) {\n changesData.userId = req.user.id\n }\n\n await sequelize.models.ObjectVersion.create(changesData).catch((err) => {\n console.error(err)\n })\n },\n}\n\nfunction prepareIncludes(object: ModelStatic<Model<any, any>>): IncludeOptions[] {\n let include: Record<string, any>[] = []\n\n if (object.associations) {\n for (let as in object.associations) {\n if (as === 'chargedServicesAcc') continue\n\n let model = object.associations[as].target\n\n if (object.associations[as].isSingleAssociation) {\n let attributes = ['id', 'presentation']\n\n if (object.associations[as].source.rawAttributes.name) {\n attributes.push('name')\n }\n\n include.push({ model, as, attributes }) // include field ref data\n } else {\n const count = include.push({ model, as, include: [] }) // include tables\n\n if (model.associations) {\n include[count - 1].include = []\n\n for (let tFieldAs in model.associations) {\n let tFieldModel = model.associations[tFieldAs].target\n\n if (model.associations[tFieldAs].isSingleAssociation) {\n let tFieldAttributes = ['id', 'presentation']\n\n if (model.associations[tFieldAs].target.rawAttributes.name) {\n tFieldAttributes.push('name')\n }\n\n include[count - 1].include.push({ model: tFieldModel, as: tFieldAs, attributes: tFieldAttributes }) // include table field ref data\n }\n }\n }\n }\n }\n }\n\n return include\n}\n","import { Sequelize, ModelStatic, Model, Transaction } from 'sequelize'\nimport logger from '@/core/services/logger.service'\nimport moment from 'moment'\nimport { v4 as uuidv4 } from 'uuid'\nimport { AppObject } from '@/src/types'\n\nexport default {\n async updateTotals(register: AppObject, params: Record<string, any>): Promise<void> {\n if (!register.accumulationRegister) {\n return\n }\n\n const accTable = register.accTable\n\n if (accTable) {\n const calculationPeriod = await this.getCalculatedPeriod(params.objects.registersCalculation, register.id)\n\n if (!calculationPeriod) {\n return\n }\n\n const dimensions = accTable.dimensions.map((el) => el.dbName)\n dimensions.push('period')\n\n const resources = accTable.resources.map((el) => el.dbName)\n\n let recordsBefore: Record<string, any>[] = []\n\n if (params.recordsBefore.length > 0) {\n recordsBefore = prepareRecordsTable(JSON.parse(JSON.stringify(params.recordsBefore)), dimensions, resources)\n }\n\n let recordsAfter: Record<string, any>[] = []\n\n if (params.recordsAfter.length > 0) {\n recordsAfter = prepareRecordsTable(JSON.parse(JSON.stringify(params.recordsAfter)), dimensions, resources)\n }\n\n const recordsDifference = calculateDifference(recordsBefore, recordsAfter, dimensions, resources)\n\n await updateRecordsDifference(accTable.model, recordsDifference, dimensions, resources, calculationPeriod, params.transaction).catch((error) => {\n logger.error(`Error updating records for register: ${accTable.name}`, { meta: error })\n })\n }\n },\n\n async calculateTotals(register: AppObject, objects: Record<string, AppObject>): Promise<void> {\n if (!register.accumulationRegister) {\n return\n }\n\n const accTable = register.accTable\n\n if (accTable) {\n const periodDimension = 'period'\n\n const dimensions = accTable.dimensions.map((el) => el.dbName)\n const resources = accTable.resources.map((el) => el.dbName)\n\n const detailRecords: Record<string, any>[] = await register.model.findAll()\n\n if (detailRecords.length === 0) {\n await accTable.model.truncate()\n return\n }\n\n const transformedRecords = detailRecords.map((record) => {\n const newRecord = {}\n dimensions.forEach((dim) => {\n newRecord[dim] = record[dim]\n })\n newRecord[periodDimension] = moment(record[periodDimension]).add(1, 'month').startOf('month').toDate()\n resources.forEach((res) => {\n newRecord[res] = record.recordType === 'receipt' ? parseFloat(record[res]) : -parseFloat(record[res])\n })\n return newRecord\n })\n\n const sortedPeriods = [...new Set(transformedRecords.map((record) => record[periodDimension]))].sort((a, b) => a - b)\n const firstPeriod = sortedPeriods[0]\n const currentPeriod = moment().add(1, 'month').startOf('month').toDate()\n\n let previousMonthRecords = {}\n\n await accTable.model.truncate()\n\n const transaction = await accTable.model.sequelize.transaction()\n\n for (let period = moment(firstPeriod); period.isSameOrBefore(currentPeriod, 'month'); period.add(1, 'month')) {\n const periodDate = period.toDate()\n const periodRecords: Record<string, any> = {}\n\n transformedRecords.forEach((record) => {\n if (moment(record[periodDimension]).isSame(period, 'month')) {\n const key = dimensions.map((dim) => record[dim]).join('_')\n if (!periodRecords[key]) {\n periodRecords[key] = { ...record, period: periodDate, id: uuidv4() }\n } else {\n resources.forEach((res) => {\n periodRecords[key][res] += record[res]\n })\n }\n }\n })\n\n if (Object.keys(previousMonthRecords).length > 0) {\n Object.keys(previousMonthRecords).forEach((key) => {\n if (!periodRecords[key]) {\n periodRecords[key] = { ...previousMonthRecords[key], period: periodDate, id: uuidv4() }\n } else {\n resources.forEach((res) => {\n periodRecords[key][res] += parseFloat(previousMonthRecords[key][res])\n })\n }\n })\n }\n\n const finalRecords = Object.values(periodRecords).map((record) => {\n resources.forEach((res) => {\n record[res] = record[res].toString()\n })\n return record\n })\n\n previousMonthRecords = JSON.parse(JSON.stringify(periodRecords))\n await accTable.model.bulkCreate(finalRecords, { ignoreDuplicates: true, transaction })\n }\n\n await this.updateCalculatedPeriod(objects.registersCalculation, { registerId: register.id, beginPeriod: firstPeriod, endPeriod: currentPeriod }, transaction)\n\n await transaction.commit()\n }\n },\n\n async getCalculatedPeriod(registersCalculation: AppObject, registerId: string) {\n return await registersCalculation.model.findOne({ where: { registerId } })\n },\n\n async updateCalculatedPeriod(registersCalculation: AppObject, data: Record<string, any>, transaction: Transaction): Promise<void> {\n const existRegisterPeriod = await registersCalculation.model.findOne({ where: { registerId: data.registerId }, transaction })\n\n if (existRegisterPeriod) {\n await existRegisterPeriod.update({ beginPeriod: data.beginPeriod, endPeriod: data.endPeriod }, { where: { registerId: data.registerId }, transaction })\n } else {\n await registersCalculation.model.create({ id: uuidv4(), ...data }, { transaction })\n }\n },\n}\n\nfunction prepareRecordsTable(records: Record<string, any>[], dimensions: string[], resources: string[]): Record<string, any>[] {\n for (const record of records) {\n for (const resourse of resources) {\n record[resourse] = record.recordType === 'expense' ? -1 * parseFloat(record[resourse]) : parseFloat(record[resourse])\n }\n\n record.period = getStartOfNextMonth(record.period)\n }\n\n return aggregateData(records, dimensions, resources)\n}\n\nfunction getStartOfNextMonth(date: Date): Date {\n const momentDate = moment(date)\n\n const startOfNextMonth = momentDate.add(1, 'months').startOf('month')\n\n return startOfNextMonth.toDate()\n}\n\nfunction aggregateData(records: Record<string, any>[], dimmensions: string[], resources: string[]): Record<string, any>[] {\n const aggregatedData = {}\n\n records.forEach((record) => {\n const key = dimmensions.map((dim) => record[dim]).join('|')\n\n if (!aggregatedData[key]) {\n aggregatedData[key] = {}\n dimmensions.forEach((dim) => {\n aggregatedData[key][dim] = record[dim] === undefined ? null : record[dim]\n })\n resources.forEach((res) => {\n aggregatedData[key][res] = 0\n })\n }\n\n resources.forEach((res) => {\n aggregatedData[key][res] += record[res]\n })\n })\n\n return Object.values(aggregatedData)\n}\n\nfunction calculateDifference(recordsBefore: Record<string, any>[], recordsAfter: Record<string, any>[], dimensions: string[], resources: string[]): Record<string, any>[] {\n const recordMap: Record<string, any> = {}\n\n recordsBefore.forEach((record) => {\n const key = dimensions.map((dim) => record[dim]).join('|')\n if (!recordMap[key]) {\n recordMap[key] = {}\n dimensions.forEach((dim) => {\n recordMap[key][dim] = record[dim]\n })\n resources.forEach((res) => {\n recordMap[key][res] = 0\n })\n }\n resources.forEach((res) => {\n recordMap[key][res] -= parseFloat(record[res])\n })\n })\n\n recordsAfter.forEach((record) => {\n const key = dimensions.map((dim) => record[dim]).join('|')\n if (!recordMap[key]) {\n recordMap[key] = {}\n dimensions.forEach((dim) => {\n recordMap[key][dim] = record[dim]\n })\n resources.forEach((res) => {\n recordMap[key][res] = 0\n })\n }\n resources.forEach((res) => {\n recordMap[key][res] += parseFloat(record[res])\n })\n })\n\n return Object.values(recordMap).filter((record) => {\n return resources.some((res) => record[res] !== 0)\n })\n}\n\nasync function updateRecordsDifference(\n registerModel: ModelStatic<Model<any, any>>,\n recordsDifference: Record<string, any>[],\n dimensions: string[],\n resources: string[],\n calculationPeriod: Record<string, any>,\n transaction: Transaction\n): Promise<void> {\n for (const record of recordsDifference) {\n const periods: Date[] = []\n for (let period = moment(calculationPeriod.beginPeriod); period.isSameOrBefore(calculationPeriod.endPeriod, 'month'); period.add(1, 'month')) {\n if (period.isSameOrAfter(record.period)) {\n periods.push(period.toDate())\n }\n }\n\n for (let period of periods) {\n let searchObject = {}\n dimensions.forEach((dim) => {\n if (dim === 'period') {\n searchObject[dim] = period\n } else {\n searchObject[dim] = record[dim]\n }\n })\n\n const existingRecord = await registerModel.findOne({\n where: searchObject,\n transaction,\n })\n\n if (existingRecord) {\n let updateValues = {}\n resources.forEach((res) => {\n updateValues[res] = Sequelize.literal(`${res} + ${record[res]}`)\n })\n\n await registerModel.update(updateValues, {\n where: searchObject,\n transaction,\n })\n } else {\n let createObject = { id: uuidv4() }\n dimensions.forEach((dim) => {\n if (dim === 'period') {\n createObject[dim] = period\n } else {\n createObject[dim] = record[dim]\n }\n })\n resources.forEach((res) => {\n createObject[res] = record[res]\n })\n\n await registerModel.create(createObject, { transaction })\n }\n }\n }\n}\n","import xl from 'exceljs'\nimport { format } from 'ssf'\nimport moment from 'moment'\nimport sequelize from '@/database/dbConnection'\nimport logger from '@/core/services/logger.service'\nimport commonService from '@/core/services/common.service'\nimport { Request, Response } from 'express'\n\nexport default {\n async generateExcel(req: Request, res: Response | null = null) {\n const params: Record<string, any> = { ...req.body }\n\n if (params.rowGroups.length > 1) {\n const uniqueGroups: any[] = []\n let groupValues: string[] = []\n\n for (let i = 0; i < params.rowGroups.length; i++) {\n if (params.rowGroups[i].withParent !== true && i !== 0) {\n uniqueGroups.push(groupValues.length > 1 ? groupValues : groupValues[0])\n groupValues = []\n }\n\n groupValues.push(params.rowGroups[i])\n\n if (i === params.rowGroups.length - 1) {\n uniqueGroups.push(groupValues.length > 1 ? groupValues : groupValues[0])\n }\n }\n\n params.rowGroups = uniqueGroups\n }\n\n if (params.rowGroups.length > 0) {\n params.fields = params.fields.filter((el: Record<string, any>) => !params.calcs.find((calcEl: Record<string, any>) => calcEl.name === el.name))\n }\n\n params.enums = await getEnums(params.langCode)\n\n // Create a new instance of a Workbook class\n const wb = new xl.Workbook()\n\n // Add Worksheets to the workbook\n const ws = wb.addWorksheet('Sheet 1', {\n pageSetup: { paperSize: 9, orientation: 'landscape' },\n })\n\n //Add params and filters description\n let rowIndex = 1\n if (params.periodPresentation) {\n let langType = params.periodPresentation.length > 20 ? params.lang.byPeriod : params.lang.byDate\n ws.getCell(rowIndex, 1).value = `${langType}:`\n ws.getCell(rowIndex, 2).value = params.periodPresentation\n\n rowIndex++\n }\n\n if (Array.isArray(params.filterPresentation) && params.filterPresentation.length > 0) {\n ws.getCell(rowIndex, 1).value = `${params.lang.filter}:`\n\n for (const filter of params.filterPresentation) {\n ws.getCell(rowIndex, 2).value = filter\n\n rowIndex++\n }\n }\n\n const hideDetails = params.rowGroups.length > 0 && params.hideDetails === true\n\n // // Add header row groups\n let headerRowIndex = rowIndex\n\n let headerRows = params.rowGroups.length + (hideDetails === true ? 0 : 1)\n headerRows = params.colGroups.length > 0 && headerRows < 2 ? 2 : headerRows\n\n let endColIndex = hideDetails === true ? 1 : params.fields.length\n if (params.rowGroups.length > 0) {\n const groupRows = params.rowGroups.length === 1 && params.colGroups.length > 0 && hideDetails ? 1 : 0\n\n params.rowGroups.map((group) => {\n const cell = ws.getCell(rowIndex, 1)\n cell.value = getHeaderTitle(group)\n setHeaderStyles(cell)\n\n ws.mergeCells(rowIndex, 1, rowIndex + groupRows, endColIndex)\n\n rowIndex += 1\n })\n }\n\n // Add header fields\n if (hideDetails !== true) {\n params.fields.map((field: Record<string, any>, fieldIndex: number) => {\n const cell = ws.getCell(rowIndex, fieldIndex + 1)\n setHeaderStyles(cell)\n cell.value = field.title\n })\n\n rowIndex += 1\n }\n\n const calcLength = params.calcs.length\n\n // Add header coll groups\n if (params.colGroups.length > 0) {\n for (const colGroup of params.cols) {\n const cell = ws.getCell(headerRowIndex, endColIndex + 1)\n cell.value = colGroup.name\n setHeaderStyles(cell)\n\n ws.mergeCells(headerRowIndex, endColIndex + 1, headerRowIndex, endColIndex + calcLength)\n\n params.calcs.map((calc: Record<string, any>, calcIndex: number) => {\n const cell = ws.getCell(headerRowIndex + 1, endColIndex + calcIndex + 1)\n cell.value = calc.title\n setHeaderStyles(cell)\n\n ws.mergeCells(headerRowIndex + 1, endColIndex + calcIndex + 1, headerRowIndex + headerRows - 1, endColIndex + calcIndex + 1)\n })\n\n endColIndex += calcLength\n }\n\n if (params.showXTotal) {\n const cell = ws.getCell(headerRowIndex, endColIndex + 1)\n cell.value = params.lang.total\n setHeaderStyles(cell)\n\n ws.mergeCells(headerRowIndex, endColIndex + 1, headerRowIndex, endColIndex + calcLength)\n\n params.calcs.map((calc: Record<string, any>, calcIndex: number) => {\n const cell = ws.getCell(headerRowIndex + 1, endColIndex + calcIndex + 1)\n cell.value = calc.title\n setHeaderStyles(cell)\n\n ws.mergeCells(headerRowIndex + 1, endColIndex + calcIndex + 1, headerRowIndex + headerRows - 1, endColIndex + calcIndex + 1)\n })\n }\n } else {\n if (params.rowGroups.length > 0) {\n params.calcs.map((calc: Record<string, any>, calcIndex: number) => {\n const cell = ws.getCell(headerRowIndex, endColIndex + calcIndex + 1)\n cell.value = calc.title\n setHeaderStyles(cell)\n\n ws.mergeCells(headerRowIndex, endColIndex + calcIndex + 1, headerRowIndex + headerRows - 1, endColIndex + calcIndex + 1)\n })\n }\n }\n\n const lvl = 0\n rowIndex = generateDataRows(params, params.data, headerRowIndex + headerRows, hideDetails, ws, lvl)\n\n let maxCol = 1\n if (params.showYTotal > 0) {\n if (params.totals.length > 0) {\n let endColIndex = hideDetails === true ? 1 : params.fields.length\n if (params.rowGroups.length > 0) {\n const cell = ws.getCell(rowIndex, 1)\n cell.value = params.lang.total\n setGroupStyles(cell)\n ws.mergeCells(rowIndex, 1, rowIndex, endColIndex)\n\n params.totals.forEach((total: Record<string, any>, index: number) => {\n maxCol = endColIndex + index + 1\n\n const cell = ws.getCell(rowIndex, maxCol)\n cell.value = total.value || 0\n setGroupStyles(cell)\n cell.numFmt = getNumberformat(total.format) as string\n cell.alignment = { horizontal: total.textAlign ? total.textAlign : 'left' }\n })\n\n if (params.colGroups.length > 0 && params.showXTotal) {\n params.calcs.map((calc: Record<string, any>, index: number) => {\n const calcTotal = params.totals.reduce((acc: number, el: Record<string, any>) => {\n if (el.id === calc.id) {\n return acc + el.value\n }\n\n return acc\n }, 0)\n\n maxCol = endColIndex + params.totals.length + index + 1\n\n const cell = ws.getCell(rowIndex, maxCol)\n cell.value = calcTotal || 0\n setGroupStyles(cell)\n cell.numFmt = getNumberformat(calc.format) as string\n cell.alignment = { horizontal: calc.textAlign ? calc.textAlign : 'left' }\n })\n }\n } else {\n let needSpan = true\n let fieldIndex = 1\n\n for (const field of params.fields) {\n const existTotal = params.totals.find((el: Record<string, any>) => el.id === field.id)\n\n if (existTotal) {\n if (needSpan === true) {\n const cell = ws.getCell(rowIndex, 1)\n cell.value = params.lang.total\n setGroupStyles(cell)\n ws.mergeCells(rowIndex, 1, rowIndex, fieldIndex - 1)\n\n needSpan = false\n }\n\n const cell = ws.getCell(rowIndex, fieldIndex)\n cell.value = Number(existTotal.value || 0)\n setGroupStyles(cell)\n cell.numFmt = getNumberformat(existTotal.format) as string\n cell.alignment = { horizontal: field.textAlign ? field.textAlign : 'left' }\n } else {\n if (needSpan !== true) {\n const cell = ws.getCell(rowIndex, fieldIndex)\n cell.value = ''\n setGroupStyles(cell)\n }\n }\n\n maxCol = fieldIndex\n fieldIndex++\n }\n }\n }\n }\n\n setColsWidth(ws, headerRowIndex)\n setPrintSettings(ws)\n\n if (res) {\n res.status(200)\n res.setHeader('Content-Type', 'text/xlsx')\n res.setHeader('Content-Disposition', 'attachment; filename=Excel.xlsx')\n wb.xlsx.write(res).then(function () {\n res.end()\n })\n }\n\n return wb\n },\n}\n\nfunction setHeaderStyles(cell: Record<string, any>) {\n cell.border = {\n left: { style: 'thin', color: { argb: 'd3d3d3' } },\n top: { style: 'thin', color: { argb: 'd3d3d3' } },\n right: { style: 'thin', color: { argb: 'd3d3d3' } },\n bottom: { style: 'thin', color: { argb: 'd3d3d3' } },\n outline: true,\n }\n\n cell.alignment = {\n vertical: 'middle',\n horizontal: 'left',\n shrinkToFit: true,\n wrapText: true,\n }\n\n cell.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'e9ecef' } }\n}\n\nfunction setGroupStyles(cell: Record<string, any>) {\n cell.border = {\n left: { style: 'thin', color: { argb: 'd3d3d3' } },\n top: { style: 'thin', color: { argb: 'd3d3d3' } },\n right: { style: 'thin', color: { argb: 'd3d3d3' } },\n bottom: { style: 'thin', color: { argb: 'd3d3d3' } },\n outline: true,\n }\n\n cell.alignment = { horizontal: 'left' }\n\n cell.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'f2f5fa' } }\n}\n\nfunction setDetailStyles(cell: Record<string, any>) {\n cell.border = {\n left: { style: 'thin', color: { argb: 'd3d3d3' } },\n top: { style: 'thin', color: { argb: 'd3d3d3' } },\n right: { style: 'thin', color: { argb: 'd3d3d3' } },\n bottom: { style: 'thin', color: { argb: 'd3d3d3' } },\n outline: true,\n }\n}\n\nfunction getHeaderTitle(data: Record<string, any>) {\n let text: string\n if (Array.isArray(data)) {\n text = data.map((obj) => obj.title).join(', ')\n } else if (typeof data === 'object') {\n text = data?.title\n } else {\n text = data\n }\n\n return text\n}\n\nfunction generateDataRows(params: Record<string, any>, rows: Record<string, any>[], rowIndex: number, hideDetails: boolean, ws: any, lvl: number) {\n for (const row of rows) {\n let endColIndex = hideDetails === true ? 1 : params.fields.length\n\n ws.getRow(rowIndex).outlineLevel = lvl\n\n if (row.isGroup) {\n const cell = ws.getCell(rowIndex, 1)\n setGroupCellValue(params, cell, row.groups)\n\n if (row.children.length > 0) {\n setGroupStyles(cell)\n } else {\n setDetailStyles(cell)\n }\n\n ws.mergeCells(rowIndex, 1, rowIndex, endColIndex)\n\n endColIndex += 1\n\n if (params.colGroups.length > 0) {\n for (const total of row.totals) {\n const cell = ws.getCell(rowIndex, endColIndex)\n cell.value = total.value || 0\n\n if (row.children.length > 0) {\n setGroupStyles(cell)\n } else {\n setDetailStyles(cell)\n }\n\n cell.alignment = {\n horizontal: total.textAlign ? total.textAlign : 'left',\n }\n\n cell.numFmt = getNumberformat(total.format)\n\n endColIndex += 1\n }\n\n if (params.showXTotal) {\n for (const calc of params.calcs) {\n const calcTotal = row.totals.reduce((acc: number, el: Record<string, any>) => {\n if (el.id === calc.id) {\n return acc + el.value\n }\n\n return acc\n }, 0)\n\n const cell = ws.getCell(rowIndex, endColIndex)\n cell.value = calcTotal || 0\n\n if (row.children.length > 0) {\n setGroupStyles(cell)\n } else {\n setDetailStyles(cell)\n }\n\n cell.alignment = {\n horizontal: calc.textAlign ? calc.textAlign : 'left',\n }\n\n cell.numFmt = getNumberformat(calc.format)\n\n endColIndex += 1\n }\n }\n } else {\n for (const total of row.totals) {\n const cell = ws.getCell(rowIndex, endColIndex)\n cell.value = total.value || 0\n\n if (row.children.length > 0) {\n setGroupStyles(cell)\n } else {\n setDetailStyles(cell)\n }\n\n cell.alignment = {\n horizontal: total.textAlign ? total.textAlign : 'left',\n }\n\n cell.numFmt = getNumberformat(total.format)\n\n endColIndex += 1\n }\n }\n\n rowIndex += 1\n\n if (row.children.length > 0) {\n rowIndex = generateDataRows(params, row.children, rowIndex, hideDetails, ws, lvl + 1)\n }\n } else {\n for (let i = 0; i < params.fields.length; i++) {\n const cell = ws.getCell(rowIndex, i + 1)\n setCellValue(cell, params.fields[i], row, params)\n setDetailStyles(cell)\n\n cell.alignment = {\n horizontal: params.fields[i].textAlign,\n }\n }\n\n let colIndex = params.fields.length + 1\n if (params.colGroups.length > 0) {\n const groupValue = row[params.colGroups[0].name]\n\n const calcTotals = {}\n\n for (const groupData of params.cols) {\n for (let j = 0; j < params.calcs.length; j++) {\n let value = 0\n\n if ((params.colGroups[0].valueType === 'object' && groupData.id === groupValue?.id) || groupData === groupValue) {\n value = Number(row[params.calcs[j].name] || 0)\n }\n\n const cell = ws.getCell(rowIndex, colIndex)\n cell.value = value || 0\n setDetailStyles(cell)\n cell.alignment = {\n horizontal: params.calcs[j].textAlign ? params.calcs[j].textAlign : 'left',\n }\n\n cell.numFmt = getNumberformat(params.calcs[j].format)\n\n if (Object.hasOwnProperty.call(calcTotals, params.calcs[j].name)) {\n calcTotals[params.calcs[j].name] += Number(value)\n } else {\n calcTotals[params.calcs[j].name] = Number(value)\n }\n\n colIndex += 1\n }\n }\n\n if (params.showXTotal) {\n for (let j = 0; j < params.calcs.length; j++) {\n let value = calcTotals[params.calcs[j].name]\n\n const cell = ws.getCell(rowIndex, colIndex + j)\n cell.value = value || 0\n setDetailStyles(cell)\n cell.alignment = {\n horizontal: params.calcs[j].textAlign ? params.calcs[j].textAlign : 'left',\n }\n\n cell.numFmt = getNumberformat(params.calcs[j].format)\n }\n }\n } else {\n if (params.rowGroups.length > 0) {\n for (let j = 0; j < params.calcs.length; j++) {\n let value = Number(row[params.calcs[j].name] || 0)\n\n const cell = ws.getCell(rowIndex, colIndex + j)\n cell.value = value || 0\n setDetailStyles(cell)\n cell.alignment = {\n horizontal: params.calcs[j].textAlign ? params.calcs[j].textAlign : 'left',\n }\n\n cell.numFmt = getNumberformat(params.calcs[j].format)\n }\n }\n }\n\n rowIndex += 1\n }\n }\n\n return rowIndex\n}\n\nfunction getNumberformat(formatStr: string) {\n let valueFormat: string | null = null\n\n if (formatStr) {\n const format = JSON.parse(formatStr || '{\"NFD\": 3}')\n const value = 0\n if (format.NFD) {\n valueFormat = value.toFixed(format.NFD)\n }\n }\n\n return valueFormat\n}\n\nfunction setCellValue(cell: Record<string, any>, field: Record<string, any>, data: Record<string, any>, params: Record<string, any>) {\n let value = data[field.name] || null\n\n switch (field.valueType) {\n case 'number': {\n let curNumber = parseFloat(value)\n if (isNaN(curNumber)) {\n curNumber = 0\n }\n cell.value = curNumber || 0\n\n if (field.format) {\n cell.numFmt = getNumberformat(field.format)\n }\n\n break\n }\n\n case 'date': {\n cell.value = value || ''\n break\n }\n case 'object': {\n cell.value = value.name || ''\n break\n }\n case 'boolean': {\n cell.value = Boolean(value || false)\n cell.numFmt = 'BOOLEAN'\n break\n }\n case 'enum': {\n if (value && field.ref) {\n const valueData = params.enums[field.ref].find((el) => el.value === value)\n value = valueData ? valueData.title : value\n }\n\n cell.value = value || ''\n break\n }\n default: {\n cell.value = value || ''\n break\n }\n }\n}\n\nfunction setGroupCellValue(params: Record<string, any>, cell: Record<string, any>, data: Record<string, any>) {\n if (data.length === 1) {\n switch (data[0].valueType) {\n case 'number':\n cell.value = Number(data[0].value || 0)\n break\n case 'date':\n if (data[0].value === '') {\n cell.value = null\n } else if (data[0].format) {\n cell.value = moment(data[0].value, data[0].format).toDate() || null\n } else {\n cell.value = data[0].value || null\n }\n break\n case 'object':\n cell.value = data[0].value.name || ''\n break\n case 'boolean':\n cell.value = Boolean(data[0].value || false)\n cell.numFmt = 'BOOLEAN'\n break\n default:\n cell.value = data[0].value || ''\n break\n }\n } else {\n let presentation = ''\n\n for (let i = 0; i < data.length; i++) {\n if (data[i].valueType === 'object') {\n presentation += data[i].value?.name || params.lang.undefined\n } else if (data[i].valueType === 'boolean') {\n presentation += data[i].value ? params.lang.boolean.true : params.lang.boolean.false\n } else {\n presentation += data[i].value\n }\n\n if (i < data.length - 1) {\n presentation = `${presentation}, `\n }\n }\n\n cell.value = presentation || ''\n }\n}\n\nasync function getEnums(lang: string) {\n try {\n const enums = {}\n\n let result: Record<string, any>[] = await sequelize.models.Enum.findAll({ include: [{ model: sequelize.models.EnumValue, as: 'values' }], order: ['name'] })\n\n for (const enumRow of result) {\n enums[enumRow.name] = enumRow.values.map((el: Record<string, any>) => {\n return { value: el.value, title: commonService.translateField(el, 'title', lang) }\n })\n }\n\n return enums\n } catch (error) {\n logger.error(`Error in app getEnums controller`, { meta: error })\n return []\n }\n}\n\nfunction dateToSerial(date: Date) {\n const timezoneOffset = date.getTimezoneOffset() / (60 * 24)\n const msDate = date.getTime() / 86400000 + (25569 - timezoneOffset)\n return msDate\n}\n\nfunction setColsWidth(ws: any, firstRow: number) {\n ws.columns.forEach((column: Record<string, any>) => {\n let maxLength = 6\n\n column.eachCell((cell) => {\n if (cell.row >= firstRow) {\n if (!cell.isMerged) {\n let cellLength: number\n\n if (cell.numFmt && cell.value != undefined) {\n switch (cell.type) {\n case xl.ValueType.Date: {\n const serialDate = dateToSerial(cell.value)\n const formattedDate = format(cell.numFmt, serialDate)\n cellLength = formattedDate.length\n break\n }\n case xl.ValueType.Number: {\n const formattedNumber = format(cell.numFmt, cell.value)\n cellLength = formattedNumber.length\n break\n }\n default: {\n const formatted = format(cell.numFmt, cell.value)\n cellLength = formatted.length\n break\n }\n }\n } else {\n cellLength = cell.value.toString().length\n }\n\n maxLength = Math.max(maxLength, cellLength)\n }\n }\n })\n\n if (maxLength > 50) {\n maxLength = 50\n }\n\n column.width = maxLength + 2\n })\n}\n\nfunction setPrintSettings(ws: any) {\n const lastCell = ws.getCell(ws.rowCount, ws.columnCount)\n\n ws.pageSetup.printArea = `A1:${lastCell.address}`\n}\n","import PDF from 'pdfmake'\nimport moment from 'moment'\nimport sequelize from '@/database/dbConnection'\nimport logger from '@/core/services/logger.service'\nimport commonService from '@/core/services/common.service'\nimport { Request, Response } from 'express'\nimport { TDocumentDefinitions } from 'pdfmake/interfaces'\n\nexport default {\n async generatePdf(req: Request, res: Response | null = null): Promise<void> {\n const params = { ...req.body }\n\n const pdfPrinter = new PDF(getFonts())\n\n const content = await getPdfContent(params)\n\n const docDefinition: TDocumentDefinitions = {\n content,\n defaultStyle: {\n font: 'Roboto',\n fontSize: params.pageFontSize || 12,\n },\n pageOrientation: params.pageOrientation || 'landscape',\n pageSize: params.pageSize || 'A4',\n pageMargins: [params.margins.left || 20, params.margins.top || 20, params.margins.right || 20, params.margins.bottom || 20],\n }\n\n const options = {}\n\n const pdfDoc = pdfPrinter.createPdfKitDocument(docDefinition, options)\n\n const chunks: any[] = []\n let result: any\n\n pdfDoc.on('data', function (chunk) {\n chunks.push(chunk)\n })\n\n pdfDoc.on('end', function () {\n result = Buffer.concat(chunks)\n\n if (res) {\n res.contentType('application/pdf')\n res.send(result)\n }\n })\n\n pdfDoc.end()\n },\n}\n\nfunction getFonts() {\n return {\n Courier: {\n normal: 'Courier',\n bold: 'Courier-Bold',\n italics: 'Courier-Oblique',\n bolditalics: 'Courier-BoldOblique',\n },\n Helvetica: {\n normal: 'Helvetica',\n bold: 'Helvetica-Bold',\n italics: 'Helvetica-Oblique',\n bolditalics: 'Helvetica-BoldOblique',\n },\n Times: {\n normal: 'Times-Roman',\n bold: 'Times-Bold',\n italics: 'Times-Italic',\n bolditalics: 'Times-BoldItalic',\n },\n Symbol: {\n normal: 'Symbol',\n },\n ZapfDingbats: {\n normal: 'ZapfDingbats',\n },\n Roboto: {\n normal: 'src/assets/fonts/Roboto-Regular.ttf',\n bold: 'src/assets/fonts/Roboto-Medium.ttf',\n italics: 'src/assets/fonts/Roboto-Italic.ttf',\n bolditalics: 'src/assets/fonts/Roboto-MediumItalic.ttf',\n },\n }\n}\n\nasync function getPdfContent(params: Record<string, any>) {\n if (params.rowGroups.length > 1) {\n const uniqueGroups: any[] = []\n let groupValues: string[] = []\n\n for (let i = 0; i < params.rowGroups.length; i++) {\n if (params.rowGroups[i].withParent !== true && i !== 0) {\n uniqueGroups.push(groupValues.length > 1 ? groupValues : groupValues[0])\n groupValues = []\n }\n\n groupValues.push(params.rowGroups[i])\n\n if (i === params.rowGroups.length - 1) {\n uniqueGroups.push(groupValues.length > 1 ? groupValues : groupValues[0])\n }\n }\n\n params.rowGroups = uniqueGroups\n }\n\n if (params.rowGroups.length > 0) {\n params.fields = params.fields.filter((el: Record<string, any>) => !params.calcs.find((calcEl: Record<string, any>) => calcEl.name === el.name))\n }\n\n params.enums = await getEnums(params.langCode)\n\n const content: any[] = []\n\n //print params and filters\n const paramsTable: any = {\n body: [],\n headerRows: 0,\n }\n\n if (params.periodPresentation) {\n const paramsRow: string[] = []\n\n let langType = params.periodPresentation.length > 20 ? params.lang.byPeriod : params.lang.byDate\n paramsRow.push(`${langType}:`)\n paramsRow.push(params.periodPresentation)\n\n paramsTable.body.push(paramsRow)\n }\n\n if (Array.isArray(params.filterPresentation) && params.filterPresentation.length > 0) {\n let filtersRow: any[] = []\n\n filtersRow.push(`${params.lang.filter}:`)\n filtersRow.push(params.filterPresentation[0])\n\n paramsTable.body.push(filtersRow)\n\n if (params.filterPresentation.length > 1) {\n for (let i = 1; i < params.filterPresentation.length; i++) {\n filtersRow = []\n\n filtersRow.push(' ')\n filtersRow.push(params.filterPresentation[i])\n\n paramsTable.body.push(filtersRow)\n }\n }\n }\n\n if (paramsTable.body.length > 0) {\n content.push({ table: paramsTable, layout: 'noBorders' })\n }\n\n const table: any = {\n body: [],\n headerRows: 0,\n }\n\n //print table header\n const headerRows = makeTableHeader(params)\n\n table.body.push(...headerRows)\n\n const bodyRows = []\n makeTableData(params.data, bodyRows, params)\n\n table.body.push(...bodyRows)\n\n if (params.showYTotal > 0 && params.totals.length > 0) {\n const footer = makeTableFooter(params)\n table.body.push(...footer)\n }\n\n content.push({\n table,\n layout: {\n paddingLeft: function (i, node) {\n return 2\n },\n paddingRight: function (i, node) {\n return 2\n },\n paddingTop: function (i, node) {\n return 2\n },\n paddingBottom: function (i, node) {\n return 2\n },\n },\n })\n\n return content\n}\n\nasync function getEnums(lang: string) {\n try {\n const enums: Record<string, any> = {}\n\n let result: Record<string, any>[] = await sequelize.models.Enum.findAll({ include: [{ model: sequelize.models.EnumValue, as: 'values' }], order: ['name'] })\n\n for (const enumRow of result) {\n enums[enumRow.name] = enumRow.values.map((el: Record<string, any>) => {\n return { value: el.value, title: commonService.translateField(el, 'title', lang) }\n })\n }\n\n return enums\n } catch (error) {\n logger.error(`Error in app getEnums controller`, { meta: error })\n return []\n }\n}\n\nfunction makeTableHeader(params: Record<string, any>) {\n const headerRows: any[] = []\n\n const borderColor = ['#d3d3d3', '#d3d3d3', '#d3d3d3', '#d3d3d3']\n const fillColor = '#e9ecef'\n\n if (params.rowGroups.length > 0) {\n const colSpan = params.hideDetails === true ? 1 : params.fields.length\n\n const firstRow: any[] = []\n\n firstRow.push({\n text: getHeaderTitle(params.rowGroups[0]),\n rowSpan: params.rowGroups.length === 1 && params.colGroups.length > 0 && params.hideDetails ? 2 : 1,\n colSpan,\n borderColor,\n fillColor,\n })\n\n if (colSpan > 1) {\n for (let i = 1; i < colSpan; i++) {\n firstRow.push({})\n }\n }\n\n if (params.colGroups.length === 0) {\n for (const calc of params.calcs) {\n firstRow.push({\n text: getHeaderTitle(calc.title),\n rowSpan: params.rowGroups.length + (params.hideDetails ? 0 : 1),\n borderColor,\n fillColor,\n })\n }\n } else {\n for (const colGroup of params.cols) {\n firstRow.push({\n text: params.colGroups[0].valueType === 'object' ? colGroup.name : colGroup,\n colSpan: params.calcs.length,\n borderColor,\n fillColor,\n })\n }\n\n if (params.showXTotal) {\n firstRow.push({\n text: params.lang.total,\n colSpan: params.calcs.length,\n borderColor,\n fillColor,\n })\n }\n }\n\n headerRows.push(firstRow)\n\n if (params.colGroups.length > 0 && params.rowGroups.length === 1 && params.hideDetails === true) {\n const secondRow: any[] = []\n\n secondRow.push({})\n\n for (const colGroup of params.cols) {\n for (const calc of params.calcs) {\n secondRow.push({\n text: calc.title,\n borderColor,\n fillColor,\n })\n }\n }\n\n if (params.showXTotal) {\n for (const calc of params.calcs) {\n secondRow.push({\n text: calc.title,\n borderColor,\n fillColor,\n })\n }\n }\n\n headerRows.push(secondRow)\n }\n\n if (params.colGroups.length === 0) {\n for (const group of params.rowGroups.slice(1)) {\n const nextRow: any[] = []\n\n nextRow.push({\n text: getHeaderTitle(group),\n colSpan,\n borderColor,\n fillColor,\n })\n\n if (colSpan > 1) {\n for (let i = 1; i < colSpan; i++) {\n nextRow.push({})\n }\n }\n\n for (const calc of params.calcs) {\n nextRow.push({})\n }\n\n headerRows.push(nextRow)\n }\n } else {\n if (params.rowGroups.length > 1) {\n let nextRow: any[] = []\n\n nextRow.push({\n text: getHeaderTitle(params.rowGroups[0]),\n colSpan,\n borderColor,\n fillColor,\n })\n\n for (const colGroup of params.colGroupsData) {\n for (const calc of params.calcs) {\n nextRow.push({\n text: getHeaderTitle(calc.title),\n rowSpan: params.rowGroups.length,\n borderColor,\n fillColor,\n })\n }\n }\n\n if (params.showXTotal) {\n for (const calc of params.calcs) {\n nextRow.push({\n text: getHeaderTitle(calc.title),\n rowSpan: params.rowGroups.length,\n borderColor,\n fillColor,\n })\n }\n }\n\n headerRows.push(nextRow)\n\n for (const group of params.rowGroups.slice(2)) {\n let nextRow: any[] = []\n\n nextRow.push({\n text: getHeaderTitle(group),\n colSpan,\n borderColor,\n fillColor,\n })\n\n for (const colGroup of params.colGroupsData) {\n for (const calc of params.calcs) {\n nextRow.push({})\n }\n }\n\n if (params.showXTotal) {\n for (const calc of params.calcs) {\n nextRow.push({})\n }\n }\n\n headerRows.push(nextRow)\n }\n }\n }\n\n if (params.hideDetails !== true) {\n let nextRow: any[] = []\n\n for (const field of params.fields) {\n nextRow.push({\n text: field.title,\n borderColor,\n fillColor,\n })\n }\n\n if (params.colGroups.length > 0) {\n if (params.rowGroups.length === 1) {\n for (const colGroup of params.colGroupsData) {\n for (const calc of params.calcs) {\n nextRow.push({\n text: calc.title,\n borderColor,\n fillColor,\n })\n }\n }\n\n if (params.showXTotal) {\n for (const calc of params.calcs) {\n nextRow.push({\n text: calc.title,\n borderColor,\n fillColor,\n })\n }\n }\n } else {\n for (const colGroup of params.colGroupsData) {\n for (const calc of params.calcs) {\n nextRow.push({})\n }\n }\n\n if (params.showXTotal) {\n for (const calc of params.calcs) {\n nextRow.push({})\n }\n }\n }\n } else {\n for (const calc of params.calcs) {\n nextRow.push({})\n }\n }\n\n headerRows.push(nextRow)\n }\n } else {\n let nextRow: any[] = []\n\n for (const field of params.fields) {\n nextRow.push({\n text: field.title,\n borderColor,\n fillColor,\n })\n }\n\n headerRows.push(nextRow)\n }\n\n return headerRows\n}\n\nfunction makeTableData(rows: Record<string, any>[], bodyRows: Record<string, any>[], params: Record<string, any>) {\n const borderColor = ['#d3d3d3', '#d3d3d3', '#d3d3d3', '#d3d3d3']\n const fillColor = '#f2f5fa'\n\n for (const row of rows) {\n const currRow: any[] = []\n\n let colSpan = params.hideDetails === true ? 1 : params.fields.length\n\n if (row.isGroup) {\n currRow.push({\n text: setGroupCellValue(row.groups, params),\n colSpan,\n borderColor,\n fillColor: row.children.length > 0 ? fillColor : null,\n })\n\n if (colSpan > 1) {\n for (let i = 1; i < colSpan; i++) {\n currRow.push({})\n }\n }\n\n if (params.colGroups.length > 0) {\n for (const total of row.totals) {\n currRow.push({\n text: formatValue(total.value || 0, total.format),\n borderColor,\n fillColor: row.children.length > 0 ? fillColor : null,\n alignment: total.textAlign ? total.textAlign : 'left',\n })\n }\n\n if (params.showXTotal) {\n for (const calc of params.calcs) {\n const calcTotal = row.totals.reduce((acc, el) => {\n if (el.id === calc.id) {\n return acc + el.value\n }\n\n return acc\n }, 0)\n\n currRow.push({\n text: formatValue(calcTotal || 0, calc.format),\n borderColor,\n fillColor: row.children.length > 0 ? fillColor : null,\n alignment: calc.textAlign ? calc.textAlign : 'left',\n })\n }\n }\n } else {\n for (const total of row.totals) {\n currRow.push({\n text: formatValue(total.value || 0, total.format),\n borderColor,\n fillColor: row.children.length > 0 ? fillColor : null,\n alignment: total.textAlign ? total.textAlign : 'left',\n })\n }\n }\n\n bodyRows.push(currRow)\n\n if (row.children.length > 0) {\n makeTableData(row.children, bodyRows, params)\n }\n } else {\n for (let i = 0; i < params.fields.length; i++) {\n currRow.push({\n text: setCellValue(params.fields[i], row, params),\n borderColor,\n alignment: params.fields[i].textAlign || 'left',\n })\n }\n\n if (params.colGroups.length > 0) {\n const groupValue = row[params.colGroups[0].name]\n\n const calcTotals = {}\n\n for (const groupData of params.cols) {\n for (let j = 0; j < params.calcs.length; j++) {\n let value = 0\n\n if ((params.colGroups[0].valueType === 'object' && groupData.id === groupValue?.id) || groupData === groupValue) {\n value = Number(row[params.calcs[j].name] || 0)\n }\n\n currRow.push({\n text: formatValue(value || 0, params.calcs[j].format),\n borderColor,\n alignment: params.calcs[j].textAlign ? params.calcs[j].textAlign : 'left',\n })\n\n if (Object.hasOwnProperty.call(calcTotals, params.calcs[j].name)) {\n calcTotals[params.calcs[j].name] += Number(value)\n } else {\n calcTotals[params.calcs[j].name] = Number(value)\n }\n }\n }\n\n if (params.showXTotal) {\n for (let j = 0; j < params.calcs.length; j++) {\n let value = calcTotals[params.calcs[j].name]\n\n currRow.push({\n text: formatValue(value || 0, params.calcs[j].format),\n borderColor,\n alignment: params.calcs[j].textAlign ? params.calcs[j].textAlign : 'left',\n })\n }\n }\n } else {\n if (params.rowGroups.length > 0) {\n for (let j = 0; j < params.calcs.length; j++) {\n let value = Number(row[params.calcs[j].name] || 0)\n\n currRow.push({\n text: formatValue(value || 0, params.calcs[j].format),\n borderColor,\n alignment: params.calcs[j].textAlign ? params.calcs[j].textAlign : 'left',\n })\n }\n }\n }\n\n bodyRows.push(currRow)\n }\n }\n}\n\nfunction makeTableFooter(params: Record<string, any>) {\n const borderColor = ['#d3d3d3', '#d3d3d3', '#d3d3d3', '#d3d3d3']\n const fillColor = '#f2f5fa'\n\n const footerRow: any[] = []\n\n if (params.rowGroups.length > 0) {\n const colSpan = params.hideDetails === true ? 1 : params.fields.length\n\n footerRow.push({\n text: params.lang.total,\n colSpan,\n borderColor,\n fillColor,\n })\n\n if (colSpan > 1) {\n for (let i = 1; i < colSpan; i++) {\n footerRow.push({})\n }\n }\n\n params.totals.forEach((total) => {\n footerRow.push({\n text: formatValue(total.value || 0, total.format),\n borderColor,\n fillColor,\n alignment: total.textAlign ? total.textAlign : 'left',\n })\n })\n\n if (params.colGroups.length > 0 && params.showXTotal) {\n params.calcs.map((calc, index) => {\n const calcTotal = params.totals.reduce((acc, el) => {\n if (el.id === calc.id) {\n return acc + el.value\n }\n\n return acc\n }, 0)\n\n footerRow.push({\n text: formatValue(calcTotal || 0, calc.format),\n borderColor,\n fillColor,\n alignment: calc.textAlign ? calc.textAlign : 'left',\n })\n })\n }\n } else {\n let needSpan = true\n let fieldIndex = 1\n\n for (const field of params.fields) {\n const existTotal = params.totals.find((el) => el.id === field.id)\n\n if (existTotal) {\n if (needSpan === true) {\n footerRow.push({\n text: params.lang.total,\n colSpan: fieldIndex - 1,\n borderColor,\n fillColor,\n })\n\n if (fieldIndex > 1) {\n for (let i = 1; i < fieldIndex - 1; i++) {\n footerRow.push({})\n }\n }\n\n needSpan = false\n }\n\n footerRow.push({\n text: formatValue(existTotal.value || 0, field.format),\n borderColor,\n fillColor,\n alignment: field.textAlign ? field.textAlign : 'left',\n })\n } else {\n if (!needSpan) {\n footerRow.push({\n text: '',\n borderColor,\n fillColor,\n })\n }\n }\n\n fieldIndex++\n }\n }\n\n return [footerRow]\n}\n\nfunction formatValue(value: string | number, formatStr: string) {\n if (formatStr) {\n const format = JSON.parse(formatStr || '{\"NFD\": 3}')\n\n if (format.NFD) {\n value = Number(value).toFixed(format.NFD)\n }\n }\n\n return value\n}\n\nfunction setCellValue(field: Record<string, any>, data: Record<string, any>, params: Record<string, any>) {\n let value = data[field.name] || ''\n\n switch (field.valueType) {\n case 'number': {\n let curNumber = parseFloat(value)\n if (isNaN(curNumber)) {\n curNumber = 0\n }\n value = curNumber || 0\n\n if (field.format) {\n const format = JSON.parse(field.format || '{\"NFD\": 3}')\n\n if (format.NFD) {\n value = Number(value).toFixed(format.NFD)\n }\n }\n\n break\n }\n\n case 'date': {\n value = value || ''\n break\n }\n\n case 'object': {\n value = value.name || ''\n break\n }\n case 'boolean': {\n value = Boolean(value || false)\n value = value ? params.lang.boolean.true : params.lang.boolean.false\n break\n }\n case 'enum': {\n if (value && field.ref) {\n const valueData = params.enums[field.ref].find((el) => el.value === value)\n value = valueData ? valueData.title : value\n }\n\n value = value || ''\n break\n }\n default: {\n value = value || ''\n break\n }\n }\n\n return value\n}\n\nfunction setGroupCellValue(data: Record<string, any>, params: Record<string, any>) {\n let value: any\n\n if (data.length === 1) {\n switch (data[0].valueType) {\n case 'number': {\n value = Number(data[0].value || 0)\n break\n }\n case 'date': {\n if (data[0].value === '') {\n value = ''\n } else if (data[0].format) {\n value = moment(data[0].value, data[0].format).toDate() || ''\n } else {\n value = data[0].value || ''\n }\n break\n }\n case 'boolean': {\n value = data[0].value || false\n value = value ? params.lang.boolean.true : params.lang.boolean.false\n break\n }\n case 'object': {\n value = data[0].value.name || ''\n break\n }\n default: {\n value = data[0].value || ''\n break\n }\n }\n } else {\n let presentation = ''\n\n for (let i = 0; i < data.length; i++) {\n if (data[i].valueType === 'object') {\n presentation += data[i].value?.name || params.lang.undefined\n } else if (data[i].valueType === 'boolean') {\n presentation += data[i].value ? params.lang.boolean.true : params.lang.boolean.false\n } else {\n presentation += data[i].value\n }\n\n if (i < data.length - 1) {\n presentation = `${presentation}, `\n }\n }\n\n value = presentation || ''\n }\n\n return value\n}\n\nfunction getHeaderTitle(data: Record<string, any>) {\n let text: string\n if (Array.isArray(data)) {\n text = data.map((obj) => obj.title).join(', ')\n } else if (typeof data === 'object') {\n text = data?.title\n } else {\n text = data\n }\n\n return text\n}\n","import express, { NextFunction, Request, Response } from 'express'\nimport { QueryTypes } from 'sequelize'\nimport fs from 'fs'\nimport { StatusCodes } from 'http-status-codes'\nimport accessRights from '@/middleware/accessRights'\nimport fileUpload from '@/middleware/fileUpload'\nimport sequelize from '@/database/dbConnection'\nimport logger from '@/core/services/logger.service'\n\nconst router = express.Router()\n\nexport default {\n async initRoutes() {\n const queryText =\n 'SELECT \\\n * \\\n FROM \\\n rest_api \\\n WHERE \\\n rest_api.\"markedToDelete\" = false \\\n AND rest_api.\"active\" = true'\n\n const restAPI: Record<string, any>[] = await sequelize.query(queryText, { type: QueryTypes.SELECT })\n\n for (const restAPIData of restAPI) {\n if (!restAPIData.methods) {\n continue\n }\n\n let module: any\n\n const modulePath = `restApi/${restAPIData.name}/server.module.js`\n\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n if (fs.existsSync(fullPath)) {\n module = __non_webpack_require__(fullPath)\n }\n\n if (!module) {\n continue\n }\n\n const apiMethods = JSON.parse(restAPIData.methods)\n\n for (const method of apiMethods) {\n if (!module[method.controller] || typeof module[method.controller] !== 'function') {\n logger.error('Rest API controller is not exist: ', { meta: { name: restAPIData.name, controller: method.controller } })\n continue\n }\n\n router[method.httpMethod.toLowerCase()](\n `/api/${restAPIData.path}/${method.path}`,\n setAccess(method.httpMethod, restAPIData),\n (req: Request, res: Response, next: NextFunction) => {\n const contentType = req.headers['content-type']\n if (contentType && contentType.includes('multipart/form-data')) {\n return fileUpload.array('files')(req, res, (err) => {\n if (err) {\n return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ message: `File upload error: ${err}` })\n }\n next()\n })\n } else {\n next()\n }\n },\n module[method.controller]\n )\n }\n }\n\n return router\n },\n}\n\nfunction setAccess(method: Record<string, any> = {}, restApi: Record<string, any>) {\n let accessMethod: any\n\n const accesRole: Record<string, any> = {}\n\n if (method.userRole) {\n accesRole.id = method.userRole\n } else if (restApi.accessRoleId) {\n accesRole.id = restApi.accessRoleId\n } else {\n accesRole.key = restApi.path\n }\n\n if (method.accessLevel) {\n accessMethod =\n method.accessLevel === 'CAN_REED'\n ? accessRights.canRead(accesRole)\n : method.accessLevel === 'CAN_MODIFY'\n ? accessRights.canModify(accesRole)\n : method.accessLevel === 'IS_AUTH'\n ? accessRights.isAuth\n : accessRights.isFullRights\n } else {\n accessMethod = method.httpMethod === 'GET' ? accessRights.canRead(accesRole) : accessRights.canModify(accesRole)\n }\n\n return accessMethod\n}\n","import fs from 'fs'\nimport path from 'path'\nimport moment from 'moment'\n\ninterface Options {\n path: string\n interval?: string\n}\n\nconst FORMAT_BY_UNIT: Record<string, string> = {\n m: 'YYYYMMDD-HHmm',\n h: 'YYYYMMDD-HH',\n d: 'YYYYMMDD',\n}\n\nfunction createRotatingStream({ path: logPath, interval = '1d' }: Options) {\n const logDir = path.resolve(logPath)\n fs.mkdirSync(logDir, { recursive: true })\n\n const unit = interval.slice(-1)\n const step = Number(interval.slice(0, -1))\n\n if (!FORMAT_BY_UNIT[unit] || !step) {\n throw new Error(`Invalid log interval: ${interval}`)\n }\n\n let currentKey = buildKey(moment())\n let stream = openStream(currentKey)\n\n function buildKey(date: moment.Moment) {\n const base = unit === 'm' ? date.clone().startOf('minute') : unit === 'h' ? date.clone().startOf('hour') : date.clone().startOf('day')\n\n const mod = unit === 'm' ? base.minute() % step : unit === 'h' ? base.hour() % step : 0\n\n base.subtract(mod, unit as moment.unitOfTime.DurationConstructor)\n return base.format(FORMAT_BY_UNIT[unit])\n }\n\n function openStream(key: string) {\n return fs.createWriteStream(path.join(logDir, `${key}.log`), { flags: 'a' })\n }\n\n function rotateIfNeeded() {\n const newKey = buildKey(moment())\n if (newKey !== currentKey) {\n stream.end()\n currentKey = newKey\n stream = openStream(currentKey)\n }\n }\n\n return {\n write(data: string) {\n rotateIfNeeded()\n stream.write(data + '\\n')\n },\n }\n}\n\nexport default createRotatingStream\n","import cron, { ScheduledTask } from 'node-cron'\nimport sequelize from '@/database/dbConnection'\nimport fs from 'fs'\nimport { StatusCodes } from 'http-status-codes'\nimport logger from '@/core/services/logger.service'\nimport { AppObject } from '@/src/types'\nimport { NextFunction, Request, Response } from 'express'\n\ninterface SessionScheduledJob {\n jobId: string\n jobExemplar: ScheduledTask\n}\ninterface ScheduledJobSchedule {\n [key: string]: any\n}\n\nconst sessionScheduledJobs: SessionScheduledJob[] = []\n\nexport default {\n async init(objects: Record<string, AppObject>) {\n if (process.env.NODE_APP_INSTANCE && process.env.NODE_APP_INSTANCE !== '0') {\n return\n }\n\n if (!sequelize.models.ScheduledJob) {\n logger.error(`Error in Scheduled Jobs init.`, { meta: 'Scheduled jobs is not initialized!!!' })\n return\n }\n\n const scheduledJobs: Record<string, any>[] = await sequelize.models.ScheduledJob.findAll({\n where: { active: true, markedToDelete: false },\n })\n\n if (Array.isArray(scheduledJobs) && scheduledJobs.length > 0) {\n for (const job of scheduledJobs) {\n const schedule: ScheduledJobSchedule = job.schedule\n\n const modulePath = `scheduledJobs/${job.name}/server.module.js`\n\n let jobModule: any\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n if (fs.existsSync(fullPath)) {\n jobModule = __non_webpack_require__(fullPath)\n } else {\n return console.log(`Serwer module for scheduled job \"${job.name}\" is not found!`)\n }\n\n if (schedule.dateFrom || schedule.dateTo) {\n const currentDate = new Date()\n\n if (schedule.dateFrom && currentDate < new Date(schedule.dateFrom)) {\n continue\n }\n\n if (schedule.dateTo && currentDate > new Date(schedule.dateTo)) {\n continue\n }\n }\n\n startCronSchedule(job, schedule, jobModule, objects)\n }\n }\n },\n async executeManually(req: Request, res: Response, next: NextFunction, object: AppObject) {\n const objectName = req.body.name\n\n if (!objectName) {\n const message = 'Object name is not correct!'\n logger.error(`Error in ${object.name} executeManually controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n let module: any\n const modulePath = `scheduledJobs/${objectName}/server.module.js`\n\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n if (fs.existsSync(fullPath)) {\n delete __non_webpack_require__.cache[__non_webpack_require__.resolve(fullPath)]\n module = __non_webpack_require__(fullPath)\n }\n\n if (!module) {\n const message = 'Scheduled job module is empty!'\n logger.error(`Error in ${object.name} executeManually controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n if (typeof module !== 'function') {\n const message = 'Scheduled job run function is not exist!'\n logger.error(`Error in ${object.name} executeManually controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n const historyRecord = await sequelize.models.ScheduledJobHistory.create({\n beginDate: new Date(),\n scheduledJobId: req.body.id,\n status: 'started',\n })\n try {\n const messages: Record<string, any>[] = []\n const result = await module(req.objects, messages)\n const errMessages = messages.find((mes) => mes.status === 'error')\n const infMessages = messages.find((mes) => mes.status === 'info')\n\n let errInfo = ''\n if (errMessages) {\n for (let mess of messages) {\n errInfo += mess.meta + '\\n'\n }\n\n await historyRecord.update({ endDate: new Date(), status: 'error', errorDescription: errInfo, userId: req.user?.id, manual: true })\n } else if (infMessages) {\n for (let mess of messages) {\n errInfo += mess.meta + '\\n'\n }\n\n await historyRecord.update({ endDate: new Date(), status: 'success', errorDescription: errInfo, userId: req.user?.id, manual: true })\n } else {\n await historyRecord.update({ endDate: new Date(), status: 'success', userId: req.user?.id, manual: true })\n }\n\n return { status: StatusCodes.OK, responseData: { executionComplited: true, result } }\n } catch (error) {\n logger.error(`Error in ${object.name} executeManually controller`, { meta: error })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error?.original?.message || error?.message } }\n }\n },\n}\n\nconst startCronSchedule = (job: Record<string, any>, schedule: ScheduledJobSchedule, jobModule: any, objects: Record<string, AppObject>) => {\n const cronSchedule = `${setTime(schedule.minutes, schedule.startTime, 'minutes')} \n ${setTime(schedule.hours, schedule.startTime, 'hours')} \n ${setUnits(schedule.daysOfMonth)} \n ${setUnits(schedule.months)} \n ${setUnits(schedule.daysOfWeek)}\n `\n\n const jobExemplar = cron.schedule(\n cronSchedule,\n async () => {\n const historyRecord = await sequelize.models.ScheduledJobHistory.create({\n beginDate: new Date(),\n scheduledJobId: job.id,\n status: 'started',\n })\n\n try {\n const messages: Record<string, any>[] = []\n\n await jobModule(objects, messages)\n const errMessages = messages.find((mes) => mes.status === 'error')\n const infMessages = messages.find((mes) => mes.status === 'info')\n let errInfo = ''\n if (errMessages) {\n for (let mess of messages) {\n errInfo += mess.meta + '\\n'\n }\n await historyRecord.update({ endDate: new Date(), status: 'error', errorDescription: errInfo })\n } else if (infMessages) {\n for (let mess of messages) {\n errInfo += mess.meta + '\\n'\n }\n await historyRecord.update({ endDate: new Date(), status: 'success', errorDescription: errInfo })\n } else {\n await historyRecord.update({ endDate: new Date(), status: 'success' })\n }\n } catch (error) {\n console.error('Error executing module code:', error)\n await historyRecord.update({ endDate: new Date(), status: 'error', errorDescription: error.message })\n }\n },\n {\n scheduled: false,\n }\n )\n\n jobExemplar.start()\n\n sessionScheduledJobs.push({\n jobId: job.id,\n jobExemplar,\n })\n}\n\nconst setTime = (time: string, startTime: string, timeInterval: string) => {\n if (time && time !== '00') {\n return `*/${Number(time)}`\n } else {\n if (startTime) {\n if (timeInterval === 'minutes') {\n return `${startTime.substring(3, 5)}`\n } else {\n return `${startTime.substring(0, 2)}`\n }\n } else {\n return '*'\n }\n }\n}\n\nconst setUnits = (units: string[]) => {\n if (units.length > 0) {\n let string = ''\n for (const unit of units) {\n string = string + unit\n if (units.length - 1 !== units.indexOf(unit)) {\n string = string + ','\n }\n }\n return string\n } else {\n return '*'\n }\n}\n","import nodemailer from 'nodemailer'\nimport { StatusCodes, getReasonPhrase } from 'http-status-codes'\nimport { v4 as uuidv4 } from 'uuid'\nimport { Op } from 'sequelize'\nimport sequelize from '@/database/dbConnection'\nimport cryptoGen from '@/core/auth/cryptoGen'\nimport logger from '@/core/services/logger.service'\n\ninterface EmailConfig {\n credentials: {\n host: string\n port: number\n secure: boolean\n auth: {\n user: string\n pass: string\n }\n tls: {\n rejectUnauthorized: boolean\n }\n }\n}\n\ninterface MailOptions {\n from: string\n to: string\n bcc?: string\n subject: string\n html: string\n}\n\ninterface ResultData {\n httpStatus: StatusCodes\n result: Record<string, any> | boolean\n}\n\nconst getRegistrationMailText = async (userEmail: string, event: string) => {\n const foundUser: Record<string, any> | null = await sequelize.models.User.findOne({ where: { email: userEmail } })\n const language = foundUser?.language\n const content = {\n en: {\n registration: {\n subject: 'Confirm your email',\n hello: 'Hello ',\n begining: ',<br>Thank you for your registration. Your account requires activation. Click the link below to confirm your email address:<br><br>',\n middle: '<br><br>Here are your login details:<br>Login: ',\n end: '<br><br>Important Safety Tips:<br>1. Always keep your account details in a safe place.<br>2. Never reveal your login and password to anyone.<br>3. Change your password regularly.<br>4. If you suspect someone is using your account illegally, please let us know immediately.',\n },\n passwordReset: {\n subject: 'Password Reset',\n metter: 'Password recovery for ',\n begining: '<br><br>Dear User,<br><br>We have received a request to change your account password ',\n middle: '<br>Click here to reset your password: ',\n end: '<br><br>If you do not want to reset your password, please ignore this message. The password will remain unchanged.<br><br>Sincerely,<br>Customer Service Team',\n },\n passwordResetConfirmation: {\n subject: 'Password Reset Successful',\n main: 'Dear User,<br><br>Your password has been successfully reset.<br><br>Sincerely,<br>Customer Service Team',\n },\n statusChange: {\n subject: 'User status',\n start: 'Dear User, <br><br>Your user status has been changed to:<br><br>',\n end: '<br><br>Sincerely,<br>Customer Service Team',\n },\n },\n pl: {\n registration: {\n subject: 'Potwierdź swój email',\n hello: 'Witaj ',\n begining: ',<br>Dziękujemy za rejestracje. Twoje konto wymaga aktywacji. Kliknij poniższy link, aby potwierdzić swój adres e-mail:<br><br>',\n middle: '<br><br>Oto twoje dane logowania:<br>Login: ',\n end: '<br><br>Ważne wskazówki dotyczące bezpieczeństwa:<br>1. Zawsze trzymaj dane do Twojego konta w bezpiecznym miejscu.<br>2. Nigdy nie ujawniaj nikomu swojego loginu i hasła.<br>3. Regularnie zmieniaj swoje hasło.<br>4. Jeśli podejrzewasz, że ktoś używa Twojego konta nielegalnie, prosimy o natychmiastowe poinformowanie nas o tym.',\n },\n passwordReset: {\n subject: 'Reset hasła',\n metter: 'Odzyskiwanie hasła do konta ',\n begining: '<br><br>Drogi Użytkowniku,<br><br>Otrzymaliśmy prośbę o zmianę hasła do konta ',\n middle: '<br>Kliknij, aby zresetować hasło: ',\n end: '<br><br>Jeśli nie chcesz resetować swojego hasła, zignoruj tę wiadomość. Hasło pozostanie niezmienione.<br><br>Z poważaniem,<br>Zespół Obsługi Klienta',\n },\n passwordResetConfirmation: {\n subject: 'Hasło Zresetowane Pomyślnie',\n main: 'Drogi Użytkowniku,<br><br>Twoje hasło zostało pomyślnie zresetowane.<br><br>Z poważaniem,<br>Dzial Obslugi Klienta',\n },\n statusChange: {\n subject: 'Status użytkownika',\n start: 'Drogi Użytkowniku, <br><br>Twój status użytkownika został zmieniony na:<br><br>',\n end: '<br><br>Z poważaniem,<br>Zespół Obsługi Klienta',\n },\n },\n fr: {\n registration: {\n subject: 'Confirme ton email',\n hello: 'Bonjour ',\n begining: ',<br>Merci pour votre inscription. Votre compte nécessite une activation. Cliquez sur le lien ci-dessous pour confirmer votre adresse e-mail:<br><br>',\n middle: '<br><br>Voici vos identifiants de connexion:<br>Login: ',\n end: \"<br><br>Conseils de sécurité importants:<br>1. Conservez toujours les détails de votre compte en lieu sûr.<br>2. Ne révélez jamais votre identifiant et votre mot de passe à qui que ce soit.<br>3. Changez votre mot de passe régulièrement.<br>4. Si vous pensez que quelqu'un utilise votre compte illégalement, veuillez nous en informer immédiatement.\",\n },\n passwordReset: {\n subject: 'Réinitialisation du mot de passe',\n metter: 'Récupération de mot de passe pour ',\n begining: '<br><br>Cher utilisateur,<br><br>Nous avons reçu une demande de changement de mot de passe de votre compte ',\n middle: '<br>Cliquez ici pour réinitialiser votre mot de passe: ',\n end: \"<br><br>Si vous ne souhaitez pas réinitialiser votre mot de passe, veuillez ignorer ce message. Le mot de passe restera inchangé.<br><br>Cordialement,<br>L'équipe du service client\",\n },\n passwordResetConfirmation: {\n subject: 'Réinitialisation du mot de passe réussie',\n main: \"Cher utilisateur,<br><br>Votre mot de passe a été réinitialisé avec succès.<br><br>Cordialement,<br>L'équipe du service client\",\n },\n statusChange: {\n subject: \"Statut de l'utilisateur\",\n start: \"Cher utilisateur, <br><br>Votre statut d'utilisateur a été changé en:<br><br>\",\n end: \"<br><br>Cordialement,<br>L'équipe du service client\",\n },\n },\n }\n\n if (language) {\n if (language in content) {\n return content[language][event]\n } else {\n return content['en'][event]\n }\n } else {\n return content['en'][event]\n }\n}\n\nexport default {\n async emailConfirmationInstructions(email: string, name: string, login: string, token: string): Promise<void> {\n const emailAccount = await getServiceEmailAccount().catch((error) => {\n logger.error('Error in getServiceEmailAccount', { meta: error })\n return\n })\n\n if (!emailAccount) {\n logger.error('Error in emailConfirmationInstructions ', { meta: 'Service email account not exist' })\n return\n }\n\n if (!emailAccount.password) {\n logger.error('Error in emailConfirmationInstructions ', { meta: 'Service email account password not set' })\n }\n\n emailAccount.password = cryptoGen.decrypt(JSON.parse(emailAccount.password))\n\n const emailConfig = prepareEmailConfig(emailAccount)\n const transporter = nodemailer.createTransport(emailConfig.credentials)\n\n transporter.verify(async function (error, success) {\n if (error) {\n logger.error('Error in emailConfirmationInstructions ', { meta: error })\n } else {\n const text = await getRegistrationMailText(email, 'registration')\n\n const emailConfirmationBaseUrl = `${process.env.ALLOW_ORIGIN}/email-confirmation`\n\n const html = text.hello + name + text.begining + '<a href=\"' + emailConfirmationBaseUrl + '/' + token + '\">Confirm Your Email Address</a>' + text.middle + login + text.end\n\n const mailOptions = prepareEmailOptions(emailAccount, email, text.subject, html)\n\n // send mail with defined transport object\n transporter.sendMail(mailOptions, async (error, info) => {\n if (error) {\n logger.error('Error while sending service email', { meta: error })\n } else {\n logger.verbose('Service Email sent', { meta: info })\n }\n })\n }\n })\n },\n\n async register(userObj: Record<string, any>): Promise<ResultData> {\n try {\n const existUser = await sequelize.models.User.findOne({ where: { [Op.or]: { email: userObj.email, login: userObj.login } } })\n\n if (existUser) {\n const errorMessage = 'A user with this login or email already exist'\n logger.error('Error in register Service', { meta: errorMessage })\n return { httpStatus: StatusCodes.BAD_REQUEST, result: { message: errorMessage } }\n }\n\n let userInfo: Record<string, any> = {\n email: userObj.email,\n login: userObj.login,\n uuid: uuidv4(),\n password: cryptoGen.createPasswordHash(userObj.password),\n name: userObj.name,\n isActive: false,\n fullRights: false,\n externalUser: false,\n emailConfirmationToken: cryptoGen.generateRandomToken(),\n referralToken: cryptoGen.generateRandomToken(),\n isFirm: userObj.isFirm,\n firmName: userObj.firmName,\n phone: userObj.phone,\n country: userObj.country,\n companyDepartment: userObj.companyDepartment,\n commercialInChargeOfYou: userObj.commercialInChargeOfYou,\n notVatNumber: userObj.notVatNumber,\n vatNumber: userObj.vatNumber,\n address: userObj.address,\n postalCode: userObj.postalCode,\n city: userObj.city,\n deliveryDepartment: userObj.deliveryDepartment,\n }\n\n const first = await firstUser()\n\n if (first === true) {\n userInfo.isActive = true\n userInfo.userState = 'Aktywny'\n userInfo.fullRights = true\n }\n\n return await sequelize.models.User.create(userInfo)\n .then(async (user: Record<string, any>) => {\n logger.info('New user was registered', { meta: JSON.stringify({ id: user.id, name: user.name }) })\n\n if (first === false) {\n this.emailConfirmationInstructions(user.email, user.name, user.login, user.emailConfirmationToken)\n }\n\n const responseData = { email: user.email, login: user.login, name: user.name }\n return { httpStatus: StatusCodes.OK, result: responseData }\n })\n .catch((error) => {\n logger.error('Error in register Service', { meta: error })\n return { httpStatus: StatusCodes.BAD_REQUEST, result: { message: 'User create error.' } }\n })\n } catch (error) {\n logger.error('Error in register Service', { meta: error })\n return { httpStatus: StatusCodes.BAD_REQUEST, result: { message: error } }\n }\n },\n\n async confirmEmailAddress(token: string): Promise<ResultData> {\n return await sequelize.models.User.findOne({ where: { emailConfirmationToken: token } })\n .then(async (user) => {\n // If an associated user with the given token is not found, then return failure\n if (!user) {\n logger.error('Error in confirmEmailAddress Service', { meta: 'Token not find.' })\n return { httpStatus: StatusCodes.NOT_FOUND, result: { message: getReasonPhrase(StatusCodes.NOT_FOUND) } }\n }\n\n // Go ahead and confirm the user email\n user = await user.update({ emailConfirmationToken: null })\n\n // If the user was not properly saved, stop here and return failure\n if (!user) {\n logger.error('Error in confirmEmailAddress Service', { meta: 'User not save.' })\n return {\n httpStatus: StatusCodes.INTERNAL_SERVER_ERROR,\n result: { message: getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR) },\n }\n }\n\n // If we have gotten this far, return success\n return { httpStatus: StatusCodes.OK, result: true }\n })\n .catch((error) => {\n logger.error('Error in confirmEmailAddress Service', { meta: error })\n return { httpStatus: StatusCodes.BAD_REQUEST, result: { errorDetails: error } }\n })\n },\n\n async resendEmailAddressConfirmationLink(email: string): Promise<ResultData> {\n try {\n let user: Record<string, any> | null = await sequelize.models.User.findOne({ where: { email: email } })\n let token = cryptoGen.generateRandomToken()\n\n // If a user is found, and they are still unverified, ONLY THEN update the token and send the email\n if (!(user && token)) {\n return {\n httpStatus: StatusCodes.BAD_REQUEST,\n result: { message: 'Email is already confirmed or does not exist in our records.' },\n }\n }\n\n // Overwrite the user record with new token.\n user = await user.update({ emailConfirmationToken: token })\n\n // If the user was not properly saved, stop here and return failure\n if (!user) {\n return {\n httpStatus: StatusCodes.INTERNAL_SERVER_ERROR,\n result: { message: getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR) },\n }\n }\n\n // If we have gotten this far, return success\n this.emailConfirmationInstructions(user.email, user.name, user.login, user.emailConfirmationToken)\n return { httpStatus: StatusCodes.OK, result: true }\n } catch (error) {\n logger.error('Error in resendEmailAddressConfirmationLink Service', { meta: error })\n return { httpStatus: StatusCodes.BAD_REQUEST, result: { message: error } }\n }\n },\n\n /**\n * Sends a password reset email to the user with the given email address.\n * The email contains a link to reset the password.\n * The link is valid for a limited time.\n * @param {string} email - The email address of the user who requested the password reset.\n */\n async forgotPassword(email: string, clientOrigin: string | undefined): Promise<ResultData> {\n try {\n if (!clientOrigin) {\n logger.error('Error in forgotPassword Service', { meta: 'Client origin is not defined' })\n return { httpStatus: StatusCodes.INTERNAL_SERVER_ERROR, result: { message: 'Client origin is not defined' } }\n }\n\n const foundUser: Record<string, any> | null = await sequelize.models.User.findOne({\n where: {\n email: email,\n },\n })\n\n if (!foundUser) {\n logger.error('Error in forgotPassword Service', { meta: 'Email not found' })\n return { httpStatus: StatusCodes.NOT_FOUND, result: { message: 'Email not found' } }\n }\n\n let token = cryptoGen.generateRandomToken()\n\n // Generate password reset token and save it\n const passwordResetTokenValid: number = Number(process.env.PASSWORD_RESET_TOKEN_VALID) || 3600000\n const updateData = {\n passwordResetToken: token,\n passwordResetExpires: Date.now() + passwordResetTokenValid,\n }\n\n const updatedUser: Record<string, any> = await foundUser.update({ ...updateData })\n\n // If the user was not properly saved, stop here and return failure\n if (!updatedUser) {\n logger.error('Error in forgotPassword Service', { meta: 'User not updated' })\n return {\n httpStatus: StatusCodes.INTERNAL_SERVER_ERROR,\n result: { message: getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR) },\n }\n }\n\n // If we have gotten this far, return success\n return emailPasswordResetInstructions(updatedUser.email, updatedUser.name, updatedUser.login, updatedUser.passwordResetToken, clientOrigin)\n } catch (error) {\n logger.error('Error in forgotPassword Service', { meta: error })\n return { httpStatus: StatusCodes.BAD_REQUEST, result: { message: error } }\n }\n },\n\n async isPasswordResetTokenValid(token: string): Promise<ResultData> {\n try {\n let user = await sequelize.models.User.findOne({ where: { passwordResetToken: token, passwordResetExpires: { [Op.gte]: Date.now() } } })\n return user ? { httpStatus: StatusCodes.OK, result: true } : { httpStatus: StatusCodes.BAD_REQUEST, result: false }\n } catch (error) {\n logger.error('Error in isPasswordResetTokenValid Service', { meta: error })\n return { httpStatus: StatusCodes.BAD_REQUEST, result: { message: error } }\n }\n },\n\n async resetPassword(token: string, newPassword: string): Promise<ResultData> {\n try {\n let user: Record<string, any> | null = await sequelize.models.User.findOne({ where: { passwordResetToken: token, passwordResetExpires: { [Op.gte]: Date.now() } } })\n\n // If an associated user with the given token is found and token hasn't expired yet, only then let's continue\n if (!user) {\n return { httpStatus: StatusCodes.NOT_FOUND, result: { message: getReasonPhrase(StatusCodes.NOT_FOUND) } }\n }\n\n // Overwrite the user variable with result from the new save.\n user = await user.update({ passwordResetToken: null, passwordResetExpires: null, password: cryptoGen.createPasswordHash(newPassword) })\n // If the user was not properly saved, stop here and return failure\n\n if (!user) {\n return {\n httpStatus: StatusCodes.INTERNAL_SERVER_ERROR,\n result: { message: getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR) },\n }\n }\n\n // If we have gotten this far, return success\n emailPasswordResetConfirmation(user.email, user.name)\n\n return { httpStatus: StatusCodes.OK, result: true }\n } catch (error) {\n logger.error('Error in resetPassword Service', { meta: error })\n return { httpStatus: StatusCodes.BAD_REQUEST, result: { message: error } }\n }\n },\n\n async emailOnUserStateChange(email: string, status: string): Promise<void> {\n const emailAccount = await getServiceEmailAccount().catch((error) => {\n logger.error('Error in getServiceEmailAccount', { meta: error })\n return\n })\n\n if (!emailAccount) {\n logger.error('Error in emailConfirmationInstructions ', { meta: 'Service email account not exist' })\n return\n }\n\n if (!emailAccount.password) {\n logger.error('Error in emailConfirmationInstructions ', { meta: 'Service email account password not set' })\n }\n\n emailAccount.password = cryptoGen.decrypt(JSON.parse(emailAccount.password))\n\n const emailConfig = prepareEmailConfig(emailAccount)\n const transporter = nodemailer.createTransport(emailConfig.credentials)\n\n transporter.verify(async function (error, success) {\n if (error) {\n logger.error('Error in emailConfirmationInstructions ', { meta: error })\n } else {\n const text = await getRegistrationMailText(email, 'statusChange')\n const mailOptions = prepareEmailOptions(emailAccount, email, text.subject, text.start + status + text.end)\n\n // send mail with defined transport object\n transporter.sendMail(mailOptions, async (error, info) => {\n if (error) {\n logger.error('Error while sending service email', { meta: error })\n } else {\n logger.verbose('Service Email sent', { meta: info })\n }\n })\n }\n })\n },\n}\n\nasync function firstUser(): Promise<boolean> {\n return await sequelize.models.User.findAll()\n .then((result) => {\n return result.length === 0\n })\n .catch(() => {\n return false\n })\n}\n\nasync function getServiceEmailAccount(): Promise<Record<string, any> | null> {\n return await sequelize.models.EmailAccount.findOne({ where: { isService: true } })\n}\n\nasync function emailPasswordResetInstructions(email: string, name: string, login: string, token: string, clientOrigin: string): Promise<ResultData> {\n const emailAccount = await getServiceEmailAccount()\n\n if (!emailAccount) {\n logger.error('Error in emailConfirmationInstructions ', { meta: 'Service email account not exist' })\n return { httpStatus: StatusCodes.INTERNAL_SERVER_ERROR, result: { message: 'Service email account not exist' } }\n }\n\n if (!emailAccount.password) {\n logger.error('Error in emailConfirmationInstructions ', { meta: 'Service email account password not set' })\n return { httpStatus: StatusCodes.INTERNAL_SERVER_ERROR, result: { message: 'Service email account password not set' } }\n }\n\n emailAccount.password = cryptoGen.decrypt(JSON.parse(emailAccount.password))\n\n let emailConfig = prepareEmailConfig(emailAccount)\n\n let transporter = nodemailer.createTransport(emailConfig.credentials)\n\n try {\n await transporter.verify()\n } catch (error) {\n logger.error('Error in emailConfirmationInstructions ', { meta: error })\n return { httpStatus: StatusCodes.INTERNAL_SERVER_ERROR, result: { message: `Email verification error. ${error}` } }\n }\n // Prepare the email content\n const text = await getRegistrationMailText(email, 'passwordReset')\n\n const passwordResetBaseUrl = `${clientOrigin}/password-reset`\n const html = text.metter + login + text.begining + login + text.middle + '<a href=\"' + passwordResetBaseUrl + '/' + token + '\">Reset Password</a>' + text.end\n\n const mailOptions = prepareEmailOptions(emailAccount, email, text.subject, html)\n\n // send mail with defined transport object\n return await transporter\n .sendMail(mailOptions)\n .then((info) => {\n logger.verbose('Service Email sent', { meta: info })\n return { httpStatus: StatusCodes.OK, result: { message: 'OK' } }\n })\n .catch((error) => {\n logger.error('Error while sending service email', { meta: error })\n return { httpStatus: StatusCodes.INTERNAL_SERVER_ERROR, result: { message: error } }\n })\n}\n\nasync function emailPasswordResetConfirmation(email: string, name: string): Promise<void> {\n const emailAccount = await getServiceEmailAccount().catch((error) => {\n logger.error('Error in getServiceEmailAccount', { meta: error })\n return\n })\n\n if (!emailAccount) {\n logger.error('Error in emailConfirmationInstructions ', { meta: 'Service email account not exist' })\n return\n }\n\n if (!emailAccount.password) {\n logger.error('Error in emailConfirmationInstructions ', { meta: 'Service email account password not set' })\n }\n\n emailAccount.password = cryptoGen.decrypt(JSON.parse(emailAccount.password))\n\n const emailConfig = prepareEmailConfig(emailAccount)\n const transporter = nodemailer.createTransport(emailConfig.credentials)\n\n transporter.verify(async function (error, success) {\n if (error) {\n logger.error('Error in emailConfirmationInstructions ', { meta: error })\n } else {\n const text = await getRegistrationMailText(email, 'passwordResetConfirmation')\n const mailOptions = prepareEmailOptions(emailAccount, email, text.subject, text.main)\n\n // send mail with defined transport object\n transporter.sendMail(mailOptions, async (error, info) => {\n if (error) {\n logger.error('Error while sending service email', { meta: error })\n } else {\n logger.verbose('Service Email sent', { meta: info })\n }\n })\n }\n })\n}\n\nfunction prepareEmailConfig(emailAccount: Record<string, any>): EmailConfig {\n return {\n credentials: {\n host: emailAccount.smtpHost,\n port: emailAccount.smtpPort,\n secure: emailAccount.smtpTls,\n auth: {\n user: emailAccount.user,\n pass: emailAccount.password,\n },\n tls: {\n rejectUnauthorized: emailAccount.smtpTls,\n },\n },\n }\n}\n\nfunction prepareEmailOptions(emailAccount: Record<string, any>, to: string, subject: string, html: string): MailOptions {\n return {\n from: emailAccount.name,\n to,\n bcc: emailAccount.name,\n subject,\n html,\n }\n}\n","import fs from 'fs'\nimport { ModelStatic, Model, Op, Association } from 'sequelize'\nimport { AppObject } from '@/src/types'\n\ninterface Params {\n event?: 'update' | 'delete'\n oldValue?: AppObject\n newValue?: Record<string, unknown>\n objectId?: string\n changeDeletionMark?: boolean\n serverModule?: string\n module?: string\n info?: string\n}\n\nexport default {\n async updateInitialData(object: ModelStatic<Model<any, any>>, filename: string, params: Params = {}): Promise<void> {\n const basePath = 'src/modules'\n const structural = isStructuralObject(object.tableName)\n\n if (params.event === 'delete') {\n if (structural) {\n deleteInitialData(object.tableName, params.oldValue as Record<string, any>, basePath)\n\n if (object.tableName === 'common_modules') {\n updateCommonModulesInitialData(object, filename)\n }\n return\n }\n }\n\n const include: Array<{ model: ModelStatic<Model<any, any>>; as: string }> = []\n const includeOrders: Array<[any, string, string]> = []\n\n if (object.associations) {\n for (const as in object.associations) {\n if (object.associations[as].isMultiAssociation) {\n if (object.associations[as].options._noTablePart) {\n continue\n }\n\n let model = object.associations[as].target\n include.push({ model, as })\n includeOrders.push([{ model, as }, 'rowNumber', 'ASC'])\n }\n }\n\n if (object.tableName === 'view_settings' || object.tableName === 'print_forms') {\n if (object.associations['appObject']) {\n include.push({ model: object.associations['appObject'].target, as: 'appObject' })\n }\n }\n }\n\n const where: Record<string, unknown> = {}\n if (structural) {\n where['id'] = params?.objectId\n }\n\n try {\n const result = await object.findAll({\n where,\n order: ['id', ...includeOrders],\n include,\n })\n\n const parsedResult: Record<string, any>[] = JSON.parse(JSON.stringify(result))\n\n if (object.tableName === 'app_objects') {\n handleAppObjects(parsedResult, basePath, params)\n } else if (object.tableName === 'view_settings') {\n handleViewSettings(parsedResult, basePath, params)\n } else if (object.tableName === 'report_settings') {\n handleReportSettings(parsedResult, basePath, params)\n } else if (object.tableName === 'data_processors') {\n handleDataProcessors(parsedResult, basePath, params)\n } else if (object.tableName === 'scheduled_jobs') {\n handleScheduledJobs(parsedResult, basePath, params)\n } else if (object.tableName === 'rest_api') {\n handleRestApi(parsedResult, basePath, params)\n } else if (object.tableName === 'components') {\n handleComponents(parsedResult, basePath, params)\n } else if (object.tableName === 'workers') {\n handleWorkers(parsedResult, basePath, params)\n } else if (object.tableName === 'common_commands') {\n handleCommonCommands(parsedResult, basePath, params)\n } else if (object.tableName === 'print_forms') {\n handlePrintForms(parsedResult, basePath, params)\n } else if (object.tableName === 'common_modules') {\n handleCommonModules(parsedResult, basePath, params)\n updateCommonModulesInitialData(object, filename)\n } else {\n writeInitialData(parsedResult, filename)\n }\n } catch (error) {\n console.error(error)\n }\n },\n\n async updatePredefinedInitialData(object: AppObject): Promise<void> {\n const attributes = Object.keys(object.model.rawAttributes)\n const associationForeignKeys = Object.values(object.model.associations).map((assoc: Association) => assoc.foreignKey)\n const attributesToExclude = attributes.filter((attr) => associationForeignKeys.includes(attr))\n\n try {\n const result = await object.model.findAll({\n order: ['id'],\n where: { predefinedName: { [Op.ne]: null } },\n attributes: { exclude: attributesToExclude },\n })\n\n const strResult = JSON.stringify(result, null, 4)\n const filePath = `src/modules/catalogs/${object.name}/predefined.json`\n\n fs.writeFile(filePath, strResult, function (error) {\n if (error) console.error(error)\n })\n } catch (error) {\n console.error(error)\n }\n },\n\n async updateEnums() {\n const enums = `${process.cwd()}/src/database/initialdata/enums.json`\n const flattenedEnums = `${process.cwd()}/src/modules/enums/index.json`\n\n const rawEnums = JSON.parse(fs.readFileSync(enums, 'utf-8'))\n\n const rebuiltIndex: Record<string, string[]> = {}\n for (const enumItem of rawEnums) {\n const key = enumItem.name\n if (!key) continue\n rebuiltIndex[key] = enumItem.values?.map((v: any) => v.value) || []\n }\n\n let existingIndex: Record<string, string[]> = {}\n if (fs.existsSync(flattenedEnums)) {\n existingIndex = JSON.parse(fs.readFileSync(flattenedEnums, 'utf-8'))\n }\n\n const finalIndex: Record<string, string[]> = {}\n\n for (const [key, values] of Object.entries(rebuiltIndex)) {\n finalIndex[key] = values\n }\n\n fs.writeFileSync(flattenedEnums, JSON.stringify(finalIndex, null, 2), 'utf-8')\n },\n}\n\nasync function updateCommonModulesInitialData(object: ModelStatic<Model<any, any>>, filename: string) {\n const fullResult = await object.findAll({\n attributes: { exclude: ['module'] },\n order: ['id'],\n })\n\n const fullParsedResult: Record<string, any>[] = JSON.parse(JSON.stringify(fullResult))\n\n writeInitialData(fullParsedResult, filename)\n}\n\nfunction writeInitialData(parsedResult: Record<any, any>, filename: string) {\n const srtResult = JSON.stringify(parsedResult, null, 4)\n const filePath = `src/database/initialdata/${filename}.json`\n\n fs.writeFileSync(filePath, srtResult)\n}\n\nfunction handleAppObjects(appObjects: Record<string, any>[], basePath: string, params: Params) {\n for (const appObject of appObjects as Record<string, any>[]) {\n const { module: clientModule, moduleV3: clientModuleV3, ...appObjectMeta } = appObject\n\n const folderName = `${appObjectMeta.type}s/${appObjectMeta.name}`\n const folderPath = `${basePath}/${folderName}`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name || params.oldValue?.type !== params.newValue?.type) {\n const oldFolderName = `${params.oldValue?.type}s/${params.oldValue?.name}`\n const oldFolderPath = `${basePath}/${oldFolderName}`\n\n try {\n fs.renameSync(oldFolderPath, folderPath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n const structPath = `${folderPath}/object.struct.json`\n const struct = JSON.stringify(appObjectMeta, null, 4)\n\n fs.writeFile(structPath, struct, function (error) {\n if (error) console.error(error)\n })\n\n if (params.changeDeletionMark) {\n continue\n }\n\n if (clientModule !== undefined) {\n const clientModulePath = `${folderPath}/client.module.js`\n if (clientModule) {\n fs.writeFile(clientModulePath, `export default ${clientModule}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(clientModulePath)) {\n fs.rmSync(clientModulePath, {\n force: true,\n })\n }\n }\n }\n\n if (clientModuleV3 !== undefined) {\n const clientModuleV3Path = `${folderPath}/client.v3.module.js`\n if (clientModuleV3) {\n fs.writeFile(clientModuleV3Path, `export default ${clientModuleV3}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(clientModuleV3Path)) {\n fs.rmSync(clientModuleV3Path, {\n force: true,\n })\n }\n }\n }\n\n if (Object.prototype.hasOwnProperty.call(params, 'serverModule')) {\n const serverModulePath = `${folderPath}/server.module.js`\n if (params.serverModule) {\n fs.writeFile(serverModulePath, `${params.serverModule}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(serverModulePath)) {\n fs.rmSync(serverModulePath, {\n force: true,\n })\n }\n }\n }\n\n if (Object.prototype.hasOwnProperty.call(params, 'info')) {\n const infoPath = `${folderPath}/object.info.md`\n if (params.info) {\n fs.writeFile(infoPath, `${params.info}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(infoPath)) {\n fs.rmSync(infoPath, {\n force: true,\n })\n }\n }\n }\n }\n}\n\nfunction handleViewSettings(viewSettings: Record<string, any>[], basePath: string, params: Params) {\n for (const viewSetting of viewSettings) {\n const { module: clientModule, moduleV3: clientModuleV3, appObject, ...viewMeta } = viewSetting\n\n const folderName = `${appObject.type}s/${appObject.name}/views/${viewMeta.name}`\n const folderPath = `${basePath}/${folderName}`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name) {\n const oldFolderName = `${appObject.type}s/${appObject.name}/views/${params.oldValue?.name}`\n const oldFolderPath = `${basePath}/${oldFolderName}`\n\n try {\n fs.renameSync(oldFolderPath, folderPath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n const struct = JSON.stringify(viewMeta, null, 4)\n\n const structPath = `${folderPath}/view.struct.json`\n\n fs.writeFile(structPath, struct, function (error) {\n if (error) console.error(error)\n })\n\n if (params.changeDeletionMark) {\n continue\n }\n\n const clientModulePath = `${folderPath}/client.module.js`\n if (clientModule) {\n fs.writeFile(clientModulePath, `export default ${clientModule}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(clientModulePath)) {\n fs.rmSync(clientModulePath)\n }\n }\n\n const clientModuleV3Path = `${folderPath}/client.v3.module.js`\n if (clientModuleV3) {\n fs.writeFile(clientModuleV3Path, clientModuleV3, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(clientModuleV3Path)) {\n fs.rmSync(clientModuleV3Path)\n }\n }\n\n if (Object.prototype.hasOwnProperty.call(params, 'serverModule')) {\n const serverModulePath = `${folderPath}/server.module.js`\n if (params.serverModule) {\n fs.writeFile(serverModulePath, `${params.serverModule}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(serverModulePath)) {\n fs.rmSync(serverModulePath, {\n force: true,\n })\n }\n }\n }\n\n if (Object.prototype.hasOwnProperty.call(params, 'info')) {\n const infoPath = `${folderPath}/view.info.md`\n if (params.info) {\n fs.writeFile(infoPath, `${params.info}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(infoPath)) {\n fs.rmSync(infoPath, {\n force: true,\n })\n }\n }\n }\n }\n}\n\nfunction handleReportSettings(reportSettings: Record<string, any>[], basePath: string, params: Params) {\n for (const reportSetting of reportSettings) {\n const { dataQuery, ...reportMeta } = reportSetting\n\n const folderName = `reports/${reportSetting.name}`\n const folderPath = `${basePath}/${folderName}`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name) {\n const oldFolderName = `reports/${params.oldValue?.name}`\n const oldFolderPath = `${basePath}/${oldFolderName}`\n\n try {\n fs.renameSync(oldFolderPath, folderPath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n const struct = JSON.stringify(reportMeta, null, 4)\n const structPath = `${folderPath}/report.struct.json`\n\n fs.writeFile(structPath, struct, function (error) {\n if (error) console.error(error)\n })\n\n if (params.changeDeletionMark) {\n continue\n }\n\n if (dataQuery) {\n const dataQueryPath = `${folderPath}/data.query.sql`\n\n fs.writeFile(dataQueryPath, `${dataQuery}`, function (error) {\n if (error) console.error(error)\n })\n }\n\n const serverModulePath = `${folderPath}/server.module.js`\n if (params.serverModule) {\n fs.writeFile(serverModulePath, `${params.serverModule}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(serverModulePath)) {\n fs.rmSync(serverModulePath, {\n force: true,\n })\n }\n }\n\n if (Object.prototype.hasOwnProperty.call(params, 'info')) {\n const infoPath = `${folderPath}/report.info.md`\n if (params.info) {\n fs.writeFile(infoPath, `${params.info}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(infoPath)) {\n fs.rmSync(infoPath, {\n force: true,\n })\n }\n }\n }\n }\n}\n\nfunction handleDataProcessors(dataProcessors: Record<string, any>[], basePath: string, params: Params) {\n for (const dataProcessor of dataProcessors) {\n const folderName = `dataProcessors/${dataProcessor.name}`\n const folderPath = `${basePath}/${folderName}`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name) {\n const oldFolderName = `dataProcessors/${params.oldValue?.name}`\n const oldFolderPath = `${basePath}/${oldFolderName}`\n\n try {\n fs.renameSync(oldFolderPath, folderPath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n const struct = JSON.stringify(dataProcessor, null, 4)\n const structPath = `${folderPath}/processor.struct.json`\n\n fs.writeFile(structPath, struct, function (error) {\n if (error) console.error(error)\n })\n\n const serverModulePath = `${folderPath}/server.module.js`\n if (params.serverModule) {\n fs.writeFile(serverModulePath, `${params.serverModule}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(serverModulePath)) {\n fs.rmSync(serverModulePath, {\n force: true,\n })\n }\n }\n }\n}\n\nfunction handleScheduledJobs(jobSettings: Record<string, any>[], basePath: string, params: Params) {\n for (const jobSetting of jobSettings) {\n const folderName = `scheduledJobs/${jobSetting.name}`\n const folderPath = `${basePath}/${folderName}`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name) {\n const oldFolderName = `scheduledJobs/${params.oldValue?.name}`\n const oldFolderPath = `${basePath}/${oldFolderName}`\n\n try {\n fs.renameSync(oldFolderPath, folderPath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n const struct = JSON.stringify(jobSetting, null, 4)\n const structPath = `${folderPath}/job.struct.json`\n\n fs.writeFile(structPath, struct, function (error) {\n if (error) console.error(error)\n })\n\n if (params.changeDeletionMark) {\n continue\n }\n\n const serverModulePath = `${folderPath}/server.module.js`\n if (params.serverModule) {\n fs.writeFile(serverModulePath, `${params.serverModule}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(serverModulePath)) {\n fs.rmSync(serverModulePath, {\n force: true,\n })\n }\n }\n\n if (Object.prototype.hasOwnProperty.call(params, 'info')) {\n const infoPath = `${folderPath}/job.info.md`\n if (params.info) {\n fs.writeFile(infoPath, `${params.info}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(infoPath)) {\n fs.rmSync(infoPath, {\n force: true,\n })\n }\n }\n }\n }\n}\n\nfunction handleRestApi(restApiSettings: Record<string, any>[], basePath: string, params: Params) {\n for (const restApiSetting of restApiSettings) {\n const folderName = `restApi/${restApiSetting.name}`\n const folderPath = `${basePath}/${folderName}`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name) {\n const oldFolderName = `restApi/${params.oldValue?.name}`\n const oldFolderPath = `${basePath}/${oldFolderName}`\n\n try {\n fs.renameSync(oldFolderPath, folderPath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n const struct = JSON.stringify(restApiSetting, null, 4)\n const structPath = `${folderPath}/api.struct.json`\n\n fs.writeFile(structPath, struct, function (error) {\n if (error) console.error(error)\n })\n\n if (params.changeDeletionMark) {\n continue\n }\n\n const serverModulePath = `${folderPath}/server.module.js`\n if (params.serverModule) {\n fs.writeFile(serverModulePath, `${params.serverModule}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(serverModulePath)) {\n fs.rmSync(serverModulePath, {\n force: true,\n })\n }\n }\n\n if (Object.prototype.hasOwnProperty.call(params, 'info')) {\n const infoPath = `${folderPath}/api.info.md`\n if (params.info) {\n fs.writeFile(infoPath, `${params.info}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(infoPath)) {\n fs.rmSync(infoPath, {\n force: true,\n })\n }\n }\n }\n }\n}\n\nfunction handleComponents(components: Record<string, any>[], basePath: string, params: Params) {\n for (const component of components) {\n const { module, moduleV3, ...componentMeta } = component\n\n const folderName = `components/${component.name}`\n const folderPath = `${basePath}/${folderName}`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name) {\n const oldFolderName = `components/${params.oldValue?.name}`\n const oldFolderPath = `${basePath}/${oldFolderName}`\n\n try {\n fs.renameSync(oldFolderPath, folderPath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n const struct = JSON.stringify(componentMeta, null, 4)\n const structPath = `${folderPath}/component.struct.json`\n\n fs.writeFile(structPath, struct, function (error) {\n if (error) console.error(error)\n })\n\n if (params.changeDeletionMark) {\n continue\n }\n\n if (module) {\n const modulePath = `${folderPath}/client.module.js`\n\n fs.writeFile(modulePath, `export default ${module}`, function (error) {\n if (error) console.error(error)\n })\n }\n\n if (moduleV3) {\n const modulePathV3 = `${folderPath}/client.v3.module.js`\n\n fs.writeFile(modulePathV3, moduleV3, function (error) {\n if (error) console.error(error)\n })\n }\n\n if (Object.prototype.hasOwnProperty.call(params, 'serverModule')) {\n const serverModulePath = `${folderPath}/server.module.js`\n if (params.serverModule) {\n fs.writeFile(serverModulePath, `${params.serverModule}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(serverModulePath)) {\n fs.rmSync(serverModulePath, {\n force: true,\n })\n }\n }\n }\n }\n}\n\nfunction handleWorkers(workers: Record<string, any>[], basePath: string, params: Params) {\n for (const worker of workers) {\n const { moduleV3, ...workerMeta } = worker\n\n const folderName = `workers/${worker.name}`\n const folderPath = `${basePath}/${folderName}`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name) {\n const oldFolderName = `workers/${params.oldValue?.name}`\n const oldFolderPath = `${basePath}/${oldFolderName}`\n\n try {\n fs.renameSync(oldFolderPath, folderPath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n const struct = JSON.stringify(workerMeta, null, 4)\n const structPath = `${folderPath}/worker.struct.json`\n\n fs.writeFile(structPath, struct, function (error) {\n if (error) console.error(error)\n })\n\n if (params.changeDeletionMark) {\n continue\n }\n\n if (moduleV3) {\n const modulePathV3 = `${folderPath}/client.v3.module.js`\n\n fs.writeFile(modulePathV3, `export default ${moduleV3}`, function (error) {\n if (error) console.error(error)\n })\n }\n\n if (Object.prototype.hasOwnProperty.call(params, 'serverModule')) {\n const serverModulePath = `${folderPath}/server.module.js`\n if (params.serverModule) {\n fs.writeFile(serverModulePath, `${params.serverModule}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(serverModulePath)) {\n fs.rmSync(serverModulePath, {\n force: true,\n })\n }\n }\n }\n }\n}\n\nfunction handleCommonCommands(components: Record<string, any>[], basePath: string, params: Params) {\n for (const component of components) {\n const { module, moduleV3, ...commandMeta } = component\n\n const folderName = `commonCommands/${component.name}`\n const folderPath = `${basePath}/${folderName}`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name) {\n const oldFolderName = `commonCommands/${params.oldValue?.name}`\n const oldFolderPath = `${basePath}/${oldFolderName}`\n\n try {\n fs.renameSync(oldFolderPath, folderPath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n const struct = JSON.stringify(commandMeta, null, 4)\n const structPath = `${folderPath}/command.struct.json`\n\n fs.writeFile(structPath, struct, function (error) {\n if (error) console.error(error)\n })\n\n if (params.changeDeletionMark) {\n continue\n }\n\n if (module) {\n const modulePath = `${folderPath}/client.module.js`\n\n fs.writeFile(modulePath, `${module}`, function (error) {\n if (error) console.error(error)\n })\n }\n\n if (moduleV3) {\n const modulePathV3 = `${folderPath}/client.v3.module.js`\n\n fs.writeFile(modulePathV3, moduleV3, function (error) {\n if (error) console.error(error)\n })\n }\n }\n}\n\nfunction handlePrintForms(printForms: Record<string, any>[], basePath: string, params: Params) {\n for (const printForm of printForms) {\n const { module: clientModule, moduleV3: clientModuleV3, serverModule, appObject, ...itemMeta } = printForm\n\n const folderName = `${appObject.type}s/${appObject.name}/printForms/${itemMeta.name}`\n const folderPath = `${basePath}/${folderName}`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name) {\n const oldFolderName = `${appObject.type}s/${appObject.name}/printForms/${params.oldValue?.name}`\n const oldFolderPath = `${basePath}/${oldFolderName}`\n\n try {\n fs.renameSync(oldFolderPath, folderPath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n const struct = JSON.stringify(itemMeta, null, 4)\n\n const structPath = `${folderPath}/form.struct.json`\n\n fs.writeFile(structPath, struct, function (error) {\n if (error) console.error(error)\n })\n\n if (params.changeDeletionMark) {\n continue\n }\n\n if (clientModule) {\n const clientModulePath = `${folderPath}/client.module.js`\n\n fs.writeFile(clientModulePath, `export default ${clientModule}`, function (error) {\n if (error) console.error(error)\n })\n }\n\n if (clientModuleV3) {\n const clientModulePathV3 = `${folderPath}/client.v3.module.js`\n\n fs.writeFile(clientModulePathV3, `export default ${clientModuleV3}`, function (error) {\n if (error) console.error(error)\n })\n }\n\n if (serverModule) {\n const serverModulePath = `${folderPath}/server.module.js`\n\n fs.writeFile(serverModulePath, `${serverModule}`, function (error) {\n if (error) console.error(error)\n })\n }\n }\n}\n\nfunction handleCommonModules(commonModules: Record<string, any>[], basePath: string, params: Params) {\n const folderName = `commonModules`\n const folderPath = `${basePath}/${folderName}`\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n for (const commonModule of commonModules) {\n const modulePath = `${basePath}/commonModules/${commonModule.name}.js`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name) {\n const oldFileName = `commonModules/${params.oldValue?.name}.js`\n const oldFilePath = `${basePath}/${oldFileName}`\n\n try {\n fs.renameSync(oldFilePath, modulePath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (params.module) {\n fs.writeFile(modulePath, `${params.module}`, function (error) {\n if (error) console.error(error)\n })\n }\n }\n}\n\nfunction isStructuralObject(tableName: string) {\n const structuralObjects = [\n 'app_objects',\n 'view_settings',\n 'report_settings',\n 'data_processors',\n 'scheduled_jobs',\n 'rest_api',\n 'workers',\n 'components',\n 'print_forms',\n 'common_modules',\n ]\n\n return structuralObjects.includes(tableName)\n}\n\nfunction deleteInitialData(tableName: string, deletedObject: Record<string, any>, basePath: string) {\n let folderName: string | undefined\n\n switch (tableName) {\n case 'app_objects':\n folderName = `${deletedObject.type}s/${deletedObject.name}`\n break\n case 'view_settings':\n folderName = `${deletedObject.appObject.type}s/${deletedObject.appObject.name}/views/${deletedObject.name}`\n break\n case 'workers':\n folderName = `workers/${deletedObject.name}`\n break\n case 'report_settings':\n folderName = `reports/${deletedObject.name}`\n break\n case 'data_processors':\n folderName = `dataProcessors/${deletedObject.name}`\n break\n case 'scheduled_jobs':\n folderName = `scheduledJobs/${deletedObject.name}`\n break\n case 'components':\n folderName = `components/${deletedObject.name}`\n break\n case 'common_commands':\n folderName = `commonCommands/${deletedObject.name}`\n break\n case 'rest_api':\n folderName = `restApi/${deletedObject.name}`\n break\n case 'print_forms':\n folderName = `${deletedObject.appObject.type}s/${deletedObject.appObject.name}/printForms/${deletedObject.name}`\n break\n case 'common_modules':\n folderName = `commonModules/${deletedObject.name}.js`\n break\n }\n\n if (folderName) {\n const folderPath = `${basePath}/${folderName}`\n\n if (fs.existsSync(folderPath)) {\n fs.rmSync(folderPath, {\n force: true,\n recursive: true,\n })\n }\n\n return\n }\n}\n","import logger from '@/core/services/logger.service'\n\ntype SmsSender = (phone: string, body: string, force?: boolean) => Promise<any>\n\nlet customSmsSender: SmsSender | null = null\n\nexport default {\n registerSender(sender: SmsSender): void {\n customSmsSender = sender\n },\n\n async sendSms(phone: string, body: string, force: boolean = false): Promise<any> {\n if (customSmsSender) {\n return customSmsSender(phone, body, force)\n }\n\n logger.warn('SMS service not configured — no sender registered. Call smsService.registerSender() at startup.')\n throw new Error('SMS service not configured')\n },\n}\n","import { Op, WhereOptions } from 'sequelize'\nimport sequelize from '@/database/dbConnection'\nimport commonService from '@/core/services/common.service'\nimport { AppObject } from '@/src/types'\nimport { Request } from 'express'\n\ninterface UserAccessRole {\n userRoleId: string\n canRead: boolean\n canModify: boolean\n}\n\ninterface RoleGroupSettingFilter {\n parentId: string[]\n userRoleId?: string\n canRead?: boolean\n canModify?: boolean\n}\n\ninterface Restrictions {\n use: boolean\n users: string[]\n}\n\nexport default {\n async getUserAccessRoles(userId: string, canRead: boolean = false, canModify: boolean = false): Promise<UserAccessRole[]> {\n return await sequelize.models.RoleGroupUser.findAll({ where: { userId } })\n .then(async (result: Record<any, any>[]) => {\n return result.map((el) => {\n return el.parentId\n })\n })\n .then(async (roleGroups) => {\n const userDepartments = await getUserDepartments(userId)\n\n return await sequelize.models.RoleGroupDepartment.findAll({ where: { departmentId: userDepartments } }).then((result: Record<any, any>[]) => {\n return roleGroups.concat(\n result.map((el) => {\n return el.parentId\n })\n )\n })\n })\n .then(async (parentId) => {\n const filter: WhereOptions<RoleGroupSettingFilter> = { parentId }\n\n if (canModify === true) {\n filter.canModify = true\n } else if (canRead === true) {\n filter.canRead = true\n }\n\n return await sequelize.models.RoleGroupSetting.findAll({\n where: filter,\n })\n .then((settResult: Record<any, any>[]) => {\n const accessRoles: UserAccessRole[] = []\n\n for (const role of settResult) {\n const i = accessRoles.findIndex((el) => el.userRoleId === role.id)\n\n if (i > -1) {\n if (role.canRead !== accessRoles[i].canRead && role.canRead === true) {\n accessRoles[i].canRead = role.canRead\n }\n\n if (role.canModify !== accessRoles[i].canModify && role.canModify === true) {\n accessRoles[i].canModify = role.canModify\n }\n } else {\n accessRoles.push({ userRoleId: role.userRoleId, canRead: role.canRead, canModify: role.canModify })\n }\n }\n\n return accessRoles\n })\n .catch((error) => {\n throw error\n })\n })\n .catch((error) => {\n throw error\n })\n },\n\n async getUserAccessRoleId(userId: string, canRead: boolean = false, canModify: boolean = false) {\n return await sequelize.models.RoleGroupUser.findAll({ where: { userId } })\n .then(async (result: Record<any, any>[]) => {\n const parentId: string[] = result.map((el) => {\n return el.parentId\n })\n\n const filter: WhereOptions<RoleGroupSettingFilter> = { parentId }\n\n if (canModify === true) {\n filter.canModify = true\n } else if (canRead === true) {\n filter.canRead = true\n }\n\n return await sequelize.models.RoleGroupSetting.findAll({ where: filter })\n .then((settResult: Record<any, any>[]) => {\n result = settResult.map((el) => {\n return el.userRoleId\n })\n\n return result\n })\n .catch((error) => {\n throw error\n })\n })\n .catch((error) => {\n throw error\n })\n },\n\n async getUserRoleByKey(roleKey: string): Promise<Record<any, any> | null> {\n return await sequelize.models.UserRole.findOne({ where: { key: roleKey } })\n .then(async (result: Record<any, any> | null) => {\n return result\n })\n .catch((error) => {\n throw error\n })\n },\n\n async getUserRoleById(roleId: string): Promise<Record<any, any> | null> {\n return await sequelize.models.UserRole.findByPk(roleId)\n .then(async (result: Record<any, any> | null) => {\n return result\n })\n .catch((error) => {\n throw error\n })\n },\n\n async checkUserAccess(userId: string, role: Record<string, any>, canRead: boolean = false, canModify: boolean = false) {\n const userRole = role?.id ? await this.getUserRoleById(role.id) : await this.getUserRoleByKey(role.key)\n\n if (!userRole) {\n return new Error(`Role with key ${role} does not exist`)\n }\n\n return await sequelize.models.RoleGroupUser.findAll({ where: { userId } })\n .then(async (result: Record<any, any>[]) => {\n return result.map((el) => {\n return el.parentId\n })\n })\n .then(async (roleGroups) => {\n const userDepartments = await getUserDepartments(userId)\n\n return await sequelize.models.RoleGroupDepartment.findAll({ where: { departmentId: userDepartments } }).then((result: Record<any, any>[]) => {\n return roleGroups.concat(\n result.map((el) => {\n return el.parentId\n })\n )\n })\n })\n .then(async (parentId) => {\n const filter: WhereOptions<RoleGroupSettingFilter> = { parentId, userRoleId: userRole.id }\n\n if (canModify === true) {\n filter.canModify = true\n } else if (canRead === true) {\n filter.canRead = true\n }\n\n return await sequelize.models.RoleGroupSetting.findAll({\n where: filter,\n })\n .then((settResult) => {\n if (settResult && settResult.length > 0) {\n return true\n }\n return false\n })\n .catch((error) => {\n throw error\n })\n })\n .catch((error) => {\n throw error\n })\n },\n\n async getAllSubDepartments(department: Record<string, any>, include: Record<string, any>) {\n const subDepartmentsArray: Record<any, any>[] = []\n const children: Record<any, any>[] = await sequelize.models.Department.findAll({ where: { groupId: department.id }, include })\n\n for (const child of children) {\n subDepartmentsArray.push(child)\n const grandchildren = await this.getAllSubDepartments(child, include)\n for (const grandchild of grandchildren) {\n subDepartmentsArray.push(grandchild)\n }\n }\n\n return subDepartmentsArray\n },\n\n async accessRestrictions(req: Request, object: AppObject) {\n const restrictions: Restrictions = {\n use: false,\n users: [],\n }\n\n const existRestrictions: Record<any, any> | null = await sequelize.models.AccessRestriction.findOne({ where: { objectType: object.name } })\n\n if (existRestrictions) {\n if (existRestrictions.useRestriction === true || existRestrictions.useDepartmentRestriction === true) {\n restrictions.use = true\n restrictions.users.push(req.user?.id)\n\n if (existRestrictions.useDepartmentRestriction === true) {\n const include = commonService.prepareIncludes(sequelize.models.Department, { withTableParts: true })\n\n const departments: Record<any, any>[] = await sequelize.models.Department.findAll({\n where: { [Op.or]: [{ leaderId: req.user?.id }, { deputyId: req.user?.id }] },\n include,\n })\n\n const subDepartmentsArray: Record<any, any>[] = []\n for (const department of departments) {\n const subDepartments = await this.getAllSubDepartments(department, include)\n for (const subDepartment of subDepartments) {\n subDepartmentsArray.push(subDepartment)\n }\n }\n for (const subDepartment of subDepartmentsArray) {\n departments.push(subDepartment)\n }\n\n if (departments) {\n for (const department of departments) {\n for (const row of department.employees) {\n restrictions.users.push(row.employeeId)\n }\n }\n }\n }\n }\n }\n\n return restrictions\n },\n\n async getUserAccessNavigation(userId: string) {\n return await sequelize.models.RoleGroupUser.findAll({ where: { userId } })\n .then(async (result: Record<any, any>[]) => {\n return result.map((el) => {\n return el.parentId\n })\n })\n .then(async (roleGroups) => {\n const userDepartments = await getUserDepartments(userId)\n\n return await sequelize.models.RoleGroupDepartment.findAll({ where: { departmentId: userDepartments } }).then((result: Record<any, any>[]) => {\n return roleGroups.concat(\n result.map((el) => {\n return el.parentId\n })\n )\n })\n })\n .then(async (parentId) => {\n return await sequelize.models.RoleGroupNavigation.findAll({ where: { parentId } })\n .then((result: Record<any, any>[]) => {\n const hiddenNavigation = result.map((el) => el.navigationId)\n return [...new Set(hiddenNavigation)]\n })\n .catch((error) => {\n throw error\n })\n })\n .catch((error) => {\n throw error\n })\n },\n}\n\nasync function getUserDepartments(userId: string): Promise<string[]> {\n const departments: string[] = []\n\n await sequelize.models.Department.findAll({ where: { [Op.or]: [{ leaderId: userId }, { deputyId: userId }] } })\n .then((result: Record<any, any>[]) => {\n for (const department of result) {\n departments.push(department.id)\n }\n })\n .catch((error) => {\n throw error\n })\n\n await sequelize.models.DepartmentEmployee.findAll({ where: { employeeId: userId } })\n .then((result: Record<any, any>[]) => {\n for (const department of result) {\n departments.push(department.parentId)\n }\n })\n .catch((error) => {\n throw error\n })\n\n return departments\n}\n","import { Op } from 'sequelize'\nimport sequelize from '@/database/dbConnection'\nimport { Request } from 'express'\n\nexport default {\n async getUserExecutorRoles(executorId: string) {\n // Get the executor roles for the current user\n // If the user has full rights, return an empty array\n // If the user does not have full rights, return the executor roles they belong to\n let executorRoles = await sequelize.models.TaskExecutor.findAll({\n where: { executorId },\n attributes: ['parentId'],\n }).catch((error) => {\n console.error(error)\n return []\n })\n\n if (executorRoles) {\n executorRoles = JSON.parse(JSON.stringify(executorRoles))\n\n return executorRoles\n } else {\n return []\n }\n },\n\n async getVendorsAndCustomersFilter(counterparies: string[]): Promise<string[]> {\n let vendorsAndCustomers: string[] = []\n\n if (counterparies) {\n const userVendorsAndCustomers: Record<string, any>[] = await sequelize.models.VendorsAndCustomer.findAll({\n where: { counterpartyId: { [Op.in]: counterparies } },\n })\n\n if (userVendorsAndCustomers) {\n for (let item of userVendorsAndCustomers) {\n vendorsAndCustomers.push(item.id)\n }\n }\n }\n\n return vendorsAndCustomers\n },\n\n async getCustomerFilter(req: Request) {\n let counterparties: string[] = []\n let fullAccess = false\n\n if (req.user) {\n fullAccess = req.user.useCustomerAccess !== true\n\n const userId = req.user.id\n\n const userCounterparties: Record<any, any>[] = await sequelize.models.UserCustomer.findAll({ where: { parentId: userId } })\n\n if (userCounterparties) {\n for (let counterparty of userCounterparties) {\n counterparties.push(counterparty.customerId)\n }\n }\n }\n\n return {\n fullAccess,\n counterparties,\n }\n },\n\n async getForwarderFilter(req: Request) {\n // Get the forwarder filter for the current user\n // If the user has full rights, return an empty array\n // If the user does not have full rights, return the forwarder they belong to\n let fullAccess = false\n let forwarder: string | undefined\n\n if (req.user) {\n fullAccess = req.user.externalUser !== true\n\n try {\n const forwarderId = req.user.forwarderId\n\n if (forwarderId) {\n const forwarderData = await sequelize.models.VendorsAndCustomer.findAll({\n where: { id: forwarderId },\n })\n forwarder = forwarderData[0]?.dataValues?.id\n }\n } catch (err) {\n console.error('Forwarder lookup failed:', err)\n }\n }\n\n return {\n fullAccess,\n forwarder,\n }\n },\n\n async getRoleGroups(req: Request): Promise<string[]> {\n // Get the role groups for the current user\n // If the user has full rights, return an empty array\n // If the user does not have full rights, return the role groups they belong to\n let roleGroups: string[] = []\n\n if (req.user) {\n if (req.user.fullRights !== true) {\n const currentUserId = req.user.id\n const roleGroupsUsersResult: Record<string, any>[] = await sequelize.models.RoleGroupUser.findAll({\n where: { userId: currentUserId },\n attributes: ['parentId'],\n })\n roleGroups = roleGroupsUsersResult.map((el) => el.parentId)\n }\n }\n\n return roleGroups\n },\n}\n","import express, { NextFunction, Request, Response } from 'express'\nimport { QueryTypes } from 'sequelize'\nimport fs from 'fs'\nimport { StatusCodes } from 'http-status-codes'\nimport accessRights from '@/middleware/accessRights'\nimport fileUpload from '@/middleware/fileUpload'\nimport sequelize from '@/database/dbConnection'\nimport logger from '@/core/services/logger.service'\n\nconst router = express.Router()\n\nexport default {\n async initRoutes() {\n const queryText =\n 'SELECT \\\n * \\\n FROM \\\n workers \\\n WHERE \\\n workers.\"markedToDelete\" = false'\n\n const workers: Record<string, any>[] = await sequelize.query(queryText, { type: QueryTypes.SELECT })\n\n for (const worker of workers) {\n if (!worker.api) {\n continue\n }\n\n let module: any\n\n const modulePath = `workers/${worker.name}/server.module.js`\n\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n if (fs.existsSync(fullPath)) {\n module = __non_webpack_require__(fullPath)\n }\n\n if (!module) {\n continue\n }\n\n const apiMethods = JSON.parse(worker.api)\n\n for (const method of apiMethods) {\n if (!module[method.controller] || typeof module[method.controller] !== 'function') {\n logger.error('Worker controller is not exist: ', { meta: { name: worker.name, controller: method.controller } })\n continue\n }\n\n router[method.httpMethod.toLowerCase()](\n `/api/${worker.path}/${method.path}`,\n setAccess(method.httpMethod, worker),\n (req: Request, res: Response, next: NextFunction) => {\n const contentType = req.headers['content-type']\n if (contentType && contentType.includes('multipart/form-data')) {\n return fileUpload.array('files')(req, res, (err) => {\n if (err) {\n return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ message: `File upload error: ${err}` })\n }\n next()\n })\n } else {\n next()\n }\n },\n module[method.controller]\n )\n }\n }\n\n return router\n },\n}\n\nfunction setAccess(method: Record<string, any> = {}, restApi: Record<string, any>) {\n let accessMethod: any\n\n const accesRole: Record<string, any> = {}\n\n if (method.userRole) {\n accesRole.id = method.userRole\n } else if (restApi.accessRoleId) {\n accesRole.id = restApi.accessRoleId\n } else {\n accesRole.key = restApi.path\n }\n\n if (method.accessLevel) {\n accessMethod =\n method.accessLevel === 'CAN_REED'\n ? accessRights.canRead(accesRole)\n : method.accessLevel === 'CAN_MODIFY'\n ? accessRights.canModify(accesRole)\n : method.accessLevel === 'IS_AUTH'\n ? accessRights.isAuth\n : accessRights.isFullRights\n } else {\n accessMethod = method.httpMethod === 'GET' ? accessRights.canRead(accesRole) : accessRights.canModify(accesRole)\n }\n\n return accessMethod\n}\n","import { StatusCodes } from 'http-status-codes'\nimport logger from '@/core/services/logger.service'\nimport smsService from '@/core/services/sms.service'\n\nimport { Request, Response, NextFunction } from 'express'\n\nexport default {\n async sendSMS(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const { dest, smsText, delivNotifRequest } = req.body\n const smsRes = await smsService.sendSms(dest, smsText, delivNotifRequest)\n res.status(StatusCodes.OK).send(smsRes)\n } catch (error) {\n logger.error('Error while trying to send sms', { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n }\n },\n}\n","import express from 'express'\nimport accessRights from '@/middleware/accessRights'\nimport controllers from '../controllers'\n\nconst router = express.Router()\n\nrouter.post('/send_sms', accessRights.canRead({ key: 'sendsms' }), controllers.sendSMS)\n\nexport default router\n","import 'dotenv/config'\nimport { Dialect } from 'sequelize/types'\n\ninterface DatabaseConfig {\n dbName: string\n dbUser: string\n dbPassword: string\n dbDialect: Dialect\n dbHost: string\n dbPort: number\n}\n\nconst databaseConfig: DatabaseConfig = {\n dbName: process.env.DB_NAME || '',\n dbUser: process.env.DB_USER || '',\n dbPassword: process.env.DB_PASSWORD || '',\n // Default to 'postgres' if DB_DIALECT is not set\n // or if it's not a valid dialect\n dbDialect: process.env.DB_DIALECT ? (process.env.DB_DIALECT as Dialect) : 'postgres',\n // Default to 'localhost' if DB_HOST is not set\n // or if it's not a valid host\n dbHost: process.env.DB_HOST ? process.env.DB_HOST : 'localhost',\n // Default to 5432 if DB_PORT is not set\n // or if it's not a valid number\n dbPort: process.env.DB_PORT ? parseInt(process.env.DB_PORT, 10) : 5432,\n}\n\nexport default databaseConfig\n","import { Sequelize } from 'sequelize'\r\nimport { v4 as uuidv4 } from 'uuid'\r\n\r\nimport dbParams from './config'\r\n\r\nconst sequelize = new Sequelize(dbParams.dbName, dbParams.dbUser, dbParams.dbPassword, {\r\n dialect: dbParams.dbDialect,\r\n host: dbParams.dbHost,\r\n port: dbParams.dbPort,\r\n logging: false,\r\n pool: {\r\n max: 150, // Max connections in the pool\r\n },\r\n define: {\r\n hooks: {\r\n // Automatically generate UUIDs for primary keys\r\n // before creating a new record\r\n beforeValidate: (record, options) => {\r\n if (record.dataValues.id === null) {\r\n record.dataValues.id = uuidv4()\r\n }\r\n },\r\n },\r\n },\r\n})\r\n\r\nexport default sequelize\r\n","import path from 'path'\nimport express, { Application, Request, Response, NextFunction } from 'express'\nimport compression from 'compression'\nimport cookieParser from 'cookie-parser'\nimport helmet from 'helmet'\nimport cors, { CorsOptions } from 'cors'\nimport { v4 as uuidv4 } from 'uuid'\nimport passport from 'passport'\nimport session, { SessionOptions } from 'express-session'\nimport connectSessionSequelize from 'connect-session-sequelize'\nimport rateLimit from 'express-rate-limit'\nimport setupLogger from './core/services/accessLogger.service'\nimport dynamicRoutes from './routes/dynamicRoutes'\nimport staticRoutes from './routes/staticRoutes'\nimport scheduledJobService from './core/services/scheduledJob.service'\nimport passportAuth from './core/auth/passportAuth'\nimport eventService from './core/services/event.service'\nimport sequelize from './database/dbConnection'\n\nconst SequelizeStore = connectSessionSequelize(session.Store)\n\nprocess.on('unhandledRejection', (reason) => console.error(reason))\nprocess.on('uncaughtException', (reason) => console.error(reason))\nprocess.on('warning', (e) => console.warn(e.stack))\n\nconst app: Application = express()\n\n// Configure Request Logger\napp.use(express.json({ limit: '100mb' }))\napp.use(express.urlencoded({ extended: false }))\napp.use(cookieParser())\n\nsetupLogger(app)\n\napp.use(helmet())\napp.use(compression())\napp.use(express.static(path.join(__dirname, '../public')))\n\n// Configure CORS\n\nconst allowOrigin: string = process.env.ALLOW_ORIGIN || ''\n\nconst corsOptions: CorsOptions = {\n origin: [...allowOrigin.split(','), 'app://.'],\n methods: ['OPTIONS', 'GET', 'POST', 'PUT', 'PATCH', 'DELETE'],\n allowedHeaders: [\n 'Content-Type',\n 'Authorization',\n 'x-access-token',\n 'x-api-key',\n 'device_uuid',\n 'Access-Control-Allow-Origin',\n 'Access-Control-Allow-Credentials',\n 'x-client-version',\n ],\n credentials: true,\n}\n\napp.use(cors(corsOptions))\n\nimport './core/auth/session'\n\n// Function to extend default session fields\nfunction extendDefaultFields(defaults: any, session: any) {\n const userId = session?.passport?.user\n\n return {\n id: uuidv4(),\n data: defaults.data,\n expires: defaults.expires,\n userId: userId,\n licNumber: session?.license?.number || null,\n clientType: session?.clientType || null,\n }\n}\n\n// Configure sessions\nconst sessionOptions: SessionOptions = {\n genid: () => uuidv4(),\n store: new SequelizeStore({\n db: sequelize,\n table: 'Session',\n extendDefaultFields: extendDefaultFields,\n }),\n secret: process.env.SESSION_SECRET_KEY as string,\n resave: false,\n rolling: true,\n saveUninitialized: false,\n cookie: {\n httpOnly: true,\n maxAge: Number(process.env.SESSION_MAX_AGE || process.env.CORE_SESSION_MAX_AGE),\n secure: false,\n },\n}\n\napp.use(session(sessionOptions))\n\n// Configure Request Rate Limiter\nconst limiter = rateLimit({\n windowMs: 1 * 60 * 1000, // 1 minute\n max: 100000, // limit each IP to 100000 requests per windowMs\n statusCode: 429,\n})\n\napp.use(limiter)\n\n// Initialize routes\nasync function initializeRoutes(app: Application) {\n try {\n await dynamicRoutes(app)\n staticRoutes(app)\n } catch (error) {\n console.error(error)\n } finally {\n scheduledJobService.init(app.locals.objects)\n }\n}\n\ninitializeRoutes(app)\n\n// Configure authentication\npassportAuth.initializePassport(passport)\n\napp.use(passport.initialize())\napp.use(passport.session())\n\n// Initialize event service\neventService.init(app)\n\n// view engine setup\napp.set('views', path.join(__dirname, 'views'))\napp.set('view engine', 'pug')\n\n// error handler\napp.use((err: Error, req: Request, res: Response, next: NextFunction) => {\n console.error(err)\n res.locals.message = err.message\n res.locals.error = req.app.get('env') === 'development' ? err : {}\n res.status((err as any).status || 500)\n res.render('error')\n})\n\nimport accessRights from './middleware/accessRights'\nimport logger from './core/services/logger.service'\nimport commonService from './core/services/common.service'\nimport controllerService from './core/services/controller.service'\nimport appService from './core/services/app.service'\nimport defineObjects from './core/objects/controllers'\nimport cryptoGen from './core/auth/cryptoGen'\nimport documentService from './core/services/document.service'\nimport seederService from './core/services/seeder.service'\nimport registerService from './core/services/register.service'\nimport migrationsService from './core/services/migration.service'\nimport smsService from './core/services/sms.service'\n\nexport {\n app,\n sequelize,\n accessRights,\n commonService,\n controllerService,\n documentService,\n appService,\n logger,\n defineObjects,\n cryptoGen,\n seederService,\n registerService,\n eventService,\n migrationsService,\n smsService,\n}\n","import userAccessService from '@/core/services/userAccess.service'\nimport { NextFunction, Request, Response } from 'express'\nimport { StatusCodes } from 'http-status-codes'\nimport logger from '@/core/services/logger.service'\n\nexport default {\n isAuth(req: Request, res: Response, next: NextFunction) {\n if (!req.user) {\n const message = 'Error in accessRight.isAuth. User not authenticated'\n logger.error(message)\n return res.status(StatusCodes.FORBIDDEN).send({ message })\n }\n\n next()\n },\n\n isFullRights(req: Request, res: Response, next: NextFunction) {\n if (!req.user) {\n const message = 'Error in accessRight.canRead. User not authenticated'\n logger.error(message)\n return res.status(StatusCodes.FORBIDDEN).send({ message })\n }\n\n if (req.user.fullRights !== true) {\n const message = 'Error in accessRight.isFullRights. User not has full rights'\n logger.error(message)\n return res.status(StatusCodes.FORBIDDEN).send({ message })\n }\n\n next()\n },\n\n canRead: (role: Record<string, any>) => {\n return async (req: Request, res: Response, next: NextFunction) => {\n if (!req.user) {\n const message = 'Error in accessRight.canRead. User not authenticated'\n logger.error(message)\n return res.status(StatusCodes.FORBIDDEN).send({ message })\n }\n\n if (req.user.fullRights === true) {\n next()\n return\n }\n\n const userId = req.user?.id\n\n if (userId) {\n await userAccessService\n .checkUserAccess(userId, role, true)\n .then((result) => {\n if (result === true) {\n next()\n } else {\n const message = `User ${req.user?.name} not have access to read. Role ${role}`\n logger.error('Error in accessRight.canRead', { meta: message })\n res.status(StatusCodes.FORBIDDEN).send({ message: message })\n }\n })\n .catch((error) => {\n logger.error('Error in accessRight.canRead', { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n })\n } else {\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'User not authorized' })\n }\n }\n },\n canModify: (role: Record<string, any>) => {\n return async (req: Request, res: Response, next: NextFunction) => {\n if (req.user?.fullRights === true) {\n next()\n return\n }\n\n const userId = req.user?.id\n\n if (userId) {\n await userAccessService\n .checkUserAccess(userId, role, true, true)\n .then((result) => {\n if (result === true) {\n next()\n } else {\n const message = `User ${req.user?.name} not have access to modify. Role ${role}`\n logger.error('Error in accessRight.canModify', { meta: message })\n res.status(StatusCodes.FORBIDDEN).send({ message: message })\n }\n })\n .catch((error) => {\n logger.error('Error in accessRight.canModify', { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n })\n } else {\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'User not authorized' })\n }\n }\n },\n}\n","import multer from 'multer'\nimport moment from 'moment'\nimport fs from 'fs'\nimport { Request } from 'express'\n\nconst storage = multer.diskStorage({\n destination: function (req: Request, file, cb) {\n const folder = getFolder(req)\n cb(null, folder)\n },\n\n filename: function (req: Request, file, cb) {\n file.originalname = Buffer.from(file.originalname, 'latin1').toString('utf8')\n const fileName = getFileName(file)\n cb(null, fileName)\n },\n})\n\nfunction getFileName(file: Record<string, any>): string {\n let fileName: string = file.originalname\n let fileExt: string = ''\n\n const re: RegExp = /(?:\\.([^.]+))?$/\n const fileNameParts = re.exec(file.originalname)\n\n if (!fileNameParts) {\n return `file_${Date.now()}${fileExt}`\n }\n\n fileExt = fileNameParts[0]\n fileName = String(file.originalname).replace(fileExt, '')\n\n const reg: RegExp = /[^a-zA-Z0-9-_]/g\n fileName = String(fileName).replace(reg, '_')\n\n fileName = fileName.toLowerCase()\n\n return `${fileName}_${Date.now()}${fileExt}`\n}\n\nfunction getFolder(req: Request): string {\n const dateFolder = moment().format('DD_MM_YYYY')\n const fullFolder = `${process.env.DESTINATION}/common/${dateFolder}`\n\n if (!fs.existsSync(fullFolder)) {\n fs.mkdirSync(fullFolder, { recursive: true })\n }\n\n return fullFolder\n}\n\nexport default multer({\n storage: storage,\n limits: {\n fileSize: 1024 * 1024 * 100, // 100Mb file limit\n },\n})\n","import routes from '@/core/objects/routes'\nimport restApiService from '@/core/services/restApi.service'\nimport workersService from '@/core/services/workers.service'\nimport { Application, NextFunction, Request, Response } from 'express'\n\nexport default async (app: Application) => {\n const { router, objects } = await routes()\n\n // Middleware for adding objects to req\n app.use((req: Request, res: Response, next: NextFunction) => {\n req.objects = objects\n next()\n })\n\n // Set objects to app locals\n app.locals.objects = objects\n\n // Initialize dynamic routes\n app.use(router)\n\n // Initialize rest api routes\n const restApiRoutes = await restApiService.initRoutes()\n app.use(restApiRoutes)\n\n // Initialize workers routes\n const workersRoutes = await workersService.initRoutes()\n app.use(workersRoutes)\n\n return { router, objects }\n}\n","import express from 'express'\nimport passportAuth from '@/core/auth/passportAuth'\n\nconst router = express.Router()\n\n/* GET home page. */\nrouter.get('/', function (req, res, next) {\n res.render('index', { title: 'SYNERGY Server' })\n})\n\nrouter.use(passportAuth.isAuthenticated)\n\nexport default router\n","import indexRoute from './index'\nimport accessLogs from '@/core/accessLogs/routes'\nimport auth from '@/core/auth/routes'\nimport appRouter from '@/core/app/routes'\nimport reports from '@/core/reports/routes'\nimport sms from '@/core/sms/routes'\n\nimport { Application } from 'express'\n\nexport default (app: Application) => {\n app.use(auth)\n app.use(indexRoute)\n app.use(accessLogs)\n app.use(reports)\n app.use(appRouter)\n app.use(sms)\n}\n","module.exports = require(\"base64-js\");","module.exports = require(\"bcrypt\");","module.exports = require(\"compression\");","module.exports = require(\"connect-session-sequelize\");","module.exports = require(\"cookie-parser\");","module.exports = require(\"cors\");","module.exports = require(\"crypto\");","module.exports = require(\"crypto-js\");","module.exports = require(\"dotenv/config\");","module.exports = require(\"events\");","module.exports = require(\"exceljs\");","module.exports = require(\"express\");","module.exports = require(\"express-rate-limit\");","module.exports = require(\"express-session\");","module.exports = require(\"fs\");","module.exports = require(\"helmet\");","module.exports = require(\"http-status-codes\");","module.exports = require(\"ieee754\");","module.exports = require(\"jsonwebtoken\");","module.exports = require(\"lodash\");","module.exports = require(\"moment\");","module.exports = require(\"morgan\");","module.exports = require(\"multer\");","module.exports = require(\"node-cron\");","module.exports = require(\"node-sql-parser\");","module.exports = require(\"nodemailer\");","module.exports = require(\"passport\");","module.exports = require(\"passport-local\");","module.exports = require(\"path\");","module.exports = require(\"pdfmake\");","module.exports = require(\"sequelize\");","module.exports = require(\"ssf\");","module.exports = require(\"terser\");","module.exports = require(\"uuid\");","module.exports = require(\"winston\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/main.ts\");\n",""],"names":[],"sourceRoot":""}
1
+ {"version":3,"file":"main.js","mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEY;;AAEZ,aAAa,mBAAO,CAAC,4BAAW;AAChC,cAAc,mBAAO,CAAC,wBAAS;AAC/B;AACA;AACA;AACA;;AAEA,cAAc;AACd,kBAAkB;AAClB,yBAAyB;;AAEzB;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,wCAAwC,SAAS;AACjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;;AAEA;AACA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iDAAiD,EAAE;AACnD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB,eAAe;AACxC;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,yBAAyB,QAAQ;AACjC;AACA,sBAAsB,eAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,YAAY;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AA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","sources":["webpack://@synergy-server/core/./node_modules/buffer/index.js","webpack://@synergy-server/core/./src/core/accessLogs/controllers/index.ts","webpack://@synergy-server/core/./src/core/accessLogs/routes/index.ts","webpack://@synergy-server/core/./src/core/app/controllers/index.ts","webpack://@synergy-server/core/./src/core/app/routes/index.ts","webpack://@synergy-server/core/./src/core/auth/autoLoginAuth.ts","webpack://@synergy-server/core/./src/core/auth/controllers/index.ts","webpack://@synergy-server/core/./src/core/auth/cryptoGen.ts","webpack://@synergy-server/core/./src/core/auth/passportAuth.ts","webpack://@synergy-server/core/./src/core/auth/routes/index.ts","webpack://@synergy-server/core/./src/core/auth/session.ts","webpack://@synergy-server/core/./src/core/objects/controllers.ts","webpack://@synergy-server/core/./src/core/objects/index.ts","webpack://@synergy-server/core/./src/core/objects/routes.ts","webpack://@synergy-server/core/./src/core/reports/controllers/index.ts","webpack://@synergy-server/core/./src/core/reports/controllers/virtualTables.ts","webpack://@synergy-server/core/./src/core/reports/routes/index.ts","webpack://@synergy-server/core/./src/core/services/accessLogger.service.ts","webpack://@synergy-server/core/./src/core/services/app.service.ts","webpack://@synergy-server/core/./src/core/services/common.service.ts","webpack://@synergy-server/core/./src/core/services/commonCommands.service.ts","webpack://@synergy-server/core/./src/core/services/controller.service.ts","webpack://@synergy-server/core/./src/core/services/dataProcessor.service.ts","webpack://@synergy-server/core/./src/core/services/document.service.ts","webpack://@synergy-server/core/./src/core/services/event.service.ts","webpack://@synergy-server/core/./src/core/services/eventSubscription.service.ts","webpack://@synergy-server/core/./src/core/services/license.service.ts","webpack://@synergy-server/core/./src/core/services/logger.service.ts","webpack://@synergy-server/core/./src/core/services/migration.service.ts","webpack://@synergy-server/core/./src/core/services/multiType.service.ts","webpack://@synergy-server/core/./src/core/services/objectVersions.service.ts","webpack://@synergy-server/core/./src/core/services/register.service.ts","webpack://@synergy-server/core/./src/core/services/reportToExcel.service.ts","webpack://@synergy-server/core/./src/core/services/reportToPdf.service.ts","webpack://@synergy-server/core/./src/core/services/restApi.service.ts","webpack://@synergy-server/core/./src/core/services/rotatingStream.service.ts","webpack://@synergy-server/core/./src/core/services/scheduledJob.service.ts","webpack://@synergy-server/core/./src/core/services/security.service.ts","webpack://@synergy-server/core/./src/core/services/seeder.service.ts","webpack://@synergy-server/core/./src/core/services/sms.service.ts","webpack://@synergy-server/core/./src/core/services/userAccess.service.ts","webpack://@synergy-server/core/./src/core/services/userRights.service.ts","webpack://@synergy-server/core/./src/core/services/workers.service.ts","webpack://@synergy-server/core/./src/core/sms/controllers/index.ts","webpack://@synergy-server/core/./src/core/sms/routes/index.ts","webpack://@synergy-server/core/./src/database/config.ts","webpack://@synergy-server/core/./src/database/dbConnection.ts","webpack://@synergy-server/core/./src/main.ts","webpack://@synergy-server/core/./src/middleware/accessRights.ts","webpack://@synergy-server/core/./src/middleware/fileUpload.ts","webpack://@synergy-server/core/./src/routes/dynamicRoutes.ts","webpack://@synergy-server/core/./src/routes/index.ts","webpack://@synergy-server/core/./src/routes/staticRoutes.ts","webpack://@synergy-server/core/external commonjs \"base64-js\"","webpack://@synergy-server/core/external commonjs \"bcrypt\"","webpack://@synergy-server/core/external commonjs \"compression\"","webpack://@synergy-server/core/external commonjs \"connect-session-sequelize\"","webpack://@synergy-server/core/external commonjs \"cookie-parser\"","webpack://@synergy-server/core/external commonjs \"cors\"","webpack://@synergy-server/core/external node-commonjs \"crypto\"","webpack://@synergy-server/core/external commonjs \"crypto-js\"","webpack://@synergy-server/core/external commonjs \"dotenv/config\"","webpack://@synergy-server/core/external commonjs \"events\"","webpack://@synergy-server/core/external commonjs \"exceljs\"","webpack://@synergy-server/core/external commonjs \"express\"","webpack://@synergy-server/core/external commonjs \"express-rate-limit\"","webpack://@synergy-server/core/external commonjs \"express-session\"","webpack://@synergy-server/core/external node-commonjs \"fs\"","webpack://@synergy-server/core/external commonjs \"helmet\"","webpack://@synergy-server/core/external commonjs \"http-status-codes\"","webpack://@synergy-server/core/external commonjs \"ieee754\"","webpack://@synergy-server/core/external commonjs \"jsonwebtoken\"","webpack://@synergy-server/core/external commonjs \"lodash\"","webpack://@synergy-server/core/external commonjs \"moment\"","webpack://@synergy-server/core/external commonjs \"morgan\"","webpack://@synergy-server/core/external commonjs \"multer\"","webpack://@synergy-server/core/external commonjs \"node-cron\"","webpack://@synergy-server/core/external commonjs \"node-sql-parser\"","webpack://@synergy-server/core/external commonjs \"nodemailer\"","webpack://@synergy-server/core/external commonjs \"passport\"","webpack://@synergy-server/core/external commonjs \"passport-local\"","webpack://@synergy-server/core/external node-commonjs \"path\"","webpack://@synergy-server/core/external commonjs \"pdfmake\"","webpack://@synergy-server/core/external commonjs \"sequelize\"","webpack://@synergy-server/core/external commonjs \"ssf\"","webpack://@synergy-server/core/external commonjs \"terser\"","webpack://@synergy-server/core/external commonjs \"uuid\"","webpack://@synergy-server/core/external commonjs \"winston\"","webpack://@synergy-server/core/webpack/bootstrap","webpack://@synergy-server/core/webpack/before-startup","webpack://@synergy-server/core/webpack/startup","webpack://@synergy-server/core/webpack/after-startup"],"sourcesContent":["/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n var arr = new Uint8Array(1)\n var proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n var buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n var valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n var b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(\n value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n )\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n var length = byteLength(string, encoding) | 0\n var buf = createBuffer(length)\n\n var actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n var buf = createBuffer(length)\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n var copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n var buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n var buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n Buffer.from(buf).copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n var len = string.length\n var mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n var strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (var i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n var len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nvar hexSliceLookupTable = (function () {\n var alphabet = '0123456789abcdef'\n var table = new Array(256)\n for (var i = 0; i < 16; ++i) {\n var i16 = i * 16\n for (var j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n","import path from 'path'\nimport fs from 'fs'\nimport moment from 'moment'\nimport logger from '@/core/services/logger.service'\nimport { Request, Response } from 'express'\nimport { Pagination, Sort } from '@/src/types'\n\nconst directoryPath = `${process.cwd()}/logs/access`\n\ninterface Filter {\n period?: [string, string]\n searchFilter?: Record<string, any>\n searchStr?: {\n searchText: string\n searchColumns: string[]\n }\n}\n\ninterface PaginatedResult<T> {\n totalItems: number\n currentPage: number\n data: T[]\n}\n\nexport const accessLogsController = {\n async getFilesInfo(req: Request, res: Response): Promise<void> {\n try {\n const filter: Filter = JSON.parse((req.query.filter as string) || '{}')\n const pagination: Pagination = JSON.parse((req.query.pagination as string) || '{}')\n const sort: Sort = JSON.parse((req.query.sort as string) || '{}')\n\n if (!filter.period) {\n res.status(400).send({ message: 'Period filter is required' })\n return\n }\n\n const startDate = moment(filter.period[0]).format('YYYYMMDD')\n const endDate = moment(filter.period[1]).format('YYYYMMDD')\n\n const files = await readDirectory(directoryPath)\n\n if (!files || files.length === 0) {\n res.status(404).send({ message: 'No log files found' })\n return\n }\n\n const filesInPeriod = filterFilesByPeriod(files, startDate, endDate)\n\n if (filesInPeriod.length === 0) {\n res.status(404).send({ message: 'No log files found for the specified period' })\n return\n }\n\n let result: any[] | PaginatedResult<any> = []\n for (const file of filesInPeriod) {\n const filePath = path.join(directoryPath, file)\n const fileRows = await getFileRows(filePath, filter.searchFilter)\n result.push(...fileRows)\n }\n\n if (filter.searchStr) {\n result = filterBySearch(result, filter.searchStr.searchText, filter.searchStr.searchColumns)\n }\n\n if (Array.isArray(sort)) {\n for (const s of sort) {\n if (s.sortBy) {\n result = sortByColumn(result, s.sortBy, s.sortDesc)\n }\n }\n } else {\n if (sort.sortBy) {\n result = sortByColumn(result, sort.sortBy, sort.sortDesc)\n }\n }\n\n result = paginateArray(result, pagination.limit, pagination.page)\n\n res.status(200).send(result)\n } catch (error) {\n logger.error('Error in accessLogsController.getFilesInfo', { meta: error })\n res.status(500).send({ message: 'Internal server error' })\n }\n },\n}\n\nasync function readDirectory(directoryPath: string): Promise<string[]> {\n return new Promise((resolve, reject) => {\n fs.readdir(directoryPath, (err, files) => {\n if (err) {\n return reject(new Error(`Failed to read directory: ${directoryPath}`))\n }\n resolve(files)\n })\n })\n}\n\nfunction filterFilesByPeriod(files: string[], startDate: string, endDate: string): string[] {\n return files.filter((file) => {\n const fileBirthtime = file.slice(0, 8)\n return fileBirthtime === startDate || fileBirthtime === endDate || (fileBirthtime > startDate && fileBirthtime < endDate)\n })\n}\n\nasync function getFileRows(filePath: string, searchFilter?: Record<string, any>): Promise<any[]> {\n try {\n const data = fs.readFileSync(filePath, 'utf8')\n const fileRows = data.split(/\\r?\\n/)\n const parsedRows: any[] = []\n\n for (const fileRow of fileRows) {\n if (fileRow.trim() !== '') {\n const parsedRow = JSON.parse(fileRow)\n if (searchFilter) {\n let allMatch = true\n for (const key in searchFilter) {\n if (key === 'user') {\n if (parsedRow[key]?.id !== searchFilter[key]?.id) {\n allMatch = false\n break\n }\n } else {\n if (parsedRow[key] !== searchFilter[key]) {\n allMatch = false\n break\n }\n }\n }\n if (allMatch) {\n parsedRows.push(parsedRow)\n }\n } else {\n parsedRows.push(parsedRow)\n }\n }\n }\n\n return parsedRows\n } catch (error) {\n throw new Error(`Failed to process file: ${filePath}. Error: ${error.message}`)\n }\n}\n\nfunction paginateArray<T>(arr: T[], limit: number, pageNumber: number): PaginatedResult<T> {\n const startIndex = (pageNumber - 1) * limit\n const endIndex = startIndex + limit\n\n const pageData = arr.slice(startIndex, endIndex)\n\n return {\n totalItems: arr.length,\n currentPage: pageNumber,\n data: pageData,\n }\n}\n\nfunction sortByColumn<T>(arr: T[], column: keyof T, sortDesc: boolean): T[] {\n const sortedArray = arr.slice()\n\n sortedArray.sort((a, b) => {\n const aValue = a[column]\n const bValue = b[column]\n\n if (sortDesc) {\n if (aValue > bValue) return -1\n if (aValue < bValue) return 1\n } else {\n if (aValue < bValue) return -1\n if (aValue > bValue) return 1\n }\n\n return 0\n })\n\n return sortedArray\n}\n\nfunction filterBySearch<T>(arr: T[], searchText: string, searchColumns: string[]): T[] {\n const searchValue = searchText.replace(/\\s/g, '').replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n const regex = new RegExp(searchValue, 'i')\n\n return arr.filter((item) => {\n let foundMatch = false\n for (const column of searchColumns) {\n const splitArray = column.split('.')\n if (splitArray.length > 1) {\n if (item[splitArray[0]]) {\n if (item[splitArray[0]][splitArray[1]] && deepSearch(item[splitArray[0]][splitArray[1]], regex)) {\n foundMatch = true\n break\n }\n }\n } else {\n if (item[column] && deepSearch(item[column], regex)) {\n foundMatch = true\n break\n }\n }\n }\n return foundMatch\n })\n}\n\nfunction deepSearch(value: string, regex: RegExp): boolean {\n if (value && typeof value === 'object') {\n const stringObj = JSON.stringify(value)\n if (stringObj.match(regex)) {\n return true\n }\n } else if (value && value.toString().replace(/\\s/g, '').match(regex)) {\n return true\n }\n return false\n}\n","import express, { Router } from 'express'\nimport { accessLogsController } from '../controllers/index'\nimport accessRights from '@/middleware/accessRights'\n\nconst router: Router = express.Router()\n\nrouter.get('/access_log', accessRights.canRead({ key: 'access_logs' }), accessLogsController.getFilesInfo)\n\nexport default router\n","import sequelize from '@/database/dbConnection'\nimport { QueryTypes } from 'sequelize'\nimport { StatusCodes } from 'http-status-codes'\nimport { Parser } from 'node-sql-parser'\nimport logger from '@/core/services/logger.service'\nimport { Op, ModelStatic, Model } from 'sequelize'\nimport fs from 'fs'\nimport { promises as fsp } from 'fs'\nimport path from 'path'\nimport cryptoJs from 'crypto-js'\nimport { minify } from 'terser'\nimport eventSubscriptionsService from '@/core/services/eventSubscription.service'\nimport commonCommandsService from '@/core/services/commonCommands.service'\n\nconst packagePath = path.resolve(process.cwd(), 'package.json')\n\nif (!fs.existsSync(packagePath)) {\n throw new Error(`native package.json not found at ${packagePath}`)\n}\n\nconst serverPackage = __non_webpack_require__(packagePath)\n\nimport AppService from '@/core/services/app.service'\n\nimport commonService from '@/core/services/common.service'\nimport userAccessService from '@/core/services/userAccess.service'\n\nimport { Request, Response, NextFunction } from 'express'\nimport { AppObjectField } from '@/src/types'\n\ninterface TableNameModel {\n tableName: string\n model: string\n}\n\nexport default {\n async getAppInfo(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const info = {\n appName: 'SynergyCore',\n company: 'INTELEKTSOFT',\n serverVersion: serverPackage?.version || '0.0.0',\n }\n\n res.status(200).send(info)\n },\n\n async getObjectMetadata(req: Request, res: Response, next: NextFunction): Promise<void> {\n const { objectType, tableName } = req.query\n\n const withTableParts: boolean = JSON.parse((req.query.withTableParts as string) || 'false')\n\n let Model: ModelStatic<Model<any, any>> | undefined\n if (objectType) {\n Model = sequelize.models[objectType as string]\n } else {\n Object.keys(sequelize.models).forEach((key) => {\n let table = sequelize.models[key].getTableName()\n if (table === tableName) {\n Model = sequelize.models[key]\n }\n })\n }\n\n if (!Model) {\n console.error('Model not found: ', objectType)\n res.status(400).send({ message: 'Model not found' })\n return\n }\n\n let attributes: Record<string, any>[] = []\n let associations: Record<string, any>[] = []\n let noConstrainAssociations: Record<string, any>[] = []\n\n Object.keys(Model.associations).forEach((key) => {\n const currAssociation: any = Model!.associations[key]\n\n if (currAssociation.isMultiAssociation === true) {\n return\n }\n\n const association: Record<string, any> = {\n name: key,\n foreignKey: currAssociation.foreignKey,\n ref: '',\n modelName: currAssociation.target.name,\n }\n\n if (Object.prototype.hasOwnProperty.call(currAssociation.target, 'options')) {\n if (currAssociation.target.options.namespace) {\n association.ref = currAssociation.target.options.namespace\n } else {\n const pluralName = currAssociation.target.options.name.plural\n association.ref = pluralName.charAt(0).toLowerCase() + pluralName.slice(1)\n }\n }\n\n const targetAttribs = currAssociation.target.rawAttributes\n\n if (targetAttribs.presentation?._sortBy) {\n association.sortBy = targetAttribs.presentation._sortBy\n } else {\n association.sortBy = 'createdAt'\n }\n\n if (currAssociation.options.constraints === false) {\n noConstrainAssociations.push(association)\n } else {\n associations.push(association)\n }\n })\n\n const skipTypeFields: any[] = []\n\n for (let key in Model.getAttributes()) {\n if (skipTypeFields.includes(key)) {\n continue\n }\n\n const modelAttrib = Model.getAttributes()[key]\n let attrib = assembleAttrib(modelAttrib, key)\n\n let association: Record<string, any> | undefined\n association = associations.find((el) => {\n return el.foreignKey === key\n })\n\n if (!association) {\n association = noConstrainAssociations.filter((el) => {\n return el.foreignKey === key\n })\n if (association.length === 0) {\n association = undefined\n }\n }\n\n if (association) {\n if (Array.isArray(association)) {\n const name = key.endsWith('Id') ? key.slice(0, -2) : key\n const typeFieldName = name + 'Type'\n\n let typeField = attributes.find((obj) => {\n return obj.name === typeFieldName\n })\n if (typeField) {\n const index = attributes.findIndex((obj) => obj === typeField)\n attributes.splice(index, 1)\n } else {\n skipTypeFields.push(typeFieldName)\n }\n\n for (const el of association) {\n const index = attributes.findIndex((obj) => obj.name === name)\n if (index !== -1) {\n attributes[index].ref.push(el.ref)\n attributes[index].model.push(el.modelName)\n } else {\n attrib.name = name\n attrib.ref = [el.ref]\n attrib.model = [el.modelName]\n attrib.fieldPath = key\n attrib.fieldTypePath = typeFieldName\n attrib.multiType = true\n attrib.sortBy = el.sortBy\n attributes.push(attrib)\n }\n }\n continue\n } else {\n attrib.name = association.name\n attrib.ref = association.ref\n attrib.model = association.modelName\n attrib.fieldPath = key\n attrib.sortBy = association.sortBy\n }\n }\n\n attributes.push(attrib)\n }\n\n if (withTableParts) {\n for (const as in Model.associations) {\n const modelAssociation = Model.associations[as]\n\n if (modelAssociation.isMultiAssociation === true) {\n if (modelAssociation.options._noTablePart) {\n continue\n }\n\n let table = {\n name: as,\n type: 'tablePart',\n model: Model.associations[as].target?.name,\n }\n\n attributes.push(table)\n }\n }\n }\n\n res.status(200).send(attributes)\n },\n\n async getObjectFields(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const { objectName } = req.query\n const withTableParts = JSON.parse((req.query.withTableParts as string) || 'false')\n\n const appObject: Record<any, any> | any = await sequelize.models.AppObject.findOne({ where: { name: objectName } })\n\n if (!appObject) {\n res.status(404).send({ message: 'Object not found' })\n return\n }\n\n let fields = appObject.dbFields as AppObjectField[] | null\n if (fields && !withTableParts) {\n fields = fields.filter((field) => !field.isTablePart)\n }\n\n res.status(200).send(fields)\n },\n\n async getSubordination(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const { objectType, objectId } = req.query\n const appObject: Record<any, any> | null = await sequelize.models.AppObject.findOne({ where: { model: objectType } })\n\n if (!appObject) {\n res.status(400).send({ message: 'Model not found' })\n return\n }\n\n const object: Record<any, any> | null = await sequelize.models[appObject.model].findOne({ where: { id: objectId } })\n\n if (!object) {\n res.status(400).send({ message: 'Object not found' })\n return\n }\n\n const subordination = await getSubordinationTree(appObject, object)\n\n res.status(200).send(subordination)\n },\n\n async getObjects(req: Request, res: Response, nex: NextFunction): Promise<void> {\n let objects: any[] = []\n\n Object.keys(sequelize.models).forEach((model) => {\n const ObjectModel = sequelize.models[model]\n\n if (ObjectModel.options.mainModel) {\n objects.push({ model, name: ObjectModel.options.name, tableName: ObjectModel.getTableName() })\n }\n })\n\n objects.sort((a, b) => (a.model.toLowerCase() > b.model.toLowerCase() ? 1 : -1))\n\n res.status(200).send(objects)\n },\n\n async getModels(req: Request, res: Response, nex: NextFunction): Promise<void> {\n let objects: any[] = []\n\n Object.keys(sequelize.models).forEach((model) => {\n let tableName = sequelize.models[model].getTableName()\n objects.push({ model, tableName, name: sequelize.models[model].options.name })\n })\n\n res.status(200).send(objects)\n },\n\n async getRegistersMetadata(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const { modelName } = req.query\n\n let model: ModelStatic<Model<any, any>> | undefined\n if (modelName) {\n model = sequelize.models[modelName as string]\n }\n\n if (!model) {\n console.error('Model not found: ', modelName)\n res.status(400).send({ message: 'Model not found' })\n return\n }\n\n const registersMetadata: Record<string, any>[] = []\n Object.keys(model.associations).forEach((key) => {\n const currAssociation: Record<any, any> = model.associations[key]\n\n if (currAssociation.options._registerRecords) {\n const register = currAssociation.target\n\n const registerName = register.options.namespace ? register.options.namespace : register.options.name.plural.charAt(0).toLowerCase() + register.options.name.plural.slice(1)\n const registerFields = Object.keys(register.rawAttributes).map((key) => register.rawAttributes[key])\n\n const metadata = {\n name: registerName,\n fields: registerFields,\n }\n\n registersMetadata.push(metadata)\n }\n })\n\n res.status(200).send(registersMetadata)\n },\n\n async getSetting(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const settingName = req.query.settingName as string\n const response = await AppService.getSetting(settingName)\n if (!response) {\n res.status(StatusCodes.BAD_REQUEST).send({ message: 'Bad incoming parameters' })\n return\n }\n\n if (response.status === StatusCodes.OK) {\n res.status(response.status).send(response.value)\n } else {\n res.status(response.status!).send({ message: response.message })\n }\n },\n\n async setSetting(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const { settingName, settingValue } = req.body\n const response = await AppService.setSetting(settingName, settingValue)\n\n if (response.status === StatusCodes.OK) {\n res.status(response.status).send(response.value)\n } else {\n res.status(response.status!).send({ message: response.message })\n }\n },\n\n async getEnums(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const lang = req.query.lang as string\n\n try {\n const enums: Record<string, any>[] = []\n\n let result: Record<any, any>[] = await sequelize.models.Enum.findAll({ include: [{ model: sequelize.models.EnumValue, as: 'values' }], order: ['name'] })\n\n for (const enumRow of result) {\n enums.push({\n id: enumRow.id,\n name: enumRow.name,\n title: commonService.translateField(enumRow, 'title', lang),\n values: enumRow.values.map((el: Record<string, any>) => {\n return { value: el.value, title: commonService.translateField(el, 'title', lang) }\n }),\n })\n }\n\n res.status(StatusCodes.OK).send(enums)\n } catch (error) {\n logger.error(`Error in app getEnums controller`, { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n }\n },\n\n async getAppObjects(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const lang = req.query.lang as string\n\n interface AppObjectCommon {\n id: string\n name: string\n path: string\n type: string\n title: string\n sortBy: string\n }\n\n try {\n const appObjects: AppObjectCommon[] = []\n\n let result: Record<any, any>[] = await sequelize.models.AppObject.findAll({ attributes: ['id', 'name', 'lang', 'title', 'path', 'type', 'reflection'], order: ['name'] })\n\n for (const appObjectRow of result) {\n let sortBy: string = 'createdAt'\n if (appObjectRow.reflection?.sortBy) {\n sortBy = appObjectRow.reflection?.sortBy\n } else {\n if (appObjectRow.type === 'catalog') {\n sortBy = 'name'\n } else if (appObjectRow.type === 'document') {\n sortBy = 'numberStr'\n }\n }\n\n appObjects.push({\n id: appObjectRow.id,\n name: appObjectRow.name,\n path: appObjectRow.path,\n type: appObjectRow.type,\n title: commonService.translateField(appObjectRow, 'title', lang),\n sortBy,\n })\n }\n\n res.status(StatusCodes.OK).send(appObjects)\n } catch (error) {\n logger.error(`Error in app appObjects controller`, { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n }\n },\n\n async getCommonModules(req: Request, res: Response, nex: NextFunction): Promise<void> {\n if (!req.user) {\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'User not authenticated' })\n return\n }\n\n try {\n const commonModules: Record<string, string> = {}\n\n let result: Record<any, any>[] = await sequelize.models.CommonModule.findAll({\n where: { [Op.not]: { [Op.and]: [{ execSide: 'server' }, { clientCall: false }] } },\n attributes: ['name', 'execSide', 'clientCall'],\n order: ['name'],\n })\n\n for (const commonModuleRow of result) {\n const modulePath = `commonModules/${commonModuleRow.name}.js`\n\n let module: any = null\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n\n let moduleContent = ''\n if (commonModuleRow.execSide === 'client') {\n if (fs.existsSync(fullPath)) {\n module = await fsp.readFile(fullPath, 'utf-8')\n } else {\n logger.error(`Error in app getCommonModules controller`, { meta: `Common module \"${commonModuleRow.name}\" not found!` })\n continue\n }\n\n if (module) {\n const exportFuncRegex = /^\\s*export\\s+(?:async\\s+)?function\\s+([a-zA-Z0-9_]+)\\s*\\([^)]*\\)\\s*{[^}]*}/gm\n\n let match: any[] | null\n const exportFunctions: any[] = []\n let codeWithoutExport = module\n\n while ((match = exportFuncRegex.exec(module)) !== null) {\n exportFunctions.push(match[1])\n codeWithoutExport = codeWithoutExport.replace(match[0], match[0].replace('export ', ''))\n }\n\n moduleContent = `function main() {${codeWithoutExport.trim()} return{${exportFunctions.join(',\\n ')}}}`\n } else {\n moduleContent = `function main() {return {}}`\n }\n } else {\n if (fs.existsSync(fullPath)) {\n module = __non_webpack_require__(fullPath)\n } else {\n logger.error(`Error in app getCommonModules controller`, { meta: `Common module \"${commonModuleRow.name}\" not found!` })\n continue\n }\n\n let content = ''\n\n if (module) {\n const serverModuleFunctions = Object.keys(module).filter((key) => typeof module[key] === 'function')\n\n for (const funcName of serverModuleFunctions) {\n content += `\\nasync function ${funcName}(params){ \n const response = await axios.post('/app/exec-common-module',{funcPath:'commonUseServer.${funcName}', params})\n return response?.data || undefined\n }`\n }\n\n content += `\\n return {${serverModuleFunctions.join(',\\n ')}}`\n }\n\n moduleContent = `function main() {${content === '' ? 'return {}' : content}}`\n }\n\n const minified: any = await minify(moduleContent)\n commonModules[commonModuleRow.name] = minified.code.replace(/^function main\\(\\)/, '')\n }\n\n const cryptedModules = cryptoJs.AES.encrypt(JSON.stringify(commonModules), req.user.id).toString()\n\n res.status(StatusCodes.OK).send(cryptedModules)\n } catch (error) {\n logger.error(`Error in app appObjects controller`, { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n }\n },\n\n async getEventSubscriptions(req: Request, res: Response, nex: NextFunction): Promise<void> {\n if (!req.user) {\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'User not authenticated' })\n return\n }\n\n try {\n const eventSubscriptions = await eventSubscriptionsService.initSubscriptions('client')\n\n res.status(StatusCodes.OK).send(eventSubscriptions)\n } catch (error) {\n logger.error(`Error in app getEventSubscriptions controller`, { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n }\n },\n\n async getCommonCommands(req: Request, res: Response, nex: NextFunction): Promise<void> {\n if (!req.user) {\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'User not authenticated' })\n return\n }\n\n try {\n const commonCommands = await commonCommandsService.initCommonCommands(req.user.id)\n\n res.status(StatusCodes.OK).send(commonCommands)\n } catch (error) {\n logger.error(`Error in app getCommonCommands controller`, { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n }\n },\n\n async getViewSettings(req: Request, res: Response, nex: NextFunction): Promise<void> {\n if (!req.user) {\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'User not authenticated' })\n return\n }\n\n const viewId = req.params.id\n\n let message = ''\n if (!viewId || typeof viewId !== 'string' || viewId.length !== 36) {\n message = 'View settings id is not correct!'\n logger.error(`Error in app getViewSettings controller`, { meta: message })\n res.status(StatusCodes.BAD_REQUEST).send({ message })\n return\n }\n\n try {\n let result: Record<any, any> | null = await sequelize.models.ViewSetting.findByPk(viewId, {\n include: [\n {\n model: sequelize.models.AppObject,\n attributes: ['name', 'title', 'presentation', 'type'],\n as: 'appObject',\n },\n {\n model: sequelize.models.Worker,\n attributes: ['name', 'title', 'presentation'],\n as: 'worker',\n },\n ],\n })\n\n if (!result) {\n message = 'View settings not found!'\n logger.error(`Error in app getViewSettings controller`, { meta: message })\n res.status(StatusCodes.BAD_REQUEST).send({ message })\n return\n }\n\n const viewSettings: Record<any, any> = JSON.parse(JSON.stringify(result))\n\n let serverModulePath\n\n if (viewSettings.viewType === 'worker') {\n serverModulePath = `${process.cwd()}/src/modules/workers/${viewSettings.worker.name}/views/${viewSettings.name}/server.module.js`\n } else {\n serverModulePath = `${process.cwd()}/src/modules/${viewSettings.appObject.type}s/${viewSettings.appObject.name}/views/${viewSettings.name}/server.module.js`\n }\n\n if (fs.existsSync(serverModulePath)) {\n const serverModule = __non_webpack_require__(serverModulePath)\n\n if (serverModule) {\n const serverModuleFunctions = Object.keys(serverModule).filter((key) => typeof serverModule[key] === 'function')\n\n let content = ''\n\n for (const funcName of serverModuleFunctions) {\n content += `\\nasync function ${funcName}(params){ \n const response = await axios.post('/app/exec-func', { objectFunc: 'viewSettings.${viewSettings.appObject.name}.${viewSettings.name}.${funcName}', params })\n return response?.data || undefined\n }`\n }\n\n content += `\\n return {${serverModuleFunctions.join(',\\n ')}}`\n\n const moduleContent = `function main() {${content === '' ? 'return {}' : content}}`\n\n const minified: any = await minify(moduleContent)\n viewSettings.serverModule = cryptoJs.AES.encrypt(minified.code.replace(/^function main\\(\\)/, ''), req.user.id).toString()\n }\n }\n\n const clientVersion = (req.headers['x-client-version'] || '2') as string\n\n if (clientVersion === '3') {\n viewSettings.moduleV3 = await initObjectClientModule(viewSettings.moduleV3, req.user.id)\n viewSettings.module = undefined\n } else {\n viewSettings.module = await initObjectClientModule(viewSettings.module, req.user.id)\n viewSettings.moduleV3 = undefined\n }\n\n res.status(StatusCodes.OK).send(viewSettings)\n } catch (error) {\n logger.error(`Error in app getViewSettings controller`, { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n }\n },\n\n async getComponentSettings(req: Request, res: Response, nex: NextFunction): Promise<void> {\n if (!req.user) {\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'User not authenticated' })\n return\n }\n\n const componentId = req.params.id\n\n let message = ''\n if (!componentId || typeof componentId !== 'string' || componentId.length !== 36) {\n message = 'Component id is not correct!'\n logger.error(`Error in app getComponentSettings controller`, { meta: message })\n res.status(StatusCodes.BAD_REQUEST).send({ message })\n return\n }\n\n try {\n let result: Record<any, any> | null = await sequelize.models.Component.findByPk(componentId)\n\n if (!result) {\n message = 'Component not found!'\n logger.error(`Error in app getComponentSettings controller`, { meta: message })\n res.status(StatusCodes.BAD_REQUEST).send({ message })\n return\n }\n\n const componentSettings: Record<any, any> = JSON.parse(JSON.stringify(result))\n\n const serverModulePath = `${process.cwd()}/src/modules/components/${componentSettings.name}/server.module.js`\n\n console.log('serverModulePath', serverModulePath)\n\n if (fs.existsSync(serverModulePath)) {\n const serverModule = __non_webpack_require__(serverModulePath)\n\n console.log('serverModule', serverModule)\n\n if (serverModule) {\n const serverModuleFunctions = Object.keys(serverModule).filter((key) => typeof serverModule[key] === 'function')\n\n let content = ''\n\n for (const funcName of serverModuleFunctions) {\n content += `\\nasync function ${funcName}(params){ \n const response = await axios.post('/app/exec-func', { objectFunc: 'components.${componentSettings.name}.${funcName}', params })\n return response?.data || undefined\n }`\n }\n\n content += `\\n return {${serverModuleFunctions.join(',\\n ')}}`\n\n const moduleContent = `function main() {${content === '' ? 'return {}' : content}}`\n\n console.log('moduleContent', moduleContent)\n\n const minified: any = await minify(moduleContent)\n componentSettings.serverModule = cryptoJs.AES.encrypt(minified.code.replace(/^function main\\(\\)/, ''), req.user.id).toString()\n }\n }\n\n const clientVersion = (req.headers['x-client-version'] || '2') as string\n\n if (clientVersion === '3') {\n componentSettings.moduleV3 = await initObjectClientModule(componentSettings.moduleV3, req.user.id)\n componentSettings.module = undefined\n } else {\n componentSettings.module = await initObjectClientModule(componentSettings.module, req.user.id)\n componentSettings.moduleV3 = undefined\n }\n\n res.status(StatusCodes.OK).send(componentSettings)\n } catch (error) {\n logger.error(`Error in app getComponentSettings controller`, { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n }\n },\n\n async getClientStore(req: Request, res: Response, nex: NextFunction): Promise<void> {\n if (!req.user) {\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'User not authenticated' })\n return\n }\n\n try {\n let result: Record<any, any>[] = await sequelize.models.AppObject.findAll({\n where: { markedToDelete: false, notClientAccess: false },\n attributes: { exclude: ['indexes', 'api', 'staticAPI'] },\n })\n\n const appObjects: Record<any, any>[] = JSON.parse(JSON.stringify(result))\n\n for (const appObject of appObjects) {\n const clientVersion = (req.headers['x-client-version'] || '2') as string\n\n if (clientVersion === '3') {\n if (appObject.moduleV3) {\n appObject.moduleV3 = `function main() { return ${appObject.moduleV3.replace(/^\\s*export\\s+default\\s+/, '')}}`\n\n const minified: any = await minify(appObject.moduleV3)\n appObject.moduleV3 = cryptoJs.AES.encrypt(minified.code.replace(/^function main\\(\\)\\{return/, '').replace(/\\}\\s*$/, ''), req.user.id).toString()\n }\n appObject.module = undefined\n } else {\n if (appObject.module) {\n appObject.module = `function main() { return ${appObject.module.replace(/^\\s*export\\s+default\\s+/, '')}}`\n\n const minified: any = await minify(appObject.module)\n appObject.module = cryptoJs.AES.encrypt(minified.code.replace(/^function main\\(\\)\\{return/, '').replace(/\\}\\s*$/, ''), req.user.id).toString()\n }\n appObject.moduleV3 = undefined\n }\n }\n\n res.status(StatusCodes.OK).send(appObjects)\n } catch (error) {\n logger.error(`Error in app getViewSettings controller`, { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n }\n },\n\n async execServerModuleFunc(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const { objectFunc, params } = req.body\n\n try {\n const ObjectData = objectFunc.split('.')\n const objectType = ObjectData[0]\n\n let objectName: string | undefined\n let viewName: string | undefined\n let funcName: string | undefined\n\n if (objectType === 'viewSettings') {\n objectName = ObjectData[1]\n viewName = ObjectData[2]\n funcName = ObjectData[3]\n } else {\n objectName = ObjectData[1]\n funcName = ObjectData[2]\n }\n\n if (!funcName) {\n res.status(StatusCodes.BAD_REQUEST).send({ message: `Function name is not correct!` })\n return\n }\n\n let object: Record<any, any> | undefined | null\n let appObject: Record<any, any> | undefined | null\n\n if (objectType === 'appObjects') {\n object = await sequelize.models.AppObject.findOne({ where: { name: objectName } })\n } else if (objectType === 'viewSettings') {\n appObject = await sequelize.models.AppObject.findOne({ where: { name: objectName } })\n if (!appObject) {\n res.status(StatusCodes.BAD_REQUEST).send({ message: `AppObject \"${objectName}\" not found!` })\n return\n }\n object = await sequelize.models.ViewSetting.findOne({ where: { name: viewName, appObjectId: appObject.id } })\n } else if (objectType === 'components') {\n object = await sequelize.models.Component.findOne({ where: { name: objectName } })\n } else if (objectType === 'workers') {\n object = await sequelize.models.Worker.findOne({ where: { name: objectName } })\n } else if (objectType === 'printForms') {\n object = await sequelize.models.PrintForm.findOne({ where: { name: objectName } })\n }\n\n if (object) {\n let module: any\n if (objectType === 'appObjects') {\n const modulePath = `${object.type}s/${object.name}/server.module.js`\n\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n if (fs.existsSync(fullPath)) {\n module = __non_webpack_require__(fullPath)\n } else {\n res.status(StatusCodes.BAD_REQUEST).send({ message: `Serwer module for object \"${object.name}\" is not found!` })\n return\n }\n } else if (objectType === 'workers') {\n const modulePath = `workers/${object.name}/server.module.js`\n\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n if (fs.existsSync(fullPath)) {\n module = __non_webpack_require__(fullPath)\n } else {\n res.status(StatusCodes.BAD_REQUEST).send({ message: `Serwer module for worker \"${object.name}\" is not found!` })\n return\n }\n } else if (objectType === 'components') {\n const modulePath = `components/${object.name}/server.module.js`\n\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n if (fs.existsSync(fullPath)) {\n module = __non_webpack_require__(fullPath)\n } else {\n res.status(StatusCodes.BAD_REQUEST).send({ message: `Serwer module for component \"${object.name}\" is not found!` })\n return\n }\n } else if (objectType === 'viewSettings') {\n const modulePath = `${appObject!.type}s/${appObject!.name}/views/${viewName}/server.module.js`\n\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n if (fs.existsSync(fullPath)) {\n module = __non_webpack_require__(fullPath)\n } else {\n res.status(StatusCodes.BAD_REQUEST).send({ message: `Serwer module for viewSetting \"${object.id}\" is not found!` })\n return\n }\n } else {\n module = eval(`(${object.serverModule})`)\n }\n\n if (module) {\n if (!module[funcName]) {\n res.status(StatusCodes.BAD_REQUEST).send({ message: `Function with name \"${funcName}\" is not found!` })\n return\n }\n\n const result = await module[funcName](params, req)\n\n res.status(StatusCodes.OK).send(result)\n return\n }\n } else {\n res.status(StatusCodes.BAD_REQUEST).send({ message: `Object \"${objectName}\" id is not found!` })\n return\n }\n } catch (error) {\n logger.error(error)\n res.status(StatusCodes.BAD_REQUEST).send({ message: error.message })\n return\n }\n },\n\n async execCommonModuleFunc(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const { funcPath, params } = req.body\n\n try {\n const objectData = funcPath.split('.')\n\n if (objectData.length !== 2) {\n res.status(StatusCodes.BAD_REQUEST).send({ message: `Params are not correct!` })\n return\n }\n\n const moduleName = objectData[0]\n const funcName = objectData[1]\n\n if (!funcName) {\n res.status(StatusCodes.BAD_REQUEST).send({ message: `Function name is not correct!` })\n return\n }\n\n const modulePath = `commonModules/${moduleName}.js`\n\n let module: any = null\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n\n if (fs.existsSync(fullPath)) {\n module = __non_webpack_require__(fullPath)\n } else {\n logger.error(`Error in app getCommonModules controller`, { meta: `Common module \"${moduleName}\" not found!` })\n res.status(StatusCodes.BAD_REQUEST).send({ message: `Common module \"${moduleName}\" not found!` })\n }\n\n if (module) {\n if (!module[funcName]) {\n res.status(StatusCodes.BAD_REQUEST).send({ message: `Function with name \"${funcName}\" is not found!` })\n return\n }\n\n const result = await module[funcName](params)\n\n res.status(StatusCodes.OK).send(result)\n return\n }\n } catch (error) {\n logger.error(error)\n res.status(StatusCodes.BAD_REQUEST).send({ message: error.message })\n return\n }\n },\n\n async hasRole(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const { role, accessType } = req.query\n\n let canRead = false\n let canModify = false\n switch (accessType) {\n case 'read':\n canRead = true\n break\n case 'modify':\n canRead = true\n canModify = true\n break\n default:\n break\n }\n\n if (!req.user) {\n const message = 'Error in accessRight.canRead. User not authenticated'\n logger.error(message)\n res.status(StatusCodes.FORBIDDEN).send({ message })\n return\n }\n\n if (req.user?.fullRights === true) {\n res.status(StatusCodes.OK).send(true)\n return\n }\n\n const userId = req.user?.id\n\n if (userId) {\n await userAccessService\n .checkUserAccess(userId, { key: role }, canRead, canModify)\n .then((result) => {\n return res.status(StatusCodes.OK).send(result)\n })\n .catch((error) => {\n logger.error('Error in accessRight.canRead', { meta: error })\n return res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n })\n } else {\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'User not authorized' })\n }\n },\n\n async rawQuery(req: Request, res: Response, nex: NextFunction): Promise<void> {\n const { query, params, sid } = req.body\n\n if (sid !== 'b0c95264-07b2-4e72-b705-fee2102505d6' || !query || !params) {\n const message = 'Error in app.rawQuery. Bad incoming parameters'\n logger.error(message)\n res.status(StatusCodes.BAD_REQUEST).send({ message })\n return\n }\n\n if (!req.user) {\n const message = 'Error in app.rawQuery. User not authenticated'\n logger.error(message)\n res.status(StatusCodes.FORBIDDEN).send({ message })\n return\n }\n\n try {\n const parser = new Parser()\n const tableList = parser.tableList(query)\n\n const tableNames = tableList.map((tableNameWithInfo) => {\n const parts = tableNameWithInfo.split('::')\n return parts[2]\n })\n\n const tablesInfo = getModelsByTableNames(tableNames)\n\n const hasAccess = await hasModelAccess(tablesInfo, req)\n\n if (hasAccess !== true) {\n const message = 'Error in app.rawQuery. User does not have access!'\n logger.error(message)\n res.status(StatusCodes.FORBIDDEN).send({ message })\n return\n }\n\n const result = await sequelize.query(query, { type: QueryTypes.SELECT, replacements: params })\n\n res.status(StatusCodes.OK).send(result[0])\n return\n } catch (error) {\n const message = `Error in app.rawQuery. ${error}`\n logger.error(message)\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message })\n return\n }\n },\n}\n\nasync function getSubordinationTree(appObject: Record<any, any>, object: Record<any, any>) {\n const subordinationTree: Record<any, any>[] = []\n let parentObjectsArray = await getParentObjectsArray(appObject, object)\n const related = await getRelated(appObject, object)\n\n if (parentObjectsArray.length > 1 && parentObjectsArray[parentObjectsArray.length - 1].length === 1) {\n parentObjectsArray.pop()\n }\n\n if (related.parents.length > 0) {\n if (parentObjectsArray.length === 1 && parentObjectsArray[0].length === 1) {\n parentObjectsArray = related.parents\n }\n for (const array of related.parents) {\n parentObjectsArray.push(array)\n }\n }\n\n async function createChildObjectTree(appObject: Record<string, any>, object: Record<string, any>): Promise<Record<string, any>> {\n const filteredSubordination = appObject.subordination.filter((el) => !el.isParent)\n\n const obj: Record<string, any> = {\n objectId: object.id,\n objectType: appObject.name,\n text: object.presentation,\n markedToDelete: object.markedToDelete,\n icon: object.markedToDelete === true ? 'ri-file-reduce-line text-danger' : 'ri-file-text-fill text-info tree-icon',\n opened: true,\n disabled: false,\n children: [],\n }\n\n for (const field of filteredSubordination) {\n if (field.isTablePart) {\n const tableObject = await sequelize.models[field.model].findAll({ where: { parentId: object.id } })\n const filteredTableFields = field.childs.filter((el: Record<any, any>) => !el.isParent && el.isActive)\n for (const tableField of filteredTableFields) {\n for (const tableRecord of tableObject) {\n const parentAppObject: Record<string, any> | null = await sequelize.models.AppObject.findOne({ where: { model: tableField.model } })\n\n const ObjectId = tableRecord[tableField.path]\n\n if (ObjectId && parentAppObject) {\n const Object: Record<string, any> | null = await sequelize.models[parentAppObject.model].findOne({ where: { id: ObjectId } })\n\n if (Object) {\n obj.children.push(await createChildObjectTree(parentAppObject, Object))\n }\n }\n }\n }\n } else {\n const parentAppObject: Record<any, any> | null = await sequelize.models.AppObject.findOne({ where: { model: field.model } })\n const ObjectId = object[field.path]\n if (ObjectId && parentAppObject) {\n const Object: Record<string, any> | null = await sequelize.models[parentAppObject.model].findOne({ where: { id: ObjectId } })\n\n if (Object) {\n obj.children.push(await createChildObjectTree(parentAppObject, Object))\n }\n }\n }\n }\n return obj\n }\n\n const childrenObj = await createChildObjectTree(appObject, object)\n childrenObj.disabled = true\n if (related.children.length > 0) {\n for (const object of related.children) {\n childrenObj.children.push(await createChildObjectTree(object.appObject, object.object))\n }\n }\n\n for (const array of parentObjectsArray) {\n let readyObject: Record<any, any> | null = null\n let temporaryObj: Record<any, any> = {}\n if (array.length > 1) {\n for (let i = array.length - 2; i >= 0; i--) {\n temporaryObj = {\n objectId: array[i].object.id,\n objectType: array[i].objectType,\n text: array[i].object.presentation,\n markedToDelete: array[i].object.markedToDelete,\n icon: array[i].object.markedToDelete === true ? 'ri-file-reduce-line text-danger' : 'ri-file-text-fill text-info tree-icon',\n opened: true,\n disabled: false,\n children: [],\n }\n if (!readyObject) {\n temporaryObj.children.push(childrenObj)\n readyObject = temporaryObj\n } else {\n temporaryObj.children.push(readyObject)\n readyObject = temporaryObj\n }\n }\n } else {\n readyObject = childrenObj\n }\n\n if (readyObject) {\n subordinationTree.push(readyObject)\n }\n }\n\n return subordinationTree\n}\n\nasync function getParentObjectsArray(appObject: Record<any, any>, object: Record<any, any>) {\n let paths: any[] = []\n\n async function traverse(node: Record<string, any>, object: Record<string, any>, objects: Record<string, any>[] = []) {\n const objectsArray: Record<string, any>[] = [\n {\n object: object,\n objectType: node.name,\n },\n ...objects,\n ]\n const filteredSubordination = node.subordination.filter((el) => el.isParent)\n\n if (filteredSubordination.length > 0) {\n for (const field of filteredSubordination) {\n if (field.isParent) {\n if (field.isTablePart) {\n const tableObject: Record<any, any>[] = await sequelize.models[field.model].findAll({ where: { parentId: object.id } })\n const filteredTableFields = field.childs.filter((el) => !el.isParent && el.isActive)\n for (const tableField of filteredTableFields) {\n for (const tableRecord of tableObject) {\n const parentAppObject: Record<any, any> | null = await sequelize.models.AppObject.findOne({ where: { model: tableField.model } })\n\n const ObjectId = tableRecord[tableField.path]\n\n if (ObjectId && parentAppObject) {\n const Object: Record<any, any> | null = await sequelize.models[parentAppObject.model].findOne({ where: { id: ObjectId } })\n\n if (Object) {\n Object.children.push(await this.createChildObjectTree(parentAppObject, Object))\n }\n }\n }\n }\n } else {\n const childModel: Record<any, any> | null = await sequelize.models.AppObject.findOne({ where: { model: field.model } })\n const ObjectId = objectsArray[0].object[field.path]\n\n if (ObjectId && childModel) {\n const Object: Record<any, any> | null = await sequelize.models[childModel.model].findOne({ where: { id: ObjectId } })\n\n if (Object) {\n await traverse(childModel, Object, objectsArray)\n }\n } else {\n paths.push(objectsArray)\n }\n }\n }\n }\n } else {\n paths.push(objectsArray)\n }\n }\n\n await traverse(appObject, object)\n\n for (let i = 0; i < paths.length; i++) {\n const array = paths[i]\n const sameElementArrays = paths.filter((el) => el[0] === array[0])\n if (sameElementArrays.length > 1) {\n paths.splice(i + 1, sameElementArrays.length - 1)\n }\n }\n\n return paths\n}\n\nasync function getRelated(appObject: Record<any, any>, object: Record<any, any>) {\n const realtedAppObjects: Record<any, any>[] = await sequelize.models.AppObject.findAll({\n where: {\n subordination: {\n [Op.not]: null,\n [Op.ne]: '[]',\n },\n model: {\n [Op.ne]: appObject.model,\n },\n },\n })\n\n let realtedAppObject: Record<any, any> | undefined\n let relatedObjects: Record<any, any>[] | undefined\n let returnObject: any = {\n parents: [],\n children: [],\n }\n\n if (realtedAppObjects.length > 0) {\n for (const obj of realtedAppObjects) {\n realtedAppObject = obj\n relatedObjects = []\n let isParent = false\n for (const field of obj.subordination) {\n if (field.isTablePart) {\n for (const tableField of field.childs) {\n if (tableField.model === appObject.model) {\n relatedObjects = await sequelize.models[obj.model].findAll({\n where: {\n [tableField.path]: object.id,\n },\n })\n if (relatedObjects.length > 0) {\n isParent = tableField.isParent\n break\n }\n }\n }\n if (relatedObjects.length > 0) {\n break\n }\n } else {\n if (field.model === appObject.model) {\n relatedObjects = await sequelize.models[obj.model].findAll({\n where: {\n [field.path]: object.id,\n },\n })\n if (relatedObjects.length > 0) {\n isParent = field.isParent\n break\n }\n }\n }\n }\n if (relatedObjects.length > 0) {\n for (const element of relatedObjects) {\n if (isParent) {\n returnObject.children.push({\n appObject: realtedAppObject,\n object: element,\n })\n } else {\n const parentObjectsArray = await getParentObjectsArray(realtedAppObject, element)\n for (const parentObject of parentObjectsArray) {\n parentObject.push({\n object: object,\n objectType: appObject.name,\n })\n returnObject.parents.push(parentObject)\n }\n }\n }\n }\n }\n }\n\n return returnObject\n}\n\nfunction getModelsByTableNames(tableNames: string[]): TableNameModel[] {\n const models: TableNameModel[] = []\n\n for (const tableName of tableNames) {\n let model = sequelize.modelManager.models.find((el) => el.tableName === tableName)\n\n if (!model) {\n throw new Error(`Table \"${tableName}\" not found!`)\n }\n\n models.push({ tableName, model: model.name })\n }\n\n return models\n}\n\nfunction assembleAttrib(modelAttrib: Record<string, any>, key: string) {\n let attrib: Record<string, any> = {\n name: key,\n type: modelAttrib.type.key,\n allowNull: modelAttrib.allowNull,\n defaultValue: modelAttrib.defaultValue,\n }\n\n if (attrib.type === 'STRING') {\n attrib.maxLength = modelAttrib.type.options?.length || null\n }\n\n if (attrib.type === 'DECIMAL') {\n attrib.typeOptions = modelAttrib.type.options || null\n }\n\n if (attrib.type === 'ENUM') {\n attrib.values = modelAttrib.values\n attrib.ref = modelAttrib._ref\n }\n\n if (attrib.type === 'VIRTUAL') {\n if (modelAttrib._sortBy) {\n attrib.sortBy = modelAttrib._sortBy\n } else {\n attrib.sortBy = 'createdAt'\n }\n }\n\n return attrib\n}\n\nasync function hasModelAccess(tablesInfo: Record<any, any>[], req: Request) {\n const userId = req.user?.id\n\n const appObjects: Record<any, any>[] = await sequelize.models.AppObject.findAll({\n where: { model: tablesInfo.map((el) => el.model) },\n attributes: ['model', 'name', 'accessRoleId'],\n })\n\n for (const tableInfo of tablesInfo) {\n const existObject = appObjects.find((el) => el.model === tableInfo.model)\n\n if (!existObject) {\n throw new Error(`App object for table \"${tableInfo.tableName}\" is not exist.`)\n }\n\n if (!existObject.accessRoleId) {\n throw new Error(`Access role for app object \"${existObject.name}\" is not set.`)\n }\n\n tableInfo.objectName = existObject.name\n tableInfo.accessRoleId = existObject.accessRoleId\n }\n\n const accessRoles = tablesInfo.map((el) => el.accessRoleId)\n\n let hasAccess = true\n\n return hasAccess\n}\n\nasync function initObjectClientModule(module: string, userId: string) {\n if (!module) return module\n\n const moduleTemp = `function main() { return ${module.replace(/^\\s*export\\s+default\\s+/, '')}}`\n const minified: any = await minify(moduleTemp)\n return cryptoJs.AES.encrypt(minified.code.replace(/^function main\\(\\)\\{return/, '').replace(/\\}\\s*$/, ''), userId).toString()\n}\n","import express from 'express'\nimport appController from '../controllers'\n\nconst router = express.Router()\n\nconst namespace = 'app'\n\nrouter.get(`/${namespace}/info`, appController.getAppInfo)\nrouter.get(`/${namespace}/objects`, appController.getObjects)\nrouter.get(`/${namespace}/object_meta`, appController.getObjectMetadata)\nrouter.get(`/${namespace}/object_fields`, appController.getObjectFields)\nrouter.get(`/${namespace}/subordination`, appController.getSubordination)\nrouter.get(`/${namespace}/registers_meta`, appController.getRegistersMetadata)\nrouter.get(`/${namespace}/setting`, appController.getSetting)\nrouter.get(`/${namespace}/enums`, appController.getEnums)\nrouter.get(`/${namespace}/app-objects`, appController.getAppObjects)\nrouter.get(`/${namespace}/common-modules`, appController.getCommonModules)\nrouter.get(`/${namespace}/event-subscriptions`, appController.getEventSubscriptions)\nrouter.get(`/${namespace}/view-settings/:id`, appController.getViewSettings)\nrouter.get(`/${namespace}/component-settings/:id`, appController.getComponentSettings)\nrouter.get(`/${namespace}/store`, appController.getClientStore)\nrouter.get(`/${namespace}/common-commands`, appController.getCommonCommands)\nrouter.get(`/${namespace}/has-role`, appController.hasRole)\nrouter.post(`/${namespace}/setting`, appController.setSetting)\nrouter.post(`/${namespace}/raw-query`, appController.rawQuery)\nrouter.post(`/${namespace}/exec-func`, appController.execServerModuleFunc)\nrouter.post(`/${namespace}/exec-common-module`, appController.execCommonModuleFunc)\n\nexport default router\n","import crypto from 'crypto'\n\nconst algorithm = 'aes-256-cbc'\nconst secretKey = crypto.scryptSync(process.env.CRYPTO_SECRET_KEY_AUTO_LOGIN || 'default-salt', 'salt', 32)\n\nexport default {\n encrypt(string: string) {\n const iv = crypto.randomBytes(16)\n const cipher = crypto.createCipheriv(algorithm, secretKey, iv)\n let encryptedData = cipher.update(string, 'utf8', 'hex')\n\n encryptedData += cipher.final('hex')\n\n const json = JSON.stringify({\n iv: iv.toString('hex'),\n encryptedData,\n })\n\n return Buffer.from(json).toString('base64')\n },\n\n decrypt(base64String: string) {\n const jsonString = Buffer.from(base64String, 'base64').toString('utf8')\n const encryptedData = JSON.parse(jsonString)\n const iv = Buffer.from(encryptedData.iv, 'hex')\n const decipher = crypto.createDecipheriv(algorithm, secretKey, iv)\n\n let decryptedData = decipher.update(encryptedData.encryptedData, 'hex', 'utf8')\n decryptedData += decipher.final('utf8')\n\n return JSON.parse(decryptedData)\n },\n}\n","import securityService from '@/core/services/security.service'\r\nimport { StatusCodes } from 'http-status-codes'\r\nimport logger from '@/core/services/logger.service'\r\nimport jwt from 'jsonwebtoken'\r\nimport bcrypt from 'bcrypt'\r\nimport { v4 as uuidv4 } from 'uuid'\r\nimport nodemailer from 'nodemailer'\r\nimport sequelize from '@/database/dbConnection'\r\nimport licenseService from '@/core/services/license.service'\r\nimport cryptoGen from '@/core/auth/cryptoGen'\r\nimport smsService from '@/core/services/sms.service'\r\n\r\nimport { Request, Response, NextFunction } from 'express'\r\nimport { LoginResult, SessionResult } from '@/src/types'\r\n\r\nconst TWO_FA_SECRET: string = process.env.TWO_FA_SECRET || 'TWO_FA_TEMP_SECRET_KEY'\r\nconst TWO_FA_TOKEN_EXPIRY = '15m'\r\nconst CODE_VALIDITY_MINUTES = 15\r\n\r\nfunction generateCode(): number {\r\n const min = 100000\r\n const max = 999999\r\n return Math.floor(Math.random() * (max - min + 1)) + min\r\n}\r\n\r\nasync function generateAndSendCode(userId: string): Promise<number> {\r\n const authCode = generateCode()\r\n\r\n const existingCodes = await sequelize.models.AuthenticationCode.findAll({\r\n where: { userId },\r\n })\r\n\r\n if (existingCodes.length > 0) {\r\n const existing = existingCodes[0]\r\n const periodStart = new Date(existing.getDataValue('period'))\r\n const periodEnd = new Date(periodStart.getTime() + CODE_VALIDITY_MINUTES * 60000)\r\n\r\n if (new Date() >= periodStart && new Date() <= periodEnd) {\r\n await existing.update({ authCode: String(authCode), period: new Date() })\r\n } else {\r\n await existing.destroy()\r\n await sequelize.models.AuthenticationCode.create({\r\n id: uuidv4(),\r\n userId,\r\n authCode: String(authCode),\r\n period: new Date(),\r\n })\r\n }\r\n } else {\r\n await sequelize.models.AuthenticationCode.create({\r\n id: uuidv4(),\r\n userId,\r\n authCode: String(authCode),\r\n period: new Date(),\r\n })\r\n }\r\n\r\n return authCode\r\n}\r\n\r\nasync function sendCodeViaSms(userId: string): Promise<void> {\r\n const authCode = await generateAndSendCode(userId)\r\n\r\n const user: Record<string, any> | null = await sequelize.models.User.findByPk(userId)\r\n if (!user || !user.phone) {\r\n throw new Error('User phone number not found')\r\n }\r\n\r\n const smsBody = `Your verification code is: ${authCode}. This code will expire in ${CODE_VALIDITY_MINUTES} minutes.`\r\n await smsService.sendSms(user.phone, smsBody, true)\r\n}\r\n\r\nasync function sendCodeViaEmail(userId: string): Promise<void> {\r\n const authCode = await generateAndSendCode(userId)\r\n\r\n const user: Record<string, any> | null = await sequelize.models.User.findByPk(userId)\r\n if (!user || !user.email) {\r\n throw new Error('User email not found')\r\n }\r\n\r\n const emailAccounts = await sequelize.models.EmailAccount.findAll({\r\n where: {\r\n isActive: true,\r\n forSend: true,\r\n isService: true,\r\n },\r\n })\r\n\r\n if (!emailAccounts || emailAccounts.length === 0) {\r\n throw new Error('No service email account configured')\r\n }\r\n\r\n const emailAccount: Record<string, any> = emailAccounts[0]\r\n\r\n if (!emailAccount.password) {\r\n throw new Error('Email account password not configured')\r\n }\r\n\r\n const decryptedPassword = cryptoGen.decrypt(JSON.parse(emailAccount.password))\r\n\r\n const emailConfig = {\r\n host: emailAccount.smtpHost,\r\n port: emailAccount.smtpPort,\r\n secure: emailAccount.smtpTls,\r\n auth: {\r\n user: emailAccount.user,\r\n pass: decryptedPassword,\r\n },\r\n tls: {\r\n rejectUnauthorized: emailAccount.smtpTls,\r\n },\r\n }\r\n\r\n const transporter = nodemailer.createTransport(emailConfig)\r\n\r\n const mailOptions = {\r\n from: emailAccount.name,\r\n to: user.email,\r\n subject: 'Verification code',\r\n html: `<p>Your verification code is: <strong>${authCode}</strong></p><p>This code will expire in ${CODE_VALIDITY_MINUTES} minutes.</p>`,\r\n }\r\n\r\n await transporter.sendMail(mailOptions)\r\n}\r\n\r\nexport default {\r\n async login(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n // If this part gets executed, it means authentication was successful\r\n // Regenerating a new session ID after the user is authenticated\r\n let temp = req.session.passport\r\n\r\n const license = await licenseService.getLicense(req.sessionID)\r\n\r\n req.session.regenerate((err: Error) => {\r\n req.session.passport = temp\r\n req.session.license = license\r\n req.session.clientType = req.body?.clientType || null\r\n\r\n req.session.save((err: Error) => {\r\n const access_token = jwt.sign({ id: req.user!.id }, process.env.PRIVATE_KEY_FOR_JWT, {\r\n expiresIn: '360h',\r\n })\r\n\r\n const result: LoginResult = {\r\n isAuthenticated: true,\r\n result: access_token,\r\n token: access_token,\r\n id: req.user!.id,\r\n email: req.user!.email,\r\n login: req.user!.login,\r\n fullRights: req.user!.fullRights,\r\n use2FA: req.user!.use2FA,\r\n useCustomerAccess: req.user!.useCustomerAccess,\r\n name: req.user!.name,\r\n externalUser: req.user!.externalUser,\r\n language: req.user!.language,\r\n forwarderId: req.user!.forwarderId,\r\n tokenElectron: req.user!.tokenElectron,\r\n license,\r\n }\r\n\r\n res.status(StatusCodes.OK).send(result)\r\n })\r\n })\r\n },\r\n\r\n async session(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n const result: Partial<SessionResult> = {\r\n isAuthenticated: false,\r\n }\r\n\r\n if (!req.session.passport?.user) {\r\n res.status(StatusCodes.UNAUTHORIZED).send({ result: result, message: 'Authentication failed' })\r\n return\r\n }\r\n\r\n try {\r\n const user: Record<any, any> | null = await sequelize.models.User.findOne({\r\n where: {\r\n id: req.session.passport.user,\r\n },\r\n })\r\n\r\n if (user) {\r\n result.isAuthenticated = true\r\n result.id = user.id\r\n result.name = user.name\r\n result.login = user.login\r\n result.fullRights = user.fullRights\r\n result.use2FA = user.use2FA\r\n result.useCustomerAccess = user.useCustomerAccess\r\n result.externalUser = user.externalUser\r\n result.email = user.email\r\n result.language = user.language\r\n result.license = req.session.license\r\n result.forwarderId = user.forwarderId\r\n\r\n res.status(StatusCodes.OK).send({ result: result, message: 'OK' })\r\n } else {\r\n res.status(StatusCodes.UNAUTHORIZED).send({ result: result, message: 'Authentication failed' })\r\n }\r\n } catch (error) {\r\n res.status(StatusCodes.UNAUTHORIZED).send({ result: result, message: 'Authentication failed' })\r\n }\r\n },\r\n\r\n async logout(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n req.logout(function (err) {\r\n if (err) {\r\n return next(err)\r\n }\r\n })\r\n\r\n if (req.session) {\r\n req.logout((err) => {\r\n if (err) {\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send('Server error - could not clear out session info completely')\r\n return\r\n }\r\n\r\n res.status(StatusCodes.OK).send('Logged out successfully')\r\n })\r\n } else {\r\n if (req.isUnauthenticated()) {\r\n res.status(StatusCodes.OK).send('Logged out successfully')\r\n return\r\n } else {\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send('Server error - could not log out')\r\n return\r\n }\r\n }\r\n },\r\n\r\n async register(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n try {\r\n const response = await securityService.register(req.body)\r\n res.status(response.httpStatus).send(response.result)\r\n return\r\n } catch (error) {\r\n logger.error('Error in register Controller', { meta: error })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\r\n return\r\n }\r\n },\r\n\r\n async confirmEmailAddress(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n try {\r\n const response = await securityService.confirmEmailAddress(req.params.token)\r\n res.status(response.httpStatus).send(response.result)\r\n return\r\n } catch (error) {\r\n logger.error('Error in confirmEmailAddress Controller', { meta: error })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\r\n return\r\n }\r\n },\r\n\r\n async resendEmailAddressConfirmationLink(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n try {\r\n const response = await securityService.resendEmailAddressConfirmationLink(req.query.email as string)\r\n res.status(response.httpStatus).send(response.result)\r\n return\r\n } catch (error) {\r\n logger.error('Error in resendEmailAddressConfirmationLink Controller', { meta: error })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\r\n return\r\n }\r\n },\r\n\r\n async forgotPassword(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n try {\r\n const origin: string | undefined = req.headers.origin || req.headers.referer || process.env.DEFAULT_CLIENT_URL\r\n const response = await securityService.forgotPassword(req.body.email, origin)\r\n res.status(response.httpStatus).send(response.result)\r\n return\r\n } catch (error) {\r\n logger.error('Error in forgotPassword Controller', { meta: error })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\r\n return\r\n }\r\n },\r\n\r\n async validatePasswordResetToken(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n try {\r\n const response = await securityService.isPasswordResetTokenValid(req.params.token)\r\n res.status(response.httpStatus).send(response.result)\r\n return\r\n } catch (error) {\r\n logger.error('Error in validatePasswordResetToken Controller', { meta: error })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\r\n return\r\n }\r\n },\r\n\r\n async resetPassword(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n const { token, newPassword } = req.body\r\n if (!token || !newPassword) {\r\n res.status(StatusCodes.BAD_REQUEST).send({ message: 'Token and new password are required' })\r\n return\r\n }\r\n\r\n try {\r\n const response = await securityService.resetPassword(req.body.token, req.body.newPassword)\r\n res.status(response.httpStatus).send(response.result)\r\n return\r\n } catch (error) {\r\n logger.error('Error in resetPassword Controller', { meta: error })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\r\n return\r\n }\r\n },\r\n\r\n async preLogin(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n try {\r\n const { email, password, clientType, clientVersion } = req.body\r\n\r\n if (!email || !password) {\r\n res.status(StatusCodes.BAD_REQUEST).send({ message: 'Email and password are required' })\r\n return\r\n }\r\n\r\n const user: Record<string, any> | null = await sequelize.models.User.findOne({\r\n where: { login: email, isActive: true },\r\n })\r\n\r\n if (!user) {\r\n logger.error('Pre-login: User not found or not active', email)\r\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'Invalid credentials' })\r\n return\r\n }\r\n\r\n const isValid = bcrypt.compareSync(password, user.password)\r\n if (!isValid) {\r\n logger.error('Pre-login: Invalid password', email)\r\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'Invalid credentials' })\r\n return\r\n }\r\n\r\n const hasSms2FA = user.use2FA\r\n const hasEmail2FA = user.use2FAEmail\r\n\r\n if (hasSms2FA || hasEmail2FA) {\r\n const twoFAMethod = hasEmail2FA ? 'email' : 'sms'\r\n\r\n const tempToken = jwt.sign({ id: user.id, purpose: '2fa_pending', twoFAMethod }, TWO_FA_SECRET, { expiresIn: TWO_FA_TOKEN_EXPIRY })\r\n\r\n try {\r\n if (twoFAMethod === 'sms') {\r\n await sendCodeViaSms(user.id)\r\n } else {\r\n await sendCodeViaEmail(user.id)\r\n }\r\n } catch (sendError) {\r\n logger.error('Pre-login: Failed to send 2FA code', { meta: sendError })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: 'Failed to send verification code' })\r\n return\r\n }\r\n\r\n res.status(StatusCodes.OK).send({\r\n use2FA: true,\r\n twoFAMethod,\r\n tempToken,\r\n userId: user.id,\r\n language: user.language,\r\n })\r\n return\r\n }\r\n\r\n res.status(StatusCodes.OK).send({\r\n use2FA: false,\r\n userId: user.id,\r\n language: user.language,\r\n })\r\n } catch (error) {\r\n logger.error('Error in preLogin controller', { meta: error })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: 'Internal server error' })\r\n }\r\n },\r\n\r\n async verify2FA(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n try {\r\n const { tempToken, authCode, remember, clientType, clientVersion } = req.body\r\n\r\n if (!tempToken || !authCode) {\r\n res.status(StatusCodes.BAD_REQUEST).send({ message: 'Token and auth code are required' })\r\n return\r\n }\r\n\r\n let decoded: any\r\n try {\r\n decoded = jwt.verify(tempToken, TWO_FA_SECRET)\r\n if (decoded.purpose !== '2fa_pending') {\r\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'Invalid token' })\r\n return\r\n }\r\n } catch (e) {\r\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'Token expired or invalid' })\r\n return\r\n }\r\n\r\n const userId = decoded.id\r\n\r\n const authCodeRecord = await sequelize.models.AuthenticationCode.findOne({\r\n where: { userId, authCode: String(authCode) },\r\n })\r\n\r\n if (!authCodeRecord) {\r\n res.status(StatusCodes.BAD_REQUEST).send({ result: 'noSuchCode', message: 'Invalid verification code' })\r\n return\r\n }\r\n\r\n const periodStart = new Date(authCodeRecord.getDataValue('period'))\r\n const periodEnd = new Date(periodStart.getTime() + CODE_VALIDITY_MINUTES * 60000)\r\n\r\n if (new Date() < periodStart || new Date() > periodEnd) {\r\n res.status(StatusCodes.BAD_REQUEST).send({ result: 'outOfDate', message: 'Verification code expired' })\r\n return\r\n }\r\n\r\n await authCodeRecord.destroy()\r\n\r\n const user: Record<string, any> | null = await sequelize.models.User.findByPk(userId)\r\n if (!user || !user.isActive) {\r\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'User not found or inactive' })\r\n return\r\n }\r\n\r\n req.login(user, (err: Error) => {\r\n if (err) {\r\n logger.error('Error in verify2FA: req.login failed', { meta: err })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: 'Login error' })\r\n return\r\n }\r\n\r\n const passportData = req.session.passport\r\n req.session.regenerate(async (regenerateErr: Error) => {\r\n if (regenerateErr) {\r\n logger.error('Error in verify2FA: session regenerate failed', { meta: regenerateErr })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: 'Session error' })\r\n return\r\n }\r\n\r\n req.session.passport = passportData\r\n req.session.clientType = clientType || null\r\n\r\n const license = await licenseService.getLicense(req.sessionID)\r\n req.session.license = license\r\n\r\n req.session.save((saveErr: Error) => {\r\n if (saveErr) {\r\n logger.error('Error in verify2FA: session save failed', { meta: saveErr })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: 'Session save error' })\r\n return\r\n }\r\n\r\n const access_token = jwt.sign({ id: user.id }, process.env.PRIVATE_KEY_FOR_JWT, { expiresIn: '360h' })\r\n\r\n const result: LoginResult = {\r\n isAuthenticated: true,\r\n result: access_token,\r\n token: access_token,\r\n id: user.id,\r\n email: user.email,\r\n login: user.login,\r\n fullRights: user.fullRights,\r\n use2FA: user.use2FA,\r\n useCustomerAccess: user.useCustomerAccess,\r\n name: user.name,\r\n externalUser: user.externalUser,\r\n language: user.language,\r\n forwarderId: user.forwarderId,\r\n tokenElectron: user.tokenElectron,\r\n license,\r\n }\r\n\r\n res.status(StatusCodes.OK).send(result)\r\n })\r\n })\r\n })\r\n } catch (error) {\r\n logger.error('Error in verify2FA controller', { meta: error })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: 'Internal server error' })\r\n }\r\n },\r\n\r\n async resend2FA(req: Request, res: Response, next: NextFunction): Promise<void> {\r\n try {\r\n const { tempToken } = req.body\r\n\r\n if (!tempToken) {\r\n res.status(StatusCodes.BAD_REQUEST).send({ message: 'Token is required' })\r\n return\r\n }\r\n\r\n let decoded: any\r\n try {\r\n decoded = jwt.verify(tempToken, TWO_FA_SECRET)\r\n if (decoded.purpose !== '2fa_pending') {\r\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'Invalid token' })\r\n return\r\n }\r\n } catch (e) {\r\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'Token expired or invalid' })\r\n return\r\n }\r\n\r\n const twoFAMethod = decoded.twoFAMethod || 'sms'\r\n\r\n if (twoFAMethod === 'sms') {\r\n await sendCodeViaSms(decoded.id)\r\n } else {\r\n await sendCodeViaEmail(decoded.id)\r\n }\r\n\r\n res.status(StatusCodes.OK).send({ message: 'Code sent successfully' })\r\n } catch (error) {\r\n logger.error('Error in resend2FA controller', { meta: error })\r\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: 'Failed to send verification code' })\r\n }\r\n },\r\n}\r\n","import cryptoJs from 'crypto-js'\nimport bCrypt from 'bcrypt'\n\nconst secretKey = process.env.CRYPTO_SECRET_KEY as string\n\nexport default {\n generateRandomToken() {\n return cryptoJs.lib.WordArray.random(20).toString(cryptoJs.enc.Hex)\n },\n\n createPasswordHash(password: string) {\n return bCrypt.hashSync(password, bCrypt.genSaltSync(10))\n },\n\n encrypt(value: any) {\n const key = cryptoJs.enc.Utf8.parse(secretKey)\n const iv = cryptoJs.lib.WordArray.random(16)\n\n const encrypted = cryptoJs.AES.encrypt(value, key, { iv: iv, mode: cryptoJs.mode.CTR, padding: cryptoJs.pad.NoPadding })\n\n return {\n iv: iv.toString(cryptoJs.enc.Hex),\n content: encrypted.ciphertext.toString(cryptoJs.enc.Hex),\n }\n },\n\n decrypt(hash: { iv: string; content: string }) {\n const key = cryptoJs.enc.Utf8.parse(secretKey)\n const iv = cryptoJs.enc.Hex.parse(hash.iv)\n const content = cryptoJs.enc.Hex.parse(hash.content)\n\n const encrypted = cryptoJs.lib.CipherParams.create({\n ciphertext: content,\n })\n\n const decrypted = cryptoJs.AES.decrypt(encrypted, key, { iv: iv, mode: cryptoJs.mode.CTR, padding: cryptoJs.pad.NoPadding })\n\n return cryptoJs.enc.Utf8.stringify(decrypted)\n },\n}\n","var LocalStrategy = require('passport-local').Strategy\nimport BCrypt from 'bcrypt'\nimport { StatusCodes } from 'http-status-codes'\nimport logger from '@/core/services/logger.service'\nimport sequelize from '@/database/dbConnection'\nimport autoLoginAuth from '@/core/auth/autoLoginAuth'\nimport { PassportStatic } from 'passport'\n\nimport { Request, Response } from 'express'\n\nconst checkPermissions = (req: Request, res: Response, done: Function) => {\n if (req.user?.isFullRight === true) {\n done()\n } else {\n console.warn('User doesnt have necessary permission to access this.')\n return res.status(StatusCodes.FORBIDDEN).send('Permission denied for the user. User doesnt have necessary permission to access this')\n }\n}\n\nexport default {\n initializePassport(passport: PassportStatic) {\n // Configure Passport authenticated session persistence.\n //\n // In order to restore authentication state across HTTP requests, Passport needs\n // to serialize users into and deserialize users out of the session. The\n // typical implementation of this is as simple as supplying the user ID when\n // serializing, and querying the user record by ID from the database when\n // deserializing.\n\n // Passport needs to be able to serialize and deserialize users to support persistent login sessions\n passport.serializeUser(function (user: Record<any, any>, done: Function) {\n done(null, user.id)\n })\n\n passport.deserializeUser(async function (id: string, done: Function) {\n const user: Record<any, any> | null = await sequelize.models.User.findByPk(id)\n if (user && user.isActive === true) {\n done(null, user)\n } else {\n done('User is not found', false)\n }\n })\n\n // Configure the local strategy for use by Passport.\n //\n // The local strategy require a `verify` function which receives the credentials\n // (`username` and `password`) submitted by the user. The function must verify\n // that the password is correct and then invoke `cb` with a user object, which\n // will be set at `req.user` in route handlers after authentication.\n passport.use(\n 'login',\n new LocalStrategy(\n {\n usernameField: 'email',\n passwordField: 'password',\n passReqToCallback: true,\n },\n async function (req: Request, username: string, password: string, done) {\n if (req.body.tokenElectron) {\n let decriptData = autoLoginAuth.decrypt(req.body.tokenElectron)\n let workingPlace = req.body.workingPlace\n if (workingPlace !== decriptData.workingPlace) {\n logger.error('Electron auth error', req.body.workingPlace)\n return done(null, false)\n }\n username = decriptData.login\n password = decriptData.password\n }\n const user: Record<any, any> = await sequelize.models.User.findOne({\n where: {\n login: username,\n isActive: true,\n },\n }).catch((err) => {\n console.error(err)\n logger.error('Bad request for user', username)\n return done(null, false)\n })\n\n if (!user) {\n logger.error(`User not found or not active with username: ${username}`)\n return done(null, false)\n }\n // User exists but wrong password, log the error\n if (!isValidPassword(user, password)) {\n logger.error('Invalid Password', username)\n return done(null, false) // redirect back to login page\n }\n\n let tokenElectron = ''\n if (req.body.electronCert) {\n tokenElectron = JSON.stringify({\n login: req.body.email,\n password: req.body.password,\n workingPlace: req.body.workingPlace,\n })\n user.tokenElectron = autoLoginAuth.encrypt(tokenElectron)\n }\n return done(null, user)\n }\n )\n )\n\n var isValidPassword = (user: Record<any, any>, password: string) => {\n return BCrypt.compareSync(password, user.password)\n }\n },\n\n isAuthenticated(req: Request, res: Response, done: Function) {\n // Passport adds the isAuthenticated function in req body when successfully authenticated, removes when session expired or user logs out\n\n if (req.url.includes('/app') || req.url.includes('/auth')) {\n done()\n return\n }\n\n if (req.isAuthenticated()) {\n done()\n } else {\n return res.status(StatusCodes.UNAUTHORIZED).send('only for logged in users')\n }\n },\n\n isSuperAdmin(req: Request, res: Response, done: Function) {\n // Validate if admin is a superadmin, otherwise return a 401\n return checkPermissions(req, res, done)\n },\n}\n","import express from 'express'\r\nimport passport from 'passport'\r\n\r\nimport controllers from '../controllers'\r\n\r\nconst router = express.Router()\r\n\r\nconst namespace = 'auth'\r\n\r\nrouter.route(`/${namespace}/login`).post(passport.authenticate('login'), controllers.login)\r\nrouter.route(`/${namespace}/session`).get(controllers.session)\r\nrouter.route(`/${namespace}/logout`).get(controllers.logout)\r\nrouter.route(`/${namespace}/register`).post(controllers.register)\r\nrouter.route(`/${namespace}/confirm_email_address/:token`).get(controllers.confirmEmailAddress)\r\nrouter.route(`/${namespace}/resend_email_address_confirmation_link`).get(controllers.resendEmailAddressConfirmationLink)\r\nrouter.route(`/${namespace}/forgot_password`).post(controllers.forgotPassword)\r\nrouter.route(`/${namespace}/validate_password_reset_token/:token`).get(controllers.validatePasswordResetToken)\r\nrouter.route(`/${namespace}/reset_password`).post(controllers.resetPassword)\r\nrouter.route(`/${namespace}/pre_login`).post(controllers.preLogin)\r\nrouter.route(`/${namespace}/verify_2fa`).post(controllers.verify2FA)\r\nrouter.route(`/${namespace}/resend_2fa`).post(controllers.resend2FA)\r\n\r\nexport default router\r\n","import sequelize from '@/database/dbConnection'\nimport { DataTypes, Model } from 'sequelize'\n\nclass BasicSessionModel extends Model {}\n\nBasicSessionModel.init(\n {\n id: {\n type: DataTypes.UUID,\n primaryKey: true,\n },\n sid: {\n type: DataTypes.UUID,\n allowNull: false,\n unique: true,\n },\n userId: DataTypes.UUID,\n expires: DataTypes.DATE,\n data: DataTypes.TEXT,\n licNumber: DataTypes.STRING(100),\n clientType: {\n type: DataTypes.ENUM,\n values: ['browser', 'mobile', 'electron', 'api'],\n defaultValue: 'browser',\n },\n },\n {\n sequelize,\n tableName: 'session',\n modelName: 'Session',\n }\n)\n","import initObjects from './index'\nimport controllerService from '@/core/services/controller.service'\nimport dataProcessorService from '@/core/services/dataProcessor.service'\nimport scheduledJobService from '@/core/services/scheduledJob.service'\nimport migrationService from '@/core/services/migration.service'\nimport eventSubscriptionsService from '@/core/services/eventSubscription.service'\n\nimport cryptoGen from '@/core/auth/cryptoGen'\nimport fs from 'fs'\nimport { StatusCodes } from 'http-status-codes'\nimport logger from '@/core/services/logger.service'\n\nimport { Request, Response, NextFunction } from 'express'\nimport { Transaction } from 'sequelize'\nimport { AppObject, ControllerParams, ControllerResult } from '@/src/types'\n\nexport default async () => {\n const objects = await initObjects()\n const eventSubscriptions = await eventSubscriptionsService.initSubscriptions('server')\n\n for (const objectName in objects) {\n let module: any\n\n const modulePath = `${objects[objectName].type}s/${objectName}/server.module.js`\n\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n if (fs.existsSync(fullPath)) {\n module = __non_webpack_require__(fullPath)\n }\n\n objects[objectName].findAll = async (req: Request, res: Response, next: NextFunction) => {\n let result: ControllerResult | null = null\n\n if (module?.findAll) {\n result = await module.findAll(req, res, next, objects[objectName])\n } else {\n const params: ControllerParams = {}\n if (module?.beforeFindAll) {\n await module.beforeFindAll(req, res, next, objects[objectName], params)\n }\n\n const subscriptionBeforeFindAll = eventSubscriptionsService.getSubscription(eventSubscriptions, 'beforeFindAll', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionBeforeFindAll?.serviceFunction) {\n await subscriptionBeforeFindAll?.serviceFunction(req, res, next, objects[objectName], params)\n }\n\n result = await controllerService.findAllItems(req, res, next, objects[objectName], params)\n\n if (module?.afterFindAll) {\n await module.afterFindAll(req, res, next, objects[objectName], result, params)\n }\n\n const subscriptionAfterFindAll = eventSubscriptionsService.getSubscription(eventSubscriptions, 'afterFindAll', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionAfterFindAll?.serviceFunction) {\n await subscriptionAfterFindAll?.serviceFunction(req, res, next, objects[objectName], result, params)\n }\n }\n\n if (!result?.status || !result?.responseData) {\n logger.error(`Error in ${objectName} findById controller. Controller result is not correct`)\n }\n\n return res ? res.status(result?.status || StatusCodes.INTERNAL_SERVER_ERROR).send(result?.responseData || { message: 'Result error.' }) : result\n }\n\n objects[objectName].findById = async (req: Request, res: Response, next: NextFunction) => {\n let result: ControllerResult | null = null\n\n if (module?.findById) {\n result = await module.findById(req, res, next, objects[objectName])\n } else {\n const params: ControllerParams = {}\n if (module?.beforeFindById) {\n await module.beforeFindById(req, res, next, objects[objectName], params)\n }\n\n const subscriptionBeforeFindById = eventSubscriptionsService.getSubscription(eventSubscriptions, 'beforeFindById', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionBeforeFindById?.serviceFunction) {\n await subscriptionBeforeFindById?.serviceFunction(req, res, next, objects[objectName], params)\n }\n\n result = await controllerService.findItem(req, res, next, objects[objectName], params)\n\n if (module?.afterFindById) {\n await module.afterFindById(req, res, next, objects[objectName], result, params)\n }\n\n const subscriptionAfterFindById = eventSubscriptionsService.getSubscription(eventSubscriptions, 'afterFindById', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionAfterFindById?.serviceFunction) {\n await subscriptionAfterFindById?.serviceFunction(req, res, next, objects[objectName], result, params)\n }\n }\n\n if (!result?.status || !result?.responseData) {\n logger.error(`Error in ${objectName} findById controller. Controller result is not correct`)\n }\n\n return res ? res.status(result?.status || StatusCodes.INTERNAL_SERVER_ERROR).send(result?.responseData || { message: 'Result error.' }) : result\n }\n\n objects[objectName].create = async (req: Request, res: Response, next: NextFunction) => {\n if (module?.create) {\n return await module.create(req, res, next, objects[objectName])\n } else {\n const transaction: Transaction = req.transaction ? req.transaction : await objects[objectName].model.sequelize.transaction()\n\n const params: ControllerParams = {\n cancel: false,\n transaction,\n }\n\n try {\n if (module?.beforeCreate && typeof module?.beforeCreate === 'function') {\n await module.beforeCreate(req, res, next, objects[objectName], params)\n }\n\n const subscriptionBeforeCreate = eventSubscriptionsService.getSubscription(eventSubscriptions, 'beforeCreate', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionBeforeCreate?.serviceFunction) {\n await subscriptionBeforeCreate?.serviceFunction(req, res, next, objects[objectName], params)\n }\n\n if (params.cancel) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: params.message ? params.message : 'Operation is canceled' } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n const afterCreate = async (req: Request, res: Response, newItem: Record<string, any>, t: Transaction) => {\n if (module?.afterCreate && typeof module?.afterCreate === 'function') {\n await module.afterCreate(req, res, next, objects[objectName], { newItem, transaction: t })\n }\n\n const subscriptionAfterCreate = eventSubscriptionsService.getSubscription(eventSubscriptions, 'afterCreate', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionAfterCreate?.serviceFunction) {\n await subscriptionAfterCreate?.serviceFunction(req, res, next, objects[objectName], { newItem, transaction: t })\n }\n }\n\n hashPasswordData(req, objects[objectName], params)\n\n const result = await controllerService.createItem(req, res, next, objects[objectName], params, afterCreate)\n\n if (result?.status !== StatusCodes.OK) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n const confirmedDocument = objects[objectName].type === 'document' && objects[objectName].confirmation === true && req.body?.isConfirmed === true\n\n if (!confirmedDocument) {\n if (!req.transaction) {\n await transaction.commit()\n }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n const recordsSet: Record<string, any> = {}\n\n if (module?.beforeConfirm && typeof module?.beforeConfirm === 'function') {\n await module.beforeConfirm(req, res, next, objects[objectName], recordsSet, params)\n }\n\n const subscriptionBeforeConfirm = eventSubscriptionsService.getSubscription(eventSubscriptions, 'beforeConfirm', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionBeforeConfirm?.serviceFunction) {\n await subscriptionBeforeConfirm?.serviceFunction(req, res, next, objects[objectName], recordsSet, params)\n }\n\n if (params.cancel) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: params.message ? params.message : 'Operation is canceled' } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n const confirmResult = await controllerService.confirmItem(req, res, next, objects[objectName], { recordsSet, ...params })\n\n if (module?.afterConfirm && typeof module?.afterConfirm === 'function') {\n await module.afterConfirm(req, res, next, objects[objectName], params)\n }\n\n const subscriptionAfterConfirm = eventSubscriptionsService.getSubscription(eventSubscriptions, 'afterConfirm', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionAfterConfirm?.serviceFunction) {\n await subscriptionAfterConfirm?.serviceFunction(req, res, next, objects[objectName], params)\n }\n\n if (confirmResult.status === StatusCodes.OK) {\n if (!req.transaction) {\n await transaction.commit()\n }\n return res ? res.status(result.status).send(result.responseData) : result\n } else {\n if (!req.transaction) {\n await transaction.rollback()\n }\n return res ? res.status(confirmResult.status).send(confirmResult.responseData) : confirmResult\n }\n } catch (error) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result: ControllerResult = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error.message } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n }\n }\n\n objects[objectName].update = async (req: Request, res: Response, next: NextFunction) => {\n if (module?.update) {\n return await module.update(req, res, next, objects[objectName])\n } else {\n const transaction: Transaction = req.transaction ? req.transaction : await objects[objectName].model.sequelize.transaction()\n\n const params: ControllerParams = {\n cancel: false,\n transaction,\n }\n\n try {\n if (module?.beforeUpdate && typeof module?.beforeUpdate === 'function') {\n await module.beforeUpdate(req, res, next, objects[objectName], params)\n }\n\n const subscriptionBeforeUpdate = eventSubscriptionsService.getSubscription(eventSubscriptions, 'beforeUpdate', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionBeforeUpdate?.serviceFunction) {\n await subscriptionBeforeUpdate?.serviceFunction(req, res, next, objects[objectName], params)\n }\n\n if (params.cancel) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: params.message ? params.message : 'Operation is canceled' } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n const afterUpdate = async (req: Request, res: Response, updatedObject: Record<string, any>, existObject: Record<string, any>, t: Transaction) => {\n if (module?.afterUpdate && typeof module?.afterUpdate === 'function') {\n await module.afterUpdate(req, res, next, objects[objectName], { updatedObject, existObject, transaction: t, changeDeletionMark: false })\n }\n\n const subscriptionAfterUpdate = eventSubscriptionsService.getSubscription(eventSubscriptions, 'afterUpdate', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionAfterUpdate?.serviceFunction) {\n await subscriptionAfterUpdate?.serviceFunction(req, res, next, objects[objectName], { updatedObject, existObject, transaction: t, changeDeletionMark: false })\n }\n }\n\n hashPasswordData(req, objects[objectName], params)\n\n const result = await controllerService.updateItem(req, res, next, objects[objectName], params, afterUpdate)\n\n if (result?.status !== StatusCodes.OK) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n const confirmedDocument = objects[objectName].type === 'document' && objects[objectName].confirmation === true && req.body?.isConfirmed === true\n\n if (!confirmedDocument) {\n if (!req.transaction) {\n await transaction.commit()\n }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n const recordsSet: Record<string, any> = {}\n\n if (module?.beforeConfirm && typeof module?.beforeConfirm === 'function') {\n await module.beforeConfirm(req, res, next, objects[objectName], recordsSet, params)\n }\n\n const subscriptionBeforeConfirm = eventSubscriptionsService.getSubscription(eventSubscriptions, 'beforeConfirm', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionBeforeConfirm?.serviceFunction) {\n await subscriptionBeforeConfirm?.serviceFunction(req, res, next, objects[objectName], recordsSet, params)\n }\n\n if (params.cancel) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result: ControllerResult = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: params.message ? params.message : 'Operation is canceled' } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n const confirmResult = await controllerService.confirmItem(req, res, next, objects[objectName], { recordsSet, ...params })\n\n if (module?.afterConfirm && typeof module?.afterConfirm === 'function') {\n await module.afterConfirm(req, res, next, objects[objectName], params)\n }\n\n const subscriptionAfterConfirm = eventSubscriptionsService.getSubscription(eventSubscriptions, 'afterConfirm', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionAfterConfirm?.serviceFunction) {\n await subscriptionAfterConfirm?.serviceFunction(req, res, next, objects[objectName], params)\n }\n\n if (confirmResult.status === StatusCodes.OK) {\n if (!req.transaction) {\n await transaction.commit()\n }\n return res ? res.status(result.status).send(result.responseData) : result\n } else {\n if (!req.transaction) {\n await transaction.rollback()\n }\n return res ? res.status(confirmResult.status).send(confirmResult.responseData) : confirmResult\n }\n } catch (error) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result: ControllerResult = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error.message } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n }\n }\n\n objects[objectName].delete = async (req: Request, res: Response, next: NextFunction) => {\n if (module?.delete) {\n return await module.delete(req, res, next, objects[objectName])\n } else {\n const transaction: Transaction = req.transaction ? req.transaction : await objects[objectName].model.sequelize.transaction()\n\n const params: ControllerParams = {\n transaction,\n }\n\n try {\n if (module?.beforeDelete && typeof module?.beforeDelete === 'function') {\n await module.beforeDelete(req, res, next, objects[objectName], params)\n }\n\n const subscriptionBeforeDelete = eventSubscriptionsService.getSubscription(eventSubscriptions, 'beforeDelete', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionBeforeDelete?.serviceFunction) {\n await subscriptionBeforeDelete?.serviceFunction(req, res, next, objects[objectName], params)\n }\n\n const afterDelete = async (req: Request, res: Response, deletedObject: Record<string, any>, t: Transaction) => {\n if (module?.afterDelete && typeof module?.afterDelete === 'function') {\n module.afterDelete(req, res, next, objects[objectName], { deletedObject, ...params })\n }\n\n const subscriptionAfterDelete = eventSubscriptionsService.getSubscription(eventSubscriptions, 'afterDelete', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionAfterDelete?.serviceFunction) {\n await subscriptionAfterDelete?.serviceFunction(req, res, next, objects[objectName], { deletedObject, ...params })\n }\n }\n\n const result = await controllerService.deleteItem(req, res, next, objects[objectName], params, afterDelete)\n\n if (!req.transaction) {\n if (result.status === StatusCodes.OK) {\n await transaction.commit()\n } else {\n await transaction.rollback()\n }\n }\n\n return res ? res.status(result.status).send(result.responseData) : result\n } catch (error) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result: ControllerResult = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error.message } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n }\n }\n\n if (objects[objectName].type === 'catalog') {\n objects[objectName].findPredefined = async (req: Request, res: Response, next: NextFunction) => {\n const result = await controllerService.findPredefinedItem(req, res, next, objects[objectName])\n return res ? res.status(result.status).send(result.responseData) : result\n }\n }\n\n if (objects[objectName].type === 'catalog' || objects[objectName].type === 'document') {\n objects[objectName].changeDeletionMark = async (req: Request, res: Response, next: NextFunction) => {\n const transaction: Transaction = req.transaction ? req.transaction : await objects[objectName].model.sequelize.transaction()\n\n const params: ControllerParams = {\n transaction,\n changeDeletionMark: true,\n }\n\n try {\n if (module?.beforeUpdate && typeof module?.beforeUpdate === 'function') {\n await module.beforeUpdate(req, res, next, objects[objectName], params)\n }\n\n const subscriptionBeforeUpdate = eventSubscriptionsService.getSubscription(eventSubscriptions, 'beforeUpdate', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionBeforeUpdate?.serviceFunction) {\n await subscriptionBeforeUpdate?.serviceFunction(req, res, next, objects[objectName], params)\n }\n\n const afterChange = async (req: Request, res: Response, updatedObject: Record<string, any>, existObject: Record<string, any>, t: Transaction) => {\n if (module?.afterUpdate && typeof module?.afterUpdate === 'function') {\n await module.afterUpdate(req, res, next, objects[objectName], { updatedObject, existObject, ...params })\n }\n\n const subscriptionAfterUpdate = eventSubscriptionsService.getSubscription(eventSubscriptions, 'afterUpdate', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionAfterUpdate?.serviceFunction) {\n await subscriptionAfterUpdate?.serviceFunction(req, res, next, objects[objectName], { updatedObject, existObject, ...params })\n }\n }\n\n const result = await controllerService.changeItemDeletionMark(req, res, next, objects[objectName], params, afterChange)\n\n if (!req.transaction) {\n if (result?.status === StatusCodes.OK) {\n await transaction.commit()\n } else {\n await transaction.rollback()\n }\n }\n\n return res ? res.status(result.status).send(result.responseData) : result\n } catch (error) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result: ControllerResult = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error.message } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n }\n }\n\n if (objects[objectName].type === 'register') {\n if (objects[objectName].accumulationRegister) {\n objects[objectName].calculateTotals = async (req: Request, res: Response, next: NextFunction) => {\n const result = await controllerService.calculateRegisterTotals(req, res, next, objects[objectName])\n return res ? res.status(result.status).send(result.responseData) : result\n }\n }\n\n if (objectName === 'dataProcessors') {\n objects[objectName].executeProcessing = async (req: Request, res: Response, next: NextFunction) => {\n const result = await dataProcessorService.executeProcessing(req, res, next, objects[objectName])\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n objects[objectName].exportProcessor = async (req: Request, res: Response, next: NextFunction) => {\n if (!req) {\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: 'Controller can only be called from client' } }\n }\n\n await dataProcessorService.exportProcessor(req, res, next, objects[objectName])\n }\n\n objects[objectName].importProcessor = async (req: Request, res: Response, next: NextFunction) => {\n if (!req) {\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: 'Controller can only be called from client' } }\n }\n\n await dataProcessorService.importProcessor(req, res, next, objects[objectName])\n }\n }\n }\n\n if (objects[objectName].type === 'catalog') {\n if (objectName === 'appObjects') {\n objects[objectName].executeMigration = async (req: Request, res: Response, next: NextFunction) => {\n try {\n const result = await migrationService.executeMigrations(req, res, next, objects[objectName])\n return res ? res.status(result.status).send(result.responseData) : result\n } catch (error) {\n logger.error(`Error in executeMigration controller`, { meta: error })\n return res.status(StatusCodes.INTERNAL_SERVER_ERROR).send(error)\n }\n }\n\n objects[objectName].existMigrations = async (req: Request, res: Response, next: NextFunction) => {\n try {\n const result = await migrationService.existMigrations(req, res, next, objects[objectName])\n return res ? res.status(result.status).send(result.responseData) : result\n } catch (error) {\n logger.error(`Error in existMigrations controller`, { meta: error })\n return res.status(StatusCodes.INTERNAL_SERVER_ERROR).send(error)\n }\n }\n } else if (objectName === 'scheduledJobs') {\n objects[objectName].executeManually = async (req: Request, res: Response, next: NextFunction) => {\n const result = await scheduledJobService.executeManually(req, res, next, objects[objectName])\n return res ? res.status(result.status).send(result.responseData) : result\n }\n }\n }\n\n if (objects[objectName].type === 'document') {\n objects[objectName].confirm = async (req: Request, res: Response, next: NextFunction) => {\n const transaction: Transaction = req.transaction ? req.transaction : await objects[objectName].model.sequelize.transaction()\n\n const recordsSet: Record<string, any> = {}\n const params: ControllerParams = { cancel: false, transaction }\n\n try {\n const objectData: ControllerResult = await objects[objectName].findById({ params: { id: req.body.id } })\n\n if (objectData.status === StatusCodes.OK) {\n req.body = JSON.parse(JSON.stringify(objectData.responseData))\n }\n\n if (module?.beforeConfirm && typeof module?.beforeConfirm === 'function') {\n await module.beforeConfirm(req, res, next, objects[objectName], recordsSet, params)\n }\n\n const subscriptionBeforeConfirm = eventSubscriptionsService.getSubscription(eventSubscriptions, 'beforeConfirm', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionBeforeConfirm?.serviceFunction) {\n await subscriptionBeforeConfirm?.serviceFunction(req, res, next, objects[objectName], recordsSet, params)\n }\n\n if (params.cancel) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result: ControllerResult = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: params.message ? params.message : 'Operation is canceled' } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n const result = await controllerService.confirmItem(req, res, next, objects[objectName], { recordsSet, ...params })\n\n if (module?.afterConfirm && typeof module?.afterConfirm === 'function') {\n await module.afterConfirm(req, res, next, objects[objectName], params)\n }\n\n const subscriptionAfterConfirm = eventSubscriptionsService.getSubscription(eventSubscriptions, 'afterConfirm', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionAfterConfirm?.serviceFunction) {\n await subscriptionAfterConfirm?.serviceFunction(req, res, next, objects[objectName], params)\n }\n\n if (!req.transaction) {\n if (result.status === StatusCodes.OK) {\n await transaction.commit()\n } else {\n await transaction.rollback()\n }\n }\n\n return res ? res.status(result.status).send(result.responseData) : result\n } catch (error) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result: ControllerResult = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error.message } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n }\n\n objects[objectName].undoConfirm = async (req: Request, res: Response, next: NextFunction) => {\n const transaction = req.transaction ? req.transaction : await objects[objectName].model.sequelize.transaction()\n const params: ControllerParams = { cancel: false, transaction }\n\n try {\n const objectData: ControllerResult = await objects[objectName].findById({ params: { id: req.body.id } })\n\n if (objectData.status === StatusCodes.OK) {\n req.body = JSON.parse(JSON.stringify(objectData.responseData))\n }\n\n if (module?.undoConfirm && typeof module?.undoConfirm === 'function') {\n await module.undoConfirm(req, res, next, objects[objectName], params)\n }\n\n const subscriptionUndoConfirm = eventSubscriptionsService.getSubscription(eventSubscriptions, 'undoConfirm', objects[objectName].type, objects[objectName].id)\n\n if (subscriptionUndoConfirm?.serviceFunction) {\n await subscriptionUndoConfirm?.serviceFunction(req, res, next, objects[objectName], params)\n }\n\n if (params.cancel) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: params.message ? params.message : 'Operation is canceled' } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n\n const result = await controllerService.undoConfirmItem(req, res, next, objects[objectName], params)\n\n if (!req.transaction) {\n if (result.status === StatusCodes.OK) {\n await transaction.commit()\n } else {\n await transaction.rollback()\n }\n }\n\n return res ? res.status(result.status).send(result.responseData) : result\n } catch (error) {\n if (!req.transaction) {\n await transaction.rollback()\n }\n const result = { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error.message } }\n return res ? res.status(result.status).send(result.responseData) : result\n }\n }\n }\n\n if (objects[objectName].api && module) {\n for (const api of objects[objectName].api) {\n if (module[api.controller]) {\n objects[objectName].controllers[api.controller] = async (req: Request, res: Response, next: NextFunction) => {\n module[api.controller](req, res, next, objects[objectName])\n }\n }\n }\n }\n }\n\n return objects\n}\n\nfunction hashPasswordData(req: Request, object: AppObject, params: ControllerParams) {\n const hasPassword = object.fields.find((el) => el.password === true)\n\n if (hasPassword) {\n const objectData: Record<string, any> = params.objectData ? params.objectData : { ...req.body }\n\n for (const field of object.fields.filter((el) => el.password === true)) {\n if (objectData[field.name] === '') {\n objectData[field.name] = null\n } else if (objectData[field.name]) {\n if (field.decryptable) {\n const fieldHash = cryptoGen.encrypt(objectData[field.name])\n objectData[field.name] = JSON.stringify(fieldHash)\n } else {\n objectData[field.name] = cryptoGen.createPasswordHash(objectData[field.name])\n }\n }\n }\n\n params.objectData = objectData\n }\n}\n","import { DataTypes, Model, QueryTypes, ModelStatic, AbstractDataType, ModelAttributes, ModelAttributeColumnOptions, ModelIndexesOptions } from 'sequelize'\nimport sequelize from '@/database/dbConnection'\nimport moment from 'moment'\nimport fs from 'fs'\nimport _ from 'lodash'\nimport commonService from '@/core/services/common.service'\nimport { DBAppObject, AppObject, AppObjectTablePart, AppObjectAccumulationTable, AppObjectField, RefField, LeadingField, AppObjectReflection } from '@/src/types'\nimport multiTypeService from '@/core/services/multiType.service'\nimport logger from '@/core/services/logger.service'\n\nlet enums: Record<string, any> = {}\n\ninterface MissingRef {\n refField?: RefField\n object?: AppObject\n belongToObject?: DBAppObject[] | DBAppObject\n leadingField?: LeadingField\n leading?: boolean\n model?: string\n}\n\ninterface RefFieldData {\n foreignKey: string\n as: string\n allowNull?: boolean\n index?: boolean\n _fullSearch?: boolean\n constraints?: boolean\n}\n\nexport default async (): Promise<Record<string, AppObject>> => {\n enums = await commonService.initEnums()\n\n const queryText =\n 'SELECT *\\\n FROM app_objects \\\n WHERE \\\n app_objects.\"markedToDelete\" = false \\\n AND app_objects.\"dbTableName\" IS NOT NULL'\n\n const appObjects: DBAppObject[] = await sequelize.query(queryText, { type: QueryTypes.SELECT })\n\n const objects: Record<string, AppObject> = {}\n const refFields: RefField[] = []\n const leadingFields: LeadingField[] = []\n\n for (const appObject of appObjects) {\n let fields: ModelAttributes = {}\n let indexes: ModelIndexesOptions[] = []\n\n const objectFields: AppObjectField[] = JSON.parse(appObject.dbFields)\n\n const techFields: Array<string> = []\n let existMultiTypeCommonField = false\n for (const field of objectFields.filter((el) => !el.isTablePart)) {\n if (field.multiType) {\n if (field.multiTypeVariant === 'common') existMultiTypeCommonField = true\n initMultiTypeFields(fields, field, techFields)\n } else if (field.type !== 'object') {\n fields[field.dbName] = prepareFieldData(field)\n }\n\n if (field.type === 'object') {\n refFields.push({\n objectName: appObject.name,\n field,\n })\n }\n }\n\n if (appObject.indexes) {\n const objectIndexes: ModelIndexesOptions[] = JSON.parse(appObject.indexes)\n\n for (const index of objectIndexes) {\n indexes.push({\n name: index.name,\n fields: index.fields,\n unique: index.unique,\n using: index.using,\n })\n }\n }\n\n const reflection: AppObjectReflection = appObject.reflection ? JSON.parse(appObject.reflection) : {}\n\n if (appObject.type === 'catalog') {\n fields.presentation = {\n type: new DataTypes.VIRTUAL(DataTypes.STRING, reflection.fields ? reflection.fields : ['name']),\n get() {\n let dvPresentation: string\n if (appObject.processedPresentation) {\n dvPresentation = this.getDataValue('presentation')\n if (dvPresentation) {\n return dvPresentation\n }\n }\n\n if (reflection.template && reflection.template !== '') {\n const regex = /\\[[a-zA-Z\\\\.]+\\]/gm\n const params: string[] = []\n let m: RegExpExecArray | null\n\n while ((m = regex.exec(reflection.template)) !== null) {\n if (m.index === regex.lastIndex) {\n regex.lastIndex++\n }\n\n m.forEach((match) => {\n params.push(match)\n })\n }\n\n let presentation = reflection.template\n\n for (const param of params) {\n const paramKey = param.replace('[', '').replace(']', '')\n let paramValue = this[paramKey]\n\n const objectField = objectFields.find((el) => el.dbName === paramKey)\n\n if (objectField) {\n if (objectField.type === 'date') {\n const dateFormat = objectField.format && objectField.format !== '' ? objectField.format : 'DD.MM.YYYY HH:mm:ss'\n paramValue = moment(this[paramKey]).format(dateFormat)\n } else {\n paramValue = this[paramKey]\n }\n }\n\n presentation = presentation.replace(param, paramValue)\n }\n\n return presentation\n } else if (reflection.fields?.length > 0) {\n const presentation = reflection.fields\n .map((el) => {\n if (this[el]) {\n return this[el]\n }\n })\n .filter((el) => el !== undefined)\n return presentation.join(', ')\n } else {\n return this.getDataValue('name')\n }\n },\n set(value: string) {\n this.setDataValue('presentation', value)\n },\n _sortBy: reflection.sortBy ? reflection.sortBy : 'name',\n }\n }\n\n if (appObject.type === 'document') {\n fields.presentation = {\n type: new DataTypes.VIRTUAL(DataTypes.STRING, reflection.fields ? reflection.fields : ['numberStr']),\n get() {\n let dvPresentation: string\n if (appObject.processedPresentation) {\n dvPresentation = this.getDataValue('presentation')\n if (dvPresentation) {\n return dvPresentation\n }\n }\n\n if (reflection.template && reflection.template !== '') {\n const regex = /\\[[a-zA-Z\\\\.]+\\]/gm\n const params: string[] = []\n let m: RegExpExecArray | null\n\n while ((m = regex.exec(reflection.template)) !== null) {\n if (m.index === regex.lastIndex) {\n regex.lastIndex++\n }\n\n m.forEach((match) => {\n params.push(match)\n })\n }\n\n let presentation = reflection.template\n\n for (const param of params) {\n const paramKey = param.replace('[', '').replace(']', '')\n let paramValue = this[paramKey]\n\n const objectField = objectFields.find((el) => el.dbName === paramKey)\n\n if (objectField) {\n if (objectField.type === 'date') {\n const dateFormat = objectField.format && objectField.format !== '' ? objectField.format : 'DD.MM.YYYY HH:mm:ss'\n paramValue = moment(this[paramKey]).format(dateFormat)\n } else {\n paramValue = this[paramKey]\n }\n }\n\n presentation = presentation.replace(param, paramValue)\n }\n\n return presentation\n } else if (reflection.fields?.length > 0) {\n const presentation = reflection.fields\n .map((el) => {\n if (this[el]) {\n return this[el]\n }\n })\n .filter((el) => el !== undefined)\n return presentation.join(', ')\n } else {\n return this.getDataValue('numberStr')\n }\n },\n set(value: string) {\n this.setDataValue('presentation', value)\n },\n _sortBy: reflection.sortBy ? reflection.sortBy : 'numberStr',\n }\n }\n\n class ObjectModel extends Model {}\n\n const newObject: AppObject = {\n id: appObject.id,\n name: appObject.name,\n singularName: appObject.singularName,\n title: appObject.title,\n path: appObject.path,\n tableName: appObject.dbTableName,\n type: appObject.type,\n confirmation: appObject.confirmation,\n system: appObject.system,\n configurationData: appObject.configurationData,\n hierarchic: appObject.hierarchic,\n api: appObject.api ? JSON.parse(appObject.api) : null,\n staticAPI: appObject.staticAPI ? JSON.parse(appObject.staticAPI) : {},\n fields: objectFields,\n reflection,\n withoutTimestamps: appObject.withoutTimestamps,\n processedPresentation: appObject.processedPresentation,\n accessRoleId: appObject.accessRoleId,\n accumulationRegister: appObject.accumulationRegister,\n model: ObjectModel.init(fields, {\n sequelize,\n modelName: appObject.model,\n tableName: appObject.dbTableName,\n indexes,\n timestamps: appObject.withoutTimestamps !== true,\n mainModel: true,\n }),\n accTable: null,\n tables: {},\n controllers: {},\n }\n\n const hasPassword = objectFields.find((el) => el.password === true)\n\n if (hasPassword) {\n newObject.model.prototype.toJSON = function () {\n const values = Object.assign({}, this.get())\n\n for (const field of objectFields.filter((el) => el.password === true)) {\n delete values[field.name]\n }\n return values\n }\n }\n\n for (const field of objectFields) {\n if (field.leading) {\n leadingFields.push({\n field,\n belongTable: newObject.model,\n })\n }\n }\n\n for (const field of objectFields.filter((el) => el.isTablePart)) {\n createTablePart(field, newObject, refFields, leadingFields, objects)\n }\n\n if (newObject.type === 'register' && newObject.accumulationRegister) {\n createAccumulationTable(appObject, newObject, refFields)\n }\n\n if (existMultiTypeCommonField) {\n if (techFields.length > 0) {\n const prevToJSON = newObject.model.prototype.toJSON\n newObject.model.prototype.toJSON = function () {\n const values = prevToJSON ? prevToJSON.call(this) : Object.assign({}, this.get ? this.get() : this)\n for (const key of techFields) {\n if (key in values) delete values[key]\n }\n\n const multiRefFields = objectFields.filter((el) => el.multiType && el.multiTypeVariant === 'common' && multiTypeService.typeIncludesRef(el.type as string[]))\n\n for (const f of multiRefFields) {\n const dv = (this as any).dataValues && (this as any).dataValues[f.dbName]\n if (dv && typeof dv === 'object') {\n values[f.dbName] = dv\n }\n }\n return values\n }\n }\n\n newObject.model.addHook('beforeSave', (instance: any) => {\n for (const f of objectFields.filter((el) => el.multiType && el.multiTypeVariant === 'common')) {\n const pendingKey = `__pending_${f.dbName}`\n if (!Object.prototype.hasOwnProperty.call(instance.dataValues, pendingKey)) continue\n\n const pendingValue = instance.getDataValue(pendingKey)\n const fieldType = instance.getDataValue(`_${f.dbName}Type`)\n\n const typesSufixes = multiTypeService.typesSufixes()\n for (const ft in typesSufixes) {\n const techName = `_${f.dbName}${typesSufixes[ft]}`\n instance.setDataValue(techName, null)\n }\n\n if (multiTypeService.typeIncludesRef(f.type as string[])) {\n instance.setDataValue(`_${f.dbName}Ref`, null)\n }\n\n if (fieldType) {\n const valueField = multiTypeService.getFieldNameByType(f.dbName, fieldType)\n if (valueField) {\n if (multiTypeService.isRefType(fieldType) && typeof pendingValue === 'object') {\n instance.setDataValue(valueField, pendingValue.id || null)\n } else {\n instance.setDataValue(valueField, pendingValue)\n }\n }\n }\n\n delete instance.dataValues[pendingKey]\n }\n })\n\n newObject.model.addHook('afterFind', 'refObjectsPreload', async (findResult: any) => {\n if (!findResult) return\n\n const instances = Array.isArray(findResult) ? findResult : [findResult]\n const multiRefFields = objectFields.filter((el) => el.multiType && el.multiTypeVariant === 'common' && multiTypeService.typeIncludesRef(el.type as string[]))\n\n const promises: Promise<any>[] = []\n\n for (const inst of instances) {\n for (const f of multiRefFields) {\n const typeVal: string | null = inst.getDataValue(`_${f.dbName}Type`)\n const refId = inst.getDataValue(`_${f.dbName}Ref`)\n if (!typeVal || !refId) continue\n\n const m = typeVal.match(/^(catalog|document)\\.(.+)$/)\n if (!m) continue\n\n const kind = m[1] // 'catalog' | 'document'\n const refName = m[2] // object name in objects map\n\n const target = objects[refName]\n const targetModel: ModelStatic<Model<any, any>> | undefined = target?.model\n if (!targetModel) continue\n\n const attributes = kind === 'catalog' ? ['id', 'name', 'presentation'] : ['id', 'presentation', 'numberStr', 'date']\n\n const p = targetModel\n .findByPk(refId, { attributes })\n .then((row: any) => {\n if (!row) return\n const data = row.get ? row.get() : row\n if (kind === 'catalog') {\n const out = { id: data.id, name: data.name ?? null, presentation: data.presentation ?? null }\n inst.setDataValue(f.dbName, out)\n inst.dataValues[f.dbName] = out\n } else {\n const out = { id: data.id, numberStr: data.numberStr ?? null, date: data.date ?? null, presentation: data.presentation ?? null }\n inst.setDataValue(f.dbName, out)\n inst.dataValues[f.dbName] = out\n }\n })\n .catch((error) => {\n logger.error(`Error in 'afterFind' 'refObjectsPreload' hook`, { meta: error })\n })\n\n promises.push(p)\n }\n }\n\n if (promises.length > 0) {\n await Promise.all(promises)\n }\n })\n }\n\n objects[newObject.name] = newObject\n }\n\n const missingRefs: MissingRef[] = []\n for (const refField of refFields) {\n const object = objects[refField.objectName]\n\n if (object) {\n if (refField.field.multiType) {\n if (!Array.isArray(refField.field.ref)) {\n continue\n }\n\n const belongObjects: DBAppObject[] = []\n let missingObject: boolean = false\n for (const objRef of refField.field.ref) {\n const belongToObject = appObjects.find((el) => el.name === objRef)\n\n if (!belongToObject) {\n missingObject = true\n console.info('No belongs to object: ', `${object.name} -> ${objRef}`)\n break\n }\n\n belongObjects.push(belongToObject)\n }\n\n if (!missingObject) {\n const belongModels: { object: DBAppObject; model: ModelStatic<Model<any, any>> }[] = []\n let missingModels: boolean = false\n for (const belongObject of belongObjects) {\n const belongToModel: ModelStatic<Model<any, any>> = sequelize.models[belongObject.model]\n\n if (!belongToModel) {\n missingModels = true\n missingRefs.push({ refField, object, belongToObject: belongObjects })\n break\n }\n\n belongModels.push({ object: belongObject, model: belongToModel })\n }\n\n if (!missingModels) {\n const objectModel = refField.tableName ? object.tables[refField.tableName].model : refField.accModel ? object.accTable?.model : object.model\n\n for (const belongModel of belongModels) {\n const fieldData = initRefField(refField)\n fieldData.constraints = false\n fieldData.as = `${refField.field.name}${belongModel.model.name}`\n\n objectModel.belongsTo(belongModel.model, fieldData)\n\n let alias = refField.accModel ? `${object.name}Acc` : object.name\n\n if (belongModel.model.associations[alias]) {\n alias = `${refField.field.name}${alias.charAt(0).toUpperCase() + alias.slice(1)} `\n }\n\n const reverseData = {\n foreignKey: refField.field.dbName,\n _noTablePart: true,\n _registerRecords: refField.field.name === 'recorder' ? true : undefined,\n constraints: false,\n as: alias,\n scope: {\n [`${refField.field.name}Type`]: belongModel.object.name,\n },\n }\n\n belongModel.model.hasMany(objectModel, reverseData)\n }\n\n objectModel.addHook('afterFind', (findResult) => {\n if (!Array.isArray(findResult)) {\n if (findResult) {\n findResult = [findResult]\n } else {\n findResult = []\n }\n }\n\n for (const instance of findResult) {\n const currType = belongModels.find((el) => instance[`${refField.field.name}Type`] === el.object.name)\n if (currType && instance[`${refField.field.name}${currType.model.name}`] !== undefined) {\n instance[refField.field.name] = instance[`${refField.field.name}${currType.model.name}`]\n instance.dataValues[refField.field.name] = instance[`${refField.field.name}${currType.model.name}`]\n } else {\n instance[refField.field.name] = null\n instance.dataValues[refField.field.name] = null\n }\n\n for (const belongModel of belongModels) {\n delete instance[`${refField.field.name}${belongModel.model.name}`]\n delete instance.dataValues[`${refField.field.name}${belongModel.model.name}`]\n }\n }\n })\n }\n }\n } else {\n const belongToObject = appObjects.find((el) => el.name === refField.field.ref)\n\n if (belongToObject) {\n const belongToModel = sequelize.models[belongToObject.model]\n\n if (belongToModel) {\n const fieldData = initRefField(refField)\n\n if (refField.tableName) {\n object.tables[refField.tableName].model.belongsTo(belongToModel, fieldData)\n } else if (refField.accModel) {\n object.accTable?.model.belongsTo(belongToModel, fieldData)\n } else {\n try {\n object.model.belongsTo(belongToModel, fieldData)\n } catch (error) {\n console.error('Error in belongsTo: ', { belongToModel, fieldData }, error)\n }\n }\n } else {\n missingRefs.push({ refField, object, belongToObject })\n }\n } else {\n console.info('No belongs to object: ', `${object.name} -> ${refField.field.name} (${refField.field.ref})`)\n }\n }\n } else {\n console.info('No object: ', refField.objectName)\n }\n }\n\n for (const leadingField of leadingFields) {\n const object = objects[leadingField.field.ref]\n\n if (object) {\n object.model.hasMany(leadingField.belongTable, {\n foreignKey: leadingField.field.dbName,\n as: leadingField.field.leadingAlias,\n _noTablePart: true,\n })\n } else {\n const appObject = appObjects.find((el) => el.name === leadingField.field.ref)\n if (appObject) {\n missingRefs.push({ leading: true, leadingField, model: appObject.model })\n } else {\n console.info('No app object for leading field: ', leadingField.field.ref)\n }\n }\n }\n for (const objectName in objects) {\n if (!objects[objectName].processedPresentation) {\n continue\n }\n\n const object = objects[objectName]\n let module: any\n\n const modulePath = `${object.type}s/${object.name}/server.module.js`\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n\n if (fs.existsSync(fullPath)) {\n module = __non_webpack_require__(fullPath)\n }\n\n if (module?.initPresentation) {\n object.model.addHook('afterFind', 'addPresentationGetter', async (findResult) => {\n if (!Array.isArray(findResult)) {\n if (findResult) {\n findResult = [findResult]\n } else {\n findResult = []\n }\n }\n\n for (const instance of findResult) {\n const initPresentation = await module.initPresentation(instance)\n instance.setDataValue('presentation', initPresentation)\n }\n })\n }\n }\n\n for (const missingRef of missingRefs) {\n console.warn('Missing ref: ', missingRef)\n }\n\n return objects\n}\n\nfunction initMultiTypeFields(fields: ModelAttributes, field: AppObjectField, techFields: Array<string>) {\n if (field.multiTypeVariant === 'common') {\n const currFieldTechFields: Array<string> = []\n\n fields[`_${field.dbName}Type`] = {\n type: DataTypes.STRING,\n allowNull: field.notNull !== true,\n }\n\n //currFieldTechFields.push(`_${field.dbName}Type`)\n\n if (field.type.includes('string')) {\n const fieldName = `_${field.dbName}ST`\n fields[fieldName] = {\n type: DataTypes.STRING(field.typeOptions.length),\n }\n currFieldTechFields.push(fieldName)\n }\n\n if (field.type.includes('text')) {\n const fieldName = `_${field.dbName}TX`\n fields[fieldName] = {\n type: DataTypes.TEXT,\n }\n currFieldTechFields.push(fieldName)\n }\n\n if (field.type.includes('integer')) {\n const fieldName = `_${field.dbName}IN`\n fields[fieldName] = {\n type: DataTypes.INTEGER,\n }\n currFieldTechFields.push(fieldName)\n }\n\n if (field.type.includes('decimal')) {\n const fieldName = `_${field.dbName}DC`\n fields[fieldName] = {\n type: DataTypes.DECIMAL(field.typeOptions?.precision, field.typeOptions?.scale),\n }\n currFieldTechFields.push(fieldName)\n }\n\n if (field.type.includes('boolean')) {\n const fieldName = `_${field.dbName}BL`\n fields[fieldName] = {\n type: DataTypes.BOOLEAN,\n }\n currFieldTechFields.push(fieldName)\n }\n\n if (field.type.includes('date')) {\n const fieldName = `_${field.dbName}DT`\n fields[fieldName] = {\n type: DataTypes.DATE,\n }\n currFieldTechFields.push(fieldName)\n }\n\n if (multiTypeService.typeIncludesRef(field.type as string[])) {\n const fieldName = `_${field.dbName}Ref`\n fields[fieldName] = {\n type: DataTypes.STRING(100),\n }\n currFieldTechFields.push(fieldName)\n }\n\n techFields.push(...currFieldTechFields)\n\n fields[`${field.dbName}`] = {\n type: DataTypes.VIRTUAL(DataTypes.ABSTRACT, [`_${field.dbName}Type`, ...currFieldTechFields]),\n get() {\n const fieldType = this.getDataValue(`_${field.dbName}Type`)\n if (!fieldType) return null\n const valueField = multiTypeService.getFieldNameByType(field.dbName, fieldType)\n\n if (valueField) {\n return this.getDataValue(valueField)\n }\n\n return null\n },\n set(val) {\n this.setDataValue(`__pending_${field.dbName}`, val)\n },\n }\n } else {\n fields[field.dbName] = {\n type: DataTypes.UUID,\n allowNull: field.notNull !== true,\n _index: field.index === true,\n }\n\n fields[`${field.name}Type`] = {\n type: DataTypes.STRING,\n allowNull: field.notNull !== true,\n _index: field.index === true,\n }\n }\n}\n\nfunction initRefField(refField: RefField): RefFieldData {\n const fieldData: RefFieldData = {\n foreignKey: refField.field.dbName,\n as: refField.field.name,\n }\n\n if (refField.field.notNull) {\n fieldData.allowNull = false\n }\n\n if (refField.field.index) {\n fieldData.index = true\n }\n\n if (refField.field.fullSearch) {\n fieldData._fullSearch = refField.field.fullSearch\n }\n\n return fieldData\n}\n\nfunction prepareFieldData(field: AppObjectField): ModelAttributeColumnOptions {\n const fieldData: ModelAttributeColumnOptions = { type: DataTypes.STRING }\n\n const dataType = (field.type as string).toUpperCase()\n\n if (dataType === 'STRING') {\n if (field.typeOptions?.length && field.typeOptions?.length !== 0) {\n fieldData.type = DataTypes[dataType](field.typeOptions?.length)\n } else {\n fieldData.type = DataTypes[dataType]()\n }\n } else if (dataType === 'JSON') {\n fieldData.type = DataTypes.TEXT()\n\n fieldData.get = function () {\n const rawValue = this.getDataValue(field.name)\n return rawValue ? JSON.parse(rawValue) : null\n }\n\n fieldData.set = function (value) {\n this.setDataValue(field.name, value ? JSON.stringify(value) : value)\n }\n } else if (dataType === 'ENUM') {\n fieldData.type = DataTypes.ENUM\n fieldData.values = field.ref ? enums[field.ref] : ['empty']\n fieldData._ref = field.ref\n } else {\n fieldData.type = DataTypes[dataType]()\n }\n\n if (dataType === 'UUID' && field.name === 'id') {\n fieldData.defaultValue = DataTypes.UUIDV4()\n }\n\n if (field.primaryKey) {\n fieldData.primaryKey = true\n }\n\n if (field.notNull) {\n fieldData.allowNull = false\n }\n\n if (field.index) {\n fieldData._index = true\n }\n\n if (field.defaultValue !== null && field.defaultValue !== undefined) {\n fieldData.defaultValue = field.defaultValue\n }\n\n if (field.fullSearch) {\n fieldData._fullSearch = field.fullSearch\n }\n\n return fieldData\n}\n\nfunction createTablePart(tableData: AppObjectField, parentObject: AppObject, refFields: RefField[], leadingFields: LeadingField[], objects: Record<string, AppObject>) {\n let fields = {}\n const techFields: Array<string> = []\n\n let existMultiTypeCommonField = false\n\n for (const field of tableData.fields!) {\n if (field.multiType) {\n if (field.multiTypeVariant === 'common') existMultiTypeCommonField = true\n initMultiTypeFields(fields, field, techFields)\n } else if (field.type !== 'object') {\n fields[field.dbName] = prepareFieldData(field)\n }\n\n if (field.type === 'object') {\n refFields.push({\n objectName: parentObject.name,\n tableName: tableData.name,\n field,\n })\n }\n }\n\n class ObjectModel extends Model {}\n\n const tablePart: AppObjectTablePart = {\n title: tableData.title,\n name: tableData.name,\n fields: tableData.fields,\n model: ObjectModel.init(fields, {\n sequelize,\n modelName: tableData.model,\n tableName: tableData.dbName,\n }),\n }\n\n parentObject.model.hasMany(tablePart.model, {\n foreignKey: 'parentId',\n as: tableData.name,\n onDelete: 'CASCADE',\n hooks: true,\n })\n\n if (techFields.length > 0) {\n const prevToJSON = tablePart.model.prototype.toJSON\n tablePart.model.prototype.toJSON = function () {\n const values = prevToJSON ? prevToJSON.call(this) : Object.assign({}, this.get ? this.get() : this)\n for (const key of techFields) {\n if (key in values) delete values[key]\n }\n\n if (tableData.fields) {\n const multiRefFields = tableData.fields.filter((el) => el.multiType && el.multiTypeVariant === 'common' && multiTypeService.typeIncludesRef(el.type as string[]))\n\n for (const f of multiRefFields) {\n const dv = (this as any).dataValues && (this as any).dataValues[f.dbName]\n if (dv && typeof dv === 'object') {\n values[f.dbName] = dv\n }\n }\n }\n\n return values\n }\n }\n\n if (existMultiTypeCommonField) {\n tablePart.model.addHook('beforeSave', (instance: any) => {\n onSaveMultiTypeData(instance)\n })\n\n tablePart.model.addHook('beforeBulkCreate', (instances: any[]) => {\n for (const instance of instances) {\n onSaveMultiTypeData(instance)\n }\n })\n\n function onSaveMultiTypeData(instance: any) {\n if (!tableData.fields) return\n\n const typesSufixes = multiTypeService.typesSufixes()\n for (const f of tableData.fields.filter((el) => el.multiType && el.multiTypeVariant === 'common')) {\n const pendingKey = `__pending_${f.dbName}`\n if (!Object.prototype.hasOwnProperty.call(instance.dataValues, pendingKey)) continue\n\n const pendingValue = instance.getDataValue(pendingKey)\n const fieldType = instance.getDataValue(`_${f.dbName}Type`)\n\n for (const ft in typesSufixes) {\n const techName = `_${f.dbName}${typesSufixes[ft]}`\n instance.setDataValue(techName, null)\n }\n\n if (multiTypeService.typeIncludesRef(f.type as string[])) {\n instance.setDataValue(`_${f.dbName}Ref`, null)\n }\n\n if (fieldType) {\n const valueField = multiTypeService.getFieldNameByType(f.dbName, fieldType)\n if (valueField) {\n if (multiTypeService.isRefType(fieldType) && typeof pendingValue === 'object') {\n instance.setDataValue(valueField, pendingValue.id || null)\n } else {\n instance.setDataValue(valueField, pendingValue)\n }\n }\n }\n\n delete instance.dataValues[pendingKey]\n }\n }\n\n tablePart.model.addHook('afterFind', 'refObjectsPreload', async (findResult: any) => {\n if (!tableData.fields) return\n if (!findResult) return\n\n const instances = Array.isArray(findResult) ? findResult : [findResult]\n const multiRefFields = tableData.fields.filter((el) => el.multiType && el.multiTypeVariant === 'common' && multiTypeService.typeIncludesRef(el.type as string[]))\n\n const promises: Promise<any>[] = []\n\n for (const inst of instances) {\n for (const f of multiRefFields) {\n const typeVal: string | null = inst.getDataValue(`_${f.dbName}Type`)\n const refId = inst.getDataValue(`_${f.dbName}Ref`)\n if (!typeVal || !refId) continue\n\n const m = typeVal.match(/^(catalog|document)\\.(.+)$/)\n if (!m) continue\n\n const kind = m[1] // 'catalog' | 'document'\n const refName = m[2] // object name in objects map\n\n const target = objects[refName]\n const targetModel: ModelStatic<Model<any, any>> | undefined = target?.model\n if (!targetModel) continue\n\n const attributes = kind === 'catalog' ? ['id', 'name', 'presentation'] : ['id', 'presentation', 'numberStr', 'date']\n\n const p = targetModel\n .findByPk(refId, { attributes })\n .then((row: any) => {\n if (!row) return\n const data = row.get ? row.get() : row\n if (kind === 'catalog') {\n const out = { id: data.id, name: data.name ?? null, presentation: data.presentation ?? null }\n inst.setDataValue(f.dbName, out)\n inst.dataValues[f.dbName] = out\n } else {\n const out = { id: data.id, numberStr: data.numberStr ?? null, date: data.date ?? null, presentation: data.presentation ?? null }\n inst.setDataValue(f.dbName, out)\n inst.dataValues[f.dbName] = out\n }\n })\n .catch((error) => {\n logger.error(`Error in 'afterFind' 'refObjectsPreload' hook`, { meta: error })\n })\n\n promises.push(p)\n }\n }\n\n if (promises.length > 0) {\n await Promise.all(promises)\n }\n })\n }\n\n for (const field of tableData.fields!) {\n if (field.leading) {\n leadingFields.push({\n field,\n belongTable: tablePart.model,\n })\n }\n }\n\n parentObject.tables[tableData.name] = tablePart\n}\n\nfunction createAccumulationTable(appObject: DBAppObject, newObject: AppObject, refFields: RefField[]) {\n let fields: ModelAttributes = {}\n let dimensions: AppObjectField[] = []\n let resources: AppObjectField[] = []\n\n fields.id = {\n type: DataTypes.UUID,\n primaryKey: true,\n allowNull: false,\n }\n\n fields.period = {\n type: DataTypes.DATE,\n allowNull: false,\n _index: true,\n }\n\n for (const field of newObject.fields) {\n if (field.role === 'dimension' || field.role === 'resource') {\n if (field.type !== 'object') {\n fields[field.dbName] = prepareFieldData(field)\n } else {\n refFields.push({\n objectName: newObject.name,\n accModel: true,\n field,\n })\n }\n\n if (field.role === 'dimension') {\n dimensions.push(_.cloneDeep(field))\n }\n\n if (field.role === 'resource') {\n resources.push(_.cloneDeep(field))\n }\n }\n }\n\n class ObjectModel extends Model {}\n\n const accumulationTable: AppObjectAccumulationTable = {\n name: `${newObject.name}Acc`,\n dimensions,\n resources,\n model: ObjectModel.init(fields, {\n sequelize,\n modelName: `${appObject.model}Acc`,\n tableName: `${appObject.path}_acc`,\n }),\n }\n\n newObject.accTable = accumulationTable\n}\n","import express from 'express'\nimport accessRights from '@/middleware/accessRights'\nimport fileUpload from '@/middleware/fileUpload'\nimport initObjects from './controllers'\n\nimport { Request, Response, NextFunction } from 'express'\nimport { AppObject, AppObjectStaticAPI } from '@/src/types'\n\nconst router = express.Router()\n\nexport default async () => {\n const objects = await initObjects()\n\n for (const object of Object.values(objects)) {\n if (object.api) {\n for (const api of object.api) {\n if (!api.controller) {\n console.error('API controller is not set for object: ', object.name, api)\n continue\n }\n\n if (!object.controllers[api.controller]) {\n console.error('API controller is not exist: ', object.name, api.controller)\n continue\n }\n\n router[api.httpMethod.toLowerCase()](\n `/${object.path}/${api.path}`,\n setAccess(api, object),\n (req: Request, res: Response, next: NextFunction) => {\n const contentType = req.headers['content-type']\n if (contentType && contentType.includes('multipart/form-data')) {\n return fileUpload.array('files')(req, res, (err) => {\n if (err) {\n return res.status(400).json({ message: `File upload error: ${err}` })\n }\n next()\n })\n } else {\n next()\n }\n },\n object.controllers[api.controller]\n )\n }\n }\n\n if (object.type === 'register') {\n if (object.accumulationRegister) {\n router.post(`/${object.path}/calculate_totals`, setAccess(object.staticAPI.calculateTotals || { httpMethod: 'POST' }, object), object.calculateTotals)\n }\n\n if (object.name === 'dataProcessors') {\n router.post(`/${object.path}/execute_processing`, setAccess(object.staticAPI.executeProcessing || { httpMethod: 'POST' }, object), object.executeProcessing)\n router.get(`/${object.path}/export/:id`, setAccess(object.staticAPI.exportProcessor || { httpMethod: 'POST' }, object), object.exportProcessor)\n router.post(\n `/${object.path}/import`,\n setAccess(object.staticAPI.importProcessor || { httpMethod: 'POST' }, object),\n (req: Request, res: Response, next: NextFunction) => {\n const contentType = req.headers['content-type']\n if (contentType && contentType.includes('multipart/form-data')) {\n return fileUpload.array('files')(req, res, (err: any) => {\n if (err) {\n return res.status(400).json({ message: `File upload error: ${err}` })\n }\n next()\n })\n } else {\n next()\n }\n },\n object.importProcessor\n )\n }\n }\n\n if (object.type === 'catalog') {\n if (object.name === 'appObjects') {\n router.post(`/${object.path}/execute_migration`, setAccess(object.staticAPI.executeMigration || { httpMethod: 'POST' }, object), object.executeMigration)\n router.post(`/${object.path}/exist_migrations`, setAccess(object.staticAPI.existMigrations || { httpMethod: 'POST' }, object), object.existMigrations)\n } else if (object.name === 'scheduledJobs') {\n router.post(`/${object.path}/execute_manually`, setAccess(object.staticAPI.executeManually || { httpMethod: 'POST' }, object), object.executeManually)\n }\n }\n\n if (object.staticAPI.findAll?.disabled !== true) {\n router.get(`/${object.path}`, setAccess(object.staticAPI.findAll || { httpMethod: 'GET' }, object), object.findAll)\n }\n\n if (object.staticAPI.findById?.disabled !== true) {\n router.get(`/${object.path}/:id`, setAccess(object.staticAPI.findById || { httpMethod: 'GET' }, object), object.findById)\n }\n\n if (object.staticAPI.create?.disabled !== true) {\n router.post(\n `/${object.path}`,\n setAccess(object.staticAPI.create || { httpMethod: 'POST' }, object),\n (req: Request, res: Response, next: NextFunction) => {\n const contentType = req.headers['content-type']\n if (contentType && contentType.includes('multipart/form-data')) {\n return fileUpload.array('files')(req, res, (err: any) => {\n if (err) {\n return res.status(400).json({ message: `File upload error: ${err}` })\n }\n next()\n })\n } else {\n next()\n }\n },\n object.create\n )\n }\n\n if (object.staticAPI.update?.disabled !== true) {\n router.put(`/${object.path}/:id`, setAccess(object.staticAPI.update || { httpMethod: 'PUT' }, object), object.update)\n }\n\n if (object.staticAPI.delete?.disabled !== true) {\n router.delete(`/${object.path}/:id`, setAccess(object.staticAPI.delete || { httpMethod: 'DELETE' }, object), object.delete)\n }\n\n if (object.type === 'catalog') {\n router.get(`/${object.path}/predefined/:name`, setAccess(object.staticAPI.findById || { httpMethod: 'GET' }, object), object.findPredefined)\n }\n\n if ((object.type === 'catalog' || object.type === 'document') && object.staticAPI.changeDeletionMark?.disabled !== true) {\n router.post(`/${object.path}/change_deletion_mark`, setAccess(object.staticAPI.changeDeletionMark || { httpMethod: 'POST' }, object), object.changeDeletionMark)\n }\n\n if (object.type === 'document') {\n if (object.staticAPI.confirm?.disabled !== true) {\n router.put(`/${object.path}/confirm/:id`, setAccess(object.staticAPI.confirm || { httpMethod: 'PUT' }, object), object.confirm)\n }\n if (object.staticAPI.undoConfirm?.disabled !== true) {\n router.put(`/${object.path}/undo_confirm/:id`, setAccess(object.staticAPI.undoConfirm || { httpMethod: 'PUT' }, object), object.undoConfirm)\n }\n }\n }\n\n return { router, objects }\n}\n\nfunction setAccess(api: AppObjectStaticAPI = { httpMethod: 'GET' }, object: AppObject) {\n let method: any\n\n const accesRole: Record<string, any> = {}\n\n if (api.userRole) {\n accesRole.id = api.userRole\n } else if (object.accessRoleId) {\n accesRole.id = object.accessRoleId\n } else {\n accesRole.key = object.path\n }\n\n if (api.accessLevel) {\n method =\n api.accessLevel === 'CAN_REED'\n ? accessRights.canRead(accesRole)\n : api.accessLevel === 'CAN_MODIFY'\n ? accessRights.canModify(accesRole)\n : api.accessLevel === 'IS_AUTH'\n ? accessRights.isAuth\n : accessRights.isFullRights\n } else {\n if (object.system === true) {\n method = api.httpMethod === 'GET' ? accessRights.isAuth : accessRights.isFullRights\n } else {\n method = api.httpMethod === 'GET' ? accessRights.canRead(accesRole) : accessRights.canModify(accesRole)\n }\n }\n\n return method\n}\n","import moment from 'moment'\nimport { QueryTypes } from 'sequelize'\nimport { StatusCodes } from 'http-status-codes'\nimport logger from '@/core/services/logger.service'\nimport sequelize from '@/database/dbConnection'\nimport fs from 'fs'\nimport reportToExcelService from '@/core/services/reportToExcel.service'\nimport reportToPdfService from '@/core/services/reportToPdf.service'\nimport commonService from '@/core/services/common.service'\nimport virtualTables from './virtualTables'\n\nimport { Sequelize as ExternalSequelize, FindAttributeOptions } from 'sequelize'\nimport { NextFunction, Request, Response } from 'express'\n\nexport default {\n async getSettings(req: Request, res: Response, next: NextFunction) {\n const reportId = req.params.id\n\n if (!reportId || typeof reportId !== 'string' || reportId.length !== 36) {\n logger.error(`Error in ${sequelize.models.ReportSetting.options.name?.plural} findItem controller`, { meta: 'Report id is not correct!' })\n res.status(StatusCodes.BAD_REQUEST).send({ message: 'Report id is not correct!' })\n return\n }\n\n const attributes: FindAttributeOptions = { exclude: ['dataQuery'] }\n\n await sequelize.models.ReportSetting.findByPk(reportId, { attributes })\n .then((existReport) => {\n if (existReport) {\n res.status(StatusCodes.OK).send(existReport)\n } else {\n logger.error(`Error in ${sequelize.models.ReportSetting.options.name?.plural} findByPk controller`, {\n meta: `${sequelize.models.ReportSetting.options.name?.plural} not found`,\n })\n res.status(StatusCodes.NOT_FOUND).send({ message: `${sequelize.models.ReportSetting.options.name?.plural} not found` })\n }\n })\n .catch((error) => {\n logger.error(`Error in ${sequelize.models.ReportSetting.options.name?.plural} findByPk controller`, { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error.message })\n })\n },\n\n async getResult(req: Request, res: Response, next: NextFunction) {\n let params = { ...req.body }\n\n if (!params.id || typeof params.id !== 'string' || params.id.length !== 36) {\n logger.error(`Error in ${sequelize.models.ReportSetting.options.name?.plural} findItem controller`, { meta: 'Report id is not correct!' })\n res.status(StatusCodes.BAD_REQUEST).send({ message: 'Report id is not correct!' })\n return\n }\n\n await sequelize.models.ReportSetting.findByPk(params.id)\n .then(async (existReport: Record<string, any> | null) => {\n if (existReport) {\n params.query = existReport.dataQuery\n\n params.externalData = existReport.externalData\n params.externalUsername = existReport.externalUsername\n params.externalPassword = existReport.externalPassword\n params.externalServer = existReport.externalServer\n params.externalPort = existReport.externalPort\n params.externalDatabase = existReport.externalDatabase\n params.externalDialect = existReport.externalDialect\n params.externalDateKind = existReport.externalDateKind\n params.externalDateFormat = existReport.externalDateFormat\n params.fields = flatFields(params.fields)\n\n prepareFilters(params)\n\n let module: any\n\n const modulePath = `reports/${existReport.name}/server.module.js`\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n\n if (fs.existsSync(fullPath)) {\n module = __non_webpack_require__(fullPath)\n }\n\n let queryData: any[] = []\n if (module?.onComposeResult && typeof module?.onComposeResult === 'function') {\n queryData = await module.onComposeResult(req, existReport, params)\n } else {\n queryData = await getDataRecords(req, params, module)\n }\n\n let resultData = await convertQueryData(queryData, params.fields)\n\n let resultTotal = resultData.length\n\n if (params.sorts?.length > 0) {\n sortData(resultData, params.sorts, params)\n }\n\n params.cols = []\n if (params.colGroups?.length > 0) {\n params.cols = getUniqueGroupData(resultData, params.colGroups[0])\n }\n\n let limitError = false\n\n if (params.rowGroups?.length > 0) {\n if (resultData.length > params.maxLimit) {\n resultData = []\n limitError = true\n }\n\n resultData = generateTreeData(resultData, params)\n renumberTree(params.fields, resultData)\n\n resultTotal = indexTree(resultData, 1)\n } else {\n renumberTable(params.fields, resultData)\n }\n\n const totals = []\n if (params.showYTotal === true) {\n calcGeneralTotals(params, resultData, totals)\n }\n\n if (params.rowGroups?.length > 0 && params.hideDetails) {\n deleteDetails(resultData)\n resultTotal = indexTree(resultData, 1)\n }\n\n if (params.rowGroups?.length === 0 && params.limit && params.page) {\n resultData = paginateResult(resultData, params.limit, params.page)\n }\n\n let resposeData = {\n resultData,\n cols: params.cols,\n totals,\n total: resultTotal - 1,\n limitError,\n }\n\n if (resposeData) {\n res.status(200).send(resposeData)\n } else {\n console.error('Bad request')\n res.status(400).send({\n message: 'Bad request',\n })\n }\n } else {\n logger.error(`Error in reports getResult controller`, { meta: `${sequelize.models.ReportSetting.options.name?.plural} not found` })\n res.status(StatusCodes.NOT_FOUND).send({ message: `${sequelize.models.ReportSetting.options.name?.plural} not found` })\n }\n })\n .catch((error) => {\n logger.error(`Error in reports getResult controller`, { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error.message })\n })\n },\n\n async generateExcel(req: Request, res: Response) {\n reportToExcelService.generateExcel(req, res)\n },\n\n async generatePdf(req: Request, res: Response) {\n reportToPdfService.generatePdf(req, res)\n },\n}\n\nfunction flatFields(fields: Record<string, any>[]) {\n let flatFields: Record<string, any>[] = []\n for (const field of fields) {\n if (field.isGroup) {\n flatFields = flatFields.concat(field.fields)\n } else {\n flatFields.push(field)\n }\n }\n return flatFields\n}\n\nfunction generateTreeData(resultData: Record<string, any>[], params: Record<string, any>) {\n let treeList: Record<string, any>[] = []\n\n fillTreeLvl(params, 0, resultData, treeList)\n\n let listRegrouped = false\n for (let i = params.rowGroups.length - 1; i > 0; i--) {\n if (params.rowGroups[i].withParent) {\n const comparedTree = compareGroups(treeList, i - 1)\n\n if (comparedTree) {\n treeList = comparedTree\n }\n\n listRegrouped = true\n }\n }\n\n if (listRegrouped) {\n recalcTree(treeList, 0, params)\n }\n\n calcGroupTotals(params, treeList)\n\n return treeList\n}\n\nfunction sortData(resultData: Record<string, any>, sortBy: Record<string, any>[], params: Record<string, any>): void {\n resultData.sort((a: Record<string, any>, b: Record<string, any>) => {\n for (const field of sortBy) {\n let aName: string | number\n let bName: string | number\n\n if (field.valueType === 'object') {\n aName = a[field.name]?.name || ''\n bName = b[field.name]?.name || ''\n } else {\n aName = a[field.name] || ''\n bName = b[field.name] || ''\n }\n\n let comparison = 0\n\n if (field.valueType === 'date') {\n if (params.externalData && params.externalDateKind === 'default' && params.externalDateFormat && params.externalDateFormat.length > 0) {\n const dateA = moment(aName, params.externalDateFormat).toDate()\n const dateB = moment(bName, params.externalDateFormat).toDate()\n comparison = dateA.getTime() - dateB.getTime()\n } else {\n const dateA = new Date(aName)\n const dateB = new Date(bName)\n comparison = dateA.getTime() - dateB.getTime()\n }\n } else if (typeof aName === 'number' && typeof bName === 'number') {\n comparison = aName - bName\n } else if (typeof aName === 'string' && typeof bName === 'string') {\n comparison = aName.localeCompare(bName)\n }\n\n if (comparison !== 0) {\n return field.direction === 'asc' ? comparison : comparison * -1\n }\n }\n return 0\n })\n}\n\nfunction recalcTree(treeList: Record<string, any>[], lvl: number, params: Record<string, any>): number {\n let childrenCount: number = 0\n\n for (const row of treeList) {\n row.lvl = lvl\n\n if (row.hasSub) {\n row.childrenCount = recalcTree(row.children, lvl + 1, params)\n } else {\n row.childrenCount = params.hideDetails === true ? 0 : row.children.length\n }\n\n childrenCount += row.childrenCount + 1\n }\n\n return childrenCount\n}\n\nfunction indexTree(treeList: Record<string, any>[], index: number): number {\n for (const row of treeList) {\n row._index = index++\n row._vIndex = row._index\n\n if (row.children?.length > 0) {\n index = indexTree(row.children, index)\n }\n }\n\n return index\n}\n\nfunction renumberTree(fields: Record<string, any>[], resultData: Record<string, any>[]): void {\n const numberFields = fields.filter((el) => el.rowNumber === true)\n\n for (const field of numberFields) {\n let rowNumber = 1\n for (const row of resultData) {\n if (row.hasSub === true) {\n rowNumber = renumberTreeGroup(row.children, field, rowNumber)\n } else {\n for (const childRow of row.children) {\n childRow[field.name] = rowNumber\n rowNumber++\n }\n }\n }\n }\n}\n\nfunction renumberTreeGroup(rows: Record<string, any>[], field: Record<string, any>, rowNumber: number): number {\n for (const row of rows) {\n if (row.hasSub === true) {\n rowNumber = renumberTreeGroup(row.children, field, rowNumber)\n } else {\n for (const childRow of row.children) {\n childRow[field.name] = rowNumber\n rowNumber++\n }\n }\n }\n\n return rowNumber\n}\n\nfunction renumberTable(fields: Record<string, any>[], resultData: Record<string, any>[], rowNumber: number = 1): void {\n const numberFields = fields.filter((el) => el.rowNumber === true)\n\n for (const field of numberFields) {\n for (const row of resultData) {\n row[field.name] = rowNumber\n rowNumber++\n }\n }\n}\n\nfunction fillTreeLvl(params: Record<string, any>, lvl: number, resultData: Record<string, any>[], treeList: Record<string, any>[]): number {\n const groupSetting = params.rowGroups[lvl]\n const groupData = getUniqueGroupData(resultData, groupSetting)\n let childrenCount = 0\n\n for (let group of groupData) {\n const filteredData = getFilteredData(resultData, groupSetting, group)\n\n const listItem: Record<string, any> = {\n isGroup: true,\n expanded: true,\n hasSub: params.rowGroups.length - 1 > lvl,\n lvl,\n groups: [{ value: group, ...groupSetting }],\n totals: [],\n children: [],\n childrenCount: 0,\n }\n\n if (params.rowGroups.length - 1 === lvl) {\n listItem.children = filteredData\n listItem.childrenCount = params.hideDetails === true ? 0 : filteredData.length\n } else {\n listItem.childrenCount = fillTreeLvl(params, lvl + 1, filteredData, listItem.children)\n }\n\n treeList.push(listItem)\n\n childrenCount += listItem.childrenCount + 1\n }\n\n return childrenCount\n}\n\nfunction compareGroups(treeList: Record<string, any>[], lvl: number) {\n if (treeList.length === 0) {\n return\n }\n\n if (!treeList[0].isGroup) {\n return\n }\n\n const currLvl = treeList[0].lvl\n\n if (currLvl < lvl) {\n for (const row of treeList) {\n const comparedTree = compareGroups(row.children, lvl)\n\n if (comparedTree) {\n row.children = comparedTree\n }\n }\n\n return\n } else if (currLvl === lvl) {\n const newList: Record<string, any>[] = []\n\n for (const row of treeList) {\n const rowGroups = [...row.groups]\n\n for (const childRow of row.children) {\n const groups = rowGroups.concat(childRow.groups)\n newList.push({ ...childRow, groups, lvl: currLvl })\n }\n }\n\n return newList\n }\n}\n\nfunction calcGroupTotals(params: Record<string, any>, resultData: Record<string, any>[]) {\n if (params.calcs.length === 0) {\n return\n }\n\n if (params.colGroups.length > 0) {\n const groupSettings = params.colGroups[0]\n for (const colGroup of params.cols) {\n for (const calc of params.calcs) {\n for (const dataRow of resultData) {\n calcGroupField(dataRow, calc, { name: groupSettings.name, valueType: groupSettings.valueType, value: colGroup })\n }\n }\n }\n } else {\n for (const calc of params.calcs) {\n for (const dataRow of resultData) {\n calcGroupField(dataRow, calc)\n }\n }\n }\n cleanZeroRows(resultData)\n}\n\nfunction cleanZeroRows(resultData: Record<string, any>[]) {\n if (!Array.isArray(resultData)) {\n return\n }\n for (let i = resultData.length - 1; i >= 0; i--) {\n const dataRow = resultData[i]\n cleanZeroRows(dataRow.children)\n \n const totals = dataRow.totals?.filter((el) => el.value !== 0)\n if (totals?.length === 0 && \n (dataRow.children?.length === 0 && dataRow.childrenCount > 0 || dataRow.childrenCount === 0)) {\n resultData.splice(i, 1)\n }\n }\n}\n\nfunction calcGeneralTotals(params: Record<string, any>, resultData: Record<string, any>[], totals: Record<string, any>[]) {\n if (params.calcs?.length === 0) {\n return\n }\n\n if (params.colGroups?.length > 0) {\n const valueType = params.colGroups[0].valueType\n\n for (const col of params.cols) {\n for (const calc of params.calcs) {\n const groupTotals: number[] = []\n\n for (const groupRow of resultData) {\n let groupTotal = groupRow.totals.find((el) => {\n return el.name === calc.name && (valueType === 'object' ? el.group.id === col.id : el.group === col)\n })\n\n if (groupTotal) {\n groupTotals.push(groupTotal.value)\n }\n }\n\n const value = calcGroupsValue(groupTotals, calc.expression)\n totals.push({ ...calc, value, group: col })\n }\n }\n } else {\n for (const calc of params.calcs) {\n if (params.rowGroups?.length > 0) {\n const groupTotals: number[] = []\n\n for (const groupRow of resultData) {\n const groupTotal = groupRow.totals.find((el) => el.name === calc.name)\n\n if (groupTotal) {\n groupTotals.push(groupTotal.value)\n }\n }\n\n const value = calcGroupsValue(groupTotals, calc.expression)\n totals.push({ ...calc, value })\n } else {\n const value = calcDetailsValue(resultData, calc)\n totals.push({ ...calc, value })\n }\n }\n }\n}\n\nfunction calcGroupField(dataRow: Record<string, any>, calc: Record<string, any>, filter: Record<string, any> | null = null): number {\n let value: number = 0\n\n if (dataRow.hasSub === true) {\n const childrenValues: any[] = []\n\n dataRow.children.map((childRow) => {\n childrenValues.push(calcGroupField(childRow, calc, filter))\n })\n\n value = calcGroupsValue(childrenValues, calc.expression)\n } else {\n value = calcDetailsValue(dataRow.children, calc, filter)\n }\n\n if (filter) {\n dataRow.totals.push({ ...calc, value, group: filter.value })\n } else {\n dataRow.totals.push({ ...calc, value })\n }\n\n return value\n}\n\nfunction calcDetailsValue(rows: Record<string, any>[], calcField: Record<string, any>, filter: Record<string, any> | null = null) {\n let sum: number = 0\n let value: number = 0\n let flag: number\n let calcRows: Record<string, any>[] = []\n\n if (filter) {\n calcRows = rows.filter((el) => {\n return filter.valueType === 'object' ? el[filter.name].id === filter.value.id : el[filter.name] === filter.value\n })\n } else {\n calcRows = rows\n }\n\n switch (calcField.expression) {\n case 'sum': {\n calcRows.map((item) => {\n value += item[calcField.name] * 1\n })\n value = commonService.normalizeFloat(value, 6)\n\n break\n }\n case 'average': {\n calcRows.map((item) => {\n sum += item[calcField.name] * 1\n })\n\n value += sum / calcRows.length\n value = commonService.normalizeFloat(value, 6)\n\n break\n }\n case 'max': {\n if (calcRows.length > 0) {\n flag = calcRows[0][calcField.name] * 1\n\n for (let i = 1; i < calcRows?.length; i++) {\n if (flag <= calcRows[i][calcField.name] * 1) flag = calcRows[i][calcField.name] * 1\n }\n if (value <= flag) {\n value = flag\n }\n }\n\n break\n }\n case 'min': {\n if (calcRows.length > 0) {\n flag = calcRows[0][calcField.name]\n\n for (let i = 1; i < calcRows?.length; i++) {\n if (flag >= calcRows[i][calcField.name]) {\n flag = calcRows[i][calcField.name]\n }\n }\n\n value = flag\n }\n break\n }\n default:\n break\n }\n\n return value\n}\n\nfunction calcGroupsValue(values: number[], exp: string) {\n let value = 0\n\n switch (exp) {\n case 'sum': {\n value = values.reduce((acc, curr) => {\n return acc + curr\n }, 0)\n value = commonService.normalizeFloat(value, 6)\n\n break\n }\n case 'average': {\n const sum = values.reduce((acc, curr) => {\n return acc + curr\n }, 0)\n\n value = sum / values.length\n value = commonService.normalizeFloat(value, 6)\n\n break\n }\n case 'max': {\n value = Math.max(...values)\n break\n }\n case 'min': {\n value = Math.min(...values)\n break\n }\n default:\n break\n }\n\n return value\n}\n\nfunction getUniqueGroupData(resultData: Record<string, any>[], groupSetting: Record<string, any>) {\n let uniqueGroups: Record<string, any>[] = []\n\n if (groupSetting.valueType === 'object') {\n const seenIds = new Set()\n\n for (const row of resultData) {\n if (!seenIds.has(row[groupSetting.name].id)) {\n seenIds.add(row[groupSetting.name].id)\n uniqueGroups.push(row[groupSetting.name])\n }\n }\n } else {\n uniqueGroups = [...new Set(resultData.map((e) => e[groupSetting.name]))]\n }\n\n return uniqueGroups\n}\n\nfunction getFilteredData(resultData: Record<string, any>[], groupSetting: Record<string, any>, group: Record<string, any>) {\n return resultData.filter((el) => {\n if (groupSetting.valueType === 'object') {\n return el[groupSetting.name].id === group.id\n } else {\n return el[groupSetting.name] === group\n }\n })\n}\n\nfunction paginateResult(result: Record<string, any>[], limit: number, page: number): Record<string, any>[] {\n const startIndex = (page - 1) * limit\n const endIndex = startIndex + limit\n\n const pageItems = result.slice(startIndex, endIndex)\n\n return pageItems\n}\n\nfunction deleteDetails(resultData: Record<string, any>[]) {\n for (const resultRow of resultData) {\n if (resultRow.hasSub) {\n deleteDetails(resultRow.children)\n } else {\n resultRow.children = []\n }\n }\n}\n\nasync function getDataRecords(req: Request, params: Record<string, any>, module: any) {\n await prepareVirtualTables(req, params)\n\n const lastOrderByIndex = params.query.lastIndexOf('ORDER BY')\n const lastGroupByIndex = params.query.lastIndexOf('GROUP BY')\n const lastHavingByIndex = params.query.lastIndexOf('HAVING')\n const lastFromIndex = params.query.lastIndexOf('FROM')\n\n let insertClauseIndex = params.query.length\n let needInsertWhereClause = false\n\n let blockIndexes = [\n { name: 'ORDER BY', index: lastOrderByIndex },\n { name: 'HAVING', index: lastHavingByIndex },\n { name: 'GROUP BY', index: lastGroupByIndex },\n ]\n\n blockIndexes = blockIndexes.filter((b) => b.index > lastFromIndex)\n\n if (blockIndexes.length > 0) {\n needInsertWhereClause = true\n insertClauseIndex = Math.min(...blockIndexes.map((b) => b.index))\n }\n\n if (params.sqlFilters.length > 0) {\n if (needInsertWhereClause) {\n params.query = insertWhereClause(params.query, params.sqlFilters, insertClauseIndex)\n } else {\n params.query = params.query + addWhereClause(params.query, params.sqlFilters)\n }\n }\n\n if (module?.beforeQuery && typeof module?.beforeQuery === 'function') {\n await module.beforeQuery(req, params)\n }\n\n if (params.externalData === true) {\n const configSequelize = {\n userName: params.externalUsername,\n password: params.externalPassword,\n host: params.externalServer,\n port: Number(params.externalPort),\n database: params.externalDatabase,\n dialect: params.externalDialect,\n pool: {\n max: 5,\n min: 0,\n acquire: 30000,\n idle: 10000,\n },\n }\n const externalSequelize = new ExternalSequelize(configSequelize.database, configSequelize.userName, configSequelize.password, {\n host: configSequelize.host,\n port: configSequelize.port,\n dialect: configSequelize.dialect,\n pool: {\n max: configSequelize.pool.max,\n min: configSequelize.pool.min,\n acquire: configSequelize.pool.acquire,\n idle: configSequelize.pool.idle,\n },\n })\n\n return await externalSequelize.query(params.query, { type: QueryTypes.SELECT, replacements: params.sqlReplacements })\n } else {\n return await sequelize.query(params.query, { type: QueryTypes.SELECT, replacements: params.sqlReplacements })\n }\n}\n\nfunction insertWhereClause(query: string, filters: Record<string, any>, insertIndex: number) {\n const topQuery = query.substring(0, insertIndex)\n const bottomQuery = query.substring(insertIndex)\n return `${topQuery} ${addWhereClause(query, filters)} \\n${bottomQuery}`\n}\n\nfunction addWhereClause(query: string, filters: Record<string, any>) {\n const lastWhereIndex = query.lastIndexOf('WHERE')\n const lastFromIndex = query.lastIndexOf('FROM')\n if (lastWhereIndex > lastFromIndex) {\n return generateWhereClause(filters, true)\n } else {\n return '\\nWHERE ' + generateWhereClause(filters)\n }\n}\n\nfunction generateWhereClause(filters: Record<string, any>, withAnd: boolean = false) {\n const whereClause = filters.join('')\n if (withAnd) {\n return whereClause\n } else {\n return whereClause.substring(5)\n }\n}\n\nfunction prepareFilters(params: Record<string, any>) {\n params.sqlFilters = []\n params.sqlReplacements = {}\n\n if (params.period.type !== 'without') {\n let dateFrom: Date | number\n let dateTo: Date | number\n let date: Date\n\n if (params.period.type === 'date') {\n dateFrom = new Date(params.period.date).setHours(0, 0, 0, 0)\n dateTo = new Date(params.period.date).setHours(23, 59, 59, 999)\n date = new Date(params.period.date)\n if (params.externalData && params.externalDateKind === 'default') {\n params.sqlReplacements.date = new Date(date).toLocaleDateString()\n } else {\n params.sqlReplacements.date = new Date(date).toISOString()\n }\n } else {\n if (params.period.dateType === 'dateTime') {\n dateFrom = new Date(params.period.dateFrom)\n dateTo = new Date(params.period.dateTo)\n } else {\n dateFrom = new Date(params.period.dateFrom).setHours(0, 0, 0, 0)\n dateTo = new Date(params.period.dateTo).setHours(23, 59, 59, 999)\n }\n }\n if (params.externalData && params.externalDateKind === 'default') {\n params.sqlReplacements.dateFrom = new Date(dateFrom).toLocaleDateString()\n params.sqlReplacements.dateTo = new Date(dateTo).toLocaleDateString()\n } else {\n params.sqlReplacements.dateFrom = new Date(dateFrom).toISOString()\n params.sqlReplacements.dateTo = new Date(dateTo).toISOString()\n }\n }\n\n let rowFilter = ''\n\n const filters = params.filters\n\n for (let filter of filters) {\n let columnName = filter.path\n\n if (filter.operator === 'filled') {\n rowFilter = `${columnName} IS NOT NULL`\n } else if (filter.operator === 'notFilled') {\n rowFilter = `${columnName} IS NULL`\n } else {\n if (filter.valueType === 'object') {\n if (filter.operator === 'inList' || filter.operator === 'notInList') {\n let ids: string[] = []\n\n for (let rowValue of filter.value) {\n ids.push(`'${rowValue.id}'`)\n }\n\n rowFilter = `${columnName} ${filter.operator === 'inList' ? ' IN ' : 'NOT IN '} (${ids.toString()})`\n } else {\n if (!filter.value) {\n rowFilter = `${columnName} IS NULL`\n } else {\n rowFilter = `${columnName} ${filter.operator} '${filter.value.id}'`\n }\n }\n } else if (filter.valueType === 'enum') {\n if (filter.operator === 'inList' || filter.operator === 'notInList') {\n let values: string[] = []\n for (let rowValue of filter.value) {\n values.push(`'${rowValue}'`)\n }\n rowFilter = `${columnName} ${filter.operator === 'inList' ? ' IN ' : 'NOT IN '} (${values.toString()})`\n } else {\n rowFilter = `${columnName} ${filter.operator} '${filter.value}'`\n }\n } else if (filter.valueType === 'text') {\n if (filter.operator === 'iLike') {\n rowFilter = `${columnName} LIKE '%${filter.value}%'`\n } else if (filter.operator === 'notILike') {\n rowFilter = `${columnName} NOT LIKE '%${filter.value}%'`\n } else {\n rowFilter = columnName + filter.operator + \"'\" + filter.value + \"'\"\n }\n } else if (filter.valueType === 'date') {\n if (filter.operator === 'between') {\n if (filter.value?.[0] && filter.value?.[1]) {\n let dateFrom = ''\n let dateTo = ''\n\n if (filter.dateType === 'dateTime') {\n dateFrom = moment(filter.value[0], 'DD.MM.YYYY HH:mm:ss').toISOString()\n dateTo = moment(filter.value[1], 'DD.MM.YYYY HH:mm:ss').toISOString()\n } else {\n const dateFromStr = moment(filter.value[0], 'DD.MM.YYYY').toDate()\n const dateToStr = moment(filter.value[1], 'DD.MM.YYYY').toDate()\n\n dateFrom = moment(dateFromStr.setHours(0, 0, 0, 0)).toISOString()\n dateTo = moment(dateToStr.setHours(23, 59, 59, 999)).toISOString()\n }\n\n rowFilter = `${columnName} ${filter.operator} '${dateFrom}' and '${dateTo}'`\n }\n } else {\n if (filter.dateType === 'dateTime') {\n rowFilter = `${columnName} ${filter.operator} '${moment(filter.value, 'DD.MM.YYYY HH:mm:ss').toISOString()}'`\n } else {\n rowFilter = `${columnName} ${filter.operator} '${moment(filter.value, 'DD.MM.YYYY').toISOString()}'`\n }\n }\n } else if (filter.valueType === 'number' && filter.operator === 'between') {\n if (filter.value?.[0] && filter.value?.[1]) {\n let minValue = filter.value[0]\n let maxValue = filter.value[1]\n rowFilter = `${columnName} ${filter.operator} '${minValue}' and '${maxValue}'`\n }\n } else {\n rowFilter = columnName + filter.operator + filter.value\n }\n }\n\n params.sqlFilters.push(' AND ' + rowFilter)\n }\n}\n\nasync function convertQueryData(queryData: Record<string, any>[], fields: Record<string, any>[]): Promise<Record<string, any>[]> {\n let resData: Record<string, any>[] = []\n\n let rowNumber = 0\n for (const record of queryData) {\n rowNumber += 1\n\n const rowData = {}\n\n for (const field of fields) {\n if (field.rowNumber === true) {\n rowData[field.name] = rowNumber\n } else if (field.valueType === 'date') {\n let format = 'DD.MM.YYYY HH:mm:ss'\n if (field.dateType === 'date') {\n format = 'DD.MM.YYYY'\n }\n if (field.format && field.format !== '') {\n format = field.format\n }\n\n rowData[field.name] = record[field.name] ? moment(record[field.name]).format(format) : ''\n } else if (field.valueType === 'number') {\n let value = record[field.name]\n\n if (value && field.format && field.format !== '') {\n try {\n const format = JSON.parse(field.format)\n\n if (format.NFD) {\n value = Number(value)\n value = value.toFixed(format.NFD)\n }\n\n rowData[field.name] = value\n } catch (error) {\n rowData[field.name] = '0'\n logger.error(`Error in Reports getResult controller`, { meta: error })\n }\n } else {\n rowData[field.name] = value\n }\n } else if (field.valueType === 'object') {\n if (field.attribs) {\n rowData[field.name] = {}\n\n for (const attr of field.attribs) {\n rowData[field.name][attr.name] = record[attr.path]\n }\n } else {\n rowData[field.name] = { id: undefined, name: undefined }\n }\n } else {\n rowData[field.name] = record[field.name]\n }\n }\n\n resData.push(rowData)\n }\n\n return resData\n}\n\nasync function prepareVirtualTables(req: Request, params: Record<string, any>) {\n const vTables = await virtualTables(req)\n\n let matches = params.query.match(/\\{([^}]+)\\}/g)\n\n if (matches) {\n let vtNames = matches.map((match: string[]) => match.slice(1, -1))\n\n let vtQuery: string | undefined\n for (const vtName of vtNames) {\n const tableData = vTables.find((el) => el.name === vtName)\n\n if (tableData) {\n params.query = params.query.replace(`{${vtName}}`, vtName)\n\n if (!vtQuery) {\n vtQuery = `with ${vtName} as (${tableData.query})`\n } else {\n vtQuery = `${vtQuery}, ${vtName} as (${tableData.query})`\n }\n\n if (tableData.params) {\n params.sqlReplacements = Object.assign(params.sqlReplacements, tableData.params)\n }\n }\n }\n\n if (vtQuery) {\n params.query = `${vtQuery} ${params.query}`\n }\n }\n}\n","import userRightsService from '@/core/services/userRights.service'\nimport { Request } from 'express'\n\nexport default async (req: Request) => {\n const wheres = await customerRigth(req)\n\n return [\n {\n name: 'customerRequests',\n query: 'select * from customer_requests where \"authorId\" = :authorId',\n params: {\n authorId: req.user?.id,\n },\n },\n {\n name: 'customerRequestStatuses',\n query: 'select * from customer_request_statuses',\n },\n {\n name: 'deliveryNotes',\n query: `SELECT * FROM delivery_notes as virtual_table ${wheres}`,\n },\n {\n name: 'deliveryOrders',\n query: `SELECT * FROM delivery_orders as virtual_table ${wheres}`,\n },\n {\n name: 'Dispositions',\n query: `SELECT * FROM dispositions as virtual_table ${wheres}`,\n },\n ]\n}\n\nconst customerRigth = async (req: Request) => {\n let wheres = ''\n const forwarders = await userRightsService.getForwarderFilter(req)\n if (forwarders.fullAccess === false) {\n wheres = 'WHERE ' + `virtual_table.\"forwarderId\" = '${forwarders.forwarder}'`\n }\n\n return wheres\n}\n","import express from 'express'\nimport controllers from '../controllers'\n\nconst router = express.Router()\n\nconst path = 'report'\n\nrouter.get(`/${path}/settings/:id`, controllers.getSettings)\nrouter.post(`/${path}/result`, controllers.getResult)\n// router.post(`/${path}/export_excel`, controllers.generateExcel)\n// router.post(`/${path}/export_pdf`, controllers.generatePdf)\n\nexport default router\n","import morgan from 'morgan'\nimport _ from 'lodash'\nimport { Application, Request, Response } from 'express'\nimport createRotatingStream from './rotatingStream.service'\n\nconst accessLogStream = createRotatingStream({\n path: `${process.cwd()}/logs/access`,\n interval: '1d', // '6h', '1h', '15m'\n})\n\nfunction setupLogger(app: Application) {\n app.use(\n morgan(\n (tokens, req: Request, res: Response) => {\n const user: Record<string, any> = {}\n\n if ((req as any).user) {\n user.id = (req as any).user.id\n user.login = (req as any).user.login\n user.name = (req as any).user.name\n }\n\n let body: Record<string, any> = {}\n if (req.body) {\n body = _.cloneDeep(req.body)\n delete body.password\n }\n\n const headers = Object.fromEntries(Object.entries(req.headers).filter(([k]) => k !== 'cookie'))\n\n return JSON.stringify({\n date: new Date().toISOString(),\n ip: req.headers['x-real-ip'] || req.headers['x-forwarded-for'] || req.ip,\n method: tokens.method(req, res),\n url: tokens.url(req, res),\n status: tokens.status(req, res),\n time: tokens['response-time'](req, res),\n length: tokens.res(req, res, 'content-length'),\n user,\n query: req.query,\n params: req.params,\n body,\n headers,\n })\n },\n { stream: accessLogStream }\n )\n )\n}\n\nexport default setupLogger\n","import { StatusCodes } from 'http-status-codes'\nimport sequelize from '@/database/dbConnection'\nimport logger from '@/core/services/logger.service'\n\nimport { AppSettingModel, AppSettingItemModel, AppSetting } from '@/src/types'\n\ninterface ReturnObject<T = any> {\n value: T | null\n message: string\n status: number | null\n}\n\nexport default {\n async getSetting(settingName: string): Promise<ReturnObject<any>> {\n const returnObject: ReturnObject = { value: null, message: '', status: null }\n\n if (!settingName) {\n returnObject.status = StatusCodes.BAD_REQUEST\n returnObject.message = 'Bad incoming parameters.'\n return returnObject\n }\n\n try {\n const settingItem = (await sequelize.models.AppSettingItem.findOne({\n where: { predefinedName: settingName },\n })) as AppSettingItemModel | null\n\n if (!settingItem) {\n returnObject.status = StatusCodes.BAD_REQUEST\n returnObject.message = 'App setting is not found.'\n return returnObject\n }\n\n const existSetting = (await sequelize.models.AppSetting.findOne({\n where: { appSettingItemId: settingItem.id },\n })) as AppSettingModel | null\n\n if (!existSetting) {\n const result = getDefaultValue(settingItem)\n returnObject.status = StatusCodes.OK\n returnObject.value = result\n } else {\n returnObject.value = getValueByType(settingItem.valueType, existSetting)\n returnObject.status = StatusCodes.OK\n }\n } catch (error) {\n logger.error(`Error in App getSetting controller`, { meta: error })\n returnObject.status = StatusCodes.INTERNAL_SERVER_ERROR\n returnObject.message = 'Internal server error.'\n }\n\n return returnObject\n },\n\n async setSetting(settingName: string, settingValue: any): Promise<ReturnObject<any>> {\n const returnObject: ReturnObject = { value: null, message: '', status: null }\n\n if (!settingName) {\n returnObject.status = StatusCodes.BAD_REQUEST\n returnObject.message = 'Bad incoming parameters.'\n return returnObject\n }\n\n try {\n const settingItem = (await sequelize.models.AppSettingItem.findOne({\n where: { predefinedName: settingName },\n })) as AppSettingItemModel | null\n\n if (!settingItem) {\n returnObject.status = StatusCodes.BAD_REQUEST\n returnObject.message = 'App setting is not found.'\n return returnObject\n }\n\n const existSetting = (await sequelize.models.AppSetting.findOne({\n where: { appSettingItemId: settingItem.id },\n })) as AppSettingModel | null\n\n if (!existSetting) {\n const newData: Partial<AppSetting> = {\n appSettingItemId: settingItem.id,\n }\n setValue(newData, settingItem.valueType, settingValue)\n\n const createdSetting = await sequelize.models.AppSetting.create(newData)\n returnObject.status = StatusCodes.OK\n returnObject.value = createdSetting\n } else {\n const updateData: Partial<AppSetting> = {}\n setValue(updateData, settingItem.valueType, settingValue)\n\n const updatedSetting = await existSetting.update(updateData)\n returnObject.status = StatusCodes.OK\n returnObject.value = updatedSetting\n }\n } catch (error) {\n logger.error(`Error in App setSetting controller`, { meta: error })\n returnObject.status = StatusCodes.INTERNAL_SERVER_ERROR\n returnObject.message = 'Internal server error.'\n }\n\n return returnObject\n },\n}\n\nfunction getDefaultValue(settingItem: AppSettingItemModel) {\n switch (settingItem.valueType) {\n case 'number':\n return 0\n case 'string':\n case 'text':\n return ''\n case 'date':\n return null\n case 'boolean':\n return false\n case 'object':\n case 'enum':\n return null\n default:\n return null\n }\n}\n\nfunction getValueByType(valueType: string, setting: AppSettingModel): any {\n switch (valueType) {\n case 'number':\n return setting.valueNumber\n case 'string':\n case 'text':\n return setting.valueString\n case 'date':\n return setting.valueDate\n case 'boolean':\n return setting.valueBoolean\n case 'object':\n case 'enum':\n return setting.valueRef\n default:\n return null\n }\n}\n\nfunction setValue(data: Partial<AppSettingModel>, valueType: string, value: any): void {\n switch (valueType) {\n case 'number':\n data.valueNumber = value\n break\n case 'string':\n case 'text':\n data.valueString = value\n break\n case 'date':\n data.valueDate = value\n break\n case 'boolean':\n data.valueBoolean = value\n break\n case 'object':\n data.valueRef = value\n break\n }\n}\n","import sequelize from '@/database/dbConnection'\nimport { Model, ModelStatic, QueryTypes } from 'sequelize'\nimport { Request } from 'express'\n\ninterface IncludeOptions {\n model: ModelStatic<Model<any, any>>\n as: string\n attributes?: string[]\n where?: Record<string, unknown>\n include?: IncludeOptions[]\n}\n\ninterface TranslateData {\n [key: string]: any\n lang?: {\n [key: string]: {\n [langCode: string]: string\n }\n }\n}\n\ninterface EnumRow {\n id: number\n enumName: string\n valueId: number\n value: string\n rowNumber: number\n}\n\nexport default {\n prepareIncludes(\n object: ModelStatic<Model<any, any>>,\n params: { [key: string]: any },\n attributes: string[] = [],\n filters: Record<string, any> | null = null,\n order: any[] | null = null,\n extraAttributes: string[] = []\n ): IncludeOptions[] | { all: true } {\n let include: IncludeOptions[] = []\n let compactInclude = true // default mode\n\n if (Object.prototype.hasOwnProperty.call(params, 'compactInclude')) {\n compactInclude = params.compactInclude\n }\n\n const includeAttribs = prepareAttributes(attributes)\n const extraAttribs = prepareAttributes(extraAttributes)\n\n if (params.include) {\n include = params.include\n } else if (object.associations) {\n if (compactInclude !== true) {\n return { all: true }\n }\n\n for (let as in object.associations) {\n if (object.associations[as].options._noTablePart) {\n continue\n }\n\n let model = object.associations[as].target\n\n if (object.associations[as].isSingleAssociation) {\n let attributes = ['id', 'presentation']\n\n if (object.associations[as].target.getAttributes().name) {\n attributes.push('name')\n }\n\n const subInclude: any[] = []\n if (includeAttribs[as]) {\n for (const subAs of includeAttribs[as]) {\n if (typeof subAs === 'object') {\n for (const subAsKey in subAs) {\n const subModel = model.associations[subAsKey]?.target\n\n if (subModel) {\n const subAsValue = subAs[subAsKey]\n if (Array.isArray(subAsValue)) {\n let subAttributes = [...new Set(['id', 'presentation', ...subAsValue])]\n\n if (subModel.getAttributes().name) {\n subAttributes.push('name')\n }\n\n subInclude.push({ model: subModel, as: subAsKey, attributes: subAttributes })\n }\n }\n }\n } else {\n if (!attributes.includes(subAs)) {\n attributes.push(subAs)\n }\n }\n }\n }\n\n if (extraAttribs[as]) {\n attributes = [...new Set([...attributes, ...extraAttribs[as]])]\n }\n\n const where: Record<string, unknown> = filters?.[as]\n\n include.push({ model, as, attributes, where, include: subInclude }) // include field ref data\n } else if (params.withTableParts) {\n const where: Record<string, any> = filters?.[as]\n const count = include.push({ model, as, where, include: [] }) // include tables\n\n if (order && model.getAttributes().rowNumber) {\n order.push([{ model, as }, 'rowNumber', 'asc'])\n }\n\n if (model.associations) {\n include[count - 1].include = []\n\n for (let tFieldAs in model.associations) {\n let tFieldModel = model.associations[tFieldAs].target\n\n if (model.associations[tFieldAs].isSingleAssociation) {\n let tFieldAttributes = ['id', 'presentation']\n\n if (model.associations[tFieldAs].target.getAttributes().name) {\n tFieldAttributes.push('name')\n }\n if (includeAttribs[as]?.[tFieldAs]) {\n tFieldAttributes = [...new Set([...tFieldAttributes, ...includeAttribs[as][tFieldAs]])]\n }\n\n include[count - 1].include?.push({ model: tFieldModel, as: tFieldAs, attributes: tFieldAttributes }) // include table field ref data\n }\n }\n }\n }\n }\n }\n\n return include\n },\n\n async setAuthor(objectData: Record<string, unknown>, req: Request): Promise<void> {\n if (req.user) {\n objectData.authorId = req.user.id\n objectData.author = req.user\n } else {\n console.error('Not found user on request!')\n }\n },\n\n executeConditionCode(str: string, args: unknown): unknown {\n const conditionFunction = new Function('args', str)\n const conditionRes = conditionFunction(args)\n return conditionRes\n },\n\n translateField(rowData: TranslateData, fieldName: string, langCode: string): string {\n const needTranslate = langCode && langCode !== 'pl'\n\n if (needTranslate !== true || rowData.lang === null) {\n return rowData[fieldName]\n }\n\n return rowData.lang?.[fieldName]?.[langCode] || rowData[fieldName]\n },\n\n async initEnums(): Promise<Record<string, string[]>> {\n const queryText = `\n SELECT \n enums.id AS \"id\",\n enums.name AS \"enumName\",\n enum_values.id AS \"valueId\",\n enum_values.value AS \"value\",\n enum_values.\"rowNumber\" AS \"rowNumber\"\n FROM \n enums\n LEFT JOIN \n enum_values \n ON \n enum_values.\"parentId\" = enums.id\n ORDER BY \n enums.id ASC, \n enum_values.\"rowNumber\" ASC`\n\n try {\n const enums: EnumRow[] = await sequelize.query(queryText, { type: QueryTypes.SELECT })\n\n const result = enums.reduce<Record<string, string[]>>((acc, row) => {\n if (!acc[row.enumName]) {\n acc[row.enumName] = []\n }\n acc[row.enumName].push(row.value)\n return acc\n }, {})\n\n return result\n } catch (error) {\n console.error(error)\n return {}\n }\n },\n\n normalizeFloat(value: number, digits: number = 6): number {\n if (!Number.isFinite(value)) return value\n\n const factor = Math.pow(10, digits)\n const rounded = Math.round(value * factor) / factor\n\n const factorZero = Math.pow(10, 3)\n const roundedZero = Math.round(value * factorZero) / factorZero\n\n return roundedZero === 0 ? 0 : rounded\n },\n}\n\nfunction prepareAttributes(inputAttributes: string[]): Record<string, any> {\n const outputAttributes = {}\n if (inputAttributes.length === 0) {\n return outputAttributes\n }\n\n for (const attrib of inputAttributes) {\n const attribInfo = attrib.split('.')\n\n if (attribInfo.length > 0) {\n if (outputAttributes[attribInfo[0]]) {\n if (attribInfo.length == 2) {\n outputAttributes[attribInfo[0]].push(attribInfo[1])\n } else if (attribInfo.length > 2) {\n if (outputAttributes[attribInfo[0]][attribInfo[1]]) {\n outputAttributes[attribInfo[0]][attribInfo[1]].push(attribInfo[2])\n } else {\n outputAttributes[attribInfo[0]].push({ [attribInfo[1]]: [attribInfo[2]] })\n }\n }\n } else {\n if (attribInfo.length == 2) {\n outputAttributes[attribInfo[0]] = [attribInfo[1]]\n } else if (attribInfo.length > 2) {\n outputAttributes[attribInfo[0]] = {}\n outputAttributes[attribInfo[0]][attribInfo[1]] = [attribInfo[2]]\n }\n }\n }\n }\n\n return outputAttributes\n}\n","import { QueryTypes } from 'sequelize'\nimport sequelize from '@/database/dbConnection'\nimport logger from '@/core/services/logger.service'\nimport cryptoJs from 'crypto-js'\nimport { minify } from 'terser'\n\ninterface CommonCommand {\n id: string\n name: string\n title: string\n objectType: string | null\n viewType: string | null\n module: string | null\n moduleV3?: string | null\n lang: string | null\n presentationType: string\n icon: string | null\n hidden: boolean\n variant: string | null\n tooltip: string | null\n classes: string | null\n styles: string | null\n groupId: string | null\n isGroup: boolean\n objects: string[]\n}\n\ninterface CommandGroup {\n id: string\n name: string\n title: string\n objectType: string | null\n viewType: string | null\n lang: string | null\n presentationType: string\n icon: string | null\n hidden: boolean\n variant: string | null\n tooltip: string | null\n classes: string | null\n styles: string | null\n isGroup: boolean\n objects: string[]\n items: CommonCommand[]\n}\n\nexport default {\n async initCommonCommands(userId: string) {\n const commandsTree: Array<CommandGroup | CommonCommand> = await initCommandGroups()\n const commonCommands = await initPlaneCommands(userId)\n\n for (const commonCommand of commonCommands) {\n if (commonCommand.groupId) {\n const existGroup = commandsTree.find((el) => el.id === commonCommand.groupId && el.isGroup) as CommandGroup\n\n if (existGroup) {\n existGroup.items.push({ ...commonCommand })\n }\n } else {\n commandsTree.push({ ...commonCommand })\n }\n }\n\n return commandsTree\n },\n}\n\nasync function initCommandGroups() {\n const queryText = `\n SELECT\n command_groups.id AS \"id\",\n command_groups.name AS \"name\",\n command_groups.\"title\" AS \"title\",\n command_groups.\"objectType\" AS \"objectType\",\n command_groups.\"viewType\" AS \"viewType\",\n command_groups.\"lang\" AS \"lang\",\n command_groups.\"presentationType\" AS \"presentationType\",\n command_groups.\"variant\" AS \"variant\",\n command_groups.\"icon\" AS \"icon\",\n command_groups.\"hidden\" AS \"hidden\",\n command_groups.\"tooltip\" AS \"tooltip\",\n command_groups.\"classes\" AS \"classes\",\n command_groups.\"styles\" AS \"styles\",\n groups_objects.\"objectId\" AS \"objectId\"\n FROM \n command_groups\n LEFT JOIN \n command_groups_objects as \"groups_objects\"\n ON \n groups_objects.\"parentId\" = command_groups.id \n WHERE\n command_groups.\"markedToDelete\" = false`\n\n try {\n const commandGroupsRaw: any[] = await sequelize.query(queryText, { type: QueryTypes.SELECT })\n\n const commandGroups: CommandGroup[] = commandGroupsRaw.reduce<any[]>((acc, row) => {\n let findIndex = acc.findIndex((el) => el.name === row.name)\n if (findIndex === -1) {\n const arrayLength = acc.push({\n id: row.id,\n name: row.name,\n title: row.title,\n objectType: row.objectType,\n viewType: row.viewType,\n lang: row.lang ? JSON.parse(row.lang) : row.lang,\n presentationType: row.presentationType,\n icon: row.icon,\n variant: row.variant,\n description: row.description,\n hidden: row.hidden,\n tooltip: row.tooltip,\n classes: row.classes,\n styles: row.styles,\n isGroup: true,\n objects: [],\n items: [],\n })\n findIndex = arrayLength - 1\n }\n\n if (findIndex > -1 && row.objectId) {\n acc[findIndex].objects.push(row.objectId)\n }\n\n return acc\n }, [])\n\n return commandGroups\n } catch (error) {\n console.error(error)\n return []\n }\n}\n\nasync function initPlaneCommands(userId: string) {\n const queryText = `\n SELECT\n common_commands.id AS \"id\",\n common_commands.name AS \"name\",\n common_commands.\"title\" AS \"title\",\n common_commands.\"objectType\" AS \"objectType\",\n common_commands.\"viewType\" AS \"viewType\",\n common_commands.\"module\" AS \"module\",\n common_commands.\"moduleV3\" AS \"moduleV3\",\n common_commands.\"lang\" AS \"lang\",\n common_commands.\"presentationType\" AS \"presentationType\",\n common_commands.\"variant\" AS \"variant\",\n common_commands.\"icon\" AS \"icon\",\n common_commands.\"hidden\" AS \"hidden\",\n common_commands.\"tooltip\" AS \"tooltip\",\n common_commands.\"classes\" AS \"classes\",\n common_commands.\"styles\" AS \"styles\",\n common_commands.\"groupId\" AS \"groupId\",\n commands_objects.\"objectId\" AS \"objectId\"\n FROM \n common_commands\n LEFT JOIN \n common_commands_objects as \"commands_objects\"\n ON \n commands_objects.\"parentId\" = common_commands.id \n WHERE\n common_commands.\"markedToDelete\" = false`\n\n try {\n const commonCommandsRaw: any[] = await sequelize.query(queryText, { type: QueryTypes.SELECT })\n\n const commonCommands: CommonCommand[] = commonCommandsRaw.reduce<any[]>((acc, row) => {\n let findIndex = acc.findIndex((el) => el.name === row.name)\n if (findIndex === -1) {\n const arrayLength = acc.push({\n id: row.id,\n name: row.name,\n title: row.title,\n objectType: row.objectType,\n viewType: row.viewType,\n module: row.module,\n moduleV3: row.moduleV3,\n lang: row.lang ? JSON.parse(row.lang) : row.lang,\n presentationType: row.presentationType,\n variant: row.variant,\n icon: row.icon,\n description: row.description,\n hidden: row.hidden,\n tooltip: row.tooltip,\n classes: row.classes,\n styles: row.styles,\n groupId: row.groupId,\n isGroup: false,\n objects: [],\n })\n findIndex = arrayLength - 1\n }\n\n if (findIndex > -1 && row.objectId) {\n acc[findIndex].objects.push(row.objectId)\n }\n\n return acc\n }, [])\n\n const exportRemoveRegex = /^\\s*export\\s+/gm\n const exportFuncRegex = /^\\s*(?:async\\s+)?function\\s+commandProcessing\\s*\\([^)]*\\)\\s*{[\\s\\S]*?}/gm\n\n for (const commonCommand of commonCommands) {\n if (commonCommand.module) {\n commonCommand.module = commonCommand.module.replace(exportRemoveRegex, '')\n\n exportFuncRegex.lastIndex = 0\n const paternExist: boolean = exportFuncRegex.test(commonCommand.module)\n\n let moduleContent: string = ''\n if (paternExist) {\n moduleContent = `function main() {${commonCommand.module.trim()} return{commandProcessing}}`\n } else {\n moduleContent = `function main() {return {}}`\n }\n\n try {\n const minifiedModule: any = await minify(moduleContent)\n commonCommand.module = cryptoJs.AES.encrypt(minifiedModule.code.replace(/^function main\\(\\)/, ''), userId).toString()\n } catch (error) {\n logger.error(`Error in commonCommand module`, { meta: error })\n commonCommand.module = null\n }\n }\n\n if (commonCommand.moduleV3) {\n commonCommand.moduleV3 = commonCommand.moduleV3.replace(exportRemoveRegex, 'function ')\n\n exportFuncRegex.lastIndex = 0\n const paternExist: boolean = exportFuncRegex.test(commonCommand.moduleV3)\n\n let moduleContent: string = ''\n if (paternExist) {\n moduleContent = `function main() {${commonCommand.moduleV3.trim()} return{commandProcessing}}`\n } else {\n moduleContent = `function main() {return {}}`\n }\n\n try {\n const minifiedModule: any = await minify(moduleContent)\n commonCommand.moduleV3 = cryptoJs.AES.encrypt(minifiedModule.code.replace(/^function main\\(\\)/, ''), userId).toString()\n } catch (error) {\n logger.error(`Error in commonCommand module`, { meta: error })\n commonCommand.moduleV3 = null\n }\n }\n }\n\n return commonCommands\n } catch (error) {\n console.error(error)\n return []\n }\n}\n","import { v4 as uuidv4 } from 'uuid'\nimport { StatusCodes } from 'http-status-codes'\nimport { Model, ModelStatic, Op } from 'sequelize'\nimport moment from 'moment'\nimport fs from 'fs'\n\nimport logger from '@/core/services/logger.service'\nimport commonService from '@/core/services/common.service'\nimport documentService from '@/core/services/document.service'\nimport registerService from '@/core/services/register.service'\nimport seederService from '@/core/services/seeder.service'\nimport objectVersioning from '@/core/services/objectVersions.service'\nimport sequelize from '@/database/dbConnection'\nimport { NextFunction, Request, Response } from 'express'\nimport { AppObject } from '@/src/types'\nimport cryptoJs from 'crypto-js'\n\ninterface Sort {\n sortBy: string\n sortDesc: boolean\n}\n\ninterface Pagination {\n page: number\n limit: number\n}\n\ninterface IncludeFilter {\n [key: string]: Record<string, unknown>\n}\n\ninterface IncludeModel {\n model: ModelStatic<Model>\n as: string\n fkField?: string\n}\ninterface ControllerResult<T> {\n status: number\n responseData: T\n}\n\nexport default {\n async findAllItems(req: Request, res: Response, next: NextFunction, object: AppObject, params: Record<string, any> = {}): Promise<ControllerResult<any>> {\n const pagination: Pagination = JSON.parse((req.query?.pagination as string) || '{}')\n const sort: Sort[] | Sort = JSON.parse((req.query?.sort as string) || '{}')\n\n let filter: Record<string | symbol, any> = {}\n if (req.query?.filter) {\n filter = typeof req.query?.filter === 'string' ? JSON.parse(req.query?.filter) : req.query?.filter\n }\n\n const limit = req.query?.limit || null\n const withTableParts = req.query?.withTableParts || null\n\n let attributes: any = {}\n let includeAttributes: string[] = []\n if (req.query?.attributes) {\n attributes = req.query?.attributes\n\n if (typeof attributes === 'string') {\n attributes = JSON.parse(attributes)\n }\n }\n\n if (params.attributes && typeof params.attributes === 'object') {\n if (typeof attributes === 'object' && !Array.isArray(attributes) && Object.keys(attributes).length === 0) {\n attributes = params.attributes\n } else if (typeof attributes === 'object' && Array.isArray(attributes) && attributes.length === 0) {\n attributes = params.attributes\n } else if (typeof attributes === 'object' && !Array.isArray(attributes) && !Array.isArray(params.attributes)) {\n attributes = Object.assign(attributes, params.attributes)\n } else if (typeof attributes === 'object' && Array.isArray(attributes) && Array.isArray(params.attributes)) {\n attributes = [...new Set([...attributes, ...params.attributes])]\n }\n }\n\n if (Array.isArray(attributes)) {\n includeAttributes = attributes.filter((el) => {\n return el.includes('.')\n })\n\n attributes = attributes.filter((el) => {\n return !el.includes('.')\n })\n }\n\n let extraAttributes: string[] = []\n if (req.query?.extraAttributes) {\n if (typeof req.query?.extraAttributes === 'string') {\n extraAttributes = JSON.parse(req.query?.extraAttributes)\n } else {\n extraAttributes = req.query?.extraAttributes as string[]\n }\n }\n\n let includeFilter: IncludeFilter = {}\n if (params.filter) {\n filter = Object.assign(filter, params.filter)\n }\n\n if (filter.searchStr) {\n const searchFields = prepareSearchFields(object)\n\n if (searchFields.length > 0) {\n if (searchFields.length > 1) {\n filter[Op.or] = []\n\n for (let searchField of searchFields) {\n filter[Op.or].push({ [searchField]: { [Op.iLike]: `%${filter.searchStr}%` } })\n }\n } else {\n filter[searchFields[0]] = {\n [Op.iLike]: `%${filter.searchStr}%`,\n }\n }\n }\n\n delete filter.searchStr\n }\n\n if (filter.exclude) {\n filter.id = { [Op.and]: filter.exclude.map((id) => ({ [Op.ne]: id })) }\n delete filter.exclude\n }\n\n if (filter.advanced) {\n prepareFilters(filter.advanced, filter, includeFilter)\n delete filter.advanced\n }\n\n if (filter.quick) {\n prepareFilters(filter.quick, filter, includeFilter)\n delete filter.quick\n }\n\n for (const filterField in filter) {\n if (filterField.includes('.')) {\n const filterAttrib = filterField.split('.')\n if (includeFilter[filterAttrib[0]]) {\n includeFilter[filterAttrib[0]][filterAttrib[1]] = filter[filterField]\n } else {\n includeFilter[filterAttrib[0]] = {\n [filterAttrib[1]]: filter[filterField],\n }\n }\n\n delete filter[filterField]\n }\n }\n\n if (object.type === 'document' && filter.period) {\n const dateFrom = filter.period[0]\n const dateTo = moment(filter.period[1]).endOf('day').toISOString()\n\n filter.date = { [Op.between]: [dateFrom, dateTo] }\n delete filter.period\n }\n\n if (object.type === 'register' && filter.period) {\n const dateFrom = filter.period[0]\n const dateTo = filter.period[1]\n filter.period = { [Op.between]: [dateFrom, dateTo] }\n }\n\n const order: string[][] = []\n prepareSorting(object, sort, order)\n\n const lang = req.query?.lang\n const needTranslate = lang && lang !== 'pl'\n\n if (withTableParts) {\n params.withTableParts = withTableParts\n }\n\n let include = commonService.prepareIncludes(object.model, params, includeAttributes, includeFilter, null, extraAttributes)\n\n try {\n let items: Record<string, any>[]\n\n if (pagination.page) {\n let limit = pagination.limit\n let offset = 0 + (pagination.page - 1) * limit\n\n items = await object.model.findAndCountAll({\n where: filter,\n offset,\n limit,\n attributes,\n order,\n include,\n group: params?.group || null,\n })\n } else {\n items = await object.model.findAll({\n where: filter,\n attributes,\n order,\n limit,\n include,\n group: params?.group || null,\n })\n }\n\n if (params.resultProcessing) {\n items = params.resultProcessing(items)\n }\n\n if (items) {\n items = JSON.parse(JSON.stringify(items))\n\n if (needTranslate) {\n // TO DO\n }\n\n return { status: StatusCodes.OK, responseData: items }\n } else {\n const message = 'Items not find'\n logger.error(`Error in ${object.name} findAll controller`, { meta: message })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message } }\n }\n } catch (error) {\n logger.error(`Error in ${object.name} findAll controller`, { meta: error })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error.message } }\n }\n },\n\n async findItem(req: Request, res: Response, next: NextFunction, object: AppObject, params: Record<string, any> = {}): Promise<ControllerResult<any>> {\n const objId = req.params.id\n\n if (!objId || typeof objId !== 'string' || objId.length !== 36) {\n const message = 'Object id is not correct!'\n logger.error(`Error in ${object.name} findItem controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n params.withTableParts = false\n\n let attributes = {}\n let includeAttributes: string[] = []\n if (req.query?.attributes) {\n attributes = req.query.attributes\n\n if (typeof attributes === 'string') {\n attributes = JSON.parse(attributes)\n }\n\n if (Array.isArray(attributes)) {\n includeAttributes = attributes.filter((el) => {\n return el.includes('.')\n })\n\n attributes = attributes.filter((el) => {\n return !el.includes('.')\n })\n }\n }\n\n if (params?.attributes) {\n if (Array.isArray(params.attributes)) {\n const paramIncludeAttributes = params.attributes.filter((el) => {\n return el.includes('.')\n })\n\n const paramAttributes = params.attributes.filter((el) => {\n return !el.includes('.')\n })\n attributes = Object.assign(attributes, paramAttributes)\n includeAttributes = Object.assign(includeAttributes, paramIncludeAttributes)\n }\n }\n\n const paramExtraAttributes = req.query?.extraAttributes\n\n let extraAttributes: string[] = []\n\n if (paramExtraAttributes) {\n extraAttributes = typeof paramExtraAttributes === 'string' ? JSON.parse(paramExtraAttributes) : paramExtraAttributes\n }\n\n let order: string[][] = []\n\n let mainAttributes: string[] = includeAttributes\n let mainExtraAttributes: string[] = extraAttributes\n for (const tablePart in object.tables) {\n mainAttributes = mainAttributes.filter((el) => !el.startsWith(`${tablePart}.`))\n mainExtraAttributes = mainExtraAttributes.filter((el) => !el.startsWith(`${tablePart}.`))\n }\n\n let include = commonService.prepareIncludes(object.model, params, mainAttributes, null, order, mainExtraAttributes)\n\n try {\n let existObject: Record<string, any> = await object.model.findByPk(objId, { include, order })\n\n if (existObject) {\n existObject = JSON.parse(JSON.stringify(existObject))\n\n for (const tablePart in object.tables) {\n order = []\n\n let tableAttributes: string[] = includeAttributes\n let tableExtraAttributes: string[] = extraAttributes\n\n tableAttributes = tableAttributes.filter((el) => el.startsWith(`${tablePart}.`))\n tableExtraAttributes = tableExtraAttributes.filter((el) => el.startsWith(`${tablePart}.`))\n\n const regex = new RegExp(`^${tablePart}\\\\.`)\n\n tableAttributes = tableAttributes.map((el) => el.replace(regex, ''))\n tableExtraAttributes = tableExtraAttributes.map((el) => el.replace(regex, ''))\n\n const tableInclude = commonService.prepareIncludes(object.tables[tablePart].model, params, tableAttributes, null, order, tableExtraAttributes)\n\n if (order && object.tables[tablePart].model.getAttributes().rowNumber) {\n order.push(['rowNumber', 'asc'])\n }\n\n const tableRows: Record<string, any>[] = await object.tables[tablePart].model.findAll({ where: { parentId: existObject.id }, include: tableInclude, order })\n\n existObject[tablePart] = JSON.parse(JSON.stringify(tableRows))\n }\n\n if (object.configurationData === true) {\n const clientVersion = (req.headers['x-client-version'] || '2') as string\n await initObjectModule(object, existObject, req.user?.id, clientVersion)\n }\n\n return { status: StatusCodes.OK, responseData: existObject }\n } else {\n const message = `${object.name} with id ${objId} not found`\n logger.error(`Error in ${object.name} findByPk controller`, { meta: message })\n return { status: StatusCodes.NOT_FOUND, responseData: { message } }\n }\n } catch (error) {\n logger.error(`Error in ${object.name} findByPk controller`, { meta: error })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error.message } }\n }\n },\n\n async findOne(req: Request, res: Response, next: NextFunction, object: AppObject, params: Record<string, any> = {}): Promise<ControllerResult<any>> {\n const whereCondition = req.params.whereCondition\n\n if (!whereCondition) {\n const message = 'Erron in findOne query parameters!'\n logger.error(`Error in ${object.name} findOne controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n params.withTableParts = true\n\n const include = commonService.prepareIncludes(object.model, params)\n\n return await object.model\n .findOne({\n where: whereCondition,\n include,\n })\n .then((result: Record<string, any>) => {\n if (result) {\n return { status: StatusCodes.OK, responseData: result }\n } else {\n const message = `${object.name} not found`\n logger.error(`Error in ${object.name} findOne controller`, { meta: message })\n return { status: StatusCodes.NOT_FOUND, responseData: { message } }\n }\n })\n .catch((error: Error) => {\n logger.error(`Error in ${object.name} findOne controller`, { meta: error })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error.message } }\n })\n },\n\n async findPredefinedItem(req: Request, res: Response, next: NextFunction, object: AppObject, params: Record<string, any> = {}): Promise<ControllerResult<any>> {\n const predefinedName = req.params.name\n\n if (!predefinedName || typeof predefinedName !== 'string') {\n const message = 'Object predefined name is not correct!'\n logger.error(`Error in ${object.name} findPredefinedItem controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n params.withTableParts = true\n\n let include = commonService.prepareIncludes(object.model, params)\n\n return await object.model\n .findOne({ where: { predefinedName }, include })\n .then((existObject: Record<string, any>) => {\n if (existObject) {\n return { status: StatusCodes.OK, responseData: existObject }\n } else {\n const message = `${object.name} with predefinedName ${predefinedName} is not found`\n logger.error(`Error in ${object.name} findPredefinedItem controller`, { meta: message })\n return { status: StatusCodes.NOT_FOUND, responseData: { message } }\n }\n })\n .catch((error) => {\n logger.error(`Error in ${object.name} findPredefinedItem controller`, { meta: error })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error.message } }\n })\n },\n\n async createItem(\n req: Request,\n res: Response,\n next: NextFunction,\n object: AppObject,\n params: Record<string, any> = {},\n afterCreate: Function | undefined = undefined\n ): Promise<ControllerResult<any>> {\n const objectData = params?.objectData ? params.objectData : { ...req.body }\n\n if (!objectData.id) {\n objectData.id = uuidv4()\n }\n\n delete objectData.presentation\n\n const include = prepareObjectIncludes(object.model, objectData)\n\n const t = params.transaction ? params.transaction : await object.model.sequelize.transaction()\n\n try {\n if (object.type === 'document') {\n await documentService.setNumber(object, objectData, t)\n }\n\n const newItem = await object.model.create(objectData, { include, transaction: t })\n\n if (!newItem) {\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: 'Object is not created' } }\n }\n\n t.afterCommit(() => {\n if (object.configurationData === true) {\n const configParams: Record<string, any> = { objectId: newItem.id, event: 'create', newValue: newItem }\n\n setAdditionalConfigParams(object, objectData, configParams)\n\n seederService.updateInitialData(object.model, object.path, configParams)\n } else {\n if (Object.prototype.hasOwnProperty.call(object.model.rawAttributes, 'predefinedName') && object.type === 'catalog') {\n seederService.updatePredefinedInitialData(object)\n }\n }\n\n objectVersioning.onChangeHandler(object.model, newItem.id, 'create', req.user?.id)\n })\n\n if (afterCreate && typeof afterCreate === 'function') {\n await afterCreate(req, res, newItem, t)\n }\n\n if (!params.transaction) {\n await t.commit()\n }\n\n return { status: StatusCodes.OK, responseData: newItem }\n } catch (error) {\n if (!params.transaction) {\n await t.rollback()\n }\n\n logger.error(`Error in ${object.name} createItem controller`, { meta: `${object.name} is not created. ${error}` })\n\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error?.original?.message || error?.message } }\n }\n },\n\n async updateItem(\n req: Request,\n res: Response,\n next: NextFunction,\n object: AppObject,\n params: Record<string, any> = {},\n afterUpdate: Function | undefined = undefined\n ): Promise<ControllerResult<any>> {\n let message = ''\n\n const objId = req.params.id\n\n if (!objId || typeof objId !== 'string' || objId.length !== 36) {\n message = 'Object id is not correct!'\n logger.error(`Error in ${object.name} updateItem controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n const objectData = params.objectData ? params.objectData : { ...req.body }\n\n delete objectData.presentation\n\n const t = params.transaction ? params.transaction : await object.model.sequelize.transaction()\n\n let existItem = await object.model.findByPk(objId, { transaction: t })\n\n if (!existItem) {\n if (!params.transaction) {\n await t.rollback()\n }\n\n message = `${object.name} with uuid ${objId} not found`\n logger.error(`Error in ${object.name} updateItem controller`, { meta: message })\n return { status: StatusCodes.NOT_FOUND, responseData: { message } }\n }\n\n const beforeItem: Record<string, any> = JSON.parse(JSON.stringify(existItem))\n\n for (const tablePart in object.tables) {\n const tableRows: Record<string, any>[] = await object.tables[tablePart].model.findAll({ where: { parentId: existItem.id } })\n beforeItem[tablePart] = JSON.parse(JSON.stringify(tableRows))\n }\n\n try {\n if (!params.noVersionCheck) {\n if (!objectData.updatedAt) {\n message = 'The data version not defined'\n logger.error(`Error in ${object.name} updateItem controller`, { meta: message })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message } }\n }\n\n const updatedAt = new Date(objectData.updatedAt)\n\n if (existItem.updatedAt > updatedAt) {\n message = 'The data version is less than the existing one in the database'\n logger.error(`Error in ${object.name} updateItem controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n }\n\n const updatedItem = await existItem.update(objectData, { transaction: t })\n\n if (!updatedItem) {\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: 'Item is not updated' } }\n }\n\n const include = prepareObjectIncludes(object.model, objectData)\n\n if (include.length > 0) {\n const fkValue = existItem.id\n\n for (const includeTable of include) {\n if (Object.prototype.hasOwnProperty.call(objectData, includeTable.as)) {\n let fkField = 'parentId'\n\n if (includeTable.fkField) {\n fkField = includeTable.fkField\n }\n await includeTable.model.destroy({ where: { [fkField]: fkValue }, transaction: t })\n\n const tableRows: Record<string, any>[] = []\n\n for (const tableRow of objectData[includeTable.as]) {\n const newRow = { ...tableRow }\n if (!includeTable.fkField) {\n newRow.parentId = fkValue\n }\n tableRows.push(newRow)\n }\n\n await includeTable.model.bulkCreate(tableRows, { transaction: t })\n }\n }\n }\n\n if (afterUpdate && typeof afterUpdate === 'function') {\n await afterUpdate(req, res, updatedItem, beforeItem, t)\n }\n\n t.afterCommit(() => {\n if (object.configurationData === true) {\n const configParams: Record<string, any> = { objectId: updatedItem.id, event: 'update', oldValue: beforeItem, newValue: updatedItem }\n\n setAdditionalConfigParams(object, objectData, configParams)\n\n seederService.updateInitialData(object.model, object.path, configParams)\n } else {\n if (Object.prototype.hasOwnProperty.call(object.model.rawAttributes, 'predefinedName') && object.type === 'catalog') {\n seederService.updatePredefinedInitialData(object)\n }\n }\n\n objectVersioning.onChangeHandler(object.model, objId, 'update', req.user?.id)\n })\n\n if (!params.transaction) {\n await t.commit()\n }\n\n return { status: StatusCodes.OK, responseData: updatedItem }\n } catch (error) {\n if (!params.transaction) {\n await t.rollback()\n }\n logger.error(`Error in ${object.name} updateItem controller`, { meta: error })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error?.original?.message || error?.message } }\n }\n },\n\n async confirmItem(req: Request, res: Response, next: NextFunction, object: AppObject, params: Record<string, any> = {}): Promise<ControllerResult<any>> {\n const recorderId = req.body.id\n const isConfirmed = req.body.isConfirmed\n const recorderType = object.name\n const recordsSet = params.recordsSet || {}\n\n const t = params.transaction ? params.transaction : await object.model.sequelize.transaction()\n\n try {\n for (const key of Object.keys(recordsSet)) {\n const registerObject = req.objects[key]\n\n if (registerObject && object.model.associations[key]) {\n let recordsBefore = await registerObject.model.findAll({ where: { recorderId, recorderType } })\n\n recordsBefore = JSON.parse(JSON.stringify(recordsBefore))\n\n await registerObject.model.destroy({ where: { recorderId, recorderType }, transaction: t })\n\n for (const record of recordsSet[key]) {\n await registerObject.model.create(record, { transaction: t })\n }\n\n await registerService.updateTotals(registerObject, { objects: req.objects, recordsBefore, recordsAfter: recordsSet[key], recorderId, recorderType, transaction: t })\n }\n }\n\n if (isConfirmed === false) {\n await object.model.update({ isConfirmed: true, markedToDelete: false }, { where: { id: req.body.id }, transaction: t })\n\n t.afterCommit(() => {\n objectVersioning.onChangeHandler(object.model, req.body.id, 'confirm', req.user?.id)\n })\n }\n\n if (!params.transaction) {\n await t.commit()\n }\n\n return { status: StatusCodes.OK, responseData: { message: 'OK' } }\n } catch (error) {\n if (!params.transaction) {\n await t.rollback()\n }\n\n logger.error(`Error in ${object.name} confirmItem controller`, { meta: `${object.name} is not confirmed. ${error}` })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error?.original?.message || error?.message } }\n }\n },\n\n async undoConfirmItem(req: Request, res: Response, next: NextFunction, object: AppObject, params: Record<string, any> = {}) {\n const recorderId = req.body.id\n const recorderType = object.name\n\n const t = params.transaction ? params.transaction : await object.model.sequelize.transaction()\n\n try {\n for (const key of Object.keys(object.model.associations)) {\n if (object.model.associations[key].options._registerRecords) {\n const registerObject = req.objects?.[key]\n\n if (registerObject) {\n let recordsBefore = await registerObject.model.findAll({ where: { recorderId, recorderType } })\n\n recordsBefore = JSON.parse(JSON.stringify(recordsBefore))\n\n const registerModel = registerObject.model\n await registerModel.destroy({ where: { recorderId, recorderType }, transaction: t })\n\n await registerService.updateTotals(registerObject, { objects: req.objects, recordsBefore, recordsAfter: [], recorderId, recorderType, transaction: t })\n }\n }\n }\n\n await object.model.update({ isConfirmed: false }, { where: { id: req.body.id }, transaction: t })\n\n t.afterCommit(() => {\n objectVersioning.onChangeHandler(object.model, req.body.id, 'undoConfirm', req.user?.id)\n })\n\n if (!params.transaction) {\n await t.commit()\n }\n\n return { status: StatusCodes.OK, responseData: { message: 'OK' } }\n } catch (error) {\n logger.error(`Error in ${object.name} undoConfirmItem controller`, { meta: error })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error?.original?.message || error?.message } }\n }\n },\n\n async deleteItem(\n req: Request,\n res: Response,\n next: NextFunction,\n object: AppObject,\n params: Record<string, any> = {},\n afterDelete: Function | undefined\n ): Promise<ControllerResult<any>> {\n const objId = req.params.id\n\n if (!objId || typeof objId !== 'string' || objId.length !== 36) {\n const message = 'Object id is not correct!'\n logger.error(`Error in ${object.name} deleteItem controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n const t = params.transaction ? params.transaction : await object.model.sequelize.transaction()\n\n const existItem = await object.model.findByPk(objId)\n\n if (!existItem) {\n if (!params.transaction) {\n await t.rollback()\n }\n\n const message = `${object.name} with uuid ${objId} not found`\n logger.error(`Error in ${object.name} deleteItem controller`, { meta: message })\n return { status: StatusCodes.NOT_FOUND, responseData: { message } }\n }\n\n try {\n await existItem.destroy({ where: { id: objId }, cascade: true, transaction: t })\n\n t.afterCommit(() => {\n if (object.configurationData === true) {\n seederService.updateInitialData(object.model, object.path, { objectId: existItem.id, event: 'delete', oldValue: existItem })\n } else {\n if (Object.prototype.hasOwnProperty.call(object.model.rawAttributes, 'predefinedName') && object.type === 'catalog') {\n seederService.updatePredefinedInitialData(object)\n }\n }\n })\n\n if (afterDelete && typeof afterDelete === 'function') {\n afterDelete(req, res, existItem, t)\n }\n\n if (!params.transaction) {\n await t.commit()\n }\n\n return { status: StatusCodes.OK, responseData: { message: 'OK' } }\n } catch (error) {\n if (!params.transaction) {\n await t.rollback()\n }\n\n logger.error(`Error in ${object.name} deleteItem controller`, { meta: error })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error?.original?.message || error?.message } }\n }\n },\n\n async changeItemDeletionMark(\n req: Request,\n res: Response,\n next: NextFunction,\n object: AppObject,\n params: Record<string, any> = {},\n afterUpdate: Function | undefined = undefined\n ): Promise<ControllerResult<any>> {\n const objId = req.body.id\n\n if (!objId || typeof objId !== 'string' || objId.length !== 36) {\n const message = 'Object id is not correct!'\n logger.error(`Error in ${object.name} changeDeletionMark controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n const t = params.transaction ? params.transaction : await object.model.sequelize.transaction()\n\n const existItem = await object.model.findByPk(objId)\n\n if (!existItem) {\n if (!params.transaction) {\n await t.rollback()\n }\n\n const message = `${object.name} with uuid ${objId} not found`\n logger.error(`Error in ${object.name} changeDeletionMark controller`, { meta: message })\n return { status: StatusCodes.NOT_FOUND, responseData: { message } }\n }\n\n const objectData = {\n markedToDelete: !existItem.markedToDelete,\n }\n\n try {\n const beforeItem = JSON.parse(JSON.stringify(existItem))\n\n const updatedItem = await existItem.update(objectData, { transaction: t })\n\n if (afterUpdate && typeof afterUpdate === 'function') {\n await afterUpdate(req, res, updatedItem, beforeItem, t)\n }\n\n t.afterCommit(() => {\n if (object.configurationData === true) {\n seederService.updateInitialData(object.model, object.path, {\n objectId: updatedItem.id,\n event: 'update',\n oldValue: beforeItem,\n newValue: updatedItem,\n changeDeletionMark: true,\n })\n } else {\n if (Object.prototype.hasOwnProperty.call(object.model.rawAttributes, 'predefinedName') && object.type === 'catalog') {\n seederService.updatePredefinedInitialData(object)\n }\n }\n\n objectVersioning.onChangeHandler(object.model, objId, 'update', req.user?.id)\n })\n\n if (object.type === 'document' && existItem.isConfirmed) {\n for (const key of Object.keys(object.model.associations)) {\n if (object.model.associations[key].options._registerRecords) {\n const register = object.model.associations[key].target\n await register.destroy({ where: { recorderId: objId }, transaction: t })\n }\n }\n\n await object.model.update({ isConfirmed: false }, { where: { id: objId }, transaction: t })\n }\n\n if (!params.transaction) {\n await t.commit()\n }\n\n return { status: StatusCodes.OK, responseData: updatedItem }\n } catch (error) {\n if (!params.transaction) {\n await t.rollback()\n }\n\n logger.error(`Error in ${object.name} changeDeletionMark controller`, { meta: error })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error?.original?.message || error?.message } }\n }\n },\n\n async calculateRegisterTotals(req: Request, res: Response, next: NextFunction, object: AppObject) {\n await registerService.calculateTotals(object, req.objects)\n return { status: StatusCodes.OK, responseData: { message: 'OK' } }\n },\n}\n\nfunction prepareObjectIncludes(objectModel: ModelStatic<Model<any, any>>, objectData: Record<string, any>) {\n const include: IncludeModel[] = []\n\n if (objectModel.associations) {\n for (const as in objectModel.associations) {\n if (objectModel.associations[as].isMultiAssociation) {\n if (objectModel.associations[as].options._noTablePart) {\n continue\n }\n\n if (Object.prototype.hasOwnProperty.call(objectData, as)) {\n let model = objectModel.associations[as].target\n include.push({ model, as })\n }\n }\n }\n }\n\n if (objectData.addInclude) {\n for (const addInclude of objectData.addInclude) {\n const modelIndex = include.findIndex((includeItem) => {\n return includeItem.model === addInclude.model\n })\n if (modelIndex === -1) {\n include.push({ ...addInclude })\n } else {\n include[modelIndex].fkField = addInclude.fkField\n }\n }\n }\n\n return include\n}\n\nfunction prepareSearchFields(object: AppObject): string[] {\n const searchFields: string[] = []\n\n for (const field in object.model.rawAttributes) {\n if (object.model.rawAttributes[field]._fullSearch) {\n searchFields.push(field)\n }\n }\n\n for (const field in object.model.associations) {\n if (object.model.associations[field].options._fullSearch) {\n const target = object.model.associations[field].target.rawAttributes\n if (target.name) {\n searchFields.push(`$${field}.name$`)\n } else if (target.numberStr) {\n searchFields.push(`$${field}.numberStr$`)\n }\n }\n }\n\n return searchFields\n}\n\nfunction prepareFilters(filters: Record<string, any>[], filter: Record<string, any>, includeFilter: Record<string, any>) {\n for (const filterField in filters) {\n const filterValue = filters[filterField]\n\n if (typeof filterValue === 'object') {\n const valueDef = {}\n\n for (const valueOp in filterValue) {\n if (valueOp === 'inList') {\n valueDef[Op.in] = filterValue[valueOp]\n } else if (valueOp === 'notInList') {\n valueDef[Op.notIn] = filterValue[valueOp]\n } else {\n valueDef[Op[valueOp]] = filterValue[valueOp]\n }\n }\n\n if (filterField.includes('.')) {\n const filterAttrib = filterField.split('.')\n if (includeFilter[filterAttrib[0]]) {\n includeFilter[filterAttrib[0]][filterAttrib[1]] = valueDef\n } else {\n includeFilter[filterAttrib[0]] = {\n [filterAttrib[1]]: valueDef,\n }\n }\n } else {\n filter[filterField] = valueDef\n }\n } else {\n if (filterField.includes('.')) {\n const filterAttrib = filterField.split('.')\n if (includeFilter[filterAttrib[0]]) {\n includeFilter[filterAttrib[0]][filterAttrib[1]] = filterValue\n } else {\n includeFilter[filterAttrib[0]] = {\n [filterAttrib[1]]: filterValue,\n }\n }\n } else {\n filter[filterField] = filterValue\n }\n }\n }\n}\n\nasync function initObjectModule(object: AppObject, existObject: Record<string, any>, userId: string, clientVersion: string) {\n if (object.name === 'appObjects') {\n // Init server module for appObjects\n delete existObject.serverModule\n const modulePath = `src/modules/${existObject.type}s/${existObject.name}/server.module.js`\n\n if (fs.existsSync(modulePath)) {\n existObject.serverModule = cryptoJs.AES.encrypt(fs.readFileSync(modulePath, { encoding: 'utf8', flag: 'r' }), userId).toString()\n } else {\n existObject.serverModule = null\n }\n\n if (clientVersion === '3') {\n if (existObject.moduleV3) {\n existObject.moduleV3 = cryptoJs.AES.encrypt(existObject.moduleV3, userId).toString()\n }\n } else {\n if (existObject.module) {\n existObject.module = cryptoJs.AES.encrypt(existObject.module, userId).toString()\n }\n }\n\n // Init info for appObjects\n delete existObject.info\n const infoPath = `src/modules/${existObject.type}s/${existObject.name}/object.info.md`\n if (fs.existsSync(infoPath)) {\n existObject.info = fs.readFileSync(infoPath, { encoding: 'utf8', flag: 'r' })\n } else {\n existObject.info = null\n }\n } else if (object.name === 'viewSettings') {\n const appObject: Record<string, any> | null = await sequelize.models.AppObject.findByPk(existObject.appObjectId)\n\n existObject.serverModule = null\n existObject.info = null\n\n if (clientVersion === '3') {\n if (existObject.moduleV3) {\n existObject.moduleV3 = cryptoJs.AES.encrypt(existObject.moduleV3, userId).toString()\n }\n } else {\n if (existObject.module) {\n existObject.module = cryptoJs.AES.encrypt(existObject.module, userId).toString()\n }\n }\n\n if (appObject) {\n // Init server module for viewSettings\n const modulePath = `src/modules/${appObject.type}s/${appObject.name}/views/${existObject.name}/server.module.js`\n if (fs.existsSync(modulePath)) {\n existObject.serverModule = cryptoJs.AES.encrypt(fs.readFileSync(modulePath, { encoding: 'utf8', flag: 'r' }), userId).toString()\n }\n\n // Init info for viewSettings\n const infoPath = `src/modules/${appObject.type}s/${appObject.name}/views/${existObject.name}/view.info.md`\n if (fs.existsSync(infoPath)) {\n existObject.info = fs.readFileSync(infoPath, { encoding: 'utf8', flag: 'r' })\n }\n }\n } else if (object.name === 'reportSettings') {\n // Init server module for reportSettings\n const modulePath = `src/modules/reports/${existObject.name}/server.module.js`\n if (fs.existsSync(modulePath)) {\n existObject.serverModule = cryptoJs.AES.encrypt(fs.readFileSync(modulePath, { encoding: 'utf8', flag: 'r' }), userId).toString()\n } else {\n existObject.serverModule = null\n }\n\n // Init info for reportSettings\n const infoPath = `src/modules/reports/${existObject.name}/report.info.md`\n if (fs.existsSync(infoPath)) {\n existObject.info = fs.readFileSync(infoPath, { encoding: 'utf8', flag: 'r' })\n } else {\n existObject.info = null\n }\n } else if (object.name === 'dataProcessors') {\n const modulePath = `src/modules/dataProcessors/${existObject.name}/server.module.js`\n if (fs.existsSync(modulePath)) {\n existObject.serverModule = cryptoJs.AES.encrypt(fs.readFileSync(modulePath, { encoding: 'utf8', flag: 'r' }), userId).toString()\n } else {\n existObject.serverModule = null\n }\n } else if (object.name === 'scheduledJobs') {\n // Init server module for scheduledJobs\n const modulePath = `src/modules/scheduledJobs/${existObject.name}/server.module.js`\n if (fs.existsSync(modulePath)) {\n existObject.serverModule = cryptoJs.AES.encrypt(fs.readFileSync(modulePath, { encoding: 'utf8', flag: 'r' }), userId).toString()\n } else {\n existObject.serverModule = null\n }\n\n // Init info for scheduledJobs\n const infoPath = `src/modules/scheduledJobs/${existObject.name}/job.info.md`\n if (fs.existsSync(infoPath)) {\n existObject.info = fs.readFileSync(infoPath, { encoding: 'utf8', flag: 'r' })\n } else {\n existObject.info = null\n }\n } else if (object.name === 'restApi') {\n // Init server module for restApi\n const modulePath = `src/modules/restApi/${existObject.name}/server.module.js`\n if (fs.existsSync(modulePath)) {\n existObject.serverModule = cryptoJs.AES.encrypt(fs.readFileSync(modulePath, { encoding: 'utf8', flag: 'r' }), userId).toString()\n } else {\n existObject.serverModule = null\n }\n\n // Init info for restApi\n const infoPath = `src/modules/restApi/${existObject.name}/api.info.md`\n if (fs.existsSync(infoPath)) {\n existObject.info = fs.readFileSync(infoPath, { encoding: 'utf8', flag: 'r' })\n } else {\n existObject.info = null\n }\n } else if (object.name === 'components') {\n // Init server module for workers\n const modulePath = `src/modules/components/${existObject.name}/server.module.js`\n if (fs.existsSync(modulePath)) {\n existObject.serverModule = cryptoJs.AES.encrypt(fs.readFileSync(modulePath, { encoding: 'utf8', flag: 'r' }), userId).toString()\n } else {\n existObject.serverModule = null\n }\n\n if (clientVersion === '3') {\n if (existObject.moduleV3) {\n existObject.moduleV3 = cryptoJs.AES.encrypt(existObject.moduleV3, userId).toString()\n }\n } else {\n existObject.module = existObject.module\n }\n } else if (object.name === 'workers') {\n // Init server module for workers\n const modulePath = `src/modules/workers/${existObject.name}/server.module.js`\n if (fs.existsSync(modulePath)) {\n existObject.serverModule = cryptoJs.AES.encrypt(fs.readFileSync(modulePath, { encoding: 'utf8', flag: 'r' }), userId).toString()\n } else {\n existObject.serverModule = null\n }\n\n if (clientVersion === '3') {\n if (existObject.moduleV3) {\n existObject.moduleV3 = cryptoJs.AES.encrypt(existObject.moduleV3, userId).toString()\n }\n } else {\n existObject.module = null\n }\n\n // Init info for workers\n const infoPath = `src/modules/workers/${existObject.name}/worker.info.md`\n if (fs.existsSync(infoPath)) {\n existObject.info = fs.readFileSync(infoPath, { encoding: 'utf8', flag: 'r' })\n } else {\n existObject.info = null\n }\n } else if (object.name === 'commonModules') {\n const modulePath = `src/modules/commonModules/${existObject.name}.js`\n if (fs.existsSync(modulePath)) {\n existObject.module = cryptoJs.AES.encrypt(fs.readFileSync(modulePath, { encoding: 'utf8', flag: 'r' }), userId).toString()\n } else {\n existObject.module = null\n }\n }\n}\n\nfunction prepareSorting(object: AppObject, sort: Record<string, any>, order: Array<string[]>) {\n if (Array.isArray(sort)) {\n for (const sortItem of sort) {\n if (sortItem.sortBy) {\n order.push(initSortItem(object, sortItem))\n }\n }\n } else {\n if (sort?.sortBy) {\n order.push(initSortItem(object, sort))\n }\n }\n\n //default sorting\n if (!object.withoutTimestamps) {\n order.push(['createdAt', 'DESC'])\n }\n order.push(['id', 'DESC'])\n}\n\nfunction initSortItem(object: AppObject, sortItem: Record<string, any>) {\n let sortItemArr = sortItem.sortBy.split('.')\n if (sortItemArr.length > 1) {\n const attrModel = object.model.associations[sortItemArr[0]]?.target\n\n if (attrModel?.rawAttributes?.numberStr) {\n sortItemArr[1] = 'numberStr'\n } else {\n sortItemArr[1] = 'name'\n }\n }\n if (sortItem.sortDesc === true) {\n sortItemArr.push('DESC')\n }\n\n return sortItemArr\n}\n\nfunction setAdditionalConfigParams(object: AppObject, objectData: Record<string, any>, configParams: Record<string, any>) {\n if (\n object.name === 'appObjects' ||\n object.name === 'viewSettings' ||\n object.name === 'reportSettings' ||\n object.name === 'dataProcessors' ||\n object.name === 'scheduledJobs' ||\n object.name === 'restApi' ||\n object.name === 'components' ||\n object.name === 'workers'\n ) {\n configParams.serverModule = objectData.serverModule\n }\n\n if (object.name === 'commonModules') {\n configParams.module = objectData.module\n }\n\n if (\n object.name === 'appObjects' ||\n object.name === 'viewSettings' ||\n object.name === 'reportSettings' ||\n object.name === 'scheduledJobs' ||\n object.name === 'restApi' ||\n object.name === 'workers'\n ) {\n configParams.info = objectData.info\n }\n}\n","import logger from '@/core/services/logger.service'\nimport { StatusCodes } from 'http-status-codes'\nimport fs from 'fs'\nimport CryptoJS from 'crypto-js'\nimport seederService from '@/core/services/seeder.service'\nimport { NextFunction, Request, Response } from 'express'\nimport { AppObject } from '@/src/types'\n\nexport default {\n async executeProcessing(req: Request, res: Response, next: NextFunction, object: AppObject) {\n const objectName = req.body.name\n\n if (!objectName) {\n const message = 'Object name is not correct!'\n logger.error(`Error in ${object.name} executeProcessing controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n let module: any\n const modulePath = `dataProcessors/${objectName}/server.module.js`\n\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n if (fs.existsSync(fullPath)) {\n const path = __non_webpack_require__.resolve(fullPath)\n if (__non_webpack_require__.cache[path]) {\n delete __non_webpack_require__.cache[path]\n }\n module = __non_webpack_require__(fullPath)\n }\n\n if (!module) {\n const message = 'Data processor module is empty!'\n logger.error(`Error in ${object.name} executeProcessing controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n if (!module?.executeProcessing || typeof module?.executeProcessing !== 'function') {\n const message = 'Data processor run function is not exist!'\n logger.error(`Error in ${object.name} executeProcessing controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n try {\n const result = await module.executeProcessing(req, res, next, object)\n\n return { status: StatusCodes.OK, responseData: { executionComplited: true, result } }\n } catch (error) {\n logger.error(`Error in ${object.name} executeProcessing controller`, { meta: error })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error?.original?.message || error?.message } }\n }\n },\n\n async exportProcessor(req: Request, res: Response, next: NextFunction, object: AppObject) {\n const objId = req.params.id\n\n if (!objId || typeof objId !== 'string' || objId.length !== 36) {\n const message = 'Object id is not correct!'\n logger.error(`Error in ${object.name} findItem controller`, { meta: message })\n return res.status(StatusCodes.BAD_REQUEST).send({ message })\n }\n\n return await object.model\n .findByPk(objId)\n .then((existObject: Record<string, any>) => {\n if (existObject) {\n const exportedObject = JSON.parse(JSON.stringify(existObject))\n\n let module: any\n const modulePath = `dataProcessors/${exportedObject.name}/server.module.js`\n\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n if (fs.existsSync(fullPath)) {\n delete __non_webpack_require__.cache[__non_webpack_require__.resolve(fullPath)]\n module = __non_webpack_require__(fullPath)\n }\n\n if (module) {\n exportedObject.serverModule = fs.readFileSync(`src/modules/${modulePath}`, { encoding: 'utf8', flag: 'r' })\n } else {\n exportedObject.serverModule = ''\n }\n\n const encrypted = CryptoJS.AES.encrypt(JSON.stringify(exportedObject), process.env.CRYPTO_SECRET_KEY || '').toString()\n const tempFilePath = `/tmp/${exportedObject.id}.sdp`\n fs.writeFileSync(tempFilePath, encrypted)\n\n res.status(StatusCodes.OK).download(tempFilePath, `${exportedObject.name}.sdp`, (err) => {\n if (err) {\n logger.error(`Error in ${object.name} exportProcessor controller`, { meta: err })\n return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ message: err.message })\n }\n\n fs.unlinkSync(tempFilePath)\n })\n } else {\n const message = `${object.name} with id ${objId} not found`\n logger.error(`Error in ${object.name} exportProcessor controller`, { meta: message })\n return res.status(StatusCodes.NOT_FOUND).send({ message })\n }\n })\n .catch((error: Error) => {\n logger.error(`Error in ${object.name} exportProcessor controller`, { meta: error })\n return res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error.message })\n })\n },\n\n async importProcessor(req: Request, res: Response, next: NextFunction, object: AppObject) {\n let { data } = req.body\n data = JSON.parse(data || '{}')\n\n if (!req.files || !data) {\n const message = 'No file uploaded!'\n logger.error(`Error in ${object.name} importProcessor controller`, { meta: message })\n return res.status(StatusCodes.BAD_REQUEST).send({ message })\n }\n\n try {\n for (let file of req.files as Record<string, any>[]) {\n const tempFilePath = file.path\n const encryptedData = fs.readFileSync(tempFilePath, { encoding: 'utf8', flag: 'r' })\n const bytes = CryptoJS.AES.decrypt(encryptedData, process.env.CRYPTO_SECRET_KEY || '')\n const decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8))\n\n fs.unlinkSync(tempFilePath)\n\n let existObject = await object.model.findByPk(data.id)\n\n const configParams: Record<string, any> = { objectId: data.id, serverModule: decryptedData.serverModule }\n let newObject: Record<string, any>\n if (!existObject) {\n newObject = await object.model.create({ id: data.id, name: decryptedData.name, title: decryptedData.title, lang: decryptedData.lang })\n configParams.event = 'create'\n configParams.newValue = newObject\n } else {\n newObject = await existObject.update({ name: decryptedData.name, title: decryptedData.title, lang: decryptedData.lang }, { where: { id: data.id } })\n configParams.event = 'update'\n configParams.oldValue = existObject\n configParams.newValue = newObject\n }\n\n await seederService.updateInitialData(object.model, object.path, configParams)\n\n return res.status(StatusCodes.OK).send({ message: 'OK' })\n }\n } catch (error) {\n logger.error(`Error in ${object.name} importProcessor controller`, { meta: error })\n return res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error.message })\n }\n },\n}\n","import sequelize from '@/database/dbConnection'\nimport moment from 'moment'\nimport logger from '@/core/services/logger.service'\nimport { ModelStatic, Model, Transaction } from 'sequelize'\nimport { AppObject } from '@/src/types'\n\nexport default {\n async setNumber(object: AppObject, objectData: Record<string, any>, t: Transaction) {\n if (objectData.noSetPrefix && objectData.noSetPrefix === true) {\n return\n }\n\n if (!objectData.prefix) {\n objectData.prefix = 'AA'\n } else {\n if (objectData.prefix.id) {\n objectData.prefix = await sequelize.models.DocumentPrefix.findByPk(objectData.prefix.id)\n }\n }\n\n initDocumentNumberPeriod(objectData)\n\n const prefix = objectData.prefix?.id ? objectData.prefix.name : objectData.prefix\n const period = objectData.numberPeriod ? objectData.numberPeriod : null\n\n let nextNumber = 1\n\n try {\n let numerator: Record<string, any> | null = await sequelize.models.Numerator.findOne({\n where: {\n tableName: object.path,\n prefix,\n period,\n },\n lock: Transaction.LOCK.UPDATE,\n transaction: t,\n })\n\n if (!numerator) {\n let filter: Record<string, any> = {}\n\n filter.prefixId = null\n\n if (objectData.prefix.id) {\n filter.prefixId = objectData.prefix.id\n } else {\n filter.prefixId = null\n }\n\n if ('numberPeriod' in objectData) {\n filter.numberPeriod = period\n }\n\n const maxNumberRow = await object.model.findOne({\n where: filter,\n order: [['number', 'DESC']],\n transaction: t,\n })\n\n if (maxNumberRow) {\n nextNumber = parseFloat(maxNumberRow.number) + 1\n }\n\n numerator = await sequelize.models.Numerator.create(\n {\n tableName: object.path,\n prefix,\n period,\n number: nextNumber,\n },\n { transaction: t }\n )\n } else {\n numerator.number++\n await numerator.save({ transaction: t })\n }\n\n nextNumber = numerator.number\n } catch (error) {\n logger.error(`Error in ${object.name} createItem controller`, { meta: error })\n }\n\n objectData.number = nextNumber\n\n initDocumentNumberStr(objectData)\n },\n\n async nextNumber(object: ModelStatic<Model<any, any>>, prefix: string, numberPeriod = undefined, t: Transaction) {\n let nextNumber = 1\n\n let transaction: Transaction | undefined\n let externalTransaction = false\n\n if (t) {\n transaction = t\n externalTransaction = true\n } else {\n transaction = await object.sequelize?.transaction()\n }\n\n try {\n const tableName = object.getTableName()\n\n let numerator: Record<string, any> | null = await sequelize.models.Numerator.findOne({ where: { tableName, prefix }, lock: Transaction.LOCK.UPDATE, transaction })\n\n if (!numerator) {\n const maxNumberRow: Record<string, any> | null = await object.findOne({ where: { prefix }, order: [['number', 'DESC']], transaction })\n\n if (maxNumberRow) {\n nextNumber = maxNumberRow.number + 1\n }\n\n numerator = await sequelize.models.Numerator.create({ tableName, prefix, number: nextNumber }, { transaction })\n } else {\n numerator.number++\n await numerator.save({ transaction })\n }\n\n if (externalTransaction !== true && transaction) {\n await transaction.commit()\n }\n\n nextNumber = numerator.number\n } catch (error) {\n if (externalTransaction !== true && transaction) {\n await transaction.rollback()\n }\n logger.error(`Error in ${object.options.name?.plural} createItem controller`, { meta: error })\n }\n\n return nextNumber\n },\n}\n\nfunction initDocumentNumberPeriod(objectData: Record<string, any>) {\n if ('numberPeriod' in objectData) {\n if (objectData.prefix.id) {\n if (objectData.prefix.periodicity === 'year') {\n objectData.numberPeriod = moment(objectData.date).startOf('year').toDate()\n } else if (objectData.prefix.periodicity === 'quarter') {\n objectData.numberPeriod = moment(objectData.date).startOf('quarter').toDate()\n } else if (objectData.prefix.periodicity === 'month') {\n objectData.numberPeriod = moment(objectData.date).startOf('month').toDate()\n } else if (objectData.prefix.periodicity === 'day') {\n objectData.numberPeriod = objectData.date.startOf('day').toDate()\n } else {\n objectData.numberPeriod = null\n }\n }\n }\n}\n\nfunction initDocumentNumberStr(objectData: Record<string, any>) {\n if (objectData.prefix?.template && objectData.prefix?.template != '') {\n const trimedTemplate = objectData.prefix.template.trim()\n const modifiedString = trimedTemplate.replace(/\\[([^\\]]+)\\]/g, (match, key) => {\n if (key === 'Number') {\n return objectData.number.toString().padStart(6, '0')\n } else if (key === 'MonthDay') {\n return moment(objectData.date).format('DD')\n } else if (key === 'MonthNumber') {\n return moment(objectData.date).format('MM')\n } else if (key === 'QuarterNumber') {\n return moment(objectData.date).quarter().toString().padStart(2, '0')\n } else if (key === 'YearTwoDigits') {\n return moment(objectData.date).format('YY')\n } else if (key === 'YearFourDigits') {\n return moment(objectData.date).format('YYYY')\n } else if (key === 'Prefix') {\n return objectData.prefix.name\n } else if (key === 'Organization') {\n return objectData.organization?.code ? objectData.organization.code : match\n } else if (key === 'CounterpartyCode') {\n return objectData.counterparty?.code ? objectData.counterparty.code : match\n } else if (key === 'StoreCode') {\n return objectData.warehouse?.code ? objectData.warehouse.code : match\n } else {\n return match\n }\n })\n objectData.numberStr = modifiedString\n } else {\n objectData.numberStr = (objectData.prefix?.name ? objectData.prefix?.name : objectData.prefix) + '-' + objectData.number.toString().padStart(6, '0')\n }\n}\n","import EventEmitter from 'events'\n\nimport { Request, Application } from 'express'\n\nexport default {\n sendMessage(req: Request, message: string) {\n req.app.get('eventEmitter').emit('processing', { message })\n },\n\n sendData(req: Request, data: Record<string, any>) {\n req.app.get('eventEmitter').emit('processing', data)\n },\n\n init(app: Application) {\n const eventEmitter = new EventEmitter()\n app.set('eventEmitter', eventEmitter)\n\n app.get('/client_events', (req, res) => {\n res.setHeader('Content-Type', 'text/event-stream')\n res.setHeader('Cache-Control', 'no-cache')\n res.setHeader('Connection', 'keep-alive')\n res.setHeader('Access-Control-Allow-Credentials', 'true')\n\n res.flushHeaders()\n\n const sendEvent = (data: Record<string, any>) => {\n res.write(`data: ${JSON.stringify(data)}\\n\\n`)\n res.flush()\n }\n\n eventEmitter.on('processing', (data) => {\n sendEvent(data)\n })\n\n req.on('close', () => {\n res.end()\n })\n })\n },\n}\n","import { QueryTypes } from 'sequelize'\nimport sequelize from '@/database/dbConnection'\nimport fs from 'fs'\n\ninterface EventSubscription {\n name: string\n execSide: string\n objectType: string\n event: string\n serviceFunctionPath: string\n serviceFunction?: Function\n objects: string[]\n}\n\nexport default {\n async initSubscriptions(side: string) {\n const queryText = `\n SELECT\n event_subscriptions.id AS \"id\",\n event_subscriptions.name AS \"name\",\n event_subscriptions.\"execSide\" AS \"execSide\",\n event_subscriptions.\"objectType\" AS \"objectType\",\n event_subscriptions.event AS \"event\",\n event_subscriptions.\"serviceFunction\" AS \"serviceFunctionPath\",\n subscription_objects.\"objectId\" AS \"objectId\"\n FROM \n event_subscriptions\n LEFT JOIN \n event_subscriptions_event_objects as \"subscription_objects\"\n ON \n subscription_objects.\"parentId\" = event_subscriptions.id \n WHERE\n event_subscriptions.\"markedToDelete\" = false\n AND event_subscriptions.\"execSide\" = '${side}'`\n\n try {\n const eventSubscriptionsRaw: any[] = await sequelize.query(queryText, { type: QueryTypes.SELECT })\n\n const eventSubscriptions: EventSubscription[] = eventSubscriptionsRaw.reduce<any[]>((acc, row) => {\n let findIndex = acc.findIndex((el) => el.name === row.name)\n if (findIndex === -1) {\n const arrayLength = acc.push({\n name: row.name,\n execSide: row.execSide,\n objectType: row.objectType,\n event: row.event,\n serviceFunctionPath: row.serviceFunctionPath,\n objects: [],\n })\n findIndex = arrayLength - 1\n }\n\n if (findIndex > -1 && row.objectId) {\n acc[findIndex].objects.push(row.objectId)\n }\n\n return acc\n }, [])\n\n if (side === 'server') {\n for (const eventSubscription of eventSubscriptions) {\n if (eventSubscription.serviceFunctionPath) {\n const functionParts = eventSubscription.serviceFunctionPath.split('.')\n if (functionParts.length !== 2) {\n eventSubscription.serviceFunction = undefined\n continue\n }\n\n const commonModuleName = functionParts[0]\n const functionName = functionParts[1]\n\n const fullPath = `${process.cwd()}/src/modules/commonModules/${commonModuleName}.js`\n let commonModule: any\n if (fs.existsSync(fullPath)) {\n commonModule = __non_webpack_require__(fullPath)\n\n if (commonModule?.[functionName]) {\n eventSubscription.serviceFunction = commonModule[functionName]\n }\n }\n }\n }\n }\n\n return eventSubscriptions\n } catch (error) {\n console.error(error)\n return []\n }\n },\n\n getSubscription(subscriptions: EventSubscription[], event: string, objectType: string, objectId: string): EventSubscription | undefined {\n return subscriptions.find((el) => {\n if (el.event === event && el.objectType === objectType) {\n return el.objects.length === 0 || el.objects.includes(objectId)\n }\n\n return false\n })\n },\n}\n","import sequelize from '@/database/dbConnection'\nimport { QueryTypes } from 'sequelize'\n\nimport { LicenseData } from '@/src/types'\n\nexport default {\n /**\n * Get license information\n * @param sessionID - Session ID\n * @returns License data\n */\n async getLicense(sessionID: string): Promise<LicenseData> {\n const licNumber = process.env.LIC_NUMBER\n const licCount = process.env.LIC_COUNT\n\n const licenseData: LicenseData = { active: false, number: 'none' }\n\n if (!licNumber || !licCount) {\n return licenseData\n }\n\n const queryText =\n 'SELECT \\\n COUNT(id) as auth_users \\\n FROM \\\n session \\\n WHERE \\\n sid != :sessionID \\\n AND \"licNumber\" IS NOT NULL'\n\n const queryResult: Record<string, any>[] = await sequelize.query(queryText, {\n type: QueryTypes.SELECT,\n replacements: { sessionID },\n })\n\n let usersCount = 0\n\n if (queryResult.length > 0) {\n usersCount = queryResult[0].auth_users\n }\n\n if (usersCount >= Number(licCount)) {\n licenseData.number = null\n } else {\n licenseData.active = true\n licenseData.number = licNumber\n }\n\n return licenseData\n },\n}\n","import winston, { Logger, format, transports } from 'winston'\n\n// Winston needs to be told about color coding, but it only takes effect on loggers where the format parameter has a colorize called\nwinston.addColors({\n error: 'bold red',\n warn: 'yellow',\n info: 'green',\n verbose: 'dim white',\n debug: 'gray',\n silly: 'magenta',\n})\n\n// The filepath is from the root of the project since that's where this file is executed within app.js\nconst logger: Logger = winston.createLogger({\n level: 'info',\n format: format.combine(\n format.colorize(),\n format.timestamp({\n format: 'YYYY-MM-DD HH:mm:ss',\n }),\n format.prettyPrint(),\n format.printf((info: Record<string, any>) => {\n return `${info.timestamp}${info.context ? ` [${info.context}]` : ''}${info.level ? ` ${info.level}` : ''}: ${info.message ? info.message : ''} ${\n info.meta ? (info.meta?.stack ? `${info.meta.original?.message ? info.meta.original?.message : ''} ${info.meta.stack}` : info.meta) : ''\n } ${info.stack ? `\\n${info.stack}` : ''}`\n })\n ),\n transports: [\n new transports.File({\n level: 'error',\n filename: 'logs/common/error.log',\n format: winston.format.uncolorize(),\n }),\n new transports.File({\n filename: 'logs/common/combined.log',\n format: winston.format.uncolorize(),\n }),\n\n new transports.Console(),\n ],\n\n exceptionHandlers: [new transports.File({ filename: 'logs/common/exceptions.log' })],\n})\n\nexport default logger\n","import { StatusCodes } from 'http-status-codes'\nimport path from 'path'\nimport moment from 'moment'\nimport fs from 'fs'\nimport { promises as fsp } from 'fs'\nimport seederService from '@/core/services/seeder.service'\nimport logger from '@/core/services/logger.service'\nimport commonService from '@/core/services/common.service'\nimport { NextFunction, Request, Response } from 'express'\nimport { AppObject, AppObjectField, DBAppObject } from '@/src/types'\nimport defineObjects from '@/core/objects/index'\nimport multiTypeService from '@/core/services/multiType.service'\n\ninterface Field {\n id: string\n dbName: string\n type: string\n isTablePart?: boolean\n virtual?: boolean\n index?: boolean\n primaryKey?: boolean\n unique?: boolean\n notNull?: boolean\n defaultValue?: string | number | null\n autoIncrement?: boolean\n typeOptions?: {\n length?: number\n precision?: number\n scale?: number\n }\n multiType?: boolean\n multiTypeVariant?: string\n ref?: string\n fields: Field[]\n}\n\ninterface CreateTableAction {\n action: 'createTable'\n newTable: Field\n}\n\ninterface ChangeTableAction {\n action: 'changeTable'\n oldTable: Field\n newTable: Field\n}\n\ninterface DropTableAction {\n action: 'dropTable'\n oldTable: Field\n}\n\ntype TablePartAction = CreateTableAction | ChangeTableAction | DropTableAction\n\ninterface TablePart {\n id: string\n dbName: string\n fields: Field[]\n}\n\ninterface MigrationAction {\n action: 'addField' | 'dropField' | 'renameField' | 'changeField' | 'addIndex' | 'removeIndex'\n fieldName?: string\n oldName?: string\n newName?: string\n field?: Field\n oldField?: Field\n newField?: Field\n}\n\nconst migrationFolder = 'src/database/migrations'\nlet enums: Record<string, string[]> = {}\nlet addConstraintsObjectsArray: any[] = []\nlet delConstraintsObjectsArray: any[] = []\n\nexport default {\n async executeMigrationsAtServer() {\n const objects = await defineObjects()\n\n const appObjects: DBAppObject[] = await objects.appObjects.model.findAll({ where: { modified: true } })\n\n if (!appObjects || appObjects.length === 0) {\n return { status: StatusCodes.OK, responseData: { message: 'No migrations needed' } }\n }\n\n const baseDate = moment()\n\n for (const appObject of appObjects) {\n await this.executeObjectMigration(appObject, objects.appObjects, baseDate)\n }\n\n baseDate.add(1, 'seconds')\n\n for (const appObject of appObjects) {\n const acResult = await this.addFieldsForeignKeys(baseDate)\n if (acResult) {\n await syncAppObjectStructure(appObject, objects.appObjects)\n }\n }\n\n return { status: StatusCodes.OK, responseData: { message: 'Migrations executed successfully' } }\n },\n\n async executeMigrationsFromFiles() {\n const objects = await defineObjects()\n\n const modulesPath = `${process.cwd()}/src/modules`\n const objectStructFiles = findObjectStructFiles(modulesPath)\n\n const baseDate = moment()\n\n for (const filePath of objectStructFiles) {\n baseDate.add(1, 'seconds')\n const fileContent = await fsp.readFile(filePath, 'utf-8')\n const appObject = JSON.parse(fileContent)\n if (appObject.dbTableName && !appObject.modified) continue\n console.log('Migration creation for object:', appObject.name)\n await this.executeObjectMigration(appObject, objects.appObjects, baseDate, filePath)\n }\n\n baseDate.add(1, 'seconds')\n\n for (const filePath of objectStructFiles) {\n const fileContent = await fsp.readFile(filePath, 'utf-8')\n const appObject = JSON.parse(fileContent)\n if (appObject.dbTableName && !appObject.modified) continue\n const acResult = await this.addFieldsForeignKeys(baseDate)\n if (acResult) {\n await syncAppObjectStructureFiles(appObject, filePath)\n }\n }\n\n return { status: StatusCodes.OK, responseData: { message: 'Migrations were created successfully' } }\n },\n\n async executeMigrations(req: Request, res: Response, next: NextFunction, object: AppObject) {\n const appObjects: DBAppObject[] = await object.model.findAll({ where: { modified: true } })\n\n if (!appObjects || appObjects.length === 0) {\n return { status: StatusCodes.OK, responseData: { message: 'No migrations needed' } }\n }\n\n const baseDate = moment()\n\n for (const appObject of appObjects) {\n baseDate.add(1, 'seconds')\n await this.executeObjectMigration(appObject, object, baseDate)\n }\n\n baseDate.add(1, 'seconds')\n\n for (const appObject of appObjects) {\n const acResult = await this.addFieldsForeignKeys(baseDate)\n if (acResult) {\n await syncAppObjectStructure(appObject, object)\n }\n }\n\n return { status: StatusCodes.OK, responseData: { message: 'Migrations executed successfully' } }\n },\n\n async existMigrations(req: Request, res: Response, next: NextFunction, object: AppObject) {\n const appObjects: DBAppObject[] = await object.model.findAll({ where: { modified: true } })\n\n if (!appObjects || appObjects.length === 0) {\n return { status: StatusCodes.OK, responseData: false }\n } else {\n return { status: StatusCodes.OK, responseData: true }\n }\n },\n\n async executeMigration(req: Request, res: Response, next: NextFunction, object: AppObject) {\n const objectId = req.body.objectId\n\n if (!objectId || typeof objectId !== 'string' || objectId.length !== 36) {\n const message = 'Object id is not correct!'\n logger.error(`Error in ${object.name} findItem controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n const baseDate = moment()\n\n const appObject: any | null = await object.model.findByPk(objectId)\n const result = await this.executeObjectMigration(appObject, object, baseDate)\n\n return result\n ? { status: StatusCodes.OK, responseData: { message: 'OK' } }\n : { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: 'Error during migration file creation!' } }\n },\n\n async executeObjectMigration(appObject: any, object: AppObject, baseDate: moment.Moment, filePath: string = '') {\n if (!appObject) {\n throw new Error(`Object not found!`)\n }\n\n if (!appObject.fields) {\n throw new Error(`Object ${appObject.name} has incorrect fields!`)\n }\n\n if (filePath) {\n const modulesPath = path.join(process.cwd(), 'src', 'modules', 'enums')\n const indexFile = path.join(modulesPath, 'index.json')\n\n if (fs.existsSync(indexFile)) {\n const raw = fs.readFileSync(indexFile, 'utf8')\n enums = JSON.parse(raw)\n } else {\n throw new Error(`File index.json not found in ${modulesPath}`)\n }\n } else {\n enums = await commonService.initEnums()\n }\n\n const tableResult = !appObject.dbTableName\n ? await this.createTable(appObject, baseDate)\n : await this.updateTable(\n {\n id: appObject.id,\n dbName: appObject.dbTableName,\n name: appObject.path,\n dbFields: appObject.dbFields,\n fields: appObject.fields,\n },\n baseDate\n )\n\n return tableResult\n },\n\n async addFieldsForeignKeys(baseDate = moment()) {\n for (const appObject of addConstraintsObjectsArray) {\n console.log('Foreign keys creation for object:', appObject.path)\n\n const tableParts: TablePart[] = []\n await prepareFieldsStruct(appObject.fields, tableParts)\n\n const migrationHeader = getMigrationHeader()\n const migrationBottom = getMigrationBottom()\n let constraints = ''\n\n for (const field of appObject.fields) {\n if (field.type === 'object' && field.ref && !field.multiType) {\n const fkName = truncateFkName(`${appObject.path}_${field.dbName}_fkey`)\n constraints += `\n await queryInterface.addConstraint('${appObject.path}', {\n fields: ['${field.dbName}'],\n type: 'foreign key',\n name: '${fkName}',\n references: {\n table: '${this.toSnakeCase(field.ref)}',\n field: 'id',\n },\n onUpdate: 'CASCADE',\n onDelete: 'SET NULL',\n });\\n`\n }\n }\n\n if (constraints) {\n baseDate.add(1, 'seconds')\n const filename = `${baseDate.format('YYYYMMDDHHmmss')}-add-foreign-keys-${appObject.path}.js`\n const fullPath = path.join(migrationFolder, filename)\n await fsp.writeFile(fullPath, `${migrationHeader}${constraints}${migrationBottom}`)\n }\n\n for (const tablePart of tableParts) {\n const objectFields = tablePart.fields.filter((field) => field.type === 'object' && field.ref && !field.multiType)\n if (objectFields.length === 0) continue\n\n let partConstraints = ''\n for (const field of objectFields) {\n const fkName = truncateFkName(`${tablePart.dbName}_${field.dbName}_fkey`)\n partConstraints += `\n await queryInterface.addConstraint('${tablePart.dbName}', {\n fields: ['${field.dbName}'],\n type: 'foreign key',\n name: '${fkName}',\n references: {\n table: '${this.toSnakeCase(field.ref)}',\n field: 'id',\n },\n onUpdate: 'CASCADE',\n onDelete: 'SET NULL',\n });\\n`\n }\n\n baseDate.add(1, 'seconds')\n const filenamePart = `${baseDate.format('YYYYMMDDHHmmss')}-add-foreign-keys-${tablePart.dbName}.js`\n await fsp.writeFile(path.join(migrationFolder, filenamePart), `${migrationHeader}${partConstraints}${migrationBottom}`)\n }\n }\n\n addConstraintsObjectsArray = []\n\n return true\n },\n\n toSnakeCase(str: string): string {\n return str\n .replace(/([a-z0-9])([A-Z])/g, '$1_$2')\n .replace(/([A-Z])([A-Z][a-z])/g, '$1_$2')\n .toLowerCase()\n },\n\n async delFieldsForeignKeys(baseDate = moment()) {\n for (const appObject of delConstraintsObjectsArray) {\n const tableParts: TablePart[] = []\n await prepareFieldsStruct(appObject.fields, tableParts)\n\n const migrationHeader = getMigrationHeader()\n const migrationBottom = getMigrationBottom()\n let constraints = ''\n\n for (const field of appObject.fields) {\n if (field.type === 'object' && field.ref && !field.multiType) {\n const fkName = truncateFkName(`${appObject.path}_${field.dbName}_fkey`)\n constraints += `\n await queryInterface.removeConstraint('${appObject.path}', '${fkName}');\\n`\n }\n }\n\n if (constraints) {\n baseDate.add(1, 'seconds')\n const filename = `${baseDate.format('YYYYMMDDHHmmss')}-remove-foreign-keys-${appObject.path}.js`\n const fullPath = path.join(migrationFolder, filename)\n await fsp.writeFile(fullPath, `${migrationHeader}${constraints}${migrationBottom}`)\n }\n\n for (const tablePart of tableParts) {\n const objectFields = tablePart.fields.filter((field) => field.type === 'object' && field.ref && !field.multiType)\n if (objectFields.length === 0) continue\n\n let partConstraints = ''\n for (const field of objectFields) {\n const fkName = truncateFkName(`${tablePart.dbName}_${field.dbName}_fkey`)\n partConstraints += `\n await queryInterface.removeConstraint('${tablePart.dbName}', '${fkName}');\\n`\n }\n\n baseDate.add(1, 'seconds')\n const filenamePart = `${baseDate.format('YYYYMMDDHHmmss')}-remove-foreign-keys-${tablePart.dbName}.js`\n await fsp.writeFile(path.join(migrationFolder, filenamePart), `${migrationHeader}${partConstraints}${migrationBottom}`)\n }\n }\n delConstraintsObjectsArray = []\n return true\n },\n\n prepareFieldsDifs(oldFields: Field[], newFields: Field[], tableParts: TablePartAction[]): MigrationAction[] {\n const migrations: MigrationAction[] = []\n\n if (!oldFields || !newFields) {\n return []\n }\n\n for (const newField of newFields) {\n const existField = oldFields.find((el) => el.id === newField.id)\n\n if (!existField) {\n if (newField.isTablePart === true) {\n tableParts.push({ action: 'createTable', newTable: { ...newField } })\n } else {\n migrations.push({ action: 'addField', field: { ...newField } })\n if (newField.index === true) {\n migrations.push({ action: 'addIndex', field: newField })\n }\n }\n } else {\n if (newField.isTablePart === true) {\n tableParts.push({ action: 'changeTable', oldTable: { ...existField }, newTable: { ...newField } })\n } else {\n if (existField.multiType === true && existField.multiTypeVariant === 'common' && newField.multiType === false) {\n migrations.push({ action: 'dropField', field: { ...existField } })\n migrations.push({ action: 'addField', field: { ...newField } })\n if (newField.index === true) {\n migrations.push({ action: 'addIndex', field: newField })\n }\n } else if (existField.multiType === false && newField.multiType === true && newField.multiTypeVariant === 'common') {\n if (existField.index === true) {\n migrations.push({ action: 'removeIndex', field: existField })\n }\n migrations.push({ action: 'dropField', field: { ...existField } })\n migrations.push({ action: 'addField', field: { ...newField } })\n } else {\n if (newField.dbName !== existField.dbName) {\n migrations.push({ action: 'renameField', newName: newField.dbName, oldName: existField.dbName, field: existField })\n }\n\n if (changedFieldProperties(existField, newField)) {\n migrations.push({ action: 'changeField', oldField: { ...existField }, newField: { ...newField } })\n }\n }\n\n if (existField.index !== newField.index) {\n if (newField.index === true) {\n migrations.push({ action: 'addIndex', field: newField })\n } else {\n migrations.push({ action: 'removeIndex', field: newField })\n }\n }\n }\n }\n }\n\n for (const oldField of oldFields) {\n const existField = newFields.find((el) => el.id === oldField.id)\n\n if (!existField) {\n if (oldField.isTablePart === true) {\n tableParts.push({ action: 'dropTable', oldTable: { ...oldField } })\n } else {\n if (oldField.index === true) {\n migrations.push({ action: 'removeIndex', field: oldField })\n }\n\n migrations.push({ action: 'dropField', field: { ...oldField } })\n }\n }\n }\n\n return migrations\n },\n\n async createTable(appObject: AppObject, migrationDate = moment()): Promise<boolean> {\n addConstraintsObjectsArray.push(appObject)\n let filename = `${migrationDate.format('YYYYMMDDHHmmss')}-create-table-${appObject.path}.js`\n let fullPath = path.join(migrationFolder, filename)\n\n const tableParts: TablePart[] = []\n let objectsFields = await prepareFieldsStruct(appObject.fields, tableParts)\n\n const migrationHeader = getMigrationHeader()\n const migrationBottom = getMigrationBottom()\n\n let migrationFileText = `${migrationHeader}\\n await queryInterface.createTable('${appObject.path}', {${objectsFields}\\n })`\n\n let indexedFields: AppObjectField[] | Field[] = appObject.fields.filter((el) => el.index === true)\n for (const indexedField of indexedFields) {\n const indexName = `${appObject.id.substring(24)}_${indexedField.id.substring(24)}`\n\n if (indexedField.multiType && indexedField.multiTypeVariant === 'common') {\n migrationFileText += addMultiTypeIndexes(appObject.path, indexedField, indexName)\n } else {\n migrationFileText += addIndex(appObject.path, indexedField.dbName, indexName)\n }\n }\n\n migrationFileText += `${migrationBottom}`\n await fsp.writeFile(fullPath, migrationFileText)\n\n for (const tablePart of tableParts) {\n migrationDate.add(1, 'seconds')\n filename = `${migrationDate.format('YYYYMMDDHHmmss')}-create-table-part-${tablePart.dbName}.js`\n fullPath = path.join(migrationFolder, filename)\n\n objectsFields = await prepareFieldsStruct(tablePart.fields, [])\n migrationFileText = `${migrationHeader}\\n await queryInterface.createTable('${tablePart.dbName}', {${objectsFields}\\n })`\n\n indexedFields = tablePart.fields.filter((el) => el.index === true)\n for (const indexedField of indexedFields) {\n const indexName = `${tablePart.id.substring(24)}_${indexedField.id.substring(24)}`\n\n if (indexedField.multiType && indexedField.multiTypeVariant === 'common') {\n migrationFileText += addMultiTypeIndexes(tablePart.dbName, indexedField, indexName)\n } else {\n migrationFileText += addIndex(tablePart.dbName, indexedField.dbName, indexName)\n }\n }\n\n migrationFileText += `${migrationBottom}`\n await fsp.writeFile(fullPath, migrationFileText)\n }\n\n return true\n },\n\n async updateTable(tableData: Record<string, any>, migrationDate = moment()) {\n let migrationContent = ''\n\n if (tableData.name !== tableData.dbName) {\n migrationContent += `\\n await queryInterface.renameTable('${tableData.dbName}', '${tableData.name}')`\n }\n\n const tableParts: TablePartAction[] = []\n const changedData = this.prepareFieldsDifs(tableData.dbFields, tableData.fields, tableParts)\n\n if (changedData.length > 0) {\n const addContraintFields: any = []\n const delContraintFields: any = []\n for (const changedField of changedData) {\n if (changedField.action === 'addField') {\n if (changedField.field.multiType && changedField.field.multiTypeVariant === 'common') {\n migrationContent += addMultiTypeColumnContent(tableData.name, changedField.field)\n } else {\n migrationContent += await addColumnContent(tableData.name, changedField.field!.dbName, changedField.field!)\n if (changedField.field.type === 'object' && !changedField.field.multiType) {\n addContraintFields.push(changedField.field)\n }\n }\n }\n\n if (changedField.action === 'dropField') {\n if (changedField.field.multiType && changedField.field.multiTypeVariant === 'common') {\n migrationContent += removeMultiTypeColumnContent(tableData.name, changedField.field)\n } else {\n migrationContent += removeColumnContent(tableData.name, changedField.field!.dbName)\n if (changedField.field.type === 'object' && !changedField.field.multiType) {\n delContraintFields.push(changedField.field)\n }\n if (changedField.field.type === 'object' && changedField.field.multiType) {\n migrationContent += removeColumnContent(tableData.name, `${changedField.field!.dbName.slice(0, -2)}Type`)\n }\n }\n }\n\n if (changedField.action === 'renameField') {\n if (changedField.field.multiType && changedField.field.multiTypeVariant === 'common') {\n migrationContent += renameMultiTypeColumnContent(tableData.name, changedField)\n } else {\n migrationContent += renameColumnContent(tableData.name, changedField.oldName!, changedField.newName!)\n }\n }\n\n if (changedField.action === 'changeField') {\n if (changedField.newField.multiType && changedField.oldField.multiType) {\n migrationContent += changeMultiTypeColumn(tableData.name, changedField.oldField, changedField.newField)\n } else {\n migrationContent += await changeColumn(tableData, changedField.oldField!, changedField.newField!)\n }\n\n if (changedField.oldField.type === 'object' && changedField.newField.type !== 'object' && !changedField.oldField.multiType) {\n delContraintFields.push(changedField.oldField)\n }\n if (\n changedField.oldField.type === 'object' &&\n changedField.newField.type === 'object' &&\n changedField.oldField.ref !== changedField.newField.ref &&\n !changedField.oldField.multiType &&\n !changedField.newField.multiType\n ) {\n delContraintFields.push(changedField.oldField)\n addContraintFields.push(changedField.newField)\n }\n if (changedField.oldField.type !== 'object' && changedField.newField.type === 'object' && !changedField.newField.multiType) {\n addContraintFields.push(changedField.newField)\n }\n if (changedField.oldField.type === 'object' && !changedField.oldField.multiType && changedField.newField.type === 'object' && changedField.newField.multiType) {\n delContraintFields.push(changedField.oldField)\n }\n if (changedField.oldField.type === 'object' && changedField.oldField.multiType && changedField.newField.type === 'object' && !changedField.newField.multiType) {\n migrationContent += removeColumnContent(tableData.name, `${changedField.oldField!.dbName.slice(0, -2)}Type`)\n addContraintFields.push(changedField.newField)\n }\n }\n\n if (changedField.action === 'addIndex') {\n const indexName = `${tableData.id.substring(24)}_${changedField.field.id.substring(24)}`\n\n if (changedField.field.multiType && changedField.field.multiTypeVariant === 'common') {\n migrationContent += addMultiTypeIndexes(tableData.name, changedField.field, indexName)\n } else {\n migrationContent += addIndex(tableData.name, changedField.field.dbName!, indexName)\n }\n }\n\n if (changedField.action === 'removeIndex') {\n if (changedField.field.multiType && changedField.field.multiTypeVariant === 'common') {\n migrationContent += removeMultiTypeIndexes(tableData.name, changedField.field)\n } else {\n migrationContent += removeIndex(tableData.name, changedField.field.dbName!)\n }\n }\n }\n if (addContraintFields.length > 0) {\n addConstraintsObjectsArray.push({\n path: tableData.name,\n fields: addContraintFields,\n })\n }\n if (delContraintFields.length > 0) {\n delConstraintsObjectsArray.push({\n path: tableData.name,\n fields: delContraintFields,\n })\n await this.delFieldsForeignKeys(migrationDate.clone().subtract(2, 'seconds'))\n }\n }\n\n if (migrationContent !== '') {\n let filename = `${migrationDate.format('YYYYMMDDHHmmss')}-change-table-${tableData.isTablePart ? 'part-' : ''}${tableData.dbName}.js`\n let fullPath = path.join(migrationFolder, filename)\n\n const migrationHeader = getMigrationHeader()\n const migrationBottom = getMigrationBottom()\n let migrationFileText = `${migrationHeader}${migrationContent}${migrationBottom}`\n\n await fsp.writeFile(fullPath, migrationFileText)\n }\n\n for (const tablePart of tableParts) {\n if (tablePart.action === 'createTable') {\n migrationDate.add(1, 'seconds')\n let filename = `${migrationDate.format('YYYYMMDDHHmmss')}-create-table-part-${tablePart.newTable.dbName}.js`\n let fullPath = path.join(migrationFolder, filename)\n\n const tableFields = await prepareFieldsStruct(tablePart.newTable.fields, [])\n const migrationHeader = getMigrationHeader()\n const migrationBottom = getMigrationBottom()\n let migrationFileText = `${migrationHeader}\\n await queryInterface.createTable('${tablePart.newTable.dbName}', {${tableFields}\\n })${migrationBottom}`\n\n const indexedFields = tablePart.newTable.fields.filter((el) => el.index === true)\n for (const indexedField of indexedFields) {\n const indexName = `${tablePart.newTable.id.substring(24)}_${indexedField.id.substring(24)}`\n\n if (indexedField.multiType && indexedField.multiTypeVariant === 'common') {\n migrationFileText += addMultiTypeIndexes(tablePart.newTable.dbName, indexedField, indexName)\n } else {\n migrationFileText += addIndex(tablePart.newTable.dbName, indexedField.dbName, indexName)\n }\n }\n\n migrationFileText += `${migrationBottom}`\n\n await fsp.writeFile(fullPath, migrationFileText)\n\n addConstraintsObjectsArray.push({\n path: tableData.name,\n fields: [tablePart.newTable],\n })\n }\n\n if (tablePart.action === 'changeTable') {\n await this.updateTable(\n {\n id: tablePart.oldTable.id,\n dbName: tablePart.oldTable.dbName,\n name: tablePart.newTable.dbName,\n dbFields: tablePart.oldTable.fields,\n fields: tablePart.newTable.fields,\n isTablePart: true,\n },\n migrationDate.add(1, 'seconds')\n )\n }\n\n if (tablePart.action === 'dropTable') {\n delConstraintsObjectsArray.push({\n path: tableData.name,\n fields: [tablePart.oldTable],\n })\n await this.delFieldsForeignKeys(migrationDate.clone().subtract(2, 'seconds'))\n\n migrationDate.add(1, 'seconds')\n let filename = `${migrationDate.format('YYYYMMDDHHmmss')}-drop-table-part-${tablePart.oldTable.dbName}.js`\n let fullPath = path.join(migrationFolder, filename)\n\n const migrationHeader = getMigrationHeader()\n const migrationBottom = getMigrationBottom()\n let migrationFileText = `${migrationHeader}\\n await queryInterface.dropTable('${tablePart.oldTable.dbName}')${migrationBottom}`\n\n await fsp.writeFile(fullPath, migrationFileText)\n }\n }\n\n return true\n },\n}\n\nfunction findObjectStructFiles(baseDir: string) {\n const result: string[] = []\n\n function searchDir(dir: string) {\n const files = fs.readdirSync(dir, { withFileTypes: true })\n\n for (const file of files) {\n const fullPath = path.join(dir, file.name)\n if (file.isDirectory()) {\n searchDir(fullPath)\n } else if (file.isFile() && file.name === 'object.struct.json') {\n result.push(fullPath)\n }\n }\n }\n\n searchDir(baseDir)\n return result\n}\n\nasync function prepareFieldsStruct(fields: Record<string, any>[], tableParts: Record<string, any>[]) {\n let result = ''\n for (const field of fields) {\n if (field.isTablePart === true) {\n tableParts.push({ ...field })\n continue\n }\n if (field.virtual === true) continue\n\n if (field.multiType && field.multiTypeVariant === 'common') {\n result += `${prepareMultiTypeFieldDetails(field)}`\n } else {\n result += `\\n ${field.dbName}: ${await prepareFieldDetails(field)}`\n }\n }\n\n result += `\\n createdAt: {\\n type: Sequelize.DataTypes.DATE,\\n allowNull: false,\\n },`\n result += `\\n updatedAt: {\\n type: Sequelize.DataTypes.DATE,\\n allowNull: false,\\n },`\n return result\n}\n\nasync function prepareFieldDetails(field: Record<string, any>, tableName: string = '', addMode: boolean = false) {\n let result = `{\\n `\n let fieldType = ''\n\n switch (field.type) {\n case 'json':\n fieldType = 'TEXT'\n break\n case 'object':\n fieldType = 'UUID'\n break\n default:\n fieldType = field.type.toUpperCase()\n }\n\n let typeDetails = ''\n if (field.type === 'string') {\n if (field.typeOptions?.length && field.typeOptions?.length !== 0) {\n typeDetails += `(${field.typeOptions.length})`\n }\n } else if (field.type === 'decimal') {\n if (field.typeOptions?.precision && field.typeOptions?.scale) {\n typeDetails += `(${field.typeOptions?.precision}, ${field.typeOptions?.scale})`\n }\n }\n\n result += ` type: Sequelize.DataTypes.${fieldType}${typeDetails},\\n`\n\n if (field.type === 'enum' && field.ref) {\n result += ` values: [${enums[field.ref].map((el: string) => `'${el}'`)}],\\n`\n }\n\n if (field.primaryKey === true) result += ` primaryKey: true,\\n`\n if (field.unique === true) result += ` unique: true,\\n`\n if (field.notNull === true) result += ` allowNull: false,\\n`\n\n if (field.defaultValue !== null && field.defaultValue !== undefined) {\n if (['enum', 'string', 'text'].includes(field.type)) {\n result += ` defaultValue: '${field.defaultValue}',\\n`\n } else {\n result += ` defaultValue: ${field.defaultValue},\\n`\n }\n }\n\n if (field.autoIncrement === true) result += ` autoIncrement: true,\\n`\n result += ` },`\n\n if (field.type === 'object' && field.multiType === true) {\n let columnName = field.dbName.endsWith('Id') ? field.dbName.slice(0, -2) : field.dbName\n if (addMode) {\n result += `)`\n result += `\\n await queryInterface.addColumn('${tableName}', '${columnName}Type', {\\n type: Sequelize.DataTypes.STRING,\\n`\n if (field.notNull === true) result += ` allowNull: false,\\n`\n result += ` },`\n } else {\n result += `\\n ${columnName}Type: {\\n type: Sequelize.DataTypes.STRING,\\n`\n if (field.notNull === true) result += ` allowNull: false,\\n`\n result += ` },`\n }\n }\n\n return result\n}\n\nfunction prepareMultiTypeFieldDetails(field: Record<string, any>) {\n let result = ''\n\n const dataTypeTemp = '\\n type: Sequelize.DataTypes.'\n const allowNullTemp = field.notNull === true ? ` allowNull: false,\\n` : ''\n\n result += `\\n _${field.dbName}Type: {${dataTypeTemp}STRING,\\n${allowNullTemp} },`\n\n if (field.type.includes('string')) {\n result += `\\n _${field.dbName}ST: {${dataTypeTemp}STRING(${field.typeOptions.length}),\\n },`\n }\n\n if (field.type.includes('text')) {\n result += `\\n _${field.dbName}TX: {${dataTypeTemp}TEXT,\\n },`\n }\n\n if (field.type.includes('integer')) {\n result += `\\n _${field.dbName}IN: {${dataTypeTemp}INTEGER,\\n },`\n }\n\n if (field.type.includes('decimal')) {\n result += `\\n _${field.dbName}DC: {${dataTypeTemp}DECIMAL(${field.typeOptions?.precision}, ${field.typeOptions?.scale}),\\n },`\n }\n\n if (field.type.includes('boolean')) {\n result += `\\n _${field.dbName}BL: {${dataTypeTemp}BOOLEAN,\\n },`\n }\n\n if (field.type.includes('date')) {\n result += `\\n _${field.dbName}DT: {${dataTypeTemp}DATE,\\n },`\n }\n\n const existRefs = multiTypeService.typeIncludesRef(field.type)\n\n if (existRefs) {\n result += `\\n _${field.dbName}Ref: {${dataTypeTemp}STRING(100),\\n },`\n }\n\n return result\n}\n\nfunction changedFieldProperties(oldField: Record<string, any>, newField: Record<string, any>) {\n return (\n (oldField.type !== newField.type && !((oldField.type === 'json' && newField.type === 'text') || (oldField.type === 'text' && newField.type === 'json'))) ||\n oldField.unique !== newField.unique ||\n oldField.defaultValue !== newField.defaultValue ||\n oldField.notNull !== newField.notNull ||\n oldField.primaryKey !== newField.primaryKey ||\n oldField.typeOptions?.precision !== newField.typeOptions?.precision ||\n oldField.typeOptions?.scale !== newField.typeOptions?.scale ||\n oldField.typeOptions?.length !== newField.typeOptions?.length ||\n oldField.multiType !== newField.multiType ||\n oldField.multiTypeVariant !== newField.multiTypeVariant\n )\n}\n\nfunction changeMultiTypeColumn(tableName: string, oldField: Record<string, any>, newField: Record<string, any>) {\n let result = ''\n\n const addColumnTemp = '\\n await queryInterface.addColumn('\n const dataTypeTemp = '\\n type: Sequelize.DataTypes.'\n const allowNullTemp = newField.notNull === true ? ` allowNull: false,\\n` : ''\n\n if (oldField.multiTypeVariant === newField.multiTypeVariant) {\n const typesMap = multiTypeService.typesSufixes() // { string: 'ST', text: 'TX', ... }\n const oldTypes: string[] = Array.isArray(oldField.type) ? oldField.type : oldField.type ? [oldField.type] : []\n const newTypes: string[] = Array.isArray(newField.type) ? newField.type : newField.type ? [newField.type] : []\n\n const toAdd = newTypes.filter((t) => !oldTypes.includes(t))\n const toRemove = oldTypes.filter((t) => !newTypes.includes(t))\n\n // Remove obsolete technical columns\n for (const t of toRemove) {\n const suffix = typesMap[t] || ''\n if (suffix) {\n result += `\\n await queryInterface.removeColumn('${tableName}', '_${oldField.dbName}${suffix}')`\n }\n }\n\n // If reference type was removed but existed previously - remove Ref column\n if (multiTypeService.typeIncludesRef(oldField.type) && !multiTypeService.typeIncludesRef(newField.type)) {\n result += `\\n await queryInterface.removeColumn('${tableName}', '_${oldField.dbName}Ref')`\n }\n\n // Add new technical columns\n for (const t of toAdd) {\n const suffix = typesMap[t] || ''\n if (!suffix) continue\n\n if (t === 'string') {\n const len = newField.typeOptions?.length || 255\n result += `${addColumnTemp}'${tableName}', '_${newField.dbName}${suffix}', {${dataTypeTemp}STRING(${len}),\\n${allowNullTemp} })`\n } else if (t === 'text') {\n result += `${addColumnTemp}'${tableName}', '_${newField.dbName}${suffix}', {${dataTypeTemp}TEXT,\\n${allowNullTemp} })`\n } else if (t === 'integer') {\n result += `${addColumnTemp}'${tableName}', '_${newField.dbName}${suffix}', {${dataTypeTemp}INTEGER,\\n${allowNullTemp} })`\n } else if (t === 'decimal') {\n const p = newField.typeOptions?.precision || 18\n const s = newField.typeOptions?.scale || 2\n result += `${addColumnTemp}'${tableName}', '_${newField.dbName}${suffix}', {${dataTypeTemp}DECIMAL(${p}, ${s}),\\n${allowNullTemp} })`\n } else if (t === 'boolean') {\n result += `${addColumnTemp}'${tableName}', '_${newField.dbName}${suffix}', {${dataTypeTemp}BOOLEAN,\\n${allowNullTemp} })`\n } else if (t === 'date') {\n result += `${addColumnTemp}'${tableName}', '_${newField.dbName}${suffix}', {${dataTypeTemp}DATE,\\n${allowNullTemp} })`\n } else if (multiTypeService.isRefType(t)) {\n // reference -> Ref column (string)\n result += `${addColumnTemp}'${tableName}', '_${newField.dbName}Ref', {${dataTypeTemp}STRING(100),\\n${allowNullTemp} })`\n } else {\n // fallback: add as TEXT\n result += `${addColumnTemp}'${tableName}', '_${newField.dbName}${suffix}', {${dataTypeTemp}TEXT,\\n${allowNullTemp} })`\n }\n }\n\n // If new types include references but old didn't - add Ref column\n if (!multiTypeService.typeIncludesRef(oldField.type) && multiTypeService.typeIncludesRef(newField.type)) {\n result += `${addColumnTemp}'${tableName}', '_${newField.dbName}Ref', {${dataTypeTemp}STRING(100),\\n${allowNullTemp} })`\n }\n\n return result\n } else {\n if (!oldField.multiTypeVariant && newField.multiTypeVariant === 'objects') {\n // It's the same variant\n return ''\n }\n if (newField.multiTypeVariant === 'objects') {\n // If previously had different technical columns (e.g. from 'common'), ensure they are removed\n result += removeMultiTypeColumnContent(tableName, oldField)\n\n // Then ensure Type and Id columns present\n // Add Type\n result += `${addColumnTemp}'${tableName}', '${newField.dbName}Type', {${dataTypeTemp}STRING,\\n${allowNullTemp} })`\n // Add Id (UUID)\n result += `${addColumnTemp}'${tableName}', '${newField.dbName}Id', {${dataTypeTemp}UUID,\\n${allowNullTemp} })`\n\n return result\n } else {\n result += removeColumnContent(tableName, oldField!.dbName)\n result += removeColumnContent(tableName, `${oldField!.dbName.slice(0, -2)}Type`)\n result += addMultiTypeColumnContent(tableName, newField)\n\n return result\n }\n }\n}\n\nfunction getMigrationHeader() {\n return `\\n'use strict'\\n\\n/** @type {import('sequelize-cli').Migration} */\\nmodule.exports = {\\n async up(queryInterface, Sequelize) {`\n}\n\nfunction getMigrationBottom() {\n return `\\n },\\n async down(queryInterface, Sequelize) {\\n },\\n}`\n}\n\nasync function syncAppObjectStructureFiles(appObject: any, filePath: string) {\n appObject.dbFields = appObject.fields\n appObject.dbTableName = appObject.path\n appObject.modified = false\n\n const jsonContent = JSON.stringify(appObject, null, 2)\n await fsp.writeFile(filePath, jsonContent, 'utf-8')\n}\n\nfunction truncateFkName(name: string): string {\n const MAX = 63\n if (!name) return name\n return name.length > MAX ? name.slice(name.length - MAX) : name\n}\n\nasync function syncAppObjectStructure(appObject: any, object: AppObject) {\n return await appObject.update({ dbFields: appObject.fields, dbTableName: appObject.path, modified: false }).then(async (updatedItem) => {\n return await seederService.updateInitialData(object.model, 'app_objects', {\n objectId: appObject.id,\n event: 'update',\n oldValue: appObject,\n newValue: updatedItem,\n })\n })\n}\n\nasync function addColumnContent(tableName: string, fieldName: string, fieldDetails: Record<string, any>) {\n return `\\n await queryInterface.addColumn('${tableName}', '${fieldName}', ${await prepareFieldDetails(fieldDetails, tableName, true)})`\n}\n\nfunction addMultiTypeColumnContent(tableName: string, fieldData: Record<string, any>) {\n let result = ''\n\n const addColumnTemp = '\\n await queryInterface.addColumn('\n const dataTypeTemp = '\\n type: Sequelize.DataTypes.'\n const allowNullTemp = fieldData.notNull === true ? ` allowNull: false,\\n` : ''\n\n result += `${addColumnTemp}'${tableName}', '_${fieldData.dbName}Type', {${dataTypeTemp}STRING,\\n${allowNullTemp} })`\n\n if (fieldData.type.includes('string')) {\n result += `${addColumnTemp}'${tableName}', '_${fieldData.dbName}ST', {${dataTypeTemp}STRING(${fieldData.typeOptions.length}),\\n })`\n }\n\n if (fieldData.type.includes('text')) {\n result += `${addColumnTemp}'${tableName}', '_${fieldData.dbName}TX', {${dataTypeTemp}TEXT,\\n })`\n }\n\n if (fieldData.type.includes('integer')) {\n result += `${addColumnTemp}'${tableName}', '_${fieldData.dbName}IN', {${dataTypeTemp}INTEGER,\\n })`\n }\n\n if (fieldData.type.includes('decimal')) {\n result += `${addColumnTemp}'${tableName}', '_${fieldData.dbName}DC', {${dataTypeTemp}DECIMAL(${fieldData.typeOptions?.precision}, ${fieldData.typeOptions?.scale}),\\n })`\n }\n\n if (fieldData.type.includes('boolean')) {\n result += `${addColumnTemp}'${tableName}', '_${fieldData.dbName}BL', {${dataTypeTemp}BOOLEAN,\\n })`\n }\n\n if (fieldData.type.includes('date')) {\n result += `${addColumnTemp}'${tableName}', '_${fieldData.dbName}DT', {${dataTypeTemp}DATE,\\n })`\n }\n\n if (multiTypeService.typeIncludesRef(fieldData.type)) {\n result += `${addColumnTemp}'${tableName}', '_${fieldData.dbName}Ref', {${dataTypeTemp}STRING(100),\\n })`\n }\n\n return result\n}\n\nfunction removeMultiTypeColumnContent(tableName: string, fieldData: Record<string, any>) {\n let result = ''\n\n const removeColumnTemp = `\\n await queryInterface.removeColumn('${tableName}', '_${fieldData.dbName}`\n\n result += `${removeColumnTemp}Type')`\n\n const typesMap = multiTypeService.typesSufixes()\n\n for (const fieldType in typesMap) {\n if (fieldData.type.includes(fieldType)) {\n result += `${removeColumnTemp}${typesMap[fieldType]}')`\n }\n }\n\n const existRefs = multiTypeService.typeIncludesRef(fieldData.type)\n\n if (existRefs) {\n result += `${removeColumnTemp}Ref')`\n }\n\n return result\n}\n\nfunction renameColumnContent(tableName: string, oldName: string, newName: string) {\n return `\\n await queryInterface.renameColumn('${tableName}', '${oldName}', '${newName}')`\n}\n\nfunction renameMultiTypeColumnContent(tableName: string, changedField: MigrationAction) {\n const typesMap = multiTypeService.typesSufixes()\n\n let result = ''\n\n const renameTemplate = `\\n await queryInterface.renameColumn('${tableName}', `\n\n result += `${renameTemplate}'${changedField.oldName}Type', '${changedField.newName}Type')`\n\n for (const fieldType in typesMap) {\n if (changedField.field?.type.includes(fieldType)) {\n result += `${renameTemplate}'${changedField.oldName}${typesMap[fieldType]}', '${changedField.newName}${typesMap[fieldType]}')`\n }\n }\n\n if (multiTypeService.typeIncludesRef((changedField.field?.type || []) as string[])) {\n result += `${renameTemplate}'${changedField.oldName}Ref', '${changedField.newName}Ref')`\n }\n\n return result\n}\n\nasync function changeColumn(tableData: Record<string, any>, oldField: Record<string, any>, newField: Record<string, any>) {\n let migrationContent = ''\n\n if (oldField.type !== newField.type) {\n if (notConvertableField(oldField.type, newField.type)) {\n migrationContent += removeColumnContent(tableData.name, newField.dbName)\n migrationContent += await addColumnContent(tableData.name, newField.dbName, newField)\n } else if (existConversion(oldField.type, newField.type)) {\n migrationContent += await addColumnContent(tableData.name, `temp_${newField.dbName}`, newField)\n let rawQuery = ''\n if (['integer', 'decimal', 'text'].includes(oldField.type) && newField.type === 'string') {\n rawQuery += `UPDATE ${tableData.name} SET temp_${newField.dbName} = LEFT(CAST(${newField.dbName} AS VARCHAR), ${newField?.typeOptions?.length || 255})`\n } else if (['integer', 'decimal'].includes(oldField.type) && newField.type === 'text') {\n rawQuery += `UPDATE ${tableData.name} SET temp_${newField.dbName} = CAST(${newField.dbName} AS TEXT)`\n } else if (['text', 'string'].includes(oldField.type) && newField.type === 'integer') {\n rawQuery += `UPDATE ${tableData.name} SET temp_${newField.dbName} = CASE\n WHEN ${newField.dbName} ~ '^[0-9]+$' THEN CAST(${newField.dbName} AS INTEGER)\n ELSE NULL\n END`\n } else if (['text', 'string'].includes(oldField.type) && newField.type === 'decimal') {\n rawQuery += `UPDATE ${tableData.name} SET temp_${newField.dbName} = CASE\n WHEN ${newField.dbName} ~ '^[0-9]+$' THEN CAST(${newField.dbName} AS DECIMAL)\n ELSE NULL\n END`\n }\n if (rawQuery) migrationContent += addRawQueryContent(rawQuery)\n migrationContent += removeColumnContent(tableData.name, newField.dbName)\n migrationContent += renameColumnContent(tableData.name, `temp_${newField.dbName}`, newField.dbName)\n } else {\n migrationContent += await changeColumnContent(tableData.name, newField.dbName, newField)\n }\n } else {\n migrationContent += await changeColumnContent(tableData.name, newField.dbName, newField)\n }\n return migrationContent\n}\n\nasync function changeColumnContent(tableName: string, fieldName: string, fieldDetails: Record<string, any>) {\n return `\\n await queryInterface.changeColumn('${tableName}', '${fieldName}', ${await prepareFieldDetails(fieldDetails, tableName, true)})`\n}\n\nfunction removeColumnContent(tableName: string, fieldName: string) {\n return `\\n await queryInterface.removeColumn('${tableName}', '${fieldName}')`\n}\n\nfunction addRawQueryContent(rawQuery: string) {\n return `\\n await queryInterface.sequelize.query(\\`${rawQuery}\\`)`\n}\n\nfunction existConversion(typeFrom: string, typeTo: string) {\n const conversions = [\n { typeFrom: 'integer', typeTo: 'string' },\n { typeFrom: 'decimal', typeTo: 'string' },\n { typeFrom: 'text', typeTo: 'string' },\n { typeFrom: 'integer', typeTo: 'text' },\n { typeFrom: 'decimal', typeTo: 'text' },\n { typeFrom: 'text', typeTo: 'decimal' },\n { typeFrom: 'text', typeTo: 'integer' },\n { typeFrom: 'string', typeTo: 'integer' },\n { typeFrom: 'string', typeTo: 'decimal' },\n ]\n return conversions.find((el) => el.typeFrom === typeFrom && el.typeTo === typeTo)\n}\n\nfunction notConvertableField(typeFrom: string, typeTo: string): string | undefined {\n const fields = ['uuid', 'date', 'boolean', 'object', 'enum']\n return fields.find((el) => el === typeFrom) || fields.find((el) => el === typeTo)\n}\n\nfunction addIndex(tableName: string, fieldName: string, indexName: string): string {\n return `\\n await queryInterface.addIndex('${tableName}', ['${fieldName}'], { name: '${indexName}'})`\n}\n\nfunction addMultiTypeIndexes(tableName: string, fieldData: Record<string, any>, indexName: string) {\n let result = ''\n\n const addIndexTemp = '\\n await queryInterface.addIndex('\n\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}Type'], { name: '${indexName}_type'})`\n\n if (fieldData.type.includes('string')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}ST'], { name: '${indexName}_st'})`\n }\n\n if (fieldData.type.includes('text')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}TX'], { name: '${indexName}_tx'})`\n }\n\n if (fieldData.type.includes('integer')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}IN'], { name: '${indexName}_in'})`\n }\n\n if (fieldData.type.includes('decimal')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}DC'], { name: '${indexName}_dc'})`\n }\n\n if (fieldData.type.includes('boolean')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}BL'], { name: '${indexName}_type'})`\n }\n\n if (fieldData.type.includes('date')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}DT'], { name: '${indexName}_dt'})`\n }\n\n if (multiTypeService.typeIncludesRef(fieldData.type)) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}Ref'], { name: '${indexName}_ref'})`\n }\n\n return result\n}\n\nfunction removeIndex(tableName: string, fieldName: string): string {\n return `\\n await queryInterface.removeIndex('${tableName}', ['${fieldName}'])`\n}\n\nfunction removeMultiTypeIndexes(tableName: string, fieldData: Record<string, any>) {\n let result = ''\n\n const addIndexTemp = '\\n await queryInterface.removeIndex('\n\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}Type'])`\n\n if (fieldData.type.includes('string')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}ST'])`\n }\n\n if (fieldData.type.includes('text')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}TX'])`\n }\n\n if (fieldData.type.includes('integer')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}IN'])`\n }\n\n if (fieldData.type.includes('decimal')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}DC'])`\n }\n\n if (fieldData.type.includes('boolean')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}BL'])`\n }\n\n if (fieldData.type.includes('date')) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}DT'])`\n }\n\n if (multiTypeService.typeIncludesRef(fieldData.type)) {\n result += `${addIndexTemp}'${tableName}', ['_${fieldData.dbName}Ref'])`\n }\n\n return result\n}\n","export default {\n typesSufixes() {\n return { string: 'ST', text: 'TX', integer: 'IN', decimal: 'DC', boolean: 'BL', date: 'DT' }\n },\n\n typeIncludesRef(fieldType: Array<string>) {\n return (\n fieldType.includes('enum') ||\n fieldType.includes('catalog') ||\n fieldType.includes('document') ||\n fieldType.includes('anyRef') ||\n fieldType.findIndex((el) => el.includes('.')) > -1\n )\n },\n\n isRefType(fieldType: string) {\n return fieldType === 'enum' || fieldType === 'catalog' || fieldType === 'document' || fieldType === 'anyRef' || fieldType.includes('.')\n },\n\n getFieldNameByType(baseName: string, type: string) {\n const typesSufixes = this.typesSufixes()\n\n if (typesSufixes[type]) {\n return `_${baseName}${typesSufixes[type]}`\n }\n\n if (this.isRefType(type)) {\n return `_${baseName}Ref`\n }\n\n return null\n },\n}\n","import logger from '@/core/services/logger.service'\nimport sequelize from '@/database/dbConnection'\nimport { Model, Transaction, IncludeOptions, ModelStatic } from 'sequelize'\nimport { Request } from 'express'\n\nexport default {\n async onChangeHandler(objectModel: ModelStatic<Model<any, any>>, objectId: string, changeMode: string, userId: string, t?: Transaction): Promise<void> {\n try {\n const existVersioning: Record<string, any> | null = await sequelize.models.ObjectVersioningSetting.findOne({ where: { objectType: objectModel.name } })\n\n if (existVersioning) {\n if (existVersioning.versioningMethod === 'all' || existVersioning.versioningMethod === changeMode) {\n let include = prepareIncludes(objectModel)\n\n await objectModel.findByPk(objectId, { include, transaction: t }).then(async (object) => {\n if (object) {\n const versionInfo: Record<string, any> = {\n objectId,\n objectData: JSON.stringify(object),\n objectType: objectModel.name,\n userId,\n description: changeMode,\n }\n\n const options = { transaction: t ? t : null }\n\n await sequelize.models.ObjectVersion.create(versionInfo, options).catch((err) => {\n console.error(err)\n })\n }\n })\n }\n }\n } catch (error) {\n logger.error(`Error in ${objectModel.options.name?.plural} objectVersionsService onChangeHandler`, { meta: error })\n }\n },\n\n async addChanges(objectData: Record<string, any>, req: Request): Promise<void> {\n let changesData = { ...objectData }\n\n if (req.user) {\n changesData.userId = req.user.id\n }\n\n await sequelize.models.ObjectVersion.create(changesData).catch((err) => {\n console.error(err)\n })\n },\n}\n\nfunction prepareIncludes(object: ModelStatic<Model<any, any>>): IncludeOptions[] {\n let include: Record<string, any>[] = []\n\n if (object.associations) {\n for (let as in object.associations) {\n if (as === 'chargedServicesAcc') continue\n\n let model = object.associations[as].target\n\n if (object.associations[as].isSingleAssociation) {\n let attributes = ['id', 'presentation']\n\n if (object.associations[as].source.rawAttributes.name) {\n attributes.push('name')\n }\n\n include.push({ model, as, attributes }) // include field ref data\n } else {\n const count = include.push({ model, as, include: [] }) // include tables\n\n if (model.associations) {\n include[count - 1].include = []\n\n for (let tFieldAs in model.associations) {\n let tFieldModel = model.associations[tFieldAs].target\n\n if (model.associations[tFieldAs].isSingleAssociation) {\n let tFieldAttributes = ['id', 'presentation']\n\n if (model.associations[tFieldAs].target.rawAttributes.name) {\n tFieldAttributes.push('name')\n }\n\n include[count - 1].include.push({ model: tFieldModel, as: tFieldAs, attributes: tFieldAttributes }) // include table field ref data\n }\n }\n }\n }\n }\n }\n\n return include\n}\n","import { Sequelize, ModelStatic, Model, Transaction } from 'sequelize'\nimport logger from '@/core/services/logger.service'\nimport moment from 'moment'\nimport { v4 as uuidv4 } from 'uuid'\nimport { AppObject } from '@/src/types'\n\nexport default {\n async updateTotals(register: AppObject, params: Record<string, any>): Promise<void> {\n if (!register.accumulationRegister) {\n return\n }\n\n const accTable = register.accTable\n\n if (accTable) {\n const calculationPeriod = await this.getCalculatedPeriod(params.objects.registersCalculation, register.id)\n\n if (!calculationPeriod) {\n return\n }\n\n const dimensions = accTable.dimensions.map((el) => el.dbName)\n dimensions.push('period')\n\n const resources = accTable.resources.map((el) => el.dbName)\n\n let recordsBefore: Record<string, any>[] = []\n\n if (params.recordsBefore.length > 0) {\n recordsBefore = prepareRecordsTable(JSON.parse(JSON.stringify(params.recordsBefore)), dimensions, resources)\n }\n\n let recordsAfter: Record<string, any>[] = []\n\n if (params.recordsAfter.length > 0) {\n recordsAfter = prepareRecordsTable(JSON.parse(JSON.stringify(params.recordsAfter)), dimensions, resources)\n }\n\n const recordsDifference = calculateDifference(recordsBefore, recordsAfter, dimensions, resources)\n\n await updateRecordsDifference(accTable.model, recordsDifference, dimensions, resources, calculationPeriod, params.transaction).catch((error) => {\n logger.error(`Error updating records for register: ${accTable.name}`, { meta: error })\n })\n }\n },\n\n async calculateTotals(register: AppObject, objects: Record<string, AppObject>): Promise<void> {\n if (!register.accumulationRegister) {\n return\n }\n\n const accTable = register.accTable\n\n if (accTable) {\n const periodDimension = 'period'\n\n const dimensions = accTable.dimensions.map((el) => el.dbName)\n const resources = accTable.resources.map((el) => el.dbName)\n\n const detailRecords: Record<string, any>[] = await register.model.findAll()\n\n if (detailRecords.length === 0) {\n await accTable.model.truncate()\n return\n }\n\n const transformedRecords = detailRecords.map((record) => {\n const newRecord = {}\n dimensions.forEach((dim) => {\n newRecord[dim] = record[dim]\n })\n newRecord[periodDimension] = moment(record[periodDimension]).add(1, 'month').startOf('month').toDate()\n resources.forEach((res) => {\n newRecord[res] = record.recordType === 'receipt' ? parseFloat(record[res]) : -parseFloat(record[res])\n })\n return newRecord\n })\n\n const sortedPeriods = [...new Set(transformedRecords.map((record) => record[periodDimension]))].sort((a, b) => a - b)\n const firstPeriod = sortedPeriods[0]\n const currentPeriod = moment().add(1, 'month').startOf('month').toDate()\n\n let previousMonthRecords = {}\n\n await accTable.model.truncate()\n\n const transaction = await accTable.model.sequelize.transaction()\n\n for (let period = moment(firstPeriod); period.isSameOrBefore(currentPeriod, 'month'); period.add(1, 'month')) {\n const periodDate = period.toDate()\n const periodRecords: Record<string, any> = {}\n\n transformedRecords.forEach((record) => {\n if (moment(record[periodDimension]).isSame(period, 'month')) {\n const key = dimensions.map((dim) => record[dim]).join('_')\n if (!periodRecords[key]) {\n periodRecords[key] = { ...record, period: periodDate, id: uuidv4() }\n } else {\n resources.forEach((res) => {\n periodRecords[key][res] += record[res]\n })\n }\n }\n })\n\n if (Object.keys(previousMonthRecords).length > 0) {\n Object.keys(previousMonthRecords).forEach((key) => {\n if (!periodRecords[key]) {\n periodRecords[key] = { ...previousMonthRecords[key], period: periodDate, id: uuidv4() }\n } else {\n resources.forEach((res) => {\n periodRecords[key][res] += parseFloat(previousMonthRecords[key][res])\n })\n }\n })\n }\n\n const finalRecords = Object.values(periodRecords).map((record) => {\n resources.forEach((res) => {\n record[res] = record[res].toString()\n })\n return record\n })\n\n previousMonthRecords = JSON.parse(JSON.stringify(periodRecords))\n await accTable.model.bulkCreate(finalRecords, { ignoreDuplicates: true, transaction })\n }\n\n await this.updateCalculatedPeriod(objects.registersCalculation, { registerId: register.id, beginPeriod: firstPeriod, endPeriod: currentPeriod }, transaction)\n\n await transaction.commit()\n }\n },\n\n async getCalculatedPeriod(registersCalculation: AppObject, registerId: string) {\n return await registersCalculation.model.findOne({ where: { registerId } })\n },\n\n async updateCalculatedPeriod(registersCalculation: AppObject, data: Record<string, any>, transaction: Transaction): Promise<void> {\n const existRegisterPeriod = await registersCalculation.model.findOne({ where: { registerId: data.registerId }, transaction })\n\n if (existRegisterPeriod) {\n await existRegisterPeriod.update({ beginPeriod: data.beginPeriod, endPeriod: data.endPeriod }, { where: { registerId: data.registerId }, transaction })\n } else {\n await registersCalculation.model.create({ id: uuidv4(), ...data }, { transaction })\n }\n },\n}\n\nfunction prepareRecordsTable(records: Record<string, any>[], dimensions: string[], resources: string[]): Record<string, any>[] {\n for (const record of records) {\n for (const resourse of resources) {\n record[resourse] = record.recordType === 'expense' ? -1 * parseFloat(record[resourse]) : parseFloat(record[resourse])\n }\n\n record.period = getStartOfNextMonth(record.period)\n }\n\n return aggregateData(records, dimensions, resources)\n}\n\nfunction getStartOfNextMonth(date: Date): Date {\n const momentDate = moment(date)\n\n const startOfNextMonth = momentDate.add(1, 'months').startOf('month')\n\n return startOfNextMonth.toDate()\n}\n\nfunction aggregateData(records: Record<string, any>[], dimmensions: string[], resources: string[]): Record<string, any>[] {\n const aggregatedData = {}\n\n records.forEach((record) => {\n const key = dimmensions.map((dim) => record[dim]).join('|')\n\n if (!aggregatedData[key]) {\n aggregatedData[key] = {}\n dimmensions.forEach((dim) => {\n aggregatedData[key][dim] = record[dim] === undefined ? null : record[dim]\n })\n resources.forEach((res) => {\n aggregatedData[key][res] = 0\n })\n }\n\n resources.forEach((res) => {\n aggregatedData[key][res] += record[res]\n })\n })\n\n return Object.values(aggregatedData)\n}\n\nfunction calculateDifference(recordsBefore: Record<string, any>[], recordsAfter: Record<string, any>[], dimensions: string[], resources: string[]): Record<string, any>[] {\n const recordMap: Record<string, any> = {}\n\n recordsBefore.forEach((record) => {\n const key = dimensions.map((dim) => record[dim]).join('|')\n if (!recordMap[key]) {\n recordMap[key] = {}\n dimensions.forEach((dim) => {\n recordMap[key][dim] = record[dim]\n })\n resources.forEach((res) => {\n recordMap[key][res] = 0\n })\n }\n resources.forEach((res) => {\n recordMap[key][res] -= parseFloat(record[res])\n })\n })\n\n recordsAfter.forEach((record) => {\n const key = dimensions.map((dim) => record[dim]).join('|')\n if (!recordMap[key]) {\n recordMap[key] = {}\n dimensions.forEach((dim) => {\n recordMap[key][dim] = record[dim]\n })\n resources.forEach((res) => {\n recordMap[key][res] = 0\n })\n }\n resources.forEach((res) => {\n recordMap[key][res] += parseFloat(record[res])\n })\n })\n\n return Object.values(recordMap).filter((record) => {\n return resources.some((res) => record[res] !== 0)\n })\n}\n\nasync function updateRecordsDifference(\n registerModel: ModelStatic<Model<any, any>>,\n recordsDifference: Record<string, any>[],\n dimensions: string[],\n resources: string[],\n calculationPeriod: Record<string, any>,\n transaction: Transaction\n): Promise<void> {\n for (const record of recordsDifference) {\n const periods: Date[] = []\n for (let period = moment(calculationPeriod.beginPeriod); period.isSameOrBefore(calculationPeriod.endPeriod, 'month'); period.add(1, 'month')) {\n if (period.isSameOrAfter(record.period)) {\n periods.push(period.toDate())\n }\n }\n\n for (let period of periods) {\n let searchObject = {}\n dimensions.forEach((dim) => {\n if (dim === 'period') {\n searchObject[dim] = period\n } else {\n searchObject[dim] = record[dim]\n }\n })\n\n const existingRecord = await registerModel.findOne({\n where: searchObject,\n transaction,\n })\n\n if (existingRecord) {\n let updateValues = {}\n resources.forEach((res) => {\n updateValues[res] = Sequelize.literal(`${res} + ${record[res]}`)\n })\n\n await registerModel.update(updateValues, {\n where: searchObject,\n transaction,\n })\n } else {\n let createObject = { id: uuidv4() }\n dimensions.forEach((dim) => {\n if (dim === 'period') {\n createObject[dim] = period\n } else {\n createObject[dim] = record[dim]\n }\n })\n resources.forEach((res) => {\n createObject[res] = record[res]\n })\n\n await registerModel.create(createObject, { transaction })\n }\n }\n }\n}\n","import xl from 'exceljs'\nimport { format } from 'ssf'\nimport moment from 'moment'\nimport sequelize from '@/database/dbConnection'\nimport logger from '@/core/services/logger.service'\nimport commonService from '@/core/services/common.service'\nimport { Request, Response } from 'express'\n\nexport default {\n async generateExcel(req: Request, res: Response | null = null) {\n const params: Record<string, any> = { ...req.body }\n\n if (params.rowGroups.length > 1) {\n const uniqueGroups: any[] = []\n let groupValues: string[] = []\n\n for (let i = 0; i < params.rowGroups.length; i++) {\n if (params.rowGroups[i].withParent !== true && i !== 0) {\n uniqueGroups.push(groupValues.length > 1 ? groupValues : groupValues[0])\n groupValues = []\n }\n\n groupValues.push(params.rowGroups[i])\n\n if (i === params.rowGroups.length - 1) {\n uniqueGroups.push(groupValues.length > 1 ? groupValues : groupValues[0])\n }\n }\n\n params.rowGroups = uniqueGroups\n }\n\n if (params.rowGroups.length > 0) {\n params.fields = params.fields.filter((el: Record<string, any>) => !params.calcs.find((calcEl: Record<string, any>) => calcEl.name === el.name))\n }\n\n params.enums = await getEnums(params.langCode)\n\n // Create a new instance of a Workbook class\n const wb = new xl.Workbook()\n\n // Add Worksheets to the workbook\n const ws = wb.addWorksheet('Sheet 1', {\n pageSetup: { paperSize: 9, orientation: 'landscape' },\n })\n\n //Add params and filters description\n let rowIndex = 1\n if (params.periodPresentation) {\n let langType = params.periodPresentation.length > 20 ? params.lang.byPeriod : params.lang.byDate\n ws.getCell(rowIndex, 1).value = `${langType}:`\n ws.getCell(rowIndex, 2).value = params.periodPresentation\n\n rowIndex++\n }\n\n if (Array.isArray(params.filterPresentation) && params.filterPresentation.length > 0) {\n ws.getCell(rowIndex, 1).value = `${params.lang.filter}:`\n\n for (const filter of params.filterPresentation) {\n ws.getCell(rowIndex, 2).value = filter\n\n rowIndex++\n }\n }\n\n const hideDetails = params.rowGroups.length > 0 && params.hideDetails === true\n\n // // Add header row groups\n let headerRowIndex = rowIndex\n\n let headerRows = params.rowGroups.length + (hideDetails === true ? 0 : 1)\n headerRows = params.colGroups.length > 0 && headerRows < 2 ? 2 : headerRows\n\n let endColIndex = hideDetails === true ? 1 : params.fields.length\n if (params.rowGroups.length > 0) {\n const groupRows = params.rowGroups.length === 1 && params.colGroups.length > 0 && hideDetails ? 1 : 0\n\n params.rowGroups.map((group) => {\n const cell = ws.getCell(rowIndex, 1)\n cell.value = getHeaderTitle(group)\n setHeaderStyles(cell)\n\n ws.mergeCells(rowIndex, 1, rowIndex + groupRows, endColIndex)\n\n rowIndex += 1\n })\n }\n\n // Add header fields\n if (hideDetails !== true) {\n params.fields.map((field: Record<string, any>, fieldIndex: number) => {\n const cell = ws.getCell(rowIndex, fieldIndex + 1)\n setHeaderStyles(cell)\n cell.value = field.title\n })\n\n rowIndex += 1\n }\n\n const calcLength = params.calcs.length\n\n // Add header coll groups\n if (params.colGroups.length > 0) {\n for (const colGroup of params.cols) {\n const cell = ws.getCell(headerRowIndex, endColIndex + 1)\n cell.value = colGroup.name\n setHeaderStyles(cell)\n\n ws.mergeCells(headerRowIndex, endColIndex + 1, headerRowIndex, endColIndex + calcLength)\n\n params.calcs.map((calc: Record<string, any>, calcIndex: number) => {\n const cell = ws.getCell(headerRowIndex + 1, endColIndex + calcIndex + 1)\n cell.value = calc.title\n setHeaderStyles(cell)\n\n ws.mergeCells(headerRowIndex + 1, endColIndex + calcIndex + 1, headerRowIndex + headerRows - 1, endColIndex + calcIndex + 1)\n })\n\n endColIndex += calcLength\n }\n\n if (params.showXTotal) {\n const cell = ws.getCell(headerRowIndex, endColIndex + 1)\n cell.value = params.lang.total\n setHeaderStyles(cell)\n\n ws.mergeCells(headerRowIndex, endColIndex + 1, headerRowIndex, endColIndex + calcLength)\n\n params.calcs.map((calc: Record<string, any>, calcIndex: number) => {\n const cell = ws.getCell(headerRowIndex + 1, endColIndex + calcIndex + 1)\n cell.value = calc.title\n setHeaderStyles(cell)\n\n ws.mergeCells(headerRowIndex + 1, endColIndex + calcIndex + 1, headerRowIndex + headerRows - 1, endColIndex + calcIndex + 1)\n })\n }\n } else {\n if (params.rowGroups.length > 0) {\n params.calcs.map((calc: Record<string, any>, calcIndex: number) => {\n const cell = ws.getCell(headerRowIndex, endColIndex + calcIndex + 1)\n cell.value = calc.title\n setHeaderStyles(cell)\n\n ws.mergeCells(headerRowIndex, endColIndex + calcIndex + 1, headerRowIndex + headerRows - 1, endColIndex + calcIndex + 1)\n })\n }\n }\n\n const lvl = 0\n rowIndex = generateDataRows(params, params.data, headerRowIndex + headerRows, hideDetails, ws, lvl)\n\n let maxCol = 1\n if (params.showYTotal > 0) {\n if (params.totals.length > 0) {\n let endColIndex = hideDetails === true ? 1 : params.fields.length\n if (params.rowGroups.length > 0) {\n const cell = ws.getCell(rowIndex, 1)\n cell.value = params.lang.total\n setGroupStyles(cell)\n ws.mergeCells(rowIndex, 1, rowIndex, endColIndex)\n\n params.totals.forEach((total: Record<string, any>, index: number) => {\n maxCol = endColIndex + index + 1\n\n const cell = ws.getCell(rowIndex, maxCol)\n cell.value = total.value || 0\n setGroupStyles(cell)\n cell.numFmt = getNumberformat(total.format) as string\n cell.alignment = { horizontal: total.textAlign ? total.textAlign : 'left' }\n })\n\n if (params.colGroups.length > 0 && params.showXTotal) {\n params.calcs.map((calc: Record<string, any>, index: number) => {\n const calcTotal = params.totals.reduce((acc: number, el: Record<string, any>) => {\n if (el.id === calc.id) {\n return acc + el.value\n }\n\n return acc\n }, 0)\n\n maxCol = endColIndex + params.totals.length + index + 1\n\n const cell = ws.getCell(rowIndex, maxCol)\n cell.value = calcTotal || 0\n setGroupStyles(cell)\n cell.numFmt = getNumberformat(calc.format) as string\n cell.alignment = { horizontal: calc.textAlign ? calc.textAlign : 'left' }\n })\n }\n } else {\n let needSpan = true\n let fieldIndex = 1\n\n for (const field of params.fields) {\n const existTotal = params.totals.find((el: Record<string, any>) => el.id === field.id)\n\n if (existTotal) {\n if (needSpan === true) {\n const cell = ws.getCell(rowIndex, 1)\n cell.value = params.lang.total\n setGroupStyles(cell)\n ws.mergeCells(rowIndex, 1, rowIndex, fieldIndex - 1)\n\n needSpan = false\n }\n\n const cell = ws.getCell(rowIndex, fieldIndex)\n cell.value = Number(existTotal.value || 0)\n setGroupStyles(cell)\n cell.numFmt = getNumberformat(existTotal.format) as string\n cell.alignment = { horizontal: field.textAlign ? field.textAlign : 'left' }\n } else {\n if (needSpan !== true) {\n const cell = ws.getCell(rowIndex, fieldIndex)\n cell.value = ''\n setGroupStyles(cell)\n }\n }\n\n maxCol = fieldIndex\n fieldIndex++\n }\n }\n }\n }\n\n setColsWidth(ws, headerRowIndex)\n setPrintSettings(ws)\n\n if (res) {\n res.status(200)\n res.setHeader('Content-Type', 'text/xlsx')\n res.setHeader('Content-Disposition', 'attachment; filename=Excel.xlsx')\n wb.xlsx.write(res).then(function () {\n res.end()\n })\n }\n\n return wb\n },\n}\n\nfunction setHeaderStyles(cell: Record<string, any>) {\n cell.border = {\n left: { style: 'thin', color: { argb: 'd3d3d3' } },\n top: { style: 'thin', color: { argb: 'd3d3d3' } },\n right: { style: 'thin', color: { argb: 'd3d3d3' } },\n bottom: { style: 'thin', color: { argb: 'd3d3d3' } },\n outline: true,\n }\n\n cell.alignment = {\n vertical: 'middle',\n horizontal: 'left',\n shrinkToFit: true,\n wrapText: true,\n }\n\n cell.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'e9ecef' } }\n}\n\nfunction setGroupStyles(cell: Record<string, any>) {\n cell.border = {\n left: { style: 'thin', color: { argb: 'd3d3d3' } },\n top: { style: 'thin', color: { argb: 'd3d3d3' } },\n right: { style: 'thin', color: { argb: 'd3d3d3' } },\n bottom: { style: 'thin', color: { argb: 'd3d3d3' } },\n outline: true,\n }\n\n cell.alignment = { horizontal: 'left' }\n\n cell.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'f2f5fa' } }\n}\n\nfunction setDetailStyles(cell: Record<string, any>) {\n cell.border = {\n left: { style: 'thin', color: { argb: 'd3d3d3' } },\n top: { style: 'thin', color: { argb: 'd3d3d3' } },\n right: { style: 'thin', color: { argb: 'd3d3d3' } },\n bottom: { style: 'thin', color: { argb: 'd3d3d3' } },\n outline: true,\n }\n}\n\nfunction getHeaderTitle(data: Record<string, any>) {\n let text: string\n if (Array.isArray(data)) {\n text = data.map((obj) => obj.title).join(', ')\n } else if (typeof data === 'object') {\n text = data?.title\n } else {\n text = data\n }\n\n return text\n}\n\nfunction generateDataRows(params: Record<string, any>, rows: Record<string, any>[], rowIndex: number, hideDetails: boolean, ws: any, lvl: number) {\n for (const row of rows) {\n let endColIndex = hideDetails === true ? 1 : params.fields.length\n\n ws.getRow(rowIndex).outlineLevel = lvl\n\n if (row.isGroup) {\n const cell = ws.getCell(rowIndex, 1)\n setGroupCellValue(params, cell, row.groups)\n\n if (row.children.length > 0) {\n setGroupStyles(cell)\n } else {\n setDetailStyles(cell)\n }\n\n ws.mergeCells(rowIndex, 1, rowIndex, endColIndex)\n\n endColIndex += 1\n\n if (params.colGroups.length > 0) {\n for (const total of row.totals) {\n const cell = ws.getCell(rowIndex, endColIndex)\n cell.value = total.value || 0\n\n if (row.children.length > 0) {\n setGroupStyles(cell)\n } else {\n setDetailStyles(cell)\n }\n\n cell.alignment = {\n horizontal: total.textAlign ? total.textAlign : 'left',\n }\n\n cell.numFmt = getNumberformat(total.format)\n\n endColIndex += 1\n }\n\n if (params.showXTotal) {\n for (const calc of params.calcs) {\n const calcTotal = row.totals.reduce((acc: number, el: Record<string, any>) => {\n if (el.id === calc.id) {\n return acc + el.value\n }\n\n return acc\n }, 0)\n\n const cell = ws.getCell(rowIndex, endColIndex)\n cell.value = calcTotal || 0\n\n if (row.children.length > 0) {\n setGroupStyles(cell)\n } else {\n setDetailStyles(cell)\n }\n\n cell.alignment = {\n horizontal: calc.textAlign ? calc.textAlign : 'left',\n }\n\n cell.numFmt = getNumberformat(calc.format)\n\n endColIndex += 1\n }\n }\n } else {\n for (const total of row.totals) {\n const cell = ws.getCell(rowIndex, endColIndex)\n cell.value = total.value || 0\n\n if (row.children.length > 0) {\n setGroupStyles(cell)\n } else {\n setDetailStyles(cell)\n }\n\n cell.alignment = {\n horizontal: total.textAlign ? total.textAlign : 'left',\n }\n\n cell.numFmt = getNumberformat(total.format)\n\n endColIndex += 1\n }\n }\n\n rowIndex += 1\n\n if (row.children.length > 0) {\n rowIndex = generateDataRows(params, row.children, rowIndex, hideDetails, ws, lvl + 1)\n }\n } else {\n for (let i = 0; i < params.fields.length; i++) {\n const cell = ws.getCell(rowIndex, i + 1)\n setCellValue(cell, params.fields[i], row, params)\n setDetailStyles(cell)\n\n cell.alignment = {\n horizontal: params.fields[i].textAlign,\n }\n }\n\n let colIndex = params.fields.length + 1\n if (params.colGroups.length > 0) {\n const groupValue = row[params.colGroups[0].name]\n\n const calcTotals = {}\n\n for (const groupData of params.cols) {\n for (let j = 0; j < params.calcs.length; j++) {\n let value = 0\n\n if ((params.colGroups[0].valueType === 'object' && groupData.id === groupValue?.id) || groupData === groupValue) {\n value = Number(row[params.calcs[j].name] || 0)\n }\n\n const cell = ws.getCell(rowIndex, colIndex)\n cell.value = value || 0\n setDetailStyles(cell)\n cell.alignment = {\n horizontal: params.calcs[j].textAlign ? params.calcs[j].textAlign : 'left',\n }\n\n cell.numFmt = getNumberformat(params.calcs[j].format)\n\n if (Object.hasOwnProperty.call(calcTotals, params.calcs[j].name)) {\n calcTotals[params.calcs[j].name] += Number(value)\n } else {\n calcTotals[params.calcs[j].name] = Number(value)\n }\n\n colIndex += 1\n }\n }\n\n if (params.showXTotal) {\n for (let j = 0; j < params.calcs.length; j++) {\n let value = calcTotals[params.calcs[j].name]\n\n const cell = ws.getCell(rowIndex, colIndex + j)\n cell.value = value || 0\n setDetailStyles(cell)\n cell.alignment = {\n horizontal: params.calcs[j].textAlign ? params.calcs[j].textAlign : 'left',\n }\n\n cell.numFmt = getNumberformat(params.calcs[j].format)\n }\n }\n } else {\n if (params.rowGroups.length > 0) {\n for (let j = 0; j < params.calcs.length; j++) {\n let value = Number(row[params.calcs[j].name] || 0)\n\n const cell = ws.getCell(rowIndex, colIndex + j)\n cell.value = value || 0\n setDetailStyles(cell)\n cell.alignment = {\n horizontal: params.calcs[j].textAlign ? params.calcs[j].textAlign : 'left',\n }\n\n cell.numFmt = getNumberformat(params.calcs[j].format)\n }\n }\n }\n\n rowIndex += 1\n }\n }\n\n return rowIndex\n}\n\nfunction getNumberformat(formatStr: string) {\n let valueFormat: string | null = null\n\n if (formatStr) {\n const format = JSON.parse(formatStr || '{\"NFD\": 3}')\n const value = 0\n if (format.NFD) {\n valueFormat = value.toFixed(format.NFD)\n }\n }\n\n return valueFormat\n}\n\nfunction setCellValue(cell: Record<string, any>, field: Record<string, any>, data: Record<string, any>, params: Record<string, any>) {\n let value = data[field.name] || null\n\n switch (field.valueType) {\n case 'number': {\n let curNumber = parseFloat(value)\n if (isNaN(curNumber)) {\n curNumber = 0\n }\n cell.value = curNumber || 0\n\n if (field.format) {\n cell.numFmt = getNumberformat(field.format)\n }\n\n break\n }\n\n case 'date': {\n cell.value = value || ''\n break\n }\n case 'object': {\n cell.value = value.name || ''\n break\n }\n case 'boolean': {\n cell.value = Boolean(value || false)\n cell.numFmt = 'BOOLEAN'\n break\n }\n case 'enum': {\n if (value && field.ref) {\n const valueData = params.enums[field.ref].find((el) => el.value === value)\n value = valueData ? valueData.title : value\n }\n\n cell.value = value || ''\n break\n }\n default: {\n cell.value = value || ''\n break\n }\n }\n}\n\nfunction setGroupCellValue(params: Record<string, any>, cell: Record<string, any>, data: Record<string, any>) {\n if (data.length === 1) {\n switch (data[0].valueType) {\n case 'number':\n cell.value = Number(data[0].value || 0)\n break\n case 'date':\n if (data[0].value === '') {\n cell.value = null\n } else if (data[0].format) {\n cell.value = moment(data[0].value, data[0].format).toDate() || null\n } else {\n cell.value = data[0].value || null\n }\n break\n case 'object':\n cell.value = data[0].value.name || ''\n break\n case 'boolean':\n cell.value = Boolean(data[0].value || false)\n cell.numFmt = 'BOOLEAN'\n break\n default:\n cell.value = data[0].value || ''\n break\n }\n } else {\n let presentation = ''\n\n for (let i = 0; i < data.length; i++) {\n if (data[i].valueType === 'object') {\n presentation += data[i].value?.name || params.lang.undefined\n } else if (data[i].valueType === 'boolean') {\n presentation += data[i].value ? params.lang.boolean.true : params.lang.boolean.false\n } else {\n presentation += data[i].value\n }\n\n if (i < data.length - 1) {\n presentation = `${presentation}, `\n }\n }\n\n cell.value = presentation || ''\n }\n}\n\nasync function getEnums(lang: string) {\n try {\n const enums = {}\n\n let result: Record<string, any>[] = await sequelize.models.Enum.findAll({ include: [{ model: sequelize.models.EnumValue, as: 'values' }], order: ['name'] })\n\n for (const enumRow of result) {\n enums[enumRow.name] = enumRow.values.map((el: Record<string, any>) => {\n return { value: el.value, title: commonService.translateField(el, 'title', lang) }\n })\n }\n\n return enums\n } catch (error) {\n logger.error(`Error in app getEnums controller`, { meta: error })\n return []\n }\n}\n\nfunction dateToSerial(date: Date) {\n const timezoneOffset = date.getTimezoneOffset() / (60 * 24)\n const msDate = date.getTime() / 86400000 + (25569 - timezoneOffset)\n return msDate\n}\n\nfunction setColsWidth(ws: any, firstRow: number) {\n ws.columns.forEach((column: Record<string, any>) => {\n let maxLength = 6\n\n column.eachCell((cell) => {\n if (cell.row >= firstRow) {\n if (!cell.isMerged) {\n let cellLength: number\n\n if (cell.numFmt && cell.value != undefined) {\n switch (cell.type) {\n case xl.ValueType.Date: {\n const serialDate = dateToSerial(cell.value)\n const formattedDate = format(cell.numFmt, serialDate)\n cellLength = formattedDate.length\n break\n }\n case xl.ValueType.Number: {\n const formattedNumber = format(cell.numFmt, cell.value)\n cellLength = formattedNumber.length\n break\n }\n default: {\n const formatted = format(cell.numFmt, cell.value)\n cellLength = formatted.length\n break\n }\n }\n } else {\n cellLength = cell.value.toString().length\n }\n\n maxLength = Math.max(maxLength, cellLength)\n }\n }\n })\n\n if (maxLength > 50) {\n maxLength = 50\n }\n\n column.width = maxLength + 2\n })\n}\n\nfunction setPrintSettings(ws: any) {\n const lastCell = ws.getCell(ws.rowCount, ws.columnCount)\n\n ws.pageSetup.printArea = `A1:${lastCell.address}`\n}\n","import PDF from 'pdfmake'\nimport moment from 'moment'\nimport sequelize from '@/database/dbConnection'\nimport logger from '@/core/services/logger.service'\nimport commonService from '@/core/services/common.service'\nimport { Request, Response } from 'express'\nimport { TDocumentDefinitions } from 'pdfmake/interfaces'\n\nexport default {\n async generatePdf(req: Request, res: Response | null = null): Promise<void> {\n const params = { ...req.body }\n\n const pdfPrinter = new PDF(getFonts())\n\n const content = await getPdfContent(params)\n\n const docDefinition: TDocumentDefinitions = {\n content,\n defaultStyle: {\n font: 'Roboto',\n fontSize: params.pageFontSize || 12,\n },\n pageOrientation: params.pageOrientation || 'landscape',\n pageSize: params.pageSize || 'A4',\n pageMargins: [params.margins.left || 20, params.margins.top || 20, params.margins.right || 20, params.margins.bottom || 20],\n }\n\n const options = {}\n\n const pdfDoc = pdfPrinter.createPdfKitDocument(docDefinition, options)\n\n const chunks: any[] = []\n let result: any\n\n pdfDoc.on('data', function (chunk) {\n chunks.push(chunk)\n })\n\n pdfDoc.on('end', function () {\n result = Buffer.concat(chunks)\n\n if (res) {\n res.contentType('application/pdf')\n res.send(result)\n }\n })\n\n pdfDoc.end()\n },\n}\n\nfunction getFonts() {\n return {\n Courier: {\n normal: 'Courier',\n bold: 'Courier-Bold',\n italics: 'Courier-Oblique',\n bolditalics: 'Courier-BoldOblique',\n },\n Helvetica: {\n normal: 'Helvetica',\n bold: 'Helvetica-Bold',\n italics: 'Helvetica-Oblique',\n bolditalics: 'Helvetica-BoldOblique',\n },\n Times: {\n normal: 'Times-Roman',\n bold: 'Times-Bold',\n italics: 'Times-Italic',\n bolditalics: 'Times-BoldItalic',\n },\n Symbol: {\n normal: 'Symbol',\n },\n ZapfDingbats: {\n normal: 'ZapfDingbats',\n },\n Roboto: {\n normal: 'src/assets/fonts/Roboto-Regular.ttf',\n bold: 'src/assets/fonts/Roboto-Medium.ttf',\n italics: 'src/assets/fonts/Roboto-Italic.ttf',\n bolditalics: 'src/assets/fonts/Roboto-MediumItalic.ttf',\n },\n }\n}\n\nasync function getPdfContent(params: Record<string, any>) {\n if (params.rowGroups.length > 1) {\n const uniqueGroups: any[] = []\n let groupValues: string[] = []\n\n for (let i = 0; i < params.rowGroups.length; i++) {\n if (params.rowGroups[i].withParent !== true && i !== 0) {\n uniqueGroups.push(groupValues.length > 1 ? groupValues : groupValues[0])\n groupValues = []\n }\n\n groupValues.push(params.rowGroups[i])\n\n if (i === params.rowGroups.length - 1) {\n uniqueGroups.push(groupValues.length > 1 ? groupValues : groupValues[0])\n }\n }\n\n params.rowGroups = uniqueGroups\n }\n\n if (params.rowGroups.length > 0) {\n params.fields = params.fields.filter((el: Record<string, any>) => !params.calcs.find((calcEl: Record<string, any>) => calcEl.name === el.name))\n }\n\n params.enums = await getEnums(params.langCode)\n\n const content: any[] = []\n\n //print params and filters\n const paramsTable: any = {\n body: [],\n headerRows: 0,\n }\n\n if (params.periodPresentation) {\n const paramsRow: string[] = []\n\n let langType = params.periodPresentation.length > 20 ? params.lang.byPeriod : params.lang.byDate\n paramsRow.push(`${langType}:`)\n paramsRow.push(params.periodPresentation)\n\n paramsTable.body.push(paramsRow)\n }\n\n if (Array.isArray(params.filterPresentation) && params.filterPresentation.length > 0) {\n let filtersRow: any[] = []\n\n filtersRow.push(`${params.lang.filter}:`)\n filtersRow.push(params.filterPresentation[0])\n\n paramsTable.body.push(filtersRow)\n\n if (params.filterPresentation.length > 1) {\n for (let i = 1; i < params.filterPresentation.length; i++) {\n filtersRow = []\n\n filtersRow.push(' ')\n filtersRow.push(params.filterPresentation[i])\n\n paramsTable.body.push(filtersRow)\n }\n }\n }\n\n if (paramsTable.body.length > 0) {\n content.push({ table: paramsTable, layout: 'noBorders' })\n }\n\n const table: any = {\n body: [],\n headerRows: 0,\n }\n\n //print table header\n const headerRows = makeTableHeader(params)\n\n table.body.push(...headerRows)\n\n const bodyRows = []\n makeTableData(params.data, bodyRows, params)\n\n table.body.push(...bodyRows)\n\n if (params.showYTotal > 0 && params.totals.length > 0) {\n const footer = makeTableFooter(params)\n table.body.push(...footer)\n }\n\n content.push({\n table,\n layout: {\n paddingLeft: function (i, node) {\n return 2\n },\n paddingRight: function (i, node) {\n return 2\n },\n paddingTop: function (i, node) {\n return 2\n },\n paddingBottom: function (i, node) {\n return 2\n },\n },\n })\n\n return content\n}\n\nasync function getEnums(lang: string) {\n try {\n const enums: Record<string, any> = {}\n\n let result: Record<string, any>[] = await sequelize.models.Enum.findAll({ include: [{ model: sequelize.models.EnumValue, as: 'values' }], order: ['name'] })\n\n for (const enumRow of result) {\n enums[enumRow.name] = enumRow.values.map((el: Record<string, any>) => {\n return { value: el.value, title: commonService.translateField(el, 'title', lang) }\n })\n }\n\n return enums\n } catch (error) {\n logger.error(`Error in app getEnums controller`, { meta: error })\n return []\n }\n}\n\nfunction makeTableHeader(params: Record<string, any>) {\n const headerRows: any[] = []\n\n const borderColor = ['#d3d3d3', '#d3d3d3', '#d3d3d3', '#d3d3d3']\n const fillColor = '#e9ecef'\n\n if (params.rowGroups.length > 0) {\n const colSpan = params.hideDetails === true ? 1 : params.fields.length\n\n const firstRow: any[] = []\n\n firstRow.push({\n text: getHeaderTitle(params.rowGroups[0]),\n rowSpan: params.rowGroups.length === 1 && params.colGroups.length > 0 && params.hideDetails ? 2 : 1,\n colSpan,\n borderColor,\n fillColor,\n })\n\n if (colSpan > 1) {\n for (let i = 1; i < colSpan; i++) {\n firstRow.push({})\n }\n }\n\n if (params.colGroups.length === 0) {\n for (const calc of params.calcs) {\n firstRow.push({\n text: getHeaderTitle(calc.title),\n rowSpan: params.rowGroups.length + (params.hideDetails ? 0 : 1),\n borderColor,\n fillColor,\n })\n }\n } else {\n for (const colGroup of params.cols) {\n firstRow.push({\n text: params.colGroups[0].valueType === 'object' ? colGroup.name : colGroup,\n colSpan: params.calcs.length,\n borderColor,\n fillColor,\n })\n }\n\n if (params.showXTotal) {\n firstRow.push({\n text: params.lang.total,\n colSpan: params.calcs.length,\n borderColor,\n fillColor,\n })\n }\n }\n\n headerRows.push(firstRow)\n\n if (params.colGroups.length > 0 && params.rowGroups.length === 1 && params.hideDetails === true) {\n const secondRow: any[] = []\n\n secondRow.push({})\n\n for (const colGroup of params.cols) {\n for (const calc of params.calcs) {\n secondRow.push({\n text: calc.title,\n borderColor,\n fillColor,\n })\n }\n }\n\n if (params.showXTotal) {\n for (const calc of params.calcs) {\n secondRow.push({\n text: calc.title,\n borderColor,\n fillColor,\n })\n }\n }\n\n headerRows.push(secondRow)\n }\n\n if (params.colGroups.length === 0) {\n for (const group of params.rowGroups.slice(1)) {\n const nextRow: any[] = []\n\n nextRow.push({\n text: getHeaderTitle(group),\n colSpan,\n borderColor,\n fillColor,\n })\n\n if (colSpan > 1) {\n for (let i = 1; i < colSpan; i++) {\n nextRow.push({})\n }\n }\n\n for (const calc of params.calcs) {\n nextRow.push({})\n }\n\n headerRows.push(nextRow)\n }\n } else {\n if (params.rowGroups.length > 1) {\n let nextRow: any[] = []\n\n nextRow.push({\n text: getHeaderTitle(params.rowGroups[0]),\n colSpan,\n borderColor,\n fillColor,\n })\n\n for (const colGroup of params.colGroupsData) {\n for (const calc of params.calcs) {\n nextRow.push({\n text: getHeaderTitle(calc.title),\n rowSpan: params.rowGroups.length,\n borderColor,\n fillColor,\n })\n }\n }\n\n if (params.showXTotal) {\n for (const calc of params.calcs) {\n nextRow.push({\n text: getHeaderTitle(calc.title),\n rowSpan: params.rowGroups.length,\n borderColor,\n fillColor,\n })\n }\n }\n\n headerRows.push(nextRow)\n\n for (const group of params.rowGroups.slice(2)) {\n let nextRow: any[] = []\n\n nextRow.push({\n text: getHeaderTitle(group),\n colSpan,\n borderColor,\n fillColor,\n })\n\n for (const colGroup of params.colGroupsData) {\n for (const calc of params.calcs) {\n nextRow.push({})\n }\n }\n\n if (params.showXTotal) {\n for (const calc of params.calcs) {\n nextRow.push({})\n }\n }\n\n headerRows.push(nextRow)\n }\n }\n }\n\n if (params.hideDetails !== true) {\n let nextRow: any[] = []\n\n for (const field of params.fields) {\n nextRow.push({\n text: field.title,\n borderColor,\n fillColor,\n })\n }\n\n if (params.colGroups.length > 0) {\n if (params.rowGroups.length === 1) {\n for (const colGroup of params.colGroupsData) {\n for (const calc of params.calcs) {\n nextRow.push({\n text: calc.title,\n borderColor,\n fillColor,\n })\n }\n }\n\n if (params.showXTotal) {\n for (const calc of params.calcs) {\n nextRow.push({\n text: calc.title,\n borderColor,\n fillColor,\n })\n }\n }\n } else {\n for (const colGroup of params.colGroupsData) {\n for (const calc of params.calcs) {\n nextRow.push({})\n }\n }\n\n if (params.showXTotal) {\n for (const calc of params.calcs) {\n nextRow.push({})\n }\n }\n }\n } else {\n for (const calc of params.calcs) {\n nextRow.push({})\n }\n }\n\n headerRows.push(nextRow)\n }\n } else {\n let nextRow: any[] = []\n\n for (const field of params.fields) {\n nextRow.push({\n text: field.title,\n borderColor,\n fillColor,\n })\n }\n\n headerRows.push(nextRow)\n }\n\n return headerRows\n}\n\nfunction makeTableData(rows: Record<string, any>[], bodyRows: Record<string, any>[], params: Record<string, any>) {\n const borderColor = ['#d3d3d3', '#d3d3d3', '#d3d3d3', '#d3d3d3']\n const fillColor = '#f2f5fa'\n\n for (const row of rows) {\n const currRow: any[] = []\n\n let colSpan = params.hideDetails === true ? 1 : params.fields.length\n\n if (row.isGroup) {\n currRow.push({\n text: setGroupCellValue(row.groups, params),\n colSpan,\n borderColor,\n fillColor: row.children.length > 0 ? fillColor : null,\n })\n\n if (colSpan > 1) {\n for (let i = 1; i < colSpan; i++) {\n currRow.push({})\n }\n }\n\n if (params.colGroups.length > 0) {\n for (const total of row.totals) {\n currRow.push({\n text: formatValue(total.value || 0, total.format),\n borderColor,\n fillColor: row.children.length > 0 ? fillColor : null,\n alignment: total.textAlign ? total.textAlign : 'left',\n })\n }\n\n if (params.showXTotal) {\n for (const calc of params.calcs) {\n const calcTotal = row.totals.reduce((acc, el) => {\n if (el.id === calc.id) {\n return acc + el.value\n }\n\n return acc\n }, 0)\n\n currRow.push({\n text: formatValue(calcTotal || 0, calc.format),\n borderColor,\n fillColor: row.children.length > 0 ? fillColor : null,\n alignment: calc.textAlign ? calc.textAlign : 'left',\n })\n }\n }\n } else {\n for (const total of row.totals) {\n currRow.push({\n text: formatValue(total.value || 0, total.format),\n borderColor,\n fillColor: row.children.length > 0 ? fillColor : null,\n alignment: total.textAlign ? total.textAlign : 'left',\n })\n }\n }\n\n bodyRows.push(currRow)\n\n if (row.children.length > 0) {\n makeTableData(row.children, bodyRows, params)\n }\n } else {\n for (let i = 0; i < params.fields.length; i++) {\n currRow.push({\n text: setCellValue(params.fields[i], row, params),\n borderColor,\n alignment: params.fields[i].textAlign || 'left',\n })\n }\n\n if (params.colGroups.length > 0) {\n const groupValue = row[params.colGroups[0].name]\n\n const calcTotals = {}\n\n for (const groupData of params.cols) {\n for (let j = 0; j < params.calcs.length; j++) {\n let value = 0\n\n if ((params.colGroups[0].valueType === 'object' && groupData.id === groupValue?.id) || groupData === groupValue) {\n value = Number(row[params.calcs[j].name] || 0)\n }\n\n currRow.push({\n text: formatValue(value || 0, params.calcs[j].format),\n borderColor,\n alignment: params.calcs[j].textAlign ? params.calcs[j].textAlign : 'left',\n })\n\n if (Object.hasOwnProperty.call(calcTotals, params.calcs[j].name)) {\n calcTotals[params.calcs[j].name] += Number(value)\n } else {\n calcTotals[params.calcs[j].name] = Number(value)\n }\n }\n }\n\n if (params.showXTotal) {\n for (let j = 0; j < params.calcs.length; j++) {\n let value = calcTotals[params.calcs[j].name]\n\n currRow.push({\n text: formatValue(value || 0, params.calcs[j].format),\n borderColor,\n alignment: params.calcs[j].textAlign ? params.calcs[j].textAlign : 'left',\n })\n }\n }\n } else {\n if (params.rowGroups.length > 0) {\n for (let j = 0; j < params.calcs.length; j++) {\n let value = Number(row[params.calcs[j].name] || 0)\n\n currRow.push({\n text: formatValue(value || 0, params.calcs[j].format),\n borderColor,\n alignment: params.calcs[j].textAlign ? params.calcs[j].textAlign : 'left',\n })\n }\n }\n }\n\n bodyRows.push(currRow)\n }\n }\n}\n\nfunction makeTableFooter(params: Record<string, any>) {\n const borderColor = ['#d3d3d3', '#d3d3d3', '#d3d3d3', '#d3d3d3']\n const fillColor = '#f2f5fa'\n\n const footerRow: any[] = []\n\n if (params.rowGroups.length > 0) {\n const colSpan = params.hideDetails === true ? 1 : params.fields.length\n\n footerRow.push({\n text: params.lang.total,\n colSpan,\n borderColor,\n fillColor,\n })\n\n if (colSpan > 1) {\n for (let i = 1; i < colSpan; i++) {\n footerRow.push({})\n }\n }\n\n params.totals.forEach((total) => {\n footerRow.push({\n text: formatValue(total.value || 0, total.format),\n borderColor,\n fillColor,\n alignment: total.textAlign ? total.textAlign : 'left',\n })\n })\n\n if (params.colGroups.length > 0 && params.showXTotal) {\n params.calcs.map((calc, index) => {\n const calcTotal = params.totals.reduce((acc, el) => {\n if (el.id === calc.id) {\n return acc + el.value\n }\n\n return acc\n }, 0)\n\n footerRow.push({\n text: formatValue(calcTotal || 0, calc.format),\n borderColor,\n fillColor,\n alignment: calc.textAlign ? calc.textAlign : 'left',\n })\n })\n }\n } else {\n let needSpan = true\n let fieldIndex = 1\n\n for (const field of params.fields) {\n const existTotal = params.totals.find((el) => el.id === field.id)\n\n if (existTotal) {\n if (needSpan === true) {\n footerRow.push({\n text: params.lang.total,\n colSpan: fieldIndex - 1,\n borderColor,\n fillColor,\n })\n\n if (fieldIndex > 1) {\n for (let i = 1; i < fieldIndex - 1; i++) {\n footerRow.push({})\n }\n }\n\n needSpan = false\n }\n\n footerRow.push({\n text: formatValue(existTotal.value || 0, field.format),\n borderColor,\n fillColor,\n alignment: field.textAlign ? field.textAlign : 'left',\n })\n } else {\n if (!needSpan) {\n footerRow.push({\n text: '',\n borderColor,\n fillColor,\n })\n }\n }\n\n fieldIndex++\n }\n }\n\n return [footerRow]\n}\n\nfunction formatValue(value: string | number, formatStr: string) {\n if (formatStr) {\n const format = JSON.parse(formatStr || '{\"NFD\": 3}')\n\n if (format.NFD) {\n value = Number(value).toFixed(format.NFD)\n }\n }\n\n return value\n}\n\nfunction setCellValue(field: Record<string, any>, data: Record<string, any>, params: Record<string, any>) {\n let value = data[field.name] || ''\n\n switch (field.valueType) {\n case 'number': {\n let curNumber = parseFloat(value)\n if (isNaN(curNumber)) {\n curNumber = 0\n }\n value = curNumber || 0\n\n if (field.format) {\n const format = JSON.parse(field.format || '{\"NFD\": 3}')\n\n if (format.NFD) {\n value = Number(value).toFixed(format.NFD)\n }\n }\n\n break\n }\n\n case 'date': {\n value = value || ''\n break\n }\n\n case 'object': {\n value = value.name || ''\n break\n }\n case 'boolean': {\n value = Boolean(value || false)\n value = value ? params.lang.boolean.true : params.lang.boolean.false\n break\n }\n case 'enum': {\n if (value && field.ref) {\n const valueData = params.enums[field.ref].find((el) => el.value === value)\n value = valueData ? valueData.title : value\n }\n\n value = value || ''\n break\n }\n default: {\n value = value || ''\n break\n }\n }\n\n return value\n}\n\nfunction setGroupCellValue(data: Record<string, any>, params: Record<string, any>) {\n let value: any\n\n if (data.length === 1) {\n switch (data[0].valueType) {\n case 'number': {\n value = Number(data[0].value || 0)\n break\n }\n case 'date': {\n if (data[0].value === '') {\n value = ''\n } else if (data[0].format) {\n value = moment(data[0].value, data[0].format).toDate() || ''\n } else {\n value = data[0].value || ''\n }\n break\n }\n case 'boolean': {\n value = data[0].value || false\n value = value ? params.lang.boolean.true : params.lang.boolean.false\n break\n }\n case 'object': {\n value = data[0].value.name || ''\n break\n }\n default: {\n value = data[0].value || ''\n break\n }\n }\n } else {\n let presentation = ''\n\n for (let i = 0; i < data.length; i++) {\n if (data[i].valueType === 'object') {\n presentation += data[i].value?.name || params.lang.undefined\n } else if (data[i].valueType === 'boolean') {\n presentation += data[i].value ? params.lang.boolean.true : params.lang.boolean.false\n } else {\n presentation += data[i].value\n }\n\n if (i < data.length - 1) {\n presentation = `${presentation}, `\n }\n }\n\n value = presentation || ''\n }\n\n return value\n}\n\nfunction getHeaderTitle(data: Record<string, any>) {\n let text: string\n if (Array.isArray(data)) {\n text = data.map((obj) => obj.title).join(', ')\n } else if (typeof data === 'object') {\n text = data?.title\n } else {\n text = data\n }\n\n return text\n}\n","import express, { NextFunction, Request, Response } from 'express'\nimport { QueryTypes } from 'sequelize'\nimport fs from 'fs'\nimport { StatusCodes } from 'http-status-codes'\nimport accessRights from '@/middleware/accessRights'\nimport fileUpload from '@/middleware/fileUpload'\nimport sequelize from '@/database/dbConnection'\nimport logger from '@/core/services/logger.service'\n\nconst router = express.Router()\n\nexport default {\n async initRoutes() {\n const queryText =\n 'SELECT \\\n * \\\n FROM \\\n rest_api \\\n WHERE \\\n rest_api.\"markedToDelete\" = false \\\n AND rest_api.\"active\" = true'\n\n const restAPI: Record<string, any>[] = await sequelize.query(queryText, { type: QueryTypes.SELECT })\n\n for (const restAPIData of restAPI) {\n if (!restAPIData.methods) {\n continue\n }\n\n let module: any\n\n const modulePath = `restApi/${restAPIData.name}/server.module.js`\n\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n if (fs.existsSync(fullPath)) {\n module = __non_webpack_require__(fullPath)\n }\n\n if (!module) {\n continue\n }\n\n const apiMethods = JSON.parse(restAPIData.methods)\n\n for (const method of apiMethods) {\n if (!module[method.controller] || typeof module[method.controller] !== 'function') {\n logger.error('Rest API controller is not exist: ', { meta: { name: restAPIData.name, controller: method.controller } })\n continue\n }\n\n router[method.httpMethod.toLowerCase()](\n `/api/${restAPIData.path}/${method.path}`,\n setAccess(method.httpMethod, restAPIData),\n (req: Request, res: Response, next: NextFunction) => {\n const contentType = req.headers['content-type']\n if (contentType && contentType.includes('multipart/form-data')) {\n return fileUpload.array('files')(req, res, (err) => {\n if (err) {\n return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ message: `File upload error: ${err}` })\n }\n next()\n })\n } else {\n next()\n }\n },\n module[method.controller]\n )\n }\n }\n\n return router\n },\n}\n\nfunction setAccess(method: Record<string, any> = {}, restApi: Record<string, any>) {\n let accessMethod: any\n\n const accesRole: Record<string, any> = {}\n\n if (method.userRole) {\n accesRole.id = method.userRole\n } else if (restApi.accessRoleId) {\n accesRole.id = restApi.accessRoleId\n } else {\n accesRole.key = restApi.path\n }\n\n if (method.accessLevel) {\n accessMethod =\n method.accessLevel === 'CAN_REED'\n ? accessRights.canRead(accesRole)\n : method.accessLevel === 'CAN_MODIFY'\n ? accessRights.canModify(accesRole)\n : method.accessLevel === 'IS_AUTH'\n ? accessRights.isAuth\n : accessRights.isFullRights\n } else {\n accessMethod = method.httpMethod === 'GET' ? accessRights.canRead(accesRole) : accessRights.canModify(accesRole)\n }\n\n return accessMethod\n}\n","import fs from 'fs'\nimport path from 'path'\nimport moment from 'moment'\n\ninterface Options {\n path: string\n interval?: string\n}\n\nconst FORMAT_BY_UNIT: Record<string, string> = {\n m: 'YYYYMMDD-HHmm',\n h: 'YYYYMMDD-HH',\n d: 'YYYYMMDD',\n}\n\nfunction createRotatingStream({ path: logPath, interval = '1d' }: Options) {\n const logDir = path.resolve(logPath)\n fs.mkdirSync(logDir, { recursive: true })\n\n const unit = interval.slice(-1)\n const step = Number(interval.slice(0, -1))\n\n if (!FORMAT_BY_UNIT[unit] || !step) {\n throw new Error(`Invalid log interval: ${interval}`)\n }\n\n let currentKey = buildKey(moment())\n let stream = openStream(currentKey)\n\n function buildKey(date: moment.Moment) {\n const base = unit === 'm' ? date.clone().startOf('minute') : unit === 'h' ? date.clone().startOf('hour') : date.clone().startOf('day')\n\n const mod = unit === 'm' ? base.minute() % step : unit === 'h' ? base.hour() % step : 0\n\n base.subtract(mod, unit as moment.unitOfTime.DurationConstructor)\n return base.format(FORMAT_BY_UNIT[unit])\n }\n\n function openStream(key: string) {\n return fs.createWriteStream(path.join(logDir, `${key}.log`), { flags: 'a' })\n }\n\n function rotateIfNeeded() {\n const newKey = buildKey(moment())\n if (newKey !== currentKey) {\n stream.end()\n currentKey = newKey\n stream = openStream(currentKey)\n }\n }\n\n return {\n write(data: string) {\n rotateIfNeeded()\n stream.write(data + '\\n')\n },\n }\n}\n\nexport default createRotatingStream\n","import cron, { ScheduledTask } from 'node-cron'\nimport sequelize from '@/database/dbConnection'\nimport fs from 'fs'\nimport { StatusCodes } from 'http-status-codes'\nimport logger from '@/core/services/logger.service'\nimport { AppObject } from '@/src/types'\nimport { NextFunction, Request, Response } from 'express'\n\ninterface SessionScheduledJob {\n jobId: string\n jobExemplar: ScheduledTask\n}\ninterface ScheduledJobSchedule {\n [key: string]: any\n}\n\nconst sessionScheduledJobs: SessionScheduledJob[] = []\n\nexport default {\n async init(objects: Record<string, AppObject>) {\n if (process.env.NODE_APP_INSTANCE && process.env.NODE_APP_INSTANCE !== '0') {\n return\n }\n\n if (!sequelize.models.ScheduledJob) {\n logger.error(`Error in Scheduled Jobs init.`, { meta: 'Scheduled jobs is not initialized!!!' })\n return\n }\n\n const scheduledJobs: Record<string, any>[] = await sequelize.models.ScheduledJob.findAll({\n where: { active: true, markedToDelete: false },\n })\n\n if (Array.isArray(scheduledJobs) && scheduledJobs.length > 0) {\n for (const job of scheduledJobs) {\n const schedule: ScheduledJobSchedule = job.schedule\n\n const modulePath = `scheduledJobs/${job.name}/server.module.js`\n\n let jobModule: any\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n if (fs.existsSync(fullPath)) {\n jobModule = __non_webpack_require__(fullPath)\n } else {\n return console.log(`Serwer module for scheduled job \"${job.name}\" is not found!`)\n }\n\n if (schedule.dateFrom || schedule.dateTo) {\n const currentDate = new Date()\n\n if (schedule.dateFrom && currentDate < new Date(schedule.dateFrom)) {\n continue\n }\n\n if (schedule.dateTo && currentDate > new Date(schedule.dateTo)) {\n continue\n }\n }\n\n startCronSchedule(job, schedule, jobModule, objects)\n }\n }\n },\n async executeManually(req: Request, res: Response, next: NextFunction, object: AppObject) {\n const objectName = req.body.name\n\n if (!objectName) {\n const message = 'Object name is not correct!'\n logger.error(`Error in ${object.name} executeManually controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n let module: any\n const modulePath = `scheduledJobs/${objectName}/server.module.js`\n\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n if (fs.existsSync(fullPath)) {\n delete __non_webpack_require__.cache[__non_webpack_require__.resolve(fullPath)]\n module = __non_webpack_require__(fullPath)\n }\n\n if (!module) {\n const message = 'Scheduled job module is empty!'\n logger.error(`Error in ${object.name} executeManually controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n\n if (typeof module !== 'function') {\n const message = 'Scheduled job run function is not exist!'\n logger.error(`Error in ${object.name} executeManually controller`, { meta: message })\n return { status: StatusCodes.BAD_REQUEST, responseData: { message } }\n }\n const historyRecord = await sequelize.models.ScheduledJobHistory.create({\n beginDate: new Date(),\n scheduledJobId: req.body.id,\n status: 'started',\n })\n try {\n const messages: Record<string, any>[] = []\n const result = await module(req.objects, messages)\n const errMessages = messages.find((mes) => mes.status === 'error')\n const infMessages = messages.find((mes) => mes.status === 'info')\n\n let errInfo = ''\n if (errMessages) {\n for (let mess of messages) {\n errInfo += mess.meta + '\\n'\n }\n\n await historyRecord.update({ endDate: new Date(), status: 'error', errorDescription: errInfo, userId: req.user?.id, manual: true })\n } else if (infMessages) {\n for (let mess of messages) {\n errInfo += mess.meta + '\\n'\n }\n\n await historyRecord.update({ endDate: new Date(), status: 'success', errorDescription: errInfo, userId: req.user?.id, manual: true })\n } else {\n await historyRecord.update({ endDate: new Date(), status: 'success', userId: req.user?.id, manual: true })\n }\n\n return { status: StatusCodes.OK, responseData: { executionComplited: true, result } }\n } catch (error) {\n logger.error(`Error in ${object.name} executeManually controller`, { meta: error })\n return { status: StatusCodes.INTERNAL_SERVER_ERROR, responseData: { message: error?.original?.message || error?.message } }\n }\n },\n}\n\nconst startCronSchedule = (job: Record<string, any>, schedule: ScheduledJobSchedule, jobModule: any, objects: Record<string, AppObject>) => {\n const cronSchedule = `${setTime(schedule.minutes, schedule.startTime, 'minutes')} \n ${setTime(schedule.hours, schedule.startTime, 'hours')} \n ${setUnits(schedule.daysOfMonth)} \n ${setUnits(schedule.months)} \n ${setUnits(schedule.daysOfWeek)}\n `\n\n const jobExemplar = cron.schedule(\n cronSchedule,\n async () => {\n const historyRecord = await sequelize.models.ScheduledJobHistory.create({\n beginDate: new Date(),\n scheduledJobId: job.id,\n status: 'started',\n })\n\n try {\n const messages: Record<string, any>[] = []\n\n await jobModule(objects, messages)\n const errMessages = messages.find((mes) => mes.status === 'error')\n const infMessages = messages.find((mes) => mes.status === 'info')\n let errInfo = ''\n if (errMessages) {\n for (let mess of messages) {\n errInfo += mess.meta + '\\n'\n }\n await historyRecord.update({ endDate: new Date(), status: 'error', errorDescription: errInfo })\n } else if (infMessages) {\n for (let mess of messages) {\n errInfo += mess.meta + '\\n'\n }\n await historyRecord.update({ endDate: new Date(), status: 'success', errorDescription: errInfo })\n } else {\n await historyRecord.update({ endDate: new Date(), status: 'success' })\n }\n } catch (error) {\n console.error('Error executing module code:', error)\n await historyRecord.update({ endDate: new Date(), status: 'error', errorDescription: error.message })\n }\n },\n {\n scheduled: false,\n }\n )\n\n jobExemplar.start()\n\n sessionScheduledJobs.push({\n jobId: job.id,\n jobExemplar,\n })\n}\n\nconst setTime = (time: string, startTime: string, timeInterval: string) => {\n if (time && time !== '00') {\n return `*/${Number(time)}`\n } else {\n if (startTime) {\n if (timeInterval === 'minutes') {\n return `${startTime.substring(3, 5)}`\n } else {\n return `${startTime.substring(0, 2)}`\n }\n } else {\n return '*'\n }\n }\n}\n\nconst setUnits = (units: string[]) => {\n if (units.length > 0) {\n let string = ''\n for (const unit of units) {\n string = string + unit\n if (units.length - 1 !== units.indexOf(unit)) {\n string = string + ','\n }\n }\n return string\n } else {\n return '*'\n }\n}\n","import nodemailer from 'nodemailer'\nimport { StatusCodes, getReasonPhrase } from 'http-status-codes'\nimport { v4 as uuidv4 } from 'uuid'\nimport { Op } from 'sequelize'\nimport sequelize from '@/database/dbConnection'\nimport cryptoGen from '@/core/auth/cryptoGen'\nimport logger from '@/core/services/logger.service'\n\ninterface EmailConfig {\n credentials: {\n host: string\n port: number\n secure: boolean\n auth: {\n user: string\n pass: string\n }\n tls: {\n rejectUnauthorized: boolean\n }\n }\n}\n\ninterface MailOptions {\n from: string\n to: string\n bcc?: string\n subject: string\n html: string\n}\n\ninterface ResultData {\n httpStatus: StatusCodes\n result: Record<string, any> | boolean\n}\n\nconst getRegistrationMailText = async (userEmail: string, event: string) => {\n const foundUser: Record<string, any> | null = await sequelize.models.User.findOne({ where: { email: userEmail } })\n const language = foundUser?.language\n const content = {\n en: {\n registration: {\n subject: 'Confirm your email',\n hello: 'Hello ',\n begining: ',<br>Thank you for your registration. Your account requires activation. Click the link below to confirm your email address:<br><br>',\n middle: '<br><br>Here are your login details:<br>Login: ',\n end: '<br><br>Important Safety Tips:<br>1. Always keep your account details in a safe place.<br>2. Never reveal your login and password to anyone.<br>3. Change your password regularly.<br>4. If you suspect someone is using your account illegally, please let us know immediately.',\n },\n passwordReset: {\n subject: 'Password Reset',\n metter: 'Password recovery for ',\n begining: '<br><br>Dear User,<br><br>We have received a request to change your account password ',\n middle: '<br>Click here to reset your password: ',\n end: '<br><br>If you do not want to reset your password, please ignore this message. The password will remain unchanged.<br><br>Sincerely,<br>Customer Service Team',\n },\n passwordResetConfirmation: {\n subject: 'Password Reset Successful',\n main: 'Dear User,<br><br>Your password has been successfully reset.<br><br>Sincerely,<br>Customer Service Team',\n },\n statusChange: {\n subject: 'User status',\n start: 'Dear User, <br><br>Your user status has been changed to:<br><br>',\n end: '<br><br>Sincerely,<br>Customer Service Team',\n },\n },\n pl: {\n registration: {\n subject: 'Potwierdź swój email',\n hello: 'Witaj ',\n begining: ',<br>Dziękujemy za rejestracje. Twoje konto wymaga aktywacji. Kliknij poniższy link, aby potwierdzić swój adres e-mail:<br><br>',\n middle: '<br><br>Oto twoje dane logowania:<br>Login: ',\n end: '<br><br>Ważne wskazówki dotyczące bezpieczeństwa:<br>1. Zawsze trzymaj dane do Twojego konta w bezpiecznym miejscu.<br>2. Nigdy nie ujawniaj nikomu swojego loginu i hasła.<br>3. Regularnie zmieniaj swoje hasło.<br>4. Jeśli podejrzewasz, że ktoś używa Twojego konta nielegalnie, prosimy o natychmiastowe poinformowanie nas o tym.',\n },\n passwordReset: {\n subject: 'Reset hasła',\n metter: 'Odzyskiwanie hasła do konta ',\n begining: '<br><br>Drogi Użytkowniku,<br><br>Otrzymaliśmy prośbę o zmianę hasła do konta ',\n middle: '<br>Kliknij, aby zresetować hasło: ',\n end: '<br><br>Jeśli nie chcesz resetować swojego hasła, zignoruj tę wiadomość. Hasło pozostanie niezmienione.<br><br>Z poważaniem,<br>Zespół Obsługi Klienta',\n },\n passwordResetConfirmation: {\n subject: 'Hasło Zresetowane Pomyślnie',\n main: 'Drogi Użytkowniku,<br><br>Twoje hasło zostało pomyślnie zresetowane.<br><br>Z poważaniem,<br>Dzial Obslugi Klienta',\n },\n statusChange: {\n subject: 'Status użytkownika',\n start: 'Drogi Użytkowniku, <br><br>Twój status użytkownika został zmieniony na:<br><br>',\n end: '<br><br>Z poważaniem,<br>Zespół Obsługi Klienta',\n },\n },\n fr: {\n registration: {\n subject: 'Confirme ton email',\n hello: 'Bonjour ',\n begining: ',<br>Merci pour votre inscription. Votre compte nécessite une activation. Cliquez sur le lien ci-dessous pour confirmer votre adresse e-mail:<br><br>',\n middle: '<br><br>Voici vos identifiants de connexion:<br>Login: ',\n end: \"<br><br>Conseils de sécurité importants:<br>1. Conservez toujours les détails de votre compte en lieu sûr.<br>2. Ne révélez jamais votre identifiant et votre mot de passe à qui que ce soit.<br>3. Changez votre mot de passe régulièrement.<br>4. Si vous pensez que quelqu'un utilise votre compte illégalement, veuillez nous en informer immédiatement.\",\n },\n passwordReset: {\n subject: 'Réinitialisation du mot de passe',\n metter: 'Récupération de mot de passe pour ',\n begining: '<br><br>Cher utilisateur,<br><br>Nous avons reçu une demande de changement de mot de passe de votre compte ',\n middle: '<br>Cliquez ici pour réinitialiser votre mot de passe: ',\n end: \"<br><br>Si vous ne souhaitez pas réinitialiser votre mot de passe, veuillez ignorer ce message. Le mot de passe restera inchangé.<br><br>Cordialement,<br>L'équipe du service client\",\n },\n passwordResetConfirmation: {\n subject: 'Réinitialisation du mot de passe réussie',\n main: \"Cher utilisateur,<br><br>Votre mot de passe a été réinitialisé avec succès.<br><br>Cordialement,<br>L'équipe du service client\",\n },\n statusChange: {\n subject: \"Statut de l'utilisateur\",\n start: \"Cher utilisateur, <br><br>Votre statut d'utilisateur a été changé en:<br><br>\",\n end: \"<br><br>Cordialement,<br>L'équipe du service client\",\n },\n },\n }\n\n if (language) {\n if (language in content) {\n return content[language][event]\n } else {\n return content['en'][event]\n }\n } else {\n return content['en'][event]\n }\n}\n\nexport default {\n async emailConfirmationInstructions(email: string, name: string, login: string, token: string): Promise<void> {\n const emailAccount = await getServiceEmailAccount().catch((error) => {\n logger.error('Error in getServiceEmailAccount', { meta: error })\n return\n })\n\n if (!emailAccount) {\n logger.error('Error in emailConfirmationInstructions ', { meta: 'Service email account not exist' })\n return\n }\n\n if (!emailAccount.password) {\n logger.error('Error in emailConfirmationInstructions ', { meta: 'Service email account password not set' })\n }\n\n emailAccount.password = cryptoGen.decrypt(JSON.parse(emailAccount.password))\n\n const emailConfig = prepareEmailConfig(emailAccount)\n const transporter = nodemailer.createTransport(emailConfig.credentials)\n\n transporter.verify(async function (error, success) {\n if (error) {\n logger.error('Error in emailConfirmationInstructions ', { meta: error })\n } else {\n const text = await getRegistrationMailText(email, 'registration')\n\n const emailConfirmationBaseUrl = `${process.env.ALLOW_ORIGIN}/email-confirmation`\n\n const html = text.hello + name + text.begining + '<a href=\"' + emailConfirmationBaseUrl + '/' + token + '\">Confirm Your Email Address</a>' + text.middle + login + text.end\n\n const mailOptions = prepareEmailOptions(emailAccount, email, text.subject, html)\n\n // send mail with defined transport object\n transporter.sendMail(mailOptions, async (error, info) => {\n if (error) {\n logger.error('Error while sending service email', { meta: error })\n } else {\n logger.verbose('Service Email sent', { meta: info })\n }\n })\n }\n })\n },\n\n async register(userObj: Record<string, any>): Promise<ResultData> {\n try {\n const existUser = await sequelize.models.User.findOne({ where: { [Op.or]: { email: userObj.email, login: userObj.login } } })\n\n if (existUser) {\n const errorMessage = 'A user with this login or email already exist'\n logger.error('Error in register Service', { meta: errorMessage })\n return { httpStatus: StatusCodes.BAD_REQUEST, result: { message: errorMessage } }\n }\n\n let userInfo: Record<string, any> = {\n email: userObj.email,\n login: userObj.login,\n uuid: uuidv4(),\n password: cryptoGen.createPasswordHash(userObj.password),\n name: userObj.name,\n isActive: false,\n fullRights: false,\n externalUser: false,\n emailConfirmationToken: cryptoGen.generateRandomToken(),\n referralToken: cryptoGen.generateRandomToken(),\n isFirm: userObj.isFirm,\n firmName: userObj.firmName,\n phone: userObj.phone,\n country: userObj.country,\n companyDepartment: userObj.companyDepartment,\n commercialInChargeOfYou: userObj.commercialInChargeOfYou,\n notVatNumber: userObj.notVatNumber,\n vatNumber: userObj.vatNumber,\n address: userObj.address,\n postalCode: userObj.postalCode,\n city: userObj.city,\n deliveryDepartment: userObj.deliveryDepartment,\n }\n\n const first = await firstUser()\n\n if (first === true) {\n userInfo.isActive = true\n userInfo.userState = 'Aktywny'\n userInfo.fullRights = true\n }\n\n return await sequelize.models.User.create(userInfo)\n .then(async (user: Record<string, any>) => {\n logger.info('New user was registered', { meta: JSON.stringify({ id: user.id, name: user.name }) })\n\n if (first === false) {\n this.emailConfirmationInstructions(user.email, user.name, user.login, user.emailConfirmationToken)\n }\n\n const responseData = { email: user.email, login: user.login, name: user.name }\n return { httpStatus: StatusCodes.OK, result: responseData }\n })\n .catch((error) => {\n logger.error('Error in register Service', { meta: error })\n return { httpStatus: StatusCodes.BAD_REQUEST, result: { message: 'User create error.' } }\n })\n } catch (error) {\n logger.error('Error in register Service', { meta: error })\n return { httpStatus: StatusCodes.BAD_REQUEST, result: { message: error } }\n }\n },\n\n async confirmEmailAddress(token: string): Promise<ResultData> {\n return await sequelize.models.User.findOne({ where: { emailConfirmationToken: token } })\n .then(async (user) => {\n // If an associated user with the given token is not found, then return failure\n if (!user) {\n logger.error('Error in confirmEmailAddress Service', { meta: 'Token not find.' })\n return { httpStatus: StatusCodes.NOT_FOUND, result: { message: getReasonPhrase(StatusCodes.NOT_FOUND) } }\n }\n\n // Go ahead and confirm the user email\n user = await user.update({ emailConfirmationToken: null })\n\n // If the user was not properly saved, stop here and return failure\n if (!user) {\n logger.error('Error in confirmEmailAddress Service', { meta: 'User not save.' })\n return {\n httpStatus: StatusCodes.INTERNAL_SERVER_ERROR,\n result: { message: getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR) },\n }\n }\n\n // If we have gotten this far, return success\n return { httpStatus: StatusCodes.OK, result: true }\n })\n .catch((error) => {\n logger.error('Error in confirmEmailAddress Service', { meta: error })\n return { httpStatus: StatusCodes.BAD_REQUEST, result: { errorDetails: error } }\n })\n },\n\n async resendEmailAddressConfirmationLink(email: string): Promise<ResultData> {\n try {\n let user: Record<string, any> | null = await sequelize.models.User.findOne({ where: { email: email } })\n let token = cryptoGen.generateRandomToken()\n\n // If a user is found, and they are still unverified, ONLY THEN update the token and send the email\n if (!(user && token)) {\n return {\n httpStatus: StatusCodes.BAD_REQUEST,\n result: { message: 'Email is already confirmed or does not exist in our records.' },\n }\n }\n\n // Overwrite the user record with new token.\n user = await user.update({ emailConfirmationToken: token })\n\n // If the user was not properly saved, stop here and return failure\n if (!user) {\n return {\n httpStatus: StatusCodes.INTERNAL_SERVER_ERROR,\n result: { message: getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR) },\n }\n }\n\n // If we have gotten this far, return success\n this.emailConfirmationInstructions(user.email, user.name, user.login, user.emailConfirmationToken)\n return { httpStatus: StatusCodes.OK, result: true }\n } catch (error) {\n logger.error('Error in resendEmailAddressConfirmationLink Service', { meta: error })\n return { httpStatus: StatusCodes.BAD_REQUEST, result: { message: error } }\n }\n },\n\n /**\n * Sends a password reset email to the user with the given email address.\n * The email contains a link to reset the password.\n * The link is valid for a limited time.\n * @param {string} email - The email address of the user who requested the password reset.\n */\n async forgotPassword(email: string, clientOrigin: string | undefined): Promise<ResultData> {\n try {\n if (!clientOrigin) {\n logger.error('Error in forgotPassword Service', { meta: 'Client origin is not defined' })\n return { httpStatus: StatusCodes.INTERNAL_SERVER_ERROR, result: { message: 'Client origin is not defined' } }\n }\n\n const foundUser: Record<string, any> | null = await sequelize.models.User.findOne({\n where: {\n email: email,\n },\n })\n\n if (!foundUser) {\n logger.error('Error in forgotPassword Service', { meta: 'Email not found' })\n return { httpStatus: StatusCodes.NOT_FOUND, result: { message: 'Email not found' } }\n }\n\n let token = cryptoGen.generateRandomToken()\n\n // Generate password reset token and save it\n const passwordResetTokenValid: number = Number(process.env.PASSWORD_RESET_TOKEN_VALID) || 3600000\n const updateData = {\n passwordResetToken: token,\n passwordResetExpires: Date.now() + passwordResetTokenValid,\n }\n\n const updatedUser: Record<string, any> = await foundUser.update({ ...updateData })\n\n // If the user was not properly saved, stop here and return failure\n if (!updatedUser) {\n logger.error('Error in forgotPassword Service', { meta: 'User not updated' })\n return {\n httpStatus: StatusCodes.INTERNAL_SERVER_ERROR,\n result: { message: getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR) },\n }\n }\n\n // If we have gotten this far, return success\n return emailPasswordResetInstructions(updatedUser.email, updatedUser.name, updatedUser.login, updatedUser.passwordResetToken, clientOrigin)\n } catch (error) {\n logger.error('Error in forgotPassword Service', { meta: error })\n return { httpStatus: StatusCodes.BAD_REQUEST, result: { message: error } }\n }\n },\n\n async isPasswordResetTokenValid(token: string): Promise<ResultData> {\n try {\n let user = await sequelize.models.User.findOne({ where: { passwordResetToken: token, passwordResetExpires: { [Op.gte]: Date.now() } } })\n return user ? { httpStatus: StatusCodes.OK, result: true } : { httpStatus: StatusCodes.BAD_REQUEST, result: false }\n } catch (error) {\n logger.error('Error in isPasswordResetTokenValid Service', { meta: error })\n return { httpStatus: StatusCodes.BAD_REQUEST, result: { message: error } }\n }\n },\n\n async resetPassword(token: string, newPassword: string): Promise<ResultData> {\n try {\n let user: Record<string, any> | null = await sequelize.models.User.findOne({ where: { passwordResetToken: token, passwordResetExpires: { [Op.gte]: Date.now() } } })\n\n // If an associated user with the given token is found and token hasn't expired yet, only then let's continue\n if (!user) {\n return { httpStatus: StatusCodes.NOT_FOUND, result: { message: getReasonPhrase(StatusCodes.NOT_FOUND) } }\n }\n\n // Overwrite the user variable with result from the new save.\n user = await user.update({ passwordResetToken: null, passwordResetExpires: null, password: cryptoGen.createPasswordHash(newPassword) })\n // If the user was not properly saved, stop here and return failure\n\n if (!user) {\n return {\n httpStatus: StatusCodes.INTERNAL_SERVER_ERROR,\n result: { message: getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR) },\n }\n }\n\n // If we have gotten this far, return success\n emailPasswordResetConfirmation(user.email, user.name)\n\n return { httpStatus: StatusCodes.OK, result: true }\n } catch (error) {\n logger.error('Error in resetPassword Service', { meta: error })\n return { httpStatus: StatusCodes.BAD_REQUEST, result: { message: error } }\n }\n },\n\n async emailOnUserStateChange(email: string, status: string): Promise<void> {\n const emailAccount = await getServiceEmailAccount().catch((error) => {\n logger.error('Error in getServiceEmailAccount', { meta: error })\n return\n })\n\n if (!emailAccount) {\n logger.error('Error in emailConfirmationInstructions ', { meta: 'Service email account not exist' })\n return\n }\n\n if (!emailAccount.password) {\n logger.error('Error in emailConfirmationInstructions ', { meta: 'Service email account password not set' })\n }\n\n emailAccount.password = cryptoGen.decrypt(JSON.parse(emailAccount.password))\n\n const emailConfig = prepareEmailConfig(emailAccount)\n const transporter = nodemailer.createTransport(emailConfig.credentials)\n\n transporter.verify(async function (error, success) {\n if (error) {\n logger.error('Error in emailConfirmationInstructions ', { meta: error })\n } else {\n const text = await getRegistrationMailText(email, 'statusChange')\n const mailOptions = prepareEmailOptions(emailAccount, email, text.subject, text.start + status + text.end)\n\n // send mail with defined transport object\n transporter.sendMail(mailOptions, async (error, info) => {\n if (error) {\n logger.error('Error while sending service email', { meta: error })\n } else {\n logger.verbose('Service Email sent', { meta: info })\n }\n })\n }\n })\n },\n}\n\nasync function firstUser(): Promise<boolean> {\n return await sequelize.models.User.findAll()\n .then((result) => {\n return result.length === 0\n })\n .catch(() => {\n return false\n })\n}\n\nasync function getServiceEmailAccount(): Promise<Record<string, any> | null> {\n return await sequelize.models.EmailAccount.findOne({ where: { isService: true } })\n}\n\nasync function emailPasswordResetInstructions(email: string, name: string, login: string, token: string, clientOrigin: string): Promise<ResultData> {\n const emailAccount = await getServiceEmailAccount()\n\n if (!emailAccount) {\n logger.error('Error in emailConfirmationInstructions ', { meta: 'Service email account not exist' })\n return { httpStatus: StatusCodes.INTERNAL_SERVER_ERROR, result: { message: 'Service email account not exist' } }\n }\n\n if (!emailAccount.password) {\n logger.error('Error in emailConfirmationInstructions ', { meta: 'Service email account password not set' })\n return { httpStatus: StatusCodes.INTERNAL_SERVER_ERROR, result: { message: 'Service email account password not set' } }\n }\n\n emailAccount.password = cryptoGen.decrypt(JSON.parse(emailAccount.password))\n\n let emailConfig = prepareEmailConfig(emailAccount)\n\n let transporter = nodemailer.createTransport(emailConfig.credentials)\n\n try {\n await transporter.verify()\n } catch (error) {\n logger.error('Error in emailConfirmationInstructions ', { meta: error })\n return { httpStatus: StatusCodes.INTERNAL_SERVER_ERROR, result: { message: `Email verification error. ${error}` } }\n }\n // Prepare the email content\n const text = await getRegistrationMailText(email, 'passwordReset')\n\n const passwordResetBaseUrl = `${clientOrigin}/password-reset`\n const html = text.metter + login + text.begining + login + text.middle + '<a href=\"' + passwordResetBaseUrl + '/' + token + '\">Reset Password</a>' + text.end\n\n const mailOptions = prepareEmailOptions(emailAccount, email, text.subject, html)\n\n // send mail with defined transport object\n return await transporter\n .sendMail(mailOptions)\n .then((info) => {\n logger.verbose('Service Email sent', { meta: info })\n return { httpStatus: StatusCodes.OK, result: { message: 'OK' } }\n })\n .catch((error) => {\n logger.error('Error while sending service email', { meta: error })\n return { httpStatus: StatusCodes.INTERNAL_SERVER_ERROR, result: { message: error } }\n })\n}\n\nasync function emailPasswordResetConfirmation(email: string, name: string): Promise<void> {\n const emailAccount = await getServiceEmailAccount().catch((error) => {\n logger.error('Error in getServiceEmailAccount', { meta: error })\n return\n })\n\n if (!emailAccount) {\n logger.error('Error in emailConfirmationInstructions ', { meta: 'Service email account not exist' })\n return\n }\n\n if (!emailAccount.password) {\n logger.error('Error in emailConfirmationInstructions ', { meta: 'Service email account password not set' })\n }\n\n emailAccount.password = cryptoGen.decrypt(JSON.parse(emailAccount.password))\n\n const emailConfig = prepareEmailConfig(emailAccount)\n const transporter = nodemailer.createTransport(emailConfig.credentials)\n\n transporter.verify(async function (error, success) {\n if (error) {\n logger.error('Error in emailConfirmationInstructions ', { meta: error })\n } else {\n const text = await getRegistrationMailText(email, 'passwordResetConfirmation')\n const mailOptions = prepareEmailOptions(emailAccount, email, text.subject, text.main)\n\n // send mail with defined transport object\n transporter.sendMail(mailOptions, async (error, info) => {\n if (error) {\n logger.error('Error while sending service email', { meta: error })\n } else {\n logger.verbose('Service Email sent', { meta: info })\n }\n })\n }\n })\n}\n\nfunction prepareEmailConfig(emailAccount: Record<string, any>): EmailConfig {\n return {\n credentials: {\n host: emailAccount.smtpHost,\n port: emailAccount.smtpPort,\n secure: emailAccount.smtpTls,\n auth: {\n user: emailAccount.user,\n pass: emailAccount.password,\n },\n tls: {\n rejectUnauthorized: emailAccount.smtpTls,\n },\n },\n }\n}\n\nfunction prepareEmailOptions(emailAccount: Record<string, any>, to: string, subject: string, html: string): MailOptions {\n return {\n from: emailAccount.name,\n to,\n bcc: emailAccount.name,\n subject,\n html,\n }\n}\n","import fs from 'fs'\nimport { ModelStatic, Model, Op, Association } from 'sequelize'\nimport { AppObject } from '@/src/types'\n\ninterface Params {\n event?: 'update' | 'delete'\n oldValue?: AppObject\n newValue?: Record<string, unknown>\n objectId?: string\n changeDeletionMark?: boolean\n serverModule?: string\n module?: string\n info?: string\n}\n\nexport default {\n async updateInitialData(object: ModelStatic<Model<any, any>>, filename: string, params: Params = {}): Promise<void> {\n const basePath = 'src/modules'\n const structural = isStructuralObject(object.tableName)\n\n if (params.event === 'delete') {\n if (structural) {\n deleteInitialData(object.tableName, params.oldValue as Record<string, any>, basePath)\n\n if (object.tableName === 'common_modules') {\n updateCommonModulesInitialData(object, filename)\n }\n return\n }\n }\n\n const include: Array<{ model: ModelStatic<Model<any, any>>; as: string }> = []\n const includeOrders: Array<[any, string, string]> = []\n\n if (object.associations) {\n for (const as in object.associations) {\n if (object.associations[as].isMultiAssociation) {\n if (object.associations[as].options._noTablePart) {\n continue\n }\n\n let model = object.associations[as].target\n include.push({ model, as })\n includeOrders.push([{ model, as }, 'rowNumber', 'ASC'])\n }\n }\n\n if (object.tableName === 'view_settings') {\n if (object.associations['appObject']) {\n include.push({ model: object.associations['appObject'].target, as: 'appObject' })\n }\n\n if (object.associations['worker']) {\n include.push({ model: object.associations['worker'].target, as: 'worker' })\n }\n } else if (object.tableName === 'print_forms') {\n if (object.associations['appObject']) {\n include.push({ model: object.associations['appObject'].target, as: 'appObject' })\n }\n }\n }\n\n const where: Record<string, unknown> = {}\n if (structural) {\n where['id'] = params?.objectId\n }\n\n try {\n const result = await object.findAll({\n where,\n order: ['id', ...includeOrders],\n include,\n })\n\n const parsedResult: Record<string, any>[] = JSON.parse(JSON.stringify(result))\n\n if (object.tableName === 'app_objects') {\n handleAppObjects(parsedResult, basePath, params)\n } else if (object.tableName === 'view_settings') {\n handleViewSettings(parsedResult, basePath, params)\n } else if (object.tableName === 'report_settings') {\n handleReportSettings(parsedResult, basePath, params)\n } else if (object.tableName === 'data_processors') {\n handleDataProcessors(parsedResult, basePath, params)\n } else if (object.tableName === 'scheduled_jobs') {\n handleScheduledJobs(parsedResult, basePath, params)\n } else if (object.tableName === 'rest_api') {\n handleRestApi(parsedResult, basePath, params)\n } else if (object.tableName === 'components') {\n handleComponents(parsedResult, basePath, params)\n } else if (object.tableName === 'workers') {\n handleWorkers(parsedResult, basePath, params)\n } else if (object.tableName === 'common_commands') {\n handleCommonCommands(parsedResult, basePath, params)\n } else if (object.tableName === 'print_forms') {\n handlePrintForms(parsedResult, basePath, params)\n } else if (object.tableName === 'common_modules') {\n handleCommonModules(parsedResult, basePath, params)\n updateCommonModulesInitialData(object, filename)\n } else {\n writeInitialData(parsedResult, filename)\n }\n } catch (error) {\n console.error(error)\n }\n },\n\n async updatePredefinedInitialData(object: AppObject): Promise<void> {\n const attributes = Object.keys(object.model.rawAttributes)\n const associationForeignKeys = Object.values(object.model.associations).map((assoc: Association) => assoc.foreignKey)\n const attributesToExclude = attributes.filter((attr) => associationForeignKeys.includes(attr))\n\n try {\n const result = await object.model.findAll({\n order: ['id'],\n where: { predefinedName: { [Op.ne]: null } },\n attributes: { exclude: attributesToExclude },\n })\n\n const strResult = JSON.stringify(result, null, 4)\n const filePath = `src/modules/catalogs/${object.name}/predefined.json`\n\n fs.writeFile(filePath, strResult, function (error) {\n if (error) console.error(error)\n })\n } catch (error) {\n console.error(error)\n }\n },\n\n async updateEnums() {\n const enums = `${process.cwd()}/src/database/initialdata/enums.json`\n const flattenedEnums = `${process.cwd()}/src/modules/enums/index.json`\n\n const rawEnums = JSON.parse(fs.readFileSync(enums, 'utf-8'))\n\n const rebuiltIndex: Record<string, string[]> = {}\n for (const enumItem of rawEnums) {\n const key = enumItem.name\n if (!key) continue\n rebuiltIndex[key] = enumItem.values?.map((v: any) => v.value) || []\n }\n\n let existingIndex: Record<string, string[]> = {}\n if (fs.existsSync(flattenedEnums)) {\n existingIndex = JSON.parse(fs.readFileSync(flattenedEnums, 'utf-8'))\n }\n\n const finalIndex: Record<string, string[]> = {}\n\n for (const [key, values] of Object.entries(rebuiltIndex)) {\n finalIndex[key] = values\n }\n\n fs.writeFileSync(flattenedEnums, JSON.stringify(finalIndex, null, 2), 'utf-8')\n },\n}\n\nasync function updateCommonModulesInitialData(object: ModelStatic<Model<any, any>>, filename: string) {\n const fullResult = await object.findAll({\n attributes: { exclude: ['module'] },\n order: ['id'],\n })\n\n const fullParsedResult: Record<string, any>[] = JSON.parse(JSON.stringify(fullResult))\n\n writeInitialData(fullParsedResult, filename)\n}\n\nfunction writeInitialData(parsedResult: Record<any, any>, filename: string) {\n const srtResult = JSON.stringify(parsedResult, null, 4)\n const filePath = `src/database/initialdata/${filename}.json`\n\n fs.writeFileSync(filePath, srtResult)\n}\n\nfunction handleAppObjects(appObjects: Record<string, any>[], basePath: string, params: Params) {\n for (const appObject of appObjects as Record<string, any>[]) {\n const { module: clientModule, moduleV3: clientModuleV3, ...appObjectMeta } = appObject\n\n const folderName = `${appObjectMeta.type}s/${appObjectMeta.name}`\n const folderPath = `${basePath}/${folderName}`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name || params.oldValue?.type !== params.newValue?.type) {\n const oldFolderName = `${params.oldValue?.type}s/${params.oldValue?.name}`\n const oldFolderPath = `${basePath}/${oldFolderName}`\n\n try {\n fs.renameSync(oldFolderPath, folderPath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n const structPath = `${folderPath}/object.struct.json`\n const struct = JSON.stringify(appObjectMeta, null, 4)\n\n fs.writeFile(structPath, struct, function (error) {\n if (error) console.error(error)\n })\n\n if (params.changeDeletionMark) {\n continue\n }\n\n if (clientModule !== undefined) {\n const clientModulePath = `${folderPath}/client.module.js`\n if (clientModule) {\n fs.writeFile(clientModulePath, `export default ${clientModule}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(clientModulePath)) {\n fs.rmSync(clientModulePath, {\n force: true,\n })\n }\n }\n }\n\n if (clientModuleV3 !== undefined) {\n const clientModuleV3Path = `${folderPath}/client.v3.module.js`\n if (clientModuleV3) {\n fs.writeFile(clientModuleV3Path, `export default ${clientModuleV3}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(clientModuleV3Path)) {\n fs.rmSync(clientModuleV3Path, {\n force: true,\n })\n }\n }\n }\n\n if (Object.prototype.hasOwnProperty.call(params, 'serverModule')) {\n const serverModulePath = `${folderPath}/server.module.js`\n if (params.serverModule) {\n fs.writeFile(serverModulePath, `${params.serverModule}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(serverModulePath)) {\n fs.rmSync(serverModulePath, {\n force: true,\n })\n }\n }\n }\n\n if (Object.prototype.hasOwnProperty.call(params, 'info')) {\n const infoPath = `${folderPath}/object.info.md`\n if (params.info) {\n fs.writeFile(infoPath, `${params.info}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(infoPath)) {\n fs.rmSync(infoPath, {\n force: true,\n })\n }\n }\n }\n }\n}\n\nfunction handleViewSettings(viewSettings: Record<string, any>[], basePath: string, params: Params) {\n for (const viewSetting of viewSettings) {\n const { module: clientModule, moduleV3: clientModuleV3, appObject, worker, ...viewMeta } = viewSetting\n\n let folderName = ''\n if (viewMeta.viewType === 'worker') {\n folderName = `workers/${worker.name}/views/${viewMeta.name}`\n } else {\n folderName = `${appObject.type}s/${appObject.name}/views/${viewMeta.name}`\n }\n\n const folderPath = `${basePath}/${folderName}`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name) {\n let oldFolderName = ''\n if (viewMeta.viewType === 'worker') {\n oldFolderName = `workers/${worker.name}/views/${params.oldValue?.name}`\n } else {\n oldFolderName = `${appObject.type}s/${appObject.name}/views/${params.oldValue?.name}`\n }\n const oldFolderPath = `${basePath}/${oldFolderName}`\n\n try {\n fs.renameSync(oldFolderPath, folderPath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n const struct = JSON.stringify(viewMeta, null, 4)\n\n const structPath = `${folderPath}/view.struct.json`\n\n fs.writeFile(structPath, struct, function (error) {\n if (error) console.error(error)\n })\n\n if (params.changeDeletionMark) {\n continue\n }\n\n const clientModulePath = `${folderPath}/client.module.js`\n if (clientModule) {\n fs.writeFile(clientModulePath, `export default ${clientModule}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(clientModulePath)) {\n fs.rmSync(clientModulePath)\n }\n }\n\n const clientModuleV3Path = `${folderPath}/client.v3.module.js`\n if (clientModuleV3) {\n fs.writeFile(clientModuleV3Path, clientModuleV3, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(clientModuleV3Path)) {\n fs.rmSync(clientModuleV3Path)\n }\n }\n\n if (Object.prototype.hasOwnProperty.call(params, 'serverModule')) {\n const serverModulePath = `${folderPath}/server.module.js`\n if (params.serverModule) {\n fs.writeFile(serverModulePath, `${params.serverModule}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(serverModulePath)) {\n fs.rmSync(serverModulePath, {\n force: true,\n })\n }\n }\n }\n\n if (Object.prototype.hasOwnProperty.call(params, 'info')) {\n const infoPath = `${folderPath}/view.info.md`\n if (params.info) {\n fs.writeFile(infoPath, `${params.info}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(infoPath)) {\n fs.rmSync(infoPath, {\n force: true,\n })\n }\n }\n }\n }\n}\n\nfunction handleReportSettings(reportSettings: Record<string, any>[], basePath: string, params: Params) {\n for (const reportSetting of reportSettings) {\n const { dataQuery, ...reportMeta } = reportSetting\n\n const folderName = `reports/${reportSetting.name}`\n const folderPath = `${basePath}/${folderName}`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name) {\n const oldFolderName = `reports/${params.oldValue?.name}`\n const oldFolderPath = `${basePath}/${oldFolderName}`\n\n try {\n fs.renameSync(oldFolderPath, folderPath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n const struct = JSON.stringify(reportMeta, null, 4)\n const structPath = `${folderPath}/report.struct.json`\n\n fs.writeFile(structPath, struct, function (error) {\n if (error) console.error(error)\n })\n\n if (params.changeDeletionMark) {\n continue\n }\n\n if (dataQuery) {\n const dataQueryPath = `${folderPath}/data.query.sql`\n\n fs.writeFile(dataQueryPath, `${dataQuery}`, function (error) {\n if (error) console.error(error)\n })\n }\n\n const serverModulePath = `${folderPath}/server.module.js`\n if (params.serverModule) {\n fs.writeFile(serverModulePath, `${params.serverModule}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(serverModulePath)) {\n fs.rmSync(serverModulePath, {\n force: true,\n })\n }\n }\n\n if (Object.prototype.hasOwnProperty.call(params, 'info')) {\n const infoPath = `${folderPath}/report.info.md`\n if (params.info) {\n fs.writeFile(infoPath, `${params.info}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(infoPath)) {\n fs.rmSync(infoPath, {\n force: true,\n })\n }\n }\n }\n }\n}\n\nfunction handleDataProcessors(dataProcessors: Record<string, any>[], basePath: string, params: Params) {\n for (const dataProcessor of dataProcessors) {\n const folderName = `dataProcessors/${dataProcessor.name}`\n const folderPath = `${basePath}/${folderName}`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name) {\n const oldFolderName = `dataProcessors/${params.oldValue?.name}`\n const oldFolderPath = `${basePath}/${oldFolderName}`\n\n try {\n fs.renameSync(oldFolderPath, folderPath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n const struct = JSON.stringify(dataProcessor, null, 4)\n const structPath = `${folderPath}/processor.struct.json`\n\n fs.writeFile(structPath, struct, function (error) {\n if (error) console.error(error)\n })\n\n const serverModulePath = `${folderPath}/server.module.js`\n if (params.serverModule) {\n fs.writeFile(serverModulePath, `${params.serverModule}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(serverModulePath)) {\n fs.rmSync(serverModulePath, {\n force: true,\n })\n }\n }\n }\n}\n\nfunction handleScheduledJobs(jobSettings: Record<string, any>[], basePath: string, params: Params) {\n for (const jobSetting of jobSettings) {\n const folderName = `scheduledJobs/${jobSetting.name}`\n const folderPath = `${basePath}/${folderName}`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name) {\n const oldFolderName = `scheduledJobs/${params.oldValue?.name}`\n const oldFolderPath = `${basePath}/${oldFolderName}`\n\n try {\n fs.renameSync(oldFolderPath, folderPath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n const struct = JSON.stringify(jobSetting, null, 4)\n const structPath = `${folderPath}/job.struct.json`\n\n fs.writeFile(structPath, struct, function (error) {\n if (error) console.error(error)\n })\n\n if (params.changeDeletionMark) {\n continue\n }\n\n const serverModulePath = `${folderPath}/server.module.js`\n if (params.serverModule) {\n fs.writeFile(serverModulePath, `${params.serverModule}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(serverModulePath)) {\n fs.rmSync(serverModulePath, {\n force: true,\n })\n }\n }\n\n if (Object.prototype.hasOwnProperty.call(params, 'info')) {\n const infoPath = `${folderPath}/job.info.md`\n if (params.info) {\n fs.writeFile(infoPath, `${params.info}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(infoPath)) {\n fs.rmSync(infoPath, {\n force: true,\n })\n }\n }\n }\n }\n}\n\nfunction handleRestApi(restApiSettings: Record<string, any>[], basePath: string, params: Params) {\n for (const restApiSetting of restApiSettings) {\n const folderName = `restApi/${restApiSetting.name}`\n const folderPath = `${basePath}/${folderName}`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name) {\n const oldFolderName = `restApi/${params.oldValue?.name}`\n const oldFolderPath = `${basePath}/${oldFolderName}`\n\n try {\n fs.renameSync(oldFolderPath, folderPath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n const struct = JSON.stringify(restApiSetting, null, 4)\n const structPath = `${folderPath}/api.struct.json`\n\n fs.writeFile(structPath, struct, function (error) {\n if (error) console.error(error)\n })\n\n if (params.changeDeletionMark) {\n continue\n }\n\n const serverModulePath = `${folderPath}/server.module.js`\n if (params.serverModule) {\n fs.writeFile(serverModulePath, `${params.serverModule}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(serverModulePath)) {\n fs.rmSync(serverModulePath, {\n force: true,\n })\n }\n }\n\n if (Object.prototype.hasOwnProperty.call(params, 'info')) {\n const infoPath = `${folderPath}/api.info.md`\n if (params.info) {\n fs.writeFile(infoPath, `${params.info}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(infoPath)) {\n fs.rmSync(infoPath, {\n force: true,\n })\n }\n }\n }\n }\n}\n\nfunction handleComponents(components: Record<string, any>[], basePath: string, params: Params) {\n for (const component of components) {\n const { module, moduleV3, ...componentMeta } = component\n\n const folderName = `components/${component.name}`\n const folderPath = `${basePath}/${folderName}`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name) {\n const oldFolderName = `components/${params.oldValue?.name}`\n const oldFolderPath = `${basePath}/${oldFolderName}`\n\n try {\n fs.renameSync(oldFolderPath, folderPath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n const struct = JSON.stringify(componentMeta, null, 4)\n const structPath = `${folderPath}/component.struct.json`\n\n fs.writeFile(structPath, struct, function (error) {\n if (error) console.error(error)\n })\n\n if (params.changeDeletionMark) {\n continue\n }\n\n if (module) {\n const modulePath = `${folderPath}/client.module.js`\n\n fs.writeFile(modulePath, `export default ${module}`, function (error) {\n if (error) console.error(error)\n })\n }\n\n if (moduleV3) {\n const modulePathV3 = `${folderPath}/client.v3.module.js`\n\n fs.writeFile(modulePathV3, moduleV3, function (error) {\n if (error) console.error(error)\n })\n }\n\n if (Object.prototype.hasOwnProperty.call(params, 'serverModule')) {\n const serverModulePath = `${folderPath}/server.module.js`\n if (params.serverModule) {\n fs.writeFile(serverModulePath, `${params.serverModule}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(serverModulePath)) {\n fs.rmSync(serverModulePath, {\n force: true,\n })\n }\n }\n }\n }\n}\n\nfunction handleWorkers(workers: Record<string, any>[], basePath: string, params: Params) {\n for (const worker of workers) {\n const { moduleV3, ...workerMeta } = worker\n\n const folderName = `workers/${worker.name}`\n const folderPath = `${basePath}/${folderName}`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name) {\n const oldFolderName = `workers/${params.oldValue?.name}`\n const oldFolderPath = `${basePath}/${oldFolderName}`\n\n try {\n fs.renameSync(oldFolderPath, folderPath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n const struct = JSON.stringify(workerMeta, null, 4)\n const structPath = `${folderPath}/worker.struct.json`\n\n fs.writeFile(structPath, struct, function (error) {\n if (error) console.error(error)\n })\n\n if (params.changeDeletionMark) {\n continue\n }\n\n if (moduleV3) {\n const modulePathV3 = `${folderPath}/client.v3.module.js`\n\n fs.writeFile(modulePathV3, `export default ${moduleV3}`, function (error) {\n if (error) console.error(error)\n })\n }\n\n if (Object.prototype.hasOwnProperty.call(params, 'serverModule')) {\n const serverModulePath = `${folderPath}/server.module.js`\n if (params.serverModule) {\n fs.writeFile(serverModulePath, `${params.serverModule}`, function (error) {\n if (error) console.error(error)\n })\n } else {\n if (fs.existsSync(serverModulePath)) {\n fs.rmSync(serverModulePath, {\n force: true,\n })\n }\n }\n }\n }\n}\n\nfunction handleCommonCommands(components: Record<string, any>[], basePath: string, params: Params) {\n for (const component of components) {\n const { module, moduleV3, ...commandMeta } = component\n\n const folderName = `commonCommands/${component.name}`\n const folderPath = `${basePath}/${folderName}`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name) {\n const oldFolderName = `commonCommands/${params.oldValue?.name}`\n const oldFolderPath = `${basePath}/${oldFolderName}`\n\n try {\n fs.renameSync(oldFolderPath, folderPath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n const struct = JSON.stringify(commandMeta, null, 4)\n const structPath = `${folderPath}/command.struct.json`\n\n fs.writeFile(structPath, struct, function (error) {\n if (error) console.error(error)\n })\n\n if (params.changeDeletionMark) {\n continue\n }\n\n if (module) {\n const modulePath = `${folderPath}/client.module.js`\n\n fs.writeFile(modulePath, `${module}`, function (error) {\n if (error) console.error(error)\n })\n }\n\n if (moduleV3) {\n const modulePathV3 = `${folderPath}/client.v3.module.js`\n\n fs.writeFile(modulePathV3, moduleV3, function (error) {\n if (error) console.error(error)\n })\n }\n }\n}\n\nfunction handlePrintForms(printForms: Record<string, any>[], basePath: string, params: Params) {\n for (const printForm of printForms) {\n const { module: clientModule, moduleV3: clientModuleV3, serverModule, appObject, ...itemMeta } = printForm\n\n const folderName = `${appObject.type}s/${appObject.name}/printForms/${itemMeta.name}`\n const folderPath = `${basePath}/${folderName}`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name) {\n const oldFolderName = `${appObject.type}s/${appObject.name}/printForms/${params.oldValue?.name}`\n const oldFolderPath = `${basePath}/${oldFolderName}`\n\n try {\n fs.renameSync(oldFolderPath, folderPath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n const struct = JSON.stringify(itemMeta, null, 4)\n\n const structPath = `${folderPath}/form.struct.json`\n\n fs.writeFile(structPath, struct, function (error) {\n if (error) console.error(error)\n })\n\n if (params.changeDeletionMark) {\n continue\n }\n\n if (clientModule) {\n const clientModulePath = `${folderPath}/client.module.js`\n\n fs.writeFile(clientModulePath, `export default ${clientModule}`, function (error) {\n if (error) console.error(error)\n })\n }\n\n if (clientModuleV3) {\n const clientModulePathV3 = `${folderPath}/client.v3.module.js`\n\n fs.writeFile(clientModulePathV3, `export default ${clientModuleV3}`, function (error) {\n if (error) console.error(error)\n })\n }\n\n if (serverModule) {\n const serverModulePath = `${folderPath}/server.module.js`\n\n fs.writeFile(serverModulePath, `${serverModule}`, function (error) {\n if (error) console.error(error)\n })\n }\n }\n}\n\nfunction handleCommonModules(commonModules: Record<string, any>[], basePath: string, params: Params) {\n const folderName = `commonModules`\n const folderPath = `${basePath}/${folderName}`\n\n if (!fs.existsSync(folderPath)) {\n fs.mkdirSync(folderPath, { recursive: true })\n }\n\n for (const commonModule of commonModules) {\n const modulePath = `${basePath}/commonModules/${commonModule.name}.js`\n\n if (params.event === 'update') {\n if (params.oldValue?.name !== params.newValue?.name) {\n const oldFileName = `commonModules/${params.oldValue?.name}.js`\n const oldFilePath = `${basePath}/${oldFileName}`\n\n try {\n fs.renameSync(oldFilePath, modulePath)\n } catch (error) {\n console.error(error)\n }\n }\n }\n\n if (params.module) {\n fs.writeFile(modulePath, `${params.module}`, function (error) {\n if (error) console.error(error)\n })\n }\n }\n}\n\nfunction isStructuralObject(tableName: string) {\n const structuralObjects = [\n 'app_objects',\n 'view_settings',\n 'report_settings',\n 'data_processors',\n 'scheduled_jobs',\n 'rest_api',\n 'workers',\n 'components',\n 'print_forms',\n 'common_modules',\n ]\n\n return structuralObjects.includes(tableName)\n}\n\nfunction deleteInitialData(tableName: string, deletedObject: Record<string, any>, basePath: string) {\n let folderName: string | undefined\n\n switch (tableName) {\n case 'app_objects':\n folderName = `${deletedObject.type}s/${deletedObject.name}`\n break\n case 'view_settings':\n folderName = `${deletedObject.appObject.type}s/${deletedObject.appObject.name}/views/${deletedObject.name}`\n break\n case 'workers':\n folderName = `workers/${deletedObject.name}`\n break\n case 'report_settings':\n folderName = `reports/${deletedObject.name}`\n break\n case 'data_processors':\n folderName = `dataProcessors/${deletedObject.name}`\n break\n case 'scheduled_jobs':\n folderName = `scheduledJobs/${deletedObject.name}`\n break\n case 'components':\n folderName = `components/${deletedObject.name}`\n break\n case 'common_commands':\n folderName = `commonCommands/${deletedObject.name}`\n break\n case 'rest_api':\n folderName = `restApi/${deletedObject.name}`\n break\n case 'print_forms':\n folderName = `${deletedObject.appObject.type}s/${deletedObject.appObject.name}/printForms/${deletedObject.name}`\n break\n case 'common_modules':\n folderName = `commonModules/${deletedObject.name}.js`\n break\n }\n\n if (folderName) {\n const folderPath = `${basePath}/${folderName}`\n\n if (fs.existsSync(folderPath)) {\n fs.rmSync(folderPath, {\n force: true,\n recursive: true,\n })\n }\n\n return\n }\n}\n","import logger from '@/core/services/logger.service'\n\ntype SmsSender = (phone: string, body: string, force?: boolean) => Promise<any>\n\nlet customSmsSender: SmsSender | null = null\n\nexport default {\n registerSender(sender: SmsSender): void {\n customSmsSender = sender\n },\n\n async sendSms(phone: string, body: string, force: boolean = false): Promise<any> {\n if (customSmsSender) {\n return customSmsSender(phone, body, force)\n }\n\n logger.warn('SMS service not configured — no sender registered. Call smsService.registerSender() at startup.')\n throw new Error('SMS service not configured')\n },\n}\n","import { Op, WhereOptions } from 'sequelize'\nimport sequelize from '@/database/dbConnection'\nimport commonService from '@/core/services/common.service'\nimport { AppObject } from '@/src/types'\nimport { Request } from 'express'\n\ninterface UserAccessRole {\n userRoleId: string\n canRead: boolean\n canModify: boolean\n}\n\ninterface RoleGroupSettingFilter {\n parentId: string[]\n userRoleId?: string\n canRead?: boolean\n canModify?: boolean\n}\n\ninterface Restrictions {\n use: boolean\n users: string[]\n}\n\nexport default {\n async getUserAccessRoles(userId: string, canRead: boolean = false, canModify: boolean = false): Promise<UserAccessRole[]> {\n return await sequelize.models.RoleGroupUser.findAll({ where: { userId } })\n .then(async (result: Record<any, any>[]) => {\n return result.map((el) => {\n return el.parentId\n })\n })\n .then(async (roleGroups) => {\n const userDepartments = await getUserDepartments(userId)\n\n return await sequelize.models.RoleGroupDepartment.findAll({ where: { departmentId: userDepartments } }).then((result: Record<any, any>[]) => {\n return roleGroups.concat(\n result.map((el) => {\n return el.parentId\n })\n )\n })\n })\n .then(async (parentId) => {\n const filter: WhereOptions<RoleGroupSettingFilter> = { parentId }\n\n if (canModify === true) {\n filter.canModify = true\n } else if (canRead === true) {\n filter.canRead = true\n }\n\n return await sequelize.models.RoleGroupSetting.findAll({\n where: filter,\n })\n .then((settResult: Record<any, any>[]) => {\n const accessRoles: UserAccessRole[] = []\n\n for (const role of settResult) {\n const i = accessRoles.findIndex((el) => el.userRoleId === role.id)\n\n if (i > -1) {\n if (role.canRead !== accessRoles[i].canRead && role.canRead === true) {\n accessRoles[i].canRead = role.canRead\n }\n\n if (role.canModify !== accessRoles[i].canModify && role.canModify === true) {\n accessRoles[i].canModify = role.canModify\n }\n } else {\n accessRoles.push({ userRoleId: role.userRoleId, canRead: role.canRead, canModify: role.canModify })\n }\n }\n\n return accessRoles\n })\n .catch((error) => {\n throw error\n })\n })\n .catch((error) => {\n throw error\n })\n },\n\n async getUserAccessRoleId(userId: string, canRead: boolean = false, canModify: boolean = false) {\n return await sequelize.models.RoleGroupUser.findAll({ where: { userId } })\n .then(async (result: Record<any, any>[]) => {\n const parentId: string[] = result.map((el) => {\n return el.parentId\n })\n\n const filter: WhereOptions<RoleGroupSettingFilter> = { parentId }\n\n if (canModify === true) {\n filter.canModify = true\n } else if (canRead === true) {\n filter.canRead = true\n }\n\n return await sequelize.models.RoleGroupSetting.findAll({ where: filter })\n .then((settResult: Record<any, any>[]) => {\n result = settResult.map((el) => {\n return el.userRoleId\n })\n\n return result\n })\n .catch((error) => {\n throw error\n })\n })\n .catch((error) => {\n throw error\n })\n },\n\n async getUserRoleByKey(roleKey: string): Promise<Record<any, any> | null> {\n return await sequelize.models.UserRole.findOne({ where: { key: roleKey } })\n .then(async (result: Record<any, any> | null) => {\n return result\n })\n .catch((error) => {\n throw error\n })\n },\n\n async getUserRoleById(roleId: string): Promise<Record<any, any> | null> {\n return await sequelize.models.UserRole.findByPk(roleId)\n .then(async (result: Record<any, any> | null) => {\n return result\n })\n .catch((error) => {\n throw error\n })\n },\n\n async checkUserAccess(userId: string, role: Record<string, any>, canRead: boolean = false, canModify: boolean = false) {\n const userRole = role?.id ? await this.getUserRoleById(role.id) : await this.getUserRoleByKey(role.key)\n\n if (!userRole) {\n return new Error(`Role with key ${role} does not exist`)\n }\n\n return await sequelize.models.RoleGroupUser.findAll({ where: { userId } })\n .then(async (result: Record<any, any>[]) => {\n return result.map((el) => {\n return el.parentId\n })\n })\n .then(async (roleGroups) => {\n const userDepartments = await getUserDepartments(userId)\n\n return await sequelize.models.RoleGroupDepartment.findAll({ where: { departmentId: userDepartments } }).then((result: Record<any, any>[]) => {\n return roleGroups.concat(\n result.map((el) => {\n return el.parentId\n })\n )\n })\n })\n .then(async (parentId) => {\n const filter: WhereOptions<RoleGroupSettingFilter> = { parentId, userRoleId: userRole.id }\n\n if (canModify === true) {\n filter.canModify = true\n } else if (canRead === true) {\n filter.canRead = true\n }\n\n return await sequelize.models.RoleGroupSetting.findAll({\n where: filter,\n })\n .then((settResult) => {\n if (settResult && settResult.length > 0) {\n return true\n }\n return false\n })\n .catch((error) => {\n throw error\n })\n })\n .catch((error) => {\n throw error\n })\n },\n\n async getAllSubDepartments(department: Record<string, any>, include: Record<string, any>) {\n const subDepartmentsArray: Record<any, any>[] = []\n const children: Record<any, any>[] = await sequelize.models.Department.findAll({ where: { groupId: department.id }, include })\n\n for (const child of children) {\n subDepartmentsArray.push(child)\n const grandchildren = await this.getAllSubDepartments(child, include)\n for (const grandchild of grandchildren) {\n subDepartmentsArray.push(grandchild)\n }\n }\n\n return subDepartmentsArray\n },\n\n async accessRestrictions(req: Request, object: AppObject) {\n const restrictions: Restrictions = {\n use: false,\n users: [],\n }\n\n const existRestrictions: Record<any, any> | null = await sequelize.models.AccessRestriction.findOne({ where: { objectType: object.name } })\n\n if (existRestrictions) {\n if (existRestrictions.useRestriction === true || existRestrictions.useDepartmentRestriction === true) {\n restrictions.use = true\n restrictions.users.push(req.user?.id)\n\n if (existRestrictions.useDepartmentRestriction === true) {\n const include = commonService.prepareIncludes(sequelize.models.Department, { withTableParts: true })\n\n const departments: Record<any, any>[] = await sequelize.models.Department.findAll({\n where: { [Op.or]: [{ leaderId: req.user?.id }, { deputyId: req.user?.id }] },\n include,\n })\n\n const subDepartmentsArray: Record<any, any>[] = []\n for (const department of departments) {\n const subDepartments = await this.getAllSubDepartments(department, include)\n for (const subDepartment of subDepartments) {\n subDepartmentsArray.push(subDepartment)\n }\n }\n for (const subDepartment of subDepartmentsArray) {\n departments.push(subDepartment)\n }\n\n if (departments) {\n for (const department of departments) {\n for (const row of department.employees) {\n restrictions.users.push(row.employeeId)\n }\n }\n }\n }\n }\n }\n\n return restrictions\n },\n\n async getUserAccessNavigation(userId: string) {\n return await sequelize.models.RoleGroupUser.findAll({ where: { userId } })\n .then(async (result: Record<any, any>[]) => {\n return result.map((el) => {\n return el.parentId\n })\n })\n .then(async (roleGroups) => {\n const userDepartments = await getUserDepartments(userId)\n\n return await sequelize.models.RoleGroupDepartment.findAll({ where: { departmentId: userDepartments } }).then((result: Record<any, any>[]) => {\n return roleGroups.concat(\n result.map((el) => {\n return el.parentId\n })\n )\n })\n })\n .then(async (parentId) => {\n return await sequelize.models.RoleGroupNavigation.findAll({ where: { parentId } })\n .then((result: Record<any, any>[]) => {\n const hiddenNavigation = result.map((el) => el.navigationId)\n return [...new Set(hiddenNavigation)]\n })\n .catch((error) => {\n throw error\n })\n })\n .catch((error) => {\n throw error\n })\n },\n}\n\nasync function getUserDepartments(userId: string): Promise<string[]> {\n const departments: string[] = []\n\n await sequelize.models.Department.findAll({ where: { [Op.or]: [{ leaderId: userId }, { deputyId: userId }] } })\n .then((result: Record<any, any>[]) => {\n for (const department of result) {\n departments.push(department.id)\n }\n })\n .catch((error) => {\n throw error\n })\n\n await sequelize.models.DepartmentEmployee.findAll({ where: { employeeId: userId } })\n .then((result: Record<any, any>[]) => {\n for (const department of result) {\n departments.push(department.parentId)\n }\n })\n .catch((error) => {\n throw error\n })\n\n return departments\n}\n","import { Op } from 'sequelize'\nimport sequelize from '@/database/dbConnection'\nimport { Request } from 'express'\n\nexport default {\n async getUserExecutorRoles(executorId: string) {\n // Get the executor roles for the current user\n // If the user has full rights, return an empty array\n // If the user does not have full rights, return the executor roles they belong to\n let executorRoles = await sequelize.models.TaskExecutor.findAll({\n where: { executorId },\n attributes: ['parentId'],\n }).catch((error) => {\n console.error(error)\n return []\n })\n\n if (executorRoles) {\n executorRoles = JSON.parse(JSON.stringify(executorRoles))\n\n return executorRoles\n } else {\n return []\n }\n },\n\n async getVendorsAndCustomersFilter(counterparies: string[]): Promise<string[]> {\n let vendorsAndCustomers: string[] = []\n\n if (counterparies) {\n const userVendorsAndCustomers: Record<string, any>[] = await sequelize.models.VendorsAndCustomer.findAll({\n where: { counterpartyId: { [Op.in]: counterparies } },\n })\n\n if (userVendorsAndCustomers) {\n for (let item of userVendorsAndCustomers) {\n vendorsAndCustomers.push(item.id)\n }\n }\n }\n\n return vendorsAndCustomers\n },\n\n async getCustomerFilter(req: Request) {\n let counterparties: string[] = []\n let fullAccess = false\n\n if (req.user) {\n fullAccess = req.user.useCustomerAccess !== true\n\n const userId = req.user.id\n\n const userCounterparties: Record<any, any>[] = await sequelize.models.UserCustomer.findAll({ where: { parentId: userId } })\n\n if (userCounterparties) {\n for (let counterparty of userCounterparties) {\n counterparties.push(counterparty.customerId)\n }\n }\n }\n\n return {\n fullAccess,\n counterparties,\n }\n },\n\n async getForwarderFilter(req: Request) {\n // Get the forwarder filter for the current user\n // If the user has full rights, return an empty array\n // If the user does not have full rights, return the forwarder they belong to\n let fullAccess = false\n let forwarder: string | undefined\n\n if (req.user) {\n fullAccess = req.user.externalUser !== true\n\n try {\n const forwarderId = req.user.forwarderId\n\n if (forwarderId) {\n const forwarderData = await sequelize.models.VendorsAndCustomer.findAll({\n where: { id: forwarderId },\n })\n forwarder = forwarderData[0]?.dataValues?.id\n }\n } catch (err) {\n console.error('Forwarder lookup failed:', err)\n }\n }\n\n return {\n fullAccess,\n forwarder,\n }\n },\n\n async getRoleGroups(req: Request): Promise<string[]> {\n // Get the role groups for the current user\n // If the user has full rights, return an empty array\n // If the user does not have full rights, return the role groups they belong to\n let roleGroups: string[] = []\n\n if (req.user) {\n if (req.user.fullRights !== true) {\n const currentUserId = req.user.id\n const roleGroupsUsersResult: Record<string, any>[] = await sequelize.models.RoleGroupUser.findAll({\n where: { userId: currentUserId },\n attributes: ['parentId'],\n })\n roleGroups = roleGroupsUsersResult.map((el) => el.parentId)\n }\n }\n\n return roleGroups\n },\n}\n","import express, { NextFunction, Request, Response } from 'express'\nimport { QueryTypes } from 'sequelize'\nimport fs from 'fs'\nimport { StatusCodes } from 'http-status-codes'\nimport accessRights from '@/middleware/accessRights'\nimport fileUpload from '@/middleware/fileUpload'\nimport sequelize from '@/database/dbConnection'\nimport logger from '@/core/services/logger.service'\n\nconst router = express.Router()\n\nexport default {\n async initRoutes() {\n const queryText =\n 'SELECT \\\n * \\\n FROM \\\n workers \\\n WHERE \\\n workers.\"markedToDelete\" = false'\n\n const workers: Record<string, any>[] = await sequelize.query(queryText, { type: QueryTypes.SELECT })\n\n for (const worker of workers) {\n if (!worker.api) {\n continue\n }\n\n let module: any\n\n const modulePath = `workers/${worker.name}/server.module.js`\n\n const fullPath = `${process.cwd()}/src/modules/${modulePath}`\n if (fs.existsSync(fullPath)) {\n module = __non_webpack_require__(fullPath)\n }\n\n if (!module) {\n continue\n }\n\n const apiMethods = JSON.parse(worker.api)\n\n for (const method of apiMethods) {\n if (!module[method.controller] || typeof module[method.controller] !== 'function') {\n logger.error('Worker controller is not exist: ', { meta: { name: worker.name, controller: method.controller } })\n continue\n }\n\n router[method.httpMethod.toLowerCase()](\n `/api/${worker.path}/${method.path}`,\n setAccess(method.httpMethod, worker),\n (req: Request, res: Response, next: NextFunction) => {\n const contentType = req.headers['content-type']\n if (contentType && contentType.includes('multipart/form-data')) {\n return fileUpload.array('files')(req, res, (err) => {\n if (err) {\n return res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ message: `File upload error: ${err}` })\n }\n next()\n })\n } else {\n next()\n }\n },\n module[method.controller]\n )\n }\n }\n\n return router\n },\n}\n\nfunction setAccess(method: Record<string, any> = {}, restApi: Record<string, any>) {\n let accessMethod: any\n\n const accesRole: Record<string, any> = {}\n\n if (method.userRole) {\n accesRole.id = method.userRole\n } else if (restApi.accessRoleId) {\n accesRole.id = restApi.accessRoleId\n } else {\n accesRole.key = restApi.path\n }\n\n if (method.accessLevel) {\n accessMethod =\n method.accessLevel === 'CAN_REED'\n ? accessRights.canRead(accesRole)\n : method.accessLevel === 'CAN_MODIFY'\n ? accessRights.canModify(accesRole)\n : method.accessLevel === 'IS_AUTH'\n ? accessRights.isAuth\n : accessRights.isFullRights\n } else {\n accessMethod = method.httpMethod === 'GET' ? accessRights.canRead(accesRole) : accessRights.canModify(accesRole)\n }\n\n return accessMethod\n}\n","import { StatusCodes } from 'http-status-codes'\nimport logger from '@/core/services/logger.service'\nimport smsService from '@/core/services/sms.service'\n\nimport { Request, Response, NextFunction } from 'express'\n\nexport default {\n async sendSMS(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const { dest, smsText, delivNotifRequest } = req.body\n const smsRes = await smsService.sendSms(dest, smsText, delivNotifRequest)\n res.status(StatusCodes.OK).send(smsRes)\n } catch (error) {\n logger.error('Error while trying to send sms', { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n }\n },\n}\n","import express from 'express'\nimport accessRights from '@/middleware/accessRights'\nimport controllers from '../controllers'\n\nconst router = express.Router()\n\nrouter.post('/send_sms', accessRights.canRead({ key: 'sendsms' }), controllers.sendSMS)\n\nexport default router\n","import 'dotenv/config'\nimport { Dialect } from 'sequelize/types'\n\ninterface DatabaseConfig {\n dbName: string\n dbUser: string\n dbPassword: string\n dbDialect: Dialect\n dbHost: string\n dbPort: number\n}\n\nconst databaseConfig: DatabaseConfig = {\n dbName: process.env.DB_NAME || '',\n dbUser: process.env.DB_USER || '',\n dbPassword: process.env.DB_PASSWORD || '',\n // Default to 'postgres' if DB_DIALECT is not set\n // or if it's not a valid dialect\n dbDialect: process.env.DB_DIALECT ? (process.env.DB_DIALECT as Dialect) : 'postgres',\n // Default to 'localhost' if DB_HOST is not set\n // or if it's not a valid host\n dbHost: process.env.DB_HOST ? process.env.DB_HOST : 'localhost',\n // Default to 5432 if DB_PORT is not set\n // or if it's not a valid number\n dbPort: process.env.DB_PORT ? parseInt(process.env.DB_PORT, 10) : 5432,\n}\n\nexport default databaseConfig\n","import { Sequelize } from 'sequelize'\r\nimport { v4 as uuidv4 } from 'uuid'\r\n\r\nimport dbParams from './config'\r\n\r\nconst sequelize = new Sequelize(dbParams.dbName, dbParams.dbUser, dbParams.dbPassword, {\r\n dialect: dbParams.dbDialect,\r\n host: dbParams.dbHost,\r\n port: dbParams.dbPort,\r\n logging: false,\r\n pool: {\r\n max: 150, // Max connections in the pool\r\n },\r\n define: {\r\n hooks: {\r\n // Automatically generate UUIDs for primary keys\r\n // before creating a new record\r\n beforeValidate: (record, options) => {\r\n if (record.dataValues.id === null) {\r\n record.dataValues.id = uuidv4()\r\n }\r\n },\r\n },\r\n },\r\n})\r\n\r\nexport default sequelize\r\n","import path from 'path'\nimport express, { Application, Request, Response, NextFunction } from 'express'\nimport compression from 'compression'\nimport cookieParser from 'cookie-parser'\nimport helmet from 'helmet'\nimport cors, { CorsOptions } from 'cors'\nimport { v4 as uuidv4 } from 'uuid'\nimport passport from 'passport'\nimport session, { SessionOptions } from 'express-session'\nimport connectSessionSequelize from 'connect-session-sequelize'\nimport rateLimit from 'express-rate-limit'\nimport setupLogger from './core/services/accessLogger.service'\nimport dynamicRoutes from './routes/dynamicRoutes'\nimport staticRoutes from './routes/staticRoutes'\nimport scheduledJobService from './core/services/scheduledJob.service'\nimport passportAuth from './core/auth/passportAuth'\nimport eventService from './core/services/event.service'\nimport sequelize from './database/dbConnection'\n\nconst SequelizeStore = connectSessionSequelize(session.Store)\n\nprocess.on('unhandledRejection', (reason) => console.error(reason))\nprocess.on('uncaughtException', (reason) => console.error(reason))\nprocess.on('warning', (e) => console.warn(e.stack))\n\nconst app: Application = express()\n\n// Configure Request Logger\napp.use(express.json({ limit: '100mb' }))\napp.use(express.urlencoded({ extended: false }))\napp.use(cookieParser())\n\nsetupLogger(app)\n\napp.use(helmet())\napp.use(compression())\napp.use(express.static(path.join(__dirname, '../public')))\n\n// Configure CORS\n\nconst allowOrigin: string = process.env.ALLOW_ORIGIN || ''\n\nconst corsOptions: CorsOptions = {\n origin: [...allowOrigin.split(','), 'app://.'],\n methods: ['OPTIONS', 'GET', 'POST', 'PUT', 'PATCH', 'DELETE'],\n allowedHeaders: [\n 'Content-Type',\n 'Authorization',\n 'x-access-token',\n 'x-api-key',\n 'device_uuid',\n 'Access-Control-Allow-Origin',\n 'Access-Control-Allow-Credentials',\n 'x-client-version',\n ],\n credentials: true,\n}\n\napp.use(cors(corsOptions))\n\nimport './core/auth/session'\n\n// Function to extend default session fields\nfunction extendDefaultFields(defaults: any, session: any) {\n const userId = session?.passport?.user\n\n return {\n id: uuidv4(),\n data: defaults.data,\n expires: defaults.expires,\n userId: userId,\n licNumber: session?.license?.number || null,\n clientType: session?.clientType || null,\n }\n}\n\n// Configure sessions\nconst sessionOptions: SessionOptions = {\n genid: () => uuidv4(),\n store: new SequelizeStore({\n db: sequelize,\n table: 'Session',\n extendDefaultFields: extendDefaultFields,\n }),\n secret: process.env.SESSION_SECRET_KEY as string,\n resave: false,\n rolling: true,\n saveUninitialized: false,\n cookie: {\n httpOnly: true,\n maxAge: Number(process.env.SESSION_MAX_AGE || process.env.CORE_SESSION_MAX_AGE),\n secure: false,\n },\n}\n\napp.use(session(sessionOptions))\n\n// Configure Request Rate Limiter\nconst limiter = rateLimit({\n windowMs: 1 * 60 * 1000, // 1 minute\n max: 100000, // limit each IP to 100000 requests per windowMs\n statusCode: 429,\n})\n\napp.use(limiter)\n\n// Initialize routes\nasync function initializeRoutes(app: Application) {\n try {\n await dynamicRoutes(app)\n staticRoutes(app)\n } catch (error) {\n console.error(error)\n } finally {\n scheduledJobService.init(app.locals.objects)\n }\n}\n\ninitializeRoutes(app)\n\n// Configure authentication\npassportAuth.initializePassport(passport)\n\napp.use(passport.initialize())\napp.use(passport.session())\n\n// Initialize event service\neventService.init(app)\n\n// view engine setup\napp.set('views', path.join(__dirname, 'views'))\napp.set('view engine', 'pug')\n\n// error handler\napp.use((err: Error, req: Request, res: Response, next: NextFunction) => {\n console.error(err)\n res.locals.message = err.message\n res.locals.error = req.app.get('env') === 'development' ? err : {}\n res.status((err as any).status || 500)\n res.render('error')\n})\n\nimport accessRights from './middleware/accessRights'\nimport logger from './core/services/logger.service'\nimport commonService from './core/services/common.service'\nimport controllerService from './core/services/controller.service'\nimport appService from './core/services/app.service'\nimport defineObjects from './core/objects/controllers'\nimport cryptoGen from './core/auth/cryptoGen'\nimport documentService from './core/services/document.service'\nimport seederService from './core/services/seeder.service'\nimport registerService from './core/services/register.service'\nimport migrationsService from './core/services/migration.service'\nimport smsService from './core/services/sms.service'\n\nexport {\n app,\n sequelize,\n accessRights,\n commonService,\n controllerService,\n documentService,\n appService,\n logger,\n defineObjects,\n cryptoGen,\n seederService,\n registerService,\n eventService,\n migrationsService,\n smsService,\n}\n","import userAccessService from '@/core/services/userAccess.service'\nimport { NextFunction, Request, Response } from 'express'\nimport { StatusCodes } from 'http-status-codes'\nimport logger from '@/core/services/logger.service'\n\nexport default {\n isAuth(req: Request, res: Response, next: NextFunction) {\n if (!req.user) {\n const message = 'Error in accessRight.isAuth. User not authenticated'\n logger.error(message)\n return res.status(StatusCodes.FORBIDDEN).send({ message })\n }\n\n next()\n },\n\n isFullRights(req: Request, res: Response, next: NextFunction) {\n if (!req.user) {\n const message = 'Error in accessRight.canRead. User not authenticated'\n logger.error(message)\n return res.status(StatusCodes.FORBIDDEN).send({ message })\n }\n\n if (req.user.fullRights !== true) {\n const message = 'Error in accessRight.isFullRights. User not has full rights'\n logger.error(message)\n return res.status(StatusCodes.FORBIDDEN).send({ message })\n }\n\n next()\n },\n\n canRead: (role: Record<string, any>) => {\n return async (req: Request, res: Response, next: NextFunction) => {\n if (!req.user) {\n const message = 'Error in accessRight.canRead. User not authenticated'\n logger.error(message)\n return res.status(StatusCodes.FORBIDDEN).send({ message })\n }\n\n if (req.user.fullRights === true) {\n next()\n return\n }\n\n const userId = req.user?.id\n\n if (userId) {\n await userAccessService\n .checkUserAccess(userId, role, true)\n .then((result) => {\n if (result === true) {\n next()\n } else {\n const message = `User ${req.user?.name} not have access to read. Role ${role}`\n logger.error('Error in accessRight.canRead', { meta: message })\n res.status(StatusCodes.FORBIDDEN).send({ message: message })\n }\n })\n .catch((error) => {\n logger.error('Error in accessRight.canRead', { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n })\n } else {\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'User not authorized' })\n }\n }\n },\n canModify: (role: Record<string, any>) => {\n return async (req: Request, res: Response, next: NextFunction) => {\n if (req.user?.fullRights === true) {\n next()\n return\n }\n\n const userId = req.user?.id\n\n if (userId) {\n await userAccessService\n .checkUserAccess(userId, role, true, true)\n .then((result) => {\n if (result === true) {\n next()\n } else {\n const message = `User ${req.user?.name} not have access to modify. Role ${role}`\n logger.error('Error in accessRight.canModify', { meta: message })\n res.status(StatusCodes.FORBIDDEN).send({ message: message })\n }\n })\n .catch((error) => {\n logger.error('Error in accessRight.canModify', { meta: error })\n res.status(StatusCodes.INTERNAL_SERVER_ERROR).send({ message: error })\n })\n } else {\n res.status(StatusCodes.UNAUTHORIZED).send({ message: 'User not authorized' })\n }\n }\n },\n}\n","import multer from 'multer'\nimport moment from 'moment'\nimport fs from 'fs'\nimport { Request } from 'express'\n\nconst storage = multer.diskStorage({\n destination: function (req: Request, file, cb) {\n const folder = getFolder(req)\n cb(null, folder)\n },\n\n filename: function (req: Request, file, cb) {\n file.originalname = Buffer.from(file.originalname, 'latin1').toString('utf8')\n const fileName = getFileName(file)\n cb(null, fileName)\n },\n})\n\nfunction getFileName(file: Record<string, any>): string {\n let fileName: string = file.originalname\n let fileExt: string = ''\n\n const re: RegExp = /(?:\\.([^.]+))?$/\n const fileNameParts = re.exec(file.originalname)\n\n if (!fileNameParts) {\n return `file_${Date.now()}${fileExt}`\n }\n\n fileExt = fileNameParts[0]\n fileName = String(file.originalname).replace(fileExt, '')\n\n const reg: RegExp = /[^a-zA-Z0-9-_]/g\n fileName = String(fileName).replace(reg, '_')\n\n fileName = fileName.toLowerCase()\n\n return `${fileName}_${Date.now()}${fileExt}`\n}\n\nfunction getFolder(req: Request): string {\n const dateFolder = moment().format('DD_MM_YYYY')\n const fullFolder = `${process.env.DESTINATION}/common/${dateFolder}`\n\n if (!fs.existsSync(fullFolder)) {\n fs.mkdirSync(fullFolder, { recursive: true })\n }\n\n return fullFolder\n}\n\nexport default multer({\n storage: storage,\n limits: {\n fileSize: 1024 * 1024 * 100, // 100Mb file limit\n },\n})\n","import routes from '@/core/objects/routes'\nimport restApiService from '@/core/services/restApi.service'\nimport workersService from '@/core/services/workers.service'\nimport { Application, NextFunction, Request, Response } from 'express'\n\nexport default async (app: Application) => {\n const { router, objects } = await routes()\n\n // Middleware for adding objects to req\n app.use((req: Request, res: Response, next: NextFunction) => {\n req.objects = objects\n next()\n })\n\n // Set objects to app locals\n app.locals.objects = objects\n\n // Initialize dynamic routes\n app.use(router)\n\n // Initialize rest api routes\n const restApiRoutes = await restApiService.initRoutes()\n app.use(restApiRoutes)\n\n // Initialize workers routes\n const workersRoutes = await workersService.initRoutes()\n app.use(workersRoutes)\n\n return { router, objects }\n}\n","import express from 'express'\nimport passportAuth from '@/core/auth/passportAuth'\n\nconst router = express.Router()\n\n/* GET home page. */\nrouter.get('/', function (req, res, next) {\n res.render('index', { title: 'SYNERGY Server' })\n})\n\nrouter.use(passportAuth.isAuthenticated)\n\nexport default router\n","import indexRoute from './index'\nimport accessLogs from '@/core/accessLogs/routes'\nimport auth from '@/core/auth/routes'\nimport appRouter from '@/core/app/routes'\nimport reports from '@/core/reports/routes'\nimport sms from '@/core/sms/routes'\n\nimport { Application } from 'express'\n\nexport default (app: Application) => {\n app.use(auth)\n app.use(indexRoute)\n app.use(accessLogs)\n app.use(reports)\n app.use(appRouter)\n app.use(sms)\n}\n","module.exports = require(\"base64-js\");","module.exports = require(\"bcrypt\");","module.exports = require(\"compression\");","module.exports = require(\"connect-session-sequelize\");","module.exports = require(\"cookie-parser\");","module.exports = require(\"cors\");","module.exports = require(\"crypto\");","module.exports = require(\"crypto-js\");","module.exports = require(\"dotenv/config\");","module.exports = require(\"events\");","module.exports = require(\"exceljs\");","module.exports = require(\"express\");","module.exports = require(\"express-rate-limit\");","module.exports = require(\"express-session\");","module.exports = require(\"fs\");","module.exports = require(\"helmet\");","module.exports = require(\"http-status-codes\");","module.exports = require(\"ieee754\");","module.exports = require(\"jsonwebtoken\");","module.exports = require(\"lodash\");","module.exports = require(\"moment\");","module.exports = require(\"morgan\");","module.exports = require(\"multer\");","module.exports = require(\"node-cron\");","module.exports = require(\"node-sql-parser\");","module.exports = require(\"nodemailer\");","module.exports = require(\"passport\");","module.exports = require(\"passport-local\");","module.exports = require(\"path\");","module.exports = require(\"pdfmake\");","module.exports = require(\"sequelize\");","module.exports = require(\"ssf\");","module.exports = require(\"terser\");","module.exports = require(\"uuid\");","module.exports = require(\"winston\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/main.ts\");\n",""],"names":[],"sourceRoot":""}