@katorymnd/pawapay-node-sdk 2.6.1 → 2.8.0
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/CHANGELOG.md +30 -16
- package/LICENSE +13 -7
- package/README.md +84 -200
- package/package.json +24 -9
- package/scripts/install-sdk.js +123 -1
- package/src/api/ApiClient.js +373 -1
- package/src/config/Config.js +30 -72
- package/src/core/index.js +100 -0
- package/src/core/katorymnd_pawapay_core.darwin-arm64.node +0 -0
- package/src/core/katorymnd_pawapay_core.darwin-x64.node +0 -0
- package/src/core/katorymnd_pawapay_core.linux-arm64-gnu.node +0 -0
- package/src/core/katorymnd_pawapay_core.linux-x64-gnu.node +0 -0
- package/src/core/katorymnd_pawapay_core.linux-x64-musl.node +0 -0
- package/src/core/katorymnd_pawapay_core.node +0 -0
- package/src/core/katorymnd_pawapay_core.win32-arm64-msvc.node +0 -0
- package/src/core/katorymnd_pawapay_core.win32-x64-msvc.node +0 -0
- package/src/utils/license/integrity.js +170 -1
- package/src/utils/license/protection.js +275 -1
- package/src/utils/license/server-check.js +326 -1
- package/src/utils/license/validator.js +42 -1
- package/src/utils/validator.js +2 -25
- package/src/utils/vm/bytecode-encoder.js +205 -1
- package/src/utils/vm/degradation-manager.js +146 -1
- package/src/utils/vm/interpreter.js +179 -1
package/scripts/install-sdk.js
CHANGED
|
@@ -1 +1,123 @@
|
|
|
1
|
-
const _0x47b28d=_0x167a;(function(_0x30f77c,_0x3f1284){const _0x2839b7=_0x167a,_0x4bb6df=_0x30f77c();while(!![]){try{const _0x540b01=parseInt(_0x2839b7(0x271,'KK#v'))/0x1+parseInt(_0x2839b7(0x222,'vm@h'))/0x2+parseInt(_0x2839b7(0x28c,'bfMS'))/0x3*(-parseInt(_0x2839b7(0x23b,'oeYO'))/0x4)+-parseInt(_0x2839b7(0x221,'vm@h'))/0x5+parseInt(_0x2839b7(0x21f,'FZqF'))/0x6*(-parseInt(_0x2839b7(0x203,'X(cs'))/0x7)+-parseInt(_0x2839b7(0x214,'0QFJ'))/0x8+-parseInt(_0x2839b7(0x244,'vm@h'))/0x9*(-parseInt(_0x2839b7(0x20a,'Vp6%'))/0xa);if(_0x540b01===_0x3f1284)break;else _0x4bb6df['push'](_0x4bb6df['shift']());}catch(_0x2ad7d7){_0x4bb6df['push'](_0x4bb6df['shift']());}}}(_0x3778,0xa7053));function _0x167a(_0x54641b,_0x14d51e){const _0x377820=_0x3778();return _0x167a=function(_0x167ae7,_0x3abca9){_0x167ae7=_0x167ae7-0x1e5;let _0xc42f53=_0x377820[_0x167ae7];if(_0x167a['nzjSDl']===undefined){var _0x4d3b39=function(_0x385153){const _0x2c50a6='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x343b45='',_0x56bd9a='';for(let _0x38d768=0x0,_0x1adcae,_0x49817a,_0x5a283d=0x0;_0x49817a=_0x385153['charAt'](_0x5a283d++);~_0x49817a&&(_0x1adcae=_0x38d768%0x4?_0x1adcae*0x40+_0x49817a:_0x49817a,_0x38d768++%0x4)?_0x343b45+=String['fromCharCode'](0xff&_0x1adcae>>(-0x2*_0x38d768&0x6)):0x0){_0x49817a=_0x2c50a6['indexOf'](_0x49817a);}for(let _0x1b0e0f=0x0,_0x4409b6=_0x343b45['length'];_0x1b0e0f<_0x4409b6;_0x1b0e0f++){_0x56bd9a+='%'+('00'+_0x343b45['charCodeAt'](_0x1b0e0f)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x56bd9a);};const _0x5628ab=function(_0x468508,_0x397099){let _0x48c080=[],_0x273c07=0x0,_0x44c103,_0x58311e='';_0x468508=_0x4d3b39(_0x468508);let _0x129527;for(_0x129527=0x0;_0x129527<0x100;_0x129527++){_0x48c080[_0x129527]=_0x129527;}for(_0x129527=0x0;_0x129527<0x100;_0x129527++){_0x273c07=(_0x273c07+_0x48c080[_0x129527]+_0x397099['charCodeAt'](_0x129527%_0x397099['length']))%0x100,_0x44c103=_0x48c080[_0x129527],_0x48c080[_0x129527]=_0x48c080[_0x273c07],_0x48c080[_0x273c07]=_0x44c103;}_0x129527=0x0,_0x273c07=0x0;for(let _0x548bf4=0x0;_0x548bf4<_0x468508['length'];_0x548bf4++){_0x129527=(_0x129527+0x1)%0x100,_0x273c07=(_0x273c07+_0x48c080[_0x129527])%0x100,_0x44c103=_0x48c080[_0x129527],_0x48c080[_0x129527]=_0x48c080[_0x273c07],_0x48c080[_0x273c07]=_0x44c103,_0x58311e+=String['fromCharCode'](_0x468508['charCodeAt'](_0x548bf4)^_0x48c080[(_0x48c080[_0x129527]+_0x48c080[_0x273c07])%0x100]);}return _0x58311e;};_0x167a['vkwbNf']=_0x5628ab,_0x54641b=arguments,_0x167a['nzjSDl']=!![];}const _0x2dc7b0=_0x377820[0x0],_0xe9cd4d=_0x167ae7+_0x2dc7b0,_0x19dae1=_0x54641b[_0xe9cd4d];return!_0x19dae1?(_0x167a['nPKrDr']===undefined&&(_0x167a['nPKrDr']=!![]),_0xc42f53=_0x167a['vkwbNf'](_0xc42f53,_0x3abca9),_0x54641b[_0xe9cd4d]=_0xc42f53):_0xc42f53=_0x19dae1,_0xc42f53;},_0x167a(_0x54641b,_0x14d51e);}function _0x3778(){const _0x2d7ec7=['W4ebWPbx','WRdcGfq7W4NcR8kKWQ8','BSo8WOq','W61DWPu1WP97aSkUWOBcHmoqWQRdPq','WRaGW6ueWQq','k0Gms2xdONy','W7jnWReGWOrzumo8j8ov','ov48DSkcWOtcUq','pu4qsghdOwFcOEkxVG','WRzsCSkVhHvdAZHB','kh4RWPdcOmoLbHVcKSkA','W5hdKK3cK8oQWOi3a8o5W6O','W6ddMCkWW6BdR8kfW6xcU07dTq','W7mLhLBdNbJcU8koddTwWRFdHW','4PA24Ps24PAv4Psg4PAP4Psb4PsW4PEW4PAg4PAm','WQjYW6GLbmkpoHVdIWS','W73dHvSLW5tcQmoUW7tcHI4','W5ilWPvvt2K','WRhdGXLKW60','4P+JkW3cVtKQDveuoa','W7CXWQdcVmkguCoPW5joCaOH','4OAfWQxdOSkoWRNcVCk/nCkSqW','WQWbW5RcI8ki','jwHS','W7xcMqKYmq','WPlcT8kssSoJWReXg8kmrG','lthdN8kOf8kdmZ9JWRi','WO1HdMhcQgZdISoegIC','AwjLWONcUCoYgXtcI8kA','cCoRW4PJeqTqcSohaG','W4CbWP4','4P+5vmoEW53cPqpcRSkhaSkb','W6VcRCkH','W4q5gSoeB259BtLOcSkc','kaezqgRdQMhdOmoBWRO','n0iUAW','W4P7bdBdRX4uW6BcNmk1','A8kHkmo0','8ysaVCoEW5lcIspcGSolr8oKya','WO/cTCoZWO/cRSokWOGBWOS','WQldHSk2','4PwY4Ps64PwF4Pwr','mhTTWRpdSbRdNmkzW5NcOG','WPtcHHJcSmkHWRWMaCo+W60','pgzSW7BcVJldJCoxW5RcVW','W4eaW63cKYtdKvFdNCoWWQq','W7uVh1BdNXVdJCkaiZnVWO8','4Psv4PwX4PsU4Pw14Pwu4PEF4Pwd4PEr4PE/4PAd','W6tdN0fNWPpdUCk5W7NcGJiyrW','DCkNaCk8','4PAW4Pwn4PEn4PsB4PsW4PE/4PsO4PsY4PEV4Ps+','W7mYWQBdI8oinSo+W5nX','4PAt4PE24Ps64Pwr4PEj4PAk4PEy4PEY4PwP4PAR','W5Lhg1/cHa','CCoAqtvNWPpcJCkvW5uz','W7ibW417WOOUxmkaWQddPW','WQ3dP1pdGmoUWOH1mZtcQXLI','4PAs4Pwm4Pw44Ps+4PA54Pw74PEC4PAC4PsF4PsM','4P24WRNdSwDsnxreW5fB','qSkneSoyW7iDy2RdOX4','WQ7cVtBcTmkzW6TD','W6nivcpcVa','x8oBs8kdh1hcQSoHFqi','4PEK4PE24PwO4PAZ4PAA4PAf4Psg4PsH4PEh4PEt','W49lW55LWOS','W6dcJH8YkW','W5pdLf3cHSkK','AmkeWPdcTmo0hcNdICoaW6/cJSoi','WP/cTe1V','cLzimeKljCkkDSkcgSoJW6m','dvXim0icy8kFA8kQkmoW','WOnQW7K','4P+KESozWRFcPSoPWOtcICkFzW','lSoZBCkQWP98eNVdJGNdVN3dUW','W4SdWQS1WPy1bCosW7JcTG','WOi/W7NcT8kX','ofqO','nCohWOFdU8kSbYBdPCoBW5K','WOhcHCki','WRtdVuNcHmkVW5nHogVcQa','FNuKk8khA8opW447pW','WPj4W64Ufa','D1DmgCk+','WPH6W6HFWPJdTCkPWPVdI2C','WOTMfxddSqFdJSo+iXW','WP4aWP/dVSkQhSk0WPLhW4a','W5ZdMSoxWRVcMYNdPCo8aHtcI8kq','ECohW43dRSk0wIhcVmoCW5K','xbCijCo4W7hdU8o1W61T','WOOjWQi','W5hcQSkGWRNcOSo4WR05WRXp','lcLHW73cVGZdH8omW43dRq','WOGsW6uYWPWLbCodWQlcUq','rfi7WQhdSW','wmk4nmkg','gmoqAmk1ng/cLa','WObqW5JcNsZdNudcKSoUWR4','W6NcTHxcGSkYW5vJAYlcSq','WQu3W7meWR4','WQGQW78p','W4fHW5JcS0m','WQDQW6pcRupdGMGbBCo3','WQnOtqO','WQ4QW7e','dfflyqLRu8kBAG','W51MhIddRW','WPLpW4BdNSof','FxrJ','WQhcJGCZW5i','bZtcPW','WR/cGG4/W4JcRmoHW5lcLYq','z8kFxt4Z','iuvEDwxdUhldKCooWQO','WQSGW7GvWPBcVqZcSCoE','4PA24Ps24PAv4Psl','c8o8W5jJqZXPt8o3gG','W7RdQmowvaxcHmkhvh7cGa','W5pdQmkYWQZcS8oPWRT2W7bP','4PAyW4FdK3BdO8kvpXddLxG','wHykBXru','WPH7W7HfW4m','WOtdI8kmfbW','W6jBW6FcRKxdMfumi8ox','WRT5ralcHLW','W55UW5/cH0q','4PsH4Psb4PAt4PEP4PEq4PA94Psn4PA24Psj4PsY','4OwvWRNdSMnjkt15W4at','WPrYtmks','W7dcHHKbcW','xHaVWPq','W5jBWRS6WPGE','WOnKW7WL','WQGbWONcNCkzWQfqsmo0WQK','WQdcRbugW4K','E8o2WO/dUSo2WP8','4PAz4PA34PAJ4PwT4PEs4PAX4Psa4PsY4PE84Pwf','WO9OW69RaCoFca7dLG0','vqSVWPvybM/cQ3NcJq','WR/cHbm','W5dcUHdcT8kp','WRHrEmk1nG','m2zV','qrnUAa','W4WdWQpdVxJdHw8bjmov','W4zYW7RcTxK','WP5UW4DD','WRjNW6tdOCoe','4PYdW6apW7NdJJHqvmownW','WOJcMmkDW63dNa','WPiAW6vTW4marCopt8ogW6xdHG','rHOI','WOWjWQW4','x8kZmCoCW5OK','W4BdG0VcHSk+','WOujWQeZW5q0dSodWRNcUa','WOvUxSkzlG','4Pwl4PAq4Psm4PEm4PE94PsD4PwY4PwT4PEY4PsE','W71hW55UWRldJSomWQVcHw0','WPG/W6NcUCoLW6ZcK8ksWOz3','WRxdHuTIFmoxWO15WRr4WR7dQW','4PQ7W6b8W5NdLsrrsColia','bxFcTG','W5SEW6RdKMddP2dcUmk6WRO','rrHQyZG','WRryxYG','4PEp4PEa4PEV4Pw34PsH4PAN4PAe4Pw94Pwa4PAZ','x8onuCkFge3dRq','c8k5W49JuIHVq8oadW','qX5Qka','W6pcQ8kR','WO4zW6ddNcBdLuJcN8o4WRy','xCoSCmo7W4SHWOCOW7eh','WO5YWO0zW60'];_0x3778=function(){return _0x2d7ec7;};return _0x3778();}const fs=require('fs'),path=require(_0x47b28d(0x201,'J^#g')),colors={'reset':_0x47b28d(0x220,'8[b#'),'cyan':_0x47b28d(0x219,'5aPm'),'green':_0x47b28d(0x239,'MUSq'),'yellow':_0x47b28d(0x255,'^X1f'),'red':_0x47b28d(0x211,'Vp6%'),'dim':_0x47b28d(0x280,'JnD8')};console[_0x47b28d(0x204,'(uoL')]('\x0a'+colors[_0x47b28d(0x1ff,'nkC(')]+(_0x47b28d(0x259,'H&3j')+_0x47b28d(0x278,'J^#g')+_0x47b28d(0x1ea,'aGsr')+_0x47b28d(0x263,'HF*K')+_0x47b28d(0x210,'hnUY')+_0x47b28d(0x20e,'Qq[#')+_0x47b28d(0x205,'Pc*p'))+colors[_0x47b28d(0x227,'qi)P')]),console[_0x47b28d(0x1fa,'4I4q')](colors[_0x47b28d(0x25b,'7kmu')]+(_0x47b28d(0x252,'HF*K')+_0x47b28d(0x24c,'naBQ')+_0x47b28d(0x234,'%abl')+_0x47b28d(0x26b,'rZEb')+_0x47b28d(0x24a,'@Ylo')+_0x47b28d(0x1f7,'5aPm')+_0x47b28d(0x291,'naBQ'))+colors[_0x47b28d(0x227,'qi)P')]),console[_0x47b28d(0x266,'@Ylo')](colors[_0x47b28d(0x26a,'Pc*p')]+(_0x47b28d(0x20b,'naBQ')+_0x47b28d(0x215,'Vp6%')+_0x47b28d(0x21b,'8Gd!')+_0x47b28d(0x281,'^X1f')+_0x47b28d(0x215,'Vp6%')+_0x47b28d(0x278,'J^#g')+_0x47b28d(0x24e,'aGsr'))+colors[_0x47b28d(0x1ee,'hnUY')]+'\x0a');async function install(){const _0x33d45c=_0x47b28d,_0x2d7666={'FBVnr':function(_0x211c3a,_0x1be733){return _0x211c3a===_0x1be733;},'YMQZu':_0x33d45c(0x261,'@Ylo'),'JivFT':_0x33d45c(0x1ec,'@Ylo')+_0x33d45c(0x229,'FZqF')+_0x33d45c(0x276,'aGsr')+_0x33d45c(0x288,'ObxR'),'wzcVN':_0x33d45c(0x22b,'0QFJ')+_0x33d45c(0x236,'X(cs')+_0x33d45c(0x226,'aGsr')+'s','OZUIl':function(_0x4d3d49,_0x9f49be){return _0x4d3d49(_0x9f49be);},'AQthH':_0x33d45c(0x28f,'KK#v')+_0x33d45c(0x206,'MUSq')+_0x33d45c(0x27e,'tw4H')+_0x33d45c(0x1e6,'G]vE')+_0x33d45c(0x286,'tw4H')+_0x33d45c(0x28a,'@Ylo'),'fLHFV':_0x33d45c(0x209,'tw4H')+'on','wBSNf':_0x33d45c(0x1e8,'(uoL')+_0x33d45c(0x253,'vm@h')};try{if(_0x2d7666[_0x33d45c(0x240,'rZEb')](_0x2d7666[_0x33d45c(0x258,'rZEb')],_0x2d7666[_0x33d45c(0x246,']Bv]')])){const _0x2ead86=process[_0x33d45c(0x223,'Qq[#')](),_0x2347a0=[path[_0x33d45c(0x273,'aGsr')](__dirname,_0x2d7666[_0x33d45c(0x267,'0QFJ')]),path[_0x33d45c(0x25d,'4@MZ')](__dirname,_0x2d7666[_0x33d45c(0x25c,'lG5l')])];let _0x4eb4ad,_0x5dd5b6;for(const _0x442ab3 of _0x2347a0){if(fs[_0x33d45c(0x200,'JnD8')](_0x442ab3))try{_0x4eb4ad=_0x2d7666[_0x33d45c(0x268,'7kmu')](require,_0x442ab3),_0x5dd5b6=_0x442ab3;break;}catch(_0x2e2007){}}if(!_0x4eb4ad)throw new Error(_0x2d7666[_0x33d45c(0x26c,'rZEb')]);const _0x46de7f=new _0x4eb4ad(),_0x1b0aa8=path[_0x33d45c(0x28e,'naBQ')](_0x5dd5b6),_0x4e0caf=path[_0x33d45c(0x289,'4I4q')](_0x1b0aa8,_0x2d7666[_0x33d45c(0x22e,'XLpm')]),_0x1b1db1=path[_0x33d45c(0x23f,']5IG')](_0x2ead86,_0x2d7666[_0x33d45c(0x21c,'ovh^')]);if(fs[_0x33d45c(0x256,'rZEb')](_0x4e0caf)){console[_0x33d45c(0x247,'XLpm')](colors[_0x33d45c(0x262,'B&]M')]+(_0x33d45c(0x27c,'J^#g')+_0x33d45c(0x283,'Wb(r')+_0x33d45c(0x1f8,'G]vE')+_0x33d45c(0x238,'aGsr')+'d.')+colors[_0x33d45c(0x248,'@Ylo')]);fs[_0x33d45c(0x250,'^X1f')](_0x1b1db1)?console[_0x33d45c(0x27d,'SLbx')](colors[_0x33d45c(0x21e,'8Gd!')]+(_0x33d45c(0x1ef,'7kmu')+_0x33d45c(0x21a,'oeYO')+_0x33d45c(0x23a,'i4UP'))+colors[_0x33d45c(0x245,'JnD8')]):console[_0x33d45c(0x1fc,'dzt8')](colors[_0x33d45c(0x257,'Vp6%')]+(_0x33d45c(0x1f1,'X(cs')+_0x33d45c(0x260,'B$L[')+_0x33d45c(0x23c,'tw4H')+_0x33d45c(0x1f6,'Om8A')+_0x33d45c(0x212,'UIR8')+_0x33d45c(0x254,'ovh^'))+colors[_0x33d45c(0x245,'JnD8')]);console[_0x33d45c(0x269,'MUSq')](colors[_0x33d45c(0x285,'dzt8')]+(_0x33d45c(0x207,'8Gd!')+_0x33d45c(0x1fe,'naBQ')+_0x33d45c(0x22c,'XLpm')+_0x33d45c(0x1f9,'Wb(r')+_0x33d45c(0x284,'Pc*p'))+colors[_0x33d45c(0x275,'8Gd!')]+'\x0a');return;}const _0x9557ca=_0x46de7f[_0x33d45c(0x24f,'Wb(r')+_0x33d45c(0x24d,']5IG')](_0x1b0aa8);_0x9557ca?(console[_0x33d45c(0x28b,'B&]M')](colors[_0x33d45c(0x21d,'lG5l')]+(_0x33d45c(0x224,'qi)P')+_0x33d45c(0x241,'rZEb')+_0x33d45c(0x274,'i4UP'))+colors[_0x33d45c(0x26e,']Bv]')]),console[_0x33d45c(0x235,'aGsr')](colors[_0x33d45c(0x27f,'Pc*p')]+(_0x33d45c(0x216,'Wb(r')+_0x33d45c(0x1eb,'Qq[#')+_0x33d45c(0x208,'MUSq')+_0x33d45c(0x242,'Vp6%'))+colors[_0x33d45c(0x28d,']5IG')]),console[_0x33d45c(0x243,']5IG')](colors[_0x33d45c(0x25f,'Qq[#')]+(_0x33d45c(0x25a,'Wb(r')+_0x33d45c(0x287,'i4UP')+_0x33d45c(0x264,'Qq[#')+_0x33d45c(0x265,'4@MZ')+_0x33d45c(0x231,'djsq')+_0x33d45c(0x233,'FZqF')+_0x33d45c(0x25e,'KK#v'))+colors[_0x33d45c(0x24b,'UIR8')]),console[_0x33d45c(0x22a,'cOEz')]('\x0a'+colors[_0x33d45c(0x1ed,'4I4q')]+(_0x33d45c(0x202,'djsq')+_0x33d45c(0x230,'5aPm')+_0x33d45c(0x217,'J^#g')+_0x33d45c(0x1e5,'7kmu')+_0x33d45c(0x279,'ovh^')+_0x33d45c(0x237,'MUSq')+_0x33d45c(0x213,'bfMS'))+colors[_0x33d45c(0x277,'7kmu')]+'\x0a')):console[_0x33d45c(0x1f3,'G]vE')](colors[_0x33d45c(0x272,'4@MZ')]+(_0x33d45c(0x26f,'J^#g')+_0x33d45c(0x22f,'ovh^')+_0x33d45c(0x251,'X(cs')+_0x33d45c(0x27a,'qi)P')+_0x33d45c(0x282,'oeYO'))+colors[_0x33d45c(0x22d,'Qq[#')]+'\x0a');}else _0x1d6504[_0x33d45c(0x228,'nkC(')](_0x539e09[_0x33d45c(0x23e,']5IG')]+(_0x33d45c(0x1fb,'djsq')+_0x33d45c(0x23d,'0QFJ')+_0x33d45c(0x26d,'ObxR'))+_0x5bec19[_0x33d45c(0x1f2,'B$L[')]);}catch(_0x9e1641){console[_0x33d45c(0x270,'cOEz')](colors[_0x33d45c(0x249,'H&3j')]+(_0x33d45c(0x1f5,'HF*K')+_0x33d45c(0x1e7,'8Gd!')+_0x33d45c(0x20d,'J^#g'))+_0x9e1641[_0x33d45c(0x290,'nkC(')]+colors[_0x33d45c(0x1f4,'lG5l')]);}}install();
|
|
1
|
+
/**
|
|
2
|
+
* PAWAPAY SDK ACTIVATOR (NATIVE ENGINE)
|
|
3
|
+
* ------------------------------------------------------------------
|
|
4
|
+
* This script runs automatically via the 'postinstall' hook.
|
|
5
|
+
* It initializes the security environment by:
|
|
6
|
+
* 1. Creating a unique Installation Imprint (.pawapay-imprint)
|
|
7
|
+
* 2. Asking Rust to generate machine-bound Shuffled Opcodes
|
|
8
|
+
* 3. Encrypting and Binding the VM bytecode to this specific machine (.bin)
|
|
9
|
+
* ------------------------------------------------------------------
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const fs = require("fs");
|
|
13
|
+
const path = require("path");
|
|
14
|
+
const crypto = require("crypto");
|
|
15
|
+
|
|
16
|
+
const colors = {
|
|
17
|
+
reset: "\x1b[0m",
|
|
18
|
+
cyan: "\x1b[36m",
|
|
19
|
+
green: "\x1b[32m",
|
|
20
|
+
yellow: "\x1b[33m",
|
|
21
|
+
red: "\x1b[31m",
|
|
22
|
+
dim: "\x1b[2m"
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
console.log(`\n${colors.cyan}╔══════════════════════════════════════════════════════════════╗${colors.reset}`);
|
|
26
|
+
console.log(`${colors.cyan}║ Katorymnd PawaPay NodeJs SDK - Initializing Native Security ║${colors.reset}`);
|
|
27
|
+
console.log(`${colors.cyan}╚══════════════════════════════════════════════════════════════╝${colors.reset}\n`);
|
|
28
|
+
|
|
29
|
+
async function install() {
|
|
30
|
+
try {
|
|
31
|
+
const projectRoot = process.cwd();
|
|
32
|
+
const vmDir = path.join(projectRoot, "src", "utils", "vm");
|
|
33
|
+
|
|
34
|
+
// Ensure the VM directory exists exactly where the old code expects it
|
|
35
|
+
if (!fs.existsSync(vmDir)) {
|
|
36
|
+
fs.mkdirSync(vmDir, { recursive: true });
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const imprintPath = path.join(projectRoot, ".pawapay-imprint");
|
|
40
|
+
const sessionPath = path.join(projectRoot, ".pawapay-session");
|
|
41
|
+
const opcodesPath = path.join(vmDir, "opcodes.json");
|
|
42
|
+
const bytecodePath = path.join(vmDir, "bytecode.bin");
|
|
43
|
+
|
|
44
|
+
// 1. CHECK FOR EXISTING VM ENVIRONMENT
|
|
45
|
+
if (fs.existsSync(opcodesPath) && fs.existsSync(bytecodePath)) {
|
|
46
|
+
console.log(`${colors.yellow}⚠ Existing security environment detected.${colors.reset}`);
|
|
47
|
+
|
|
48
|
+
if (fs.existsSync(sessionPath)) {
|
|
49
|
+
console.log(`${colors.green}✔ Active session found.${colors.reset}`);
|
|
50
|
+
} else {
|
|
51
|
+
console.log(`${colors.yellow}ℹ No active session. Validation required on first run.${colors.reset}`);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
console.log(`${colors.dim} Skipping generation to preserve VM state.${colors.reset}\n`);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// 2. LOAD THE RUST NATIVE CORE
|
|
59
|
+
let NativeCore;
|
|
60
|
+
try {
|
|
61
|
+
NativeCore = require("../src/core/index.js");
|
|
62
|
+
} catch (e) {
|
|
63
|
+
throw new Error("Native Rust core not found. Ensure the binary is built.");
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// 3. GENERATE IMPRINT (Matching your 16-char hex format)
|
|
67
|
+
const imprint = crypto.randomBytes(8).toString("hex");
|
|
68
|
+
fs.writeFileSync(imprintPath, imprint, "utf8");
|
|
69
|
+
console.log(`${colors.green}✔ Security Imprint Created${colors.reset}`);
|
|
70
|
+
|
|
71
|
+
// 4. GENERATE MACHINE-BOUND OPCODES (Via Rust)
|
|
72
|
+
const rawOpcodesStr = NativeCore.generateShuffledOpcodes(imprint);
|
|
73
|
+
const rawOpcodes = JSON.parse(rawOpcodesStr);
|
|
74
|
+
|
|
75
|
+
// Format opcodes.json EXACTLY as requested
|
|
76
|
+
const formattedOpcodes = {
|
|
77
|
+
imprintHash: imprint,
|
|
78
|
+
generatedAt: Date.now(),
|
|
79
|
+
opcodes: rawOpcodes
|
|
80
|
+
};
|
|
81
|
+
fs.writeFileSync(opcodesPath, JSON.stringify(formattedOpcodes, null, 2), "utf8");
|
|
82
|
+
console.log(`${colors.green}✔ Native Opcodes Shuffled & Saved${colors.reset}`);
|
|
83
|
+
|
|
84
|
+
// 5. COMPILE AND ENCRYPT BYTECODE (Via Rust -> AES Encryption)
|
|
85
|
+
const vmBytecodeStr = NativeCore.getInternalLogic(rawOpcodesStr);
|
|
86
|
+
const parsedLogic = JSON.parse(vmBytecodeStr);
|
|
87
|
+
const codeArrayStr = JSON.stringify(parsedLogic.code);
|
|
88
|
+
|
|
89
|
+
// Encrypt the payload exactly like the old JS encoder did
|
|
90
|
+
const encryptionKey = crypto.createHash("sha256").update(imprint).digest();
|
|
91
|
+
const iv = crypto.randomBytes(16);
|
|
92
|
+
const cipher = crypto.createCipheriv("aes-256-cbc", encryptionKey, iv);
|
|
93
|
+
|
|
94
|
+
let encryptedContent = cipher.update(codeArrayStr, "utf8", "hex");
|
|
95
|
+
encryptedContent += cipher.final("hex");
|
|
96
|
+
|
|
97
|
+
const checksum = crypto.createHash("sha256").update(encryptedContent).digest("hex");
|
|
98
|
+
|
|
99
|
+
// Format bytecode.bin EXACTLY as requested
|
|
100
|
+
const formattedBytecode = {
|
|
101
|
+
checksum: checksum,
|
|
102
|
+
timestamp: Date.now(),
|
|
103
|
+
version: "2.0",
|
|
104
|
+
imprint: imprint,
|
|
105
|
+
data: {
|
|
106
|
+
iv: iv.toString("hex"),
|
|
107
|
+
content: encryptedContent,
|
|
108
|
+
imprint: imprint
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
fs.writeFileSync(bytecodePath, JSON.stringify(formattedBytecode, null, 2), "utf8");
|
|
113
|
+
console.log(`${colors.green}✔ Machine-Bound Bytecode Compiled & Encrypted${colors.reset}`);
|
|
114
|
+
|
|
115
|
+
console.log(`\n${colors.cyan}ℹ Next Step: Start your application to establish a secure session.${colors.reset}`);
|
|
116
|
+
console.log(`${colors.yellow}👉 NOTE: Ensure KATORYMND_PAWAPAY_SDK_LICENSE_KEY is in your .env file.${colors.reset}\n`);
|
|
117
|
+
|
|
118
|
+
} catch (err) {
|
|
119
|
+
console.error(`${colors.red}[PawaPay Setup Warning] ${err.message}${colors.reset}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
install();
|