chore: Update the sdk to match the rust and vica verse

This commit is contained in:
J H
2024-03-18 10:53:38 -06:00
parent 9715873007
commit 973284607d
27 changed files with 173 additions and 90 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 { BindOptions } from "./BindOptions";
export interface AddressInfo { username: string | null, hostId: string, bindOptions: BindOptions, suffix: string, }

View File

@@ -0,0 +1,3 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export type AllowedStatuses = "only-running" | "only-stopped" | "any" | "disabled";

View File

@@ -0,0 +1,5 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { AddSslOptions } from "./AddSslOptions";
import type { BindOptionsSecure } from "./BindOptionsSecure";
export interface BindOptions { scheme: string | null, preferredExternalPort: number, addSsl: AddSslOptions | null, secure: BindOptionsSecure | null, }

View File

@@ -0,0 +1,3 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export interface BindOptionsSecure { ssl: boolean, }

View File

@@ -1,5 +1,6 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { AddSslOptions } from "./AddSslOptions";
import type { BindKind } from "./BindKind";
import type { BindOptionsSecure } from "./BindOptionsSecure";
export interface BindParams { kind: BindKind, id: string, internalPort: number, scheme: string, preferredExternalPort: number, addSsl: AddSslOptions | null, secure: boolean, ssl: boolean, }
export interface BindParams { kind: BindKind, id: string, internalPort: number, scheme: string, preferredExternalPort: number, addSsl: AddSslOptions | null, secure: BindOptionsSecure | null, }

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 { AllowedStatuses } from "./AllowedStatuses";
export interface ExportActionParams { name: string, description: string, id: string, input: {[key: string]: any}, allowedStatuses: AllowedStatuses, group: string | null, }

View File

@@ -0,0 +1,5 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { AddressInfo } from "./AddressInfo";
import type { ServiceInterfaceType } from "./ServiceInterfaceType";
export interface ExportServiceInterfaceParams { id: string, name: string, description: string, hasPrimary: boolean, disabled: boolean, masked: boolean, addressInfo: AddressInfo, type: ServiceInterfaceType, }

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 { Callback } from "./Callback";
export interface GetPrimaryUrlParams { packageId: string | null, serviceInterfaceId: string, callback: Callback, }

View File

@@ -0,0 +1,3 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export interface GetServicePortForwardParams { packageId: string | null, internalPort: number, }

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 { Callback } from "./Callback";
export interface GetSystemSmtpParams { callback: Callback, }

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 { Callback } from "./Callback";
export interface ListServiceInterfacesParams { packageId: string | null, callback: Callback, }

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 { MountTarget } from "./MountTarget";
export interface MountParams { location: string, target: MountTarget, }

View File

@@ -0,0 +1,3 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export interface MountTarget { packageId: string, volumeId: string, path: string, readonly: boolean, }

View File

@@ -0,0 +1,3 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export interface RemoveActionParams { id: string, }

View File

@@ -0,0 +1,3 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export interface RemoveAddressParams { id: string, }

View File

@@ -0,0 +1,3 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export interface ReverseProxyBind { ip: string | null, port: number, ssl: boolean, }

View File

@@ -0,0 +1,3 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export interface ReverseProxyDestination { ip: string | null, port: number, ssl: boolean, }

View File

@@ -0,0 +1,3 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export interface ReverseProxyHttp { headers: null | {[key: string]: string}, }

View File

@@ -0,0 +1,6 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { ReverseProxyBind } from "./ReverseProxyBind";
import type { ReverseProxyDestination } from "./ReverseProxyDestination";
import type { ReverseProxyHttp } from "./ReverseProxyHttp";
export interface ReverseProxyParams { bind: ReverseProxyBind, dst: ReverseProxyDestination, http: ReverseProxyHttp, }

View File

@@ -0,0 +1,3 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export type ServiceInterfaceType = "ui" | "p2p" | "api";

View File

