Refactor/sdk init (#2947)

* fixes for main

* refactor package initialization

* fixes from testing

* more fixes

* beta.21

* do not use instanceof

* closes #2921

* beta22

* allow disabling kiosk

* migration

* fix /etc/shadow

* actionRequest -> task

* beta.23
This commit is contained in:
Aiden McClelland
2025-05-21 10:24:37 -06:00
committed by GitHub
parent 46fd01c264
commit 44560c8da8
237 changed files with 1827 additions and 98800 deletions

View File

@@ -5,6 +5,7 @@ import {
} from "./input/builder/inputSpec"
import * as T from "../types"
import { once } from "../util"
import { InitScript } from "../inits"
export type Run<
A extends Record<string, any> | InputSpec<Record<string, any>>,
@@ -40,10 +41,20 @@ function mapMaybeFn<T, U>(
}
}
export class Action<
export interface ActionInfo<
Id extends T.ActionId,
InputSpecType extends Record<string, any> | InputSpec<any>,
> {
readonly id: Id
readonly _INPUT: InputSpecType
}
export class Action<
Id extends T.ActionId,
InputSpecType extends Record<string, any> | InputSpec<any>,
> implements ActionInfo<Id, InputSpecType>
{
readonly _INPUT: InputSpecType = null as any as InputSpecType
private constructor(
readonly id: Id,
private readonly metadataFn: MaybeFn<T.ActionMetadata>,
@@ -111,7 +122,8 @@ export class Action<
export class Actions<
AllActions extends Record<T.ActionId, Action<T.ActionId, any>>,
> {
> implements InitScript
{
private constructor(private readonly actions: AllActions) {}
static of(): Actions<{}> {
return new Actions({})
@@ -121,13 +133,26 @@ export class Actions<
): Actions<AllActions & { [id in A["id"]]: A }> {
return new Actions({ ...this.actions, [action.id]: action })
}
async update(options: { effects: T.Effects }): Promise<null> {
async init(effects: T.Effects): Promise<void> {
for (let action of Object.values(this.actions)) {
await action.exportMetadata(options)
const fn = async () => {
let res: (value?: undefined) => void = () => {}
const complete = new Promise((resolve) => {
res = resolve
})
const e: T.Effects = effects.child(action.id)
e.constRetry = once(() =>
complete.then(() => fn()).catch(console.error),
)
try {
await action.exportMetadata({ effects: e })
} finally {
res()
}
}
await fn()
}
await options.effects.action.clear({ except: Object.keys(this.actions) })
return null
await effects.action.clear({ except: Object.keys(this.actions) })
}
get<Id extends T.ActionId>(actionId: Id): AllActions[Id] {
return this.actions[actionId]