chore: update bindings and use typed params for outbound gateway API

This commit is contained in:
Aiden McClelland
2026-02-17 12:31:35 -07:00
parent 52272feb3e
commit ccafb599a6
22 changed files with 85 additions and 51 deletions

View File

@@ -0,0 +1,4 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { GatewayId } from './GatewayId'
export type SetDefaultOutboundParams = { gateway: GatewayId | null }

View File

@@ -0,0 +1,8 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { GatewayId } from './GatewayId'
import type { PackageId } from './PackageId'
export type SetOutboundGatewayParams = {
package: PackageId
gateway: GatewayId | null
}

View File

@@ -243,6 +243,7 @@ export { Sessions } from './Sessions'
export { Session } from './Session'
export { SetCountryParams } from './SetCountryParams'
export { SetDataVersionParams } from './SetDataVersionParams'
export { SetDefaultOutboundParams } from './SetDefaultOutboundParams'
export { SetDependenciesParams } from './SetDependenciesParams'
export { SetHealth } from './SetHealth'
export { SetIconParams } from './SetIconParams'
@@ -250,6 +251,7 @@ export { SetLanguageParams } from './SetLanguageParams'
export { SetMainStatusStatus } from './SetMainStatusStatus'
export { SetMainStatus } from './SetMainStatus'
export { SetNameParams } from './SetNameParams'
export { SetOutboundGatewayParams } from './SetOutboundGatewayParams'
export { SetStaticDnsParams } from './SetStaticDnsParams'
export { SetupExecuteParams } from './SetupExecuteParams'
export { SetupInfo } from './SetupInfo'

View File

@@ -1,3 +1,3 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export type AnyVerifyingKey = string;
export type AnyVerifyingKey = string

View File

@@ -1,3 +1,3 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export type Base64 = string;
export type Base64 = string

View File

@@ -1,3 +1,3 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export type Pem = string;
export type Pem = string

View File

@@ -1,3 +1,3 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export type PortForwards = { [key: string]: string };
export type PortForwards = { [key: string]: string }

View File

@@ -1,3 +1,7 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export type Session = { loggedIn: string, lastActive: string, userAgent: string | null, };
export type Session = {
loggedIn: string
lastActive: string
userAgent: string | null
}

View File

@@ -1,4 +1,4 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Session } from "./Session";
import type { Session } from './Session'
export type Sessions = { [key: string]: Session };
export type Sessions = { [key: string]: Session }

View File

@@ -1,3 +1,3 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export type SignerInfo = { name: string, };
export type SignerInfo = { name: string }

View File

@@ -1,4 +1,4 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Pem } from "./Pem";
import type { Pem } from './Pem'
export type TunnelCertData = { key: Pem, cert: Pem, };
export type TunnelCertData = { key: Pem; cert: Pem }

View File

@@ -1,9 +1,17 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { AnyVerifyingKey } from "./AnyVerifyingKey";
import type { PortForwards } from "./PortForwards";
import type { Sessions } from "./Sessions";
import type { SignerInfo } from "./SignerInfo";
import type { WebserverInfo } from "./WebserverInfo";
import type { WgServer } from "./WgServer";
import type { AnyVerifyingKey } from './AnyVerifyingKey'
import type { PortForwards } from './PortForwards'
import type { Sessions } from './Sessions'
import type { SignerInfo } from './SignerInfo'
import type { WebserverInfo } from './WebserverInfo'
import type { WgServer } from './WgServer'
export type TunnelDatabase = { webserver: WebserverInfo, sessions: Sessions, password: string | null, authPubkeys: { [key: AnyVerifyingKey]: SignerInfo }, gateways: { [key: AnyVerifyingKey]: SignerInfo }, wg: WgServer, portForwards: PortForwards, };
export type TunnelDatabase = {
webserver: WebserverInfo
sessions: Sessions
password: string | null
authPubkeys: { [key: AnyVerifyingKey]: SignerInfo }
gateways: { [key: AnyVerifyingKey]: SignerInfo }
wg: WgServer
portForwards: PortForwards
}

View File

@@ -1,4 +1,8 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { TunnelCertData } from "./TunnelCertData";
import type { TunnelCertData } from './TunnelCertData'
export type WebserverInfo = { enabled: boolean, listen: string | null, certificate: TunnelCertData | null, };
export type WebserverInfo = {
enabled: boolean
listen: string | null
certificate: TunnelCertData | null
}

View File

@@ -1,4 +1,4 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Base64 } from "./Base64";
import type { Base64 } from './Base64'
export type WgConfig = { name: string, key: Base64, psk: Base64, };
export type WgConfig = { name: string; key: Base64; psk: Base64 }

View File

