kythia-core 26.0.2 → 26.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Kythia.d.ts.map +1 -1
- package/dist/Kythia.js +1 -1
- package/dist/Kythia.js.map +1 -1
- package/dist/cli/Command.js +1 -1
- package/dist/cli/commands/AboutCommand.js +1 -1
- package/dist/cli/commands/CacheClearCommand.js +1 -1
- package/dist/cli/commands/DIGenerateCommand.js +1 -1
- package/dist/cli/commands/DocsGenerateCommand.js +1 -1
- package/dist/cli/commands/LangCheckCommand.js +1 -1
- package/dist/cli/commands/LangSyncCommand.js +1 -1
- package/dist/cli/commands/LangTranslateCommand.js +1 -1
- package/dist/cli/commands/MakeMigrationCommand.js +1 -1
- package/dist/cli/commands/MakeModelCommand.js +1 -1
- package/dist/cli/commands/MakeSeederCommand.js +1 -1
- package/dist/cli/commands/MigrateCommand.js +1 -1
- package/dist/cli/commands/NamespaceCommand.js +1 -1
- package/dist/cli/commands/SeedCommand.js +1 -1
- package/dist/cli/commands/StructureCommand.js +1 -1
- package/dist/cli/commands/UpversionCommand.js +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/utils/db.js +1 -1
- package/dist/database/KythiaMigrator.js +1 -1
- package/dist/database/KythiaModel.d.ts +3 -2
- package/dist/database/KythiaModel.d.ts.map +1 -1
- package/dist/database/KythiaModel.js +1 -1
- package/dist/database/KythiaModel.js.map +1 -1
- package/dist/database/KythiaSequelize.d.ts.map +1 -1
- package/dist/database/KythiaSequelize.js +1 -1
- package/dist/database/KythiaSequelize.js.map +1 -1
- package/dist/database/KythiaStorage.js +1 -1
- package/dist/database/ModelLoader.js +1 -1
- package/dist/database/Seeder.js +1 -1
- package/dist/database/SeederManager.js +1 -1
- package/dist/index.js +1 -1
- package/dist/managers/AddonManager.d.ts +2 -2
- package/dist/managers/AddonManager.d.ts.map +1 -1
- package/dist/managers/AddonManager.js +1 -1
- package/dist/managers/AddonManager.js.map +1 -1
- package/dist/managers/EventManager.js +1 -1
- package/dist/managers/InteractionManager.d.ts +1 -0
- package/dist/managers/InteractionManager.d.ts.map +1 -1
- package/dist/managers/InteractionManager.js +1 -1
- package/dist/managers/InteractionManager.js.map +1 -1
- package/dist/managers/KythiaEngine.d.ts +4 -0
- package/dist/managers/KythiaEngine.d.ts.map +1 -1
- package/dist/managers/KythiaEngine.js +1 -1
- package/dist/managers/KythiaEngine.js.map +1 -1
- package/dist/managers/MetricsManager.js +1 -1
- package/dist/managers/MiddlewareManager.js +1 -1
- package/dist/managers/ShardingManager.d.ts +1 -0
- package/dist/managers/ShardingManager.d.ts.map +1 -1
- package/dist/managers/ShardingManager.js +1 -1
- package/dist/managers/ShardingManager.js.map +1 -1
- package/dist/managers/ShutdownManager.d.ts +1 -0
- package/dist/managers/ShutdownManager.d.ts.map +1 -1
- package/dist/managers/ShutdownManager.js +1 -1
- package/dist/managers/ShutdownManager.js.map +1 -1
- package/dist/managers/TranslatorManager.js +1 -1
- package/dist/middlewares/botPermissions.js +1 -1
- package/dist/middlewares/cooldown.d.ts.map +1 -1
- package/dist/middlewares/cooldown.js +1 -1
- package/dist/middlewares/cooldown.js.map +1 -1
- package/dist/middlewares/isInMainGuild.js +1 -1
- package/dist/middlewares/ownerOnly.js +1 -1
- package/dist/middlewares/userPermissions.js +1 -1
- package/dist/structures/BaseCommand.js +1 -1
- package/dist/types/AddonManager.d.ts +4 -1
- package/dist/types/AddonManager.d.ts.map +1 -1
- package/dist/types/KythiaConfig.d.ts +2 -0
- package/dist/types/KythiaConfig.d.ts.map +1 -1
- package/dist/types/ModuleLoaders.js +1 -1
- package/dist/types/index.js +1 -1
- package/dist/utils/DiscordWebhookTransport.js +1 -1
- package/dist/utils/InteractionFactory.js +1 -1
- package/dist/utils/color.js +1 -1
- package/dist/utils/discord.js +1 -1
- package/dist/utils/formatter.js +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/logger.js +1 -1
- 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(
|
|
2
|
+
'use strict';var __importDefault=this&&this['__importDefault']||function(_0x3ac38e){return _0x3ac38e&&_0x3ac38e['__esModule']?_0x3ac38e:{'default':_0x3ac38e};};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'](_0x401a90=>(_0x401a90['endsWith']('.js')||_0x401a90['endsWith']('.ts'))&&!_0x401a90['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_0xc74d73){console['error'](pc['red']('❌\x20Failed\x20to\x20load\x20command\x20'+file+':'),a17_0xc74d73);}}}program['parse'](process['argv']);
|
package/dist/cli/utils/db.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var __importDefault=this&&this['__importDefault']||function(
|
|
1
|
+
'use strict';var __importDefault=this&&this['__importDefault']||function(_0x1103b9){return _0x1103b9&&_0x1103b9['__esModule']?_0x1103b9:{'default':_0x1103b9};};Object['defineProperty'](exports,'__esModule',{'value':!![]});exports['storage']=exports['umzug']=exports['sequelize']=void(0x1*-0x9a7+-0x86*-0x8+-0x577*-0x1);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'));(0x8*-0x2b1+-0x1*0x181d+0x2da5,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'](0x220e+0x1bd9+-0x3de6);}const kythiaConfig=require(configPath);const sequelize=(0x1*0x17d2+-0x6d*-0x2d+0x2afb*-0x1,KythiaSequelize_1['default'])(kythiaConfig);exports['sequelize']=sequelize;function getMigrationFiles(){const _0x1470cc=process['cwd']();const _0x1eba91=node_path_1['default']['join'](_0x1470cc,'addons');if(!node_fs_1['default']['existsSync'](_0x1eba91))return[];const _0x207796=[];const _0x5a56bb=node_fs_1['default']['readdirSync'](_0x1eba91)['filter'](_0x44dd17=>node_fs_1['default']['statSync'](node_path_1['default']['join'](_0x1eba91,_0x44dd17))['isDirectory']());for(const _0x54e6e2 of _0x5a56bb){const _0x249c71=node_path_1['default']['join'](_0x1eba91,_0x54e6e2,'database','migrations');if(node_fs_1['default']['existsSync'](_0x249c71)){const _0x1c94e3=node_fs_1['default']['readdirSync'](_0x249c71)['filter'](_0x4408f3=>_0x4408f3['endsWith']('.js')||_0x4408f3['endsWith']('.ts'))['map'](_0x1f926d=>({'name':_0x1f926d,'path':node_path_1['default']['join'](_0x249c71,_0x1f926d)}));_0x207796['push'](..._0x1c94e3);}}return _0x207796['sort']((_0x369996,_0x5c6ed8)=>_0x369996['name']['localeCompare'](_0x5c6ed8['name']));}const storage=new KythiaStorage_1['default']({'sequelize':sequelize});exports['storage']=storage;const umzugLogger={'info':_0x28b663=>{if(typeof _0x28b663==='object'){if(_0x28b663['event']==='migrated'){console['log'](pc['green']('✅\x20Migrated:\x20\x20'+_0x28b663['name']+'\x20')+pc['gray']('('+_0x28b663['durationSeconds']+'s)'));}else if(_0x28b663['event']==='reverting'){console['log'](pc['yellow']('↩️\x20Reverting:\x20'+_0x28b663['name']));}else if(_0x28b663['event']==='reverted'){console['log'](pc['red']('❌\x20Reverted:\x20\x20'+_0x28b663['name']+'\x20')+pc['gray']('('+_0x28b663['durationSeconds']+'s)'));}}else{console['log'](pc['dim'](_0x28b663));}},'warn':_0x4dca33=>console['warn'](pc['yellow']('⚠️\x20'+(typeof _0x4dca33==='object'?JSON['stringify'](_0x4dca33):_0x4dca33))),'error':_0xd5f4d4=>console['error'](pc['red']('🔥\x20'+(typeof _0xd5f4d4==='object'?JSON['stringify'](_0xd5f4d4):_0xd5f4d4))),'debug':_0x3735e9=>console['debug'](pc['gray']('🐛\x20'+(typeof _0x3735e9==='object'?JSON['stringify'](_0x3735e9):_0x3735e9)))};const umzug=new umzug_1['Umzug']({'migrations':getMigrationFiles()['map'](_0x293354=>({'name':_0x293354['name'],'path':_0x293354['path'],'up':async({context:_0x40d169})=>{const _0x1fcedc=require(_0x293354['path']);const _0x3bb1fb=new Proxy(sequelize_1['DataTypes'],{'get'(_0x2a07fe,_0x452dad){if(_0x452dad==='LONGTEXT')return _0x2a07fe['TEXT']('long');return _0x2a07fe[_0x452dad];}});return _0x1fcedc['up'](_0x40d169,_0x3bb1fb);},'down':async({context:_0x17f3c3})=>{const _0x5385bf=require(_0x293354['path']);const _0x54af78=new Proxy(sequelize_1['DataTypes'],{'get'(_0x4eec0f,_0x5d0032){if(_0x5d0032==='LONGTEXT')return _0x4eec0f['TEXT']('long');return _0x4eec0f[_0x5d0032];}});return _0x5385bf['down'](_0x17f3c3,_0x54af78);}})),'context':sequelize['getQueryInterface'](),'storage':storage,'logger':umzugLogger});exports['umzug']=umzug;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var __importDefault=this&&this['__importDefault']||function(
|
|
1
|
+
'use strict';var __importDefault=this&&this['__importDefault']||function(_0x1e6d24){return _0x1e6d24&&_0x1e6d24['__esModule']?_0x1e6d24:{'default':_0x1e6d24};};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(_0x11f273,_0x1c5a3d){const _0x225e3c=node_path_1['default']['join'](_0x11f273,'addons');if(!node_fs_1['default']['existsSync'](_0x225e3c))return[];const _0x5921a1=[];const _0x4ef505=_0x1c5a3d['kythiaConfig']?.['addons']||{};const _0x348b79=node_fs_1['default']['readdirSync'](_0x225e3c)['filter'](_0xc7326b=>node_fs_1['default']['statSync'](node_path_1['default']['join'](_0x225e3c,_0xc7326b))['isDirectory']());for(const _0x16449f of _0x348b79){const _0x45f71b=_0x16449f['replace'](/-([a-z])/g,_0x3cd685=>_0x3cd685[-0x252d+0x1b78+0x9b6]['toUpperCase']());const _0x4ab6bf=_0x4ef505['all']===![]||_0x4ef505['all']?.['active']===![];const _0x2b265b=_0x4ef505[_0x45f71b]===![]||_0x4ef505[_0x45f71b]?.['active']===![];if(_0x4ab6bf||_0x2b265b){continue;}const _0xa6d488=node_path_1['default']['join'](_0x225e3c,_0x16449f,'database','migrations');if(node_fs_1['default']['existsSync'](_0xa6d488)){const _0xfff018=node_fs_1['default']['readdirSync'](_0xa6d488)['filter'](_0x505cdc=>_0x505cdc['endsWith']('.js'))['map'](_0x4d5034=>({'name':_0x4d5034,'path':node_path_1['default']['join'](_0xa6d488,_0x4d5034),'folder':_0xa6d488}));_0x5921a1['push'](..._0xfff018);}}return _0x5921a1['sort']((_0x4ceca7,_0x212628)=>_0x4ceca7['name']['localeCompare'](_0x212628['name']));}const KythiaMigrator=async({sequelize:_0x42b3ac,container:_0x372f53,logger:_0x163b95})=>{const _0x26156d=_0x372f53['appRoot'];const _0x466468=getMigrationFiles(_0x26156d,_0x372f53);if(_0x466468['length']===0x1*0xf53+-0xae7+0x236*-0x2){_0x163b95['info']('📭\x20No\x20migrations\x20found\x20in\x20addons.');return;}const _0x5d9726={'info':_0x4e28a4=>{if(typeof _0x4e28a4==='object'&&_0x4e28a4!==null){const _0x2d9dab=_0x4e28a4;if(_0x2d9dab['event']==='migrating'){}else if(_0x2d9dab['event']==='migrated'){_0x163b95['info']('✅\x20Migrated:\x20'+_0x2d9dab['name']);}}else{_0x163b95['info'](String(_0x4e28a4));}},'warn':_0x315cdb=>_0x163b95['warn'](_0x315cdb),'error':_0x30ed9c=>_0x163b95['error'](_0x30ed9c),'debug':_0x24ea15=>_0x163b95['debug'](_0x24ea15)};const _0x2dd48d=new umzug_1['Umzug']({'migrations':_0x466468['map'](_0x4f4d9e=>({'name':_0x4f4d9e['name'],'path':_0x4f4d9e['path'],'up':async({context:_0x968b41})=>{const _0x30dbc4=require(_0x4f4d9e['path']);const _0x59b989=new Proxy(sequelize_1['DataTypes'],{'get'(_0x70825f,_0x3fb560){if(_0x3fb560==='LONGTEXT')return _0x70825f['TEXT']('long');return _0x70825f[_0x3fb560];}});return _0x30dbc4['up'](_0x968b41,_0x59b989);},'down':async({context:_0x1c1dc9})=>{const _0x353985=require(_0x4f4d9e['path']);const _0x38c2e6=new Proxy(sequelize_1['DataTypes'],{'get'(_0xc51698,_0x177dbd){if(_0x177dbd==='LONGTEXT')return _0xc51698['TEXT']('long');return _0xc51698[_0x177dbd];}});return _0x353985['down'](_0x1c1dc9,_0x38c2e6);}})),'context':_0x42b3ac['getQueryInterface'](),'storage':new KythiaStorage_1['default']({'sequelize':_0x42b3ac}),'logger':_0x5d9726});_0x163b95['info']('🚜\x20Checking\x20migrations\x20for\x20'+_0x466468['length']+'\x20files...');try{const _0xdf81aa=await _0x2dd48d['pending']();if(_0xdf81aa['length']>0x174b+-0x160b+-0x140){const _0xca04ce=await _0x2dd48d['up']();if(_0xca04ce['length']>-0x23b7+-0x1*-0x1ced+0x6ca){_0x163b95['info']('✨\x20Successfully\x20applied\x20'+_0xca04ce['length']+'\x20migrations.');}}else{_0x163b95['info']('✨\x20Database\x20is\x20already\x20up\x20to\x20date.');}}catch(_0x55310a){_0x163b95['error']('🔥\x20Migration\x20Failed:',_0x55310a);process['exit'](-0x1*0x113f+-0x1e29+-0x2f69*-0x1);}};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
|
|
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):
|
|
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;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KythiaModel.d.ts","sourceRoot":"","sources":["../../src/database/KythiaModel.ts"],"names":[],"mappings":"
|
|
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;IAsDhC,MAAM,CAAC,iBAAiB;IA2BxB,MAAM,CAAC,kBAAkB;IAwBzB,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,GAAG;IA4EzC,MAAM,CAAC,kBAAkB,KAChB,OAAO,MAAM;IAuBtB,MAAM,CAAC,wBAAwB;IAiH/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;;;;;;;;IAYzB,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(_0x2a1000){return _0x2a1000&&_0x2a1000['__esModule']?_0x2a1000:{'default':_0x2a1000};};Object['defineProperty'](exports,'__esModule',{'value':!![]});exports['KythiaModel']=void(0x49*0x1f+0x1513+0x1dea*-0x1);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=0x1c*-0xd5+-0x149c+0x2beb;const REDIS_ERROR_TOLERANCE_COUNT=-0x24*0x70+-0x3*-0xbff+-0x143a;const REDIS_ERROR_TOLERANCE_INTERVAL_MS=(0x10b4+-0x24ad+-0x1*-0x1403)*(0x817+0x990+-0xdbf);function safeStringify(_0x3d6c65,_0x14a088){try{return JSON['stringify'](_0x3d6c65,(_0x12c27a,_0x44493d)=>typeof _0x44493d==='bigint'?_0x44493d['toString']():_0x44493d);}catch(_0xb9944b){(_0x14a088||console)['error']('❌\x20[SAFE\x20STRINGIFY]\x20Failed:\x20'+_0xb9944b['message']);return'{}';}}function safeParse(_0x4a2d81,_0x415a89){try{return JSON['parse'](_0x4a2d81);}catch{(_0x415a89||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']=0x1*0x1195+-0x4*-0x15d+-0x1321;static ['DEFAULT_TTL']=(0x1b6c+-0x1440+-0x6f0)*(0x3f*0x93+0x12f1+-0xafa*0x5)*(0x14c+0x1a2f+0x163*-0x11);static ['NEGATIVE_CACHE_TTL'];static ['DRIFT_CHECK_ENABLED']=!![];static ['DRIFT_CHECK_RATE']=0xd9a*-0x1+-0xe7e*-0x2+-0x166*0xb+0.001;static ['driftStats']={'checked':0x0,'drifted':0x0,'healed':0x0,'errors':0x0};static ['lastRedisOpts']=null;static ['reconnectTimeout']=null;static ['lastAutoReconnectTs']=-0x1a23+-0x1*-0x2030+-0x60d;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']=0x5f3*-0x5+-0x5*0x64d+0x118*0x38;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'](_0x5d50bf,_0x4429c6){const _0x2a998a=super['init'](_0x5d50bf,_0x4429c6);return _0x2a998a;}static['hasOne'](_0x3c7674,_0x42363c){(this['logger']||console)['info']('\x20\x20╰┈➤\x20🔗\x20'+clc['cyan'](this['name']['padEnd'](0x7b0+0x12*0x45+0xf*-0xd5))+'\x20'+clc['yellow']('──[\x201:1\x20]──▶')+'\x20'+(_0x3c7674?.['name']||'Unknown'));return super['hasOne'](_0x3c7674,_0x42363c);}static['belongsTo'](_0xfe9f4f,_0x3d70f8){(this['logger']||console)['info']('\x20\x20╰┈➤\x20🔗\x20'+clc['cyan'](this['name']['padEnd'](0x6ce+0x23cc+0x1*-0x2a8b))+'\x20'+clc['green']('◀──[\x201:1\x20]──')+'\x20'+(_0xfe9f4f?.['name']||'Unknown'));return super['belongsTo'](_0xfe9f4f,_0x3d70f8);}static['hasMany'](_0x57841e,_0x5b0679){(this['logger']||console)['info']('\x20\x20╰┈➤\x20🔗\x20'+clc['cyan'](this['name']['padEnd'](0x29*0x36+0x23*-0x5+-0xb*0xb8))+'\x20'+clc['magenta']('──[\x201:N\x20]──▶')+'\x20'+(_0x57841e?.['name']||'Unknown'));return super['hasMany'](_0x57841e,_0x5b0679);}static['belongsToMany'](_0xd92d20,_0x3a5d7b){(this['logger']||console)['info']('\x20\x20╰┈➤\x20🔗\x20'+clc['cyan'](this['name']['padEnd'](-0x1*0xf5+-0xc1*-0xd+-0x8c9))+'\x20'+clc['red']('◀──[\x20N:M\x20]──▶')+'\x20'+(_0xd92d20?.['name']||'Unknown'));return super['belongsToMany'](_0xd92d20,_0x3a5d7b);}static async['autoBoot'](_0x26c97c){let _0xb1ddf6=this['table'];if(!_0xb1ddf6){const _0x4c4834=this['name'];const _0x21680f=sequelize_1['Utils']['underscoredIf'](_0x4c4834,!![]);_0xb1ddf6=sequelize_1['Utils']['pluralize'](_0x21680f);}let _0x22781c={};let _0x201109={};if(this['structure']){_0x22781c=this['structure']['attributes']||{};_0x201109=this['structure']['options']||{};}const _0x32ae61=_0x26c97c['getQueryInterface']();let _0x431745;const _0x282e9d=this['redis']?'kythia:schema:'+(this['CACHE_VERSION']||'v1')+':'+_0xb1ddf6:null;if(_0x282e9d&&this['isRedisConnected']&&this['redis']){try{const _0x38b6fb=await this['redis']['get'](_0x282e9d);if(_0x38b6fb){_0x431745=JSON['parse'](_0x38b6fb);this['logger']['info']?.('\x20\x20╰┈➤\x20⚡\x20['+this['name']+']\x20Schema\x20loaded\x20from\x20Redis\x20cache');}}catch{}}if(!_0x431745){try{_0x431745=await _0x32ae61['describeTable'](_0xb1ddf6);if(_0x282e9d&&this['isRedisConnected']&&this['redis']){try{await this['redis']['set'](_0x282e9d,JSON['stringify'](_0x431745),'EX',-0x6f*-0x2f+0xc5*-0x5+-0x278);}catch{}}}catch(_0x45b236){console['warn']('⚠️\x20[KythiaModel]\x20Table\x20\x27'+_0xb1ddf6+'\x27\x20not\x20found\x20for\x20model\x20\x27'+this['name']+'\x27.\x20Skipping\x20auto-boot.\x20err\x20'+_0x45b236);return;}}const _0x45baf8={};for(const [_0x536247,_0x3dfb36]of Object['entries'](_0x431745)){_0x45baf8[_0x536247]={'type':this['_mapDbTypeToSequelize'](_0x3dfb36['type']),'allowNull':_0x3dfb36['allowNull'],'defaultValue':_0x3dfb36['defaultValue'],'primaryKey':_0x3dfb36['primaryKey'],'autoIncrement':_0x3dfb36['autoIncrement']};}const _0x7a2929={..._0x45baf8,..._0x22781c};super['init'](_0x7a2929,{'sequelize':_0x26c97c,'modelName':this['name'],'tableName':_0xb1ddf6,'timestamps':_0x201109['timestamps']!==undefined?_0x201109['timestamps']:!!_0x7a2929['createdAt'],'paranoid':_0x201109['paranoid']!==undefined?_0x201109['paranoid']:!!_0x7a2929['deletedAt'],..._0x201109});this['_setupLaravelHooks']();if(this['localCache']===KythiaModel['localCache']&&this!==KythiaModel){this['localCache']=new lru_cache_1['LRUCache']({'max':this['MAX_LOCAL_CACHE_SIZE']||0x1*-0x215b+-0x26f7+0x4c3a});}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'](_0x432d4e){const _0x38aff9=_0x432d4e['toUpperCase']();if(_0x38aff9['startsWith']('BOOLEAN')||_0x38aff9['startsWith']('TINYINT(1)'))return sequelize_1['DataTypes']['BOOLEAN'];if(_0x38aff9['startsWith']('BIGINT'))return sequelize_1['DataTypes']['BIGINT'];if(_0x38aff9['startsWith']('INT')||_0x38aff9['startsWith']('TINYINT'))return sequelize_1['DataTypes']['INTEGER'];if(_0x38aff9['startsWith']('VARCHAR')||_0x38aff9['startsWith']('TEXT')||_0x38aff9['startsWith']('CHAR'))return sequelize_1['DataTypes']['STRING'];if(_0x38aff9['startsWith']('DATETIME')||_0x38aff9['startsWith']('TIMESTAMP'))return sequelize_1['DataTypes']['DATE'];if(_0x38aff9['startsWith']('JSON'))return sequelize_1['DataTypes']['JSON'];if(_0x38aff9['startsWith']('FLOAT')||_0x38aff9['startsWith']('DOUBLE')||_0x38aff9['startsWith']('DECIMAL'))return sequelize_1['DataTypes']['FLOAT'];if(_0x38aff9['startsWith']('ENUM'))return sequelize_1['DataTypes']['STRING'];return sequelize_1['DataTypes']['STRING'];}static['_setupLaravelHooks'](){this['addHook']('beforeValidate',_0x1ad0c9=>{const _0x26f15a=_0x1ad0c9['constructor'];const _0x4d7281=_0x26f15a['primaryKeyAttribute']||'id';if(_0x26f15a['fillable']&&Array['isArray'](_0x26f15a['fillable'])){const _0x585bb5=_0x26f15a['fillable'];Object['keys'](_0x1ad0c9['dataValues'])['forEach'](_0x28d1ee=>{if(_0x28d1ee===_0x4d7281)return;if(!_0x585bb5['includes'](_0x28d1ee)){delete _0x1ad0c9['dataValues'][_0x28d1ee];if(_0x1ad0c9['changed']())_0x1ad0c9['changed'](_0x28d1ee,![]);}});}else if(_0x26f15a['guarded']&&Array['isArray'](_0x26f15a['guarded'])){const _0x34ef72=_0x26f15a['guarded'];if(_0x34ef72['includes']('*')){_0x1ad0c9['dataValues']={};return;}Object['keys'](_0x1ad0c9['dataValues'])['forEach'](_0x57099a=>{if(_0x57099a===_0x4d7281)return;if(_0x34ef72['includes'](_0x57099a)){delete _0x1ad0c9['dataValues'][_0x57099a];if(_0x1ad0c9['changed']())_0x1ad0c9['changed'](_0x57099a,![]);}});}});}static['setDependencies']({logger:_0x5f00b1,config:_0x4f0446,redis:_0xb25370,redisOptions:_0x3b1090}){if(!_0x4f0446){throw new Error('KythiaModel.setDependencies\x20requires\x20config!');}this['logger']=_0x5f00b1||logger_1['default'];this['config']=_0x4f0446;this['CACHE_VERSION']=_0x4f0446['db']?.['redisCacheVersion']||'1.0.0';const _0x209df4=_0x4f0446?.['db']?.['redis'];const _0x121247=_0x4f0446?.['db']?.['useRedis']!==![];this['useRedis']=_0x121247;this['isShardMode']=typeof _0x209df4==='object'&&_0x209df4!==null&&_0x209df4['shard']||![];if(!_0x121247){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'](_0x3b1090)){this['_redisFallbackURLs']=_0x3b1090['filter'](_0x11d2a8=>_0x11d2a8&&(typeof _0x11d2a8!=='string'||_0x11d2a8['trim']()['length']>0x1*-0x193a+-0x5*-0x27e+0xcc4));}else if(typeof _0x3b1090==='string'){if(_0x3b1090['trim']()['length']>-0xc93*0x1+0x1*0x21d6+-0x1543){this['_redisFallbackURLs']=_0x3b1090['split'](',')['map'](_0x69e44a=>_0x69e44a['trim']())['filter'](_0x497445=>_0x497445['length']>-0x3*0x2bb+-0x2598+0x2dc9);}}else if(_0x3b1090&&typeof _0x3b1090==='object'&&Array['isArray'](_0x3b1090['urls'])){this['_redisFallbackURLs']=_0x3b1090['urls']['slice']();}else if(_0x3b1090&&typeof _0x3b1090==='object'&&Object['keys'](_0x3b1090)['length']>0x29*0xda+0x24b3+-0x479d){this['_redisFallbackURLs']=[_0x3b1090];}this['_redisCurrentIndex']=0x2*0x2d7+-0x24cc+0x1f1e;if(_0xb25370){this['redis']=_0xb25370;this['isRedisConnected']=_0xb25370['status']==='ready';}else if(this['_redisFallbackURLs']['length']>0x340+-0xb52*-0x2+0x1*-0x19e4){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'](_0x2b16c5){const _0x359f4a=Date['now']();this['redisErrorTimestamps']=(this['redisErrorTimestamps']||[])['filter'](_0x4ff6df=>_0x359f4a-_0x4ff6df<REDIS_ERROR_TOLERANCE_INTERVAL_MS);this['redisErrorTimestamps']['push'](_0x359f4a);if(this['redisErrorTimestamps']['length']>=REDIS_ERROR_TOLERANCE_COUNT){if(this['isRedisConnected']){const _0x1b3cd8=this['_tryRedisFailover']();if(_0x1b3cd8){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/(0x1*0x199d+0x15cc+-0x2b81)+'s.\x20SHARD\x20MODE:\x20Disabling\x20cache\x20(NO\x20fallback),\x20all\x20queries\x20go\x20to\x20DB.\x20(Last\x20error:\x20'+_0x2b16c5?.['message']+')');this['isRedisConnected']=![];this['_scheduleReconnect']();}else{this['logger']['error']('❌\x20[REDIS]\x20'+this['redisErrorTimestamps']['length']+'\x20consecutive\x20errors\x20in\x20'+REDIS_ERROR_TOLERANCE_INTERVAL_MS/(0x14f5+-0xd*-0x277+-0x2*0x188c)+'s.\x20All\x20Redis\x20exhausted,\x20fallback\x20to\x20In-Memory\x20Cache!\x20(Last\x20error:\x20'+_0x2b16c5?.['message']+')');this['isRedisConnected']=![];this['_scheduleReconnect']();}}this['redisErrorTimestamps']=[];}else{this['logger']['warn']('🟠\x20[REDIS]\x20Error\x20#'+this['redisErrorTimestamps']['length']+'/'+REDIS_ERROR_TOLERANCE_COUNT+'\x20tolerated.\x20('+_0x2b16c5?.['message']+')');}}static['_tryRedisFailover'](){if(!Array['isArray'](this['_redisFallbackURLs'])||this['_redisFallbackURLs']['length']<0x945+-0x1142+-0x7ff*-0x1){return![];}const _0x17b21e=this['_redisCurrentIndex'];if(this['_redisCurrentIndex']+(-0xdf6+0x17f3+-0x9fc)<this['_redisFallbackURLs']['length']){this['_redisCurrentIndex']++;this['logger']['warn']('[REDIS][FAILOVER]\x20Trying\x20to\x20switch\x20Redis\x20connection\x20from\x20url\x20index\x20'+_0x17b21e+'\x20to\x20'+this['_redisCurrentIndex']);this['_justFailedOver']=!![];this['_closeCurrentRedis']();this['initializeRedis']();return!![];}return![];}static['_closeCurrentRedis'](){if(this['redis']){this['redis']['removeAllListeners']();if(typeof this['redis']['quit']==='function'){try{this['redis']['quit']();}catch(_0x36a6d9){this['logger']['warn']('[REDIS]\x20Error\x20while\x20closing\x20connection:',_0x36a6d9);}}}this['redis']=undefined;this['isRedisConnected']=![];}static['initializeRedis'](_0xae705d){if(_0xae705d){if(Array['isArray'](_0xae705d)){this['_redisFallbackURLs']=_0xae705d['slice']();this['_redisCurrentIndex']=-0x1b*-0x19+0x1*0x515+-0x7b8;}else if(_0xae705d&&typeof _0xae705d==='object'&&Array['isArray'](_0xae705d['urls'])){this['_redisFallbackURLs']=_0xae705d['urls']['slice']();this['_redisCurrentIndex']=0xf0d*0x2+0xb35*-0x1+0x2b3*-0x7;}else{this['_redisFallbackURLs']=[_0xae705d];this['_redisCurrentIndex']=-0x11c2+-0x52+0x1214;}}if(!Array['isArray'](this['_redisFallbackURLs'])||this['_redisFallbackURLs']['length']===-0x10ba+-0x2*0x136e+0x2*0x1bcb){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 _0x47c940=this['_redisFallbackURLs'][this['_redisCurrentIndex']];if(_0x47c940&&typeof _0x47c940==='object'&&_0x47c940['shard']){this['isShardMode']=!![];}let _0x56005c;if(typeof _0x47c940==='string'){_0x56005c={'url':_0x47c940,'retryStrategy':this['_makeRetryStrategy']()};}else if(_0x47c940&&typeof _0x47c940==='object'){_0x56005c={'maxRetriesPerRequest':0x2,'enableReadyCheck':!![],'retryStrategy':this['_makeRetryStrategy'](),..._0x47c940};}else{this['logger']['error']('❌\x20[REDIS]\x20Invalid\x20redis\x20config\x20detected\x20in\x20list');this['isRedisConnected']=![];return null;}this['redis']=new ioredis_1['default'](_0x56005c['url']||_0x56005c);this['_setupRedisEventHandlers']();return this['redis'];}static['_makeRetryStrategy'](){return _0x149d18=>{if(_0x149d18>0x78d+0x1a8*0x9+-0x1670){this['logger']['error']('❌\x20[REDIS]\x20Could\x20not\x20connect\x20after\x20'+(_0x149d18-(-0x1bcf+-0x23*0xf7+0x3d95))+'\x20retries\x20for\x20Redis\x20#'+(this['_redisCurrentIndex']+(0x1aad+0x24e+-0x1cfa))+'.');return null;}const _0x160b0d=Math['min'](_0x149d18*(-0xca3+-0x1359+0x1*0x21f0),-0x26c2+-0xe5+-0x1d*-0x1a3);this['logger']['warn']('🟠\x20[REDIS]\x20Connection\x20failed\x20for\x20Redis\x20#'+(this['_redisCurrentIndex']+(-0x6c*0x47+-0x1d4d+0x3b42))+'.\x20Retrying\x20in\x20'+_0x160b0d+'ms\x20(Attempt\x20'+_0x149d18+')...');return _0x160b0d;};}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,\x20clearing\x20stale\x20kythia:*\x20keys...');try{const _0x3a6a2b='kythia:';let _0x1f5ada='0';let _0x48bfc7=-0x1498+0x667*-0x5+0x349b;const _0x27fe10=this['redis'];if(!_0x27fe10)return;do{const [_0x4b6133,_0x5ac57a]=await _0x27fe10['scan'](_0x1f5ada,'MATCH',_0x3a6a2b+'*','COUNT',0x1f*-0x5e+0x21d*-0x3+0x1281);_0x1f5ada=_0x4b6133;if(_0x5ac57a['length']>0x59d*-0x5+0x1f84+-0x373){await _0x27fe10['unlink'](..._0x5ac57a);_0x48bfc7+=_0x5ac57a['length'];}}while(_0x1f5ada!=='0');this['logger']['info']('[REDIS][FAILOVER]\x20Cleared\x20'+_0x48bfc7+'\x20stale\x20kythia:*\x20keys\x20safely.');}catch(_0x678a1e){this['logger']['error']('[REDIS][FAILOVER]\x20FAILED\x20TO\x20CLEAR\x20STALE\x20CACHE:',_0x678a1e);}this['_justFailedOver']=![];}});this['redis']['on']('error',_0x2ad559=>{if(_0x2ad559&&(_0x2ad559['code']==='ECONNREFUSED'||_0x2ad559['message'])){this['logger']['warn']('🟠\x20[REDIS]\x20Connection\x20error:\x20'+_0x2ad559['message']);}});this['redis']['on']('close',()=>{if(this['isShuttingDown']){this['isRedisConnected']=![];return;}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']+(-0xb22+-0x31*0x2a+-0x132d*-0x1))+'\x20closed.\x20Attempting\x20immediate\x20failover...');const _0x2f9884=this['_tryRedisFailover']();if(!_0x2f9884){this['logger']['warn']('[REDIS]\x20Failover\x20exhausted.\x20Scheduling\x20full\x20reconnect...');this['_scheduleReconnect']();}});}static['_scheduleReconnect'](){if(this['reconnectTimeout'])return;const _0x2d91d3=Date['now']();const _0x236125=_0x2d91d3-this['lastAutoReconnectTs'];if(_0x236125<RECONNECT_DELAY_MINUTES*(-0x1e0b+0x32b+-0x56c*-0x5)*(0x186e+-0x32f+-0x1157))return;this['lastAutoReconnectTs']=_0x2d91d3;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']=-0x11f6+0xe39+0x3bd;this['_redisFailedIndexes']['clear']();this['_closeCurrentRedis']();this['initializeRedis']();},RECONNECT_DELAY_MINUTES*(0x7*0x4cf+-0x307+0x1*-0x1e66)*(0x2155*0x1+-0x2*0x10ae+0x3ef));}static['getCacheKey'](_0x59a077){let _0x50b884=_0x59a077;if(_0x50b884&&typeof _0x50b884==='object'&&!_0x50b884['where']){if(_0x50b884['include']){_0x50b884={'where':{},..._0x50b884};}else{_0x50b884={'where':_0x50b884};}}const _0x3238a4={'replacer':(_0x273d94,_0x46fba3)=>typeof _0x46fba3==='bigint'?_0x46fba3['toString']():_0x46fba3};const _0x19e0ab=typeof _0x59a077==='string'?_0x59a077:jsonStringify(this['normalizeQueryOptions'](_0x50b884),_0x3238a4);return this['CACHE_VERSION']+':'+this['name']+':'+_0x19e0ab;}static['normalizeQueryOptions'](_0x52fe81){if(!_0x52fe81||typeof _0x52fe81!=='object')return _0x52fe81;if(Array['isArray'](_0x52fe81))return _0x52fe81['map'](_0x58a6cf=>this['normalizeQueryOptions'](_0x58a6cf));const _0x2feb03={};Object['keys'](_0x52fe81)['sort']()['forEach'](_0x4a82b8=>{_0x2feb03[_0x4a82b8]=this['normalizeQueryOptions'](_0x52fe81[_0x4a82b8]);});Object['getOwnPropertySymbols'](_0x52fe81)['forEach'](_0x436e04=>{const _0x391a4d='$'+_0x436e04['toString']()['slice'](-0x1*0x1b+-0x9*-0x355+-0x1*0x1ddb,-(0x1*-0x329+0x1*0x5d2+0x2*-0x154));_0x2feb03[_0x391a4d]=this['normalizeQueryOptions'](_0x52fe81[_0x436e04]);});return _0x2feb03;}static['_generateSmartTags'](_0x5ecdd9){if(!_0x5ecdd9)return[''+this['name']];const _0xe60fe0=[''+this['name']];const _0x500c0=this['primaryKeyAttribute'];if(_0x5ecdd9[_0x500c0]){_0xe60fe0['push'](this['name']+':'+_0x500c0+':'+_0x5ecdd9[_0x500c0]);}const _0x256d9e=this['cacheKeys']||this['CACHE_KEYS']||[];if(Array['isArray'](_0x256d9e)){for(const _0x5e7d91 of _0x256d9e){const _0x32509c=Array['isArray'](_0x5e7d91)?_0x5e7d91:[_0x5e7d91];const _0xa6db59=_0x32509c['every'](_0x4e48b7=>_0x5ecdd9[_0x4e48b7]!==undefined&&_0x5ecdd9[_0x4e48b7]!==null);if(_0xa6db59){const _0x4937a2=_0x32509c['map'](_0x4c81ea=>_0x4c81ea+':'+_0x5ecdd9[_0x4c81ea])['join'](':');_0xe60fe0['push'](this['name']+':'+_0x4937a2);}}}return _0xe60fe0;}static async['setCacheEntry'](_0x42bbb0,_0xe982d5,_0x561e01,_0xb4462f=[]){const _0x44a251=typeof _0x42bbb0==='string'?_0x42bbb0:this['getCacheKey'](_0x42bbb0);const _0x53ad3f=_0x561e01||this['CACHE_TTL']||this['DEFAULT_TTL'];if(this['isRedisConnected']){await this['_redisSetCacheEntry'](_0x44a251,_0xe982d5,_0x53ad3f,_0xb4462f);}else if(!this['isShardMode']){this['_mapSetCacheEntry'](_0x44a251,_0xe982d5,_0x53ad3f);}}static async['getCachedEntry'](_0x1e02bc,_0x528ca1){const _0x7b268c=typeof _0x1e02bc==='string'?_0x1e02bc:this['getCacheKey'](_0x1e02bc);let _0xe69aeb={'hit':![],'data':undefined};if(this['isRedisConnected']){_0xe69aeb=await this['_redisGetCachedEntry'](_0x7b268c,_0x528ca1);}else if(!this['isShardMode']){_0xe69aeb=await this['_mapGetCachedEntry'](_0x7b268c,_0x528ca1);}if(this['metrics']){this['metrics']['cacheOpsTotal']['inc']({'type':_0xe69aeb['hit']?'hit':'miss','model':this['name']});}return _0xe69aeb;}static async['clearCache'](_0x5d56e3){const _0x4f6975=typeof _0x5d56e3==='string'?_0x5d56e3:this['getCacheKey'](_0x5d56e3);if(this['isRedisConnected']){await this['_redisClearCache'](_0x4f6975);}else if(!this['isShardMode']){this['_mapClearCache'](_0x4f6975);}}static async['_redisSetCacheEntry'](_0x3caadd,_0x2a7cf6,_0x46adba,_0x4fa277=[]){if(!this['redis'])return;try{let _0x38c7e4=_0x2a7cf6;if(_0x2a7cf6&&typeof _0x2a7cf6['toJSON']==='function'){_0x38c7e4=_0x2a7cf6['toJSON']();}else if(Array['isArray'](_0x2a7cf6)){_0x38c7e4=_0x2a7cf6['map'](_0x4096c1=>_0x4096c1&&typeof _0x4096c1['toJSON']==='function'?_0x4096c1['toJSON']():_0x4096c1);}const _0x43068a=_0x38c7e4===null?NEGATIVE_CACHE_PLACEHOLDER:safeStringify(_0x38c7e4,this['logger']);const _0x45ad59=this['redis']['multi']();_0x45ad59['set'](_0x3caadd,_0x43068a,'PX',_0x46adba);const _0x3673ce=Math['ceil'](_0x46adba/(-0x1315+0x20d7*-0x1+0x37d4)*(-0x21a+0x1*0xf79+0x137*-0xb));for(const _0x27dfae of _0x4fa277){_0x45ad59['sadd'](_0x27dfae,_0x3caadd);_0x45ad59['expire'](_0x27dfae,_0x3673ce);}await _0x45ad59['exec']();this['cacheStats']['sets']++;}catch(_0x372f3f){this['_trackRedisError'](_0x372f3f);}}static async['_redisGetCachedEntry'](_0x3ee918,_0x50d30e){if(!this['redis'])return{'hit':![],'data':undefined};try{const _0x1d7ec3=await this['redis']['get'](_0x3ee918);if(_0x1d7ec3===null||_0x1d7ec3===undefined)return{'hit':![],'data':undefined};this['cacheStats']['redisHits']++;if(_0x1d7ec3===NEGATIVE_CACHE_PLACEHOLDER){return{'hit':!![],'data':null};}const _0x6c6f32=safeParse(_0x1d7ec3,this['logger']);if(_0x6c6f32===null){return{'hit':![],'data':undefined};}const _0x35f751=_0x50d30e?Array['isArray'](_0x50d30e)?_0x50d30e:[_0x50d30e]:undefined;const _0x50ce89=_0x36f852=>{const _0x2feab4=this['build'](_0x36f852,{'isNewRecord':![],'include':_0x35f751});return _0x2feab4;};if(Array['isArray'](_0x6c6f32)){const _0x1abb1b=_0x6c6f32['map'](_0x5de7ec=>_0x50ce89(_0x5de7ec));return{'hit':!![],'data':_0x1abb1b};}else{const _0x334b3b=_0x50ce89(_0x6c6f32);return{'hit':!![],'data':_0x334b3b};}}catch(_0x3b5d5d){this['_trackRedisError'](_0x3b5d5d);return{'hit':![],'data':undefined};}}static async['_redisClearCache'](_0x48328f){if(!this['redis'])return;try{await this['redis']['del'](_0x48328f);this['cacheStats']['clears']++;}catch(_0xbe9709){this['_trackRedisError'](_0xbe9709);}}static async['invalidateByTags'](_0x859371){if(!this['isRedisConnected']||!Array['isArray'](_0x859371)||_0x859371['length']===-0x1*0x215b+-0x126c+0x33c7||!this['redis'])return;try{const _0x1b8011=this['redis']['pipeline']();for(const _0x4a6c09 of _0x859371){_0x1b8011['smembers'](_0x4a6c09);}const _0x18b37f=await _0x1b8011['exec']();const _0x4ef611=new Set();if(_0x18b37f){for(const [_0xb6b099,_0x193373]of _0x18b37f){if(!_0xb6b099&&Array['isArray'](_0x193373)){for(const _0x4f78d1 of _0x193373)_0x4ef611['add'](_0x4f78d1);}}}const _0x470f75=Array['from'](_0x4ef611);if(_0x470f75['length']>0x1*0x26f5+-0x111*0x4+-0x22b1){this['logger']['info']('🎯\x20[SNIPER]\x20Invalidating\x20'+_0x470f75['length']+'\x20keys\x20for\x20tags:\x20'+_0x859371['join'](',\x20'));const _0x5aea31=-0xf88+0x20d4+0x1*-0xd64;const _0x3099ab=this['redis']['pipeline']();for(let _0x2fef04=-0x72f*0x3+-0x16bc+-0x2c49*-0x1;_0x2fef04<_0x470f75['length'];_0x2fef04+=_0x5aea31){const _0x30dc03=_0x470f75['slice'](_0x2fef04,_0x2fef04+_0x5aea31);_0x3099ab['unlink'](..._0x30dc03);}_0x3099ab['unlink'](..._0x859371);await _0x3099ab['exec']();}else{await this['redis']['unlink'](..._0x859371);}}catch(_0x487be7){this['_trackRedisError'](_0x487be7);}}static['_mapSetCacheEntry'](_0x49d786,_0x9c60ab,_0x559464){if(this['isShardMode'])return;if(_0x9c60ab===null){this['localCache']['set'](_0x49d786,{'data':NEGATIVE_CACHE_PLACEHOLDER,'expires':Date['now']()+_0x559464});}else{let _0x224a83=_0x9c60ab;if(_0x9c60ab&&typeof _0x9c60ab['toJSON']==='function'){_0x224a83=_0x9c60ab['toJSON']();}else if(Array['isArray'](_0x9c60ab)){_0x224a83=_0x9c60ab['map'](_0x565e1f=>_0x565e1f&&typeof _0x565e1f['toJSON']==='function'?_0x565e1f['toJSON']():_0x565e1f);}const _0x224cb8=_0x224a83===null?NEGATIVE_CACHE_PLACEHOLDER:safeStringify(_0x224a83,this['logger']);this['localCache']['set'](_0x49d786,{'data':_0x224cb8,'expires':Date['now']()+_0x559464});}this['cacheStats']['sets']++;}static['_mapGetCachedEntry'](_0x1777e7,_0x214371){if(this['isShardMode'])return{'hit':![],'data':undefined};const _0x29008b=this['localCache']['get'](_0x1777e7);if(_0x29008b&&_0x29008b['expires']>Date['now']()){if(_0x29008b['data']===NEGATIVE_CACHE_PLACEHOLDER){this['cacheStats']['mapHits']++;return{'hit':!![],'data':null};}this['cacheStats']['mapHits']++;const _0x58e3ee=_0x29008b['data'];let _0x5623a6;if(typeof _0x58e3ee==='string'){_0x5623a6=safeParse(_0x58e3ee,this['logger']);}else{_0x5623a6=_0x58e3ee;}if(typeof _0x5623a6!=='object'||_0x5623a6===null){return{'hit':!![],'data':_0x5623a6};}const _0x2686b4=_0x214371?Array['isArray'](_0x214371)?_0x214371:[_0x214371]:undefined;if(Array['isArray'](_0x5623a6)){const _0x3b73cf=this['bulkBuild'](_0x5623a6,{'isNewRecord':![],'include':_0x2686b4});return{'hit':!![],'data':_0x3b73cf};}else{const _0x3943a7=this['build'](_0x5623a6,{'isNewRecord':![],'include':_0x2686b4});return{'hit':!![],'data':_0x3943a7};}}if(_0x29008b)this['localCache']['delete'](_0x1777e7);return{'hit':![],'data':undefined};}static['_mapClearCache'](_0xd7ed73){if(this['isShardMode'])return;this['localCache']['delete'](_0xd7ed73);this['cacheStats']['clears']++;}static['_mapClearAllModelCache'](){if(this['isShardMode'])return;const _0x268e2b=this['CACHE_VERSION']+':'+this['name']+':';let _0x425adf=0x1cd*-0x11+0x198f+0x50e;for(const _0x259285 of this['localCache']['keys']()){if(_0x259285['startsWith'](_0x268e2b)){this['localCache']['delete'](_0x259285);_0x425adf++;}}if(_0x425adf>-0x3*0x911+-0x7b3*0x3+0x324c){this['logger']['info']('♻️\x20[MAP\x20CACHE]\x20Cleared\x20'+_0x425adf+'\x20in-memory\x20entries\x20for\x20'+this['name']+'\x20(Redis\x20fallback).');}}static async['_performDriftCheck'](_0x4b9359,_0xd52724,_0x37cee1,_0x592775){this['driftStats']['checked']++;try{const _0x4b1608=await this['findOne'](_0x37cee1);const _0x3e5cea=_0xd52724?.['toJSON']?.()??_0xd52724??null;const _0x1eac0b=_0x4b1608?.['toJSON']?.()??_0x4b1608??null;const _0x5bf137=safeStringify(_0x3e5cea,this['logger']);const _0x57a576=safeStringify(_0x1eac0b,this['logger']);if(_0x5bf137===_0x57a576)return;const _0x55412b={};const _0x4b7430=new Set([...Object['keys'](_0x3e5cea??{}),...Object['keys'](_0x1eac0b??{})]);const _0x2ae00b=['createdAt','updatedAt','deletedAt'];for(const _0x40280c of _0x4b7430){if(_0x2ae00b['includes'](_0x40280c))continue;if(JSON['stringify'](_0x3e5cea?.[_0x40280c])!==JSON['stringify'](_0x1eac0b?.[_0x40280c])){_0x55412b[_0x40280c]={'cached':_0x3e5cea?.[_0x40280c],'fresh':_0x1eac0b?.[_0x40280c]};}}if(Object['keys'](_0x55412b)['length']===-0x1e61*-0x1+0xb8e+-0x29ef)return;this['driftStats']['drifted']++;const _0x4e8719=Object['keys'](_0x55412b)['join'](',\x20');this['logger']['warn']('🔬\x20[DRIFT\x20DETECTED]\x20'+this['name']+'\x20|\x20key:\x20'+_0x4b9359+'\x20|\x20'+(Object['keys'](_0x55412b)['length']+'\x20drifted\x20field(s):\x20['+_0x4e8719+']\x20→\x20self-healing...'));const _0x49157b=this['_generateSmartTags'](_0x4b1608);const _0x5eaaa8=_0x592775||this['CACHE_TTL']||this['DEFAULT_TTL'];await this['setCacheEntry'](_0x4b9359,_0x4b1608,_0x5eaaa8,_0x49157b);this['driftStats']['healed']++;this['logger']['info']('🩹\x20[SELF-HEALED]\x20'+this['name']+'\x20|\x20key:\x20'+_0x4b9359+'\x20|\x20cache\x20updated\x20with\x20fresh\x20DB\x20data.');}catch(_0x3ca39b){this['driftStats']['errors']++;this['logger']['warn']('🔬\x20[DRIFT\x20CHECK\x20ERROR]\x20'+this['name']+'\x20|\x20key:\x20'+_0x4b9359+'\x20|\x20'+_0x3ca39b?.['message']);}}static['getCacheDriftStats'](){return{...this['driftStats'],'rate':this['DRIFT_CHECK_RATE'],'enabled':this['DRIFT_CHECK_ENABLED']};}static['_normalizeFindOptions'](_0x2021cd){if(!_0x2021cd||typeof _0x2021cd!=='object'||Object['keys'](_0x2021cd)['length']===-0x23ca+-0x16f6+-0xbc0*-0x5)return{'where':{}};const _0x26d778=['cacheTags','noCache','ttl','customCacheKey'];if(_0x2021cd['where']){const _0x18b0da={..._0x2021cd};for(const _0x264dce of _0x26d778){delete _0x18b0da[_0x264dce];}return _0x18b0da;}const _0x534982=['order','limit','offset','attributes','include','group','having','paranoid','lock','skipLocked','subQuery','raw','nest','plain','transaction','logging','benchmark','replacements','bind','scope','col'];const _0x968b6d={};const _0x57bccb={};for(const _0x467d8a in _0x2021cd){if(_0x26d778['includes'](_0x467d8a)){continue;}if(_0x534982['includes'](_0x467d8a))_0x57bccb[_0x467d8a]=_0x2021cd[_0x467d8a];else _0x968b6d[_0x467d8a]=_0x2021cd[_0x467d8a];}return{'where':_0x968b6d,..._0x57bccb};}static async['getCache'](_0x156fa4,_0x421c59={}){const {noCache:_0x10498c,customCacheKey:_0x2cdfa8,ttl:_0x3261f7,..._0x2cb7e6}=_0x421c59;if(Array['isArray'](_0x156fa4)){return this['bulkGetCache'](_0x156fa4,_0x421c59);}const _0x167be4=this['_normalizeFindOptions'](_0x156fa4);const _0x454f4c={..._0x167be4,..._0x2cb7e6,'where':{..._0x167be4['where']||{},..._0x2cb7e6['where']||{}}};const _0x336d37=_0x454f4c['where']&&Object['keys'](_0x454f4c['where'])['length']>0x1*-0x25f7+-0x1ee7+0x226f*0x2;if(!_0x336d37){this['logger']['warn']('⚠️\x20[getCache]\x20Called\x20on\x20'+this['name']+'\x20without\x20where\x20clause\x20—\x20returning\x20null.');return null;}if(_0x10498c){this['cacheStats']['misses']++;return this['findOne'](_0x454f4c);}const _0x36d46c=_0x2cdfa8||this['getCacheKey'](_0x454f4c);const _0x50fd1b=await this['getCachedEntry'](_0x36d46c,_0x454f4c['include']);if(_0x50fd1b['hit']){if(this['DRIFT_CHECK_ENABLED']&&!this['isShardMode']&&_0x50fd1b['data']!==null&&Math['random']()<this['DRIFT_CHECK_RATE']){void this['_performDriftCheck'](_0x36d46c,_0x50fd1b['data'],_0x454f4c,_0x3261f7);}return _0x50fd1b['data'];}this['cacheStats']['misses']++;if(this['pendingQueries']['has'](_0x36d46c))return this['pendingQueries']['get'](_0x36d46c);const _0x34a0d2=this['findOne'](_0x454f4c)['then'](async _0x49d4b8=>{if(this['isRedisConnected']||!this['isShardMode']){const _0x320134=this['_generateSmartTags'](_0x49d4b8);const _0x10585d=_0x49d4b8?_0x3261f7:this['NEGATIVE_CACHE_TTL']||0xa79f+0x20c5*-0x1+0x22*-0x85;await this['setCacheEntry'](_0x36d46c,_0x49d4b8,_0x10585d,_0x320134);}return _0x49d4b8;})['finally'](()=>this['pendingQueries']['delete'](_0x36d46c));this['pendingQueries']['set'](_0x36d46c,_0x34a0d2);return _0x34a0d2;}static async['getAllCache'](_0x395e72={}){const {cacheTags:_0x5793cc,noCache:_0x4ad5b9,customCacheKey:_0x28fc00,ttl:_0x331aba,..._0xef114c}=_0x395e72||{};const _0x41f79a=this['_normalizeFindOptions'](_0xef114c);if(_0x4ad5b9){this['cacheStats']['misses']++;return this['findAll'](_0x41f79a);}const _0x43757f=_0x28fc00||this['getCacheKey'](_0x41f79a);const _0x1227a1=await this['getCachedEntry'](_0x43757f,_0x41f79a['include']);if(_0x1227a1['hit'])return _0x1227a1['data'];this['cacheStats']['misses']++;if(this['pendingQueries']['has'](_0x43757f))return this['pendingQueries']['get'](_0x43757f);const _0x4eac70=this['findAll'](_0x41f79a)['then'](async _0x15e7b5=>{if(this['isRedisConnected']||!this['isShardMode']){const _0x3faf91=[''+this['name']];if(Array['isArray'](_0x5793cc))_0x3faf91['push'](..._0x5793cc);await this['setCacheEntry'](_0x43757f,_0x15e7b5,_0x331aba,_0x3faf91);}return _0x15e7b5;})['finally'](()=>this['pendingQueries']['delete'](_0x43757f));this['pendingQueries']['set'](_0x43757f,_0x4eac70);return _0x4eac70;}static async['scheduleAdd'](_0x41886b,_0x520c06,_0x4eac49){if(!this['isRedisConnected']||!this['redis'])return;const _0x20458c=this['name']+':'+_0x41886b;try{await this['redis']['zadd'](_0x20458c,_0x520c06,_0x4eac49);}catch(_0x4454fa){this['_trackRedisError'](_0x4454fa);}}static async['scheduleRemove'](_0x13aa17,_0x2b8161){if(!this['isRedisConnected']||!this['redis'])return;const _0x319afa=this['name']+':'+_0x13aa17;try{await this['redis']['zrem'](_0x319afa,_0x2b8161);}catch(_0x3e1e2a){this['_trackRedisError'](_0x3e1e2a);}}static async['scheduleGetExpired'](_0x4d64ed,_0x4ca94e=Date['now']()){if(!this['isRedisConnected']||!this['redis'])return[];const _0x43e5b7=this['name']+':'+_0x4d64ed;try{return await this['redis']['zrangebyscore'](_0x43e5b7,-0x1*-0x2335+0x1cf*0x6+-0x38b*0xd,_0x4ca94e);}catch(_0x5769f2){this['_trackRedisError'](_0x5769f2);return[];}}static async['scheduleClear'](_0x3fe191){if(!this['isRedisConnected']||!this['redis'])return;const _0x4d8392=this['name']+':'+_0x3fe191;try{await this['redis']['del'](_0x4d8392);}catch(_0x301dc8){this['_trackRedisError'](_0x301dc8);}}static async['findOrCreateWithCache'](_0x16c69a){if(!_0x16c69a?.['where']){throw new Error('findOrCreateWithCache\x20requires\x20a\x20\x27where\x27\x20option.');}const {where:_0x2bf010,defaults:_0x254cd5,noCache:_0x5cf60a,..._0x1cfc6d}=_0x16c69a;if(_0x5cf60a){return this['findOrCreate'](_0x16c69a);}const _0x2341d6=this['_normalizeFindOptions'](_0x2bf010)['where'];const _0x499c73=this['getCacheKey']({'where':_0x2341d6,..._0x1cfc6d});const _0x3950ed=await this['getCachedEntry'](_0x499c73,_0x1cfc6d['include']);if(_0x3950ed['hit']&&_0x3950ed['data']){const _0x55f7ba=_0x3950ed['data'];let _0x489774=![];if(_0x254cd5&&typeof _0x254cd5==='object'){for(const _0x3bc1e6 in _0x254cd5){if(_0x55f7ba[_0x3bc1e6]===undefined||String(_0x55f7ba[_0x3bc1e6])!==String(_0x254cd5[_0x3bc1e6])){_0x55f7ba['set'](_0x3bc1e6,_0x254cd5[_0x3bc1e6]);_0x489774=!![];}}}if(_0x489774){try{await _0x55f7ba['save']();}catch(_0x19f9ed){await this['clearCache'](_0x499c73);throw _0x19f9ed;}}return[_0x55f7ba,![]];}this['cacheStats']['misses']++;if(this['pendingQueries']['has'](_0x499c73)){return this['pendingQueries']['get'](_0x499c73);}const _0x5b7fda=this['findOrCreate']({'where':_0x2bf010,'defaults':{..._0x2bf010,..._0x254cd5},..._0x1cfc6d})['then'](async([_0x5e22f3,_0x37ff9c])=>{if(!_0x37ff9c){let _0x541967=![];if(_0x254cd5&&typeof _0x254cd5==='object'){for(const _0x53602c in _0x254cd5){if(_0x5e22f3[_0x53602c]===undefined||String(_0x5e22f3[_0x53602c])!==String(_0x254cd5[_0x53602c])){_0x5e22f3['set'](_0x53602c,_0x254cd5[_0x53602c]);_0x541967=!![];}}}if(_0x541967){try{await _0x5e22f3['save']();}catch(_0x16e2cd){await this['clearCache'](_0x499c73);throw _0x16e2cd;}}else{const _0x1c4277=this['_generateSmartTags'](_0x5e22f3);await this['setCacheEntry'](_0x499c73,_0x5e22f3,undefined,_0x1c4277);}}return[_0x5e22f3,_0x37ff9c];})['finally'](()=>{this['pendingQueries']['delete'](_0x499c73);});this['pendingQueries']['set'](_0x499c73,_0x5b7fda);return _0x5b7fda;}static async['getOrCreateCache'](_0x282c2b,_0x34edf9={},_0x5fd07a={}){return this['findOrCreateWithCache']({'where':_0x282c2b,'defaults':_0x34edf9,..._0x5fd07a});}static async['firstOrCreateCache'](_0xa03e36,_0x29606f={},_0x21d869={}){const {noCache:_0xb51f63,..._0x3d5ce4}=_0x21d869;const _0x1418f6=this['_normalizeFindOptions'](_0xa03e36)['where'];const _0x5b4977=this['getCacheKey']({'where':_0x1418f6,..._0x3d5ce4});if(!_0xb51f63){const _0xad7408=await this['getCachedEntry'](_0x5b4977,_0x3d5ce4['include']);if(_0xad7408['hit']&&_0xad7408['data']){return[_0xad7408['data'],![]];}}this['cacheStats']['misses']++;if(this['pendingQueries']['has'](_0x5b4977)){return this['pendingQueries']['get'](_0x5b4977);}const _0x28e495=this['findOne']({'where':_0x1418f6,..._0x3d5ce4})['then'](async _0x2c4897=>{if(_0x2c4897){const _0x143935=this['_generateSmartTags'](_0x2c4897);await this['setCacheEntry'](_0x5b4977,_0x2c4897,undefined,_0x143935);return[_0x2c4897,![]];}const _0x6b2d2f=await this['create']({..._0x1418f6,..._0x29606f});return[_0x6b2d2f,!![]];})['finally'](()=>this['pendingQueries']['delete'](_0x5b4977));this['pendingQueries']['set'](_0x5b4977,_0x28e495);return _0x28e495;}static async['firstOrNewCache'](_0x3e4fd8,_0x307890={},_0x11029b={}){const {noCache:_0x392aec,..._0x1615f8}=_0x11029b;const _0x95b4e9=this['_normalizeFindOptions'](_0x3e4fd8)['where'];const _0x405a94=this['getCacheKey']({'where':_0x95b4e9,..._0x1615f8});if(!_0x392aec){const _0x3ef6f0=await this['getCachedEntry'](_0x405a94,_0x1615f8['include']);if(_0x3ef6f0['hit']&&_0x3ef6f0['data']){return[_0x3ef6f0['data'],![]];}}this['cacheStats']['misses']++;const _0x18d971=await this['findOne']({'where':_0x95b4e9,..._0x1615f8});if(_0x18d971){const _0x23dcec=this['_generateSmartTags'](_0x18d971);await this['setCacheEntry'](_0x405a94,_0x18d971,undefined,_0x23dcec);return[_0x18d971,![]];}const _0x40d288=this['build']({..._0x95b4e9,..._0x307890});return[_0x40d288,!![]];}static async['firstOrUpdateCache'](_0x358b28,_0x2a4a57={},_0x22f646={}){const {noCache:_0x3386c1,..._0x5d0129}=_0x22f646;const _0x2c0754=this['_normalizeFindOptions'](_0x358b28)['where'];const _0x4d53fd=this['getCacheKey']({'where':_0x2c0754,..._0x5d0129});if(!_0x3386c1){const _0x1cc007=await this['getCachedEntry'](_0x4d53fd,_0x5d0129['include']);if(_0x1cc007['hit']&&_0x1cc007['data']){const _0x5a8421=_0x1cc007['data'];try{_0x5a8421['set'](_0x2a4a57);await _0x5a8421['save']();}catch(_0x248660){await this['clearCache'](_0x4d53fd);throw _0x248660;}return[_0x5a8421,![]];}}this['cacheStats']['misses']++;if(this['pendingQueries']['has'](_0x4d53fd)){return this['pendingQueries']['get'](_0x4d53fd);}const _0x31b7ed=this['findOne']({'where':_0x2c0754,..._0x5d0129})['then'](async _0x38df4a=>{if(_0x38df4a){try{_0x38df4a['set'](_0x2a4a57);await _0x38df4a['save']();}catch(_0x2106fb){await this['clearCache'](_0x4d53fd);throw _0x2106fb;}return[_0x38df4a,![]];}const _0x5e723c=await this['create']({..._0x2c0754,..._0x2a4a57});return[_0x5e723c,!![]];})['finally'](()=>this['pendingQueries']['delete'](_0x4d53fd));this['pendingQueries']['set'](_0x4d53fd,_0x31b7ed);return _0x31b7ed;}static async['updateOrCreateCache'](_0x192f51,_0x1ae654={},_0x3f1655={}){const {..._0xf0ca82}=_0x3f1655;const _0x5169ef=this['_normalizeFindOptions'](_0x192f51)['where'];const _0x33727a=this['getCacheKey']({'where':_0x5169ef,..._0xf0ca82});if(this['pendingQueries']['has'](_0x33727a)){return this['pendingQueries']['get'](_0x33727a);}const _0x7c4671=this['findOne']({'where':_0x5169ef,..._0xf0ca82})['then'](async _0x7e6ffa=>{if(_0x7e6ffa){try{_0x7e6ffa['set'](_0x1ae654);await _0x7e6ffa['save']();}catch(_0x1fd670){await this['clearCache'](_0x33727a);throw _0x1fd670;}return[_0x7e6ffa,![]];}const _0x319c77=await this['create']({..._0x5169ef,..._0x1ae654});return[_0x319c77,!![]];})['finally'](()=>{this['pendingQueries']['delete'](_0x33727a);});this['pendingQueries']['set'](_0x33727a,_0x7c4671);return _0x7c4671;}static async['countWithCache'](_0x2f52af={},_0x2c11c1=(-0xf43+-0x1fb7*-0x1+-0x7*0x259)*(-0xf11*0x1+0x2c6+0xc87)*(-0x1534+-0x25*-0x29+0x132f)){const {noCache:_0x1e1f54,ttl:_0x26cbac,cacheTags:_0x469c26,customCacheKey:_0x354677,..._0x1c3493}=_0x2f52af||{};const _0x2c5be9={'queryType':'count',..._0x1c3493};const _0x1a1adf=this['getCacheKey'](_0x2c5be9);const _0x3451a0=_0x26cbac||_0x2c11c1||this['CACHE_TTL']||this['DEFAULT_TTL'];if(!_0x1e1f54){try{if(this['isRedisConnected']&&this['redis']){const _0x358eb7=await this['redis']['get'](_0x1a1adf);if(_0x358eb7!==null&&_0x358eb7!==undefined){this['cacheStats']['redisHits']++;return parseInt(_0x358eb7,0x2183+-0x4*-0x4d2+-0x25*0x16d);}}else if(!this['isShardMode']){const _0x421ddc=this['localCache']['get'](_0x1a1adf);if(_0x421ddc&&_0x421ddc['expires']>Date['now']()){this['cacheStats']['mapHits']++;const _0x448561=typeof _0x421ddc['data']==='string'?parseInt(_0x421ddc['data'],-0xd3*0xe+-0x1886+0x120d*0x2):_0x421ddc['data'];return _0x448561;}}}catch(_0x56d123){this['_trackRedisError'](_0x56d123);}}this['cacheStats']['misses']++;const _0x237826=await this['count'](_0x1c3493);try{if(this['isRedisConnected']&&this['redis']){const _0x20e18d=Math['ceil'](_0x3451a0/(0x60*-0x2+-0xbfe+-0x853*-0x2)*(-0x2485+0x23ee+0x99));await this['redis']['multi']()['set'](_0x1a1adf,String(_0x237826),'PX',_0x3451a0)['sadd'](''+this['name'],_0x1a1adf)['expire'](''+this['name'],_0x20e18d)['exec']();this['cacheStats']['sets']++;}else if(!this['isShardMode']){this['localCache']['set'](_0x1a1adf,{'data':String(_0x237826),'expires':Date['now']()+_0x3451a0});this['cacheStats']['sets']++;}}catch(_0x3d5af0){this['_trackRedisError'](_0x3d5af0);}return _0x237826;}static async['clearNegativeCache'](_0x4c3d9a){return this['clearCache'](_0x4c3d9a);}static async['aggregateWithCache'](_0x50c843={},_0x47b596={}){const {cacheTags:_0x3b2e2e,noCache:_0x187ce7,..._0x122286}=_0x50c843||{};const {ttl:ttl=(-0x11b6*0x1+-0x1*0x254f+0x370a)*(0x5b6+-0x2021+0x1aa7)*(-0x12fe+0x9c1+-0x5*-0x2a1)}=_0x47b596||{};const _0x3bb45d={'queryType':'aggregate',..._0x122286};const _0xf4107d=this['getCacheKey'](_0x3bb45d);const _0x29c45b=ttl||this['CACHE_TTL']||this['DEFAULT_TTL'];if(!_0x187ce7){try{if(this['isRedisConnected']&&this['redis']){const _0x127853=await this['redis']['get'](_0xf4107d);if(_0x127853!==null&&_0x127853!==undefined){const _0x5b0e91=safeParse(_0x127853,this['logger']);if(_0x5b0e91!==null){this['cacheStats']['redisHits']++;return _0x5b0e91;}}}else if(!this['isShardMode']){const _0x58eb8e=this['localCache']['get'](_0xf4107d);if(_0x58eb8e&&_0x58eb8e['expires']>Date['now']()){this['cacheStats']['mapHits']++;const _0x263b5c=typeof _0x58eb8e['data']==='string'?safeParse(_0x58eb8e['data'],this['logger']):_0x58eb8e['data'];return _0x263b5c;}}}catch(_0x253265){this['_trackRedisError'](_0x253265);}}this['cacheStats']['misses']++;const _0x24fadd=await this['findAll'](_0x122286);try{const _0xd07611=_0x24fadd['map'](_0xc0d053=>typeof _0xc0d053['toJSON']==='function'?_0xc0d053['toJSON']():_0xc0d053);const _0x45b600=safeStringify(_0xd07611,this['logger']);if(this['isRedisConnected']&&this['redis']){const _0x4d878c=Math['ceil'](_0x29c45b/(-0x115f*-0x1+0x7*-0x91+-0x980)*(-0x13ed+-0x1*0xd86+0x2175));const _0x16a69d=[''+this['name']];if(Array['isArray'](_0x3b2e2e))_0x16a69d['push'](..._0x3b2e2e);const _0x1ddf2a=this['redis']['multi']();_0x1ddf2a['set'](_0xf4107d,_0x45b600,'PX',_0x29c45b);for(const _0x4cc9e6 of _0x16a69d){_0x1ddf2a['sadd'](_0x4cc9e6,_0xf4107d);_0x1ddf2a['expire'](_0x4cc9e6,_0x4d878c);}await _0x1ddf2a['exec']();this['cacheStats']['sets']++;}else if(!this['isShardMode']){this['localCache']['set'](_0xf4107d,{'data':_0x45b600,'expires':Date['now']()+_0x29c45b});this['cacheStats']['sets']++;}}catch(_0x3daebc){this['_trackRedisError'](_0x3daebc);}return _0x24fadd;}static async['refreshCache'](_0x16d120,_0x1478a8={}){const {ttl:_0xb600ba,..._0x37ab26}=_0x1478a8;const _0x3d1ba8=this['_normalizeFindOptions'](_0x16d120);const _0x3afc88={..._0x3d1ba8,..._0x37ab26,'where':{..._0x3d1ba8['where']||{},..._0x37ab26['where']||{}}};if(!_0x3afc88['where']||Object['keys'](_0x3afc88['where'])['length']===0x17c7+-0x12d+-0x169a)return null;const _0x23837d=this['getCacheKey'](_0x3afc88);await this['clearCache'](_0x23837d);const _0x2f5f35=await this['findOne'](_0x3afc88);if(this['isRedisConnected']||!this['isShardMode']){const _0x87e692=this['_generateSmartTags'](_0x2f5f35);await this['setCacheEntry'](_0x23837d,_0x2f5f35,_0xb600ba,_0x87e692);}return _0x2f5f35;}static async['existsCache'](_0xc61448,_0xcf162a={}){const {noCache:_0x5851ab,ttl:_0x110281}=_0xcf162a;const _0x518c04=this['_normalizeFindOptions'](_0xc61448)['where'];const _0x38c129=this['getCacheKey']({'queryType':'exists','where':_0x518c04});const _0x1e934d=_0x110281||this['CACHE_TTL']||this['DEFAULT_TTL'];if(!_0x5851ab){try{if(this['isRedisConnected']&&this['redis']){const _0x5c3353=await this['redis']['get'](_0x38c129);if(_0x5c3353!==null&&_0x5c3353!==undefined){this['cacheStats']['redisHits']++;return _0x5c3353==='true';}}else if(!this['isShardMode']){const _0x375a6c=this['localCache']['get'](_0x38c129);if(_0x375a6c&&_0x375a6c['expires']>Date['now']()){this['cacheStats']['mapHits']++;return _0x375a6c['data']==='true'||_0x375a6c['data']===!![];}}}catch(_0x41edbc){this['_trackRedisError'](_0x41edbc);}}this['cacheStats']['misses']++;const _0x11eff8=await this['count']({'where':_0x518c04});const _0x391baf=_0x11eff8>0x23*-0x51+-0x9*-0x3b+0x900;try{if(this['isRedisConnected']&&this['redis']){const _0x2d98ba=Math['ceil'](_0x1e934d/(0x1d15*-0x1+0x8+0x20f5)*(-0x4c9*-0x5+0x45b*0x5+-0x2db2));await this['redis']['multi']()['set'](_0x38c129,String(_0x391baf),'PX',_0x1e934d)['sadd'](''+this['name'],_0x38c129)['expire'](''+this['name'],_0x2d98ba)['exec']();this['cacheStats']['sets']++;}else if(!this['isShardMode']){this['localCache']['set'](_0x38c129,{'data':String(_0x391baf),'expires':Date['now']()+_0x1e934d});this['cacheStats']['sets']++;}}catch(_0x2dd534){this['_trackRedisError'](_0x2dd534);}return _0x391baf;}static async['bulkGetCache'](_0xa26cfa,_0x54e1bb={}){if(!Array['isArray'](_0xa26cfa)||_0xa26cfa['length']===0xe5d*0x1+-0x82*0x1f+0x161)return[];const _0x17ca40=this['primaryKeyAttribute'];const {noCache:_0x1422ad,ttl:_0x1f2b8a,customCacheKey:_0x7076cb,..._0x103dcf}=_0x54e1bb;const _0x469a4f=new Map();const _0x5b6fb7=[];if(!_0x1422ad){await Promise['all'](_0xa26cfa['map'](async _0x117a2f=>{const _0xf5efd5=this['getCacheKey']({'where':{[_0x17ca40]:_0x117a2f},..._0x103dcf});const _0x2c233b=await this['getCachedEntry'](_0xf5efd5,_0x103dcf['include']);if(_0x2c233b['hit']&&_0x2c233b['data']){_0x469a4f['set'](_0x117a2f,_0x2c233b['data']);}else{_0x5b6fb7['push'](_0x117a2f);}}));}else{_0x5b6fb7['push'](..._0xa26cfa);}if(_0x5b6fb7['length']>-0xc48+0x676*0x4+-0xd90){this['cacheStats']['misses']+=_0x5b6fb7['length'];const _0xa92eba=await this['findAll']({'where':{[_0x17ca40]:_0x5b6fb7},..._0x103dcf});await Promise['all'](_0xa92eba['map'](async _0x2ffffb=>{const _0x557332=_0x2ffffb[_0x17ca40];_0x469a4f['set'](_0x557332,_0x2ffffb);if(this['isRedisConnected']||!this['isShardMode']){const _0x46a57d=this['getCacheKey']({'where':{[_0x17ca40]:_0x557332},..._0x103dcf});const _0x255f42=this['_generateSmartTags'](_0x2ffffb);await this['setCacheEntry'](_0x46a57d,_0x2ffffb,_0x1f2b8a,_0x255f42);}}));}return _0xa26cfa['map'](_0x386805=>_0x469a4f['get'](_0x386805))['filter'](Boolean);}static async['destroyAndClearCache'](_0x2e490c){if(!_0x2e490c?.['where']){throw new Error('destroyAndClearCache\x20requires\x20a\x20\x27where\x27\x20option.');}const _0x6d2607=await this['destroy'](_0x2e490c);if(this['isRedisConnected']){await this['invalidateByTags']([''+this['name']]);}else if(!this['isShardMode']){this['_mapClearAllModelCache']();}return _0x6d2607;}static async['incrementCache'](_0x2e226e,_0x163058,_0x1f7b50=-0x1*0x244b+0xc74+0x17d8){const _0x13e98c=this['_normalizeFindOptions'](_0x2e226e)['where'];await this['increment'](_0x163058,{'by':_0x1f7b50,'where':_0x13e98c});const _0xc944b6=this['primaryKeyAttribute'];const _0x31d970=_0x13e98c[_0xc944b6];if(this['isRedisConnected']){const _0x2cfe8b=_0x31d970?[''+this['name'],this['name']+':'+_0xc944b6+':'+_0x31d970]:[''+this['name']];await this['invalidateByTags'](_0x2cfe8b);}else if(!this['isShardMode']){this['_mapClearAllModelCache']();}}static async['paginateCache'](_0x18514e={}){const {page:page=-0x11d6+0x14d2+0x1*-0x2fb,pageSize:pageSize=-0x640+-0x206e+0x26c2,noCache:_0x5800ec,ttl:_0x1a9f06,cacheTags:_0x253788,..._0x54018a}=_0x18514e;const _0xd0e293=(page-(-0x1daf+0x2*-0xe0+0x1f70*0x1))*pageSize;const _0x138896=this['_normalizeFindOptions'](_0x54018a);const _0x8b041b={..._0x138896,'limit':pageSize,'offset':_0xd0e293};const _0x16f23c=_0x1a9f06||this['CACHE_TTL']||this['DEFAULT_TTL'];const _0x792626=this['getCacheKey']({'queryType':'paginate','page':page,'pageSize':pageSize,..._0x138896});if(!_0x5800ec){try{if(this['isRedisConnected']&&this['redis']){const _0x523811=await this['redis']['get'](_0x792626);if(_0x523811!==null&&_0x523811!==undefined){const _0x5433c3=safeParse(_0x523811,this['logger']);if(_0x5433c3&&typeof _0x5433c3==='object'&&'rows'in _0x5433c3){this['cacheStats']['redisHits']++;const _0xca2d94=_0x8b041b['include']?Array['isArray'](_0x8b041b['include'])?_0x8b041b['include']:[_0x8b041b['include']]:undefined;_0x5433c3['rows']=_0x5433c3['rows']['map'](_0x1a80bd=>this['build'](_0x1a80bd,{'isNewRecord':![],'include':_0xca2d94}));return _0x5433c3;}}}else if(!this['isShardMode']){const _0x291fc0=this['localCache']['get'](_0x792626);if(_0x291fc0&&_0x291fc0['expires']>Date['now']()){const _0x7afd73=typeof _0x291fc0['data']==='string'?safeParse(_0x291fc0['data'],this['logger']):_0x291fc0['data'];if(_0x7afd73&&typeof _0x7afd73==='object'&&'rows'in _0x7afd73){this['cacheStats']['mapHits']++;const _0x5ba8a6=_0x8b041b['include']?Array['isArray'](_0x8b041b['include'])?_0x8b041b['include']:[_0x8b041b['include']]:undefined;_0x7afd73['rows']=this['bulkBuild'](_0x7afd73['rows'],{'isNewRecord':![],'include':_0x5ba8a6});return _0x7afd73;}}}}catch(_0x39e626){this['_trackRedisError'](_0x39e626);}}this['cacheStats']['misses']++;const {rows:_0x25af7e,count:_0x4f0071}=await this['findAndCountAll'](_0x8b041b);const _0x5dc728=Math['ceil'](_0x4f0071/pageSize);const _0x4c9e07={'rows':_0x25af7e,'count':_0x4f0071,'totalPages':_0x5dc728,'currentPage':page};const _0x3ba16a=[''+this['name']];if(Array['isArray'](_0x253788))_0x3ba16a['push'](..._0x253788);const _0x56a848=Math['ceil'](_0x16f23c/(0x1265+0x12ce+0x3b3*-0x9)*(0x3*0x8ad+0xa*0x35b+-0x3b93));const _0x241510={'rows':_0x25af7e['map'](_0x3551f9=>typeof _0x3551f9['toJSON']==='function'?_0x3551f9['toJSON']():_0x3551f9),'count':_0x4f0071,'totalPages':_0x5dc728,'currentPage':page};const _0x49ef47=safeStringify(_0x241510,this['logger']);try{if(!_0x5800ec&&this['isRedisConnected']&&this['redis']){const _0x5f1a72=this['redis']['multi']();_0x5f1a72['set'](_0x792626,_0x49ef47,'PX',_0x16f23c);for(const _0x4bdb15 of _0x3ba16a){_0x5f1a72['sadd'](_0x4bdb15,_0x792626);_0x5f1a72['expire'](_0x4bdb15,_0x56a848);}await _0x5f1a72['exec']();this['cacheStats']['sets']++;}else if(!_0x5800ec&&!this['isShardMode']){this['localCache']['set'](_0x792626,{'data':_0x49ef47,'expires':Date['now']()+_0x16f23c});this['cacheStats']['sets']++;}}catch(_0x1dada){this['_trackRedisError'](_0x1dada);}return _0x4c9e07;}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 _0x277a9b=async _0x3c61f0=>{const _0x10de10=_0x3c61f0['constructor'];if(_0x10de10['isRedisConnected']){const _0x138cba=_0x10de10['_generateSmartTags'](_0x3c61f0);if(Array['isArray'](_0x10de10['customInvalidationTags'])){_0x138cba['push'](..._0x10de10['customInvalidationTags']);}await _0x10de10['invalidateByTags'](_0x138cba);}else if(!_0x10de10['isShardMode']){_0x10de10['_mapClearAllModelCache']();}};const _0x2c0c47=async _0x1ac1e4=>{const _0x441dd4=_0x1ac1e4['constructor'];if(_0x441dd4['isRedisConnected']){const _0x24acde=_0x441dd4['_generateSmartTags'](_0x1ac1e4);if(Array['isArray'](_0x441dd4['customInvalidationTags'])){_0x24acde['push'](..._0x441dd4['customInvalidationTags']);}await _0x441dd4['invalidateByTags'](_0x24acde);}else if(!_0x441dd4['isShardMode']){_0x441dd4['_mapClearAllModelCache']();}};const _0xa7b75=async()=>{if(this['isRedisConnected']){await this['invalidateByTags']([''+this['name']]);}else if(!this['isShardMode']){this['_mapClearAllModelCache']();}};this['addHook']('afterSave',_0x277a9b);this['addHook']('afterDestroy',_0x2c0c47);this['addHook']('afterBulkCreate',_0xa7b75);this['addHook']('afterBulkUpdate',_0xa7b75);this['addHook']('afterBulkDestroy',_0xa7b75);}static['attachHooksToAllModels'](_0xa14c2c,_0x5d6f26){if(!this['redis']){this['logger']['warn']('⚠️\x20[CACHE]\x20Redis\x20not\x20initialized.\x20Attaching\x20hooks\x20anyway\x20for\x20in-memory\x20cache\x20invalidation.');}for(const _0xf9f353 in _0xa14c2c['models']){const _0x450b15=_0xa14c2c['models'][_0xf9f353];if(_0x450b15['prototype']instanceof KythiaModel){_0x450b15['client']=_0x5d6f26;this['logger']['info']('\x20\x20╰┈➤\x20⚙️\x20\x20Attaching\x20hooks\x20to\x20'+_0x450b15['name']);_0x450b15['initializeCacheHooks']();}}}static async['touchParent'](_0x27fa6d,_0x37c4de,_0x20376c,_0x2e667a='updatedAt'){if(!_0x27fa6d?.[_0x37c4de]){return;}try{const _0x59ad73=_0x20376c['primaryKeyAttribute'];const _0x38b4ec=await _0x20376c['findByPk'](_0x27fa6d[_0x37c4de]);if(_0x38b4ec){_0x38b4ec['changed'](_0x2e667a,!![]);await _0x38b4ec['save']({'fields':[_0x2e667a]});this['logger']['info']('🔄\x20Touched\x20parent\x20'+_0x20376c['name']+'\x20#'+_0x38b4ec[_0x59ad73]+'\x20due\x20to\x20change\x20in\x20'+this['name']+'.');}}catch(_0x1b5ffc){this['logger']['error']('🔄\x20Failed\x20to\x20touch\x20parent\x20'+_0x20376c['name'],_0x1b5ffc);}}static['setupParentTouch'](_0x30a4d7,_0x467d80,_0x5e5c39='updatedAt'){const _0x408d1a=_0x44ac4f=>{return this['touchParent'](_0x44ac4f,_0x30a4d7,_0x467d80,_0x5e5c39);};const _0x4627e7=_0x588fa3=>{if(_0x588fa3&&_0x588fa3['length']>-0x1*0x1181+0x604+-0xb7d*-0x1){return this['touchParent'](_0x588fa3[-0x2027+-0x119*-0x23+0x4*-0x191],_0x30a4d7,_0x467d80,_0x5e5c39);}return Promise['resolve']();};this['addHook']('afterSave',_0x408d1a);this['addHook']('afterDestroy',_0x408d1a);this['addHook']('afterBulkCreate',_0x4627e7);}}exports['KythiaModel']=KythiaModel;exports['default']=KythiaModel;
|