Skip to content

aboqasem/js-piston-api-client

Repository files navigation

Piston API Client

Client wrapper for the Piston Code Execution Engine API.

Inspired by node-piston.

Features

  • 🚀 Compatibility: Node.js and Fetch API compatible environments (e.g. Web, React-Native, etc.).
  • 🔧 Extensible: optionally provide your own HTTP methods and bring it to any JS platform if it is not in the supported environments.
  • 🤖 IntelliSense: built with TypeScript.
  • 0️⃣ No dependencies: uses native HTTP clients for requests.

Installation

Using PNPM

pnpm add piston-api-client

Using Yarn

yarn add piston-api-client

Using NPM

npm i piston-api-client

Usage Example

import { PistonClient } from 'piston-api-client';
// or for node.js
import { NodePistonClient as PistonClient } from 'piston-api-client';

(async () => {
  const pistonClient = new PistonClient({ server: 'https://emkc.org' /* default */ });

  const runtimes = await pistonClient.runtimes();
  if (runtimes.success) {
    console.log(runtimes.data);
    // [
    //   {
    //     "language": "typescript",
    //     "version": "1.7.5",
    //     "aliases": [
    //       "deno-ts",
    //       "deno"
    //     ],
    //     "runtime": "deno"
    //   },
    //   ...
    // ]
  }

  const result = await pistonClient.execute({
    language: 'node-js',
    version: '*',
    files: [
      {
        content: 'console.log(process.argv.slice(2))',
      },
    ],
    args: ['Hello', 'World'],
  });
  if (result.success) {
    console.log(result.data);
    // {
    //   "run": {
    //     "stdout": "[ 'Hello', 'World' ]\n",
    //     "stderr": "",
    //     "code": 0,
    //     "signal": null,
    //     "output": "[ 'Hello', 'World' ]\n"
    //   },
    //   "language": "javascript",
    //   "version": "16.3.0"
    // }
  }
})();

Your own HTTP methods

import axios from 'axios';
import { AbstractPistonClient } from 'piston-api-client';

export class PistonClient extends AbstractPistonClient {
  get(url, options) {
    return axios.get(url, options).then((response) => response.data);
  }

  post(url, data, options) {
    return axios.post(url, data, options).then((response) => response.data);
  }
}

Error handling

If an error occurs, the success property will be false and the error property will contain the error. Nothing will be thrown.