@node-i3x/opcua-connector 0.7.0 → 0.7.1
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/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{qualifiedNameToNsu as We}from"@node-i3x/core";import{DataType as f}from"node-opcua";function x(n,e){switch(e){case f.Boolean:return typeof n=="boolean"?n:typeof n=="number"?n!==0:typeof n=="string"?n.toLowerCase()==="true"||n==="1":!!n;case f.SByte:case f.Byte:case f.Int16:case f.UInt16:case f.Int32:case f.UInt32:return Math.trunc(Number(n));case f.Int64:case f.UInt64:return Array.isArray(n)?n:[0,Math.trunc(Number(n))];case f.Float:case f.Double:return Number(n);case f.String:return String(n);case f.DateTime:return n instanceof Date?n:typeof n=="string"||typeof n=="number"?new Date(n):n;case f.ByteString:return Buffer.isBuffer(n)?n:typeof n=="string"?Buffer.from(n,"base64"):n;default:return n}}function v(n){return typeof n=="number"?f.Double:typeof n=="boolean"?f.Boolean:typeof n=="string"?f.String:n instanceof Date?f.DateTime:f.Null}import{MessageSecurityMode as b,OPCUAClient as X}from"node-opcua";import{coerceSecurityPolicy as R}from"node-opcua-secure-channel";var L=["http://opcfoundation.org/UA/SecurityPolicy#Aes256_Sha256_RsaPss","http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256","http://opcfoundation.org/UA/SecurityPolicy#Aes128_Sha256_RsaOaep","http://opcfoundation.org/UA/SecurityPolicy#Basic256","http://opcfoundation.org/UA/SecurityPolicy#Basic256Rsa15","http://opcfoundation.org/UA/SecurityPolicy#Basic128Rsa15","http://opcfoundation.org/UA/SecurityPolicy#None"],F={[b.SignAndEncrypt]:0,[b.Sign]:1,[b.None]:2},$={None:b.None,Sign:b.Sign,SignAndEncrypt:b.SignAndEncrypt};function _(n,e,t){if(n.length===0){if(e!==void 0||t!==void 0)throw new Error("Server returned no endpoints. Cannot discover a matching security configuration.");return{securityMode:b.None,securityPolicy:R("None")}}let r=[...n];if(e!==void 0){let s=r.filter(a=>a.securityMode===e);if(s.length===0)throw new Error(`Server has no endpoints with securityMode=${b[e]}. Available modes: ${[...new Set(r.map(a=>b[a.securityMode]))].join(", ")}.`);r=s}if(t!==void 0){let s=r.filter(a=>a.securityPolicyUri===t);if(s.length===0)throw new Error(`Server has no endpoints with securityPolicy=${t}. Available policies: ${[...new Set(r.map(a=>a.securityPolicyUri))].join(", ")}.`);r=s}if(e===void 0&&t===void 0){let s=r.filter(a=>a.securityMode!==b.None);s.length>0&&(r=s)}r.sort((s,a)=>{let c=(a.securityLevel??0)-(s.securityLevel??0);if(c!==0)return c;let i=L.indexOf(s.securityPolicyUri??""),o=L.indexOf(a.securityPolicyUri??""),u=(i===-1?999:i)-(o===-1?999:o);return u!==0?u:(F[s.securityMode]??9)-(F[a.securityMode]??9)});let l=r[0];return{securityMode:l.securityMode,securityPolicy:R(l.securityPolicyUri)}}async function O(n,e,t,r){let l=t!==void 0||r!==void 0,s=X.create({connectionStrategy:{maxRetry:3,initialDelay:500,maxDelay:5e3},endpointMustExist:!1});try{await s.connect(n);let a=await s.getEndpoints();await s.disconnect();let c=_(a,t,r);return e.info(`Auto-discovered best endpoint: securityPolicy=${c.securityPolicy} securityMode=${b[c.securityMode]}`),c}catch(a){if(l){try{await s.disconnect()}catch(c){e.debug(`discoveryClient disconnect failed: ${c.message}`)}throw a}e.warn(`Endpoint discovery failed (${a}); falling back to None/None`);try{await s.disconnect()}catch(c){e.debug(`discoveryClient disconnect failed: ${c.message}`)}return{securityMode:b.None,securityPolicy:R("None")}}}var E=class{constructor(e,t){this.client=e;this._logger=t}client;_logger;async connect(){await this.client.connect()}async disconnect(){await this.client.disconnect()}isConnected(){return this.client.isConnected()}async browseTree(){return this.client.browseTree()}async getNamespaces(){return this.client.getNamespaces()}async getObjectTypes(){return this.client.getObjectTypes()}async readValue(e){return this.client.readValue(e)}async readValues(e){return this.client.readValues(e)}async writeValue(e,t){return this.client.writeValue(e,t)}async readHistory(e,t,r){return this.client.readHistory(e,t,r)}async createMonitoredSubscription(e){return this.client.createMonitoredSubscription(e)}};import ae from"os";import{dataValueToHistorical as ce,dataValueToSource as k}from"@node-i3x/core";import{AttributeIds as I,BrowseDirection as K,browseAll as Y,coerceNodeId as S,DataType as C,MessageSecurityMode as D,NodeClass as g,OPCUAClient as le,resolveNodeId as T,StatusCodes as de,TimestampsToReturn as ue,UserTokenType as pe,Variant as J}from"node-opcua";import{coerceSecurityPolicy as Q}from"node-opcua-secure-channel";import ee from"crypto";import te from"fs";import ie from"os";import H from"path";import{OPCUACertificateManager as re}from"node-opcua-certificate-manager";async function q(n,e){let t=ee.createHash("sha256").update(n.endpointUrl).digest("hex").slice(0,12),r=n.pkiFolder??H.join(process.cwd(),"pki",`i3x-${t}`),l=new re({rootFolder:r,automaticallyAcceptUnknownCertificate:!0,name:"PKI",keySize:2048});return await l.initialize(),await ne(l,n,r,t,e),l}async function ne(n,e,t,r,l){let s=H.join(t,"PKI","own","certs","client_certificate.pem");if(te.existsSync(s)){l.debug(`Client certificate exists: ${s}`);return}let a=ie.hostname(),c=e.applicationUri??`urn:${a}:${e.applicationName}`;await n.createSelfSignedCertificate({applicationUri:c,subject:e.certificateSubject??`/CN=${e.applicationName}-${r}/O=Sterfive/L=Orleans/C=FR`,dns:[a],startDate:new Date,validity:365*10}),l.info(`Created self-signed client certificate: ${s}`)}import{NODE_CLASS_NAMES as oe,qualifiedNameToNsu as se}from"@node-i3x/core";import{NodeClass as z}from"node-opcua";function W(n,e,t){let r=n.nodeClass??z.Unspecified,l=se(n.browseName,t),s="",a=l.match(/^nsu=(.+):([^:]+)$/);if(a)s=a[1];else{let c=n.browseName?.namespaceIndex??0;s=t[c]??""}return{sourceNodeId:n.nodeId.toString(),parentSourceNodeId:e,browseName:n.browseName?.toString()??"",nsuQualifiedName:l,displayName:n.displayName?.text??n.browseName?.toString()??"",nodeClass:oe[r]??"Unknown",typeDefinition:n.typeDefinition?n.typeDefinition.toString():null,namespaceUri:s,eventNotifier:n.nodeClass===z.Object?(n.eventNotifier??0)!==0:!1}}async function V(n,e){try{let{ClientSessionOptimized:t}=await import("@sterfive/opcua-optimized-client"),r=new t(n);return e.info("\u2713 @sterfive/opcua-optimized-client activated \u2014 auto-batching, limit-splitting, and coalescing enabled"),r}catch(t){return e.debug(`Failed to import @sterfive/opcua-optimized-client: ${t.message}`),e.info("Standard node-opcua client mode. Install @sterfive/opcua-optimized-client for automatic batching and enhanced performance."),n}}var Z=63,ye="i=2255",fe=100,me=10,ge=10,he=10,A=200,j=class{constructor(e,t){this.logger=t;this._opts={endpointUrl:e.endpointUrl,securityMode:e.securityMode??"Auto",securityPolicy:e.securityPolicy??"Auto",applicationName:e.applicationName??"node-i3x",optimizedClient:e.optimizedClient??"auto",browseStrategy:e.browseStrategy??"parallel",browseFilter:e.browseFilter??"application-only",username:e.username,password:e.password,applicationUri:e.applicationUri,pkiFolder:e.pkiFolder,certificateSubject:e.certificateSubject}}logger;_client=null;_session=null;_certificateManager=null;_namespaceArray=[];_serviceCounters={browse:0,read:0,write:0,translate:0,subscribe:0,call:0,readHistory:0};_opts;getStats(){return{transactionsPerformed:this._client?.transactionsPerformed??0,bytesRead:this._client?.bytesRead??0,bytesWritten:this._client?.bytesWritten??0,services:{...this._serviceCounters}}}async connect(){let e=await q(this._opts,this.logger);this._certificateManager=e;let t,r;if(this._opts.securityMode==="None")t=D.None,r=Q("None");else if(this._opts.securityMode==="Auto"&&this._opts.securityPolicy==="Auto"){let o=await O(this._opts.endpointUrl,this.logger);t=o.securityMode,r=o.securityPolicy}else if(this._opts.securityMode==="Auto"){let o="http://opcfoundation.org/UA/SecurityPolicy#"+this._opts.securityPolicy,u=await O(this._opts.endpointUrl,this.logger,void 0,o);t=u.securityMode,r=u.securityPolicy}else if(this._opts.securityPolicy==="Auto"){let o=$[this._opts.securityMode]??D.None,u=await O(this._opts.endpointUrl,this.logger,o);t=u.securityMode,r=u.securityPolicy}else t=$[this._opts.securityMode]??D.None,r=Q(this._opts.securityPolicy);let l=ae.hostname(),s=this._opts.applicationUri??`urn:${l}:${this._opts.applicationName}`;this._client=le.create({applicationName:this._opts.applicationName,applicationUri:s,securityMode:t,securityPolicy:r,clientCertificateManager:e,connectionStrategy:{initialDelay:1e3,maxDelay:3e4,maxRetry:1/0},keepSessionAlive:!0,endpointMustExist:!1}),this._client.on("backoff",(o,u)=>{this.logger.warn(`Connection backoff #${o}, retrying in ${u}ms`)}),this._client.on("connection_reestablished",()=>{this.logger.info("OPC UA connection re-established")}),this.logger.info(`Connecting to ${this._opts.endpointUrl} (securityMode=${D[t]}, securityPolicy=${r})...`),await this._client.connect(this._opts.endpointUrl);let a=this._opts.username&&this._opts.password?{type:pe.UserName,userName:this._opts.username,password:this._opts.password}:void 0,c=await this._client.createSession(a);this._opts.optimizedClient!=="disabled"&&(c=await V(c,this.logger)),this._session=c;let i=await c.read({nodeId:S(ye),attributeId:I.Value});this._namespaceArray=i.value?.value??[],this.logger.info("OPC UA session created")}async disconnect(){if(this._session){try{await this._session.close()}catch(e){this.logger.debug(`best-effort session.close failed: ${e.message}`)}this._session=null}if(this._client){try{await this._client.disconnect()}catch(e){this.logger.debug(`best-effort client.disconnect failed: ${e.message}`)}this._client=null}if(this._certificateManager){try{await this._certificateManager.dispose()}catch(e){this.logger.debug(`best-effort certificateManager.dispose failed: ${e.message}`)}this._certificateManager=null}this.logger.info("OPC UA disconnected")}static selectBestEndpoint=_;isConnected(){return this._session!==null&&!this._session.isReconnecting}get session(){if(!this._session)throw new Error("OPC UA session not connected");return this._session}_makeBrowseDescriptions(e,t=T("HierarchicalReferences")){return e.map(r=>({nodeId:S(r),browseDirection:K.Forward,includeSubtypes:!0,referenceTypeId:t,resultMask:Z,requestedMaxReferencesPerNode:0}))}async _browseSingleNode(e,t){let r=this._makeBrowseDescriptions([e],t)[0],l=await this.session.browse(r),s=[...l.references??[]],a=1,c=l.continuationPoint;for(;c;){let i=await this.session.browseNext(c,!1);a++,s.push(...i.references??[]),c=i.continuationPoint}return{refs:s,txCount:a}}async _bfsBrowse(e,t,r,l){let s=performance.now(),a=[],c=new Set,i=0,o=[{nodeId:e,parentId:null}],u=this._opts.browseStrategy!=="browseAll",p=new Set;for(;o.length>0;){let d=o.filter(m=>!c.has(m.nodeId));for(let m of d)c.add(m.nodeId);if(d.length===0)break;let y;if(u)y=await Promise.all(d.map(m=>this._browseSingleNode(m.nodeId,l)));else{let m=this._makeBrowseDescriptions(d.map(P=>P.nodeId),l),N=await Y(this.session,m);i+=1,y=N.map(P=>({refs:P.references??[],txCount:0}))}let w=[],h=new Set;for(let m=0;m<d.length;m++){let N=d[m],{refs:P,txCount:G}=y[m];i+=G;for(let U of P){let M=U.nodeId.toString();if(!c.has(M)){if(!p.has(M)){p.add(M);let B=t(U,N.nodeId);B!==null&&a.push(B)}(!r||r(U,N.nodeId))&&(h.has(M)||(h.add(M),w.push({nodeId:M,parentId:N.nodeId})))}}}o=w}return{items:a,txCount:i,ms:performance.now()-s}}async browseTree(){this._serviceCounters.browse++;let e=T("ObjectsFolder").toString(),t=this._opts.browseFilter??"application-only",{items:r,txCount:l,ms:s}=await this._bfsBrowse(e,(c,i)=>{let o=i===e?null:i;if(i===e){if(t==="application-only"&&(c.browseName?.namespaceIndex??0)===0)return null;if(Array.isArray(t)){let u=c.nodeId.toString(),p=c.browseName?.name??"";if(!t.some(y=>y===u||y===p))return null}}return W(c,o,this._namespaceArray)},(c,i)=>{if(c.nodeClass!==g.Object&&c.nodeClass!==g.Variable)return!1;if(i===e){if(t==="all")return!0;if(t==="application-only")return(c.browseName?.namespaceIndex??0)!==0;let o=c.nodeId.toString(),u=c.browseName?.name??"";return t.some(p=>p===o||p===u)}return!0}),a=this._opts.browseStrategy!=="browseAll"?"parallel":"browseAll";return this.logger.info(`Browse tree: ${r.length} nodes in ${s.toFixed(0)}ms (strategy=${a}, transactions=${l})`),r}async getObjectTypes(){this._serviceCounters.browse++;let{items:e,txCount:t,ms:r}=await this._bfsBrowse(T("ObjectTypesFolder").toString(),(d,y)=>{if(d.nodeClass!==g.ObjectType)return null;let w=d.browseName?.namespaceIndex??0,h=this._namespaceArray[w]??"";return{sourceNodeId:d.nodeId.toString(),parentSourceNodeId:y,browseName:d.browseName?.toString()??"",displayName:d.displayName?.text??"",namespaceUri:h}},d=>d.nodeClass===g.ObjectType),l=this._opts.browseStrategy!=="browseAll"?"parallel":"browseAll";this.logger.info(`Browse object types: ${e.length} types in ${r.toFixed(0)}ms (strategy=${l}, transactions=${t})`);let s=performance.now(),a=new Set,c=[],i=[];for(let d of e)a.has(d.sourceNodeId)||(a.add(d.sourceNodeId),d.sourceNodeId.startsWith("ns=0;")?c.push(d):i.push(d));let o=[];for(let d=0;d<i.length;d+=A){let y=i.slice(d,d+A),w=await Promise.all(y.map(h=>this._browseTypeMembers(h.sourceNodeId).then(m=>({...h,members:m}),()=>h)));o.push(...w),i.length>A&&this.logger.info(`Enriching types: ${Math.min(d+A,i.length)}/${i.length} done`)}let u=[...c,...o],p=performance.now()-s;return this.logger.info(`Enriched ${i.length} types with members in ${p.toFixed(0)}ms`),u}async _browseTypeMembers(e){let{refs:t}=await this._browseSingleNode(e),r=[],l=[];for(let i of t)i.nodeClass!==g.Variable&&i.nodeClass!==g.Object&&i.nodeClass!==g.Method||i.nodeClass===g.Variable&&l.push(i);let s=new Map;if(l.length>0){let i=l.map(o=>({nodeId:o.nodeId,attributeId:I.DataType}));try{let o=await this.session.read(i),u=Array.isArray(o)?o:[o];for(let p=0;p<l.length;p++){let d=l[p].nodeId.toString(),y=u[p]?.value?.value;s.set(d,y?y.toString():null)}}catch(o){this.logger.debug(`Failed to resolve DataTypes during browse: ${o.message}`)}}let a=new Map,c=t.filter(i=>i.nodeClass===g.Variable||i.nodeClass===g.Object||i.nodeClass===g.Method);if(c.length>0){let i=c.map(o=>({nodeId:o.nodeId,browseDirection:K.Forward,includeSubtypes:!0,referenceTypeId:T("HasModellingRule"),resultMask:Z,requestedMaxReferencesPerNode:0}));try{let o=await Y(this.session,i);for(let u=0;u<c.length;u++){let p=c[u].nodeId.toString(),d=o[u]?.references?.[0];a.set(p,d?.displayName?.text??null)}}catch(o){this.logger.debug(`Failed to resolve ModellingRules during browse: ${o.message}`)}}for(let i of c){let o=i.nodeId.toString();r.push({browseName:i.browseName?.name??i.browseName?.toString()??"",displayName:i.displayName?.text??"",nodeClass:i.nodeClass===g.Variable?"Variable":i.nodeClass===g.Object?"Object":"Method",dataType:s.get(o)??null,modellingRule:a.get(o)??null})}return r}async getNamespaces(){return this._namespaceArray.map((e,t)=>({uri:e,displayName:e.split("/").pop()??`ns${t}`}))}async readValue(e){this._serviceCounters.read++;let t=await this.session.read({nodeId:S(e),attributeId:I.Value});return k(t)}async readValues(e){if(this._serviceCounters.read++,e.length===0)return[];let t=e.map(s=>({nodeId:S(s),attributeId:I.Value})),r=await this.session.read(t);return(Array.isArray(r)?r:[r]).map(k)}async writeValue(e,t){this._serviceCounters.write++;let r=S(e),l=await this.session.read([{nodeId:r,attributeId:I.DataType},{nodeId:r,attributeId:I.Value}]),s=Array.isArray(l)?l:[l],a=s[0]?.value?.value,c=s[1],i=C.Null;if(a){let y=typeof a=="object"?a.value??0:Number(a);y>=1&&y<=25?i=y:c?.value?.value!==void 0&&(i=c.value.dataType??C.Null)}let o=t;try{o=x(t,i)}catch(y){let w=`Write coercion failed for ${e}: targetDataType=${C[i]}(${i}) jsType=${typeof t} jsValue=${JSON.stringify(t)} error=${y}`;throw this.logger.warn(w),new Error(w)}let u={nodeId:r,attributeId:I.Value,value:{value:new J({dataType:i!==C.Null?i:v(o),value:o})}};this.logger.debug(`writeValue: nodeId=${e} targetDataType=${C[i]} jsType=${typeof t} \u2192 coerced=${JSON.stringify(o)}`);let p=await this.session.write(u),d=Array.isArray(p)?p[0]:p;if(d&&!d.equals(de.Good)){let y=`Write failed: ${d.toString()} | nodeId=${e} targetDataType=${C[i]}(${i}) inputValue=${JSON.stringify(t)} (${typeof t}) coercedValue=${JSON.stringify(o)} (${typeof o})`;throw this.logger.warn(y),new Error(y)}}async readHistory(e,t,r){this._serviceCounters.readHistory++;let s=await this.session.readHistoryValue(S(e),t,r);return(s.historyData?s.historyData?.dataValues??[]:[]).map(ce)}async callMethod(e,t,r){this._serviceCounters.call++;let l={objectId:S(e),methodId:S(t),inputArguments:r.map(a=>new J({dataType:C.Null,value:a}))};return(await this.session.call(l)).outputArguments??null}async createMonitoredSubscription(e){this._serviceCounters.subscribe++;let t=await this.session.createSubscription2({requestedPublishingInterval:e.publishingIntervalMs,requestedLifetimeCount:fe,requestedMaxKeepAliveCount:me,maxNotificationsPerPublish:0,publishingEnabled:!0,priority:he}),r=null,l=new Map,s=`opcua-sub-${Date.now()}`,a=this.logger;return a.info(`OPC UA CreateSubscription id=${s} publishingInterval=${e.publishingIntervalMs}ms`),{id:s,async addItems(i){let o=i.filter(p=>!l.has(p));if(o.length===0)return;let u=await Promise.all(o.map(p=>t.monitor({nodeId:S(p),attributeId:I.Value},{samplingInterval:e.samplingIntervalMs,discardOldest:!0,queueSize:ge},ue.Both)));for(let p=0;p<o.length;p++){let d=o[p],y=u[p];y.on("changed",w=>{if(r){let h=k(w);r(d,h.value,h.quality,h.timestamp)}}),l.set(d,y)}a.info(`OPC UA CreateMonitoredItems: ${o.length} items added (total=${l.size})`)},async removeItems(i){let o=i.map(u=>({id:u,item:l.get(u)})).filter(u=>u.item!=null);await Promise.all(o.map(({id:u,item:p})=>(l.delete(u),p.terminate().catch(()=>{}))))},onDataChange(i){r=i},async close(){try{await t.terminate()}catch(i){a.debug(`Failed to terminate subscription: ${i.message}`)}l.clear()}}}};export{j as OpcUaClient,E as OpcUaDataSourceAdapter,x as coerceToDataType,v as inferDataType,We as qualifiedNameToNsu,_ as selectBestEndpoint,V as wrapSessionIfOptimized};
|
|
1
|
+
import{qualifiedNameToNsu as Qe}from"@node-i3x/core";import{DataType as f}from"node-opcua";function x(s,e){switch(e){case f.Boolean:return typeof s=="boolean"?s:typeof s=="number"?s!==0:typeof s=="string"?s.toLowerCase()==="true"||s==="1":!!s;case f.SByte:case f.Byte:case f.Int16:case f.UInt16:case f.Int32:case f.UInt32:return Math.trunc(Number(s));case f.Int64:case f.UInt64:return Array.isArray(s)?s:[0,Math.trunc(Number(s))];case f.Float:case f.Double:return Number(s);case f.String:return String(s);case f.DateTime:return s instanceof Date?s:typeof s=="string"||typeof s=="number"?new Date(s):s;case f.ByteString:return Buffer.isBuffer(s)?s:typeof s=="string"?Buffer.from(s,"base64"):s;default:return s}}function U(s){return typeof s=="number"?f.Double:typeof s=="boolean"?f.Boolean:typeof s=="string"?f.String:s instanceof Date?f.DateTime:f.Null}import{MessageSecurityMode as h,OPCUAClient as te}from"node-opcua";import{coerceSecurityPolicy as T,SecurityPolicy as g}from"node-opcua-secure-channel";var q=[g.Aes256_Sha256_RsaPss,g.Basic256Sha256,g.Aes128_Sha256_RsaOaep,g.Basic256,g.Basic256Rsa15,g.Basic128Rsa15,g.None],z={[h.SignAndEncrypt]:0,[h.Sign]:1,[h.None]:2},F={None:h.None,Sign:h.Sign,SignAndEncrypt:h.SignAndEncrypt},ie={None:g.None,Basic128Rsa15:g.Basic128Rsa15,Basic256:g.Basic256,Basic256Rsa15:g.Basic256Rsa15,Basic256Sha256:g.Basic256Sha256,Aes128_Sha256_RsaOaep:g.Aes128_Sha256_RsaOaep,Aes256_Sha256_RsaPss:g.Aes256_Sha256_RsaPss};function E(s){let e=F[s];if(e===void 0)throw new Error(`Invalid OPC UA security mode '${s}'. Must be one of: ${Object.keys(F).join(", ")}.`);return e}function V(s){if(s.startsWith("http://"))return s;let e=ie[s];return e||T(s)}function $(s,e,t){if(s.length===0){if(e!==void 0||t!==void 0)throw new Error("Server returned no endpoints. Cannot discover a matching security configuration.");return{securityMode:h.None,securityPolicy:T("None")}}let n=[...s];if(e!==void 0){let a=n.filter(o=>o.securityMode===e);if(a.length===0)throw new Error(`Server has no endpoints with securityMode=${h[e]}. Available modes: ${[...new Set(n.map(o=>h[o.securityMode]))].join(", ")}.`);n=a}if(t!==void 0){let a=n.filter(o=>o.securityPolicyUri===t);if(a.length===0)throw new Error(`Server has no endpoints with securityPolicy=${t}. Available policies: ${[...new Set(n.map(o=>o.securityPolicyUri))].join(", ")}.`);n=a}if(e===void 0&&t===void 0){let a=n.filter(o=>o.securityMode!==h.None);a.length>0&&(n=a)}n.sort((a,o)=>{let c=(o.securityLevel??0)-(a.securityLevel??0);if(c!==0)return c;let i=q.indexOf(a.securityPolicyUri??""),r=q.indexOf(o.securityPolicyUri??""),u=(i===-1?999:i)-(r===-1?999:r);return u!==0?u:(z[a.securityMode]??9)-(z[o.securityMode]??9)});let l=n[0];return{securityMode:l.securityMode,securityPolicy:T(l.securityPolicyUri)}}async function D(s,e,t,n){let l=t!==void 0||n!==void 0,a=te.create({connectionStrategy:{maxRetry:3,initialDelay:500,maxDelay:5e3},endpointMustExist:!1});try{e.info(`[discovery] Connecting to ${s} (mode=None/policy=None for GetEndpoints)...`),await a.connect(s);let o=await a.getEndpoints();await a.disconnect(),e.info(`[discovery] Server returned ${o.length} endpoint(s):`);for(let i of o){let r=h[i.securityMode]??`Unknown(${i.securityMode})`;e.info(` \u2022 mode=${r}, policy=${i.securityPolicyUri}, securityLevel=${i.securityLevel??0}`)}(t!==void 0||n!==void 0)&&e.info(`[discovery] Applying filters: mode=${t!==void 0?h[t]:"any"}, policy=${n??"any"}`);let c=$(o,t,n);return e.info(`[discovery] Selected best endpoint: mode=${h[c.securityMode]} (enum=${c.securityMode}), policy=${c.securityPolicy}`),c}catch(o){if(l){try{await a.disconnect()}catch(c){e.debug(`discoveryClient disconnect failed: ${c.message}`)}throw o}e.warn(`Endpoint discovery failed (${o}); falling back to None/None`);try{await a.disconnect()}catch(c){e.debug(`discoveryClient disconnect failed: ${c.message}`)}return{securityMode:h.None,securityPolicy:T("None")}}}var k=class{constructor(e,t){this.client=e;this._logger=t}client;_logger;async connect(){await this.client.connect()}async disconnect(){await this.client.disconnect()}isConnected(){return this.client.isConnected()}async browseTree(){return this.client.browseTree()}async getNamespaces(){return this.client.getNamespaces()}async getObjectTypes(){return this.client.getObjectTypes()}async readValue(e){return this.client.readValue(e)}async readValues(e){return this.client.readValues(e)}async writeValue(e,t){return this.client.writeValue(e,t)}async readHistory(e,t,n){return this.client.readHistory(e,t,n)}async createMonitoredSubscription(e){return this.client.createMonitoredSubscription(e)}};import de from"os";import{dataValueToHistorical as ue,dataValueToSource as B}from"@node-i3x/core";import{AttributeIds as C,BrowseDirection as Q,browseAll as G,coerceNodeId as I,DataType as M,MessageSecurityMode as O,NodeClass as b,OPCUAClient as pe,resolveNodeId as v,StatusCodes as ye,TimestampsToReturn as fe,UserTokenType as me,Variant as Z}from"node-opcua";import{coerceSecurityPolicy as ge}from"node-opcua-secure-channel";import se from"crypto";import ne from"fs";import re from"os";import W from"path";import{OPCUACertificateManager as oe}from"node-opcua-certificate-manager";async function K(s,e){let t=se.createHash("sha256").update(s.endpointUrl).digest("hex").slice(0,12),n=s.pkiFolder??W.join(process.cwd(),"pki",`i3x-${t}`),l=new oe({rootFolder:n,automaticallyAcceptUnknownCertificate:!0,name:"PKI",keySize:2048});return await l.initialize(),await ae(l,s,n,t,e),l}async function ae(s,e,t,n,l){let a=W.join(t,"PKI","own","certs","client_certificate.pem");if(ne.existsSync(a)){l.debug(`Client certificate exists: ${a}`);return}let o=re.hostname(),c=e.applicationUri??`urn:${o}:${e.applicationName}`;await s.createSelfSignedCertificate({applicationUri:c,subject:e.certificateSubject??`/CN=${e.applicationName}-${n}/O=Sterfive/L=Orleans/C=FR`,dns:[o],startDate:new Date,validity:365*10}),l.info(`Created self-signed client certificate: ${a}`)}import{NODE_CLASS_NAMES as ce,qualifiedNameToNsu as le}from"@node-i3x/core";import{NodeClass as Y}from"node-opcua";function J(s,e,t){let n=s.nodeClass??Y.Unspecified,l=le(s.browseName,t),a="",o=l.match(/^nsu=(.+):([^:]+)$/);if(o)a=o[1];else{let c=s.browseName?.namespaceIndex??0;a=t[c]??""}return{sourceNodeId:s.nodeId.toString(),parentSourceNodeId:e,browseName:s.browseName?.toString()??"",nsuQualifiedName:l,displayName:s.displayName?.text??s.browseName?.toString()??"",nodeClass:ce[n]??"Unknown",typeDefinition:s.typeDefinition?s.typeDefinition.toString():null,namespaceUri:a,eventNotifier:s.nodeClass===Y.Object?(s.eventNotifier??0)!==0:!1}}async function j(s,e){try{let{ClientSessionOptimized:t}=await import("@sterfive/opcua-optimized-client"),n=new t(s);return e.info("\u2713 @sterfive/opcua-optimized-client activated \u2014 auto-batching, limit-splitting, and coalescing enabled"),n}catch(t){return e.debug(`Failed to import @sterfive/opcua-optimized-client: ${t.message}`),e.info("Standard node-opcua client mode. Install @sterfive/opcua-optimized-client for automatic batching and enhanced performance."),s}}var X=63,he="i=2255",be=100,we=10,Se=10,Ie=10,A=200,L=class{constructor(e,t){this.logger=t;this._opts={endpointUrl:e.endpointUrl,securityMode:e.securityMode??"Auto",securityPolicy:e.securityPolicy??"Auto",applicationName:e.applicationName??"node-i3x",optimizedClient:e.optimizedClient??"auto",browseStrategy:e.browseStrategy??"parallel",browseFilter:e.browseFilter??"application-only",username:e.username,password:e.password,applicationUri:e.applicationUri,pkiFolder:e.pkiFolder,certificateSubject:e.certificateSubject}}logger;_client=null;_session=null;_certificateManager=null;_namespaceArray=[];_serviceCounters={browse:0,read:0,write:0,translate:0,subscribe:0,call:0,readHistory:0};_opts;getStats(){return{transactionsPerformed:this._client?.transactionsPerformed??0,bytesRead:this._client?.bytesRead??0,bytesWritten:this._client?.bytesWritten??0,services:{...this._serviceCounters}}}async connect(){let e=await K(this._opts,this.logger);this._certificateManager=e;let t,n;if(this.logger.info(`Security configuration: mode='${this._opts.securityMode}', policy='${this._opts.securityPolicy}'`),this._opts.securityMode==="None")t=O.None,n=ge("None"),this.logger.info("Using None/None (no security).");else if(this._opts.securityMode==="Auto"&&this._opts.securityPolicy==="Auto"){this.logger.info("Auto/Auto: discovering best endpoint...");let r=await D(this._opts.endpointUrl,this.logger);t=r.securityMode,n=r.securityPolicy}else if(this._opts.securityMode==="Auto"){let r=V(this._opts.securityPolicy);this.logger.info(`Auto mode + explicit policy: discovering best mode for ${r}...`);let u=await D(this._opts.endpointUrl,this.logger,void 0,r);t=u.securityMode,n=u.securityPolicy}else if(this._opts.securityPolicy==="Auto"){let r=E(this._opts.securityMode);this.logger.info(`Explicit mode=${O[r]} (${r}) + auto policy: discovering best policy...`);let u=await D(this._opts.endpointUrl,this.logger,r);t=u.securityMode,n=u.securityPolicy}else t=E(this._opts.securityMode),n=V(this._opts.securityPolicy),this.logger.info(`Fully explicit: mode=${O[t]} (${t}), policy=${n}`);this.logger.info(`Resolved security: MessageSecurityMode=${O[t]} (enum=${t}), SecurityPolicy=${n}`);let l=de.hostname(),a=this._opts.applicationUri??`urn:${l}:${this._opts.applicationName}`;this._client=pe.create({applicationName:this._opts.applicationName,applicationUri:a,securityMode:t,securityPolicy:n,clientCertificateManager:e,connectionStrategy:{initialDelay:1e3,maxDelay:5e3,maxRetry:2},keepSessionAlive:!0,endpointMustExist:!1}),this._client.on("backoff",(r,u)=>{this.logger.warn(`Connection backoff #${r}, retrying in ${u}ms`)}),this._client.on("connection_reestablished",()=>{this.logger.info("OPC UA connection re-established")}),this.logger.info(`Connecting to ${this._opts.endpointUrl} (securityMode=${O[t]}, securityPolicy=${n})...`),await this._client.connect(this._opts.endpointUrl);let o=this._opts.username&&this._opts.password?{type:me.UserName,userName:this._opts.username,password:this._opts.password}:void 0,c=await this._client.createSession(o);this._opts.optimizedClient!=="disabled"&&(c=await j(c,this.logger)),this._session=c;let i=await c.read({nodeId:I(he),attributeId:C.Value});this._namespaceArray=i.value?.value??[],this.logger.info("OPC UA session created")}async disconnect(){if(this._session){try{await this._session.close()}catch(e){this.logger.debug(`best-effort session.close failed: ${e.message}`)}this._session=null}if(this._client){try{await this._client.disconnect()}catch(e){this.logger.debug(`best-effort client.disconnect failed: ${e.message}`)}this._client=null}if(this._certificateManager){try{await this._certificateManager.dispose()}catch(e){this.logger.debug(`best-effort certificateManager.dispose failed: ${e.message}`)}this._certificateManager=null}this.logger.info("OPC UA disconnected")}static selectBestEndpoint=$;isConnected(){return this._session!==null&&!this._session.isReconnecting}get session(){if(!this._session)throw new Error("OPC UA session not connected");return this._session}_makeBrowseDescriptions(e,t=v("HierarchicalReferences")){return e.map(n=>({nodeId:I(n),browseDirection:Q.Forward,includeSubtypes:!0,referenceTypeId:t,resultMask:X,requestedMaxReferencesPerNode:0}))}async _browseSingleNode(e,t){let n=this._makeBrowseDescriptions([e],t)[0],l=await this.session.browse(n),a=[...l.references??[]],o=1,c=l.continuationPoint;for(;c;){let i=await this.session.browseNext(c,!1);o++,a.push(...i.references??[]),c=i.continuationPoint}return{refs:a,txCount:o}}async _bfsBrowse(e,t,n,l){let a=performance.now(),o=[],c=new Set,i=0,r=[{nodeId:e,parentId:null}],u=this._opts.browseStrategy!=="browseAll",p=new Set;for(;r.length>0;){let d=r.filter(m=>!c.has(m.nodeId));for(let m of d)c.add(m.nodeId);if(d.length===0)break;let y;if(u)y=await Promise.all(d.map(m=>this._browseSingleNode(m.nodeId,l)));else{let m=this._makeBrowseDescriptions(d.map(P=>P.nodeId),l),_=await G(this.session,m);i+=1,y=_.map(P=>({refs:P.references??[],txCount:0}))}let S=[],w=new Set;for(let m=0;m<d.length;m++){let _=d[m],{refs:P,txCount:ee}=y[m];i+=ee;for(let R of P){let N=R.nodeId.toString();if(!c.has(N)){if(!p.has(N)){p.add(N);let H=t(R,_.nodeId);H!==null&&o.push(H)}(!n||n(R,_.nodeId))&&(w.has(N)||(w.add(N),S.push({nodeId:N,parentId:_.nodeId})))}}}r=S}return{items:o,txCount:i,ms:performance.now()-a}}async browseTree(){this._serviceCounters.browse++;let e=v("ObjectsFolder").toString(),t=this._opts.browseFilter??"application-only",{items:n,txCount:l,ms:a}=await this._bfsBrowse(e,(c,i)=>{let r=i===e?null:i;if(i===e){if(t==="application-only"&&(c.browseName?.namespaceIndex??0)===0)return null;if(Array.isArray(t)){let u=c.nodeId.toString(),p=c.browseName?.name??"";if(!t.some(y=>y===u||y===p))return null}}return J(c,r,this._namespaceArray)},(c,i)=>{if(c.nodeClass!==b.Object&&c.nodeClass!==b.Variable)return!1;if(i===e){if(t==="all")return!0;if(t==="application-only")return(c.browseName?.namespaceIndex??0)!==0;let r=c.nodeId.toString(),u=c.browseName?.name??"";return t.some(p=>p===r||p===u)}return!0}),o=this._opts.browseStrategy!=="browseAll"?"parallel":"browseAll";return this.logger.info(`Browse tree: ${n.length} nodes in ${a.toFixed(0)}ms (strategy=${o}, transactions=${l})`),n}async getObjectTypes(){this._serviceCounters.browse++;let{items:e,txCount:t,ms:n}=await this._bfsBrowse(v("ObjectTypesFolder").toString(),(d,y)=>{if(d.nodeClass!==b.ObjectType)return null;let S=d.browseName?.namespaceIndex??0,w=this._namespaceArray[S]??"";return{sourceNodeId:d.nodeId.toString(),parentSourceNodeId:y,browseName:d.browseName?.toString()??"",displayName:d.displayName?.text??"",namespaceUri:w}},d=>d.nodeClass===b.ObjectType),l=this._opts.browseStrategy!=="browseAll"?"parallel":"browseAll";this.logger.info(`Browse object types: ${e.length} types in ${n.toFixed(0)}ms (strategy=${l}, transactions=${t})`);let a=performance.now(),o=new Set,c=[],i=[];for(let d of e)o.has(d.sourceNodeId)||(o.add(d.sourceNodeId),d.sourceNodeId.startsWith("ns=0;")?c.push(d):i.push(d));let r=[];for(let d=0;d<i.length;d+=A){let y=i.slice(d,d+A),S=await Promise.all(y.map(w=>this._browseTypeMembers(w.sourceNodeId).then(m=>({...w,members:m}),()=>w)));r.push(...S),i.length>A&&this.logger.info(`Enriching types: ${Math.min(d+A,i.length)}/${i.length} done`)}let u=[...c,...r],p=performance.now()-a;return this.logger.info(`Enriched ${i.length} types with members in ${p.toFixed(0)}ms`),u}async _browseTypeMembers(e){let{refs:t}=await this._browseSingleNode(e),n=[],l=[];for(let i of t)i.nodeClass!==b.Variable&&i.nodeClass!==b.Object&&i.nodeClass!==b.Method||i.nodeClass===b.Variable&&l.push(i);let a=new Map;if(l.length>0){let i=l.map(r=>({nodeId:r.nodeId,attributeId:C.DataType}));try{let r=await this.session.read(i),u=Array.isArray(r)?r:[r];for(let p=0;p<l.length;p++){let d=l[p].nodeId.toString(),y=u[p]?.value?.value;a.set(d,y?y.toString():null)}}catch(r){this.logger.debug(`Failed to resolve DataTypes during browse: ${r.message}`)}}let o=new Map,c=t.filter(i=>i.nodeClass===b.Variable||i.nodeClass===b.Object||i.nodeClass===b.Method);if(c.length>0){let i=c.map(r=>({nodeId:r.nodeId,browseDirection:Q.Forward,includeSubtypes:!0,referenceTypeId:v("HasModellingRule"),resultMask:X,requestedMaxReferencesPerNode:0}));try{let r=await G(this.session,i);for(let u=0;u<c.length;u++){let p=c[u].nodeId.toString(),d=r[u]?.references?.[0];o.set(p,d?.displayName?.text??null)}}catch(r){this.logger.debug(`Failed to resolve ModellingRules during browse: ${r.message}`)}}for(let i of c){let r=i.nodeId.toString();n.push({browseName:i.browseName?.name??i.browseName?.toString()??"",displayName:i.displayName?.text??"",nodeClass:i.nodeClass===b.Variable?"Variable":i.nodeClass===b.Object?"Object":"Method",dataType:a.get(r)??null,modellingRule:o.get(r)??null})}return n}async getNamespaces(){return this._namespaceArray.map((e,t)=>({uri:e,displayName:e.split("/").pop()??`ns${t}`}))}async readValue(e){this._serviceCounters.read++;let t=await this.session.read({nodeId:I(e),attributeId:C.Value});return B(t)}async readValues(e){if(this._serviceCounters.read++,e.length===0)return[];let t=e.map(a=>({nodeId:I(a),attributeId:C.Value})),n=await this.session.read(t);return(Array.isArray(n)?n:[n]).map(B)}async writeValue(e,t){this._serviceCounters.write++;let n=I(e),l=await this.session.read([{nodeId:n,attributeId:C.DataType},{nodeId:n,attributeId:C.Value}]),a=Array.isArray(l)?l:[l],o=a[0]?.value?.value,c=a[1],i=M.Null;if(o){let y=typeof o=="object"?o.value??0:Number(o);y>=1&&y<=25?i=y:c?.value?.value!==void 0&&(i=c.value.dataType??M.Null)}let r=t;try{r=x(t,i)}catch(y){let S=`Write coercion failed for ${e}: targetDataType=${M[i]}(${i}) jsType=${typeof t} jsValue=${JSON.stringify(t)} error=${y}`;throw this.logger.warn(S),new Error(S)}let u={nodeId:n,attributeId:C.Value,value:{value:new Z({dataType:i!==M.Null?i:U(r),value:r})}};this.logger.debug(`writeValue: nodeId=${e} targetDataType=${M[i]} jsType=${typeof t} \u2192 coerced=${JSON.stringify(r)}`);let p=await this.session.write(u),d=Array.isArray(p)?p[0]:p;if(d&&!d.equals(ye.Good)){let y=`Write failed: ${d.toString()} | nodeId=${e} targetDataType=${M[i]}(${i}) inputValue=${JSON.stringify(t)} (${typeof t}) coercedValue=${JSON.stringify(r)} (${typeof r})`;throw this.logger.warn(y),new Error(y)}}async readHistory(e,t,n){this._serviceCounters.readHistory++;let a=await this.session.readHistoryValue(I(e),t,n);return(a.historyData?a.historyData?.dataValues??[]:[]).map(ue)}async callMethod(e,t,n){this._serviceCounters.call++;let l={objectId:I(e),methodId:I(t),inputArguments:n.map(o=>new Z({dataType:M.Null,value:o}))};return(await this.session.call(l)).outputArguments??null}async createMonitoredSubscription(e){this._serviceCounters.subscribe++;let t=await this.session.createSubscription2({requestedPublishingInterval:e.publishingIntervalMs,requestedLifetimeCount:be,requestedMaxKeepAliveCount:we,maxNotificationsPerPublish:0,publishingEnabled:!0,priority:Ie}),n=null,l=new Map,a=`opcua-sub-${Date.now()}`,o=this.logger;return o.info(`OPC UA CreateSubscription id=${a} publishingInterval=${e.publishingIntervalMs}ms`),{id:a,async addItems(i){let r=i.filter(p=>!l.has(p));if(r.length===0)return;let u=await Promise.all(r.map(p=>t.monitor({nodeId:I(p),attributeId:C.Value},{samplingInterval:e.samplingIntervalMs,discardOldest:!0,queueSize:Se},fe.Both)));for(let p=0;p<r.length;p++){let d=r[p],y=u[p];y.on("changed",S=>{if(n){let w=B(S);n(d,w.value,w.quality,w.timestamp)}}),l.set(d,y)}o.info(`OPC UA CreateMonitoredItems: ${r.length} items added (total=${l.size})`)},async removeItems(i){let r=i.map(u=>({id:u,item:l.get(u)})).filter(u=>u.item!=null);await Promise.all(r.map(({id:u,item:p})=>(l.delete(u),p.terminate().catch(()=>{}))))},onDataChange(i){n=i},async close(){try{await t.terminate()}catch(i){o.debug(`Failed to terminate subscription: ${i.message}`)}l.clear()}}}};export{L as OpcUaClient,k as OpcUaDataSourceAdapter,x as coerceToDataType,U as inferDataType,Qe as qualifiedNameToNsu,$ as selectBestEndpoint,j as wrapSessionIfOptimized};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/data-type-coercer.ts","../src/endpoint-discovery.ts","../src/opcua-adapter.ts","../src/opcua-client.ts","../src/certificate-manager.ts","../src/opcua-mapper.ts","../src/optimized.ts"],"mappings":"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","names":["qualifiedNameToNsu","DataType","coerceToDataType","value","dt","inferDataType","MessageSecurityMode","OPCUAClient","coerceSecurityPolicy","SECURITY_POLICY_RANK","SECURITY_MODE_RANK","SECURITY_MODES","selectBestEndpoint","endpoints","modeFilter","policyFilter","pool","filtered","ep","secured","a","b","levelDiff","pA","pB","policyDiff","best","discoverBestEndpoint","endpointUrl","logger","hasFilter","discoveryClient","result","err","discoveryDisconnectErr","OpcUaDataSourceAdapter","client","_logger","sourceNodeId","sourceNodeIds","value","startTime","endTime","options","os","dataValueToHistorical","dataValueToSource","AttributeIds","BrowseDirection","browseAll","coerceNodeId","DataType","MessageSecurityMode","NodeClass","OPCUAClient","resolveNodeId","StatusCodes","TimestampsToReturn","UserTokenType","Variant","coerceSecurityPolicy","crypto","fs","os","path","OPCUACertificateManager","createCertificateManager","opts","logger","hash","pkiFolder","certificateManager","ensureSelfSignedCertificate","certFile","hostname","applicationUri","NODE_CLASS_NAMES","qualifiedNameToNsu","NodeClass","refToSourceNode","ref","parentSourceNodeId","namespaceArray","nodeClass","nsuQName","namespaceUri","nsuMatch","nsIdx","wrapSessionIfOptimized","session","logger","ClientSessionOptimized","optimized","err","RESULT_MASK_ALL","NAMESPACE_ARRAY_NODE_ID","SUBSCRIPTION_LIFETIME_COUNT","SUBSCRIPTION_KEEPALIVE_COUNT","MONITORED_ITEM_QUEUE_SIZE","SUBSCRIPTION_PRIORITY","ENRICH_CHUNK_SIZE","OpcUaClient","opts","logger","certificateManager","createCertificateManager","securityMode","securityPolicy","MessageSecurityMode","coerceSecurityPolicy","best","discoverBestEndpoint","policyUri","explicitMode","SECURITY_MODES","hostname","os","applicationUri","OPCUAClient","count","delay","userIdentity","UserTokenType","session","wrapSessionIfOptimized","nsArrayDv","coerceNodeId","AttributeIds","err","selectBestEndpoint","nodeIds","referenceTypeId","resolveNodeId","nodeId","BrowseDirection","desc","result","refs","txCount","cp","next","seedNodeId","onRef","shouldRecurse","started","output","visited","totalTx","frontier","useParallel","mapped","wave","f","item","waveResults","w","descriptions","browseResults","browseAll","r","nextFrontier","queued","i","ref","childId","m","objectsFolderId","filter","items","ms","parentNodeId","effectiveParent","name","refToSourceNode","NodeClass","strategy","nsIdx","nsUri","enrichStart","stdTypes","nonStdTypes","type","memberResults","chunk","chunkResults","members","enriched","enrichMs","typeNodeId","variableRefs","dataTypeMap","readItems","dvs","arr","dtValue","modellingRuleMap","memberRefs","mrDescriptions","mrResults","mrRef","uri","idx","dv","dataValueToSource","id","value","nid","readResults","dvArr","dataTypeNodeId","currentDataValue","targetDataType","DataType","dtNum","coercedValue","coerceToDataType","coerceErr","msg","writeVal","Variant","inferDataType","code","StatusCodes","errMsg","startTime","endTime","resultAny","dataValueToHistorical","objectNodeId","methodNodeId","args","request","options","sub","dataChangeCb","monitored","subId","sourceNodeIds","newIds","TimestampsToReturn","toRemove","e","cb"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/data-type-coercer.ts","../src/endpoint-discovery.ts","../src/opcua-adapter.ts","../src/opcua-client.ts","../src/certificate-manager.ts","../src/opcua-mapper.ts","../src/optimized.ts"],"mappings":"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","names":["qualifiedNameToNsu","DataType","coerceToDataType","value","dt","inferDataType","MessageSecurityMode","OPCUAClient","coerceSecurityPolicy","SecurityPolicy","SECURITY_POLICY_RANK","SECURITY_MODE_RANK","SECURITY_MODES","SECURITY_POLICY_URI","coerceMessageSecurityMode","mode","result","coercePolicyToUri","policy","uri","selectBestEndpoint","endpoints","modeFilter","policyFilter","pool","filtered","ep","secured","b","levelDiff","pA","pB","policyDiff","best","discoverBestEndpoint","endpointUrl","logger","hasFilter","discoveryClient","modeName","err","discoveryDisconnectErr","OpcUaDataSourceAdapter","client","_logger","sourceNodeId","sourceNodeIds","value","startTime","endTime","options","os","dataValueToHistorical","dataValueToSource","AttributeIds","BrowseDirection","browseAll","coerceNodeId","DataType","MessageSecurityMode","NodeClass","OPCUAClient","resolveNodeId","StatusCodes","TimestampsToReturn","UserTokenType","Variant","coerceSecurityPolicy","crypto","fs","os","path","OPCUACertificateManager","createCertificateManager","opts","logger","hash","pkiFolder","certificateManager","ensureSelfSignedCertificate","certFile","hostname","applicationUri","NODE_CLASS_NAMES","qualifiedNameToNsu","NodeClass","refToSourceNode","ref","parentSourceNodeId","namespaceArray","nodeClass","nsuQName","namespaceUri","nsuMatch","nsIdx","wrapSessionIfOptimized","session","logger","ClientSessionOptimized","optimized","err","RESULT_MASK_ALL","NAMESPACE_ARRAY_NODE_ID","SUBSCRIPTION_LIFETIME_COUNT","SUBSCRIPTION_KEEPALIVE_COUNT","MONITORED_ITEM_QUEUE_SIZE","SUBSCRIPTION_PRIORITY","ENRICH_CHUNK_SIZE","OpcUaClient","opts","logger","certificateManager","createCertificateManager","securityMode","securityPolicy","MessageSecurityMode","coerceSecurityPolicy","best","discoverBestEndpoint","policyUri","coercePolicyToUri","explicitMode","coerceMessageSecurityMode","hostname","os","applicationUri","OPCUAClient","count","delay","userIdentity","UserTokenType","session","wrapSessionIfOptimized","nsArrayDv","coerceNodeId","AttributeIds","err","selectBestEndpoint","nodeIds","referenceTypeId","resolveNodeId","nodeId","BrowseDirection","desc","result","refs","txCount","cp","next","seedNodeId","onRef","shouldRecurse","started","output","visited","totalTx","frontier","useParallel","mapped","wave","f","item","waveResults","w","descriptions","browseResults","browseAll","r","nextFrontier","queued","i","ref","childId","m","objectsFolderId","filter","items","ms","parentNodeId","effectiveParent","name","refToSourceNode","NodeClass","strategy","nsIdx","nsUri","enrichStart","stdTypes","nonStdTypes","type","memberResults","chunk","chunkResults","members","enriched","enrichMs","typeNodeId","variableRefs","dataTypeMap","readItems","dvs","arr","dtValue","modellingRuleMap","memberRefs","mrDescriptions","mrResults","mrRef","uri","idx","dv","dataValueToSource","id","value","nid","readResults","dvArr","dataTypeNodeId","currentDataValue","targetDataType","DataType","dtNum","coercedValue","coerceToDataType","coerceErr","msg","writeVal","Variant","inferDataType","code","StatusCodes","errMsg","startTime","endTime","resultAny","dataValueToHistorical","objectNodeId","methodNodeId","args","request","a","options","sub","dataChangeCb","monitored","subId","sourceNodeIds","newIds","TimestampsToReturn","toRemove","e","cb"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@node-i3x/opcua-connector",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"description": "i3X OPC UA adapter — implements IDataSourcePort using node-opcua",
|
|
5
5
|
"license": "AGPL-3.0-or-later OR LicenseRef-Sterfive-Commercial",
|
|
6
6
|
"author": "Sterfive SAS <contact@sterfive.com> (https://sterfive.com)",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"typecheck": "tsc --noEmit"
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
|
-
"@node-i3x/core": "0.7.
|
|
61
|
+
"@node-i3x/core": "0.7.1",
|
|
62
62
|
"node-opcua": "^2.173.1",
|
|
63
63
|
"node-opcua-certificate-manager": "^2.173.0",
|
|
64
64
|
"node-opcua-client": "^2.173.1",
|