kythia-core 26.0.2 → 26.0.4

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.
Files changed (82) hide show
  1. package/dist/Kythia.d.ts.map +1 -1
  2. package/dist/Kythia.js +1 -1
  3. package/dist/Kythia.js.map +1 -1
  4. package/dist/cli/Command.js +1 -1
  5. package/dist/cli/commands/AboutCommand.js +1 -1
  6. package/dist/cli/commands/CacheClearCommand.js +1 -1
  7. package/dist/cli/commands/DIGenerateCommand.js +1 -1
  8. package/dist/cli/commands/DocsGenerateCommand.js +1 -1
  9. package/dist/cli/commands/LangCheckCommand.js +1 -1
  10. package/dist/cli/commands/LangSyncCommand.js +1 -1
  11. package/dist/cli/commands/LangTranslateCommand.js +1 -1
  12. package/dist/cli/commands/MakeMigrationCommand.js +1 -1
  13. package/dist/cli/commands/MakeModelCommand.js +1 -1
  14. package/dist/cli/commands/MakeSeederCommand.js +1 -1
  15. package/dist/cli/commands/MigrateCommand.js +1 -1
  16. package/dist/cli/commands/NamespaceCommand.js +1 -1
  17. package/dist/cli/commands/SeedCommand.js +1 -1
  18. package/dist/cli/commands/StructureCommand.js +1 -1
  19. package/dist/cli/commands/UpversionCommand.js +1 -1
  20. package/dist/cli/index.js +1 -1
  21. package/dist/cli/utils/db.js +1 -1
  22. package/dist/database/KythiaMigrator.js +1 -1
  23. package/dist/database/KythiaModel.d.ts +4 -2
  24. package/dist/database/KythiaModel.d.ts.map +1 -1
  25. package/dist/database/KythiaModel.js +1 -1
  26. package/dist/database/KythiaModel.js.map +1 -1
  27. package/dist/database/KythiaSequelize.d.ts.map +1 -1
  28. package/dist/database/KythiaSequelize.js +1 -1
  29. package/dist/database/KythiaSequelize.js.map +1 -1
  30. package/dist/database/KythiaStorage.js +1 -1
  31. package/dist/database/ModelLoader.js +1 -1
  32. package/dist/database/Seeder.js +1 -1
  33. package/dist/database/SeederManager.js +1 -1
  34. package/dist/index.js +1 -1
  35. package/dist/managers/AddonManager.d.ts +2 -2
  36. package/dist/managers/AddonManager.d.ts.map +1 -1
  37. package/dist/managers/AddonManager.js +1 -1
  38. package/dist/managers/AddonManager.js.map +1 -1
  39. package/dist/managers/EventManager.js +1 -1
  40. package/dist/managers/InteractionManager.d.ts +1 -0
  41. package/dist/managers/InteractionManager.d.ts.map +1 -1
  42. package/dist/managers/InteractionManager.js +1 -1
  43. package/dist/managers/InteractionManager.js.map +1 -1
  44. package/dist/managers/KythiaEngine.d.ts +4 -0
  45. package/dist/managers/KythiaEngine.d.ts.map +1 -1
  46. package/dist/managers/KythiaEngine.js +1 -1
  47. package/dist/managers/KythiaEngine.js.map +1 -1
  48. package/dist/managers/MetricsManager.js +1 -1
  49. package/dist/managers/MiddlewareManager.js +1 -1
  50. package/dist/managers/ShardingManager.d.ts +1 -0
  51. package/dist/managers/ShardingManager.d.ts.map +1 -1
  52. package/dist/managers/ShardingManager.js +1 -1
  53. package/dist/managers/ShardingManager.js.map +1 -1
  54. package/dist/managers/ShutdownManager.d.ts +1 -0
  55. package/dist/managers/ShutdownManager.d.ts.map +1 -1
  56. package/dist/managers/ShutdownManager.js +1 -1
  57. package/dist/managers/ShutdownManager.js.map +1 -1
  58. package/dist/managers/TranslatorManager.js +1 -1
  59. package/dist/middlewares/botPermissions.js +1 -1
  60. package/dist/middlewares/cooldown.d.ts.map +1 -1
  61. package/dist/middlewares/cooldown.js +1 -1
  62. package/dist/middlewares/cooldown.js.map +1 -1
  63. package/dist/middlewares/isInMainGuild.d.ts.map +1 -1
  64. package/dist/middlewares/isInMainGuild.js +1 -1
  65. package/dist/middlewares/isInMainGuild.js.map +1 -1
  66. package/dist/middlewares/ownerOnly.js +1 -1
  67. package/dist/middlewares/userPermissions.js +1 -1
  68. package/dist/structures/BaseCommand.js +1 -1
  69. package/dist/types/AddonManager.d.ts +4 -1
  70. package/dist/types/AddonManager.d.ts.map +1 -1
  71. package/dist/types/KythiaConfig.d.ts +2 -0
  72. package/dist/types/KythiaConfig.d.ts.map +1 -1
  73. package/dist/types/ModuleLoaders.js +1 -1
  74. package/dist/types/index.js +1 -1
  75. package/dist/utils/DiscordWebhookTransport.js +1 -1
  76. package/dist/utils/InteractionFactory.js +1 -1
  77. package/dist/utils/color.js +1 -1
  78. package/dist/utils/discord.js +1 -1
  79. package/dist/utils/formatter.js +1 -1
  80. package/dist/utils/index.js +1 -1
  81. package/dist/utils/logger.js +1 -1
  82. package/package.json +1 -1
package/dist/cli/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- 'use strict';var __importDefault=this&&this['__importDefault']||function(_0x5d960f){return _0x5d960f&&_0x5d960f['__esModule']?_0x5d960f:{'default':_0x5d960f};};Object['defineProperty'](exports,'__esModule',{'value':!![]});const commander_1=require('commander');const Command_1=__importDefault(require('./Command'));const node_path_1=__importDefault(require('node:path'));const node_fs_1=__importDefault(require('node:fs'));const pc=require('picocolors');const {version}=require('../../package.json');const program=new commander_1['Command']();program['name']('kythia')['description'](pc['cyan']('🌸\x20Kythia\x20Framework\x20CLI'))['version'](version);const commandsDir=node_path_1['default']['join'](__dirname,'commands');if(node_fs_1['default']['existsSync'](commandsDir)){const commandFiles=node_fs_1['default']['readdirSync'](commandsDir)['filter'](_0x1d5c8d=>(_0x1d5c8d['endsWith']('.js')||_0x1d5c8d['endsWith']('.ts'))&&!_0x1d5c8d['endsWith']('.d.ts'));for(const file of commandFiles){const filePath=node_path_1['default']['join'](commandsDir,file);try{const moduleExport=require(filePath);const CommandClass=moduleExport['default']||moduleExport;if(typeof CommandClass==='function'&&CommandClass['prototype']instanceof Command_1['default']){const commandInstance=new CommandClass();commandInstance['register'](program);}else if(typeof CommandClass['register']==='function'){CommandClass['register'](program);}}catch(a17_0x2f04d6){console['error'](pc['red']('❌\x20Failed\x20to\x20load\x20command\x20'+file+':'),a17_0x2f04d6);}}}program['parse'](process['argv']);
2
+ 'use strict';var __importDefault=this&&this['__importDefault']||function(_0x34546d){return _0x34546d&&_0x34546d['__esModule']?_0x34546d:{'default':_0x34546d};};Object['defineProperty'](exports,'__esModule',{'value':!![]});const commander_1=require('commander');const Command_1=__importDefault(require('./Command'));const node_path_1=__importDefault(require('node:path'));const node_fs_1=__importDefault(require('node:fs'));const pc=require('picocolors');const {version}=require('../../package.json');const program=new commander_1['Command']();program['name']('kythia')['description'](pc['cyan']('🌸\x20Kythia\x20Framework\x20CLI'))['version'](version);const commandsDir=node_path_1['default']['join'](__dirname,'commands');if(node_fs_1['default']['existsSync'](commandsDir)){const commandFiles=node_fs_1['default']['readdirSync'](commandsDir)['filter'](_0x38f256=>(_0x38f256['endsWith']('.js')||_0x38f256['endsWith']('.ts'))&&!_0x38f256['endsWith']('.d.ts'));for(const file of commandFiles){const filePath=node_path_1['default']['join'](commandsDir,file);try{const moduleExport=require(filePath);const CommandClass=moduleExport['default']||moduleExport;if(typeof CommandClass==='function'&&CommandClass['prototype']instanceof Command_1['default']){const commandInstance=new CommandClass();commandInstance['register'](program);}else if(typeof CommandClass['register']==='function'){CommandClass['register'](program);}}catch(a17_0x52cf52){console['error'](pc['red']('❌\x20Failed\x20to\x20load\x20command\x20'+file+':'),a17_0x52cf52);}}}program['parse'](process['argv']);
@@ -1 +1 @@
1
- 'use strict';var __importDefault=this&&this['__importDefault']||function(_0x222069){return _0x222069&&_0x222069['__esModule']?_0x222069:{'default':_0x222069};};Object['defineProperty'](exports,'__esModule',{'value':!![]});exports['storage']=exports['umzug']=exports['sequelize']=void(-0x19db+0x1*-0xf9a+0x1*0x2975);const sequelize_1=require('sequelize');const dotenvx_1=require('@dotenvx/dotenvx');const umzug_1=require('umzug');const node_path_1=__importDefault(require('node:path'));const node_fs_1=__importDefault(require('node:fs'));(0x114e+0x24f1+-0x363f,dotenvx_1['config'])({'quiet':!![]});const pc=require('picocolors');const KythiaSequelize_1=__importDefault(require('../../database/KythiaSequelize'));const KythiaStorage_1=__importDefault(require('../../database/KythiaStorage'));const configPath=node_path_1['default']['resolve'](process['cwd'](),'kythia.config.js');if(!node_fs_1['default']['existsSync'](configPath)){console['error']('❌\x20kythia.config.js\x20not\x20found\x20in\x20root\x20directory!');process['exit'](-0x1*-0x1692+-0x337*-0x4+-0x236d*0x1);}const kythiaConfig=require(configPath);const sequelize=(-0xe1e+0x51*0x3f+-0x5d1,KythiaSequelize_1['default'])(kythiaConfig);exports['sequelize']=sequelize;function getMigrationFiles(){const _0x44fb60=process['cwd']();const _0x3b9a36=node_path_1['default']['join'](_0x44fb60,'addons');if(!node_fs_1['default']['existsSync'](_0x3b9a36))return[];const _0x3d7c32=[];const _0x5d9751=node_fs_1['default']['readdirSync'](_0x3b9a36)['filter'](_0x4b8fea=>node_fs_1['default']['statSync'](node_path_1['default']['join'](_0x3b9a36,_0x4b8fea))['isDirectory']());for(const _0x5df9bd of _0x5d9751){const _0x3d4cf5=node_path_1['default']['join'](_0x3b9a36,_0x5df9bd,'database','migrations');if(node_fs_1['default']['existsSync'](_0x3d4cf5)){const _0x1e7420=node_fs_1['default']['readdirSync'](_0x3d4cf5)['filter'](_0x3071c6=>_0x3071c6['endsWith']('.js')||_0x3071c6['endsWith']('.ts'))['map'](_0x4d164f=>({'name':_0x4d164f,'path':node_path_1['default']['join'](_0x3d4cf5,_0x4d164f)}));_0x3d7c32['push'](..._0x1e7420);}}return _0x3d7c32['sort']((_0x1dcf5d,_0x4a2cdb)=>_0x1dcf5d['name']['localeCompare'](_0x4a2cdb['name']));}const storage=new KythiaStorage_1['default']({'sequelize':sequelize});exports['storage']=storage;const umzugLogger={'info':_0x12c883=>{if(typeof _0x12c883==='object'){if(_0x12c883['event']==='migrated'){console['log'](pc['green']('✅\x20Migrated:\x20\x20'+_0x12c883['name']+'\x20')+pc['gray']('('+_0x12c883['durationSeconds']+'s)'));}else if(_0x12c883['event']==='reverting'){console['log'](pc['yellow']('↩️\x20Reverting:\x20'+_0x12c883['name']));}else if(_0x12c883['event']==='reverted'){console['log'](pc['red']('❌\x20Reverted:\x20\x20'+_0x12c883['name']+'\x20')+pc['gray']('('+_0x12c883['durationSeconds']+'s)'));}}else{console['log'](pc['dim'](_0x12c883));}},'warn':_0x5d2a04=>console['warn'](pc['yellow']('⚠️\x20'+(typeof _0x5d2a04==='object'?JSON['stringify'](_0x5d2a04):_0x5d2a04))),'error':_0x399a9e=>console['error'](pc['red']('🔥\x20'+(typeof _0x399a9e==='object'?JSON['stringify'](_0x399a9e):_0x399a9e))),'debug':_0x210199=>console['debug'](pc['gray']('🐛\x20'+(typeof _0x210199==='object'?JSON['stringify'](_0x210199):_0x210199)))};const umzug=new umzug_1['Umzug']({'migrations':getMigrationFiles()['map'](_0x4d3d42=>({'name':_0x4d3d42['name'],'path':_0x4d3d42['path'],'up':async({context:_0x44958e})=>{const _0xf6fe1c=require(_0x4d3d42['path']);const _0x55a25b=new Proxy(sequelize_1['DataTypes'],{'get'(_0x256316,_0x1c3ff9){if(_0x1c3ff9==='LONGTEXT')return _0x256316['TEXT']('long');return _0x256316[_0x1c3ff9];}});return _0xf6fe1c['up'](_0x44958e,_0x55a25b);},'down':async({context:_0x17ccea})=>{const _0x3639ad=require(_0x4d3d42['path']);const _0x5c3399=new Proxy(sequelize_1['DataTypes'],{'get'(_0x33a8ce,_0x216494){if(_0x216494==='LONGTEXT')return _0x33a8ce['TEXT']('long');return _0x33a8ce[_0x216494];}});return _0x3639ad['down'](_0x17ccea,_0x5c3399);}})),'context':sequelize['getQueryInterface'](),'storage':storage,'logger':umzugLogger});exports['umzug']=umzug;
1
+ 'use strict';var __importDefault=this&&this['__importDefault']||function(_0x21224b){return _0x21224b&&_0x21224b['__esModule']?_0x21224b:{'default':_0x21224b};};Object['defineProperty'](exports,'__esModule',{'value':!![]});exports['storage']=exports['umzug']=exports['sequelize']=void(0x66d+0x932+-0xf9f);const sequelize_1=require('sequelize');const dotenvx_1=require('@dotenvx/dotenvx');const umzug_1=require('umzug');const node_path_1=__importDefault(require('node:path'));const node_fs_1=__importDefault(require('node:fs'));(0x175f+-0x74*0x14+-0x63*0x25,dotenvx_1['config'])({'quiet':!![]});const pc=require('picocolors');const KythiaSequelize_1=__importDefault(require('../../database/KythiaSequelize'));const KythiaStorage_1=__importDefault(require('../../database/KythiaStorage'));const configPath=node_path_1['default']['resolve'](process['cwd'](),'kythia.config.js');if(!node_fs_1['default']['existsSync'](configPath)){console['error']('❌\x20kythia.config.js\x20not\x20found\x20in\x20root\x20directory!');process['exit'](-0x14d5*0x1+0x6*0x596+-0x43a*0x3);}const kythiaConfig=require(configPath);const sequelize=(-0x1349+-0x1fd6+-0x1*-0x331f,KythiaSequelize_1['default'])(kythiaConfig);exports['sequelize']=sequelize;function getMigrationFiles(){const _0x23039=process['cwd']();const _0x5146a6=node_path_1['default']['join'](_0x23039,'addons');if(!node_fs_1['default']['existsSync'](_0x5146a6))return[];const _0xa0d464=[];const _0x4aba1e=node_fs_1['default']['readdirSync'](_0x5146a6)['filter'](_0x2ae7cd=>node_fs_1['default']['statSync'](node_path_1['default']['join'](_0x5146a6,_0x2ae7cd))['isDirectory']());for(const _0x569ecc of _0x4aba1e){const _0x3791bb=node_path_1['default']['join'](_0x5146a6,_0x569ecc,'database','migrations');if(node_fs_1['default']['existsSync'](_0x3791bb)){const _0x59855d=node_fs_1['default']['readdirSync'](_0x3791bb)['filter'](_0x1138b3=>_0x1138b3['endsWith']('.js')||_0x1138b3['endsWith']('.ts'))['map'](_0x238000=>({'name':_0x238000,'path':node_path_1['default']['join'](_0x3791bb,_0x238000)}));_0xa0d464['push'](..._0x59855d);}}return _0xa0d464['sort']((_0x35db61,_0x35ad5d)=>_0x35db61['name']['localeCompare'](_0x35ad5d['name']));}const storage=new KythiaStorage_1['default']({'sequelize':sequelize});exports['storage']=storage;const umzugLogger={'info':_0x470c89=>{if(typeof _0x470c89==='object'){if(_0x470c89['event']==='migrated'){console['log'](pc['green']('✅\x20Migrated:\x20\x20'+_0x470c89['name']+'\x20')+pc['gray']('('+_0x470c89['durationSeconds']+'s)'));}else if(_0x470c89['event']==='reverting'){console['log'](pc['yellow']('↩️\x20Reverting:\x20'+_0x470c89['name']));}else if(_0x470c89['event']==='reverted'){console['log'](pc['red']('❌\x20Reverted:\x20\x20'+_0x470c89['name']+'\x20')+pc['gray']('('+_0x470c89['durationSeconds']+'s)'));}}else{console['log'](pc['dim'](_0x470c89));}},'warn':_0x48c014=>console['warn'](pc['yellow']('⚠️\x20'+(typeof _0x48c014==='object'?JSON['stringify'](_0x48c014):_0x48c014))),'error':_0x16f007=>console['error'](pc['red']('🔥\x20'+(typeof _0x16f007==='object'?JSON['stringify'](_0x16f007):_0x16f007))),'debug':_0x526298=>console['debug'](pc['gray']('🐛\x20'+(typeof _0x526298==='object'?JSON['stringify'](_0x526298):_0x526298)))};const umzug=new umzug_1['Umzug']({'migrations':getMigrationFiles()['map'](_0xb3cb0a=>({'name':_0xb3cb0a['name'],'path':_0xb3cb0a['path'],'up':async({context:_0x392145})=>{const _0x31019a=require(_0xb3cb0a['path']);const _0x43859d=new Proxy(sequelize_1['DataTypes'],{'get'(_0x2a7b7a,_0x10eff7){if(_0x10eff7==='LONGTEXT')return _0x2a7b7a['TEXT']('long');return _0x2a7b7a[_0x10eff7];}});return _0x31019a['up'](_0x392145,_0x43859d);},'down':async({context:_0x3474e7})=>{const _0x593853=require(_0xb3cb0a['path']);const _0x2c12ba=new Proxy(sequelize_1['DataTypes'],{'get'(_0x299062,_0x175035){if(_0x175035==='LONGTEXT')return _0x299062['TEXT']('long');return _0x299062[_0x175035];}});return _0x593853['down'](_0x3474e7,_0x2c12ba);}})),'context':sequelize['getQueryInterface'](),'storage':storage,'logger':umzugLogger});exports['umzug']=umzug;
@@ -1 +1 @@
1
- 'use strict';var __importDefault=this&&this['__importDefault']||function(_0x28f0ae){return _0x28f0ae&&_0x28f0ae['__esModule']?_0x28f0ae:{'default':_0x28f0ae};};Object['defineProperty'](exports,'__esModule',{'value':!![]});const KythiaStorage_1=__importDefault(require('./KythiaStorage'));const sequelize_1=require('sequelize');const umzug_1=require('umzug');const node_path_1=__importDefault(require('node:path'));const node_fs_1=__importDefault(require('node:fs'));function getMigrationFiles(_0x4f19dc,_0x24aa5c){const _0x229425=node_path_1['default']['join'](_0x4f19dc,'addons');if(!node_fs_1['default']['existsSync'](_0x229425))return[];const _0x59dd7f=[];const _0x4c1dbb=_0x24aa5c['kythiaConfig']?.['addons']||{};const _0x6c2f11=node_fs_1['default']['readdirSync'](_0x229425)['filter'](_0xdde264=>node_fs_1['default']['statSync'](node_path_1['default']['join'](_0x229425,_0xdde264))['isDirectory']());for(const _0x1ecc4a of _0x6c2f11){const _0x193e39=_0x1ecc4a['replace'](/-([a-z])/g,_0x18b3ae=>_0x18b3ae[-0x2663+0xdbc+0x18a8]['toUpperCase']());const _0x171b76=_0x4c1dbb['all']===![]||_0x4c1dbb['all']?.['active']===![];const _0x93dd9f=_0x4c1dbb[_0x193e39]===![]||_0x4c1dbb[_0x193e39]?.['active']===![];if(_0x171b76||_0x93dd9f){continue;}const _0x2902ed=node_path_1['default']['join'](_0x229425,_0x1ecc4a,'database','migrations');if(node_fs_1['default']['existsSync'](_0x2902ed)){const _0x50fe9d=node_fs_1['default']['readdirSync'](_0x2902ed)['filter'](_0x57de7d=>_0x57de7d['endsWith']('.js'))['map'](_0x5abc03=>({'name':_0x5abc03,'path':node_path_1['default']['join'](_0x2902ed,_0x5abc03),'folder':_0x2902ed}));_0x59dd7f['push'](..._0x50fe9d);}}return _0x59dd7f['sort']((_0x3acfa6,_0x2744f1)=>_0x3acfa6['name']['localeCompare'](_0x2744f1['name']));}const KythiaMigrator=async({sequelize:_0x35e6ad,container:_0x2830c1,logger:_0xf78807})=>{const _0x461eb3=_0x2830c1['appRoot'];const _0x4f0229=getMigrationFiles(_0x461eb3,_0x2830c1);if(_0x4f0229['length']===-0x12f4+0x1d*0xbf+-0x3*0xe5){_0xf78807['info']('📭\x20No\x20migrations\x20found\x20in\x20addons.');return;}const _0x43a385={'info':_0x21e5f9=>{if(typeof _0x21e5f9==='object'&&_0x21e5f9!==null){const _0x3b48de=_0x21e5f9;if(_0x3b48de['event']==='migrating'){}else if(_0x3b48de['event']==='migrated'){_0xf78807['info']('✅\x20Migrated:\x20'+_0x3b48de['name']);}}else{_0xf78807['info'](String(_0x21e5f9));}},'warn':_0x553a11=>_0xf78807['warn'](_0x553a11),'error':_0x27bfb4=>_0xf78807['error'](_0x27bfb4),'debug':_0x2db99a=>_0xf78807['debug'](_0x2db99a)};const _0x41d7af=new umzug_1['Umzug']({'migrations':_0x4f0229['map'](_0x2983e7=>({'name':_0x2983e7['name'],'path':_0x2983e7['path'],'up':async({context:_0x979be4})=>{const _0x21212=require(_0x2983e7['path']);const _0x2becde=new Proxy(sequelize_1['DataTypes'],{'get'(_0x262f0a,_0x8e3501){if(_0x8e3501==='LONGTEXT')return _0x262f0a['TEXT']('long');return _0x262f0a[_0x8e3501];}});return _0x21212['up'](_0x979be4,_0x2becde);},'down':async({context:_0x49b176})=>{const _0xb9dc74=require(_0x2983e7['path']);const _0x512f8f=new Proxy(sequelize_1['DataTypes'],{'get'(_0x367cbe,_0x21ba95){if(_0x21ba95==='LONGTEXT')return _0x367cbe['TEXT']('long');return _0x367cbe[_0x21ba95];}});return _0xb9dc74['down'](_0x49b176,_0x512f8f);}})),'context':_0x35e6ad['getQueryInterface'](),'storage':new KythiaStorage_1['default']({'sequelize':_0x35e6ad}),'logger':_0x43a385});_0xf78807['info']('🚜\x20Checking\x20migrations\x20for\x20'+_0x4f0229['length']+'\x20files...');try{const _0x5da736=await _0x41d7af['pending']();if(_0x5da736['length']>-0x1127+0x159e+0x3*-0x17d){const _0x38fbad=await _0x41d7af['up']();if(_0x38fbad['length']>-0xf*-0xba+-0x4f*-0x1f+-0x1477){_0xf78807['info']('✨\x20Successfully\x20applied\x20'+_0x38fbad['length']+'\x20migrations.');}}else{_0xf78807['info']('✨\x20Database\x20is\x20already\x20up\x20to\x20date.');}}catch(_0xcfdedb){_0xf78807['error']('🔥\x20Migration\x20Failed:',_0xcfdedb);process['exit'](-0x1a27+-0x1*0x911+-0x47*-0x7f);}};exports['default']=KythiaMigrator;
1
+ 'use strict';var __importDefault=this&&this['__importDefault']||function(_0x140db0){return _0x140db0&&_0x140db0['__esModule']?_0x140db0:{'default':_0x140db0};};Object['defineProperty'](exports,'__esModule',{'value':!![]});const KythiaStorage_1=__importDefault(require('./KythiaStorage'));const sequelize_1=require('sequelize');const umzug_1=require('umzug');const node_path_1=__importDefault(require('node:path'));const node_fs_1=__importDefault(require('node:fs'));function getMigrationFiles(_0x57489c,_0x17375a){const _0x14703d=node_path_1['default']['join'](_0x57489c,'addons');if(!node_fs_1['default']['existsSync'](_0x14703d))return[];const _0x2da6a2=[];const _0x350742=_0x17375a['kythiaConfig']?.['addons']||{};const _0x51ca23=node_fs_1['default']['readdirSync'](_0x14703d)['filter'](_0x454929=>node_fs_1['default']['statSync'](node_path_1['default']['join'](_0x14703d,_0x454929))['isDirectory']());for(const _0x3f3b03 of _0x51ca23){const _0xb408a9=_0x3f3b03['replace'](/-([a-z])/g,_0x4885b2=>_0x4885b2[0x2d7*0x3+0xcd1+0x1*-0x1555]['toUpperCase']());const _0xc37363=_0x350742['all']===![]||_0x350742['all']?.['active']===![];const _0x566794=_0x350742[_0xb408a9]===![]||_0x350742[_0xb408a9]?.['active']===![];if(_0xc37363||_0x566794){continue;}const _0x52e1c3=node_path_1['default']['join'](_0x14703d,_0x3f3b03,'database','migrations');if(node_fs_1['default']['existsSync'](_0x52e1c3)){const _0x25e2ab=node_fs_1['default']['readdirSync'](_0x52e1c3)['filter'](_0xe262c1=>_0xe262c1['endsWith']('.js'))['map'](_0x10440f=>({'name':_0x10440f,'path':node_path_1['default']['join'](_0x52e1c3,_0x10440f),'folder':_0x52e1c3}));_0x2da6a2['push'](..._0x25e2ab);}}return _0x2da6a2['sort']((_0x253d9f,_0xe33c15)=>_0x253d9f['name']['localeCompare'](_0xe33c15['name']));}const KythiaMigrator=async({sequelize:_0x245ca7,container:_0x45f5e0,logger:_0x2e28bd})=>{const _0x284348=_0x45f5e0['appRoot'];const _0x7ae39c=getMigrationFiles(_0x284348,_0x45f5e0);if(_0x7ae39c['length']===-0x157b+0x1a45+0x1*-0x4ca){_0x2e28bd['info']('📭\x20No\x20migrations\x20found\x20in\x20addons.');return;}const _0x277091={'info':_0x191a9c=>{if(typeof _0x191a9c==='object'&&_0x191a9c!==null){const _0x365618=_0x191a9c;if(_0x365618['event']==='migrating'){}else if(_0x365618['event']==='migrated'){_0x2e28bd['info']('✅\x20Migrated:\x20'+_0x365618['name']);}}else{_0x2e28bd['info'](String(_0x191a9c));}},'warn':_0x28babb=>_0x2e28bd['warn'](_0x28babb),'error':_0x805686=>_0x2e28bd['error'](_0x805686),'debug':_0x4cf0d7=>_0x2e28bd['debug'](_0x4cf0d7)};const _0x59f56d=new umzug_1['Umzug']({'migrations':_0x7ae39c['map'](_0x1dcc17=>({'name':_0x1dcc17['name'],'path':_0x1dcc17['path'],'up':async({context:_0x94c6cb})=>{const _0x4cb9af=require(_0x1dcc17['path']);const _0x16019f=new Proxy(sequelize_1['DataTypes'],{'get'(_0x56d791,_0x1839d3){if(_0x1839d3==='LONGTEXT')return _0x56d791['TEXT']('long');return _0x56d791[_0x1839d3];}});return _0x4cb9af['up'](_0x94c6cb,_0x16019f);},'down':async({context:_0x2072fd})=>{const _0x44cc58=require(_0x1dcc17['path']);const _0x5728d2=new Proxy(sequelize_1['DataTypes'],{'get'(_0x44779a,_0x59eca0){if(_0x59eca0==='LONGTEXT')return _0x44779a['TEXT']('long');return _0x44779a[_0x59eca0];}});return _0x44cc58['down'](_0x2072fd,_0x5728d2);}})),'context':_0x245ca7['getQueryInterface'](),'storage':new KythiaStorage_1['default']({'sequelize':_0x245ca7}),'logger':_0x277091});_0x2e28bd['info']('🚜\x20Checking\x20migrations\x20for\x20'+_0x7ae39c['length']+'\x20files...');try{const _0x362e30=await _0x59f56d['pending']();if(_0x362e30['length']>-0x1*0x1435+0x3*-0x4d6+-0x1*-0x22b7){const _0x52cfa1=await _0x59f56d['up']();if(_0x52cfa1['length']>0x104e+0x1*0xca+0x223*-0x8){_0x2e28bd['info']('✨\x20Successfully\x20applied\x20'+_0x52cfa1['length']+'\x20migrations.');}}else{_0x2e28bd['info']('✨\x20Database\x20is\x20already\x20up\x20to\x20date.');}}catch(_0x5a0fcf){_0x2e28bd['error']('🔥\x20Migration\x20Failed:',_0x5a0fcf);process['exit'](-0x10d0+-0x4f3+0x15c4);}};exports['default']=KythiaMigrator;
@@ -1,6 +1,6 @@
1
1
  import { Model, DataTypes, type Sequelize, type InitOptions, type ModelAttributes } from 'sequelize';
