@serve.zone/interfaces 5.8.0 → 5.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/changelog.md CHANGED
@@ -3,6 +3,26 @@
3
3
  ## Pending
4
4
 
5
5
 
6
+ ## 2026-05-24 - 5.10.0
7
+
8
+ ### Features
9
+
10
+ - add Spark node telemetry contracts
11
+ - Adds Spark runtime status fields to cluster node data
12
+ - Adds a typed Spark-to-Cloudly heartbeat request contract
13
+
14
+ ### Maintenance
15
+
16
+ - refresh release tooling dependencies
17
+
18
+ ## 2026-05-23 - 5.9.0
19
+
20
+ ### Features
21
+
22
+ - add Cloudly deployment runtime and app catalog contracts
23
+ - Adds live deployment task metadata and workspace operation request contracts
24
+ - Adds app catalog metadata, installation, and upgrade detection interfaces
25
+ - Adds node jump command and external image reference contract fields
6
26
 
7
27
  ## 2026-05-14 - 5.8.0
8
28
 
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/interfaces',
6
- version: '5.8.0',
6
+ version: '5.10.0',
7
7
  description: 'Shared TypeScript interfaces and TypedRequest contracts for the serve.zone ecosystem.'
8
8
  };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLHVGQUF1RjtDQUNyRyxDQUFBIn0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLHVGQUF1RjtDQUNyRyxDQUFBIn0=
