@node-i3x/opcua-connector 0.5.4 → 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.d.ts +75 -22
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +6 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,76 @@
|
|
|
1
1
|
import { BrowseFilter, ILogger, SourceNodeInfo, ObjectTypeInfo, NamespaceInfo, SourceDataValue, SourceHistoricalValue, MonitoredSubscriptionOptions, IMonitoredSubscription, IDataSourcePort } from '@node-i3x/core';
|
|
2
|
-
|
|
2
|
+
export { qualifiedNameToNsu } from '@node-i3x/core';
|
|
3
|
+
import { DataType, MessageSecurityMode, ClientSession } from 'node-opcua';
|
|
4
|
+
import { SecurityPolicy } from 'node-opcua-secure-channel';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Coerce a JSON value to the expected OPC UA DataType.
|
|
8
|
+
* Handles the common built-in types (1..25).
|
|
9
|
+
*/
|
|
10
|
+
declare function coerceToDataType(value: unknown, dt: DataType): unknown;
|
|
11
|
+
/** Fallback: infer DataType from JS value when server type is unknown. */
|
|
12
|
+
declare function inferDataType(value: unknown): DataType;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Minimal endpoint shape for `selectBestEndpoint`.
|
|
16
|
+
* Mirrors the fields of `EndpointDescription` used in ranking.
|
|
17
|
+
*/
|
|
18
|
+
interface EndpointLike {
|
|
19
|
+
securityMode: MessageSecurityMode;
|
|
20
|
+
securityPolicyUri?: string;
|
|
21
|
+
securityLevel?: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Select the best endpoint from a list of endpoint
|
|
25
|
+
* descriptions. Pure ranking logic extracted from
|
|
26
|
+
* `_discoverBestEndpoint` for unit-testing.
|
|
27
|
+
*/
|
|
28
|
+
declare function selectBestEndpoint(endpoints: EndpointLike[], modeFilter?: MessageSecurityMode, policyFilter?: string): {
|
|
29
|
+
securityMode: MessageSecurityMode;
|
|
30
|
+
securityPolicy: SecurityPolicy;
|
|
31
|
+
};
|
|
3
32
|
|
|
4
33
|
/** Configuration for the OPC UA client connection. */
|
|
5
34
|
interface OpcUaClientOptions {
|
|
6
35
|
endpointUrl: string;
|
|
7
|
-
|
|
36
|
+
/**
|
|
37
|
+
* OPC UA security mode.
|
|
38
|
+
* - `'None'` | `'Sign'` | `'SignAndEncrypt'` — explicit mode.
|
|
39
|
+
* - `'Auto'` — discover endpoints and pick the strongest
|
|
40
|
+
* SecurityPolicy + SecurityMode combination.
|
|
41
|
+
* @default 'Auto'
|
|
42
|
+
*/
|
|
43
|
+
securityMode?: 'None' | 'Sign' | 'SignAndEncrypt' | 'Auto';
|
|
44
|
+
/**
|
|
45
|
+
* OPC UA security policy (e.g. `'Basic256Sha256'`).
|
|
46
|
+
* Only used when securityMode is NOT `'Auto'`. When `'Auto'`
|
|
47
|
+
* is selected, the policy is discovered from the server.
|
|
48
|
+
* @default 'None'
|
|
49
|
+
*/
|
|
50
|
+
securityPolicy?: string;
|
|
8
51
|
applicationName?: string;
|
|
52
|
+
/**
|
|
53
|
+
* OPC UA application URI embedded in the client certificate.
|
|
54
|
+
* @default `urn:<hostname>:<applicationName>`
|
|
55
|
+
*/
|
|
56
|
+
applicationUri?: string;
|
|
57
|
+
/**
|
|
58
|
+
* Root folder for this client instance's PKI store.
|
|
59
|
+
* Each bridge instance should use a separate folder to
|
|
60
|
+
* avoid file contention when running multiple processes.
|
|
61
|
+
* @default auto-generated under `<cwd>/pki/` from endpoint URL hash
|
|
62
|
+
*/
|
|
63
|
+
pkiFolder?: string;
|
|
64
|
+
/**
|
|
65
|
+
* Custom X.500 subject for the self-signed client certificate.
|
|
66
|
+
* Use this to inject distinguishing markers (e.g. user email,
|
|
67
|
+
* portal name) into the certificate.
|
|
68
|
+
*
|
|
69
|
+
* Example: `/CN=node-i3x-abc123/O=Sterfive/OU=john@acme.com`
|
|
70
|
+
*
|
|
71
|
+
* @default `/CN=<applicationName>-<hash>/O=Sterfive/L=Orleans/C=FR`
|
|
72
|
+
*/
|
|
73
|
+
certificateSubject?: string;
|
|
9
74
|
optimizedClient?: 'auto' | 'disabled';
|
|
10
75
|
/**
|
|
11
76
|
* Browse strategy for tree discovery.
|
|
@@ -51,6 +116,7 @@ declare class OpcUaClient {
|
|
|
51
116
|
private readonly logger;
|
|
52
117
|
private _client;
|
|
53
118
|
private _session;
|
|
119
|
+
private _certificateManager;
|
|
54
120
|
private _namespaceArray;
|
|
55
121
|
private _serviceCounters;
|
|
56
122
|
private readonly _opts;
|
|
@@ -58,6 +124,12 @@ declare class OpcUaClient {
|
|
|
58
124
|
getStats(): OpcuaStats;
|
|
59
125
|
connect(): Promise<void>;
|
|
60
126
|
disconnect(): Promise<void>;
|
|
127
|
+
/**
|
|
128
|
+
* Select the best endpoint from a list of endpoint
|
|
129
|
+
* descriptions. Pure ranking logic extracted to
|
|
130
|
+
* `endpoint-discovery.ts` for unit-testing.
|
|
131
|
+
*/
|
|
132
|
+
static selectBestEndpoint: typeof selectBestEndpoint;
|
|
61
133
|
isConnected(): boolean;
|
|
62
134
|
private get session();
|
|
63
135
|
private _makeBrowseDescriptions;
|
|
@@ -87,13 +159,6 @@ declare class OpcUaClient {
|
|
|
87
159
|
readValue(nodeId: string): Promise<SourceDataValue>;
|
|
88
160
|
readValues(nodeIds: string[]): Promise<SourceDataValue[]>;
|
|
89
161
|
writeValue(nodeId: string, value: unknown): Promise<void>;
|
|
90
|
-
/**
|
|
91
|
-
* Coerce a JSON value to the expected OPC UA DataType.
|
|
92
|
-
* Handles the common built-in types (1..25).
|
|
93
|
-
*/
|
|
94
|
-
private _coerceToDataType;
|
|
95
|
-
/** Fallback: infer DataType from JS value when server type is unknown. */
|
|
96
|
-
private _inferDataType;
|
|
97
162
|
readHistory(nodeId: string, startTime: Date, endTime: Date): Promise<SourceHistoricalValue[]>;
|
|
98
163
|
callMethod(objectNodeId: string, methodNodeId: string, args: unknown[]): Promise<unknown>;
|
|
99
164
|
createMonitoredSubscription(options: MonitoredSubscriptionOptions): Promise<IMonitoredSubscription>;
|
|
@@ -123,18 +188,6 @@ declare class OpcUaDataSourceAdapter implements IDataSourcePort {
|
|
|
123
188
|
createMonitoredSubscription(options: MonitoredSubscriptionOptions): Promise<IMonitoredSubscription>;
|
|
124
189
|
}
|
|
125
190
|
|
|
126
|
-
/**
|
|
127
|
-
* Convert a QualifiedName to its namespace-URI-qualified form.
|
|
128
|
-
*
|
|
129
|
-
* Resolves the volatile namespace *index* to the stable namespace
|
|
130
|
-
* *URI* using the server's namespace array, producing a string of
|
|
131
|
-
* the form `"nsu=http://example.com/:BrowseName"`.
|
|
132
|
-
*
|
|
133
|
-
* This is the key building-block for stable element IDs that
|
|
134
|
-
* survive OPC UA server restarts (even when namespace indices shift).
|
|
135
|
-
*/
|
|
136
|
-
declare function qualifiedNameToNsu(browseName: QualifiedName | null | undefined, namespaceArray: readonly string[]): string;
|
|
137
|
-
|
|
138
191
|
/**
|
|
139
192
|
* Wrap a ClientSession with @sterfive/opcua-optimized-client
|
|
140
193
|
* if installed. Returns the optimized session, or the original
|
|
@@ -155,4 +208,4 @@ declare function qualifiedNameToNsu(browseName: QualifiedName | null | undefined
|
|
|
155
208
|
*/
|
|
156
209
|
declare function wrapSessionIfOptimized(session: ClientSession, logger: ILogger): Promise<ClientSession>;
|
|
157
210
|
|
|
158
|
-
export { OpcUaClient, type OpcUaClientOptions, OpcUaDataSourceAdapter, type OpcuaStats,
|
|
211
|
+
export { type EndpointLike, OpcUaClient, type OpcUaClientOptions, OpcUaDataSourceAdapter, type OpcuaStats, coerceToDataType, inferDataType, selectBestEndpoint, wrapSessionIfOptimized };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var M=class{constructor(e,n){this.client=e;this._logger=n}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,n){return this.client.writeValue(e,n)}async readHistory(e,n,s){return this.client.readHistory(e,n,s)}async createMonitoredSubscription(e){return this.client.createMonitoredSubscription(e)}};import{AttributeIds as S,BrowseDirection as U,browseAll as k,coerceNodeId as I,DataType as p,MessageSecurityMode as _,NodeClass as g,OPCUAClient as E,resolveNodeId as O,StatusCodes as F,TimestampsToReturn as z,UserTokenType as L,Variant as B}from"node-opcua";import{NodeClass as w,StatusCodes as R}from"node-opcua";var H={[w.Object]:"Object",[w.Variable]:"Variable",[w.Method]:"Method",[w.ObjectType]:"ObjectType",[w.VariableType]:"VariableType",[w.ReferenceType]:"ReferenceType",[w.DataType]:"DataType",[w.View]:"View"};function $(a,e){if(!a?.name)return"";let n=a.namespaceIndex??0;return`nsu=${e[n]??`ns=${n}`}:${a.name}`}function A(a,e,n){let s=a.nodeClass??w.Unspecified,i=$(a.browseName,n),l="",u=i.match(/^nsu=(.+):([^:]+)$/);if(u)l=u[1];else{let c=a.browseName?.namespaceIndex??0;l=n[c]??""}return{sourceNodeId:a.nodeId.toString(),parentSourceNodeId:e,browseName:a.browseName?.toString()??"",nsuQualifiedName:i,displayName:a.displayName?.text??a.browseName?.toString()??"",nodeClass:H[s]??"Unknown",typeDefinition:a.typeDefinition?a.typeDefinition.toString():null,namespaceUri:l,eventNotifier:a.nodeClass===w.Object?(a.eventNotifier??0)!==0:!1}}function D(a){let e=a.statusCode?.equals(R.Good)??!1;return{value:a.value?.value??null,quality:e?"Good":"Bad",timestamp:a.sourceTimestamp?.toISOString()??a.serverTimestamp?.toISOString()??new Date().toISOString(),statusCode:a.statusCode?.value}}function j(a){return{value:a.value?.value??null,quality:a.statusCode?.equals(R.Good)?"Good":"Bad",timestamp:a.sourceTimestamp?.toISOString()??a.serverTimestamp?.toISOString()??new Date().toISOString()}}async function P(a,e){try{let{ClientSessionOptimized:n}=await import("@sterfive/opcua-optimized-client"),s=new n(a);return e.info("\u2713 @sterfive/opcua-optimized-client activated \u2014 auto-batching, limit-splitting, and coalescing enabled"),s}catch{return e.info("Standard node-opcua client mode. Install @sterfive/opcua-optimized-client for automatic batching and enhanced performance."),a}}var W={None:_.None,Sign:_.Sign,SignAndEncrypt:_.SignAndEncrypt},x=class{constructor(e,n){this.logger=n;this._opts={endpointUrl:e.endpointUrl,securityMode:e.securityMode??"None",applicationName:e.applicationName??"node-i3x",optimizedClient:e.optimizedClient??"auto",browseStrategy:e.browseStrategy??"parallel",browseFilter:e.browseFilter??"application-only",username:e.username,password:e.password}}logger;_client=null;_session=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=W[this._opts.securityMode]??_.None;this._client=E.create({applicationName:this._opts.applicationName,securityMode:e,connectionStrategy:{initialDelay:1e3,maxDelay:3e4,maxRetry:1/0},keepSessionAlive:!0,endpointMustExist:!1}),this._client.on("backoff",(l,u)=>{this.logger.warn(`Connection backoff #${l}, 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}...`),await this._client.connect(this._opts.endpointUrl);let n=this._opts.username&&this._opts.password?{type:L.UserName,userName:this._opts.username,password:this._opts.password}:void 0,s=await this._client.createSession(n);this._opts.optimizedClient!=="disabled"&&(s=await P(s,this.logger)),this._session=s;let i=await s.read({nodeId:I("i=2255"),attributeId:S.Value});this._namespaceArray=i.value?.value??[],this.logger.info("OPC UA session created")}async disconnect(){if(this._session){try{await this._session.close()}catch{}this._session=null}if(this._client){try{await this._client.disconnect()}catch{}this._client=null}this.logger.info("OPC UA disconnected")}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,n=O("HierarchicalReferences")){return e.map(s=>({nodeId:I(s),browseDirection:U.Forward,includeSubtypes:!0,referenceTypeId:n,resultMask:63,requestedMaxReferencesPerNode:0}))}async _browseSingleNode(e,n){let s=this._makeBrowseDescriptions([e],n)[0],i=await this.session.browse(s),l=[...i.references??[]],u=1,c=i.continuationPoint;for(;c;){let t=await this.session.browseNext(c,!1);u++,l.push(...t.references??[]),c=t.continuationPoint}return{refs:l,txCount:u}}async _bfsBrowse(e,n,s,i){let l=performance.now(),u=[],c=new Set,t=0,r=[{nodeId:e,parentId:null}],m=this._opts.browseStrategy!=="browseAll",d=new Set;for(;r.length>0;){let y=r.filter(f=>!c.has(f.nodeId));for(let f of y)c.add(f.nodeId);if(y.length===0)break;let o;if(m)o=await Promise.all(y.map(f=>this._browseSingleNode(f.nodeId,i)));else{let f=this._makeBrowseDescriptions(y.map(T=>T.nodeId),i),C=await k(this.session,f);t+=1,o=C.map(T=>({refs:T.references??[],txCount:0}))}let b=[],h=new Set;for(let f=0;f<y.length;f++){let C=y[f],{refs:T,txCount:q}=o[f];t+=q;for(let V of T){let N=V.nodeId.toString();if(!c.has(N)){if(!d.has(N)){d.add(N);let v=n(V,C.nodeId);v!==null&&u.push(v)}(!s||s(V,C.nodeId))&&(h.has(N)||(h.add(N),b.push({nodeId:N,parentId:C.nodeId})))}}}r=b}return{items:u,txCount:t,ms:performance.now()-l}}async browseTree(){this._serviceCounters.browse++;let e=O("ObjectsFolder").toString(),n=this._opts.browseFilter??"application-only",{items:s,txCount:i,ms:l}=await this._bfsBrowse(e,(c,t)=>A(c,t===e?null:t,this._namespaceArray),(c,t)=>{if(c.nodeClass!==g.Object&&c.nodeClass!==g.Variable)return!1;if(t===e){if(n==="all")return!0;if(n==="application-only")return(c.browseName?.namespaceIndex??0)!==0;let r=c.nodeId.toString(),m=c.browseName?.name??"";return n.some(d=>d===r||d===m)}return!0}),u=this._opts.browseStrategy!=="browseAll"?"parallel":"browseAll";return this.logger.info(`Browse tree: ${s.length} nodes in ${l.toFixed(0)}ms (strategy=${u}, transactions=${i})`),s}async getObjectTypes(){this._serviceCounters.browse++;let{items:e,txCount:n,ms:s}=await this._bfsBrowse(O("ObjectTypesFolder").toString(),(o,b)=>{if(o.nodeClass!==g.ObjectType)return null;let h=o.browseName?.namespaceIndex??0,f=this._namespaceArray[h]??"";return{sourceNodeId:o.nodeId.toString(),parentSourceNodeId:b,browseName:o.browseName?.toString()??"",displayName:o.displayName?.text??"",namespaceUri:f}},o=>o.nodeClass===g.ObjectType),i=this._opts.browseStrategy!=="browseAll"?"parallel":"browseAll";this.logger.info(`Browse object types: ${e.length} types in ${s.toFixed(0)}ms (strategy=${i}, transactions=${n})`);let l=performance.now(),u=new Set,c=[],t=[];for(let o of e)u.has(o.sourceNodeId)||(u.add(o.sourceNodeId),o.sourceNodeId.startsWith("ns=0;")?c.push(o):t.push(o));let r=200,m=[];for(let o=0;o<t.length;o+=r){let b=t.slice(o,o+r),h=await Promise.all(b.map(f=>this._browseTypeMembers(f.sourceNodeId).then(C=>({...f,members:C}),()=>f)));m.push(...h),t.length>r&&this.logger.info(`Enriching types: ${Math.min(o+r,t.length)}/${t.length} done`)}let d=[...c,...m],y=performance.now()-l;return this.logger.info(`Enriched ${t.length} types with members in ${y.toFixed(0)}ms`),d}async _browseTypeMembers(e){let{refs:n}=await this._browseSingleNode(e),s=[],i=[];for(let t of n)t.nodeClass!==g.Variable&&t.nodeClass!==g.Object&&t.nodeClass!==g.Method||t.nodeClass===g.Variable&&i.push(t);let l=new Map;if(i.length>0){let t=i.map(r=>({nodeId:r.nodeId,attributeId:S.DataType}));try{let r=await this.session.read(t),m=Array.isArray(r)?r:[r];for(let d=0;d<i.length;d++){let y=i[d].nodeId.toString(),o=m[d]?.value?.value;l.set(y,o?o.toString():null)}}catch{}}let u=new Map,c=n.filter(t=>t.nodeClass===g.Variable||t.nodeClass===g.Object||t.nodeClass===g.Method);if(c.length>0){let t=c.map(r=>({nodeId:r.nodeId,browseDirection:U.Forward,includeSubtypes:!0,referenceTypeId:O("HasModellingRule"),resultMask:63,requestedMaxReferencesPerNode:0}));try{let r=await k(this.session,t);for(let m=0;m<c.length;m++){let d=c[m].nodeId.toString(),y=r[m]?.references?.[0];u.set(d,y?.displayName?.text??null)}}catch{}}for(let t of c){let r=t.nodeId.toString();s.push({browseName:t.browseName?.name??t.browseName?.toString()??"",displayName:t.displayName?.text??"",nodeClass:t.nodeClass===g.Variable?"Variable":t.nodeClass===g.Object?"Object":"Method",dataType:l.get(r)??null,modellingRule:u.get(r)??null})}return s}async getNamespaces(){return this._namespaceArray.map((e,n)=>({uri:e,displayName:e.split("/").pop()??`ns${n}`}))}async readValue(e){this._serviceCounters.read++;let n=await this.session.read({nodeId:I(e),attributeId:S.Value});return D(n)}async readValues(e){if(this._serviceCounters.read++,e.length===0)return[];let n=e.map(l=>({nodeId:I(l),attributeId:S.Value})),s=await this.session.read(n);return(Array.isArray(s)?s:[s]).map(D)}async writeValue(e,n){this._serviceCounters.write++;let s=I(e),i=await this.session.read([{nodeId:s,attributeId:S.DataType},{nodeId:s,attributeId:S.Value}]),l=Array.isArray(i)?i:[i],u=l[0]?.value?.value,c=l[1],t=p.Null;if(u){let o=typeof u=="object"?u.value??0:Number(u);o>=1&&o<=25?t=o:c?.value?.value!==void 0&&(t=c.value.dataType??p.Null)}let r=n;try{r=this._coerceToDataType(n,t)}catch(o){let b=`Write coercion failed for ${e}: targetDataType=${p[t]}(${t}) jsType=${typeof n} jsValue=${JSON.stringify(n)} error=${o}`;throw this.logger.warn(b),new Error(b)}let m={nodeId:s,attributeId:S.Value,value:{value:new B({dataType:t!==p.Null?t:this._inferDataType(r),value:r})}};this.logger.debug(`writeValue: nodeId=${e} targetDataType=${p[t]} jsType=${typeof n} \u2192 coerced=${JSON.stringify(r)}`);let d=await this.session.write(m),y=Array.isArray(d)?d[0]:d;if(y&&!y.equals(F.Good)){let o=`Write failed: ${y.toString()} | nodeId=${e} targetDataType=${p[t]}(${t}) inputValue=${JSON.stringify(n)} (${typeof n}) coercedValue=${JSON.stringify(r)} (${typeof r})`;throw this.logger.warn(o),new Error(o)}}_coerceToDataType(e,n){switch(n){case p.Boolean:return typeof e=="boolean"?e:typeof e=="number"?e!==0:typeof e=="string"?e.toLowerCase()==="true"||e==="1":!!e;case p.SByte:case p.Byte:case p.Int16:case p.UInt16:case p.Int32:case p.UInt32:return Math.trunc(Number(e));case p.Int64:case p.UInt64:return Array.isArray(e)?e:[0,Math.trunc(Number(e))];case p.Float:case p.Double:return Number(e);case p.String:return String(e);case p.DateTime:return e instanceof Date?e:typeof e=="string"||typeof e=="number"?new Date(e):e;case p.ByteString:return Buffer.isBuffer(e)?e:typeof e=="string"?Buffer.from(e,"base64"):e;case p.Null:default:return e}}_inferDataType(e){return typeof e=="number"?p.Double:typeof e=="boolean"?p.Boolean:typeof e=="string"?p.String:e instanceof Date?p.DateTime:p.Null}async readHistory(e,n,s){this._serviceCounters.readHistory++;let l=await this.session.readHistoryValue(I(e),n,s);return(l.historyData?l.historyData?.dataValues??[]:[]).map(j)}async callMethod(e,n,s){this._serviceCounters.call++;let i={objectId:I(e),methodId:I(n),inputArguments:s.map(u=>new B({dataType:p.Null,value:u}))};return(await this.session.call(i)).outputArguments??null}async createMonitoredSubscription(e){this._serviceCounters.subscribe++;let n=await this.session.createSubscription2({requestedPublishingInterval:e.publishingIntervalMs,requestedLifetimeCount:100,requestedMaxKeepAliveCount:10,maxNotificationsPerPublish:0,publishingEnabled:!0,priority:10}),s=null,i=new Map,l=`opcua-sub-${Date.now()}`,u=this.logger;return u.info(`OPC UA CreateSubscription id=${l} publishingInterval=${e.publishingIntervalMs}ms`),{id:l,async addItems(t){let r=t.filter(d=>!i.has(d));if(r.length===0)return;let m=await Promise.all(r.map(d=>n.monitor({nodeId:I(d),attributeId:S.Value},{samplingInterval:e.publishingIntervalMs,discardOldest:!0,queueSize:10},z.Both)));for(let d=0;d<r.length;d++){let y=r[d],o=m[d];o.on("changed",b=>{if(s){let h=D(b);s(y,h.value,h.quality,h.timestamp)}}),i.set(y,o)}u.info(`OPC UA CreateMonitoredItems: ${r.length} items added (total=${i.size})`)},async removeItems(t){let r=t.map(m=>({id:m,item:i.get(m)})).filter(m=>m.item!=null);await Promise.all(r.map(({id:m,item:d})=>(i.delete(m),d.terminate().catch(()=>{}))))},onDataChange(t){s=t},async close(){try{await n.terminate()}catch{}i.clear()}}}};export{x as OpcUaClient,M as OpcUaDataSourceAdapter,$ as qualifiedNameToNsu,P 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/opcua-adapter.ts","../src/opcua-client.ts","../src/opcua-mapper.ts","../src/optimized.ts"],"mappings":"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","names":["OpcUaDataSourceAdapter","client","_logger","sourceNodeId","sourceNodeIds","value","startTime","endTime","options","AttributeIds","BrowseDirection","browseAll","coerceNodeId","DataType","MessageSecurityMode","NodeClass","OPCUAClient","resolveNodeId","StatusCodes","TimestampsToReturn","UserTokenType","Variant","NodeClass","StatusCodes","NODE_CLASS_NAMES","qualifiedNameToNsu","browseName","namespaceArray","nsIdx","refToSourceNode","ref","parentSourceNodeId","nodeClass","nsuQName","namespaceUri","nsuMatch","dataValueToSource","dv","isGood","dataValueToHistorical","wrapSessionIfOptimized","session","logger","ClientSessionOptimized","optimized","SECURITY_MODES","MessageSecurityMode","OpcUaClient","opts","logger","securityMode","OPCUAClient","count","delay","userIdentity","UserTokenType","session","wrapSessionIfOptimized","nsArrayDv","coerceNodeId","AttributeIds","nodeIds","referenceTypeId","resolveNodeId","nodeId","BrowseDirection","desc","result","refs","txCount","cp","next","seedNodeId","onRef","shouldRecurse","started","output","visited","totalTx","frontier","useParallel","mapped","wave","item","waveResults","w","descriptions","browseResults","browseAll","r","nextFrontier","queued","i","ref","childId","m","objectsFolderId","filter","items","ms","parentNodeId","refToSourceNode","NodeClass","name","f","strategy","nsIdx","nsUri","enrichStart","stdTypes","nonStdTypes","type","ENRICH_CHUNK_SIZE","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","coerceErr","msg","writeVal","Variant","code","StatusCodes","errMsg","dt","startTime","endTime","resultAny","dataValueToHistorical","objectNodeId","methodNodeId","args","request","a","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.
|
|
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)",
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"types": "./dist/index.d.ts",
|
|
39
39
|
"exports": {
|
|
40
40
|
".": {
|
|
41
|
+
"source": "./src/index.ts",
|
|
41
42
|
"types": "./dist/index.d.ts",
|
|
42
43
|
"import": "./dist/index.js"
|
|
43
44
|
}
|
|
@@ -57,9 +58,11 @@
|
|
|
57
58
|
"typecheck": "tsc --noEmit"
|
|
58
59
|
},
|
|
59
60
|
"dependencies": {
|
|
60
|
-
"@node-i3x/core": "0.
|
|
61
|
+
"@node-i3x/core": "0.7.1",
|
|
61
62
|
"node-opcua": "^2.173.1",
|
|
62
|
-
"node-opcua-
|
|
63
|
+
"node-opcua-certificate-manager": "^2.173.0",
|
|
64
|
+
"node-opcua-client": "^2.173.1",
|
|
65
|
+
"node-opcua-secure-channel": "^2.173.0"
|
|
63
66
|
},
|
|
64
67
|
"optionalDependencies": {
|
|
65
68
|
"@sterfive/opcua-optimized-client": "*"
|