Saltar al contenido principal

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 contratoVersión del panel Remnawave
2.7.22.7.3 – 2.7.4
2.7.02.7.0 – 2.7.2
2.6.202.6.4
2.6.192.6.3
2.6.162.6.2
2.6.12.6.1
2.6.02.6.0
2.5.202.5.7
2.5.132.5.4 - 2.5.6
2.5.92.5.0 - 2.5.3
2.4.12.4.3 - 2.4.4
2.4.02.4.0 - 2.4.2
2.3.382.3.2
2.3.352.3.0,2.3.1
2.2.342.2.6
2.2.322.2.4,2.2.5
2.2.262.2.1,2.2.2,2.2.3
2.2.242.2.0
2.1.702.1.19
2.1.682.1.18
2.1.642.1.16
2.1.622.1.15
2.1.572.1.14
2.1.412.1.13
2.1.392.1.12
2.1.332.1.8, 2.1.9, 2.1.10, 2.1.11
2.1.262.1.7
2.1.252.1.4, 2.1.5, 2.1.6
2.1.142.1.1, 2.1.2, 2.1.3
2.1.122.1.0
2.0.22.0.6, 2.0.7, 2.0.8
2.0.02.0.0, 2.0.1, 2.0.2, 2.0.3, 2.0.4, 2.0.5
0.7.261.6.14, 1.6.15, 1.6.16
0.7.211.6.13
0.7.191.6.12
0.7.161.6.6, 1.6.7, 1.6.8, 1.6.9, 1.6.10, 1.6.11
0.7.131.6.3, 1.6.4, 1.6.5
0.7.11.6.1, 1.6.2
0.7.01.6.0
0.4.51.5.7
0.3.711.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.