TypeScript SDK
SDK Oficial
Este SDK es oficial y mantenido por el equipo de Remnawave.
El TypeScript SDK de Remnawave es una biblioteca para interactuar cómodamente con los tipos de la RestAPI.
No contiene un cliente HTTP, por lo que debes implementarlo tú mismo.
Este SDK puede usarse en backend y frontend.
Instalación
npm install @remnawave/backend-contract
aviso
Siempre elige y fija la versión correcta del SDK para que coincida con la versión del backend de Remnawave.
| Versión del contrato | Versión del panel Remnawave |
|---|---|
| 2.7.2 | 2.7.3 – 2.7.4 |
| 2.7.0 | 2.7.0 – 2.7.2 |
| 2.6.20 | 2.6.4 |
| 2.6.19 | 2.6.3 |
| 2.6.16 | 2.6.2 |
| 2.6.1 | 2.6.1 |
| 2.6.0 | 2.6.0 |
| 2.5.20 | 2.5.7 |
| 2.5.13 | 2.5.4 - 2.5.6 |
| 2.5.9 | 2.5.0 - 2.5.3 |
| 2.4.1 | 2.4.3 - 2.4.4 |
| 2.4.0 | 2.4.0 - 2.4.2 |
| 2.3.38 | 2.3.2 |
| 2.3.35 | 2.3.0,2.3.1 |
| 2.2.34 | 2.2.6 |
| 2.2.32 | 2.2.4,2.2.5 |
| 2.2.26 | 2.2.1,2.2.2,2.2.3 |
| 2.2.24 | 2.2.0 |
| 2.1.70 | 2.1.19 |
| 2.1.68 | 2.1.18 |
| 2.1.64 | 2.1.16 |
| 2.1.62 | 2.1.15 |
| 2.1.57 | 2.1.14 |
| 2.1.41 | 2.1.13 |
| 2.1.39 | 2.1.12 |
| 2.1.33 | 2.1.8, 2.1.9, 2.1.10, 2.1.11 |
| 2.1.26 | 2.1.7 |
| 2.1.25 | 2.1.4, 2.1.5, 2.1.6 |
| 2.1.14 | 2.1.1, 2.1.2, 2.1.3 |
| 2.1.12 | 2.1.0 |
| 2.0.2 | 2.0.6, 2.0.7, 2.0.8 |
| 2.0.0 | 2.0.0, 2.0.1, 2.0.2, 2.0.3, 2.0.4, 2.0.5 |
| 0.7.26 | 1.6.14, 1.6.15, 1.6.16 |
| 0.7.21 | 1.6.13 |
| 0.7.19 | 1.6.12 |
| 0.7.16 | 1.6.6, 1.6.7, 1.6.8, 1.6.9, 1.6.10, 1.6.11 |
| 0.7.13 | 1.6.3, 1.6.4, 1.6.5 |
| 0.7.1 | 1.6.1, 1.6.2 |
| 0.7.0 | 1.6.0 |
| 0.4.5 | 1.5.7 |
| 0.3.71 | 1.5.0 |
Uso
Ejemplo de servicio backend usando Axios y 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', // usa esta cabecera para omitir las restricciones del proxy inverso del panel. Así puedes acceder al panel desde redes bridge: http://remnawave:3000
'x-forwarded-proto': 'https', // usa esta cabecera para omitir las restricciones del proxy inverso del panel. Así puedes acceder al panel desde redes bridge: 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 en la solicitud Axios GetUserByUsername:', error.message)
return {
isOk: false
}
} else {
this.logger.error('Error en la solicitud GetUserByUsername:', error)
return {
isOk: false
}
}
}
}
}
Ejemplos completos
Puedes encontrar ejemplos completos en el repositorio Remnawave Frontend y en el repositorio Remnawave Subscription page.