node-opcua-server 2.51.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/.mocharc.yml +10 -0
- package/LICENSE +20 -0
- package/dist/base_server.d.ts +110 -0
- package/dist/base_server.js +476 -0
- package/dist/base_server.js.map +1 -0
- package/dist/factory.d.ts +10 -0
- package/dist/factory.js +24 -0
- package/dist/factory.js.map +1 -0
- package/dist/history_server_capabilities.d.ts +35 -0
- package/dist/history_server_capabilities.js +44 -0
- package/dist/history_server_capabilities.js.map +1 -0
- package/dist/i_channel_data.d.ts +13 -0
- package/dist/i_channel_data.js +3 -0
- package/dist/i_channel_data.js.map +1 -0
- package/dist/i_register_server_manager.d.ts +16 -0
- package/dist/i_register_server_manager.js +3 -0
- package/dist/i_register_server_manager.js.map +1 -0
- package/dist/i_server_side_publish_engine.d.ts +36 -0
- package/dist/i_server_side_publish_engine.js +50 -0
- package/dist/i_server_side_publish_engine.js.map +1 -0
- package/dist/i_socket_data.d.ts +11 -0
- package/dist/i_socket_data.js +3 -0
- package/dist/i_socket_data.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/monitored_item.d.ts +173 -0
- package/dist/monitored_item.js +1006 -0
- package/dist/monitored_item.js.map +1 -0
- package/dist/node_sampler.d.ts +3 -0
- package/dist/node_sampler.js +76 -0
- package/dist/node_sampler.js.map +1 -0
- package/dist/opcua_server.d.ts +668 -0
- package/dist/opcua_server.js +2407 -0
- package/dist/opcua_server.js.map +1 -0
- package/dist/queue.d.ts +11 -0
- package/dist/queue.js +71 -0
- package/dist/queue.js.map +1 -0
- package/dist/register_server_manager.d.ts +92 -0
- package/dist/register_server_manager.js +574 -0
- package/dist/register_server_manager.js.map +1 -0
- package/dist/register_server_manager_hidden.d.ts +17 -0
- package/dist/register_server_manager_hidden.js +28 -0
- package/dist/register_server_manager_hidden.js.map +1 -0
- package/dist/register_server_manager_mdns_only.d.ts +19 -0
- package/dist/register_server_manager_mdns_only.js +58 -0
- package/dist/register_server_manager_mdns_only.js.map +1 -0
- package/dist/server_capabilities.d.ts +61 -0
- package/dist/server_capabilities.js +109 -0
- package/dist/server_capabilities.js.map +1 -0
- package/dist/server_end_point.d.ts +180 -0
- package/dist/server_end_point.js +825 -0
- package/dist/server_end_point.js.map +1 -0
- package/dist/server_engine.d.ts +311 -0
- package/dist/server_engine.js +1659 -0
- package/dist/server_engine.js.map +1 -0
- package/dist/server_publish_engine.d.ts +109 -0
- package/dist/server_publish_engine.js +531 -0
- package/dist/server_publish_engine.js.map +1 -0
- package/dist/server_publish_engine_for_orphan_subscriptions.d.ts +16 -0
- package/dist/server_publish_engine_for_orphan_subscriptions.js +50 -0
- package/dist/server_publish_engine_for_orphan_subscriptions.js.map +1 -0
- package/dist/server_session.d.ts +176 -0
- package/dist/server_session.js +734 -0
- package/dist/server_session.js.map +1 -0
- package/dist/server_subscription.d.ts +393 -0
- package/dist/server_subscription.js +1313 -0
- package/dist/server_subscription.js.map +1 -0
- package/dist/sessions_compatible_for_transfer.d.ts +2 -0
- package/dist/sessions_compatible_for_transfer.js +36 -0
- package/dist/sessions_compatible_for_transfer.js.map +1 -0
- package/dist/validate_filter.d.ts +5 -0
- package/dist/validate_filter.js +64 -0
- package/dist/validate_filter.js.map +1 -0
- package/package.json +88 -0
- package/source/base_server.ts +617 -0
- package/source/factory.ts +25 -0
- package/source/history_server_capabilities.ts +75 -0
- package/source/i_channel_data.ts +17 -0
- package/source/i_register_server_manager.ts +24 -0
- package/source/i_server_side_publish_engine.ts +77 -0
- package/source/i_socket_data.ts +11 -0
- package/source/index.ts +14 -0
- package/source/monitored_item.ts +1303 -0
- package/source/node_sampler.ts +82 -0
- package/source/opcua_server.ts +3742 -0
- package/source/queue.ts +73 -0
- package/source/register_server_manager.ts +744 -0
- package/source/register_server_manager_hidden.ts +33 -0
- package/source/register_server_manager_mdns_only.ts +69 -0
- package/source/server_capabilities.ts +177 -0
- package/source/server_end_point.ts +1182 -0
- package/source/server_engine.ts +2167 -0
- package/source/server_publish_engine.ts +657 -0
- package/source/server_publish_engine_for_orphan_subscriptions.ts +52 -0
- package/source/server_session.ts +931 -0
- package/source/server_subscription.ts +1792 -0
- package/source/sessions_compatible_for_transfer.ts +33 -0
- package/source/validate_filter.ts +86 -0
- package/test_helpers/create_certificates.js +1 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ServerSession } from "./server_session";
|
|
2
|
+
import { assert } from "node-opcua-assert";
|
|
3
|
+
import { UserIdentityToken, AnonymousIdentityToken, UserNameIdentityToken, X509IdentityToken } from "node-opcua-types";
|
|
4
|
+
|
|
5
|
+
export function sessionsCompatibleForTransfer(sessionSrc: ServerSession, sessionDest: ServerSession): boolean {
|
|
6
|
+
assert(sessionDest);
|
|
7
|
+
assert(sessionSrc);
|
|
8
|
+
if (!sessionSrc.userIdentityToken && !sessionDest.userIdentityToken) {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
if (sessionSrc.userIdentityToken instanceof AnonymousIdentityToken) {
|
|
12
|
+
if (!(sessionDest.userIdentityToken instanceof AnonymousIdentityToken)) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
return true;
|
|
16
|
+
} else if (sessionSrc.userIdentityToken instanceof UserNameIdentityToken) {
|
|
17
|
+
if (!(sessionDest.userIdentityToken instanceof UserNameIdentityToken)) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
return sessionSrc.userIdentityToken.userName === sessionDest.userIdentityToken.userName;
|
|
21
|
+
}
|
|
22
|
+
// istanbul ignore else
|
|
23
|
+
else if (sessionSrc.userIdentityToken instanceof X509IdentityToken) {
|
|
24
|
+
if (!(sessionDest.userIdentityToken instanceof X509IdentityToken)) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
return (
|
|
28
|
+
sessionSrc.userIdentityToken.certificateData.toString("hex") === sessionDest.userIdentityToken.certificateData.toString("hex")
|
|
29
|
+
);
|
|
30
|
+
} else {
|
|
31
|
+
throw new Error("Unsupported Identity token");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module node-opcua-server
|
|
3
|
+
*/
|
|
4
|
+
import { assert } from "node-opcua-assert";
|
|
5
|
+
|
|
6
|
+
import {BaseNode, UAVariable} from "node-opcua-address-space";
|
|
7
|
+
import { AttributeIds } from "node-opcua-data-model";
|
|
8
|
+
import { NodeClass } from "node-opcua-data-model";
|
|
9
|
+
import { ExtensionObject } from "node-opcua-extension-object";
|
|
10
|
+
import { NodeId } from "node-opcua-nodeid";
|
|
11
|
+
import { DataChangeFilter, EventFilter } from "node-opcua-service-filter";
|
|
12
|
+
import { DeadbandType } from "node-opcua-service-subscription";
|
|
13
|
+
import { StatusCode, StatusCodes } from "node-opcua-status-code";
|
|
14
|
+
import {ReadValueIdOptions} from "node-opcua-types";
|
|
15
|
+
import {BaseNode2} from "./monitored_item";
|
|
16
|
+
|
|
17
|
+
function __validateDataChangeFilter(
|
|
18
|
+
filter: DataChangeFilter,
|
|
19
|
+
itemToMonitor: ReadValueIdOptions,
|
|
20
|
+
node: UAVariable
|
|
21
|
+
): StatusCode {
|
|
22
|
+
|
|
23
|
+
assert(itemToMonitor.attributeId === AttributeIds.Value);
|
|
24
|
+
|
|
25
|
+
if ((node.nodeClass !== NodeClass.Variable)) {
|
|
26
|
+
return StatusCodes.BadNodeIdInvalid;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
assert(node.nodeClass === NodeClass.Variable);
|
|
30
|
+
|
|
31
|
+
// if node is not Numerical=> DataChangeFilter
|
|
32
|
+
assert(node.dataType instanceof NodeId);
|
|
33
|
+
const dataType = node.addressSpace.findDataType(node.dataType)!;
|
|
34
|
+
|
|
35
|
+
const dataTypeNumber = node.addressSpace.findDataType("Number")!;
|
|
36
|
+
if (filter.deadbandType !== DeadbandType.None) {
|
|
37
|
+
if (!dataType.isSupertypeOf(dataTypeNumber)) {
|
|
38
|
+
return StatusCodes.BadFilterNotAllowed;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (filter.deadbandType === DeadbandType.Percent) {
|
|
43
|
+
if (filter.deadbandValue < 0 || filter.deadbandValue > 100) {
|
|
44
|
+
return StatusCodes.BadDeadbandFilterInvalid;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// node must also have a valid euRange
|
|
48
|
+
if (!(node as any).euRange) {
|
|
49
|
+
// tslint:disable:no-console
|
|
50
|
+
console.log(" node has no euRange ! Dead band Percent cannot be used on node " + node.nodeId.toString());
|
|
51
|
+
return StatusCodes.BadMonitoredItemFilterUnsupported;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return StatusCodes.Good;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function validateFilter(
|
|
58
|
+
filter: ExtensionObject | null,
|
|
59
|
+
itemToMonitor: ReadValueIdOptions,
|
|
60
|
+
node: BaseNode
|
|
61
|
+
) {
|
|
62
|
+
|
|
63
|
+
// handle filter information
|
|
64
|
+
if (filter && filter instanceof EventFilter
|
|
65
|
+
&& itemToMonitor.attributeId !== AttributeIds.EventNotifier) {
|
|
66
|
+
// invalid filter on Event
|
|
67
|
+
return StatusCodes.BadFilterNotAllowed;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (filter && filter instanceof DataChangeFilter
|
|
71
|
+
&& itemToMonitor.attributeId !== AttributeIds.Value) {
|
|
72
|
+
// invalid DataChange filter on non Value Attribute
|
|
73
|
+
return StatusCodes.BadFilterNotAllowed;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (filter && itemToMonitor.attributeId !== AttributeIds.EventNotifier
|
|
77
|
+
&& itemToMonitor.attributeId !== AttributeIds.Value) {
|
|
78
|
+
return StatusCodes.BadFilterNotAllowed;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (filter instanceof DataChangeFilter) {
|
|
82
|
+
return __validateDataChangeFilter(filter, itemToMonitor, node as UAVariable);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return StatusCodes.Good;
|
|
86
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require("node-opcua-pki/bin/crypto_create_CA");
|