https://github.com/dthree/node-piston
Node.js client wrapper for the Piston API
https://github.com/dthree/node-piston
Last synced: about 1 year ago
JSON representation
Node.js client wrapper for the Piston API
- Host: GitHub
- URL: https://github.com/dthree/node-piston
- Owner: dthree
- License: mit
- Created: 2021-06-23T16:59:40.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-05-15T16:08:12.000Z (about 3 years ago)
- Last Synced: 2024-09-15T21:26:30.768Z (almost 2 years ago)
- Language: JavaScript
- Size: 26.4 KB
- Stars: 26
- Watchers: 3
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# Piston Node Client
A Node.js client wrapper for the [Piston API](https://github.com/engineer-man/piston).
Piston is a high performance general purpose code execution engine. It excels at running untrusted and possibly malicious code without fear from any harmful effects.
## Installation
```bash
npm install piston-client
```
### Usage Example
```js
import piston from "piston-client";
(async () => {
const client = piston({ server: "https://emkc.org" });
const runtimes = await client.runtimes();
// [{ language: 'python', version: '3.9.4', aliases: ['py'] }, ...]
const result = await client.execute('python', 'print("Hello World!")');
// { language: 'python', version: '3.9.4', run: {
// stdout: 'Hello World!\n',
// stderr: '',
// code: 0,
// signal: null,
// output: 'Hello World!\n'
// }}
})();
```
## Documentation
### `piston(options)`
```js
import piston from "piston-client";
const client = piston({});
```
Creates a new client. Accepts an `options` object as its first argument.
##### Options
- `server` - The domain name of the Piston server to be used. Defaults to `https://emkc.org`.
### `client.runtimes()`
```js
import piston from "piston-client";
(async () => {
const client = piston();
const runtimes = await client.runtimes();
})();
```
Returns an array of available runtimes. [See Piston documentation for the runtimes endpoint](https://github.com/engineer-man/piston#runtimes-endpoint).
### `client.execute(language, code, [config])`
Execute arbitrary code for a given language. Additional, optional config can be passed in the third parameter.
```js
import piston from "piston-client";
(async () => {
const client = piston();
const result = await client.execute('javascript', 'console.log("Hello world!")', { language: '3.9.4 '});
})();
```
##### Options
- `language` - Expects a string of the language.
- `code` - Expects a string of the code to execute.
- `config` - Expects an object with additional config. See [Piston documentation](https://github.com/engineer-man/piston#execute-endpoint) for the available config options.
### `client.execute(config)`
To execute Piston with more fine-tuned control, pass in a `config` object as the first and only parameter.
```js
import piston from "piston-client";
(async () => {
const client = piston();
const result = await client.execute({
"language": "js",
"version": "15.10.0",
"files": [{
"name": "my_cool_code.js",
"content": "console.log(process.argv)"
}],
"stdin": "",
"args": ["1", "2", "3"],
"compileTimeout": 10000,
"runTimeout": 3000,
"compileMemoryLimit": -1,
"runMemoryLimit": -1
});
})();
```
##### Options
See [Piston documentation](https://github.com/engineer-man/piston#execute-endpoint) for the available options. The only difference is that the option are in camelCase as opposed to snake_case.
### Error handling
Any error will return an object with the following signature:
```js
{ success: false, error: Error }
```
No errors are thrown so wrapping in `try / catch` is unnecessary.
## License
MIT © [DC](https://github.com/dthree)