# xn

> create axon powered client/server rpcs

Latest version **1.0.0** (published 2018-01-26) · MIT license · 0 weekly downloads

## Install

```sh
npm install xn
pnpm add xn
yarn add xn
bun add xn
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2018-01-26 |
| First published | 2013-10-14 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=4.0.0 |
| Dependencies | 2 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | yaniv kessler |
| Maintainers | kessler, yaniv |
| Keywords | axon, rpc, zeromq, microservices, micro-services, microservice, micro-service, engine |

## Links

- npm: https://www.npmjs.com/package/xn
- npm.io page: https://npm.io/package/xn

## Dependencies (2)

- [debug](https://npm.io/package/debug.md) ^2.2.0
- [semver](https://npm.io/package/semver.md) ^5.1.0

## Recent versions

- 1.0.0 (latest) — 2018-01-26
- 0.2.1 — 2018-01-23
- 0.2.0 — 2016-08-08
- 0.1.1 — 2016-08-08
- 0.1.0 — 2016-08-08
- 0.0.6 — 2016-06-26
- 0.0.5 — 2016-06-26
- 0.0.4 — 2016-06-25
- 0.0.3 — 2016-06-25
- 0.0.2 — 2016-06-22
- 0.0.1 — 2013-10-14

## README

# xn

**a distilled engine for creating RPC Servers/Clients**

- Expose any kind of async api, including whole modules, remotely
- Use any kind of transport layer that supports request/response semantics
- Expose different versions of the same api using semver

[![npm status](http://img.shields.io/npm/v/xn.svg?style=flat-square)](https://www.npmjs.org/package/xn) 

## example

### expose core filesystem module using axon
```
npm init
npm i --save xn axon
```

```js
const xn = require('./index')
const axon = require('axon')

// create the rpc server
let server = new xn.RpcServer()
server.requireApiModule('fs')
server.addApiFunction('moo', (a, reply) => {
    reply(null, a + 'b')
})

let myApi = {
    ping: reply => reply(null, 'pong'),
    echo: (what, reply) => reply(null, what)
}
server.addApiModule('meow', myApi)

// create the axon sockets
let rep = axon.socket('rep')
let req = axon.socket('req')

rep.bind(3000)
req.connect(3000)

rep.on('message', (message, reply) => {
    // integrate xn server with axon
    server.dispatch(message, reply)
})

// create the rpc client
let client = new xn.RpcClient({
    send: (message, cb) => {
        // integrate xn client with axon
        req.send(message, cb)
    }
})

// expose the remote calls on a local object
client.refresh((err, rpc) => {
    if (err) return done(err)

    // rpc === client.rpc
    rpc.fs.writeFile('myfile', 'test', (err) => {
        console.log(err ? err : 'success')
    })
})

// it is possible to skip the refresh() stage and send an api call immediately:
let message = {
    apiName: 'fs',
    propertyName: 'writeFile',
    args: ['myfile', 'test']
}

client.sendMessage(message, (err) => {
    console.log(err ? err : 'success')
})
```
For further examples see [this test](/test/integration.test.js)

## api 
## license

[MIT](http://opensource.org/licenses/MIT) © yaniv kessler

---
_Source: https://npm.io/package/xn · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
