mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-30 12:11:56 +00:00
feat: add getOutboundGateway effect and simplify VersionGraph init/uninit
Add getOutboundGateway effect across core, container-runtime, and SDK to let services query their effective outbound gateway with callback support. Remove preInstall/uninstall hooks from VersionGraph as they are no longer needed.
This commit is contained in:
@@ -23,7 +23,7 @@ import { setupExportedUrls } from '../../base/lib/interfaces/setupExportedUrls'
|
||||
import { successFailure } from './trigger/successFailure'
|
||||
import { MultiHost, Scheme } from '../../base/lib/interfaces/Host'
|
||||
import { ServiceInterfaceBuilder } from '../../base/lib/interfaces/ServiceInterfaceBuilder'
|
||||
import { GetSystemSmtp } from './util'
|
||||
import { GetOutboundGateway, GetSystemSmtp } from './util'
|
||||
import { nullIfEmpty } from './util'
|
||||
import { getServiceInterface, getServiceInterfaces } from './util'
|
||||
import {
|
||||
@@ -107,6 +107,7 @@ export class StartSdk<Manifest extends T.SDKManifest> {
|
||||
type AlreadyExposed =
|
||||
| 'getSslCertificate'
|
||||
| 'getSystemSmtp'
|
||||
| 'getOutboundGateway'
|
||||
| 'getContainerIp'
|
||||
| 'getDataVersion'
|
||||
| 'setDataVersion'
|
||||
@@ -445,6 +446,8 @@ export class StartSdk<Manifest extends T.SDKManifest> {
|
||||
) => new ServiceInterfaceBuilder({ ...options, effects }),
|
||||
getSystemSmtp: <E extends Effects>(effects: E) =>
|
||||
new GetSystemSmtp(effects),
|
||||
getOutboundGateway: <E extends Effects>(effects: E) =>
|
||||
new GetOutboundGateway(effects),
|
||||
getSslCertificate: <E extends Effects>(
|
||||
effects: E,
|
||||
hostnames: string[],
|
||||
|
||||
@@ -64,8 +64,6 @@ export class VersionGraph<CurrentVersion extends string>
|
||||
private constructor(
|
||||
readonly current: VersionInfo<CurrentVersion>,
|
||||
versions: Array<VersionInfo<any>>,
|
||||
private readonly preInstall?: InitScriptOrFn<'install'>,
|
||||
private readonly uninstall?: UninitScript | UninitFn,
|
||||
) {
|
||||
this.graph = once(() => {
|
||||
const graph = new Graph<
|
||||
@@ -167,24 +165,8 @@ export class VersionGraph<CurrentVersion extends string>
|
||||
static of<
|
||||
CurrentVersion extends string,
|
||||
OtherVersions extends Array<VersionInfo<any>>,
|
||||
>(options: {
|
||||
current: VersionInfo<CurrentVersion>
|
||||
other: OtherVersions
|
||||
/**
|
||||
* A script to run only on fresh install
|
||||
*/
|
||||
preInstall?: InitScriptOrFn<'install'>
|
||||
/**
|
||||
* A script to run only on uninstall
|
||||
*/
|
||||
uninstall?: UninitScriptOrFn
|
||||
}) {
|
||||
return new VersionGraph(
|
||||
options.current,
|
||||
options.other,
|
||||
options.preInstall,
|
||||
options.uninstall,
|
||||
)
|
||||
>(options: { current: VersionInfo<CurrentVersion>; other: OtherVersions }) {
|
||||
return new VersionGraph(options.current, options.other)
|
||||
}
|
||||
async migrate({
|
||||
effects,
|
||||
@@ -270,7 +252,7 @@ export class VersionGraph<CurrentVersion extends string>
|
||||
.normalize(),
|
||||
)
|
||||
|
||||
async init(effects: T.Effects, kind: InitKind): Promise<void> {
|
||||
async init(effects: T.Effects): Promise<void> {
|
||||
const from = await getDataVersion(effects)
|
||||
if (from) {
|
||||
await this.migrate({
|
||||
@@ -279,10 +261,6 @@ export class VersionGraph<CurrentVersion extends string>
|
||||
to: this.currentVersion(),
|
||||
})
|
||||
} else {
|
||||
kind = 'install' // implied by !dataVersion
|
||||
if (this.preInstall)
|
||||
if ('init' in this.preInstall) await this.preInstall.init(effects, kind)
|
||||
else await this.preInstall(effects, kind)
|
||||
await effects.setDataVersion({ version: this.current.options.version })
|
||||
}
|
||||
}
|
||||
@@ -300,11 +278,6 @@ export class VersionGraph<CurrentVersion extends string>
|
||||
to: target,
|
||||
})
|
||||
}
|
||||
} else {
|
||||
if (this.uninstall)
|
||||
if ('uninit' in this.uninstall)
|
||||
await this.uninstall.uninit(effects, target)
|
||||
else await this.uninstall(effects, target)
|
||||
}
|
||||
await setDataVersion(effects, target)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user