Skip to main content

TypeScript SDK

Official SDK

This SDK is official and maintained by the Remnawave team.

Remnawave TypeScript SDK is a library for convenient interaction with the RestAPI types.

It does not contain http-client, so you need to implement it yourself.

This SDK can be used in backend and frontend.

Installation

npm install @remnawave/backend-contract
warning

Always pick and pin the correct version of the SDK to match the version of the Remnawave backend.

Contract VersionRemnawave Panel Version
0.7.21.6.3
0.7.11.6.2
0.7.11.6.1
0.7.01.6.0
0.4.51.5.7
0.3.711.5.0

Usage

Example backend service, using Axios and NestJS
import axios from 'axios'

import { Injectable, Logger } from '@nestjs/common'
import { ConfigService } from '@nestjs/config'

import { GetUserByUsernameCommand } from '@remnawave/backend-contract'

import { ICommandResponse } from '../types/command-response.type'

@Injectable()
export class AxiosService {
public axiosInstance: AxiosInstance
private readonly logger = new Logger(AxiosService.name)

constructor(private readonly configService: ConfigService) {
this.axiosInstance = axios.create({
baseURL: this.configService.getOrThrow('REMNAWAVE_PANEL_URL'),
timeout: 45_000,
headers: {
'x-forwarded-for': '127.0.0.1', // use this headers to bypass the panel reverse proxy restrictions. So you can access the panel from bridge networks: http://remnawave:3000
'x-forwarded-proto': 'https', // use this headers to bypass the panel reverse proxy restrictions. So you can access the panel from bridge networks: http://remnawave:3000
Authorization: `Bearer ${this.configService.get('REMNAWAVE_API_TOKEN')}`
}
})

const caddyAuthApiToken = this.configService.get('CADDY_AUTH_API_TOKEN')

if (caddyAuthApiToken) {
this.axiosInstance.defaults.headers.common['X-Api-Key'] = caddyAuthApiToken
}
}

public async getUserByUsername(
username: string
): Promise<ICommandResponse<GetUserByUsernameCommand.Response>> {
try {
const response = await this.axiosInstance.request<GetUserByUsernameCommand.Response>({
method: GetUserByUsernameCommand.endpointDetails.REQUEST_METHOD,
url: GetUserByUsernameCommand.url(username)
})

return {
isOk: true,
response: response.data
}
} catch (error) {
if (error instanceof AxiosError) {
this.logger.error('Error in Axios GetUserByUsername Request:', error.message)

return {
isOk: false
}
} else {
this.logger.error('Error in GetUserByUsername Request:', error)

return {
isOk: false
}
}
}
}
}

Full examples

You can find full examples in the Remnawave Frontend repository and in the Remnawave Subscription page repository.