https://github.com/aboqasem/js-piston-api-client
Client wrapper for the Piston Code Execution Engine API.
https://github.com/aboqasem/js-piston-api-client
api-client deno nodejs piston-api typescript
Last synced: 2 months ago
JSON representation
Client wrapper for the Piston Code Execution Engine API.
- Host: GitHub
- URL: https://github.com/aboqasem/js-piston-api-client
- Owner: aboqasem
- License: mit
- Created: 2022-04-12T09:50:36.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2024-04-05T00:05:39.000Z (about 1 year ago)
- Last Synced: 2025-02-20T01:38:17.072Z (3 months ago)
- Topics: api-client, deno, nodejs, piston-api, typescript
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/piston-api-client
- Size: 160 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Piston API Client
Client wrapper for the [Piston Code Execution Engine](https://github.com/engineer-man/piston) API.
Inspired by [node-piston](https://github.com/dthree/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](https://pnpm.io/)
```bash
pnpm add piston-api-client
```### Using [Yarn](https://yarnpkg.com/)
```bash
yarn add piston-api-client
```### Using [NPM](https://www.npmjs.com/)
```bash
npm i piston-api-client
```## Usage Example
```js
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
```js
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.