JS Library for interacting with Wisp instances.
The entire Wisp API is implemented and documented to the best of our abilities.
We also added a lot of documentation (i.e. response codes, special notes about weird behavior, response types, etc.) that is absent from the official docs.
- This library is confirmed working for Physgun-based instances
- This almost certainly (but remains unconfirmed) works with wisp.gg instances
- This may also work for Pterodactyl servers, but we haven't been able to confirm this yet
We're always looking for notes about what this does/doesn't work for! Please leave a note in a Discussion or Issue if you learn something
npm i wispjs@v2
Well.. anything!
Everything you normally do in your Wisp panel is fully replicable using this library.
Here are some ideas:
- Automatic GMod addon updater
- Using the
gitClone
/gitPull
/filesearch
methods. You can even compare commits to generate a diff with the github api - We use a custom (public, but not documented) GitHub action to automatically update Git addons on all of our servers
- Using the
- Remote log storage/analyzing
- Using the console callbacks on the
socket
interface, you can run a callback any time anything is printed to the console. - At CFC, we use this to send our server logs to Datadog
- You could also use this to respond to engine messages that you couldn't see in-game. For example, we used to use this to delete entities that would spam "ignoring unreasonable position" messages. We also used this to detect game exploits and respond to them in ways we couldn't from in-game.
- CFC also uses this feature to save full console output to log files (which isn't otherwise possible on panels like Physgun at the moment)
- Using the console callbacks on the
- Backups
- You can use the
Backups
interface to run a normal backup, or you can use theFilesystem
interface to manually compress/download specific files of your choosing. This gives you the freedom to make smaller backups and store them anywhere you want - all automatically
- You can use the
- Remote Control
- Using the
socket
andServers
interfaces, you can issue commands to the server in the same way as typing commands in your server's console on the web interface - This is very powerful (and dangerous, be careful about who has access to these tools!)
- CFC uses this to issue admin commands from a discord command, as well as relaying chat messages from Discord -> In-game
- Using the
(Full docs available at: https://docs.wispjs.com)
For essentially all use-cases, you will need a Wisp API Token. To generate one, visit:
https://<your.wisp.domain>/account/security
(while logged in) and generate a new Token.
In general, your WispJS code will start like this:
import { WispInterface } from "wispjs"
const domain = "<your.wisp.domain>"
// You still need to provide this even if you're not doing anything server-specific (this will be improved)
const uuid = "<the uuid of the server you'll be messing with>"
const token = "<your wisp token>"
const wisp = new WispInterface(domain, uuid, token)
In Wisp exists both an HTTP API and a WebSocket API. They do different things, but both are needed for full functionality.
In general, the Wisp Socket is used for interacting with a server instance. Things like issuing console commands, watching console output, and more.
For almost everything else in the Wisp panel, you use the HTTP API. Databases, subusers, filesystem - it's all through the HTTP API.
In WispJS, you access each of these as you might expect:
import { WispInterface } from "wispjs"
...
(async () => {
const wisp = new WispInterface(domain, uuid, token)
const api = wisp.api
const socket = wisp.socket
})()
If you need to interact with private repositories, you'll need to generate a new access token. On GitHub, these are called Personal Access Tokens (Fine Grained probably works too).
Once you generate one, you just need to pass it to your WispInterface
:
const ghPAT = "<your personal access token>"
(async () => {
const wisp = new WispInterface(domain, uuid, token, ghPAT)
const socket = wisp.socket
})()
If you don't provide this and end up needing it, WispJS will produce an error the next time it gets a Git authentication failure.
When creating a new WispInterface instance, you give it a Server UUID. All future functions that operate on a specific server will operate on that server.
You can make multiple WispInterface instances to manage multiple servers, or change the server UUID at runtime:
(async () => {
const wisp = new WispInterface(domain, uuid, token)
const api = wisp.api
// Sends to the the `uuid` server
await api.Servers.SendCommand( "some_concmd" )
// Update the UUID and send to the next server
api.core.setUUID( "newUUID" )
await api.Servers.SendCommand( "some_concmd" )
})()
This library runs just fine on GitHub Actions, Cloudflare Workers, and I'm sure many others.
Almost all Wisp Websockets are hosted on a different port, usually :8080
. Cloudflare doesn't allow us to make requests to nonstandard HTTP ports.
At CFC, we host a dead-simple Nginx instance that proxies the requests through our dedicated server. If you get stuck on this, please make an Issue and we'll try to provide a more robust solution.
This is a general rundown of the functions you can use. Please consult the docs for types, parameters, and everything you'd need to actually use them.
disconnect
Manage all IP allocations
List
Update
Used to review Audit Logs
List
Manage Server backups
List
Create
ToggleLock
Deploy
GetDownloadURL
Delete
Manage Databases
List
Delete
RotatePassword
Sync FastDL for a Server
Sync
Interact with the Filesystem
GetDirectoryContents
CreateDirectory
ReadFile
WriteFile
CopyFile
DeleteFiles
GetFileDownloadURL
RenameFile
CompressFiles
DecompressFile
Use the "Mods" feature
List
ToggleInstall
Manage Schedules
List
GetDetails
Create
Update
Trigger
Delete
CreateTask
UpdateTask
DeleteTask
A set of functions to manage a specific server
SendCommand
GetWebsocketDetails
SetName
GetDetails
GetResources
PowerRequest
Get and adjust server Startup params (default map, tickrate, etc.)
Get
Update
Create, List, Update, Delete Subusers
List
GetDetails
GetAllPermissions
Create
Update
Delete
Interact with the realtime websocket for a Server
setWebsocketDetailsPreprocessor
- Allows you to modify the reeturned websocket details (i.e. for setting up a proxy)
filesearch
- Performs the same file search as when you use the "Search" box in the Web File Browser
gitPull
- Pulls an existing git repo
gitClone
- Clones a git repo
addConsoleListener
- Adds a callback that gets called every time a new console message is received from the server
removeConsoleListener
sendCommandNonce
- Sends a command with a "nonce"