All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- new VrpcAdapter event being triggered just before deletion
- possibility to configure the keepalive interval
- possibility to skip receiving meta data (which is the new default)
- support for the node 16 "cause" property on error objects
- create function for VrpcAgent that allows local instance creation
-
when subscribing or publishing fails because the client is "disconnecting" an additional error event is emitted and the client is only reconnected not ended and then reconnected
-
breaking circular JSON structures using json-stringify-safe
-
changed bestEffort default to true, both on clients and agents
-
meta information is not shipped by default anymore, a new flag
requiresSchema
must instead be set to true, for that to work:- second topic
__classInfoConcise__
was introduced withmeta
tag removed - agents provide retained messages on both topics
- clients subscribe to one or the other depending on the
requiresSchema
setting
- second topic
-
using
docker compose
instead ofdocker-compose
in the test suite
- now unsubscribing from events on instances that aren't available anymore
- invalid log message triggered when JSON return values are circular
- multiple emitter registration under the same clientId
- issue when loading files that are not ending with ".js"
- issue when calling a remote function with null as part of the arguments
- missing defaultValue when parsing source code comments
- reconnection test when broker toggles offline/online
- possibility to set a user-defined MQTT client ID for both, agent and client [#56]
- possibility to set a user-defined VRPC client identity
- potential access to null object resulting in remote exception
- more defensive programming when client used an non-emitter instance for registering events
- potential application crash when VrpcNative was provided with a bad callback which got called from within C++
- switched domain and agent separator from
:
to/
when generating username
- automatic token generation when no token and not password were provided
- changed agent to always run connect with clean session
- changed generated username on agent to include domain information
- generating username when neither token nor password are provided
- changed client's username generation to as well include domain information disconnects on inactive browser pages
- added agent name info to token generator (allows to run in same folder)
- agent simplification should fix subscription issues when broker gets restarted
- removed
os.userInfo()
from generated client username as browsers do not support this function - failing mqtt reconnection when using websocket on a browser that goes inactive
- removed changing
os.cpus()
call making the clientId stable on same executable - serious bug while cleaning up event-registrations resulting from "callAll"
- again generating implicit username (when none is given) as MQTT does not support handing over password only
- removed implicit setting of username to
__token__
when authenticating with access token
- bug during un-registering obsolete event subscriptions
- non-functional event un-subscription on silent client disconnect and when
initially registered via
callAll
vrpcOn
/vrpcOff
feature to client- tests exclusively for VrpcAdapter
- support for
path.join(__dirname, <path>)
expressions when registering class
- unhandled promise rejection on initial connect timeout
- missing documentation for VrpcNative
- bug on new
vrpcOn
feature - bug while unregister event listeners via "off" or "removeAllListeners"
- error messages as triggered on remote agents (now include context info)
- removed obsolete public API from VrpcAdapter
- internal handling of EventEmitter subscriptions
- now publishing a single message per event to a fixed topic
- dispatching happens by the broker not by the agent anymore
- this saves a lot of traffic when many clients subscribe to same events
- reduced size of response messages by skipping redundant information
- order of items within RPC message
- promise rejection message as triggered on remote agents (now include context info)
- missing 'create' event in VrpcAdapter
- respecting isolation state in callAll
- cleaned API and tests from deprecation supports, those will now result in errors
- intercepting return value of EventEmitter functions and changing it from
potentially gigantic object (as it returns
this
) totrue
- leaking event registrations on remote-controlled instance when event consumer was not creator of the instance
- reduced payload of callback message by omitting the original return value
- changed prefix of mqtt client id to
vc3
andva3
, respectively
- layout and content of this repository, only javascript related code is left
- naming of public API classes is made consistent
- VrpcAdapter
- VrpcAgent
- VrpcClient (formerly VrpcRemote)
- VrpcNative (formerly VrpcLocal)
- RPC wire protocol got changed and simplified, a protocol version is attached
to every message (
v: 3
) - concept of isolated and shared proxy instances (#51) got implemented
- all namings including 'binding' got renamed for the more appropriate 'adapter'
- calling embedded C++ code got a completely new API (VrpcNative)
- injection of proxy-, instance-, and client id into proxy instance Node.js
- public accessor for client id Node.js
- signal
clientGone
on agent, indicating that a state-changing client went [Node.js]
- Bug during clientId extraction for an exited client (causing leaks for anonymous instances)
- support for event and callback registrations when using
callAll
- prevented proxyId of
VrpcRemote
from potential collisions - improved proxyId generation of
VrpcLocal
- replaced the deprecated shortid package with nanoid
- prolonged the
proxyId
to 9 characters, reducing the collision probability to 1% after having generated 19M ids - bug in
extractMemberFunctions
that would miss function in certain cases when usingregisterInstance
- missing class info messages when successfully reconnecting against a restarted broker
- compiler error when using deprecated C++ binding macros on zero arguments function
- events
create
anddelete
to VrpcAdapter [Node.js] - possibility to register already existing instances [Node.js]
- possibility to cache the proxy object [Node.js]
- performance issue when clients silently go offline while still being subscribed to callbacks [Node.js]
- issue when providing an explicit jsonDoc path while registering a class [Node.js]
- possibility to use
VRPC_CTOR
,VRPC_MEMBER_FUNCTION
andVRPC_STATIC_FUNCTION
forvoid
return values as well. This obsoletes all macros including the*_VOID_*
tag. [C++] *_X
version of all macros allowing to add function meta information. See documentation for more details. [C++]- support for C++ code that executes callbacks within threads
- fresh examples (including code) exploring the new features
- version information to agent cli [Node.js]
- userVersion configuration possibility to external agent [Node.js]
- upgraded json.hpp version to latest [C++]
- made domain and agent optional when starting commandline agents [All]
- documentation w.r.t. to meta data API [Node.js]
- old examples documentation under
docs/examples
- old example code under
examples
- domain inconsistency in the VrpcRemote API Node.js
- webpack-5 crash, using custom browser library now (#36)
- missing callback when same native addon was loaded to different VrpcLocal instances Node.js
- converted log-based deprecation warnings to
process.emitWarning()
[Node.js]
- possibility to unregister an offline agent Node.js
- Wrong
break
statements when inspecting the client cache for instances to be attached to [Node.js] - Compilation error on non-copyable classes C++-Addon
- Reference documentation for Node.js based components [Node.js]
- Feature to
callAll
instances of the same class across agents [Node.js] - Initial setup for a new docker compose based specification testing [Node.js]
- Improved protection against malformed domain and agent names [Node.js]
- Improved log message (more verbose) in case proxy creation timed out [Node.js]
- Missing events upon failed
agent.serve()
[Node.js]
- Created workaround for broken mqtt-packet sub-dependency (issue #17)
- Handling of the internal
error
event within VrpcAgent.js to avoid an exception in case the user forgot to implement that.
- Stopped supporting Node.js 8.0 and included Node.js 14 while testing [Node.js]
- Correct provisioning of
version
information when sendingoffline
agent-info message
- upgraded major versions of mqtt and argparse dependencies
- possibility to specify custom defaults for commandline based agent runs [Node.js]
- Feature of being able to call the same function across all instances of the same class (which is executed on the agent and only then send as single message to the client) [Node.js]
- Added
version
property to agent (thanks to cstim), allowing to specify a custom version which is taken up in the agent-info message and digested by the remote client [Node.js]
- Improved the in-code documentation
- Embedded comment-parser dependency into code base
- Using a wildcard topic for subscribing and unsubscribing the method of new or deleted instances respectively. This was suggested by psorowka as a performance improvement and could be reproduced with a changed class-fixture (including many more functions) in the performance test.
- Potential crash of comment-parser when faced with stand-alone comment-blocks
- Feature of parsing js-doc like comments while registering code through the adapter [Node.js]
- New option:
bestEffort
which sets allqos
levels to 0 when true [Node.js] (thanks to psorowka for suggesting this for performance improvement)
- Sequential subscription calls to single array-based one, much improving proxy creation performance [Node.js] (thanks to cstim suggesting this)
- Wrong error message in-case a re-subscription happened. Now message is fixed
and level set from
warn
todebug
- Implementation of event-registration: now dispatching multiple subscribers of a proxy on the client side, not the agent side [Node.js]
- React todos example showing what can be done with react-vrpc v1.x
- Proper un-registration of local event subscriptions on a proxy instance
through
off
orremoveListener
function [Node.js] - Missing
await
statement indelete()
method ofVrpcRemote
leading to race condition [Node.js] - using
removeListener
instead ofoff
for event un-subscription to support older version of Node.js [Node.js]
- Issues with
VrpcRemote::getInstance
ignoring defaults or throwing wrong exceptions [Node.js]
- Initial example code for a minimal Todos Application using react-vrpc
- Compilation error of addon.cpp whe using V8 12.x (solves GH-5) [C++]
- Unhandled error propagation of
VrpcRemote::#error
event when no handler is subscribed [Node.js] - Immediate failure of
VrpcRemote::connect
function when MQTT connection takes time [Node.js] - Wrong RPC timeouts when agent is online only after the
client call (but still within
timeout
time) [Node.js] - Loss of messages and re-subscription issues while
VrpcAgent
re-connects- Agent is using a persisted session while being online
- Node 12.x as additional travis test platform
- Performance test (not part of CI)
- Possible exception when using deprecated form of
VrpcRemote::getInstance
[Node.js]
- Spuriously occurring RPC timeouts on calls that actually successfully travelled the network by removing the promise-based waiting from all mqtt pub/sub calls. Turns out that those callbacks may come later then event RPC answer! [Node.js]
- Option
noWait
onVrpcRemote::getInstance
skipping any waiting for the instance to appear if not currently found in the local cache. [Node.js]
VrpcRemote::getInstance
will try first locally, second remotely to find the instance (exception is thrown after timeout) [Node.js]
- VrpcAgent: unregistration of named instances [Node.js]
- VrpcAgent: ordering of classInfo message w.r.t. named creation [Node.js]
- handling of agent answer implementation (always using single promise) [Node.js]
- improved error message on timed out functions [Node.js]
- triggering a deprecation notice upon calling
VrpcRemote::connected()
[Node.js] - naming of info messages:
__agentInfo__
__classInfo__
__clientInfo__
- implicit triggering of MQTT connection within VrpcRemote constructor [Node.js]
- waiting for retained info messages during connect [Node.js]
- explicit
VrpcRemote::connect()
function, performing the MQTT connect [Node.js] - 'error' and 'connect' event for
VrpcRemote
[Node.js]
- ambiguity between classInfo and clientInfo message subscription
- documentation
- got rid of the requirement to await twice for asynchronous agent functions [Node.js]
- two events on VrpcRemote:
instanceNew
andinstanceGone
[Node.js]
- API for
VrpcRemote::getInstance
andVrpcRemote::delete
[Node.js]- provisioning of instanceId only is acceptable now, explicit context is optional.
- old API usage is still supported, but generates a deprecation report
- automatic schema validation now injects schema defaults [Node.js]
- missing topic un-subscription after client death [Node.js]
- shortened MQTT keepalive interval (now 30s) to play nice with websocket timeouts
- validity year for all licence statements
- failures on un-serializable return values
- asynchronous timeout implementation on VrpcRemote
- topic structure of info messages
- Agent Info:
<domain>/<agent>/__info__
- Class Info:
<domain>/<agent>/<class>/__info__
- Client Info:
<domain>/<host>/<random>/__info__
- Agent Info:
- renamed
targetId
tocontext
NodeJs: VrpcRemote
- possibility to hand-over custom log-object
- handler for mqtt errors resulting in error log messages
- log notification in case of non-permitted sub/pubs
NodeJs: VrpcAgent, VrpcAdapter
- Automatic un-subscription of event-listeners belonging to dead clients
- log notification in case of non-permitted sub/pubs
- proper waiting until all INFO messages arrived
- automatic un-subscription of dead-client events
- implemented proper deletion of named and un-named instances for node.js
- a new PRC message, indicating end of proxy
- events for
VrpcRemote
indicating changes of remote agents or classes - initial set of javadoc-style public function documentation
- full adapter interface to c++ implementation
- improper asynchronicity of
serve
method inVrpcAgent
- broken event handling using
on
when used on several named instance proxies
- property
class
toclassName
in class info RPC message - renamed
callRemote
tocall
inVrpcAdapter.js
andaddon.cpp
- made several functions public in VrpcAdapter for usage as local factory
- adapted public interface of VrpcLocal to be in sync with VrpcRemote
- special function
__deleteNamed__
, turned out that__delete__
suffices
- missing instances when calling
VrpcRemote.getAvailableInstances()
- missing promise support on static functions (GH-2)
- proper association for multiple C++ instances of same class
- improved possibility to retrieve availabilities in
VrpcRemote.js
- a bug regarding C++ iterator usage (compile issue on windows)
- wrong function calls (including incorrect signature) lead to RPC error instead of runtime exception in C++
docs
folder with examples for Node.js, C++ and Python bindings- static
fromCommandline
function to VrpcAgent.js - support to remotely use event-emitters provided by Node.js agents
- documentation about rpc call details
- a bug while remotely registering async functions as direct callbacks
- sending multiple agent-info messages if several classes were registered
- incorrect internal correlationId in node.js remote-proxy
- New npm run script: build - Triggers building of addons needed for testing, examples and dynamic loading feature
catch.hpp
header to third_party, simplifying installation and build- Configurable timeout (default 5s) to rpc function calls
- Retained agent status (
<domain>/<agent>/__agent__/__static__/__info__
) published as retained message, indicating offline/online status and hostname
- Default broker for tests is now vrpc.io itself and uses tls secured mqtt
- Currently the validity of the server certificate will be trusted
- Removed the need of automatically building native add-on during vrpc installation
- Protecting yet another linux-only piece of code from windows compiler
- Protected dlfcn.h header from being compiled by windows
- Callback multiplication upon re-registering with same event name
- Token based login for node.js agent
- Additional API functions allowing to query available agents, classes, methods
- Possibility to create named instances usable by multiple proxies
- Asynchronous exceptions where not caught on remote proxy (await await - style)
- Session cleaning for re-login on node.js proxy
- Proper promise based await of client disconnect in case of VrpcRemote reconnect
- The API of VrpcRemote to take a objects instead of multiple args
- Updated version of Modern JSON lib to 3.5.0
- Changed namespace and macro names from nlohmann to vrpc
- Adapted corresponding examples, tests and documentation
- Renamed all topicPrefix to domain
- Commandline options of vrpc-agent-js and default settings
- Exchanged md4 with md5 hashing fixing missing browser support
- Adapter and Proxy can now use username and password for MQTT authentication
- ClientIDs are not longer random generated but explicitly set
- Added static keyword to wire protocol as placeholder for the instance position in case of static function
- Updated README to reflect latest documentation
- Bug that led to ambiguity given different agents serving same class names
- module.exports in index.js to also support VrpcAdapter
- module.exports in index.js to also support VrpcRemote
- VrpcAgent for node.js
- VrpcRemote for node.js
- Corresponding tests involving MQTT
- Corresponding dependencies
- Rewrote
VrpcLocal.js
using classes - Adapted tests to instantiate VrpcLocal with
new
keyword - Removed VRPC_COMPILE_AS_ADDON and introduced VRPC_WITH_DL
- Removed previously deprecated
cpp
symbolic link - Some details of the wire-protocol
- Renamed the argument identifiers from
a1
,a2
... to_1
,_2
... - Renamed
function
tomethod
- Renamed the argument identifiers from
- Renamed VrpcFactory to VrpcAdapter
- Renamed vrpc_local.py to VrpcLocal.py
- Re-registration problem for emitter based callbacks resulting in multiplied callbacks
- Nothing changed, this tag is identical to 1.1.5 for a technical issue during publishing
- Increased maximum number of inflight ("open") callbacks
- Updated dependent packages
- Low-level addon tests
- vrpc's callCpp function to throw runtime exception in case of issues
- DRYed addon.cpp, improved string conversions and exception text
- Dev-Ops issue if installing twice (
cpp
soft-link is now forced)
- Updated dependencies
- Improved documentation
- Potential memory corruption if provided with non-null terminated strings
- Missing
inline
keyword onget_signature
overload
- Link to python example project in
README.md
- Wrong path in
index.js
- Forgotten CHANGELOG.md file
- This CHANGELOG.md file
- pandoc generated REAMDE.rst file
- Renamed source folder
cpp
intovrpc
, needed to please python's setup tools- Moved all non-test code into the new
vrpc
folder - Adapted all paths involving the old
cpp
folder - Adapted the
binding.gyp
template inREADME.md
- Keeping backwards compatibility by generating
cpp
symbolic link
- Moved all non-test code into the new
- Renamed environmental
BUILD_TESTS
toBUILD_TEST
(has no external effect) - Made building of python native extension conditional
using
BUILD_TEST
andBUILD_EXAMPLE
. This was needed to provide vrpc as pure python wheel.
- Python proxy constructor to be callable with variadic arguments
- Syntactic problems in
REAMDE.md
leading to mistakes in auto rst translation
- Link address to the C++ json library in
README.md
- Unnecessary npm-dependency
shortid
- Link to nodejs project example in
README.md
- Typo and missing brace in
README.md
First public release