@allanoricil/nrg-sentinel 1.0.3 → 1.0.5

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/README.md CHANGED
@@ -52,7 +52,9 @@ The table below is updated automatically after each CI run on `main`.
52
52
  | 32 | Flows Inject | ✅ | `4.1.7` |
53
53
  | 33 | Node Event Hijack | ✅ | `4.1.7` |
54
54
  | 34 | Config Node Credentials | ✅ | `4.1.7` |
55
- _Last updated: 2026-03-18T03:24:39Z_
55
+ | 35 | Process Binding Bypass | ✅ | `4.1.7` |
56
+ | 36 | ChildProcess Proto Bypass | ✅ | `4.1.7` |
57
+ _Last updated: 2026-03-23T07:25:21Z_
56
58
  <!-- DEMO-TEST-RESULTS:END -->
57
59
 
58
60
  ## Demos
@@ -95,6 +97,8 @@ Each demo is a self-contained scenario that shows an attack against Node-RED and
95
97
  | 32 | Flows Inject | Injects a malicious node into the running flow via the flows API |
96
98
  | 33 | Node Event Hijack | Spies on or silences another node's input handler via EventEmitter APIs |
97
99
  | 34 | Config Node Credentials | Interactive: explores open / restricted / locked config-node credential access |
100
+ | 35 | Process Binding Bypass | Uses `process.binding('spawn_sync')` to spawn processes, bypassing JS-level guards |
101
+ | 36 | ChildProcess Proto Bypass | Calls `ChildProcess.prototype.spawn()` directly, bypassing module-export guards |
98
102
 
99
103
  ## Capability grants
100
104
 
package/bin/node-red.js CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * @nrg/sentinel v1.0.3
3
+ * @nrg/sentinel v1.0.5
4
4
  * Copyright (c) 2026 NRG. All rights reserved.
5
5
  * Licensed under AGPL-3.0-or-later. Commercial license required for use beyond 14-day trial.
6
6
  * https://allanoricil.github.io/nrg-sentinel-public/
7
7
  */