@@ -0,0 +1 @@
1
+ export * from './types.js';
@@ -0,0 +1,2 @@
1
+ export * from './types.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9hcHBjYXRhbG9nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsWUFBWSxDQUFDIn0=
@@ -0,0 +1,83 @@
1
+ export type TAppCatalogPlatformRequirement = 'mongodb' | 's3' | 'clickhouse' | 'redis' | 'mariadb';
2
+ export interface IAppCatalogEnvVar {
3
+ key: string;
4
+ value?: string;
5
+ description: string;
6
+ required?: boolean;
7
+ }
8
+ export interface IAppCatalogVolume {
9
+ /** Stable Docker volume name. If omitted, the runtime derives one from service name and mount path. */
10
+ name?: string;
11
+ /** Alias for name when a volume is shared intentionally across services. */
12
+ source?: string;
13
+ /** Container path where the volume is mounted. */
14
+ mountPath: string;
15
+ /** Docker volume driver. Defaults to the runtime's persistent volume driver. */
16
+ driver?: string;
17
+ readOnly?: boolean;
18
+ /** Whether backup orchestration should snapshot this volume. Defaults to true. */
19
+ backup?: boolean;
20
+ /** Driver-specific options forwarded to the container runtime. */
21
+ options?: Record<string, string>;
22
+ }
23
+ export type TAppCatalogVolumeSpec = string | IAppCatalogVolume;
24
+ export interface IAppCatalogPublishedPort {
25
+ targetPort: number;
26
+ targetPortEnd?: number;
27
+ publishedPort?: number;
28
+ publishedPortEnd?: number;
29
+ protocol?: 'tcp' | 'udp';
30
+ hostIp?: string;
31
+ }
32
+ export interface ICatalogApp {
33
+ id: string;
34
+ name: string;
35
+ description: string;
36
+ category: string;
37
+ iconName?: string;
38
+ iconUrl?: string;
39
+ latestVersion: string;
40
+ tags?: string[];
41
+ }
42
+ export interface ICatalog {
43
+ schemaVersion: number;
44
+ updatedAt: string;
45
+ apps: ICatalogApp[];
46
+ }
47
+ export interface IAppMeta {
48
+ id: string;
49
+ name: string;
50
+ description: string;
51
+ category: string;
52
+ iconName?: string;
53
+ latestVersion: string;
54
+ versions: string[];
55
+ maintainer?: string;
56
+ links?: Record<string, string>;
57
+ }
58
+ export interface IAppVersionConfig {
59
+ image: string;
60
+ port: number;
61
+ envVars?: IAppCatalogEnvVar[];
62
+ volumes?: TAppCatalogVolumeSpec[];
63
+ publishedPorts?: IAppCatalogPublishedPort[];
64
+ platformRequirements?: Partial<Record<TAppCatalogPlatformRequirement, boolean>>;
65
+ minOneboxVersion?: string;
66
+ minCloudlyVersion?: string;
67
+ }
68
+ export interface IAppInstallRequest {
69
+ appId: string;
70
+ version?: string;
71
+ serviceName: string;
72
+ domain?: string;
73
+ port?: number;
74
+ publishedPorts?: IAppCatalogPublishedPort[];
75
+ envVars?: Record<string, string>;
76
+ }
77
+ export interface IUpgradeableAppService {
78
+ serviceName: string;
79
+ appTemplateId: string;
80
+ currentVersion: string;
81
+ latestVersion: string;
82
+ hasMigration: boolean;
83
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9hcHBjYXRhbG9nL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -8,6 +8,24 @@ export interface IClusterNodeMetrics {
8
8
  containerCount: number;
9
9
  timestamp: number;
10
10
  }
11
+ export type TSparkNodeMode = 'cloudly' | 'coreflow-node';
12
+ export type TSparkCloudlyConnectionStatus = 'not-configured' | 'connecting' | 'connected' | 'failed';
13
+ export interface ISparkNodeRuntimeInfo {
14
+ runtime: 'spark';
15
+ nodeId: string;
16
+ mode?: TSparkNodeMode;
17
+ hostname?: string;
18
+ platform: string;
19
+ arch: string;
20
+ osRelease?: string;
21
+ sparkVersion: string;
22
+ cloudlyUrl?: string;
23
+ cloudlyConnectionStatus: TSparkCloudlyConnectionStatus;
24
+ dockerAvailable: boolean;
25
+ swarmNodeId?: string;
26
+ checkedAt: number;
27
+ lastError?: string;
28
+ }
11
29
  export interface IClusterNode {
12
30
  id: string;
13
31
  data: {
@@ -43,6 +61,10 @@ export interface IClusterNode {
43
61
  * Current metrics for the node
44
62
  */
45
63
  metrics?: IClusterNodeMetrics;
64
+ /**
65
+ * Runtime status reported by the Spark node agent.
66
+ */
67
+ sparkRuntimeInfo?: ISparkNodeRuntimeInfo;
46
68
  /**
47
69
  * Docker swarm node ID if part of swarm
48
70
  */
@@ -4,6 +4,10 @@
4
4
  */
5
5
  export interface IDeployment {
6
6
  id: string;
7
+ /** Docker Swarm task ID when this deployment represents a live runtime task. */
8
+ taskId?: string;
9
+ /** Human-readable service name, useful for live runtime views. */
10
+ serviceName?: string;
7
11
  /**
8
12
  * The service being deployed (single service per deployment)
9
13
  */
@@ -12,10 +16,18 @@ export interface IDeployment {
12
16
  * The node this deployment is running on
13
17
  */
14
18
  nodeId: string;
19
+ /** Human-readable node hostname when known. */
20
+ nodeName?: string;
15
21
  /**
16
22
  * Docker container ID for this deployment
17
23
  */
18
24
  containerId?: string;
25
+ /** Docker service ID when known. */
26
+ dockerServiceId?: string;
27
+ /** Docker Swarm task slot when known. */
28
+ slot?: number;
29
+ /** Docker desired state for this task/deployment. */
30
+ desiredState?: string;
19
31
  /**
20
32
  * Image used for this deployment
21
33
  */
@@ -28,6 +40,8 @@ export interface IDeployment {
28
40
  * Timestamp when deployed
29
41
  */
30
42
  deployedAt: number;
43
+ /** Last runtime update timestamp, if reported by the orchestrator. */
44
+ updatedAt?: number;
31
45
  /**
32
46
  * Deployment log entries
33
47
  */
@@ -7,6 +7,7 @@ export interface IImage {
7
7
  internal: boolean;
8
8
  externalRegistryId: string;
9
9
  externalImageTag: string;
10
+ externalImageRef?: string;
10
11
  };
11
12
  description: string;
12
13
  versions: Array<{
@@ -24,6 +24,8 @@ export interface IService {
24
24
  imageVersion: string;
25
25
  registryTarget?: IRegistryTarget;
26
26
  deployOnPush?: boolean;
27
+ appTemplateId?: string;
28
+ appTemplateVersion?: string;
27
29
  environment: {
28
30
  [key: string]: string;
29
31
  };
@@ -1,5 +1,6 @@
1
1
  import * as data from './data/index.js';
2
+ import * as appcatalog from './appcatalog/index.js';
2
3
  import * as platform from './platform/index.js';
3
4
  import * as platformservice from './platformservice/index.js';
4
5
  import * as requests from './requests/index.js';
5
- export { data, platform, platformservice, requests };
6
+ export { appcatalog, data, platform, platformservice, requests };
package/dist_ts/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as data from './data/index.js';
2
+ import * as appcatalog from './appcatalog/index.js';
2
3
  import * as platform from './platform/index.js';
3
4
  import * as platformservice from './platformservice/index.js';
4
5
  import * as requests from './requests/index.js';
5
- export { data, platform, platformservice, requests };
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sS0FBSyxRQUFRLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxLQUFLLGVBQWUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEtBQUssUUFBUSxNQUFNLHFCQUFxQixDQUFDO0FBRWhELE9BQU8sRUFDTCxJQUFJLEVBQ0osUUFBUSxFQUNSLGVBQWUsRUFDZixRQUFRLEVBQ1QsQ0FBQSJ9
6
+ export { appcatalog, data, platform, platformservice, requests };
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sS0FBSyxVQUFVLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxLQUFLLFFBQVEsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEtBQUssZUFBZSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sS0FBSyxRQUFRLE1BQU0scUJBQXFCLENBQUM7QUFFaEQsT0FBTyxFQUNMLFVBQVUsRUFDVixJQUFJLEVBQ0osUUFBUSxFQUNSLGVBQWUsRUFDZixRQUFRLEVBQ1QsQ0FBQSJ9
@@ -0,0 +1,44 @@
1
+ import * as plugins from '../plugins.js';
2
+ import type { IIdentity } from '../data/user.js';
3
+ import type { IService } from '../data/service.js';
4
+ import type { IAppInstallRequest, IAppMeta, IAppVersionConfig, ICatalogApp, IUpgradeableAppService } from '../appcatalog/index.js';
5
+ export interface IReq_Any_GetAppCatalogTemplates extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Any_GetAppCatalogTemplates> {
6
+ method: 'getAppCatalogTemplates';
7
+ request: {
8
+ identity: IIdentity;
9
+ };
10
+ response: {
11
+ apps: ICatalogApp[];
12
+ };
13
+ }
14
+ export interface IReq_Any_GetAppCatalogConfig extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Any_GetAppCatalogConfig> {
15
+ method: 'getAppCatalogConfig';
16
+ request: {
17
+ identity: IIdentity;
18
+ appId: string;
19
+ version: string;
20
+ };
21
+ response: {
22
+ config: IAppVersionConfig;
23
+ appMeta: IAppMeta;
24
+ };
25
+ }
26
+ export interface IReq_Any_InstallAppCatalogApp extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Any_InstallAppCatalogApp> {
27
+ method: 'installAppCatalogApp';
28
+ request: {
29
+ identity: IIdentity;
30
+ install: IAppInstallRequest;
31
+ };
32
+ response: {
33
+ service: IService;
34
+ };
35
+ }
36
+ export interface IReq_Any_GetUpgradeableAppCatalogServices extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Any_GetUpgradeableAppCatalogServices> {
37
+ method: 'getUpgradeableAppCatalogServices';
38
+ request: {
39
+ identity: IIdentity;
40
+ };
41
+ response: {
42
+ services: IUpgradeableAppService[];
43
+ };
44
+ }
@@ -0,0 +1,2 @@
1
+ import * as plugins from '../plugins.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwY2F0YWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3JlcXVlc3RzL2FwcGNhdGFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUMifQ==
@@ -1,6 +1,12 @@
1
1
  import * as plugins from '../plugins.js';
2
2
  import type { IDeployment } from '../data/deployment.js';
3
+ import type { IService } from '../data/service.js';
3
4
  import type { IIdentity } from '../data/user.js';
5
+ export interface IDeploymentWorkspaceFileEntry {
6
+ type: 'file' | 'directory';
7
+ name: string;
8
+ path: string;
9
+ }
4
10
  export interface IReq_Any_Cloudly_GetDeploymentById extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Any_Cloudly_GetDeploymentById> {
5
11
  method: 'getDeploymentById';
6
12
  request: {
@@ -94,3 +100,198 @@ export interface IReq_Any_Cloudly_ScaleDeployment extends plugins.typedrequestIn
94
100
  deployment: IDeployment;
95
101
  };
96
102
  }
103
+ export interface IReq_Any_Cloudly_KillDeployment extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Any_Cloudly_KillDeployment> {
104
+ method: 'killDeployment';
105
+ request: {
106
+ identity: IIdentity;
107
+ deploymentId: string;
108
+ };
109
+ response: {
110
+ success: boolean;
111
+ deployment: IDeployment;
112
+ };
113
+ }
114
+ export interface IReq_Any_Cloudly_DeploymentWorkspaceReadFile extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Any_Cloudly_DeploymentWorkspaceReadFile> {
115
+ method: 'deploymentWorkspaceReadFile';
116
+ request: {
117
+ identity: IIdentity;
118
+ deploymentId: string;
119
+ path: string;
120
+ };
121
+ response: {
122
+ content: string;
123
+ };
124
+ }
125
+ export interface IReq_Any_Cloudly_DeploymentWorkspaceWriteFile extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Any_Cloudly_DeploymentWorkspaceWriteFile> {
126
+ method: 'deploymentWorkspaceWriteFile';
127
+ request: {
128
+ identity: IIdentity;
129
+ deploymentId: string;
130
+ path: string;
131
+ content: string;
132
+ };
133
+ response: Record<string, never>;
134
+ }
135
+ export interface IReq_Any_Cloudly_DeploymentWorkspaceReadDir extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Any_Cloudly_DeploymentWorkspaceReadDir> {
136
+ method: 'deploymentWorkspaceReadDir';
137
+ request: {
138
+ identity: IIdentity;
139
+ deploymentId: string;
140
+ path: string;
141
+ };
142
+ response: {
143
+ entries: IDeploymentWorkspaceFileEntry[];
144
+ };
145
+ }
146
+ export interface IReq_Any_Cloudly_DeploymentWorkspaceMkdir extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Any_Cloudly_DeploymentWorkspaceMkdir> {
147
+ method: 'deploymentWorkspaceMkdir';
148
+ request: {
149
+ identity: IIdentity;
150
+ deploymentId: string;
151
+ path: string;
152
+ };
153
+ response: Record<string, never>;
154
+ }
155
+ export interface IReq_Any_Cloudly_DeploymentWorkspaceRm extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Any_Cloudly_DeploymentWorkspaceRm> {
156
+ method: 'deploymentWorkspaceRm';
157
+ request: {
158
+ identity: IIdentity;
159
+ deploymentId: string;
160
+ path: string;
161
+ recursive?: boolean;
162
+ };
163
+ response: Record<string, never>;
164
+ }
165
+ export interface IReq_Any_Cloudly_DeploymentWorkspaceExists extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Any_Cloudly_DeploymentWorkspaceExists> {
166
+ method: 'deploymentWorkspaceExists';
167
+ request: {
168
+ identity: IIdentity;
169
+ deploymentId: string;
170
+ path: string;
171
+ };
172
+ response: {
173
+ exists: boolean;
174
+ };
175
+ }
176
+ export interface IReq_Any_Cloudly_DeploymentWorkspaceExec extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Any_Cloudly_DeploymentWorkspaceExec> {
177
+ method: 'deploymentWorkspaceExec';
178
+ request: {
179
+ identity: IIdentity;
180
+ deploymentId: string;
181
+ command: string;
182
+ args?: string[];
183
+ };
184
+ response: {
185
+ stdout: string;
186
+ stderr: string;
187
+ exitCode: number;
188
+ };
189
+ }
190
+ export interface IReq_Cloudly_Coreflow_GetServiceDeployments extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Cloudly_Coreflow_GetServiceDeployments> {
191
+ method: 'coreflowGetServiceDeployments';
192
+ request: {
193
+ service: IService;
194
+ };
195
+ response: {
196
+ deployments: IDeployment[];
197
+ };
198
+ }
199
+ export interface IReq_Cloudly_Coreflow_RestartDeployment extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Cloudly_Coreflow_RestartDeployment> {
200
+ method: 'coreflowRestartDeployment';
201
+ request: {
202
+ deploymentId: string;
203
+ };
204
+ response: {
205
+ found: boolean;
206
+ deployment?: IDeployment;
207
+ };
208
+ }
209
+ export interface IReq_Cloudly_Coreflow_KillDeployment extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Cloudly_Coreflow_KillDeployment> {
210
+ method: 'coreflowKillDeployment';
211
+ request: {
212
+ deploymentId: string;
213
+ };
214
+ response: {
215
+ found: boolean;
216
+ deployment?: IDeployment;
217
+ };
218
+ }
219
+ export interface IReq_Cloudly_Coreflow_DeploymentWorkspaceReadFile extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Cloudly_Coreflow_DeploymentWorkspaceReadFile> {
220
+ method: 'coreflowDeploymentWorkspaceReadFile';
221
+ request: {
222
+ deploymentId: string;
223
+ path: string;
224
+ };
225
+ response: {
226
+ found: boolean;
227
+ content?: string;
228
+ };
229
+ }
230
+ export interface IReq_Cloudly_Coreflow_DeploymentWorkspaceWriteFile extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Cloudly_Coreflow_DeploymentWorkspaceWriteFile> {
231
+ method: 'coreflowDeploymentWorkspaceWriteFile';
232
+ request: {
233
+ deploymentId: string;
234
+ path: string;
235
+ content: string;
236
+ };
237
+ response: {
238
+ found: boolean;
239
+ };
240
+ }
241
+ export interface IReq_Cloudly_Coreflow_DeploymentWorkspaceReadDir extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Cloudly_Coreflow_DeploymentWorkspaceReadDir> {
242
+ method: 'coreflowDeploymentWorkspaceReadDir';
243
+ request: {
244
+ deploymentId: string;
245
+ path: string;
246
+ };
247
+ response: {
248
+ found: boolean;
249
+ entries?: IDeploymentWorkspaceFileEntry[];
250
+ };
251
+ }
252
+ export interface IReq_Cloudly_Coreflow_DeploymentWorkspaceMkdir extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Cloudly_Coreflow_DeploymentWorkspaceMkdir> {
253
+ method: 'coreflowDeploymentWorkspaceMkdir';
254
+ request: {
255
+ deploymentId: string;
256
+ path: string;
257
+ };
258
+ response: {
259
+ found: boolean;
260
+ };
261
+ }
262
+ export interface IReq_Cloudly_Coreflow_DeploymentWorkspaceRm extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Cloudly_Coreflow_DeploymentWorkspaceRm> {
263
+ method: 'coreflowDeploymentWorkspaceRm';
264
+ request: {
265
+ deploymentId: string;
266
+ path: string;
267
+ recursive?: boolean;
268
+ };
269
+ response: {
270
+ found: boolean;
271
+ };
272
+ }
273
+ export interface IReq_Cloudly_Coreflow_DeploymentWorkspaceExists extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Cloudly_Coreflow_DeploymentWorkspaceExists> {
274
+ method: 'coreflowDeploymentWorkspaceExists';
275
+ request: {
276
+ deploymentId: string;
277
+ path: string;
278
+ };
279
+ response: {
280
+ found: boolean;
281
+ exists?: boolean;
282
+ };
283
+ }
284
+ export interface IReq_Cloudly_Coreflow_DeploymentWorkspaceExec extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Cloudly_Coreflow_DeploymentWorkspaceExec> {
285
+ method: 'coreflowDeploymentWorkspaceExec';
286
+ request: {
287
+ deploymentId: string;
288
+ command: string;
289
+ args?: string[];
290
+ };
291
+ response: {
292
+ found: boolean;
293
+ stdout?: string;
294
+ stderr?: string;
295
+ exitCode?: number;
296
+ };
297
+ }
@@ -1,4 +1,5 @@
1
1
  import * as adminRequests from './admin.js';
2
+ import * as appCatalogRequests from './appcatalog.js';
2
3
  import * as baremetalRequests from './baremetal.js';
3
4
  import * as baseOsRequests from './baseos.js';
4
5
  import * as backupRequests from './backup.js';
@@ -25,5 +26,5 @@ import * as settingsRequests from './settings.js';
25
26
  import * as statusRequests from './status.js';
26
27
  import * as taskRequests from './task.js';
27
28
  import * as versionRequests from './version.js';
28
- export { adminRequests as admin, baremetalRequests as baremetal, baseOsRequests as baseos, backupRequests as backup, certificateRequests as certificate, clusterRequests as cluster, configRequests as config, deploymentRequests as deployment, dnsRequests as dns, domainRequests as domain, externalRegistryRequests as externalRegistry, identityRequests as identity, imageRequests as image, informRequests as inform, logRequests as log, networkRequests as network, nodeRequests as node, platformRequests as platform, routingRequests as routing, secretBundleRequests as secretbundle, secretGroupRequests as secretgroup, serverRequests as server, serviceRequests as service, settingsRequests as settings, statusRequests as status, taskRequests as task, versionRequests as version, };
29
+ export { adminRequests as admin, appCatalogRequests as appcatalog, baremetalRequests as baremetal, baseOsRequests as baseos, backupRequests as backup, certificateRequests as certificate, clusterRequests as cluster, configRequests as config, deploymentRequests as deployment, dnsRequests as dns, domainRequests as domain, externalRegistryRequests as externalRegistry, identityRequests as identity, imageRequests as image, informRequests as inform, logRequests as log, networkRequests as network, nodeRequests as node, platformRequests as platform, routingRequests as routing, secretBundleRequests as secretbundle, secretGroupRequests as secretgroup, serverRequests as server, serviceRequests as service, settingsRequests as settings, statusRequests as status, taskRequests as task, versionRequests as version, };
29
30
  export * from './inform.js';
@@ -1,5 +1,6 @@
1
1
  import * as plugins from '../plugins.js';
2
2
  import * as adminRequests from './admin.js';
3
+ import * as appCatalogRequests from './appcatalog.js';
3
4
  import * as baremetalRequests from './baremetal.js';
4
5
  import * as baseOsRequests from './baseos.js';
5
6
  import * as backupRequests from './backup.js';
@@ -26,6 +27,6 @@ import * as settingsRequests from './settings.js';
26
27
  import * as statusRequests from './status.js';
27
28
  import * as taskRequests from './task.js';
28
29
  import * as versionRequests from './version.js';
29
- export { adminRequests as admin, baremetalRequests as baremetal, baseOsRequests as baseos, backupRequests as backup, certificateRequests as certificate, clusterRequests as cluster, configRequests as config, deploymentRequests as deployment, dnsRequests as dns, domainRequests as domain, externalRegistryRequests as externalRegistry, identityRequests as identity, imageRequests as image, informRequests as inform, logRequests as log, networkRequests as network, nodeRequests as node, platformRequests as platform, routingRequests as routing, secretBundleRequests as secretbundle, secretGroupRequests as secretgroup, serverRequests as server, serviceRequests as service, settingsRequests as settings, statusRequests as status, taskRequests as task, versionRequests as version, };
30
+ export { adminRequests as admin, appCatalogRequests as appcatalog, baremetalRequests as baremetal, baseOsRequests as baseos, backupRequests as backup, certificateRequests as certificate, clusterRequests as cluster, configRequests as config, deploymentRequests as deployment, dnsRequests as dns, domainRequests as domain, externalRegistryRequests as externalRegistry, identityRequests as identity, imageRequests as image, informRequests as inform, logRequests as log, networkRequests as network, nodeRequests as node, platformRequests as platform, routingRequests as routing, secretBundleRequests as secretbundle, secretGroupRequests as secretgroup, serverRequests as server, serviceRequests as service, settingsRequests as settings, statusRequests as status, taskRequests as task, versionRequests as version, };
30
31
  export * from './inform.js';
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9yZXF1ZXN0cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEtBQUssYUFBYSxNQUFNLFlBQVksQ0FBQztBQUM1QyxPQUFPLEtBQUssaUJBQWlCLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxLQUFLLGNBQWMsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxLQUFLLGNBQWMsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxLQUFLLG1CQUFtQixNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sS0FBSyxlQUFlLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sS0FBSyxjQUFjLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxrQkFBa0IsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEtBQUssV0FBVyxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEtBQUssY0FBYyxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEtBQUssd0JBQXdCLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxLQUFLLGdCQUFnQixNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEtBQUssYUFBYSxNQUFNLFlBQVksQ0FBQztBQUM1QyxPQUFPLEtBQUssY0FBYyxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEtBQUssV0FBVyxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEtBQUssZUFBZSxNQUFNLGNBQWMsQ0FBQztBQUNoRCxPQUFPLEtBQUssWUFBWSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEtBQUssZ0JBQWdCLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sS0FBSyxlQUFlLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sS0FBSyxvQkFBb0IsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEtBQUssbUJBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxLQUFLLGNBQWMsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxLQUFLLGVBQWUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxLQUFLLGdCQUFnQixNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEtBQUssY0FBYyxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEtBQUssWUFBWSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEtBQUssZUFBZSxNQUFNLGNBQWMsQ0FBQztBQUVoRCxPQUFPLEVBQ0wsYUFBYSxJQUFJLEtBQUssRUFDdEIsaUJBQWlCLElBQUksU0FBUyxFQUM5QixjQUFjLElBQUksTUFBTSxFQUN4QixjQUFjLElBQUksTUFBTSxFQUN4QixtQkFBbUIsSUFBSSxXQUFXLEVBQ2xDLGVBQWUsSUFBSSxPQUFPLEVBQzFCLGNBQWMsSUFBSSxNQUFNLEVBQ3hCLGtCQUFrQixJQUFJLFVBQVUsRUFDaEMsV0FBVyxJQUFJLEdBQUcsRUFDbEIsY0FBYyxJQUFJLE1BQU0sRUFDeEIsd0JBQXdCLElBQUksZ0JBQWdCLEVBQzVDLGdCQUFnQixJQUFJLFFBQVEsRUFDNUIsYUFBYSxJQUFJLEtBQUssRUFDdEIsY0FBYyxJQUFJLE1BQU0sRUFDeEIsV0FBVyxJQUFJLEdBQUcsRUFDbEIsZUFBZSxJQUFJLE9BQU8sRUFDMUIsWUFBWSxJQUFJLElBQUksRUFDcEIsZ0JBQWdCLElBQUksUUFBUSxFQUM1QixlQUFlLElBQUksT0FBTyxFQUMxQixvQkFBb0IsSUFBSSxZQUFZLEVBQ3BDLG1CQUFtQixJQUFJLFdBQVcsRUFDbEMsY0FBYyxJQUFJLE1BQU0sRUFDeEIsZUFBZSxJQUFJLE9BQU8sRUFDMUIsZ0JBQWdCLElBQUksUUFBUSxFQUM1QixjQUFjLElBQUksTUFBTSxFQUN4QixZQUFZLElBQUksSUFBSSxFQUNwQixlQUFlLElBQUksT0FBTyxHQUMzQixDQUFDO0FBRUYsY0FBYyxhQUFhLENBQUMifQ==
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9yZXF1ZXN0cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEtBQUssYUFBYSxNQUFNLFlBQVksQ0FBQztBQUM1QyxPQUFPLEtBQUssa0JBQWtCLE1BQU0saUJBQWlCLENBQUM7QUFDdEQsT0FBTyxLQUFLLGlCQUFpQixNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxjQUFjLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxjQUFjLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxtQkFBbUIsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEtBQUssZUFBZSxNQUFNLGNBQWMsQ0FBQztBQUNoRCxPQUFPLEtBQUssY0FBYyxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEtBQUssa0JBQWtCLE1BQU0saUJBQWlCLENBQUM7QUFDdEQsT0FBTyxLQUFLLFdBQVcsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxLQUFLLGNBQWMsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxLQUFLLHdCQUF3QixNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxLQUFLLGFBQWEsTUFBTSxZQUFZLENBQUM7QUFDNUMsT0FBTyxLQUFLLGNBQWMsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxLQUFLLFdBQVcsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxLQUFLLGVBQWUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxLQUFLLFlBQVksTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxLQUFLLGdCQUFnQixNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEtBQUssZUFBZSxNQUFNLGNBQWMsQ0FBQztBQUNoRCxPQUFPLEtBQUssb0JBQW9CLE1BQU0sbUJBQW1CLENBQUM7QUFDMUQsT0FBTyxLQUFLLG1CQUFtQixNQUFNLGtCQUFrQixDQUFDO0FBQ3hELE9BQU8sS0FBSyxjQUFjLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxlQUFlLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxLQUFLLGNBQWMsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxLQUFLLFlBQVksTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxLQUFLLGVBQWUsTUFBTSxjQUFjLENBQUM7QUFFaEQsT0FBTyxFQUNMLGFBQWEsSUFBSSxLQUFLLEVBQ3RCLGtCQUFrQixJQUFJLFVBQVUsRUFDaEMsaUJBQWlCLElBQUksU0FBUyxFQUM5QixjQUFjLElBQUksTUFBTSxFQUN4QixjQUFjLElBQUksTUFBTSxFQUN4QixtQkFBbUIsSUFBSSxXQUFXLEVBQ2xDLGVBQWUsSUFBSSxPQUFPLEVBQzFCLGNBQWMsSUFBSSxNQUFNLEVBQ3hCLGtCQUFrQixJQUFJLFVBQVUsRUFDaEMsV0FBVyxJQUFJLEdBQUcsRUFDbEIsY0FBYyxJQUFJLE1BQU0sRUFDeEIsd0JBQXdCLElBQUksZ0JBQWdCLEVBQzVDLGdCQUFnQixJQUFJLFFBQVEsRUFDNUIsYUFBYSxJQUFJLEtBQUssRUFDdEIsY0FBYyxJQUFJLE1BQU0sRUFDeEIsV0FBVyxJQUFJLEdBQUcsRUFDbEIsZUFBZSxJQUFJLE9BQU8sRUFDMUIsWUFBWSxJQUFJLElBQUksRUFDcEIsZ0JBQWdCLElBQUksUUFBUSxFQUM1QixlQUFlLElBQUksT0FBTyxFQUMxQixvQkFBb0IsSUFBSSxZQUFZLEVBQ3BDLG1CQUFtQixJQUFJLFdBQVcsRUFDbEMsY0FBYyxJQUFJLE1BQU0sRUFDeEIsZUFBZSxJQUFJLE9BQU8sRUFDMUIsZ0JBQWdCLElBQUksUUFBUSxFQUM1QixjQUFjLElBQUksTUFBTSxFQUN4QixZQUFZLElBQUksSUFBSSxFQUNwQixlQUFlLElBQUksT0FBTyxHQUMzQixDQUFDO0FBRUYsY0FBYyxhQUFhLENBQUMifQ==
@@ -1,5 +1,7 @@
1
- import type { IClusterNode } from '../data/clusternode.js';
1
+ import * as plugins from '../plugins.js';
2
+ import type { IClusterNode, IClusterNodeMetrics, ISparkNodeRuntimeInfo } from '../data/clusternode.js';
2
3
  import type { IDeployment } from '../data/deployment.js';
4
+ import type { IIdentity } from '../data/user.js';
3
5
  export interface IRequest_Any_Cloudly_GetNodeConfig {
4
6
  method: 'getNodeConfig';
5
7
  request: {
@@ -27,3 +29,33 @@ export interface IRequest_Any_Cloudly_GetNodeDeployments {
27
29
  deployments: IDeployment[];
28
30
  };
29
31
  }
32
+ export interface IReq_Any_Cloudly_CreateNodeJumpCommand extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Any_Cloudly_CreateNodeJumpCommand> {
33
+ method: 'createNodeJumpCommand';
34
+ request: {
35
+ identity: IIdentity;
36
+ clusterId: string;
37
+ role?: IClusterNode['data']['role'];
38
+ nodeType?: IClusterNode['data']['nodeType'];
39
+ ttlMs?: number;
40
+ };
41
+ response: {
42
+ jumpCode: string;
43
+ jumpUrl: string;
44
+ setupUrl: string;
45
+ command: string;
46
+ expiresAt: number;
47
+ };
48
+ }
49
+ export interface IRequest_Spark_Cloudly_SendHeartbeat extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IRequest_Spark_Cloudly_SendHeartbeat> {
50
+ method: 'sparkNodeHeartbeat';
51
+ request: {
52
+ nodeId: string;
53
+ nodeToken: string;
54
+ metrics: IClusterNodeMetrics;
55
+ runtimeInfo: ISparkNodeRuntimeInfo;
56
+ };
57
+ response: {
58
+ accepted: boolean;
59
+ message?: string;
60
+ };
61
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serve.zone/interfaces",
3
- "version": "5.8.0",
3
+ "version": "5.10.0",
4
4
  "private": false,
5
5
  "description": "Shared TypeScript interfaces and TypedRequest contracts for the serve.zone ecosystem.",
6
6
  "exports": {
@@ -15,11 +15,11 @@
15
15
  "@tsclass/tsclass": "^9.5.1"
16
16
  },
17
17
  "devDependencies": {
18
- "@git.zone/tsbuild": "^4.4.0",
19
- "@git.zone/tsdoc": "^2.0.3",
20
- "@git.zone/tsrun": "^2.0.3",
21
- "@git.zone/tstest": "^3.6.3",
22
- "@types/node": "^25.6.1"
18
+ "@git.zone/tsbuild": "^4.4.2",
19
+ "@git.zone/tsdoc": "^2.0.6",
20
+ "@git.zone/tsrun": "^2.0.4",
21
+ "@git.zone/tstest": "^3.6.6",
22
+ "@types/node": "^25.8.0"
23
23
  },
24
24
  "files": [
25
25
  "ts/**/*",
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/interfaces',
6
- version: '5.8.0',
6
+ version: '5.10.0',
7
7
  description: 'Shared TypeScript interfaces and TypedRequest contracts for the serve.zone ecosystem.'
8
8
  }
@@ -0,0 +1 @@
1
+ export * from './types.js';
@@ -0,0 +1,93 @@
1
+ export type TAppCatalogPlatformRequirement = 'mongodb' | 's3' | 'clickhouse' | 'redis' | 'mariadb';
2
+
3
+ export interface IAppCatalogEnvVar {
4
+ key: string;
5
+ value?: string;
6
+ description: string;
7
+ required?: boolean;
8
+ }
9
+
10
+ export interface IAppCatalogVolume {
11
+ /** Stable Docker volume name. If omitted, the runtime derives one from service name and mount path. */
12
+ name?: string;
13
+ /** Alias for name when a volume is shared intentionally across services. */
14
+ source?: string;
15
+ /** Container path where the volume is mounted. */
16
+ mountPath: string;
17
+ /** Docker volume driver. Defaults to the runtime's persistent volume driver. */
18
+ driver?: string;
19
+ readOnly?: boolean;
20
+ /** Whether backup orchestration should snapshot this volume. Defaults to true. */
21
+ backup?: boolean;
22
+ /** Driver-specific options forwarded to the container runtime. */
23
+ options?: Record<string, string>;
24
+ }
25
+
26
+ export type TAppCatalogVolumeSpec = string | IAppCatalogVolume;
27
+
28
+ export interface IAppCatalogPublishedPort {
29
+ targetPort: number;
30
+ targetPortEnd?: number;
31
+ publishedPort?: number;
32
+ publishedPortEnd?: number;
33
+ protocol?: 'tcp' | 'udp';
34
+ hostIp?: string;
35
+ }
36
+
37
+ export interface ICatalogApp {
38
+ id: string;
39
+ name: string;
40
+ description: string;
41
+ category: string;
42
+ iconName?: string;
43
+ iconUrl?: string;
44
+ latestVersion: string;
45
+ tags?: string[];
46
+ }
47
+
48
+ export interface ICatalog {
49
+ schemaVersion: number;
50
+ updatedAt: string;
51
+ apps: ICatalogApp[];
52
+ }
53
+
54
+ export interface IAppMeta {
55
+ id: string;
56
+ name: string;
57
+ description: string;
58
+ category: string;
59
+ iconName?: string;
60
+ latestVersion: string;
61
+ versions: string[];
62
+ maintainer?: string;
63
+ links?: Record<string, string>;
64
+ }
65
+
66
+ export interface IAppVersionConfig {
67
+ image: string;
68
+ port: number;
69
+ envVars?: IAppCatalogEnvVar[];
70
+ volumes?: TAppCatalogVolumeSpec[];
71
+ publishedPorts?: IAppCatalogPublishedPort[];
72
+ platformRequirements?: Partial<Record<TAppCatalogPlatformRequirement, boolean>>;
73
+ minOneboxVersion?: string;
74
+ minCloudlyVersion?: string;
75
+ }
76
+
77
+ export interface IAppInstallRequest {
78
+ appId: string;
79
+ version?: string;
80
+ serviceName: string;
81
+ domain?: string;
82
+ port?: number;
83
+ publishedPorts?: IAppCatalogPublishedPort[];
84
+ envVars?: Record<string, string>;
85
+ }
86
+
87
+ export interface IUpgradeableAppService {
88
+ serviceName: string;
89
+ appTemplateId: string;
90
+ currentVersion: string;
91
+ latestVersion: string;
92
+ hasMigration: boolean;
93
+ }
@@ -10,6 +10,31 @@ export interface IClusterNodeMetrics {
10
10
  timestamp: number;
11
11
  }
12
12
 
13
+ export type TSparkNodeMode = 'cloudly' | 'coreflow-node';
14
+
15
+ export type TSparkCloudlyConnectionStatus =
16
+ | 'not-configured'
17
+ | 'connecting'
18
+ | 'connected'
19
+ | 'failed';
20
+
21
+ export interface ISparkNodeRuntimeInfo {
22
+ runtime: 'spark';
23
+ nodeId: string;
24
+ mode?: TSparkNodeMode;
25
+ hostname?: string;
26
+ platform: string;
27
+ arch: string;
28
+ osRelease?: string;
29
+ sparkVersion: string;
30
+ cloudlyUrl?: string;
31
+ cloudlyConnectionStatus: TSparkCloudlyConnectionStatus;
32
+ dockerAvailable: boolean;
33
+ swarmNodeId?: string;
34
+ checkedAt: number;
35
+ lastError?: string;
36
+ }
37
+
13
38
  export interface IClusterNode {
14
39
  id: string;
15
40
  data: {
@@ -52,6 +77,11 @@ export interface IClusterNode {
52
77
  * Current metrics for the node
53
78
  */
54
79
  metrics?: IClusterNodeMetrics;
80
+
81
+ /**
82
+ * Runtime status reported by the Spark node agent.
83
+ */
84
+ sparkRuntimeInfo?: ISparkNodeRuntimeInfo;
55
85
 
56
86
  /**
57
87
  * Docker swarm node ID if part of swarm
@@ -68,4 +98,4 @@ export interface IClusterNode {
68
98
  */
69
99
  requiredDebianPackages: string[];
70
100
  };
71
- }
101
+ }
@@ -6,6 +6,12 @@ import * as plugins from '../plugins.js';
6
6
  */
7
7
  export interface IDeployment {
8
8
  id: string;
9
+
10
+ /** Docker Swarm task ID when this deployment represents a live runtime task. */
11
+ taskId?: string;
12
+
13
+ /** Human-readable service name, useful for live runtime views. */
14
+ serviceName?: string;
9
15
 
10
16
  /**
11
17
  * The service being deployed (single service per deployment)
@@ -16,11 +22,23 @@ export interface IDeployment {
16
22
  * The node this deployment is running on
17
23
  */
18
24
  nodeId: string;
25
+
26
+ /** Human-readable node hostname when known. */
27
+ nodeName?: string;
19
28
 
20
29
  /**
21
30
  * Docker container ID for this deployment
22
31
  */
23
32
  containerId?: string;
33
+
34
+ /** Docker service ID when known. */
35
+ dockerServiceId?: string;
36
+
37
+ /** Docker Swarm task slot when known. */
38
+ slot?: number;
39
+
40
+ /** Docker desired state for this task/deployment. */
41
+ desiredState?: string;
24
42
 
25
43
  /**
26
44
  * Image used for this deployment
@@ -36,6 +54,9 @@ export interface IDeployment {
36
54
  * Timestamp when deployed
37
55
  */
38
56
  deployedAt: number;
57
+
58
+ /** Last runtime update timestamp, if reported by the orchestrator. */
59
+ updatedAt?: number;
39
60
 
40
61
  /**
41
62
  * Deployment log entries
@@ -60,4 +81,4 @@ export interface IDeployment {
60
81
  memoryUsedMB: number;
61
82
  lastUpdated: number;
62
83
  };
63
- }
84
+ }
package/ts/data/image.ts CHANGED
@@ -9,6 +9,7 @@ export interface IImage {
9
9
  internal: boolean;
10
10
  externalRegistryId: string;
11
11
  externalImageTag: string;
12
+ externalImageRef?: string;
12
13
  }
13
14
  description: string;
14
15
  versions: Array<{
@@ -26,6 +26,8 @@ export interface IService {
26
26
  imageVersion: string;
27
27
  registryTarget?: IRegistryTarget;
28
28
  deployOnPush?: boolean;
29
+ appTemplateId?: string;
30
+ appTemplateVersion?: string;
29
31
  environment: { [key: string]: string };
30
32
  /**
31
33
  * the main secret bundle id, exclusive to the service
package/ts/index.ts CHANGED
@@ -1,9 +1,11 @@
1
1
  import * as data from './data/index.js';
2
+ import * as appcatalog from './appcatalog/index.js';
2
3
  import * as platform from './platform/index.js';
3
4
  import * as platformservice from './platformservice/index.js';
4
5
  import * as requests from './requests/index.js';
5
6
 
6
7
  export {
8
+ appcatalog,
7
9
  data,
8
10
  platform,
9
11
  platformservice,
@@ -0,0 +1,66 @@
1
+ import * as plugins from '../plugins.js';
2
+ import type { IIdentity } from '../data/user.js';
3
+ import type { IService } from '../data/service.js';
4
+ import type {
5
+ IAppInstallRequest,
6
+ IAppMeta,
7
+ IAppVersionConfig,
8
+ ICatalogApp,
9
+ IUpgradeableAppService,
10
+ } from '../appcatalog/index.js';
11
+
12
+ export interface IReq_Any_GetAppCatalogTemplates extends plugins.typedrequestInterfaces.implementsTR<
13
+ plugins.typedrequestInterfaces.ITypedRequest,
14
+ IReq_Any_GetAppCatalogTemplates
15
+ > {
16
+ method: 'getAppCatalogTemplates';
17
+ request: {
18
+ identity: IIdentity;
19
+ };
20
+ response: {
21
+ apps: ICatalogApp[];
22
+ };
23
+ }
24
+
25
+ export interface IReq_Any_GetAppCatalogConfig extends plugins.typedrequestInterfaces.implementsTR<
26
+ plugins.typedrequestInterfaces.ITypedRequest,
27
+ IReq_Any_GetAppCatalogConfig
28
+ > {
29
+ method: 'getAppCatalogConfig';
30
+ request: {
31
+ identity: IIdentity;
32
+ appId: string;
33
+ version: string;
34
+ };
35
+ response: {
36
+ config: IAppVersionConfig;
37
+ appMeta: IAppMeta;
38
+ };
39
+ }
40
+
41
+ export interface IReq_Any_InstallAppCatalogApp extends plugins.typedrequestInterfaces.implementsTR<
42
+ plugins.typedrequestInterfaces.ITypedRequest,
43
+ IReq_Any_InstallAppCatalogApp
44
+ > {
45
+ method: 'installAppCatalogApp';
46
+ request: {
47
+ identity: IIdentity;
48
+ install: IAppInstallRequest;
49
+ };
50
+ response: {
51
+ service: IService;
52
+ };
53
+ }
54
+
55
+ export interface IReq_Any_GetUpgradeableAppCatalogServices extends plugins.typedrequestInterfaces.implementsTR<
56
+ plugins.typedrequestInterfaces.ITypedRequest,
57
+ IReq_Any_GetUpgradeableAppCatalogServices
58
+ > {
59
+ method: 'getUpgradeableAppCatalogServices';
60
+ request: {
61
+ identity: IIdentity;
62
+ };
63
+ response: {
64
+ services: IUpgradeableAppService[];
65
+ };
66
+ }
@@ -1,7 +1,14 @@
1
1
  import * as plugins from '../plugins.js';
2
2
  import type { IDeployment } from '../data/deployment.js';
3
+ import type { IService } from '../data/service.js';
3
4
  import type { IIdentity } from '../data/user.js';
4
5
 
6
+ export interface IDeploymentWorkspaceFileEntry {
7
+ type: 'file' | 'directory';
8
+ name: string;
9
+ path: string;
10
+ }
11
+
5
12
  export interface IReq_Any_Cloudly_GetDeploymentById
6
13
  extends plugins.typedrequestInterfaces.implementsTR<
7
14
  plugins.typedrequestInterfaces.ITypedRequest,
@@ -138,4 +145,289 @@ extends plugins.typedrequestInterfaces.implementsTR<
138
145
  success: boolean;
139
146
  deployment: IDeployment;
140
147
  };
141
- }
148
+ }
149
+
150
+ export interface IReq_Any_Cloudly_KillDeployment
151
+ extends plugins.typedrequestInterfaces.implementsTR<
152
+ plugins.typedrequestInterfaces.ITypedRequest,
153
+ IReq_Any_Cloudly_KillDeployment
154
+ > {
155
+ method: 'killDeployment';
156
+ request: {
157
+ identity: IIdentity;
158
+ deploymentId: string;
159
+ };
160
+ response: {
161
+ success: boolean;
162
+ deployment: IDeployment;
163
+ };
164
+ }
165
+
166
+ export interface IReq_Any_Cloudly_DeploymentWorkspaceReadFile
167
+ extends plugins.typedrequestInterfaces.implementsTR<
168
+ plugins.typedrequestInterfaces.ITypedRequest,
169
+ IReq_Any_Cloudly_DeploymentWorkspaceReadFile
170
+ > {
171
+ method: 'deploymentWorkspaceReadFile';
172
+ request: {
173
+ identity: IIdentity;
174
+ deploymentId: string;
175
+ path: string;
176
+ };
177
+ response: {
178
+ content: string;
179
+ };
180
+ }
181
+
182
+ export interface IReq_Any_Cloudly_DeploymentWorkspaceWriteFile
183
+ extends plugins.typedrequestInterfaces.implementsTR<
184
+ plugins.typedrequestInterfaces.ITypedRequest,
185
+ IReq_Any_Cloudly_DeploymentWorkspaceWriteFile
186
+ > {
187
+ method: 'deploymentWorkspaceWriteFile';
188
+ request: {
189
+ identity: IIdentity;
190
+ deploymentId: string;
191
+ path: string;
192
+ content: string;
193
+ };
194
+ response: Record<string, never>;
195
+ }
196
+
197
+ export interface IReq_Any_Cloudly_DeploymentWorkspaceReadDir
198
+ extends plugins.typedrequestInterfaces.implementsTR<
199
+ plugins.typedrequestInterfaces.ITypedRequest,
200
+ IReq_Any_Cloudly_DeploymentWorkspaceReadDir
201
+ > {
202
+ method: 'deploymentWorkspaceReadDir';
203
+ request: {
204
+ identity: IIdentity;
205
+ deploymentId: string;
206
+ path: string;
207
+ };
208
+ response: {
209
+ entries: IDeploymentWorkspaceFileEntry[];
210
+ };
211
+ }
212
+
213
+ export interface IReq_Any_Cloudly_DeploymentWorkspaceMkdir
214
+ extends plugins.typedrequestInterfaces.implementsTR<
215
+ plugins.typedrequestInterfaces.ITypedRequest,
216
+ IReq_Any_Cloudly_DeploymentWorkspaceMkdir
217
+ > {
218
+ method: 'deploymentWorkspaceMkdir';
219
+ request: {
220
+ identity: IIdentity;
221
+ deploymentId: string;
222
+ path: string;
223
+ };
224
+ response: Record<string, never>;
225
+ }
226
+
227
+ export interface IReq_Any_Cloudly_DeploymentWorkspaceRm
228
+ extends plugins.typedrequestInterfaces.implementsTR<
229
+ plugins.typedrequestInterfaces.ITypedRequest,
230
+ IReq_Any_Cloudly_DeploymentWorkspaceRm
231
+ > {
232
+ method: 'deploymentWorkspaceRm';
233
+ request: {
234
+ identity: IIdentity;
235
+ deploymentId: string;
236
+ path: string;
237
+ recursive?: boolean;
238
+ };
239
+ response: Record<string, never>;
240
+ }
241
+
242
+ export interface IReq_Any_Cloudly_DeploymentWorkspaceExists
243
+ extends plugins.typedrequestInterfaces.implementsTR<
244
+ plugins.typedrequestInterfaces.ITypedRequest,
245
+ IReq_Any_Cloudly_DeploymentWorkspaceExists
246
+ > {
247
+ method: 'deploymentWorkspaceExists';
248
+ request: {
249
+ identity: IIdentity;
250
+ deploymentId: string;
251
+ path: string;
252
+ };
253
+ response: {
254
+ exists: boolean;
255
+ };
256
+ }
257
+
258
+ export interface IReq_Any_Cloudly_DeploymentWorkspaceExec
259
+ extends plugins.typedrequestInterfaces.implementsTR<
260
+ plugins.typedrequestInterfaces.ITypedRequest,
261
+ IReq_Any_Cloudly_DeploymentWorkspaceExec
262
+ > {
263
+ method: 'deploymentWorkspaceExec';
264
+ request: {
265
+ identity: IIdentity;
266
+ deploymentId: string;
267
+ command: string;
268
+ args?: string[];
269
+ };
270
+ response: {
271
+ stdout: string;
272
+ stderr: string;
273
+ exitCode: number;
274
+ };
275
+ }
276
+
277
+ export interface IReq_Cloudly_Coreflow_GetServiceDeployments
278
+ extends plugins.typedrequestInterfaces.implementsTR<
279
+ plugins.typedrequestInterfaces.ITypedRequest,
280
+ IReq_Cloudly_Coreflow_GetServiceDeployments
281
+ > {
282
+ method: 'coreflowGetServiceDeployments';
283
+ request: {
284
+ service: IService;
285
+ };
286
+ response: {
287
+ deployments: IDeployment[];
288
+ };
289
+ }
290
+
291
+ export interface IReq_Cloudly_Coreflow_RestartDeployment
292
+ extends plugins.typedrequestInterfaces.implementsTR<
293
+ plugins.typedrequestInterfaces.ITypedRequest,
294
+ IReq_Cloudly_Coreflow_RestartDeployment
295
+ > {
296
+ method: 'coreflowRestartDeployment';
297
+ request: {
298
+ deploymentId: string;
299
+ };
300
+ response: {
301
+ found: boolean;
302
+ deployment?: IDeployment;
303
+ };
304
+ }
305
+
306
+ export interface IReq_Cloudly_Coreflow_KillDeployment
307
+ extends plugins.typedrequestInterfaces.implementsTR<
308
+ plugins.typedrequestInterfaces.ITypedRequest,
309
+ IReq_Cloudly_Coreflow_KillDeployment
310
+ > {
311
+ method: 'coreflowKillDeployment';
312
+ request: {
313
+ deploymentId: string;
314
+ };
315
+ response: {
316
+ found: boolean;
317
+ deployment?: IDeployment;
318
+ };
319
+ }
320
+
321
+ export interface IReq_Cloudly_Coreflow_DeploymentWorkspaceReadFile
322
+ extends plugins.typedrequestInterfaces.implementsTR<
323
+ plugins.typedrequestInterfaces.ITypedRequest,
324
+ IReq_Cloudly_Coreflow_DeploymentWorkspaceReadFile
325
+ > {
326
+ method: 'coreflowDeploymentWorkspaceReadFile';
327
+ request: {
328
+ deploymentId: string;
329
+ path: string;
330
+ };
331
+ response: {
332
+ found: boolean;
333
+ content?: string;
334
+ };
335
+ }
336
+
337
+ export interface IReq_Cloudly_Coreflow_DeploymentWorkspaceWriteFile
338
+ extends plugins.typedrequestInterfaces.implementsTR<
339
+ plugins.typedrequestInterfaces.ITypedRequest,
340
+ IReq_Cloudly_Coreflow_DeploymentWorkspaceWriteFile
341
+ > {
342
+ method: 'coreflowDeploymentWorkspaceWriteFile';
343
+ request: {
344
+ deploymentId: string;
345
+ path: string;
346
+ content: string;
347
+ };
348
+ response: {
349
+ found: boolean;
350
+ };
351
+ }
352
+
353
+ export interface IReq_Cloudly_Coreflow_DeploymentWorkspaceReadDir
354
+ extends plugins.typedrequestInterfaces.implementsTR<
355
+ plugins.typedrequestInterfaces.ITypedRequest,
356
+ IReq_Cloudly_Coreflow_DeploymentWorkspaceReadDir
357
+ > {
358
+ method: 'coreflowDeploymentWorkspaceReadDir';
359
+ request: {
360
+ deploymentId: string;
361
+ path: string;
362
+ };
363
+ response: {
364
+ found: boolean;
365
+ entries?: IDeploymentWorkspaceFileEntry[];
366
+ };
367
+ }
368
+
369
+ export interface IReq_Cloudly_Coreflow_DeploymentWorkspaceMkdir
370
+ extends plugins.typedrequestInterfaces.implementsTR<
371
+ plugins.typedrequestInterfaces.ITypedRequest,
372
+ IReq_Cloudly_Coreflow_DeploymentWorkspaceMkdir
373
+ > {
374
+ method: 'coreflowDeploymentWorkspaceMkdir';
375
+ request: {
376
+ deploymentId: string;
377
+ path: string;
378
+ };
379
+ response: {
380
+ found: boolean;
381
+ };
382
+ }
383
+
384
+ export interface IReq_Cloudly_Coreflow_DeploymentWorkspaceRm
385
+ extends plugins.typedrequestInterfaces.implementsTR<
386
+ plugins.typedrequestInterfaces.ITypedRequest,
387
+ IReq_Cloudly_Coreflow_DeploymentWorkspaceRm
388
+ > {
389
+ method: 'coreflowDeploymentWorkspaceRm';
390
+ request: {
391
+ deploymentId: string;
392
+ path: string;
393
+ recursive?: boolean;
394
+ };
395
+ response: {
396
+ found: boolean;
397
+ };
398
+ }
399
+
400
+ export interface IReq_Cloudly_Coreflow_DeploymentWorkspaceExists
401
+ extends plugins.typedrequestInterfaces.implementsTR<
402
+ plugins.typedrequestInterfaces.ITypedRequest,
403
+ IReq_Cloudly_Coreflow_DeploymentWorkspaceExists
404
+ > {
405
+ method: 'coreflowDeploymentWorkspaceExists';
406
+ request: {
407
+ deploymentId: string;
408
+ path: string;
409
+ };
410
+ response: {
411
+ found: boolean;
412
+ exists?: boolean;
413
+ };
414
+ }
415
+
416
+ export interface IReq_Cloudly_Coreflow_DeploymentWorkspaceExec
417
+ extends plugins.typedrequestInterfaces.implementsTR<
418
+ plugins.typedrequestInterfaces.ITypedRequest,
419
+ IReq_Cloudly_Coreflow_DeploymentWorkspaceExec
420
+ > {
421
+ method: 'coreflowDeploymentWorkspaceExec';
422
+ request: {
423
+ deploymentId: string;
424
+ command: string;
425
+ args?: string[];
426
+ };
427
+ response: {
428
+ found: boolean;
429
+ stdout?: string;
430
+ stderr?: string;
431
+ exitCode?: number;
432
+ };
433
+ }
@@ -1,6 +1,7 @@
1
1
  import * as plugins from '../plugins.js';
2
2
 
3
3
  import * as adminRequests from './admin.js';
4
+ import * as appCatalogRequests from './appcatalog.js';
4
5
  import * as baremetalRequests from './baremetal.js';
5
6
  import * as baseOsRequests from './baseos.js';
6
7
  import * as backupRequests from './backup.js';
@@ -30,6 +31,7 @@ import * as versionRequests from './version.js';
30
31
 
31
32
  export {
32
33
  adminRequests as admin,
34
+ appCatalogRequests as appcatalog,
33
35
  baremetalRequests as baremetal,
34
36
  baseOsRequests as baseos,
35
37
  backupRequests as backup,
@@ -1,6 +1,7 @@
1
1
  import * as plugins from '../plugins.js';
2
- import type { IClusterNode } from '../data/clusternode.js';
2
+ import type { IClusterNode, IClusterNodeMetrics, ISparkNodeRuntimeInfo } from '../data/clusternode.js';
3
3
  import type { IDeployment } from '../data/deployment.js';
4
+ import type { IIdentity } from '../data/user.js';
4
5
 
5
6
  export interface IRequest_Any_Cloudly_GetNodeConfig {
6
7
  method: 'getNodeConfig';
@@ -30,4 +31,42 @@ export interface IRequest_Any_Cloudly_GetNodeDeployments {
30
31
  response: {
31
32
  deployments: IDeployment[];
32
33
  };
33
- }
34
+ }
35
+
36
+ export interface IReq_Any_Cloudly_CreateNodeJumpCommand extends plugins.typedrequestInterfaces.implementsTR<
37
+ plugins.typedrequestInterfaces.ITypedRequest,
38
+ IReq_Any_Cloudly_CreateNodeJumpCommand
39
+ > {
40
+ method: 'createNodeJumpCommand';
41
+ request: {
42
+ identity: IIdentity;
43
+ clusterId: string;
44
+ role?: IClusterNode['data']['role'];
45
+ nodeType?: IClusterNode['data']['nodeType'];
46
+ ttlMs?: number;
47
+ };
48
+ response: {
49
+ jumpCode: string;
50
+ jumpUrl: string;
51
+ setupUrl: string;
52
+ command: string;
53
+ expiresAt: number;
54
+ };
55
+ }
56
+
57
+ export interface IRequest_Spark_Cloudly_SendHeartbeat extends plugins.typedrequestInterfaces.implementsTR<
58
+ plugins.typedrequestInterfaces.ITypedRequest,
59
+ IRequest_Spark_Cloudly_SendHeartbeat
60
+ > {
61
+ method: 'sparkNodeHeartbeat';
62
+ request: {
63
+ nodeId: string;
64
+ nodeToken: string;
65
+ metrics: IClusterNodeMetrics;
66
+ runtimeInfo: ISparkNodeRuntimeInfo;
67
+ };
68
+ response: {
69
+ accepted: boolean;
70
+ message?: string;
71
+ };
72
+ }