abstract-confine-runtime

0.4.0 • Public • Published

Abstract Confine Runtime

The base class for confine runtimes.

npm i abstract-confine-runtime

Example usage:

const fs = require('fs')
const { AbstractConfineRuntime, APIDescription, APIObject, APIMethod, MethodNotFound } = require('abstract-confine-runtime')

module.exports = class MyConfineRuntime extends AbstractConfineRuntime {
  constructor (opts) {
    super(opts)
    // ^ sets this.source, and this.opts
  }

  async init () {
    // do any init that's needed prior to syscalls are restricted

    // be sure to emit a 'closed' event if possible
    this.myCustomProcess.on('closed', () => {
      this.emit('closed', exitCode) // include unix-style exit code as first param
    })
  }

  async run () {
    // execute the script
  }

  async close () {
    // close the script (if possible)
  }

  configure (opts) {
    // change any options after initialization
  }

  describeAPI () {
    // return a tree structure to describe the api, see below
    return new APIDescription()
  }

  async handleAPICall (methodName, params) {
    // handle any API calls sent to the runtime by the host environment
    // if the method does not exist, throw MethodNotFound
    throw new MethodNotFound()
  }
}

The describeAPI() method needs to provide a tree of APIDescription, APIObject, and APIMethod objects, like so:

/* The API we want to represent: */
// hello()
// sub.method()
// zed()
return new APIDescription([
  new APIMethod('hello'),
  new APIObject('sub', [
    new APIMethod('method')
  ]),
  new APIMethod('zed')
])

License

MIT

Readme

Keywords

none

Package Sidebar

Install

npm i abstract-confine-runtime

Weekly Downloads

0

Version

0.4.0

License

MIT

Unpacked Size

3.47 kB

Total Files

3

Last publish

Collaborators

  • pfrazee