Communications
4.1 - Create endpoints
To communicate with an NIS you need an endpoint
object. The object contains the node host and port so it is easier to handle.
Examples
// Custom endpoint
var endpoint = nem.model.objects.create("endpoint")("http://myNode", 7890);
// Using sdk data
var endpoint = nem.model.objects.create("endpoint")(nem.model.nodes.defaultTestnet, nem.model.nodes.defaultPort);
4.2 - API requests
Namespace: nem.com.requests
22 NIS API calls and a few other external requests are implemented and organised in namespaces:
nem.com.requests.account
data
: Gets account dataforwarded
: Gets the account data of the account for which the given account is the delegate accountharvesting.blocks
: Gets harvested blocksharvesting.stop
: Stop delegated harvestingharvesting.start
: Start delegated harvestingnamespaces.owned
: Gets namespaces that an account ownsmosaics.owned
: Gets mosaics that an account ownsmosaics.allDefinitions
: Gets all mosaic definitions that an account ownsmosaics.definitions
: Gets mosaic definitions that an account has createdtransactions.incoming
: Gets incoming transactionstransactions.unconfirmed
: Gets unconfirmed transactionstransactions.all
: Gets all transactionstransactions.outgoing
: Gets outgoing transactionsunlockInfo
: Gets information about the maximum number of allowed harvesters and how many harvesters are already using the node
nem.com.requests.apostille
audit
: Audit an apostille
nem.com.requests.chain
height
: Gets the chain heightlastBlock
: Gets the last blocktime
: Get network time
nem.com.requests.endpoint
heartbeat
: Gets the node status
nem.com.requests.market
xem
: Gets XEM price in BTCbtc
: Gets BTC price in $
nem.com.requests.namespace
roots
: Gets root namespacesinfo
: Gets the namespace with given idmosaicDefinitions
: Gets mosaic definitions of a namespace
nem.com.requests.supernodes
all
: Gets all supernodes info
nem.com.requests.transaction
byHash
: Gets a transaction by hashannounce
: Announce a transaction to the network
4.3 - Usage
Requests are wrapped in Promises
which allow to use then()
for callbacks
Examples:
// Gets chain height
nem.com.requests.chain.height(endpoint).then(function(res) {
console.log(res)
}, function(err) {
console.error(err)
})
// Gets account data
nem.com.requests.account.data(endpoint, "TBCI2A67UQZAKCR6NS4JWAEICEIGEIM72G3MVW5S").then(...);
4.4 - More
Consult src/com/requests
for details about requests parameters.
- See
examples/browser/monitor
for browser demonstration - See
examples/node/requests
for all requests in node
4.5 - WebSockets
Namespace: nem.com.websockets
Note: For now webSockets use two versions of SockJS to work in Node (v1.1.4) and the browser (v0.3.4). Using only latest SockJS v1.1.4, gives an error when used in browser:
XMLHttpRequest cannot load http://bob.nem.ninja:7778/w/messages/info?t=1429552020306. A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'null' is therefore not allowed access.
If anyone has a solution to that, it is welcome.
nem.com.websockets.connector
create
: Create a connector object
nem.com.websockets.subscribe
errors
: Subscribes to error channel
nem.com.websockets.subscribe.account
data
: Subscribes to account data channeltransactions.recent
: Subscribes to recent transactions channeltransactions.confirmed
: Subscribes to confirmed transactions channeltransactions.unconfirmed
: Subscribes to unconfirmed transactions channel
nem.com.websockets.subscribe.chain
height
: Subscribes to new chain height channelblocks
: Subscribes to new blocks channel
nem.com.websockets.requests.account
data
: Requests account data from channeltransactions.recent
: Requests recent transactions from channel
4.6 - Usage
You first need to create a connector object pointing to the right endpoint then use this connector to open the connection.
If connection is a success, the connector.connect
function will resolve a promise in a .then()
function, in which you can request and subscribe to channels.
Subscription takes a connector and resolve in a simple callback function (.then()
not supported), where your data will be received from the channel. It acts exactly like a .on('something')
.
Parameters
create
Name | Type | Description |
---|---|---|
endpoint | object | An endpoint object (using websocket port) |
address | string | A NEM account address |
All subscription methods
Name | Type | Description |
---|---|---|
connector | object | An open connector object |
callback | function | A callback function where data will be received |
address | string | A NEM account address (optional, for custom account subscription) |
All request methods
Name | Type | Description |
---|---|---|
connector | object | An open connector object |
address | string | A NEM account address (optional, for custom account request) |
Example:
// Create an endpoint object
var endpoint = nem.model.objects.create("endpoint")(nem.model.nodes.defaultTestnet, nem.model.nodes.websocketPort);
// Address to subscribe
var address = "TBCI2A67UQZAKCR6NS4JWAEICEIGEIM72G3MVW5S";
// Create a connector object
var connector = nem.com.websockets.connector.create(endpoint, address);
// Connect using connector
connector.connect().then(function() {
// If we are here we are connected
console.log("Connected");
// Subscribe to new blocks channel
nem.com.websockets.subscribe.chain.blocks(connector, function(res) {
console.log(res);
});
// Subscribe to account data channel
nem.com.websockets.subscribe.account.data(connector, function(res) {
console.log(res);
});
// Request account data
nem.com.websockets.requests.account.data(connector);
}, function (err) {
// If we are here connection failed 10 times (1/s).
console.log(err);
});
4.7 - More
Consult src/com/websockets
for details.
- See
examples/browser/websockets
for browser demonstration - See
examples/nodejs/websockets.js
for Node demonstration