@@ -1,5 +1,5 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { Base64 } from "./Base64";
import type { WgSubnetMap } from "./WgSubnetMap";
import type { Base64 } from './Base64'
import type { WgSubnetMap } from './WgSubnetMap'
export type WgServer = { port: number, key: Base64, subnets: WgSubnetMap, };
export type WgServer = { port: number; key: Base64; subnets: WgSubnetMap }

View File

@@ -1,4 +1,4 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { WgConfig } from "./WgConfig";
import type { WgConfig } from './WgConfig'
export type WgSubnetClients = { [key: string]: WgConfig };
export type WgSubnetClients = { [key: string]: WgConfig }

View File

@@ -1,4 +1,4 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { WgSubnetClients } from "./WgSubnetClients";
import type { WgSubnetClients } from './WgSubnetClients'
export type WgSubnetConfig = { name: string, clients: WgSubnetClients, };
export type WgSubnetConfig = { name: string; clients: WgSubnetClients }

View File

@@ -1,4 +1,4 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { WgSubnetConfig } from "./WgSubnetConfig";
import type { WgSubnetConfig } from './WgSubnetConfig'
export type WgSubnetMap = { [key: string]: WgSubnetConfig };
export type WgSubnetMap = { [key: string]: WgSubnetConfig }

View File

@@ -119,6 +119,10 @@ export default class ServiceActionsRoute {
ungrouped: 'General' | 'Other' = 'General'
readonly service = inject(StandardActionsService)
private readonly gateways = toSignal(
this.patch.watch$('serverInfo', 'network', 'gateways'),
)
readonly package = toSignal(
this.patch.watch$('packageData', getPkgId()).pipe(
map(pkg => {
@@ -173,11 +177,18 @@ export default class ServiceActionsRoute {
readonly outboundGatewayAction = computed(() => {
const pkg = this.package()
const gateway = pkg?.outboundGateway
const gatewayId = pkg?.outboundGateway
const gateways = this.gateways()
const gatewayName =
gatewayId && gateways?.[gatewayId]
? (gateways[gatewayId].name ??
gateways[gatewayId].ipInfo?.name ??
gatewayId)
: null
return {
name: this.i18n.transform('Set Outbound Gateway')!,
description: gateway
? `${this.i18n.transform('Current')}: ${gateway}`
description: gatewayName
? `${this.i18n.transform('Current')}: ${gatewayName}`
: `${this.i18n.transform('Current')}: ${this.i18n.transform('System')}`,
}
})
@@ -256,7 +267,7 @@ export default class ServiceActionsRoute {
try {
await this.api.setServiceOutbound({
packageId: pkg.manifest.id,
package: pkg.manifest.id,
gateway: input.gateway === SYSTEM_KEY ? null : input.gateway,
})
return true

View File

@@ -191,10 +191,9 @@ export abstract class ApiService {
abstract setDefaultOutbound(params: { gateway: string | null }): Promise<null>
abstract setServiceOutbound(params: {
packageId: string
gateway: string | null
}): Promise<null>
abstract setServiceOutbound(
params: T.SetOutboundGatewayParams,
): Promise<null>
// ** domains **

View File

@@ -276,9 +276,7 @@ export class LiveApiService extends ApiService {
})
}
async checkPort(
params: T.CheckPortParams,
): Promise<T.CheckPortRes> {
async checkPort(params: T.CheckPortParams): Promise<T.CheckPortRes> {
return this.rpcRequest({
method: 'net.gateway.check-port',
params,
@@ -369,17 +367,14 @@ export class LiveApiService extends ApiService {
return this.rpcRequest({ method: 'net.tunnel.remove', params })
}
async setDefaultOutbound(params: { gateway: string | null }): Promise<null> {
async setDefaultOutbound(params: T.SetDefaultOutboundParams): Promise<null> {
return this.rpcRequest({
method: 'net.gateway.set-default-outbound',
params,
})
}
async setServiceOutbound(params: {
packageId: string
gateway: string | null
}): Promise<null> {
async setServiceOutbound(params: T.SetOutboundGatewayParams): Promise<null> {
return this.rpcRequest({ method: 'package.set-outbound-gateway', params })
}

View File

@@ -662,15 +662,14 @@ export class MockApiService extends ApiService {
return null
}
async setServiceOutbound(params: {
packageId: string
gateway: string | null
}): Promise<null> {
async setServiceOutbound(
params: T.SetOutboundGatewayParams,
): Promise<null> {
await pauseFor(2000)
const patch = [
{
op: PatchOp.REPLACE,
path: `/packageData/${params.packageId}/outboundGateway`,
path: `/packageData/${params.package}/outboundGateway`,
value: params.gateway,
},
]