badmfck-api-server 3.9.86 → 3.9.87

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/package.json +1 -1
  2. package/dist/apiServer/APIService.js.map +0 -1
  3. package/dist/apiServer/BaseEndpoint.js.map +0 -1
  4. package/dist/apiServer/BaseService.js.map +0 -1
  5. package/dist/apiServer/ClusterService.d.ts +0 -30
  6. package/dist/apiServer/ClusterService.js +0 -81
  7. package/dist/apiServer/ClusterService.js.map +0 -1
  8. package/dist/apiServer/DocumentService.js.map +0 -1
  9. package/dist/apiServer/HUBService.d.ts +0 -37
  10. package/dist/apiServer/HUBService.js +0 -132
  11. package/dist/apiServer/HUBService.js.map +0 -1
  12. package/dist/apiServer/LocalRequest.js.map +0 -1
  13. package/dist/apiServer/LogService.js.map +0 -1
  14. package/dist/apiServer/MysqlService.js.map +0 -1
  15. package/dist/apiServer/WSAPITransport.js.map +0 -1
  16. package/dist/apiServer/WebSocketHandler.js.map +0 -1
  17. package/dist/apiServer/Websocket.d.ts +0 -8
  18. package/dist/apiServer/Websocket.js +0 -15
  19. package/dist/apiServer/WebsocketService.d.ts +0 -8
  20. package/dist/apiServer/WebsocketService.js +0 -18
  21. package/dist/apiServer/WebsocketService.js.map +0 -1
  22. package/dist/apiServer/cluster/HUBConnection.d.ts +0 -39
  23. package/dist/apiServer/cluster/HUBConnection.js +0 -251
  24. package/dist/apiServer/cluster/HUBConnection.js.map +0 -1
  25. package/dist/apiServer/cluster/HUBHandlres.d.ts +0 -0
  26. package/dist/apiServer/cluster/HUBHandlres.js +0 -2
  27. package/dist/apiServer/cluster/HUBHandlres.js.map +0 -1
  28. package/dist/apiServer/deployment/Deployment.js.map +0 -1
  29. package/dist/apiServer/helper/DataProvider.js.map +0 -1
  30. package/dist/apiServer/helper/Sleep.js.map +0 -1
  31. package/dist/apiServer/helper/UID.js.map +0 -1
  32. package/dist/apiServer/helper/Validator.js.map +0 -1
  33. package/dist/apiServer/monitor/Monitor.js.map +0 -1
  34. package/dist/apiServer/routes/Liveness.js.map +0 -1
  35. package/dist/apiServer/routes/Monitor.d.ts +0 -9
  36. package/dist/apiServer/routes/Monitor.js +0 -77
  37. package/dist/apiServer/routes/Readiness.js.map +0 -1
  38. package/dist/apiServer/structures/DefaultErrors.js.map +0 -1
  39. package/dist/apiServer/structures/HTTPStatus.js.map +0 -1
  40. package/dist/apiServer/structures/Interfaces.js.map +0 -1
  41. /package/dist/apiServer/helper/{zipUtils.d.ts → ZipUtils.d.ts} +0 -0
  42. /package/dist/apiServer/helper/{zipUtils.js → ZipUtils.js} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"MysqlService.js","sourceRoot":"","sources":["../../src/apiServer/MysqlService.ts"],"names":[],"mappings":"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","sourcesContent":["//import mysql, { FieldInfo, MysqlError, Pool, PoolConnection } from \"mysql\"\n\nimport { BaseService } from \"./BaseService\";\nimport Signal, { Req } from \"badmfck-signal\";\nimport { createCipheriv, createDecipheriv, createHash } from \"crypto\"\nimport { logCrit, logError, logInfo, logWarn } from \"./LogService\";\nimport * as mysql from \"mysql2/promise\"\nimport fs from \"fs\"\nimport path from \"path\"\nimport { IError } from \"./structures/Interfaces\";\n\nexport const S_MYSQL_STARTED=new Signal<void>()\nexport const REQ_MYSQL_QUERY = new Req<MySqlQuery|MySqlQuery[],MysqlResult[]>(undefined,\"REQ_MYSQL_QUERY\");\n//export const REQ_MYSQL_TRANSACTION = new Req<MySqlQuery[],MysqlResult>(undefined,\"REQ_MYSQL_TRANSACTION\");\n\nexport const REQ_MYSQL_TBEGIN = new Req<void,MysqlError|number>(undefined,\"REQ_MYSQL_TRANSACTION_BEGING\"); // return transaction id or mysql error\nexport const REQ_MYSQL_TQUERY=new Req<{query:MySqlQuery,tid:number},MysqlResult>(undefined,\"REQ_MYSQL_TRANSACTION_ADD_OPERATION\"); // tid means transaction id\nexport const REQ_MYSQL_TCOMMIT=new Req<number,MysqlError|null>(undefined,\"REQ_MYSQL_TCOMMIT\"); // tid\nexport const REQ_MYSQL_TROLLBACK=new Req<number,MysqlError|null>(undefined,\"REQ_MYSQL_TROLLBACK\"); // tid\n\nexport const executeQuery = async (query:MySqlQuery|MySqlQuery[]):Promise<MysqlResult[]>=>{return await REQ_MYSQL_QUERY.request(query)}\n\nexport interface MysqlServiceOptions{\n connectionLimit:number,\n host:string,\n user:string,\n password:string,\n port:number,\n database:string, \n queueLimit?:number,\n transactionFailReport?:(trx:ITransaction,message:string)=>void,\n transactionFailReportDir?:string,\n debug?:boolean,\n naxTransactionWaitTime?:number,\n\tmigrations?:{\n\t\tdir:string,\n\t\tcallback:()=>void\n\t}|null\n}\n\nexport interface MysqlError{\n code: string,\n errno: number,\n sql: string,\n name:string,\n message:string\n fatal?:boolean\n}\n\nexport interface MysqlResult{\n error?:MysqlError|null,\n rollbackError?:MysqlError|null,\n isDuplicateError?:boolean\n data:any\n}\n\nexport interface MySqlQuery{\n query:string\n fields:MysqlQueryField[]|MysqlQueryFieldObject,\n rollbackQuery?:string|null\n transactionID?:number\n}\n\nexport interface MysqlQueryField{\n name:string,\n value:string|number|boolean|null|undefined,\n system?:boolean,\n ignoreInInsert?:boolean,\n ignoreInUpdate?:boolean\n useInReplace?:boolean,\n _parsedValue?:string|number|boolean|null\n}\n\nexport interface ITransaction{\n id:number\n timestamp:number,\n conn:mysql.PoolConnection,\n queries:{sql:string,status:string}[]\n}\n\nexport interface MysqlQueryFieldObject extends Record<string,string|number|boolean|null|undefined|{name?:string|null,value:string|number|boolean|null|undefined,system?:boolean,ignoreInInsert?:boolean,ignoreInUpdate?:boolean,useInReplace?:boolean}>{\n\n}\n \n\n/**\n * Mysql Services, execute queries\n * MySqlQuery.query:\n * @fields - replaced by field's names\n * @values - replaced by parsed values\n * @onupdate - repalced by pair field name = value\n * @onduplicate - replaced by pair field name = value\n */\n\nexport class MysqlService extends BaseService{\n\n reconnectionTimeout=1000*3;\n reconnecting=false;\n pool:mysql.Pool|null=null;\n options:MysqlServiceOptions;\n serviceStarted=false;\n timeoutID:any\n\n debug=false;\n\n queries=[]; // TODO: STORE QUERIES SENTS BEFORE THE SERVICE IS STARTED!\n static nextTransactionID=1;\n transactions:ITransaction[]=[]\n\n maxTransactionWaitTime = 1000*60*1; // 1 min and detelete transaction\n\n failReportFileStream:fs.WriteStream|null=null;\n failReportFileStreamName:string|null=null;\n failReportLastAccessTime:number=0;\n\n constructor(options:MysqlServiceOptions){\n super(\"mysql\");\n this.options = options;\n \n\n // decrypt when needed\n if(this.options.host.startsWith(\"_\"))\n this.options.host = decrypt(this.options.host.substring(1)) ?? this.options.host\n if(this.options.user.startsWith(\"_\"))\n this.options.user = decrypt(this.options.user.substring(1)) ?? this.options.user\n if(this.options.database.startsWith(\"_\"))\n this.options.database = decrypt(this.options.database.substring(1)) ?? this.options.database\n if(this.options.password.startsWith(\"_\"))\n this.options.password = decrypt(this.options.password.substring(1)) ?? this.options.password\n\n if(this.options.debug)\n this.debug = true\n if(this.options.naxTransactionWaitTime)\n this.maxTransactionWaitTime = this.options.naxTransactionWaitTime;\n\n setInterval(()=>{\n // check transactions\n const now = Date.now();\n const count = this.transactions.length;\n const removedIDs:number[]=[];\n for(let i of this.transactions){\n if(now-i.timestamp>this.maxTransactionWaitTime){\n logError(\"Release transaction connection due to timeout\")\n this.rollbackTransaction(i,true);\n removedIDs.push(i.id)\n }\n }\n\n this.transactions = this.transactions.filter(i=>!removedIDs.includes(i.id))\n \n if(this.debug)\n console.log(\"Removed: \",count-this.transactions.length)\n\n \n\n },1000*30)\n\n setInterval(()=>{\n if(!this.failReportFileStream)\n return;\n \n // after 15 min of inactivity, close file\n if(Date.now()-this.failReportLastAccessTime>1000*60*15){\n this.failReportFileStream.end();\n this.failReportFileStream=null;\n }\n\n },1000*60*5)\n\n if(options.transactionFailReportDir){\n try{\n if (!fs.existsSync(options.transactionFailReportDir)){\n fs.mkdirSync(options.transactionFailReportDir);\n }\n }catch(e){\n options.transactionFailReportDir=undefined;\n logCrit(\"${MysqlService.js}\",\"Can't create transaction fail report dir\")\n }\n }\n }\n\n static async executeQuery (query:MySqlQuery|MySqlQuery[]):Promise<MysqlResult[]>{ return await REQ_MYSQL_QUERY.request(query) }\n\n async init(){\n super.init();\n\n // setup process exit handlers interrupt (ctrl+c)\n process.on('SIGINT', async () => {\n await this.finishApp();\n process.exit(0);\n });\n \n // terminate (kill)\n process.on('SIGTERM',async () => {\n await this.finishApp();\n process.exit(0);\n });\n\n this.serviceStarted=false;\n let poolCreated:boolean = false;\n\n while(!poolCreated){\n logInfo(\"${MysqlService.js}\",\"Connecting to MYSQL!\")\n poolCreated = await this.recreatePool();\n if(!poolCreated){\n logCrit(\"${MysqlService.js}\",\"Can't connect to MYSQL! Retrying in 3 seconds...\")\n await new Promise((resolve)=>setTimeout(resolve,3000))\n }\n }\n\n REQ_MYSQL_QUERY.listener=async data =>{\n if(!Array.isArray(data))\n data=[data];\n const promises=[]\n for(let i of data){\n const query = MysqlService.prepareQuery(i.query,i.fields);\n promises.push(this.execute(query,i.rollbackQuery ?? null,i.transactionID ?? 0));\n }\n \n if(this.debug)\n console.log(\"Execute queries: \",data.length)\n \n return await Promise.all(promises);\n }\n\n REQ_MYSQL_TBEGIN.listener=async ()=>{ \n const conn = await this.pool?.getConnection();\n if(!conn)\n return {code:\"NO_POOL\",errno:100000,fatal:true,sql:\"\",name:\"NO_POOL\",message:\"Mysql pool not created\"}\n\n // find conn in transactions\n for(let i of this.transactions){\n if(i.conn===conn){\n logInfo(\"Your connection is in transaction\")\n return {code:\"CONN_IN_TRX\",errno:100005,fatal:true,sql:\"\",name:\"CONN_IN_TRX\",message:\"Connection is in transaction\"}\n }\n }\n\n const tid = MysqlService.nextTransactionID++;\n if(this.debug)\n console.log(\"Begin transaction with id \",tid)\n\n try{\n \n // await conn.beginTransaction();\n await conn.query(\"START TRANSACTION\");\n //const res = await conn.query(\"SET autocommit=0\");\n if(this.debug)\n console.log(\"Transaction started\")\n\n }catch(e){\n this.rollbackTransaction({id:tid,conn:conn,timestamp:Date.now(),queries:[{sql:\"START TRANSACTION\",status:\"error\"}]})\n return this.createMysqlQueryError(e);\n }\n\n this.transactions.push({\n id:tid,\n timestamp:Date.now(),\n conn:conn,\n queries:[]\n })\n\n if(this.debug)\n console.log(\"Transactions pool: \",this.transactions)\n\n return tid;\n }\n \n REQ_MYSQL_TQUERY.listener=async data=>{\n const trx = this.transactions.find(i=>i.id===data.tid);\n if(!trx)\n return {err: {\n code:\"NO_TRX\",\n errno:100004,\n fatal:true,\n sql:\"\",\n name:\"NO_TRX\",\n message:\"Transaction not found\"\n },data:null,rollbackError:null}\n\n const query = MysqlService.prepareQuery(data.query.query,data.query.fields);\n let err=null;\n let sqlData = null;\n\n if(this.debug)\n console.log(\"Execute query on transaction: \",trx)\n\n try{\n sqlData = await trx.conn.query(query);\n }catch(e){ err = this.createMysqlQueryError(e);}\n\n if(err)\n this.rollbackTransaction(trx);\n\n if(this.debug)\n console.log(\"Query execution status:\",err?err.message:\"completed\")\n\n trx.queries.push({sql:query,status:err?err.message:\"completed\"})\n\n return {\n data:sqlData?sqlData[0]:null,\n error:err,\n };\n }\n\n REQ_MYSQL_TROLLBACK.listener=async (tid:number)=>{\n const trx = this.transactions.find(i=>i.id===tid);\n if(!trx){\n return {\n code:\"NO_TRX\",\n errno:100004,\n fatal:true,\n sql:\"\",\n name:\"NO_TRX\",\n message:\"Transaction not found\"\n }\n }\n\n await this.rollbackTransaction(trx);\n return null;\n }\n\n REQ_MYSQL_TCOMMIT.listener=async (tid:number)=>{\n const trx = this.transactions.find(i=>i.id===tid);\n if(!trx){\n return {\n code:\"NO_TRX\",\n errno:100004,\n fatal:true,\n sql:\"\",\n name:\"NO_TRX\",\n message:\"Transaction not found\"\n }\n }\n\n\n if(this.debug)\n console.log(\"Commit transaction:\",trx)\n \n // remove from transactions\n this.transactions = this.transactions.filter(i=>i.id!==tid);\n\n if(this.debug)\n console.log(\"Transaction pool:\",this.transactions )\n \n const err = await this.commit(trx);\n\n return err;\n }\n }\n\n async commit(trx:ITransaction):Promise<MysqlError|null>{\n \n try{\n await trx.conn.commit();\n //await trx.conn.query(\"COMMIT\");\n trx.conn.removeAllListeners();\n trx.conn.release();\n }catch(e){\n await this.rollbackTransaction(trx);\n return this.createMysqlQueryError(e);\n }\n return null;\n\n }\n\n async rollbackTransaction(trx:ITransaction,donNotRemove?:boolean):Promise<MysqlError|null>{\n let err=null;\n try{\n console.log(\"Rollback started\",trx.conn)\n await trx.conn.rollback();\n await trx.conn.commit();\n //await trx.conn.query(\"ROLLBACK\");\n trx.conn.removeAllListeners();\n trx.conn.release();\n if(!donNotRemove)\n this.transactions = this.transactions.filter(i=>i.id!==trx.id);\n if(this.debug)\n console.log(\"Rollback complete\",trx.conn)\n }catch(e){\n logCrit(\"${MysqlService.js}\",\"Can't rollback transaction\",trx)\n err = this.createMysqlQueryError(e);\n }\n this.storeTransactionAsProblem(trx,\"rollback\")\n return err;\n }\n\n async finishApp(){\n console.log(\"Finishing mysql service\")\n for(let i of this.transactions)\n this.rollbackTransaction(i);\n\n if(this.pool){\n try{await this.pool.end();}catch(e){\n logCrit(\"${MysqlService.js}\",\"Can't close MYSQL pool!\")\n }\n }\n\n if(this.failReportFileStream)\n this.failReportFileStream.end();\n this.failReportFileStream=null;\n }\n\n async storeTransactionAsProblem(trx:ITransaction,message:string){\n\n if(!this.options.transactionFailReport && !this.options.transactionFailReportDir){\n logCrit(\"${MysqlService.js}\",\"Can't report failed transaction, no report function: transactionFailReport in options, and transactionFailReportDir isnt set\")\n return;\n }\n\n\n if(this.options.transactionFailReportDir){\n const yyymmdd = new Date().toISOString().substring(0,10).replaceAll(\"-\",\"\");\n\n //store transaction\n const date = new Date();\n const file = path.resolve(this.options.transactionFailReportDir,yyymmdd+\".json\");\n if(this.failReportFileStream){\n if(this.failReportFileStreamName!==file){\n this.failReportFileStream.end();\n this.failReportFileStream=null;\n }\n }\n\n\n if(this.failReportFileStreamName){\n this.failReportFileStream = fs.createWriteStream(file,{flags:'a'});\n this.failReportFileStreamName=file;\n }\n \n if(this.debug)\n console.log(\"Store transaction fail report: \",file,trx,message)\n\n if(!this.failReportFileStream)\n this.failReportFileStream = fs.createWriteStream(file,{flags:'a'});\n\n this.failReportFileStream.write(JSON.stringify({queries:trx.queries,time:trx.timestamp,date,message})+\"\\n}EOB{\\n\",err=>{\n if(err)\n logCrit(\"${MysqlService.js}\",\"Can't write to transaction fail report file\")\n else\n logInfo(\"${MysqlService.js}\",\"Transaction fail report stored\")\n });\n\n this.failReportLastAccessTime = Date.now();\n\n }\n\n \n if(this.options.transactionFailReport)\n this.options.transactionFailReport(trx,message);\n }\n\n\n async recreatePool():Promise<boolean>{\n\n logInfo(\"${MysqlService.js}\",\"Connecting to mysql: \\n HOST: \"+this.options.host+'\\n PORT:'+this.options.port)\n\n if(this.pool){\n this.pool.removeAllListeners();\n try{await this.pool.end();}catch(e){\n logCrit(\"${MysqlService.js}\",\"Can't close MYSQL pool!\")\n }\n this.pool = null;\n }\n\n try{\n this.pool =mysql.createPool({\n host: this.options.host\n ,user: this.options.user\n ,password: this.options.password\n ,database: this.options.database\n ,port: this.options.port\n ,connectionLimit: this.options.connectionLimit\n ,queueLimit: 10\n ,multipleStatements: true\n });\n }catch(e){\n logCrit(\"${MysqlService.js}\",\"Can't connect to MYSQL!\")\n return false;\n }\n\n this.pool?.on('connection', (connection) => {\n logInfo(\"${MysqlService.js}\",\"MYSQL CONNECTION CREATED\")\n });\n this.pool?.on('acquire', (connection) => {\n logInfo(\"${MysqlService.js}\",\"MYSQL CONNECTION ACQUIRED\")\n })\n this.pool?.on('release', (connection) => {\n logInfo(\"${MysqlService.js}\",\"MYSQL CONNECTION RELEASED\")\n })\n this.pool?.on('enqueue', () => {\n logInfo(\"${MysqlService.js}\",\"MYSQL CONNECTION ENQUEUED\")\n })\n \n // Check connection\n if(this.debug)\n console.log(\"Check mysql connection\")\n return new Promise(async (resolve,reject)=>{\n try{\n const conn = await this.pool?.getConnection()\n if(conn){\n conn?.release();\n logInfo(\"${MysqlService.js}\",\"Connected to MYSQL!\")\n resolve(true)\n \n }else\n resolve(false)\n }catch(e){\n logCrit(\"${MysqlService.js}\",\"Can't connect to MYSQL!\")\n resolve(false)\n }\n });\n\n }\n\n async onApplicationReady() {}\n\n\n static fieldsToObject(fields:MysqlQueryField[]|MysqlQueryFieldObject,ignoreSystemParameters?:boolean):MysqlQueryFieldObject{\n if(!Array.isArray(fields))\n return fields;\n const obj:MysqlQueryFieldObject={};\n for(let i of fields){\n if(!i.name)\n continue;\n if(typeof i.value!== \"object\")\n obj[i.name]=i.value;\n else{\n if(!ignoreSystemParameters){\n obj[i.name]={\n value:i.value,\n system:i.system,\n ignoreInInsert:i.ignoreInInsert,\n ignoreInUpdate:i.ignoreInUpdate,\n useInReplace:i.useInReplace,\n name:i.name\n }\n }else\n obj[i.name]=i.value\n }\n\n }\n return obj;\n }\n\n static objectToFields(obj:MysqlQueryFieldObject|MysqlQueryField[]):MysqlQueryField[]{\n if(Array.isArray(obj))\n return obj;\n const fields:MysqlQueryField[]=[];\n for(let i in obj){\n if(obj[i] && typeof obj[i] === \"object\"){\n let mo = obj[i] as Record<string,string|number|boolean|null|undefined>;\n if(!mo){\n mo={\n name:i,\n value:null,\n system:false,\n ignoreInInsert:false,\n ignoreInUpdate:false,\n useInReplace:false\n }\n }\n fields.push({\n name:mo.name as string ?? i,\n value:mo.value,\n system:mo.system as boolean,\n ignoreInInsert:mo.system as boolean,\n ignoreInUpdate:mo.system as boolean,\n useInReplace:mo.system as boolean\n })\n }else{\n fields.push({\n name:i,\n value:obj[i] as string|number|boolean|null|undefined\n })\n }\n }\n return fields;\n }\n\n static prepareQuery(query:string,fields:MysqlQueryField[]|MysqlQueryFieldObject):string{\n \n if(!Array.isArray(fields))\n fields = MysqlService.objectToFields(fields);\n\n for(let i of fields){\n const val =this.prepareQueryFieldValue(i.value,i.system);\n i._parsedValue=val;\n query=query.replaceAll(\"@\"+i.name,val+\"\")\n }\n\n const tmp = query.toLowerCase();\n if(tmp.indexOf(\"select\")===0 && tmp.indexOf(\"limit\")===-1)\n query+=\" LIMIT 100\"\n \n query = query.replaceAll(\"@NOLIMIT\",\"\")\n\n\n if(query.indexOf(\"@fields\")!==-1){\n let insertFieldNames=[]\n let insertFieldValues=[]\n for(let i of fields){\n if(i.ignoreInInsert)\n continue;\n\n insertFieldNames.push('`'+i.name.replaceAll(\"`\",'').replaceAll('\\\"',\"\").replaceAll('\\'',\"\")+'`')\n insertFieldValues.push(i._parsedValue)\n }\n\n query=query\n .replaceAll('@fields',insertFieldNames.join(\",\"))\n .replaceAll('@values',insertFieldValues.join(\",\"))\n }\n\n if(query.indexOf(\"@insert\")!==-1){\n let oninsertNames=[]\n let oninsertValues=[]\n for(let i of fields){\n if(i.ignoreInInsert)\n continue;\n oninsertNames.push(i.name)\n oninsertValues.push(i._parsedValue)\n }\n query = query.replaceAll(\"@insert\",`(${oninsertNames.join(\",\")}) VALUES (${oninsertValues.join(\",\")})`)\n }\n\n if(query.indexOf(\"@onupdate\")!==-1){\n let onUpdate=[]\n for(let i of fields){\n if(i.ignoreInUpdate)\n continue;\n onUpdate.push('`'+i.name.replaceAll(\"`\",'').replaceAll('\\\"',\"\").replaceAll('\\'',\"\")+'` = '+i._parsedValue)\n }\n query = query.replaceAll(\"@onupdate\",onUpdate.join(\" , \"))\n \n }\n\n if(query.indexOf('@onduplicate')!==-1){\n let onDuplicate=[];\n for(let i of fields){\n if(!i.useInReplace)\n continue;\n onDuplicate.push('`'+i.name.replaceAll(\"`\",'').replaceAll('\\\"',\"\").replaceAll('\\'',\"\")+'` = '+i._parsedValue)\n }\n query = query.replaceAll(\"@onduplicate\",onDuplicate.join(\" , \"))\n }\n \n \n return query;\n }\n\n static prepareQueryFieldValue(value:string|number|boolean|null|undefined,system?:boolean):string|number|boolean|null|undefined{\n if(!system && typeof value === \"string\"){\n value = value?value.replaceAll('\"','\\\\\"'):null\n if(value!==null)\n value = '\"'+value+'\"'\n else\n value = \"NULL\"\n }\n if(value === null || value === undefined)\n return \"NULL\"\n return value;\n }\n\n\n async execute(query:string,rollbackQuery:string|null,transactionID:number):Promise<MysqlResult>{\n return new Promise(async (resolve:(data:MysqlResult)=>void,reject)=>{\n // Check pool\n if(!this.pool){\n logError(\"${MysqlService.js}\",\"No pool\")\n resolve({\n error:{\n code: \"NO_POOL\",\n errno: 100000,\n fatal: true,\n sql: query,\n name:\"NO_POOL\",\n message:\"Mysql pool not created\"\n },\n data:null,\n })\n return;\n }\n\n \n try{\n let conn:mysql.PoolConnection|null=null\n if(transactionID && transactionID>0){\n conn = this.transactions.find(i=>i.id===transactionID)?.conn ?? null;\n if(this.debug)\n console.log(\"Execute query on transaction: \",conn)\n }else{\n conn = await this.pool.getConnection();\n }\n\n if(this.debug)\n console.log(\"Execute query\",conn)\n\n // if connection not created\n if(!conn){\n logCrit(\"${MysqlService.js}\",`No connection created!`)\n resolve({\n error:{\n code: \"NO_CONN\",\n errno: 100001,\n fatal: true,\n sql: query,\n name:\"NO_CONN\",\n message:\"Mysql pool cant get connection\"\n },\n data:null,\n })\n return;\n }\n\n // Do send query\n for(let i of this.transactions){\n if(i.conn===conn){\n logInfo(\"Your connection is in transaction\")\n break;\n }\n }\n this.sendQuery(conn,query,resolve,rollbackQuery);\n\n }catch(e){\n logError(\"${MysqlService.js}\",e);\n \n // recreate pool, connection error\n if(`${e}`.indexOf('ECONNREFUSED')!==-1)\n this.recreatePool();\n \n resolve({\n error:{\n code: \"NO_CONN\",\n errno: 100001,\n fatal: true,\n sql: query,\n name:\"NO_CONN\",\n message:(e && typeof e === \"object\" && \"message\" in e as any)?(e as any).message:\"Mysql cant get connection\"\n },\n data:null\n })\n return;\n }\n });\n }\n\n async sendQuery(conn:mysql.PoolConnection,query:string,resolve:(data:MysqlResult)=>void,rollback:string|null){\n \n let errCatched=false;\n\n conn.on(\"error\",async err=>{\n errCatched=true;\n\n let rollbackError = null;\n if(rollback)\n rollbackError=(await this.queryAsync(conn,rollback)).err\n \n logError(\"${MysqlService.js}->conn.on('error')\",err)\n\n // close conn on success\n try{\n conn.release();\n conn.removeAllListeners();\n }catch(e){}\n \n resolve({\n error:{\n code: \"CONN_ERR\",\n errno: 100003,\n fatal: true,\n sql: query,\n name:\"CONN_ERR\",\n message:\"Error: \"+err\n },\n data:null,\n rollbackError:rollbackError\n })\n })\n\n\n\n logInfo(\"${MysqlService.js}\",query)\n\n // send query\n const queryResult = await this.queryAsync(conn,query);\n\n // handle error\n if(queryResult.err){\n \n // rollback\n let rollbackError=null;\n if(rollback)\n rollbackError=(await this.queryAsync(conn,rollback)).err\n\n // close connection\n try{\n conn.release();\n conn.removeAllListeners();\n }catch(e){}\n\n // determine duplicate error\n const dup = `${queryResult.err}`.toLowerCase().indexOf(\"er_dup_entry\")!==-1;\n\n logError(\"${MysqlService.js}->query error\",queryResult.err);\n\n resolve({\n error:queryResult.err,\n data:null,\n rollbackError:rollbackError,\n isDuplicateError:dup\n })\n }\n\n\n // close conn on success\n try{\n conn.release();\n conn.removeAllListeners();\n }catch(e){}\n\n // handle success\n resolve({\n error:queryResult.err,\n data:queryResult.results,\n })\n\n }\n\n\n // Async query wrapper to conn.query\n async queryAsync(conn:mysql.PoolConnection,query:string):Promise<{err:MysqlError|null,results?:any}>{\n\n let result=null;\n try{\n result = await conn.query(query);\n }catch(e){\n return {err:this.createMysqlQueryError(e)};\n }\n\n return {\n err:null,\n results:result[0],\n }\n }\n\n createMysqlQueryError(err:any):MysqlError{\n if(err && typeof err===\"object\" && \"code\" in err && \"errno\" in err && \"sql\" in err && \"name\" in err && \"message\" in err){\n return {\n code: err.code,\n errno: err.errno,\n sql: err.sql,\n name:err.name,\n message:err.message\n \n }\n }else{\n return {\n code: \"QUERY_ERR\",\n errno: 100002,\n fatal: true,\n sql: \"no query\",\n name:\"QUERY_ERR\",\n message:\"Error: \"+(err)?err:\"\"\n }\n }\n }\n}\n\n\nconst secret_key=\"AKLWkajw%^&dgwqhw#98453i23bfk23rn2knknglrgjeit\"\nconst secret_iv=\"rthadrfk23rn2kn#*FNKA@gt44df3tslrgj##!it\"\n\n// Generate secret hash with crypto to use for encryption\nconst key = createHash('sha512').update(secret_key).digest('hex').substring(0, 32)\nconst iv = createHash('sha512').update(secret_iv).digest('hex').substring(0, 16)\n\nconst decrypt =(encrypted:string):string|null=>{\n try{\n encrypted = Buffer.from(encrypted, 'base64').toString('binary');\n const decipher = createDecipheriv('aes-256-cbc', key, iv);\n let decrypted = decipher.update(encrypted, 'binary', 'utf8');\n decrypted += decipher.final('utf8');\n return decrypted;\n }catch(e){\n return null;\n }\n}\n\nconst encrypt = (txt:string):string|null=>{\n try{\n let encipher = createCipheriv('aes-256-cbc', key, iv),\n encrypted = encipher.update(txt, 'utf8', 'binary');\n encrypted += encipher.final('binary');\n return Buffer.from(encrypted, 'binary').toString('base64');\n }catch(e){\n return null;\n }\n}\n\nexport default MysqlService;"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"WSAPITransport.js","sourceRoot":"","sources":["../../src/apiServer/WSAPITransport.ts"],"names":[],"mappings":"","sourcesContent":[""]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"WebSocketHandler.js","sourceRoot":"","sources":["../../src/apiServer/WebSocketHandler.ts"],"names":[],"mappings":"","sourcesContent":[""]}
