@tier0/opcua-client 0.1.0 → 0.2.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.
Files changed (45) hide show
  1. package/BENCHMARK.md +53 -2
  2. package/README.md +131 -14
  3. package/THIRD_PARTY_NOTICES.md +20 -0
  4. package/binding.gyp +1 -1
  5. package/lib/client.js +48 -7
  6. package/lib/native.js +25 -10
  7. package/lib/points.js +187 -21
  8. package/lib/prebuild.js +42 -0
  9. package/lib/security.js +96 -0
  10. package/node_modules/node-addon-api/LICENSE.md +9 -0
  11. package/node_modules/node-addon-api/README.md +95 -0
  12. package/node_modules/node-addon-api/common.gypi +21 -0
  13. package/node_modules/node-addon-api/except.gypi +25 -0
  14. package/node_modules/node-addon-api/index.js +14 -0
  15. package/node_modules/node-addon-api/napi-inl.deprecated.h +186 -0
  16. package/node_modules/node-addon-api/napi-inl.h +7244 -0
  17. package/node_modules/node-addon-api/napi.h +3420 -0
  18. package/node_modules/node-addon-api/node_addon_api.gyp +42 -0
  19. package/node_modules/node-addon-api/node_api.gyp +9 -0
  20. package/node_modules/node-addon-api/noexcept.gypi +26 -0
  21. package/node_modules/node-addon-api/nothing.c +0 -0
  22. package/node_modules/node-addon-api/package-support.json +21 -0
  23. package/node_modules/node-addon-api/package.json +481 -0
  24. package/node_modules/node-addon-api/tools/README.md +73 -0
  25. package/node_modules/node-addon-api/tools/check-napi.js +99 -0
  26. package/node_modules/node-addon-api/tools/clang-format.js +71 -0
  27. package/node_modules/node-addon-api/tools/conversion.js +301 -0
  28. package/nodes/connection.html +165 -6
  29. package/nodes/connection.js +99 -20
  30. package/nodes/read.html +3 -0
  31. package/nodes/read.js +3 -1
  32. package/nodes/subscribe.html +9 -3
  33. package/nodes/subscribe.js +330 -99
  34. package/nodes/write.html +3 -0
  35. package/package.json +15 -4
  36. package/prebuilds/linux-x64-musl/opcua_open62541.node +0 -0
  37. package/scripts/build-offline-prebuild.sh +15 -0
  38. package/scripts/build-open62541.sh +14 -4
  39. package/scripts/build-test-server.sh +23 -0
  40. package/scripts/install.js +28 -0
  41. package/scripts/verify-offline-package.js +20 -0
  42. package/scripts/verify-runtime.js +20 -0
  43. package/src/addon.cc +707 -119
  44. package/vendor/open62541-LICENSE +373 -0
  45. package/vendor/open62541-v1.4.16.tar.gz +0 -0
@@ -6,18 +6,28 @@ ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd -P)"
6
6
  VERSION="${OPEN62541_VERSION:-1.4.16}"
7
7
  BUILD_ROOT="${ROOT_DIR}/.build/open62541-src"
8
8
  INSTALL_ROOT="${OPEN62541_PREFIX:-${ROOT_DIR}/.build/open62541}"
9
+ VENDORED_ARCHIVE="${ROOT_DIR}/vendor/open62541-v${VERSION}.tar.gz"
9
10
 
10
- if [[ ! -d "${BUILD_ROOT}/.git" ]]; then
11
+ if [[ ! -f "${BUILD_ROOT}/CMakeLists.txt" ]]; then
11
12
  rm -rf "${BUILD_ROOT}"
12
- git clone --depth 1 --branch "v${VERSION}" \
13
- https://github.com/open62541/open62541.git "${BUILD_ROOT}"
13
+ mkdir -p "${BUILD_ROOT}"
14
+ if [[ -f "${VENDORED_ARCHIVE}" ]]; then
15
+ tar -xzf "${VENDORED_ARCHIVE}" --strip-components=1 -C "${BUILD_ROOT}"
16
+ elif [[ "${OPCUA_CLIENT_OFFLINE_ONLY:-0}" == "1" ]]; then
17
+ echo "Bundled open62541 archive is missing: ${VENDORED_ARCHIVE}" >&2
18
+ exit 1
19
+ else
20
+ rm -rf "${BUILD_ROOT}"
21
+ git clone --depth 1 --branch "v${VERSION}" \
22
+ https://github.com/open62541/open62541.git "${BUILD_ROOT}"
23
+ fi
14
24
  fi
