@node-i3x/opcua-connector 0.9.10 → 0.9.11
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 tt}from"@node-i3x/core";import{DataType as h}from"node-opcua";function E(i,e){switch(e){case h.Boolean:return typeof i=="boolean"?i:typeof i=="number"?i!==0:typeof i=="string"?i.toLowerCase()==="true"||i==="1":!!i;case h.SByte:case h.Byte:case h.Int16:case h.UInt16:case h.Int32:case h.UInt32:return Math.trunc(Number(i));case h.Int64:case h.UInt64:return Array.isArray(i)?i:[0,Math.trunc(Number(i))];case h.Float:case h.Double:return Number(i);case h.String:return String(i);case h.DateTime:return i instanceof Date?i:typeof i=="string"||typeof i=="number"?new Date(i):i;case h.ByteString:return Buffer.isBuffer(i)?i:typeof i=="string"?Buffer.from(i,"base64"):i;default:return i}}function V(i){return typeof i=="number"?h.Double:typeof i=="boolean"?h.Boolean:typeof i=="string"?h.String:i instanceof Date?h.DateTime:h.Null}import{MessageSecurityMode as S,OPCUAClient as ae}from"node-opcua";import{coerceSecurityPolicy as v,SecurityPolicy as w}from"node-opcua-secure-channel";var Y=[w.Aes256_Sha256_RsaPss,w.Basic256Sha256,w.Aes128_Sha256_RsaOaep,w.Basic256,w.Basic256Rsa15,w.Basic128Rsa15,w.None],J={[S.SignAndEncrypt]:0,[S.Sign]:1,[S.None]:2},Q={None:S.None,Sign:S.Sign,SignAndEncrypt:S.SignAndEncrypt},ce={None:w.None,Basic128Rsa15:w.Basic128Rsa15,Basic256:w.Basic256,Basic256Rsa15:w.Basic256Rsa15,Basic256Sha256:w.Basic256Sha256,Aes128_Sha256_RsaOaep:w.Aes128_Sha256_RsaOaep,Aes256_Sha256_RsaPss:w.Aes256_Sha256_RsaPss};function k(i){let e=Q[i];if(e===void 0)throw new Error(`Invalid OPC UA security mode '${i}'. Must be one of: ${Object.keys(Q).join(", ")}.`);return e}function j(i){if(i.startsWith("http://"))return i;let e=ce[i];return e||v(i)}function D(i,e,t){if(i.length===0){if(e!==void 0||t!==void 0)throw new Error("Server returned no endpoints. Cannot discover a matching security configuration.");return{securityMode:S.None,securityPolicy:v("None")}}let n=[...i];if(e!==void 0){let c=n.filter(a=>a.securityMode===e);if(c.length===0)throw new Error(`Server has no endpoints with securityMode=${S[e]}. Available modes: ${[...new Set(n.map(a=>S[a.securityMode]))].join(", ")}.`);n=c}if(t!==void 0){let c=n.filter(a=>a.securityPolicyUri===t);if(c.length===0)throw new Error(`Server has no endpoints with securityPolicy=${t}. Available policies: ${[...new Set(n.map(a=>a.securityPolicyUri))].join(", ")}.`);n=c}if(e===void 0&&t===void 0){let c=n.filter(a=>a.securityMode!==S.None);c.length>0&&(n=c)}n.sort((c,a)=>{let p=(a.securityLevel??0)-(c.securityLevel??0);if(p!==0)return p;let o=Y.indexOf(c.securityPolicyUri??""),r=Y.indexOf(a.securityPolicyUri??""),l=(o===-1?999:o)-(r===-1?999:r);return l!==0?l:(J[c.securityMode]??9)-(J[a.securityMode]??9)});let d=n[0];return{securityMode:d.securityMode,securityPolicy:v(d.securityPolicyUri)}}async function U(i,e,t,n){let d=t!==void 0||n!==void 0,c=ae.create({connectionStrategy:{maxRetry:3,initialDelay:500,maxDelay:5e3},endpointMustExist:!1});try{e.info(`[discovery] Connecting to ${i} (mode=None/policy=None for GetEndpoints)...`),await c.connect(i);let a=await c.getEndpoints();await c.disconnect(),e.info(`[discovery] Server returned ${a.length} endpoint(s):`);for(let o of a){let r=S[o.securityMode]??`Unknown(${o.securityMode})`;e.info(` \u2022 mode=${r}, policy=${o.securityPolicyUri}, securityLevel=${o.securityLevel??0}`)}(t!==void 0||n!==void 0)&&e.info(`[discovery] Applying filters: mode=${t!==void 0?S[t]:"any"}, policy=${n??"any"}`);let p=D(a,t,n);return e.info(`[discovery] Selected best endpoint: mode=${S[p.securityMode]} (enum=${p.securityMode}), policy=${p.securityPolicy}`),p}catch(a){if(d){try{await c.disconnect()}catch(p){e.debug(`discoveryClient disconnect failed: ${p.message}`)}throw a}e.warn(`Endpoint discovery failed (${a}); falling back to None/None`);try{await c.disconnect()}catch(p){e.debug(`discoveryClient disconnect failed: ${p.message}`)}return{securityMode:S.None,securityPolicy:v("None")}}}var B=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 me from"os";import{dataValueToHistorical as ge,dataValueToSource as q,toNsuNodeId as he}from"@node-i3x/core";import{AttributeIds as I,BrowseDirection as ee,browseAll as te,coerceNodeId as N,DataType as P,MessageSecurityMode as O,NodeClass as C,OPCUAClient as be,resolveNodeId as T,StatusCodes as we,TimestampsToReturn as ie,UserTokenType as re,Variant as ne}from"node-opcua";import{coerceSecurityPolicy as Se}from"node-opcua-secure-channel";import le from"crypto";import L from"fs";import de from"os";import F from"path";import{OPCUACertificateManager as ue}from"node-opcua-certificate-manager";async function G(i,e){let t=le.createHash("sha256").update(i.endpointUrl).digest("hex").slice(0,12),n=i.pkiFolder??F.join(process.cwd(),"pki",`i3x-${t}`),d=new ue({rootFolder:n,automaticallyAcceptUnknownCertificate:!0,name:"PKI",keySize:2048});return await d.initialize(),await pe(d,i,n,t,e),d}async function pe(i,e,t,n,d){let c=F.join(t,"PKI","own","certs","client_certificate.pem");if(!L.existsSync(c)){let o=F.join(t,"own","certs","client_certificate.pem");L.existsSync(o)&&(c=o)}if(L.existsSync(c)){d.debug(`Client certificate exists: ${c}`);return}let a=de.hostname(),p=e.applicationUri??`urn:${a}:${e.applicationName}`;await i.createSelfSignedCertificate({applicationUri:p,subject:e.certificateSubject??`/CN=${e.applicationName}-${n}/O=Sterfive/L=Orleans/C=FR`,dns:[a],startDate:new Date,validity:365*10}),d.info(`Created self-signed client certificate: ${c}`)}import{NODE_CLASS_NAMES as ye,qualifiedNameToNsu as fe}from"@node-i3x/core";import{NodeClass as Z}from"node-opcua";function X(i,e,t){let n=i.nodeClass??Z.Unspecified,d=fe(i.browseName,t),c="",a=d.match(/^nsu=(.+):([^:]+)$/);if(a)c=a[1];else{let p=i.browseName?.namespaceIndex??0;c=t[p]??""}return{sourceNodeId:i.nodeId.toString(),parentSourceNodeId:e,browseName:i.browseName?.toString()??"",nsuQualifiedName:d,displayName:i.displayName?.text??i.browseName?.toString()??"",nodeClass:ye[n]??"Unknown",typeDefinition:i.typeDefinition?i.typeDefinition.toString():null,namespaceUri:c,eventNotifier:i.nodeClass===Z.Object?(i.eventNotifier??0)!==0:!1}}async function z(i,e){try{let{ClientSessionOptimized:t}=await import("@sterfive/opcua-optimized-client"),n=new t(i);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."),i}}var se=63,Ie="i=2255",Ce=100,Me=10,oe=10,Ne=10,$=200;function Pe(i){if(!i||typeof i!="object")throw new Error("OPC UA client options must be an object");if(typeof i.endpointUrl!="string"||!i.endpointUrl.trim())throw new Error("OPC UA endpointUrl must be a non-empty string");if(!i.endpointUrl.startsWith("opc.tcp://"))throw new Error('OPC UA endpointUrl must start with "opc.tcp://"');if(i.securityMode!==void 0&&!["None","Sign","SignAndEncrypt","Auto"].includes(i.securityMode))throw new Error(`OPC UA securityMode must be "None", "Sign", "SignAndEncrypt", or "Auto", got "${i.securityMode}"`);if(i.optimizedClient!==void 0&&!["auto","disabled"].includes(i.optimizedClient))throw new Error(`OPC UA optimizedClient must be "auto" or "disabled", got "${i.optimizedClient}"`);if(i.browseStrategy!==void 0&&!["parallel","browseAll"].includes(i.browseStrategy))throw new Error(`OPC UA browseStrategy must be "parallel" or "browseAll", got "${i.browseStrategy}"`);if(i.browseFilter!==void 0){let t=i.browseFilter;if(t!=="application-only"&&t!=="all"&&!Array.isArray(t))throw new Error('OPC UA browseFilter must be "application-only", "all", or an array of string node IDs/browse names');if(Array.isArray(t)&&t.some(n=>typeof n!="string"))throw new Error("OPC UA browseFilter array must contain only strings")}if(i.browseMaxDepth!==void 0&&(typeof i.browseMaxDepth!="number"||!Number.isInteger(i.browseMaxDepth)))throw new Error("OPC UA browseMaxDepth must be an integer");let e=["username","password","securityPolicy","applicationName","applicationUri","pkiFolder","certificateSubject"];for(let t of e)if(i[t]!==void 0&&typeof i[t]!="string")throw new Error(`OPC UA ${t} must be a string`)}var H=class{constructor(e,t){this.logger=t;Pe(e),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,browseMaxDepth:e.browseMaxDepth??25}}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 G(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=Se("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 u=await U(this._opts.endpointUrl,this.logger);t=u.securityMode,n=u.securityPolicy}else if(this._opts.securityMode==="Auto"){let u=j(this._opts.securityPolicy);this.logger.info(`Auto mode + explicit policy: discovering best mode for ${u}...`);let s=await U(this._opts.endpointUrl,this.logger,void 0,u);t=s.securityMode,n=s.securityPolicy}else if(this._opts.securityPolicy==="Auto"){let u=k(this._opts.securityMode);this.logger.info(`Explicit mode=${O[u]} (${u}) + auto policy: discovering best policy...`);let s=await U(this._opts.endpointUrl,this.logger,u);t=s.securityMode,n=s.securityPolicy}else t=k(this._opts.securityMode),n=j(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 d=me.hostname(),c=this._opts.applicationUri??`urn:${d}:${this._opts.applicationName}`,a={applicationName:this._opts.applicationName,applicationUri:c,securityMode:t,securityPolicy:n,clientCertificateManager:e,connectionStrategy:{initialDelay:1e3,maxDelay:5e3,maxRetry:2},keepSessionAlive:!0,endpointMustExist:!1};this.logger.info(`OPCUAClient.create parameters: ${JSON.stringify(a,(u,s)=>u==="clientCertificateManager"?s?"OPCUACertificateManager":"undefined":s,2)}`),this._client=be.create(a),this._client.on("backoff",(u,s)=>{this.logger.warn(`Connection backoff #${u}, retrying in ${s}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 p=this._opts.username&&this._opts.password?{type:re.UserName,userName:this._opts.username,password:this._opts.password}:void 0,o={userIdentity:p?{type:re[p.type]??p.type,userName:p.userName,password:"***"}:void 0};this.logger.info(`OPCUAClient.createSession parameters: ${JSON.stringify(o,null,2)}`);let r=await this._client.createSession(p);this._opts.optimizedClient!=="disabled"&&(r=await z(r,this.logger)),this._session=r;let l=await r.read({nodeId:N(Ie),attributeId:I.Value});this._namespaceArray=l.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=D;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(n=>({nodeId:N(n),browseDirection:ee.Forward,includeSubtypes:!0,referenceTypeId:t,resultMask:se,requestedMaxReferencesPerNode:0}))}async _browseSingleNode(e,t){let n=this._makeBrowseDescriptions([e],t)[0],d=await this.session.browse(n),c=[...d.references??[]],a=1,p=d.continuationPoint;for(;p;){let o=await this.session.browseNext(p,!1);a++,c.push(...o.references??[]),p=o.continuationPoint}return{refs:c,txCount:a}}async _bfsBrowse(e,t,n,d){let c=performance.now(),a=[],p=new Set,o=0,r=[{nodeId:e,parentId:null,depth:0}],l=this._opts.browseStrategy!=="browseAll",u=new Set;for(;r.length>0;){let s=r.filter(g=>!p.has(g.nodeId));for(let g of s)p.add(g.nodeId);if(s.length===0)break;let m;if(l)m=await Promise.all(s.map(g=>this._browseSingleNode(g.nodeId,d)));else{let g=this._makeBrowseDescriptions(s.map(M=>M.nodeId),d),b=await te(this.session,g);o+=1,m=b.map(M=>({refs:M.references??[],txCount:0}))}let y=[],f=new Set;for(let g=0;g<s.length;g++){let b=s[g],{refs:M,txCount:A}=m[g];o+=A;for(let R of M){let _=R.nodeId.toString();if(p.has(_))continue;if(!u.has(_)){u.add(_);let K=t(R,b.nodeId);K!==null&&a.push(K)}let x=this._opts.browseMaxDepth,W=b.depth+1;(x===void 0||x<0||W<=x)&&(!n||n(R,b.nodeId))&&(f.has(_)||(f.add(_),y.push({nodeId:_,parentId:b.nodeId,depth:W})))}}r=y}return{items:a,txCount:o,ms:performance.now()-c}}async browseTree(){this._serviceCounters.browse++;let e=T("ObjectsFolder").toString(),t=this._opts.browseFilter??"application-only",{items:n,txCount:d,ms:c}=await this._bfsBrowse(e,(o,r)=>{let l=r===e?null:r;if(r===e){if(t==="application-only"&&(o.browseName?.namespaceIndex??0)===0)return null;if(Array.isArray(t)){let u=o.nodeId.toString(),s=o.browseName?.name??"";if(!t.some(y=>y===u||y===s))return null}}return X(o,l,this._namespaceArray)},(o,r)=>{if(o.nodeClass!==C.Object&&o.nodeClass!==C.Variable)return!1;if(r===e){if(t==="all")return!0;if(t==="application-only")return(o.browseName?.namespaceIndex??0)!==0;let l=o.nodeId.toString(),u=o.browseName?.name??"";return t.some(s=>s===l||s===u)}return!0}),a=n.filter(o=>o.nodeClass==="Variable");if(a.length>0){let o=[];for(let r of a)o.push({nodeId:r.sourceNodeId,attributeId:I.DataType}),o.push({nodeId:r.sourceNodeId,attributeId:I.ValueRank});try{let r=await this.session.read(o),l=Array.isArray(r)?r:[r],u=new Set;for(let y=0;y<a.length;y++){let f=l[y*2]?.value?.value;f&&u.add(f.toString())}let s=Array.from(u),m=new Map;if(s.length>0){let y=s.map(b=>({nodeId:b,attributeId:I.BrowseName})),f=await this.session.read(y),g=Array.isArray(f)?f:[f];for(let b=0;b<s.length;b++){let M=g[b]?.value?.value;M&&typeof M.name=="string"&&m.set(s[b],M.name)}}for(let y=0;y<a.length;y++){let f=a[y],g=l[y*2]?.value?.value,b=l[y*2+1]?.value?.value;if(g){let M=g.toString();f.dataType=he(M,this._namespaceArray);let A=m.get(M);A&&(f.dataTypeName=A)}typeof b=="number"&&(f.valueRank=b)}}catch(r){this.logger.warn(`Failed to batch-read Variable DataTypes/ValueRanks: ${r}`)}}let p=this._opts.browseStrategy!=="browseAll"?"parallel":"browseAll";return this.logger.info(`Browse tree: ${n.length} nodes in ${c.toFixed(0)}ms (strategy=${p}, transactions=${d})`),n}async getObjectTypes(){this._serviceCounters.browse++;let{items:e,txCount:t,ms:n}=await this._bfsBrowse(T("ObjectTypesFolder").toString(),(s,m)=>{if(s.nodeClass!==C.ObjectType)return null;let y=s.browseName?.namespaceIndex??0,f=this._namespaceArray[y]??"";return{sourceNodeId:s.nodeId.toString(),parentSourceNodeId:m,browseName:s.browseName?.toString()??"",displayName:s.displayName?.text??"",namespaceUri:f}},s=>s.nodeClass===C.ObjectType),d=this._opts.browseStrategy!=="browseAll"?"parallel":"browseAll";this.logger.info(`Browse object types: ${e.length} types in ${n.toFixed(0)}ms (strategy=${d}, transactions=${t})`);let c=performance.now(),a=new Set,p=[],o=[];for(let s of e)a.has(s.sourceNodeId)||(a.add(s.sourceNodeId),s.sourceNodeId.startsWith("ns=0;")?p.push(s):o.push(s));let r=[];for(let s=0;s<o.length;s+=$){let m=o.slice(s,s+$),y=await Promise.all(m.map(f=>this._browseTypeMembers(f.sourceNodeId).then(g=>({...f,members:g}),()=>f)));r.push(...y),o.length>$&&this.logger.info(`Enriching types: ${Math.min(s+$,o.length)}/${o.length} done`)}let l=[...p,...r],u=performance.now()-c;return this.logger.info(`Enriched ${o.length} types with members in ${u.toFixed(0)}ms`),l}async _browseTypeMembers(e){let{refs:t}=await this._browseSingleNode(e),n=[],d=[];for(let r of t)r.nodeClass!==C.Variable&&r.nodeClass!==C.Object&&r.nodeClass!==C.Method||r.nodeClass===C.Variable&&d.push(r);let c=new Map,a=new Map;if(d.length>0){let r=[];for(let l of d)r.push({nodeId:l.nodeId,attributeId:I.DataType}),r.push({nodeId:l.nodeId,attributeId:I.ValueRank});try{let l=await this.session.read(r),u=Array.isArray(l)?l:[l];for(let s=0;s<d.length;s++){let m=d[s].nodeId.toString(),y=u[s*2]?.value?.value,f=u[s*2+1]?.value?.value;c.set(m,y?y.toString():null),a.set(m,typeof f=="number"?f:null)}}catch(l){this.logger.debug(`Failed to resolve DataTypes/ValueRanks during browse: ${l.message}`)}}let p=new Map,o=t.filter(r=>r.nodeClass===C.Variable||r.nodeClass===C.Object||r.nodeClass===C.Method);if(o.length>0){let r=o.map(l=>({nodeId:l.nodeId,browseDirection:ee.Forward,includeSubtypes:!0,referenceTypeId:T("HasModellingRule"),resultMask:se,requestedMaxReferencesPerNode:0}));try{let l=await te(this.session,r);for(let u=0;u<o.length;u++){let s=o[u].nodeId.toString(),m=l[u]?.references?.[0];p.set(s,m?.displayName?.text??null)}}catch(l){this.logger.debug(`Failed to resolve ModellingRules during browse: ${l.message}`)}}for(let r of o){let l=r.nodeId.toString();n.push({browseName:r.browseName?.name??r.browseName?.toString()??"",displayName:r.displayName?.text??"",nodeClass:r.nodeClass===C.Variable?"Variable":r.nodeClass===C.Object?"Object":"Method",dataType:c.get(l)??null,valueRank:a.get(l)??null,modellingRule:p.get(l)??null})}return n}async getNamespaces(){return this._namespaceArray.map((e,t)=>({uri:e,displayName:e.split("/").filter(Boolean).pop()??`ns${t}`}))}async readValue(e){this._serviceCounters.read++;let t=await this.session.read({nodeId:N(e),attributeId:I.Value});return q(t)}async readValues(e){if(this._serviceCounters.read++,e.length===0)return[];let t=e.map(c=>({nodeId:N(c),attributeId:I.Value})),n=await this.session.read(t);return(Array.isArray(n)?n:[n]).map(q)}async writeValue(e,t){this._serviceCounters.write++;let n=N(e),d=t;t&&typeof t=="object"&&"value"in t&&(d=t.value);let c=await this.session.read([{nodeId:n,attributeId:I.DataType},{nodeId:n,attributeId:I.Value}]),a=Array.isArray(c)?c:[c],p=a[0]?.value?.value,o=a[1],r=P.Null;if(p){let y=typeof p=="object"?p.value??0:Number(p);y>=1&&y<=25?r=y:o?.value?.value!==void 0&&(r=o.value.dataType??P.Null)}let l=d;try{l=E(d,r)}catch(y){let f=`Write coercion failed for ${e}: targetDataType=${P[r]}(${r}) jsType=${typeof d} jsValue=${JSON.stringify(d)} error=${y}`;throw this.logger.warn(f),new Error(f)}let u={nodeId:n,attributeId:I.Value,value:{value:new ne({dataType:r!==P.Null?r:V(l),value:l})}};this.logger.debug(`writeValue: nodeId=${e} targetDataType=${P[r]} jsType=${typeof t} \u2192 coerced=${JSON.stringify(l)}`);let s=await this.session.write(u),m=Array.isArray(s)?s[0]:s;if(m&&!m.equals(we.Good)){let y=`Write failed: ${m.toString()} | nodeId=${e} targetDataType=${P[r]}(${r}) inputValue=${JSON.stringify(t)} (${typeof t}) coercedValue=${JSON.stringify(l)} (${typeof l})`;throw this.logger.warn(y),new Error(y)}}async readHistory(e,t,n){this._serviceCounters.readHistory++;let c=await this.session.readHistoryValue(N(e),t,n);return(c.historyData?c.historyData?.dataValues??[]:[]).map(ge)}async callMethod(e,t,n){this._serviceCounters.call++;let d={objectId:N(e),methodId:N(t),inputArguments:n.map(a=>new ne({dataType:P.Null,value:a}))};return(await this.session.call(d)).outputArguments??null}async createMonitoredSubscription(e){this._serviceCounters.subscribe++;let t=await this.session.createSubscription2({requestedPublishingInterval:e.publishingIntervalMs,requestedLifetimeCount:Ce,requestedMaxKeepAliveCount:Me,maxNotificationsPerPublish:0,publishingEnabled:!0,priority:Ne}),n=null,d=new Map,c=`opcua-sub-${Date.now()}`,a=this.logger;return a.info(`OPC UA CreateSubscription id=${c} publishingInterval=${e.publishingIntervalMs}ms`),{id:c,async addItems(o){let r=o.filter(u=>!d.has(u));if(r.length===0)return;let l;if(typeof t.monitorItems=="function"){let u=r.map(m=>({nodeId:N(m),attributeId:I.Value}));l=(await t.monitorItems(u,{samplingInterval:e.samplingIntervalMs,discardOldest:!0,queueSize:oe},ie.Both)).monitoredItems}else l=await Promise.all(r.map(u=>t.monitor({nodeId:N(u),attributeId:I.Value},{samplingInterval:e.samplingIntervalMs,discardOldest:!0,queueSize:oe},ie.Both)));for(let u=0;u<r.length;u++){let s=r[u],m=l[u];m.on("changed",y=>{if(n){let f=q(y);n(s,f.value,f.quality,f.timestamp)}}),d.set(s,m)}a.info(`OPC UA CreateMonitoredItems: ${r.length} items added (total=${d.size})`)},async removeItems(o){let r=o.map(l=>({id:l,item:d.get(l)})).filter(l=>l.item!=null);await Promise.all(r.map(({id:l,item:u})=>(d.delete(l),u.terminate().catch(()=>{}))))},onDataChange(o){n=o},async close(){try{await t.terminate()}catch(o){a.debug(`Failed to terminate subscription: ${o.message}`)}d.clear()}}}};export{H as OpcUaClient,B as OpcUaDataSourceAdapter,E as coerceToDataType,V as inferDataType,tt as qualifiedNameToNsu,D as selectBestEndpoint,z as wrapSessionIfOptimized};
|
|
1
|
+
import{qualifiedNameToNsu as tt}from"@node-i3x/core";import{DataType as h}from"node-opcua";function E(i,e){switch(e){case h.Boolean:return typeof i=="boolean"?i:typeof i=="number"?i!==0:typeof i=="string"?i.toLowerCase()==="true"||i==="1":!!i;case h.SByte:case h.Byte:case h.Int16:case h.UInt16:case h.Int32:case h.UInt32:return Math.trunc(Number(i));case h.Int64:case h.UInt64:return Array.isArray(i)?i:[0,Math.trunc(Number(i))];case h.Float:case h.Double:return Number(i);case h.String:return String(i);case h.DateTime:return i instanceof Date?i:typeof i=="string"||typeof i=="number"?new Date(i):i;case h.ByteString:return Buffer.isBuffer(i)?i:typeof i=="string"?Buffer.from(i,"base64"):i;default:return i}}function V(i){return typeof i=="number"?h.Double:typeof i=="boolean"?h.Boolean:typeof i=="string"?h.String:i instanceof Date?h.DateTime:h.Null}import{MessageSecurityMode as S,OPCUAClient as ae}from"node-opcua";import{coerceSecurityPolicy as v,SecurityPolicy as w}from"node-opcua-secure-channel";var Y=[w.Aes256_Sha256_RsaPss,w.Basic256Sha256,w.Aes128_Sha256_RsaOaep,w.Basic256,w.Basic256Rsa15,w.Basic128Rsa15,w.None],J={[S.SignAndEncrypt]:0,[S.Sign]:1,[S.None]:2},Q={None:S.None,Sign:S.Sign,SignAndEncrypt:S.SignAndEncrypt},ce={None:w.None,Basic128Rsa15:w.Basic128Rsa15,Basic256:w.Basic256,Basic256Rsa15:w.Basic256Rsa15,Basic256Sha256:w.Basic256Sha256,Aes128_Sha256_RsaOaep:w.Aes128_Sha256_RsaOaep,Aes256_Sha256_RsaPss:w.Aes256_Sha256_RsaPss};function k(i){let e=Q[i];if(e===void 0)throw new Error(`Invalid OPC UA security mode '${i}'. Must be one of: ${Object.keys(Q).join(", ")}.`);return e}function j(i){if(i.startsWith("http://"))return i;let e=ce[i];return e||v(i)}function D(i,e,t){if(i.length===0){if(e!==void 0||t!==void 0)throw new Error("Server returned no endpoints. Cannot discover a matching security configuration.");return{securityMode:S.None,securityPolicy:v("None")}}let s=[...i];if(e!==void 0){let c=s.filter(a=>a.securityMode===e);if(c.length===0)throw new Error(`Server has no endpoints with securityMode=${S[e]}. Available modes: ${[...new Set(s.map(a=>S[a.securityMode]))].join(", ")}.`);s=c}if(t!==void 0){let c=s.filter(a=>a.securityPolicyUri===t);if(c.length===0)throw new Error(`Server has no endpoints with securityPolicy=${t}. Available policies: ${[...new Set(s.map(a=>a.securityPolicyUri))].join(", ")}.`);s=c}if(e===void 0&&t===void 0){let c=s.filter(a=>a.securityMode!==S.None);c.length>0&&(s=c)}s.sort((c,a)=>{let p=(a.securityLevel??0)-(c.securityLevel??0);if(p!==0)return p;let o=Y.indexOf(c.securityPolicyUri??""),r=Y.indexOf(a.securityPolicyUri??""),l=(o===-1?999:o)-(r===-1?999:r);return l!==0?l:(J[c.securityMode]??9)-(J[a.securityMode]??9)});let u=s[0];return{securityMode:u.securityMode,securityPolicy:v(u.securityPolicyUri)}}async function U(i,e,t,s){let u=t!==void 0||s!==void 0,c=ae.create({connectionStrategy:{maxRetry:3,initialDelay:500,maxDelay:5e3},endpointMustExist:!1});try{e.info(`[discovery] Connecting to ${i} (mode=None/policy=None for GetEndpoints)...`),await c.connect(i);let a=await c.getEndpoints();await c.disconnect(),e.info(`[discovery] Server returned ${a.length} endpoint(s):`);for(let o of a){let r=S[o.securityMode]??`Unknown(${o.securityMode})`;e.info(` \u2022 mode=${r}, policy=${o.securityPolicyUri}, securityLevel=${o.securityLevel??0}`)}(t!==void 0||s!==void 0)&&e.info(`[discovery] Applying filters: mode=${t!==void 0?S[t]:"any"}, policy=${s??"any"}`);let p=D(a,t,s);return e.info(`[discovery] Selected best endpoint: mode=${S[p.securityMode]} (enum=${p.securityMode}), policy=${p.securityPolicy}`),p}catch(a){if(u){try{await c.disconnect()}catch(p){e.debug(`discoveryClient disconnect failed: ${p.message}`)}throw a}e.warn(`Endpoint discovery failed (${a}); falling back to None/None`);try{await c.disconnect()}catch(p){e.debug(`discoveryClient disconnect failed: ${p.message}`)}return{securityMode:S.None,securityPolicy:v("None")}}}var B=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,s){return this.client.readHistory(e,t,s)}async createMonitoredSubscription(e){return this.client.createMonitoredSubscription(e)}};import me from"os";import{dataValueToHistorical as ge,dataValueToSource as W,toNsuNodeId as he}from"@node-i3x/core";import{AttributeIds as I,BrowseDirection as ee,browseAll as te,coerceNodeId as N,DataType as P,MessageSecurityMode as O,NodeClass as C,OPCUAClient as be,resolveNodeId as T,StatusCodes as we,TimestampsToReturn as ie,UserTokenType as re,Variant as ne}from"node-opcua";import{coerceSecurityPolicy as Se}from"node-opcua-secure-channel";import le from"crypto";import L from"fs";import de from"os";import F from"path";import{OPCUACertificateManager as ue}from"node-opcua-certificate-manager";async function G(i,e){let t=le.createHash("sha256").update(i.endpointUrl).digest("hex").slice(0,12),s=i.pkiFolder??F.join(process.cwd(),"pki",`i3x-${t}`),u=new ue({rootFolder:s,automaticallyAcceptUnknownCertificate:!0,name:"PKI",keySize:2048});return await u.initialize(),await pe(u,i,s,t,e),u}async function pe(i,e,t,s,u){let c=F.join(t,"PKI","own","certs","client_certificate.pem");if(!L.existsSync(c)){let o=F.join(t,"own","certs","client_certificate.pem");L.existsSync(o)&&(c=o)}if(L.existsSync(c)){u.debug(`Client certificate exists: ${c}`);return}let a=de.hostname(),p=e.applicationUri??`urn:${a}:${e.applicationName}`;await i.createSelfSignedCertificate({applicationUri:p,subject:e.certificateSubject??`/CN=${e.applicationName}-${s}/O=Sterfive/L=Orleans/C=FR`,dns:[a],startDate:new Date,validity:365*10}),u.info(`Created self-signed client certificate: ${c}`)}import{NODE_CLASS_NAMES as ye,qualifiedNameToNsu as fe}from"@node-i3x/core";import{NodeClass as Z}from"node-opcua";function X(i,e,t){let s=i.nodeClass??Z.Unspecified,u=fe(i.browseName,t),c="",a=u.match(/^nsu=(.+):([^:]+)$/);if(a)c=a[1];else{let p=i.browseName?.namespaceIndex??0;c=t[p]??""}return{sourceNodeId:i.nodeId.toString(),parentSourceNodeId:e,browseName:i.browseName?.toString()??"",nsuQualifiedName:u,displayName:i.displayName?.text??i.browseName?.toString()??"",nodeClass:ye[s]??"Unknown",typeDefinition:i.typeDefinition?i.typeDefinition.toString():null,namespaceUri:c,eventNotifier:i.nodeClass===Z.Object?(i.eventNotifier??0)!==0:!1}}async function z(i,e){try{let{ClientSessionOptimized:t}=await import("@sterfive/opcua-optimized-client"),s=new t(i);return e.info("\u2713 @sterfive/opcua-optimized-client activated \u2014 auto-batching, limit-splitting, and coalescing enabled"),s}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."),i}}var se=63,Ie="i=2255",Ce=100,Me=10,oe=10,Ne=10,$=200;function Pe(i){if(!i||typeof i!="object")throw new Error("OPC UA client options must be an object");if(typeof i.endpointUrl!="string"||!i.endpointUrl.trim())throw new Error("OPC UA endpointUrl must be a non-empty string");if(!i.endpointUrl.startsWith("opc.tcp://"))throw new Error('OPC UA endpointUrl must start with "opc.tcp://"');if(i.securityMode!==void 0&&!["None","Sign","SignAndEncrypt","Auto"].includes(i.securityMode))throw new Error(`OPC UA securityMode must be "None", "Sign", "SignAndEncrypt", or "Auto", got "${i.securityMode}"`);if(i.optimizedClient!==void 0&&!["auto","disabled"].includes(i.optimizedClient))throw new Error(`OPC UA optimizedClient must be "auto" or "disabled", got "${i.optimizedClient}"`);if(i.browseStrategy!==void 0&&!["parallel","browseAll"].includes(i.browseStrategy))throw new Error(`OPC UA browseStrategy must be "parallel" or "browseAll", got "${i.browseStrategy}"`);if(i.browseFilter!==void 0){let t=i.browseFilter;if(t!=="application-only"&&t!=="all"&&!Array.isArray(t))throw new Error('OPC UA browseFilter must be "application-only", "all", or an array of string node IDs/browse names');if(Array.isArray(t)&&t.some(s=>typeof s!="string"))throw new Error("OPC UA browseFilter array must contain only strings")}if(i.browseMaxDepth!==void 0&&(typeof i.browseMaxDepth!="number"||!Number.isInteger(i.browseMaxDepth)))throw new Error("OPC UA browseMaxDepth must be an integer");let e=["username","password","securityPolicy","applicationName","applicationUri","pkiFolder","certificateSubject"];for(let t of e)if(i[t]!==void 0&&typeof i[t]!="string")throw new Error(`OPC UA ${t} must be a string`)}var q=class{constructor(e,t){this.logger=t;Pe(e),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,browseMaxDepth:e.browseMaxDepth??25}}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 G(this._opts,this.logger);this._certificateManager=e;let t,s;if(this.logger.info(`Security configuration: mode='${this._opts.securityMode}', policy='${this._opts.securityPolicy}'`),this._opts.securityMode==="None")t=O.None,s=Se("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 d=await U(this._opts.endpointUrl,this.logger);t=d.securityMode,s=d.securityPolicy}else if(this._opts.securityMode==="Auto"){let d=j(this._opts.securityPolicy);this.logger.info(`Auto mode + explicit policy: discovering best mode for ${d}...`);let n=await U(this._opts.endpointUrl,this.logger,void 0,d);t=n.securityMode,s=n.securityPolicy}else if(this._opts.securityPolicy==="Auto"){let d=k(this._opts.securityMode);this.logger.info(`Explicit mode=${O[d]} (${d}) + auto policy: discovering best policy...`);let n=await U(this._opts.endpointUrl,this.logger,d);t=n.securityMode,s=n.securityPolicy}else t=k(this._opts.securityMode),s=j(this._opts.securityPolicy),this.logger.info(`Fully explicit: mode=${O[t]} (${t}), policy=${s}`);this.logger.info(`Resolved security: MessageSecurityMode=${O[t]} (enum=${t}), SecurityPolicy=${s}`);let u=me.hostname(),c=this._opts.applicationUri??`urn:${u}:${this._opts.applicationName}`,a={applicationName:this._opts.applicationName,applicationUri:c,securityMode:t,securityPolicy:s,clientCertificateManager:e,connectionStrategy:{initialDelay:1e3,maxDelay:5e3,maxRetry:2},keepSessionAlive:!0,endpointMustExist:!1};this.logger.info(`OPCUAClient.create parameters: ${JSON.stringify(a,(d,n)=>d==="clientCertificateManager"?n?"OPCUACertificateManager":"undefined":n,2)}`),this._client=be.create(a),this._client.on("send_request",d=>{let n=d?.schema?.name||d?.constructor?.name||"";n.startsWith("Read")?this._serviceCounters.read++:n.startsWith("Browse")?this._serviceCounters.browse++:n.startsWith("Write")?this._serviceCounters.write++:n.startsWith("Call")?this._serviceCounters.call++:n.startsWith("Translate")?this._serviceCounters.translate++:n.startsWith("CreateSubscription")||n.startsWith("CreateMonitored")?this._serviceCounters.subscribe++:n.startsWith("HistoryRead")&&this._serviceCounters.readHistory++}),this._client.on("backoff",(d,n)=>{this.logger.warn(`Connection backoff #${d}, retrying in ${n}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=${s})...`),await this._client.connect(this._opts.endpointUrl);let p=this._opts.username&&this._opts.password?{type:re.UserName,userName:this._opts.username,password:this._opts.password}:void 0,o={userIdentity:p?{type:re[p.type]??p.type,userName:p.userName,password:"***"}:void 0};this.logger.info(`OPCUAClient.createSession parameters: ${JSON.stringify(o,null,2)}`);let r=await this._client.createSession(p);this._opts.optimizedClient!=="disabled"&&(r=await z(r,this.logger)),this._session=r;let l=await r.read({nodeId:N(Ie),attributeId:I.Value});this._namespaceArray=l.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=D;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(s=>({nodeId:N(s),browseDirection:ee.Forward,includeSubtypes:!0,referenceTypeId:t,resultMask:se,requestedMaxReferencesPerNode:0}))}async _browseSingleNode(e,t){let s=this._makeBrowseDescriptions([e],t)[0],u=await this.session.browse(s),c=[...u.references??[]],a=1,p=u.continuationPoint;for(;p;){let o=await this.session.browseNext(p,!1);a++,c.push(...o.references??[]),p=o.continuationPoint}return{refs:c,txCount:a}}async _bfsBrowse(e,t,s,u){let c=performance.now(),a=[],p=new Set,o=0,r=[{nodeId:e,parentId:null,depth:0}],l=this._opts.browseStrategy!=="browseAll",d=new Set;for(;r.length>0;){let n=r.filter(g=>!p.has(g.nodeId));for(let g of n)p.add(g.nodeId);if(n.length===0)break;let m;if(l)m=await Promise.all(n.map(g=>this._browseSingleNode(g.nodeId,u)));else{let g=this._makeBrowseDescriptions(n.map(M=>M.nodeId),u),b=await te(this.session,g);o+=1,m=b.map(M=>({refs:M.references??[],txCount:0}))}let y=[],f=new Set;for(let g=0;g<n.length;g++){let b=n[g],{refs:M,txCount:A}=m[g];o+=A;for(let R of M){let _=R.nodeId.toString();if(p.has(_))continue;if(!d.has(_)){d.add(_);let K=t(R,b.nodeId);K!==null&&a.push(K)}let x=this._opts.browseMaxDepth,H=b.depth+1;(x===void 0||x<0||H<=x)&&(!s||s(R,b.nodeId))&&(f.has(_)||(f.add(_),y.push({nodeId:_,parentId:b.nodeId,depth:H})))}}r=y}return{items:a,txCount:o,ms:performance.now()-c}}async browseTree(){let e=T("ObjectsFolder").toString(),t=this._opts.browseFilter??"application-only",{items:s,txCount:u,ms:c}=await this._bfsBrowse(e,(o,r)=>{let l=r===e?null:r;if(r===e){if(t==="application-only"&&(o.browseName?.namespaceIndex??0)===0)return null;if(Array.isArray(t)){let d=o.nodeId.toString(),n=o.browseName?.name??"";if(!t.some(y=>y===d||y===n))return null}}return X(o,l,this._namespaceArray)},(o,r)=>{if(o.nodeClass!==C.Object&&o.nodeClass!==C.Variable)return!1;if(r===e){if(t==="all")return!0;if(t==="application-only")return(o.browseName?.namespaceIndex??0)!==0;let l=o.nodeId.toString(),d=o.browseName?.name??"";return t.some(n=>n===l||n===d)}return!0}),a=s.filter(o=>o.nodeClass==="Variable");if(a.length>0){let o=[];for(let r of a)o.push({nodeId:r.sourceNodeId,attributeId:I.DataType}),o.push({nodeId:r.sourceNodeId,attributeId:I.ValueRank});try{let r=await this.session.read(o),l=Array.isArray(r)?r:[r],d=new Set;for(let y=0;y<a.length;y++){let f=l[y*2]?.value?.value;f&&d.add(f.toString())}let n=Array.from(d),m=new Map;if(n.length>0){let y=n.map(b=>({nodeId:b,attributeId:I.BrowseName})),f=await this.session.read(y),g=Array.isArray(f)?f:[f];for(let b=0;b<n.length;b++){let M=g[b]?.value?.value;M&&typeof M.name=="string"&&m.set(n[b],M.name)}}for(let y=0;y<a.length;y++){let f=a[y],g=l[y*2]?.value?.value,b=l[y*2+1]?.value?.value;if(g){let M=g.toString();f.dataType=he(M,this._namespaceArray);let A=m.get(M);A&&(f.dataTypeName=A)}typeof b=="number"&&(f.valueRank=b)}}catch(r){this.logger.warn(`Failed to batch-read Variable DataTypes/ValueRanks: ${r}`)}}let p=this._opts.browseStrategy!=="browseAll"?"parallel":"browseAll";return this.logger.info(`Browse tree: ${s.length} nodes in ${c.toFixed(0)}ms (strategy=${p}, transactions=${u})`),s}async getObjectTypes(){this._serviceCounters.browse++;let{items:e,txCount:t,ms:s}=await this._bfsBrowse(T("ObjectTypesFolder").toString(),(n,m)=>{if(n.nodeClass!==C.ObjectType)return null;let y=n.browseName?.namespaceIndex??0,f=this._namespaceArray[y]??"";return{sourceNodeId:n.nodeId.toString(),parentSourceNodeId:m,browseName:n.browseName?.toString()??"",displayName:n.displayName?.text??"",namespaceUri:f}},n=>n.nodeClass===C.ObjectType),u=this._opts.browseStrategy!=="browseAll"?"parallel":"browseAll";this.logger.info(`Browse object types: ${e.length} types in ${s.toFixed(0)}ms (strategy=${u}, transactions=${t})`);let c=performance.now(),a=new Set,p=[],o=[];for(let n of e)a.has(n.sourceNodeId)||(a.add(n.sourceNodeId),n.sourceNodeId.startsWith("ns=0;")?p.push(n):o.push(n));let r=[];for(let n=0;n<o.length;n+=$){let m=o.slice(n,n+$),y=await Promise.all(m.map(f=>this._browseTypeMembers(f.sourceNodeId).then(g=>({...f,members:g}),()=>f)));r.push(...y),o.length>$&&this.logger.info(`Enriching types: ${Math.min(n+$,o.length)}/${o.length} done`)}let l=[...p,...r],d=performance.now()-c;return this.logger.info(`Enriched ${o.length} types with members in ${d.toFixed(0)}ms`),l}async _browseTypeMembers(e){let{refs:t}=await this._browseSingleNode(e),s=[],u=[];for(let r of t)r.nodeClass!==C.Variable&&r.nodeClass!==C.Object&&r.nodeClass!==C.Method||r.nodeClass===C.Variable&&u.push(r);let c=new Map,a=new Map;if(u.length>0){let r=[];for(let l of u)r.push({nodeId:l.nodeId,attributeId:I.DataType}),r.push({nodeId:l.nodeId,attributeId:I.ValueRank});try{let l=await this.session.read(r),d=Array.isArray(l)?l:[l];for(let n=0;n<u.length;n++){let m=u[n].nodeId.toString(),y=d[n*2]?.value?.value,f=d[n*2+1]?.value?.value;c.set(m,y?y.toString():null),a.set(m,typeof f=="number"?f:null)}}catch(l){this.logger.debug(`Failed to resolve DataTypes/ValueRanks during browse: ${l.message}`)}}let p=new Map,o=t.filter(r=>r.nodeClass===C.Variable||r.nodeClass===C.Object||r.nodeClass===C.Method);if(o.length>0){let r=o.map(l=>({nodeId:l.nodeId,browseDirection:ee.Forward,includeSubtypes:!0,referenceTypeId:T("HasModellingRule"),resultMask:se,requestedMaxReferencesPerNode:0}));try{let l=await te(this.session,r);for(let d=0;d<o.length;d++){let n=o[d].nodeId.toString(),m=l[d]?.references?.[0];p.set(n,m?.displayName?.text??null)}}catch(l){this.logger.debug(`Failed to resolve ModellingRules during browse: ${l.message}`)}}for(let r of o){let l=r.nodeId.toString();s.push({browseName:r.browseName?.name??r.browseName?.toString()??"",displayName:r.displayName?.text??"",nodeClass:r.nodeClass===C.Variable?"Variable":r.nodeClass===C.Object?"Object":"Method",dataType:c.get(l)??null,valueRank:a.get(l)??null,modellingRule:p.get(l)??null})}return s}async getNamespaces(){return this._namespaceArray.map((e,t)=>({uri:e,displayName:e.split("/").filter(Boolean).pop()??`ns${t}`}))}async readValue(e){let t=await this.session.read({nodeId:N(e),attributeId:I.Value});return W(t)}async readValues(e){if(e.length===0)return[];let t=e.map(c=>({nodeId:N(c),attributeId:I.Value})),s=await this.session.read(t);return(Array.isArray(s)?s:[s]).map(W)}async writeValue(e,t){let s=N(e),u=t;t&&typeof t=="object"&&"value"in t&&(u=t.value);let c=await this.session.read([{nodeId:s,attributeId:I.DataType},{nodeId:s,attributeId:I.Value}]),a=Array.isArray(c)?c:[c],p=a[0]?.value?.value,o=a[1],r=P.Null;if(p){let y=typeof p=="object"?p.value??0:Number(p);y>=1&&y<=25?r=y:o?.value?.value!==void 0&&(r=o.value.dataType??P.Null)}let l=u;try{l=E(u,r)}catch(y){let f=`Write coercion failed for ${e}: targetDataType=${P[r]}(${r}) jsType=${typeof u} jsValue=${JSON.stringify(u)} error=${y}`;throw this.logger.warn(f),new Error(f)}let d={nodeId:s,attributeId:I.Value,value:{value:new ne({dataType:r!==P.Null?r:V(l),value:l})}};this.logger.debug(`writeValue: nodeId=${e} targetDataType=${P[r]} jsType=${typeof t} \u2192 coerced=${JSON.stringify(l)}`);let n=await this.session.write(d),m=Array.isArray(n)?n[0]:n;if(m&&!m.equals(we.Good)){let y=`Write failed: ${m.toString()} | nodeId=${e} targetDataType=${P[r]}(${r}) inputValue=${JSON.stringify(t)} (${typeof t}) coercedValue=${JSON.stringify(l)} (${typeof l})`;throw this.logger.warn(y),new Error(y)}}async readHistory(e,t,s){this._serviceCounters.readHistory++;let c=await this.session.readHistoryValue(N(e),t,s);return(c.historyData?c.historyData?.dataValues??[]:[]).map(ge)}async callMethod(e,t,s){let u={objectId:N(e),methodId:N(t),inputArguments:s.map(a=>new ne({dataType:P.Null,value:a}))};return(await this.session.call(u)).outputArguments??null}async createMonitoredSubscription(e){let t=await this.session.createSubscription2({requestedPublishingInterval:e.publishingIntervalMs,requestedLifetimeCount:Ce,requestedMaxKeepAliveCount:Me,maxNotificationsPerPublish:0,publishingEnabled:!0,priority:Ne}),s=null,u=new Map,c=`opcua-sub-${Date.now()}`,a=this.logger;return a.info(`OPC UA CreateSubscription id=${c} publishingInterval=${e.publishingIntervalMs}ms`),{id:c,async addItems(o){let r=o.filter(d=>!u.has(d));if(r.length===0)return;let l;if(typeof t.monitorItems=="function"){let d=r.map(m=>({nodeId:N(m),attributeId:I.Value}));l=(await t.monitorItems(d,{samplingInterval:e.samplingIntervalMs,discardOldest:!0,queueSize:oe},ie.Both)).monitoredItems}else l=await Promise.all(r.map(d=>t.monitor({nodeId:N(d),attributeId:I.Value},{samplingInterval:e.samplingIntervalMs,discardOldest:!0,queueSize:oe},ie.Both)));for(let d=0;d<r.length;d++){let n=r[d],m=l[d];m.on("changed",y=>{if(s){let f=W(y);s(n,f.value,f.quality,f.timestamp)}}),u.set(n,m)}a.info(`OPC UA CreateMonitoredItems: ${r.length} items added (total=${u.size})`)},async removeItems(o){let r=o.map(l=>({id:l,item:u.get(l)})).filter(l=>l.item!=null);await Promise.all(r.map(({id:l,item:d})=>(u.delete(l),d.terminate().catch(()=>{}))))},onDataChange(o){s=o},async close(){try{await t.terminate()}catch(o){a.debug(`Failed to terminate subscription: ${o.message}`)}u.clear()}}}};export{q as OpcUaClient,B as OpcUaDataSourceAdapter,E as coerceToDataType,V as inferDataType,tt as qualifiedNameToNsu,D as selectBestEndpoint,z 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","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","a","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","toNsuNodeId","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","fallbackFile","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","validateOpcUaClientOptions","opts","filter","item","stringFields","field","OpcUaClient","logger","certificateManager","createCertificateManager","securityMode","securityPolicy","MessageSecurityMode","coerceSecurityPolicy","best","discoverBestEndpoint","policyUri","coercePolicyToUri","explicitMode","coerceMessageSecurityMode","hostname","os","applicationUri","clientOptions","key","value","OPCUAClient","count","delay","userIdentity","UserTokenType","sessionParams","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","waveResults","w","descriptions","browseResults","browseAll","r","nextFrontier","queued","i","ref","childId","m","maxDepth","nextDepth","objectsFolderId","items","ms","parentNodeId","effectiveParent","name","refToSourceNode","NodeClass","variables","readItems","v","dvs","dvsArr","uniqueDtIds","rawDt","uniqueDtIdsArr","dtBrowseNames","readBrowseNames","id","bnResults","bnResultsArr","bn","rawVr","rawDtStr","toNsuNodeId","strategy","nsIdx","nsUri","enrichStart","stdTypes","nonStdTypes","type","memberResults","chunk","chunkResults","members","enriched","enrichMs","typeNodeId","variableRefs","dataTypeMap","valueRankMap","arr","dtValue","vrValue","modellingRuleMap","memberRefs","mrDescriptions","mrResults","mrRef","uri","idx","dv","dataValueToSource","nid","rawValue","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","itemsToMonitor","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","a","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","toNsuNodeId","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","fallbackFile","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","validateOpcUaClientOptions","opts","filter","item","stringFields","field","OpcUaClient","logger","certificateManager","createCertificateManager","securityMode","securityPolicy","MessageSecurityMode","coerceSecurityPolicy","best","discoverBestEndpoint","policyUri","coercePolicyToUri","explicitMode","coerceMessageSecurityMode","hostname","os","applicationUri","clientOptions","key","value","OPCUAClient","req","name","count","delay","userIdentity","UserTokenType","sessionParams","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","waveResults","w","descriptions","browseResults","browseAll","r","nextFrontier","queued","i","ref","childId","m","maxDepth","nextDepth","objectsFolderId","items","ms","parentNodeId","effectiveParent","refToSourceNode","NodeClass","variables","readItems","v","dvs","dvsArr","uniqueDtIds","rawDt","uniqueDtIdsArr","dtBrowseNames","readBrowseNames","id","bnResults","bnResultsArr","bn","rawVr","rawDtStr","toNsuNodeId","strategy","nsIdx","nsUri","enrichStart","stdTypes","nonStdTypes","type","memberResults","chunk","chunkResults","members","enriched","enrichMs","typeNodeId","variableRefs","dataTypeMap","valueRankMap","arr","dtValue","vrValue","modellingRuleMap","memberRefs","mrDescriptions","mrResults","mrRef","uri","idx","dv","dataValueToSource","nid","rawValue","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","itemsToMonitor","TimestampsToReturn","toRemove","e","cb"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@node-i3x/opcua-connector",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.11",
|
|
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.9.
|
|
61
|
+
"@node-i3x/core": "0.9.11"
|
|
62
62
|
},
|
|
63
63
|
"peerDependencies": {
|
|
64
64
|
"node-opcua": ">=2.175.1",
|