@node-i3x/opcua-connector 0.5.3 → 0.7.0
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 +92 -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.
|
|
@@ -32,15 +97,39 @@ interface OpcUaClientOptions {
|
|
|
32
97
|
password?: string;
|
|
33
98
|
}
|
|
34
99
|
|
|
100
|
+
/** OPC UA session-level traffic statistics */
|
|
101
|
+
interface OpcuaStats {
|
|
102
|
+
transactionsPerformed: number;
|
|
103
|
+
bytesRead: number;
|
|
104
|
+
bytesWritten: number;
|
|
105
|
+
services: {
|
|
106
|
+
browse: number;
|
|
107
|
+
read: number;
|
|
108
|
+
write: number;
|
|
109
|
+
translate: number;
|
|
110
|
+
subscribe: number;
|
|
111
|
+
call: number;
|
|
112
|
+
readHistory: number;
|
|
113
|
+
};
|
|
114
|
+
}
|
|
35
115
|
declare class OpcUaClient {
|
|
36
116
|
private readonly logger;
|
|
37
117
|
private _client;
|
|
38
118
|
private _session;
|
|
119
|
+
private _certificateManager;
|
|
39
120
|
private _namespaceArray;
|
|
121
|
+
private _serviceCounters;
|
|
40
122
|
private readonly _opts;
|
|
41
123
|
constructor(opts: OpcUaClientOptions, logger: ILogger);
|
|
124
|
+
getStats(): OpcuaStats;
|
|
42
125
|
connect(): Promise<void>;
|
|
43
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;
|
|
44
133
|
isConnected(): boolean;
|
|
45
134
|
private get session();
|
|
46
135
|
private _makeBrowseDescriptions;
|
|
@@ -70,13 +159,6 @@ declare class OpcUaClient {
|
|
|
70
159
|
readValue(nodeId: string): Promise<SourceDataValue>;
|
|
71
160
|
readValues(nodeIds: string[]): Promise<SourceDataValue[]>;
|
|
72
161
|
writeValue(nodeId: string, value: unknown): Promise<void>;
|
|
73
|
-
/**
|
|
74
|
-
* Coerce a JSON value to the expected OPC UA DataType.
|
|
75
|
-
* Handles the common built-in types (1..25).
|
|
76
|
-
*/
|
|
77
|
-
private _coerceToDataType;
|
|
78
|
-
/** Fallback: infer DataType from JS value when server type is unknown. */
|
|
79
|
-
private _inferDataType;
|
|
80
162
|
readHistory(nodeId: string, startTime: Date, endTime: Date): Promise<SourceHistoricalValue[]>;
|
|
81
163
|
callMethod(objectNodeId: string, methodNodeId: string, args: unknown[]): Promise<unknown>;
|
|
82
164
|
createMonitoredSubscription(options: MonitoredSubscriptionOptions): Promise<IMonitoredSubscription>;
|
|
@@ -106,18 +188,6 @@ declare class OpcUaDataSourceAdapter implements IDataSourcePort {
|
|
|
106
188
|
createMonitoredSubscription(options: MonitoredSubscriptionOptions): Promise<IMonitoredSubscription>;
|
|
107
189
|
}
|
|
108
190
|
|
|
109
|
-
/**
|
|
110
|
-
* Convert a QualifiedName to its namespace-URI-qualified form.
|
|
111
|
-
*
|
|
112
|
-
* Resolves the volatile namespace *index* to the stable namespace
|
|
113
|
-
* *URI* using the server's namespace array, producing a string of
|
|
114
|
-
* the form `"nsu=http://example.com/:BrowseName"`.
|
|
115
|
-
*
|
|
116
|
-
* This is the key building-block for stable element IDs that
|
|
117
|
-
* survive OPC UA server restarts (even when namespace indices shift).
|
|
118
|
-
*/
|
|
119
|
-
declare function qualifiedNameToNsu(browseName: QualifiedName | null | undefined, namespaceArray: readonly string[]): string;
|
|
120
|
-
|
|
121
191
|
/**
|
|
122
192
|
* Wrap a ClientSession with @sterfive/opcua-optimized-client
|
|
123
193
|
* if installed. Returns the optimized session, or the original
|
|
@@ -138,4 +208,4 @@ declare function qualifiedNameToNsu(browseName: QualifiedName | null | undefined
|
|
|
138
208
|
*/
|
|
139
209
|
declare function wrapSessionIfOptimized(session: ClientSession, logger: ILogger): Promise<ClientSession>;
|
|
140
210
|
|
|
141
|
-
export { OpcUaClient, type OpcUaClientOptions, OpcUaDataSourceAdapter,
|
|
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 _=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 V,NodeClass as g,OPCUAClient as H,resolveNodeId as O,StatusCodes as F,TimestampsToReturn as z,UserTokenType as L,Variant as B}from"node-opcua";import{NodeClass as w,StatusCodes as $}from"node-opcua";var E={[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(a,e){if(!a?.name)return"";let n=a.namespaceIndex??0;return`nsu=${e[n]??`ns=${n}`}:${a.name}`}function j(a,e,n){let s=a.nodeClass??w.Unspecified,i=A(a.browseName,n),l="",d=i.match(/^nsu=(.+):([^:]+)$/);if(d)l=d[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:E[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($.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 v(a){return{value:a.value?.value??null,quality:a.statusCode?.equals($.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 G={None:V.None,Sign:V.Sign,SignAndEncrypt:V.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=[];_opts;async connect(){let e=G[this._opts.securityMode]??V.None;this._client=H.create({applicationName:this._opts.applicationName,securityMode:e,connectionStrategy:{initialDelay:1e3,maxDelay:3e4,maxRetry:1/0},keepSessionAlive:!0,endpointMustExist:!1}),this._client.on("backoff",(l,d)=>{this.logger.warn(`Connection backoff #${l}, retrying in ${d}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??[]],d=1,c=i.continuationPoint;for(;c;){let t=await this.session.browseNext(c,!1);d++,l.push(...t.references??[]),c=t.continuationPoint}return{refs:l,txCount:d}}async _bfsBrowse(e,n,s,i){let l=performance.now(),d=[],c=new Set,t=0,o=[{nodeId:e,parentId:null}],m=this._opts.browseStrategy!=="browseAll",u=new Set;for(;o.length>0;){let f=o.filter(y=>!c.has(y.nodeId));for(let y of f)c.add(y.nodeId);if(f.length===0)break;let r;if(m)r=await Promise.all(f.map(y=>this._browseSingleNode(y.nodeId,i)));else{let y=this._makeBrowseDescriptions(f.map(T=>T.nodeId),i),N=await k(this.session,y);t+=1,r=N.map(T=>({refs:T.references??[],txCount:0}))}let h=[],b=new Set;for(let y=0;y<f.length;y++){let N=f[y],{refs:T,txCount:q}=r[y];t+=q;for(let M of T){let C=M.nodeId.toString();if(!c.has(C)){if(!u.has(C)){u.add(C);let R=n(M,N.nodeId);R!==null&&d.push(R)}(!s||s(M,N.nodeId))&&(b.has(C)||(b.add(C),h.push({nodeId:C,parentId:N.nodeId})))}}}o=h}return{items:d,txCount:t,ms:performance.now()-l}}async browseTree(){let e=O("ObjectsFolder").toString(),n=this._opts.browseFilter??"application-only",{items:s,txCount:i,ms:l}=await this._bfsBrowse(e,(c,t)=>j(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 o=c.nodeId.toString(),m=c.browseName?.name??"";return n.some(u=>u===o||u===m)}return!0}),d=this._opts.browseStrategy!=="browseAll"?"parallel":"browseAll";return this.logger.info(`Browse tree: ${s.length} nodes in ${l.toFixed(0)}ms (strategy=${d}, transactions=${i})`),s}async getObjectTypes(){let{items:e,txCount:n,ms:s}=await this._bfsBrowse(O("ObjectTypesFolder").toString(),(r,h)=>{if(r.nodeClass!==g.ObjectType)return null;let b=r.browseName?.namespaceIndex??0,y=this._namespaceArray[b]??"";return{sourceNodeId:r.nodeId.toString(),parentSourceNodeId:h,browseName:r.browseName?.toString()??"",displayName:r.displayName?.text??"",namespaceUri:y}},r=>r.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(),d=new Set,c=[],t=[];for(let r of e)d.has(r.sourceNodeId)||(d.add(r.sourceNodeId),r.sourceNodeId.startsWith("ns=0;")?c.push(r):t.push(r));let o=200,m=[];for(let r=0;r<t.length;r+=o){let h=t.slice(r,r+o),b=await Promise.all(h.map(y=>this._browseTypeMembers(y.sourceNodeId).then(N=>({...y,members:N}),()=>y)));m.push(...b),t.length>o&&this.logger.info(`Enriching types: ${Math.min(r+o,t.length)}/${t.length} done`)}let u=[...c,...m],f=performance.now()-l;return this.logger.info(`Enriched ${t.length} types with members in ${f.toFixed(0)}ms`),u}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(o=>({nodeId:o.nodeId,attributeId:S.DataType}));try{let o=await this.session.read(t),m=Array.isArray(o)?o:[o];for(let u=0;u<i.length;u++){let f=i[u].nodeId.toString(),r=m[u]?.value?.value;l.set(f,r?r.toString():null)}}catch{}}let d=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(o=>({nodeId:o.nodeId,browseDirection:U.Forward,includeSubtypes:!0,referenceTypeId:O("HasModellingRule"),resultMask:63,requestedMaxReferencesPerNode:0}));try{let o=await k(this.session,t);for(let m=0;m<c.length;m++){let u=c[m].nodeId.toString(),f=o[m]?.references?.[0];d.set(u,f?.displayName?.text??null)}}catch{}}for(let t of c){let o=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(o)??null,modellingRule:d.get(o)??null})}return s}async getNamespaces(){return this._namespaceArray.map((e,n)=>({uri:e,displayName:e.split("/").pop()??`ns${n}`}))}async readValue(e){let n=await this.session.read({nodeId:I(e),attributeId:S.Value});return D(n)}async readValues(e){if(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){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],d=l[0]?.value?.value,c=l[1],t=p.Null;if(d){let r=typeof d=="object"?d.value??0:Number(d);r>=1&&r<=25?t=r:c?.value?.value!==void 0&&(t=c.value.dataType??p.Null)}let o=n;try{o=this._coerceToDataType(n,t)}catch(r){let h=`Write coercion failed for ${e}: targetDataType=${p[t]}(${t}) jsType=${typeof n} jsValue=${JSON.stringify(n)} error=${r}`;throw this.logger.warn(h),new Error(h)}let m={nodeId:s,attributeId:S.Value,value:{value:new B({dataType:t!==p.Null?t:this._inferDataType(o),value:o})}};this.logger.debug(`writeValue: nodeId=${e} targetDataType=${p[t]} jsType=${typeof n} \u2192 coerced=${JSON.stringify(o)}`);let u=await this.session.write(m),f=Array.isArray(u)?u[0]:u;if(f&&!f.equals(F.Good)){let r=`Write failed: ${f.toString()} | nodeId=${e} targetDataType=${p[t]}(${t}) inputValue=${JSON.stringify(n)} (${typeof n}) coercedValue=${JSON.stringify(o)} (${typeof o})`;throw this.logger.warn(r),new Error(r)}}_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){let l=await this.session.readHistoryValue(I(e),n,s);return(l.historyData?l.historyData?.dataValues??[]:[]).map(v)}async callMethod(e,n,s){let i={objectId:I(e),methodId:I(n),inputArguments:s.map(d=>new B({dataType:p.Null,value:d}))};return(await this.session.call(i)).outputArguments??null}async createMonitoredSubscription(e){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()}`,d=this.logger;return d.info(`OPC UA CreateSubscription id=${l} publishingInterval=${e.publishingIntervalMs}ms`),{id:l,async addItems(t){let o=t.filter(u=>!i.has(u));if(o.length===0)return;let m=await Promise.all(o.map(u=>n.monitor({nodeId:I(u),attributeId:S.Value},{samplingInterval:e.publishingIntervalMs,discardOldest:!0,queueSize:10},z.Both)));for(let u=0;u<o.length;u++){let f=o[u],r=m[u];r.on("changed",h=>{if(s){let b=D(h);s(f,b.value,b.quality,b.timestamp)}}),i.set(f,r)}d.info(`OPC UA CreateMonitoredItems: ${o.length} items added (total=${i.size})`)},async removeItems(t){let o=t.map(m=>({id:m,item:i.get(m)})).filter(m=>m.item!=null);await Promise.all(o.map(({id:m,item:u})=>(i.delete(m),u.terminate().catch(()=>{}))))},onDataChange(t){s=t},async close(){try{await n.terminate()}catch{}i.clear()}}}};export{x as OpcUaClient,_ as OpcUaDataSourceAdapter,A as qualifiedNameToNsu,P as wrapSessionIfOptimized};
|
|
1
|
+
import{qualifiedNameToNsu as We}from"@node-i3x/core";import{DataType as f}from"node-opcua";function x(n,e){switch(e){case f.Boolean:return typeof n=="boolean"?n:typeof n=="number"?n!==0:typeof n=="string"?n.toLowerCase()==="true"||n==="1":!!n;case f.SByte:case f.Byte:case f.Int16:case f.UInt16:case f.Int32:case f.UInt32:return Math.trunc(Number(n));case f.Int64:case f.UInt64:return Array.isArray(n)?n:[0,Math.trunc(Number(n))];case f.Float:case f.Double:return Number(n);case f.String:return String(n);case f.DateTime:return n instanceof Date?n:typeof n=="string"||typeof n=="number"?new Date(n):n;case f.ByteString:return Buffer.isBuffer(n)?n:typeof n=="string"?Buffer.from(n,"base64"):n;default:return n}}function v(n){return typeof n=="number"?f.Double:typeof n=="boolean"?f.Boolean:typeof n=="string"?f.String:n instanceof Date?f.DateTime:f.Null}import{MessageSecurityMode as b,OPCUAClient as X}from"node-opcua";import{coerceSecurityPolicy as R}from"node-opcua-secure-channel";var L=["http://opcfoundation.org/UA/SecurityPolicy#Aes256_Sha256_RsaPss","http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256","http://opcfoundation.org/UA/SecurityPolicy#Aes128_Sha256_RsaOaep","http://opcfoundation.org/UA/SecurityPolicy#Basic256","http://opcfoundation.org/UA/SecurityPolicy#Basic256Rsa15","http://opcfoundation.org/UA/SecurityPolicy#Basic128Rsa15","http://opcfoundation.org/UA/SecurityPolicy#None"],F={[b.SignAndEncrypt]:0,[b.Sign]:1,[b.None]:2},$={None:b.None,Sign:b.Sign,SignAndEncrypt:b.SignAndEncrypt};function _(n,e,t){if(n.length===0){if(e!==void 0||t!==void 0)throw new Error("Server returned no endpoints. Cannot discover a matching security configuration.");return{securityMode:b.None,securityPolicy:R("None")}}let r=[...n];if(e!==void 0){let s=r.filter(a=>a.securityMode===e);if(s.length===0)throw new Error(`Server has no endpoints with securityMode=${b[e]}. Available modes: ${[...new Set(r.map(a=>b[a.securityMode]))].join(", ")}.`);r=s}if(t!==void 0){let s=r.filter(a=>a.securityPolicyUri===t);if(s.length===0)throw new Error(`Server has no endpoints with securityPolicy=${t}. Available policies: ${[...new Set(r.map(a=>a.securityPolicyUri))].join(", ")}.`);r=s}if(e===void 0&&t===void 0){let s=r.filter(a=>a.securityMode!==b.None);s.length>0&&(r=s)}r.sort((s,a)=>{let c=(a.securityLevel??0)-(s.securityLevel??0);if(c!==0)return c;let i=L.indexOf(s.securityPolicyUri??""),o=L.indexOf(a.securityPolicyUri??""),u=(i===-1?999:i)-(o===-1?999:o);return u!==0?u:(F[s.securityMode]??9)-(F[a.securityMode]??9)});let l=r[0];return{securityMode:l.securityMode,securityPolicy:R(l.securityPolicyUri)}}async function O(n,e,t,r){let l=t!==void 0||r!==void 0,s=X.create({connectionStrategy:{maxRetry:3,initialDelay:500,maxDelay:5e3},endpointMustExist:!1});try{await s.connect(n);let a=await s.getEndpoints();await s.disconnect();let c=_(a,t,r);return e.info(`Auto-discovered best endpoint: securityPolicy=${c.securityPolicy} securityMode=${b[c.securityMode]}`),c}catch(a){if(l){try{await s.disconnect()}catch(c){e.debug(`discoveryClient disconnect failed: ${c.message}`)}throw a}e.warn(`Endpoint discovery failed (${a}); falling back to None/None`);try{await s.disconnect()}catch(c){e.debug(`discoveryClient disconnect failed: ${c.message}`)}return{securityMode:b.None,securityPolicy:R("None")}}}var E=class{constructor(e,t){this.client=e;this._logger=t}client;_logger;async connect(){await this.client.connect()}async disconnect(){await this.client.disconnect()}isConnected(){return this.client.isConnected()}async browseTree(){return this.client.browseTree()}async getNamespaces(){return this.client.getNamespaces()}async getObjectTypes(){return this.client.getObjectTypes()}async readValue(e){return this.client.readValue(e)}async readValues(e){return this.client.readValues(e)}async writeValue(e,t){return this.client.writeValue(e,t)}async readHistory(e,t,r){return this.client.readHistory(e,t,r)}async createMonitoredSubscription(e){return this.client.createMonitoredSubscription(e)}};import ae from"os";import{dataValueToHistorical as ce,dataValueToSource as k}from"@node-i3x/core";import{AttributeIds as I,BrowseDirection as K,browseAll as Y,coerceNodeId as S,DataType as C,MessageSecurityMode as D,NodeClass as g,OPCUAClient as le,resolveNodeId as T,StatusCodes as de,TimestampsToReturn as ue,UserTokenType as pe,Variant as J}from"node-opcua";import{coerceSecurityPolicy as Q}from"node-opcua-secure-channel";import ee from"crypto";import te from"fs";import ie from"os";import H from"path";import{OPCUACertificateManager as re}from"node-opcua-certificate-manager";async function q(n,e){let t=ee.createHash("sha256").update(n.endpointUrl).digest("hex").slice(0,12),r=n.pkiFolder??H.join(process.cwd(),"pki",`i3x-${t}`),l=new re({rootFolder:r,automaticallyAcceptUnknownCertificate:!0,name:"PKI",keySize:2048});return await l.initialize(),await ne(l,n,r,t,e),l}async function ne(n,e,t,r,l){let s=H.join(t,"PKI","own","certs","client_certificate.pem");if(te.existsSync(s)){l.debug(`Client certificate exists: ${s}`);return}let a=ie.hostname(),c=e.applicationUri??`urn:${a}:${e.applicationName}`;await n.createSelfSignedCertificate({applicationUri:c,subject:e.certificateSubject??`/CN=${e.applicationName}-${r}/O=Sterfive/L=Orleans/C=FR`,dns:[a],startDate:new Date,validity:365*10}),l.info(`Created self-signed client certificate: ${s}`)}import{NODE_CLASS_NAMES as oe,qualifiedNameToNsu as se}from"@node-i3x/core";import{NodeClass as z}from"node-opcua";function W(n,e,t){let r=n.nodeClass??z.Unspecified,l=se(n.browseName,t),s="",a=l.match(/^nsu=(.+):([^:]+)$/);if(a)s=a[1];else{let c=n.browseName?.namespaceIndex??0;s=t[c]??""}return{sourceNodeId:n.nodeId.toString(),parentSourceNodeId:e,browseName:n.browseName?.toString()??"",nsuQualifiedName:l,displayName:n.displayName?.text??n.browseName?.toString()??"",nodeClass:oe[r]??"Unknown",typeDefinition:n.typeDefinition?n.typeDefinition.toString():null,namespaceUri:s,eventNotifier:n.nodeClass===z.Object?(n.eventNotifier??0)!==0:!1}}async function V(n,e){try{let{ClientSessionOptimized:t}=await import("@sterfive/opcua-optimized-client"),r=new t(n);return e.info("\u2713 @sterfive/opcua-optimized-client activated \u2014 auto-batching, limit-splitting, and coalescing enabled"),r}catch(t){return e.debug(`Failed to import @sterfive/opcua-optimized-client: ${t.message}`),e.info("Standard node-opcua client mode. Install @sterfive/opcua-optimized-client for automatic batching and enhanced performance."),n}}var Z=63,ye="i=2255",fe=100,me=10,ge=10,he=10,A=200,j=class{constructor(e,t){this.logger=t;this._opts={endpointUrl:e.endpointUrl,securityMode:e.securityMode??"Auto",securityPolicy:e.securityPolicy??"Auto",applicationName:e.applicationName??"node-i3x",optimizedClient:e.optimizedClient??"auto",browseStrategy:e.browseStrategy??"parallel",browseFilter:e.browseFilter??"application-only",username:e.username,password:e.password,applicationUri:e.applicationUri,pkiFolder:e.pkiFolder,certificateSubject:e.certificateSubject}}logger;_client=null;_session=null;_certificateManager=null;_namespaceArray=[];_serviceCounters={browse:0,read:0,write:0,translate:0,subscribe:0,call:0,readHistory:0};_opts;getStats(){return{transactionsPerformed:this._client?.transactionsPerformed??0,bytesRead:this._client?.bytesRead??0,bytesWritten:this._client?.bytesWritten??0,services:{...this._serviceCounters}}}async connect(){let e=await q(this._opts,this.logger);this._certificateManager=e;let t,r;if(this._opts.securityMode==="None")t=D.None,r=Q("None");else if(this._opts.securityMode==="Auto"&&this._opts.securityPolicy==="Auto"){let o=await O(this._opts.endpointUrl,this.logger);t=o.securityMode,r=o.securityPolicy}else if(this._opts.securityMode==="Auto"){let o="http://opcfoundation.org/UA/SecurityPolicy#"+this._opts.securityPolicy,u=await O(this._opts.endpointUrl,this.logger,void 0,o);t=u.securityMode,r=u.securityPolicy}else if(this._opts.securityPolicy==="Auto"){let o=$[this._opts.securityMode]??D.None,u=await O(this._opts.endpointUrl,this.logger,o);t=u.securityMode,r=u.securityPolicy}else t=$[this._opts.securityMode]??D.None,r=Q(this._opts.securityPolicy);let l=ae.hostname(),s=this._opts.applicationUri??`urn:${l}:${this._opts.applicationName}`;this._client=le.create({applicationName:this._opts.applicationName,applicationUri:s,securityMode:t,securityPolicy:r,clientCertificateManager:e,connectionStrategy:{initialDelay:1e3,maxDelay:3e4,maxRetry:1/0},keepSessionAlive:!0,endpointMustExist:!1}),this._client.on("backoff",(o,u)=>{this.logger.warn(`Connection backoff #${o}, retrying in ${u}ms`)}),this._client.on("connection_reestablished",()=>{this.logger.info("OPC UA connection re-established")}),this.logger.info(`Connecting to ${this._opts.endpointUrl} (securityMode=${D[t]}, securityPolicy=${r})...`),await this._client.connect(this._opts.endpointUrl);let a=this._opts.username&&this._opts.password?{type:pe.UserName,userName:this._opts.username,password:this._opts.password}:void 0,c=await this._client.createSession(a);this._opts.optimizedClient!=="disabled"&&(c=await V(c,this.logger)),this._session=c;let i=await c.read({nodeId:S(ye),attributeId:I.Value});this._namespaceArray=i.value?.value??[],this.logger.info("OPC UA session created")}async disconnect(){if(this._session){try{await this._session.close()}catch(e){this.logger.debug(`best-effort session.close failed: ${e.message}`)}this._session=null}if(this._client){try{await this._client.disconnect()}catch(e){this.logger.debug(`best-effort client.disconnect failed: ${e.message}`)}this._client=null}if(this._certificateManager){try{await this._certificateManager.dispose()}catch(e){this.logger.debug(`best-effort certificateManager.dispose failed: ${e.message}`)}this._certificateManager=null}this.logger.info("OPC UA disconnected")}static selectBestEndpoint=_;isConnected(){return this._session!==null&&!this._session.isReconnecting}get session(){if(!this._session)throw new Error("OPC UA session not connected");return this._session}_makeBrowseDescriptions(e,t=T("HierarchicalReferences")){return e.map(r=>({nodeId:S(r),browseDirection:K.Forward,includeSubtypes:!0,referenceTypeId:t,resultMask:Z,requestedMaxReferencesPerNode:0}))}async _browseSingleNode(e,t){let r=this._makeBrowseDescriptions([e],t)[0],l=await this.session.browse(r),s=[...l.references??[]],a=1,c=l.continuationPoint;for(;c;){let i=await this.session.browseNext(c,!1);a++,s.push(...i.references??[]),c=i.continuationPoint}return{refs:s,txCount:a}}async _bfsBrowse(e,t,r,l){let s=performance.now(),a=[],c=new Set,i=0,o=[{nodeId:e,parentId:null}],u=this._opts.browseStrategy!=="browseAll",p=new Set;for(;o.length>0;){let d=o.filter(m=>!c.has(m.nodeId));for(let m of d)c.add(m.nodeId);if(d.length===0)break;let y;if(u)y=await Promise.all(d.map(m=>this._browseSingleNode(m.nodeId,l)));else{let m=this._makeBrowseDescriptions(d.map(P=>P.nodeId),l),N=await Y(this.session,m);i+=1,y=N.map(P=>({refs:P.references??[],txCount:0}))}let w=[],h=new Set;for(let m=0;m<d.length;m++){let N=d[m],{refs:P,txCount:G}=y[m];i+=G;for(let U of P){let M=U.nodeId.toString();if(!c.has(M)){if(!p.has(M)){p.add(M);let B=t(U,N.nodeId);B!==null&&a.push(B)}(!r||r(U,N.nodeId))&&(h.has(M)||(h.add(M),w.push({nodeId:M,parentId:N.nodeId})))}}}o=w}return{items:a,txCount:i,ms:performance.now()-s}}async browseTree(){this._serviceCounters.browse++;let e=T("ObjectsFolder").toString(),t=this._opts.browseFilter??"application-only",{items:r,txCount:l,ms:s}=await this._bfsBrowse(e,(c,i)=>{let o=i===e?null:i;if(i===e){if(t==="application-only"&&(c.browseName?.namespaceIndex??0)===0)return null;if(Array.isArray(t)){let u=c.nodeId.toString(),p=c.browseName?.name??"";if(!t.some(y=>y===u||y===p))return null}}return W(c,o,this._namespaceArray)},(c,i)=>{if(c.nodeClass!==g.Object&&c.nodeClass!==g.Variable)return!1;if(i===e){if(t==="all")return!0;if(t==="application-only")return(c.browseName?.namespaceIndex??0)!==0;let o=c.nodeId.toString(),u=c.browseName?.name??"";return t.some(p=>p===o||p===u)}return!0}),a=this._opts.browseStrategy!=="browseAll"?"parallel":"browseAll";return this.logger.info(`Browse tree: ${r.length} nodes in ${s.toFixed(0)}ms (strategy=${a}, transactions=${l})`),r}async getObjectTypes(){this._serviceCounters.browse++;let{items:e,txCount:t,ms:r}=await this._bfsBrowse(T("ObjectTypesFolder").toString(),(d,y)=>{if(d.nodeClass!==g.ObjectType)return null;let w=d.browseName?.namespaceIndex??0,h=this._namespaceArray[w]??"";return{sourceNodeId:d.nodeId.toString(),parentSourceNodeId:y,browseName:d.browseName?.toString()??"",displayName:d.displayName?.text??"",namespaceUri:h}},d=>d.nodeClass===g.ObjectType),l=this._opts.browseStrategy!=="browseAll"?"parallel":"browseAll";this.logger.info(`Browse object types: ${e.length} types in ${r.toFixed(0)}ms (strategy=${l}, transactions=${t})`);let s=performance.now(),a=new Set,c=[],i=[];for(let d of e)a.has(d.sourceNodeId)||(a.add(d.sourceNodeId),d.sourceNodeId.startsWith("ns=0;")?c.push(d):i.push(d));let o=[];for(let d=0;d<i.length;d+=A){let y=i.slice(d,d+A),w=await Promise.all(y.map(h=>this._browseTypeMembers(h.sourceNodeId).then(m=>({...h,members:m}),()=>h)));o.push(...w),i.length>A&&this.logger.info(`Enriching types: ${Math.min(d+A,i.length)}/${i.length} done`)}let u=[...c,...o],p=performance.now()-s;return this.logger.info(`Enriched ${i.length} types with members in ${p.toFixed(0)}ms`),u}async _browseTypeMembers(e){let{refs:t}=await this._browseSingleNode(e),r=[],l=[];for(let i of t)i.nodeClass!==g.Variable&&i.nodeClass!==g.Object&&i.nodeClass!==g.Method||i.nodeClass===g.Variable&&l.push(i);let s=new Map;if(l.length>0){let i=l.map(o=>({nodeId:o.nodeId,attributeId:I.DataType}));try{let o=await this.session.read(i),u=Array.isArray(o)?o:[o];for(let p=0;p<l.length;p++){let d=l[p].nodeId.toString(),y=u[p]?.value?.value;s.set(d,y?y.toString():null)}}catch(o){this.logger.debug(`Failed to resolve DataTypes during browse: ${o.message}`)}}let a=new Map,c=t.filter(i=>i.nodeClass===g.Variable||i.nodeClass===g.Object||i.nodeClass===g.Method);if(c.length>0){let i=c.map(o=>({nodeId:o.nodeId,browseDirection:K.Forward,includeSubtypes:!0,referenceTypeId:T("HasModellingRule"),resultMask:Z,requestedMaxReferencesPerNode:0}));try{let o=await Y(this.session,i);for(let u=0;u<c.length;u++){let p=c[u].nodeId.toString(),d=o[u]?.references?.[0];a.set(p,d?.displayName?.text??null)}}catch(o){this.logger.debug(`Failed to resolve ModellingRules during browse: ${o.message}`)}}for(let i of c){let o=i.nodeId.toString();r.push({browseName:i.browseName?.name??i.browseName?.toString()??"",displayName:i.displayName?.text??"",nodeClass:i.nodeClass===g.Variable?"Variable":i.nodeClass===g.Object?"Object":"Method",dataType:s.get(o)??null,modellingRule:a.get(o)??null})}return r}async getNamespaces(){return this._namespaceArray.map((e,t)=>({uri:e,displayName:e.split("/").pop()??`ns${t}`}))}async readValue(e){this._serviceCounters.read++;let t=await this.session.read({nodeId:S(e),attributeId:I.Value});return k(t)}async readValues(e){if(this._serviceCounters.read++,e.length===0)return[];let t=e.map(s=>({nodeId:S(s),attributeId:I.Value})),r=await this.session.read(t);return(Array.isArray(r)?r:[r]).map(k)}async writeValue(e,t){this._serviceCounters.write++;let r=S(e),l=await this.session.read([{nodeId:r,attributeId:I.DataType},{nodeId:r,attributeId:I.Value}]),s=Array.isArray(l)?l:[l],a=s[0]?.value?.value,c=s[1],i=C.Null;if(a){let y=typeof a=="object"?a.value??0:Number(a);y>=1&&y<=25?i=y:c?.value?.value!==void 0&&(i=c.value.dataType??C.Null)}let o=t;try{o=x(t,i)}catch(y){let w=`Write coercion failed for ${e}: targetDataType=${C[i]}(${i}) jsType=${typeof t} jsValue=${JSON.stringify(t)} error=${y}`;throw this.logger.warn(w),new Error(w)}let u={nodeId:r,attributeId:I.Value,value:{value:new J({dataType:i!==C.Null?i:v(o),value:o})}};this.logger.debug(`writeValue: nodeId=${e} targetDataType=${C[i]} jsType=${typeof t} \u2192 coerced=${JSON.stringify(o)}`);let p=await this.session.write(u),d=Array.isArray(p)?p[0]:p;if(d&&!d.equals(de.Good)){let y=`Write failed: ${d.toString()} | nodeId=${e} targetDataType=${C[i]}(${i}) inputValue=${JSON.stringify(t)} (${typeof t}) coercedValue=${JSON.stringify(o)} (${typeof o})`;throw this.logger.warn(y),new Error(y)}}async readHistory(e,t,r){this._serviceCounters.readHistory++;let s=await this.session.readHistoryValue(S(e),t,r);return(s.historyData?s.historyData?.dataValues??[]:[]).map(ce)}async callMethod(e,t,r){this._serviceCounters.call++;let l={objectId:S(e),methodId:S(t),inputArguments:r.map(a=>new J({dataType:C.Null,value:a}))};return(await this.session.call(l)).outputArguments??null}async createMonitoredSubscription(e){this._serviceCounters.subscribe++;let t=await this.session.createSubscription2({requestedPublishingInterval:e.publishingIntervalMs,requestedLifetimeCount:fe,requestedMaxKeepAliveCount:me,maxNotificationsPerPublish:0,publishingEnabled:!0,priority:he}),r=null,l=new Map,s=`opcua-sub-${Date.now()}`,a=this.logger;return a.info(`OPC UA CreateSubscription id=${s} publishingInterval=${e.publishingIntervalMs}ms`),{id:s,async addItems(i){let o=i.filter(p=>!l.has(p));if(o.length===0)return;let u=await Promise.all(o.map(p=>t.monitor({nodeId:S(p),attributeId:I.Value},{samplingInterval:e.samplingIntervalMs,discardOldest:!0,queueSize:ge},ue.Both)));for(let p=0;p<o.length;p++){let d=o[p],y=u[p];y.on("changed",w=>{if(r){let h=k(w);r(d,h.value,h.quality,h.timestamp)}}),l.set(d,y)}a.info(`OPC UA CreateMonitoredItems: ${o.length} items added (total=${l.size})`)},async removeItems(i){let o=i.map(u=>({id:u,item:l.get(u)})).filter(u=>u.item!=null);await Promise.all(o.map(({id:u,item:p})=>(l.delete(u),p.terminate().catch(()=>{}))))},onDataChange(i){r=i},async close(){try{await t.terminate()}catch(i){a.debug(`Failed to terminate subscription: ${i.message}`)}l.clear()}}}};export{j as OpcUaClient,E as OpcUaDataSourceAdapter,x as coerceToDataType,v as inferDataType,We as qualifiedNameToNsu,_ as selectBestEndpoint,V as wrapSessionIfOptimized};
|
|
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","f","item","waveResults","w","descriptions","browseResults","browseAll","r","nextFrontier","queued","i","ref","childId","m","objectsFolderId","filter","items","ms","parentNodeId","refToSourceNode","NodeClass","name","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","SECURITY_POLICY_RANK","SECURITY_MODE_RANK","SECURITY_MODES","selectBestEndpoint","endpoints","modeFilter","policyFilter","pool","filtered","ep","secured","a","b","levelDiff","pA","pB","policyDiff","best","discoverBestEndpoint","endpointUrl","logger","hasFilter","discoveryClient","result","err","discoveryDisconnectErr","OpcUaDataSourceAdapter","client","_logger","sourceNodeId","sourceNodeIds","value","startTime","endTime","options","os","dataValueToHistorical","dataValueToSource","AttributeIds","BrowseDirection","browseAll","coerceNodeId","DataType","MessageSecurityMode","NodeClass","OPCUAClient","resolveNodeId","StatusCodes","TimestampsToReturn","UserTokenType","Variant","coerceSecurityPolicy","crypto","fs","os","path","OPCUACertificateManager","createCertificateManager","opts","logger","hash","pkiFolder","certificateManager","ensureSelfSignedCertificate","certFile","hostname","applicationUri","NODE_CLASS_NAMES","qualifiedNameToNsu","NodeClass","refToSourceNode","ref","parentSourceNodeId","namespaceArray","nodeClass","nsuQName","namespaceUri","nsuMatch","nsIdx","wrapSessionIfOptimized","session","logger","ClientSessionOptimized","optimized","err","RESULT_MASK_ALL","NAMESPACE_ARRAY_NODE_ID","SUBSCRIPTION_LIFETIME_COUNT","SUBSCRIPTION_KEEPALIVE_COUNT","MONITORED_ITEM_QUEUE_SIZE","SUBSCRIPTION_PRIORITY","ENRICH_CHUNK_SIZE","OpcUaClient","opts","logger","certificateManager","createCertificateManager","securityMode","securityPolicy","MessageSecurityMode","coerceSecurityPolicy","best","discoverBestEndpoint","policyUri","explicitMode","SECURITY_MODES","hostname","os","applicationUri","OPCUAClient","count","delay","userIdentity","UserTokenType","session","wrapSessionIfOptimized","nsArrayDv","coerceNodeId","AttributeIds","err","selectBestEndpoint","nodeIds","referenceTypeId","resolveNodeId","nodeId","BrowseDirection","desc","result","refs","txCount","cp","next","seedNodeId","onRef","shouldRecurse","started","output","visited","totalTx","frontier","useParallel","mapped","wave","f","item","waveResults","w","descriptions","browseResults","browseAll","r","nextFrontier","queued","i","ref","childId","m","objectsFolderId","filter","items","ms","parentNodeId","effectiveParent","name","refToSourceNode","NodeClass","strategy","nsIdx","nsUri","enrichStart","stdTypes","nonStdTypes","type","memberResults","chunk","chunkResults","members","enriched","enrichMs","typeNodeId","variableRefs","dataTypeMap","readItems","dvs","arr","dtValue","modellingRuleMap","memberRefs","mrDescriptions","mrResults","mrRef","uri","idx","dv","dataValueToSource","id","value","nid","readResults","dvArr","dataTypeNodeId","currentDataValue","targetDataType","DataType","dtNum","coercedValue","coerceToDataType","coerceErr","msg","writeVal","Variant","inferDataType","code","StatusCodes","errMsg","startTime","endTime","resultAny","dataValueToHistorical","objectNodeId","methodNodeId","args","request","options","sub","dataChangeCb","monitored","subId","sourceNodeIds","newIds","TimestampsToReturn","toRemove","e","cb"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@node-i3x/opcua-connector",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
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.0",
|
|
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": "*"
|