A gRPC based etcd client which supports etcd V3 api, written in node.js
- etcd version supported: > 3.0.0
- node.js version supported: > 0.12 (grpc only works on node 0.12 or above)
- Currently it supports some but not all v3.0 APIs (Adding). Please check out this for more about etcd official API.
- Proto files are directly copied from etcd repo, if there is something wrong, please check create an issue here and follow the etcd official proto files.
npm install etcd-node-client
- 
KV service: - put
- range
- deleteRange
- txn
- compact
 
- 
Lease service: - leaseGrant
- leaseRevoke
 
- 
Watch service: Watch service is a streaming api, please check this out 
- 
- status (same as official api)
- getLeaderId
 
- Create a client:
var etcd = require('etcd-node-client');
var endpoints = ['127.0.0.1:2379', '127.0.0.1:22379', '127.0.0.1:32379'];
var lbAlgorithm = 'RoundRobin';
var client = new etcd.Client(endpoints, lbAlgorithm);- Put a kv value:
client.kv.put({
  key: new Buffer('name'),
  value: new Buffer('mario'),
  lease: 0
},function (err, res) {
  if (err) {
    console.log(err);
  }
});- get a kv value:
client.kv.range({
  key: new Buffer('name'),
  limit: 1,
  revision: 0,
  sort_order: 'NONE',
  sort_target: 'KEY',
  serializable: true,
  keys_only: false,
  count_only: false
}, function (err, res) {
  console.log(res.kvs[0].value.toString()); //This will print 'mario'
});- Delete a kv value:
client.kv.deleteRange({
  key: new Buffer('name')
}, function (err, res) {
  if (err) {
    console.dir(err);
  }
});- Transaction ops:
client.kv.txn({
  compare: [
    {
      result: 'EQUAL',
      target: 'CREATE',
      key: new Buffer('name'),
      version: 1
    }
    ],
  success: [
    {
      request_put: {
        key: new Buffer('id'),
        value: new Buffer('123'),
        lease: 0}
    },
    {
      request_put: {
        key: new Buffer('uid'),
        value: new Buffer('yoyoyo'),
        lease: 0
      }
    }
    ],
    failure: []
}, function (err, res) {
  if (err) {
    console.dir(err);
  }
});Watch is a bit different from the official v3 api, this is how we use watch:
- Create a watcher on a key:
client.watcher.create({create_request: new Buffer('uid')});- A watcher created:
client.watcher.on('created', function (request, id) {
  console.log(request.key + ''); //request is the watch reqeust body, it contains watched key and other info.
  console.log(id); //id is the watch_id when a key watcher created successfully.
});- Cancel/delete a watcher:
client.watcher.cancel('0'); //'0' is the watcher id which associated to the watched key.- A watcher canceled/deleted:
client.watcher.on('canceled', function (id) {
  console.log(id); //id is the watcher id.
});- Events happened on a watcher:
client.watcher.on('events', function (res) {
  console.dir(res);
  /***********
  res has two fields: 'id' and 'events'
  id is the watcher id
  events is an array which contains all events happened:
  {id: '1'
   events: [ { type: 'PUT',
    kv:
     { key: [Object],
       create_revision: '449',
       mod_revision: '449',
       version: '1',
       value: [Object],
       lease: '0' },
    prev_kv: null } ]}
  **************/
});- Close the watch stream:
client.watcher.close(message); //message is optional- status
client.maintenance.status(function(err, res) {
  console.dir(res); //res is the response object
});- getLeaderId
client.maintenance.getLeaderId(function (err, res) {
  console.log(res); //res should be the leader id, like '10501334649042878790'
});- MIT.