@@ -184,11 +184,48 @@ struct GetServicePortForwardParams {
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, TS)]
#[ts(export)]
#[serde(rename_all = "camelCase")]
struct BindOptionsSecure {
ssl: bool,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, TS)]
#[ts(export)]
#[serde(rename_all = "camelCase")]
struct BindOptions {
scheme: Option<String>,
preferred_external_port: u32,
add_ssl: Option<AddSslOptions>,
secure: Option<BindOptionsSecure>,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, TS)]
#[ts(export)]
#[serde(rename_all = "camelCase")]
struct AddressInfo {
username: Option<String>,
host_id: String,
bind_options: BindOptions,
suffix: String,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, TS)]
#[ts(export)]
#[serde(rename_all = "camelCase")]
enum ServiceInterfaceType {
Ui,
P2p,
Api,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, TS)]
#[ts(export)]
#[serde(rename_all = "camelCase")]
struct ExportServiceInterfaceParams {
#[ts(type = "string | null")]
package_id: Option<PackageId>,
service_interface_id: String,
callback: Callback,
id: String,
name: String,
description: String,
has_primary: bool,
disabled: bool,
masked: bool,
address_info: AddressInfo,
r#type: ServiceInterfaceType,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, TS)]
#[ts(export)]
@@ -277,8 +314,8 @@ struct ReverseProxyParams {
#[serde(rename_all = "camelCase")]
struct MountTarget {
#[ts(type = "string")]
packageId: PackageId,
volumeId: String,
package_id: PackageId,
volume_id: String,
path: String,
readonly: bool,
}
@@ -399,8 +436,7 @@ struct BindParams {
scheme: String,
preferred_external_port: u32,
add_ssl: Option<AddSslOptions>,
secure: bool,
ssl: bool,
secure: Option<BindOptionsSecure>,
}
async fn bind(_: AnyContext, BindParams { .. }: BindParams) -> Result<Value, Error> {
todo!()

View File

@@ -59,12 +59,13 @@ type AddSslOptions = {
preferredExternalPort: number
addXForwardedHeaders: boolean | null /** default: false */
}
type Security = { secure: false; ssl: false } | { secure: true; ssl: boolean }
type Security = { ssl: boolean }
export type BindOptions = {
scheme: Scheme
preferredExternalPort: number
addSsl: AddSslOptions | null
} & Security
secure: Security | null
}
type KnownProtocols = typeof knownProtocols
type ProtocolsWithSslVariants = {
[K in keyof KnownProtocols]: KnownProtocols[K] extends {
@@ -79,14 +80,15 @@ type NotProtocolsWithSslVariants = Exclude<
>
type BindOptionsByKnownProtocol =
| ({
| {
protocol: ProtocolsWithSslVariants
preferredExternalPort?: number
preferredExternalPort: number | null
scheme: Scheme | null
} & ({ noAddSsl: true } | { addSsl?: Partial<AddSslOptions> }))
addSsl: Partial<AddSslOptions> | null
}
| {
protocol: NotProtocolsWithSslVariants
preferredExternalPort?: number
preferredExternalPort: number | null
scheme: Scheme | null
addSsl: AddSslOptions | null
}
@@ -120,17 +122,12 @@ export class Host {
private async bindPortForUnknown(
internalPort: number,
options:
| ({
scheme: Scheme
preferredExternalPort: number
addSsl: AddSslOptions | null
} & { secure: false; ssl: false })
| ({
scheme: Scheme
preferredExternalPort: number
addSsl: AddSslOptions | null
} & { secure: true; ssl: boolean }),
options: {
scheme: Scheme
preferredExternalPort: number
addSsl: AddSslOptions | null
secure: { ssl: boolean } | null
},
) {
await this.options.effects.bind({
kind: this.options.kind,
@@ -154,18 +151,13 @@ export class Host {
knownProtocols[options.protocol].defaultPort
const addSsl = this.getAddSsl(options, protoInfo)
const security: Security = !protoInfo.secure
? {
secure: protoInfo.secure,
ssl: protoInfo.ssl,
}
: { secure: false, ssl: false }
const secure: Security | null = !protoInfo.secure ? null : { ssl: false }
const newOptions = {
scheme,
preferredExternalPort,
addSsl,
...security,
secure,
}
await this.options.effects.bind({

View File

@@ -10,6 +10,8 @@ describe("host", () => {
const fooOrigin = await foo.bindPort(80, {
protocol: "http" as const,
scheme: null,
addSsl: null,
preferredExternalPort: null,
})
const fooInterface = new ServiceInterfaceBuilder({
effects,

View File

@@ -14,41 +14,24 @@ import { GetSslCertificateParams } from "../../../core/startos/bindings/GetSslCe
import { GetSslKeyParams } from "../../../core/startos/bindings/GetSslKeyParams"
import { GetServiceInterfaceParams } from "../../../core/startos/bindings/GetServiceInterfaceParams"
import { SetDependenciesParams } from "../../../core/startos/bindings/SetDependenciesParams"
import { GetSystemSmtpParams } from "../../../core/startos/bindings/GetSystemSmtpParams"
import { GetServicePortForwardParams } from "../../../core/startos/bindings/GetServicePortForwardParams"
import { ExportServiceInterfaceParams } from "../../../core/startos/bindings/ExportServiceInterfaceParams"
import { GetPrimaryUrlParams } from "../../../core/startos/bindings/GetPrimaryUrlParams"
import { ListServiceInterfacesParams } from "../../../core/startos/bindings/ListServiceInterfacesParams"
import { RemoveAddressParams } from "../../../core/startos/bindings/RemoveAddressParams"
import { ExportActionParams } from "../../../core/startos/bindings/ExportActionParams"
import { RemoveActionParams } from "../../../core/startos/bindings/RemoveActionParams"
import { ReverseProxyParams } from "../../../core/startos/bindings/ReverseProxyParams"
import { MountParams } from "../../../core/startos/bindings/MountParams"
function typeEquality<ExpectedType>(_a: ExpectedType) {}
describe("startosTypeValidation ", () => {
test(`checking the params match`, () => {
const testInput: any = {}
typeEquality<{
[K in keyof Effects &
(
| "gitInfo"
| "echo"
| "chroot"
| "exists"
| "executeAction"
| "getConfigured"
| "stopped"
| "running"
| "restart"
| "shutdown"
| "setConfigured"
| "setMainStatus"
| "setHealth"
| "getStore"
| "setStore"
| "exposeForDependents"
| "exposeUi"
| "createOverlayedImage"
| "destroyOverlayedImage"
| "getSslCertificate"
| "getSslKey"
| "getServiceInterface"
| "clearBindings"
| "bind"
| "getHostInfo"
| "setDependencies"
)]: Effects[K] extends Function ? Parameters<Effects[K]>[0] : never
[K in keyof Effects]: Effects[K] extends (args: infer A) => any
? A
: never
}>({
executeAction: {} as ExecuteAction,
createOverlayedImage: {} as CreateOverlayedImageParams,
@@ -70,6 +53,19 @@ describe("startosTypeValidation ", () => {
getSslKey: {} as GetSslKeyParams,
getServiceInterface: {} as GetServiceInterfaceParams,
setDependencies: {} as SetDependenciesParams,
store: {} as never,
getSystemSmtp: {} as GetSystemSmtpParams,
getContainerIp: undefined,
getServicePortForward: {} as GetServicePortForwardParams,
clearServiceInterfaces: undefined,
exportServiceInterface: {} as ExportServiceInterfaceParams,
getPrimaryUrl: {} as GetPrimaryUrlParams,
listServiceInterfaces: {} as ListServiceInterfacesParams,
removeAddress: {} as RemoveAddressParams,
exportAction: {} as ExportActionParams,
removeAction: {} as RemoveActionParams,
reverseProxy: {} as ReverseProxyParams,
mount: {} as MountParams,
})
typeEquality<Parameters<Effects["executeAction"]>[0]>(
testInput as ExecuteAction,

View File

@@ -302,8 +302,7 @@ export type Effects = {
scheme: Scheme
preferredExternalPort: number
addSsl: AddSslOptions | null
secure: boolean
ssl: boolean
secure: { ssl: boolean } | null
}): Promise<void>
/** Retrieves the current hostname(s) associated with a host id */
// getHostInfo(options: {
@@ -491,9 +490,7 @@ export type Effects = {
}
http: {
// optional, will do TCP layer proxy only if not present
headers:
| ((headers: Record<string, string>) => Record<string, string>)
| null
headers: Record<string, string> | null
} | null
}): Promise<{ stop(): Promise<void> }>
restart(): void

View File

@@ -1789,8 +1789,7 @@ export module Mock {
preferredExternalPort: 443,
scheme: 'https',
},
secure: false,
ssl: false,
secure: null,
},
suffix: '',
},
@@ -1862,8 +1861,7 @@ export module Mock {
preferredExternalPort: 443,
scheme: 'https',
},
secure: false,
ssl: false,
secure: null,
},
suffix: '',
},
@@ -1931,8 +1929,7 @@ export module Mock {
scheme: 'bitcoin',
preferredExternalPort: 8333,
addSsl: null,
secure: true,
ssl: false,
secure: { ssl: false },
},
suffix: '',
},
@@ -2038,8 +2035,7 @@ export module Mock {
preferredExternalPort: 443,
scheme: 'https',
},
secure: true,
ssl: true,
secure: { ssl: true },
},
suffix: '',
},
@@ -2187,8 +2183,7 @@ export module Mock {
scheme: 'grpc',
preferredExternalPort: 10009,
addSsl: null,
secure: true,
ssl: true,
secure: { ssl: true },
},
suffix: '',
},
@@ -2256,8 +2251,7 @@ export module Mock {
scheme: 'lndconnect',
preferredExternalPort: 10009,
addSsl: null,
secure: true,
ssl: true,
secure: { ssl: true },
},
suffix: 'cert=askjdfbjadnaskjnd&macaroon=ksjbdfnhjasbndjksand',
},
@@ -2325,8 +2319,7 @@ export module Mock {
scheme: null,
preferredExternalPort: 9735,
addSsl: null,
secure: true,
ssl: true,
secure: { ssl: true },
},
suffix: '',
},

View File

@@ -414,8 +414,7 @@ export const mockPatchData: DataModel = {
preferredExternalPort: 443,
scheme: 'https',
},
secure: true,
ssl: true,
secure: { ssl: true },
},
suffix: '',
},
@@ -661,8 +660,7 @@ export const mockPatchData: DataModel = {
scheme: 'grpc',
preferredExternalPort: 10009,
addSsl: null,
secure: true,
ssl: true,
secure: { ssl: true },
},
suffix: '',
},
@@ -730,8 +728,7 @@ export const mockPatchData: DataModel = {
scheme: 'lndconnect',
preferredExternalPort: 10009,
addSsl: null,
secure: true,
ssl: true,
secure: { ssl: true },
},
suffix: 'cert=askjdfbjadnaskjnd&macaroon=ksjbdfnhjasbndjksand',
},
@@ -799,8 +796,7 @@ export const mockPatchData: DataModel = {
scheme: null,
preferredExternalPort: 9735,
addSsl: null,
secure: true,
ssl: true,
secure: { ssl: true },
},
suffix: '',
},