8
- 'use strict';const _0x3773e2=_0x5455;function _0x64c8(){const _0x125132=['ed25519','750166IufWBb','join','error','1068650DIbxlE','SIGTERM','update','5048820YscHoq','package.json','verify','dirname','1bNYNiZ','--settings','4582890ujzlex','utf8','NODE_OPTIONS','argv','958024nIldUA','--require\x20','settings.js','env','4cxDbdg','assign','exit','kill','63qQsMSc','resolve','execPath','SIGINT','message','NRG_SENTINEL_PUBLIC_KEY','3584581atvBkN','node-red','main','889737IEmOGy','bin'];_0x64c8=function(){return _0x125132;};return _0x64c8();}(function(stringArrayFunction,_0x13763f){const _0x2793c5=_0x5455,stringArray=stringArrayFunction();while(!![]){try{const _0x4edefe=parseInt(_0x2793c5(0xa3))/0x1*(parseInt(_0x2793c5(0xbd))/0x2)+parseInt(_0x2793c5(0xba))/0x3*(parseInt(_0x2793c5(0xad))/0x4)+-parseInt(_0x2793c5(0xc0))/0x5+-parseInt(_0x2793c5(0xc3))/0x6+parseInt(_0x2793c5(0xb7))/0x7+-parseInt(_0x2793c5(0xa9))/0x8*(-parseInt(_0x2793c5(0xb1))/0x9)+-parseInt(_0x2793c5(0xa5))/0xa;if(_0x4edefe===_0x13763f)break;else stringArray['push'](stringArray['shift']());}catch(_0x44d5cb){stringArray['push'](stringArray['shift']());}}}(_0x64c8,0x7c26f));const {createVerify}=require('crypto'),{readFileSync,existsSync}=require('fs'),{spawn}=require('child_process'),path=require('path');function _findCoInstalledNodeRed(){const _0x51dcbb=_0x5455;var _0x5350d9=path['resolve'](path['dirname'](process['argv'][0x1]),'..'),_0x55d661=_0x5350d9;while(!![]){var _0x2a0d32=path[_0x51dcbb(0xa2)](_0x55d661);if(_0x2a0d32===_0x55d661)break;var _0x3db20a=path[_0x51dcbb(0xbe)](_0x2a0d32,'node-red',_0x51dcbb(0xc4));if(existsSync(_0x3db20a))try{var _0x52de8f=JSON['parse'](readFileSync(_0x3db20a,_0x51dcbb(0xa6))),_0x1ba0ae=_0x52de8f['bin']&&_0x52de8f[_0x51dcbb(0xbb)][_0x51dcbb(0xb8)]||_0x52de8f[_0x51dcbb(0xb9)];return path['resolve'](path[_0x51dcbb(0xa2)](_0x3db20a),_0x1ba0ae);}catch(_0x5e7414){}_0x55d661=_0x2a0d32;}return null;}const args=process[_0x3773e2(0xa8)]['slice'](0x2),sIdx=args['findIndex'](_0x1be186=>_0x1be186==='-s'||_0x1be186===_0x3773e2(0xa4)),settingsPath=sIdx!==-0x1?path['resolve'](args[sIdx+0x1]):path['resolve'](_0x3773e2(0xab)),keyPath=process[_0x3773e2(0xac)][_0x3773e2(0xb6)];if(keyPath){const sigPath=settingsPath+'.sig';!existsSync(keyPath)&&(console['error']('[@allanoricil/nrg-sentinel] Public key not found:',keyPath),process[_0x3773e2(0xaf)](0x1));!existsSync(sigPath)&&(console[_0x3773e2(0xbf)]('[@allanoricil/nrg-sentinel] Signature file not found:',sigPath),console[_0x3773e2(0xbf)](' Sign it first: nrg-sentinel sign '+settingsPath),process[_0x3773e2(0xaf)](0x1));try{const pub=readFileSync(keyPath),sig=readFileSync(sigPath),src=readFileSync(settingsPath),ok=createVerify(_0x3773e2(0xbc))[_0x3773e2(0xc2)](src)[_0x3773e2(0xc5)](pub,sig);!ok&&(console['error']('[@allanoricil/nrg-sentinel] settings.js signature INVALID \u2014 aborting.'),console[_0x3773e2(0xbf)]('\x20\x20If\x20settings.js\x20was\x20intentionally\x20changed,\x20re-sign\x20it.'),process['exit'](0x1));}catch(_0x295e0e){console[_0x3773e2(0xbf)]('[@allanoricil/nrg-sentinel] Signature verification error:',_0x295e0e[_0x3773e2(0xb5)]),process['exit'](0x1);}}const preload=path[_0x3773e2(0xb2)](__dirname,'..','preload.js'),env=Object[_0x3773e2(0xae)]({},process[_0x3773e2(0xac)]);env[_0x3773e2(0xa7)]=(_0x3773e2(0xaa)+preload+'\x20'+(env['NODE_OPTIONS']||''))['trim']();let spawnCmd,spawnArgs;function _0x5455(_0x4b3dc1,_0x30487f){_0x4b3dc1=_0x4b3dc1-0xa2;const _0x64c87b=_0x64c8();let _0x5455e7=_0x64c87b[_0x4b3dc1];return _0x5455e7;}var nodeRedBin=_findCoInstalledNodeRed();nodeRedBin?(spawnCmd=process[_0x3773e2(0xb3)],spawnArgs=[nodeRedBin,...args]):(spawnCmd='node-red',spawnArgs=args);const child=spawn(spawnCmd,spawnArgs,{'stdio':'inherit','env':env,'shell':![]});process['on']('SIGTERM',()=>child['kill'](_0x3773e2(0xc1))),process['on'](_0x3773e2(0xb4),()=>child['kill']('SIGINT')),child['on']('exit',(_0xd11f6d,_0x3233ca)=>{const _0x210ce3=_0x5455;_0x3233ca?process[_0x210ce3(0xb0)](process['pid'],_0x3233ca):process['exit'](_0xd11f6d??0x0);});
8
+ 'use strict';const _0x1eb6c7=_0x5347;(function(stringArrayFunction,_0x41ca1f){const _0x3b9d=_0x5347,stringArray=stringArrayFunction();while(!![]){try{const _0x513a72=-parseInt(_0x3b9d(0xe6))/0x1*(parseInt(_0x3b9d(0xd7))/0x2)+-parseInt(_0x3b9d(0xdf))/0x3+-parseInt(_0x3b9d(0xf2))/0x4*(-parseInt(_0x3b9d(0xe5))/0x5)+parseInt(_0x3b9d(0xf8))/0x6+parseInt(_0x3b9d(0xee))/0x7+parseInt(_0x3b9d(0xf0))/0x8*(-parseInt(_0x3b9d(0xf7))/0x9)+parseInt(_0x3b9d(0xdb))/0xa*(parseInt(_0x3b9d(0xe0))/0xb);if(_0x513a72===_0x41ca1f)break;else stringArray['push'](stringArray['shift']());}catch(_0xb44558){stringArray['push'](stringArray['shift']());}}}(_0x29d9,0x7e101));function _0x29d9(){const _0x500e05=['11920XBsVHB','resolve','crypto','ed25519','2578290mANlEG','4664bZncbW','settings.js','node-red','NODE_OPTIONS','env','385aCghEU','1CBiJry','assign','findIndex','join','kill','trim','path','dirname','3911859GbToOk','argv','8NuRVKI','exit','28412IUpOmD','inherit','child_process','error','--require\x20','5429889lzRelw','3254994SsZUQA','349142suesIN','SIGINT','bin','SIGTERM'];_0x29d9=function(){return _0x500e05;};return _0x29d9();}function _0x5347(_0x2f00e0,_0x16e9a8){_0x2f00e0=_0x2f00e0-0xd7;const _0x29d935=_0x29d9();let _0x534711=_0x29d935[_0x2f00e0];return _0x534711;}const {createVerify}=require(_0x1eb6c7(0xdd)),{readFileSync,existsSync}=require('fs'),{spawn}=require(_0x1eb6c7(0xf4)),path=require(_0x1eb6c7(0xec));function _findCoInstalledNodeRed(){const _0x41c2b8=_0x5347;var _0x153754=path[_0x41c2b8(0xdc)](path[_0x41c2b8(0xed)](process[_0x41c2b8(0xef)][0x1]),'..'),_0x3bfa8a=_0x153754;while(!![]){var _0x437f29=path['dirname'](_0x3bfa8a);if(_0x437f29===_0x3bfa8a)break;var _0x3d1eaa=path[_0x41c2b8(0xe9)](_0x437f29,'node-red','package.json');if(existsSync(_0x3d1eaa))try{var _0x3f153f=JSON['parse'](readFileSync(_0x3d1eaa,'utf8')),_0x1b6701=_0x3f153f[_0x41c2b8(0xd9)]&&_0x3f153f['bin'][_0x41c2b8(0xe2)]||_0x3f153f['main'];return path[_0x41c2b8(0xdc)](path[_0x41c2b8(0xed)](_0x3d1eaa),_0x1b6701);}catch(_0x580386){}_0x3bfa8a=_0x437f29;}return null;}const args=process['argv']['slice'](0x2),sIdx=args[_0x1eb6c7(0xe8)](_0x1452c7=>_0x1452c7==='-s'||_0x1452c7==='--settings'),settingsPath=sIdx!==-0x1?path[_0x1eb6c7(0xdc)](args[sIdx+0x1]):path[_0x1eb6c7(0xdc)](_0x1eb6c7(0xe1)),keyPath=process[_0x1eb6c7(0xe4)]['NRG_SENTINEL_PUBLIC_KEY'];if(keyPath){const sigPath=settingsPath+'.sig';!existsSync(keyPath)&&(console['error']('[@allanoricil/nrg-sentinel] Public key not found:',keyPath),process[_0x1eb6c7(0xf1)](0x1));!existsSync(sigPath)&&(console[_0x1eb6c7(0xf5)]('[@allanoricil/nrg-sentinel] Signature file not found:',sigPath),console['error'](' Sign it first: nrg-sentinel sign '+settingsPath),process['exit'](0x1));try{const pub=readFileSync(keyPath),sig=readFileSync(sigPath),src=readFileSync(settingsPath),ok=createVerify(_0x1eb6c7(0xde))['update'](src)['verify'](pub,sig);!ok&&(console['error']('[@allanoricil/nrg-sentinel] settings.js signature INVALID \u2014 aborting.'),console['error']('\x20\x20If\x20settings.js\x20was\x20intentionally\x20changed,\x20re-sign\x20it.'),process['exit'](0x1));}catch(_0x5e968c){console['error']('[@allanoricil/nrg-sentinel] Signature verification error:',_0x5e968c['message']),process['exit'](0x1);}}const preload=path[_0x1eb6c7(0xdc)](__dirname,'..','preload.js'),env=Object[_0x1eb6c7(0xe7)]({},process['env']);env['NODE_OPTIONS']=(_0x1eb6c7(0xf6)+preload+'\x20'+(env[_0x1eb6c7(0xe3)]||''))[_0x1eb6c7(0xeb)]();let spawnCmd,spawnArgs;var nodeRedBin=_findCoInstalledNodeRed();nodeRedBin?(spawnCmd=process['execPath'],spawnArgs=[nodeRedBin,...args]):(spawnCmd=_0x1eb6c7(0xe2),spawnArgs=args);const child=spawn(spawnCmd,spawnArgs,{'stdio':_0x1eb6c7(0xf3),'env':env,'shell':![]});process['on'](_0x1eb6c7(0xda),()=>child['kill'](_0x1eb6c7(0xda))),process['on'](_0x1eb6c7(0xd8),()=>child[_0x1eb6c7(0xea)](_0x1eb6c7(0xd8))),child['on'](_0x1eb6c7(0xf1),(_0x2e1cc4,_0x19f087)=>{_0x19f087?process['kill'](process['pid'],_0x19f087):'jGXaL'!=='jGXaL'?(_0x391a35=process['execPath'],_0x1d8e54=[_0x5d694b,..._0x48cf28]):process['exit'](_0x2e1cc4??0x0);});
package/flow-diff.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
- * @nrg/sentinel v1.0.3
2
+ * @nrg/sentinel v1.0.5
3
3
  * Copyright (c) 2026 NRG. All rights reserved.
