@opcua/for-node-red
Version:
The Node-RED node to communicate via OPC UA, powered NodeOPCUA and developed by Sterfive's team
462 lines (409 loc) β’ 51.3 kB
HTML
<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-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 id="test-connection" class="btn btn-primary" style="margin-left: 10px">
<i class="fa fa-flask"></i> Check Connection
</button>
<button id="goto-config" class="btn btn-primary" style="margin-left: 10px">
<i class="fa fa-lock"></i> Check Licence
</button>
<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";
}
.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;
}
.subscription-mini-form table {
width: 100%;
border: 1;
}
.subscription-mini-form label {
display: block;
cursor: pointer;
display: block;
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">
<button id="checkCertificate">Check my certificate</button>
<button>
<a
href="opcua-for-node-red/client_certificate.pem"
id="downloadPEMCertificateLink"
class="button-style"
download="client_certificate.pem"
>
download in PEM format
<i class="fa fa-download"></i>
</a>
</button>
<button>
<a
href="opcua-for-node-red/client_certificate.der"
id="downloadDERCertificateLink"
class="button-style"
download="client_certificate.der"
>
download in DER format
<i class="fa fa-download"></i>
</a>
</button>
</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"> 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"> 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 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> 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> Publishing Interval</td>
<td>
<input type="number" class="input-requestedPublishingInterval" />
<span>ms</span>
</td>
</tr>
<tr>
<td><i class="fa fa-heartbeat"> </i> Max Keepalive count</td>
<td>
<input type="number" class="input-requestedMaxKeepAliveCount" />
</td>
</tr>
<tr>
<td><i class="fa fa-hourglass-end"> </i> Live Time Count</td>
<td>
<input type="number" class="input-requestedLifetimeCount" />
</td>
</tr>
<tr>
<td><i class="fa fa-tag"></i> Max notifications per publishing</td>
<td>
<input type="number" class="input-maxNotificationsPerPublish" />
</td>
</tr>
<tr>
<td><i class="fa fa-exclamation"></i> 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(_0x1eb5ce,_0x1ff193){const _0x3ff2a3=_0x4878,_0x3a847b=_0x1eb5ce();while(!![]){try{const _0x217fb2=-parseInt(_0x3ff2a3(0xdb))/0x1+parseInt(_0x3ff2a3(0xb1))/0x2*(parseInt(_0x3ff2a3(0x109))/0x3)+parseInt(_0x3ff2a3(0x175))/0x4*(parseInt(_0x3ff2a3(0x10b))/0x5)+parseInt(_0x3ff2a3(0x149))/0x6+parseInt(_0x3ff2a3(0x19f))/0x7*(-parseInt(_0x3ff2a3(0xcf))/0x8)+-parseInt(_0x3ff2a3(0xd5))/0x9*(-parseInt(_0x3ff2a3(0x154))/0xa)+-parseInt(_0x3ff2a3(0xee))/0xb;if(_0x217fb2===_0x1ff193)break;else _0x3a847b['push'](_0x3a847b['shift']());}catch(_0x16094d){_0x3a847b['push'](_0x3a847b['shift']());}}}(_0x46ca,0x70e8f),(function(){'use strict';const _0x5d2feb=_0x4878;function _0x2112c5(_0x3f719c,_0x4105bb,_0x4c7cf0,_0x5257bc){function _0x4adb8d(_0x154831){return _0x154831 instanceof _0x4c7cf0?_0x154831:new _0x4c7cf0(function(_0x28de0a){_0x28de0a(_0x154831);});}return new(_0x4c7cf0||(_0x4c7cf0=Promise))(function(_0x1243a3,_0x170afd){const _0x4879bd=_0x4878;function _0x3e238b(_0x183d4c){try{_0x108aef(_0x5257bc['next'](_0x183d4c));}catch(_0x409c5f){_0x170afd(_0x409c5f);}}function _0x5e43dd(_0x4c6d79){const _0x135ad5=_0x4878;try{_0x108aef(_0x5257bc[_0x135ad5(0x1aa)](_0x4c6d79));}catch(_0x394d03){_0x170afd(_0x394d03);}}function _0x108aef(_0x389ccc){const _0x9b2a87=_0x4878;_0x389ccc['done']?_0x1243a3(_0x389ccc[_0x9b2a87(0xd2)]):_0x4adb8d(_0x389ccc[_0x9b2a87(0xd2)])[_0x9b2a87(0x174)](_0x3e238b,_0x5e43dd);}_0x108aef((_0x5257bc=_0x5257bc['apply'](_0x3f719c,_0x4105bb||[]))[_0x4879bd(0xf5)]());});}typeof SuppressedError===_0x5d2feb(0x159)?SuppressedError:function(_0x35815a,_0x4741ed,_0x340786){const _0x31c73f=_0x5d2feb;var _0x180333=new Error(_0x340786);return _0x180333[_0x31c73f(0x137)]=_0x31c73f(0x1a5),_0x180333[_0x31c73f(0x164)]=_0x35815a,_0x180333[_0x31c73f(0x185)]=_0x4741ed,_0x180333;};function _0x36b6ca(_0x912e3c,_0xebed5e,_0x53fb03,_0x22c1fc){const _0x4af6c4=_0x5d2feb,_0x320c0f=$('#'+_0x912e3c+'-success'),_0x55abbd=$('#'+_0x912e3c+'-failure'),_0x1eaaea=$('#'+_0x912e3c+_0x4af6c4(0x187)),_0x240a52=$('#'+_0x912e3c+_0x4af6c4(0x110));let _0x3468fe=![];_0x320c0f[_0x4af6c4(0xc6)](),_0x55abbd['hide'](),_0x1eaaea['hide'](),_0xebed5e['on'](_0x4af6c4(0x145),()=>{const _0xea7572=_0x4af6c4;if(_0x3468fe)return;_0x3468fe=!![],_0x1eaaea['removeClass'](_0xea7572(0xc6)),_0x1eaaea[_0xea7572(0x107)](_0xea7572(0xeb)),_0x320c0f[_0xea7572(0xc0)](_0xea7572(0xc6)),_0x55abbd['addClass'](_0xea7572(0xc6)),_0x240a52[_0xea7572(0x107)]('');const {body:_0x50681d,url:_0x298a24}=_0x53fb03();fetch(_0x298a24,{'method':_0xea7572(0x13f),'headers':{'Content-Type':_0xea7572(0x18e)},'body':JSON[_0xea7572(0x161)](_0x50681d)})['then'](_0x3fb756=>_0x3fb756[_0xea7572(0x138)]())[_0xea7572(0x174)](_0x580b44=>{const _0x3a11d4=_0xea7572;_0x3468fe=![],_0x1eaaea[_0x3a11d4(0xc6)](),console[_0x3a11d4(0x12d)](JSON[_0x3a11d4(0x161)](_0x580b44,null,'\x20'));if(_0x580b44['result']==='ok')_0x320c0f[_0x3a11d4(0x16e)](_0x3a11d4(0xc6)),_0x55abbd[_0x3a11d4(0xc0)](_0x3a11d4(0xc6)),_0x240a52[_0x3a11d4(0x107)](_0x580b44[_0x3a11d4(0x1a9)][_0x3a11d4(0x136)]('\x0a',_0x3a11d4(0x177)));else{const _0x474df8=_0x33eef1=>!_0x33eef1?'':_0x33eef1['split']('\x0a')[_0x3a11d4(0xfb)](_0x2a693c=>'<p>'+_0x2a693c+_0x3a11d4(0xad))[_0x3a11d4(0x124)]('\x0a'),_0x3cb743=_0x30c66a=>Array[_0x3a11d4(0xbe)](_0x30c66a)?_0x30c66a[_0x3a11d4(0xfb)](_0x474df8)[_0x3a11d4(0x124)]('\x0a'):_0x474df8(_0x30c66a);_0x320c0f['addClass']('hide'),_0x55abbd['removeClass'](_0x3a11d4(0xc6)),_0x240a52[_0x3a11d4(0x107)](_0x3cb743(_0x580b44[_0x3a11d4(0x1a9)])+_0x3cb743(_0x580b44[_0x3a11d4(0x134)])),_0x22c1fc(new Error(_0x580b44[_0x3a11d4(0xd8)]),_0x580b44);}})[_0xea7572(0x158)](_0x364f9e=>{const _0x429c0c=_0xea7572;_0x3468fe=![],_0x1eaaea[_0x429c0c(0xc0)](_0x429c0c(0xc6)),_0x320c0f[_0x429c0c(0xc0)](_0x429c0c(0xc6)),_0x55abbd[_0x429c0c(0x16e)](_0x429c0c(0xc6)),_0x240a52[_0x429c0c(0x107)](_0x429c0c(0x141)+_0x364f9e[_0x429c0c(0x1a9)]),console[_0x429c0c(0x12d)](_0x429c0c(0x103),_0x364f9e);});});}const _0x9a8877={'FREEWARE':0x0,'TRIAL':0x1,'PROFESSIONAL':0x2},_0x588d59={'AUTHORIZED':0x18,'FAILED':0x17,'EXPIRED':0x16},_0x1dedd1=0xe10*0x3e8,_0x499755=_0x1dedd1*0x18;function _0x190a59(_0x988c4b){const _0x130a14=_0x5d2feb;if(!_0x988c4b[_0x130a14(0xef)]['expiryDate'])return 0x0;const _0x10b3d8=new Date(_0x988c4b[_0x130a14(0xef)]['expiryDate']),_0xdd247=_0x10b3d8[_0x130a14(0x131)]()-Date[_0x130a14(0xed)]();if(_0xdd247<0x0)return 0x0;const _0x445f54=Math['floor'](_0xdd247/_0x499755);return _0x445f54;}function _0x5effea(_0x127f46){const _0x15a875=_0x5d2feb;if(!_0x127f46[_0x15a875(0xef)]['expiryDate'])return 0x0;const _0xbb4518=new Date(_0x127f46[_0x15a875(0xef)][_0x15a875(0x184)]),_0xb8104d=_0xbb4518[_0x15a875(0x131)]()-Date[_0x15a875(0xed)]();if(_0xb8104d<0x0)return 0x0;const _0x680f5f=Math[_0x15a875(0x176)](_0xb8104d/_0x1dedd1);return _0x680f5f;}function _0x4271f2(_0x3f91ae,_0x4f24dc){const _0x4f092a=_0x5d2feb;if(_0x4f24dc!==_0x588d59[_0x4f092a(0xe9)])return _0x9a8877['FREEWARE'];return _0x3f91ae;}function _0x4587a9(_0x41033f){const _0x3e041f=_0x5d2feb;!_0x41033f[_0x3e041f(0x135)]('/')&&(_0x41033f='/'+_0x41033f);const _0x36ab55=_0x3e041f(0x14b);let _0x16059f=RED['settings'][_0x36ab55];!_0x16059f&&(console[_0x3e041f(0xf7)](_0x3e041f(0xac)+_0x36ab55+_0x3e041f(0x12c)),_0x16059f=_0x3e041f(0xe0));!RED['settings']['httpNodeRoot']['endsWith']('/')&&console[_0x3e041f(0x12d)](_0x3e041f(0x12b));const _0x2697b6=_0x3401c8(RED['settings'][_0x3e041f(0x1a1)]+_0x16059f+_0x41033f);return console[_0x3e041f(0x12d)]({'location':window[_0x3e041f(0x13d)][_0x3e041f(0xb2)],'apiPath':_0x41033f,'API_NAMESPACE':_0x16059f,'result':_0x2697b6}),_0x2697b6;}function _0x3401c8(_0x329cd0){const _0x550a4b=_0x5d2feb;return _0x329cd0[_0x550a4b(0x135)]('/')?_0x329cd0['slice'](0x1):_0x329cd0;}function _0x45dba4(){return _0x2112c5(this,void 0x0,void 0x0,function*(){const _0x1dc238=_0x4878,_0x4f898e=_0x4587a9(_0x1dc238(0x150)),_0x244992=yield fetch(_0x4f898e,{'method':_0x1dc238(0x13f),'headers':{'Content-Type':'application/json'}}),_0x5595d1=new Date()[_0x1dc238(0x14c)](),_0x1356fb={'status':'FAILED','type':_0x1dc238(0x15c),'productName':_0x1dc238(0xe7),'productVersion':_0x1dc238(0xbc),'licenceInfo':{'licenceId':_0x1dc238(0x1a0),'licenceType':_0x1dc238(0x13c),'expiryDate':_0x5595d1,'onPremiseServerHost':'','expired':!![],'userCompany':'','userEmail':'','userName':''}};if(_0x244992['status']!==0xc8)return console[_0x1dc238(0x12d)](_0x1dc238(0xb6),_0x244992['status'],_0x244992[_0x1dc238(0x1a4)]),_0x1356fb;const _0x1631d3=yield _0x244992['json']();return _0x1631d3;});}const _0x109441='prctbl_1OJt49BCNccbzsVzkaANOgFL',_0x22045d=_0x5d2feb(0x102),_0x17888f=(_0x418742,_0xebfcd8)=>{const _0x28f557=_0x5d2feb;if(_0x418742[_0x28f557(0xef)]['expired']==_0x28f557(0x122))return _0xebfcd8+_0x28f557(0x11e);if(_0x418742[_0x28f557(0xef)][_0x28f557(0x15d)]===_0x28f557(0x126))return _0xebfcd8+_0x28f557(0x19a);const _0x2f3146=_0x190a59(_0x418742),_0x4630fe=_0x5effea(_0x418742),_0x525f07=_0x2f3146==0x0?_0x4630fe>0xa?'today':_0x28f557(0x165)+_0x4630fe+_0x28f557(0x198):_0x2f3146==0x1?_0x28f557(0xc5):_0x28f557(0x165)+_0x2f3146+_0x28f557(0x115);if(_0x2f3146<0x5a&&_0x2f3146>=0x0)return _0xebfcd8+_0x28f557(0xfe)+_0x525f07+'.';else{if(_0x2f3146<0x0)return'('+_0xebfcd8+_0x28f557(0x13a)+-_0x2f3146+_0x28f557(0x19e);}return'';},_0x3f2499=()=>{const _0x1f55af=_0x5d2feb;$[_0x1f55af(0xc4)](_0x1f55af(0x108),{'options':{},'_create'(){const _0x1238d3=_0x1f55af,_0x1eacbc=_0x1238d3(0x195),_0x3aaeaa=_0x1238d3(0xf9);_0x45dba4()[_0x1238d3(0x174)](_0x225a2b=>{const _0x5bbba8=_0x1238d3;let _0x51cffb='',_0x1d28a0='',_0x441dd4='';const _0x4bd505=_0x9a8877[_0x225a2b[_0x5bbba8(0xb8)]],_0x20df60=_0x588d59[_0x225a2b[_0x5bbba8(0x1ac)]];_0x225a2b[_0x5bbba8(0xef)][_0x5bbba8(0x186)]||![];const _0x16cbd3=_0x4271f2(_0x4bd505,_0x20df60);switch(_0x20df60){case _0x588d59[_0x5bbba8(0xe9)]:_0x51cffb=_0x5bbba8(0xc2);switch(_0x16cbd3){case _0x9a8877['TRIAL']:{_0x1d28a0=_0x5bbba8(0x17f);const _0x2ba54a=_0x17888f(_0x225a2b,_0x5bbba8(0xcd));_0x441dd4=_0x2ba54a+_0x5bbba8(0xe3)+_0x3aaeaa+_0x5bbba8(0xc7);break;}case _0x9a8877[_0x5bbba8(0x15e)]:{_0x1d28a0=_0x5bbba8(0x148);const _0x5a5e60=_0x17888f(_0x225a2b,'It');_0x1d28a0+='\x20'+_0x5a5e60,_0x441dd4=_0x225a2b[_0x5bbba8(0xef)]['licenceType']+'\x20-\x20'+(_0x225a2b[_0x5bbba8(0xef)]['onPremiseServerHost']||'');}break;case _0x9a8877[_0x5bbba8(0x15c)]:{_0x1d28a0=_0x5bbba8(0xd6),_0x441dd4=_0x5bbba8(0x15b)+_0x3aaeaa+_0x5bbba8(0x130);}break;}break;case _0x588d59[_0x5bbba8(0x143)]:_0x51cffb='fa\x20fa-calendar-time';switch(_0x4bd505){case _0x9a8877[_0x5bbba8(0x11f)]:_0x1d28a0='Freeware\x20:\x20(Trial\x20licence\x20expired)',_0x441dd4=_0x5bbba8(0x156)+_0x3aaeaa+'\x20to\x20acquire\x20a\x20license.';break;case _0x9a8877[_0x5bbba8(0x15c)]:_0x1d28a0=_0x5bbba8(0x121),_0x441dd4=_0x5bbba8(0x169)+_0x3aaeaa+_0x5bbba8(0x130);break;case _0x9a8877[_0x5bbba8(0x15e)]:default:const _0x20c6e9=_0x17888f(_0x225a2b,'It');_0x1d28a0=_0x5bbba8(0x194)+_0x20c6e9,_0x441dd4='Your\x20license\x20has\x20expired.\x0aPlease\x20contact\x20our\x20\x20'+_0x1eacbc+_0x5bbba8(0x182);}break;case _0x588d59['FAILED']:default:_0x51cffb=_0x5bbba8(0xcb),_0x1d28a0=_0x5bbba8(0xbb),_0x441dd4=_0x5bbba8(0xe1)+_0x1eacbc+'\x20or\x20visit\x20our\x20website\x20to\x20renew\x20your\x20license\x20and\x20regain\x20access\x20to\x20our\x20services.Μ';break;}this['element'][_0x5bbba8(0xc0)](_0x5bbba8(0x144)),this['element'][_0x5bbba8(0xc0)](_0x5bbba8(0x132)+_0x20df60),this['element'][_0x5bbba8(0x19c)]($(_0x5bbba8(0x13b))[_0x5bbba8(0xc0)](_0x5bbba8(0x173))['append']($('<i>')[_0x5bbba8(0xc0)](_0x51cffb))),this[_0x5bbba8(0xc1)][_0x5bbba8(0x19c)]($(_0x5bbba8(0x13b))['addClass'](_0x5bbba8(0xe8))['text'](_0x1d28a0)),this[_0x5bbba8(0xc1)][_0x5bbba8(0x19c)]($(_0x5bbba8(0x177))),this[_0x5bbba8(0xc1)][_0x5bbba8(0x19c)]($(_0x5bbba8(0x13b))[_0x5bbba8(0xc0)]('licence-widget-details')[_0x5bbba8(0x19c)](_0x441dd4));if(_0x20df60===_0x588d59[_0x5bbba8(0x143)]||_0x20df60===_0x588d59[_0x5bbba8(0xaa)]||_0x16cbd3===_0x9a8877[_0x5bbba8(0x15c)]||_0x16cbd3===_0x9a8877[_0x5bbba8(0x11f)]){this[_0x5bbba8(0xc1)][_0x5bbba8(0x19c)]($(_0x5bbba8(0x177)));const _0x1885c5=$(_0x5bbba8(0x180));_0x1885c5[_0x5bbba8(0x197)]('id',_0x5bbba8(0xb5)),_0x1885c5[_0x5bbba8(0x197)](_0x5bbba8(0xf8),_0x5bbba8(0x178)),_0x1885c5[_0x5bbba8(0x197)](_0x5bbba8(0x10e),'margin-top:\x2020px;'),_0x1885c5['text'](_0x5bbba8(0x190)),this[_0x5bbba8(0xc1)][_0x5bbba8(0x19c)](_0x1885c5);const _0x49a303=document[_0x5bbba8(0xb9)]('script');_0x49a303[_0x5bbba8(0x116)]=_0x5bbba8(0x15a),_0x49a303[_0x5bbba8(0x18a)]=!![],$('head')[_0x5bbba8(0x19c)](_0x49a303);const _0x23c068=$(_0x5bbba8(0x16d));_0x23c068[_0x5bbba8(0x197)]('pricing-table-id',_0x109441),_0x23c068['attr'](_0x5bbba8(0x16a),_0x22045d),_0x23c068[_0x5bbba8(0x197)](_0x5bbba8(0x10e),_0x5bbba8(0x12a)),_0x23c068[_0x5bbba8(0xc6)](),this[_0x5bbba8(0xc1)][_0x5bbba8(0x19c)](_0x23c068),_0x1885c5['on'](_0x5bbba8(0x145),()=>{const _0x12f78a=_0x5bbba8;_0x23c068[_0x12f78a(0x1ab)](),_0x1885c5['hide'](),this[_0x12f78a(0xc1)][_0x12f78a(0x197)](_0x12f78a(0x10e),_0x12f78a(0x19d));});}})[_0x1238d3(0x158)](_0x3026e3=>{console['log'](_0x3026e3);});}});},_0x4a6068=()=>{const _0x595f9c=_0x5d2feb,_0x53d804=$(_0x595f9c(0x100));if(_0x53d804['length']){const _0x56f50f=$(_0x595f9c(0x171),{'src':_0x4587a9(_0x595f9c(0x125)),'scrolling':'no','style':_0x595f9c(0x16b),'allowtransparency':_0x595f9c(0x14f),'width':_0x595f9c(0x112),'height':_0x595f9c(0xdd)});_0x53d804[_0x595f9c(0x19c)](_0x56f50f),_0x56f50f[_0x595f9c(0x196)]({'position':_0x595f9c(0xdc),'right':_0x595f9c(0xd7),'bottom':'16px'});}};_0x3f2499();function _0x33ef6e(_0x3f5466){const _0x3cd5b3=_0x5d2feb;let _0x300946;try{_0x300946=new URL(_0x3f5466);}catch(_0x3805dc){return![];}return _0x300946[_0x3cd5b3(0x10f)]===_0x3cd5b3(0x163);}const _0x36602a={'publishingEnabled':!![],'requestedLifetimeCount':0x3e8,'requestedMaxKeepAliveCount':0xa,'requestedPublishingInterval':0x3e8,'maxNotificationsPerPublish':0x0,'priority':0x64};RED['nodes'][_0x5d2feb(0x152)]('OpcUa-Endpoint2',{'category':'config','paletteLabel':'opcua\x20endpoint','defaults':{'name':{'value':''},'endpoint':{'value':_0x5d2feb(0x123),'required':!![],'validate':_0x33ef6e},'securityMode':{'value':_0x5d2feb(0x18f)},'securityPolicy':{'value':_0x5d2feb(0x18f),'validate':_0x53beca=>{if(!_0x53beca)return![];return!![];}},'userIdentityType':{'value':_0x5d2feb(0xda)},'pkiName':{'value':'','validate':_0x38b6eb=>!_0x38b6eb||_0x38b6eb[_0x5d2feb(0xe5)](/[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':'Default\x20Subscription','isDefault':!![],'parameters':Object[_0x5d2feb(0xf3)]({},_0x36602a)},{'id':'s2','name':_0x5d2feb(0xb4),'isDefault':![],'parameters':{'publishingEnabled':!![],'requestedLifetimeCount':0x64,'requestedMaxKeepAliveCount':0x3,'requestedPublishingInterval':0x1388,'maxNotificationsPerPublish':0x64,'priority':0xa}},{'id':'s3','name':_0x5d2feb(0xbf),'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':_0x5d2feb(0x1a2),'isWellKnown':!![],'isDefault':!![]}],'required':![]}},'credentials':{'userName':{'type':_0x5d2feb(0x192)},'password':{'type':_0x5d2feb(0xfc)},'userCertificate':{'type':_0x5d2feb(0x192)},'userPrivatekey':{'type':'password'}},'label':function(){const _0x24e388=_0x5d2feb;return this[_0x24e388(0x137)]||this['endpoint']||_0x24e388(0x191);},'oneditsave'(){const _0x4d6e37=_0x5d2feb,_0x3f555e=$(_0x4d6e37(0xcc)),_0x5976eb=$('#node-config-input-securityMode');_0x3f555e[_0x4d6e37(0x111)]()===_0x4d6e37(0x18f)&&_0x5976eb[_0x4d6e37(0x192)](_0x4d6e37(0x18f));{const _0x361be4=$(_0x4d6e37(0xc3))[_0x4d6e37(0x18d)](_0x4d6e37(0x162)),_0x2628ce=[],_0x24d650=_0x4cfc28=>_0x4cfc28;_0x361be4[_0x4d6e37(0x17e)](function(_0x44ff33,_0xa2a81){const _0x516693=_0x4d6e37,_0x45d3cb=$(this),_0x8bdc3c={'id':'s'+_0x44ff33,'name':_0x45d3cb[_0x516693(0xb3)](_0x516693(0xbd))['val'](),'isDefault':!!_0x45d3cb[_0x516693(0xb3)](_0x516693(0x168))[_0x516693(0x111)](),'parameters':{'publishingEnabled':!!_0x45d3cb[_0x516693(0xb3)](_0x516693(0xca))['is'](':checked'),'requestedLifetimeCount':_0x24d650(_0x45d3cb[_0x516693(0xb3)](_0x516693(0xdf))[_0x516693(0x111)]()),'requestedMaxKeepAliveCount':_0x24d650(_0x45d3cb[_0x516693(0xb3)]('.input-requestedMaxKeepAliveCount')['val']()),'requestedPublishingInterval':_0x24d650(_0x45d3cb[_0x516693(0xb3)](_0x516693(0x139))[_0x516693(0x111)]()),'maxNotificationsPerPublish':_0x24d650(_0x45d3cb[_0x516693(0xb3)]('.input-maxNotificationsPerPublish')[_0x516693(0x111)]()),'priority':_0x24d650(_0x45d3cb[_0x516693(0xb3)](_0x516693(0x11a))['val']())}};_0x8bdc3c[_0x516693(0x114)]['publishingEnabled']=!![],_0x8bdc3c[_0x516693(0x183)]&&_0x8bdc3c['id']==='s0'&&(_0x8bdc3c[_0x516693(0x137)]=_0x516693(0x101)),_0x2628ce[_0x516693(0xd3)](_0x8bdc3c);}),this['subscriptions']=_0x2628ce;}{const _0x4a6dfd=$(_0x4d6e37(0x12e))['editableList'](_0x4d6e37(0x162)),_0x330282=[];_0x4a6dfd['each'](function(_0xc14749,_0x443d56){const _0x4a6ea6=_0x4d6e37,_0x254c7a=$(this),_0x38bc72={'namespaceUri':_0x254c7a['find']('.node-input-alias-namespace-uri')[_0x4a6ea6(0x111)](),'alias':_0x254c7a[_0x4a6ea6(0xb3)](_0x4a6ea6(0xf2))[_0x4a6ea6(0x111)]()};_0x330282['push'](_0x38bc72);}),this[_0x4d6e37(0xc9)]=_0x330282;}},'oneditprepare'(){const _0x1ac6b2=_0x5d2feb,_0x5b8d28=this;_0x4a6068();const _0x44a125=RED[_0x1ac6b2(0x17b)][_0x1ac6b2(0x172)]({'id':'node-config-endpoint-tabs','onchange':function(_0x3946ea){const _0x4040dd=_0x1ac6b2;$(_0x4040dd(0x10c))[_0x4040dd(0x1a8)]()[_0x4040dd(0xc6)](),$('#'+_0x3946ea['id'])[_0x4040dd(0x1ab)]();}});_0x44a125['addTab']({'id':_0x1ac6b2(0x18c),'label':'Connection'},0x0),_0x44a125[_0x1ac6b2(0x17a)]({'id':_0x1ac6b2(0x105),'label':'Subscriptions'},0x1),_0x44a125['addTab']({'id':'endpoint-tab-namespace-aliases','label':_0x1ac6b2(0xb0)},0x2),setTimeout(function(){const _0x5c63d4=_0x1ac6b2;_0x44a125[_0x5c63d4(0x19b)]();},0x0);{const _0x16cb46=_0x427c2d=>{const _0x411568=_0x1ac6b2;switch(_0x427c2d){case null:case undefined:case'':case _0x411568(0x18f):$(_0x411568(0x11b))[_0x411568(0xc6)]();break;case _0x411568(0x1a7):case _0x411568(0x17d):{const _0x4d6fd6=$(_0x411568(0x11b));(_0x4d6fd6[_0x411568(0x111)]()==='None'||_0x4d6fd6[_0x411568(0x111)]()==='')&&_0x4d6fd6['val'](_0x411568(0xe6)),$(_0x411568(0x11b))[_0x411568(0x1ab)]();}break;default:console[_0x411568(0x12d)](_0x411568(0xd9)+_0x427c2d);}};_0x16cb46(_0x5b8d28['securityMode']);const _0x52f5e6=$(_0x1ac6b2(0x181));_0x52f5e6['on']('change',()=>{const _0x56599e=_0x1ac6b2,_0x4815ef=_0x52f5e6[_0x56599e(0x111)]();_0x16cb46(_0x4815ef);});}const _0x2eccb0=$('#licenceWidget');_0x2eccb0[_0x1ac6b2(0x11d)]({});{const _0x2dee42=$('.section-userIdentityType-UserName'),_0x2757d1=$('.section-userIdentityType-Certificate'),_0x281147=_0x3947e5=>{const _0x2aa8ee=_0x1ac6b2;_0x3947e5=_0x3947e5||_0x2aa8ee(0xda);switch(_0x3947e5){case _0x2aa8ee(0xda):$(_0x2aa8ee(0xf0))['val'](''),$(_0x2aa8ee(0xe4))[_0x2aa8ee(0x111)](''),_0x2dee42['hide'](),_0x2757d1['hide']();break;case'UserName':_0x2dee42['show'](),_0x2757d1[_0x2aa8ee(0xc6)]();break;case _0x2aa8ee(0x10a):$(_0x2aa8ee(0xf0))[_0x2aa8ee(0x111)](''),$(_0x2aa8ee(0xe4))['val'](''),_0x2757d1[_0x2aa8ee(0x1ab)](),_0x2dee42['hide']();break;default:console[_0x2aa8ee(0x12d)](_0x2aa8ee(0x142)+_0x3947e5);}};_0x281147(_0x5b8d28['userIdentityType']);const _0x4957e3=$(_0x1ac6b2(0xde));_0x4957e3['on'](_0x1ac6b2(0x179),()=>{const _0x44c259=_0x1ac6b2,_0xede8f5=_0x4957e3[_0x44c259(0x111)]();_0x281147(_0xede8f5);});}{$(_0x1ac6b2(0x166))[_0x1ac6b2(0xc6)](),$(_0x1ac6b2(0x199))[_0x1ac6b2(0x1a3)]('checked',![]),$('#toggleAdvancedSection')['on'](_0x1ac6b2(0x179),function(){const _0x3e1307=_0x1ac6b2;$(this)[_0x3e1307(0x1a3)](_0x3e1307(0x14e))?$(_0x3e1307(0x166))[_0x3e1307(0x1ab)]():$(_0x3e1307(0x166))[_0x3e1307(0xc6)]();});}const _0x4042e6=$(_0x1ac6b2(0x127))[_0x1ac6b2(0x1a3)]('checked');_0x4042e6?$(_0x1ac6b2(0x14a))['show']():$('#section-TransportSettings')[_0x1ac6b2(0xc6)]();$(_0x1ac6b2(0x127))['on'](_0x1ac6b2(0x179),function(){const _0x32bf1a=_0x1ac6b2;$(this)[_0x32bf1a(0x1a3)](_0x32bf1a(0x14e))?$(_0x32bf1a(0x14a))[_0x32bf1a(0x1ab)]():$('#section-TransportSettings')[_0x32bf1a(0xc6)]();});{$(_0x1ac6b2(0x170))['on']('click',()=>_0x2112c5(this,void 0x0,void 0x0,function*(){const _0x3fe568=_0x1ac6b2,_0x20dda3=yield fetch(_0x4587a9(_0x3fe568(0xb7))),_0x43aca6=yield _0x20dda3['json'](),_0x3b66e0=JSON['stringify'](_0x43aca6,null,'\x20');alert(_0x3b66e0);}));}$('#goto-config')['on'](_0x1ac6b2(0x145),()=>_0x2112c5(this,void 0x0,void 0x0,function*(){const _0x2e9b7d=_0x1ac6b2;window['open'](_0x4587a9(_0x2e9b7d(0x12f)),_0x2e9b7d(0xf6));}));const _0x2e6ec4=$(_0x1ac6b2(0x128)),_0x386b64=$(_0x1ac6b2(0x151));_0x2e6ec4[_0x1ac6b2(0x197)](_0x1ac6b2(0x153),_0x4587a9('/client_certificate.pem')),_0x386b64[_0x1ac6b2(0x197)](_0x1ac6b2(0x153),_0x4587a9(_0x1ac6b2(0x16c)));function _0x54b6d7(){const _0x4a514e=_0x1ac6b2;var _0xf93b21;return{'id':_0x5b8d28['id'],'endpoint':$(_0x4a514e(0x119))[_0x4a514e(0x111)](),'name':$(_0x4a514e(0x167))[_0x4a514e(0x111)](),'pkiName':(_0xf93b21=$(_0x4a514e(0xae)))===null||_0xf93b21===void 0x0?void 0x0:_0xf93b21[_0x4a514e(0x111)](),'securityMode':$(_0x4a514e(0x181))[_0x4a514e(0x111)](),'securityPolicy':$(_0x4a514e(0xcc))['val'](),'userIdentityType':$(_0x4a514e(0xde))[_0x4a514e(0x111)](),'userName':$(_0x4a514e(0xf0))[_0x4a514e(0x111)](),'password':$(_0x4a514e(0xe4))[_0x4a514e(0x111)](),'userCertificate':$(_0x4a514e(0xd4))[_0x4a514e(0x111)](),'userPrivatekey':$(_0x4a514e(0xba))[_0x4a514e(0x111)](),'certificate':$(_0x4a514e(0x140))[_0x4a514e(0x111)](),'useTransport':$(_0x4a514e(0x106))[_0x4a514e(0x1a3)](_0x4a514e(0x14e)),'maxChunkCount':$(_0x4a514e(0x193))[_0x4a514e(0x111)](),'maxMessageSize':$('#node-input-maxMessageSize')[_0x4a514e(0x111)](),'receiveBufferSize':$('#node-input-receiveBufferSize')[_0x4a514e(0x111)](),'sendBufferSize':$(_0x4a514e(0x147))[_0x4a514e(0x111)]()};}{_0x36b6ca('connection',$(_0x1ac6b2(0xf4)),()=>({'url':_0x4587a9(_0x1ac6b2(0xe2)),'body':{'endpointNode':_0x54b6d7()}}),()=>{});}{const _0x192196=(_0x1c2665,_0x3b76f0)=>{const _0x4c85ac=_0x1ac6b2;var _0x2194e0=_0x1c2665[_0x4c85ac(0x118)]()||0x64;_0x1c2665[_0x4c85ac(0xb3)](_0x4c85ac(0x157))['typedInput']('width',_0x2194e0-0xf);},_0x308758=$(_0x1ac6b2(0xc3))[_0x1ac6b2(0x196)]({'min-height':_0x1ac6b2(0x160),'min-width':_0x1ac6b2(0x104)})[_0x1ac6b2(0x18d)]({'addItem':(_0x552882,_0x42a62b,_0x11d020)=>{const _0x2e3ec5=_0x1ac6b2,_0x4e20f6=_0x11d020,_0xe0ce8f=$(_0x2e3ec5(0x189))['clone']()[_0x2e3ec5(0xec)](_0x552882);_0xe0ce8f['removeAttr']('id')[_0x2e3ec5(0x16e)](_0x2e3ec5(0xc6))['removeClass'](_0x2e3ec5(0x1a6))['attr'](_0x2e3ec5(0xd0),_0x42a62b),_0xe0ce8f[_0x2e3ec5(0xb3)](_0x2e3ec5(0xbd))['val'](_0x4e20f6['name']),_0xe0ce8f['find'](_0x2e3ec5(0x139))[_0x2e3ec5(0x111)](_0x4e20f6[_0x2e3ec5(0x114)][_0x2e3ec5(0xaf)]),_0xe0ce8f[_0x2e3ec5(0xb3)](_0x2e3ec5(0xab))[_0x2e3ec5(0x111)](_0x4e20f6[_0x2e3ec5(0x114)]['requestedMaxKeepAliveCount']),_0xe0ce8f[_0x2e3ec5(0xb3)]('.input-requestedLifetimeCount')[_0x2e3ec5(0x111)](_0x4e20f6[_0x2e3ec5(0x114)][_0x2e3ec5(0x13e)]),_0xe0ce8f[_0x2e3ec5(0xb3)](_0x2e3ec5(0x17c))[_0x2e3ec5(0x111)](_0x4e20f6[_0x2e3ec5(0x114)][_0x2e3ec5(0xfa)]||0x0),_0xe0ce8f[_0x2e3ec5(0xb3)](_0x2e3ec5(0x11a))['val'](_0x4e20f6[_0x2e3ec5(0x114)][_0x2e3ec5(0xfd)]||0x0),_0xe0ce8f[_0x2e3ec5(0xb3)](_0x2e3ec5(0xce))[_0x2e3ec5(0x192)](''+_0x42a62b),_0x4e20f6[_0x2e3ec5(0x183)]&&_0xe0ce8f[_0x2e3ec5(0xb3)](_0x2e3ec5(0xbd))[_0x2e3ec5(0x1a3)](_0x2e3ec5(0x10d),!![]),_0xe0ce8f[_0x2e3ec5(0xb3)](_0x2e3ec5(0x168))[_0x2e3ec5(0x1a3)](_0x2e3ec5(0x14e),_0x4e20f6[_0x2e3ec5(0x183)]),_0x4e20f6[_0x2e3ec5(0x183)]&&(_0x552882['find']('.red-ui-editableList-item-remove')[_0x2e3ec5(0xc0)](_0x2e3ec5(0xc6)),setTimeout(()=>_0xe0ce8f[_0x2e3ec5(0xb3)](_0x2e3ec5(0x168))[_0x2e3ec5(0x1a3)](_0x2e3ec5(0xf1),!![]),0xa));},'removable':!![],'resizeItem':_0x192196}),_0x5348f4=()=>{const _0x5ba2d8=_0x1ac6b2,_0x27191a=_0x5b8d28[_0x5ba2d8(0x188)]||[];_0x27191a[_0x5ba2d8(0xff)]===0x0&&_0x27191a[_0x5ba2d8(0xd3)]({'id':'s1','name':_0x5ba2d8(0x101),'isDefault':!![],'parameters':Object[_0x5ba2d8(0xf3)]({},_0x36602a)});_0x308758[_0x5ba2d8(0x18d)]('empty');for(const _0x196cbe of _0x27191a){_0x308758[_0x5ba2d8(0x18d)]('addItem',_0x196cbe);}};_0x5348f4();}{function _0x5adc72(_0x3179eb,_0x54e3a4,_0x4b7506){const _0x2e7a20=_0x1ac6b2,_0x597638=_0x4b7506,_0x56e4fd=$(_0x2e7a20(0x146))[_0x2e7a20(0xec)](_0x3179eb);$(_0x2e7a20(0x129),{'class':_0x2e7a20(0xea),'type':_0x2e7a20(0x192)})['val'](_0x4b7506[_0x2e7a20(0x16f)]||'')[_0x2e7a20(0x196)]({'width':'5%'})['appendTo'](_0x56e4fd)['val'](_0x54e3a4[_0x2e7a20(0x14d)]()),$('<input/>',{'class':_0x2e7a20(0x11c),'type':'text'})['val'](_0x4b7506[_0x2e7a20(0x16f)]||'')['css']({'width':_0x2e7a20(0xc8)})[_0x2e7a20(0xec)](_0x56e4fd)[_0x2e7a20(0x111)](_0x597638[_0x2e7a20(0x16f)]),$(_0x2e7a20(0x129),{'class':_0x2e7a20(0x117),'type':_0x2e7a20(0x192)})['val'](_0x4b7506['namespaceUri']||'')['css']({'width':_0x2e7a20(0x18b)})['appendTo'](_0x56e4fd)[_0x2e7a20(0x111)](_0x597638[_0x2e7a20(0x133)]);}const _0x32a3a5=$(_0x1ac6b2(0x12e))[_0x1ac6b2(0x196)]({'min-height':'150px','min-width':_0x1ac6b2(0x104)})['editableList']({'addButton':![],'removable':![],'height':_0x1ac6b2(0xd1),'scrollOnAdd':![],'addItem'(_0x2c1958,_0x18fe30,_0x87a9ec){_0x5adc72(_0x2c1958,_0x18fe30,_0x87a9ec);}});function _0x22224d(){const _0x1ec01b=_0x1ac6b2;_0x32a3a5[_0x1ec01b(0x18d)](_0x1ec01b(0x162)),_0x32a3a5['editableList'](_0x1ec01b(0x15f));for(const _0x49127d of _0x5b8d28[_0x1ec01b(0xc9)]||[]){_0x32a3a5[_0x1ec01b(0x18d)](_0x1ec01b(0x155),_0x49127d);}}{$(_0x1ac6b2(0x113))['on'](_0x1ac6b2(0x145),()=>_0x2112c5(this,void 0x0,void 0x0,function*(){const _0x4059d5=_0x1ac6b2,_0x2de44a={'endpointNode':_0x54b6d7(),'namespaceAliases':_0x5b8d28[_0x4059d5(0xc9)]||[]},_0x1c0088=yield fetch(_0x4587a9(_0x4059d5(0x120)),{'method':_0x4059d5(0x13f),'headers':{'Content-Type':_0x4059d5(0x18e)},'body':JSON[_0x4059d5(0x161)](_0x2de44a)}),_0x4e904d=yield _0x1c0088[_0x4059d5(0x138)](),_0x509886=_0x4e904d['namespaceAliases'];console[_0x4059d5(0x12d)](_0x4059d5(0xc9),_0x509886),Array[_0x4059d5(0xbe)](_0x509886)&&(_0x5b8d28[_0x4059d5(0xc9)]=_0x509886,_0x22224d());})),_0x5b8d28[_0x1ac6b2(0xc9)]=_0x5b8d28[_0x1ac6b2(0xc9)]||[{'alias':'ua','namespaceUri':'http://opcfoundation.org/UA/','isWellKnown':!![],'isDefault':!![]}];}_0x22224d();}}});}()));function _0x4878(_0x11b0dd,_0x1811e0){_0x11b0dd=_0x11b0dd-0xaa;const _0x46ca41=_0x46ca();let _0x48782a=_0x46ca41[_0x11b0dd];return _0x48782a;}function _0x46ca(){const _0x37b8f1=['attr','\x20hours','#toggleAdvancedSection','\x20is\x20managed\x20by\x20your\x20On-Premise\x20licence\x20server\x20and\x20may\x20not\x20expire.','resize','append','height:\x20100%\x20!important;','\x20days\x20ago)','4172EPRaGd','00000000-0000-0000-0000-000000000000','httpNodeRoot','http://opcfoundation.org/DI/','prop','statusText','SuppressedError','template','Sign','children','message','throw','show','status','FAILED','.input-requestedMaxKeepAliveCount','RED.settings[\x22','</p>','#node-config-input-pkiName','requestedPublishingInterval','Namespace\x20Aliases','22wLjSfR','pathname','find','Slow\x20Subscription','subscribe-button','fetching\x20failed\x20with\x20error','/client_certificate.json','type','createElement','#node-config-input-userPrivatekey','Your\x20license\x20is\x20currently\x20invalid.','0.0.0','.input-name','isArray','Fast\x20Subscription','addClass','element','fa\x20fa-check-circle','#subscriptions-container','widget','tomorrow','hide','\x20to\x20acquire\x20a\x20license.','25%','namespaceAliases','.input-publishingEnabled','fa\x20fa-exclamation-circle','#node-config-input-securityPolicy','The\x20trial','.subscription-id','10088dHNlck','data-i','auto','value','push','#node-config-input-userCertificate','27cKQsEO','Freeware\x20licence','20px','result','invalid\x20securityMode\x20','Anonymous','474567QauyQF','absolute','50px','#node-config-input-userIdentityType','.input-requestedLifetimeCount','opcua-for-node-red-fix-me','Please\x20contact\x20','/test-connection','\x0aBuy\x20online\x20and\x20visit\x20','#node-config-input-password','match','Basic256Sha256','Unknown\x20Product','licence-widget-msg','AUTHORIZED','node-input-alias-index','Testing\x20Connection\x20...','appendTo','now','6282617YaTFty','licenceInfo','#node-config-input-userName','disabled','.node-input-alias-alias','assign','#test-connection','next','_configOpcuaForNodeRed','warn','class','<a\x20href=\x22https://www.sterfive.com/en/shop/opcua-for-nodered\x22\x20target=β_blankβ>Sterfive\x27s\x20website\x20</a>','maxNotificationsPerPublish','map','password','priority','\x20will\x20expire\x20','length','.red-ui-tray-body','Default\x20Subscription','pk_live_51HsE1sBCNccbzsVzt7zaq2uv20pkryWllAzvZgZd5AhwFI9A3qBIeOJvJwQF08lDoLpFqLjwmyA79wnPnYLsvKjt009f00VpCW','err','260px','endpoint-tab-subscriptions','#node-input-useTransport','html','sterfive.licenceWidget','228453IbOADT','Certificate','5nwKlZz','#node-config-endpoint-tabs-content','readonly','style','protocol','-messages','val','180px','#extract-aliases','parameters','\x20days','src','node-input-alias-namespace-uri','width','#node-config-input-endpoint','.input-priority','.section-securityPolicy','node-input-alias-alias','licenceWidget','\x20does\x20not\x20expire.','TRIAL','/extract-namespace-aliases','Freeware\x20licence\x20expired','permanent','opc.tcp://opcuademo.sterfive.com:26543/UA/SampleServer','join','/support-frame.html','OnPremise-Floating','#node-config-input-useTransport','#downloadPEMCertificateLink','<input/>','height:\x20100%;max-height:\x20100%;','httpNodeRoot\x20missing\x20trailing\x20slash','\x22]\x20is\x20not\x20set,\x20using\x20default\x20API\x20namespace','log','#editable-list-aliases-container','/config','\x20for\x20more\x20information.','getTime','licence-widget-','namespaceUri','extra','startsWith','replace','name','json','.input-requestedPublishingInterval','\x20has\x20expired\x20','<span>','<unknown>','location','requestedLifetimeCount','POST','#node-input-certificate','internal\x20error\x20','invalid\x20userIdentityType\x20','EXPIRED','licence-widget','click','<div\x20class=\x22alias-entry\x22>','#node-input-sendBufferSize','Your\x20licence\x20is\x20valid.','2812224AbmaZx','#section-TransportSettings','opcUaEndpoint2Config','toISOString','toString','checked','true','/licenceInfo','#downloadDERCertificateLink','registerType','href','3000220InUxpK','addItem','Your\x20trial\x20license\x20has\x20expired.\x0aPlease\x20visit\x20','label','catch','function','https://js.stripe.com/v3/pricing-table.js','This\x20is\x20a\x20freeware\x20licence,\x20and\x20have\x20some\x20limitations.\x0a','FREEWARE','licenceType','PROFESSIONAL','empty','150px','stringify','items','opc.tcp:','error','in\x20','#section-Advanced','#node-config-input-name','.input-isDefault','Your\x20freeware\x20license\x20has\x20exp