feat: add baseos contracts

This commit is contained in:
2026-05-07 15:53:16 +00:00
parent 33643e83f7
commit ff144e2826
5 changed files with 118 additions and 1 deletions
+75
View File
@@ -0,0 +1,75 @@
export type TBaseOsRuntimeLevel = 'app-layer' | 'host-os' | 'target-state';
export type TBaseOsCloudlyConnectionStatus =
| 'not-configured'
| 'connecting'
| 'connected'
| 'failed';
export interface IBalenaDeviceState {
api_port?: number;
ip_address?: string;
mac_address?: string;
commit?: string;
status?: string;
os_version?: string;
supervisor_version?: string;
update_pending?: boolean;
update_downloaded?: boolean;
update_failed?: boolean;
download_progress?: number | null;
[key: string]: unknown;
}
export interface IBalenaStateStatus {
status?: string;
appState?: string;
overallDownloadProgress?: number | null;
release?: string;
containers?: Array<Record<string, unknown>>;
images?: Array<Record<string, unknown>>;
[key: string]: unknown;
}
export interface IBaseOsRuntimeInfo {
runtime: 'baseos';
runtimeLevel: TBaseOsRuntimeLevel;
nodeId: string;
cloudlyUrl?: string;
cloudlyConnectionStatus: TBaseOsCloudlyConnectionStatus;
supervisorAvailable: boolean;
supervisorAddress?: string;
deviceState?: IBalenaDeviceState;
stateStatus?: IBalenaStateStatus;
checkedAt: number;
}
export interface IBaseOsDesiredState {
release?: string;
targetState?: Record<string, unknown>;
updatedAt?: number;
}
export interface IBaseOsNode {
id: string;
data: {
runtimeInfo: IBaseOsRuntimeInfo;
desiredState?: IBaseOsDesiredState;
createdAt: number;
updatedAt: number;
lastHeartbeatAt?: number;
};
}
export interface IBaseOsRegisterResult {
nodeId?: string;
nodeToken?: string;
accepted: boolean;
message?: string;
}
export interface IBaseOsHeartbeatResult {
accepted: boolean;
message?: string;
desiredState?: IBaseOsDesiredState;
}
+1
View File
@@ -12,6 +12,7 @@ export * from './registry.js';
export * from './secretbundle.js'; export * from './secretbundle.js';
export * from './secretgroup.js'; export * from './secretgroup.js';
export * from './baremetal.js'; export * from './baremetal.js';
export * from './baseos.js';
export * from './backup.js'; export * from './backup.js';
export * from './clusternode.js'; export * from './clusternode.js';
export * from './settings.js'; export * from './settings.js';
+4 -1
View File
@@ -8,6 +8,9 @@ export interface ICloudlySettings {
// Cloud Provider Tokens // Cloud Provider Tokens
hetznerToken?: string; hetznerToken?: string;
cloudflareToken?: string; cloudflareToken?: string;
// BaseOS enrollment
baseosJoinToken?: string;
// AWS Credentials // AWS Credentials
awsAccessKey?: string; awsAccessKey?: string;
@@ -53,4 +56,4 @@ export interface ICloudlySettings {
*/ */
export type ICloudlySettingsMasked = { export type ICloudlySettingsMasked = {
[K in keyof ICloudlySettings]: string | undefined; [K in keyof ICloudlySettings]: string | undefined;
}; };
+36
View File
@@ -0,0 +1,36 @@
import type {
IBaseOsHeartbeatResult,
IBaseOsNode,
IBaseOsRegisterResult,
IBaseOsRuntimeInfo,
} from '../data/baseos.js';
import type { IIdentity } from '../data/user.js';
export interface IRequest_BaseOs_Cloudly_RegisterNode {
method: 'baseOsRegisterNode';
request: {
joinToken?: string;
nodeToken?: string;
status: IBaseOsRuntimeInfo;
};
response: IBaseOsRegisterResult;
}
export interface IRequest_BaseOs_Cloudly_SendHeartbeat {
method: 'baseOsSendHeartbeat';
request: {
nodeToken: string;
status: IBaseOsRuntimeInfo;
};
response: IBaseOsHeartbeatResult;
}
export interface IRequest_Any_Cloudly_GetBaseOsNodes {
method: 'getBaseOsNodes';
request: {
identity: IIdentity;
};
response: {
nodes: IBaseOsNode[];
};
}
+2
View File
@@ -2,6 +2,7 @@ import * as plugins from '../plugins.js';
import * as adminRequests from './admin.js'; import * as adminRequests from './admin.js';
import * as baremetalRequests from './baremetal.js'; import * as baremetalRequests from './baremetal.js';
import * as baseOsRequests from './baseos.js';
import * as backupRequests from './backup.js'; import * as backupRequests from './backup.js';
import * as certificateRequests from './certificate.js'; import * as certificateRequests from './certificate.js';
import * as clusterRequests from './cluster.js'; import * as clusterRequests from './cluster.js';
@@ -30,6 +31,7 @@ import * as versionRequests from './version.js';
export { export {
adminRequests as admin, adminRequests as admin,
baremetalRequests as baremetal, baremetalRequests as baremetal,
baseOsRequests as baseos,
backupRequests as backup, backupRequests as backup,
certificateRequests as certificate, certificateRequests as certificate,
clusterRequests as cluster, clusterRequests as cluster,