@@ -1,8 +0,0 @@
1
- export interface IWebsocket {
2
- }
3
- export interface IWebSocketServiceOptions {
4
- }
5
- export declare class Websocket implements IWebsocket {
6
- options: IWebSocketServiceOptions;
7
- constructor(opt?: IWebSocketServiceOptions);
8
- }
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Websocket = void 0;
4
- const getDefaultWebSocketServiceOptions = () => {
5
- return {
6
- endpoint: "/ws"
7
- };
8
- };
9
- class Websocket {
10
- options;
11
- constructor(opt) {
12
- this.options = { ...getDefaultWebSocketServiceOptions(), opt };
13
- }
14
- }
15
- exports.Websocket = Websocket;
@@ -1,8 +0,0 @@
1
- import { BaseService } from "./BaseService";
2
- export interface IWebSocketServiceOptions {
3
- }
4
- export declare class WebsocketService extends BaseService {
5
- options: IWebSocketServiceOptions;
6
- constructor(opt?: IWebSocketServiceOptions);
7
- init(): Promise<void>;
8
- }
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WebsocketService = void 0;
4
- const BaseService_1 = require("./BaseService");
5
- const getDefaultWebSocketServiceOptions = () => {
6
- return {};
7
- };
8
- class WebsocketService extends BaseService_1.BaseService {
9
- options;
10
- constructor(opt) {
11
- super("WebsocketService");
12
- this.options = { ...getDefaultWebSocketServiceOptions(), opt };
13
- }
14
- async init() {
15
- super.init();
16
- }
17
- }
18
- exports.WebsocketService = WebsocketService;
@@ -1 +0,0 @@
1
- {"version":3,"file":"WebsocketService.js","sourceRoot":"","sources":["../../src/apiServer/WebsocketService.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;AAM5C,MAAM,iCAAiC,GAAG,GAA2B,EAAE;IACnE,OAAO,EAEN,CAAA;AACL,CAAC,CAAA;AAGD,MAAa,gBAAiB,SAAQ,yBAAW;IAC7C,OAAO,CAA0B;IACjC,YAAY,GAA6B;QACrC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,EAAC,GAAG,iCAAiC,EAAE,EAAC,GAAG,EAAC,CAAA;IAC/D,CAAC;IAED,KAAK,CAAC,IAAI;QACN,KAAK,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;CACJ;AAVD,4CAUC","sourcesContent":["import { BaseService } from \"./BaseService\";\n\nexport interface IWebSocketServiceOptions{\n\n}\n\nconst getDefaultWebSocketServiceOptions = ():IWebSocketServiceOptions=>{\n return {\n\n }\n}\n\n\nexport class WebsocketService extends BaseService{\n options:IWebSocketServiceOptions;\n constructor(opt?:IWebSocketServiceOptions){\n super(\"WebsocketService\");\n this.options = {...getDefaultWebSocketServiceOptions(),opt}\n }\n\n async init(){\n super.init();\n }\n}"]}
@@ -1,39 +0,0 @@
1
- import { WebSocket } from "ws";
2
- import { IError } from "../structures/Interfaces";
3
- import Signal, { Req } from "badmfck-signal";
4
- export interface IClusterPacket {
5
- method: string;
6
- data?: any | null;
7
- error?: IError;
8
- callbackID: number;
9
- }
10
- export interface IHUBConnectionOptions {
11
- direction: "incoming" | "outgoing";
12
- ws: WebSocket;
13
- hostID: string;
14
- hostPrivateKey: string;
15
- hostPublicKey: string;
16
- hostURL: string;
17
- targetID: string | null;
18
- targetPublicKey: string | null;
19
- targetURL: string | null;
20
- onAuthorized: () => void;
21
- onClose: () => void;
22
- handlers: (Req<any, any> | Signal<any>)[];
23
- maxTimeout?: number;
24
- }
25
- export declare class HUBConnection {
26
- static callbackID: number;
27
- private callbacks;
28
- authorized: boolean;
29
- private ws;
30
- private onAuthorized;
31
- options: IHUBConnectionOptions;
32
- constructor(options: IHUBConnectionOptions);
33
- sendAuth(): Promise<void>;
34
- authorize(data: any): Promise<any | IError>;
35
- handleCallback(data: IClusterPacket): void;
36
- sendCallback(callbackID: number, data: IError | any): void;
37
- send(packet: IClusterPacket): Promise<any | IError | null>;
38
- close(): void;
39
- }
@@ -1,251 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.HUBConnection = void 0;
27
- const ws_1 = require("ws");
28
- const LogService_1 = require("../LogService");
29
- const DefaultErrors_1 = __importStar(require("../structures/DefaultErrors"));
30
- class HUBConnection {
31
- static callbackID = 1;
32
- callbacks = new Map();
33
- authorized = false;
34
- ws;
35
- onAuthorized;
36
- options;
37
- constructor(options) {
38
- (0, LogService_1.logInfo)("HUBConnection: new connection", options.hostID, options.targetID, options.direction === "outgoing" ? options.ws.url + " -->" : " <--");
39
- this.options = options;
40
- this.ws = options.ws;
41
- this.onAuthorized = options.onAuthorized;
42
- this.ws.on("close", () => {
43
- if (!this.authorized)
44
- return;
45
- (0, LogService_1.logInfo)("HUBConnection: connection closed");
46
- if (options.onClose)
47
- options.onClose();
48
- });
49
- this.ws.on("error", (e) => {
50
- (0, LogService_1.logError)("HUBConnection: connection error", e);
51
- });
52
- this.ws.on("open", () => {
53
- (0, LogService_1.logInfo)("HUBConnection: connection opened", options.direction);
54
- if (options.direction === "outgoing") {
55
- (0, LogService_1.logInfo)("HUBConnection: send authroization");
56
- this.sendAuth();
57
- }
58
- });
59
- this.ws.on("message", async (msg, isBinary) => {
60
- if (isBinary) {
61
- (0, LogService_1.logError)("HUBConnection: invalid packet type, must be a string");
62
- return;
63
- }
64
- let data = null;
65
- try {
66
- data = JSON.parse(msg.toString("utf8"));
67
- }
68
- catch (e) { }
69
- if (!data || !data.method) {
70
- (0, LogService_1.logError)("HUBConnection: invalid packet structure", data);
71
- return;
72
- }
73
- if (typeof data.method !== "string") {
74
- (0, LogService_1.logError)("HUBConnection: invalid packet structure", data);
75
- return;
76
- }
77
- const callbackID = parseInt(data.callbackID);
78
- if (data.method === "callback") {
79
- this.handleCallback(data);
80
- return;
81
- }
82
- ;
83
- if (!this.authorized && data.method === "auth") {
84
- const result = await this.authorize(data.data);
85
- if (DefaultErrors_1.ErrorUtils.isError(result)) {
86
- (0, LogService_1.logError)("HUBConnection: authorization failed", result);
87
- this.sendCallback(callbackID, result);
88
- return;
89
- }
90
- this.authorized = true;
91
- if (this.onAuthorized)
92
- this.onAuthorized();
93
- this.sendCallback(callbackID, result);
94
- return;
95
- }
96
- if (!this.authorized) {
97
- (0, LogService_1.logError)("HUBConnection: not authorized");
98
- this.sendCallback(callbackID, DefaultErrors_1.default.UNAUTHORIZED);
99
- return;
100
- }
101
- for (let i of options.handlers) {
102
- if (i.name === data.method) {
103
- const requestPacket = {
104
- data: data.data,
105
- authorized: this.authorized,
106
- connection: this
107
- };
108
- if (i.type === "signal") {
109
- i.invoke(requestPacket);
110
- if (data.callbackID > 0)
111
- this.sendCallback(callbackID, {});
112
- return;
113
- }
114
- else if (i.type === "request") {
115
- const result = await i.request(requestPacket);
116
- this.sendCallback(callbackID, result);
117
- return;
118
- }
119
- }
120
- }
121
- if (callbackID > 0)
122
- this.sendCallback(callbackID, { ...DefaultErrors_1.default.NOT_IMPLEMENTED, details: "method not found: " + data.method });
123
- else
124
- (0, LogService_1.logError)("HUBConnection: method not found", data.method);
125
- });
126
- setTimeout(() => {
127
- if (!this.authorized) {
128
- (0, LogService_1.logError)("HUBConnection: authorization timeout", this.authorized);
129
- this.close();
130
- }
131
- }, 15000);
132
- setInterval(() => {
133
- const now = +new Date();
134
- for (let [key, value] of this.callbacks) {
135
- if (now - value.time > (options.maxTimeout ?? 1000 * 60 * 15)) {
136
- value.callback({ method: "callback", data: null, callbackID: key, error: { ...DefaultErrors_1.default.TIMEOUT } });
137
- this.callbacks.delete(key);
138
- }
139
- }
140
- }, options.maxTimeout || 1000 * 60 * 15);
141
- }
142
- async sendAuth() {
143
- const response = await this.send({
144
- method: "auth",
145
- data: {
146
- hostID: this.options.targetID,
147
- targetPublicKey: this.options.hostPublicKey,
148
- targetURL: this.options.hostURL,
149
- targetID: this.options.hostID
150
- },
151
- callbackID: 1
152
- });
153
- if (DefaultErrors_1.ErrorUtils.isError(response)) {
154
- (0, LogService_1.logError)("HUBConnection: auth failed", response);
155
- this.close();
156
- return;
157
- }
158
- this.authorized = true;
159
- if (!response || !response.hostID || !response.hostPublicKey || !response.hostURL) {
160
- (0, LogService_1.logError)("HUBConnection: invalid auth response", response);
161
- this.close();
162
- return;
163
- }
164
- this.options.targetID = response.hostID;
165
- this.options.targetPublicKey = response.hostPublicKey;
166
- this.options.targetURL = response.hostURL;
167
- if (this.onAuthorized)
168
- this.onAuthorized();
169
- }
170
- async authorize(data) {
171
- if (typeof data !== "object" || !data || !data.hostID || !data.targetPublicKey || !data.targetID || !data.targetURL)
172
- return { ...DefaultErrors_1.default.BAD_REQUEST, stack: [data], details: "expecting {hostID:string,targetPublicKey:string,targetID:string,targetURL:string}" };
173
- if (data.hostID !== this.options.hostID)
174
- return { ...DefaultErrors_1.default.UNAUTHORIZED, details: "invalid targetID" };
175
- this.options.targetID = data.targetID;
176
- this.options.targetPublicKey = data.targetPublicKey;
177
- this.options.targetURL = data.targetURL;
178
- return {
179
- hostID: this.options.hostID,
180
- hostPublicKey: this.options.hostPublicKey,
181
- hostURL: this.options.hostURL
182
- };
183
- }
184
- handleCallback(data) {
185
- if (!this.callbacks.has(data.callbackID)) {
186
- (0, LogService_1.logError)("HUBConnection: callback not found", data);
187
- return;
188
- }
189
- const cb = this.callbacks.get(data.callbackID);
190
- if (cb) {
191
- cb.callback(data.data ?? data.error);
192
- this.callbacks.delete(data.callbackID);
193
- }
194
- }
195
- sendCallback(callbackID, data) {
196
- if (isNaN(callbackID) || callbackID <= 0) {
197
- (0, LogService_1.logError)("HUBConnection: invalid callbackID", callbackID, data);
198
- return;
199
- }
200
- if (this.ws && this.ws.readyState === ws_1.WebSocket.OPEN) {
201
- this.ws.send(JSON.stringify({
202
- method: "callback",
203
- error: DefaultErrors_1.ErrorUtils.isError(data) ? data : null,
204
- data: DefaultErrors_1.ErrorUtils.isError(data) ? null : data,
205
- callbackID: callbackID
206
- }));
207
- }
208
- else {
209
- (0, LogService_1.logError)("HUBConnection: ws not connected, cant send callback", this.options.direction, data);
210
- }
211
- }
212
- async send(packet) {
213
- if (!this.ws || this.ws.readyState !== ws_1.WebSocket.OPEN) {
214
- (0, LogService_1.logError)("HUBConnection: ws not connected, cant send packet", packet);
215
- return { ...DefaultErrors_1.default.SERVICE_NOT_WORKING, details: "ws not connected" };
216
- }
217
- let cb = null;
218
- const promise = new Promise((resolve) => cb = resolve);
219
- if (packet.callbackID > 0) {
220
- const callbackID = HUBConnection.callbackID++;
221
- this.callbacks.set(callbackID, { time: +new Date(), callback: cb });
222
- packet.callbackID = callbackID;
223
- }
224
- this.ws.send(JSON.stringify(packet), err => {
225
- if (err) {
226
- (0, LogService_1.logError)("HUBConnection: cant send packet", err);
227
- if (packet.callbackID > 0)
228
- this.callbacks.delete(packet.callbackID);
229
- cb(DefaultErrors_1.default.SERVICE_NOT_WORKING);
230
- }
231
- });
232
- if (packet.callbackID === 0)
233
- return null;
234
- return promise;
235
- }
236
- close() {
237
- (0, LogService_1.logInfo)("HUBConnection: close connection");
238
- this.callbacks.clear();
239
- this.authorized = false;
240
- if (this.ws) {
241
- try {
242
- this.ws.removeAllListeners();
243
- this.ws.close();
244
- this.ws.terminate();
245
- }
246
- catch (e) { }
247
- }
248
- }
249
- }
250
- exports.HUBConnection = HUBConnection;
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFVCQ29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGlTZXJ2ZXIvY2x1c3Rlci9IVUJDb25uZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkJBQXdDO0FBQ3hDLDhDQUFrRDtBQUNsRCw2RUFBd0U7QUFnQ3hFLE1BQWEsYUFBYTtJQUN0QixNQUFNLENBQUMsVUFBVSxHQUFRLENBQUMsQ0FBQztJQUNuQixTQUFTLEdBQThELElBQUksR0FBRyxFQUFFLENBQUM7SUFDekYsVUFBVSxHQUFXLEtBQUssQ0FBQztJQUNuQixFQUFFLENBQVc7SUFDYixZQUFZLENBQVU7SUFDOUIsT0FBTyxDQUF1QjtJQUU5QixZQUFZLE9BQTZCO1FBRXJDLElBQUEsb0JBQU8sRUFBQywrQkFBK0IsRUFBQyxPQUFPLENBQUMsTUFBTSxFQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUMsT0FBTyxDQUFDLFNBQVMsS0FBRyxVQUFVLENBQUEsQ0FBQyxDQUFBLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFDLE1BQU0sQ0FBQSxDQUFDLENBQUEsTUFBTSxDQUFDLENBQUM7UUFFckksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQTtRQUd4QyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsR0FBRSxFQUFFO1lBQ25CLElBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVTtnQkFDZixPQUFPO1lBQ1gsSUFBQSxvQkFBTyxFQUFDLGtDQUFrQyxDQUFDLENBQUE7WUFDM0MsSUFBRyxPQUFPLENBQUMsT0FBTztnQkFDZCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFD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QUFDO2dCQUNoQixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ3ZCO1lBQUEsT0FBTSxDQUFDLEVBQUMsR0FBRTtTQUNkO0lBQ0wsQ0FBQzs7QUFoVEwsc0NBa1RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmF3RGF0YSwgV2ViU29ja2V0IH0gZnJvbSBcIndzXCI7XG5pbXBvcnQgeyBsb2dFcnJvciwgbG9nSW5mbyB9IGZyb20gXCIuLi9Mb2dTZXJ2aWNlXCI7XG5pbXBvcnQgRGVmYXVsdEVycm9ycywgeyBFcnJvclV0aWxzIH0gZnJvbSBcIi4uL3N0cnVjdHVyZXMvRGVmYXVsdEVycm9yc1wiO1xuaW1wb3J0IHsgSUVycm9yIH0gZnJvbSBcIi4uL3N0cnVjdHVyZXMvSW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgcHJpdmF0ZURlY3J5cHQgfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgU2lnbmFsLCB7IFJlcSB9IGZyb20gXCJiYWRtZmNrLXNpZ25hbFwiO1xuaW1wb3J0IHsgSVdlYnNvY2tldFBhY2tldCB9IGZyb20gXCIuLi9leHRlcm5hbC9FeHRlcm5hbFNlcnZpY2VcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJQ2x1c3RlclBhY2tldHtcbiAgICBtZXRob2Q6c3RyaW5nLFxuICAgIGRhdGE/OmFueXxudWxsLFxuICAgIGVycm9yPzpJRXJyb3IsXG4gICAgY2FsbGJhY2tJRDpudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSFVCQ29ubmVjdGlvbk9wdGlvbnN7XG4gICAgZGlyZWN0aW9uOlwiaW5jb21pbmdcInxcIm91dGdvaW5nXCIsXG4gICAgd3M6V2ViU29ja2V0LFxuXG4gICAgaG9zdElEOnN0cmluZyxcbiAgICBob3N0UHJpdmF0ZUtleTpzdHJpbmcsXG4gICAgaG9zdFB1YmxpY0tleTpzdHJpbmcsXG4gICAgaG9zdFVSTDpzdHJpbmcsXG5cbiAgICB0YXJnZXRJRDpzdHJpbmd8bnVsbCxcbiAgICB0YXJnZXRQdWJsaWNLZXk6c3RyaW5nfG51bGwsXG4gICAgdGFyZ2V0VVJMOnN0cmluZ3xudWxsLFxuXG4gICAgb25BdXRob3JpemVkOigpPT52b2lkLFxuICAgIG9uQ2xvc2U6KCk9PnZvaWQsXG4gICAgaGFuZGxlcnM6KFJlcTxhbnksYW55PnxTaWduYWw8YW55PilbXSxcbiAgICBtYXhUaW1lb3V0PzpudW1iZXJcbn1cblxuZXhwb3J0IGNsYXNzIEhVQkNvbm5lY3Rpb257XG4gICAgc3RhdGljIGNhbGxiYWNrSUQ6bnVtYmVyPTE7XG4gICAgcHJpdmF0ZSBjYWxsYmFja3M6TWFwPG51bWJlcix7dGltZTpudW1iZXIsY2FsbGJhY2s6KHJlc3VsdDphbnl8SUVycm9yKT0+dm9pZH0+PW5ldyBNYXAoKTtcbiAgICBhdXRob3JpemVkOmJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIHdzOldlYlNvY2tldDtcbiAgICBwcml2YXRlIG9uQXV0aG9yaXplZDooKT0+dm9pZDtcbiAgICBvcHRpb25zOklIVUJDb25uZWN0aW9uT3B0aW9ucztcbiAgICBcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOklIVUJDb25uZWN0aW9uT3B0aW9ucyl7XG4gICAgICAgIFxuICAgICAgICBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogbmV3IGNvbm5lY3Rpb25cIixvcHRpb25zLmhvc3RJRCxvcHRpb25zLnRhcmdldElELG9wdGlvbnMuZGlyZWN0aW9uPT09XCJvdXRnb2luZ1wiP29wdGlvbnMud3MudXJsK1wiIC0tPlwiOlwiIDwtLVwiKTtcblxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLndzID0gb3B0aW9ucy53cztcbiAgICAgICAgdGhpcy5vbkF1dGhvcml6ZWQgPSBvcHRpb25zLm9uQXV0aG9yaXplZFxuICAgICAgICBcblxuICAgICAgICB0aGlzLndzLm9uKFwiY2xvc2VcIiwoKT0+e1xuICAgICAgICAgICAgaWYoIXRoaXMuYXV0aG9yaXplZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogY29ubmVjdGlvbiBjbG9zZWRcIilcbiAgICAgICAgICAgIGlmKG9wdGlvbnMub25DbG9zZSlcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9uQ2xvc2UoKTtcbiAgICAgICAgfSlcblxuICAgICAgICB0aGlzLndzLm9uKFwiZXJyb3JcIiwoZSk9PntcbiAgICAgICAgICAgIGxvZ0Vycm9yKFwiSFVCQ29ubmVjdGlvbjogY29ubmVjdGlvbiBlcnJvclwiLGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLndzLm9uKFwib3BlblwiLCgpPT57XG4gICAgICAgICAgICBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogY29ubmVjdGlvbiBvcGVuZWRcIixvcHRpb25zLmRpcmVjdGlvbilcbiAgICAgICAgICAgIGlmKG9wdGlvbnMuZGlyZWN0aW9uPT09XCJvdXRnb2luZ1wiKXtcbiAgICAgICAgICAgICAgICBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogc2VuZCBhdXRocm9pemF0aW9uXCIpXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kQXV0aCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMud3Mub24oXCJtZXNzYWdlXCIsYXN5bmMgKG1zZzpSYXdEYXRhLGlzQmluYXJ5KT0+e1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZihpc0JpbmFyeSl7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoXCJIVUJDb25uZWN0aW9uOiBpbnZhbGlkIHBhY2tldCB0eXBlLCBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGRhdGEgPSBudWxsO1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKG1zZy50b1N0cmluZyhcInV0ZjhcIikpXG4gICAgICAgICAgICB9Y2F0Y2goZSl7fVxuXG4gICAgICAgICAgICAvL2xvZ0luZm8oXCJIVUJDb25uZWN0aW9uOiBtZXNzYWdlIHJlY2VpdmVkXCIsdGhpcy5vcHRpb25zLmRpcmVjdGlvbixkYXRhKTtcblxuICAgICAgICAgICAgLy8gY2hlY2sgcGFja2V0IHN0cnVjdHVyZVxuICAgICAgICAgICAgaWYoIWRhdGEgfHwgIWRhdGEubWV0aG9kKXtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IGludmFsaWQgcGFja2V0IHN0cnVjdHVyZVwiLGRhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaGFuZGxlIHBhY2tldHNcbiAgICAgICAgICAgIGlmKHR5cGVvZiBkYXRhLm1ldGhvZCAhPT0gXCJzdHJpbmdcIil7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoXCJIVUJDb25uZWN0aW9uOiBpbnZhbGlkIHBhY2tldCBzdHJ1Y3R1cmVcIixkYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNhbGxiYWNrSURcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrSUQgPSBwYXJzZUludChkYXRhLmNhbGxiYWNrSUQpO1xuICAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gaGFuZGxlIGNhbGxiYWNrc1xuICAgICAgICAgICAgIGlmKGRhdGEubWV0aG9kPT09XCJjYWxsYmFja1wiKXtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNhbGxiYWNrKGRhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYoIXRoaXMuYXV0aG9yaXplZCAmJiBkYXRhLm1ldGhvZD09PVwiYXV0aFwiKXtcbiAgICAgICAgICAgICAgICAvLyBkbyBhdXRob3JpemF0aW9uICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYXV0aG9yaXplKGRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYoRXJyb3JVdGlscy5pc0Vycm9yKHJlc3VsdCkpe1xuICAgICAgICAgICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IGF1dGhvcml6YXRpb24gZmFpbGVkXCIscmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kQ2FsbGJhY2soY2FsbGJhY2tJRCxyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5vbkF1dGhvcml6ZWQpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25BdXRob3JpemVkKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kQ2FsbGJhY2soY2FsbGJhY2tJRCxyZXN1bHQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYoIXRoaXMuYXV0aG9yaXplZCl7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoXCJIVUJDb25uZWN0aW9uOiBub3QgYXV0aG9yaXplZFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRDYWxsYmFjayhjYWxsYmFja0lELERlZmF1bHRFcnJvcnMuVU5BVVRIT1JJWkVEKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGhhbmRsZSBtZXRob2RzXG4gICAgICAgICAgICBmb3IobGV0IGkgb2Ygb3B0aW9ucy5oYW5kbGVycyl7XG4gICAgICAgICAgICAgICAgaWYoaS5uYW1lID09PSBkYXRhLm1ldGhvZCl7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdFBhY2tldDpJV2Vic29ja2V0UGFja2V0PXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6ZGF0YS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXplZDp0aGlzLmF1dGhvcml6ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uOnRoaXNcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmKGkudHlwZSA9PT0gXCJzaWduYWxcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAoaSBhcyBTaWduYWw8SVdlYnNvY2tldFBhY2tldD4pLmludm9rZShyZXF1ZXN0UGFja2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuY2FsbGJhY2tJRD4wKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZENhbGxiYWNrKGNhbGxiYWNrSUQse30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihpLnR5cGUgPT09IFwicmVxdWVzdFwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IChpIGFzIFJlcTxJV2Vic29ja2V0UGFja2V0LGFueT4pLnJlcXVlc3QocmVxdWVzdFBhY2tldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbmRDYWxsYmFjayhjYWxsYmFja0lELHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKGNhbGxiYWNrSUQ+MClcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRDYWxsYmFjayhjYWxsYmFja0lELHsuLi5EZWZhdWx0RXJyb3JzLk5PVF9JTVBMRU1FTlRFRCxkZXRhaWxzOlwibWV0aG9kIG5vdCBmb3VuZDogXCIrZGF0YS5tZXRob2R9KTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IG1ldGhvZCBub3QgZm91bmRcIixkYXRhLm1ldGhvZCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgIH0pXG5cbiAgICAgICAgXG4gICAgICAgIHNldFRpbWVvdXQoKCk9PntcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dGhvcml6ZWQpe1xuICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiSFVCQ29ubmVjdGlvbjogYXV0aG9yaXphdGlvbiB0aW1lb3V0XCIsdGhpcy5hdXRob3JpemVkKVxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwxNTAwMCk7IC8vIDE1c2VjIGZvciBhdXRob3JpemF0aW9uXG4gICAgICAgIFxuXG4gICAgICAgIHNldEludGVydmFsKCgpPT57XG4gICAgICAgICAgICBjb25zdCBub3cgPSArbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGZvcihsZXQgW2tleSx2YWx1ZV0gb2YgdGhpcy5jYWxsYmFja3Mpe1xuICAgICAgICAgICAgICAgIGlmKG5vdy12YWx1ZS50aW1lPihvcHRpb25zLm1heFRpbWVvdXQgPz8gMTAwMCo2MCoxNSkpe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5jYWxsYmFjayh7bWV0aG9kOlwiY2FsbGJhY2tcIixkYXRhOm51bGwsY2FsbGJhY2tJRDprZXksZXJyb3I6ey4uLkRlZmF1bHRFcnJvcnMuVElNRU9VVH19KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LG9wdGlvbnMubWF4VGltZW91dCB8fCAxMDAwKjYwKjE1KTtcblxuICAgIH1cblxuXG4gICAgYXN5bmMgc2VuZEF1dGgoKXtcbiAgICAgICAvLyBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogc2VuZCBhdXRoIHBhY2tldFwiKVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZCh7XG4gICAgICAgICAgICBtZXRob2Q6XCJhdXRoXCIsXG4gICAgICAgICAgICBkYXRhOntcbiAgICAgICAgICAgICAgICBob3N0SUQ6dGhpcy5vcHRpb25zLnRhcmdldElELCAvLyBSRU1PVEUgSE9TVCBJRFxuICAgICAgICAgICAgICAgIHRhcmdldFB1YmxpY0tleTp0aGlzLm9wdGlvbnMuaG9zdFB1YmxpY0tleSwgLy8gTE9DQUwgUFVCTElDIEtFWVxuICAgICAgICAgICAgICAgIHRhcmdldFVSTDp0aGlzLm9wdGlvbnMuaG9zdFVSTCwgLy8gTE9DQUwgVVJMXG4gICAgICAgICAgICAgICAgdGFyZ2V0SUQ6dGhpcy5vcHRpb25zLmhvc3RJRCAvLyBMT0NBTCBIT1NUIElEXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2tJRDoxXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYoRXJyb3JVdGlscy5pc0Vycm9yKHJlc3BvbnNlKSl7XG4gICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IGF1dGggZmFpbGVkXCIscmVzcG9uc2UpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hdXRob3JpemVkPXRydWU7XG4gICAgICAgIFxuICAgICAgICBpZighcmVzcG9uc2UgfHwgIXJlc3BvbnNlLmhvc3RJRCB8fCAhcmVzcG9uc2UuaG9zdFB1YmxpY0tleSB8fCAhcmVzcG9uc2UuaG9zdFVSTCl7XG4gICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IGludmFsaWQgYXV0aCByZXNwb25zZVwiLHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gc3RvcmUgdGFyZ2V0SUQsIHRhcmdldFB1YmxpY0tleSwgdGFyZ2V0VVJMXG4gICAgICAgIHRoaXMub3B0aW9ucy50YXJnZXRJRCA9IHJlc3BvbnNlLmhvc3RJRDtcbiAgICAgICAgdGhpcy5vcHRpb25zLnRhcmdldFB1YmxpY0tleSA9IHJlc3BvbnNlLmhvc3RQdWJsaWNLZXk7XG4gICAgICAgIHRoaXMub3B0aW9ucy50YXJnZXRVUkwgPSByZXNwb25zZS5ob3N0VVJMO1xuICAgICAgICBcbiAgICAgICAvLyBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogYXV0aCBzdWNjZXNzXCIscmVzcG9uc2UpO1xuXG4gICAgICAgIGlmKHRoaXMub25BdXRob3JpemVkKVxuICAgICAgICAgICAgdGhpcy5vbkF1dGhvcml6ZWQoKTtcbiAgICAgICAgXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIGRhdGEgLT4ge3NpZ25hdHVyZTplbmNyeXB0ZWQgaHViIGtleSxwdWJsaWNLZXk6ZW5jcnlwdGVkIHB1YmxpYyBrZXksIGNsaWVudElEOmNsaWVudElEfVxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIGFzeW5jIGF1dGhvcml6ZShkYXRhOmFueSk6UHJvbWlzZTxhbnl8SUVycm9yPntcblxuICAgICAgICAvL2xvZ0luZm8oXCJIVUJDb25uZWN0aW9uOiB0cnkgdG8gYXV0aG9yaXplIGNvbm5lY3Rpb25cIixkYXRhKTtcblxuICAgICAgICBpZih0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIiB8fCAhZGF0YSB8fCAhZGF0YS5ob3N0SUQgfHwgIWRhdGEudGFyZ2V0UHVibGljS2V5IHx8ICFkYXRhLnRhcmdldElEIHx8ICFkYXRhLnRhcmdldFVSTClcbiAgICAgICAgICAgIHJldHVybiB7Li4uRGVmYXVsdEVycm9ycy5CQURfUkVRVUVTVCxzdGFjazpbZGF0YV0sZGV0YWlsczpcImV4cGVjdGluZyB7aG9zdElEOnN0cmluZyx0YXJnZXRQdWJsaWNLZXk6c3RyaW5nLHRhcmdldElEOnN0cmluZyx0YXJnZXRVUkw6c3RyaW5nfVwifTtcblxuICAgICAgICBpZihkYXRhLmhvc3RJRCAhPT0gdGhpcy5vcHRpb25zLmhvc3RJRClcbiAgICAgICAgICAgIHJldHVybiB7Li4uRGVmYXVsdEVycm9ycy5VTkFVVEhPUklaRUQsZGV0YWlsczpcImludmFsaWQgdGFyZ2V0SURcIn07XG5cbiAgICAgICAgLy9sb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogYXV0aG9yaXplIHN1Y2Nlc3NcIix0aGlzLm9wdGlvbnMuZGlyZWN0aW9uLGRhdGEpO1xuXG4gICAgICAgIC8vMS4gc3RvcmUgdGFyZ2V0IGluZm9cbiAgICAgICAgdGhpcy5vcHRpb25zLnRhcmdldElEID0gZGF0YS50YXJnZXRJRDtcbiAgICAgICAgdGhpcy5vcHRpb25zLnRhcmdldFB1YmxpY0tleSA9IGRhdGEudGFyZ2V0UHVibGljS2V5O1xuICAgICAgICB0aGlzLm9wdGlvbnMudGFyZ2V0VVJMID0gZGF0YS50YXJnZXRVUkw7XG5cbiAgICAgICAgLy8yLiBzZW5kIGxvY2FsIGluZm9cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhvc3RJRDp0aGlzLm9wdGlvbnMuaG9zdElELFxuICAgICAgICAgICAgaG9zdFB1YmxpY0tleTp0aGlzLm9wdGlvbnMuaG9zdFB1YmxpY0tleSxcbiAgICAgICAgICAgIGhvc3RVUkw6dGhpcy5vcHRpb25zLmhvc3RVUkxcbiAgICAgICAgfVxuXG4gICAgfVxuXG5cbiAgICBoYW5kbGVDYWxsYmFjayhkYXRhOklDbHVzdGVyUGFja2V0KXtcbiAgICAgICAgXG4gICAgICAgIGlmKCF0aGlzLmNhbGxiYWNrcy5oYXMoZGF0YS5jYWxsYmFja0lEKSl7XG4gICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IGNhbGxiYWNrIG5vdCBmb3VuZFwiLGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vbG9nSW5mbyhcIkhVQkNvbm5lY3Rpb246IGV4ZWN1dGUgY2FsbGJhY2tcIixkYXRhKTtcblxuICAgICAgICBcbiAgICAgICAgY29uc3QgY2IgPSB0aGlzLmNhbGxiYWNrcy5nZXQoZGF0YS5jYWxsYmFja0lEKTtcbiAgICAgICAgaWYoY2Ipe1xuICAgICAgICAgICAgY2IuY2FsbGJhY2soZGF0YS5kYXRhID8/IGRhdGEuZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuZGVsZXRlKGRhdGEuY2FsbGJhY2tJRCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBcbiAgICBzZW5kQ2FsbGJhY2soY2FsbGJhY2tJRDpudW1iZXIsZGF0YTpJRXJyb3J8YW55KXtcblxuICAgICAgICBpZihpc05hTihjYWxsYmFja0lEKSB8fCBjYWxsYmFja0lEPD0wKXtcbiAgICAgICAgICAgIGxvZ0Vycm9yKFwiSFVCQ29ubmVjdGlvbjogaW52YWxpZCBjYWxsYmFja0lEXCIsY2FsbGJhY2tJRCxkYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgLy8gbG9nSW5mbyhcIkhVQkNvbm5lY3Rpb246IHNlbmQgY2FsbGJhY2tcIixkYXRhKTtcblxuICAgICAgICBpZih0aGlzLndzICYmIHRoaXMud3MucmVhZHlTdGF0ZT09PVdlYlNvY2tldC5PUEVOKXtcbiAgICAgICAgICAgIHRoaXMud3Muc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgbWV0aG9kOlwiY2FsbGJhY2tcIixcbiAgICAgICAgICAgICAgICBlcnJvcjpFcnJvclV0aWxzLmlzRXJyb3IoZGF0YSk/ZGF0YTpudWxsLFxuICAgICAgICAgICAgICAgIGRhdGE6RXJyb3JVdGlscy5pc0Vycm9yKGRhdGEpP251bGw6ZGF0YSxcbiAgICAgICAgICAgICAgICBjYWxsYmFja0lEOmNhbGxiYWNrSURcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGxvZ0Vycm9yKFwiSFVCQ29ubmVjdGlvbjogd3Mgbm90IGNvbm5lY3RlZCwgY2FudCBzZW5kIGNhbGxiYWNrXCIsdGhpcy5vcHRpb25zLmRpcmVjdGlvbixkYXRhKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgc2VuZChwYWNrZXQ6SUNsdXN0ZXJQYWNrZXQpOlByb21pc2U8YW55fElFcnJvcnxudWxsPntcbiAgICAgICAvLyBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogc2VuZCBwYWNrZXRcIix0aGlzLm9wdGlvbnMuZGlyZWN0aW9uLHBhY2tldCk7XG4gICAgICAgIGlmKCF0aGlzLndzIHx8IHRoaXMud3MucmVhZHlTdGF0ZSAhPT0gV2ViU29ja2V0Lk9QRU4pe1xuICAgICAgICAgICAgbG9nRXJyb3IoXCJIVUJDb25uZWN0aW9uOiB3cyBub3QgY29ubmVjdGVkLCBjYW50IHNlbmQgcGFja2V0XCIscGFja2V0KVxuICAgICAgICAgICAgcmV0dXJuIHsuLi5EZWZhdWx0RXJyb3JzLlNFUlZJQ0VfTk9UX1dPUktJTkcsZGV0YWlsczpcIndzIG5vdCBjb25uZWN0ZWRcIn07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGxldCBjYj1udWxsO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8SUNsdXN0ZXJQYWNrZXR8bnVsbD4oKHJlc29sdmUpPT5jYj1yZXNvbHZlKTtcblxuICAgICAgICBpZihwYWNrZXQuY2FsbGJhY2tJRD4wKXtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrSUQgPSBIVUJDb25uZWN0aW9uLmNhbGxiYWNrSUQrKztcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnNldChjYWxsYmFja0lELHt0aW1lOituZXcgRGF0ZSgpLGNhbGxiYWNrOmNiIX0pO1xuICAgICAgICAgICAgcGFja2V0LmNhbGxiYWNrSUQgPSBjYWxsYmFja0lEO1xuICAgICAgICB9XG5cbiAgICAgICAgLy90b2RvIC0gZW5jcnlwdCBkYXRhXG5cbiAgICAgICAgdGhpcy53cy5zZW5kKEpTT04uc3RyaW5naWZ5KHBhY2tldCksZXJyPT57XG4gICAgICAgICAgICBpZihlcnIpe1xuICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiSFVCQ29ubmVjdGlvbjogY2FudCBzZW5kIHBhY2tldFwiLGVycik7XG4gICAgICAgICAgICAgICAgaWYocGFja2V0LmNhbGxiYWNrSUQ+MClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuZGVsZXRlKHBhY2tldC5jYWxsYmFja0lEKTtcbiAgICAgICAgICAgICAgICBjYiEoRGVmYXVsdEVycm9ycy5TRVJWSUNFX05PVF9XT1JLSU5HKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYocGFja2V0LmNhbGxiYWNrSUQ9PT0wKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG5cbiAgICBjbG9zZSgpe1xuICAgICAgICBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogY2xvc2UgY29ubmVjdGlvblwiKVxuICAgICAgICB0aGlzLmNhbGxiYWNrcy5jbGVhcigpO1xuICAgICAgICB0aGlzLmF1dGhvcml6ZWQ9ZmFsc2U7XG5cbiAgICAgICAgaWYodGhpcy53cyl7XG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgdGhpcy53cy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLndzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy53cy50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgIH1jYXRjaChlKXt9XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuIl19
@@ -1 +0,0 @@
1
- {"version":3,"file":"HUBConnection.js","sourceRoot":"","sources":["../../../src/apiServer/cluster/HUBConnection.ts"],"names":[],"mappings":"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","sourcesContent":["import { RawData, WebSocket } from \"ws\";\nimport { logError, logInfo } from \"../LogService\";\nimport DefaultErrors, { ErrorUtils } from \"../structures/DefaultErrors\";\nimport { IError } from \"../structures/Interfaces\";\nimport { privateDecrypt } from \"crypto\";\nimport Signal, { Req } from \"badmfck-signal\";\nimport { IWebsocketPacket } from \"../HUBService\";\n\nexport interface IClusterPacket{\n method:string,\n data?:any|null,\n error?:IError,\n callbackID:number\n}\n\nexport interface IHUBConnectionOptions{\n direction:\"incoming\"|\"outgoing\",\n ws:WebSocket,\n\n hostID:string,\n hostPrivateKey:string,\n hostPublicKey:string,\n hostURL:string,\n\n targetID:string|null,\n targetPublicKey:string|null,\n targetURL:string|null,\n\n onAuthorized:()=>void,\n onClose:()=>void,\n handlers:(Req<any,any>|Signal<any>)[],\n maxTimeout?:number\n}\n\nexport class HUBConnection{\n static callbackID:number=1;\n private callbacks:Map<number,{time:number,callback:(result:any|IError)=>void}>=new Map();\n authorized:boolean = false;\n private ws:WebSocket;\n private onAuthorized:()=>void;\n options:IHUBConnectionOptions;\n \n constructor(options:IHUBConnectionOptions){\n \n logInfo(\"HUBConnection: new connection\",options.hostID,options.targetID,options.direction===\"outgoing\"?options.ws.url+\" -->\":\" <--\");\n\n this.options = options;\n this.ws = options.ws;\n this.onAuthorized = options.onAuthorized\n \n\n this.ws.on(\"close\",()=>{\n if(!this.authorized)\n return;\n logInfo(\"HUBConnection: connection closed\")\n if(options.onClose)\n options.onClose();\n })\n\n this.ws.on(\"error\",(e)=>{\n logError(\"HUBConnection: connection error\",e);\n });\n\n this.ws.on(\"open\",()=>{\n logInfo(\"HUBConnection: connection opened\",options.direction)\n if(options.direction===\"outgoing\"){\n logInfo(\"HUBConnection: send authroization\")\n this.sendAuth();\n }\n })\n\n this.ws.on(\"message\",async (msg:RawData,isBinary)=>{\n \n if(isBinary){\n logError(\"HUBConnection: invalid packet type, must be a string\");\n return;\n }\n\n let data = null;\n try{\n data = JSON.parse(msg.toString(\"utf8\"))\n }catch(e){}\n\n //logInfo(\"HUBConnection: message received\",this.options.direction,data);\n\n // check packet structure\n if(!data || !data.method || !data.callbackID){\n logError(\"HUBConnection: invalid packet structure\",data);\n return;\n }\n\n // handle packets\n if(typeof data.method !== \"string\" || typeof data.callbackID !== \"number\"){\n logError(\"HUBConnection: invalid packet structure\",data);\n return;\n }\n\n // callbackID\n const callbackID = parseInt(data.callbackID);\n \n // handle callbacks\n if(data.method===\"callback\"){\n this.handleCallback(data);\n return;\n };\n\n \n if(!this.authorized && data.method===\"auth\"){\n // do authorization \n const result = await this.authorize(data.data);\n if(ErrorUtils.isError(result)){\n logError(\"HUBConnection: authorization failed\",result);\n this.sendCallback(callbackID,result);\n return;\n }\n this.authorized = true;\n if(this.onAuthorized)\n this.onAuthorized();\n this.sendCallback(callbackID,result);\n return;\n }\n\n \n \n if(!this.authorized){\n logError(\"HUBConnection: not authorized\");\n this.sendCallback(callbackID,DefaultErrors.UNAUTHORIZED);\n return;\n }\n\n // handle methods\n for(let i of options.handlers){\n if(i.name === data.method){\n\n const requestPacket:IWebsocketPacket={\n data:data.data,\n authorized:this.authorized,\n connection:this\n }\n\n if(i.type === \"signal\"){\n (i as Signal<IWebsocketPacket>).invoke(requestPacket);\n if(data.callbackID>0)\n this.sendCallback(callbackID,{});\n return;\n }else if(i.type === \"request\"){\n const result = await (i as Req<IWebsocketPacket,any>).request(requestPacket);\n this.sendCallback(callbackID,result);\n return;\n }\n }\n }\n\n this.sendCallback(callbackID,{...DefaultErrors.NOT_IMPLEMENTED,details:\"method not found: \"+data.method});\n \n })\n\n \n setTimeout(()=>{\n if(!this.authorized){\n logError(\"HUBConnection: authorization timeout\",this.authorized)\n this.close();\n }\n },15000); // 15sec for authorization\n \n\n setInterval(()=>{\n const now = +new Date();\n for(let [key,value] of this.callbacks){\n if(now-value.time>(options.maxTimeout ?? 1000*60*15)){\n value.callback({method:\"callback\",data:null,callbackID:key,error:{...DefaultErrors.TIMEOUT}});\n this.callbacks.delete(key);\n }\n }\n },options.maxTimeout || 1000*60*15);\n\n }\n\n\n async sendAuth(){\n // logInfo(\"HUBConnection: send auth packet\")\n const response = await this.send({\n method:\"auth\",\n data:{\n hostID:this.options.targetID, // REMOTE HOST ID\n targetPublicKey:this.options.hostPublicKey, // LOCAL PUBLIC KEY\n targetURL:this.options.hostURL, // LOCAL URL\n targetID:this.options.hostID // LOCAL HOST ID\n },\n callbackID:1\n })\n\n if(ErrorUtils.isError(response)){\n logError(\"HUBConnection: auth failed\",response);\n this.close();\n return;\n }\n\n this.authorized=true;\n \n if(!response || !response.hostID || !response.hostPublicKey || !response.hostURL){\n logError(\"HUBConnection: invalid auth response\",response);\n this.close();\n return;\n }\n\n\n // store targetID, targetPublicKey, targetURL\n this.options.targetID = response.hostID;\n this.options.targetPublicKey = response.hostPublicKey;\n this.options.targetURL = response.hostURL;\n \n // logInfo(\"HUBConnection: auth success\",response);\n\n if(this.onAuthorized)\n this.onAuthorized();\n \n }\n\n /**\n * \n * @param data -> {signature:encrypted hub key,publicKey:encrypted public key, clientID:clientID}\n * @returns \n */\n async authorize(data:any):Promise<any|IError>{\n\n //logInfo(\"HUBConnection: try to authorize connection\",data);\n\n if(typeof data !== \"object\" || !data || !data.hostID || !data.targetPublicKey || !data.targetID || !data.targetURL)\n return {...DefaultErrors.BAD_REQUEST,stack:[data],details:\"expecting {hostID:string,targetPublicKey:string,targetID:string,targetURL:string}\"};\n\n if(data.hostID !== this.options.hostID)\n return {...DefaultErrors.UNAUTHORIZED,details:\"invalid targetID\"};\n\n //logInfo(\"HUBConnection: authorize success\",this.options.direction,data);\n\n //1. store target info\n this.options.targetID = data.targetID;\n this.options.targetPublicKey = data.targetPublicKey;\n this.options.targetURL = data.targetURL;\n\n //2. send local info\n return {\n hostID:this.options.hostID,\n hostPublicKey:this.options.hostPublicKey,\n hostURL:this.options.hostURL\n }\n\n }\n\n\n handleCallback(data:IClusterPacket){\n \n if(!this.callbacks.has(data.callbackID)){\n logError(\"HUBConnection: callback not found\",data);\n return;\n }\n //logInfo(\"HUBConnection: execute callback\",data);\n\n \n const cb = this.callbacks.get(data.callbackID);\n if(cb){\n cb.callback(data.data ?? data.error);\n this.callbacks.delete(data.callbackID);\n }\n }\n\n \n sendCallback(callbackID:number,data:IError|any){\n\n if(isNaN(callbackID) || callbackID<=0){\n logError(\"HUBConnection: invalid callbackID\",callbackID,data);\n return;\n }\n\n // logInfo(\"HUBConnection: send callback\",data);\n\n if(this.ws && this.ws.readyState===WebSocket.OPEN){\n this.ws.send(JSON.stringify({\n method:\"callback\",\n error:ErrorUtils.isError(data)?data:null,\n data:ErrorUtils.isError(data)?null:data,\n callbackID:callbackID\n }))\n }else{\n logError(\"HUBConnection: ws not connected, cant send callback\",this.options.direction,data)\n }\n }\n\n async send(packet:IClusterPacket):Promise<any|IError|null>{\n // logInfo(\"HUBConnection: send packet\",this.options.direction,packet);\n if(!this.ws || this.ws.readyState !== WebSocket.OPEN){\n logError(\"HUBConnection: ws not connected, cant send packet\",packet)\n return {...DefaultErrors.SERVICE_NOT_WORKING,details:\"ws not connected\"};\n }\n \n let cb=null;\n const promise = new Promise<IClusterPacket|null>((resolve)=>cb=resolve);\n\n if(packet.callbackID>0){\n const callbackID = HUBConnection.callbackID++;\n this.callbacks.set(callbackID,{time:+new Date(),callback:cb!});\n packet.callbackID = callbackID;\n }\n\n //todo - encrypt data\n\n this.ws.send(JSON.stringify(packet),err=>{\n if(err){\n logError(\"HUBConnection: cant send packet\",err);\n if(packet.callbackID>0)\n this.callbacks.delete(packet.callbackID);\n cb!(DefaultErrors.SERVICE_NOT_WORKING);\n }\n });\n\n if(packet.callbackID===0)\n return null;\n\n return promise;\n }\n\n\n close(){\n logInfo(\"HUBConnection: close connection\")\n this.callbacks.clear();\n this.authorized=false;\n\n if(this.ws){\n try{\n this.ws.removeAllListeners();\n this.ws.close();\n this.ws.terminate();\n }catch(e){}\n }\n }\n\n}\n\n"]}
File without changes
@@ -1,2 +0,0 @@
1
- "use strict";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFVCSGFuZGxyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpU2VydmVyL2NsdXN0ZXIvSFVCSGFuZGxyZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIiJdfQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"HUBHandlres.js","sourceRoot":"","sources":["../../../src/apiServer/cluster/HUBHandlres.ts"],"names":[],"mappings":"","sourcesContent":[""]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Deployment.js","sourceRoot":"","sources":["../../../src/apiServer/deployment/Deployment.ts"],"names":[],"mappings":";;;;;;AACA,kDAA+C;AAC/C,oDAA4B;AAE5B,8CAAwC;AAGxC,MAAa,UAAW,SAAQ,2BAAY;IAExC,IAAI,CAAO;IACX,YAAY,EAAC,KAAK,EAAC,QAAQ,EAAgC;QACvD,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,GAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxF,IAAA,oBAAO,EAAC,4CAA4C,GAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/D,IAAI,CAAC,iBAAiB,CAAC;YACnB,EAAC,iBAAiB,EAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,CAAC,IAAI,EAAC,OAAO,EAAC,IAAI,CAAC,iBAAiB,EAAC;SAC7E,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,GAAkB;QAGtC,OAAO,EAAE,CAAA;IACb,CAAC;CACJ;AAjBD,gCAiBC","sourcesContent":["import { Req } from \"badmfck-signal\";\nimport { BaseEndpoint } from \"../BaseEndpoint\";\nimport crypto from \"crypto\";\nimport { HTTPRequestVO, TransferPacketVO } from \"../structures/Interfaces\";\nimport { logWarn } from \"../LogService\";\n\n\nexport class Deployment extends BaseEndpoint{\n\n hash:string\n constructor({login,password}:{login:string,password:string}){\n super(\"sys-deployment\");\n this.hash = crypto.createHash(\"sha256\").update(login+password).digest().toString(\"hex\");\n logWarn(\"Deployment initialized at: sys-deployment/\"+this.hash)\n this.registerEndpoints([\n {ignoreInterceptor:true,endpoint:this.hash,handler:this.deploymentHistory},\n ])\n }\n\n async deploymentHistory(req: HTTPRequestVO): Promise<TransferPacketVO<any>> {\n //const encryptedPasswordAndLoging = \n // todo - get project root directory\n return {}\n }\n}"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DataProvider.js","sourceRoot":"","sources":["../../../src/apiServer/helper/DataProvider.ts"],"names":[],"mappings":";;;;;;AAAA,oEAAoC;AAMpC,MAAa,YAAY;IACb,MAAM,CAAC,MAAM,GAAC,CAAC,CAAC;IAChB,IAAI,CAAS;IACb,IAAI,GAAC,KAAK,CAAC;IACX,eAAe,GAAC,CAAC,CAAC;IAClB,SAAS,GAAC,IAAI,GAAC,EAAE,GAAC,CAAC,CAAA;IACnB,IAAI,CAAkB;IACtB,SAAS,GAAC,IAAI,wBAAM,EAAO,CAAA;IAC3B,QAAQ,GAAS,KAAK,CAAC;IAEvB,QAAQ,CAAoD;IAQpE,YAAY,QAA4D,EAAC,SAAiB,EAAC,IAAY;QACnG,IAAI,CAAC,QAAQ,GAAC,QAAQ,CAAC;QACvB,IAAG,SAAS,KAAG,SAAS;YACpB,IAAI,CAAC,SAAS,GAAC,CAAC,SAAS,CAAC;QAC9B,IAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YACpB,IAAI,CAAC,SAAS,GAAC,CAAC,CAAC;QACrB,IAAG,CAAC,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,IAAI,GAAC,eAAe,GAAC,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAA;IACzD,CAAC;IAED,KAAK,CAAC,WAAW;QACb,IAAG,IAAI,CAAC,IAAI;YACR,OAAO;QACX,IAAI,CAAC,QAAQ,GAAC,KAAK,CAAC;QACpB,IAAI,CAAC,eAAe,GAAC,CAAC,CAAC;QACvB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;IACxB,CAAC;IAED,WAAW,CAAC,IAAM;QACd,IAAG,IAAI,CAAC,IAAI;YACR,OAAO;QACX,IAAI,CAAC,QAAQ,GAAC,KAAK,CAAC;QACpB,IAAI,CAAC,eAAe,GAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,OAAO;QAET,IAAG,IAAI,CAAC,IAAI;YACR,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAC,MAAM,EAAC,EAAE,CAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAC,EAAE,CAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAEnF,IAAG,IAAI,CAAC,eAAe,GAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAC;YAExC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;YAClD,IAAG,IAAI,GAAC,IAAI,CAAC,SAAS;gBAClB,OAAO,IAAI,CAAC,IAAI,CAAC;SACxB;QAED,IAAI,CAAC,IAAI,GAAC,IAAI,CAAC;QACf,IAAI,CAAC,QAAQ,GAAC,KAAK,CAAC;QACpB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,GAAC,KAAK,CAAC;QAChB,IAAI,CAAC,QAAQ,GAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC;QACjC,IAAI,CAAC,IAAI,GAAC,GAAG,CAAC,IAAI,CAAA;QAClB,IAAI,CAAC,eAAe,GAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;;AAlEL,oCAoEC","sourcesContent":["import Signal from \"badmfck-signal\";\n\n/**\n * DataProvider \n * gathering data throught executor and handle duplicate requests\n */\nexport class DataProvider<T>{\n private static nextID=1;\n private name?:string;\n private busy=false;\n private lastRequestTime=0;\n private cacheTime=1000*60*5\n private data:T|undefined|null;\n private callbacks=new Signal<any>()\n private wasError:boolean=false;\n\n private executor:()=>Promise<{data:T|null|undefined,error?:boolean}>\n\n /**\n * \n * @param executor Execute procedure stored in executor, when need to get data\n * @param cacheTime cache interval\n * @param name DataProvider name (debugging)\n */\n constructor(executor:()=>Promise<{data:T|null|undefined,error?:boolean}>,cacheTime?:number,name?:string){\n this.executor=executor;\n if(cacheTime!==undefined)\n this.cacheTime=+cacheTime;\n if(isNaN(this.cacheTime))\n this.cacheTime=0;\n if(!this.name)\n this.name=\"DataProvider \"+(DataProvider.nextID++)\n }\n\n async forceUpdate(){\n if(this.busy)\n return;\n this.wasError=false;\n this.lastRequestTime=0;\n await this.getData()\n }\n\n localUpdate(data:T){\n if(this.busy)\n return;\n this.wasError=false;\n this.lastRequestTime=+new Date();\n this.data = data\n }\n\n async getData():Promise<T|null|undefined>{\n\n if(this.busy)\n return new Promise((resolve,reject)=>this.callbacks.subscribe((d)=>resolve(d)))\n \n if(this.lastRequestTime>0 && !this.wasError){\n // check cachetime\n const diff = (+new Date()) - this.lastRequestTime;\n if(diff<this.cacheTime)\n return this.data; // return cached value\n }\n\n this.busy=true;\n this.wasError=false;\n const res = await this.executor();\n this.busy=false;\n this.wasError=res.error ?? false;\n this.data=res.data\n this.lastRequestTime=+new Date();\n this.callbacks.invoke(this.data);\n this.callbacks.removeAll();\n return this.data;\n }\n \n}"]}