15
25
 
16
26
  cmake -S "${BUILD_ROOT}" -B "${BUILD_ROOT}/build" \
17
27
  -DCMAKE_BUILD_TYPE=Release \
18
28
  -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
19
29
  -DBUILD_SHARED_LIBS=OFF \
20
- -DUA_ENABLE_ENCRYPTION=OFF \
30
+ -DUA_ENABLE_ENCRYPTION=OPENSSL \
21
31
  -DUA_BUILD_EXAMPLES=OFF \
22
32
  -DUA_BUILD_UNIT_TESTS=OFF \
23
33
  -DCMAKE_INSTALL_PREFIX="${INSTALL_ROOT}"
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
5
+ ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd -P)"
6
+ OPEN62541_ROOT="${OPEN62541_PREFIX:-${ROOT_DIR}/.build/open62541}"
7
+ OUTPUT="${OPCUA_TEST_SERVER_BINARY:-${ROOT_DIR}/build/open62541-test-server}"
8
+ LIBRARY="${OPEN62541_ROOT}/lib/libopen62541.a"
9
+
10
+ if [[ ! -f "${LIBRARY}" ]]; then
11
+ echo "open62541 static library not found: ${LIBRARY}" >&2
12
+ echo "Run npm run build:open62541 first." >&2
13
+ exit 1
14
+ fi
15
+
16
+ mkdir -p "$(dirname "${OUTPUT}")"
17
+ "${CC:-cc}" -std=c99 -O2 -Wall -Wextra \
18
+ -I"${OPEN62541_ROOT}/include" \
19
+ "${ROOT_DIR}/test/fixture/open62541_server.c" \
20
+ "${LIBRARY}" -lssl -lcrypto -lpthread -lm -ldl \
21
+ -o "${OUTPUT}"
22
+
23
+ echo "Built ${OUTPUT}"
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ const path = require('node:path');
4
+ const { spawnSync } = require('node:child_process');
5
+ const { prebuildKey, resolvePrebuilt } = require('../lib/prebuild');
6
+
7
+ const packageRoot = path.resolve(__dirname, '..');
8
+ const prebuilt = resolvePrebuilt(packageRoot);
9
+
10
+ if (prebuilt && process.env.OPCUA_CLIENT_FORCE_BUILD !== '1') {
11
+ console.log(`Using bundled OPC UA native addon for ${prebuildKey()}`);
12
+ process.exit(0);
13
+ }
14
+
15
+ function run(command, args) {
16
+ const result = spawnSync(command, args, {
17
+ cwd: packageRoot,
18
+ env: process.env,
19
+ stdio: 'inherit',
20
+ shell: process.platform === 'win32',
21
+ });
22
+ if (result.error) throw result.error;
23
+ if (result.status !== 0) process.exit(result.status || 1);
24
+ }
25
+
26
+ console.log(`No bundled native addon for ${prebuildKey()}; building from bundled source`);
27
+ run('bash', ['scripts/build-open62541.sh']);
28
+ run('node-gyp', ['rebuild']);
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ const fs = require('node:fs');
4
+ const path = require('node:path');
5
+
6
+ const root = path.resolve(__dirname, '..');
7
+ const required = [
8
+ 'vendor/open62541-v1.4.16.tar.gz',
9
+ 'vendor/open62541-LICENSE',
10
+ 'prebuilds/linux-x64-musl/opcua_open62541.node',
11
+ 'node_modules/node-addon-api/package.json',
12
+ ];
13
+ const missing = required.filter((entry) => !fs.existsSync(path.join(root, entry)));
14
+
15
+ if (missing.length) {
16
+ console.error(`Offline package is incomplete:\n- ${missing.join('\n- ')}`);
17
+ process.exit(1);
18
+ }
19
+
20
+ console.log('Offline package inputs verified');
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ const { prebuildKey } = require('../lib/prebuild');
4
+ const { loadAddon } = require('../lib/native');
5
+
6
+ const addon = loadAddon();
7
+ const required = [
8
+ 'connectAsync',
9
+ 'disconnectAsync',
10
+ 'browseAsync',
11
+ 'readManyAsync',
12
+ 'writeManyAsync',
13
+ 'createSubscriptionAsync',
14
+ ];
15
+ const missing = required.filter((name) => typeof addon[name] !== 'function');
16
+ if (missing.length) {
17
+ throw new Error(`Native addon is missing exports: ${missing.join(', ')}`);
18
+ }
19
+
20
+ console.log(`Offline native addon loaded for ${prebuildKey()} on ${process.version}`);