ilp-plugin-virtual
Version:
ILP virtual ledger plugin for directly transacting connectors
63 lines (51 loc) • 1.55 kB
JavaScript
const PluginVirtual = require('../..')
const ObjStore = require('../helpers/objStore')
const Token = require('../../src/util/token')
const crypto = require('crypto')
const base64url = require('base64url')
let plugins = [ null, null ]
const Koa = require('koa')
const parser = require('koa-bodyparser')
const router = require('koa-router')()
const app = new Koa()
const port = 23457
async function rpc (index, context) {
const plugin = plugins[index]
const { method } = context.query
const params = context.request.body
context.body = await plugin.receive(method, params)
}
router.post('/pluginA', rpc.bind(null, 0))
router.post('/pluginB', rpc.bind(null, 1))
app
.use(parser())
.use(router.routes())
.use(router.allowedMethods())
.listen(port)
exports.plugin = PluginVirtual
exports.timeout = 1000
exports.getPlugins = async function () {
if (plugins[0]) return plugins
const secretA = base64url(crypto.randomBytes(32))
const secretB = base64url(crypto.randomBytes(32))
plugins[0] = new PluginVirtual({
currencyCode: 'USD',
currencyScale: 6,
maxBalance: '1000',
secret: secretA,
peerPublicKey: Token.publicKey(secretB),
rpcUri: 'http://localhost:' + port + '/pluginB',
_store: new ObjStore()
})
plugins[1] = new PluginVirtual({
currencyCode: 'USD',
currencyScale: 6,
maxBalance: '1000',
secret: secretB,
peerPublicKey: Token.publicKey(secretA),
rpcUri: 'http://localhost:' + port + '/pluginA',
_store: new ObjStore()
})
return plugins
}