fix(deps): update dependency node-opcua to v2.182.2 - #795
Open
renovate[bot] wants to merge 1 commit into
Open
Conversation
renovate
Bot
force-pushed
the
renovate/node-opcua-2.x
branch
from
September 5, 2026 22:28
6e38cf0 to
48f653c
Compare
renovate
Bot
force-pushed
the
renovate/node-opcua-2.x
branch
from
September 8, 2026 14:39
48f653c to
1f348ad
Compare
renovate
Bot
force-pushed
the
renovate/node-opcua-2.x
branch
from
September 9, 2026 17:52
1f348ad to
b4a010a
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
2.180.0→2.182.2Release Notes
node-opcua/node-opcua (node-opcua)
v2.182.2Compare Source
v2.182.0Compare Source
node-opcua 2.182.0
Compare:
v2.181.0...v2.182.0· 75 commits · 24 pull requests · includes the2.181.1patchA standards, conformance and correctness release. node-opcua now reads and writes the JSON NodeSet of OPC 10000-6 Annex I, the normative JSON form of an information model, and ships the OPC UA JSON encoding as an MIT package. A second week against the OPC Foundation Compliance Test Tool (CTT) fixed a dozen server defects, most of them in the Publish service: response sizing, subscription priority, keep-alive timing, disabled subscriptions, and a session-hijack hole in
CloseSession. The Local Discovery Server now enforces the authentication Part 4 requires ofRegisterServer, which is a breaking change for deployments that relied on the old defaults. Four new packages, two new companion nodesets, and a release matrix tool that keeps a project'snode-opcua-*pins on one coherent release.Highlights
.jsonl,.json,.uanodeset) load out of the box inOPCUAServer, and can be written back. Verified against the OPC Foundation's own tool.node-opcua-json: the OPC UA JSON encoding of Part 6 clause 5.4, all four schemes, now MIT-licensed inside the SDK.node-opcua-uanodeset-rdf: export an information model as JSON-LD, from an address space or over a live session, for SPARQL and OWL toolchains.npx node-opcua-versions@latest bumpmoves everynode-opcua-*dependency of a project to one coherent release.maxMessageSize, so a burst of large values no longer tears down the channel withBadTcpMessageTooLarge.CloseSessionfrom a foreign SecureChannel is rejected, and the LDS refuses unauthenticated registrations.instantiate()fix their shared children needed.Local Discovery Server: registration now requires an authenticated channel (breaking). As OPC UA Part 4 §5.5.5 and §5.5.6 require,
OPCUADiscoveryServerrefusesRegisterServerandRegisterServer2over aMessageSecurityMode.Nonechannel withBadSecurityModeInsufficient, refuses aserverUrithat does not match the ApplicationUri of the caller's certificate withBadServerUriInvalid, and its default certificate manager no longer trusts unknown certificates: an unknown registrant is refused atOpenSecureChanneland its certificate lands in therejectedfolder. Move it totrusted/certsto allow the registration; the LDS logs both paths at startup.FindServers,FindServersOnNetworkandGetEndpointsstay available without security.OPCUAServeralready registers overSignAndEncrypt, so nothing changes on the server side. Two opt-ins restore the old behaviour:allowUnsecuredRegistration: trueandautomaticallyAcceptUnknownCertificate: true. #1635A client's
MaxMessageSizeis never raised. A client asking for less than the server's 128 kB floor had its limit raised to it, then refused the messages it received. A client-supplied value is now only ever lowered, and only to what the server can manage. Shipped in 2.181.1. [c4cd90a]A Publish response fits the negotiated
maxMessageSize. Notifications were batched by count alone. Bytes now count alongside, the remainder goes out undermoreNotifications, and a single value that cannot fit even alone is delivered with itsclientHandleand timestamps butBadResponseTooLargeand no value; the item recovers when its value next fits. Behaviour is unchanged when the client announced no limit. Shipped in 2.181.1. #1626A
UserNameIdentityTokenwithout the serverNonce answersBadIdentityTokenInvalid, notBadUserAccessDenied. A wrong password still answersBadUserAccessDenied. Subclasses overriding the protectedisUserAuthorizedand calling back withfalsekeep today's behaviour. Shipped in 2.181.1. #1625Publish arbitration follows the specification. Among a session's ready subscriptions the highest priority is served first, then the longest since served; a keep-alive is owed
MaxKeepAliveCountcycles after the last data, not one; a disabled subscription keeps sending its keep-alive under its own id. Clients that relied on "whichever timer fires first" will see different ordering. #1631 #1637 #1641revisedSamplingIntervalis never below the advertisedMinSupportedSampleRate. A requested 0 on the Value attribute of an exception-based variable now answers 50 ms (the advertised floor) instead of 0. The item stays exception-based, but changes inside one interval are coalesced: the first goes out at once, the latest when the window ends. A server that setsminSupportedSampleRate: 0keeps the old answer. Event items requesting 0 are still answered 0. #1633Server/PublishSubscribeis browsable by every session.Opc.Ua.NodeSet2.xmlreserves Browse of theSecurityGroupsandKeyPushTargetsmethods toSecurityKeyServerAdmin, a role no node-opcua user manager assigns, so since 2.180.0 nobody could see them. The newensureStructureIsBrowsablegrants Browse to Anonymous and AuthenticatedUser on 25 nodes underPublishSubscribe; Read, Write and Call stay with the roles the nodeset names. #1634A denied Value read carries the requested timestamps.
BadUserAccessDenied,BadNotReadableandBadSecurityModeInsufficientresults, and a freshUncertainInitialValue, are stamped with the clock of the denial or of construction. The value stays undisclosed. #1639An instance DataType is narrowed to the one its type declares. After a load, a variable whose DataType is a strict supertype of the declaration on its type definition is moved to the declared type, provided its value already fits. On the standard 1.05.07 nodeset plus DI, ADI, AutoID, IA, Machinery, Robotics, MachineVision and GDS exactly one node moves: DI
ModelVersion, fromStringtoSemanticVersionString. #1640A Variable declaring
BaseDataTypewith no value readsBadWaitingForInitialData, as one omitting the DataType always did, instead ofUncertainInitialValue. Two nodes move in the standard nodeset, bothNumberInList. [e39919c]The loader keeps what a nodeset declared. A
DateTime<Value>,IsOptionSet,EventNotifieron an ObjectType,ReleaseStatus,AccessRestrictions,Category,DocumentationandExtensionswere dropped at load; they are carried now. A variable declaringArrayDimensions="0"no longer reads back"1". #1636Precompiled nodeset images use record schema 3. Every image cached from 2.181.0 (
imageStore: true) is rebuilt on first use; the catalog images shipped withnode-opcua-nodesetsare already regenerated. [dc4b1f6]A re-evaluated
CertificateExpirationAlarmstays silent when nothing changed. Servers with push certificate management raised a "certificate is OK" event on the Server object every minute. #1644node-opcua-serverdepends onnode-opcua-uanodeset-jsonandnode-opcua-json. A client-only consumer ofnode-opcua-clientpays nothing. [7f1b8c5]🚀 Features
The JSON NodeSet of OPC 10000-6 Annex I (#1642, #1646)
Annex I is normative in Part 6 draft 1.05.08 and specifies three serialisations of a
UANodeSet.node-opcua-uanodeset-jsonreads and writes all three:.jsonlgrep, diff.json.uanodesetnode-opcua-serverimports the package, so anOPCUAServerloads an Annex I document given its path. Formats are chosen by sniffing the content, not the extension, after inflating, so.jsonl.gzand a misnamed file both load. Importnode-opcua-uanodeset-json/jsonlto register one form only.ua-nodeset-toolon the DI nodeset: reading any form gives the same address-space digest as the NodeSet2 XML (5 923 nodes, 20 754 references); writing is a byte-identical fixpoint; the reference tool reads what node-opcua writes and reports one difference,DesignToolOnly, which node-opcua has never carried in any format.NodesetFormatsays whether a document is its own, what it depends on and what its records are. XML and the precompiled image go through the same contract, and every format gets a cache sibling. [6646887]The OPC UA JSON encoding, under MIT (#1642)
node-opcua-jsonimplements Part 6 clause 5.4 for every built-in type,Variant,DataValueandExtensionObject, in all four schemes:DeprecatedNonReversibleandDeprecatedReversible(1.04),VerboseandCompact(1.05). It is the wire form of PubSub over MQTT and AMQP and what aVariantlooks like inside an Annex I document. Moved from the PubSub workspace and relicensed; 175 tests came with it.An information model as JSON-LD (#1643)
node-opcua-uanodeset-rdfexports a model for a SPARQL store or an OWL toolchain, with the vocabulary of the OPC Foundation's reference tool. Two entry points: over a loaded address space, andnode-opcua-uanodeset-rdf/sessionover Browse and Read of a live server, which never loadsnode-opcua-address-spaceand accepts aClientSessionor aPseudoSession. Graph membership matches the reference tool exactly on DI (434 entries); the predicate under which a child is written still differs in places, and the README says so. One-way: there is no reader.node-opcua-versions: a release is a set, not a number (#1648)Only the packages that changed are bumped in a release, so
node-opcua2.181.1 legitimately depended onnode-opcua-debug2.181.0, and nothing on npm related the fifty packages beside the umbrella to a release. The new package carries the release matrix; its version is the release, and it is published last, so its presence on the registry proves the release is complete.expanddeclares thenode-opcua-*peers a Sterfive package needs at your release;--installruns the right package manager once per lockfile. 2.182.0 is the first release with a set.NodeSet2 XML from records, and the tools split by cost (#1636, #1647)
recordsToNodeset2XMLwrites a NodeSet2 document straight from the record form with no address space in the loop. Over the 33 published nodesets, records to XML to records is exact: 19 892 records, zero differences. The UA namespace itself can now be exported and reloaded (5 476 nodes identical);AllowSubTypesis written back; aDefinition Nameis spelled as the document spelled it; a 64-bit integer is a decimal string, never its low half.opcua-nodeset-image(build,xml,records,info,diff) never builds an address space; the newopcua-nodeset-live(verify,export,equivalence) does, andequivalenceshows what an implementation loses when it loads a document and writes it back.documentation/rfc/nodeset-ndjson.mdwithdraws NodeSet-NDJSON as an interchange proposal: Annex I is the normative JSON NodeSet, and the format is documented for what it is, an internal load cache frozen at schema 3. What replaces the proposal is an implementation report on Annex I, with five review comments for the annex.Nodeset catalog
node-opcua-nodesetsasnodesets.surfaceTechnologyGeneralTypesandnodesets.surfaceTechnologyOctMss, with their images and the generatednode-opcua-nodeset-surface-technology-general-typesandnode-opcua-nodeset-surface-technology-oct-msspackages. [9e2df41]Address space
instantiate()honoursoptions.references. A child linked to its parent throughHasOrderedComponent,HasPhysicalComponent,HasContainedComponentorHasAttachedComponentcan be given its parent at construction, so theNodeIdManagernames it with its parent chain (ListType_First, notFirst) and a seeded symbol table matches. No change for callers that do not pass it. #1645ensureStructureIsBrowsable(node)grants Browse to Anonymous and AuthenticatedUser on a node and its aggregates when the nodeset grants it to neither, leaving every other permission alone. #1634Server
ServerCapabilities.ConformanceUnits(i=24101) is bound. The call had been commented out since 2022, soserverCapabilities.conformanceUnitsnever reached the address space. It is read live, so the list can be filled after start. #1632OPCUADiscoveryServeremitsonRegistrationRefusedand logs each refusal with the caller's address, security mode and certificate ApplicationUri, as Part 4 asks of a Discovery Server. #1635trustListUpdatedfires on an out-of-band TrustList change (an admin script or a Pull-model client writing into the trusted folder), not only on the TrustList methods. Deliberately notapplyChangesCompleted, which implies a rotation and tears down channels. #1622⚡ Performance
DeleteMonitoredItemsorterminate()is one pass with aSetinstead of one pass per item (measured 2 ms to 47 ms superlinear at 2 000 items on a live server), and a notification's encoded size is measured once at capture rather than again at assembly. The tests count passes over the queue, not milliseconds. #1629OPCUADiscoveryServer.shutdown()no longer sleeps one second after the endpoints close; endpoint shutdown already waits for the listener. [1c61815]10166e2] [d82b91c]🐛 Fixes
Shipped in 2.181.1 (2026-09-05)
MaxMessageSizethe client asked for. [c4cd90a]PublishResponseto the channel, not to a count;BadResponseTooLargefor a value that cannot fit alone. #1626UserNameIdentityTokenwithout the serverNonce, or a blob that will not decrypt, answersBadIdentityTokenInvalid. #1625Server: sessions and Publish (OPC Foundation CTT 1.05.513)
CloseSessionsent from a SecureChannel other than the one that created or activated the session is rejected withBadSessionIdInvalid. Any channel that knew a validAuthenticationTokencould terminate another client's session. #16309df5634]revisedSamplingIntervalhonours the advertisedMinSupportedSampleRate(Monitor Basic 038);itemToMonitorwas assigned after the parameters were parsed, andmodify()rewrote a requested 0 before parsing. #1633ServerCapabilities.ConformanceUnitsis bound and encodes an empty list as a typed empty array (Base Info Core Structure 2 001). #1632Server/PublishSubscribe/SecurityGroupsare browsable again (Base Info Core Structure 002). #1634Local Discovery Server
RegisterServerandRegisterServer2require an authenticated channel and a matchingserverUri; the default store no longer auto-trusts unknown certificates. See the behaviour changes above. #1635RegisterServerwithisOnline: truefailed in the mDNS announcer on an emptymdnsServerName. [3ba0ca3]RegisterServerManagerreally falls back to aSign, then aNone, LDS endpoint when noSignAndEncryptendpoint is offered; the fallback filtered an already-empty list and could never select anything. [08e89a9]Address space and loader
MachineryOperationModeunder bothMachineryBuildingBlocksandMonitoring/Status;instantiate()produced two clones, warned "has more than one parent", and created Optional children that were not requested. Same root cause as #1143. #1638ExclusiveLimitAlarmTypeasks explicitly for theActiveStatetexts and transition times it used to receive through the optional-filter bug above. [732b4d2]BadWaitingForInitialDatawhichever way the document said it. [e39919c]DateTimevalues,IsOptionSet, ObjectTypeEventNotifier,ReleaseStatus,AccessRestrictions,Category,DocumentationandExtensions; the extension-object array binder no longer writes its length fallback into the node'sarrayDimensions. [634e18b] [e6b02e4]AllowSubTypesis written back instead of a wrongIsOptional. [90c50d8]<Description>was written onto everyArgumentthat never had one. [e6b02e4]coerceNodeId("nsu=urn:x;s=a;b")reads back: the namespace URI ends at the first semicolon, not the last, so a string identifier may contain any number.toStringhad always written that form correctly. [8b9a81c]Extensionno longer comes back bound to the default namespace with an unused declaration beside it. [02a1f7c]Other
trustListUpdated, so a server waiting to leaveNoConfigurationhears about it. #1622<rootFolder>/<name>; it isrootFolderalone, and two managers sharing arootFoldershare one store and one private key whatever theirname. Documentation and two tests, no behaviour change. #162804354d3]🗑️ Deprecations
No API is deprecated in this release. The NodeSet-NDJSON RFC is withdrawn as an interchange proposal; the
.ndjson.gzimages stay as node-opcua's own load cache, frozen at schema 3 with no cross-version guarantee.📦 Packages and dependencies
node-opcua-jsonnode-opcua-uanodeset-jsonnode-opcua-uanodeset-rdfnode-opcua-versionsnpx node-opcua-versions@latest)node-opcua-nodeset-surface-technology-general-types,node-opcua-nodeset-surface-technology-oct-mssnode-opcua-cryptostays at 5.10.1 andnode-opcua-pkiat 6.22.0.commander15 is a dependency of the new CLI only.🧹 Internal
pnpm --filter node-opcua-address-space run test:long, with a job in both GitHub and GitLab CI. [02a1f7c]pnpm run lint:ciruns the exact sequence of the CI lint job, so a branch can be checked the way CI checks it before it is pushed. [f921efb]version:lernano longer wipes and reinstalls the workspace; the release set ofnode-opcua-versionsis staged from the rootversionlifecycle andpnpm run check:releasesfails CI when it is stale. [060f132] [31a7e36]should(value)instead ofvalue!.should, whichcheck:shortcircuitnow enforces across 3 208 files. [81b522f] [325ccdf] [474cd5d]4c84741]Pull requests
Full Changelog: node-opcua/node-opcua@v2.181.0...v2.182.0
v2.181.1Compare Source
v2.181.0Compare Source
node-opcua 2.181.0 - One small step for the version number, one giant leap for nodeset loading.
Compare:
v2.180.0...v2.181.0· 180 commits · 41 pull requestsA security, conformance and performance release, and a large one. The application private key can now live in an HSM, a cloud KMS or a TPM and never be read by node-opcua. Loading a NodeSet2 file takes well under half the time it did, thanks to precompiled images shipped with
node-opcua-nodesetsand a rewritten loader. A campaign against the OPC Foundation Compliance Test Tool (CTT) fixed eleven conformance defects in Read, Write, Subscriptions, GetEndpoints and the server capabilities. The published API ofnode-opcua-address-spacehas been repaired so that what TypeScript accepts is what exists at run time. Underneath, the whole monorepo was prepared for a future ESM migration without changing the module format:require("node-opcua")works exactly as before.Highlights
OPCUAServer({ nodesets: [...] })loads paths, gzip files, URLs and streams in one list;nodeset_filenameis deprecated.subscriptionId_changedclient event when a subscription had to be recreated during reconnection (fixes #1368).node-opcua-client-browserships its ESM build again: previous tarballs had nodist-esmfolder at all.None of these need code changes for a typical application, but each one is observable.
Server operation limits now have real defaults and are enforced. In 2.180.0 every
OperationLimitsvalue defaulted to 0 (not exposed, not enforced). The defaults are now 10 000 for Read, Write, Browse, RegisterNodes, TranslateBrowsePaths and MonitoredItemsPerCall, and 1 000 for MethodCall and the two HistoryRead limits. A request above a limit is answered withBadTooManyOperations. An explicit 0 inserverCapabilities.operationLimitsstill means "not exposed". [9e06cf0] [63c4eb9] [56ef7ee]ensureObjectIsSecurekeeps the structure browsable by default. The nodes of a secured object are now visible to every session, including Anonymous, and only Read, Write and Call stay restricted to the admin roles on a signed and encrypted channel. This is what the CTT expects of the mandatoryIdentitiesof the well-known roles. Pass{ hideStructure: true }to keep the previous behaviour. [28a71d1] [a62d2cf]A subscription's first message goes out after one publishing interval, not immediately. A PublishRequest that arrived before the first tick used to be answered in about 20 ms. Part 4 §5.13.1 requires the first keep-alive after one cycle. Tests that timed the first response as "immediate" will need adjusting. [
9b9f8e7]SetMonitoringModeto the mode an item already has returnsGood. It returnedBadNothingToDoper item, which the specification reserves for the service-level result of an empty request. [833247c]OPCUAServer.initialize()rejects when a nodeset fails to load. It used to resolve with a half-loaded address space, and the engine callback was invoked twice. [50c86bf]Two write status codes corrected. A write allowed by AccessLevel but withheld by UserAccessLevel returns
BadUserAccessDenied(wasBadWriteNotSupported). WritingHistorizingon a variable without an HA Configuration returnsBadNotWritable(wasBadNotSupported). [a993a71] [b277a1b]Read semantics aligned with Part 4. A Read with MaxAge refreshes a cached ServerTimestamp older than MaxAge.
TimestampsToReturn.Sourceno longer leaks the server timestamp. ABadDataEncodingInvalidresult carries the requested timestamps. [9756c30] [3d505f7] [48668f1]GetEndpoints serves
ApplicationNamein the first requested LocaleId instead of a hard-codeden-US. [efc6ccd]Child accessors are inherited, non-enumerable, and never shadow a member.
Object.hasOwn(node, "enabledState")is nowfalseandObject.keys(node)no longer lists children, while"enabledState" in nodeistrueon every node. A child named like an attribute, a method or a field (eventNotifier,namespaceUri,Then) is no longer reachable asnode.eventNotifier; usegetChildByName. Only a structural reference (component, property, subtype, organizes) makes a dotted child; a node that is only an event source or notifier of its parent is not one. [2db095c] [30feed2]INamespacegained members. It now extendsINamespaceIterable(nodeIterator,objectTypeIterator,objectTypeCount, the same for variable, data and reference types,aliasCount). Code that implementsINamespaceby hand must add them; code that only consumes the interface is unaffected. [07d3ed4]A method's
ParentNodeIdis now translated into the address space's namespace table like every other id of a loaded nodeset; it used to be passed through as the file's string. [4f35505]dumpXmlcan no longer be imported fromnode-opcua. It was declared, exported by no module andundefinedat run time. [b22a0dd]Internal secure-channel plumbing changed.
MessageBuilder,ClientSecureChannelLayer,ServerSecureChannelLayerandOPCUAServerEndPointconstruction are tagged@internaland now work on key operations only.invalidPrivateKey,MessageBuilderOptions.privateKey, the channel and endpointgetPrivateKey()and the endpointcertificateChain+privateKeyoptions are deleted. Applications configuring security throughOPCUAClient,OPCUAServerandOPCUACertificateManageroptions are not affected. See migrating_to_key_operations.md. [3961b5f]node-opcua-nodesetsgrows by about 0.8 MB for the precompiled images. [3811e29]🚀 Features
Opaque key operations: HSM, KMS and TPM-held keys (#1587, #1591)
node-opcua can now run with a private key it can never read. An
IKeyOperationsprovider (node-opcua-crypto 5.10.1, node-opcua-pki 6.22.0) signs and decrypts on behalf of the application, and every path uses it:UserIdentityInfoX509.keyOperations) and password decryption.CreateSigningRequest(regeneratePrivateKey=false)and certificate-onlyUpdateCertificatework, the certificate being verified against the provider's public key.regeneratePrivateKey=trueand a pushed private key are refused withBadNotSupported, since key rotation belongs to the key store.OpaqueCertificateKeyPairProvider,ICertificateKeyPairProvider2.getKeyOperations(),computeSignatureAsync,asymmetricDecryptWithKeyOps,CryptoFactory.signParamsanddecryptParams.simple_server_with_hsm_style_key.ts.check:privatekeyratchet in CI keeps rawgetPrivateKey()call sites from creeping back.Nodeset loading: sources, images, and one server option (#1609, #1611, #1612, #1617, #1618)
OPCUAServertakesnodesets. Paths and sources mix in one list and load in dependency order:nodesetSourceFromGzipFile(path),nodesetSourceFromUrl(url, { init?, gzip? })andnodesetSourceFromStream(name, open)are lazy and reusable; the URL helper rejects the load with the HTTP status on a response that is not ok.nodesetLoaderOptionscarriesyieldEveryBytes,imageStore,permissionsandaccessRestrictions.generateAddressSpace(server.engine.addressSpace, [companionSource])afterserver.initialize()used to fail withCannot find namespace for http://opcfoundation.org/UA/. A model already in the address space now satisfies the requirement when its version is high enough; a lower version is an error naming both versions.Readable, a webReadableStream, an async generator, or a function opening one.yieldEveryBytes(default 8 MiB) lets the event loop turn while a large model loads, so a running server keeps answering. A source that fails half-way rejects the load with the source named..ndjson.gz) with the SHA-256 of its source in the trailer.node-opcua-nodesetsships one beside every nodeset of its catalog, and the Node.jsgenerateAddressSpacereplays<name>.ndjson.gzwhen its digest matches<name>.xml. A missing, stale or truncated image silently falls back to the XML.imageStore: falsedisables it;imageStore: trueadds a per-user cache for your own nodesets (NODE_OPCUA_NODESET_IMAGE_DIRor~/.cache/node-opcua/nodeset-images, atomic writes, oldest-first eviction).opcua-nodeset-image, a new CLI innode-opcua-address-space:build,verify,infoandexport.nodesetToImage(source)does the same from code and needs neither the file's dependencies nor an address space.namespace.toNodesetRecords(),namespace.toNodesetImage(). The round trip is the identity, andtoNodeset2XMLoutput is byte-identical to 2.180.0 (golden test). The loader now readsUAViewelements.addressSpace.registerChildAccessorNames(names)gives runtime-created browse names the same shared accessor loaded names get.Client
subscriptionId_changedevent onClientSubscription, carrying the new and previous ids, emitted when the server could not transfer the subscription during reconnection and the client rebuilt it. Documented increating_a_client_typescript.md. Fixes #1368. #1619Address space: the published API now matches the runtime (#1603, #1604, #1606, #1607)
mainandtypesofnode-opcua-address-spacenamed different modules. Twelve names type-checked and wereundefinedat run time (CloneHelper,EventNotifierFlags,exploreNode,getContextMaxMessageSize, ...), and fifty-two existed that TypeScript refused. Both entries now point at one module, and acheck-entry-pointsgate keeps them aligned across all 117 packages.AddressSpace, not two. A stub class shadowed the real one, soAddressSpace.create()through the types entry returned an object with no methods, and assigningAddressSpace.historizerFactoryreached a static nothing read.AddressSpaceis now an interface plus a const; the implementation isAddressSpaceImpl, internal.ConditionInfohas a constructor, andcalculateConditionInfois on the published alarm interface._calculateConditionInfostays, deprecated, and an override of it still wins.promoteTo*family,dumpToBSD,VariableHistorian,NodeIdManager,addElement,removeElement,bindExtObjArrayNode,createExtObjArrayNode,resolveReferenceNode,resolveReferenceType,adjustNamespaceArray,makeAttributeEventName.nodeIterator,objectTypeIteratorand friends onINamespace, so no more casts to a hand-written copy of the internals.*Implclasses no longer appear in the generated documentation; every implementation states the interface it satisfies instead of casting to it.Server
ensureObjectIsSecure(node, { hideStructure }), see the behaviour changes above. [a62d2cf]9e06cf0]makeNowDataValue()innode-opcua-data-valuebuilds a DataValue stamped with the current clock, for results made up at read time. [3d505f7]Conformance-testing address space (#1610, #1623)
Objects/CTTfolder mirrors the ~230 NodeId settings of the CTT server project (s=CTT/<setting path>), so a project file can be generated by browsing instead of maintained by hand: Variant and Image scalars, Variant arrays, Structure variables, AnalogItemType arrays, the five ArrayItemTypes with their axis properties, and the HA-profile scalars, arrays and access-right variables with in-memory history. Unresolved settings drop from 107 to 35.AlarmSourcethat is an event source of the Server object.extensionObjectoption.Tooling
node-opcua-convert-nodeset-to-javascriptescapes as$nameexactly the child names the runtime cannot expose on the parent class; the 29 generatednode-opcua-nodeset-*packages are unchanged. [3e1a96d]⚡ Performance
All figures are the maintainer's, best of N on one machine, before and after within the same pull request.
findReferencesExcalls during a standard loadgenerateAddressSpacepath vs XML, standardraiseEventwith 20 fields9e782d0]ac1deb3]readValueof a variable holding one million strings9e782d0]Opc.Ua.NodeSet2.xml(xml2json alone)How it was done, in short:
getComponentByName,getPropertyByName,getMethodByNameandgetFolderElementByNameread the same child index.findReferencesExis memoized on nodes with more than eight references, references are indexed under a packed integer rather than twoNodeId.toString()calls, no back reference is allocated for a reference the file declares from both ends, and the image records which few references need one so the end-of-load sweep is skipped on replay.WeakMapentry, display names and descriptions becomeLocalizedTexton first read, and the loader no longer binds a getter and setter pair on every variable.raiseEventfills a layout computed once per event type;Variant.clonecopies arrays of immutable element types by slicing.🐛 Fixes
Conformance (OPC Foundation CTT, Nano Embedded Device profile) (#1613, #1623)
9756c30]TimestampsToReturn.Sourcedrops the server timestamp (Attribute Read 007). [3d505f7]BadDataEncodingInvalidcarries the read timestamps (Attribute Read 037). [48668f1]picosecondsproperty; a value written at full OPC UA precision now reads back equal (Attribute Write Values 003). [500511a]28a71d1]efc6ccd]Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.