node-opcua-samples 2.113.0 → 2.115.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/get_endpoints.js +111 -122
- package/dist/get_endpoints.js.map +1 -1
- package/dist/mini_server.js +28 -39
- package/dist/mini_server.js.map +1 -1
- package/dist/mini_server_on_port_0.js +15 -26
- package/dist/mini_server_on_port_0.js.map +1 -1
- package/dist/server_with_changing_password.js +34 -45
- package/dist/server_with_changing_password.js.map +1 -1
- package/dist/server_with_push_certificate.js +49 -60
- package/dist/server_with_push_certificate.js.map +1 -1
- package/dist/simple_client_ts.js +571 -598
- package/dist/simple_client_ts.js.map +1 -1
- package/dist/simple_findservers.js +25 -36
- package/dist/simple_findservers.js.map +1 -1
- package/dist/simple_secure_server.js +85 -96
- package/dist/simple_secure_server.js.map +1 -1
- package/dist/simple_server_with_custom_extension_objects.js +52 -63
- package/dist/simple_server_with_custom_extension_objects.js.map +1 -1
- package/dist/stressing_client.js +16 -27
- package/dist/stressing_client.js.map +1 -1
- package/dist/tiny_client.js +4 -13
- package/dist/tiny_client.js.map +1 -1
- package/package.json +14 -14
package/dist/get_endpoints.js
CHANGED
|
@@ -23,15 +23,6 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
__setModuleDefault(result, mod);
|
|
24
24
|
return result;
|
|
25
25
|
};
|
|
26
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
27
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
28
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
29
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
30
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
31
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
32
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
33
|
-
});
|
|
34
|
-
};
|
|
35
26
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
27
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
28
|
};
|
|
@@ -48,122 +39,120 @@ const node_opcua_crypto_1 = require("node-opcua-crypto");
|
|
|
48
39
|
const Table = require("easy-table");
|
|
49
40
|
const treeify = require("treeify");
|
|
50
41
|
// eslint-disable-next-line max-statements
|
|
51
|
-
function main() {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
console.log(" Error = ", err.message);
|
|
116
|
-
}
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
const endpoints = yield client.getEndpoints();
|
|
120
|
-
if (argv.debug) {
|
|
121
|
-
fs.writeFileSync("tmp/endpoints.log", JSON.stringify(endpoints, null, " "));
|
|
122
|
-
console.log(treeify.asTree(endpoints, true));
|
|
42
|
+
async function main() {
|
|
43
|
+
// ts-node bin/simple_client.ts --endpoint opc.tcp://localhost:53530/OPCUA/SimulationServer --node "ns=5;s=Sinusoid1"
|
|
44
|
+
const argv = await (0, yargs_1.default)(process.argv)
|
|
45
|
+
.wrap(132)
|
|
46
|
+
.option("endpoint", {
|
|
47
|
+
alias: "e",
|
|
48
|
+
demandOption: true,
|
|
49
|
+
describe: "the end point to connect to "
|
|
50
|
+
})
|
|
51
|
+
.option("securityMode", {
|
|
52
|
+
alias: "s",
|
|
53
|
+
default: "None",
|
|
54
|
+
describe: "the security mode ( None Sign SignAndEncrypt )"
|
|
55
|
+
})
|
|
56
|
+
.option("securityPolicy", {
|
|
57
|
+
alias: "P",
|
|
58
|
+
default: "None",
|
|
59
|
+
describe: "the policy mode : (" + Object.keys(node_opcua_1.SecurityPolicy).join(" - ") + ")"
|
|
60
|
+
})
|
|
61
|
+
.option("discovery", {
|
|
62
|
+
alias: "D",
|
|
63
|
+
describe: "specify the endpoint uri of discovery server (by default same as server endpoint uri)"
|
|
64
|
+
})
|
|
65
|
+
.example("get_endpoints --endpoint opc.tcp://localhost:49230", "").argv;
|
|
66
|
+
const securityMode = (0, node_opcua_1.coerceMessageSecurityMode)(argv.securityMode);
|
|
67
|
+
if (securityMode === node_opcua_1.MessageSecurityMode.Invalid) {
|
|
68
|
+
throw new Error("Invalid Security mode");
|
|
69
|
+
}
|
|
70
|
+
const securityPolicy = (0, node_opcua_1.coerceSecurityPolicy)(argv.securityPolicy);
|
|
71
|
+
if (securityPolicy === node_opcua_1.SecurityPolicy.Invalid) {
|
|
72
|
+
throw new Error("Invalid securityPolicy");
|
|
73
|
+
}
|
|
74
|
+
console.log(chalk_1.default.cyan("securityMode = "), securityMode.toString());
|
|
75
|
+
console.log(chalk_1.default.cyan("securityPolicy = "), securityPolicy.toString());
|
|
76
|
+
const endpointUrl = argv.endpoint;
|
|
77
|
+
if (!endpointUrl) {
|
|
78
|
+
yargs_1.default.showHelp();
|
|
79
|
+
process.exit(0);
|
|
80
|
+
}
|
|
81
|
+
const discoveryUrl = argv.discovery ? argv.discovery : endpointUrl;
|
|
82
|
+
const optionsInitial = {
|
|
83
|
+
securityMode,
|
|
84
|
+
securityPolicy,
|
|
85
|
+
endpointMustExist: false,
|
|
86
|
+
connectionStrategy: {
|
|
87
|
+
initialDelay: 2000,
|
|
88
|
+
maxDelay: 10 * 1000,
|
|
89
|
+
maxRetry: 10
|
|
90
|
+
},
|
|
91
|
+
discoveryUrl
|
|
92
|
+
};
|
|
93
|
+
const client = node_opcua_1.OPCUAClient.create(optionsInitial);
|
|
94
|
+
client.on("backoff", (retry, delay) => {
|
|
95
|
+
console.log(chalk_1.default.bgWhite.yellow("backoff attempt #"), retry, " retrying in ", delay / 1000.0, " seconds");
|
|
96
|
+
});
|
|
97
|
+
console.log(" connecting to ", chalk_1.default.cyan.bold(endpointUrl));
|
|
98
|
+
console.log(" strategy", client.connectionStrategy);
|
|
99
|
+
try {
|
|
100
|
+
await client.connect(endpointUrl);
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
console.log(chalk_1.default.red(" Cannot connect to ") + endpointUrl);
|
|
104
|
+
if (util_1.types.isNativeError(err)) {
|
|
105
|
+
console.log(" Error = ", err.message);
|
|
123
106
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const endpoints = await client.getEndpoints();
|
|
110
|
+
if (argv.debug) {
|
|
111
|
+
fs.writeFileSync("tmp/endpoints.log", JSON.stringify(endpoints, null, " "));
|
|
112
|
+
console.log(treeify.asTree(endpoints, true));
|
|
113
|
+
}
|
|
114
|
+
const table = new Table();
|
|
115
|
+
let serverCertificate;
|
|
116
|
+
let i = 0;
|
|
117
|
+
for (const endpoint of endpoints) {
|
|
118
|
+
table.cell("endpoint", endpoint.endpointUrl + "");
|
|
119
|
+
table.cell("Application URI", endpoint.server.applicationUri);
|
|
120
|
+
table.cell("Product URI", endpoint.server.productUri);
|
|
121
|
+
table.cell("Application Name", endpoint.server.applicationName.text);
|
|
122
|
+
table.cell("securityLevel", endpoint.securityLevel);
|
|
123
|
+
table.cell("Security Mode", chalk_1.default.cyan(node_opcua_1.MessageSecurityMode[endpoint.securityMode].toString()));
|
|
124
|
+
table.cell("securityPolicyUri", chalk_1.default.cyan(endpoint.securityPolicyUri));
|
|
125
|
+
table.cell("Type", node_opcua_1.ApplicationType[endpoint.server.applicationType]);
|
|
126
|
+
table.cell("certificate", "..." /*endpoint.serverCertificate*/);
|
|
127
|
+
endpoint.server.discoveryUrls = endpoint.server.discoveryUrls || [];
|
|
128
|
+
table.cell("discoveryUrls", endpoint.server.discoveryUrls.join(" - "));
|
|
129
|
+
serverCertificate = endpoint.serverCertificate;
|
|
130
|
+
const certificate_filename = path.join(__dirname, "../certificates/PKI/server_certificate" + i + ".pem");
|
|
131
|
+
if (serverCertificate) {
|
|
132
|
+
fs.writeFile(certificate_filename, (0, node_opcua_crypto_1.toPem)(serverCertificate, "CERTIFICATE"), () => {
|
|
133
|
+
/**/
|
|
134
|
+
});
|
|
148
135
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
136
|
+
table.newRow();
|
|
137
|
+
i++;
|
|
138
|
+
}
|
|
139
|
+
console.log(table.toString());
|
|
140
|
+
for (const endpoint of endpoints) {
|
|
141
|
+
console.log("Identify Token for : Security Mode=", chalk_1.default.cyan(node_opcua_1.MessageSecurityMode[endpoint.securityMode].toString()), " Policy=", chalk_1.default.cyan(endpoint.securityPolicyUri));
|
|
142
|
+
const table2 = new Table();
|
|
143
|
+
for (const token of endpoint.userIdentityTokens) {
|
|
144
|
+
table2.cell("policyId", token.policyId);
|
|
145
|
+
table2.cell("tokenType", node_opcua_1.UserTokenType[token.tokenType]);
|
|
146
|
+
table2.cell("issuedTokenType", token.issuedTokenType);
|
|
147
|
+
table2.cell("issuerEndpointUrl", token.issuerEndpointUrl);
|
|
148
|
+
table2.cell("securityPolicyUri", token.securityPolicyUri);
|
|
149
|
+
table2.newRow();
|
|
162
150
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
151
|
+
console.log(table2.toString());
|
|
152
|
+
}
|
|
153
|
+
await client.disconnect();
|
|
154
|
+
console.log("success !! ");
|
|
155
|
+
process.exit(0);
|
|
167
156
|
}
|
|
168
157
|
main();
|
|
169
158
|
//# sourceMappingURL=get_endpoints.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_endpoints.js","sourceRoot":"","sources":["../bin/get_endpoints.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get_endpoints.js","sourceRoot":"","sources":["../bin/get_endpoints.ts"],"names":[],"mappings":"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"}
|
package/dist/mini_server.js
CHANGED
|
@@ -22,15 +22,6 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
25
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
27
|
};
|
|
@@ -79,36 +70,34 @@ const serverOptions = {
|
|
|
79
70
|
},
|
|
80
71
|
isAuditing: false
|
|
81
72
|
};
|
|
82
|
-
function main() {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
console.log(chalk_1.default.cyan(" session name: "), session.sessionName ? session.sessionName.toString() : "<null>");
|
|
111
|
-
});
|
|
73
|
+
async function main() {
|
|
74
|
+
process.title = "Node OPCUA Server on port : " + serverOptions.port;
|
|
75
|
+
const server = new node_opcua_1.OPCUAServer(serverOptions);
|
|
76
|
+
console.log(chalk_1.default.yellow(" server PID :"), process.pid);
|
|
77
|
+
try {
|
|
78
|
+
await server.start();
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
console.log(" Server failed to start ... exiting");
|
|
82
|
+
process.exit(-3);
|
|
83
|
+
}
|
|
84
|
+
const endpointUrl = server.getEndpointUrl();
|
|
85
|
+
console.log(chalk_1.default.yellow(" server on port :"), server.endpoints[0].port.toString());
|
|
86
|
+
console.log(chalk_1.default.yellow(" endpointUrl :"), chalk_1.default.cyan(endpointUrl));
|
|
87
|
+
console.log(chalk_1.default.yellow("\n server now waiting for connections. CTRL+C to stop"));
|
|
88
|
+
server.on("create_session", (session) => {
|
|
89
|
+
console.log(" SESSION CREATED");
|
|
90
|
+
console.log(chalk_1.default.cyan(" client application URI: "), session.clientDescription.applicationUri);
|
|
91
|
+
console.log(chalk_1.default.cyan(" client product URI: "), session.clientDescription.productUri);
|
|
92
|
+
console.log(chalk_1.default.cyan(" client application name: "), session.clientDescription.applicationName.toString());
|
|
93
|
+
console.log(chalk_1.default.cyan(" client application type: "), session.clientDescription.applicationType.toString());
|
|
94
|
+
console.log(chalk_1.default.cyan(" session name: "), session.sessionName ? session.sessionName.toString() : "<null>");
|
|
95
|
+
console.log(chalk_1.default.cyan(" session timeout: "), session.sessionTimeout);
|
|
96
|
+
console.log(chalk_1.default.cyan(" session id: "), session.nodeId);
|
|
97
|
+
});
|
|
98
|
+
server.on("session_closed", (session, reason) => {
|
|
99
|
+
console.log(" SESSION CLOSED :", reason);
|
|
100
|
+
console.log(chalk_1.default.cyan(" session name: "), session.sessionName ? session.sessionName.toString() : "<null>");
|
|
112
101
|
});
|
|
113
102
|
}
|
|
114
103
|
main();
|
package/dist/mini_server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mini_server.js","sourceRoot":"","sources":["../bin/mini_server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mini_server.js","sourceRoot":"","sources":["../bin/mini_server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,37 +1,26 @@
|
|
|
1
1
|
#!/usr/bin/env ts-node
|
|
2
2
|
"use strict";
|
|
3
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
4
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
5
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
6
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
-
});
|
|
11
|
-
};
|
|
12
3
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
4
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
5
|
};
|
|
15
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
7
|
const node_opcua_1 = require("node-opcua");
|
|
17
8
|
const chalk_1 = __importDefault(require("chalk"));
|
|
18
|
-
function main() {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
console.log(chalk_1.default.red.bold(" shutting down completed "));
|
|
34
|
-
});
|
|
9
|
+
async function main() {
|
|
10
|
+
const serverOptions = {
|
|
11
|
+
port: 0,
|
|
12
|
+
nodeset_filename: [node_opcua_1.nodesets.standard],
|
|
13
|
+
};
|
|
14
|
+
const server = new node_opcua_1.OPCUAServer(serverOptions);
|
|
15
|
+
await server.initialize();
|
|
16
|
+
await server.start();
|
|
17
|
+
const endpointUrl = server.getEndpointUrl();
|
|
18
|
+
console.log(chalk_1.default.yellow(" server on port :"), chalk_1.default.cyan(server.endpoints[0].port.toString()));
|
|
19
|
+
console.log(chalk_1.default.yellow(" endpointUrl :"), chalk_1.default.cyan(endpointUrl));
|
|
20
|
+
console.log(chalk_1.default.yellow("\n server now waiting for connections. CTRL+C to stop"));
|
|
21
|
+
await new Promise((resolve) => process.once("SIGINT", () => resolve()));
|
|
22
|
+
server.shutdown(1000);
|
|
23
|
+
console.log(chalk_1.default.red.bold(" shutting down completed "));
|
|
35
24
|
}
|
|
36
25
|
main();
|
|
37
26
|
//# sourceMappingURL=mini_server_on_port_0.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mini_server_on_port_0.js","sourceRoot":"","sources":["../bin/mini_server_on_port_0.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mini_server_on_port_0.js","sourceRoot":"","sources":["../bin/mini_server_on_port_0.ts"],"names":[],"mappings":";;;;;;AACA,2CAA2H;AAC3H,kDAA0B;AAC1B,KAAK,UAAU,IAAI;IAEf,MAAM,aAAa,GAAG;QAClB,IAAI,EAAE,CAAC;QACP,gBAAgB,EAAE,CAAC,qBAAQ,CAAC,QAAQ,CAAC;KACxC,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,wBAAW,CAAC,aAAa,CAAC,CAAC;IAC9C,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAC1B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAGrB,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACtG,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,wDAAwD,CAAC,CAAC,CAAC;IAEpF,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAC,EAAE,CAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC5E,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,IAAI,EAAE,CAAC"}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
const node_opcua_1 = require("node-opcua");
|
|
13
4
|
const bcryptjs_1 = require("bcryptjs");
|
|
@@ -42,40 +33,38 @@ const userManager = {
|
|
|
42
33
|
return userRole;
|
|
43
34
|
}
|
|
44
35
|
};
|
|
45
|
-
function startServer() {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
console.log("server create session");
|
|
74
|
-
});
|
|
75
|
-
return server;
|
|
36
|
+
async function startServer() {
|
|
37
|
+
server = new node_opcua_1.OPCUAServer({
|
|
38
|
+
port: port,
|
|
39
|
+
nodeset_filename: [node_opcua_1.nodesets.standard],
|
|
40
|
+
userManager,
|
|
41
|
+
maxConnectionsPerEndpoint: 1,
|
|
42
|
+
serverCapabilities: {
|
|
43
|
+
maxSessions: 2,
|
|
44
|
+
maxSubscriptions: 10,
|
|
45
|
+
maxSubscriptionsPerSession: 3
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
await server.initialize();
|
|
49
|
+
await server.start();
|
|
50
|
+
server.on("newChannel", () => {
|
|
51
|
+
console.log("server => new channel");
|
|
52
|
+
});
|
|
53
|
+
server.on("session_activated", () => {
|
|
54
|
+
console.log("server session activated");
|
|
55
|
+
});
|
|
56
|
+
server.on("connectionRefused", () => {
|
|
57
|
+
console.log("server connection refused");
|
|
58
|
+
});
|
|
59
|
+
server.on("session_closed", () => {
|
|
60
|
+
console.log("server session closed");
|
|
61
|
+
});
|
|
62
|
+
server.on("create_session", () => {
|
|
63
|
+
console.log("server create session");
|
|
76
64
|
});
|
|
65
|
+
return server;
|
|
77
66
|
}
|
|
78
|
-
(() =>
|
|
67
|
+
(async () => {
|
|
79
68
|
let counter = 0;
|
|
80
69
|
process.on("SIGINT", () => {
|
|
81
70
|
if (counter > 5) {
|
|
@@ -86,15 +75,15 @@ function startServer() {
|
|
|
86
75
|
users[0].password = (0, bcryptjs_1.hashSync)(`password${counter % 2}`, salt);
|
|
87
76
|
counter++;
|
|
88
77
|
console.log("user:", users[0].username, "(", `password${counter % 2}`, ")");
|
|
89
|
-
const server =
|
|
78
|
+
const server = await startServer();
|
|
90
79
|
console.log("server started at", server.getEndpointUrl());
|
|
91
|
-
|
|
80
|
+
await new Promise((resolve) => {
|
|
92
81
|
console.log("waiting for CTRL+C to cycle");
|
|
93
82
|
process.once("SIGINT", resolve);
|
|
94
83
|
});
|
|
95
84
|
console.log("now shutting down");
|
|
96
|
-
|
|
85
|
+
await server.shutdown(1000);
|
|
97
86
|
console.log("server stopped for maintenance");
|
|
98
87
|
}
|
|
99
|
-
})
|
|
88
|
+
})();
|
|
100
89
|
//# sourceMappingURL=server_with_changing_password.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server_with_changing_password.js","sourceRoot":"","sources":["../bin/server_with_changing_password.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server_with_changing_password.js","sourceRoot":"","sources":["../bin/server_with_changing_password.ts"],"names":[],"mappings":"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"}
|