/** * Product-manifest type definitions per RFC paritytech/triangle-js-sdks #0001. * * Two-level shape: a `RootManifest` written as the `manifest` text record on * `.dot`, plus one `ExecutableManifest` per modality written as * the `executable` text record on `app|widget|funding|worker..dot`. * * Unrelated to [src/manifest.ts](../manifest.ts), which models the embedded * deploy manifest that ships inside each CAR. */ type IconFormat = "jpeg" | "png"; type AppVersion = readonly [number, number, number] | readonly [number, number, number, string]; interface Icon { cid: string; format: IconFormat; } interface RootManifest { $v: 1; displayName: string; description: string; icon: Icon; } interface CommonExecutableFieldsV1 { $v: 1; appVersion: AppVersion; } interface CommonAppFieldsV2 { $v: 2; kind: "app"; appVersion: AppVersion; } interface AppManifestV1 extends CommonExecutableFieldsV1 { kind: "app"; } interface WebRuntime { kind: "web"; entrypoint: string; } interface PolkaVmRuntime { kind: "polkavm"; abiVersion: 1 | 2; entrypoint: string; } interface GraphicsRequirement { abiVersion: 1; profile: "framebuffer" | "tri2d" | "webgpu-raster"; requiredFeatures: string[]; requiredLimits?: Record; } interface DeviceInputRequirement { abiVersion: 1; requiredFeatures: Array<"pointer" | "keyboard" | "touch" | "wheel" | "text" | "ime" | "focus">; } interface AudioRequirement { abiVersion: 1; requiredFeatures: string[]; } interface WebAppManifestV2 extends CommonAppFieldsV2 { runtime: WebRuntime; } interface PolkaVmAppManifestV2 extends CommonAppFieldsV2 { runtime: PolkaVmRuntime; capabilities: { graphics: GraphicsRequirement; deviceInput?: DeviceInputRequirement; audio?: AudioRequirement; }; } type AppManifestV2 = WebAppManifestV2 | PolkaVmAppManifestV2; type AppManifest = AppManifestV1 | AppManifestV2; interface WidgetDimensions { height: number[]; width?: number; } interface WidgetManifest extends CommonExecutableFieldsV1 { kind: "widget"; description?: string; dimensions: WidgetDimensions; } type FundingMode = "CARD" | "BANK" | "CRYPTO"; interface FundingManifest extends CommonExecutableFieldsV1 { kind: "funding"; modes: FundingMode[]; } interface WorkerIncludes { chat: boolean; pocket: boolean; funding?: boolean; } interface WorkerManifest extends CommonExecutableFieldsV1 { kind: "worker"; entrypoint: string; includes: WorkerIncludes; } type ExecutableManifest = AppManifest | WidgetManifest | FundingManifest | WorkerManifest; type ExecutableKind = ExecutableManifest["kind"]; interface AppExecutableConfigV1 { kind: "app"; path: string; appVersion: AppVersion; } interface AppExecutableConfigV2 { kind: "app"; path: string; manifest: AppManifestV2; } type AppExecutableConfig = AppExecutableConfigV1 | AppExecutableConfigV2; interface WidgetExecutableConfig { kind: "widget"; path: string; appVersion: AppVersion; description?: string; dimensions: WidgetDimensions; } interface FundingExecutableConfig { kind: "funding"; path: string; appVersion: AppVersion; modes: FundingMode[]; } interface WorkerExecutableConfig { kind: "worker"; path: string; appVersion: AppVersion; entrypoint: string; includes: WorkerIncludes; } type ExecutableConfig = AppExecutableConfig | WidgetExecutableConfig | FundingExecutableConfig | WorkerExecutableConfig; interface IconConfig { path: string; format: IconFormat; } interface ProductConfig { domain: string; displayName: string; description: string; icon: IconConfig; executables: ExecutableConfig[]; } /** * Identity helper that lets `bulletin-deploy.config.ts` authors get IntelliSense on the discriminated `ExecutableConfig` union. * * @example * import { defineConfig } from "bulletin-deploy"; * export default defineConfig({ domain: "demoapp.dot", ... }); */ declare function defineConfig(config: T): T; export { type AppExecutableConfig, type AppExecutableConfigV1, type AppExecutableConfigV2, type AppManifest, type AppManifestV1, type AppManifestV2, type AppVersion, type AudioRequirement, type DeviceInputRequirement, type ExecutableConfig, type ExecutableKind, type ExecutableManifest, type FundingExecutableConfig, type FundingManifest, type FundingMode, type GraphicsRequirement, type Icon, type IconConfig, type IconFormat, type PolkaVmAppManifestV2, type PolkaVmRuntime, type ProductConfig, type RootManifest, type WebAppManifestV2, type WebRuntime, type WidgetDimensions, type WidgetExecutableConfig, type WidgetManifest, type WorkerExecutableConfig, type WorkerIncludes, type WorkerManifest, defineConfig };