UNPKG

flexbiz-server

Version:

Flexible Server

42 lines (41 loc) 21 kB
'use strict';const model=global.getModel("asskey"),assrequest=global.getModel("assrequest"),assinvestment=global.getModel("assinvestment"),assproduct=global.getModel("assproduct"),assperiod=global.getModel("assperiod"),User=global.getModel("user"),Receiver=global.getModel("assreceiver"),controller=require("../../controllers/controller"),{isSupperAdmin}=require("../../libs/utils"),async=require("async"),moment=require("moment"),{getWallet,getKeyInfo,bankBalancesGet,spend,getLatestHash,getHashById, mining,validHash}=require("../../libs/blockchainconnect"); module.exports=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"asskey",{unique:["address"],sort:{date_created:1},notNeedRight:!0,requireOtp:($data$$,$options$$)=>"delete"==$options$$.action?!0:!1,onFinding:async($user$$,$condition$$,$next$$,$options$$={})=>{$options$$.req&&$options$$.req.query&&!$options$$.req.query.has_balance&&($options$$.req.query.has_balance=$condition$$.has_balance);$condition$$.wallet_type={$in:[9,8]};delete $condition$$.has_balance;if($options$$.req&& $options$$.req.query&&!$options$$.req.query.count&&0===await model.countDocuments({user_created:$user$$.email,id_app:$user$$.current_id_app,wallet_type:9,address:{$regex:global.configs.ADDRESS_PREFIX||""}}))try{await model.createWallet($user$$.current_id_app,$user$$.email,$user$$.name,9)}catch($e$$){console.error($e$$)}$next$$(null,$condition$$)},onView:async($user$$,$items$$,$next$$,$options$$={})=>{await $items$$.asyncJoinModel2(null,User,{where:{username:"email"},fields:{fullname:"name"}});$options$$.req&& $options$$.req.query&&$options$$.req.query.has_balance?async.mapSeries($items$$,($item$$,$callback$$)=>{setImmediate(async()=>{delete $item$$.mnemonic;delete $item$$.private_key;delete $item$$.privateKey;$item$$.name=$item$$.name.replace("V\u00ed","T\u00e0i kho\u1ea3n").replace("v\u00ed","t\u00e0i kho\u1ea3n");try{let $bls$$=await bankBalancesGet($item$$.id_app,$item$$.address);await $bls$$.filter($b$$=>$b$$.denom!==configs.MAIN_DENOM).asyncJoinModel2($user$$.current_id_app,assinvestment,{where:{denom:"token"}, fields:[{price:"gia"},"id_product","id_period"]});$bls$$.forEach($r$$=>{$r$$.amount=Number($r$$.amount);$r$$.price=$r$$.price||1;$r$$.value=$r$$.price*$r$$.amount;delete $r$$.key});$item$$.balances=$bls$$;model.updateOne({_id:$item$$._id},{balances:$bls$$}).then(()=>{}).catch($e$$=>{console.error("can't update balances for wallet",$item$$.address,$e$$)});$callback$$(null,$item$$)}catch($e$$){$callback$$($e$$)}})},$e$$=>$next$$($e$$)):async.mapSeries($items$$,($item$$,$callback$$)=>{setImmediate(()=> {delete $item$$.mnemonic;delete $item$$.private_key;delete $item$$.balances;$item$$.name=$item$$.name.replace("V\u00ed","T\u00e0i kho\u1ea3n").replace("v\u00ed","t\u00e0i kho\u1ea3n");$callback$$()})},()=>{$next$$(null,$items$$)})}});$contr_router$$.creating=async($user$$,$obj$$,$next$$)=>{if(!isSupperAdmin($user$$.email.toLowerCase())&&3<=await model.countDocuments({user_created:$user$$.email,id_app:$user$$.current_id_app,asset:{$nin:["BTC","ETH"]}}))return $next$$("B\u1ea1n kh\u00f4ng th\u1ec3 t\u1ea1o th\u00eam v\u00ed m\u1edbi"); $obj$$.username||($obj$$.username=$user$$.email);try{let {address:$address$$,privateKey:$privateKey$$}=await model.createWallet($user$$.current_id_app,$user$$.email,$obj$$.name,9,!1);$obj$$.address=$address$$;$obj$$.privateKey=$privateKey$$;$next$$(null,$obj$$)}catch($e$$){$next$$($e$$.message||$e$$.error||$e$$)}};$contr_router$$.deleting=function($user$$,$obj$$,$fn$$){if($user$$.email!==$obj$$.user_created&&!isSupperAdmin($user$$.email.toLowerCase()))return $fn$$("Can't delete this key");Receiver.deleteMany({address:$obj$$.address}); $fn$$(null,$obj$$)};$contr_router$$.updating=function($user$$,$data$$,$obj$$,$fn$$){$fn$$("Can't update this wallet")};$contr_router$$.createRoute(":address/balance",async($req$$,$fn$$)=>{let $address$$=$req$$.params.address;try{const $bls$$=await bankBalancesGet($req$$.user.current_id_app,$address$$);await $bls$$.filter($b$$=>$b$$.denom!==configs.MAIN_DENOM).asyncJoinModel2($req$$.user.current_id_app,assinvestment,{where:{denom:"token"},asyncSetFields:async($item$$,$investment_ref$$,$callback$$)=> {if(!$investment_ref$$.id)return $callback$$();try{$item$$.price=$investment_ref$$.gia||0;$investment_ref$$={...$investment_ref$$};await [$investment_ref$$].asyncJoinModel2($req$$.user.current_id_app,assproduct,{where:{id_product:"id"},fields:["ma_loai","ten_san_pham","logo","hinh_anh",{gia_tri_hien_tai_san_pham:"gia_tri_hien_tai"},{tong_gia_tri_huy_dong:"tong_gia_tri"},{tong_so_token_phat_hanh:"tong_so_token"}]});await [$investment_ref$$].asyncJoinModel2($req$$.user.current_id_app,assperiod,{where:{id_period:"id", id_product:"id_product"},fields:"ten_lh_dt ten_ky_han id_rpt ky_han ky_tinh_lai loi_nhuan_duoc_chia goi_dau_tu tru_lai_da_tra".split(" ")});$investment_ref$$.wallet_address=$address$$;let $tong_so_luong$$=$investment_ref$$.so_luong;$investment_ref$$.so_luong=$item$$.amount;$investment_ref$$.con_lai=$item$$.amount;$investment_ref$$.lai_da_tra&&0<$tong_so_luong$$&&($investment_ref$$.lai_da_tra_1_token=Math.roundBy($investment_ref$$.lai_da_tra/$tong_so_luong$$),$investment_ref$$.lai_da_tra=$investment_ref$$.lai_da_tra_1_token* $investment_ref$$.con_lai);$investment_ref$$.tong_gia_tri=$investment_ref$$.so_luong*$investment_ref$$.gia;$investment_ref$$.lai_du_tinh=Math.roundBy($investment_ref$$.lai_suat_cam_ket/365/100*$investment_ref$$.tong_gia_tri*$investment_ref$$.ky_han);$investment_ref$$.tong_gia_tri_dao_han=$investment_ref$$.tong_gia_tri+$investment_ref$$.lai_du_tinh;$investment_ref$$.ky_han&&!$investment_ref$$.co_phan?($investment_ref$$.so_ngay_hien_tai=Math.roundBy(((new Date).getTime()-(new Date($investment_ref$$.ngay_phat_hanh)).getTime())/ 864E5),$investment_ref$$.tien_lai_hien_tai=Math.roundBy(($investment_ref$$.lai_suat_cam_ket||0)/365/100*$investment_ref$$.so_ngay_hien_tai*$investment_ref$$.tong_gia_tri),$investment_ref$$.tien_lai_truoc_han_hien_tai=Math.roundBy(($investment_ref$$.lai_suat_truoc_han||0)/365/100*$investment_ref$$.so_ngay_hien_tai*$investment_ref$$.tong_gia_tri)):($investment_ref$$.tien_lai_hien_tai=0,$investment_ref$$.so_ngay_hien_tai=0);$investment_ref$$.gia_ban_de_xuat=$investment_ref$$.so_luong?Math.roundBy(($investment_ref$$.tong_gia_tri+ $investment_ref$$.tien_lai_hien_tai)/$investment_ref$$.so_luong):0;if($investment_ref$$.goi_dau_tu)try{$investment_ref$$.market_value=await assinvestment.getInvestmentMarketValue($investment_ref$$.id_app,$investment_ref$$.token)}catch($e$$){console.error($e$$)}$item$$.investment=$investment_ref$$;$callback$$()}catch($e$$){console.error($e$$),$callback$$()}}});$bls$$.forEach($r$$=>{$r$$.amount=Number($r$$.amount);$r$$.price=$r$$.price||1;$r$$.value=$r$$.price*$r$$.amount;delete $r$$.key});model.updateOne({address:$address$$, id_app:$req$$.user.current_id_app},{balances:$bls$$}).then(()=>{}).catch($e$$=>{console.error("can't update balances for wallet",$address$$,$e$$)});$fn$$(null,$bls$$)}catch($e$$){if($e$$.message&&$e$$.message.error)return $fn$$($e$$.message);$fn$$({error:$e$$.message})}},{method:"GET"});const $handleResult$$=$assreq_data$$=>{$assreq_data$$._id&&($assreq_data$$.trans_id=$assreq_data$$._id.toString());delete $assreq_data$$.trang_thai;delete $assreq_data$$._id;delete $assreq_data$$.__v;delete $assreq_data$$.transaction; delete $assreq_data$$.id_app;delete $assreq_data$$.exfields;delete $assreq_data$$.status;delete $assreq_data$$.date_created;delete $assreq_data$$.date_updated;delete $assreq_data$$.user_created;delete $assreq_data$$.user_updated;return $assreq_data$$},$permission$$=require("../../libs/permission");$contr_router$$.createRoute("spend",async($req$$,$fn$$)=>{var $address$$=await global.getModel("assuser_identity").findOne({id_app:$req$$.user.current_id_app,user_created:$req$$.user.email}).lean();if(!$address$$)return $fn$$({error:"B\u1ea1n c\u1ea7n x\u00e1c th\u1ef1c th\u00f4ng tin ng\u01b0\u1eddi d\u00f9ng tr\u01b0\u1edbc khi th\u1ef1c hi\u1ec7n giao d\u1ecbch"}); if("1"!==$address$$.trang_thai)return $fn$$({error:"H\u1ed3 s\u01a1 th\u00f4ng tin c\u1ee7a b\u1ea1n ch\u01b0a \u0111\u01b0\u1ee3c duy\u1ec7t"});let $data$$=$req$$.body;$address$$=$data$$.from;if(!await model.findOne({id_app:$req$$.user.current_id_app,address:$address$$,username:$req$$.user.email}).lean())return $fn$$({error:"sender's address is not valid"});const $to_address$$=$data$$.to||$data$$.receiver_address;let {denom:$denom$$,amount:$amount$$}=$data$$;if(!($address$$&&$to_address$$&&$denom$$&& $amount$$))return $fn$$({error:"Data miss 'from' or 'to' or 'denom' or 'amount'"});if($address$$===$to_address$$)return $fn$$({error:"\u0110\u1ecba ch\u1ec9 v\u00ed g\u1eedi v\u00e0 nh\u1eadn ph\u1ea3i kh\u00e1c nhau"});try{await $permission$$.verifyOTP($req$$.user.email,$data$$["otp-id"],$data$$["otp-code"])}catch($e$$){return $fn$$({error:$e$$.message||$e$$.error||$e$$,code:4001})}if($data$$.assrequest_id){if(!global.mongoose.Types.ObjectId.isValid($data$$.assrequest_id))return $fn$$({error:"Y\u00eau c\u1ea7u thanh to\u00e1n kh\u00f4ng h\u1ee3p l\u1ec7"}); var $_url_assreq$$=await assrequest.findOne({_id:$data$$.assrequest_id,amount:$amount$$,denom:$denom$$,receiver_address:$to_address$$,request_id:$data$$.request_id,order_id:$data$$.order_id});if(!$_url_assreq$$)return $fn$$({error:"Y\u00eau c\u1ea7u thanh to\u00e1n kh\u00f4ng h\u1ee3p l\u1ec7"});if("1"===$_url_assreq$$.trang_thai)return $fn$$({error:"Y\u00eau c\u1ea7u n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c thanh to\u00e1n"});if("9"===$_url_assreq$$.trang_thai)return $fn$$({error:"Y\u00eau c\u1ea7u n\u00e0y \u0111\u00e3 b\u1ecb h\u1ee7y"})}try{const $rs$$= await spend($req$$.user.current_id_app,$req$$.user.token,$address$$,$to_address$$,{denom:$denom$$,amount:$amount$$});if($rs$$.code)return 5===$rs$$.code?$fn$$({error:"B\u1ea1n kh\u00f4ng \u0111\u1ee7 ti\u1ec1n \u0111\u1ec3 th\u1ef1c hi\u1ec7n giao d\u1ecbch n\u00e0y"}):$fn$$({error:$rs$$.rawLog});let $walletReceiver$$=await model.findOne({id_app:$req$$.user.current_id_app,address:$to_address$$});if($walletReceiver$$){let $_userReceiver$$=await User.findOne({email:$walletReceiver$$.username});Receiver.findOne({id_app:$req$$.user.current_id_app, address:$to_address$$,user_created:$req$$.user.email},($e$$,$rs$$)=>{$rs$$||Receiver.create({id_app:$req$$.user.current_id_app,name:$data$$.name||($_userReceiver$$||{}).name,address:$to_address$$,user_created:$req$$.user.email})})}if($_url_assreq$$){$_url_assreq$$.trang_thai="1";$_url_assreq$$.sender_address=$address$$;$_url_assreq$$.sender_name=$data$$.sender_name||$req$$.user.name;$_url_assreq$$.sender_user=$req$$.user.email;$_url_assreq$$.sender_date=new Date;$_url_assreq$$.date_updated=new Date; await $_url_assreq$$.save();let $ctrlReq$$=global.controllers.ASSREQUEST,$assreq_views$$=await $ctrlReq$$.asyncView($req$$.user,[$_url_assreq$$.toObject()],{req:$req$$});controller.pushNotification($ctrlReq$$,$assreq_views$$[0]);const $assreq_data$$=$_url_assreq$$.toObject();$assreq_data$$.is_success=!0;$assreq_data$$.message="Giao d\u1ecbch th\u00e0nh c\u00f4ng";let $returnData$$=$handleResult$$($assreq_data$$);if($assreq_data$$.return_url){$_url_assreq$$="";for(let $key$$ in $returnData$$)$_url_assreq$$= $_url_assreq$$?`${$_url_assreq$$}&${$key$$}=${encodeURIComponent($returnData$$[$key$$])}`:`${$key$$}=${encodeURIComponent($returnData$$[$key$$])}`;$_url_assreq$$=`${$assreq_data$$.return_url}?${$_url_assreq$$}`;$returnData$$.return_url=$_url_assreq$$}return $fn$$(null,$returnData$$)}$fn$$(null,$rs$$)}catch($e$$){console.error($e$$),$fn$$({error:$e$$.message||$e$$.error||$e$$})}},{method:"POST"});$contr_router$$.createRoute(":address/info",async($req$$,$fn$$)=>{let $address$$=$req$$.params.address; try{let $info$$=await getKeyInfo($req$$.user.current_id_app,$req$$.user.email,$address$$);$fn$$(null,$info$$)}catch($e$$){if($e$$.message&&$e$$.message.error)return $fn$$($e$$.message);$fn$$({error:$e$$.message})}},{method:"GET"});$contr_router$$.createRoute(":address/download",async($req$$,$fn$$)=>{if(!$req$$.query["otp-id"]||!$req$$.query["otp-code"])return $fn$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u otp-id v\u00e0 otp-code");try{await $permission$$.verifyOTP($req$$.user.email,$req$$.query["otp-id"], $req$$.query["otp-code"])}catch($e$$){return $fn$$($e$$.message||$e$$.error||$e$$)}let $address$$=$req$$.params.address;console.log("download wallet",$address$$);try{const $wallet$$=await getWallet($req$$.user.current_id_app,$req$$.user.email,$address$$);console.log("download wallet",$address$$,$wallet$$);$fn$$(null,$wallet$$)}catch($e$$){if($e$$.message&&$e$$.message.error)return $fn$$($e$$.message);$fn$$({error:$e$$.message})}},{method:"GET"});$contr_router$$.createRoute("txs/:tx_id",async($id_app_req$$, $fn$$)=>{let $tx_id$$=$id_app_req$$.params.tx_id;$id_app_req$$=$id_app_req$$.user.current_id_app;try{const $rs$$=await global.getModel("asstransaction").findOne({id_app:$id_app_req$$,_id:$tx_id$$}).lean();$fn$$(null,$rs$$)}catch($e$$){if($e$$.message&&$e$$.message.error)return $fn$$($e$$.message);$fn$$({error:$e$$.message})}},{method:"GET"});$contr_router$$.createRoute("txs",async($req$$,$fn$$)=>{let $page$$=Number($req$$.query.page||0),$limit$$=Number($req$$.query.limit||20),$condition$$={id_app:$req$$.user.current_id_app}; for(let $key$$ in $req$$.query)"page"!==$key$$&&"limit"!==$key$$&&"access_token"!==$key$$&&"id_app"!==$key$$&&($condition$$[$key$$]=$req$$.query[$key$$]);try{let $rs$$;if($page$$){let $skip$$=(Number($page$$)-1)*$limit$$;$rs$$=await global.getModel("asstransaction").find($condition$$).skip($skip$$).limit($limit$$).sort({date_created:-1})}else $rs$$=await global.getModel("asstransaction").find($condition$$).limit($limit$$).sort({date_created:-1});$fn$$(null,$rs$$.lean())}catch($e$$){if($e$$.message&& $e$$.message.error)return $fn$$($e$$.message);$fn$$({error:$e$$.message})}},{method:"GET"});$contr_router$$.createRoute("txs",async($req$$,$fn$$)=>{let $id_app$$=$req$$.user.current_id_app,{values:$values$$,typeUrl:$typeUrl$$,from_address:$from_address$$}=$req$$.body,$cmd$$=$typeUrl$$.split(".").pop();switch($cmd$$){case "MsgCreateFindhash":if(!global.configs.COIN_CAN_MINT)return $fn$$("Can't mint coins");if(!$values$$||!$values$$.creator)return $fn$$("findhash is not valid");if(global.configs.DAILY_MINING_LIMIT){var $rs$$= await global.getModel("assfindhash").countDocuments({id_app:$id_app$$,creator:$values$$.creator,date_created:{$gte:moment().startOf("date").toDate(),$lte:moment().endOf("date").toDate()}});if($rs$$>=global.configs.DAILY_MINING_LIMIT)return console.error(`${$values$$.creator} \u0111\u00e3 h\u1ebft l\u01b0\u1ee3t \u0111\u00e0o`,$rs$$,global.configs.DAILY_MINING_LIMIT),$fn$$({code:9,msg:"B\u1ea1n \u0111\u00e3 h\u1ebft s\u1ed1 l\u01b0\u1ee3t \u0111\u01b0\u1ee3c \u0111\u00e0o trong m\u1ed9t ng\u00e0y"})}$values$$.creator= $values$$.creator||$from_address$$;try{const {id:$id$$}=await validHash($id_app$$,$values$$);await global.getModel("assfindhash").create({...$values$$,id:$id$$,id_app:$id_app$$,user_created:$req$$.user.email});await global.getModel("assbank").mintCoins($id_app$$,$values$$.creator,1,global.configs.COIN_CAN_MINT,void 0,{push_notify:!1});return $fn$$(null,{msg:`M\u1ed9t block m\u1edbi \u0111\u00e3 \u0111\u01b0\u1ee3c t\u00ecm th\u1ea5y. B\u1ea1n \u0111\u01b0\u1ee3c th\u01b0\u1edfng ${1} ${global.configs.COIN_CAN_MINT}`, creator:$values$$.creator,amount:1,denom:global.configs.COIN_CAN_MINT})}catch($e$$){return console.error("txs",$cmd$$,$values$$,$e$$),$fn$$($e$$)}case "MsgCreateToken":try{if(!$req$$.body["otp-id"]||!$req$$.body["otp-code"])return $fn$$("Ch\u1ee9c n\u0103ng n\u00e0y y\u00eau c\u1ea7u x\u00e1c th\u1ef1c qua OTP");try{await $permission$$.verifyOTP($req$$.user.email,$req$$.body["otp-id"],$req$$.body["otp-code"])}catch($e$$){return $fn$$({error:$e$$.message||$e$$.error||$e$$,code:4001})}$values$$.denom= $values$$.denom||$values$$.name;await global.getModel("assbank").issueCoins($req$$.user,$values$$);$values$$.id_app=$req$$.user.current_id_app;$values$$.user_created=$req$$.user.email;$rs$$=await global.getModel("assissue").create($values$$);return $fn$$(null,$rs$$)}catch($e$$){return console.error("txs",$cmd$$,$values$$,$e$$),$fn$$($e$$)}default:console.error("Ch\u01b0a tri\u1ec3n khai",$cmd$$,$typeUrl$$),$fn$$(`Ch\u01b0a tri\u1ec3n khai l\u1ec7nh:${$cmd$$} (${$typeUrl$$})`)}},{method:"POST"});$contr_router$$.createRoute("findhash/:id", async($id_app$jscomp$3_req$$,$fn$$)=>{let $id$$=$id_app$jscomp$3_req$$.params.id;$id_app$jscomp$3_req$$=$id_app$jscomp$3_req$$.user.current_id_app;try{if("latest"===$id$$){let $lastest$$=await getLatestHash($id_app$jscomp$3_req$$);if(!$lastest$$)return $fn$$("Not found latest hash");$fn$$(null,$lastest$$)}else{let $hash$$=await getHashById($id_app$jscomp$3_req$$,$id$$);$fn$$(null,$hash$$)}}catch($e$$){$fn$$($e$$.message||$e$$.error||$e$$)}},{method:"GET"});$contr_router$$.createRoute("findhash/broadcast", async($req$$,$fn$$)=>{if(!global.configs.COIN_CAN_MINT)return $fn$$("Can't mint coins");let {findhash:$findhash$$}=$req$$.body,$id_app$$=$req$$.user.current_id_app;if(!$findhash$$)return $fn$$("findhash is not valid");if(!$findhash$$.creator)return $fn$$("findhash miss creator's address");if(global.configs.DAILY_MINING_LIMIT){const $so_lan_dao_trong_ngay$$=await global.getModel("assfindhash").countDocuments({id_app:$id_app$$,creator:$findhash$$.creator,date_created:{$gte:moment().startOf("date").toDate(), $lte:moment().endOf("date").toDate()}});if($so_lan_dao_trong_ngay$$>=global.configs.DAILY_MINING_LIMIT)return console.error(`${$findhash$$.creator} \u0111\u00e3 h\u1ebft l\u01b0\u1ee3t \u0111\u00e0o`,$so_lan_dao_trong_ngay$$,global.configs.DAILY_MINING_LIMIT),$fn$$({code:9,msg:"B\u1ea1n \u0111\u00e3 h\u1ebft s\u1ed1 l\u01b0\u1ee3t \u0111\u01b0\u1ee3c \u0111\u00e0o trong m\u1ed9t ng\u00e0y"})}try{const {id:$id$$}=await validHash($id_app$$,$findhash$$);await global.getModel("assfindhash").create({...$findhash$$, id:$id$$,id_app:$id_app$$,user_created:$req$$.user.email});await global.getModel("assbank").mintCoins($id_app$$,$findhash$$.creator,1,global.configs.COIN_CAN_MINT,void 0,{push_notify:!0});$fn$$(null,{msg:`M\u1ed9t block m\u1edbi \u0111\u00e3 \u0111\u01b0\u1ee3c t\u00ecm th\u1ea5y. B\u1ea1n \u0111\u01b0\u1ee3c th\u01b0\u1edfng ${1} ${global.configs.COIN_CAN_MINT}`,creator:$findhash$$.creator,amount:1,denom:global.configs.COIN_CAN_MINT})}catch($e$$){$fn$$($e$$)}},{method:"POST"});$contr_router$$.createRoute("test-mining/:creator", async($req$$,$fn$$)=>{if("invncur@gmail.com"!==$req$$.user.email)return $fn$$("Kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p th\u1ef1c hi\u1ec7n ch\u1ee9c n\u0103ng n\u00e0y");mining($req$$.user.current_id_app,$fn$$)},{method:"GET"});$contr_router$$.createRoute("query",async($offset_page$jscomp$2_req$$,$fn$$)=>{var $address$jscomp$5_rs$$=$offset_page$jscomp$2_req$$.query.path;if(!$address$jscomp$5_rs$$)return $fn$$({error:"query path is required"});var $ps_query$$=$address$jscomp$5_rs$$.split("/");if(3> $ps_query$$.length)return $fn$$({error:"Path is not valid"});$address$jscomp$5_rs$$=$ps_query$$[1];var $events_limit$$=$ps_query$$[2].split("-");$ps_query$$={id_app:$offset_page$jscomp$2_req$$.user.current_id_app};let [$action$$,$nam$$,$quy$$,$thang$$,$ngayd$$]=$events_limit$$;$nam$$&&($events_limit$$=moment().set("years",Number($nam$$)),$thang$$?$events_limit$$=$events_limit$$.set("months",Number($thang$$)-1):$quy$$&&($events_limit$$=$events_limit$$.set("quarters",Number($quy$$))),$ngayd$$&&($events_limit$$= $events_limit$$.set("dates",Number($ngayd$$))),$ps_query$$.date_created={$gte:$events_limit$$.startOf("date").toDate(),$lte:$events_limit$$.endOf("date").toDate()});$events_limit$$=20;$offset_page$jscomp$2_req$$.query.limit&&($events_limit$$=Number($offset_page$jscomp$2_req$$.query.limit),isNaN($events_limit$$)||0==$events_limit$$)&&($events_limit$$=20);$offset_page$jscomp$2_req$$.query.page&&($offset_page$jscomp$2_req$$=Number($offset_page$jscomp$2_req$$.query.page),isNaN($offset_page$jscomp$2_req$$)|| 1>$offset_page$jscomp$2_req$$)&&($offset_page$jscomp$2_req$$=1);$offset_page$jscomp$2_req$$=0*$events_limit$$;"receiver"==$action$$?$ps_query$$["data.to_address"]=$address$jscomp$5_rs$$:"sender"==$action$$?$ps_query$$["data.from_address"]=$address$jscomp$5_rs$$:$ps_query$$.$or=[{"data.from_address":$address$jscomp$5_rs$$},{"data.to_address":$address$jscomp$5_rs$$}];$address$jscomp$5_rs$$=await global.getModel("asstransaction").find($ps_query$$).skip($offset_page$jscomp$2_req$$).limit($events_limit$$).sort({date_created:-1}).lean(); $address$jscomp$5_rs$$.forEach(($r$$,$index$$)=>{$r$$.date=(new Date($r$$.date||$r$$.date_created)).getTime()/1E3;$r$$.receiver=($r$$.data||{}).to_address;$r$$.sender=($r$$.data||{}).from_address;$r$$.amount=($r$$.data||{}).amount||0;$r$$.denom=($r$$.data||{}).denom;$r$$.memo=$r$$.memo||($r$$.data||{}).memo;$r$$.id=$index$$.toString()});$fn$$(null,{TransferLog:$address$jscomp$5_rs$$})},{method:"GET"});$contr_router$$.route()};