UNPKG

@opcua/for-node-red

Version:

The Node-RED node to communicate via OPC UA, powered NodeOPCUA and developed by Sterfive's team

456 lines (403 loc) β€’ 64.3 kB
<style> .licence-widget-icon{font-size:1.5em;margin-right:10px}.licence-widget{background-color:#fdfdfd;border:1px solid #eaeaea;border-radius:6px;box-sizing:border-box;font-family:Courier New,Courier,monospace;font-size:.8em;font-style:italic;margin-bottom:10px;margin-top:10px;max-height:600px;overflow-x:auto;overflow-y:auto;padding:10px;white-space:nowrap;width:100%}.licence-widget::-webkit-scrollbar{display:none}.licence-widget{scrollbar-color:transparent transparent;scrollbar-width:none}.licence-widget-compact{align-items:center;display:flex;margin-bottom:4px;margin-top:4px;max-height:none;padding:6px 10px;white-space:nowrap}.licence-widget-compact .licence-widget-icon{font-size:1em;margin-right:6px}.licence-widget-compact .licence-widget-msg{font-size:.85em}.licence-widget-AUTHORIZED{background-color:#d5f5e3}.licence-widget-FAILED{background-color:#fadbd8}.licence-widget-details{text-wrap:pretty;font-size:.8em;font-style:italic;padding:2px} /*# sourceMappingURL=OpcUa-Endpoint2.css.map */ </style> <!-- HTML CONTENTS --> <script type="text/x-red" data-template-name="OpcUa-Endpoint2"> <div id="licenceWidget"></div> <div class="form-row"> <label for="node-config-input-name"><i class="fa fa-tag"></i>Name</label> <input type="text" id="node-config-input-name" placeholder="enter the friendly name of the connection" /> </div> <div class="form-row"> <ul style="min-width: 600px; margin-bottom: 20px" id="node-config-endpoint-tabs"></ul> </div> <div id="node-config-endpoint-tabs-content" style="min-height: 150px"> <div id="endpoint-tab-connection" style="display: none"> <div class="form-row"> <label for="node-config-input-endpoint"> <i class="fa fa-plug"> </i> Endpoint</label> <input type="text" id="node-config-input-endpoint" placeholder="opc.tcp://opcuademo.sterfive.com:26543" /> </div> <div class="form-row"> <div class="form-tips" style="width: 100%"> Tip: ensure that you have deploy your flow at least once with this endpoint connection settings to take advantage of OPCUA for NodeRed advanced browse and node selection capability </div> </div> <div class="form-row"> <button type="button" id="test-connection" class="btn btn-primary" style="margin-left: 10px"> <i class="fa fa-flask"> </i> Check Connection </button> &nbsp; <button type="button" id="goto-config" class="btn btn-primary" style="margin-left: 10px"> <i class="fa fa-lock"></i> Check Licence </button> &nbsp; <i id="connection-pending" class="hide fa fa-spinner" style="display: none" color="green"></i> <i id="connection-success" class="hide fa fa-check-square" style="color: green; font-size: 1.2em; display: none"></i> <i id="connection-failure" class="hide fa fa-exclamation-triangle" style="color: red; font-size: 1.2em; display: none" ></i> <style> #connection-messages { margin-top: 10px; margin-bottom: 10px; display: none; background-color: #fdfdfd; width: 100%; max-height: 200px; padding: 10px; box-sizing: border-box; border-radius: 6px; font-size: 0.8em; font-style: italic; font-family: "Courier New", Courier, monospace; white-space: nowrap; overflow-x: auto; overflow-y: auto; } /* For Webkit browsers like Chrome and Safari */ #connection-messages::-webkit-scrollbar { display: none; } #connection-messages { /* For Firefox */ scrollbar-width: none; scrollbar-color: transparent transparent; /* makes the thumb and track transparent */ } #connection-failure:not(.hide) ~ #connection-messages { border: 2px solid red; display: inline-block; } #connection-success:not(.hide) ~ #connection-messages { border: 2px solid green; display: inline-block; } #connection-messages p { display: block; margin: 2, 0, 2, 0; padding: 0, 0, 0, 0, 0; /* Adjust spacing before the break */ } </style> <div id="connection-messages"></div> </div> <fieldset> <legend>Security</legend> <div class="form-row"> <label for="node-config-input-securityMode"><i class="icon-key"></i> Security Mode</label> <select type="text" id="node-config-input-securityMode"> <option value="None">None</option> <option value="Sign">Sign</option> <option value="SignAndEncrypt">Sign&Encrypt</option> </select> </div> <div class="form-row section-securityPolicy"> <label for="node-config-input-securityPolicy"><i class="icon-key"></i> Security Policy</label> <select type="text" id="node-config-input-securityPolicy"> <!-- <option value="None">None</option> --> <option value="Basic256Rsa15">Basic256Rsa15</option> <option value="Basic256Sha256">Basic256Sha256</option> <option value="Aes128_Sha256">Aes128_Sha256</option> <option value="Aes128_Sha256_RsaOaep">Aes128_Sha256_RsaOaep</option> <!-- <option value="PubSub_Aes128_CTR">PubSub_Aes128_CTR</option> <option value="PubSub_Aes256_CTR">PubSub_Aes256_CTR</option> --> <option value="Basic128">Basic128 (obsolete)</option> <option value="Basic192">Basic192 (obsolete)</option> <option value="Basic192Rsa15">Basic192Rsa15 (obsolete)</option> <option value="Basic128Rsa15">Basic128Rsa15 (obsolete)</option> <option value="Basic256">Basic256 (obsolete)</option> </select> </div> </fieldset> <fieldset> <legend>User Session Type</legend> <div class="form-row"> <label for="node-config-input-userIdentityType"><i class="icon-key"></i>User Identity</label> <select type="text" id="node-config-input-userIdentityType"> <option value="Anonymous">Anonymous</option> <option value="UserName">Username & Password</option> <option value="Certificate">X509 Certificate</option> </select> </div> <div class="section-userIdentityType-UserName"> <div class="form-row"> <label for="node-config-input-userName"><i class="fa fa-user"></i> User</label> <input type="text" id="node-config-input-userName" /> </div> <div class="form-row"> <label for="node-config-input-password"><i class="fa fa-lock"></i> Password</label> <input type="password" id="node-config-input-password" /> </div> </div> <div class="section-userIdentityType-Certificate"> <div class="form-row"> <label style="width: 35%" for="node-config-input-userCertificate" ><i class="fa fa-certificate"></i> Certificate</label > </div> <div class="form-row"> <label style="width: 35%" for="node-config-input-userPrivatekey"><i class="fa fa-key"></i> Private key</label> <input style="width: 65%" type="text" id="node-config-input-userPrivatekey" /> </div> </div> </fieldset> <hr /> <style> label { display: block; cursor: pointer; } </style> <style> .custom-checkbox-container { width: 100%; cursor: pointer; user-select: none; } .custom-checkbox-label { cursor: pointer; font-family: "FontAwesome", sans-serif; } .custom-checkbox-input:checked + .custom-checkbox-label::before { content: "\f205"; font-size: 24px; /* fa-toggle-on */ } .custom-checkbox-input:not(:checked) + .custom-checkbox-label::before { content: "\f204"; font-size: 24px; /* fa-toggle-off */ } .custom-checkbox-input { display: none !important; position: absolute; opacity: 0; pointer-events: none; } .subscription-mini-form table { width: 100%; border: 1; } .subscription-mini-form label { display: block; cursor: pointer; width: auto; } .subscription-mini-form input { width: calc(100% - 10px); /* Takes the full width minus 10px for right spacing */ box-sizing: border-box; /* Ensures padding and borders are included in the width */ } .button-style a { display: inline-block; padding: 10px 20px; background-color: #4caf50; color: white; text-decoration: none; border-radius: 4px; border: none; cursor: pointer; font-size: 16px; } .button-style a:hover { background-color: #45a049; } .button-style a:active { background-color: #3e8e41; } </style> <div class="form-row"> <div id="pki-status-widget" style=" display: flex; align-items: center; justify-content: space-between; padding: 8px 14px; border-radius: 6px; border: 1px solid #e0e0e0; background: #fafafa; font-size: 0.85em; margin-bottom: 0; "> <div style="display: flex; align-items: center; gap: 8px;"> <i class="fa fa-spinner fa-spin" style="color: #888; font-size: 1.1em;"></i> <span id="pki-status-text" style="color: #888;">Checking certificate…</span> </div> <button type="button" id="manage-certificates-link" class="btn btn-primary" style="margin: 0; padding: 4px 10px; font-size: 0.85em;"> <i class="fa fa-certificate"></i> Manage Certificates </button> </div> </div> <div class="form-row"> <label class="custom-checkbox-container" style="width: 100%"> <input id="toggleAdvancedSection" checked="false" type="checkbox" class="custom-checkbox-input" /> <span class="custom-checkbox-label">&nbsp;Advanced parameters ....</span> </label> </div> <div id="section-Advanced"> <!--- For PKI --> <div class="form-row"> <label for="node-config-input-pkiName"><i class="fa fa-tag"></i>PKIName</label> <input type="text" id="node-config-input-pkiName" placeholder="enter an alternate pki name or leave blank for default" /> </div> <!--- For Transport settings --> <div class="form-row"> <label class="custom-checkbox-container" style="width: 100%"> <input id="node-config-input-useTransport" type="checkbox" class="custom-checkbox-input" /> <span class="custom-checkbox-label">&nbsp;Use custom transport settings</span> </label> </div> <div id="section-TransportSettings"> <p>only use those parameters if you know what you are doing !</p> <div class="form-row"> <label for="node-config-input-maxChunkCount"><i class="icon-tasks"></i> Max ChunkCount</label> <input type="number" id="node-config-input-maxChunkCount" placeholder="1000" style="width: 20%" /> </div> <div class="form-row"> <label for="node-config-input-maxMessageSize"><i class="icon-tasks"></i> Max MessageSize</label> <input type="number" id="node-config-input-maxMessageSize" placeholder="8192000000" style="width: 20%" /> </div> <div class="form-row"> <label for="node-config-input-receiveBufferSize"><i class="icon-tasks"></i> Receive BufferSize</label> <input type="number" id="node-config-input-receiveBufferSize" placeholder="65535" style="width: 20%" /> </div> <div class="form-row"> <label for="node-config-input-sendBufferSize"><i class="icon-tasks"></i> Send BufferSize</label> <input type="number" id="node-config-input-sendBufferSize" placeholder="65535" style="width: 20%" /> </div> </div> </div> </div> <div id="endpoint-tab-subscriptions" style="display: none"> <div class="form-row"> <ol class="DebugMe" id="subscriptions-container"></ol> </div> </div> <div id="endpoint-tab-namespace-aliases" style="display: none"> <div class="form-row"> <button type="button" id="extract-aliases"><i class="fa fa-copy">Extract namespace table</i></button> <ol id="editable-list-aliases-container"></ol> </div> </div> </div> <!-- the template for the subscription --> <div class="hide template subscription-mini-form" id="subscription-template"> <h3>subscription <span class="subscription-id"></span></h3> <input type="checkbox" class="hide input-isDefault" /> <table> <tr> <td><i class="fa fa-tag"></i><strong>&nbsp;Name </strong></td> <td> <input type="text" class="input-name" placeholder="enter a subscription name" /> </td> </tr> <tr> <td><i class="fa fa-bell"> </i> &nbsp;Publishing Interval</td> <td> <!-- stored canonically in ms; entered via display field + unit (bindDurationField) --> <input type="hidden" class="input-requestedPublishingInterval" /> <input type="number" min="0" class="input-requestedPublishingInterval-display" style="width: 90px" /> <select class="input-requestedPublishingInterval-unit" style="max-width: 110px"></select> </td> </tr> <tr> <td><i class="fa fa-heartbeat"> </i>&nbsp;Max Keepalive count</td> <td> <input type="number" class="input-requestedMaxKeepAliveCount" /> </td> </tr> <tr> <td><i class="fa fa-hourglass-end"> </i> &nbsp;Live Time Count</td> <td> <input type="number" class="input-requestedLifetimeCount" /> </td> </tr> <tr> <td><i class="fa fa-tag"></i> &nbsp;Max notifications per publishing</td> <td> <input type="number" class="input-maxNotificationsPerPublish" /> </td> </tr> <tr> <td><i class="fa fa-exclamation"></i>&nbsp; Priority</td> <td> <input type="number" class="input-priority" /> </td> </tr> <tr> <td>Publishing</td> <td> <label class="custom-checkbox-container"> <input type="checkbox" checked class="nide custom-checkbox-input input-publishingEnabled" /> <span class="custom-checkbox-label"></span> </label> </td> </tr> </table> </div> </script> <!-- MARKDOWN CONTENTS --> <script type="text/markdown" data-help-name="OpcUa-Endpoint2"> # notes: ## Where is the PKI ? - `@opcua/for-node-red` stores its PKI in the following folder | Platform | Location | | -------- | ------------------------------------------------- | | Linux | "~/.config/opcua-for-node-red-nodejs/PKI" | | Windows | %APP_DATA%\Roaming\opcua-for-node-red-nodejs\PKI" | - This PKI is shared by all endpoint connection nodes in order to avoid having to generate multiple certificates for each endpoint and facilitate the management of the certificates. - all OPCUA Client connection that are created by the OPCUA Endpoint node will use this PKI. #### PKI folder structure ```console └─ πŸ“‚ certificates β””β”€πŸ“‚ PKI β”œβ”€πŸ“‚ issuers β”‚ β”œβ”€πŸ“‚ certs β”‚ β””β”€πŸ“‚ crl β”œβ”€πŸ“‚ own β”‚ β”œβ”€πŸ“‚ certs β”‚ β”‚ β””β”€πŸ” client_certificate.pem β”‚ β””β”€πŸ“‚ private β”‚ β””β”€πŸ” private_key.pem β”œβ”€πŸ“‚ rejected β””β”€πŸ“‚ trusted β”œβ”€πŸ“‚ certs β””β”€πŸ“‚ crl ``` ## Secure connections: When using a secure connection to the OPCUA server, you'll have to make sure that the server certificate is trusted by the client and that the client certificate is trusted by the server. This is needed to ensure that the connection is secure and that the data is not intercepted by a third party. Client and Server uses public key stored in certificates of the other party and its own private key to encrypt and decrypt data. If the `@opcua/for-node-red` client certificate is not trusted by the server, the server will refuse the connection. connection to endpoint opc.tcp://machine:4840 could not be established ### ensuring that the `@opcua/for-node-red` client certificate is trusted by the server - If you are using a "Sign" or "SignAndEncrypt" connection to the OPCUA Server, you'll have to make sure that your client certificate is trusted by the server. - This can be done by copying the client certificate of your `@opcua/for-node-red` instance to the server and adding it to the trusted certificates folder in the PKI of the server. - (you can download the client certificate in PEM or DER format from the OPCUA Endpoint node, using the provided buttons) - The client certificate can be found in the "pki" folder of the OPCUA Endpoint node. - The certificate is named `client_certificate.pem` and is located in the PKI folder (see above) at this location `PKI/own/certs/` - Refers to your server documentation to know where to copy the client certificate. ### ensuring that `@opcua/for-node-red` trusts the server certificate - Similarly, if you are using a "Sign" or "SignAndEncrypt" connection to the OPCUA Server, you'll have to make sure that the server certificate is trusted by the client. - By default, `@opcua/for-node-red` is setup to automatically accept any server certificate. This can be changed by setting the "rejectUnauthorized" option to true the global settings of the OPCUA Endpoint node. ( available to Pro version only) ## default certificate generation - A default self-signed certificate generation is done by the `@opcua/for-node-red` node when it is first deployed. - The certificate is generated in the "pki" folder of the OPCUA Endpoint node. - The certificate is named "client_certificate.pem" and is located in the folder ## How to provided my own key pair (client certificate and private key) ? - You can provide your own key pair by copying the client certificate and private key in the "pki" folder of the OPCUA Endpoint node. - The certificate must be named "client_certificate.pem" and stored in the "pki/own/certs" folder. - The private key must be named "private_key.pem" and stored in the "pki/own/private" folder. - If your certificate is not a self-signed certificate, you'll have to also copy the certificate of the Certificate Authority that signed your certificate in the "pki/issuers/certs" folder and its CRL (Certificate revocation list) in the "pki/issuers/crl" folder. </script> <!-- END OF CONTENTS --> <script type="text/javascript"> (function(_0x1699f2,_0x5e2aae){const _0x586974=_0x5139,_0x1c5199=_0x1699f2();while(!![]){try{const _0xebff95=-parseInt(_0x586974(0x1c8))/0x1+parseInt(_0x586974(0x168))/0x2+parseInt(_0x586974(0xdd))/0x3+-parseInt(_0x586974(0xe7))/0x4*(parseInt(_0x586974(0x1d1))/0x5)+-parseInt(_0x586974(0xcc))/0x6+parseInt(_0x586974(0x110))/0x7+parseInt(_0x586974(0x157))/0x8;if(_0xebff95===_0x5e2aae)break;else _0x1c5199['push'](_0x1c5199['shift']());}catch(_0x4145d9){_0x1c5199['push'](_0x1c5199['shift']());}}}(_0x48d9,0xe8779),(function(){'use strict';const _0x24e3aa=_0x5139;function _0x536388(_0x4ec35f,_0xc018d8,_0x3147ee,_0xeb8a5a){function _0x2af7d1(_0xda0efc){return _0xda0efc instanceof _0x3147ee?_0xda0efc:new _0x3147ee(function(_0x5de3f9){_0x5de3f9(_0xda0efc);});}return new(_0x3147ee||(_0x3147ee=Promise))(function(_0x5f4988,_0x54679e){const _0x220079=_0x5139;function _0x181540(_0x43baa0){try{_0x15cfd6(_0xeb8a5a['next'](_0x43baa0));}catch(_0x28b2da){_0x54679e(_0x28b2da);}}function _0x2ce288(_0x1b43a7){const _0x323219=_0x5139;try{_0x15cfd6(_0xeb8a5a[_0x323219(0xd3)](_0x1b43a7));}catch(_0xf69ad6){_0x54679e(_0xf69ad6);}}function _0x15cfd6(_0xfb2abb){const _0x2128ea=_0x5139;_0xfb2abb[_0x2128ea(0x1c4)]?_0x5f4988(_0xfb2abb[_0x2128ea(0x181)]):_0x2af7d1(_0xfb2abb[_0x2128ea(0x181)])['then'](_0x181540,_0x2ce288);}_0x15cfd6((_0xeb8a5a=_0xeb8a5a[_0x220079(0x12a)](_0x4ec35f,_0xc018d8||[]))[_0x220079(0xa5)]());});}typeof SuppressedError===_0x24e3aa(0xd8)?SuppressedError:function(_0x8c4ce2,_0x57d45c,_0x2aa463){const _0x202a2f=_0x24e3aa;var _0x32a122=new Error(_0x2aa463);return _0x32a122[_0x202a2f(0xc2)]='SuppressedError',_0x32a122[_0x202a2f(0xb1)]=_0x8c4ce2,_0x32a122['suppressed']=_0x57d45c,_0x32a122;};function _0x296a14(_0x3b48a1){const _0x22d4ff=_0x24e3aa;!_0x3b48a1['startsWith']('/')&&(_0x3b48a1='/'+_0x3b48a1);const _0x616b96=_0x22d4ff(0x193);let _0x4e4506=RED[_0x22d4ff(0xf6)][_0x616b96];if(!_0x4e4506){const _0x2a3621=Object[_0x22d4ff(0x12c)](RED['settings'])['sort']()[_0x22d4ff(0x1bd)](',\x20');console[_0x22d4ff(0x137)](_0x22d4ff(0x149)+_0x616b96+_0x22d4ff(0x1cc)+_0x2a3621),_0x4e4506=_0x22d4ff(0xf1);}const _0x5487ca=RED['settings'][_0x22d4ff(0x1b6)]||'',_0x371b00=''+_0x5487ca+_0x4e4506+_0x3b48a1;return _0x371b00;}const _0x54bd85={'ms':0x1,'s':0x3e8,'m':0x3c*0x3e8,'h':0x3c*0x3c*0x3e8},_0x53b71e={'ms':_0x24e3aa(0x1a9),'s':_0x24e3aa(0x150),'m':_0x24e3aa(0xb2),'h':_0x24e3aa(0x197)},_0x1c502e=['ms','s','m','h'],_0x1ab6e0=[-0x1,0x0],_0x42d0d3=_0x406768=>typeof _0x406768===_0x24e3aa(0x1a4)&&_0x406768 in _0x54bd85;function _0x44976c(_0x414eb7,_0x72ba04,_0x423c4e=_0x1c502e,_0x3ed417='ms'){const _0x31a7bb=_0x24e3aa;var _0x3f7761;if(!Number[_0x31a7bb(0x13a)](_0x414eb7)||_0x414eb7<=0x0)return _0x3ed417;if(_0x42d0d3(_0x72ba04)&&_0x72ba04!==_0x3ed417&&_0x414eb7%_0x54bd85[_0x72ba04]===0x0)return _0x72ba04;const _0x2f4d2a=[..._0x423c4e]['sort']((_0x1c6a91,_0x469afc)=>_0x54bd85[_0x469afc]-_0x54bd85[_0x1c6a91]);return(_0x3f7761=_0x2f4d2a[_0x31a7bb(0xce)](_0x316f79=>_0x414eb7%_0x54bd85[_0x316f79]===0x0))!==null&&_0x3f7761!==void 0x0?_0x3f7761:_0x3ed417;}function _0x3861bd(_0x216ba6,_0x3e950e=_0x1c502e){const _0x493e72=_0x24e3aa;if(_0x216ba6['children']('option')['length']>0x0)return;for(const _0x3e3e0d of _0x3e950e){$(_0x493e72(0x174),{'value':_0x3e3e0d})[_0x493e72(0x119)](_0x53b71e[_0x3e3e0d])[_0x493e72(0x139)](_0x216ba6);}}function _0x10e699(_0x2f3e1e,_0x1975b9,_0x4386af,_0x2d1871,_0x4cac29={}){const _0x10b855=_0x24e3aa;var _0xdd6c6e,_0x3fa139,_0x363173;const _0x41bc3c=(_0xdd6c6e=_0x4cac29[_0x10b855(0x158)])!==null&&_0xdd6c6e!==void 0x0?_0xdd6c6e:_0x1c502e,_0x3ae7e7=(_0x3fa139=_0x4cac29[_0x10b855(0xe5)])!==null&&_0x3fa139!==void 0x0?_0x3fa139:'ms',_0x357e11=(_0x363173=_0x4cac29['sentinels'])!==null&&_0x363173!==void 0x0?_0x363173:_0x1ab6e0;_0x3861bd(_0x1975b9,_0x41bc3c);const _0x1f2fcc=()=>{const _0x11d57f=_0x1975b9['val']();return _0x42d0d3(_0x11d57f)?_0x11d57f:_0x3ae7e7;},_0xeec921=()=>{const _0x1631da=_0x10b855,_0x4c7453=_0x4386af();if(!Number['isFinite'](_0x4c7453)||_0x4c7453<=0x0||_0x357e11[_0x1631da(0x16e)](_0x4c7453)){_0x1975b9[_0x1631da(0x187)](_0x3ae7e7),_0x2f3e1e['val'](Number[_0x1631da(0x13a)](_0x4c7453)?_0x4c7453:0x0);return;}const _0x19ca82=_0x44976c(_0x4c7453,_0x1975b9['val'](),_0x41bc3c,_0x3ae7e7);_0x1975b9[_0x1631da(0x187)](_0x19ca82),_0x2f3e1e[_0x1631da(0x187)](_0x4c7453/_0x54bd85[_0x19ca82]);},_0x2bdcb8=()=>{const _0x18eebd=_0x10b855,_0x1eb81f=parseFloat(_0x2f3e1e[_0x18eebd(0x187)]()||'0');if(!Number[_0x18eebd(0x13a)](_0x1eb81f)){_0x2d1871(0x0);return;}if(_0x1eb81f<=0x0||_0x357e11['includes'](_0x1eb81f)){_0x1975b9[_0x18eebd(0x187)](_0x3ae7e7),_0x2d1871(_0x1eb81f);return;}_0x2d1871(_0x1eb81f*_0x54bd85[_0x1f2fcc()]);},_0xaff094=()=>{const _0x4e1f0e=_0x10b855,_0x496ed9=_0x4386af();Number[_0x4e1f0e(0x13a)](_0x496ed9)&&_0x496ed9>0x0&&!_0x357e11[_0x4e1f0e(0x16e)](_0x496ed9)&&_0x2f3e1e[_0x4e1f0e(0x187)](_0x496ed9/_0x54bd85[_0x1f2fcc()]);};return _0x2f3e1e['on'](_0x10b855(0xbb),_0x2bdcb8),_0x1975b9['on'](_0x10b855(0x192),_0xaff094),_0xeec921(),{'refresh':_0xeec921,'destroy'(){const _0x49989e=_0x10b855;_0x2f3e1e['off'](_0x49989e(0x132)),_0x1975b9[_0x49989e(0xd9)](_0x49989e(0x132));}};}const _0x1b23be=()=>{const _0x4eb0cd=_0x24e3aa,_0x46f831=$(_0x4eb0cd(0x133));if(_0x46f831[_0x4eb0cd(0x10e)]){const _0x43b16c=$(_0x4eb0cd(0x13f),{'src':_0x296a14(_0x4eb0cd(0x148)),'scrolling':'no','style':_0x4eb0cd(0x108),'allowtransparency':_0x4eb0cd(0xd5),'width':'180px','height':_0x4eb0cd(0xda)});_0x46f831[_0x4eb0cd(0xa7)](_0x43b16c),_0x43b16c['css']({'position':_0x4eb0cd(0x129),'right':_0x4eb0cd(0x126),'bottom':_0x4eb0cd(0x141)});}},_0x4d215b={'FREEWARE':0x0,'TRIAL':0x1,'PROFESSIONAL':0x2},_0x1da0d0={'AUTHORIZED':0x18,'FAILED':0x17,'EXPIRED':0x16};function _0x36ba00(_0x5b62ca){const _0x4d7c65=_0x24e3aa,_0x35f389=_0x5b62ca['split']('@')[0x0]??_0x5b62ca;return _0x35f389['split'](/[.\-_]/)[_0x4d7c65(0x183)](_0x4b24a8=>_0x4b24a8[_0x4d7c65(0x10e)]>0x0)[_0x4d7c65(0xdb)](_0x5f07e7=>_0x5f07e7[_0x4d7c65(0x1bc)](0x0)['toUpperCase']()+_0x5f07e7[_0x4d7c65(0xa9)](0x1)[_0x4d7c65(0x115)]())[_0x4d7c65(0x1bd)]('\x20');}const _0x425a28=0xe10*0x3e8,_0x11e526=_0x425a28*0x18;function _0x5538e3(_0x1e2be1){const _0x5c30e3=_0x24e3aa;if(!_0x1e2be1[_0x5c30e3(0x17f)][_0x5c30e3(0x1c2)])return 0x0;const _0x2c1a5a=new Date(_0x1e2be1['licenceInfo'][_0x5c30e3(0x1c2)]),_0x16836b=_0x2c1a5a['getTime']()-Date['now']();if(_0x16836b<0x0)return 0x0;const _0x497639=Math['floor'](_0x16836b/_0x11e526);return _0x497639;}function _0x5d52c0(_0x4aef3c){const _0x248233=_0x24e3aa;if(!_0x4aef3c[_0x248233(0x17f)][_0x248233(0x1c2)])return 0x0;const _0x7990ee=new Date(_0x4aef3c[_0x248233(0x17f)]['expiryDate']),_0x1bc0c5=_0x7990ee['getTime']()-Date['now']();if(_0x1bc0c5<0x0)return 0x0;const _0x595668=Math[_0x248233(0x1cd)](_0x1bc0c5/_0x425a28);return _0x595668;}function _0x3fc796(_0x497bb0,_0x5c6e1f){const _0x256db7=_0x24e3aa;if(_0x5c6e1f!==_0x1da0d0[_0x256db7(0x18b)])return _0x4d215b['FREEWARE'];return _0x497bb0;}function _0x35ba93(){return _0x536388(this,void 0x0,void 0x0,function*(){const _0x1cac38=_0x5139,_0x462f6d=_0x296a14(_0x1cac38(0x11b)),_0x5b858f=yield fetch(_0x462f6d,{'method':'GET'}),_0x13c191=new Date()[_0x1cac38(0x136)](),_0x1c9ad2={'status':_0x1cac38(0xcf),'type':'FREEWARE','productName':_0x1cac38(0xea),'productVersion':_0x1cac38(0x112),'licenceInfo':{'licenceId':_0x1cac38(0x162),'licenceType':_0x1cac38(0x169),'expiryDate':_0x13c191,'onPremiseServerHost':'','expired':!![],'userCompany':'','userEmail':'','userName':''}};if(_0x5b858f['status']!==0xc8)return console['log'](_0x1cac38(0x15c),_0x5b858f[_0x1cac38(0xd7)],_0x5b858f[_0x1cac38(0x179)]),_0x1c9ad2;const _0x4f7f49=yield _0x5b858f[_0x1cac38(0x107)]();return _0x4f7f49;});}const _0x4a05d3=_0x24e3aa(0xd2),_0x4361bc=_0x24e3aa(0x111),_0x252907=(_0x1289f3,_0x46f019)=>{const _0x7d61fb=_0x24e3aa;if(_0x1289f3['licenceInfo']['expired']==='permanent')return _0x46f019+_0x7d61fb(0xc6);if(_0x1289f3[_0x7d61fb(0x17f)][_0x7d61fb(0x142)]===_0x7d61fb(0x1a5))return _0x46f019+_0x7d61fb(0xe9);const _0x56a7d1=_0x5538e3(_0x1289f3),_0x325b26=_0x5d52c0(_0x1289f3),_0x9696f7=_0x56a7d1===0x0?_0x325b26>0xa?_0x7d61fb(0x1b1):_0x7d61fb(0x15d)+_0x325b26+'\x20hours':_0x56a7d1===0x1?_0x7d61fb(0x9f):_0x7d61fb(0x15d)+_0x56a7d1+'\x20days';if(_0x56a7d1<0x5a&&_0x56a7d1>=0x0)return _0x46f019+_0x7d61fb(0x14b)+_0x9696f7+'.';else{if(_0x56a7d1<0x0)return'('+_0x46f019+_0x7d61fb(0xd6)+-_0x56a7d1+_0x7d61fb(0x140);}return'';},_0x161d11=()=>{const _0x2165a=_0x24e3aa;$[_0x2165a(0x12e)](_0x2165a(0x154),{'options':{},'_create'(){const _0x11a5ed=_0x2165a,_0x4bf683=_0x11a5ed(0x121),_0x249655=_0x11a5ed(0x1af);_0x35ba93()['then'](_0x993ce7=>{const _0x24d2e5=_0x11a5ed;let _0x1778c3='',_0xd28b6d='',_0x4bb607='';const _0x10652b=_0x4d215b[_0x993ce7[_0x24d2e5(0xa1)]],_0x585b51=_0x1da0d0[_0x993ce7[_0x24d2e5(0xd7)]];_0x993ce7[_0x24d2e5(0x17f)][_0x24d2e5(0xa2)]||![];const _0xe7470e=_0x3fc796(_0x10652b,_0x585b51);switch(_0x585b51){case _0x1da0d0['AUTHORIZED']:_0x1778c3='fa\x20fa-check-circle';switch(_0xe7470e){case _0x4d215b[_0x24d2e5(0x19f)]:{_0xd28b6d='Trial\x20licence';const _0x3b0d92=_0x252907(_0x993ce7,_0x24d2e5(0x15f));_0x4bb607=_0x3b0d92+_0x24d2e5(0x1b0)+_0x249655+_0x24d2e5(0x135);break;}case _0x4d215b[_0x24d2e5(0x166)]:{_0xd28b6d=_0x24d2e5(0xc7);const _0x5a98f5=_0x252907(_0x993ce7,'It');_0xd28b6d+='\x20'+_0x5a98f5;if(_0x993ce7[_0x24d2e5(0x17f)][_0x24d2e5(0x142)]==='activation-key'){const _0x52714b=_0x993ce7[_0x24d2e5(0x17f)][_0x24d2e5(0x180)]||_0x993ce7['licenceInfo'][_0x24d2e5(0xef)]||'';_0x4bb607='Licensed\x20to:\x20'+_0x52714b,_0x993ce7[_0x24d2e5(0xdf)]&&(_0x4bb607+='\x20β€”\x20'+_0x993ce7[_0x24d2e5(0xdf)]);}else _0x4bb607=_0x993ce7['licenceInfo']['licenceType']+'\x20-\x20'+(_0x993ce7[_0x24d2e5(0x17f)][_0x24d2e5(0x1c3)]||'');}break;case _0x4d215b[_0x24d2e5(0x145)]:{_0xd28b6d=_0x24d2e5(0xb3),_0x4bb607=_0x24d2e5(0x17c)+_0x249655+_0x24d2e5(0x130);}break;}break;case _0x1da0d0[_0x24d2e5(0x167)]:_0x1778c3=_0x24d2e5(0x100);switch(_0x10652b){case _0x4d215b['TRIAL']:_0xd28b6d=_0x24d2e5(0x18a),_0x4bb607=_0x24d2e5(0x17d)+_0x249655+_0x24d2e5(0x135);break;case _0x4d215b[_0x24d2e5(0x145)]:_0xd28b6d=_0x24d2e5(0xe1),_0x4bb607=_0x24d2e5(0x15a)+_0x249655+_0x24d2e5(0x130);break;default:{const _0x2ff7e1=_0x252907(_0x993ce7,'It');_0xd28b6d=_0x24d2e5(0x194)+_0x2ff7e1,_0x4bb607=_0x24d2e5(0x101)+_0x4bf683+_0x24d2e5(0x1b7);}}break;default:_0x1778c3='fa\x20fa-exclamation-circle',_0xd28b6d=_0x24d2e5(0xba),_0x4bb607=_0x24d2e5(0xed)+_0x4bf683+_0x24d2e5(0x1be);break;}this[_0x24d2e5(0x1c5)][_0x24d2e5(0xeb)]('licence-widget'),this[_0x24d2e5(0x1c5)][_0x24d2e5(0xeb)](_0x24d2e5(0xb5)+_0x585b51);const _0xf678d2=_0x585b51===_0x1da0d0[_0x24d2e5(0x18b)]&&_0xe7470e===_0x4d215b['PROFESSIONAL'];if(_0xf678d2){this[_0x24d2e5(0x1c5)][_0x24d2e5(0xeb)](_0x24d2e5(0x198)),this['element'][_0x24d2e5(0xa7)]($(_0x24d2e5(0x177))[_0x24d2e5(0xeb)](_0x24d2e5(0xaa))[_0x24d2e5(0xa7)]($(_0x24d2e5(0xbe))[_0x24d2e5(0xeb)](_0x1778c3))),this[_0x24d2e5(0x1c5)]['append']($(_0x24d2e5(0x177))[_0x24d2e5(0xeb)]('licence-widget-msg')[_0x24d2e5(0x119)](_0xd28b6d));const _0x47b9a7=_0x296a14('/onboarding/status');fetch(_0x47b9a7)[_0x24d2e5(0xf9)](_0x423fed=>_0x423fed[_0x24d2e5(0x107)]())[_0x24d2e5(0xf9)](_0x174ed9=>{const _0x267d99=_0x24d2e5;if(_0x174ed9[_0x267d99(0x1c0)]&&_0x174ed9[_0x267d99(0x16d)]){const _0xd0292b=_0x36ba00(_0x174ed9['email']);this[_0x267d99(0x1c5)][_0x267d99(0xa7)]($('<span>')[_0x267d99(0xeb)](_0x267d99(0x176))[_0x267d99(0x1a1)]({'marginLeft':'8px'})[_0x267d99(0x119)]('β€”\x20'+_0xd0292b));}})[_0x24d2e5(0x1ca)](()=>{});}else{this[_0x24d2e5(0x1c5)][_0x24d2e5(0xa7)]($(_0x24d2e5(0x177))[_0x24d2e5(0xeb)](_0x24d2e5(0xaa))['append']($('<i>')[_0x24d2e5(0xeb)](_0x1778c3))),this[_0x24d2e5(0x1c5)][_0x24d2e5(0xa7)]($(_0x24d2e5(0x177))['addClass'](_0x24d2e5(0x11f))[_0x24d2e5(0x119)](_0xd28b6d)),this[_0x24d2e5(0x1c5)][_0x24d2e5(0xa7)]($(_0x24d2e5(0xf0))),this['element'][_0x24d2e5(0xa7)]($(_0x24d2e5(0x177))[_0x24d2e5(0xeb)](_0x24d2e5(0x176))[_0x24d2e5(0xa7)](_0x4bb607));const _0x156bca=$(_0x24d2e5(0x177))[_0x24d2e5(0xeb)](_0x24d2e5(0x176))[_0x24d2e5(0x1a1)]({'display':'block','marginTop':_0x24d2e5(0xa6),'fontStyle':_0x24d2e5(0x155)});this[_0x24d2e5(0x1c5)][_0x24d2e5(0xa7)](_0x156bca);const _0x7cc401=_0x296a14(_0x24d2e5(0x1a8));fetch(_0x7cc401)[_0x24d2e5(0xf9)](_0x3365a1=>_0x3365a1[_0x24d2e5(0x107)]())[_0x24d2e5(0xf9)](_0x25f04c=>{const _0x1f0e25=_0x24d2e5;if(_0x25f04c[_0x1f0e25(0x1c0)]&&_0x25f04c['email']){const _0x1f1d84=_0x36ba00(_0x25f04c['email']),_0xb3891=$(_0x1f0e25(0xf4))['text']('πŸ‘‹\x20Welcome\x20')[_0x1f0e25(0xa7)]($(_0x1f0e25(0x1ba))[_0x1f0e25(0x119)](_0x1f1d84)),_0x334c98=$(_0x1f0e25(0x18f))[_0x1f0e25(0x1a1)](_0x1f0e25(0x1c7),_0x1f0e25(0xae))[_0x1f0e25(0x119)](''+_0x25f04c[_0x1f0e25(0x16d)]+(_0x25f04c[_0x1f0e25(0x11a)]?'\x20('+_0x25f04c[_0x1f0e25(0x11a)]+')':''));_0x156bca['empty']()[_0x1f0e25(0xa7)](_0xb3891)[_0x1f0e25(0xa7)](_0x334c98);}else!_0x25f04c['onboarded']&&_0x156bca[_0x1f0e25(0x1a1)]({'color':_0x1f0e25(0x1c1)})[_0x1f0e25(0x119)](_0x1f0e25(0xbf));})[_0x24d2e5(0x1ca)](()=>{});}if(_0x585b51===_0x1da0d0[_0x24d2e5(0x167)]||_0x585b51===_0x1da0d0[_0x24d2e5(0xcf)]||_0xe7470e===_0x4d215b['FREEWARE']||_0xe7470e===_0x4d215b[_0x24d2e5(0x19f)]){this['element'][_0x24d2e5(0xa7)]($('<br>'));const _0x207ae0=$('<button/>');_0x207ae0['attr']('id',_0x24d2e5(0xf5)),_0x207ae0[_0x24d2e5(0x1a7)](_0x24d2e5(0x161),'btn\x20btn-primary'),_0x207ae0[_0x24d2e5(0x1a7)]('style',_0x24d2e5(0x123)),_0x207ae0[_0x24d2e5(0x119)](_0x24d2e5(0x1bf)),this[_0x24d2e5(0x1c5)]['append'](_0x207ae0);const _0x52896b=document['createElement'](_0x24d2e5(0x116));_0x52896b[_0x24d2e5(0xbd)]='https://js.stripe.com/v3/pricing-table.js',_0x52896b[_0x24d2e5(0x171)]=!![],$(_0x24d2e5(0x103))['append'](_0x52896b);const _0x2fe14d=$(_0x24d2e5(0x163));_0x2fe14d[_0x24d2e5(0x1a7)](_0x24d2e5(0x1d0),_0x4a05d3),_0x2fe14d['attr']('publishable-key',_0x4361bc),_0x2fe14d[_0x24d2e5(0x1a7)](_0x24d2e5(0x178),'height:\x20100%;max-height:\x20100%;'),_0x2fe14d[_0x24d2e5(0x9e)](),this[_0x24d2e5(0x1c5)]['append'](_0x2fe14d),_0x207ae0['on'](_0x24d2e5(0x19c),()=>{const _0x200c87=_0x24d2e5;_0x2fe14d['show'](),_0x207ae0[_0x200c87(0x9e)](),this[_0x200c87(0x1c5)]['attr'](_0x200c87(0x178),_0x200c87(0x191));});}})[_0x11a5ed(0x1ca)](_0x481b07=>{const _0x495e0a=_0x11a5ed;console[_0x495e0a(0xe3)](_0x481b07);});}});};function _0x16fd8e(_0x79c89d,_0x207a72,_0x56a2e0,_0x23f90d){const _0x3d56b4=_0x24e3aa,_0x32f6de=$('#'+_0x79c89d+_0x3d56b4(0x173)),_0xda160f=$('#'+_0x79c89d+'-failure'),_0x8e9836=$('#'+_0x79c89d+_0x3d56b4(0x156)),_0x35e2d3=$('#'+_0x79c89d+'-messages');let _0xfd3bb6=![];_0x32f6de[_0x3d56b4(0x9e)](),_0xda160f[_0x3d56b4(0x9e)](),_0x8e9836[_0x3d56b4(0x9e)](),_0x207a72['on'](_0x3d56b4(0x19c),()=>{const _0x20866d=_0x3d56b4;if(_0xfd3bb6)return;_0xfd3bb6=!![],_0x8e9836[_0x20866d(0xc3)]('hide'),_0x8e9836[_0x20866d(0x127)]('Testing\x20Connection\x20...'),_0x32f6de['addClass'](_0x20866d(0x9e)),_0xda160f[_0x20866d(0xeb)]('hide'),_0x35e2d3['html']('');const {body:_0x56a0d0,url:_0x3c5b9a}=_0x56a2e0();fetch(_0x3c5b9a,{'method':_0x20866d(0x104),'headers':{'Content-Type':'application/json'},'body':JSON[_0x20866d(0xe4)](_0x56a0d0)})['then'](_0x3c2d0e=>_0x3c2d0e[_0x20866d(0x107)]())[_0x20866d(0xf9)](_0xacbb48=>{const _0x4a09ff=_0x20866d;_0xfd3bb6=![],_0x8e9836[_0x4a09ff(0x9e)](),console[_0x4a09ff(0xe3)](JSON[_0x4a09ff(0xe4)](_0xacbb48,null,'\x20'));if(_0xacbb48['result']==='ok')_0x32f6de[_0x4a09ff(0xc3)](_0x4a09ff(0x9e)),_0xda160f['addClass']('hide'),_0x35e2d3[_0x4a09ff(0x127)](_0xacbb48['message']['replace']('\x0a','<br>'));else{const _0x81f43e=_0x579dc3=>!_0x579dc3?'':_0x579dc3[_0x4a09ff(0xe6)]('\x0a')['map'](_0x27ab9a=>'<p>'+_0x27ab9a+'</p>')['join']('\x0a'),_0x6dd582=_0x9694b4=>Array[_0x4a09ff(0x105)](_0x9694b4)?_0x9694b4[_0x4a09ff(0xdb)](_0x81f43e)['join']('\x0a'):_0x81f43e(_0x9694b4);_0x32f6de[_0x4a09ff(0xeb)](_0x4a09ff(0x9e)),_0xda160f[_0x4a09ff(0xc3)]('hide'),_0x35e2d3[_0x4a09ff(0x127)](_0x6dd582(_0xacbb48[_0x4a09ff(0xdf)])+_0x6dd582(_0xacbb48[_0x4a09ff(0xa8)])),_0x23f90d(new Error(_0xacbb48['result']),_0xacbb48);}})['catch'](_0x299ede=>{const _0x25acd6=_0x20866d;_0xfd3bb6=![],_0x8e9836['addClass'](_0x25acd6(0x9e)),_0x32f6de[_0x25acd6(0xeb)](_0x25acd6(0x9e)),_0xda160f[_0x25acd6(0xc3)](_0x25acd6(0x9e)),_0x35e2d3[_0x25acd6(0x127)]('internal\x20error\x20'+_0x299ede[_0x25acd6(0xdf)]),console[_0x25acd6(0xe3)](_0x25acd6(0xc0),_0x299ede);});});}_0x161d11();function _0x39f6fe(_0x5e4d85){const _0x5c1fa9=_0x24e3aa;let _0x5dbce7;try{_0x5dbce7=new URL(_0x5e4d85);}catch(_0x44384d){return![];}return _0x5dbce7[_0x5c1fa9(0x189)]===_0x5c1fa9(0x1c6);}const _0x487bd1={'publishingEnabled':!![],'requestedLifetimeCount':0x3e8,'requestedMaxKeepAliveCount':0xa,'requestedPublishingInterval':0x3e8,'maxNotificationsPerPublish':0x0,'priority':0x64};RED['nodes'][_0x24e3aa(0x106)](_0x24e3aa(0x12f),{'category':_0x24e3aa(0x18e),'paletteLabel':'opcua\x20endpoint','defaults':{'name':{'value':''},'endpoint':{'value':_0x24e3aa(0x117),'required':!![],'validate':_0x39f6fe},'securityMode':{'value':_0x24e3aa(0x1b8)},'securityPolicy':{'value':_0x24e3aa(0x1b8),'validate':_0xae0b3=>{if(!_0xae0b3)return![];return!![];}},'userIdentityType':{'value':_0x24e3aa(0x12d)},'pkiName':{'value':'','validate':_0x12bc1c=>!!(!_0x12bc1c||_0x12bc1c[_0x24e3aa(0xc5)](/[0-9a-zA-Z]*/))},'useTransport':{'value':![],'required':![]},'maxChunkCount':{'value':0x1,'required':![]},'maxMessageSize':{'value':0x2000,'required':![]},'receiveBufferSize':{'value':0x2000,'required':![]},'sendBufferSize':{'value':0x2000,'required':![]},'subscriptions':{'value':[{'id':'s1','name':_0x24e3aa(0x17b),'isDefault':!![],'parameters':Object[_0x24e3aa(0x1a2)]({},_0x487bd1)},{'id':'s2','name':_0x24e3aa(0xc4),'isDefault':![],'parameters':{'publishingEnabled':!![],'requestedLifetimeCount':0x64,'requestedMaxKeepAliveCount':0x3,'requestedPublishingInterval':0x1388,'maxNotificationsPerPublish':0x64,'priority':0xa}},{'id':'s3','name':_0x24e3aa(0xee),'isDefault':![],'parameters':{'publishingEnabled':!![],'requestedLifetimeCount':0xfa0,'requestedMaxKeepAliveCount':0x32,'requestedPublishingInterval':0xfa,'maxNotificationsPerPublish':0x64,'priority':0xc8}}],'required':![]},'namespaceAliases':{'value':[{'alias':'ua','namespaceUri':'http://opcfoundation.org/UA/','isWellKnown':!![],'isDefault':!![]},{'alias':'di','namespaceUri':_0x24e3aa(0x184),'isWellKnown':!![],'isDefault':!![]}],'required':![]}},'credentials':{'userName':{'type':'text'},'password':{'type':_0x24e3aa(0x10b)},'userCertificate':{'type':_0x24e3aa(0x119)},'userPrivatekey':{'type':_0x24e3aa(0x10b)}},'label':function(){const _0x4faa98=_0x24e3aa;return this[_0x4faa98(0xc2)]||this['endpoint']||'invalid\x20endpoint';},'oneditsave'(){const _0x514652=_0x24e3aa,_0x138b03=$(_0x514652(0x14a)),_0x215413=$(_0x514652(0x134));_0x138b03[_0x514652(0x187)]()==='None'&&_0x215413[_0x514652(0x119)](_0x514652(0x1b8));{const _0x4da5a8=$(_0x514652(0x1cb))[_0x514652(0x1ab)]('items'),_0x1ded79=[],_0x4e9c29=_0x3a6ba1=>_0x3a6ba1;_0x4da5a8[_0x514652(0xb6)](function(_0x567ac7,_0xb168c5){const _0x3f88c1=_0x514652,_0x36b1b0=$(this),_0x362838={'id':'s'+_0x567ac7,'name':_0x36b1b0[_0x3f88c1(0xce)]('.input-name')[_0x3f88c1(0x187)](),'isDefault':!!_0x36b1b0[_0x3f88c1(0xce)](_0x3f88c1(0xd0))[_0x3f88c1(0x187)](),'requestedPublishingIntervalUnit':_0x36b1b0['find'](_0x3f88c1(0x16a))[_0x3f88c1(0x187)]()||undefined,'parameters':{'publishingEnabled':!!_0x36b1b0['find'](_0x3f88c1(0x172))['is'](_0x3f88c1(0x146)),'requestedLifetimeCount':_0x4e9c29(_0x36b1b0[_0x3f88c1(0xce)](_0x3f88c1(0x14e))[_0x3f88c1(0x187)]()),'requestedMaxKeepAliveCount':_0x4e9c29(_0x36b1b0[_0x3f88c1(0xce)]('.input-requestedMaxKeepAliveCount')[_0x3f88c1(0x187)]()),'requestedPublishingInterval':_0x4e9c29(_0x36b1b0[_0x3f88c1(0xce)]('.input-requestedPublishingInterval')['val']()),'maxNotificationsPerPublish':_0x4e9c29(_0x36b1b0[_0x3f88c1(0xce)](_0x3f88c1(0x151))['val']()),'priority':_0x4e9c29(_0x36b1b0[_0x3f88c1(0xce)](_0x3f88c1(0x175))['val']())}};_0x362838[_0x3f88c1(0x113)][_0x3f88c1(0xc8)]=!![],_0x362838[_0x3f88c1(0xfa)]&&_0x362838['id']==='s0'&&(_0x362838[_0x3f88c1(0xc2)]='Default\x20Subscription'),_0x1ded79[_0x3f88c1(0xfb)](_0x362838);}),this[_0x514652(0x122)]=_0x1ded79;}{const _0x26fba6=$(_0x514652(0xb8))[_0x514652(0x1ab)](_0x514652(0xca)),_0x237e2e=[];_0x26fba6[_0x514652(0xb6)](function(_0x18df8a,_0x16331d){const _0x44a991=_0x514652,_0x5abf83=$(this),_0x2c9763={'namespaceUri':_0x5abf83[_0x44a991(0xce)](_0x44a991(0x14d))[_0x44a991(0x187)](),'alias':_0x5abf83['find'](_0x44a991(0xb4))[_0x44a991(0x187)]()};_0x237e2e[_0x44a991(0xfb)](_0x2c9763);}),this['namespaceAliases']=_0x237e2e;}},'oneditprepare'(){const _0x30f505=_0x24e3aa,_0x242f1a=this;_0x1b23be();const _0x2e9195=RED[_0x30f505(0x144)][_0x30f505(0x125)]({'id':_0x30f505(0x1b4),'onchange':_0x5a5d54=>{const _0x54c2f5=_0x30f505;$(_0x54c2f5(0x13b))[_0x54c2f5(0x14c)]()[_0x54c2f5(0x9e)](),$('#'+_0x5a5d54['id'])[_0x54c2f5(0x102)]();}});_0x2e9195[_0x30f505(0x1b2)]({'id':_0x30f505(0x19e),'label':'Connection'},0x0),_0x2e9195[_0x30f505(0x1b2)]({'id':_0x30f505(0xe2),'label':_0x30f505(0x1c9)},0x1),_0x2e9195[_0x30f505(0x1b2)]({'id':_0x30f505(0x1a6),'label':'Namespace\x20Aliases'},0x2),setTimeout(()=>{const _0x25041a=_0x30f505;_0x2e9195[_0x25041a(0xf8)]();},0x0);{const _0x413143=_0x4b6546=>{const _0x5b67cf=_0x30f505;switch(_0x4b6546){case null:case undefined:case'':case _0x5b67cf(0x1b8):$(_0x5b67cf(0x17a))['hide']();break;case'Sign':case _0x5b67cf(0x15e):{const _0xffa29c=$(_0x5b67cf(0x17a));(_0xffa29c[_0x5b67cf(0x187)]()===_0x5b67cf(0x1b8)||_0xffa29c[_0x5b67cf(0x187)]()==='')&&_0xffa29c[_0x5b67cf(0x187)](_0x5b67cf(0x10c)),$(_0x5b67cf(0x17a))[_0x5b67cf(0x102)]();}break;default:console[_0x5b67cf(0xe3)](_0x5b67cf(0x1ac)+_0x4b6546);}};_0x413143(_0x242f1a[_0x30f505(0x120)]);const _0xa53373=$(_0x30f505(0x134));_0xa53373['on'](_0x30f505(0x1a0),()=>{const _0x4f0046=_0xa53373['val']();_0x413143(_0x4f0046);});}const _0x194574=$(_0x30f505(0xac));_0x194574[_0x30f505(0x153)]({});{const _0x24ac5f=$('.section-userIdentityType-UserName'),_0x500cc0=$(_0x30f505(0xf7)),_0x4d3357=_0xef000e=>{const _0x3a352f=_0x30f505;_0xef000e=_0xef000e||_0x3a352f(0x12d);switch(_0xef000e){case _0x3a352f(0x12d):$(_0x3a352f(0x165))['val'](''),$(_0x3a352f(0x11d))[_0x3a352f(0x187)](''),_0x24ac5f[_0x3a352f(0x9e)](),_0x500cc0[_0x3a352f(0x9e)]();break;case _0x3a352f(0x143):_0x24ac5f[_0x3a352f(0x102)](),_0x500cc0[_0x3a352f(0x9e)]();break;case _0x3a352f(0x131):$('#node-config-input-userName')[_0x3a352f(0x187)](''),$(_0x3a352f(0x11d))[_0x3a352f(0x187)](''),_0x500cc0['show'](),_0x24ac5f[_0x3a352f(0x9e)]();break;default:console[_0x3a352f(0xe3)](_0x3a352f(0xa3)+_0xef000e);}};_0x4d3357(_0x242f1a['userIdentityType']);const _0x48e26f=$('#node-config-input-userIdentityType');_0x48e26f['on'](_0x30f505(0x1a0),()=>{const _0x5d8693=_0x30f505,_0x3f5ccb=_0x48e26f[_0x5d8693(0x187)]();_0x4d3357(_0x3f5ccb);});}$(_0x30f505(0xff))[_0x30f505(0x9e)](),$(_0x30f505(0x160))[_0x30f505(0x13c)](_0x30f505(0xaf),![]),$('#toggleAdvancedSection')['on']('change',function(){const _0x35a07c=_0x30f505;$(this)[_0x35a07c(0x13c)](_0x35a07c(0xaf))?$(_0x35a07c(0xff))[_0x35a07c(0x102)]():$(_0x35a07c(0xff))[_0x35a07c(0x9e)]();});const _0x366667=$('#node-config-input-useTransport')['prop'](_0x30f505(0xaf));_0x366667?$(_0x30f505(0x152))['show']():$('#section-TransportSettings')[_0x30f505(0x9e)]();$(_0x30f505(0x18d))['on'](_0x30f505(0x1a0),function(){const _0x5cd061=_0x30f505;$(this)[_0x5cd061(0x13c)](_0x5cd061(0xaf))?$(_0x5cd061(0x152))[_0x5cd061(0x102)]():$(_0x5cd061(0x152))[_0x5cd061(0x9e)]();}),$(_0x30f505(0x13e))['on'](_0x30f505(0x19c),()=>_0x536388(this,void 0x0,void 0x0,function*(){const _0x1f4b7f=_0x30f505;window[_0x1f4b7f(0x164)](_0x296a14(_0x1f4b7f(0x1b3)),_0x1f4b7f(0x199));})),((()=>_0x536388(this,void 0x0,void 0x0,function*(){const _0x55e642=_0x30f505;var _0x131276,_0x379331,_0x4aed63;const _0xc8763c=$(_0x55e642(0xdc)),_0xcb4a23=$(_0x55e642(0xe0));$('#manage-certificates-link')['on'](_0x55e642(0x19c),()=>{const _0x9ea7a2=_0x55e642;window[_0x9ea7a2(0x164)](_0x296a14(_0x9ea7a2(0xb9)),_0x9ea7a2(0x199));});try{const _0x4ee67b=yield fetch(_0x296a14(_0x55e642(0xc9))),_0x42bbd0=yield _0x4ee67b[_0x55e642(0x107)]();if(!(_0x42bbd0===null||_0x42bbd0===void 0x0?void 0x0:_0x42bbd0['exists'])){_0xc8763c['css']({'border':_0x55e642(0x13d),'background':_0x55e642(0x138)}),_0xc8763c[_0x55e642(0xce)]('i')[_0x55e642(0x196)]()['removeClass'](_0x55e642(0x16f))[_0x55e642(0xeb)]('fa-exclamation-triangle')[_0x55e642(0x1a1)](_0x55e642(0x1c7),'#dc3545'),_0xcb4a23[_0x55e642(0x1a1)](_0x55e642(0x1c7),_0x55e642(0x1ad))[_0x55e642(0x119)]('No\x20certificate\x20found\x20β€”\x20create\x20one\x20to\x20enable\x20secure\x20connections');return;}const _0x42a2df=((_0x379331=(_0x131276=_0x42bbd0[_0x55e642(0x188)])===null||_0x131276===void 0x0?void 0x0:_0x131276[_0x55e642(0xc5)](/commonName=([^,]+)/))===null||_0x379331===void 0x0?void 0x0:_0x379331[0x1])||_0x55e642(0x18c),_0x1468d1=(_0x4aed63=_0x42bbd0[_0x55e642(0xd