2
2
  import { LRUCache } from 'lru-cache';
3
- import type { Redis } from 'ioredis';
3
+ import IORedis, { type Redis } from 'ioredis';
4
4
  import type { KythiaConfig } from '../types/KythiaConfig';
5
5
  import type { CacheStats, KythiaModelDependencies, CacheEntry, KythiaModelStructure } from '../types/KythiaModel';
6
6
  import type { KythiaLogger } from '@src/types';
@@ -35,6 +35,7 @@ export declare class KythiaModel<T extends object = any, TCreationAttributes ext
35
35
  static cacheStats: CacheStats;
36
36
  static redisErrorTimestamps: number[];
37
37
  static isShardMode: boolean;
38
+ static isShuttingDown: boolean;
38
39
  static _redisFallbackURLs: any[];
39
40
  static _redisCurrentIndex: number;
40
41
  static _redisFailedIndexes: Set<number>;
@@ -60,7 +61,7 @@ export declare class KythiaModel<T extends object = any, TCreationAttributes ext
60
61
  static _trackRedisError(err: any): void;
61
62
  static _tryRedisFailover(): boolean;
62
63
  static _closeCurrentRedis(): void;
63
- static initializeRedis(redisOptions?: any): Redis | null | undefined;
64
+ static initializeRedis(redisOptions?: any): IORedis | null;
64
65
  static _makeRetryStrategy(): (times: number) => number | null;
65
66
  static _setupRedisEventHandlers(): void;
66
67
  static _scheduleReconnect(): void;
@@ -87,6 +88,7 @@ export declare class KythiaModel<T extends object = any, TCreationAttributes ext
87
88
  healed: number;
88
89
  errors: number;
89
90
  };
91
+ static getGlobalCacheStats(sequelizeModels?: Record<string, any>): CacheStats;
90
92
  static _normalizeFindOptions(options: any): any;
91
93
  static getCache(keys: any, options?: any): Promise<any>;