4
4
  * Licensed under AGPL-3.0-or-later. Commercial license required for use beyond 14-day trial.
5
5
  * https://allanoricil.github.io/nrg-sentinel-public/
6
6
  */
7
- 'use strict';(function(stringArrayFunction,_0x4bebca){var _0x1a0327=_0x5648,stringArray=stringArrayFunction();while(!![]){try{var _0x7f874d=-parseInt(_0x1a0327(0xbf))/0x1+parseInt(_0x1a0327(0xc9))/0x2*(-parseInt(_0x1a0327(0xc0))/0x3)+parseInt(_0x1a0327(0xbe))/0x4+parseInt(_0x1a0327(0xc6))/0x5+parseInt(_0x1a0327(0xc1))/0x6*(parseInt(_0x1a0327(0xc7))/0x7)+parseInt(_0x1a0327(0xbb))/0x8*(parseInt(_0x1a0327(0xb5))/0x9)+-parseInt(_0x1a0327(0xc5))/0xa;if(_0x7f874d===_0x4bebca)break;else stringArray['push'](stringArray['shift']());}catch(_0x470c88){stringArray['push'](stringArray['shift']());}}}(_0x59ac,0xa6589));function _0x59ac(){var _0x80e76=['prototype','1504UHBChZ','call','filter','4010596QErilG','1169682HSjKIE','143499HvWIkj','3863562UOaBhJ','indexOf','ukQXO','length','12037420uEOdIU','6288470KNNKgM','7CQsgcz','uVjWs','2VMNiMw','isArray','has','9495mdmGBx','wires','push','sort','forEach'];_0x59ac=function(){return _0x80e76;};return _0x59ac();}var COMPARISON_STRIP=['x','y','z','wires'];function shouldSkipNode(_0x431adb){var _0x5d29e0=_0x5648;if(!_0x431adb||!_0x431adb['id'])return!![];if(!Object[_0x5d29e0(0xba)]['hasOwnProperty'][_0x5d29e0(0xbc)](_0x431adb,'x')||!Object['prototype']['hasOwnProperty']['call'](_0x431adb,'y'))return!![];return![];}function normalizeForComparison(_0x1c30ea){var _0x3c880e=_0x5648,_0x10aa7d={},_0x2bb846=Object['keys'](_0x1c30ea)[_0x3c880e(0xb8)]();for(var _0x3706b7=0x0;_0x3706b7<_0x2bb846[_0x3c880e(0xc4)];_0x3706b7++){COMPARISON_STRIP[_0x3c880e(0xc2)](_0x2bb846[_0x3706b7])===-0x1&&(_0x10aa7d[_0x2bb846[_0x3706b7]]=_0x1c30ea[_0x2bb846[_0x3706b7]]);}return _0x10aa7d;}function deepEqual(_0x1f7842,_0x245b08){return JSON['stringify'](_0x1f7842)===JSON['stringify'](_0x245b08);}function toEdges(_0x699d93){var _0x5410fa=_0x5648,_0x3f3f41=new Set();for(var _0x16dda8=0x0;_0x16dda8<_0x699d93[_0x5410fa(0xc4)];_0x16dda8++){if('xbxVu'!=='xbxVu')_0x29795b[_0x4065d3[_0x517865]['id']]=_0x34d696[_0x54f41f];else{var _0x3adf78=_0x699d93[_0x16dda8];if(!_0x3adf78[_0x5410fa(0xb6)]||!Array[_0x5410fa(0xca)](_0x3adf78[_0x5410fa(0xb6)]))continue;for(var _0x1741a9=0x0;_0x1741a9<_0x3adf78[_0x5410fa(0xb6)][_0x5410fa(0xc4)];_0x1741a9++){var _0xeca37e=_0x3adf78['wires'][_0x1741a9];if(!Array[_0x5410fa(0xca)](_0xeca37e))continue;for(var _0x128aa3=0x0;_0x128aa3<_0xeca37e['length'];_0x128aa3++){_0x3f3f41['add'](_0x3adf78['id']+':'+_0x1741a9+'→'+_0xeca37e[_0x128aa3]);}}}}return _0x3f3f41;}function _0x5648(_0x19298a,_0x34f6fb){_0x19298a=_0x19298a-0xb4;var _0x59aced=_0x59ac();var _0x564881=_0x59aced[_0x19298a];return _0x564881;}function diffFlows(_0x3014bd,_0x3d2408){var _0x2bd44f=_0x5648,_0x2cc6ea=(Array['isArray'](_0x3014bd)?_0x3014bd:[])[_0x2bd44f(0xbd)](function(_0x2d4bc4){return!shouldSkipNode(_0x2d4bc4);}),_0x5c0364=(Array['isArray'](_0x3d2408)?_0x3d2408:[])[_0x2bd44f(0xbd)](function(_0x1b7dd8){return!shouldSkipNode(_0x1b7dd8);}),_0x50f044={};for(var _0x30bc77=0x0;_0x30bc77<_0x2cc6ea[_0x2bd44f(0xc4)];_0x30bc77++){_0x2cc6ea[_0x30bc77]&&_0x2cc6ea[_0x30bc77]['id']&&(_0x50f044[_0x2cc6ea[_0x30bc77]['id']]=_0x2cc6ea[_0x30bc77]);}var _0x55d3a8={};for(var _0x3e54df=0x0;_0x3e54df<_0x5c0364[_0x2bd44f(0xc4)];_0x3e54df++){_0x5c0364[_0x3e54df]&&_0x5c0364[_0x3e54df]['id']&&(_0x55d3a8[_0x5c0364[_0x3e54df]['id']]=_0x5c0364[_0x3e54df]);}var _0x4f245f=[],_0x420930=[],_0x4ab81f=[],_0x5508ac=Object['keys'](_0x55d3a8);for(var _0x5f6073=0x0;_0x5f6073<_0x5508ac[_0x2bd44f(0xc4)];_0x5f6073++){var _0x3179b9=_0x5508ac[_0x5f6073];if(!_0x50f044[_0x3179b9])_0x4f245f['push'](_0x55d3a8[_0x3179b9]);else{var _0x3fc220=normalizeForComparison(_0x50f044[_0x3179b9]),_0x331b3d=normalizeForComparison(_0x55d3a8[_0x3179b9]);!deepEqual(_0x3fc220,_0x331b3d)&&_0x4ab81f[_0x2bd44f(0xb7)]({'id':_0x3179b9,'before':_0x50f044[_0x3179b9],'after':_0x55d3a8[_0x3179b9]});}}var _0x58c82a=Object['keys'](_0x50f044);for(var _0x54aef4=0x0;_0x54aef4<_0x58c82a['length'];_0x54aef4++){!_0x55d3a8[_0x58c82a[_0x54aef4]]&&_0x420930[_0x2bd44f(0xb7)](_0x50f044[_0x58c82a[_0x54aef4]]);}var _0x1f0750=toEdges(_0x2cc6ea),_0x3bcd00=toEdges(_0x5c0364),_0x28a3fc=[];_0x3bcd00['forEach'](function(_0x5d1835){var _0x2ba976=_0x5648;if(_0x2ba976(0xc8)!==_0x2ba976(0xc3)){if(!_0x1f0750[_0x2ba976(0xb4)](_0x5d1835))_0x28a3fc['push'](_0x5d1835);}else!_0x10873a[_0x188ddd[_0xb38a81]]&&_0x30f138['push'](_0x4dfd46[_0x4ffc3e[_0x2bd84d]]);});var _0x21e6b1=[];return _0x1f0750[_0x2bd44f(0xb9)](function(_0x1d0fe2){var _0x31d201=_0x5648;if(!_0x3bcd00[_0x31d201(0xb4)](_0x1d0fe2))_0x21e6b1['push'](_0x1d0fe2);}),{'nodesAdded':_0x4f245f,'nodesRemoved':_0x420930,'nodesModified':_0x4ab81f,'connectionsAdded':_0x28a3fc,'connectionsRemoved':_0x21e6b1};}module['exports']={'diffFlows':diffFlows};
7
+ 'use strict';var _0x2e7feb=_0x28f8;(function(stringArrayFunction,_0x3e5b99){var _0x954ae=_0x28f8,stringArray=stringArrayFunction();while(!![]){try{var _0x1cb612=parseInt(_0x954ae(0xfb))/0x1+parseInt(_0x954ae(0xf4))/0x2*(parseInt(_0x954ae(0xe3))/0x3)+-parseInt(_0x954ae(0xec))/0x4+parseInt(_0x954ae(0xf8))/0x5+-parseInt(_0x954ae(0xe1))/0x6+-parseInt(_0x954ae(0xf9))/0x7*(parseInt(_0x954ae(0xf3))/0x8)+-parseInt(_0x954ae(0xfa))/0x9;if(_0x1cb612===_0x3e5b99)break;else stringArray['push'](stringArray['shift']());}catch(_0xe358d4){stringArray['push'](stringArray['shift']());}}}(_0x7cea,0x2d0d8));function _0x7cea(){var _0x262c6c=['1611288kNQcIw','283456ITpqNb','hasOwnProperty','200448INpOon','length','6ShIUMO','keys','VQLki','TdxJH','sort','stringify','has','push','exports','1083820YFNzpx','UcMWZ','prototype','jaJyY','forEach','vWMLx','wires','8136nxvrYH','255972ozuynx','isArray','call','filter','1481540gbBwaV','1155IftNUH'];_0x7cea=function(){return _0x262c6c;};return _0x7cea();}var COMPARISON_STRIP=['x','y','z',_0x2e7feb(0xf2)];function shouldSkipNode(_0x340db0){var _0x55103b=_0x28f8;if(!_0x340db0||!_0x340db0['id'])return!![];if(!Object['prototype']['hasOwnProperty'][_0x55103b(0xf6)](_0x340db0,'x')||!Object['prototype']['hasOwnProperty'][_0x55103b(0xf6)](_0x340db0,'y'))return!![];return![];}function normalizeForComparison(_0x6115da){var _0x144243=_0x28f8,_0x48bbb2={},_0x42eef3=Object[_0x144243(0xe4)](_0x6115da)['sort']();for(var _0x559ee3=0x0;_0x559ee3<_0x42eef3[_0x144243(0xe2)];_0x559ee3++){COMPARISON_STRIP['indexOf'](_0x42eef3[_0x559ee3])===-0x1&&(_0x48bbb2[_0x42eef3[_0x559ee3]]=_0x6115da[_0x42eef3[_0x559ee3]]);}return _0x48bbb2;}function deepEqual(_0x1ab5e0,_0x4b2e03){var _0xb10595=_0x28f8;return JSON[_0xb10595(0xe8)](_0x1ab5e0)===JSON[_0xb10595(0xe8)](_0x4b2e03);}function _0x28f8(_0x5511ad,_0x33517b){_0x5511ad=_0x5511ad-0xe0;var _0x7cea58=_0x7cea();var _0x28f8ec=_0x7cea58[_0x5511ad];return _0x28f8ec;}function toEdges(_0x2e1b88){var _0x3bab24=_0x28f8,_0x36edd5=new Set();for(var _0x9ecb9e=0x0;_0x9ecb9e<_0x2e1b88['length'];_0x9ecb9e++){var _0x282869=_0x2e1b88[_0x9ecb9e];if(!_0x282869[_0x3bab24(0xf2)]||!Array[_0x3bab24(0xf5)](_0x282869['wires']))continue;for(var _0x816234=0x0;_0x816234<_0x282869[_0x3bab24(0xf2)][_0x3bab24(0xe2)];_0x816234++){if(_0x3bab24(0xed)!=='UcMWZ')_0x4a8058[_0x286fce[_0x2ff0fe]['id']]=_0x283b2[_0x1b8532];else{var _0x5491d8=_0x282869['wires'][_0x816234];if(!Array[_0x3bab24(0xf5)](_0x5491d8))continue;for(var _0xdad3de=0x0;_0xdad3de<_0x5491d8[_0x3bab24(0xe2)];_0xdad3de++){_0x36edd5['add'](_0x282869['id']+':'+_0x816234+'→'+_0x5491d8[_0xdad3de]);}}}}return _0x36edd5;}function diffFlows(_0x58bea3,_0x18414b){var _0x267697=_0x28f8,_0xa92cda=(Array[_0x267697(0xf5)](_0x58bea3)?_0x58bea3:[])['filter'](function(_0x41448a){return!shouldSkipNode(_0x41448a);}),_0x5a23d0=(Array['isArray'](_0x18414b)?_0x18414b:[])[_0x267697(0xf7)](function(_0x16e409){var _0x508128=_0x28f8;if(_0x508128(0xe6)!==_0x508128(0xe5))return!shouldSkipNode(_0x16e409);else _0x5dc22b[_0x508128(0xea)](_0x360a3e[_0x5a924f[_0x1aad82]]);}),_0x4c43b7={};for(var _0x5794df=0x0;_0x5794df<_0xa92cda[_0x267697(0xe2)];_0x5794df++){_0xa92cda[_0x5794df]&&_0xa92cda[_0x5794df]['id']&&(_0x4c43b7[_0xa92cda[_0x5794df]['id']]=_0xa92cda[_0x5794df]);}var _0x257734={};for(var _0x3dc929=0x0;_0x3dc929<_0x5a23d0[_0x267697(0xe2)];_0x3dc929++){if('sFnBf'==='sFnBf')_0x5a23d0[_0x3dc929]&&_0x5a23d0[_0x3dc929]['id']&&(_0x257734[_0x5a23d0[_0x3dc929]['id']]=_0x5a23d0[_0x3dc929]);else{var _0x4e40db={},_0x31fc8b=Object['keys'](_0x3edf6a)[_0x267697(0xe7)]();for(var _0x2f9cfe=0x0;_0x2f9cfe<_0x31fc8b['length'];_0x2f9cfe++){_0x5d03a3['indexOf'](_0x31fc8b[_0x2f9cfe])===-0x1&&(_0x4e40db[_0x31fc8b[_0x2f9cfe]]=_0x5abd63[_0x31fc8b[_0x2f9cfe]]);}return _0x4e40db;}}var _0x2985d8=[],_0x509f74=[],_0x542508=[],_0x3f047d=Object[_0x267697(0xe4)](_0x257734);for(var _0x387e40=0x0;_0x387e40<_0x3f047d['length'];_0x387e40++){if('vWMLx'===_0x267697(0xf1)){var _0x3398f4=_0x3f047d[_0x387e40];if(!_0x4c43b7[_0x3398f4])_0x2985d8['push'](_0x257734[_0x3398f4]);else{var _0x16bf6b=normalizeForComparison(_0x4c43b7[_0x3398f4]),_0x232a4a=normalizeForComparison(_0x257734[_0x3398f4]);!deepEqual(_0x16bf6b,_0x232a4a)&&_0x542508[_0x267697(0xea)]({'id':_0x3398f4,'before':_0x4c43b7[_0x3398f4],'after':_0x257734[_0x3398f4]});}}else _0x55117c[_0x267697(0xea)](_0x339456[_0x4c1b5a]);}var _0xa550db=Object[_0x267697(0xe4)](_0x4c43b7);for(var _0x4e7b5b=0x0;_0x4e7b5b<_0xa550db['length'];_0x4e7b5b++){if(!_0x257734[_0xa550db[_0x4e7b5b]]){if('jaJyY'===_0x267697(0xef))_0x509f74['push'](_0x4c43b7[_0xa550db[_0x4e7b5b]]);else{var _0x4c47e5=_0x45af26[_0xadee65];if(!_0xfd08ba[_0x4c47e5])_0x4fc289[_0x267697(0xea)](_0x981dfb[_0x4c47e5]);else{var _0x3ac26e=_0x5cef55(_0x4223c5[_0x4c47e5]),_0x3fa2df=_0x2b7bc4(_0x4b56f0[_0x4c47e5]);!_0x52f771(_0x3ac26e,_0x3fa2df)&&_0x23f058['push']({'id':_0x4c47e5,'before':_0x3aaaa9[_0x4c47e5],'after':_0x1eab5c[_0x4c47e5]});}}}}var _0x337f4b=toEdges(_0xa92cda),_0x20b4b5=toEdges(_0x5a23d0),_0x47d210=[];_0x20b4b5[_0x267697(0xf0)](function(_0x49dd8a){var _0x4f7a53=_0x28f8;if('JjDCq'==='JjDCq'){if(!_0x337f4b[_0x4f7a53(0xe9)](_0x49dd8a))_0x47d210['push'](_0x49dd8a);}else{if(!_0x3769a3||!_0xc65f25['id'])return!![];if(!Object[_0x4f7a53(0xee)][_0x4f7a53(0xe0)][_0x4f7a53(0xf6)](_0x1846d9,'x')||!Object['prototype']['hasOwnProperty']['call'](_0x59954f,'y'))return!![];return![];}});var _0x1bb719=[];return _0x337f4b[_0x267697(0xf0)](function(_0x2257ec){var _0x5acbcc=_0x28f8;if(!_0x20b4b5['has'](_0x2257ec))_0x1bb719[_0x5acbcc(0xea)](_0x2257ec);}),{'nodesAdded':_0x2985d8,'nodesRemoved':_0x509f74,'nodesModified':_0x542508,'connectionsAdded':_0x47d210,'connectionsRemoved':_0x1bb719};}module[_0x2e7feb(0xeb)]={'diffFlows':diffFlows};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allanoricil/nrg-sentinel",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "Node-RED Runtime Security Hardening",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "AllanOricil",