UNPKG

balena-preload

Version:

Preload balena OS images with a user application container

148 lines (147 loc) • 5.6 kB
import * as _ from 'lodash'; import * as EventEmitter from 'events'; import * as Docker from 'dockerode'; import * as streamModule from 'stream'; import type { Application, BalenaSDK, DeviceType } from 'balena-sdk'; declare class BufferBackedWritableStream extends streamModule.Writable { chunks: Buffer[]; _write(chunk: any, _enc: any, next: any): void; getData(): Buffer<ArrayBuffer>; } type Layer = { digest: any; size: number; }; type Manifest = { manifest: { layers: Layer[]; }; imageLocation: string; }; type Image = { is_stored_at__image_location: string; image_size: string; }; interface ImageInfo { preloaded_builds: string[]; supervisor_version: string; free_space: number; config: { deviceType: string; }; balena_os_version: string; } export declare const CONTAINER_NAME = "balena-image-preloader"; export declare const applicationExpandOptions: { owns__release: { $select: ("id" | "commit" | "composition" | "end_timestamp")[]; $expand: { release_image: { $select: "image"[]; $expand: { image: { $select: ("is_stored_at__image_location" | "image_size")[]; }; }; }; }; $filter: { status: "success"; }; $orderby: ({ end_timestamp: "desc"; id?: undefined; } | { id: "desc"; end_timestamp?: undefined; })[]; }; }; declare const createContainer: (docker: Docker, image: string, splashImage: string | undefined, dockerPort: number, proxy: string) => Promise<Docker.Container>; export declare class Preloader extends EventEmitter { docker: Docker; appId: number | string | undefined; commit: string | undefined; image: string; splashImage: string | undefined; proxy: any; dontCheckArch: boolean; pinDevice: boolean; certificates: string[]; additionalSpace: number | null; application: any; stdin: any; stdout: streamModule.PassThrough; stderr: streamModule.PassThrough; bufferedStderr: BufferBackedWritableStream; dockerPort: any; container: Awaited<ReturnType<typeof createContainer>> | undefined; state: any; freeSpace: number | undefined; preloadedBuilds: string[] | undefined; supervisorVersion: string | undefined; balenaOSVersion: string | undefined; config: ImageInfo['config'] | undefined; deviceTypes: DeviceType[] | undefined; balena: BalenaSDK; constructor(balena: BalenaSDK | undefined, docker: Docker, appId: number | string | undefined, commit: string | undefined, image: string, splashImage: string | undefined, proxy: any, dontCheckArch: boolean, pinDevice?: boolean, certificates?: string[], additionalSpace?: number | null); _build(): Promise<void>; _fetchDeviceTypes(): Promise<void>; _runWithSpinner<T>(name: string, fn: () => T | Promise<T>): Promise<T>; _prepareErrorHandler(): void; _runCommand(command: string, parameters: { [name: string]: any; }): Promise<unknown>; _startSpinner(name: any): void; _stopSpinner(name: any): void; _progress(name: any, percentage: any): void; _getStateVersion(): 1 | 2 | 3; _getStateWithRegistration(stateVersion: number): Promise<void>; _getStateFromTargetEndpoint(stateVersion: number): Promise<void>; _getState(): Promise<void>; _getImageInfo(): Promise<void>; _getCommit(): any; _getRelease(): any; _getServicesFromApps(apps: any): any; _getImages(): Image[]; _getImagesToPreload(): Image[]; registryRequest<RF extends 'json' | 'blob'>(url: { registryUrl: string; layerUrl: string; } | string, registryToken: string | null, headers: Record<string, string>, responseFormat: RF, followRedirect: boolean): ReturnType<typeof this.balena.request.send<RF extends 'blob' ? Blob : RF extends 'json' ? Record<string, unknown> : never>>; _getLayerSize(registryToken: any, registryUrl: any, layerUrl: any): Promise<number>; _registryUrl(imageLocation: any): string; _imageManifestUrl(imageLocation: any): string; _layerUrl(imageLocation: any, layerDigest: any): string; _getApplicationImagesManifests(imagesLocations: string[], registryToken: string): Promise<{ manifest: Manifest["manifest"]; imageLocation: string; }[]>; _getLayersSizes(manifests: Manifest[], registryToken: string): Promise<Map<any, any>>; _getApplicationSize(): Promise<number>; _getSize(): Promise<number>; _getRequiredAdditionalSpace(): Promise<number>; _supervisorLT7(): boolean; _supervisorLT13(): boolean; _getRegistryToken(images: string[]): Promise<string>; _fetchApplication(): Promise<void>; _checkImage(image: string): Promise<void>; _pluralize(count: number, thing: string): string; _deviceTypeArch(slug: string): any; prepare(): Promise<void>; cleanup(): Promise<void>; kill(): Promise<any>; _ensureCanPreload(): void; _getAppData(): (_.Omit<any, "image" | "environment" | "serviceId"> & { appId: never; env: any; imageId: any; })[] | (Pick<any, string | number | symbol> & { pinDevice: boolean; }); _getSplashImagePath(): "/splash/balena-logo.png" | "/splash/resin-logo.png"; preload(): Promise<void>; setApplication(application: Application): void; setAppIdAndCommit(appIdOrSlug: string | number, commit: string): Promise<void>; } export {};