92
94
  static getAllCache(options?: any): Promise<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"KythiaModel.d.ts","sourceRoot":"","sources":["../../src/database/KythiaModel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"KythiaModel.d.ts","sourceRoot":"","sources":["../../src/database/KythiaModel.ts"],"names":[],"mappings":"AAyBA,OAAO,EACN,KAAK,EACL,SAAS,EACT,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,eAAe,EAEpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAKrC,OAAO,OAAO,EAAE,EAAE,KAAK,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EACX,UAAU,EACV,uBAAuB,EACvB,UAAU,EACV,oBAAoB,EACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AA+BnE,qBAAa,WAAW,CACvB,CAAC,SAAS,MAAM,GAAG,GAAG,EACtB,mBAAmB,SAAS,MAAM,GAAG,CAAC,CACrC,SAAQ,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC;IACtC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACnB,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IAChC,MAAM,CAAC,gBAAgB,UAAS;IAChC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,EAAE,CAAM;IACtC,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,CAAC;IAC3C,MAAM,CAAC,aAAa,SAAW;IAE/B,MAAM,CAAC,UAAU;cAAgC,GAAG;iBAAW,MAAM;gBAElE;IACH,MAAM,CAAC,oBAAoB,SAAQ;IACnC,MAAM,CAAC,WAAW,SAAkB;IACpC,MAAM,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAwBnC,MAAM,CAAC,mBAAmB,UAAQ;IAClC,MAAM,CAAC,gBAAgB,SAAS;IAChC,MAAM,CAAC,UAAU;;;;;MAAoD;IAErE,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CAAQ;IAC7C,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAQ;IACtD,MAAM,CAAC,mBAAmB,SAAK;IAE/B,MAAM,CAAC,cAAc,4BAAmC;IACxD,MAAM,CAAC,UAAU,EAAE,UAAU,CAO3B;IAEF,MAAM,CAAC,oBAAoB,EAAE,MAAM,EAAE,CAAM;IAE3C,MAAM,CAAC,WAAW,UAAS;IAO3B,MAAM,CAAC,cAAc,UAAS;IAE9B,MAAM,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAM;IACtC,MAAM,CAAC,kBAAkB,SAAK;IAC9B,MAAM,CAAC,mBAAmB,cAAqB;IAC/C,MAAM,CAAC,eAAe,UAAS;IAE/B,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACxC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;IACzB,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IAC1B,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IACzC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC;IAQzB,MAAM,CAAC,IAAI,CACV,UAAU,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EACrC,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,GACvB,GAAG;IAQN,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,GAAG;IAY9C,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,GAAG;IAYjD,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,GAAG;IAY/C,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,GAAG;WAYxC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAgJ1C,MAAM,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM;IAsC3C,MAAM,CAAC,kBAAkB;IA2CzB,MAAM,CAAC,eAAe,CAAC,EACtB,MAAM,EACN,MAAM,EACN,KAAK,EACL,YAAY,GACZ,EAAE,uBAAuB;IAwF1B,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG;IA2DhC,MAAM,CAAC,iBAAiB;IA2BxB,MAAM,CAAC,kBAAkB;IA6BzB,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,GAAG;IA4EzC,MAAM,CAAC,kBAAkB,KAChB,OAAO,MAAM;IAuBtB,MAAM,CAAC,wBAAwB;IAuH/B,MAAM,CAAC,kBAAkB;IAuCzB,MAAM,CAAC,WAAW,CAAC,eAAe,EAAE,GAAG,GAAG,MAAM;IA+BhD,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG;IAqB5C,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,GAAG;WAsC1B,aAAa,CACzB,eAAe,EAAE,GAAG,EACpB,IAAI,EAAE,GAAG,EACT,GAAG,CAAC,EAAE,MAAM,EACZ,IAAI,GAAE,MAAM,EAAO;WAqBP,cAAc,CAC1B,eAAe,EAAE,GAAG,EACpB,cAAc,CAAC,EAAE,GAAG,GAClB,OAAO,CAAC,UAAU,CAAC;WA6BT,UAAU,CAAC,IAAI,EAAE,GAAG;WAYpB,mBAAmB,CAC/B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,EACT,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,MAAM,EAAO;WAkCP,oBAAoB,CAChC,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,GAAG,GACjB,OAAO,CAAC,UAAU,CAAC;WAiDT,gBAAgB,CAAC,QAAQ,EAAE,MAAM;WAejC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE;IAyE5C,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM;IAmCjE,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,GAAG,UAAU;IAqD5E,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM;IAWtC,MAAM,CAAC,sBAAsB;WAmChB,kBAAkB,CAC9B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,GAAG,EACf,KAAK,EAAE,GAAG,EACV,GAAG,CAAC,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC;IAoEhB,MAAM,CAAC,kBAAkB;;;;;;;;IA+BzB,MAAM,CAAC,mBAAmB,CACzB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACnC,UAAU;IAyCb,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG;WAgElC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,GAAE,GAAQ;WAiFrC,WAAW,CAAC,OAAO,GAAE,GAAQ;WA8C7B,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;WAa3D,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;WAc/C,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,SAAa;WAc7D,aAAa,CAAC,SAAS,EAAE,MAAM;WAc/B,qBAAqB,CAAC,OAAO,EAAE,GAAG;WA2HlC,gBAAgB,CAC5B,KAAK,EAAE,GAAG,EACV,QAAQ,GAAE,GAAQ,EAClB,OAAO,GAAE,GAAQ,GACf,OAAO,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;WAab,kBAAkB,CAC9B,KAAK,EAAE,GAAG,EACV,QAAQ,GAAE,GAAQ,EAClB,OAAO,GAAE,GAAQ,GACf,OAAO,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;WAuDb,eAAe,CAC3B,KAAK,EAAE,GAAG,EACV,QAAQ,GAAE,GAAQ,EAClB,OAAO,GAAE,GAAQ,GACf,OAAO,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;WA4Cb,kBAAkB,CAC9B,KAAK,EAAE,GAAG,EACV,MAAM,GAAE,GAAQ,EAChB,OAAO,GAAE,GAAQ,GACf,OAAO,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;WAmEb,mBAAmB,CAC/B,KAAK,EAAE,GAAG,EACV,MAAM,GAAE,GAAQ,EAChB,OAAO,GAAE,GAAQ,GACf,OAAO,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;WA6Cb,cAAc,CAAC,OAAO,GAAE,GAAQ,EAAE,QAAQ,SAAgB;WAuE1D,kBAAkB,CAAC,IAAI,EAAE,GAAG;WAO5B,kBAAkB,CAAC,OAAO,GAAE,GAAQ,EAAE,YAAY,GAAE,GAAQ;WAiF5D,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,GAAE,GAAQ;WA0CzC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,GAAE,GAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;WAwE5D,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,GAAE,GAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;WAkE3D,oBAAoB,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;WA+BnD,cAAc,CAC1B,KAAK,EAAE,GAAG,EACV,KAAK,EAAE,MAAM,EACb,MAAM,SAAI,GACR,OAAO,CAAC,IAAI,CAAC;WAqCH,aAAa,CAAC,OAAO,GAAE,GAAQ,GAAG,OAAO,CAAC;QACtD,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACpB,CAAC;IAwHF,MAAM,CAAC,oBAAoB;IAyD3B,MAAM,CAAC,sBAAsB,CAAC,iBAAiB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG;WAoB1D,WAAW,CACvB,aAAa,EAAE,GAAG,EAClB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,OAAO,WAAW,EAC/B,cAAc,GAAE,MAAoB;IAyBrC,MAAM,CAAC,gBAAgB,CACtB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,OAAO,WAAW,EAC/B,cAAc,SAAc;CA2B7B;AAED,eAAe,WAAW,CAAC"}
@@ -1 +1 @@
1
- 'use strict';var __importDefault=this&&this['__importDefault']||function(_0x152227){return _0x152227&&_0x152227['__esModule']?_0x152227:{'default':_0x152227};};Object['defineProperty'](exports,'__esModule',{'value':!![]});exports['KythiaModel']=void(-0x3be+0x4*-0x1c6+0xad6);const jsonStringify=require('json-stable-stringify');const sequelize_1=require('sequelize');const lru_cache_1=require('lru-cache');const logger_1=__importDefault(require('../utils/logger'));const clc=require('cli-color');const NEGATIVE_CACHE_PLACEHOLDER='__KYTHIA_NEGATIVE_CACHE__';const RECONNECT_DELAY_MINUTES=0x6b*-0x17+0x21ce+-0x182e;const REDIS_ERROR_TOLERANCE_COUNT=-0x23*0x8b+-0x226c+-0x2*-0x1ab8;const REDIS_ERROR_TOLERANCE_INTERVAL_MS=(0x2*0x110f+-0x37e*-0x5+0x12*-0x2dd)*(-0xe64+-0x3*-0xcc1+-0x13f7);function safeStringify(_0x4aa935,_0x27b149){try{return JSON['stringify'](_0x4aa935,(_0x503546,_0x422696)=>typeof _0x422696==='bigint'?_0x422696['toString']():_0x422696);}catch(_0x433bef){(_0x27b149||console)['error']('❌\x20[SAFE\x20STRINGIFY]\x20Failed:\x20'+_0x433bef['message']);return'{}';}}function safeParse(_0x1ccceb,_0x3d5aae){try{return JSON['parse'](_0x1ccceb);}catch{(_0x3d5aae||console)['warn']('⚠️\x20[SAFE\x20PARSE]\x20Invalid\x20JSON\x20data,\x20returning\x20null');return null;}}class KythiaModel extends sequelize_1['Model']{static ['client'];static ['redis'];static ['isRedisConnected']=![];static ['logger'];static ['config']={};static ['metrics'];static ['CACHE_VERSION']='1.0.0';static ['localCache']=new lru_cache_1['LRUCache']({'max':0x3e8});static ['MAX_LOCAL_CACHE_SIZE']=-0xe8*-0x8+0x8*-0x134+-0xc*-0x86;static ['DEFAULT_TTL']=(0xaaa+0xf49+-0x1*0x19b7)*(0xfb9+0x18d0+0x21f*-0x13)*(0x565+-0x39d+0x4*0x88);static ['NEGATIVE_CACHE_TTL'];static ['DRIFT_CHECK_ENABLED']=!![];static ['DRIFT_CHECK_RATE']=-0x3a5+0x22cc+-0x1f27+0.01;static ['driftStats']={'checked':0x0,'drifted':0x0,'healed':0x0,'errors':0x0};static ['lastRedisOpts']=null;static ['reconnectTimeout']=null;static ['lastAutoReconnectTs']=0xe36+-0x7c9*0x2+0x15c;static ['pendingQueries']=new Map();static ['cacheStats']={'redisHits':0x0,'mapHits':0x0,'misses':0x0,'sets':0x0,'clears':0x0,'errors':0x0};static ['redisErrorTimestamps']=[];static ['isShardMode']=![];static ['_redisFallbackURLs']=[];static ['_redisCurrentIndex']=0x9e1*0x1+-0x1f*-0x10c+-0x2a55;static ['_redisFailedIndexes']=new Set();static ['_justFailedOver']=![];static ['fillable'];static ['guarded'];static ['structure'];static ['table'];static ['cacheKeys'];static ['CACHE_KEYS'];static ['CACHE_TTL'];static ['customInvalidationTags'];static ['useRedis'];static['init'](_0x1aeb41,_0x103400){const _0x6f8b2a=super['init'](_0x1aeb41,_0x103400);return _0x6f8b2a;}static['hasOne'](_0x1903ec,_0x47bd15){(this['logger']||console)['info']('\x20\x20╰┈➤\x20🔗\x20'+clc['cyan'](this['name']['padEnd'](0x16*-0x1af+-0xffb*-0x1+-0x11*-0x13e))+'\x20'+clc['yellow']('──[\x201:1\x20]──▶')+'\x20'+(_0x1903ec?.['name']||'Unknown'));return super['hasOne'](_0x1903ec,_0x47bd15);}static['belongsTo'](_0x3af464,_0x40e9d1){(this['logger']||console)['info']('\x20\x20╰┈➤\x20🔗\x20'+clc['cyan'](this['name']['padEnd'](0xb*0x371+-0xb3a+-0x1a92))+'\x20'+clc['green']('◀──[\x201:1\x20]──')+'\x20'+(_0x3af464?.['name']||'Unknown'));return super['belongsTo'](_0x3af464,_0x40e9d1);}static['hasMany'](_0x2b087d,_0x8b5dfc){(this['logger']||console)['info']('\x20\x20╰┈➤\x20🔗\x20'+clc['cyan'](this['name']['padEnd'](-0x233e+-0x1*-0x25a4+-0x257))+'\x20'+clc['magenta']('──[\x201:N\x20]──▶')+'\x20'+(_0x2b087d?.['name']||'Unknown'));return super['hasMany'](_0x2b087d,_0x8b5dfc);}static['belongsToMany'](_0x1fc303,_0x25fea1){(this['logger']||console)['info']('\x20\x20╰┈➤\x20🔗\x20'+clc['cyan'](this['name']['padEnd'](-0x2bd+-0x55d*0x2+-0xd86*-0x1))+'\x20'+clc['red']('◀──[\x20N:M\x20]──▶')+'\x20'+(_0x1fc303?.['name']||'Unknown'));return super['belongsToMany'](_0x1fc303,_0x25fea1);}static async['autoBoot'](_0x35a9f3){let _0x1e417e=this['table'];if(!_0x1e417e){const _0x56d668=this['name'];const _0x2a0bf8=sequelize_1['Utils']['underscoredIf'](_0x56d668,!![]);_0x1e417e=sequelize_1['Utils']['pluralize'](_0x2a0bf8);}let _0x52eed0={};let _0x2fa979={};if(this['structure']){_0x52eed0=this['structure']['attributes']||{};_0x2fa979=this['structure']['options']||{};}const _0x4c6d06=_0x35a9f3['getQueryInterface']();let _0x15d4ea;try{_0x15d4ea=await _0x4c6d06['describeTable'](_0x1e417e);}catch(_0x29b224){console['warn']('⚠️\x20[KythiaModel]\x20Table\x20\x27'+_0x1e417e+'\x27\x20not\x20found\x20for\x20model\x20\x27'+this['name']+'\x27.\x20Skipping\x20auto-boot.\x20err\x20'+_0x29b224);return;}const _0x505912={};for(const [_0x284549,_0x5c3228]of Object['entries'](_0x15d4ea)){_0x505912[_0x284549]={'type':this['_mapDbTypeToSequelize'](_0x5c3228['type']),'allowNull':_0x5c3228['allowNull'],'defaultValue':_0x5c3228['defaultValue'],'primaryKey':_0x5c3228['primaryKey'],'autoIncrement':_0x5c3228['autoIncrement']};}const _0x503040={..._0x505912,..._0x52eed0};super['init'](_0x503040,{'sequelize':_0x35a9f3,'modelName':this['name'],'tableName':_0x1e417e,'timestamps':_0x2fa979['timestamps']!==undefined?_0x2fa979['timestamps']:!!_0x503040['createdAt'],'paranoid':_0x2fa979['paranoid']!==undefined?_0x2fa979['paranoid']:!!_0x503040['deletedAt'],..._0x2fa979});this['_setupLaravelHooks']();return this;}static['_mapDbTypeToSequelize'](_0x50b908){const _0x225144=_0x50b908['toUpperCase']();if(_0x225144['startsWith']('BOOLEAN')||_0x225144['startsWith']('TINYINT(1)'))return sequelize_1['DataTypes']['BOOLEAN'];if(_0x225144['startsWith']('BIGINT'))return sequelize_1['DataTypes']['BIGINT'];if(_0x225144['startsWith']('INT')||_0x225144['startsWith']('TINYINT'))return sequelize_1['DataTypes']['INTEGER'];if(_0x225144['startsWith']('VARCHAR')||_0x225144['startsWith']('TEXT')||_0x225144['startsWith']('CHAR'))return sequelize_1['DataTypes']['STRING'];if(_0x225144['startsWith']('DATETIME')||_0x225144['startsWith']('TIMESTAMP'))return sequelize_1['DataTypes']['DATE'];if(_0x225144['startsWith']('JSON'))return sequelize_1['DataTypes']['JSON'];if(_0x225144['startsWith']('FLOAT')||_0x225144['startsWith']('DOUBLE')||_0x225144['startsWith']('DECIMAL'))return sequelize_1['DataTypes']['FLOAT'];if(_0x225144['startsWith']('ENUM'))return sequelize_1['DataTypes']['STRING'];return sequelize_1['DataTypes']['STRING'];}static['_setupLaravelHooks'](){this['addHook']('beforeValidate',_0xb52c4e=>{const _0x54d0d5=_0xb52c4e['constructor'];const _0x179031=_0x54d0d5['primaryKeyAttribute']||'id';if(_0x54d0d5['fillable']&&Array['isArray'](_0x54d0d5['fillable'])){const _0x5c26c4=_0x54d0d5['fillable'];Object['keys'](_0xb52c4e['dataValues'])['forEach'](_0xef4397=>{if(_0xef4397===_0x179031)return;if(!_0x5c26c4['includes'](_0xef4397)){delete _0xb52c4e['dataValues'][_0xef4397];if(_0xb52c4e['changed']())_0xb52c4e['changed'](_0xef4397,![]);}});}else if(_0x54d0d5['guarded']&&Array['isArray'](_0x54d0d5['guarded'])){const _0xc0de35=_0x54d0d5['guarded'];if(_0xc0de35['includes']('*')){_0xb52c4e['dataValues']={};return;}Object['keys'](_0xb52c4e['dataValues'])['forEach'](_0x1ec48e=>{if(_0x1ec48e===_0x179031)return;if(_0xc0de35['includes'](_0x1ec48e)){delete _0xb52c4e['dataValues'][_0x1ec48e];if(_0xb52c4e['changed']())_0xb52c4e['changed'](_0x1ec48e,![]);}});}});}static['setDependencies']({logger:_0x2525b0,config:_0x678fd1,redis:_0x3c726b,redisOptions:_0x268670}){if(!_0x678fd1){throw new Error('KythiaModel.setDependencies\x20requires\x20config!');}this['logger']=_0x2525b0||logger_1['default'];this['config']=_0x678fd1;this['CACHE_VERSION']=_0x678fd1['db']?.['redisCacheVersion']||'1.0.0';const _0x390518=_0x678fd1?.['db']?.['redis'];const _0xb52923=_0x678fd1?.['db']?.['useRedis']!==![];this['useRedis']=_0xb52923;this['isShardMode']=typeof _0x390518==='object'&&_0x390518!==null&&_0x390518['shard']||![];if(!_0xb52923){this['logger']['warn']('🟠\x20[REDIS]\x20Disabled\x20via\x20config\x20(useRedis:\x20false).\x20Operating\x20in\x20In-Memory\x20Cache\x20mode\x20only.');this['isRedisConnected']=![];return;}if(this['isShardMode']){this['logger']['info']('🟣\x20[REDIS][SHARD]\x20Detected\x20redis\x20sharding\x20mode\x20(shard:\x20true).\x20Local\x20fallback\x20cache\x20DISABLED!');}this['_redisFallbackURLs']=[];if(Array['isArray'](_0x268670)){this['_redisFallbackURLs']=_0x268670['filter'](_0x37e482=>_0x37e482&&(typeof _0x37e482!=='string'||_0x37e482['trim']()['length']>-0x19a5*0x1+0x246b+-0xac6));}else if(typeof _0x268670==='string'){if(_0x268670['trim']()['length']>0x1668+0x43*0x7+0x55*-0x49){this['_redisFallbackURLs']=_0x268670['split'](',')['map'](_0x5050d7=>_0x5050d7['trim']())['filter'](_0x20794b=>_0x20794b['length']>0xaa6*0x3+0x523*0x1+-0x2515);}}else if(_0x268670&&typeof _0x268670==='object'&&Array['isArray'](_0x268670['urls'])){this['_redisFallbackURLs']=_0x268670['urls']['slice']();}else if(_0x268670&&typeof _0x268670==='object'&&Object['keys'](_0x268670)['length']>0x97a+-0x4cc+-0x1*0x4ae){this['_redisFallbackURLs']=[_0x268670];}this['_redisCurrentIndex']=0x39b+-0x17e4+0x1449;if(_0x3c726b){this['redis']=_0x3c726b;this['isRedisConnected']=_0x3c726b['status']==='ready';}else if(this['_redisFallbackURLs']['length']>-0x2f*-0x3d+-0x12ea+-0x7b7*-0x1){this['initializeRedis']();}else{if(this['isShardMode']){this['logger']['error']('❌\x20[REDIS][SHARD]\x20No\x20Redis\x20client/options,\x20but\x20shard:true.\x20Application\x20will\x20work\x20WITHOUT\x20caching!');this['isRedisConnected']=![];}else{this['logger']['warn']('🟠\x20[REDIS]\x20No\x20Redis\x20provided.\x20Switching\x20to\x20In-Memory\x20Cache\x20mode.');this['isRedisConnected']=![];}}}static['_trackRedisError'](_0x581ade){const _0x59d7b0=Date['now']();this['redisErrorTimestamps']=(this['redisErrorTimestamps']||[])['filter'](_0x1663f6=>_0x59d7b0-_0x1663f6<REDIS_ERROR_TOLERANCE_INTERVAL_MS);this['redisErrorTimestamps']['push'](_0x59d7b0);if(this['redisErrorTimestamps']['length']>=REDIS_ERROR_TOLERANCE_COUNT){if(this['isRedisConnected']){const _0x2b0494=this['_tryRedisFailover']();if(_0x2b0494){this['logger']['warn']('[REDIS]\x20Error\x20tolerance\x20reached,\x20switching\x20to\x20NEXT\x20Redis\x20failover...');}else if(this['isShardMode']){this['logger']['error']('❌\x20[REDIS][SHARD]\x20'+this['redisErrorTimestamps']['length']+'\x20consecutive\x20errors\x20in\x20'+REDIS_ERROR_TOLERANCE_INTERVAL_MS/(-0x1d74+0x17b*0x19+-0x37*0x11)+'s.\x20SHARD\x20MODE:\x20Disabling\x20cache\x20(NO\x20fallback),\x20all\x20queries\x20go\x20to\x20DB.\x20(Last\x20error:\x20'+_0x581ade?.['message']+')');this['isRedisConnected']=![];this['_scheduleReconnect']();}else{this['logger']['error']('❌\x20[REDIS]\x20'+this['redisErrorTimestamps']['length']+'\x20consecutive\x20errors\x20in\x20'+REDIS_ERROR_TOLERANCE_INTERVAL_MS/(-0x1c81*-0x1+-0x1b22+0x289)+'s.\x20All\x20Redis\x20exhausted,\x20fallback\x20to\x20In-Memory\x20Cache!\x20(Last\x20error:\x20'+_0x581ade?.['message']+')');this['isRedisConnected']=![];this['_scheduleReconnect']();}}this['redisErrorTimestamps']=[];}else{this['logger']['warn']('🟠\x20[REDIS]\x20Error\x20#'+this['redisErrorTimestamps']['length']+'/'+REDIS_ERROR_TOLERANCE_COUNT+'\x20tolerated.\x20('+_0x581ade?.['message']+')');}}static['_tryRedisFailover'](){if(!Array['isArray'](this['_redisFallbackURLs'])||this['_redisFallbackURLs']['length']<0x1d86+-0x2335*0x1+0x5b1){return![];}const _0x453d10=this['_redisCurrentIndex'];if(this['_redisCurrentIndex']+(-0x11*0x49+0x2374+-0xf4d*0x2)<this['_redisFallbackURLs']['length']){this['_redisCurrentIndex']++;this['logger']['warn']('[REDIS][FAILOVER]\x20Trying\x20to\x20switch\x20Redis\x20connection\x20from\x20url\x20index\x20'+_0x453d10+'\x20to\x20'+this['_redisCurrentIndex']);this['_justFailedOver']=!![];this['_closeCurrentRedis']();this['initializeRedis']();return!![];}return![];}static['_closeCurrentRedis'](){if(this['redis']&&typeof this['redis']['quit']==='function'){try{this['redis']['quit']();}catch(_0x34b50a){this['logger']['warn']('[REDIS]\x20Error\x20while\x20closing\x20connection:',_0x34b50a);}}this['redis']=undefined;this['isRedisConnected']=![];}static['initializeRedis'](_0x2bcee8){if(_0x2bcee8){if(Array['isArray'](_0x2bcee8)){this['_redisFallbackURLs']=_0x2bcee8['slice']();this['_redisCurrentIndex']=0x14*0xd+0x1d28+-0x1e2c;}else if(_0x2bcee8&&typeof _0x2bcee8==='object'&&Array['isArray'](_0x2bcee8['urls'])){this['_redisFallbackURLs']=_0x2bcee8['urls']['slice']();this['_redisCurrentIndex']=0x1353+-0x4f2+-0xe61;}else{this['_redisFallbackURLs']=[_0x2bcee8];this['_redisCurrentIndex']=0x23f3+-0x19a8+-0xa4b;}}if(!Array['isArray'](this['_redisFallbackURLs'])||this['_redisFallbackURLs']['length']===0x142b+-0x2020+-0xbf5*-0x1){if(this['isShardMode']){this['logger']['error']('❌\x20[REDIS][SHARD]\x20No\x20Redis\x20URL/options\x20provided\x20but\x20shard:true.\x20Will\x20run\x20without\x20caching!');this['isRedisConnected']=![];}else{this['logger']['warn']('🟠\x20[REDIS]\x20No\x20Redis\x20client\x20or\x20options\x20provided.\x20Operating\x20in\x20In-Memory\x20Cache\x20mode\x20only.');this['isRedisConnected']=![];}return null;}const _0x1ae2a7=require('ioredis');this['lastRedisOpts']=Array['isArray'](this['_redisFallbackURLs'])?this['_redisFallbackURLs']['slice']():[this['_redisFallbackURLs']];if(this['redis'])return this['redis'];const _0x50c4a6=this['_redisFallbackURLs'][this['_redisCurrentIndex']];if(_0x50c4a6&&typeof _0x50c4a6==='object'&&_0x50c4a6['shard']){this['isShardMode']=!![];}let _0x130179;if(typeof _0x50c4a6==='string'){_0x130179={'url':_0x50c4a6,'retryStrategy':this['_makeRetryStrategy']()};}else if(_0x50c4a6&&typeof _0x50c4a6==='object'){_0x130179={'maxRetriesPerRequest':0x2,'enableReadyCheck':!![],'retryStrategy':this['_makeRetryStrategy'](),..._0x50c4a6};}else{this['logger']['error']('❌\x20[REDIS]\x20Invalid\x20redis\x20config\x20detected\x20in\x20list');this['isRedisConnected']=![];return null;}this['redis']=new _0x1ae2a7(_0x130179['url']||_0x130179);this['_setupRedisEventHandlers']();return this['redis'];}static['_makeRetryStrategy'](){return _0x471273=>{if(_0x471273>-0x22af+-0xf*-0x20f+-0x3d3*-0x1){this['logger']['error']('❌\x20[REDIS]\x20Could\x20not\x20connect\x20after\x20'+(_0x471273-(0x5fb*-0x5+0x1*0x1cb7+0x131*0x1))+'\x20retries\x20for\x20Redis\x20#'+(this['_redisCurrentIndex']+(0x2007+0x6f1*0x2+-0x1c4*0x1a))+'.');return null;}const _0xa6ae81=Math['min'](_0x471273*(0x8df+-0x1cd6+0x15eb),0x1084+0x2*-0x250+-0x414);this['logger']['warn']('🟠\x20[REDIS]\x20Connection\x20failed\x20for\x20Redis\x20#'+(this['_redisCurrentIndex']+(-0x53*0x1b+-0xe92+0x1754))+'.\x20Retrying\x20in\x20'+_0xa6ae81+'ms\x20(Attempt\x20'+_0x471273+')...');return _0xa6ae81;};}static['_setupRedisEventHandlers'](){if(!this['redis'])return;this['redis']['on']('connect',async()=>{if(!this['isRedisConnected']){this['logger']['info']('✅\x20[REDIS]\x20Connection\x20established.\x20Switching\x20to\x20Redis\x20Cache\x20mode.');}this['isRedisConnected']=!![];this['redisErrorTimestamps']=[];if(this['reconnectTimeout']){clearTimeout(this['reconnectTimeout']);this['reconnectTimeout']=null;}this['_redisFailedIndexes']['delete'](this['_redisCurrentIndex']);if(this['_justFailedOver']){this['logger']['warn']('[REDIS][FAILOVER]\x20Connected\x20to\x20new\x20server,\x20flushing\x20potentially\x20stale\x20cache...');try{await this['redis']?.['flushdb']();this['logger']['info']('[REDIS][FAILOVER]\x20Stale\x20cache\x20flushed\x20successfully.');}catch(_0x5d06f8){this['logger']['error']('[REDIS][FAILOVER]\x20FAILED\x20TO\x20FLUSH\x20CACHE:',_0x5d06f8);}this['_justFailedOver']=![];}});this['redis']['on']('error',_0x402bb4=>{if(_0x402bb4&&(_0x402bb4['code']==='ECONNREFUSED'||_0x402bb4['message'])){this['logger']['warn']('🟠\x20[REDIS]\x20Connection\x20error:\x20'+_0x402bb4['message']);}});this['redis']['on']('close',()=>{if(this['isRedisConnected']){if(this['isShardMode']){this['logger']['error']('❌\x20[REDIS][SHARD]\x20Connection\x20closed.\x20Cache\x20DISABLED\x20(no\x20fallback).');}else{this['logger']['error']('❌\x20[REDIS]\x20Connection\x20closed.\x20Fallback/failover\x20will\x20be\x20attempted.');}}this['isRedisConnected']=![];this['_redisFailedIndexes']['add'](this['_redisCurrentIndex']);this['logger']['warn']('[REDIS]\x20Connection\x20#'+(this['_redisCurrentIndex']+(0x6*0x4b6+-0x1a69+-0x1da))+'\x20closed.\x20Attempting\x20immediate\x20failover...');const _0x22a15b=this['_tryRedisFailover']();if(!_0x22a15b){this['logger']['warn']('[REDIS]\x20Failover\x20exhausted.\x20Scheduling\x20full\x20reconnect...');this['_scheduleReconnect']();}});}static['_scheduleReconnect'](){if(this['reconnectTimeout'])return;const _0x229eb2=Date['now']();const _0x248950=_0x229eb2-this['lastAutoReconnectTs'];if(_0x248950<RECONNECT_DELAY_MINUTES*(-0x1185+-0x9a*-0x10+0x821)*(0x472*-0x4+-0x16a3+-0x655*-0x7))return;this['lastAutoReconnectTs']=_0x229eb2;if(this['isShardMode']){this['logger']['warn']('[REDIS][SHARD]\x20Attempting\x20auto-reconnect\x20after\x20'+RECONNECT_DELAY_MINUTES+'min\x20downtime...');}else{this['logger']['warn']('🟢\x20[REDIS]\x20Attempting\x20auto-reconnect\x20after\x20'+RECONNECT_DELAY_MINUTES+'min\x20downtime...');}this['reconnectTimeout']=setTimeout(()=>{this['reconnectTimeout']=null;this['_redisCurrentIndex']=-0x1*-0x985+0x1c3f+-0x25c4*0x1;this['_redisFailedIndexes']['clear']();this['_closeCurrentRedis']();this['initializeRedis']();},RECONNECT_DELAY_MINUTES*(-0xb*-0x2b9+0x45d*0x3+0x2ace*-0x1)*(0x3fa*0x3+0x1e32*-0x1+-0x2b*-0x84));}static['getCacheKey'](_0x2ee0b5){let _0x3bffe9=_0x2ee0b5;if(_0x3bffe9&&typeof _0x3bffe9==='object'&&!_0x3bffe9['where']){if(_0x3bffe9['include']){_0x3bffe9={'where':{},..._0x3bffe9};}else{_0x3bffe9={'where':_0x3bffe9};}}const _0x3a359e={'replacer':(_0x266b5f,_0x4aa2d2)=>typeof _0x4aa2d2==='bigint'?_0x4aa2d2['toString']():_0x4aa2d2};const _0x898438=typeof _0x2ee0b5==='string'?_0x2ee0b5:jsonStringify(this['normalizeQueryOptions'](_0x3bffe9),_0x3a359e);return this['CACHE_VERSION']+':'+this['name']+':'+_0x898438;}static['normalizeQueryOptions'](_0x323cd3){if(!_0x323cd3||typeof _0x323cd3!=='object')return _0x323cd3;if(Array['isArray'](_0x323cd3))return _0x323cd3['map'](_0xeef4a7=>this['normalizeQueryOptions'](_0xeef4a7));const _0x143436={};Object['keys'](_0x323cd3)['sort']()['forEach'](_0x5577e4=>{_0x143436[_0x5577e4]=this['normalizeQueryOptions'](_0x323cd3[_0x5577e4]);});Object['getOwnPropertySymbols'](_0x323cd3)['forEach'](_0x446195=>{const _0x3fa0b2='$'+_0x446195['toString']()['slice'](0xe6a+-0x165d+0x1*0x7fa,-(-0xeb4*0x1+-0x2561+0x3416));_0x143436[_0x3fa0b2]=this['normalizeQueryOptions'](_0x323cd3[_0x446195]);});return _0x143436;}static['_generateSmartTags'](_0x19c4ac){if(!_0x19c4ac)return[''+this['name']];const _0x2a3b4d=[''+this['name']];const _0xf1d6c8=this['primaryKeyAttribute'];if(_0x19c4ac[_0xf1d6c8]){_0x2a3b4d['push'](this['name']+':'+_0xf1d6c8+':'+_0x19c4ac[_0xf1d6c8]);}const _0x706f11=this['cacheKeys']||this['CACHE_KEYS']||[];if(Array['isArray'](_0x706f11)){for(const _0x505598 of _0x706f11){const _0x5f333e=Array['isArray'](_0x505598)?_0x505598:[_0x505598];const _0x126948=_0x5f333e['every'](_0x2ab35e=>_0x19c4ac[_0x2ab35e]!==undefined&&_0x19c4ac[_0x2ab35e]!==null);if(_0x126948){const _0x15bb6b=_0x5f333e['map'](_0x525afe=>_0x525afe+':'+_0x19c4ac[_0x525afe])['join'](':');_0x2a3b4d['push'](this['name']+':'+_0x15bb6b);}}}return _0x2a3b4d;}static async['setCacheEntry'](_0x49e55f,_0x2f0cf2,_0x48df4c,_0x13674a=[]){const _0x1eb2de=typeof _0x49e55f==='string'?_0x49e55f:this['getCacheKey'](_0x49e55f);const _0x44a24f=_0x48df4c||this['CACHE_TTL']||this['DEFAULT_TTL'];if(this['isRedisConnected']){await this['_redisSetCacheEntry'](_0x1eb2de,_0x2f0cf2,_0x44a24f,_0x13674a);}else if(!this['isShardMode']){this['_mapSetCacheEntry'](_0x1eb2de,_0x2f0cf2,_0x44a24f);}}static async['getCachedEntry'](_0x3fb4b0,_0xd8f48){const _0x278643=typeof _0x3fb4b0==='string'?_0x3fb4b0:this['getCacheKey'](_0x3fb4b0);let _0x535409={'hit':![],'data':undefined};if(this['isRedisConnected']){_0x535409=await this['_redisGetCachedEntry'](_0x278643,_0xd8f48);}else if(!this['isShardMode']){_0x535409=await this['_mapGetCachedEntry'](_0x278643,_0xd8f48);}if(this['metrics']){this['metrics']['cacheOpsTotal']['inc']({'type':_0x535409['hit']?'hit':'miss','model':this['name']});}return _0x535409;}static async['clearCache'](_0x39f2f6){const _0x437807=typeof _0x39f2f6==='string'?_0x39f2f6:this['getCacheKey'](_0x39f2f6);if(this['isRedisConnected']){await this['_redisClearCache'](_0x437807);}else if(!this['isShardMode']){this['_mapClearCache'](_0x437807);}}static async['_redisSetCacheEntry'](_0x5168b8,_0x1cee69,_0x1a04db,_0x25322b=[]){if(!this['redis'])return;try{let _0x512708=_0x1cee69;if(_0x1cee69&&typeof _0x1cee69['toJSON']==='function'){_0x512708=_0x1cee69['toJSON']();}else if(Array['isArray'](_0x1cee69)){_0x512708=_0x1cee69['map'](_0x373900=>_0x373900&&typeof _0x373900['toJSON']==='function'?_0x373900['toJSON']():_0x373900);}const _0x3f0edd=_0x512708===null?NEGATIVE_CACHE_PLACEHOLDER:safeStringify(_0x512708,this['logger']);const _0x3aa8ba=this['redis']['multi']();_0x3aa8ba['set'](_0x5168b8,_0x3f0edd,'PX',_0x1a04db);const _0x5a33df=Math['ceil'](_0x1a04db/(-0xe68+-0xbf*-0x1d+-0x17*0x25)*(-0x28a+-0xa2e+-0xcba*-0x1));for(const _0x49601f of _0x25322b){_0x3aa8ba['sadd'](_0x49601f,_0x5168b8);_0x3aa8ba['expire'](_0x49601f,_0x5a33df);}await _0x3aa8ba['exec']();this['cacheStats']['sets']++;}catch(_0xb4895d){this['_trackRedisError'](_0xb4895d);}}static async['_redisGetCachedEntry'](_0x45bafc,_0x12cc7e){if(!this['redis'])return{'hit':![],'data':undefined};try{const _0x50a5c7=await this['redis']['get'](_0x45bafc);if(_0x50a5c7===null||_0x50a5c7===undefined)return{'hit':![],'data':undefined};this['cacheStats']['redisHits']++;if(_0x50a5c7===NEGATIVE_CACHE_PLACEHOLDER){return{'hit':!![],'data':null};}const _0x18f374=safeParse(_0x50a5c7,this['logger']);if(_0x18f374===null){return{'hit':![],'data':undefined};}const _0x3ba7b2=_0x12cc7e?Array['isArray'](_0x12cc7e)?_0x12cc7e:[_0x12cc7e]:undefined;const _0x56e333=_0x305c07=>{const _0x1cf8da=this['build'](_0x305c07,{'isNewRecord':![],'include':_0x3ba7b2});return _0x1cf8da;};if(Array['isArray'](_0x18f374)){const _0x4ff89c=_0x18f374['map'](_0x5dd7b5=>_0x56e333(_0x5dd7b5));return{'hit':!![],'data':_0x4ff89c};}else{const _0x3aad01=_0x56e333(_0x18f374);return{'hit':!![],'data':_0x3aad01};}}catch(_0x4103d4){this['_trackRedisError'](_0x4103d4);return{'hit':![],'data':undefined};}}static async['_redisClearCache'](_0x39a693){if(!this['redis'])return;try{await this['redis']['del'](_0x39a693);this['cacheStats']['clears']++;}catch(_0x1cd1db){this['_trackRedisError'](_0x1cd1db);}}static async['invalidateByTags'](_0x5e90cf){if(!this['isRedisConnected']||!Array['isArray'](_0x5e90cf)||_0x5e90cf['length']===0x952+0x43d+-0xd8f||!this['redis'])return;try{const _0x5f3b7d=await this['redis']['sunion'](_0x5e90cf);if(_0x5f3b7d&&_0x5f3b7d['length']>-0xad*-0x16+0x1431+-0x230f){this['logger']['info']('🎯\x20[SNIPER]\x20Invalidating\x20'+_0x5f3b7d['length']+'\x20keys\x20for\x20tags:\x20'+_0x5e90cf['join'](',\x20'));await this['redis']['multi']()['del'](_0x5f3b7d)['del'](_0x5e90cf)['exec']();}else{await this['redis']['del'](_0x5e90cf);}}catch(_0x42d414){this['_trackRedisError'](_0x42d414);}}static['_mapSetCacheEntry'](_0x1fc8e8,_0x59cfea,_0x3ebb6c){if(this['isShardMode'])return;if(_0x59cfea===null){this['localCache']['set'](_0x1fc8e8,{'data':NEGATIVE_CACHE_PLACEHOLDER,'expires':Date['now']()+_0x3ebb6c});}else{let _0x17ec0b=_0x59cfea;if(_0x59cfea&&typeof _0x59cfea['toJSON']==='function'){_0x17ec0b=_0x59cfea['toJSON']();}else if(Array['isArray'](_0x59cfea)){_0x17ec0b=_0x59cfea['map'](_0x32e5e7=>_0x32e5e7&&typeof _0x32e5e7['toJSON']==='function'?_0x32e5e7['toJSON']():_0x32e5e7);}const _0x274ccf=_0x17ec0b===null?NEGATIVE_CACHE_PLACEHOLDER:safeStringify(_0x17ec0b,this['logger']);this['localCache']['set'](_0x1fc8e8,{'data':_0x274ccf,'expires':Date['now']()+_0x3ebb6c});}this['cacheStats']['sets']++;}static['_mapGetCachedEntry'](_0x11323e,_0x16f6df){if(this['isShardMode'])return{'hit':![],'data':undefined};const _0x543a1=this['localCache']['get'](_0x11323e);if(_0x543a1&&_0x543a1['expires']>Date['now']()){if(_0x543a1['data']===NEGATIVE_CACHE_PLACEHOLDER){this['cacheStats']['mapHits']++;return{'hit':!![],'data':null};}this['cacheStats']['mapHits']++;const _0x142274=_0x543a1['data'];let _0x2cc37d;if(typeof _0x142274==='string'){_0x2cc37d=safeParse(_0x142274,this['logger']);}else{_0x2cc37d=_0x142274;}if(typeof _0x2cc37d!=='object'||_0x2cc37d===null){return{'hit':!![],'data':_0x2cc37d};}const _0x217a47=_0x16f6df?Array['isArray'](_0x16f6df)?_0x16f6df:[_0x16f6df]:undefined;if(Array['isArray'](_0x2cc37d)){const _0x3afbcc=this['bulkBuild'](_0x2cc37d,{'isNewRecord':![],'include':_0x217a47});return{'hit':!![],'data':_0x3afbcc};}else{const _0x2878bc=this['build'](_0x2cc37d,{'isNewRecord':![],'include':_0x217a47});return{'hit':!![],'data':_0x2878bc};}}if(_0x543a1)this['localCache']['delete'](_0x11323e);return{'hit':![],'data':undefined};}static['_mapClearCache'](_0x5ed054){if(this['isShardMode'])return;this['localCache']['delete'](_0x5ed054);this['cacheStats']['clears']++;}static['_mapClearAllModelCache'](){if(this['isShardMode'])return;const _0xb1e76c=this['CACHE_VERSION']+':'+this['name']+':';let _0xaab144=0x387+-0x251b+0x2194;for(const _0x37204b of this['localCache']['keys']()){if(_0x37204b['startsWith'](_0xb1e76c)){this['localCache']['delete'](_0x37204b);_0xaab144++;}}if(_0xaab144>0x1f53+0x3*-0x6ef+-0x1*0xa86){this['logger']['info']('♻️\x20[MAP\x20CACHE]\x20Cleared\x20'+_0xaab144+'\x20in-memory\x20entries\x20for\x20'+this['name']+'\x20(Redis\x20fallback).');}}static async['_performDriftCheck'](_0x5c996c,_0x5dfc2b,_0x23dd50,_0x2cba53){this['driftStats']['checked']++;try{const _0x3c0774=await this['findOne'](_0x23dd50);const _0x41a6a8=_0x5dfc2b?.['toJSON']?.()??_0x5dfc2b??null;const _0x164505=_0x3c0774?.['toJSON']?.()??_0x3c0774??null;const _0x23112f=safeStringify(_0x41a6a8,this['logger']);const _0x4d1ecf=safeStringify(_0x164505,this['logger']);if(_0x23112f===_0x4d1ecf)return;this['driftStats']['drifted']++;const _0x5cade9={};const _0x3b47b4=new Set([...Object['keys'](_0x41a6a8??{}),...Object['keys'](_0x164505??{})]);for(const _0x463b2b of _0x3b47b4){if(JSON['stringify'](_0x41a6a8?.[_0x463b2b])!==JSON['stringify'](_0x164505?.[_0x463b2b])){_0x5cade9[_0x463b2b]={'cached':_0x41a6a8?.[_0x463b2b],'fresh':_0x164505?.[_0x463b2b]};}}const _0x3dfc75=Object['keys'](_0x5cade9)['join'](',\x20');this['logger']['warn']('🔬\x20[DRIFT\x20DETECTED]\x20'+this['name']+'\x20|\x20key:\x20'+_0x5c996c+'\x20|\x20'+(Object['keys'](_0x5cade9)['length']+'\x20drifted\x20field(s):\x20['+_0x3dfc75+']\x20→\x20self-healing...'));const _0x571e29=this['_generateSmartTags'](_0x3c0774);const _0x29eccb=_0x2cba53||this['CACHE_TTL']||this['DEFAULT_TTL'];await this['setCacheEntry'](_0x5c996c,_0x3c0774,_0x29eccb,_0x571e29);this['driftStats']['healed']++;this['logger']['info']('🩹\x20[SELF-HEALED]\x20'+this['name']+'\x20|\x20key:\x20'+_0x5c996c+'\x20|\x20cache\x20updated\x20with\x20fresh\x20DB\x20data.');}catch(_0x5f645e){this['driftStats']['errors']++;this['logger']['warn']('🔬\x20[DRIFT\x20CHECK\x20ERROR]\x20'+this['name']+'\x20|\x20key:\x20'+_0x5c996c+'\x20|\x20'+_0x5f645e?.['message']);}}static['getCacheDriftStats'](){return{...this['driftStats'],'rate':this['DRIFT_CHECK_RATE'],'enabled':this['DRIFT_CHECK_ENABLED']};}static['_normalizeFindOptions'](_0x859298){if(!_0x859298||typeof _0x859298!=='object'||Object['keys'](_0x859298)['length']===-0x15ae+0x1ee5*-0x1+0x3493)return{'where':{}};const _0x15dc14=['cacheTags','noCache','ttl','customCacheKey'];if(_0x859298['where']){const _0x1e7f2d={..._0x859298};for(const _0x4fefdb of _0x15dc14){delete _0x1e7f2d[_0x4fefdb];}return _0x1e7f2d;}const _0x5cf67d=['order','limit','offset','attributes','include','group','having','paranoid','lock','skipLocked','subQuery','raw','nest','plain','transaction','logging','benchmark','replacements','bind','scope','col'];const _0x37be48={};const _0x19f7f6={};for(const _0x42685f in _0x859298){if(_0x15dc14['includes'](_0x42685f)){continue;}if(_0x5cf67d['includes'](_0x42685f))_0x19f7f6[_0x42685f]=_0x859298[_0x42685f];else _0x37be48[_0x42685f]=_0x859298[_0x42685f];}return{'where':_0x37be48,..._0x19f7f6};}static async['getCache'](_0xa59fb3,_0x28be2f={}){const {noCache:_0x132d63,customCacheKey:_0x1a1fee,ttl:_0x3039d7,..._0x476997}=_0x28be2f;if(Array['isArray'](_0xa59fb3)){return this['bulkGetCache'](_0xa59fb3,_0x28be2f);}const _0x4393a4=this['_normalizeFindOptions'](_0xa59fb3);const _0x2d2ff7={..._0x4393a4,..._0x476997,'where':{..._0x4393a4['where']||{},..._0x476997['where']||{}}};const _0x522d61=_0x2d2ff7['where']&&Object['keys'](_0x2d2ff7['where'])['length']>-0x1*0x126a+0x10a3*0x2+-0xedc;if(!_0x522d61){this['logger']['warn']('⚠️\x20[getCache]\x20Called\x20on\x20'+this['name']+'\x20without\x20where\x20clause\x20—\x20returning\x20null.');return null;}if(_0x132d63){this['cacheStats']['misses']++;return this['findOne'](_0x2d2ff7);}const _0x30a046=_0x1a1fee||this['getCacheKey'](_0x2d2ff7);const _0x36deff=await this['getCachedEntry'](_0x30a046,_0x2d2ff7['include']);if(_0x36deff['hit']){if(this['DRIFT_CHECK_ENABLED']&&_0x36deff['data']!==null&&Math['random']()<this['DRIFT_CHECK_RATE']){void this['_performDriftCheck'](_0x30a046,_0x36deff['data'],_0x2d2ff7,_0x3039d7);}return _0x36deff['data'];}this['cacheStats']['misses']++;if(this['pendingQueries']['has'](_0x30a046))return this['pendingQueries']['get'](_0x30a046);const _0x3b27e8=this['findOne'](_0x2d2ff7)['then'](async _0x343ace=>{if(this['isRedisConnected']||!this['isShardMode']){const _0x9ff2d3=this['_generateSmartTags'](_0x343ace);const _0x235d78=_0x343ace?_0x3039d7:this['NEGATIVE_CACHE_TTL']||-0x3421+-0x13*0x823+-0x1*-0x143ea;await this['setCacheEntry'](_0x30a046,_0x343ace,_0x235d78,_0x9ff2d3);}return _0x343ace;})['finally'](()=>this['pendingQueries']['delete'](_0x30a046));this['pendingQueries']['set'](_0x30a046,_0x3b27e8);return _0x3b27e8;}static async['getAllCache'](_0x14da0f={}){const {cacheTags:_0x82251d,noCache:_0xb8fdac,customCacheKey:_0x55adfe,ttl:_0x2b46d7,..._0x428a52}=_0x14da0f||{};const _0x10c43a=this['_normalizeFindOptions'](_0x428a52);if(_0xb8fdac){this['cacheStats']['misses']++;return this['findAll'](_0x10c43a);}const _0x57b2a2=_0x55adfe||this['getCacheKey'](_0x10c43a);const _0x3797e4=await this['getCachedEntry'](_0x57b2a2,_0x10c43a['include']);if(_0x3797e4['hit'])return _0x3797e4['data'];this['cacheStats']['misses']++;if(this['pendingQueries']['has'](_0x57b2a2))return this['pendingQueries']['get'](_0x57b2a2);const _0xa583fc=this['findAll'](_0x10c43a)['then'](async _0xa11517=>{if(this['isRedisConnected']||!this['isShardMode']){const _0x55648c=[''+this['name']];if(Array['isArray'](_0x82251d))_0x55648c['push'](..._0x82251d);await this['setCacheEntry'](_0x57b2a2,_0xa11517,_0x2b46d7,_0x55648c);}return _0xa11517;})['finally'](()=>this['pendingQueries']['delete'](_0x57b2a2));this['pendingQueries']['set'](_0x57b2a2,_0xa583fc);return _0xa583fc;}static async['scheduleAdd'](_0x36d1b7,_0x34b05f,_0xd7ba53){if(!this['isRedisConnected']||!this['redis'])return;const _0x5594eb=this['name']+':'+_0x36d1b7;try{await this['redis']['zadd'](_0x5594eb,_0x34b05f,_0xd7ba53);}catch(_0x54a763){this['_trackRedisError'](_0x54a763);}}static async['scheduleRemove'](_0x538619,_0x2ddfc8){if(!this['isRedisConnected']||!this['redis'])return;const _0x3b1f0b=this['name']+':'+_0x538619;try{await this['redis']['zrem'](_0x3b1f0b,_0x2ddfc8);}catch(_0x813b7){this['_trackRedisError'](_0x813b7);}}static async['scheduleGetExpired'](_0x356ce7,_0x346c5a=Date['now']()){if(!this['isRedisConnected']||!this['redis'])return[];const _0x2484a3=this['name']+':'+_0x356ce7;try{return await this['redis']['zrangebyscore'](_0x2484a3,-0xf9*-0x13+-0x16e6+0x3*0x179,_0x346c5a);}catch(_0x43852c){this['_trackRedisError'](_0x43852c);return[];}}static async['scheduleClear'](_0x125f13){if(!this['isRedisConnected']||!this['redis'])return;const _0x59fbb9=this['name']+':'+_0x125f13;try{await this['redis']['del'](_0x59fbb9);}catch(_0x2f44bd){this['_trackRedisError'](_0x2f44bd);}}static async['findOrCreateWithCache'](_0x454405){if(!_0x454405?.['where']){throw new Error('findOrCreateWithCache\x20requires\x20a\x20\x27where\x27\x20option.');}const {where:_0x492e02,defaults:_0xa968b7,noCache:_0x3e3ea1,..._0x235a53}=_0x454405;if(_0x3e3ea1){return this['findOrCreate'](_0x454405);}const _0x943441=this['_normalizeFindOptions'](_0x492e02)['where'];const _0x2d3ef7=this['getCacheKey']({'where':_0x943441,..._0x235a53});const _0x29cbb6=await this['getCachedEntry'](_0x2d3ef7,_0x235a53['include']);if(_0x29cbb6['hit']&&_0x29cbb6['data']){const _0x49da6d=_0x29cbb6['data'];let _0x5dd105=![];if(_0xa968b7&&typeof _0xa968b7==='object'){for(const _0x3c9105 in _0xa968b7){if(_0x49da6d[_0x3c9105]===undefined||String(_0x49da6d[_0x3c9105])!==String(_0xa968b7[_0x3c9105])){_0x49da6d['set'](_0x3c9105,_0xa968b7[_0x3c9105]);_0x5dd105=!![];}}}if(_0x5dd105){try{await _0x49da6d['save']();}catch(_0x194eaa){await this['clearCache'](_0x2d3ef7);throw _0x194eaa;}}return[_0x49da6d,![]];}this['cacheStats']['misses']++;if(this['pendingQueries']['has'](_0x2d3ef7)){return this['pendingQueries']['get'](_0x2d3ef7);}const _0x2f47e8=this['findOne']({'where':_0x492e02,..._0x235a53})['then'](async _0x48ce29=>{if(_0x48ce29){let _0x129a58=![];if(_0xa968b7&&typeof _0xa968b7==='object'){for(const _0xc56c20 in _0xa968b7){if(_0x48ce29[_0xc56c20]===undefined||String(_0x48ce29[_0xc56c20])!==String(_0xa968b7[_0xc56c20])){_0x48ce29['set'](_0xc56c20,_0xa968b7[_0xc56c20]);_0x129a58=!![];}}}if(_0x129a58){try{await _0x48ce29['save']();}catch(_0x1e180d){await this['clearCache'](_0x2d3ef7);throw _0x1e180d;}}else{const _0xc28d3=this['_generateSmartTags'](_0x48ce29);await this['setCacheEntry'](_0x2d3ef7,_0x48ce29,undefined,_0xc28d3);}return[_0x48ce29,![]];}else{const _0x153519={..._0x492e02,..._0xa968b7};const _0x37339b=await this['create'](_0x153519);return[_0x37339b,!![]];}})['finally'](()=>{this['pendingQueries']['delete'](_0x2d3ef7);});this['pendingQueries']['set'](_0x2d3ef7,_0x2f47e8);return _0x2f47e8;}static async['getOrCreateCache'](_0x4b4e6e,_0x2d76bb={},_0x1a545f={}){return this['findOrCreateWithCache']({'where':_0x4b4e6e,'defaults':_0x2d76bb,..._0x1a545f});}static async['firstOrCreateCache'](_0x4f70d1,_0x21ac67={},_0x511023={}){const {noCache:_0x2ec7cc,..._0x112b60}=_0x511023;const _0x509a56=this['_normalizeFindOptions'](_0x4f70d1)['where'];const _0x550178=this['getCacheKey']({'where':_0x509a56,..._0x112b60});if(!_0x2ec7cc){const _0x10797a=await this['getCachedEntry'](_0x550178,_0x112b60['include']);if(_0x10797a['hit']&&_0x10797a['data']){return[_0x10797a['data'],![]];}}this['cacheStats']['misses']++;if(this['pendingQueries']['has'](_0x550178)){return this['pendingQueries']['get'](_0x550178);}const _0x1c8a8f=this['findOne']({'where':_0x509a56,..._0x112b60})['then'](async _0x148929=>{if(_0x148929){const _0xaae1b7=this['_generateSmartTags'](_0x148929);await this['setCacheEntry'](_0x550178,_0x148929,undefined,_0xaae1b7);return[_0x148929,![]];}const _0x3fc321=await this['create']({..._0x509a56,..._0x21ac67});return[_0x3fc321,!![]];})['finally'](()=>this['pendingQueries']['delete'](_0x550178));this['pendingQueries']['set'](_0x550178,_0x1c8a8f);return _0x1c8a8f;}static async['firstOrNewCache'](_0x7a0aaf,_0x45a102={},_0x4090cc={}){const {noCache:_0x25de49,..._0xcbd57a}=_0x4090cc;const _0x46644b=this['_normalizeFindOptions'](_0x7a0aaf)['where'];const _0x3fd8e5=this['getCacheKey']({'where':_0x46644b,..._0xcbd57a});if(!_0x25de49){const _0x2dea69=await this['getCachedEntry'](_0x3fd8e5,_0xcbd57a['include']);if(_0x2dea69['hit']&&_0x2dea69['data']){return[_0x2dea69['data'],![]];}}this['cacheStats']['misses']++;const _0x554dd7=await this['findOne']({'where':_0x46644b,..._0xcbd57a});if(_0x554dd7){const _0x2107ee=this['_generateSmartTags'](_0x554dd7);await this['setCacheEntry'](_0x3fd8e5,_0x554dd7,undefined,_0x2107ee);return[_0x554dd7,![]];}const _0x14145d=this['build']({..._0x46644b,..._0x45a102});return[_0x14145d,!![]];}static async['firstOrUpdateCache'](_0x36cf7b,_0x44dbea={},_0x26b2dc={}){const {noCache:_0x197f53,..._0x4db014}=_0x26b2dc;const _0x3d4691=this['_normalizeFindOptions'](_0x36cf7b)['where'];const _0x4c82de=this['getCacheKey']({'where':_0x3d4691,..._0x4db014});if(!_0x197f53){const _0x53ecce=await this['getCachedEntry'](_0x4c82de,_0x4db014['include']);if(_0x53ecce['hit']&&_0x53ecce['data']){const _0x1d51fc=_0x53ecce['data'];try{_0x1d51fc['set'](_0x44dbea);await _0x1d51fc['save']();}catch(_0x106117){await this['clearCache'](_0x4c82de);throw _0x106117;}return[_0x1d51fc,![]];}}this['cacheStats']['misses']++;if(this['pendingQueries']['has'](_0x4c82de)){return this['pendingQueries']['get'](_0x4c82de);}const _0x53d720=this['findOne']({'where':_0x3d4691,..._0x4db014})['then'](async _0x501118=>{if(_0x501118){try{_0x501118['set'](_0x44dbea);await _0x501118['save']();}catch(_0x2b2722){await this['clearCache'](_0x4c82de);throw _0x2b2722;}return[_0x501118,![]];}const _0x1ab288=await this['create']({..._0x3d4691,..._0x44dbea});return[_0x1ab288,!![]];})['finally'](()=>this['pendingQueries']['delete'](_0x4c82de));this['pendingQueries']['set'](_0x4c82de,_0x53d720);return _0x53d720;}static async['updateOrCreateCache'](_0xce2b1e,_0x3cd29a={},_0x147bb7={}){const {..._0x5ed755}=_0x147bb7;const _0xa5c585=this['_normalizeFindOptions'](_0xce2b1e)['where'];const _0x2ca35f=this['getCacheKey']({'where':_0xa5c585,..._0x5ed755});if(this['pendingQueries']['has'](_0x2ca35f)){return this['pendingQueries']['get'](_0x2ca35f);}const _0x1a8305=this['findOne']({'where':_0xa5c585,..._0x5ed755})['then'](async _0x233f8a=>{if(_0x233f8a){try{_0x233f8a['set'](_0x3cd29a);await _0x233f8a['save']();}catch(_0x4172da){await this['clearCache'](_0x2ca35f);throw _0x4172da;}return[_0x233f8a,![]];}const _0x1925bb=await this['create']({..._0xa5c585,..._0x3cd29a});return[_0x1925bb,!![]];})['finally'](()=>{this['pendingQueries']['delete'](_0x2ca35f);});this['pendingQueries']['set'](_0x2ca35f,_0x1a8305);return _0x1a8305;}static async['countWithCache'](_0x53c24d={},_0xa23816=(-0x26f1+0x1*0x1a2+0x2554)*(0x40e*0x4+-0xdb*0x23+0xdf5)*(0x336+-0x2*0x3f5+-0x44e*-0x2)){const {noCache:_0x2313ed,ttl:_0xba86f7,cacheTags:_0xb09aeb,customCacheKey:_0x36ea38,..._0x1b8ed3}=_0x53c24d||{};const _0x1b3097={'queryType':'count',..._0x1b8ed3};const _0x2615c9=this['getCacheKey'](_0x1b3097);const _0x24b671=_0xba86f7||_0xa23816||this['CACHE_TTL']||this['DEFAULT_TTL'];if(!_0x2313ed){try{if(this['isRedisConnected']&&this['redis']){const _0x41e643=await this['redis']['get'](_0x2615c9);if(_0x41e643!==null&&_0x41e643!==undefined){this['cacheStats']['redisHits']++;return parseInt(_0x41e643,0xe82+0x9cd+-0x1845);}}else if(!this['isShardMode']){const _0x3b7120=this['localCache']['get'](_0x2615c9);if(_0x3b7120&&_0x3b7120['expires']>Date['now']()){this['cacheStats']['mapHits']++;const _0x3d3d2c=typeof _0x3b7120['data']==='string'?parseInt(_0x3b7120['data'],-0x66*0x25+-0x1fa5+0x2e6d):_0x3b7120['data'];return _0x3d3d2c;}}}catch(_0x206c94){this['_trackRedisError'](_0x206c94);}}this['cacheStats']['misses']++;const _0x275e65=await this['count'](_0x1b8ed3);try{if(this['isRedisConnected']&&this['redis']){const _0x41d6c2=Math['ceil'](_0x24b671/(-0x1*0x713+0xe7c+-0x381)*(0x1*0x2c9+-0x21e5+0x1f1e));await this['redis']['multi']()['set'](_0x2615c9,String(_0x275e65),'PX',_0x24b671)['sadd'](''+this['name'],_0x2615c9)['expire'](''+this['name'],_0x41d6c2)['exec']();this['cacheStats']['sets']++;}else if(!this['isShardMode']){this['localCache']['set'](_0x2615c9,{'data':String(_0x275e65),'expires':Date['now']()+_0x24b671});this['cacheStats']['sets']++;}}catch(_0x53e266){this['_trackRedisError'](_0x53e266);}return _0x275e65;}static async['clearNegativeCache'](_0x5cd80a){return this['clearCache'](_0x5cd80a);}static async['aggregateWithCache'](_0x2537bb={},_0x32c375={}){const {cacheTags:_0x3652ee,noCache:_0x3de99b,..._0x38b248}=_0x2537bb||{};const {ttl:ttl=(-0x54+0x162a*0x1+0x15d1*-0x1)*(0x1078+-0x8fd+-0x73f)*(0x16f0+-0x2*0xe87+0xa06)}=_0x32c375||{};const _0x4fb76f={'queryType':'aggregate',..._0x38b248};const _0x12a0c4=this['getCacheKey'](_0x4fb76f);const _0x175104=ttl||this['CACHE_TTL']||this['DEFAULT_TTL'];if(!_0x3de99b){try{if(this['isRedisConnected']&&this['redis']){const _0x3c309a=await this['redis']['get'](_0x12a0c4);if(_0x3c309a!==null&&_0x3c309a!==undefined){const _0x43f981=safeParse(_0x3c309a,this['logger']);if(_0x43f981!==null){this['cacheStats']['redisHits']++;return _0x43f981;}}}else if(!this['isShardMode']){const _0x4dcc6e=this['localCache']['get'](_0x12a0c4);if(_0x4dcc6e&&_0x4dcc6e['expires']>Date['now']()){this['cacheStats']['mapHits']++;const _0x5a819b=typeof _0x4dcc6e['data']==='string'?safeParse(_0x4dcc6e['data'],this['logger']):_0x4dcc6e['data'];return _0x5a819b;}}}catch(_0x17baf7){this['_trackRedisError'](_0x17baf7);}}this['cacheStats']['misses']++;const _0x2839f5=await this['findAll'](_0x38b248);try{const _0x102c31=_0x2839f5['map'](_0x23561e=>typeof _0x23561e['toJSON']==='function'?_0x23561e['toJSON']():_0x23561e);const _0x408b84=safeStringify(_0x102c31,this['logger']);if(this['isRedisConnected']&&this['redis']){const _0x3e3fed=Math['ceil'](_0x175104/(-0xf*0x125+-0x170*0x10+0x2c13)*(0x8cd+-0x5bc+-0x30f));const _0x6482c8=[''+this['name']];if(Array['isArray'](_0x3652ee))_0x6482c8['push'](..._0x3652ee);const _0x48884c=this['redis']['multi']();_0x48884c['set'](_0x12a0c4,_0x408b84,'PX',_0x175104);for(const _0x2f2e69 of _0x6482c8){_0x48884c['sadd'](_0x2f2e69,_0x12a0c4);_0x48884c['expire'](_0x2f2e69,_0x3e3fed);}await _0x48884c['exec']();this['cacheStats']['sets']++;}else if(!this['isShardMode']){this['localCache']['set'](_0x12a0c4,{'data':_0x408b84,'expires':Date['now']()+_0x175104});this['cacheStats']['sets']++;}}catch(_0x45a27d){this['_trackRedisError'](_0x45a27d);}return _0x2839f5;}static async['refreshCache'](_0x42283,_0x51ab23={}){const {ttl:_0x9db659,..._0x566e21}=_0x51ab23;const _0x16b45b=this['_normalizeFindOptions'](_0x42283);const _0x302d35={..._0x16b45b,..._0x566e21,'where':{..._0x16b45b['where']||{},..._0x566e21['where']||{}}};if(!_0x302d35['where']||Object['keys'](_0x302d35['where'])['length']===-0x91c*-0x2+0x1318+-0x2550)return null;const _0x2cb1b6=this['getCacheKey'](_0x302d35);await this['clearCache'](_0x2cb1b6);const _0xbbb0c8=await this['findOne'](_0x302d35);if(this['isRedisConnected']||!this['isShardMode']){const _0xbe46f=this['_generateSmartTags'](_0xbbb0c8);await this['setCacheEntry'](_0x2cb1b6,_0xbbb0c8,_0x9db659,_0xbe46f);}return _0xbbb0c8;}static async['existsCache'](_0x31023b,_0x29c2f2={}){const {noCache:_0xbf0499,ttl:_0x56fc8c}=_0x29c2f2;const _0x5c7156=this['_normalizeFindOptions'](_0x31023b)['where'];const _0x5dea88=this['getCacheKey']({'queryType':'exists','where':_0x5c7156});const _0x16b61c=_0x56fc8c||this['CACHE_TTL']||this['DEFAULT_TTL'];if(!_0xbf0499){try{if(this['isRedisConnected']&&this['redis']){const _0x482e52=await this['redis']['get'](_0x5dea88);if(_0x482e52!==null&&_0x482e52!==undefined){this['cacheStats']['redisHits']++;return _0x482e52==='true';}}else if(!this['isShardMode']){const _0x3f35ee=this['localCache']['get'](_0x5dea88);if(_0x3f35ee&&_0x3f35ee['expires']>Date['now']()){this['cacheStats']['mapHits']++;return _0x3f35ee['data']==='true'||_0x3f35ee['data']===!![];}}}catch(_0xaaafe9){this['_trackRedisError'](_0xaaafe9);}}this['cacheStats']['misses']++;const _0x1e15ce=await this['count']({'where':_0x5c7156});const _0xb9432=_0x1e15ce>0x1*-0xf5e+-0x99e+-0x18fc*-0x1;try{if(this['isRedisConnected']&&this['redis']){const _0x1dedc3=Math['ceil'](_0x16b61c/(-0x5*-0x112+0x1*0x9ef+-0xb61)*(0x7*-0x4d4+-0x1*0x2086+0x4254));await this['redis']['multi']()['set'](_0x5dea88,String(_0xb9432),'PX',_0x16b61c)['sadd'](''+this['name'],_0x5dea88)['expire'](''+this['name'],_0x1dedc3)['exec']();this['cacheStats']['sets']++;}else if(!this['isShardMode']){this['localCache']['set'](_0x5dea88,{'data':String(_0xb9432),'expires':Date['now']()+_0x16b61c});this['cacheStats']['sets']++;}}catch(_0x151dc2){this['_trackRedisError'](_0x151dc2);}return _0xb9432;}static async['bulkGetCache'](_0x111be1,_0x4e3b8d={}){if(!Array['isArray'](_0x111be1)||_0x111be1['length']===0x1901+-0x16fc+-0x205)return[];const _0x18568b=this['primaryKeyAttribute'];const {noCache:_0x3aa2ee,ttl:_0x22747e,customCacheKey:_0x22a893,..._0x3ee6ec}=_0x4e3b8d;const _0x334db2=new Map();const _0x4767f3=[];if(!_0x3aa2ee){await Promise['all'](_0x111be1['map'](async _0x53e768=>{const _0x2697dc=this['getCacheKey']({'where':{[_0x18568b]:_0x53e768},..._0x3ee6ec});const _0x2115a8=await this['getCachedEntry'](_0x2697dc,_0x3ee6ec['include']);if(_0x2115a8['hit']&&_0x2115a8['data']){_0x334db2['set'](_0x53e768,_0x2115a8['data']);}else{_0x4767f3['push'](_0x53e768);}}));}else{_0x4767f3['push'](..._0x111be1);}if(_0x4767f3['length']>0x1e19*-0x1+-0x5*0x2+0x1*0x1e23){this['cacheStats']['misses']+=_0x4767f3['length'];const _0x2ddca9=await this['findAll']({'where':{[_0x18568b]:_0x4767f3},..._0x3ee6ec});await Promise['all'](_0x2ddca9['map'](async _0x1a6f1c=>{const _0x565c94=_0x1a6f1c[_0x18568b];_0x334db2['set'](_0x565c94,_0x1a6f1c);if(this['isRedisConnected']||!this['isShardMode']){const _0x1fe41b=this['getCacheKey']({'where':{[_0x18568b]:_0x565c94},..._0x3ee6ec});const _0x1307dd=this['_generateSmartTags'](_0x1a6f1c);await this['setCacheEntry'](_0x1fe41b,_0x1a6f1c,_0x22747e,_0x1307dd);}}));}return _0x111be1['map'](_0x3abdcd=>_0x334db2['get'](_0x3abdcd))['filter'](Boolean);}static async['destroyAndClearCache'](_0x447449){if(!_0x447449?.['where']){throw new Error('destroyAndClearCache\x20requires\x20a\x20\x27where\x27\x20option.');}const _0x2cd75c=await this['destroy'](_0x447449);if(this['isRedisConnected']){await this['invalidateByTags']([''+this['name']]);}else if(!this['isShardMode']){this['_mapClearAllModelCache']();}return _0x2cd75c;}static async['incrementCache'](_0x2595b8,_0x804fb7,_0x3ccfbc=-0x57*0x1f+-0x2132+0x2bbc){const _0x2302cc=this['_normalizeFindOptions'](_0x2595b8)['where'];await this['increment'](_0x804fb7,{'by':_0x3ccfbc,'where':_0x2302cc});const _0x564677=this['primaryKeyAttribute'];const _0x51f064=_0x2302cc[_0x564677];if(this['isRedisConnected']){const _0x5642f3=_0x51f064?[''+this['name'],this['name']+':'+_0x564677+':'+_0x51f064]:[''+this['name']];await this['invalidateByTags'](_0x5642f3);}else if(!this['isShardMode']){this['_mapClearAllModelCache']();}}static async['paginateCache'](_0x20425e={}){const {page:page=0x77*0x2a+0xd46+-0x20cb*0x1,pageSize:pageSize=-0x656+-0x238f+-0x23*-0x133,noCache:_0x35cebc,ttl:_0x9cb855,cacheTags:_0x6fc61e,..._0x547a70}=_0x20425e;const _0x38827b=(page-(0x1fa5+0xbc4+-0x1*0x2b68))*pageSize;const _0x150fc9=this['_normalizeFindOptions'](_0x547a70);const _0xff04e5={..._0x150fc9,'limit':pageSize,'offset':_0x38827b};const _0x5a0b29=_0x9cb855||this['CACHE_TTL']||this['DEFAULT_TTL'];const _0x192848=this['getCacheKey']({'queryType':'paginate','page':page,'pageSize':pageSize,..._0x150fc9});if(!_0x35cebc){try{if(this['isRedisConnected']&&this['redis']){const _0xb6816d=await this['redis']['get'](_0x192848);if(_0xb6816d!==null&&_0xb6816d!==undefined){const _0x4d2cf1=safeParse(_0xb6816d,this['logger']);if(_0x4d2cf1&&typeof _0x4d2cf1==='object'&&'rows'in _0x4d2cf1){this['cacheStats']['redisHits']++;const _0xa235ed=_0xff04e5['include']?Array['isArray'](_0xff04e5['include'])?_0xff04e5['include']:[_0xff04e5['include']]:undefined;_0x4d2cf1['rows']=_0x4d2cf1['rows']['map'](_0x3716aa=>this['build'](_0x3716aa,{'isNewRecord':![],'include':_0xa235ed}));return _0x4d2cf1;}}}else if(!this['isShardMode']){const _0x31ae48=this['localCache']['get'](_0x192848);if(_0x31ae48&&_0x31ae48['expires']>Date['now']()){const _0x1335dc=typeof _0x31ae48['data']==='string'?safeParse(_0x31ae48['data'],this['logger']):_0x31ae48['data'];if(_0x1335dc&&typeof _0x1335dc==='object'&&'rows'in _0x1335dc){this['cacheStats']['mapHits']++;const _0x331486=_0xff04e5['include']?Array['isArray'](_0xff04e5['include'])?_0xff04e5['include']:[_0xff04e5['include']]:undefined;_0x1335dc['rows']=this['bulkBuild'](_0x1335dc['rows'],{'isNewRecord':![],'include':_0x331486});return _0x1335dc;}}}}catch(_0x565da2){this['_trackRedisError'](_0x565da2);}}this['cacheStats']['misses']++;const {rows:_0x33c168,count:_0x3affd6}=await this['findAndCountAll'](_0xff04e5);const _0xf09caa=Math['ceil'](_0x3affd6/pageSize);const _0x5c7a3c={'rows':_0x33c168,'count':_0x3affd6,'totalPages':_0xf09caa,'currentPage':page};const _0x431fef=[''+this['name']];if(Array['isArray'](_0x6fc61e))_0x431fef['push'](..._0x6fc61e);const _0x26897f=Math['ceil'](_0x5a0b29/(-0xede+-0x1c2*0x14+0x35ee)*(0x1*-0x61+0x1*-0x1f57+0x1f*0x106));const _0x3da333={'rows':_0x33c168['map'](_0x5a69be=>typeof _0x5a69be['toJSON']==='function'?_0x5a69be['toJSON']():_0x5a69be),'count':_0x3affd6,'totalPages':_0xf09caa,'currentPage':page};const _0x123ea9=safeStringify(_0x3da333,this['logger']);try{if(!_0x35cebc&&this['isRedisConnected']&&this['redis']){const _0x125f56=this['redis']['multi']();_0x125f56['set'](_0x192848,_0x123ea9,'PX',_0x5a0b29);for(const _0x184d77 of _0x431fef){_0x125f56['sadd'](_0x184d77,_0x192848);_0x125f56['expire'](_0x184d77,_0x26897f);}await _0x125f56['exec']();this['cacheStats']['sets']++;}else if(!_0x35cebc&&!this['isShardMode']){this['localCache']['set'](_0x192848,{'data':_0x123ea9,'expires':Date['now']()+_0x5a0b29});this['cacheStats']['sets']++;}}catch(_0xd9a2f5){this['_trackRedisError'](_0xd9a2f5);}return _0x5c7a3c;}static['initializeCacheHooks'](){if(!this['redis']){this['logger']['warn']('⚠️\x20[CACHE]\x20Redis\x20not\x20initialized\x20for\x20model\x20'+this['name']+'.\x20Hooks\x20attached,\x20but\x20Redis\x20invalidation\x20will\x20be\x20skipped\x20until\x20connected.');}const _0x23c933=async _0x14f184=>{const _0x46d252=_0x14f184['constructor'];if(_0x46d252['isRedisConnected']){const _0x12d1b5=_0x46d252['_generateSmartTags'](_0x14f184);if(Array['isArray'](_0x46d252['customInvalidationTags'])){_0x12d1b5['push'](..._0x46d252['customInvalidationTags']);}await _0x46d252['invalidateByTags'](_0x12d1b5);}else if(!_0x46d252['isShardMode']){_0x46d252['_mapClearAllModelCache']();}};const _0x2ccb5c=async _0x5ee829=>{const _0x4a4a1f=_0x5ee829['constructor'];if(_0x4a4a1f['isRedisConnected']){const _0x33bcb4=_0x4a4a1f['_generateSmartTags'](_0x5ee829);if(Array['isArray'](_0x4a4a1f['customInvalidationTags'])){_0x33bcb4['push'](..._0x4a4a1f['customInvalidationTags']);}await _0x4a4a1f['invalidateByTags'](_0x33bcb4);}else if(!_0x4a4a1f['isShardMode']){_0x4a4a1f['_mapClearAllModelCache']();}};const _0x1cfd30=async()=>{if(this['isRedisConnected']){await this['invalidateByTags']([''+this['name']]);}else if(!this['isShardMode']){this['_mapClearAllModelCache']();}};this['addHook']('afterSave',_0x23c933);this['addHook']('afterDestroy',_0x2ccb5c);this['addHook']('afterBulkCreate',_0x1cfd30);this['addHook']('afterBulkUpdate',_0x1cfd30);this['addHook']('afterBulkDestroy',_0x1cfd30);}static['attachHooksToAllModels'](_0x51bffa,_0x2de001){if(!this['redis']){this['logger']['warn']('⚠️\x20[CACHE]\x20Redis\x20not\x20initialized.\x20Attaching\x20hooks\x20anyway\x20for\x20in-memory\x20cache\x20invalidation.');}for(const _0x831816 in _0x51bffa['models']){const _0x1c302b=_0x51bffa['models'][_0x831816];if(_0x1c302b['prototype']instanceof KythiaModel){_0x1c302b['client']=_0x2de001;this['logger']['info']('\x20\x20╰┈➤\x20⚙️\x20\x20Attaching\x20hooks\x20to\x20'+_0x1c302b['name']);_0x1c302b['initializeCacheHooks']();}}}static async['touchParent'](_0x6645c0,_0x26cc72,_0xfde1ae,_0x6700c3='updatedAt'){if(!_0x6645c0?.[_0x26cc72]){return;}try{const _0x5d7f97=_0xfde1ae['primaryKeyAttribute'];const _0x10ff62=await _0xfde1ae['findByPk'](_0x6645c0[_0x26cc72]);if(_0x10ff62){_0x10ff62['changed'](_0x6700c3,!![]);await _0x10ff62['save']({'fields':[_0x6700c3]});this['logger']['info']('🔄\x20Touched\x20parent\x20'+_0xfde1ae['name']+'\x20#'+_0x10ff62[_0x5d7f97]+'\x20due\x20to\x20change\x20in\x20'+this['name']+'.');}}catch(_0x234420){this['logger']['error']('🔄\x20Failed\x20to\x20touch\x20parent\x20'+_0xfde1ae['name'],_0x234420);}}static['setupParentTouch'](_0x5a4058,_0x2c4786,_0x589e06='updatedAt'){const _0x579a34=_0x54b434=>{return this['touchParent'](_0x54b434,_0x5a4058,_0x2c4786,_0x589e06);};const _0x2c2327=_0x13bf00=>{if(_0x13bf00&&_0x13bf00['length']>0xef8+-0x65e*-0x1+-0xaab*0x2){return this['touchParent'](_0x13bf00[0x6e8+-0x1d7d+0x1695],_0x5a4058,_0x2c4786,_0x589e06);}return Promise['resolve']();};this['addHook']('afterSave',_0x579a34);this['addHook']('afterDestroy',_0x579a34);this['addHook']('afterBulkCreate',_0x2c2327);}}exports['KythiaModel']=KythiaModel;exports['default']=KythiaModel;
1
+ 'use strict';var __importDefault=this&&this['__importDefault']||function(_0x4698e0){return _0x4698e0&&_0x4698e0['__esModule']?_0x4698e0:{'default':_0x4698e0};};Object['defineProperty'](exports,'__esModule',{'value':!![]});exports['KythiaModel']=void(-0x15e7+0x3e2*-0x2+0x1dab);const jsonStringify=require('json-stable-stringify');const sequelize_1=require('sequelize');const lru_cache_1=require('lru-cache');const logger_1=__importDefault(require('../utils/logger'));const ioredis_1=__importDefault(require('ioredis'));const clc=require('cli-color');const NEGATIVE_CACHE_PLACEHOLDER='__KYTHIA_NEGATIVE_CACHE__';const RECONNECT_DELAY_MINUTES=0x2*0x87d+0x1132+-0x2229;const REDIS_ERROR_TOLERANCE_COUNT=0x10b*-0x18+0x11aa+0x1*0x761;const REDIS_ERROR_TOLERANCE_INTERVAL_MS=(-0x1017+-0xa36+0x1a57)*(-0x138+0x1d71+-0x1851);function safeStringify(_0x3ade85,_0x1453bc){try{return JSON['stringify'](_0x3ade85,(_0x4e0f70,_0x12b7dc)=>typeof _0x12b7dc==='bigint'?_0x12b7dc['toString']():_0x12b7dc);}catch(_0x340119){(_0x1453bc||console)['error']('❌\x20[SAFE\x20STRINGIFY]\x20Failed:\x20'+_0x340119['message']);return'{}';}}function safeParse(_0x3e916b,_0x43a0db){try{return JSON['parse'](_0x3e916b);}catch{(_0x43a0db||console)['warn']('⚠️\x20[SAFE\x20PARSE]\x20Invalid\x20JSON\x20data,\x20returning\x20null');return null;}}class KythiaModel extends sequelize_1['Model']{static ['client'];static ['redis'];static ['isRedisConnected']=![];static ['logger'];static ['config']={};static ['metrics'];static ['CACHE_VERSION']='1.0.0';static ['localCache']=new lru_cache_1['LRUCache']({'max':0x3e8});static ['MAX_LOCAL_CACHE_SIZE']=0x1a3*0x17+-0x20c0+-0xfd*0x1;static ['DEFAULT_TTL']=(-0x2*0x1249+-0x2654+0x4b22)*(0x23d9+0x1965*0x1+-0x3d02)*(-0xcf*-0x1+-0x16*-0x116+-0x14cb);static ['NEGATIVE_CACHE_TTL'];static ['DRIFT_CHECK_ENABLED']=!![];static ['DRIFT_CHECK_RATE']=0x106*-0x10+0xc05+-0xdf*-0x5+0.001;static ['driftStats']={'checked':0x0,'drifted':0x0,'healed':0x0,'errors':0x0};static ['lastRedisOpts']=null;static ['reconnectTimeout']=null;static ['lastAutoReconnectTs']=0x11ef*0x1+-0x1*0x160c+0x41d;static ['pendingQueries']=new Map();static ['cacheStats']={'redisHits':0x0,'mapHits':0x0,'misses':0x0,'sets':0x0,'clears':0x0,'errors':0x0};static ['redisErrorTimestamps']=[];static ['isShardMode']=![];static ['isShuttingDown']=![];static ['_redisFallbackURLs']=[];static ['_redisCurrentIndex']=-0x6c6+-0x6*-0x4be+-0x172*0xf;static ['_redisFailedIndexes']=new Set();static ['_justFailedOver']=![];static ['fillable'];static ['guarded'];static ['structure'];static ['table'];static ['cacheKeys'];static ['CACHE_KEYS'];static ['CACHE_TTL'];static ['customInvalidationTags'];static ['useRedis'];static['init'](_0x41271e,_0x185506){const _0x56702d=super['init'](_0x41271e,_0x185506);return _0x56702d;}static['hasOne'](_0x5a6e29,_0x26fbfe){(this['logger']||console)['info']('\x20\x20╰┈➤\x20🔗\x20'+clc['cyan'](this['name']['padEnd'](0x1*0x8cb+0x1*0x7c7+-0x1083))+'\x20'+clc['yellow']('──[\x201:1\x20]──▶')+'\x20'+(_0x5a6e29?.['name']||'Unknown'));return super['hasOne'](_0x5a6e29,_0x26fbfe);}static['belongsTo'](_0x201556,_0x5d8975){(this['logger']||console)['info']('\x20\x20╰┈➤\x20🔗\x20'+clc['cyan'](this['name']['padEnd'](-0x2f*0x1b+-0x1*0x1b95+0x2099))+'\x20'+clc['green']('◀──[\x201:1\x20]──')+'\x20'+(_0x201556?.['name']||'Unknown'));return super['belongsTo'](_0x201556,_0x5d8975);}static['hasMany'](_0x5db644,_0x492771){(this['logger']||console)['info']('\x20\x20╰┈➤\x20🔗\x20'+clc['cyan'](this['name']['padEnd'](-0x228c+0x10df*-0x2+0x4459))+'\x20'+clc['magenta']('──[\x201:N\x20]──▶')+'\x20'+(_0x5db644?.['name']||'Unknown'));return super['hasMany'](_0x5db644,_0x492771);}static['belongsToMany'](_0x47170a,_0x5e683b){(this['logger']||console)['info']('\x20\x20╰┈➤\x20🔗\x20'+clc['cyan'](this['name']['padEnd'](-0x1*-0x1c3a+-0x5*0x41f+-0x790))+'\x20'+clc['red']('◀──[\x20N:M\x20]──▶')+'\x20'+(_0x47170a?.['name']||'Unknown'));return super['belongsToMany'](_0x47170a,_0x5e683b);}static async['autoBoot'](_0x35e291){let _0x256790=this['table'];if(!_0x256790){const _0x9a1849=this['name'];const _0x4438c1=sequelize_1['Utils']['underscoredIf'](_0x9a1849,!![]);_0x256790=sequelize_1['Utils']['pluralize'](_0x4438c1);}let _0x43f9c5={};let _0x1173d5={};if(this['structure']){_0x43f9c5=this['structure']['attributes']||{};_0x1173d5=this['structure']['options']||{};}const _0x6b4a5e=_0x35e291['getQueryInterface']();let _0x2ef284;const _0x53144c=this['redis']?'kythia:schema:'+(this['CACHE_VERSION']||'v1')+':'+_0x256790:null;if(_0x53144c&&this['isRedisConnected']&&this['redis']){try{const _0x1454c7=await this['redis']['get'](_0x53144c);if(_0x1454c7){_0x2ef284=JSON['parse'](_0x1454c7);this['logger']['info']?.('\x20\x20╰┈➤\x20⚡\x20['+this['name']+']\x20Schema\x20loaded\x20from\x20Redis\x20cache');}}catch{}}if(!_0x2ef284){try{_0x2ef284=await _0x6b4a5e['describeTable'](_0x256790);if(_0x53144c&&this['isRedisConnected']&&this['redis']){try{await this['redis']['set'](_0x53144c,JSON['stringify'](_0x2ef284),'EX',0x1361+0x1ed0+-0xc0b*0x3);}catch{}}}catch(_0x2ee41f){console['warn']('⚠️\x20[KythiaModel]\x20Table\x20\x27'+_0x256790+'\x27\x20not\x20found\x20for\x20model\x20\x27'+this['name']+'\x27.\x20Skipping\x20auto-boot.\x20err\x20'+_0x2ee41f);return;}}const _0x1c57aa={};for(const [_0x2f34ca,_0x43d675]of Object['entries'](_0x2ef284)){_0x1c57aa[_0x2f34ca]={'type':this['_mapDbTypeToSequelize'](_0x43d675['type']),'allowNull':_0x43d675['allowNull'],'defaultValue':_0x43d675['defaultValue'],'primaryKey':_0x43d675['primaryKey'],'autoIncrement':_0x43d675['autoIncrement']};}const _0x43da41={..._0x1c57aa,..._0x43f9c5};super['init'](_0x43da41,{'sequelize':_0x35e291,'modelName':this['name'],'tableName':_0x256790,'timestamps':_0x1173d5['timestamps']!==undefined?_0x1173d5['timestamps']:!!_0x43da41['createdAt'],'paranoid':_0x1173d5['paranoid']!==undefined?_0x1173d5['paranoid']:!!_0x43da41['deletedAt'],..._0x1173d5});this['_setupLaravelHooks']();if(this['localCache']===KythiaModel['localCache']&&this!==KythiaModel){this['localCache']=new lru_cache_1['LRUCache']({'max':this['MAX_LOCAL_CACHE_SIZE']||-0x3*-0xc2d+-0x138c*-0x1+0xa6f*-0x5});}if(this['pendingQueries']===KythiaModel['pendingQueries']&&this!==KythiaModel){this['pendingQueries']=new Map();}if(this['cacheStats']===KythiaModel['cacheStats']&&this!==KythiaModel){this['cacheStats']={'redisHits':0x0,'mapHits':0x0,'misses':0x0,'sets':0x0,'clears':0x0,'errors':0x0};}if(this['driftStats']===KythiaModel['driftStats']&&this!==KythiaModel){this['driftStats']={'checked':0x0,'drifted':0x0,'healed':0x0,'errors':0x0};}if(this['redisErrorTimestamps']===KythiaModel['redisErrorTimestamps']&&this!==KythiaModel){this['redisErrorTimestamps']=[];}return this;}static['_mapDbTypeToSequelize'](_0x38fd30){const _0x176d6b=_0x38fd30['toUpperCase']();if(_0x176d6b['startsWith']('BOOLEAN')||_0x176d6b['startsWith']('TINYINT(1)'))return sequelize_1['DataTypes']['BOOLEAN'];if(_0x176d6b['startsWith']('BIGINT'))return sequelize_1['DataTypes']['BIGINT'];if(_0x176d6b['startsWith']('INT')||_0x176d6b['startsWith']('TINYINT'))return sequelize_1['DataTypes']['INTEGER'];if(_0x176d6b['startsWith']('VARCHAR')||_0x176d6b['startsWith']('TEXT')||_0x176d6b['startsWith']('CHAR'))return sequelize_1['DataTypes']['STRING'];if(_0x176d6b['startsWith']('DATETIME')||_0x176d6b['startsWith']('TIMESTAMP'))return sequelize_1['DataTypes']['DATE'];if(_0x176d6b['startsWith']('JSON'))return sequelize_1['DataTypes']['JSON'];if(_0x176d6b['startsWith']('FLOAT')||_0x176d6b['startsWith']('DOUBLE')||_0x176d6b['startsWith']('DECIMAL'))return sequelize_1['DataTypes']['FLOAT'];if(_0x176d6b['startsWith']('ENUM'))return sequelize_1['DataTypes']['STRING'];return sequelize_1['DataTypes']['STRING'];}static['_setupLaravelHooks'](){this['addHook']('beforeValidate',_0x262b5e=>{const _0x4d23da=_0x262b5e['constructor'];const _0xbd597e=_0x4d23da['primaryKeyAttribute']||'id';if(_0x4d23da['fillable']&&Array['isArray'](_0x4d23da['fillable'])){const _0x5ae183=_0x4d23da['fillable'];Object['keys'](_0x262b5e['dataValues'])['forEach'](_0x393a37=>{if(_0x393a37===_0xbd597e)return;if(!_0x5ae183['includes'](_0x393a37)){delete _0x262b5e['dataValues'][_0x393a37];if(_0x262b5e['changed']())_0x262b5e['changed'](_0x393a37,![]);}});}else if(_0x4d23da['guarded']&&Array['isArray'](_0x4d23da['guarded'])){const _0x639859=_0x4d23da['guarded'];if(_0x639859['includes']('*')){_0x262b5e['dataValues']={};return;}Object['keys'](_0x262b5e['dataValues'])['forEach'](_0x5d4c9f=>{if(_0x5d4c9f===_0xbd597e)return;if(_0x639859['includes'](_0x5d4c9f)){delete _0x262b5e['dataValues'][_0x5d4c9f];if(_0x262b5e['changed']())_0x262b5e['changed'](_0x5d4c9f,![]);}});}});}static['setDependencies']({logger:_0x3bf20,config:_0x143d0a,redis:_0x5d666a,redisOptions:_0x51d783}){if(!_0x143d0a){throw new Error('KythiaModel.setDependencies\x20requires\x20config!');}this['logger']=_0x3bf20||logger_1['default'];this['config']=_0x143d0a;this['CACHE_VERSION']=_0x143d0a['db']?.['redisCacheVersion']||'1.0.0';const _0x391691=_0x143d0a?.['db']?.['redis'];const _0x7d3b7e=_0x143d0a?.['db']?.['useRedis']!==![];this['useRedis']=_0x7d3b7e;this['isShardMode']=typeof _0x391691==='object'&&_0x391691!==null&&_0x391691['shard']||![];if(!_0x7d3b7e){this['logger']['warn']('🟠\x20[REDIS]\x20Disabled\x20via\x20config\x20(useRedis:\x20false).\x20Operating\x20in\x20In-Memory\x20Cache\x20mode\x20only.');this['isRedisConnected']=![];return;}if(this['isShardMode']){this['logger']['info']('🟣\x20[REDIS][SHARD]\x20Detected\x20redis\x20sharding\x20mode\x20(shard:\x20true).\x20Local\x20fallback\x20cache\x20DISABLED!');}this['_redisFallbackURLs']=[];if(Array['isArray'](_0x51d783)){this['_redisFallbackURLs']=_0x51d783['filter'](_0x261b16=>_0x261b16&&(typeof _0x261b16!=='string'||_0x261b16['trim']()['length']>0x1abd+0x166*-0x10+-0x1*0x45d));}else if(typeof _0x51d783==='string'){if(_0x51d783['trim']()['length']>0x1fcb+-0xe21*0x1+-0xe*0x143){this['_redisFallbackURLs']=_0x51d783['split'](',')['map'](_0x2c3806=>_0x2c3806['trim']())['filter'](_0x5aa4fc=>_0x5aa4fc['length']>0x23ae+-0x2c9+-0xaf7*0x3);}}else if(_0x51d783&&typeof _0x51d783==='object'&&Array['isArray'](_0x51d783['urls'])){this['_redisFallbackURLs']=_0x51d783['urls']['slice']();}else if(_0x51d783&&typeof _0x51d783==='object'&&Object['keys'](_0x51d783)['length']>0x1f88+-0x8d4*-0x1+-0x285c){this['_redisFallbackURLs']=[_0x51d783];}this['_redisCurrentIndex']=-0x10db+0x50e*0x7+-0x1287;if(_0x5d666a){this['redis']=_0x5d666a;this['isRedisConnected']=_0x5d666a['status']==='ready';}else if(this['_redisFallbackURLs']['length']>-0x1*-0x421+-0x13a4+0xf83){this['initializeRedis']();}else{if(this['isShardMode']){this['logger']['error']('❌\x20[REDIS][SHARD]\x20No\x20Redis\x20client/options,\x20but\x20shard:true.\x20Application\x20will\x20work\x20WITHOUT\x20caching!');this['isRedisConnected']=![];}else{this['logger']['warn']('🟠\x20[REDIS]\x20No\x20Redis\x20provided.\x20Switching\x20to\x20In-Memory\x20Cache\x20mode.');this['isRedisConnected']=![];}}}static['_trackRedisError'](_0x4fb8e5){const _0x54cd42=Date['now']();this['redisErrorTimestamps']=(this['redisErrorTimestamps']||[])['filter'](_0x2f543e=>_0x54cd42-_0x2f543e<REDIS_ERROR_TOLERANCE_INTERVAL_MS);this['redisErrorTimestamps']['push'](_0x54cd42);if(this['redisErrorTimestamps']['length']>=REDIS_ERROR_TOLERANCE_COUNT){const _0x1f8211=KythiaModel;if(_0x1f8211['isRedisConnected']){const _0x5c5ce2=this['_tryRedisFailover']();if(_0x5c5ce2){this['logger']['warn']('[REDIS]\x20Error\x20tolerance\x20reached,\x20switching\x20to\x20NEXT\x20Redis\x20failover...');}else if(_0x1f8211['isShardMode']){this['logger']['error']('❌\x20[REDIS][SHARD]\x20'+this['redisErrorTimestamps']['length']+'\x20consecutive\x20errors\x20in\x20'+REDIS_ERROR_TOLERANCE_INTERVAL_MS/(-0x10a0+-0x214b+0x35d3)+'s.\x20SHARD\x20MODE:\x20Disabling\x20cache\x20(NO\x20fallback),\x20all\x20queries\x20go\x20to\x20DB.\x20(Last\x20error:\x20'+_0x4fb8e5?.['message']+')');_0x1f8211['isRedisConnected']=![];this['_scheduleReconnect']();}else{this['logger']['error']('❌\x20[REDIS]\x20'+this['redisErrorTimestamps']['length']+'\x20consecutive\x20errors\x20in\x20'+REDIS_ERROR_TOLERANCE_INTERVAL_MS/(0x182e+0x1256+-0xe*0x2c2)+'s.\x20All\x20Redis\x20exhausted,\x20fallback\x20to\x20In-Memory\x20Cache!\x20(Last\x20error:\x20'+_0x4fb8e5?.['message']+')');_0x1f8211['isRedisConnected']=![];this['_scheduleReconnect']();}}this['redisErrorTimestamps']=[];}else{this['logger']['warn']('🟠\x20[REDIS]\x20Error\x20#'+this['redisErrorTimestamps']['length']+'/'+REDIS_ERROR_TOLERANCE_COUNT+'\x20tolerated.\x20('+_0x4fb8e5?.['message']+')');}}static['_tryRedisFailover'](){if(!Array['isArray'](this['_redisFallbackURLs'])||this['_redisFallbackURLs']['length']<0x1745*0x1+-0x2262+0xd*0xdb){return![];}const _0xf31688=this['_redisCurrentIndex'];if(this['_redisCurrentIndex']+(-0x151e+0x135b+-0x4*-0x71)<this['_redisFallbackURLs']['length']){this['_redisCurrentIndex']++;this['logger']['warn']('[REDIS][FAILOVER]\x20Trying\x20to\x20switch\x20Redis\x20connection\x20from\x20url\x20index\x20'+_0xf31688+'\x20to\x20'+this['_redisCurrentIndex']);this['_justFailedOver']=!![];this['_closeCurrentRedis']();this['initializeRedis']();return!![];}return![];}static['_closeCurrentRedis'](){const _0x4e8908=KythiaModel;if(_0x4e8908['redis']){_0x4e8908['redis']['removeAllListeners']();if(typeof _0x4e8908['redis']['quit']==='function'){try{_0x4e8908['redis']['quit']();}catch(_0xc10f2e){this['logger']['warn']('[REDIS]\x20Error\x20while\x20closing\x20connection:',_0xc10f2e);}}}_0x4e8908['redis']=undefined;_0x4e8908['isRedisConnected']=![];}static['initializeRedis'](_0x2c7950){if(_0x2c7950){if(Array['isArray'](_0x2c7950)){this['_redisFallbackURLs']=_0x2c7950['slice']();this['_redisCurrentIndex']=0x3ce*-0x3+-0x1*0x1622+0x218c;}else if(_0x2c7950&&typeof _0x2c7950==='object'&&Array['isArray'](_0x2c7950['urls'])){this['_redisFallbackURLs']=_0x2c7950['urls']['slice']();this['_redisCurrentIndex']=-0xad9+-0xfb2+0x1a8b;}else{this['_redisFallbackURLs']=[_0x2c7950];this['_redisCurrentIndex']=0x201*0x9+-0x142c+0x223;}}if(!Array['isArray'](this['_redisFallbackURLs'])||this['_redisFallbackURLs']['length']===0x4*-0x5ce+0x1426+0x312){if(this['isShardMode']){this['logger']['error']('❌\x20[REDIS][SHARD]\x20No\x20Redis\x20URL/options\x20provided\x20but\x20shard:true.\x20Will\x20run\x20without\x20caching!');this['isRedisConnected']=![];}else{this['logger']['warn']('🟠\x20[REDIS]\x20No\x20Redis\x20client\x20or\x20options\x20provided.\x20Operating\x20in\x20In-Memory\x20Cache\x20mode\x20only.');this['isRedisConnected']=![];}return null;}this['lastRedisOpts']=Array['isArray'](this['_redisFallbackURLs'])?this['_redisFallbackURLs']['slice']():[this['_redisFallbackURLs']];if(this['redis'])return this['redis'];const _0x343111=this['_redisFallbackURLs'][this['_redisCurrentIndex']];if(_0x343111&&typeof _0x343111==='object'&&_0x343111['shard']){this['isShardMode']=!![];}let _0x2363aa;if(typeof _0x343111==='string'){_0x2363aa={'url':_0x343111,'retryStrategy':this['_makeRetryStrategy']()};}else if(_0x343111&&typeof _0x343111==='object'){_0x2363aa={'maxRetriesPerRequest':0x2,'enableReadyCheck':!![],'retryStrategy':this['_makeRetryStrategy'](),..._0x343111};}else{this['logger']['error']('❌\x20[REDIS]\x20Invalid\x20redis\x20config\x20detected\x20in\x20list');this['isRedisConnected']=![];return null;}this['redis']=new ioredis_1['default'](_0x2363aa['url']||_0x2363aa);this['_setupRedisEventHandlers']();return this['redis'];}static['_makeRetryStrategy'](){return _0x2aa016=>{if(_0x2aa016>-0x9*-0x23d+0x22*-0x20+0x7f*-0x20){this['logger']['error']('❌\x20[REDIS]\x20Could\x20not\x20connect\x20after\x20'+(_0x2aa016-(-0x1af8+0x3*0x85b+0x1e8))+'\x20retries\x20for\x20Redis\x20#'+(this['_redisCurrentIndex']+(0x4*0x223+0x7*0x55c+-0x2e0f))+'.');return null;}const _0x2a4083=Math['min'](_0x2aa016*(0x7e4*0x4+0x28*-0x52+-0x5*0x35c),-0x4a7*-0x5+-0x1bc2+0xc4f*0x1);this['logger']['warn']('🟠\x20[REDIS]\x20Connection\x20failed\x20for\x20Redis\x20#'+(this['_redisCurrentIndex']+(-0x1025+-0xee4+-0x1f0a*-0x1))+'.\x20Retrying\x20in\x20'+_0x2a4083+'ms\x20(Attempt\x20'+_0x2aa016+')...');return _0x2a4083;};}static['_setupRedisEventHandlers'](){if(!this['redis'])return;const _0x6b0d23=KythiaModel;this['redis']['on']('connect',async()=>{if(!_0x6b0d23['isRedisConnected']){this['logger']['info']('✅\x20[REDIS]\x20Connection\x20established.\x20Switching\x20to\x20Redis\x20Cache\x20mode.');}_0x6b0d23['isRedisConnected']=!![];this['redisErrorTimestamps']=[];if(_0x6b0d23['reconnectTimeout']){clearTimeout(_0x6b0d23['reconnectTimeout']);_0x6b0d23['reconnectTimeout']=null;}_0x6b0d23['_redisFailedIndexes']['delete'](_0x6b0d23['_redisCurrentIndex']);if(_0x6b0d23['_justFailedOver']){this['logger']['warn']('[REDIS][FAILOVER]\x20Connected\x20to\x20new\x20server,\x20clearing\x20stale\x20kythia:*\x20keys...');try{const _0x5a48eb='kythia:';let _0x4abbb8='0';let _0x235d2c=0x2505+0x87c+-0x2d81;const _0x4c59a4=_0x6b0d23['redis'];if(!_0x4c59a4)return;do{const [_0xbcc185,_0x4bd4fb]=await _0x4c59a4['scan'](_0x4abbb8,'MATCH',_0x5a48eb+'*','COUNT',0x6b0*-0x4+0x1b01+0x87);_0x4abbb8=_0xbcc185;if(_0x4bd4fb['length']>0x7*-0x54e+0x1*-0x1d99+0x611*0xb){await _0x4c59a4['unlink'](..._0x4bd4fb);_0x235d2c+=_0x4bd4fb['length'];}}while(_0x4abbb8!=='0');this['logger']['info']('[REDIS][FAILOVER]\x20Cleared\x20'+_0x235d2c+'\x20stale\x20kythia:*\x20keys\x20safely.');}catch(_0x1fc8ab){this['logger']['error']('[REDIS][FAILOVER]\x20FAILED\x20TO\x20CLEAR\x20STALE\x20CACHE:',_0x1fc8ab);}_0x6b0d23['_justFailedOver']=![];}});this['redis']['on']('error',_0x3e304f=>{if(_0x3e304f&&(_0x3e304f['code']==='ECONNREFUSED'||_0x3e304f['message'])){this['logger']['warn']('🟠\x20[REDIS]\x20Connection\x20error:\x20'+_0x3e304f['message']);}});this['redis']['on']('close',()=>{if(_0x6b0d23['isShuttingDown']){_0x6b0d23['isRedisConnected']=![];return;}if(_0x6b0d23['isRedisConnected']){if(_0x6b0d23['isShardMode']){this['logger']['error']('❌\x20[REDIS][SHARD]\x20Connection\x20closed.\x20Cache\x20DISABLED\x20(no\x20fallback).');}else{this['logger']['error']('❌\x20[REDIS]\x20Connection\x20closed.\x20Fallback/failover\x20will\x20be\x20attempted.');}}_0x6b0d23['isRedisConnected']=![];_0x6b0d23['_redisFailedIndexes']['add'](_0x6b0d23['_redisCurrentIndex']);this['logger']['warn']('[REDIS]\x20Connection\x20#'+(_0x6b0d23['_redisCurrentIndex']+(-0x1ad+-0xd87+-0x1*-0xf35))+'\x20closed.\x20Attempting\x20immediate\x20failover...');const _0x3571b1=this['_tryRedisFailover']();if(!_0x3571b1){this['logger']['warn']('[REDIS]\x20Failover\x20exhausted.\x20Scheduling\x20full\x20reconnect...');this['_scheduleReconnect']();}});}static['_scheduleReconnect'](){if(this['reconnectTimeout'])return;const _0x5ac0b3=Date['now']();const _0x5ce33c=_0x5ac0b3-this['lastAutoReconnectTs'];if(_0x5ce33c<RECONNECT_DELAY_MINUTES*(0x1ad0+-0x1*-0x1549+-0x2fdd)*(-0xdbc+0x14fc*0x1+-0x358))return;this['lastAutoReconnectTs']=_0x5ac0b3;if(this['isShardMode']){this['logger']['warn']('[REDIS][SHARD]\x20Attempting\x20auto-reconnect\x20after\x20'+RECONNECT_DELAY_MINUTES+'min\x20downtime...');}else{this['logger']['warn']('🟢\x20[REDIS]\x20Attempting\x20auto-reconnect\x20after\x20'+RECONNECT_DELAY_MINUTES+'min\x20downtime...');}this['reconnectTimeout']=setTimeout(()=>{this['reconnectTimeout']=null;this['_redisCurrentIndex']=0x884+-0x25cf+-0x1*-0x1d4b;this['_redisFailedIndexes']['clear']();this['_closeCurrentRedis']();this['initializeRedis']();},RECONNECT_DELAY_MINUTES*(-0x1*0x189b+-0x24cf+0x3da6)*(-0x37e*0x6+0x2*-0xc5a+-0xd0*-0x3d));}static['getCacheKey'](_0x117367){let _0x2acd66=_0x117367;if(_0x2acd66&&typeof _0x2acd66==='object'&&!_0x2acd66['where']){if(_0x2acd66['include']){_0x2acd66={'where':{},..._0x2acd66};}else{_0x2acd66={'where':_0x2acd66};}}const _0x563130={'replacer':(_0x5894fe,_0x58d1bf)=>typeof _0x58d1bf==='bigint'?_0x58d1bf['toString']():_0x58d1bf};const _0xea3139=typeof _0x117367==='string'?_0x117367:jsonStringify(this['normalizeQueryOptions'](_0x2acd66),_0x563130);return this['CACHE_VERSION']+':'+this['name']+':'+_0xea3139;}static['normalizeQueryOptions'](_0x49c5c4){if(!_0x49c5c4||typeof _0x49c5c4!=='object')return _0x49c5c4;if(Array['isArray'](_0x49c5c4))return _0x49c5c4['map'](_0x3628b4=>this['normalizeQueryOptions'](_0x3628b4));const _0x3e87bd={};Object['keys'](_0x49c5c4)['sort']()['forEach'](_0x168544=>{_0x3e87bd[_0x168544]=this['normalizeQueryOptions'](_0x49c5c4[_0x168544]);});Object['getOwnPropertySymbols'](_0x49c5c4)['forEach'](_0x102d47=>{const _0x5b76fe='$'+_0x102d47['toString']()['slice'](-0x1a1e+-0xe8f*-0x1+-0x2*-0x5cb,-(-0x2*-0x8ee+-0xa63*0x1+0x1de*-0x4));_0x3e87bd[_0x5b76fe]=this['normalizeQueryOptions'](_0x49c5c4[_0x102d47]);});return _0x3e87bd;}static['_generateSmartTags'](_0x1d212a){if(!_0x1d212a)return[''+this['name']];const _0x30241b=[''+this['name']];const _0x3c89e8=this['primaryKeyAttribute'];if(_0x1d212a[_0x3c89e8]){_0x30241b['push'](this['name']+':'+_0x3c89e8+':'+_0x1d212a[_0x3c89e8]);}const _0x5be36e=this['cacheKeys']||this['CACHE_KEYS']||[];if(Array['isArray'](_0x5be36e)){for(const _0x5555f9 of _0x5be36e){const _0x175a8a=Array['isArray'](_0x5555f9)?_0x5555f9:[_0x5555f9];const _0x31976e=_0x175a8a['every'](_0x5f4268=>_0x1d212a[_0x5f4268]!==undefined&&_0x1d212a[_0x5f4268]!==null);if(_0x31976e){const _0x4f48f5=_0x175a8a['map'](_0x37f70f=>_0x37f70f+':'+_0x1d212a[_0x37f70f])['join'](':');_0x30241b['push'](this['name']+':'+_0x4f48f5);}}}return _0x30241b;}static async['setCacheEntry'](_0x2e3166,_0x588b12,_0x31b215,_0x2062d7=[]){const _0x1fd46c=typeof _0x2e3166==='string'?_0x2e3166:this['getCacheKey'](_0x2e3166);const _0x1a8577=_0x31b215||this['CACHE_TTL']||this['DEFAULT_TTL'];if(this['isRedisConnected']){await this['_redisSetCacheEntry'](_0x1fd46c,_0x588b12,_0x1a8577,_0x2062d7);}else if(!this['isShardMode']){this['_mapSetCacheEntry'](_0x1fd46c,_0x588b12,_0x1a8577);}}static async['getCachedEntry'](_0x2a4c73,_0x353822){const _0x578111=typeof _0x2a4c73==='string'?_0x2a4c73:this['getCacheKey'](_0x2a4c73);let _0x13caee={'hit':![],'data':undefined};if(this['isRedisConnected']){_0x13caee=await this['_redisGetCachedEntry'](_0x578111,_0x353822);}else if(!this['isShardMode']){_0x13caee=await this['_mapGetCachedEntry'](_0x578111,_0x353822);}if(this['metrics']){this['metrics']['cacheOpsTotal']['inc']({'type':_0x13caee['hit']?'hit':'miss','model':this['name']});}return _0x13caee;}static async['clearCache'](_0x29f11f){const _0x144b63=typeof _0x29f11f==='string'?_0x29f11f:this['getCacheKey'](_0x29f11f);if(this['isRedisConnected']){await this['_redisClearCache'](_0x144b63);}else if(!this['isShardMode']){this['_mapClearCache'](_0x144b63);}}static async['_redisSetCacheEntry'](_0x5e7cdd,_0xb4d229,_0x59dd53,_0xb78e5d=[]){if(!this['redis'])return;try{let _0x2e306c=_0xb4d229;if(_0xb4d229&&typeof _0xb4d229['toJSON']==='function'){_0x2e306c=_0xb4d229['toJSON']();}else if(Array['isArray'](_0xb4d229)){_0x2e306c=_0xb4d229['map'](_0x37beca=>_0x37beca&&typeof _0x37beca['toJSON']==='function'?_0x37beca['toJSON']():_0x37beca);}const _0x35fa71=_0x2e306c===null?NEGATIVE_CACHE_PLACEHOLDER:safeStringify(_0x2e306c,this['logger']);const _0x1df12a=this['redis']['multi']();_0x1df12a['set'](_0x5e7cdd,_0x35fa71,'PX',_0x59dd53);const _0xf6e10c=Math['ceil'](_0x59dd53/(0x562*-0x1+0x1*0x13f9+-0xaaf)*(-0x1dc8+0x3e*-0x6c+-0x1*-0x37f2));for(const _0x53193a of _0xb78e5d){_0x1df12a['sadd'](_0x53193a,_0x5e7cdd);_0x1df12a['expire'](_0x53193a,_0xf6e10c);}await _0x1df12a['exec']();this['cacheStats']['sets']++;}catch(_0x211d1a){this['_trackRedisError'](_0x211d1a);}}static async['_redisGetCachedEntry'](_0x29ccb5,_0x4ce3d9){if(!this['redis'])return{'hit':![],'data':undefined};try{const _0x302e83=await this['redis']['get'](_0x29ccb5);if(_0x302e83===null||_0x302e83===undefined)return{'hit':![],'data':undefined};this['cacheStats']['redisHits']++;if(_0x302e83===NEGATIVE_CACHE_PLACEHOLDER){return{'hit':!![],'data':null};}const _0x560dd0=safeParse(_0x302e83,this['logger']);if(_0x560dd0===null){return{'hit':![],'data':undefined};}const _0x447fb5=_0x4ce3d9?Array['isArray'](_0x4ce3d9)?_0x4ce3d9:[_0x4ce3d9]:undefined;const _0x2b5ae3=_0x41551c=>{const _0x3fcbdc=this['build'](_0x41551c,{'isNewRecord':![],'include':_0x447fb5});return _0x3fcbdc;};if(Array['isArray'](_0x560dd0)){const _0x587e35=_0x560dd0['map'](_0x50878f=>_0x2b5ae3(_0x50878f));return{'hit':!![],'data':_0x587e35};}else{const _0x189717=_0x2b5ae3(_0x560dd0);return{'hit':!![],'data':_0x189717};}}catch(_0x489142){this['_trackRedisError'](_0x489142);return{'hit':![],'data':undefined};}}static async['_redisClearCache'](_0x5c6418){if(!this['redis'])return;try{await this['redis']['del'](_0x5c6418);this['cacheStats']['clears']++;}catch(_0x52fff3){this['_trackRedisError'](_0x52fff3);}}static async['invalidateByTags'](_0xe698a1){if(!this['isRedisConnected']||!Array['isArray'](_0xe698a1)||_0xe698a1['length']===0x1b67+-0x2148+0x5e1||!this['redis'])return;try{const _0x191feb=this['redis']['pipeline']();for(const _0x5bda5b of _0xe698a1){_0x191feb['smembers'](_0x5bda5b);}const _0x257fe7=await _0x191feb['exec']();const _0x339ecd=new Set();if(_0x257fe7){for(const [_0x395f2a,_0x187aa4]of _0x257fe7){if(!_0x395f2a&&Array['isArray'](_0x187aa4)){for(const _0x4b7d0a of _0x187aa4)_0x339ecd['add'](_0x4b7d0a);}}}const _0x332f5e=Array['from'](_0x339ecd);if(_0x332f5e['length']>0x5b8+0x128f+-0x1847){this['logger']['info']('🎯\x20[SNIPER]\x20Invalidating\x20'+_0x332f5e['length']+'\x20keys\x20for\x20tags:\x20'+_0xe698a1['join'](',\x20'));const _0x1a8103=-0x1c39+-0x123b*0x1+0x325c;const _0x1797c1=this['redis']['pipeline']();for(let _0x5b07a5=-0x2*0x1319+0x3*0xace+0x5c8;_0x5b07a5<_0x332f5e['length'];_0x5b07a5+=_0x1a8103){const _0x1f69dd=_0x332f5e['slice'](_0x5b07a5,_0x5b07a5+_0x1a8103);_0x1797c1['unlink'](..._0x1f69dd);}_0x1797c1['unlink'](..._0xe698a1);await _0x1797c1['exec']();}else{await this['redis']['unlink'](..._0xe698a1);}}catch(_0x4a1f79){this['_trackRedisError'](_0x4a1f79);}}static['_mapSetCacheEntry'](_0x4719be,_0x5b7b2e,_0x4152ee){if(this['isShardMode'])return;if(_0x5b7b2e===null){this['localCache']['set'](_0x4719be,{'data':NEGATIVE_CACHE_PLACEHOLDER,'expires':Date['now']()+_0x4152ee});}else{let _0x33a869=_0x5b7b2e;if(_0x5b7b2e&&typeof _0x5b7b2e['toJSON']==='function'){_0x33a869=_0x5b7b2e['toJSON']();}else if(Array['isArray'](_0x5b7b2e)){_0x33a869=_0x5b7b2e['map'](_0x40520a=>_0x40520a&&typeof _0x40520a['toJSON']==='function'?_0x40520a['toJSON']():_0x40520a);}const _0x240507=_0x33a869===null?NEGATIVE_CACHE_PLACEHOLDER:safeStringify(_0x33a869,this['logger']);this['localCache']['set'](_0x4719be,{'data':_0x240507,'expires':Date['now']()+_0x4152ee});}this['cacheStats']['sets']++;}static['_mapGetCachedEntry'](_0x223281,_0x422116){if(this['isShardMode'])return{'hit':![],'data':undefined};const _0x2d5713=this['localCache']['get'](_0x223281);if(_0x2d5713&&_0x2d5713['expires']>Date['now']()){if(_0x2d5713['data']===NEGATIVE_CACHE_PLACEHOLDER){this['cacheStats']['mapHits']++;return{'hit':!![],'data':null};}this['cacheStats']['mapHits']++;const _0xf6fc3c=_0x2d5713['data'];let _0x5989c8;if(typeof _0xf6fc3c==='string'){_0x5989c8=safeParse(_0xf6fc3c,this['logger']);}else{_0x5989c8=_0xf6fc3c;}if(typeof _0x5989c8!=='object'||_0x5989c8===null){return{'hit':!![],'data':_0x5989c8};}const _0x2bcb61=_0x422116?Array['isArray'](_0x422116)?_0x422116:[_0x422116]:undefined;if(Array['isArray'](_0x5989c8)){const _0x1ce102=this['bulkBuild'](_0x5989c8,{'isNewRecord':![],'include':_0x2bcb61});return{'hit':!![],'data':_0x1ce102};}else{const _0x303d92=this['build'](_0x5989c8,{'isNewRecord':![],'include':_0x2bcb61});return{'hit':!![],'data':_0x303d92};}}if(_0x2d5713)this['localCache']['delete'](_0x223281);return{'hit':![],'data':undefined};}static['_mapClearCache'](_0x469abf){if(this['isShardMode'])return;this['localCache']['delete'](_0x469abf);this['cacheStats']['clears']++;}static['_mapClearAllModelCache'](){if(this['isShardMode'])return;const _0x26b6eb=this['CACHE_VERSION']+':'+this['name']+':';let _0x5cebc8=0x1*0x166a+0xb+0x1675*-0x1;for(const _0x558328 of this['localCache']['keys']()){if(_0x558328['startsWith'](_0x26b6eb)){this['localCache']['delete'](_0x558328);_0x5cebc8++;}}if(_0x5cebc8>0x1b33+-0x258b+0xa58){this['logger']['info']('♻️\x20[MAP\x20CACHE]\x20Cleared\x20'+_0x5cebc8+'\x20in-memory\x20entries\x20for\x20'+this['name']+'\x20(Redis\x20fallback).');}}static async['_performDriftCheck'](_0x2f064b,_0x457baa,_0x111782,_0x423362){this['driftStats']['checked']++;try{const _0x500490=await this['findOne'](_0x111782);const _0x3220f6=_0x457baa?.['toJSON']?.()??_0x457baa??null;const _0x524fd0=_0x500490?.['toJSON']?.()??_0x500490??null;const _0x2fc24f=safeStringify(_0x3220f6,this['logger']);const _0xc63f08=safeStringify(_0x524fd0,this['logger']);if(_0x2fc24f===_0xc63f08)return;const _0x226c5c={};const _0x5edb1d=new Set([...Object['keys'](_0x3220f6??{}),...Object['keys'](_0x524fd0??{})]);const _0x333ce1=['createdAt','updatedAt','deletedAt'];for(const _0x156587 of _0x5edb1d){if(_0x333ce1['includes'](_0x156587))continue;if(JSON['stringify'](_0x3220f6?.[_0x156587])!==JSON['stringify'](_0x524fd0?.[_0x156587])){_0x226c5c[_0x156587]={'cached':_0x3220f6?.[_0x156587],'fresh':_0x524fd0?.[_0x156587]};}}if(Object['keys'](_0x226c5c)['length']===-0x2299+0xf*0x1c2+-0x7*-0x12d)return;this['driftStats']['drifted']++;const _0x32d5ed=Object['keys'](_0x226c5c)['join'](',\x20');this['logger']['warn']('🔬\x20[DRIFT\x20DETECTED]\x20'+this['name']+'\x20|\x20key:\x20'+_0x2f064b+'\x20|\x20'+(Object['keys'](_0x226c5c)['length']+'\x20drifted\x20field(s):\x20['+_0x32d5ed+']\x20→\x20self-healing...'));const _0x17b65d=this['_generateSmartTags'](_0x500490);const _0x25064b=_0x423362||this['CACHE_TTL']||this['DEFAULT_TTL'];await this['setCacheEntry'](_0x2f064b,_0x500490,_0x25064b,_0x17b65d);this['driftStats']['healed']++;this['logger']['info']('🩹\x20[SELF-HEALED]\x20'+this['name']+'\x20|\x20key:\x20'+_0x2f064b+'\x20|\x20cache\x20updated\x20with\x20fresh\x20DB\x20data.');}catch(_0x56e467){this['driftStats']['errors']++;this['logger']['warn']('🔬\x20[DRIFT\x20CHECK\x20ERROR]\x20'+this['name']+'\x20|\x20key:\x20'+_0x2f064b+'\x20|\x20'+_0x56e467?.['message']);}}static['getCacheDriftStats'](){return{...this['driftStats'],'rate':this['DRIFT_CHECK_RATE'],'enabled':this['DRIFT_CHECK_ENABLED']};}static['getGlobalCacheStats'](_0x3a0e43){const _0x509204={'redisHits':0x0,'mapHits':0x0,'misses':0x0,'sets':0x0,'clears':0x0,'errors':0x0};if(!_0x3a0e43||typeof _0x3a0e43!=='object'){return{...this['cacheStats']};}for(const _0x26fa27 in _0x3a0e43){const _0x3b639f=_0x3a0e43[_0x26fa27];if(_0x3b639f&&_0x3b639f['prototype']instanceof KythiaModel&&_0x3b639f['cacheStats']&&_0x3b639f['cacheStats']!==KythiaModel['cacheStats']){const _0x3e9634=_0x3b639f['cacheStats'];_0x509204['redisHits']+=_0x3e9634['redisHits']||-0x12e8+-0x429+-0x49d*-0x5;_0x509204['mapHits']+=_0x3e9634['mapHits']||0xf7*-0x17+-0x1*-0xe3+-0x71a*-0x3;_0x509204['misses']+=_0x3e9634['misses']||0x194d+0x1ddc+-0x3729;_0x509204['sets']+=_0x3e9634['sets']||0x221*0xb+-0x521+-0x1*0x124a;_0x509204['clears']+=_0x3e9634['clears']||-0x3*0xa33+-0x6*0x3f7+0x3663;_0x509204['errors']+=_0x3e9634['errors']||0x23dc+-0x1eef+-0x4ed;}}return _0x509204;}static['_normalizeFindOptions'](_0x487eff){if(!_0x487eff||typeof _0x487eff!=='object'||Object['keys'](_0x487eff)['length']===-0xae1+-0xebe+-0x1*-0x199f)return{'where':{}};const _0x2eb869=['cacheTags','noCache','ttl','customCacheKey'];if(_0x487eff['where']){const _0x4c812a={..._0x487eff};for(const _0x320c32 of _0x2eb869){delete _0x4c812a[_0x320c32];}return _0x4c812a;}const _0x216cbb=['order','limit','offset','attributes','include','group','having','paranoid','lock','skipLocked','subQuery','raw','nest','plain','transaction','logging','benchmark','replacements','bind','scope','col'];const _0xa4b96c={};const _0xa34180={};for(const _0x48c5d7 in _0x487eff){if(_0x2eb869['includes'](_0x48c5d7)){continue;}if(_0x216cbb['includes'](_0x48c5d7))_0xa34180[_0x48c5d7]=_0x487eff[_0x48c5d7];else _0xa4b96c[_0x48c5d7]=_0x487eff[_0x48c5d7];}return{'where':_0xa4b96c,..._0xa34180};}static async['getCache'](_0x1adfc9,_0x449042={}){const {noCache:_0x2c7c9e,customCacheKey:_0x135355,ttl:_0x30e476,..._0x260300}=_0x449042;if(Array['isArray'](_0x1adfc9)){return this['bulkGetCache'](_0x1adfc9,_0x449042);}const _0x3ba8e9=this['_normalizeFindOptions'](_0x1adfc9);const _0x5ecd0c={..._0x3ba8e9,..._0x260300,'where':{..._0x3ba8e9['where']||{},..._0x260300['where']||{}}};const _0x399601=_0x5ecd0c['where']&&Object['keys'](_0x5ecd0c['where'])['length']>0x930+0xa67*0x2+-0x1dfe;if(!_0x399601){this['logger']['warn']('⚠️\x20[getCache]\x20Called\x20on\x20'+this['name']+'\x20without\x20where\x20clause\x20—\x20returning\x20null.');return null;}if(_0x2c7c9e){this['cacheStats']['misses']++;return this['findOne'](_0x5ecd0c);}const _0x39323e=_0x135355||this['getCacheKey'](_0x5ecd0c);const _0x214ef0=await this['getCachedEntry'](_0x39323e,_0x5ecd0c['include']);if(_0x214ef0['hit']){if(this['DRIFT_CHECK_ENABLED']&&!this['isShardMode']&&_0x214ef0['data']!==null&&Math['random']()<this['DRIFT_CHECK_RATE']){void this['_performDriftCheck'](_0x39323e,_0x214ef0['data'],_0x5ecd0c,_0x30e476);}return _0x214ef0['data'];}this['cacheStats']['misses']++;if(this['pendingQueries']['has'](_0x39323e))return this['pendingQueries']['get'](_0x39323e);const _0x15f247=this['findOne'](_0x5ecd0c)['then'](async _0xceafc0=>{if(this['isRedisConnected']||!this['isShardMode']){const _0x22787d=this['_generateSmartTags'](_0xceafc0);const _0x3258dd=_0xceafc0?_0x30e476:this['NEGATIVE_CACHE_TTL']||0x315*0x2+-0x108*0xd4+0x149a6;await this['setCacheEntry'](_0x39323e,_0xceafc0,_0x3258dd,_0x22787d);}return _0xceafc0;})['finally'](()=>this['pendingQueries']['delete'](_0x39323e));this['pendingQueries']['set'](_0x39323e,_0x15f247);return _0x15f247;}static async['getAllCache'](_0x4b9ac9={}){const {cacheTags:_0x2c6d07,noCache:_0x2fd705,customCacheKey:_0xab670e,ttl:_0x2418e1,..._0x248d2f}=_0x4b9ac9||{};const _0x546dc9=this['_normalizeFindOptions'](_0x248d2f);if(_0x2fd705){this['cacheStats']['misses']++;return this['findAll'](_0x546dc9);}const _0x50c629=_0xab670e||this['getCacheKey'](_0x546dc9);const _0x464f17=await this['getCachedEntry'](_0x50c629,_0x546dc9['include']);if(_0x464f17['hit'])return _0x464f17['data'];this['cacheStats']['misses']++;if(this['pendingQueries']['has'](_0x50c629))return this['pendingQueries']['get'](_0x50c629);const _0x48f4bc=this['findAll'](_0x546dc9)['then'](async _0x51f070=>{if(this['isRedisConnected']||!this['isShardMode']){const _0x4e0537=[''+this['name']];if(Array['isArray'](_0x2c6d07))_0x4e0537['push'](..._0x2c6d07);await this['setCacheEntry'](_0x50c629,_0x51f070,_0x2418e1,_0x4e0537);}return _0x51f070;})['finally'](()=>this['pendingQueries']['delete'](_0x50c629));this['pendingQueries']['set'](_0x50c629,_0x48f4bc);return _0x48f4bc;}static async['scheduleAdd'](_0x277022,_0x54a36c,_0x17b380){if(!this['isRedisConnected']||!this['redis'])return;const _0x2e5783=this['name']+':'+_0x277022;try{await this['redis']['zadd'](_0x2e5783,_0x54a36c,_0x17b380);}catch(_0x2450f){this['_trackRedisError'](_0x2450f);}}static async['scheduleRemove'](_0x36f3f7,_0x47f1ec){if(!this['isRedisConnected']||!this['redis'])return;const _0x553108=this['name']+':'+_0x36f3f7;try{await this['redis']['zrem'](_0x553108,_0x47f1ec);}catch(_0x2d9bbd){this['_trackRedisError'](_0x2d9bbd);}}static async['scheduleGetExpired'](_0x56009a,_0x46bf10=Date['now']()){if(!this['isRedisConnected']||!this['redis'])return[];const _0x58c98f=this['name']+':'+_0x56009a;try{return await this['redis']['zrangebyscore'](_0x58c98f,-0xabc+-0x9f4+-0x1*-0x14b0,_0x46bf10);}catch(_0x2e012c){this['_trackRedisError'](_0x2e012c);return[];}}static async['scheduleClear'](_0x577cb8){if(!this['isRedisConnected']||!this['redis'])return;const _0x30e9fd=this['name']+':'+_0x577cb8;try{await this['redis']['del'](_0x30e9fd);}catch(_0x5952ac){this['_trackRedisError'](_0x5952ac);}}static async['findOrCreateWithCache'](_0x18f0eb){if(!_0x18f0eb?.['where']){throw new Error('findOrCreateWithCache\x20requires\x20a\x20\x27where\x27\x20option.');}const {where:_0x24a1be,defaults:_0x9be828,noCache:_0x574ee5,..._0x1751e7}=_0x18f0eb;if(_0x574ee5){return this['findOrCreate'](_0x18f0eb);}const _0x5c255c=this['_normalizeFindOptions'](_0x24a1be)['where'];const _0x19c5b0=this['getCacheKey']({'where':_0x5c255c,..._0x1751e7});const _0x532a53=await this['getCachedEntry'](_0x19c5b0,_0x1751e7['include']);if(_0x532a53['hit']&&_0x532a53['data']){const _0x2eb791=_0x532a53['data'];let _0x3b51bf=![];if(_0x9be828&&typeof _0x9be828==='object'){for(const _0x27f533 in _0x9be828){if(_0x2eb791[_0x27f533]===undefined||String(_0x2eb791[_0x27f533])!==String(_0x9be828[_0x27f533])){_0x2eb791['set'](_0x27f533,_0x9be828[_0x27f533]);_0x3b51bf=!![];}}}if(_0x3b51bf){try{await _0x2eb791['save']();}catch(_0x30910e){await this['clearCache'](_0x19c5b0);throw _0x30910e;}}return[_0x2eb791,![]];}this['cacheStats']['misses']++;if(this['pendingQueries']['has'](_0x19c5b0)){return this['pendingQueries']['get'](_0x19c5b0);}const _0x1be12c=this['findOrCreate']({'where':_0x24a1be,'defaults':{..._0x24a1be,..._0x9be828},..._0x1751e7})['then'](async([_0x3ccd0a,_0x5059c1])=>{if(!_0x5059c1){let _0xed4d23=![];if(_0x9be828&&typeof _0x9be828==='object'){for(const _0xb42bc5 in _0x9be828){if(_0x3ccd0a[_0xb42bc5]===undefined||String(_0x3ccd0a[_0xb42bc5])!==String(_0x9be828[_0xb42bc5])){_0x3ccd0a['set'](_0xb42bc5,_0x9be828[_0xb42bc5]);_0xed4d23=!![];}}}if(_0xed4d23){try{await _0x3ccd0a['save']();}catch(_0x3eee96){await this['clearCache'](_0x19c5b0);throw _0x3eee96;}}else{const _0x1d7554=this['_generateSmartTags'](_0x3ccd0a);await this['setCacheEntry'](_0x19c5b0,_0x3ccd0a,undefined,_0x1d7554);}}return[_0x3ccd0a,_0x5059c1];})['finally'](()=>{this['pendingQueries']['delete'](_0x19c5b0);});this['pendingQueries']['set'](_0x19c5b0,_0x1be12c);return _0x1be12c;}static async['getOrCreateCache'](_0x41c42e,_0x45e8de={},_0xebc5e7={}){return this['findOrCreateWithCache']({'where':_0x41c42e,'defaults':_0x45e8de,..._0xebc5e7});}static async['firstOrCreateCache'](_0x4399cf,_0x3b2395={},_0x6d10b3={}){const {noCache:_0x3ac202,..._0x9c1705}=_0x6d10b3;const _0x3608e3=this['_normalizeFindOptions'](_0x4399cf)['where'];const _0x2c04dd=this['getCacheKey']({'where':_0x3608e3,..._0x9c1705});if(!_0x3ac202){const _0x448a72=await this['getCachedEntry'](_0x2c04dd,_0x9c1705['include']);if(_0x448a72['hit']&&_0x448a72['data']){return[_0x448a72['data'],![]];}}this['cacheStats']['misses']++;if(this['pendingQueries']['has'](_0x2c04dd)){return this['pendingQueries']['get'](_0x2c04dd);}const _0x577323=this['findOne']({'where':_0x3608e3,..._0x9c1705})['then'](async _0x30bc71=>{if(_0x30bc71){const _0x2c6637=this['_generateSmartTags'](_0x30bc71);await this['setCacheEntry'](_0x2c04dd,_0x30bc71,undefined,_0x2c6637);return[_0x30bc71,![]];}const _0x185694=await this['create']({..._0x3608e3,..._0x3b2395});return[_0x185694,!![]];})['finally'](()=>this['pendingQueries']['delete'](_0x2c04dd));this['pendingQueries']['set'](_0x2c04dd,_0x577323);return _0x577323;}static async['firstOrNewCache'](_0x3abcb4,_0x56d891={},_0x3e80ec={}){const {noCache:_0x2e3b7c,..._0xac8ac5}=_0x3e80ec;const _0x296124=this['_normalizeFindOptions'](_0x3abcb4)['where'];const _0x595d7e=this['getCacheKey']({'where':_0x296124,..._0xac8ac5});if(!_0x2e3b7c){const _0x3c6e59=await this['getCachedEntry'](_0x595d7e,_0xac8ac5['include']);if(_0x3c6e59['hit']&&_0x3c6e59['data']){return[_0x3c6e59['data'],![]];}}this['cacheStats']['misses']++;const _0x374adc=await this['findOne']({'where':_0x296124,..._0xac8ac5});if(_0x374adc){const _0x5dd138=this['_generateSmartTags'](_0x374adc);await this['setCacheEntry'](_0x595d7e,_0x374adc,undefined,_0x5dd138);return[_0x374adc,![]];}const _0x5cd014=this['build']({..._0x296124,..._0x56d891});return[_0x5cd014,!![]];}static async['firstOrUpdateCache'](_0x56f6d3,_0x4dfb56={},_0x2d7c9e={}){const {noCache:_0x9630c6,..._0x18f64d}=_0x2d7c9e;const _0x484d1c=this['_normalizeFindOptions'](_0x56f6d3)['where'];const _0x507b5e=this['getCacheKey']({'where':_0x484d1c,..._0x18f64d});if(!_0x9630c6){const _0x65d601=await this['getCachedEntry'](_0x507b5e,_0x18f64d['include']);if(_0x65d601['hit']&&_0x65d601['data']){const _0xdd8086=_0x65d601['data'];try{_0xdd8086['set'](_0x4dfb56);await _0xdd8086['save']();}catch(_0x27b667){await this['clearCache'](_0x507b5e);throw _0x27b667;}return[_0xdd8086,![]];}}this['cacheStats']['misses']++;if(this['pendingQueries']['has'](_0x507b5e)){return this['pendingQueries']['get'](_0x507b5e);}const _0x394a5e=this['findOne']({'where':_0x484d1c,..._0x18f64d})['then'](async _0x2876dc=>{if(_0x2876dc){try{_0x2876dc['set'](_0x4dfb56);await _0x2876dc['save']();}catch(_0x17af53){await this['clearCache'](_0x507b5e);throw _0x17af53;}return[_0x2876dc,![]];}const _0x34959a=await this['create']({..._0x484d1c,..._0x4dfb56});return[_0x34959a,!![]];})['finally'](()=>this['pendingQueries']['delete'](_0x507b5e));this['pendingQueries']['set'](_0x507b5e,_0x394a5e);return _0x394a5e;}static async['updateOrCreateCache'](_0x5bb4c8,_0x533e86={},_0x3caff6={}){const {..._0x5e28c5}=_0x3caff6;const _0x5bd703=this['_normalizeFindOptions'](_0x5bb4c8)['where'];const _0x3f7a0d=this['getCacheKey']({'where':_0x5bd703,..._0x5e28c5});if(this['pendingQueries']['has'](_0x3f7a0d)){return this['pendingQueries']['get'](_0x3f7a0d);}const _0x294217=this['findOne']({'where':_0x5bd703,..._0x5e28c5})['then'](async _0x248ea8=>{if(_0x248ea8){try{_0x248ea8['set'](_0x533e86);await _0x248ea8['save']();}catch(_0x12a6ff){await this['clearCache'](_0x3f7a0d);throw _0x12a6ff;}return[_0x248ea8,![]];}const _0x96b6c7=await this['create']({..._0x5bd703,..._0x533e86});return[_0x96b6c7,!![]];})['finally'](()=>{this['pendingQueries']['delete'](_0x3f7a0d);});this['pendingQueries']['set'](_0x3f7a0d,_0x294217);return _0x294217;}static async['countWithCache'](_0x4c9ae4={},_0x31ad86=(0x106a*0x1+0x1319*-0x2+-0x1*-0x15cd)*(-0x176*0x19+0x1915+0xbad)*(-0x59*0x9+-0x4af*-0x2+-0x255)){const {noCache:_0x206504,ttl:_0x26d273,cacheTags:_0x3182f0,customCacheKey:_0x4f6713,..._0x3d5d8e}=_0x4c9ae4||{};const _0xfcb9e4={'queryType':'count',..._0x3d5d8e};const _0x23c204=this['getCacheKey'](_0xfcb9e4);const _0x191e20=_0x26d273||_0x31ad86||this['CACHE_TTL']||this['DEFAULT_TTL'];if(!_0x206504){try{if(this['isRedisConnected']&&this['redis']){const _0x226c2f=await this['redis']['get'](_0x23c204);if(_0x226c2f!==null&&_0x226c2f!==undefined){this['cacheStats']['redisHits']++;return parseInt(_0x226c2f,-0xc66+-0xd*0x283+0x2d17);}}else if(!this['isShardMode']){const _0xe846aa=this['localCache']['get'](_0x23c204);if(_0xe846aa&&_0xe846aa['expires']>Date['now']()){this['cacheStats']['mapHits']++;const _0x3db4eb=typeof _0xe846aa['data']==='string'?parseInt(_0xe846aa['data'],-0x1206+0x16+0x11fa):_0xe846aa['data'];return _0x3db4eb;}}}catch(_0x387d65){this['_trackRedisError'](_0x387d65);}}this['cacheStats']['misses']++;const _0x1e7707=await this['count'](_0x3d5d8e);try{if(this['isRedisConnected']&&this['redis']){const _0x3d33ad=Math['ceil'](_0x191e20/(-0xafa+-0x1e85+0x2d67)*(0xaf*0x4+0x1738+-0x19f2));await this['redis']['multi']()['set'](_0x23c204,String(_0x1e7707),'PX',_0x191e20)['sadd'](''+this['name'],_0x23c204)['expire'](''+this['name'],_0x3d33ad)['exec']();this['cacheStats']['sets']++;}else if(!this['isShardMode']){this['localCache']['set'](_0x23c204,{'data':String(_0x1e7707),'expires':Date['now']()+_0x191e20});this['cacheStats']['sets']++;}}catch(_0x4e5651){this['_trackRedisError'](_0x4e5651);}return _0x1e7707;}static async['clearNegativeCache'](_0x28e8c4){return this['clearCache'](_0x28e8c4);}static async['aggregateWithCache'](_0x52150e={},_0x3a02b5={}){const {cacheTags:_0x1c0f1a,noCache:_0x4fad82,..._0x4a7faa}=_0x52150e||{};const {ttl:ttl=(-0x1fea+-0x1a49+-0x3a38*-0x1)*(-0x436+0x16d3+0x1261*-0x1)*(-0x1*0x1523+-0x204d*-0x1+0x1*-0x742)}=_0x3a02b5||{};const _0x4e75c8={'queryType':'aggregate',..._0x4a7faa};const _0x288748=this['getCacheKey'](_0x4e75c8);const _0x36421b=ttl||this['CACHE_TTL']||this['DEFAULT_TTL'];if(!_0x4fad82){try{if(this['isRedisConnected']&&this['redis']){const _0x22468b=await this['redis']['get'](_0x288748);if(_0x22468b!==null&&_0x22468b!==undefined){const _0x316c38=safeParse(_0x22468b,this['logger']);if(_0x316c38!==null){this['cacheStats']['redisHits']++;return _0x316c38;}}}else if(!this['isShardMode']){const _0x262d90=this['localCache']['get'](_0x288748);if(_0x262d90&&_0x262d90['expires']>Date['now']()){this['cacheStats']['mapHits']++;const _0x15f725=typeof _0x262d90['data']==='string'?safeParse(_0x262d90['data'],this['logger']):_0x262d90['data'];return _0x15f725;}}}catch(_0x258427){this['_trackRedisError'](_0x258427);}}this['cacheStats']['misses']++;const _0x14fc04=await this['findAll'](_0x4a7faa);try{const _0x26d179=_0x14fc04['map'](_0x2456ba=>typeof _0x2456ba['toJSON']==='function'?_0x2456ba['toJSON']():_0x2456ba);const _0x575e89=safeStringify(_0x26d179,this['logger']);if(this['isRedisConnected']&&this['redis']){const _0x3a7a81=Math['ceil'](_0x36421b/(-0x9c7+0x1be8+-0x1*0xe39)*(0x1b43+-0x239b+-0x1*-0x85a));const _0x5de01=[''+this['name']];if(Array['isArray'](_0x1c0f1a))_0x5de01['push'](..._0x1c0f1a);const _0x43ff07=this['redis']['multi']();_0x43ff07['set'](_0x288748,_0x575e89,'PX',_0x36421b);for(const _0x3d3779 of _0x5de01){_0x43ff07['sadd'](_0x3d3779,_0x288748);_0x43ff07['expire'](_0x3d3779,_0x3a7a81);}await _0x43ff07['exec']();this['cacheStats']['sets']++;}else if(!this['isShardMode']){this['localCache']['set'](_0x288748,{'data':_0x575e89,'expires':Date['now']()+_0x36421b});this['cacheStats']['sets']++;}}catch(_0x5975bf){this['_trackRedisError'](_0x5975bf);}return _0x14fc04;}static async['refreshCache'](_0x28ed9c,_0x22f346={}){const {ttl:_0x26d36c,..._0x2add31}=_0x22f346;const _0x287c20=this['_normalizeFindOptions'](_0x28ed9c);const _0x4dffbb={..._0x287c20,..._0x2add31,'where':{..._0x287c20['where']||{},..._0x2add31['where']||{}}};if(!_0x4dffbb['where']||Object['keys'](_0x4dffbb['where'])['length']===-0x1b47+-0xe24+0x296b)return null;const _0x89ff17=this['getCacheKey'](_0x4dffbb);await this['clearCache'](_0x89ff17);const _0x144b13=await this['findOne'](_0x4dffbb);if(this['isRedisConnected']||!this['isShardMode']){const _0x413cdc=this['_generateSmartTags'](_0x144b13);await this['setCacheEntry'](_0x89ff17,_0x144b13,_0x26d36c,_0x413cdc);}return _0x144b13;}static async['existsCache'](_0x350cb0,_0x4720c3={}){const {noCache:_0x4f9e5e,ttl:_0x93d39b}=_0x4720c3;const _0x5342fc=this['_normalizeFindOptions'](_0x350cb0)['where'];const _0x1acc34=this['getCacheKey']({'queryType':'exists','where':_0x5342fc});const _0x2ba1b2=_0x93d39b||this['CACHE_TTL']||this['DEFAULT_TTL'];if(!_0x4f9e5e){try{if(this['isRedisConnected']&&this['redis']){const _0x46b901=await this['redis']['get'](_0x1acc34);if(_0x46b901!==null&&_0x46b901!==undefined){this['cacheStats']['redisHits']++;return _0x46b901==='true';}}else if(!this['isShardMode']){const _0x3f4a2a=this['localCache']['get'](_0x1acc34);if(_0x3f4a2a&&_0x3f4a2a['expires']>Date['now']()){this['cacheStats']['mapHits']++;return _0x3f4a2a['data']==='true'||_0x3f4a2a['data']===!![];}}}catch(_0x597108){this['_trackRedisError'](_0x597108);}}this['cacheStats']['misses']++;const _0x1d0162=await this['count']({'where':_0x5342fc});const _0x177e30=_0x1d0162>0x10be+-0x1c5f+0xba1;try{if(this['isRedisConnected']&&this['redis']){const _0xb5165c=Math['ceil'](_0x2ba1b2/(-0x1ec3+0x4*-0x4ef+0x1*0x3667)*(-0x223+-0x657+0x87c));await this['redis']['multi']()['set'](_0x1acc34,String(_0x177e30),'PX',_0x2ba1b2)['sadd'](''+this['name'],_0x1acc34)['expire'](''+this['name'],_0xb5165c)['exec']();this['cacheStats']['sets']++;}else if(!this['isShardMode']){this['localCache']['set'](_0x1acc34,{'data':String(_0x177e30),'expires':Date['now']()+_0x2ba1b2});this['cacheStats']['sets']++;}}catch(_0x518006){this['_trackRedisError'](_0x518006);}return _0x177e30;}static async['bulkGetCache'](_0x7df2e2,_0x25a003={}){if(!Array['isArray'](_0x7df2e2)||_0x7df2e2['length']===-0x1d89+0x7a*-0x27+0x301f)return[];const _0x357fb6=this['primaryKeyAttribute'];const {noCache:_0x1e07ab,ttl:_0x156313,customCacheKey:_0x4a8b83,..._0x572975}=_0x25a003;const _0x34a8f9=new Map();const _0x8d6659=[];if(!_0x1e07ab){await Promise['all'](_0x7df2e2['map'](async _0x39cc04=>{const _0x2f891e=this['getCacheKey']({'where':{[_0x357fb6]:_0x39cc04},..._0x572975});const _0x560145=await this['getCachedEntry'](_0x2f891e,_0x572975['include']);if(_0x560145['hit']&&_0x560145['data']){_0x34a8f9['set'](_0x39cc04,_0x560145['data']);}else{_0x8d6659['push'](_0x39cc04);}}));}else{_0x8d6659['push'](..._0x7df2e2);}if(_0x8d6659['length']>0x1342+0x94f*-0x1+0x3*-0x351){this['cacheStats']['misses']+=_0x8d6659['length'];const _0x1f648b=await this['findAll']({'where':{[_0x357fb6]:_0x8d6659},..._0x572975});await Promise['all'](_0x1f648b['map'](async _0xd2501c=>{const _0x18e55e=_0xd2501c[_0x357fb6];_0x34a8f9['set'](_0x18e55e,_0xd2501c);if(this['isRedisConnected']||!this['isShardMode']){const _0x59b9b0=this['getCacheKey']({'where':{[_0x357fb6]:_0x18e55e},..._0x572975});const _0x27d122=this['_generateSmartTags'](_0xd2501c);await this['setCacheEntry'](_0x59b9b0,_0xd2501c,_0x156313,_0x27d122);}}));}return _0x7df2e2['map'](_0x4ce59c=>_0x34a8f9['get'](_0x4ce59c))['filter'](Boolean);}static async['destroyAndClearCache'](_0x4881c8){if(!_0x4881c8?.['where']){throw new Error('destroyAndClearCache\x20requires\x20a\x20\x27where\x27\x20option.');}const _0xa06486=await this['destroy'](_0x4881c8);if(this['isRedisConnected']){await this['invalidateByTags']([''+this['name']]);}else if(!this['isShardMode']){this['_mapClearAllModelCache']();}return _0xa06486;}static async['incrementCache'](_0x31927f,_0x37b3e7,_0x46739a=0x15b5+-0x19ab+-0x3f7*-0x1){const _0x4da31a=this['_normalizeFindOptions'](_0x31927f)['where'];await this['increment'](_0x37b3e7,{'by':_0x46739a,'where':_0x4da31a});const _0x517000=this['primaryKeyAttribute'];const _0x12e567=_0x4da31a[_0x517000];if(this['isRedisConnected']){const _0x432b48=_0x12e567?[''+this['name'],this['name']+':'+_0x517000+':'+_0x12e567]:[''+this['name']];await this['invalidateByTags'](_0x432b48);}else if(!this['isShardMode']){this['_mapClearAllModelCache']();}}static async['paginateCache'](_0x4fa26d={}){const {page:page=0x18c7+0xaba*-0x2+-0x352,pageSize:pageSize=0x828*-0x1+0xabf+-0x283,noCache:_0x3f8422,ttl:_0x550926,cacheTags:_0x319a46,..._0x138f03}=_0x4fa26d;const _0x24dc5e=(page-(-0x1004+0x823*0x2+-0x1*0x41))*pageSize;const _0x517083=this['_normalizeFindOptions'](_0x138f03);const _0x21eadb={..._0x517083,'limit':pageSize,'offset':_0x24dc5e};const _0xa8f34a=_0x550926||this['CACHE_TTL']||this['DEFAULT_TTL'];const _0x3f6522=this['getCacheKey']({'queryType':'paginate','page':page,'pageSize':pageSize,..._0x517083});if(!_0x3f8422){try{if(this['isRedisConnected']&&this['redis']){const _0x4dd988=await this['redis']['get'](_0x3f6522);if(_0x4dd988!==null&&_0x4dd988!==undefined){const _0x1bdf8a=safeParse(_0x4dd988,this['logger']);if(_0x1bdf8a&&typeof _0x1bdf8a==='object'&&'rows'in _0x1bdf8a){this['cacheStats']['redisHits']++;const _0x1e7aeb=_0x21eadb['include']?Array['isArray'](_0x21eadb['include'])?_0x21eadb['include']:[_0x21eadb['include']]:undefined;_0x1bdf8a['rows']=_0x1bdf8a['rows']['map'](_0x745766=>this['build'](_0x745766,{'isNewRecord':![],'include':_0x1e7aeb}));return _0x1bdf8a;}}}else if(!this['isShardMode']){const _0x372ad7=this['localCache']['get'](_0x3f6522);if(_0x372ad7&&_0x372ad7['expires']>Date['now']()){const _0x11fec6=typeof _0x372ad7['data']==='string'?safeParse(_0x372ad7['data'],this['logger']):_0x372ad7['data'];if(_0x11fec6&&typeof _0x11fec6==='object'&&'rows'in _0x11fec6){this['cacheStats']['mapHits']++;const _0x1d491d=_0x21eadb['include']?Array['isArray'](_0x21eadb['include'])?_0x21eadb['include']:[_0x21eadb['include']]:undefined;_0x11fec6['rows']=this['bulkBuild'](_0x11fec6['rows'],{'isNewRecord':![],'include':_0x1d491d});return _0x11fec6;}}}}catch(_0x47aead){this['_trackRedisError'](_0x47aead);}}this['cacheStats']['misses']++;const {rows:_0x30e560,count:_0x5f4843}=await this['findAndCountAll'](_0x21eadb);const _0xe27731=Math['ceil'](_0x5f4843/pageSize);const _0x4dc3ba={'rows':_0x30e560,'count':_0x5f4843,'totalPages':_0xe27731,'currentPage':page};const _0x13e26e=[''+this['name']];if(Array['isArray'](_0x319a46))_0x13e26e['push'](..._0x319a46);const _0x50bf6c=Math['ceil'](_0xa8f34a/(-0xb14*0x1+-0x1b*0x14b+0x1*0x31e5)*(-0x1013+0x2077+-0x1062*0x1));const _0x220015={'rows':_0x30e560['map'](_0x3528c0=>typeof _0x3528c0['toJSON']==='function'?_0x3528c0['toJSON']():_0x3528c0),'count':_0x5f4843,'totalPages':_0xe27731,'currentPage':page};const _0x10fc49=safeStringify(_0x220015,this['logger']);try{if(!_0x3f8422&&this['isRedisConnected']&&this['redis']){const _0x5951d2=this['redis']['multi']();_0x5951d2['set'](_0x3f6522,_0x10fc49,'PX',_0xa8f34a);for(const _0x5e9304 of _0x13e26e){_0x5951d2['sadd'](_0x5e9304,_0x3f6522);_0x5951d2['expire'](_0x5e9304,_0x50bf6c);}await _0x5951d2['exec']();this['cacheStats']['sets']++;}else if(!_0x3f8422&&!this['isShardMode']){this['localCache']['set'](_0x3f6522,{'data':_0x10fc49,'expires':Date['now']()+_0xa8f34a});this['cacheStats']['sets']++;}}catch(_0x1b204c){this['_trackRedisError'](_0x1b204c);}return _0x4dc3ba;}static['initializeCacheHooks'](){if(!this['redis']){this['logger']['warn']('⚠️\x20[CACHE]\x20Redis\x20not\x20initialized\x20for\x20model\x20'+this['name']+'.\x20Hooks\x20attached,\x20but\x20Redis\x20invalidation\x20will\x20be\x20skipped\x20until\x20connected.');}const _0x2776e4=async _0x47a93b=>{const _0x2b0f2e=_0x47a93b['constructor'];if(_0x2b0f2e['isRedisConnected']){const _0x39b8cb=_0x2b0f2e['_generateSmartTags'](_0x47a93b);if(Array['isArray'](_0x2b0f2e['customInvalidationTags'])){_0x39b8cb['push'](..._0x2b0f2e['customInvalidationTags']);}await _0x2b0f2e['invalidateByTags'](_0x39b8cb);}else if(!_0x2b0f2e['isShardMode']){_0x2b0f2e['_mapClearAllModelCache']();}};const _0x165343=async _0x2be741=>{const _0x222efe=_0x2be741['constructor'];if(_0x222efe['isRedisConnected']){const _0x24b04d=_0x222efe['_generateSmartTags'](_0x2be741);if(Array['isArray'](_0x222efe['customInvalidationTags'])){_0x24b04d['push'](..._0x222efe['customInvalidationTags']);}await _0x222efe['invalidateByTags'](_0x24b04d);}else if(!_0x222efe['isShardMode']){_0x222efe['_mapClearAllModelCache']();}};const _0x3e81a1=async()=>{if(this['isRedisConnected']){await this['invalidateByTags']([''+this['name']]);}else if(!this['isShardMode']){this['_mapClearAllModelCache']();}};this['addHook']('afterSave',_0x2776e4);this['addHook']('afterDestroy',_0x165343);this['addHook']('afterBulkCreate',_0x3e81a1);this['addHook']('afterBulkUpdate',_0x3e81a1);this['addHook']('afterBulkDestroy',_0x3e81a1);}static['attachHooksToAllModels'](_0x4c9231,_0x39eb02){if(!this['redis']){this['logger']['warn']('⚠️\x20[CACHE]\x20Redis\x20not\x20initialized.\x20Attaching\x20hooks\x20anyway\x20for\x20in-memory\x20cache\x20invalidation.');}for(const _0x299d4b in _0x4c9231['models']){const _0x5a8c68=_0x4c9231['models'][_0x299d4b];if(_0x5a8c68['prototype']instanceof KythiaModel){_0x5a8c68['client']=_0x39eb02;this['logger']['info']('\x20\x20╰┈➤\x20⚙️\x20\x20Attaching\x20hooks\x20to\x20'+_0x5a8c68['name']);_0x5a8c68['initializeCacheHooks']();}}}static async['touchParent'](_0x372004,_0x36e8e1,_0x51c54e,_0xd6b78f='updatedAt'){if(!_0x372004?.[_0x36e8e1]){return;}try{const _0x53c5ff=_0x51c54e['primaryKeyAttribute'];const _0x1e7e38=await _0x51c54e['findByPk'](_0x372004[_0x36e8e1]);if(_0x1e7e38){_0x1e7e38['changed'](_0xd6b78f,!![]);await _0x1e7e38['save']({'fields':[_0xd6b78f]});this['logger']['info']('🔄\x20Touched\x20parent\x20'+_0x51c54e['name']+'\x20#'+_0x1e7e38[_0x53c5ff]+'\x20due\x20to\x20change\x20in\x20'+this['name']+'.');}}catch(_0x4987d3){this['logger']['error']('🔄\x20Failed\x20to\x20touch\x20parent\x20'+_0x51c54e['name'],_0x4987d3);}}static['setupParentTouch'](_0x408bb8,_0x32e9cf,_0x553e37='updatedAt'){const _0x3215b3=_0xcbf503=>{return this['touchParent'](_0xcbf503,_0x408bb8,_0x32e9cf,_0x553e37);};const _0x5adcd0=_0x1ed6c6=>{if(_0x1ed6c6&&_0x1ed6c6['length']>-0x2*-0x110e+-0x22a8+0x14*0x7){return this['touchParent'](_0x1ed6c6[0x14d9+0x347*0x1+-0x1820],_0x408bb8,_0x32e9cf,_0x553e37);}return Promise['resolve']();};this['addHook']('afterSave',_0x3215b3);this['addHook']('afterDestroy',_0x3215b3);this['addHook']('afterBulkCreate',_0x5adcd0);}}exports['KythiaModel']=KythiaModel;exports['default']=KythiaModel;